|
|
#define STF_HASH_BUCKETS 509
#define BUCKET_GROW_RATE 32
typedef struct { UINT Count; UINT Size; UINT Elements[]; } HASHBUCKET, *PHASHBUCKET;
typedef struct _tagTABLEENTRY { //
// Entry string members
//
PCTSTR String; BOOL StringReplaced; BOOL Quoted; BOOL Binary; // If more added, update pFreeTableEntryPtr
//
// Linkage
//
UINT Line; struct _tagTABLEENTRY *Next, *Prev; } TABLEENTRY, *PTABLEENTRY;
typedef struct { PTABLEENTRY FirstCol; // The head of the column list
} TABLELINE, *PTABLELINE;
typedef struct _tagSTFINFLINE { PCTSTR Key; OPTIONAL PCTSTR Data; DWORD LineFlags; struct _tagSTFINFLINE *Next, *Prev; struct _tagSTFINFSECTION *Section; } STFINFLINE, *PSTFINFLINE;
#define LINEFLAG_KEY_QUOTED 0x0001
#define LINEFLAG_ALL_COMMENTS 0x0002
#define LINEFLAG_TRAILING_COMMENTS 0x0004
typedef struct _tagSTFINFSECTION { PCTSTR Name; PSTFINFLINE FirstLine; PSTFINFLINE LastLine; UINT LineCount; struct _tagSTFINFSECTION *Next, *Prev; } STFINFSECTION, *PSTFINFSECTION;
typedef struct { //
// File spec
//
PCTSTR DirSpec;
PCTSTR SourceStfFileSpec; PCTSTR SourceInfFileSpec; PCTSTR DestStfFileSpec; PCTSTR DestInfFileSpec;
HANDLE SourceStfFile; HANDLE SourceInfFile; HANDLE DestStfFile; HANDLE DestInfFile;
HINF SourceInfHandle;
//
// Memory structure of setup table
//
HANDLE FileMapping; // handle for performing file mapping of SourceStfFileSpec
PCSTR FileText; // A pointer to the mapped text
GROWBUFFER Lines; // An array of PTABLELINE pointers
UINT LineCount; // The number of elements in the array
POOLHANDLE ColumnStructPool; // A pool for TABLEENTRY structs
POOLHANDLE ReplacePool; // A pool for TABLEENTRY strings that are replaced
POOLHANDLE TextPool; // A pool for TABLEENTRY strings converted to UNICODE
POOLHANDLE InfPool; // A pool for appended INF data
PHASHBUCKET * HashBuckets; // A pointer to an array of HASKBUCKET structs
UINT MaxObj; // The highest sequencer used for an object line
PSTFINFSECTION FirstInfSection; // The first section of the parsed INF
PSTFINFSECTION LastInfSection; // The last section of the parsed INF
BOOL InfIsUnicode; } SETUPTABLE, *PSETUPTABLE;
#define INSERT_COL_LAST 0xffffffff
#define NO_OFFSET 0xffffffff
#define NO_LENGTH 0xffffffff
#define NO_LINE 0xffffffff
#define INVALID_COL 0xffffffff
#define INSERT_LINE_LAST 0xffffffff
BOOL CreateSetupTable ( IN PCTSTR SourceStfFileSpec, OUT PSETUPTABLE TablePtr );
BOOL WriteSetupTable ( IN PSETUPTABLE TablePtr );
VOID DestroySetupTable ( IN OUT PSETUPTABLE TablePtr );
PTABLEENTRY FindTableEntry ( IN PSETUPTABLE TablePtr, IN PCTSTR FirstColText, IN UINT Col, OUT PUINT Line, OPTIONAL OUT PCTSTR *String OPTIONAL );
PTABLEENTRY GetTableEntry ( IN PSETUPTABLE TablePtr, IN UINT Line, IN UINT Col, OUT PCTSTR *StringPtr OPTIONAL );
PCTSTR GetTableEntryStr ( IN PSETUPTABLE TablePtr, IN PTABLEENTRY TableEntry );
BOOL ReplaceTableEntryStr ( IN OUT PSETUPTABLE TablePtr, IN OUT PTABLEENTRY TableEntryPtr, IN PCTSTR NewString );
BOOL InsertTableEntryStr ( IN OUT PSETUPTABLE TablePtr, IN PTABLEENTRY InsertBeforePtr, IN PCTSTR NewString );
BOOL DeleteTableEntryStr ( IN OUT PSETUPTABLE TablePtr, IN PTABLEENTRY DeleteEntryPtr );
BOOL AppendTableEntryStr ( IN OUT PSETUPTABLE TablePtr, IN UINT Line, IN PCTSTR NewString );
BOOL AppendTableEntry ( IN OUT PSETUPTABLE TablePtr, IN UINT DestLine, IN PTABLEENTRY SrcEntry );
BOOL InsertEmptyLineInTable ( IN OUT PSETUPTABLE TablePtr, IN UINT InsertBeforeLine );
BOOL DeleteLineInTable ( IN OUT PSETUPTABLE TablePtr, IN UINT LineToDelete );
PCTSTR * ParseCommaList ( IN PSETUPTABLE TablePtr, IN PCTSTR CommaListString );
VOID FreeCommaList ( IN PSETUPTABLE TablePtr, IN PCTSTR *ArgList );
PCTSTR GetDestDir ( IN PSETUPTABLE TablePtr, IN UINT Line );
VOID FreeDestDir ( IN PSETUPTABLE TablePtr, IN PCTSTR DestDir );
PSTFINFSECTION StfAddInfSectionToTable ( IN PSETUPTABLE TablePtr, IN PCTSTR SectionName );
PSTFINFLINE StfAddInfLineToTable ( IN PSETUPTABLE TablePtr, IN PSTFINFSECTION SectionPtr, IN PCTSTR Key, OPTIONAL IN PCTSTR Data, IN DWORD LineFlags );
PSTFINFSECTION StfFindInfSectionInTable ( IN PSETUPTABLE TablePtr, IN PCTSTR SectionName );
PSTFINFLINE StfFindLineInInfSection ( IN PSETUPTABLE TablePtr, IN PSTFINFSECTION Section, IN PCTSTR Key );
BOOL StfDeleteLineInInfSection ( IN OUT PSETUPTABLE TablePtr, IN PSTFINFLINE InfLine );
BOOL StfDeleteSectionInInfFile ( IN OUT PSETUPTABLE TablePtr, IN PSTFINFSECTION Section );
UINT StfGetInfSectionLineCount ( IN PSTFINFSECTION Section );
PSTFINFLINE StfGetFirstLineInSectionStruct ( IN PSTFINFSECTION Section );
PSTFINFLINE StfGetNextLineInSection ( IN PSTFINFLINE PrevLine );
PSTFINFLINE StfGetFirstLineInSectionStr ( IN PSETUPTABLE Table, IN PCTSTR Section );
BOOL InfParse_ReadInfIntoTable ( IN OUT PSETUPTABLE TablePtr );
BOOL InfParse_WriteInfToDisk ( IN PSETUPTABLE TablePtr );
|