generated from soypat/go-module-template
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtables.go
363 lines (325 loc) · 26.1 KB
/
tables.go
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
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
package fat
import (
_ "embed"
"encoding/binary"
"io/fs"
"unicode"
)
const (
badFilesystemType = "fat: bad filesystem type"
// Characters forbidden from being present in a file name on FAT filesystems.
forbiddenChars = ":+,/\\|;=\"<>[]*?\x7f"
)
const (
modeRead fs.FileMode = 1 << iota
modeWrite
)
type accessmode = uint8
const (
faRead accessmode = 0b01
faWrite accessmode = 0b10
faOpenExisting accessmode = 0
)
const (
faCreateNew accessmode = 1 << (iota + 2)
faCreateAlways
faOpenAlways
faOpenAppend accessmode = 0x30
// Internal use file access:
faSEEKEND = 0x20 // Seek to end of the file on file open
faMODIFIED = 0x40 // File has been modified
faDIRTY = 0x80 // FIL.buf[] needs to be written-back
)
const (
maxu16 = 0xffff
maxu32 uint32 = 0xffff_ffff
negative1_32 = 0xffff_ffff
badLBA = negative1_32
badCluster = negative1_32
mask28bits uint32 = 0x0FFF_FFFF
offsetMBRTable = 446 // Offset of partition table in the MBR.
sizePartition = 16 // Size of a partition table entry.
mskDDEM = 0xE5 // Deleted directory entry mark set to DIR_Name[0]
mskRDDEM = 0x05 // Replacement of the character collides with DDEM
mskLLEF = 0x40 // Last long entry flag in LDIR_Ord
// Additional file attribute bits for internal use
amVOL = 0x08 // Volume label
amLFN = 0x0F // LFN entry
amMASK = 0x3F // Mask of defined bits in FAT
amMASKX = 0x37 // Mask of defined bits in exFAT
// File attribute bits for directory entry (FILINFO.fattrib)
amRDO = 0x01 // Read only
amHID = 0x02 // Hidden
amSYS = 0x04 // System
amDIR = 0x10 // Directory
amARC = 0x20 // Archive
)
const (
nsFLAG = 11 // Index of the name status byte
nsLOSS = 0x01 // Out of 8.3 format
nsLFN = 0x02 // Force to create LFN entry
nsLAST = 0x04 // Last segment
nsBODY = 0x08 // Lower case flag (body)
nsEXT = 0x10 // Lower case flag (ext)
nsDOT = 0x20 // Dot entry
nsNOLFN = 0x40 // Do not find LFN
nsNONAME = 0x80 // Not followed
fsiLeadSig = 0 // FAT32 FSI: Leading signature (DWORD)
fsiStrucSig = 484 // FAT32 FSI: Structure signature (DWORD)
fsiFree_Count = 488 // FAT32 FSI: Number of free clusters (DWORD)
fsiNxt_Free = 492 // FAT32 FSI: Last allocated cluster (DWORD)
bsJmpBoot = 0 // x86 jump instruction (3-byte)
bsOEMName = 3 // OEM name (8-byte)
bpbBytsPerSec = 11 // Sector size [byte] (WORD)
bpbSecPerClus = 13 // Cluster size [sector] (BYTE)
bpbRsvdSecCnt = 14 // Size of reserved area [sector] (WORD)
bpbNumFATs = 16 // Number of FATs (BYTE)
bpbRootEntCnt = 17 // Size of root directory area for FAT [entry] (WORD)
bpbTotSec16 = 19 // Volume size (16-bit) [sector] (WORD)
bpbMedia = 21 // Media descriptor byte (BYTE)
bpbFATSz16 = 22 // FAT size (16-bit) [sector] (WORD)
bpbSecPerTrk = 24 // Number of sectors per track for int13h [sector] (WORD)
bpbNumHeads = 26 // Number of heads for int13h (WORD)
bpbHiddSec = 28 // Volume offset from top of the drive (DWORD)
bpbTotSec32 = 32 // Volume size (32-bit) [sector] (DWORD)
bsDrvNum = 36 // Physical drive number for int13h (BYTE)
bsNTres = 37 // WindowsNT error flag (BYTE)
bsBootSig = 38 // Extended boot signature (BYTE)
bsVolID = 39 // Volume serial number (DWORD)
bsVolLab = 43 // Volume label string (8-byte)
bsFilSysType = 54 // Filesystem type string (8-byte)
bsBootCode = 62 // Boot code (448-byte)
bs55AA = 510 // Signature word (WORD)
bpbFATSz32 = 36 // FAT32: FAT size [sector] (DWORD)
bpbExtFlags32 = 40 // FAT32: Extended flags (WORD)
bpbFSVer32 = 42 // FAT32: Filesystem version (WORD)
bpbRootClus32 = 44 // FAT32: Root directory cluster (DWORD)
bpbFSInfo32 = 48 // FAT32: Offset of FSINFO sector (WORD)
bpbBkBootSec32 = 50 // FAT32: Offset of backup boot sector (WORD)
bsDrvNum32 = 64 // FAT32: Physical drive number for int13h (BYTE)
bsNTres32 = 65 // FAT32: Error flag (BYTE)
bsBootSig32 = 66 // FAT32: Extended boot signature (BYTE)
bsVolID32 = 67 // FAT32: Volume serial number (DWORD)
bsVolLab32 = 71 // FAT32: Volume label string (11-byte)
bsFilSysType32 = 82 // FAT32: Filesystem type string (8-byte)
bsBootCode32 = 90 // FAT32: Boot code (420-byte)
bpbZeroedEx = 11 // exFAT: MBZ field (53-byte)
bpbVolOfsEx = 64 // exFAT: Volume offset from top of the drive [sector] (QWORD)
bpbTotSecEx = 72 // exFAT: Volume size [sector] (QWORD)
bpbFatOfsEx = 80 // exFAT: FAT offset from top of the volume [sector] (DWORD)
bpbFatSzEx = 84 // exFAT: FAT size [sector] (DWORD)
bpbDataOfsEx = 88 // exFAT: Data offset from top of the volume [sector] (DWORD)
bpbNumClusEx = 92 // exFAT: Number of clusters (DWORD)
bpbRootClusEx = 96 // exFAT: Root directory start cluster (DWORD)
bpbVolIDEx = 100 // exFAT: Volume serial number (DWORD)
bpbFSVerEx = 104 // exFAT: Filesystem version (WORD)
bpbVolFlagEx = 106 // exFAT: Volume flags (WORD)
bpbBytsPerSecEx = 108 // exFAT: Log2 of sector size in unit of byte (BYTE)
bpbSecPerClusEx = 109 // exFAT: Log2 of cluster size in unit of sector (BYTE)
bpbNumFATsEx = 110 // exFAT: Number of FATs (BYTE)
bpbDrvNumEx = 111 // exFAT: Physical drive number for int13h (BYTE)
bpbPercInUseEx = 112 // exFAT: Percent in use (BYTE)
bpbRsvdEx = 113 // exFAT: Reserved (7-byte)
bsBootCodeEx = 120 // exFAT: Boot code (390-byte)
)
const (
sizeDirEntry = 32 // Size of a directory entry
maxDIR = 0x200000 // Max size of FAT directory
maxDIREx = 0x10000000 // Max size of exFAT directory
clustMaxFAT12 = 0xFF5 // Max FAT12 clusters (differs from specs, but right for real DOS/Windows behavior)
clustMaxFAT16 = 0xFFF5 // Max FAT16 clusters (differs from specs, but right for real DOS/Windows behavior)
clustMaxFAT32 = 0x0FFFFFF5 // Max FAT32 clusters (not specified, practical limit)
clustMaxExFAT = 0x7FFFFFFD // Max exFAT clusters (differs from specs, implementation limit)
)
// window offsets.
const (
dirNameOff = 0 // Short file name (11-byte)
dirAttrOff = 11 // Attribute (BYTE)
dirNTresOff = 12 // Lower case flag (BYTE)
dirCrtTime10Off = 13 // Created time sub-second (BYTE)
dirCrtTimeOff = 14 // Created time (DWORD)
dirLstAccDateOff = 18 // Last accessed date (WORD)
dirFstClusHIOff = 20 // Higher 16-bit of first cluster (WORD)
dirModTimeOff = 22 // Modified time (DWORD)
dirFstClusLOOff = 26 // Lower 16-bit of first cluster (WORD)
dirFileSizeOff = 28 // File size (DWORD)
ldirOrdOff = 0 // LFN: LFN order and LLE flag (BYTE)
ldirAttrOff = 11 // LFN: LFN attribute (BYTE)
ldirTypeOff = 12 // LFN: Entry type (BYTE)
ldirChksumOff = 13 // LFN: Checksum of the SFN (BYTE)
ldirFstClusLO_Off = 26 // LFN: MBZ field (WORD)
xdirType = 0 // exFAT: Type of exFAT directory entry (BYTE)
xdirNumLabel = 1 // exFAT: Number of volume label characters (BYTE)
xdirLabel = 2 // exFAT: Volume label (11-WORD)
xdirCaseSum = 4 // exFAT: Sum of case conversion table (DWORD)
xdirNumSec = 1 // exFAT: Number of secondary entries (BYTE)
xdirSetSum = 2 // exFAT: Sum of the set of directory entries (WORD)
xdirAttr = 4 // exFAT: File attribute (WORD)
xdirCrtTime = 8 // exFAT: Created time (DWORD)
xdirModTime = 12 // exFAT: Modified time (DWORD)
xdirAccTime = 16 // exFAT: Last accessed time (DWORD)
xdirCrtTime10 = 20 // exFAT: Created time subsecond (BYTE)
xdirModTime10 = 21 // exFAT: Modified time subsecond (BYTE)
xdirCrtTZ = 22 // exFAT: Created timezone (BYTE)
xdirModTZ = 23 // exFAT: Modified timezone (BYTE)
xdirAccTZ = 24 // exFAT: Last accessed timezone (BYTE)
xdirGenFlags = 33 // exFAT: General secondary flags (BYTE)
xdirNumName = 35 // exFAT: Number of file name characters (BYTE)
xdirNameHash = 36 // exFAT: Hash of file name (WORD)
xdirValidFileSize = 40 // exFAT: Valid file size (QWORD)
xdirFstClus = 52 // exFAT: First cluster of the file data (DWORD)
xdirFileSize = 56 // exFAT: File/Directory size (QWORD)
)
// CT*: SBCS up-case tables.
// DC*: DBCS up-case tables.
var (
_tblDC932 = [10]byte{0x81, 0x9F, 0xE0, 0xFC, 0x40, 0x7E, 0x80, 0xFC, 0x00, 0x00}
_tblDC936 = [10]byte{0x81, 0xFE, 0x00, 0x00, 0x40, 0x7E, 0x80, 0xFE, 0x00, 0x00}
_tblDC949 = [10]byte{0x81, 0xFE, 0x00, 0x00, 0x41, 0x5A, 0x61, 0x7A, 0x81, 0xFE}
_tblDC950 = [10]byte{0x81, 0xFE, 0x00, 0x00, 0x40, 0x7E, 0xA1, 0xFE, 0x00, 0x00}
_tblCT437 = [128]byte{0x80, 0x9A, 0x45, 0x41, 0x8E, 0x41, 0x8F, 0x80, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x8E, 0x8F, 0x90, 0x92, 0x92, 0x4F, 0x99, 0x4F, 0x55, 0x55, 0x59, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0x41, 0x49, 0x4F, 0x55, 0xA5, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF}
_tblCT720 = [128]byte{0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF}
_tblCT737 = [128]byte{0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x92, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0xAA, 0x92, 0x93, 0x94, 0x95, 0x96, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0x97, 0xEA, 0xEB, 0xEC, 0xE4, 0xED, 0xEE, 0xEF, 0xF5, 0xF0, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF}
_tblCT771 = [128]byte{0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDC, 0xDE, 0xDE, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xF0, 0xF0, 0xF2, 0xF2, 0xF4, 0xF4, 0xF6, 0xF6, 0xF8, 0xF8, 0xFA, 0xFA, 0xFC, 0xFC, 0xFE, 0xFF}
_tblCT775 = [128]byte{0x80, 0x9A, 0x91, 0xA0, 0x8E, 0x95, 0x8F, 0x80, 0xAD, 0xED, 0x8A, 0x8A, 0xA1, 0x8D, 0x8E, 0x8F, 0x90, 0x92, 0x92, 0xE2, 0x99, 0x95, 0x96, 0x97, 0x97, 0x99, 0x9A, 0x9D, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xE0, 0xA3, 0xA3, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xB5, 0xB6, 0xB7, 0xB8, 0xBD, 0xBE, 0xC6, 0xC7, 0xA5, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE5, 0xE5, 0xE6, 0xE3, 0xE8, 0xE8, 0xEA, 0xEA, 0xEE, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF}
_tblCT850 = [128]byte{0x43, 0x55, 0x45, 0x41, 0x41, 0x41, 0x41, 0x43, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x41, 0x41, 0x45, 0x92, 0x92, 0x4F, 0x4F, 0x4F, 0x55, 0x55, 0x59, 0x4F, 0x55, 0x4F, 0x9C, 0x4F, 0x9E, 0x9F, 0x41, 0x49, 0x4F, 0x55, 0xA5, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0x41, 0x41, 0x41, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0x41, 0x41, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD1, 0xD1, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x49, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0x49, 0xDF, 0x4F, 0xE1, 0x4F, 0x4F, 0x4F, 0x4F, 0xE6, 0xE8, 0xE8, 0x55, 0x55, 0x55, 0x59, 0x59, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF}
_tblCT852 = [128]byte{0x80, 0x9A, 0x90, 0xB6, 0x8E, 0xDE, 0x8F, 0x80, 0x9D, 0xD3, 0x8A, 0x8A, 0xD7, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x91, 0xE2, 0x99, 0x95, 0x95, 0x97, 0x97, 0x99, 0x9A, 0x9B, 0x9B, 0x9D, 0x9E, 0xAC, 0xB5, 0xD6, 0xE0, 0xE9, 0xA4, 0xA4, 0xA6, 0xA6, 0xA8, 0xA8, 0xAA, 0x8D, 0xAC, 0xB8, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBD, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC6, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD1, 0xD1, 0xD2, 0xD3, 0xD2, 0xD5, 0xD6, 0xD7, 0xB7, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE3, 0xD5, 0xE6, 0xE6, 0xE8, 0xE9, 0xE8, 0xEB, 0xED, 0xED, 0xDD, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xEB, 0xFC, 0xFC, 0xFE, 0xFF}
_tblCT855 = [128]byte{0x81, 0x81, 0x83, 0x83, 0x85, 0x85, 0x87, 0x87, 0x89, 0x89, 0x8B, 0x8B, 0x8D, 0x8D, 0x8F, 0x8F, 0x91, 0x91, 0x93, 0x93, 0x95, 0x95, 0x97, 0x97, 0x99, 0x99, 0x9B, 0x9B, 0x9D, 0x9D, 0x9F, 0x9F, 0xA1, 0xA1, 0xA3, 0xA3, 0xA5, 0xA5, 0xA7, 0xA7, 0xA9, 0xA9, 0xAB, 0xAB, 0xAD, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB6, 0xB6, 0xB8, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBE, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC7, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD1, 0xD1, 0xD3, 0xD3, 0xD5, 0xD5, 0xD7, 0xD7, 0xDD, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xE0, 0xDF, 0xE0, 0xE2, 0xE2, 0xE4, 0xE4, 0xE6, 0xE6, 0xE8, 0xE8, 0xEA, 0xEA, 0xEC, 0xEC, 0xEE, 0xEE, 0xEF, 0xF0, 0xF2, 0xF2, 0xF4, 0xF4, 0xF6, 0xF6, 0xF8, 0xF8, 0xFA, 0xFA, 0xFC, 0xFC, 0xFD, 0xFE, 0xFF}
_tblCT857 = [128]byte{0x80, 0x9A, 0x90, 0xB6, 0x8E, 0xB7, 0x8F, 0x80, 0xD2, 0xD3, 0xD4, 0xD8, 0xD7, 0x49, 0x8E, 0x8F, 0x90, 0x92, 0x92, 0xE2, 0x99, 0xE3, 0xEA, 0xEB, 0x98, 0x99, 0x9A, 0x9D, 0x9C, 0x9D, 0x9E, 0x9E, 0xB5, 0xD6, 0xE0, 0xE9, 0xA5, 0xA5, 0xA6, 0xA6, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC7, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x49, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE5, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xDE, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF}
_tblCT860 = [128]byte{0x80, 0x9A, 0x90, 0x8F, 0x8E, 0x91, 0x86, 0x80, 0x89, 0x89, 0x92, 0x8B, 0x8C, 0x98, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x8C, 0x99, 0xA9, 0x96, 0x9D, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0x86, 0x8B, 0x9F, 0x96, 0xA5, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF}
_tblCT861 = [128]byte{0x80, 0x9A, 0x90, 0x41, 0x8E, 0x41, 0x8F, 0x80, 0x45, 0x45, 0x45, 0x8B, 0x8B, 0x8D, 0x8E, 0x8F, 0x90, 0x92, 0x92, 0x4F, 0x99, 0x8D, 0x55, 0x97, 0x97, 0x99, 0x9A, 0x9D, 0x9C, 0x9D, 0x9E, 0x9F, 0xA4, 0xA5, 0xA6, 0xA7, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF}
_tblCT862 = [128]byte{0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0x41, 0x49, 0x4F, 0x55, 0xA5, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF}
_tblCT863 = [128]byte{0x43, 0x55, 0x45, 0x41, 0x41, 0x41, 0x86, 0x43, 0x45, 0x45, 0x45, 0x49, 0x49, 0x8D, 0x41, 0x8F, 0x45, 0x45, 0x45, 0x4F, 0x45, 0x49, 0x55, 0x55, 0x98, 0x4F, 0x55, 0x9B, 0x9C, 0x55, 0x55, 0x9F, 0xA0, 0xA1, 0x4F, 0x55, 0xA4, 0xA5, 0xA6, 0xA7, 0x49, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF}
_tblCT864 = [128]byte{0x80, 0x9A, 0x45, 0x41, 0x8E, 0x41, 0x8F, 0x80, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x8E, 0x8F, 0x90, 0x92, 0x92, 0x4F, 0x99, 0x4F, 0x55, 0x55, 0x59, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0x41, 0x49, 0x4F, 0x55, 0xA5, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF}
_tblCT865 = [128]byte{0x80, 0x9A, 0x90, 0x41, 0x8E, 0x41, 0x8F, 0x80, 0x45, 0x45, 0x45, 0x49, 0x49, 0x49, 0x8E, 0x8F, 0x90, 0x92, 0x92, 0x4F, 0x99, 0x4F, 0x55, 0x55, 0x59, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0x41, 0x49, 0x4F, 0x55, 0xA5, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF}
_tblCT866 = [128]byte{0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xF0, 0xF0, 0xF2, 0xF2, 0xF4, 0xF4, 0xF6, 0xF6, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF}
_tblCT869 = [128]byte{0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x86, 0x9C, 0x8D, 0x8F, 0x90, 0x91, 0x90, 0x92, 0x95, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xA4, 0xA5, 0xA6, 0xD9, 0xDA, 0xDB, 0xDC, 0xA7, 0xA8, 0xDF, 0xA9, 0xAA, 0xAC, 0xAD, 0xB5, 0xB6, 0xB7, 0xB8, 0xBD, 0xBE, 0xC6, 0xC7, 0xCF, 0xCF, 0xD0, 0xEF, 0xF0, 0xF1, 0xD1, 0xD2, 0xD3, 0xF5, 0xD4, 0xF7, 0xF8, 0xF9, 0xD5, 0x96, 0x95, 0x98, 0xFE, 0xFF}
)
// offsets and lengths into the DBCS unicode code conversion tables.
const (
dbcs932Len = 14780 * 2
dbcs936Len = 43586 * 2
dbcs949Len = 34098 * 2
dbcs950Len = 27008 * 2
dbcs932Off = 0
dbcs936Off = dbcs932Off + dbcs932Len
dbcs949Off = dbcs936Off + dbcs936Len
dbcs950Off = dbcs949Off + dbcs949Len
// calculated (read as "expected") length of the dbcs table.
__dbcsTblLen = dbcs950Off + dbcs950Len
)
// offsets into the SBCS unicode code conversion tables in cp_oem2uni_le.
// Each table is 256 bytes long.
const (
uc437Off = 0
uc720Off = 256
uc737Off = 512
uc771Off = 768
uc775Off = 1024
uc850Off = 1280
uc852Off = 1536
uc855Off = 1792
uc857Off = 2048
uc860Off = 2304
uc861Off = 2560
uc862Off = 2816
uc863Off = 3072
uc864Off = 3328
uc865Off = 3584
uc866Off = 3840
uc869Off = 4096
)
// cp_map is a list of supported codepages which index directly into cp_oem2uni_le.
var cp_map = [...]uint16{437, 720, 737, 771, 775, 850, 852, 855,
857, 860, 861, 862, 863, 864, 865, 866, 869}
// embedded unicode tables. Storage format is 16-bit little endian.
// Code pages 900+ are separate due to their large size.
var (
//go:embed embed/cp900_uni2oem_le.tbl
cp900_uni2oem_le []byte
//go:embed embed/cp900_oem2uni_le.tbl
cp900_oem2uni_le []byte
//go:embed embed/cp_oem2uni_le.tbl
cp_oem2uni_le []byte
)
// ff_uni2oem converts a unicode character to an ANSI/OEM character, zero on error.
func ff_uni2oem(uni rune, codepage []byte) uint16 {
// TODO(soypat): Shouldn't uni be a uint16? It seems like we don't support 32bit unicode here...
if uni < 0x80 {
return uint16(uni)
} else if uni >= 0x10000 || len(codepage) != 256 {
return 0 // DBCS not supported yet.
}
uc := uint16(uni)
for c := uint16(0); c < 0x80; c++ {
if uc == binary.LittleEndian.Uint16(codepage[c*2:]) {
return (c + 0x80) & 0xFF
}
}
return 0
}
// ff_oem2uni converts an OEM character to a unicode character, zero on error.
func ff_oem2uni(oem uint16, codepage []byte) uint16 {
if oem < 0x80 {
return oem
} else if oem >= 0x100 && len(codepage) != 256 {
return 0 // DBCS not supported yet.
}
offset := (oem - 0x80) * 2
return binary.LittleEndian.Uint16(codepage[offset:])
}
// ff_codepage returns the unicode to OEM codepage table for the given codepage, nil on not found.
func ff_codepage(code uint16) []byte {
if code >= 900 {
println("code pages 900+ unsupported")
}
for i := 0; i < len(cp_map); i++ {
if cp_map[i] == code {
off := i * 256
return cp_oem2uni_le[off : off+256]
}
}
return nil
}
func ff_wtoupper(c rune) rune {
return unicode.ToUpper(c)
}
func _() {
// An "invalid array index" compiler error signifies that the constant values have changed.
// Re-run the stringer command to generate them again.
var x [1]struct{}
_ = x[frOK-0]
_ = x[frDiskErr-1]
_ = x[frIntErr-2]
_ = x[frNotReady-3]
_ = x[frNoFile-4]
_ = x[frNoPath-5]
_ = x[frInvalidName-6]
_ = x[frDenied-7]
_ = x[frExist-8]
_ = x[frInvalidObject-9]
_ = x[frWriteProtected-10]
_ = x[frInvalidDrive-11]
_ = x[frNotEnabled-12]
_ = x[frNoFilesystem-13]
_ = x[frMkfsAborted-14]
_ = x[frTimeout-15]
_ = x[frLocked-16]
_ = x[frNotEnoughCore-17]
_ = x[frTooManyOpenFiles-18]
_ = x[frInvalidParameter-19]
_ = x[frUnsupported-20]
_ = x[frClosed-21]
_ = x[frGeneric-22]
}
// generated with command:
//
// stringer -type=fileResult -linecomment -output=stringer_fileResult.go
const _fileResult_name = "succeededa hard error occurred in the low level disk I/O layerassertion failedthe physical drive cannot workcould not find the filecould not find the paththe path name format is invalidaccess denied due to prohibited access or directory fullaccess denied due to prohibited accessthe file/directory object is invalidthe physical drive is write protectedthe logical drive number is invalidthe volume has no work areathere is no valid FAT volumethe f_mkfs() aborted due to any problemcould not get a grant to access the volume within defined periodthe operation is rejected according to the file sharing policyLFN working buffer could not be allocatednumber of open files > FF_FS_LOCKgiven parameter is invalidthe operation is not supportedthe file is closedfat generic error"
var _fileResult_index = [...]uint16{0, 9, 62, 78, 108, 131, 154, 185, 241, 279, 315, 352, 387, 414, 442, 481, 545, 607, 648, 681, 707, 737, 755, 772}
func (i fileResult) String() string {
if i < 0 || i >= fileResult(len(_fileResult_index)-1) {
return "<unknown fat.fileResult>"
}
return _fileResult_name[_fileResult_index[i]:_fileResult_index[i+1]]
}