bfea30f81bd7200591e475c5f2b35c9e44a60090
[reactos.git] / sdk / tools / cabman / dfp.h
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS cabinet manager
4 * FILE: tools/cabman/dfp.h
5 * PURPOSE: Directive file parser header
6 */
7
8 #pragma once
9
10 #include "cabinet.h"
11
12 typedef struct _CABINET_NAME
13 {
14 struct _CABINET_NAME *Next;
15 ULONG DiskNumber;
16 char Name[128];
17 } CABINET_NAME, *PCABINET_NAME;
18
19 typedef struct _DISK_NUMBER
20 {
21 struct _DISK_NUMBER *Next;
22 ULONG DiskNumber;
23 ULONG Number;
24 } DISK_NUMBER, *PDISK_NUMBER;
25
26 typedef enum
27 {
28 TokenUnknown,
29 TokenInteger,
30 TokenIdentifier,
31 TokenString,
32 TokenSpace,
33 TokenSemi,
34 TokenEqual,
35 TokenPeriod,
36 TokenBackslash,
37 TokenEnd,
38 } DFP_TOKEN;
39
40
41 typedef enum
42 {
43 stCabinetName,
44 stCabinetNameTemplate,
45 stDiskLabel,
46 stDiskLabelTemplate,
47 stMaxDiskSize,
48 stInfFileName
49 } SETTYPE;
50
51
52 typedef enum
53 {
54 ntDisk,
55 ntCabinet,
56 ntFolder,
57 } NEWTYPE;
58
59
60 /* Classes */
61
62 class CDFParser : public CCabinet
63 {
64 public:
65 CDFParser();
66 virtual ~CDFParser();
67 ULONG Load(char* FileName);
68 ULONG Parse();
69 void SetFileRelativePath(char* Path);
70 bool InfFileOnly;
71 bool DontGenerateInf;
72 char FileRelativePath[300];
73 private:
74 /* Event handlers */
75 virtual bool OnDiskLabel(ULONG Number, char* Label);
76 virtual bool OnCabinetName(ULONG Number, char* Name);
77
78 void WriteInfLine(char* InfLine);
79 bool SetDiskName(PCABINET_NAME *List, ULONG Number, char* String);
80 bool GetDiskName(PCABINET_NAME *List, ULONG Number, char* String);
81 bool SetDiskNumber(PDISK_NUMBER *List, ULONG Number, ULONG Value);
82 bool GetDiskNumber(PDISK_NUMBER *List, ULONG Number, PULONG Value);
83 bool DoDiskLabel(ULONG Number, char* Label);
84 void DoDiskLabelTemplate(char* Template);
85 bool DoCabinetName(ULONG Number, char* Name);
86 void DoCabinetNameTemplate(char* Template);
87 void DoInfFileName(char* InfFileName);
88 ULONG DoMaxDiskSize(bool NumberValid, ULONG Number);
89 ULONG SetupNewDisk();
90 ULONG PerformSetCommand();
91 ULONG PerformNewCommand();
92 ULONG PerformInfBeginCommand();
93 ULONG PerformInfEndCommand();
94 ULONG PerformCommand();
95 ULONG PerformFileCopy();
96 void SkipSpaces();
97 bool IsNextToken(DFP_TOKEN Token, bool NoSpaces);
98 bool ReadLine();
99 void NextToken();
100 /* Parsing */
101 bool FileLoaded;
102 FILEHANDLE FileHandle;
103 char* FileBuffer;
104 ULONG FileBufferSize;
105 ULONG CurrentOffset;
106 char Line[PATH_MAX + 6]; /* "PATH" xEOL */
107 ULONG LineLength;
108 ULONG CurrentLine;
109 ULONG CurrentChar;
110 /* Token */
111 DFP_TOKEN CurrentToken;
112 ULONG CurrentInteger;
113 char CurrentString[256];
114
115 /* State */
116 bool CabinetCreated;
117 bool DiskCreated;
118 bool FolderCreated;
119 /* Standard directive variable */
120 bool Cabinet;
121 ULONG CabinetFileCountThreshold;
122 PCABINET_NAME CabinetName;
123 bool CabinetNameTemplateSet;
124 char CabinetNameTemplate[128];
125 bool InfFileNameSet;
126 char InfFileName[256];
127 bool Compress;
128 ULONG CompressionType;
129 PCABINET_NAME DiskLabel;
130 bool DiskLabelTemplateSet;
131 char DiskLabelTemplate[128];
132 ULONG FolderFileCountThreshold;
133 ULONG FolderSizeThreshold;
134 ULONG MaxCabinetSize;
135 ULONG MaxDiskFileCount;
136 PDISK_NUMBER MaxDiskSize;
137 bool MaxDiskSizeAllSet;
138 ULONG MaxDiskSizeAll;
139 ULONG ReservePerCabinetSize;
140 ULONG ReservePerDataBlockSize;
141 ULONG ReservePerFolderSize;
142 char SourceDir[256];
143 FILEHANDLE InfFileHandle;
144 bool InfModeEnabled;
145 };
146
147 /* EOF */