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 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 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 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 sp„ter 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, 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 natrlich) 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 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 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 bercksichtigt 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 fr 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!