-
-
Notifications
You must be signed in to change notification settings - Fork 36
/
Enums.prg
248 lines (216 loc) · 12.7 KB
/
Enums.prg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
//
// Copyright (c) XSharp B.V. All Rights Reserved.
// Licensed under the Apache License, Version 2.0.
// See License.txt in the project root for license information.
//
BEGIN NAMESPACE XSharp.RDD
/// <summary>DBF Header Codepage numbers.</summary>
ENUM DbfHeaderCodepage INHERIT BYTE
MEMBER CP_DBF_DOS_OLD := 0x00 // MS-DOS previous versions
MEMBER CP_DBF_DOS_US := 0x01 // U.S. MS-DOS
MEMBER CP_DBF_DOS_INTL := 0x02 // International MS-DOS
MEMBER CP_DBF_WIN_ANSI := 0x03 // Windows ANSI
MEMBER CP_DBF_MAC_STANDARD := 0x04 // Standard Macintosh
MEMBER CP_DBF_DOS_EEUROPEAN := 0x64 // Eastern European MS-DOS
MEMBER CP_DBF_DOS_RUSSIAN := 0x65 // Russian MS-DOS
MEMBER CP_DBF_DOS_NORDIC := 0x66 // Nordic MS-DOS
MEMBER CP_DBF_DOS_ICELANDIC := 0x67 // Icelandic MS-DOS
MEMBER CP_DBF_DOS_KAMENICKY := 0x68 // Kamenicky (Czech) MS-DOS (1)
MEMBER CP_DBF_DOS_MAZOVIA := 0x69 // Mazovia (Polish) MS-DOS (1)
MEMBER CP_DBF_DOS_GREEK := 0x6A // Greek MS-DOS (437G) (1)
MEMBER CP_DBF_DOS_TURKISH := 0x6B // Turkish MS-DOS
MEMBER CP_DBF_DOS_CANADIAN := 0x6C // Canadian MS-DOS
MEMBER CP_DBF_WIN_CHINESE_1 := 0x78 // Chinese (Hong Kong SAR, Taiwan) Windows CP 950
MEMBER CP_DBF_WIN_KOREAN := 0x79 // Korean Windows CP 949
MEMBER CP_DBF_WIN_CHINESE_2 := 0x7A // Chinese (PRC, Singapore) Windows CP 936
MEMBER CP_DBF_WIN_JAPANESE := 0x7B // Japanese Windows CP 932
MEMBER CP_DBF_WIN_THAI := 0x7C // Thai Windows CP 874
MEMBER CP_DBF_WIN_HEBREW := 0x7D // Hebrew Windows CP 1255
MEMBER CP_DBF_WIN_ARABIC := 0x7E // Arabic Windows CP 1256
MEMBER CP_DBF_WIN_EEUROPEAN := 0xC8 // Eastern European Windows
MEMBER CP_DBF_WIN_RUSSIAN := 0xC9 // Russian Windows
MEMBER CP_DBF_WIN_GREEK := 0xCB // Greek Windows
MEMBER CP_DBF_WIN_TURKISH := 0xCA // Turkish Windows
MEMBER CP_DBF_MAC_RUSSIAN := 0x96 // Russian Macintosh (1)
MEMBER CP_DBF_MAC_EEUROPEAN := 0x97 // Macintosh EE
MEMBER CP_DBF_MAC_GREEK := 0x98 // Greek Macintosh
END ENUM
//
/// <summary>OS Codepages as used in DBF files.</summary>
ENUM OsCodepage
MEMBER CP_INI_DOS_US := 437 // U.S. MS-DOS
MEMBER CP_INI_DOS_MAZOVIA := 620 // Mazovia (Polish) MS-DOS (1)
MEMBER CP_INI_DOS_GREEK := 737 // Greek MS-DOS (1)
MEMBER CP_INI_DOS_INTL := 850 // International MS-DOS
MEMBER CP_INI_DOS_EEUROPEAN := 852 // Eastern European MS-DOS
MEMBER CP_INI_DOS_TURKISH := 857 // Turkish MS-DOS
MEMBER CP_INI_DOS_ICELANDIC := 861 // Icelandic MS-DOS
MEMBER CP_INI_DOS_CANADIAN := 863 // Canadian MS-DOS
MEMBER CP_INI_DOS_NORDIC := 865 // Nordic MS-DOS
MEMBER CP_INI_DOS_RUSSIAN := 866 // Russian MS-DOS
MEMBER CP_INI_DOS_KAMENICKY := 895 // Kamenicky (Czech) MS-DOS (1)
MEMBER CP_INI_WIN_THAI := 874 // Thai Windows
MEMBER CP_INI_WIN_JAPANESE := 932 // Japanese Windows
MEMBER CP_INI_WIN_CHINESE1 := 936 // Chinese (PRC, Singapore) Windows
MEMBER CP_INI_WIN_KOREAN := 949 // Korean Windows
MEMBER CP_INI_WIN_CHINESE2 := 950 // Chinese (Hong Kong SAR, Taiwan) Windows
MEMBER CP_INI_WIN_EEUROPEAN := 1250 // Eastern European Windows
MEMBER CP_INI_WIN_RUSSIAN := 1251 // Russian Windows
MEMBER CP_INI_WIN_ANSI := 1252 // Windows ANSI
MEMBER CP_INI_WIN_GREEK := 1253 // Greek Windows
MEMBER CP_INI_WIN_TURKISH := 1254 // Turkish Windows
MEMBER CP_INI_WIN_HEBREW := 1255 // Hebrew Windows
MEMBER CP_INI_WIN_ARABIC := 1256 // Arabic Windows
MEMBER CP_INI_MAC_STANDARD := 10000 // Standard Macintosh
MEMBER CP_INI_MAC_GREEK := 10006 // Greek Macintosh
MEMBER CP_INI_MAC_RUSSIAN := 10007 // Russian Macintosh (1)
MEMBER CP_INI_MAC_EEUROPEAN := 10029 // Macintosh EE
END ENUM
/// <summary>DBF Locking model.</summary>
ENUM DbfLockingModel
MEMBER Clipper52 // Clipper 5.2 locking scheme
MEMBER Clipper53 // Clipper 5.3 locking scheme
MEMBER FoxPro // Visual FoxPro locking scheme
MEMBER FoxProExt // Visual FoxPro locking scheme
MEMBER Clipper53Ext // Clipper 5.3 with Files up to 4GB
MEMBER Harbour64 // Locking scheme for files > 4GB
MEMBER VoAnsi // VO Locking scheme for Ansi DBF files
END ENUM
/// <summary>DBF Table flags.</summary>
[Flags];
ENUM DBFTableFlags AS BYTE
MEMBER None := 0
MEMBER HasStructuralCDX := 1
MEMBER HasMemoField := 2
MEMBER IsDBC := 4
MEMBER IsOLE := 128
END ENUM
/// <summary>DBF File Versions.</summary>
ENUM DBFVersion AS BYTE
MEMBER FoxBase := 0x02
MEMBER FoxBaseDBase3NoMemo := 0x03
MEMBER dBase4 := 0x04
MEMBER dBase5 := 0x05
MEMBER SixEncrypted := 0x06
MEMBER VO := 0x07
MEMBER Flagship := 0x13
MEMBER Flagship248 := 0x23
MEMBER VisualFoxPro := 0x30
MEMBER VisualFoxProAutoIncrement:=0x31
MEMBER VisualFoxProVarChar := 0x32
MEMBER Flagship248WithDBV := 0x33
MEMBER dBase4SQLTableNoMemo := 0x43
MEMBER dBase4SQLSystemNoMemo:= 0x63
MEMBER dBase4WithMemo_ := 0x7b
MEMBER FoxBaseDBase3WithMemo:= 0x83
MEMBER SixEncryptedMemoDBT := 0x86
MEMBER VOWithMemo := 0x87
MEMBER dBase4WithMemo := 0x8b
MEMBER dBase4SQLTableWithMemo:=0xcb
MEMBER ClipperSixWithSMT := 0xe5
MEMBER SixEncryptedMemoSMT := 0xe6
MEMBER FoxPro2WithMemo := 0xf5
MEMBER SixEncryptedMemoFPT := 0xf6
MEMBER FoxBASE_ := 0xfb
MEMBER Unknown:=0
END ENUM
/// <exclude/>
STATIC CLASS CodePageExtensions
STATIC METHOD UsesFlags(SELF version AS DBFVersion) AS LOGIC
SWITCH version
CASE DBFVersion.VisualFoxPro
CASE DBFVersion.VisualFoxProAutoIncrement
CASE DBFVersion.VisualFoxProVarChar
RETURN TRUE
END SWITCH
RETURN FALSE
STATIC METHOD ToCodePage(SELF headerCodePage AS DbfHeaderCodepage) AS OsCodepage
SWITCH headerCodePage
CASE DbfHeaderCodepage.CP_DBF_DOS_US ; RETURN OsCodepage.CP_INI_DOS_US
CASE DbfHeaderCodepage.CP_DBF_DOS_MAZOVIA ; RETURN OsCodepage.CP_INI_DOS_MAZOVIA
CASE DbfHeaderCodepage.CP_DBF_DOS_GREEK ; RETURN OsCodepage.CP_INI_DOS_GREEK
CASE DbfHeaderCodepage.CP_DBF_DOS_INTL ; RETURN OsCodepage.CP_INI_DOS_INTL
CASE DbfHeaderCodepage.CP_DBF_DOS_EEUROPEAN ; RETURN OsCodepage.CP_INI_DOS_EEUROPEAN
CASE DbfHeaderCodepage.CP_DBF_DOS_ICELANDIC ; RETURN OsCodepage.CP_INI_DOS_ICELANDIC
CASE DbfHeaderCodepage.CP_DBF_DOS_NORDIC ; RETURN OsCodepage.CP_INI_DOS_NORDIC
CASE DbfHeaderCodepage.CP_DBF_DOS_RUSSIAN ; RETURN OsCodepage.CP_INI_DOS_RUSSIAN
CASE DbfHeaderCodepage.CP_DBF_DOS_KAMENICKY ; RETURN OsCodepage.CP_INI_DOS_KAMENICKY
CASE DbfHeaderCodepage.CP_DBF_DOS_TURKISH ; RETURN OsCodepage.CP_INI_DOS_TURKISH
CASE DbfHeaderCodepage.CP_DBF_DOS_CANADIAN ; RETURN OsCodepage.CP_INI_DOS_CANADIAN
CASE DbfHeaderCodepage.CP_DBF_WIN_THAI ; RETURN OsCodepage.CP_INI_WIN_THAI
CASE DbfHeaderCodepage.CP_DBF_WIN_JAPANESE ; RETURN OsCodepage.CP_INI_WIN_JAPANESE
CASE DbfHeaderCodepage.CP_DBF_WIN_CHINESE_1 ; RETURN OsCodepage.CP_INI_WIN_CHINESE1
CASE DbfHeaderCodepage.CP_DBF_WIN_KOREAN ; RETURN OsCodepage.CP_INI_WIN_KOREAN
CASE DbfHeaderCodepage.CP_DBF_WIN_CHINESE_2 ; RETURN OsCodepage.CP_INI_WIN_CHINESE2
CASE DbfHeaderCodepage.CP_DBF_WIN_EEUROPEAN ; RETURN OsCodepage.CP_INI_WIN_EEUROPEAN
CASE DbfHeaderCodepage.CP_DBF_WIN_RUSSIAN ; RETURN OsCodepage.CP_INI_WIN_RUSSIAN
CASE DbfHeaderCodepage.CP_DBF_WIN_ANSI ; RETURN OsCodepage.CP_INI_WIN_ANSI
CASE DbfHeaderCodepage.CP_DBF_WIN_GREEK ; RETURN OsCodepage.CP_INI_WIN_GREEK
CASE DbfHeaderCodepage.CP_DBF_WIN_TURKISH ; RETURN OsCodepage.CP_INI_WIN_TURKISH
CASE DbfHeaderCodepage.CP_DBF_WIN_HEBREW ; RETURN OsCodepage.CP_INI_WIN_HEBREW
CASE DbfHeaderCodepage.CP_DBF_WIN_ARABIC ; RETURN OsCodepage.CP_INI_WIN_ARABIC
CASE DbfHeaderCodepage.CP_DBF_MAC_STANDARD ; RETURN OsCodepage.CP_INI_MAC_STANDARD
CASE DbfHeaderCodepage.CP_DBF_MAC_GREEK ; RETURN OsCodepage.CP_INI_MAC_GREEK
CASE DbfHeaderCodepage.CP_DBF_MAC_RUSSIAN ; RETURN OsCodepage.CP_INI_MAC_RUSSIAN
CASE DbfHeaderCodepage.CP_DBF_MAC_EEUROPEAN ; RETURN OsCodepage.CP_INI_MAC_EEUROPEAN
OTHERWISE
// this is what VO does and Vulcan.
// need to check what FoxPro and Xbase++ do.
RETURN (OsCodepage) RuntimeState.DosCodePage
END SWITCH
STATIC METHOD ToHeaderCodePage(SELF codePage AS OsCodepage) AS DbfHeaderCodepage
SWITCH codePage
CASE OsCodepage.CP_INI_DOS_US ; RETURN DbfHeaderCodepage.CP_DBF_DOS_US
CASE OsCodepage.CP_INI_DOS_MAZOVIA ; RETURN DbfHeaderCodepage.CP_DBF_DOS_MAZOVIA
CASE OsCodepage.CP_INI_DOS_GREEK ; RETURN DbfHeaderCodepage.CP_DBF_DOS_GREEK
CASE OsCodepage.CP_INI_DOS_INTL ; RETURN DbfHeaderCodepage.CP_DBF_DOS_INTL
CASE OsCodepage.CP_INI_DOS_EEUROPEAN; RETURN DbfHeaderCodepage.CP_DBF_DOS_EEUROPEAN
CASE OsCodepage.CP_INI_DOS_ICELANDIC; RETURN DbfHeaderCodepage.CP_DBF_DOS_ICELANDIC
CASE OsCodepage.CP_INI_DOS_NORDIC ; RETURN DbfHeaderCodepage.CP_DBF_DOS_NORDIC
CASE OsCodepage.CP_INI_DOS_RUSSIAN ; RETURN DbfHeaderCodepage.CP_DBF_DOS_RUSSIAN
CASE OsCodepage.CP_INI_DOS_KAMENICKY; RETURN DbfHeaderCodepage.CP_DBF_DOS_KAMENICKY
CASE OsCodepage.CP_INI_DOS_TURKISH ; RETURN DbfHeaderCodepage.CP_DBF_DOS_TURKISH
CASE OsCodepage.CP_INI_DOS_CANADIAN ; RETURN DbfHeaderCodepage.CP_DBF_DOS_CANADIAN
CASE OsCodepage.CP_INI_WIN_EEUROPEAN; RETURN DbfHeaderCodepage.CP_DBF_WIN_EEUROPEAN
CASE OsCodepage.CP_INI_WIN_RUSSIAN ; RETURN DbfHeaderCodepage.CP_DBF_WIN_RUSSIAN
CASE OsCodepage.CP_INI_WIN_ANSI ; RETURN DbfHeaderCodepage.CP_DBF_WIN_ANSI
CASE OsCodepage.CP_INI_WIN_GREEK ; RETURN DbfHeaderCodepage.CP_DBF_WIN_GREEK
CASE OsCodepage.CP_INI_WIN_TURKISH ; RETURN DbfHeaderCodepage.CP_DBF_WIN_TURKISH
CASE OsCodepage.CP_INI_MAC_STANDARD ; RETURN DbfHeaderCodepage.CP_DBF_MAC_STANDARD
CASE OsCodepage.CP_INI_MAC_GREEK ; RETURN DbfHeaderCodepage.CP_DBF_MAC_GREEK
CASE OsCodepage.CP_INI_MAC_RUSSIAN ; RETURN DbfHeaderCodepage.CP_DBF_MAC_RUSSIAN
CASE OsCodepage.CP_INI_MAC_EEUROPEAN; RETURN DbfHeaderCodepage.CP_DBF_MAC_EEUROPEAN
OTHERWISE
RETURN DbfHeaderCodepage.CP_DBF_DOS_US
END SWITCH
STATIC METHOD IsAnsi (SELF codePage AS DbfHeaderCodepage) AS LOGIC
SWITCH codePage
CASE DbfHeaderCodepage.CP_DBF_WIN_EEUROPEAN
CASE DbfHeaderCodepage.CP_DBF_WIN_RUSSIAN
CASE DbfHeaderCodepage.CP_DBF_WIN_ANSI
CASE DbfHeaderCodepage.CP_DBF_WIN_GREEK
CASE DbfHeaderCodepage.CP_DBF_WIN_TURKISH
RETURN TRUE
CASE DbfHeaderCodepage.CP_DBF_DOS_OLD // 0
RETURN SetAnsi()
END SWITCH
RETURN FALSE
STATIC METHOD IsVfp (SELF version as DBFVersion) AS LOGIC
SWITCH version
CASE DBFVersion.VisualFoxPro
CASE DBFVersion.VisualFoxProAutoIncrement
CASE DBFVersion.VisualFoxProVarChar
RETURN TRUE
END SWITCH
RETURN FALSE
STATIC METHOD IsSixEncrypted(SELF version as DBFVersion) AS LOGIC
SWITCH version
CASE DBFVersion.SixEncrypted
CASE DBFVersion.SixEncryptedMemoDBT
CASE DBFVersion.SixEncryptedMemoSMT
CASE DBFVersion.SixEncryptedMemoFPT
RETURN TRUE
END SWITCH
RETURN FALSE
END CLASS
END NAMESPACE