home *** CD-ROM | disk | FTP | other *** search
- 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, fällt einem auf, daß dieses Produkt hoch aktuell ist
- und nur darauf wartet überarbeitet zu werden. Es handelt sich hierbei
- um ein einfaches AES-Binding für (fast) jeden C-Compiler. Doch wo ist
- der Unterschied zu anderen AES-Bindings? Man kann es sehr kurz fassen:
- Es ist einfach kürzer (um es kurz zu fassen). Weiterhin läßt 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 Veränderungen genau zu
- dokumentieren!
-
- Folgende Dateien gehören zum Paket und müssen 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 natürlich 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 unterstützen.
- Im Assemblerteil muß man vorher noch einen Schalter setzen. Dieser
- bestimmt wie die Parameterübergabe aussieht. In Turbo-C wird der AESPB
- in A0 übergeben bei den meisten anderen Comilern dürfte 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 später included werden muß. Die Datei
- SMALLAES.O (oder .LIB) muß natürlich bei den entsprechenden Pro-
- grammen dann dazugelinkt werden.
-
-
- Die eigentliche Dokumentation
- -----------------------------
- Alle AES-Aufrufe werden über eine einzige Funktion gefahren, nämlich
-
- 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'-Einträge, dann die
- 'addr_in', danach die 'int_out's (wichtig: die Adresse der ent-
- sprechenden Variablen natürlich) und zu guter Letzt die 'addr_out's,
- die jedoch nur bei rsrc_gaddr() Verwendung finden. Wird eine Para-
- metergruppe nicht benutzt, so läßt 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
- ursprünglichen in der Weise ab, daß hier vier Werte pro Funktion
- berücksichtigt wurden. Leider ist das für rsrc_gaddr() notwendig, da
- es hier auch einen Rückgabeparameter in 'addr_out' gibt.
- Wie man sieht kann man über eine einfache Änderung im C-Source und ein
- Hinzufügen eines '#defines' neue Funktionen berücksichtigen. Bei allen
- anderen (mir bekannten) AES-Bindings fängt 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 können. 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 berücksichtigt und erstere auskommentiert.
-
- Changes
- =======
-
- V1.2
- ----
- - Das Binding wurde um die neuen AES-Funktionen des Falcon- und
- des MultiTOS erweitert.
-
-
- Schlußwort
- ==========
- Alle die nicht glauben wollen, daß das funktioniert, muß ich leider
- enttäuschen, 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 für Sozobon-C gebastelt worden und ist auch auf
- einer Maxon PD-Diskette enthalten.
-
-
- Meine Adresse ...
-
- Oliver Scheel
- Rothehausstr. 28
- W-5000 Köln 30
-
- E-Mail: MausNet: Oliver Scheel @ K2
- Net: Oliver_Scheel@k2.maus.de
-
- Die Adresse kann sich zum September '93 hin ändern!
-
-