/* GEOS.H by Marcus Groeber 1992-95 Include file for the PC/GEOS file format 20.06.00: Modified by Ilfak Guilfanov */ #if !defined(_GEOS_H) #define _GEOS_H #pragma pack(push, 1) #define GEOS_TOKENLEN 4 struct GEOStoken { /*** ID for file types/icons */ char str[GEOS_TOKENLEN]; // 4 byte string ushort num; // additional id number (?) }; struct GEOSprotocol { /*** Protocol/version number */ ushort vers; // protocol ushort rev; // sub revision }; struct GEOSrelease { /*** "Release" */ ushort versmaj,versmin; // "release" x.y ushort revmaj,revmin; // value "a-b" behind "release" }; /****************************************************************************** * GEOS standard file header (all file types) * ******************************************************************************/ #define GEOS_LONGNAME 36 // length of filename #define GEOS_INFO 100 // length of user file info #define GEOS_ID 0x53CF45C7 // GEOS file identification "magic" struct GEOSheader { /*** Standard-Dateikof */ int32 ID; // GEOS id magic: C7 45 CF 53 ushort fclass; // 00=applciation, 01=VM file ushort flags; // flags ??? (always seen 0000h) GEOSrelease release; // "release" GEOSprotocol protocol; // protocol/version GEOStoken token; // file type/icon GEOStoken appl; // "token" of creator application char name[GEOS_LONGNAME]; // long filename char info[GEOS_INFO]; // user file info char _copyright[24]; // original files: Copyright notice }; /****************************************************************************** * GEOS program files ("geodes") * ******************************************************************************/ #define GEOS_FNAME 8 // Length of internale filename/ext #define GEOS_FEXT 4 struct GEOSappheader { /*** Additional geode file header */ ushort _attr; // attribute (see below) #define GA_PROCESS 0x8000 #define GA_LIBRARY 0x4000 #define GA_DRIVER 0x2000 #define GA_KEEP_FILE_OPEN 0x1000 #define GA_SYSTEM 0x0800 #define GA_MULTI_LAUNCHABLE 0x0400 #define GA_APPLICATION 0x0200 #define GA_DRIVER_INITIALIZED 0x0100 #define GA_LIBRARY_INITIALIZED 0x0080 #define GA_GEODE_INITIALIZED 0x0040 #define GA_USES_COPROC 0x0020 #define GA_REQUIRES_COPROC 0x0010 #define GA_HAS_GENERAL_CONSUMER_MODE 0x0008 #define GA_ENTRY_POINTS_IN_C 0x0004 ushort _type; // program type (see below) GEOSprotocol kernelprot; // expected kernel protocoll ushort resourceCount; // number of segments ushort importLibraryCount; // number of included libraries ushort exportEntryCount; // number of exported locations ushort stacksize; // default stack size (or udataSize) ushort classptr_ofs; // if application: segment/offset of ??? ushort classptr_seg; ushort tokenres_item; // if application: segment/item of ushort tokenres_seg; // ressource with application token char _x21[2]; // GEOS2 header start here: ushort attr; // attribute ushort type; // program type: 01=application // 02=library // 03=device driver GEOSrelease release; // "release" GEOSprotocol protocol; // protocol/version ushort timestamp; // time stamp (SWAT uniqueness) char name[GEOS_FNAME],ext[GEOS_FEXT]; // internal filename/ext (blank padded) GEOStoken token; // file type/icon char _x3[2]; ushort startofs; // if driver: entry location ushort startseg; // " " ushort initofs; // if library: init location (?) ushort initseg; // " " char _x33[2]; ushort numexp; // number of exports ushort numlib; // number of included libraries char _x4[2]; ushort numseg; // Number of program segments char _x5[6]; }; struct GEOSexplist { /*** Base type of "exported" array */ ushort ofs; // Routine entry location ushort seg; // " " " }; struct GEOSliblist { /*** Base typ of library array */ char name[GEOS_FNAME]; // library name ushort type; // library type: 2000h=driver // 4000h=library GEOSprotocol protocol; // required lib protocol/version }; typedef ushort GEOSseglen; /*** Base type of segment size array */ typedef int32 GEOSsegpos; /*** Base type of segment loc array */ typedef ushort GEOSsegfix; /*** Base type of fixup tab size ary */ typedef ushort GEOSsegflags; /*** Base type of flag array: xxxx xxxx xxxx xxxxb */ #define HF_ZERO_INIT 0x8000 #define HF_LOCK 0x4000 #define HF_NO_ERR 0x2000 #define HF_UI 0x1000 #define HF_READ_ONLY 0x0800 #define HF_OBJECT_RESOURCE 0x0400 #define HF_CODE 0x0200 #define HF_CONFORMING 0x0100 #define HF_FIXED 0x0080 #define HF_SHARABLE 0x0040 #define HF_DISCARDABLE 0x0020 #define HF_SWAPABLE 0x0010 #define HF_LMEM 0x0008 #define HF_DEBUG 0x0004 #define HF_DISCARDED 0x0002 #define HF_SWAPPED 0x0001 struct GEOSfixup { /*** Base typ of segment fixup table */ ushort type; // Type of fixup: // xxxxh // +||| // | |0 = 16/16 pointer to routine # // | |1 = 16 offset to routine # // | |2 = 16 segment of routine # // | |3 = 16 segment // | |4 = 16/16 pointer (seg,ofs!) // | 0 = kernel // | 1 = library // | 2 = program // xx = if library: library ord # ushort ofs; // Offset relative to segment }; #pragma pack(pop) #endif