#ifndef _PXINTERNAL_H #define _PXINTERNAL_H /***************************************************************** * Paradox file structure headers * * (c)2000 Richard Odekerken * * * * Based on information from "The Paradox File Structure" by * * Randy Beck (http://ourworld.compuserve.com/homepages/bex/) * *****************************************************************/ typedef unsigned char PXBYTE; typedef signed short int PXINTEGER; typedef unsigned short int PXWORD; typedef signed long int PXLONGINT; typedef unsigned char PXCHAR; typedef void *PXPOINTER; #pragma pack(1) typedef struct _pxheader { PXINTEGER recordSize; PXINTEGER headerSize; PXBYTE fileType; PXBYTE maxTableSize; PXLONGINT numRecords; PXWORD nextBlock; PXWORD fileBlocks; PXWORD firstBlock; PXWORD lastBlock; PXWORD unknown000; PXBYTE modifiedFlags1; PXBYTE indexFieldNumber; PXPOINTER primaryIndexWorkspace; PXPOINTER unknown001; PXBYTE unknown002[3]; PXINTEGER numFields; PXINTEGER primaryKeyFields; PXLONGINT encryption1; PXBYTE sortOrder; PXBYTE modifiedFlags2; PXBYTE unknown003[2]; PXBYTE changeCount1; PXBYTE changeCount2; PXBYTE unknown004; PXPOINTER tableNamePtrPtr; PXPOINTER fldInfoPtr; PXBYTE writeProtected; PXBYTE fileVersionID; PXWORD maxBlocks; PXBYTE unknown005; PXBYTE auxPasswords; PXBYTE unknown006[2]; PXPOINTER cryptInfoStartPtr; PXPOINTER cryptInfoEndPtr; PXBYTE unknown007; PXLONGINT autoInc; PXBYTE unknown008[2]; PXBYTE indexUpdateRequired; PXBYTE unknown009[5]; PXBYTE refIntegrity; PXBYTE unknown010[2]; } PXHEADER; /* Paradox 4+ Data File Header -- offsets 0058 to 0077 =========================== This part of the description applies only to .DB data files and .Xnn index files for Paradox versions 4.0 and later. */ typedef struct _px4header { PXINTEGER unknown011; PXINTEGER unknown012; PXLONGINT encryption2; PXLONGINT fileUpdateTime; PXINTEGER hiFieldID; PXINTEGER hiFieldIDinfo; PXINTEGER sometimesNumFields; PXINTEGER dosGlobalCodePage; PXBYTE unknown013[4]; PXINTEGER changeCount4; PXBYTE unknown014[6]; } PX4HEADER; typedef struct _pxblockheader { PXWORD nextBlock; PXWORD blockNumber; PXINTEGER addDataSize; } PXBLOCKHEADER; /* This section begins where the previous section left off: offset ============================================================================== | 0058 Paradox tables version 3.0 and 3.5 | | 0058 Paradox .PX and .Ynn index files (any listed version) | | 0078 Paradox tables version 4.0 and above | | 0078 Paradox .Xnn index files version 4.0 and above | ============================================================================== */ static char *pcVersions[] = { "Unknown", "Unknown", "Unknown", "3.0", "3.5", "4.x", "4.x", "4.x", "4.x", "4.x", "5.x", "5.x", "7.x" }; typedef struct _fldInfoRec { PXBYTE fType; PXBYTE fSize; } PXFLDINFOREC; static char *pcPxFldTypes[] = { "Unknown", "Alpha", "Date", "Short Int", "Long Int", "Currency", "Number", "07 Unknown", "08 Unknown", "Logical", "0A Unknown", "0B Unknown", "Memo Blob", "Binary Large Object", "Formatted Memo Blob", "OLE", "Graphic Blob", "0x11 Unknown", "0x12 Unknown", "0x13 Unknown", "Time", "Timestamp", "Autoincrement", "BCD", "Bytes" }; static char pcPxFldTypesShort[] = { "?ADSI$N??L??MBFOG???T@+#Y" }; #define PXTYPE_ALPHA 0x01 #define PXTYPE_DATE 0x02 #define PXTYPE_SHORTINT 0x03 #define PXTYPE_LONGINT 0x04 #define PXTYPE_CURRENCY 0x05 #define PXTYPE_NUMBER 0x06 #define PXTYPE_LOGICAL 0x09 #define PXTYPE_MEMOBLOB 0x0c #define PXTYPE_BLOB 0x0d #define PXTYPE_FMEMOBLOB 0x0e #define PXTYPE_OLE 0x0f #define PXTYPE_GRAPHBLOB 0x10 #define PXTYPE_TIME 0x14 #define PXTYPE_TIMESTAMP 0x15 #define PXTYPE_AUTOINC 0x16 #define PXTYPE_BCD 0x17 #define PXTYPE_BYTES 0x18 #endif