#ifndef __SYMBOL__ #define __SYMBOL__ #include #include #define SYMBOL_COOKIE 0x53594D42L /* Cookie-Jar-Name "SYMB" */ #define DATA_MASK 0x80 /* Maske fr Bit 7 */ #define TEXT_MASK 0x40 /* Maske fr Bit 6 */ #define BSS_MASK 0x20 /* Maske fr Bit 5 */ #define SIZE_MASK 0x1F /* Maske fr Bit 4-0 */ #define SYSTEM_MASK (DATA_MASK + TEXT_MASK + BSS_MASK) /*********************************************/ /* Diese Struktur existiert fr jedes Symbol */ /*********************************************/ typedef struct SYMBOL { LONG Value; /* Wert des Symbols */ BYTE Type; /* Type-Byte / Gren-Byte */ BYTE Name []; /* Symbolname (0-terminiert) */ } Symbol; /*******************************************************/ /* Diese Struktur wird fr jede Symboltabelle angelegt */ /*******************************************************/ typedef struct SYMBOLHEADER { char ProgramName [15]; /* Programmname (0-terminiert) */ char reserved; WORD SymbolCount; /* Anzahl der Symbole (TEXT, DATA, BSS) */ WORD FirstData; /* Index des ersten DATA-Symbols */ WORD FirstBss; /* Index des ersten BSS-Symbols */ WORD *SymbolValues; /* Zeiger auf die Werte-Offset-Tabelle */ WORD *SymbolNames; /* Zeiger auf die Namen-Offset-Tabelle */ Symbol *SymbolData; /* Zeiger auf die Symboldaten */ LONG FirstAddress; /* TEXT-Segment-Start */ LONG LastAddress; /* BSS-Segment-Start + BSS-Segment-Gre */ BASPAG *Basepage; /* Zeiger auf die Basepage des Programms */ struct SYMBOLHEADER *Next; /* Zeiger auf die nchste Struktur */ } SymbolHeader; /***************************************************************/ /* Auf diese Struktur zeigt der Cookie-Wert des Cookies "SYMB" */ /***************************************************************/ typedef struct SYMBOLCOOKIE { BYTE Version; /* Aktuelle Versionsnummer des Treibers */ BYTE Revision; /* Aktuelle Revisionsnr. des Treibers */ WORD reserved; SymbolHeader *First; /* Zeiger auf die erste Symbol-Struktur */ long (*GetSymbolName) (); /* Zeiger auf die 1. Routine */ long (*GetSymbolValue) (); /* Zeiger auf die 2. Routine */ long (*AddSymbolTable) (); /* Zeiger auf die 3. Routine */ long (*RemoveSymbolTable) (); /* Zeiger auf die 4. Routine */ } SymbolCookie; /*******************************************************/ /* Dies sind die Prototypen der Routinen von SUBROUT.S */ /*******************************************************/ LONG GetSymbolName (SymbolCookie *Start, LONG Address, Symbol **Data, SymbolHeader **Header); LONG GetSymbolValue (SymbolCookie *Start, char *SymbolName, char *ProgramName, Symbol **Data, SymbolHeader **Header); LONG AddSymbolTable (SymbolCookie *Start, char *ProgramPath, BASPAG *Basepage); LONG RemoveSymbolTable (SymbolCookie *Start, char *ProgramName); #endif