GenLibDefs.rexx --------------- AUFRUF GenLibDefs.rexx SRC/A,DEST/A FUNKTION Dieses Rexx-Programm erzeugt aus einer kurzen Konfigurationsdatei die libdefs.h-Include Datei mit Definitionen für den Namen der Library, der Versionsnummer, der Basis etc. EINGABEN SRC/A - Pfad plus Dateiname der Konfigurationsdatei z.B. "libdefs.config". Dieser MUß derzeit IMMER angegeben werden, da im Programm noch kein Default gesetzt wird. DEST/A - Pfad plus Dateiname der zu erzeugenden Include-Datei z.B. "libdefs.h". Dieser MUß derzeit IMMER angegeben werden, da im Programm noch kein Default gesetzt wird. Konfigurationsdatei name - Name der Library inklusive der Endung ".library" z.B. "name example.library" version - Version.Revision der Library, der Punkt und die Revisionsnummer muß derzeit immer mit angegeben werden z.B. "version 37.32". "version 37" wär falsch. date - Optionales Datum in der Form TT.MM.JJ ohne führende Nullen z.B. "15.5.98". Wenn das Datum nicht angegeben wird, wird das aktuelle Datum der Systemuhr verwendet. copyright - Optionaler Copyright-Text. Beispiel siehe unten. BEISPIEL Konfigurationsdatei "libdefs.config" name example.library version 37.32 date 15.5.98 copyright (C)opyright 1996-98 by Andreas R. Kleinert. All rights reserved. Aufruf mit GenLibDefs.rexx libdefs.config libdefs.h Erzeugt die Include-Date "libdefs.h" #ifndef example_H #define example_H /* Automatic generated file, please edit 'libdefs.config' */ #define VERSION 37 #define REVISION 32 #define LIBNAME "example.library" #define LIBID "example 37.32 (15.5.98)" #define COPYRIGHT "(C)opyright 1996-98 by Andreas R. Kleinert. All rights reserved." #define LIBPREFIX #define LIBBASE ExampleBase #define LIBBASETYPE struct ExampleBase #define LIBBASETYPEPTR struct ExampleBase * #endif GenFDCLIBFctTab.rexx -------------------- AUFRUF FILES/A/M,LIBNAME/A,FD/K,CLIB/K,FCTTABLE/K FUNKTION Dieses Rexx-Programm erzeugt folgende Dateien: o FunctionTable.h - Funktionstabelle der Library o /fd/_lib.fd - FD-Datei der Library o /include/clib//_protos.h - Protos-Datei der Library FunctionTable.h --------------- Die Datei "FunctionTable.h" kann im makierten Bereich ediert werden, um die Funktionsoffsets der Funktionen festzulegen. Für einen leeren Offset muß NULL eingesetzt werden. Private Funktionen werden derzeit nicht unterstützt. Der Kommentar, mit den Offsets, wird vom Rexx-Programm bei der Erzeugung der Datei jedesmal neu erzeugt und vom Programm auch beim Einlesen nicht weiter verwendet. /include/clib//_protos.h --------------------------------- Diese Datei kann außerhalb von /* -- start functions -- */ /* -- end functions -- */ frei ediert werden. Wenn sie noch nicht existiert wird ein Standard-Kopf und -Fuß erzeugt. Wenn sie schon existiert wird alles AUßERHALB des markierten Bereiches 1:1 in die neu erzeugte Datei übernommen. EINGABEN - FILES/A/M - Dateinamen der Sourcecodes einer jeden Funktion mit Autodocs(siehe unten). AmigaDOS-Muster werden derzeit nicht unterstützt. - LIBNAME/A - Der Name der Library OHNE die Endung ".library" z.B. "example". - FD/K - Optionaler Pfad(kein Dateiname) für die FD-Datei. Der Dateiname wird immer automatisch aus LIBNAME erzeugt. Default des Pfads ist "/fd/". - CLIB/K - Optionaler Pfad(kein Dateiname) für die Protos-Datei. Der Dateiname wird immer automatisch aus LIBNAME erzeugt. Default des Pfads ist "/include/clib/". - FCTTABLE/K - Optionaler Pfad plus Dateiname der FuntionTable.h- Datei. Default ist "FunctionTable.h". Autodocs: Die Autodocs entsprechen den normalen Autodocs. Bei SYNOPSIS müssen allerdings die Macros aus "Compiler.h" zur Definition der Funktion genommen werden. Der Anfang muß dabei immer folgend aussehen, wobei derzeit nur eine Funktionsdeklaration pro Sourcecode-Datei möglich ist. /****************************************************************************** SHORT Shows a requester NAME */ LIB_FCT3(ULONG, EXF_TestRequest, /* SYNOPSIS */ LIB_FCT(UBYTE, *title_d1, d1), LIB_FCT(UBYTE, *body, d2), LIB_FCT(UBYTE, *gadgets, d3) ) /* FUNCTION [...] Der Lange Kommentar mit den "***" dient als Kennzeichen für den Anfang der Autodocs. NAME */ LIB_FCT3(ULONG, EXF_TestRequest, Hiermit wird die Deklaration eingeleitet. NAME und das Ende des Kommentars sollte man derzeit immer so setzen(das Rexx-Programm ist nicht sehr robust). Das Macro LIB_FCTx(rtype, name) leitet die Deklaration ein. FÜr x ist dabei die Anzahl der Argumente anzugeben(0-15). rtype - Der Rückgabetyp der Funktion name - Der Name der Funktion /* SYNOPSIS */ LIB_FCT(UBYTE, *title_d1, d1), LIB_FCT(UBYTE, *body, d2), LIB_FCT(UBYTE, *gadgets, d3) ) Mit LIB_FCT(type, name, register) werden die einzelnen Argumente definiert. type - Typ des Arguments name - Name des Arguments register - Register (a0-a7, d0-d7) Die allein stehende schließende Klammern MUß derzeit immer einzeln in einer Zeile stehen. Leerzeilen im Bereich zwischen /* SYNOPSIS */ und dieser schließenden Klammer sind derzeit nicht erlaubt. Erstellen einer eigenen Library: -------------------------------- Zur Erstellung einer eigenen Library erzeugt man sich am Besten zunächst folgende Verzeichnisse: MeineLibrary src fd include clib protos inline pragma pragmas In "src" kopiert man sich aus "CLib37x/source/lib_source/" die Dateien - libdefs.config - StartUp.c - LibInit.c - SampleFuncs.c - compiler.h Sowie zum eigenen Compiler passende Beispielmakefile. Dann ediert man "libdefs.config" sowie "LibInit.c"(öffnen der benötigten Libraries) entsprechend sowie gegenfalls das Makefile. Schreibt die Funktionen(als Grundlage kann man "SampleFuncs.h" verwenden) und startet das Makefile. (Beschreibung erweitern).