                     The smaller AES-Binding ...
                     ---------------------------

                             Version 1.2

                             April  1993

                     (c) 1991-93 by Oliver Scheel
                        Freaky Deaky Software

                         (it's Public Domain)


Einleitung
==========
Ja,  ja,  da denkt man an nichts Schlimmes und auf einmal bekommt  man 
Replies  auf ein zwei Jahre altes 'Produkt'.  Doch nach  einer  kurzen 
Retrospektive,  fllt einem auf,  da dieses Produkt hoch aktuell  ist 
und nur darauf wartet berarbeitet zu werden.  Es handelt sich hierbei 
um ein einfaches AES-Binding fr (fast) jeden C-Compiler.  Doch wo ist 
der Unterschied zu anderen AES-Bindings? Man kann es sehr kurz fassen: 
Es ist einfach krzer (um es kurz zu fassen).  Weiterhin lt sich das 
Binding sehr einfach an Erweiterungen anpassen.

Bei diesem AES-Binding handelt es sich um Public Domain Software, d.h. 
Programm  und Sourcetext sind frei kopier und  benutzbar.  Sollte  das 
AES-Binding  in  einem  kommerziellen  Produkt  (includes   Shareware) 
Verwendung finden,  so bitte ich um eine Benachrichtigung, um so einen 
gewissen berblick zu behalten.  Weiterhin sind Vernderungen genau zu 
dokumentieren!

Folgende  Dateien gehren zum Paket und mssen immer zusammen  kopiert 
werden:

     - SMALLAES.C        Der C-Teil des Bindings
     - CRYSTAL.S         Der Assembler-Teil
     - SMALLAES.H        Das *.H File zum Includen
     - SMALLAES.TXT      Diese Dokumentation


Mach hin!
=========

Vorbereitungen
--------------
Zuerst  mu  man natrlich das *.O File bzw.  das  Lib-File  erzeugen. 
Hierzu  compiliert man SMALLAES.C und  assembliert  CRYSTAL.S.  Danach 
werden  beide zu einem einzigen *.O  File  zusammengelinkt,  bzw.  mit 
einem  Library-Manager  zu einer  Library  vereinigt.  Der  C-Compiler 
sollte (besser: mu) variable Argumente untersttzen.
Im  Assemblerteil mu man vorher noch einen  Schalter  setzen.  Dieser 
bestimmt wie die Parameterbergabe aussieht. In Turbo-C wird der AESPB 
in  A0 bergeben bei den meisten anderen Comilern drfte das ber  den 
Stack geschehen.
Das Resultat kommt in den Library-Ordner.  In den Include-Ordner packt 
man noch die Datei SMALLAES.H,  in welcher die wichtigen  Definitionen 
stehen  und  welche dann auch spter included werden  mu.  Die  Datei 
SMALLAES.O  (oder  .LIB)  mu natrlich bei  den  entsprechenden  Pro-
grammen dann dazugelinkt werden.


Die eigentliche Dokumentation
-----------------------------
Alle AES-Aufrufe werden ber eine einzige Funktion gefahren, nmlich

     int aes(function, ...)

wobei   'function'  die  AES-Funktionsnummer  angibt  und  '...'   die 
Parameter.  Bei  den Parametern mu jedoch eine bestimmte  Reihenfolge 
beachtet  werden,   d.h.   man  kann  die  in  der   GEM-Dokumentation 
beschriebenen  Aufrufe  nur  ber bestimmte  '#define's  machen  (s.a. 
SMALLAES.H).  Zuerst  bergibt  man die  'int_in'-Eintrge,  dann  die 
'addr_in',  danach  die  'int_out's (wichtig:  die  Adresse  der  ent-
sprechenden  Variablen natrlich) und zu guter Letzt die  'addr_out's, 
die  jedoch nur bei rsrc_gaddr() Verwendung finden.  Wird  eine  Para-
metergruppe nicht benutzt, so lt man diese ganz einfach aus.

Im  C-Part gibt es noch eine Tabelle,  die einigen  bekannt  vorkommen 
sollte:  'ctrl_cnts'.  Hier  ist  festgelegt  wieviele  Parameter  pro 
Parametergruppe  zu  erwarten  sind.   Die  Tabelle  weicht  von   der 
ursprnglichen  in  der Weise ab,  da hier vier  Werte  pro  Funktion 
bercksichtigt wurden.  Leider ist das fr rsrc_gaddr() notwendig,  da 
es hier auch einen Rckgabeparameter in 'addr_out' gibt.
Wie man sieht kann man ber eine einfache nderung im C-Source und ein 
Hinzufgen eines '#defines' neue Funktionen bercksichtigen. Bei allen 
anderen  (mir bekannten) AES-Bindings fngt dann die  Flickschuhsterei 
an.

Differenzen
-----------
Als  erstes mu ich darauf hinweisen,  da bei diesem AES-Bining  kein 
Typencheck vorgenommen wird,  da es sich ja um '#define's und nicht um 
Prototypen  oder  'inline' (C++) handelt.  Man mu also  selbst  etwas 
aufpassen.
Weiterhin gibt es einige Bindings,  die bei wind_get/set mit variablen 
Argumenten arbeiten (z.B.  Turbo-C),  um einerseits int-Argumente  und 
andererseits  long-Argumente (Adressen) verarbeiten  zu  knnen.  Hier 
mu man dann gegebenfalls mit hiword/loword arbeiten:

/* lo and hi word of a long */
#define loword(x)       (((unsigned int *)&(x))[1])
#define hiword(x)       (((unsigned int *)&(x))[0])

Beim  objc_edit() wird normalerweise der 'index' und die  Adresse  des 
'index' getrennt bergeben.  Einige Bindings brauchen nur die Adresse. 
Ich habe beide Versionen bercksichtigt und erstere auskommentiert.

Changes
=======

V1.2
----
   - Das  Binding  wurde um die neuen AES-Funktionen des  Falcon-  und 
     des MultiTOS erweitert.


Schluwort
==========
Alle die nicht glauben wollen,  da das funktioniert,  mu ich  leider 
enttuschen,  da  dieses Binding in Let 'em Fly!  ab Version 1.13  be-
reits  seine  Verwendung  findet und das Programm  250  Bytes  kleiner 
wurde, obwohl ich nur 25% der AES-Funktionen benutze.
Wem  das  Binding entfernt bekannt vorkommt ...  es war  in  hnlicher 
Form  von  mir  mal fr Sozobon-C gebastelt worden und  ist  auch  auf 
einer Maxon PD-Diskette enthalten.


Meine Adresse ...

Oliver Scheel
Rothehausstr. 28
W-5000 Kln 30

E-Mail:   MausNet:  Oliver Scheel @ K2
          Net:      Oliver_Scheel@k2.maus.de

Die Adresse kann sich zum September '93 hin ndern!

