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