nrelease - fix/improve livecd
[dragonfly.git] / contrib / file / magic / Magdir / images
1
2 #------------------------------------------------------------------------------
3 # $File: images,v 1.227 2022/09/11 20:58:52 christos Exp $
4 # images:  file(1) magic for image formats (see also "iff", and "c-lang" for
5 # XPM bitmaps)
6 #
7 # originally from jef@helios.ee.lbl.gov (Jef Poskanzer),
8 # additions by janl@ifi.uio.no as well as others. Jan also suggested
9 # merging several one- and two-line files into here.
10 #
11 # little magic: PCX (first byte is 0x0a)
12
13 # Targa - matches `povray', `ppmtotga' and `xv' outputs
14 # by Philippe De Muyter <phdm@macqel.be>
15 # URL: http://justsolve.archiveteam.org/wiki/TGA
16 # Reference: http://www.dca.fee.unicamp.br/~martino/disciplinas/ea978/tgaffs.pdf
17 # Update: Joerg Jenderek
18 # at 2, byte ImgType must be 1, 2, 3, 9, 10 or 11
19 #       ,32 or 33 (both not observed)
20 # at 1, byte CoMapType must be 1 if ImgType is 1 or 9, 0 otherwise
21 #       or theoretically 2-128 reserved for use by Truevision or 128-255 may be used for developer applications
22 # at 3, leshort Index is 0 for povray, ppmtotga and xv outputs
23 # `xv' recognizes only a subset of the following (RGB with pixelsize = 24)
24 # `tgatoppm' recognizes a superset (Index may be anything)
25 #
26 # test of Color Map Type 0~no 1~color map
27 # and Image Type 1 2 3 9 10 11 32 33
28 # and Color Map Entry Size 0 15 16 24 32
29 0       ubequad&0x00FeC400000000C0      0
30 # Conflict with MPEG sequences.
31 !:strength -40
32 # Prevent conflicts with CRI ADX.
33 #>(2.S-2) belong        !0x28632943
34 # above line does not work for rgb32_top_left_rle.tga
35 # skip some MPEG sequence *.vob and some CRI ADX audio with improbable interleave bits
36 >17     ubyte&0xC0              !0xC0
37 # skip more garbage like *.iso by looking for positive image type
38 >>2     ubyte                   >0
39 # skip some compiled terminfo like xterm+tmux by looking for image type less equal 33
40 >>>2    ubyte                   <34
41 # skip some MPEG sequence *.vob HV001T01.EVO winnicki.mpg with unacceptable alpha channel depth 11
42 >>>>17  ubyte&0x0F              !11
43 # skip arches.3200 , Finder.Root , Slp.1 by looking for low pixel depth 1 8 15 16 24 32
44 >>>>>16 ubyte                   1
45 >>>>>>0         use             tga-image
46 >>>>>16 ubyte                   8
47 >>>>>>0         use             tga-image
48 >>>>>16 ubyte                   15
49 >>>>>>0         use             tga-image
50 >>>>>16 ubyte                   16
51 >>>>>>0         use             tga-image
52 >>>>>16 ubyte                   24
53 >>>>>>0         use             tga-image
54 >>>>>16 ubyte                   32
55 >>>>>>0         use             tga-image
56 #       display tga bitmap image information
57 0       name                            tga-image
58 >2      ubyte           <34             Targa image data
59 !:mime  image/x-tga
60 !:apple ????TPIC
61 # normal extension .tga but some Truevision products used others:
62 # tpic (Apple),icb (Image Capture Board),vda (Video Display Adapter),vst (NuVista),win (UNSURE about that)
63 !:ext   tga/tpic/icb/vda/vst
64 # image type 1 2 3 9 10 11 32 33
65 >2      ubyte&0xF7      1               - Map
66 >2      ubyte&0xF7      2               - RGB
67 # alpha channel
68 >>17    ubyte&0x0F      >0              \bA
69 >2      ubyte&0xF7      3               - Mono
70 # type not found, but by http://www.fileformat.info/format/tga/corion.htm
71 # Compressed color-mapped data, using Huffman, Delta, and runlength encoding
72 >2      ubyte           32              - Color
73 # Compressed color-mapped data, using Huffman, Delta, and RLE. 4-pass quadtree- type process
74 >2      ubyte           33              - Color
75 # Color Map Type 0~no 1~color map
76 >1      ubyte           1               (
77 # first color map entry, 0 normal
78 >>3     uleshort        >0              \b%d-
79 # color map length 0 2 1dh 3bh d9h 100h
80 >>5     uleshort        x               \b%d)
81 # 8~run length encoding bit
82 >2      ubyte&0x08      8               - RLE
83 # gimp can create big pictures!
84 >12     uleshort        >0              %d x
85 >12     uleshort        =0              65536 x
86 # image height. 0 interpreted as 65536
87 >14     uleshort        >0              %d
88 >14     uleshort        =0              65536
89 # Image Pixel depth 1 8 15 16 24 32
90 >16     ubyte           x               x %d
91 # X origin of image. 0 normal
92 >8      uleshort        >0              +%d
93 # Y origin of image. 0 normal; positive for top
94 >10     uleshort        >0              +%d
95 # Image descriptor: bits 3-0 give the alpha channel depth, bits 5-4 give direction
96 # alpha depth like: 1 8
97 >17     ubyte&0x0F      >0              - %d-bit alpha
98 # bits 5-4 give direction. normal bottom left
99 >17     ubyte           &0x20           - top
100 #>17    ubyte           ^0x20           - bottom
101 >17     ubyte           &0x10           - right
102 #>17    ubyte           ^0x10           - left
103 # some info say other bits 6-7 should be zero
104 # but data storage interleave by http://www.fileformat.info/format/tga/corion.htm
105 # 00 - no interleave;01 - even/odd interleave; 10 - four way interleave; 11 - reserved
106 #>17    ubyte&0xC0      0x00            - no interleave
107 >17     ubyte&0xC0      0x40            - interleave
108 >17     ubyte&0xC0      0x80            - four way interleave
109 >17     ubyte&0xC0      0xC0            - reserved
110 # positive length implies identification field
111 >0      ubyte           >0
112 >>18    string          x               "%s"
113 # last 18 bytes of newer tga file footer signature
114 >18     search/4261301/s        TRUEVISION-XFILE.\0
115 # extension area offset if not 0
116 >>&-8           ulelong                 >0
117 # length of the extension area. normal 495 for version 2.0
118 >>>(&-4.l)      uleshort                0x01EF
119 # AuthorName[41]
120 >>>>&0          string                  >\0             - author "%-.40s"
121 # Comment[324]=4 * 80 null terminated
122 >>>>&41         string                  >\0             - comment "%-.80s"
123 # date
124 >>>>&365        ubequad&0xffffFFFFffff0000      !0
125 # Day
126 >>>>>&-6        uleshort                x               %d
127 # Month
128 >>>>>&-8        uleshort                x               \b-%d
129 # Year
130 >>>>>&-4        uleshort                x               \b-%d
131 # time
132 >>>>&371        ubequad&0xffffFFFFffff0000      !0
133 # hour
134 >>>>>&-8        uleshort                x               %d
135 # minutes
136 >>>>>&-6        uleshort                x               \b:%.2d
137 # second
138 >>>>>&-4        uleshort                x               \b:%.2d
139 # JobName[41]
140 >>>>&377        string                  >\0             - job "%-.40s"
141 # JobHour Jobminute Jobsecond
142 >>>>&418        ubequad&0xffffFFFFffff0000      !0
143 >>>>>&-8        uleshort                x               %d
144 >>>>>&-6        uleshort                x               \b:%.2d
145 >>>>>&-4        uleshort                x               \b:%.2d
146 # SoftwareId[41]
147 >>>>&424        string                  >\0             - %-.40s
148 # SoftwareVersionNumber
149 >>>>&424        ubyte                   >0
150 >>>>>&40        uleshort/100            x               %d
151 >>>>>&40        uleshort%100            x               \b.%d
152 # VersionLetter
153 >>>>>&42        ubyte                   >0x20           \b%c
154 # KeyColor
155 >>>>&468        ulelong                 >0              - keycolor %#8.8x
156 # Denominator of Pixel ratio. 0~no pixel aspect
157 >>>>&474        uleshort                >0
158 # Numerator
159 >>>>>&-4        uleshort                >0              - aspect %d
160 >>>>>&-2        uleshort                x               \b/%d
161 # Denominator of Gamma ratio. 0~no Gamma value
162 >>>>&478        uleshort                >0
163 # Numerator
164 >>>>>&-4        uleshort                >0              - gamma %d
165 >>>>>&-2        uleshort                x               \b/%d
166 # ColorOffset
167 #>>>>&480       ulelong                 x               - col offset %#8.8x
168 # StampOffset
169 #>>>>&484       ulelong                 x               - stamp offset %#8.8x
170 # ScanOffset
171 #>>>>&488       ulelong                 x               - scan offset %#8.8x
172 # AttributesType
173 #>>>>&492       ubyte                   x               - Attributes %#x
174 ## EndOfTGA
175
176 # PBMPLUS images
177 # URL:          https://en.wikipedia.org/wiki/Netpbm
178 # The next byte following the magic is always whitespace.
179 # adding 65 to strength so that Netpbm images comes before "x86 boot sector" or
180 # "DOS/MBR boot sector" identified by ./filesystems
181 0       name            netpbm
182 >3      regex/s         =[0-9]{1,50}[\040\t\f\r\n]+[0-9]{1,50}  Netpbm image data
183 >>&0    regex           =[0-9]{1,50}                    \b, size = %s x
184 >>>&0   regex           =[0-9]{1,50}                    \b %s
185
186 0       search/1        P1
187 # test for whitespace after 2 byte magic
188 >2      regex/2         [\040\t\f\r\n]
189 # skip DROID x-fmt-164-signature-id-583.pbm with ten 0 digits
190 >>3     string          !000000000
191 >>>0    use             netpbm
192 >>>0    string          x       \b, bitmap
193 !:strength + 65
194 !:mime  image/x-portable-bitmap
195 !:ext   pbm
196 # check for character # starting a comment line
197 >>>3    ubyte           =0x23
198 >>>>4   string          x       %s
199
200 0       search/1        P2
201 >0      regex/4         P2[\040\t\f\r\n]
202 >>0     use             netpbm
203 >>0     string          x       \b, greymap
204 !:strength + 65
205 # american spelling gray
206 !:mime  image/x-portable-graymap
207 !:ext   pgm
208
209 0       search/1        P3
210 >0      regex/4         P3[\040\t\f\r\n]
211 >>0     use             netpbm
212 >>0     string          x       \b, pixmap
213 !:strength + 65
214 !:mime  image/x-portable-pixmap
215 !:ext   ppm
216
217 0       string          P4
218 >0      regex/4         P4[\040\t\f\r\n]
219 >>0     use             netpbm
220 >>0     string          x       \b, rawbits, bitmap
221 !:strength + 65
222 !:mime  image/x-portable-bitmap
223 !:ext   pbm
224
225 0       string          P5
226 >0      regex/4         P5[\040\t\f\r\n]
227 >>0     use             netpbm
228 >>0     string          x       \b, rawbits, greymap
229 !:strength + 65
230 !:mime  image/x-portable-greymap
231 !:ext   pgm
232
233 0       string          P6
234 >0      regex/4         P6[\040\t\f\r\n]
235 >>0     use             netpbm
236 >>0     string          x       \b, rawbits, pixmap
237 !:strength + 65
238 !:mime  image/x-portable-pixmap
239 !:ext   ppm/pnm
240
241 # URL:          https://en.wikipedia.org/wiki/Netpbm#PAM_graphics_format
242 # Reference:    http://fileformats.archiveteam.org/wiki/Portable_Arbitrary_Map
243 # Update:       Joerg Jenderek
244 0       string          P7
245 # skip DROID fmt-405-signature-id-589.pam by looking for character like New Line 
246 >2      ubyte           !0xAB
247 #>2     ubyte           =0x0A
248 >>3     search/256/b    WIDTH           Netpbm PAM image file, size =
249 !:mime  image/x-portable-arbitrarymap
250 !:ext   pam
251 !:strength + 65
252 >>>&1   string          x               %s
253 >>>3    search/256/b    HEIGHT          x
254 >>>>&1  string          x               %s
255 # at offset 2 a New Line character (0xA) should appear
256 >>>2    ubyte           !0x0A           \b, %#x at offset 2 instead new line
257
258 # From: bryanh@giraffe-data.com (Bryan Henderson)
259 0       string          \117\072        Solitaire Image Recorder format
260 >4      string          \013            MGI Type 11
261 >4      string          \021            MGI Type 17
262 0       string          .MDA            MicroDesign data
263 >21     ubyte           48              version 2
264 >21     ubyte           51              version 3
265 0       string          .MDP            MicroDesign page data
266 >21     ubyte           48              version 2
267 >21     ubyte           51              version 3
268
269 # NIFF (Navy Interchange File Format, a modification of TIFF) images
270 # [GRR:  this *must* go before TIFF]
271 0       string          IIN1            NIFF image data
272 !:mime  image/x-niff
273
274 # Canon RAW version 1 (CRW) files are a type of Canon Image File Format
275 # (CIFF) file. These are apparently all little-endian.
276 # From: Adam Buchbinder <adam.buchbinder@gmail.com>
277 # URL: https://www.sno.phy.queensu.ca/~phil/exiftool/canon_raw.html
278 0       string          II\x1a\0\0\0HEAPCCDR    Canon CIFF raw image data
279 !:mime  image/x-canon-crw
280 >16     uleshort        x       \b, version %d.
281 >14     uleshort        x       \b%d
282
283 # Canon RAW version 2 (CR2) files are a kind of TIFF with an extra magic
284 # number. Put this above the TIFF test to make sure we detect them.
285 # These are apparently all little-endian.
286 # From: Adam Buchbinder <adam.buchbinder@gmail.com>
287 # URL: https://libopenraw.freedesktop.org/wiki/Canon_CR2
288 0       string          II\x2a\0\x10\0\0\0CR    Canon CR2 raw image data
289 !:mime  image/x-canon-cr2
290 !:strength +80
291 >10     ubyte           x       \b, version %d.
292 >11     ubyte           x       \b%d
293
294 # Fujifilm RAF RAW image files with embedded JPEG data and compressed
295 # or uncompressed CFA RAW data. Byte order: Big Endian.
296 # URL: https://libopenraw.freedesktop.org/formats/raf/
297 # Useful info from http://fileformats.archiveteam.org/wiki/Fujifilm_RAF.
298 # File extension: RAF
299 # Works for both the FinePix S2 Pro and the X-T3. Anybody have some more Fuji
300 # raw samples available?
301 # -- David Dyer-Bennet <dd-b@dd-b.net> 9-Sep-2021
302 0       string          FUJIFILMCCD-RAW         Fujifilm RAF raw image data
303 !:mime  image/x-fuji-raf
304 !:ext   raf
305 >0x10   string          x                       \b, format version %4.4s
306 >0x1C   string          x                       \b, camera %s
307
308 # Tag Image File Format, from Daniel Quinlan (quinlan@yggdrasil.com)
309 # The second word of TIFF files is the TIFF version number, 42, which has
310 # never changed.  The TIFF specification recommends testing for it.
311 0       string          MM\x00\x2a      TIFF image data, big-endian
312 !:strength +70
313 !:mime  image/tiff
314 !:ext   tif,tiff
315 >(4.L)  use             \^tiff_ifd
316 0       string          II\x2a\x00      TIFF image data, little-endian
317 !:mime  image/tiff
318 !:strength +70
319 !:ext   tif,tiff
320 >(4.l)  use             tiff_ifd
321
322 0       name            tiff_ifd
323 >0      uleshort        x               \b, direntries=%d
324 >2      use             tiff_entry
325
326 0       name            tiff_entry
327 # NewSubFileType
328 >0      uleshort        0xfe
329 >>12    use             tiff_entry
330 >0      uleshort        0x100
331 >>4     ulelong         1
332 >>>12   use             tiff_entry
333 >>>8    uleshort        x               \b, width=%d
334 >0      uleshort        0x101
335 >>4     ulelong         1
336 >>>8    uleshort        x               \b, height=%d
337 >>>12   use             tiff_entry
338 >0      uleshort        0x102
339 >>8     uleshort        x               \b, bps=%d
340 >>12    use             tiff_entry
341 >0      uleshort        0x103
342 >>4     ulelong         1               \b, compression=
343 >>>8    uleshort        1               \bnone
344 >>>8    uleshort        2               \bhuffman
345 >>>8    uleshort        3               \bbi-level group 3
346 >>>8    uleshort        4               \bbi-level group 4
347 >>>8    uleshort        5               \bLZW
348 >>>8    uleshort        6               \bJPEG (old)
349 >>>8    uleshort        7               \bJPEG
350 >>>8    uleshort        8               \bdeflate
351 >>>8    uleshort        9               \bJBIG, ITU-T T.85
352 >>>8    uleshort        0xa             \bJBIG, ITU-T T.43
353 >>>8    uleshort        0x7ffe          \bNeXT RLE 2-bit
354 >>>8    uleshort        0x8005          \bPackBits (Macintosh RLE)
355 >>>8    uleshort        0x8029          \bThunderscan RLE
356 >>>8    uleshort        0x807f          \bRasterPadding (CT or MP)
357 >>>8    uleshort        0x8080          \bRLE (Line Work)
358 >>>8    uleshort        0x8081          \bRLE (High-Res Cont-Tone)
359 >>>8    uleshort        0x8082          \bRLE (Binary Line Work)
360 >>>8    uleshort        0x80b2          \bDeflate (PKZIP)
361 >>>8    uleshort        0x80b3          \bKodak DCS
362 >>>8    uleshort        0x8765          \bJBIG
363 >>>8    uleshort        0x8798          \bJPEG2000
364 >>>8    uleshort        0x8799          \bNikon NEF Compressed
365 >>>8    default         x
366 >>>>8   uleshort        x               \b(unknown %#x)
367 >>>12   use             tiff_entry
368 >0      uleshort        0x106           \b, PhotometricInterpretation=
369 >>8     clear           x
370 >>8     uleshort        0               \bWhiteIsZero
371 >>8     uleshort        1               \bBlackIsZero
372 >>8     uleshort        2               \bRGB
373 >>8     uleshort        3               \bRGB Palette
374 >>8     uleshort        4               \bTransparency Mask
375 >>8     uleshort        5               \bCMYK
376 >>8     uleshort        6               \bYCbCr
377 >>8     uleshort        8               \bCIELab
378 >>8     default         x
379 >>>8    uleshort        x               \b(unknown=%#x)
380 >>12    use             tiff_entry
381 # FillOrder
382 >0      uleshort        0x10a
383 >>4     ulelong         1
384 >>>12   use             tiff_entry
385 # DocumentName
386 >0      uleshort        0x10d
387 >>(8.l) string          x               \b, name=%s
388 >>>12   use             tiff_entry
389 # ImageDescription
390 >0      uleshort        0x10e
391 >>(8.l) string          x               \b, description=%s
392 >>>12   use             tiff_entry
393 # Make
394 >0      uleshort        0x10f
395 >>(8.l) string          x               \b, manufacturer=%s
396 >>>12   use             tiff_entry
397 # Model
398 >0      uleshort        0x110
399 >>(8.l) string          x               \b, model=%s
400 >>>12   use             tiff_entry
401 # StripOffsets
402 >0      uleshort        0x111
403 >>12    use             tiff_entry
404 # Orientation
405 >0      uleshort        0x112           \b, orientation=
406 >>8     uleshort        1               \bupper-left
407 >>8     uleshort        3               \blower-right
408 >>8     uleshort        6               \bupper-right
409 >>8     uleshort        8               \blower-left
410 >>8     uleshort        9               \bundefined
411 >>8     default         x
412 >>>8    uleshort        x               \b[*%d*]
413 >>12    use             tiff_entry
414 # XResolution
415 >0      uleshort        0x11a
416 >>8     ulelong         x               \b, xresolution=%d
417 >>12    use             tiff_entry
418 # YResolution
419 >0      uleshort        0x11b
420 >>8     ulelong         x               \b, yresolution=%d
421 >>12    use             tiff_entry
422 # ResolutionUnit
423 >0      uleshort        0x128
424 >>8     uleshort        x               \b, resolutionunit=%d
425 >>12    use             tiff_entry
426 # Software
427 >0      uleshort        0x131
428 >>(8.l) string          x               \b, software=%s
429 >>12    use             tiff_entry
430 # Datetime
431 >0      uleshort        0x132
432 >>(8.l) string          x               \b, datetime=%s
433 >>12    use             tiff_entry
434 # HostComputer
435 >0      uleshort        0x13c
436 >>(8.l) string          x               \b, hostcomputer=%s
437 >>12    use             tiff_entry
438 # WhitePoint
439 >0      uleshort        0x13e
440 >>12    use             tiff_entry
441 # PrimaryChromaticities
442 >0      uleshort        0x13f
443 >>12    use             tiff_entry
444 # YCbCrCoefficients
445 >0      uleshort        0x211
446 >>12    use             tiff_entry
447 # YCbCrPositioning
448 >0      uleshort        0x213
449 >>12    use             tiff_entry
450 # ReferenceBlackWhite
451 >0      uleshort        0x214
452 >>12    use             tiff_entry
453 # Copyright
454 >0      uleshort        0x8298
455 >>(8.l) string          x               \b, copyright=%s
456 >>12    use             tiff_entry
457 # ExifOffset
458 >0      uleshort        0x8769
459 >>12    use             tiff_entry
460 # GPS IFD
461 >0      uleshort        0x8825          \b, GPS-Data
462 >>12    use             tiff_entry
463
464 #>0     uleshort        x               \b, unknown=%#x
465 #>>12   use             tiff_entry
466
467 0       string          MM\x00\x2b      Big TIFF image data, big-endian
468 !:mime  image/tiff
469 0       string          II\x2b\x00      Big TIFF image data, little-endian
470 !:mime  image/tiff
471
472 # PNG [Portable Network Graphics, or "PNG's Not GIF"] images
473 # (Greg Roelofs, newt@uchicago.edu)
474 # (Albert Cahalan, acahalan@cs.uml.edu)
475 #
476 # 137 P N G \r \n ^Z \n [4-byte length] I H D R [HEAD data] [HEAD crc] ...
477 #
478
479 # IHDR parser
480 0       name            png-ihdr
481 >0      ubelong         x               \b, %d x
482 >4      ubelong         x               %d,
483 >8      ubyte           x               %d-bit
484 >9      ubyte           0               grayscale,
485 >9      ubyte           2               \b/color RGB,
486 >9      ubyte           3               colormap,
487 >9      ubyte           4               gray+alpha,
488 >9      ubyte           6               \b/color RGBA,
489 #>10    ubyte           0               deflate/32K,
490 >12     ubyte           0               non-interlaced
491 >12     ubyte           1               interlaced
492
493 # Standard PNG image.
494 0       string          \x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0DIHDR     PNG image data
495 !:mime  image/png
496 !:ext   png
497 !:strength +10
498 >16     use             png-ihdr
499
500 # Apple CgBI PNG image.
501 0       string          \x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x04CgBI
502 >24     string          \x00\x00\x00\x0DIHDR    PNG image data (CgBI)
503 !:mime  image/png
504 !:ext   png
505 !:strength +10
506 >>32    use             png-ihdr
507
508 # possible GIF replacements; none yet released!
509 # (Greg Roelofs, newt@uchicago.edu)
510 #
511 # GRR 950115:  this was mine ("Zip GIF"):
512 0       string          GIF94z          ZIF image (GIF+deflate alpha)
513 !:mime  image/x-unknown
514 #
515 # GRR 950115:  this is Jeremy Wohl's Free Graphics Format (better):
516 #
517 0       string          FGF95a          FGF image (GIF+deflate beta)
518 !:mime  image/x-unknown
519 #
520 # GRR 950115:  this is Thomas Boutell's Portable Bitmap Format proposal
521 # (best; not yet implemented):
522 #
523 0       string          PBF             PBF image (deflate compression)
524 !:mime  image/x-unknown
525
526 # GIF
527 # Strength set up to beat 0x55AA DOS/MBR signature word lookups (+65)
528 0       string          GIF8            GIF image data
529 !:strength +80
530 !:mime  image/gif
531 !:apple 8BIMGIFf
532 !:ext   gif
533 >4      string          7a              \b, version 8%s,
534 >4      string          9a              \b, version 8%s,
535 >6      uleshort        >0              %d x
536 >8      uleshort        >0              %d
537 #>10    ubyte           &0x80           color mapped,
538 #>10    ubyte&0x07      =0x00           2 colors
539 #>10    ubyte&0x07      =0x01           4 colors
540 #>10    ubyte&0x07      =0x02           8 colors
541 #>10    ubyte&0x07      =0x03           16 colors
542 #>10    ubyte&0x07      =0x04           32 colors
543 #>10    ubyte&0x07      =0x05           64 colors
544 #>10    ubyte&0x07      =0x06           128 colors
545 #>10    ubyte&0x07      =0x07           256 colors
546
547 # ITC (CMU WM) raster files.  It is essentially a byte-reversed Sun raster,
548 # 1 plane, no encoding.
549 0       string          \361\0\100\273  CMU window manager raster image data
550 >4      ulelong         >0              %d x
551 >8      ulelong         >0              %d,
552 >12     ulelong         >0              %d-bit
553
554 # Magick Image File Format
555 # URL:          https://imagemagick.org/script/miff.php
556 # Reference:    http://fileformats.archiveteam.org/wiki/MIFF
557 # Update:       Joerg Jenderek
558 # http://www.nationalarchives.gov.uk/pronom/fmt/930
559 0       search/256/bc   id=imagemagick
560 # skip bad ASCII text by following new line~0x0A or space~0x20 character
561 #>&0    ubyte           x               \b, next character %#x
562 # called by TriD ImageMagick Machine independent File Format bitmap
563 >&0     ubyte&0xD5      0               MIFF image data
564 # https://reposcope.com/mimetype/image/miff
565 #!:mime image/miff
566 !:mime  image/x-miff
567 !:ext   miff/mif
568 # examples with standard file(1) magic
569 #>>0    string          =id=ImageMagick with standard magic
570 # examples with unusual file(1) magic like 
571 >>0     string          !id=ImageMagick starting with
572 # start with comment (brace) like http://samples.fileformat.info/.../AQUARIUM.MIF
573 >>>0    ubyte           =0x7b           comment
574 # skip second character which is often a newline and show comment
575 >>>>2   string          x               "%s"
576 # does not start with comment, probably letters with other case like Id=ImageMagick
577 # ImageMagick-7.0.9-2/Magick++/demo/smile_anim.miff
578 >>>0    ubyte           !0x7b
579 >>>>0   string          >\0             '%-.14s'
580 # URL:          https://imagemagick.org/
581 # Reference:    https://imagemagick.org/script/magick-vector-graphics.php
582 # From:         Joerg Jenderek
583 # Note:         all white-spaces between commands are ignored
584 0       string          push
585 # skip some white spaces
586 >5      search/3        graphic-context ImageMagick Vector Graphic
587 # TODO: look for dangerous commands like CVE-2016-3715
588 #!:mime text/plain
589 !:mime  image/x-mvg
590 !:ext   mvg
591
592 # Artisan
593 0       long            1123028772      Artisan image data
594 >4      long            1               \b, rectangular 24-bit
595 >4      long            2               \b, rectangular 8-bit with colormap
596 >4      long            3               \b, rectangular 32-bit (24-bit with matte)
597
598 # FIG (Facility for Interactive Generation of figures), an object-based format
599 # URL:          http://fileformats.archiveteam.org/wiki/Fig
600 #               https://en.wikipedia.org/wiki/Xfig
601 # Reference:    http://mark0.net/download/triddefs_xml.7z/defs/f/fig.trid.xml
602 # https://web.archive.org/web/20070920204655/http://epb.lbl.gov/xfig/fig-format.html
603 # Update:       Joerg Jenderek
604 # Note:         called "FIG vector drawing" by TrID,
605 #               4 byte magic is assumed to be always at offset 0 and
606 #               verified by `fig2mpdf -v bootloader.fig && file bootloader.pdf`
607 #0      search/1/tb     #FIG            FIG image text
608 # GRR: with --keep-going option the line above gives duplicate messages
609 0       search/1/ts     #FIG
610 >&0     use             image-xfig
611 # binary data variant with non ASCII text characters like Control-A or Â°C in thermostat.fig
612 0       search/1/bs     #FIG
613 >&0     use             image-xfig
614 #       display XFIG image describing text, mime type, file name extension and version
615 0       name            image-xfig
616 >8      ubyte           x               FIG image text
617 #!:mime text/plain
618 # https://reposcope.com/mimetype/image/x-xfig
619 !:mime  image/x-xfig
620 !:ext   fig
621 # version string like: 1.4 2.1 3.1 3.2
622 >5      string          x               \b, version %.3s
623 # some times after version text like: "Produced by xfig version 3.2.5-alpha5"
624 >8      ubyte           >0x0D
625 >>8     string          x               "%s"
626 # should be point character (2Eh) of version string according to TrID
627 #>6     ubyte           !0x2E           \b, at 6 %#x
628 # caret character (23h) at the beginning in most or probaly all exanples
629 #>0     ubyte           !0x23           \b, starting with character %#x
630 # URL:          http://fileformats.archiveteam.org/wiki/DeskMate_Draw
631 #               http://en.wikipedia.org/wiki/Deskmate
632 # Reference:    http://mark0.net/download/triddefs_xml.7z/defs/d/dm-fig.trid.xml
633 # From:         Joerg Jenderek
634 # Note:         called "DeskMate Draw drawing" by TrID
635 0       string          \x14FIG         DeskMate Drawing
636 #!:mime application/octet-stream
637 !:mime  image/x-deskmate-fig
638 !:ext   fig
639 # TODO:
640 #       "Cabri 3D Figure"       by TrID fig-cabri.trid.xml
641 #       "Playmation Figure"     by TrID fig-playmation.trid.xml
642
643 # PHIGS
644 0       string          ARF_BEGARF              PHIGS clear text archive
645 0       string          @(#)SunPHIGS            SunPHIGS
646 # version number follows, in the form m.n
647 >40     string          SunBin                  binary
648 >32     string          archive                 archive
649
650 # GKS (Graphics Kernel System)
651 0       string          GKSM            GKS Metafile
652 >24     string          SunGKS          \b, SunGKS
653
654 # CGM image files
655 0       string          BEGMF           clear text Computer Graphics Metafile
656
657 # MGR bitmaps  (Michael Haardt, u31b3hs@pool.informatik.rwth-aachen.de)
658 0       string  yz      MGR bitmap, modern format, 8-bit aligned
659 0       string  zz      MGR bitmap, old format, 1-bit deep, 16-bit aligned
660 0       string  xz      MGR bitmap, old format, 1-bit deep, 32-bit aligned
661 0       string  yx      MGR bitmap, modern format, squeezed
662
663 # Fuzzy Bitmap (FBM) images
664 0       string          %bitmap\0       FBM image data
665 >30     long            0x31            \b, mono
666 >30     long            0x33            \b, color
667
668 # facsimile data
669 1       string          PC\ Research,\ Inc      group 3 fax data
670 >29     ubyte           0               \b, normal resolution (204x98 DPI)
671 >29     ubyte           1               \b, fine resolution (204x196 DPI)
672 # From: Herbert Rosmanith <herp@wildsau.idv.uni.linz.at>
673 0       string          Sfff            structured fax file
674
675 # From: Joerg Jenderek <joerg.jen.der.ek@gmx.net>
676 # URL:  http://fileformats.archiveteam.org/wiki/Award_BIOS_logo
677 # Note: verified by XnView command `nconvert -fullinfo *.EPA`
678 0       string          \x11\x06        Award BIOS Logo, 136 x 84
679 !:mime  image/x-award-bioslogo
680 !:ext   epa
681 0       string          \x11\x09        Award BIOS Logo, 136 x 126
682 !:mime  image/x-award-bioslogo
683 !:ext   epa
684 # https://telparia.com/fileFormatSamples/image/epa/IO.EPA
685 # Note: by bitmap-awbm-v1x1009.trid.xml called "Award BIOS logo bitmap (128x126) (v1)"
686 #       verified by RECOIL `recoil2png -o tmp.png IO.EPA; file tmp.png`
687 0       string          \x10\x09        Award BIOS Logo, 128 x 126
688 !:mime  image/x-award-bioslogo
689 !:ext   epa
690 #0      string          \x07\x1f        BIOS Logo corrupted?
691 # http://www.blackfiveservices.co.uk/awbmtools.shtml
692 # http://biosgfx.narod.ru/v3/
693 # http://biosgfx.narod.ru/abr-2/
694 0       string          AWBM
695 # Note:    by bitmap-awbm.trid.xml called "Award BIOS logo bitmap (v2)"
696 >4      uleshort        <1981           Award BIOS Logo, version 2
697 #>4     uleshort        <1981           Award BIOS bitmap
698 !:mime  image/x-award-bioslogo2
699 #!:mime image/x-award-bmp
700 !:ext   epa/bmp
701 # image width is a multiple of 4
702 >>4     uleshort&0x0003 0
703 >>>4    uleshort        x               \b, %d
704 >>>6    uleshort        x               x %d
705 >>4     uleshort&0x0003 >0              \b,
706 >>>4    uleshort&0x0003 =1
707 >>>>4   uleshort        x               %d+3
708 >>>4    uleshort&0x0003 =2
709 >>>>4   uleshort        x               %d+2
710 >>>4    uleshort&0x0003 =3
711 >>>>4   uleshort        x               %d+1
712 >>>6    uleshort        x               x %d
713 # at offset 8 starts imagedata followed by "RGB " marker
714
715 # PC bitmaps (OS/2, Windows BMP files)  (Greg Roelofs, newt@uchicago.edu)
716 # https://en.wikipedia.org/wiki/BMP_file_format#DIB_header_.\
717 # 28bitmap_information_header.29
718 # Note: variant starting direct with DIB header see
719 #       http://fileformats.archiveteam.org/wiki/BMP
720 #       verified by ImageMagick version 6.8.9-8 command `identify *.dib`
721 0       uleshort                40
722 # skip bad samples like GAME by looking for valid number of color planes
723 >12     uleshort        1               Device independent bitmap graphic
724 !:mime  image/x-ms-bmp
725 !:apple ????BMPp
726 !:ext   dib
727 >>4     ulelong         x               \b, %d x
728 >>8     ulelong         x               %d x
729 >>14    uleshort        x               %d
730 # number of color planes (must be 1) 
731 #>>12   uleshort        >1              \b, %u color planes
732 # compression method: 0~no 1~RLE 8-bit/pixel 3~Huffman 1D
733 #>>16   ulelong         3               \b, Huffman 1D compression
734 >>16    ulelong         >0              \b, %u compression
735 # image size is the size of raw bitmap; a dummy 0 can be given for BI_RGB bitmaps
736 >>20    ulelong         x               \b, image size %u
737 # horizontal and vertical resolution of the image (pixel per metre, signed integer) 
738 >>24    ulelong         >0              \b, resolution %d x
739 >>>28   ulelong         x               %d px/m
740 # number of colors in palette, or 0 to default to 2**n
741 #>>32   ulelong         >0              \b, %u colors
742 # number of important colors used, or 0 when every color is important
743 >>36    ulelong         >0              \b, %u important colors
744 # From:         Joerg Jenderek
745 # URL:          http://fileformats.archiveteam.org/wiki/VBM_(VDC_BitMap)
746 # Reference:    http://csbruce.com/cbm/postings/csc19950906-1.txt
747 #               http://mark0.net/download/triddefs_xml.7z
748 #               defs/b/bitmap-vbm.trid.xml
749 #               defs/b/bitmap-vbm-v3.trid.xml
750 # Note:         called "VDC BitMap" by TrID
751 #               verified by RECOIL `recoil2png -o tmp.png coke_can.vbm; file tmp.png`
752 # begin with a signature of 'B' 'M' 0xCB, followed by a version byte 2 or 3
753 # Similar to the unrelated Windows BMP format
754 #       check for VDC bitmap and then display image dimension and version
755 0       name            bitmap-vbm
756 >2      ubyte           0xCB            VDC bitmap
757 !:mime  image/x-commodore-vbm
758 # http://recoil.sourceforge.net/formats.html
759 !:ext   bm/vbm
760 # the VBM format version number: 2 or 3
761 >>3     ubyte           x               \b, version %u
762 # width of the image in Hi/Lo format 
763 >>4     ubeshort        x               \b, %u
764 # height of the image
765 >>6     ubeshort        x               x %u
766 # version 3 images have the following additional header information 
767 >>3     ubyte           =3
768 # data-encoding type: 0~uncompressed 1~RLE-compressed 
769 >>>8    ubyte           0               \b, uncompressed
770 >>>8    ubyte           1               \b, RLE-compressed
771 # byte code for general RLE repetitions
772 #>>>9   ubyte           x               \b, RLE repetition code 0x%x
773 # reserved := 0
774 #>>>14  short           >0              \b, reserved 0x%x
775 # length of comment text; 0~no comment text
776 #>>>16  ubeshort        >0              \b, comment length %u
777 >>>16   pstring/H       >0              \b, comment "%s"
778 #
779 0       string          BM
780 # check for magic and version 2 of VDC bitmap or BMP with cbSize=715=CB02
781 >2      ubeshort                0xCB02
782 >>6     short           =0
783 >>>0    use             bitmap-bmp
784 # VDC bitmap height or maybe a few OS/2 BMP with nonzero "hotspot coordinates"
785 >>6     short           !0
786 >>>0    use             bitmap-vbm
787 # check for magic and version 3 of VDC bitmap or BMP with cbSize=971=CB03
788 >2      ubeshort                0xCB03
789 # check for reserved value (=0) of VDC bitmap
790 >>14    short           =0
791 >>>0    use             bitmap-vbm
792 # BMP with cbSize=????03CBh and dib header size != 0
793 >>14    short           !0
794 >>>0    use             bitmap-bmp
795 # cbSize is size of header or file size of Windows BMP bitmap
796 >2      default         x
797 >>0     use             bitmap-bmp
798 0       name            bitmap-bmp
799 >14     ulelong         12              PC bitmap, OS/2 1.x format
800 !:mime  image/bmp
801 !:ext   bmp
802 >>18    uleshort        x               \b, %d x
803 >>20    uleshort        x               %d
804 # number of color planes (must be 1)
805 #>>22   uleshort        !1              \b, %u color planes
806 # number of bits per pixel (color depth); found 4 8
807 >>24    uleshort        x               x %d
808 # x, y coordinates of the hotspot
809 >>6     uleshort        >0              \b, hotspot %ux
810 >>>8    uleshort        x               \b%u
811 # cbSize; size of file or header like 1Ah 228C8h
812 >>2     ulelong         x               \b, cbSize %u
813 #>>2    ulelong         x               \b, cbSize 0x%8.8x
814 # offBits; offset to bitmap data like: 
815 >>10    ulelong         x       \b, bits offset %u
816 # http://fileformats.archiveteam.org/wiki/BMP#OS.2F2_BMP_2.0 no examples found
817 >14     ulelong         48              PC bitmap, OS/2 2.x format (DIB header size=48)
818 >14     ulelong         24              PC bitmap, OS/2 2.x format (DIB header size=24)
819 # http://entropymine.com/jason/bmpsuite/bmpsuite/q/pal8os2v2-16.bmp
820 # Note:    by bitmap-bmp-v2o.trid.xml called "Windows Bitmap (v2o)"
821 >14     ulelong         16              PC bitmap, OS/2 2.x format (DIB header size=16)
822 !:mime  image/bmp
823 !:apple ????BMPp
824 !:ext   bmp
825 # image width and height fields are unsigned integers for OS/2
826 >>18    ulelong         x               \b, %u x
827 >>22    ulelong         x               %u
828 # number of bits per pixel (color depth); found 8
829 >>28    uleshort        >1              x %u
830 # x, y coordinates of the hotspot
831 >>6     uleshort        >0              \b, hotspot %ux
832 >>>8    uleshort        x               \b%u
833 # number of color planes (must be 1)
834 #>>26   uleshort        >1              \b, %u color planes
835 # cbSize; size of file like: 241E
836 >>2     ulelong         x               \b, cbSize %u
837 #>>2    ulelong         x               \b, cbSize 0x%x
838 # offBits; offset to bitmap data like: 41E
839 >>10    ulelong         x       \b, bits offset %u
840 #>>10   ulelong         x       \b, bits offset 0x%x
841 >14     ulelong         64              PC bitmap, OS/2 2.x format
842 !:mime  image/bmp
843 !:apple ????BMPp
844 !:ext   bmp
845 # image width and height fields are unsigned integers for OS/2
846 >>18    ulelong         x               \b, %u x
847 >>22    ulelong         x               %u
848 # number of bits per pixel (color depth); found 1 4 8
849 >>28    uleshort        >1              x %u
850 # x, y coordinates of the hotspot
851 >>6     uleshort        >0              \b, hotspot %ux
852 >>>8    uleshort        x               \b%u
853 >>26    uleshort        >1              \b, %u color planes
854 # cbSize; size of file or headers
855 >>2     ulelong         x               \b, cbSize %u
856 # BMP with cbSize 000002CBh=715 or 000003CBh=971 maybe misinterpreted as VDC bitmap
857 #>>2    ulelong         x               \b, cbSize %#x
858 # offBits; offset to bitmap data like 56h 5Eh 8Eh 43Eh
859 >>10    ulelong         x       \b, bits offset %u
860 #>>10   ulelong         x       \b, bits offset %#x
861 #>>(10.l) ubequad       !0      \b, bits %#16.16llx
862 # BITMAPV2INFOHEADER    adds RGB bit masks
863 >14     ulelong         52              PC bitmap, Adobe Photoshop
864 !:mime  image/bmp
865 !:apple ????BMPp
866 !:ext   bmp
867 >>18    ulelong         x               \b, %d x
868 >>22    ulelong         x               %d x
869 # number of bits per pixel (color depth); found 16 32
870 >>28    uleshort        x               %d
871 # x, y coordinates of the hotspot; should be zero for Windows variant
872 >>6     uleshort        >0              \b, hotspot %ux
873 >>>8    uleshort        x               \b%u
874 # cbSize; size of file like: 14A 7F42
875 >>2     ulelong         x               \b, cbSize %u
876 #>>2    ulelong         x               \b, cbSize 0x%x
877 # offBits; offset to bitmap data like: 42h
878 >>10    ulelong         x       \b, bits offset %u
879 #>>10   ulelong         x       \b, bits offset 0x%x
880 # BITMAPV3INFOHEADER    adds alpha channel bit mask
881 >14     ulelong         56              PC bitmap, Adobe Photoshop with alpha channel mask
882 !:mime  image/bmp
883 !:apple ????BMPp
884 !:ext   bmp
885 >>18    ulelong         x               \b, %d x
886 >>22    ulelong         x               %d x
887 # number of bits per pixel (color depth); found 16 32
888 >>28    uleshort                x               %d
889 # x, y coordinates of the hotspot; should be zero for Windows variant
890 >>6     uleshort        >0              \b, hotspot %ux
891 >>>8    uleshort        x               \b%u
892 # cbSize; size of file like: 4E 7F46 131DE 14046h
893 >>2     ulelong         x               \b, cbSize %u
894 #>>2    ulelong         x               \b, cbSize 0x%x
895 # offBits; offset to bitmap data like: 46h
896 >>10    ulelong                 x       \b, bits offset %u
897 #>>10   ulelong                 x       \b, bits offset 0x%x
898 >14     ulelong         40
899 # jump 4 bytes before end of file/header to skip fmt-116-signature-id-118.dib
900 # broken for large bitmaps
901 #>>(2.l-4)      ulong   x               PC bitmap, Windows 3.x format
902 >>14    ulelong         40              PC bitmap, Windows 3.x format
903 !:mime  image/bmp
904 !:apple ????BMPp
905 >>>18   ulelong         x               \b, %d x
906 >>>22   ulelong         x               %d
907 # 320 x 400             https://en.wikipedia.org/wiki/LOGO.SYS
908 >>>18   ulequad         =0x0000019000000140     x
909 !:ext   bmp/sys
910 >>>18   ulequad         !0x0000019000000140
911 # compression method 2~RLE 4-bit/pixel implies also extension rle
912 >>>>30  ulelong         2               x
913 !:ext   bmp/rle
914 # not RLE compressed and not 320x400 dimension
915 >>>>30  default         x
916 # "small" dimensions like: 14x15 15x16 16x14 16x16 32x32
917 #       https://en.wikipedia.org/wiki/Favicon
918 >>>>>18 ulequad&0xffFFffC0ffFFffC0 =0   x
919 # https://www.politi-kdigital.de/favicon.ico
920 # http://forum.rpc1.org/favicon.ico
921 !:ext   bmp/ico
922 # "big" dimensions > 63
923 >>>>>18 default         x               x
924 !:ext   bmp
925 # number of bits per pixel (color depth); found 1 2 4 8 16 24 32
926 >>>28   uleshort        x               %d
927 # x, y coordinates of the hotspot; there is no hotspot in bitmaps, so values 0
928 #>>>6   uleshort        >0              \b, hotspot %ux
929 #>>>>8  uleshort        x               \b%u
930 # number of color planes (must be 1), except badplanes.bmp for testing
931 #>>>26  uleshort        >1              \b, %u color planes
932 # compression method: 0~no 1~RLE 8-bit/pixel 2~RLE 4-bit/pixel 3~Huffman 1D 6~RGBA bit field masks
933 #>>>30  ulelong         3               \b, Huffman 1D compression
934 >>>30   ulelong         >0              \b, %u compression
935 # image size is the size of raw bitmap; a dummy 0 can be given for BI_RGB bitmaps
936 >>>34   ulelong         >0              \b, image size %u
937 # horizontal and vertical resolution of the image (pixel per metre, signed integer) 
938 >>>38   ulelong         >0              \b, resolution %d x
939 >>>>42  ulelong         x               %d px/m
940 # number of colors in palette 16 256, or 0 to default to 2**n
941 #>>>46  ulelong         >0              \b, %u colors
942 # number of important colors used, or 0 when every color is important
943 >>>50   ulelong         >0              \b, %u important colors
944 # cbSize; often size of file
945 >>>2    ulelong         x               \b, cbSize %u
946 #>>>2   ulelong         x               \b, cbSize %#x
947 # offBits; offset to bitmap data like 36h 76h BEh 236h 406h 436h 4E6h
948 >>>10   ulelong         x       \b, bits offset %u
949 #>>>10  ulelong         x       \b, bits offset %#x
950 #>>>(10.l) ubequad      !0      \b, bits %#16.16llxd
951 >14     ulelong         124             PC bitmap, Windows 98/2000 and newer format
952 !:mime  image/bmp
953 !:ext   bmp
954 >>18    ulelong         x               \b, %d x
955 >>22    ulelong         x               %d x
956 # color planes; must be 1
957 #>>>26  uleshort        >1              \b, %u color planes
958 # number of bits per pixel (color depth); found 4 8 16 24 32 1 (fmt-119-signature-id-121.bmp) 0 (rgb24jpeg.bmp rgb24png.bmp)
959 >>28    uleshort        x               %d
960 # x, y coordinates of the hotspot; should be zero for Windows variant
961 >>6     uleshort        >0              \b, hotspot %ux
962 >>>8    uleshort        x               \b%u
963 # cbSize; size of file like: 8E AA 48A 999 247A 4F02 7F8A 3F88E B216E 1D4C8A 100008A
964 >>2     ulelong         x               \b, cbSize %u
965 #>>2    ulelong         x               \b, cbSize 0x%x
966 # offBits; offset to bitmap data like: 8A 47A ABABABAB (fmt-119-signature-id-121.bmp)
967 >>10    ulelong         x       \b, bits offset %u
968 #>>10   ulelong         x       \b, bits offset 0x%x
969 >14     ulelong         108             PC bitmap, Windows 95/NT4 and newer format
970 !:mime  image/bmp
971 !:ext   bmp
972 >>18    ulelong         x               \b, %d x
973 >>22    ulelong         x               %d x
974 # number of bits per pixel (color depth); found 8 24 32
975 >>28    uleshort        x               %d
976 # x, y coordinates of the hotspot; should be zero for Windows variant
977 >>6     uleshort        >0              \b, hotspot %ux
978 >>>8    uleshort        x               \b%u
979 # cbSize; size of file like: 82 8A 9A 9F86 1E07A 3007A 88B7A C007A 
980 >>2     ulelong         x               \b, cbSize %u
981 #>>2    ulelong         x               \b, cbSize 0x%x
982 # offBits; offset to bitmap data like: 7A 7E 46A
983 >>10    ulelong         x       \b, bits offset %u
984 #>>10   ulelong         x       \b, bits offset 0x%x
985 # Update:       Joerg Jenderek
986 # URL:          http://fileformats.archiveteam.org/wiki/OS/2_Icon
987 # Reference:    http://www.fileformat.info
988 #               /format/os2bmp/spec/902d5c253f2a43ada39c2b81034f27fd/view.htm
989 # Note: verified by command like `deark -l -d3 OS2MEMU.ICO`
990 0       string          IC
991 # skip Lotus smart icon *.smi by looking for valid hotspot coordinates
992 >6      ulelong&0xFF00FF00      =0      OS/2 icon
993 # jump 4 bytes before end of header/file and test for accessibility
994 #>>(2.l-4) ubelong      x       End of header is OK!
995 !:mime  image/x-os2-ico
996 !:ext   ico
997 # cbSize; size of header or file in bytes like 1ah 120h 420h
998 >>2     ulelong         x       \b, cbSize %u
999 # xHotspot, yHotspot; coordinates of the hotspot for icons like 16 32
1000 >>6     uleshort        x       \b, hotspot %ux
1001 >>8     uleshort        x       \b%u
1002 # offBits; offset in bytes to the beginning of the bit-map pel data like 20h
1003 >>10    ulelong         x       \b, bits offset %u
1004 #>>(10.l) ubequad       x       \b, bits %#16.16llx
1005 #0      string          PI              PC pointer image data
1006 #0      string          CI              PC color icon data
1007 0       string          CI
1008 # test also for valid dib header sizes 12 or 64
1009 >14     ulelong         <65             OS/2
1010 # test also for valid hotspot coordinates
1011 #>>6    ulelong&0xFE00FE00      =0      OS/2
1012 !:mime  image/x-os2-ico
1013 !:ext   ico
1014 >>14    ulelong         12              1.x color icon
1015 # image width and height fields are unsigned integers for OS/2
1016 >>>18   uleshort        x               %u x
1017 # stored height = 2 * real height
1018 >>>20   uleshort/2      x               %u
1019 # number of bits per pixel (color depth). Typical 32 24 16 8 4 but only 1 found
1020 >>>24   uleshort        >1              x %u
1021 # color planes; must be 1
1022 #>>>22  uleshort        >1              \b, %u color planes
1023 >>14    ulelong         64              2.x color icon
1024 # image width and height
1025 >>>18   ulelong         x               %u x
1026 # stored height = 2 * real height
1027 >>>22   ulelong/2       x               %u
1028 # number of bits per pixel (color depth). only 1 found
1029 >>>28   uleshort        >1              x %u
1030 #>>>26  uleshort        >1              \b, %u color planes
1031 # compression method: 0~no 3~Huffman 1D
1032 >>>30   ulelong         3               \b, Huffman 1D compression
1033 #>>>30  ulelong         >0              \b, %u compression
1034 # xHotspot, yHotspot; coordinates of the hotspot like 0 1 16 20 32 33 63 64
1035 >>6     uleshort        x       \b, hotspot %ux
1036 >>8     uleshort        x       \b%u
1037 # cbSize; size of header or maybe file in bytes like 1Ah 4Eh 84Eh
1038 >>2     ulelong         x       \b, cbSize %u
1039 #>>2    ulelong         x       \b, cbSize %x
1040 # offBits; offset to bitmap data (pixel array) like E4h 3Ah 66h 6Ah 33Ah 4A4h
1041 >>10    ulelong         x       \b, bits offset %u
1042 #>>10   ulelong         x       \b, bits offset %#x
1043 #>>(10.l) ubequad       !0      \b, bits %#16.16llx
1044 # dib header size: 12~Ch~OS/2 1.x 64~40h~OS/2 2.x
1045 #>>14   ulelong         x               \b, dib header size %u
1046 #0      string          CP              PC color pointer image data
1047 # URL:          http://fileformats.archiveteam.org/wiki/OS/2_Pointer
1048 # Reference:    http://www.fileformat.info/format/os2bmp/egff.htm
1049 0       string          CP
1050 # skip many Corel Photo-Paint image "CPT9FILE" by checking for positive bits offset
1051 >10     ulelong         >0
1052 # skip CPU-Z Report by checking for valid dib header sizes 12 or 64
1053 >>14    ulelong         =12
1054 >>>0            use             os2-ptr
1055 >>14    ulelong         =64
1056 >>>0            use             os2-ptr
1057 #       display information of OS/2 pointer bitmaps
1058 0       name            os2-ptr
1059 >14     ulelong         x               OS/2
1060 # http://extension.nirsoft.net/PTR
1061 !:mime  image/x-ibm-pointer
1062 !:ext   ptr
1063 >>14    ulelong         12              1.x color pointer
1064 # image width and height fields are unsigned integers for OS/2
1065 >>>18   uleshort        x               %u x
1066 # stored height = 2 * real height
1067 >>>20   uleshort/2      x               %u
1068 # number of bits per pixel (color depth). Typical 32 24 16 8 4 but only 1 found
1069 >>>24   uleshort        >1              x %u
1070 # color planes; must be 1
1071 #>>>22  uleshort        >1              \b, %u color planes
1072 >>14    ulelong         64              2.x color pointer
1073 # image width and height
1074 >>>18   ulelong         x               %u x
1075 # stored height = 2 * real height
1076 >>>22   ulelong/2       x               %u
1077 # number of bits per pixel (color depth). only 1 found
1078 >>>28   uleshort        >1              x %u
1079 #>>>26  uleshort        >1              \b, %u color planes
1080 # compression method: 0~no 3~Huffman 1D
1081 >>>30   ulelong         3               \b, Huffman 1D compression
1082 #>>>30  ulelong         >0              \b, %u compression
1083 # xHotspot, yHotspot; coordinates of the hotspot like 0 3 4 8 15 16 23 27 31
1084 >>6     uleshort        x       \b, hotspot %ux
1085 >>8     uleshort        x       \b%u
1086 # cbSize; size of header or maybe file in bytes like 1Ah 4Eh
1087 >>2     ulelong         x       \b, cbSize %u
1088 #>>2    ulelong         x       \b, cbSize %x
1089 # offBits; offset to bitmap data (pixel array) like 6Ah A4h E4h 4A4h
1090 >>10    ulelong         x       \b, bits offset %u
1091 #>>10   ulelong         x       \b, bits offset %#x
1092 #>>(10.l) ubequad       !0      \b, bits %#16.16llx
1093 # dib header size: 12~Ch~OS/2 1.x 64~40h~OS/2 2.x
1094 #>>14   ulelong         x               \b, dib header size %u
1095 # Conflicts with other entries [BABYL]
1096 # URL:  http://fileformats.archiveteam.org/wiki/BMP#OS.2F2_Bitmap_Array
1097 # Note: container for OS/2 icon "IC", color icon "CI", color pointer "CP" or bitmap "BM"
1098 #0      string          BA              PC bitmap array data
1099 0       string          BA
1100 # skip old Emacs RMAIL BABYL ./mail.news by checking for low header size
1101 >2      ulelong         <0x004c5942     OS/2 graphic array
1102 !:mime  image/x-os2-graphics
1103 #!:apple        ????BMPf
1104 # cbSize; size of header like 28h 5Ch
1105 >>2     ulelong         x       \b, cbSize %u
1106 #>>2    ulelong         x       \b, cbSize %#x
1107 # offNext; offset to data like 0 48h F2h 4Eh 64h C6h D2h D6h DAh E6h EAh 348h
1108 >>6     ulelong         >0      \b, data offset %u
1109 #>>6    ulelong         >0      \b, data offset %#x
1110 #>>(6.l) ubequad        !0      \b, data %#16.16llx
1111 # dimensions of the intended device like 640 x 480 for VGA or 1024 x 768
1112 >>10    uleshort        >0              \b, display %u
1113 >>>12   uleshort        >0              x %u
1114 # usType of first array element
1115 #>>14   string          x               \b, usType %2.2s
1116 # 1 space char after "1st"
1117 # no *.bga examples found https://www.openwith.org/file-extensions/bga/1342
1118 >>14    string          BM      \b; 1st 
1119 !:ext   bmp/bga
1120 >>14    string          CI      \b; 1st 
1121 !:ext   ico
1122 >>14    string          CP      \b; 1st 
1123 !:ext   ico
1124 >>14    string          IC      \b; 1st 
1125 !:ext   ico
1126 # no white-black pointer found
1127 #>>14   string          PT      \b; 1st 
1128 #!:ext  
1129 >>14    indirect        x       
1130
1131 # XPM icons (Greg Roelofs, newt@uchicago.edu)
1132 # Update:       Joerg Jenderek
1133 # URL:          http://fileformats.archiveteam.org/wiki/XPM
1134 # Reference:    http://www.x.org/docs/XPM/xpm.pdf
1135 #               http://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-xpm.trid.xml
1136 # Note:         called "X PixMap bitmap" by TrID and "X-Windows Pixmap Image" by DROID via PUID x-fmt/208
1137 # starting with c comment like: logo.xpm
1138 0       string                  /*\040
1139 # 9 byte c-comment "/* XPM */" not at the beginning like: mozicon16.xpm mozicon50.xpm (thunderbird)
1140 >0      search/0xCE             /*\ XPM\ */
1141 # skip DROID x-fmt-208-signature-id-620.xpm by looking for char aray without explict length
1142 # and match mh-logo.xpm (emacs)
1143 >>&0            search/1249     []
1144 >>>0            use             xpm-image
1145 # non standard because no 9 byte c-comment "/* XPM */" like: logo.xpm in qemu package
1146 >0      default                 x
1147 # words are separated by a white space which can be composed of space and tabulation characters
1148 >>0             search/0x52     static\040char\040
1149 # skip debug.c testmlc.c by looking for char aray without explict length
1150 # https://www.clamav.net/downloads/production/clamav-0.104.2.tar.gz
1151 # clamav-0.104.2\libclammspack\mspack\debug.c 
1152 >>>&0           search/64       []
1153 >>>>0           use             xpm-image
1154 #       display X pixmap image information
1155 0       name                    xpm-image
1156 >0      string          x       X pixmap image text
1157 #!:mime text/plain
1158 # https://reposcope.com/mimetype/image/x-xpixmap
1159 # alias
1160 #!:mime image/x-xpm
1161 !:mime  image/x-xpixmap
1162 !:ext   xpm
1163 # NO pm example found!
1164 #!:ext  xpm/pm
1165 # look for start of character array at beginning of a line like: psetupl.xpm (OpenOffice 4.1.7)
1166 >0      search/0x406    \n"
1167 # DEBUG VALUES string
1168 #>>&0   string          x               '%s'
1169 # width with optional white space before like: 16 24 32 48 1280
1170 >>&0    regex/8         [0-9]{1,5}      \b, %s
1171 # height with white space like: 15 16 17 24 32 48 1024
1172 >>>&0   regex/8         [0-9]{1,5}      x %s
1173 # number of colors with white space like: 1 2 3 4 5 8 11 14 162 255 but unrelistic 4294967295 by hardcopy tool
1174 >>>>&0  regex/12        [0-9]{1,9}      x %s
1175 # chars_per_pixel with white space like: 1 2
1176 >>>>>&0 regex/14        [0-9]{1,2}      \b, %s chars/pixel
1177 # non standard because not starting with 9 byte c-comment "/* XPM */"
1178 >0      string          !/*\ XPM\ */
1179 >>0     string          x       \b, 1st line "%s"
1180
1181 # Utah Raster Toolkit RLE images (janl@ifi.uio.no)
1182 0       uleshort        0xcc52          RLE image data,
1183 >6      uleshort        x               %d x
1184 >8      uleshort        x               %d
1185 >2      uleshort        >0              \b, lower left corner: %d
1186 >4      uleshort        >0              \b, lower right corner: %d
1187 >10     ubyte&0x1       =0x1            \b, clear first
1188 >10     ubyte&0x2       =0x2            \b, no background
1189 >10     ubyte&0x4       =0x4            \b, alpha channel
1190 >10     ubyte&0x8       =0x8            \b, comment
1191 >11     ubyte           >0              \b, %d color channels
1192 >12     ubyte           >0              \b, %d bits per pixel
1193 >13     ubyte           >0              \b, %d color map channels
1194
1195 # image file format (Robert Potter, potter@cs.rochester.edu)
1196 0       string          Imagefile\ version-     iff image data
1197 # this adds the whole header (inc. version number), informative but longish
1198 >10     string          >\0             %s
1199
1200 # Sun raster images, from Daniel Quinlan (quinlan@yggdrasil.com)
1201 0       ubelong         0x59a66a95      Sun raster image data
1202 >4      ubelong         >0              \b, %d x
1203 >8      ubelong         >0              %d,
1204 >12     ubelong         >0              %d-bit,
1205 #>16    ubelong         >0              %d bytes long,
1206 >20     ubelong         0               old format,
1207 #>20    ubelong         1               standard,
1208 >20     ubelong         2               compressed,
1209 >20     ubelong         3               RGB,
1210 >20     ubelong         4               TIFF,
1211 >20     ubelong         5               IFF,
1212 >20     ubelong         0xffff          reserved for testing,
1213 >24     ubelong         0               no colormap
1214 >24     ubelong         1               RGB colormap
1215 >24     ubelong         2               raw colormap
1216 #>28    ubelong         >0              colormap is %d bytes long
1217
1218 # SGI image file format, from Daniel Quinlan (quinlan@yggdrasil.com)
1219 #
1220 # See
1221 #       http://reality.sgi.com/grafica/sgiimage.html
1222 #
1223 0       ubeshort                474             SGI image data
1224 #>2     ubyte           0               \b, verbatim
1225 >2      ubyte           1               \b, RLE
1226 #>3     ubyte           1               \b, normal precision
1227 >3      ubyte           2               \b, high precision
1228 >4      ubeshort        x               \b, %d-D
1229 >6      ubeshort        x               \b, %d x
1230 >8      ubeshort        x               %d
1231 >10     ubeshort        x               \b, %d channel
1232 >10     ubeshort        !1              \bs
1233 >80     string          >0              \b, "%s"
1234
1235 0       string          IT01            FIT image data
1236 >4      ubelong         x               \b, %d x
1237 >8      ubelong         x               %d x
1238 >12     ubelong         x               %d
1239 #
1240 0       string          IT02            FIT image data
1241 >4      ubelong         x               \b, %d x
1242 >8      ubelong         x               %d x
1243 >12     ubelong         x               %d
1244 #
1245 2048    string          PCD_IPI         Kodak Photo CD image pack file
1246 >0xe02  ubyte&0x03      0x00            , landscape mode
1247 >0xe02  ubyte&0x03      0x01            , portrait mode
1248 >0xe02  ubyte&0x03      0x02            , landscape mode
1249 >0xe02  ubyte&0x03      0x03            , portrait mode
1250 0       string          PCD_OPA         Kodak Photo CD overview pack file
1251
1252 # FITS format.  Jeff Uphoff <juphoff@tarsier.cv.nrao.edu>
1253 # FITS is the Flexible Image Transport System, the de facto standard for
1254 # data and image transfer, storage, etc., for the astronomical community.
1255 # (FITS floating point formats are big-endian.)
1256 0       string  SIMPLE\ \ =     FITS image data
1257 !:mime  image/fits
1258 !:ext   fits/fts
1259 >109    string  8               \b, 8-bit, character or unsigned binary integer
1260 >108    string  16              \b, 16-bit, two's complement binary integer
1261 >107    string  \ 32            \b, 32-bit, two's complement binary integer
1262 >107    string  -32             \b, 32-bit, floating point, single precision
1263 >107    string  -64             \b, 64-bit, floating point, double precision
1264
1265 # other images
1266 0       string  This\ is\ a\ BitMap\ file       Lisp Machine bit-array-file
1267
1268 # From SunOS 5.5.1 "/etc/magic" - appeared right before Sun raster image
1269 # stuff.
1270 #
1271 0       ubeshort                0x1010          PEX Binary Archive
1272
1273 # DICOM medical imaging data
1274 # URL:          https://en.wikipedia.org/wiki/DICOM#Data_format
1275 # Note:         "dcm" is the official file name extension
1276 #               XnView mention also "dc3" and "acr" as file name extension
1277 128     string  DICM                    DICOM medical imaging data
1278 !:mime  application/dicom
1279 !:ext dcm/dicom/dic
1280
1281 # XWD - X Window Dump file.
1282 # URL:          http://fileformats.archiveteam.org/wiki/XWD
1283 # Reference:    https://wiki.multimedia.cx/index.php?title=XWD
1284 #               http://mark0.net/download/triddefs_xml.7z/defs/x/xdm-x11.trid.xml
1285 # Note:         called "X-Windows Screen Dump (X11)" by TrID and
1286 #               "X-Windows Screen Dump" version X11 by DROID via PUID fmt/483
1287 #               verfied by XnView `nconvert -in xwd -info *`
1288 #               and ImageMagick 6.9.11 `identify -verbose *` as XWD X Windows system window dump
1289 #               and `xwud -in fig41.wxd -dumpheader`
1290 #   As described in /usr/X11R6/include/X11/XWDFile.h
1291 #   used by the xwd program.
1292 #   Bradford Castalia, idaeim, 1/01
1293 #   updated by Adam Buchbinder, 2/09 and Joerg Jenderek, May 2022
1294 # The following assumes version 7 of the format; the first long is the length
1295 # of the header, which is at least 25 4-byte longs, and the one at offset 8
1296 # is a constant which is always either 1 or 2. Offset 12 is the pixmap depth,
1297 # which is a maximum of 32.
1298 # Size of the entire file header (bytes) like: 100 104 105 106 107 109 110 113 114 115 118 172
1299 0       ubelong >99
1300 # pixmap_format; Pixmap format; 0~1-bit (XYBitmap) format 1~single-plane (XYPixmap) 2~bitmap with two or more planes (ZPixmap)
1301 >8      ubelong <3
1302 # pixmap_depth; Pixmap depth; value 1 - 32
1303 >>12    ubelong <33
1304 # file_version; XWD_FILE_VERSION=7
1305 >>>4    ubelong 7
1306 # skip DROID fmt-401-signature-id-618.xwd by test for existing border field
1307 >>>>96  ubelong x                       X-Window screen dump image data, version X11
1308 # ./images (version 1.205) labeled the above entry as "XWD X Window Dump image data"
1309 # https://reposcope.com/mimetype/image/x-xwindowdump
1310 !:mime  image/x-xwindowdump
1311 #!:ext  xwd
1312 !:ext   xwd/dmp
1313 # https://www.xnview.com/en/image_formats/ NO example with x11 suffix FOUND!
1314 #!:ext  xwd/dmp/x11
1315 # https://www.nationalarchives.gov.uk/PRONOM/fmt/401 NO example with xdm suffix FOUND!
1316 #!:ext  xwd/dmp/x11/xmd
1317 # file comment if header > 100; so not in MARBLES.XWD and hardcopy-x-window-v11.xwd
1318 >>>>>0  ubelong >100
1319 # comment or windows name
1320 >>>>>>100 string        >\0                     \b, "%s"
1321 # pixmap_width; pixmap width like: 576 800 1014 1280 1419 NOT -1414812757=abABabABh
1322 >>>>>16 ubelong x                       \b, %dx
1323 # pixmap_height; pixmap height like: 449 454 600 704 720 1001 1024 NOT -1414812757=abABabABh
1324 >>>>>20 ubelong x                       \b%dx
1325 # pixmap_depth; pixmap depth
1326 >>>>>12 ubelong x                       \b%d
1327 # XOffset; Bitmap X offset; pixel numbers to ignore at the beginning of each scan-line
1328 #>>>>>24        ubelong x                       \b, %u ignore
1329 # ByteOrder; byte order of image data: 0~least significant byte first 1~most significant byte first
1330 >>>>>28 ubelong >0                      \b, order %u
1331 # BitmapUnit; bitmap base data size unit in each scan line like: 8 16 32
1332 #>>>>>32        ubelong x                       \b, unit %u
1333 # BitmapBitOrder; bit-order of image data; apparently same as ByteOrder
1334 #>>>>>36        ubelong x                       \b, bit order %u
1335 # BitmapPad; number of padding bits added to each scan line like: 8 16 32
1336 #>>>>>40        ubelong x                       \b, pad %u
1337 # BitsPerPixel; Bits per pixel: 1~StaticGray and GrayScale 2-15~StaticColor and PseudoColor 16,24,32~TrueColor and DirectColor
1338 #>>>>>44        ubelong x                       \b, %u bits/pixel
1339 # BytesPerLine; size of each scan line in bytes
1340 #>>>>>48        ubelong x                       \b, %u bytes/line
1341 # VisualClass; class of the image: 0~StaticGray 1~GrayScale 2~StaticColor 3~PseudoColor 4~TrueColor 5~DirectColor
1342 #>>>>>52        ubelong x                       \b, %u Class
1343 # RedMask; red RGB mask values used by ZPixmaps like: 0 0xff0000
1344 #>>>>>56        ubelong !0                      \b, %#x red
1345 # GreenMask; green mask like: 0
1346 #>>>>>60        ubelong !0                      \b, %#x green
1347 # BlueMask; blue mask like: 0 0xff
1348 #>>>>>64        ubelong !0                      \b, %#x blue
1349 # BitsPerRgb; Size of each color mask in bits like: 0 1 8 24
1350 #>>>>>68        ubelong x                       \b, %u bits/RGB
1351 # NumberOfColors; number of colors in image like: 256 4 2 0 (WHAT DOES THIS MEAN?)
1352 >>>>>72 ubelong x                       \b, %u colors
1353 # ColorMapEntries; number of entries in color map like: 256 16 2 0~no color map
1354 >>>>>76 ubelong x                       %u entries
1355 # WindowWidth; window width
1356 #>>>>>80        ubelong x                       \b, %u width
1357 # WindowHeight; window height
1358 #>>>>>84        ubelong x                       \b, %u height
1359 # WindowX; Window upper left X coordinate like: 0 24 32 80 237 290 422 466 568 (lenna.dmp)
1360 >>>>>88 ubelong !0                      \b, x=%d
1361 # WindowY; Window upper left Y coordinate like: 0 8 18 26 60 73 107 (fig41.xwd) 128
1362 >>>>>92 ubelong !0                      \b, y=%d
1363 # WindowBorderWidth; Window border width; apparently pixmap_width=WindowWidth+2*WindowBorderWidth
1364 # like: 1 (fig41.xwd) 2 (maze.dmp) 3 (lenna.dmp mandrill.dmp)
1365 >>>>>96 ubelong >0                      \b, %u border
1366 # From:         Joerg Jenderek
1367 # Reference:    http://mark0.net/download/triddefs_xml.7z/defs/x/xdm-x10.trid.xml
1368 # Note:         called "X-Windows Screen Dump (X10)" by TrID and
1369 #               "X-Windows Screen Dump" version X10 by DROID via PUID x-fmt/300
1370 #               verfied by XnView `nconvert -in xwd -info *`
1371 # HeaderSize is the size of the header in bytes; always 40 for X10 variant
1372 0       ubelong         =0x000000028
1373 # FileVersion; always 6 for X10 variant
1374 >4      ubelong         =6
1375 # skip DROID x-fmt-300-signature-id-619.xdm by test existing border field
1376 >>36    ubeshort        x               X-Window screen dump image data, version X10
1377 !:mime  image/x-xwindowdump
1378 !:ext   xwd
1379 # http://www.nationalarchives.gov.uk/pronom/fmt/401 NO example with xdm suffix FOUND!
1380 #!:ext  xwd/xdm
1381 # PixmapWidth; pixmap width like: 127 1280
1382 >>>20   ubelong         x               \b, %d
1383 # PixmapHeight; pixmap height like: 64 1024
1384 >>>24   ubelong         x               \bx%d
1385 # DisplayPlanes; number of display planes like: 1 4 8
1386 >>>12   ubelong         x               \bx%u
1387 # DisplayType; display type like: 1 3
1388 #>>>8   ubelong         x               \b, type %u
1389 # PixmapFormat; pixmap format like: 1~bitmap with two or more planes (ZPixmap) 0~single-plane bitmap (XYBitmap)
1390 #>>>16  ubelong x                       \b, %u format
1391 # WindowWidth; window width; probably PixmapWidth=WindowWidth+2*WindowBorderWidth
1392 #>>>28  ubeshort        x               \b, width %u
1393 # WindowHeight;  window height; probably PixmapWidth=PixmapHeight+2*WindowBorderWidth
1394 #>>>30  ubeshort        x               \b, height %u
1395 # WindowX; window upper left X coordinate like: 0
1396 >>>32   ubeshort                !0      \b, x=%d
1397 # WindowY; window upper left Y coordinate like: 0
1398 >>>34   ubeshort                !0      \b, y=%d
1399 # WindowBorderWidth; window border width like: 0
1400 >>>36   ubeshort        !0              \b, %u border
1401 # WindowNumColors; Number of color entries in window like: 2 16 256
1402 #>>>38  ubeshort        x               \b, %u colors
1403 # if the image is a PseudoColor image, a color map immediately follows the header. X10COLORMAP[WindowNumColors];
1404 # EntryNumber; number of the color-map entry like: 0
1405 #>>>40  ubeshort        x               \b, colors #%u
1406 # Red; red-channel value
1407 #>>>42  ubeshort        !0              \b, red %#x
1408 # Green; green-channel value
1409 #>>>44  ubeshort        !0              \b, green %#x
1410 # Blue; blue-channel value
1411 #>>>46  ubeshort        !0              \b, blue %#x
1412 # 2ND Entry like: 2
1413 #>>>48  ubeshort        x               \b, colors #%u
1414
1415 # PDS - Planetary Data System
1416 #   These files use Parameter Value Language in the header section.
1417 #   Unfortunately, there is no certain magic, but the following
1418 #   strings have been found to be most likely.
1419 0       string  NJPL1I00                PDS (JPL) image data
1420 2       string  NJPL1I                  PDS (JPL) image data
1421 0       string  CCSD3ZF                 PDS (CCSD) image data
1422 2       string  CCSD3Z                  PDS (CCSD) image data
1423 0       string  PDS_                    PDS image data
1424 0       string  LBLSIZE=                PDS (VICAR) image data
1425
1426 # pM8x: ATARI STAD compressed bitmap format
1427 #
1428 # from Oskar Schirmer <schirmer@scara.com> Feb 2, 2001
1429 # p M 8 5/6 xx yy zz data...
1430 # Atari ST STAD bitmap is always 640x400, bytewise runlength compressed.
1431 # bytes either run horizontally (pM85) or vertically (pM86). yy is the
1432 # most frequent byte, xx and zz are runlength escape codes, where xx is
1433 # used for runs of yy.
1434 #
1435 0       string  pM85            Atari ST STAD bitmap image data (hor)
1436 >5      ubyte   0x00            (white background)
1437 >5      ubyte   0xFF            (black background)
1438 0       string  pM86            Atari ST STAD bitmap image data (vert)
1439 >5      ubyte   0x00            (white background)
1440 >5      ubyte   0xFF            (black background)
1441
1442 # From: Alex Myczko <alex@aiei.ch>
1443 # https://www.atarimax.com/jindroush.atari.org/afmtatr.html
1444 0       uleshort        0x0296          Atari ATR image
1445
1446 # URL:          http://fileformats.archiveteam.org/wiki/DEGAS_image
1447 # Reference:    https://wiki.multimedia.cx/index.php?title=Degas
1448 # From:         Joerg Jenderek
1449 #               http://mark0.net/download/triddefs_xml.7z/defs/b
1450 #               bitmap-pi2-degas.trid.xml bitmap-pi3-degas.trid.xml
1451 #               bitmap-pc1-degas.trid.xml bitmap-pc2-degas.trid.xml bitmap-pc3-degas.trid.xml 
1452 # Note:         verified by NetPBM `pi3topbm sigirl1.pi3 | file`
1453 #               `deark -m degas -l -d2 ataribak.pi1` 
1454 #               XnView `nconvert -fullinfo *.p??`
1455 # DEGAS low-res uncompressed bitmap *.pi1
1456 0               beshort         0x0000
1457 # skip some ISO 9660 CD-ROM filesystems like plpbt.iso by test for 4 non black colors in palette entries
1458 >2              quad            !0
1459 # skip g3test.g3 by test for unused bits of 2nd color entry
1460 >>4             ubeshort&0xF000 0
1461 #>>>0           beshort x       1ST_VALUE=%x
1462 >>>-0           offset  x       FILE_SIZE=%lld
1463 # standard DEGAS low-res uncompressed bitmap *.pi1 with file size 32034
1464 >>>-0           offset  =32034  VARIANT_STANDARD
1465 #>>>>0          beshort x       1st_VALUE=%x
1466 # like: 8ball.pi1 teddy.pi1 sonic01.pi1 
1467 >>>>0           use             degas-bitmap
1468 # about 61 DEGAS Elite low-res uncompressed bitmap *.pi1 with file size 32066
1469 >>>-0           offset  =32066  VARIANT_ELITE
1470 # like: spider.pi1 pinkgirl.pi1 frog3.pi1
1471 >>>>0           use             degas-bitmap
1472 # about 55 DEGAS Elite low-res uncompressed bitmap *.pi1 with file size 32128
1473 >>>-0           offset  =32128  VARIANT_3
1474 # like: mountain.pi1 bigspid.pi1 alf33.pi1
1475 >>>>0           use             degas-bitmap
1476 # 1 DEGAS Elite low-res uncompressed bitmap *.pi1 with file size 44834
1477 >>>-0           offset  =44834  VARIANT_4
1478 # like: kenshin.pi1
1479 >>>>0           use             degas-bitmap
1480 # DEGAS mid-res uncompressed bitmap *.pi2 (strength=50) after GEM Images like:
1481 # BEETHVEN.IMG CHURCH.IMG GAMEOVR4.IMG TURKEY.IMG clinton.img
1482 0               beshort         0x0001
1483 #!:strength +0
1484 # skip many control files like gnucash-4.8.setup.exe.aria2 by test for non black in 4 palette entries
1485 >2              quad            !0
1486 # skip control file load-v0001.aria2 by test for unused bits of 5th color palette entry
1487 >>10            ubeshort&0xF000 0
1488 # skip many GEM Image data like DANCER.IMG GAMEOVR4.IMG SHIP.IMG by test for unused bits of 8th color palette entry
1489 >>>16           ubeshort&0xF000 0
1490 # skip many GEM Image data like BEETHVEN.IMG CABINETS.IMG MEMO.IMG by test for unused bits of 14th color palette entry
1491 >>>>28          ubeshort&0xF000 0
1492 # skip few GEM Image data like CHURCH.IMG by test for unused bits of 15th color palette entry
1493 >>>>>30         ubeshort&0xF000 0
1494 # skip many GEM Image data like TIGER.IMG TURKEY.IMG XMAS.IMG by test for unused bits of 16th color palette entry
1495 >>>>>>32        ubeshort&0xF000 0
1496 # skip GEM Image data like clinton.img by test for existing bytes at the end
1497 >>>>>>>32026    quad            x
1498 >>>>>>>>0       use             degas-bitmap
1499 # DEGAS high-res uncompressed bitmap *.pi3
1500 0       beshort         0x0002
1501 # skip Intel ia64 COFF msvcrt.lib by test for unused bits of 1st atari color palette entry
1502 >2              ubeshort&0xF000 0
1503 # skip few Adobe PhotoShop Brushes like Faux-Spitzen.abr by check
1504 # for invalid Adobe PhotoShop Brush UTF16-LE string length
1505 >>19            ubyte                   =0
1506 # many like: 4th_ofj2.pi3 GEMINI03.PI3 PEOPLE18.PI3 POWERFIX.PI3 abydos.pi3 highres.pi3 sigirl1.pi3 vanna5.pi3
1507 >>>0            use             degas-bitmap
1508 # Adobe PhotoShop Brush UTF16-LE string length 15 "Gitter - klein " 8 "Kreis 1 "
1509 >>19            ubyte                   !0
1510 #>>19           ubyte                   !0      \b, NOTE LENGTH %u
1511 #>>>21          lestring16              x       \b, BRUSH NOTE "%s"
1512 >>>(19.b*2)     ubequad                 x
1513 # maybe last character of Adobe PhotoShop Brush UTF16-LE string and terminating nul char like
1514 # 006e0000 for n in "Faux-Spitzen.abr" 00310000 for 1 in "Verschiedene Spitzen.abr"
1515 # 00000000 "LEREDACT.PI3" 03730773 "TBX_DEMO.PI3"
1516 #>>>>&8         ubelong                 x       \b, LAST CHAR+NIL %8.8x
1517 >>>>&8          ubelong&0xff00ffFF      !0
1518 # many DEGAS bitmap like: ARABDEMO.PI3 ELMRSESN.PI3 GEMVIEW.PI3 LEREDACT.PI3 PICCOLO.PI3 REPRO_JR.PI3 ST_TOOLS.PI3 TBX_DEMO.PI3 evgem7.pi3
1519 >>>>>0          use             degas-bitmap
1520 # test for last character of Adobe PhotoShop Brush UTF16-LE string and terminating nul char
1521 >>>>&8          ubelong&0xff00ffFF      =0
1522 # select last DEGAS bitmaps by invalid last char of brush note like BASICNES.PI3 DB_HELP.PI3 DB_WRITR.PI3 LEREDACT.PI3
1523 >>>>>&-4        ubelong&0x00FF0000      <0x00200000
1524 >>>>>>0         use             degas-bitmap
1525 # last character of Adobe PhotoShop Brush UTF16-LE note
1526 #>>>>>&-4       ubelong&0x00FF0000      >0x001F0000     \b, THAT IS ABR
1527 # DEGAS low-res compressed bitmap *.pc1 like: BATTLSHP.PC1 GNUCHESS.PC1 MEDUSABL.PC1 MOONLORD.PC1 WILDROSE.PC1
1528 0               beshort                 0x8000
1529 # skip lif files handled via ./lif by test for unused bits of 1st palette entry
1530 >2              ubeshort&0xF000         0
1531 >>0             use             degas-bitmap
1532 # DEGAS mid-res compressed bitmap *.pc2 like: abydos.pc2 ARTIS3.PC2 SMTHDRAW.PC2 STAR_2K.PC2 TX2_DEMO.PC2
1533 0               beshort                 0x8001
1534 >0              use             degas-bitmap
1535 # DEGAS high-res compressed bitmap *.pc3 like: abydos.pc3 COYOTE.PC3 ELEPHANT.PC3 TX2_DEMO.PC3 SMTHDRAW.PC3
1536 0               beshort                 0x8002
1537 >0              use             degas-bitmap
1538 # display information of Atari DEGAS and DEGAS Elite bitmap images
1539 0       name            degas-bitmap
1540 >0      ubyte           x               Atari DEGAS
1541 #!:mime application/octet-stream
1542 !:mime  image/x-atari-degas
1543 # compressed
1544 >0      ubyte           =0x80           Elite compressed
1545 # uncompressed
1546 #>0     ubyte           =0x00           uncompressed
1547 #>0     ubyte           =0x00           un.
1548 >0      ubyte           =0x00
1549 # check for existence of footer for DEGAS Elite images
1550 >>32042 ubequad         x               Elite
1551 >0      beshort         0x0000          bitmap
1552 !:ext   pi1
1553 >0      beshort         0x0001          bitmap
1554 !:ext   pi2
1555 >0      beshort         0x0002          bitmap
1556 # no example with SUH extension found
1557 #!:ext  pi3/suh
1558 !:ext   pi3
1559 >0      beshort         0x8000          bitmap
1560 !:ext   pc1
1561 >0      beshort         0x8001          bitmap
1562 !:ext   pc2
1563 >0      beshort         0x8002          bitmap
1564 !:ext   pc3
1565 # low resolution; 320x200, 16 colors
1566 >1      ubyte           =0              320 x 200 x 16
1567 # medium resolution; 640x200, 4 colors
1568 >1      ubyte           =1              640 x 200 x 4
1569 # high resolution; 640x400, 2 colors 
1570 >1      ubyte           =2              640 x 400 x 2
1571 # http://fileformats.archiveteam.org/wiki/Atari_ST_color_palette
1572 # hardware_palette[16]; 9 bit ?????RRR?GGG?BBB; 12 bit ????RRRRGGGGBBBB for Atari STE
1573 # for Atari DEGAS apparently no Spectrum 512 Enhanced 15 bit palette RGB?RRRRGGGGBBBB 
1574 # Red Green Blue unused bit ? often 0 but not bilboule.pi1; color_value (examples or numbers)
1575 # 1st color palette entry like: 0777 (61) 0fff (LEREDACT.PI3) 0fcf (devgem7.pi3) 0001 (9)
1576 >2      ubeshort        x               \b, color palette %4.4x
1577 # 2nd palette entry like: 0000 (32) 0700 (38) 0f00 (LEREDACT.PI3 devgem7.pi3)
1578 >4      ubeshort        x               %4.4x
1579 # 3rd palette entry
1580 >6      ubeshort        x               %4.4x
1581 # 4th palette entry like: 0000 (72)
1582 >8      ubeshort        x               %4.4x
1583 # 5th palette entry
1584 >10     ubeshort        x               %4.4x
1585 >2      ubeshort        x               ...
1586 # 6th palette entry
1587 #>12    ubeshort        x               %4.4x
1588 # 7th palette entry like: 0000 (16) 0001 (ELMRSESN.PI3 elmrsesn.pi3) 0070 (51) 00f0 (BASICNES.PI3 LEREDACT.PI3) 00f8 (devgem7.pi3)
1589 #>14    ubeshort        x               %4.4x
1590 # 8th palette entry
1591 #>16    ubeshort        x               %4.4x
1592 # 9 palette entry
1593 #>18    ubeshort        x               %4.4x
1594 # 10 palette entry
1595 #>20    ubeshort        x               %4.4x
1596 # 11 palette entry
1597 #>22    ubeshort        x               %4.4x
1598 # 12 palette entry
1599 #>24    ubeshort        x               %4.4x
1600 # 13 palette entry
1601 #>26    ubeshort        x               %4.4x
1602 # 14th palette entry
1603 #>28    ubeshort        x               %4.4x
1604 # 15th palette entry
1605 #>30    ubeshort        x               %4.4x
1606 # 16th palette entry
1607 #>32    ubeshort        x               %4.4x
1608 # data[16000] for uncompressed images; pixel data
1609 #>34    ubequad         x               \b, DATA %#16.16llx...
1610 # footer for Elite variant images
1611 # https://www.fileformat.info/format/atari/egff.htm
1612 # https://pulkomandy.tk/projects/GrafX2/wiki/Develop/FileFormats/Atari
1613 # left_color_animation[4]; like: 0000000000000000 0000000100020003 fffafff000000030 (bigspid.pi1)
1614 #>32034  ubequad                !0              \b, color animations %16.16llx (left)
1615 # right_color_animation[4]; like: 0000000000000000 0000000100020003
1616 #>>32042  ubequad       !0              %16.16llx (right)
1617 # channel_direction[4]; 0~left 1~none 2~right like: 0001000100010001 0002000000010001 (cycle2.pi1)
1618 # sometimes unexpected like: feaafc0000000000 (bigspid.pi1)
1619 #>32050  ubequad                !0              \b, channel directions %16.16llx
1620 # channel_delay[4]; 128 - channel delay, timebase 1/60 s
1621 #>32058  ubequad                !0              \b, channel delays %16.16llx
1622
1623 # From:         Joerg Jenderek
1624 # URL:          http://fileformats.archiveteam.org/wiki/ImageLab/PrintTechnic
1625 # Reference:    http://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-b_w.trid.xml
1626 # Note:         called "ImageLab bitmap" by TrID
1627 #               verfied by XnView `nconvert -fullinfo "MAEDCHEN.B&W"`
1628 0       string          B&W256  ImageLab bitmap
1629 !:mime  image/x-ilab
1630 #       https://www.xnview.com/de/image_formats/
1631 # GRR: add char & inside parse_ext in ../../src/apprentice.c to avoid in file version 5.40 error like:
1632 # Magdir\images, 1090: Warning: EXTENSION type `        b_w/b&w' has bad char '&'
1633 !:ext   b_w/b&w
1634 # Width
1635 >6      ubeshort        x       \b, %u
1636 # Height
1637 >8      ubeshort        x       x %u
1638
1639 # XXX:
1640 # This is bad magic 0x5249 == 'RI' conflicts with RIFF and other
1641 # magic.
1642 # SGI RICE image file <mpruett@sgi.com>
1643 #0      ubeshort        0x5249          RICE image
1644 #>2     ubeshort        x               v%d
1645 #>4     ubeshort        x               (%d x
1646 #>6     ubeshort        x               %d)
1647 #>8     ubeshort        0               8 bit
1648 #>8     ubeshort        1               10 bit
1649 #>8     ubeshort        2               12 bit
1650 #>8     ubeshort        3               13 bit
1651 #>10    ubeshort        0               4:2:2
1652 #>10    ubeshort        1               4:2:2:4
1653 #>10    ubeshort        2               4:4:4
1654 #>10    ubeshort        3               4:4:4:4
1655 #>12    ubeshort        1               RGB
1656 #>12    ubeshort        2               CCIR601
1657 #>12    ubeshort        3               RP175
1658 #>12    ubeshort        4               YUV
1659
1660 # PCX image files
1661 # From: Dan Fandrich <dan@coneharvesters.com>
1662 # updated by Joerg Jenderek at Feb 2013 by https://de.wikipedia.org/wiki/PCX
1663 # https://web.archive.org/web/20100206055706/http://www.qzx.com/pc-gpe/pcx.txt
1664 # GRR: original test was still too general as it catches xbase examples T5.DBT,T6.DBT with 0xa000000
1665 # test for bytes 0x0a,version byte (0,2,3,4,5),compression byte flag(0,1), bit depth (>0) of PCX or T5.DBT,T6.DBT
1666 0       ubelong&0xffF8fe00      0x0a000000
1667 # for PCX bit depth > 0
1668 >3      ubyte           >0
1669 # test for valid versions
1670 >>1     ubyte           <6
1671 >>>1    ubyte           !1      PCX
1672 !:mime  image/x-pcx
1673 #!:mime image/pcx
1674 >>>>1   ubyte           0       ver. 2.5 image data
1675 >>>>1   ubyte           2       ver. 2.8 image data, with palette
1676 >>>>1   ubyte           3       ver. 2.8 image data, without palette
1677 >>>>1   ubyte           4       for Windows image data
1678 >>>>1   ubyte           5       ver. 3.0 image data
1679 >>>>4   uleshort        x       bounding box [%d,
1680 >>>>6   uleshort        x       %d] -
1681 >>>>8   uleshort        x       [%d,
1682 >>>>10  uleshort        x       %d],
1683 >>>>65  ubyte           >1      %d planes each of
1684 >>>>3   ubyte           x       %d-bit
1685 >>>>68  ubyte           1       colour,
1686 >>>>68  ubyte           2       grayscale,
1687 # this should not happen
1688 >>>>68  default         x       image,
1689 >>>>12  uleshort        >0      %d x
1690 >>>>>14 uleshort        x       %d dpi,
1691 >>>>2   ubyte           0       uncompressed
1692 >>>>2   ubyte           1       RLE compressed
1693
1694 # Adobe Photoshop
1695 # From: Asbjoern Sloth Toennesen <asbjorn@lila.io>
1696 # URL:          http://fileformats.archiveteam.org/wiki/PSD
1697 # Reference:    https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/
1698 # Note:         verfied by XnView `nconvert -fullinfo *.psd *.psb *.pdd`
1699 #               and ImageMagick `identify -verbose *.pdd`
1700 0       string          8BPS
1701 # skip DROID x-fmt-92-signature-id-277.psd by checking valid width
1702 >18     ubelong         >0      Adobe Photoshop
1703 !:mime  image/vnd.adobe.photoshop
1704 !:apple ????8BPS
1705 # version: always equal to 1, but 2 for PSB
1706 >>4   beshort 1
1707 # URL:          http://fileformats.archiveteam.org/wiki/PhotoDeluxe
1708 # EXTRAS/PHOTOS/DEMOPIX/ORIGINAL.PDD
1709 >>>34   search/0xC0d7   PHUT    Image (PhotoDeluxe)
1710 !:ext   pdd
1711 >>>34   default         x       Image
1712 !:ext   psd
1713 # URL:          http://fileformats.archiveteam.org/wiki/PSB
1714 >>4   beshort 2 Image (PSB)
1715 !:ext   psb
1716 # width in pixels: 1-30000 1-300000 for PSB
1717 >>18  belong  x \b, %d x
1718 >>14  belong  x %d,
1719 # The color mode; 0~Bitmap 1~Grayscale 2~Indexed 3~RGB 4~CMYK 7~Multichannel 9~Duotone 9~Lab
1720 >>24  beshort 0 bitmap
1721 >>24  beshort 1 grayscale
1722 # the number of channels; range is 1 to 56
1723 >>>12 beshort 2 with alpha
1724 >>24  beshort 2 indexed
1725 >>24  beshort 3 RGB
1726 >>>12 beshort 4 \bA
1727 >>24  beshort 4 CMYK
1728 >>>12 beshort 5 \bA
1729 >>24  beshort 7 multichannel
1730 >>24  beshort 8 duotone
1731 >>24  beshort 9 lab
1732 >>12  beshort > 1
1733 >>>12 beshort x \b, %dx
1734 >>12  beshort 1 \b,
1735 >>22  beshort x %d-bit channel
1736 >>12  beshort > 1 \bs
1737 # 6 reserved bytes; must be zero, but spaces inside ImageMagick input.psd
1738 # https://download.imagemagick.org/ImageMagick/download/ImageMagick-7.0.11-11.zip
1739 # ImageMagick-7.0.11-11\PerlMagick\t\input.psd
1740 >>6   bequad&0xFFffFFffFFff0000 !0 \b, at offset 6
1741 >>>6  belong  x  0x%8.8x
1742 >>>6  beshort x   \b%4.4x
1743
1744 # XV thumbnail indicator (ThMO)
1745 # URL:          https://en.wikipedia.org/wiki/Xv_(software)
1746 # Reference:    http://fileformats.archiveteam.org/wiki/XV_thumbnail
1747 # Update:       Joerg Jenderek
1748 0       string          P7\ 332         XV thumbnail image data
1749 #0      string          P7\ 332         XV "thumbnail file" (icon) data
1750 !:mime  image/x-xv-thumbnail
1751 # thumbnail .xvpic/foo.bar for graphic foo.bar
1752 !:ext   p7/gif/tif/xpm/jpg
1753
1754 # NITF is defined by United States MIL-STD-2500A
1755 0       string  NITF    National Imagery Transmission Format
1756 >25     string  >\0     dated %.14s
1757
1758 # GEM Image: Version 1, Headerlen 8 (Wolfram Kleff)
1759 # Format variations from: Bernd Nuernberger <bernd.nuernberger@web.de>
1760 # Update: Joerg Jenderek
1761 # See http://fileformats.archiveteam.org/wiki/GEM_Raster
1762 # For variations, also see:
1763 #    https://www.seasip.info/Gem/ff_img.html (Ventura)
1764 #    http://www.atari-wiki.com/?title=IMG_file (XIMG, STTT)
1765 #    http://www.fileformat.info/format/gemraster/spec/index.htm (XIMG, STTT)
1766 #    http://sylvana.net/1stguide/1STGUIDE.ENG (TIMG)
1767 0       beshort     0x0001
1768 # header_size
1769 >2      beshort     0x0008
1770 >>0     use gem_info
1771 >2      beshort     0x0009
1772 >>0     use gem_info
1773 # no example for NOSIG
1774 >2      beshort     24
1775 >>0     use gem_info
1776 # no example for HYPERPAINT
1777 >2      beshort     25
1778 >>0     use gem_info
1779 16      string      XIMG\0
1780 >0      use gem_info
1781 # no example
1782 16      string      STTT\0\x10
1783 >0      use gem_info
1784 # no example or description
1785 16      string      TIMG\0
1786 >0      use gem_info
1787
1788 0   name        gem_info
1789 # version is 2 for some XIMG and 1 for all others
1790 >0      ubeshort                <0x0003         GEM
1791 # https://www.snowstone.org.uk/riscos/mimeman/mimemap.txt
1792 !:mime  image/x-gem
1793 # header_size 24 25 27 59 779 words for colored bitmaps
1794 >>2     ubeshort        >9
1795 >>>16   string          STTT\0\x10      STTT
1796 >>>16   string          TIMG\0          TIMG
1797 # HYPERPAINT or NOSIG variant
1798 >>>16   string          \0\x80
1799 >>>>2   ubeshort        =24             NOSIG
1800 >>>>2   ubeshort        !24             HYPERPAINT
1801 # NOSIG or XIMG variant
1802 >>>16   default         x
1803 >>>>16  string          !XIMG\0         NOSIG
1804 >>16    string          =XIMG\0         XIMG Image data
1805 !:ext   img/ximg
1806 # to avoid Warning: Current entry does not yet have a description for adding a EXTENSION type
1807 >>16    string          !XIMG\0         Image data
1808 !:ext   img
1809 # header_size is 9 for Ventura files and 8 for other GEM Paint files
1810 >>2     ubeshort        9               (Ventura)
1811 #>>2    ubeshort        8               (Paint)
1812 >>12    ubeshort        x               %d x
1813 >>14    ubeshort        x               %d,
1814 # 1 4 8
1815 >>4     ubeshort        x               %d planes,
1816 # in tenths of a millimetre
1817 >>8     ubeshort        x               %d x
1818 >>10    ubeshort        x               %d pixelsize
1819 # pattern_size 1-8. 2 for GEM Paint
1820 >>6     ubeshort        !2              \b, pattern size %d
1821
1822 # GEM Metafile (Wolfram Kleff)
1823 0       ulelong         0x0018FFFF      GEM Metafile data
1824 >4      uleshort        x               version %d
1825
1826 #
1827 # SMJPEG. A custom Motion JPEG format used by Loki Entertainment
1828 # Software Torbjorn Andersson <d91tan@Update.UU.SE>.
1829 #
1830 0       string  \0\nSMJPEG      SMJPEG
1831 >8      ubelong x               %d.x data
1832 # According to the specification you could find any number of _TXT
1833 # headers here, but I can't think of any way of handling that. None of
1834 # the SMJPEG files I tried it on used this feature. Even if such a
1835 # file is encountered the output should still be reasonable.
1836 >16     string          _SND            \b,
1837 >>24    ubeshort        >0              %d Hz
1838 >>26    ubyte           8               8-bit
1839 >>26    ubyte           16              16-bit
1840 >>28    string          NONE            uncompressed
1841 # >>28  string          APCM            ADPCM compressed
1842 >>27    ubyte           1               mono
1843 >>28    ubyte           2               stereo
1844 # Help! Isn't there any way to avoid writing this part twice?
1845 # Yes, use a name/use
1846 >>32    string          _VID            \b,
1847 # >>>48 string          JFIF            JPEG
1848 >>>40   ubelong         >0              %d frames
1849 >>>44   ubeshort        >0              (%d x
1850 >>>46   ubeshort        >0              %d)
1851 >16     string          _VID            \b,
1852 # >>32  string          JFIF            JPEG
1853 >>24    ubelong         >0              %d frames
1854 >>28    ubeshort        >0              (%d x
1855 >>30    ubeshort        >0              %d)
1856
1857 0       string  Paint\ Shop\ Pro\ Image\ File   Paint Shop Pro Image File
1858
1859 # taken from fkiss: (<yav@mte.biglobe.ne.jp> ?)
1860 0       string          KiSS            KISS/GS
1861 >4      ubyte           16              color
1862 >>5     ubyte           x               %d bit
1863 >>8     uleshort        x               %d colors
1864 >>10    uleshort        x               %d groups
1865 >4      ubyte           32              cell
1866 >>5     ubyte           x               %d bit
1867 >>8     uleshort        x               %d x
1868 >>10    uleshort        x               %d
1869 >>12    uleshort        x               +%d
1870 >>14    uleshort        x               +%d
1871
1872 # Webshots (www.webshots.com), by John Harrison
1873 0       string          C\253\221g\230\0\0\0 Webshots Desktop .wbz file
1874
1875 # Hercules DASD image files
1876 # From Jan Jaeger <jj@septa.nl> and Jay Maynard <jaymaynard@gmail.com>
1877 0       string  CKD_P370        Hercules CKD DASD image file
1878 >8      lelong  x               \b, %d heads per cylinder
1879 >12     lelong  x               \b, track size %d bytes
1880 >16     byte    x               \b, device type 33%2.2X
1881
1882 0       string  CKD_C370        Hercules compressed CKD DASD image file
1883 >8      lelong  x               \b, %d heads per cylinder
1884 >12     lelong  x               \b, track size %d bytes
1885 >16     byte    x               \b, device type 33%2.2X
1886 >552    lelong  x               \b, %d total cylinders
1887 >>557   byte    0               \b, no compression
1888 >>557   byte    1               \b, ZLIB compression
1889 >>557   byte    2               \b, BZ2 compression
1890
1891 0       string  CKD_S370        Hercules CKD DASD shadow file
1892 >8      lelong  x               \b, %d heads per cylinder
1893 >12     lelong  x               \b, track size %d bytes
1894 >16     byte    x               \b, device type 33%2.2X
1895
1896 0       string  CKD_P064        Hercules CKD64 DASD image file
1897 >8      lelong  x               \b, %d heads per cylinder
1898 >12     lelong  x               \b, track size %d bytes
1899 >16     byte    x               \b, device type 33%2.2X
1900
1901 0       string  CKD_C064        Hercules compressed CKD64 DASD image file
1902 >8      lelong  x               \b, %d heads per cylinder
1903 >12     lelong  x               \b, track size %d bytes
1904 >16     byte    x               \b, device type 33%2.2X
1905 >524    lelong  x               \b, %d total cylinders
1906 >>585   byte    0               \b, no compression
1907 >>585   byte    1               \b, ZLIB compression
1908 >>585   byte    2               \b, BZ2 compression
1909
1910 0       string  CKD_S064        Hercules CKD64 DASD shadow file
1911 >8      lelong  x               \b, %d heads per cylinder
1912 >12     lelong  x               \b, track size %d bytes
1913 >16     byte    x               \b, device type 33%2.2X
1914
1915 # Squeak images and programs - etoffi@softhome.net
1916 0       string          \146\031\0\0    Squeak image data
1917 0       search/1        'From\040Squeak Squeak program text
1918
1919 # partimage: file(1) magic for PartImage files (experimental, incomplete)
1920 # Author: Hans-Joachim Baader <hjb@pro-linux.de>
1921 0               string  PaRtImAgE-VoLuMe        PartImage
1922 >0x0020         string  0.6.1           file version %s
1923 >>0x0060        ulelong >-1             volume %d
1924 #>>0x0064 8 byte identifier
1925 #>>0x007c reserved
1926 >>0x0200        string  >\0             type %s
1927 >>0x1400        string  >\0             device %s,
1928 >>0x1600        string  >\0             original filename %s,
1929 # Some fields omitted
1930 >>0x2744        ulelong 0               not compressed
1931 >>0x2744        ulelong 1               gzip compressed
1932 >>0x2744        ulelong 2               bzip2 compressed
1933 >>0x2744        ulelong >2              compressed with unknown algorithm
1934 >0x0020         string  >0.6.1          file version %s
1935 >0x0020         string  <0.6.1          file version %s
1936
1937 # DCX is multi-page PCX, using a simple header of up to 1024
1938 # offsets for the respective PCX components.
1939 # From: Joerg Wunsch <joerg_wunsch@uriah.heep.sax.de>
1940 # Update:       Joerg Jenderek
1941 # URL:          http://fileformats.archiveteam.org/wiki/DCX
1942 0       ulelong 987654321       DCX multi-page
1943 # http://www.nationalarchives.gov.uk/pronom/x-fmt/348
1944 !:mime  image/x-dcx
1945 !:ext   dcx
1946 # The first file offset usually starts at file offset 0x1004
1947 # print 1 space after 0x100? offset and then handles PCX images by ./images
1948 >4      ulelong x               \b, at %#x 
1949 >(4.l)  indirect                x
1950 # possible 2nd PCX image
1951 #>8     ulelong !0              \b, at %#x 
1952 #>>(8.l)        indirect                x
1953 # possible 3rd PCX image
1954 #>12    ulelong !0              \b, at %#x 
1955 #>>(12.l)       indirect                x
1956
1957 # Simon Walton <simonw@matteworld.com>
1958 # Kodak Cineon format for scanned negatives
1959 # http://www.kodak.com/US/en/motion/support/dlad/
1960 0       ulelong  0xd75f2a80     Cineon image data
1961 >200    ubelong  >0             \b, %d x
1962 >204    ubelong  >0             %d
1963
1964
1965 # Bio-Rad .PIC is an image format used by microscope control systems
1966 # and related image processing software used by biologists.
1967 # From: Vebjorn Ljosa <vebjorn@ljosa.com>
1968 # BOOL values are two-byte integers; use them to rule out false positives.
1969 # https://web.archive.org/web/20050317223257/www.cs.ubc.ca/spider/ladic/text/biorad.txt
1970 # Samples: https://www.loci.wisc.edu/software/sample-data
1971 14      uleshort        <2
1972 >62     uleshort        <2
1973 >>54    uleshort        12345           Bio-Rad .PIC Image File
1974 >>>0    uleshort        >0              %d x
1975 >>>2    uleshort        >0              %d,
1976 >>>4    uleshort        =1              1 image in file
1977 >>>4    uleshort        >1              %d images in file
1978
1979 # From Jan "Yenya" Kasprzak <kas@fi.muni.cz>
1980 # The description of *.mrw format can be found at
1981 # http://www.dalibor.cz/minolta/raw_file_format.htm
1982 0       string  \000MRM                 Minolta Dimage camera raw image data
1983
1984 # Summary: DjVu image / document
1985 # Extension: .djvu
1986 # Reference: http://djvu.org/docs/DjVu3Spec.djvu
1987 # Submitted by: Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
1988 # Modified by (1): Abel Cheung <abelcheung@gmail.com>
1989 0       string  AT&TFORM
1990 >12     string  DJVM            DjVu multiple page document
1991 !:mime  image/vnd.djvu
1992 >12     string  DJVU            DjVu image or single page document
1993 !:mime  image/vnd.djvu
1994 >12     string  DJVI            DjVu shared document
1995 !:mime  image/vnd.djvu
1996 >12     string  THUM            DjVu page thumbnails
1997 !:mime  image/vnd.djvu
1998
1999 # Originally by Marc Espie
2000 # Modified by Robert Minsk <robertminsk at yahoo.com>
2001 # https://www.openexr.com/openexrfilelayout.pdf
2002 0       ulelong         20000630        OpenEXR image data,
2003 !:mime image/x-exr
2004 >4      ulelong&0x000000ff x            version %d,
2005 >4      ulelong         ^0x00000200     storage: scanline
2006 >4      ulelong         &0x00000200     storage: tiled
2007 >8      search/0x1000   compression\0   \b, compression:
2008 >>&16   ubyte           0               none
2009 >>&16   ubyte           1               rle
2010 >>&16   ubyte           2               zips
2011 >>&16   ubyte           3               zip
2012 >>&16   ubyte           4               piz
2013 >>&16   ubyte           5               pxr24
2014 >>&16   ubyte           6               b44
2015 >>&16   ubyte           7               b44a
2016 >>&16   ubyte           8               dwaa
2017 >>&16   ubyte           9               dwab
2018 >>&16   ubyte           >9              unknown
2019 >8       search/0x1000  dataWindow\0    \b, dataWindow:
2020 >>&10   ulelong         x               (%d
2021 >>&14   ulelong         x               %d)-
2022 >>&18   ulelong         x               \b(%d
2023 >>&22   ulelong         x               %d)
2024 >8      search/0x1000   displayWindow\0 \b, displayWindow:
2025 >>&10   ulelong         x               (%d
2026 >>&14   ulelong         x               %d)-
2027 >>&18   ulelong         x               \b(%d
2028 >>&22   ulelong         x               %d)
2029 >8      search/0x1000   lineOrder\0      \b, lineOrder:
2030 >>&14   ubyte           0               increasing y
2031 >>&14   ubyte           1               decreasing y
2032 >>&14   ubyte           2               random y
2033 >>&14   ubyte           >2              unknown
2034
2035 # SMPTE Digital Picture Exchange Format, SMPTE DPX
2036 #
2037 # ANSI/SMPTE 268M-1994, SMPTE Standard for File Format for Digital
2038 # Moving-Picture Exchange (DPX), v1.0, 18 February 1994
2039 # Robert Minsk <robertminsk at yahoo.com>
2040 # Modified by Harry Mallon <hjmallon at gmail.com>
2041 0       string          SDPX    DPX image data, big-endian,
2042 !:mime image/x-dpx
2043 >0      use             dpx_info
2044 0       string          XPDS    DPX image data, little-endian,
2045 !:mime image/x-dpx
2046 >0      use             \^dpx_info
2047
2048 0       name            dpx_info
2049 >768    ubeshort        <4
2050 >>772   ubelong         x       %dx
2051 >>776   ubelong         x       \b%d,
2052 >768    ubeshort        >3
2053 >>776   ubelong         x       %dx
2054 >>772   ubelong         x       \b%d,
2055 >768    ubeshort        0       left to right/top to bottom
2056 >768    ubeshort        1       right to left/top to bottom
2057 >768    ubeshort        2       left to right/bottom to top
2058 >768    ubeshort        3       right to left/bottom to top
2059 >768    ubeshort        4       top to bottom/left to right
2060 >768    ubeshort        5       top to bottom/right to left
2061 >768    ubeshort        6       bottom to top/left to right
2062 >768    ubeshort        7       bottom to top/right to left
2063
2064 # From: Tom Hilinski <tom.hilinski@comcast.net>
2065 # Update:       Joerg Jenderek
2066 # URL:          https://en.wikipedia.org/wiki/NetCDF
2067 #               http://fileformats.archiveteam.org/wiki/NetCDF
2068 # Reference:    http://mark0.net/download/triddefs_xml.7z/defs/n/netcdf.trid.xml
2069 #               https://www.loc.gov/preservation/digital/formats/fdd/fdd000330.shtml
2070 # Note:         called "NetCDF Network Common Data Form" by TrID and
2071 #               "netCDF-3 Classic" by DROID via PUID fmt/282
2072 # https://www.unidata.ucar.edu/packages/netcdf/
2073 0       string  CDF\001
2074 # skip DROID fmt-282-signature-id-298.nc by test for more content bytes
2075 >3      uleshort        >0              NetCDF Data Format data
2076 #!:mime application/netcdf
2077 # https://reposcope.com/mimetype/application/x-netcdf
2078 !:mime  application/x-netcdf
2079 !:ext   nc
2080 # https://fileinfo.com/extension/cdf
2081 # https://www.file-extensions.org/cdf-file-extension-unidata-network-common-data-form
2082 # in 1994 changed from CDF to NC file extension avoid a clash with other file formats
2083 #!:ext  nc/cdf
2084 # 64-bit offset netcdf Classic https://www.unidata.ucar.edu/software/netcdf/docs/file_format_specifications
2085 # Note:         called "netCDF-3 64-bit" by DROID via PUID fmt/283
2086 0       string  CDF\002
2087 # skip DROID fmt-283-signature-id-299.nc by test for more content bytes
2088 >3      uleshort        >0              NetCDF Data Format data (64-bit offset)
2089 #!:mime application/netcdf
2090 !:mime  application/x-netcdf
2091 !:ext   nc
2092
2093 # From: Michael Liu
2094 # https://en.wikipedia.org/wiki/Common_Data_Format
2095 0       ubelong 0xCDF30001      Common Data Format (Version 3 or later) data
2096 !:mime  application/x-cdf
2097
2098 0       ubelong 0xCDF26002      Common Data Format (Version 2.6 or 2.7) data
2099 !:mime  application/x-cdf
2100
2101 0       ubelong 0x0000FFFF      Common Data Format (Version 2.5 or earlier) data
2102 !:mime  application/x-cdf
2103
2104 # Hierarchical Data Format, used to facilitate scientific data exchange
2105 # specifications at http://hdf.ncsa.uiuc.edu/
2106 # URL:          http://fileformats.archiveteam.org/wiki/HDF
2107 #               https://en.wikipedia.org/wiki/Hierarchical_Data_Format
2108 # Reference:    https://portal.hdfgroup.org/download/attachments/52627880/HDF5_File_Format_Specification_Version-3.0.pdf
2109 0       ubelong 0x0e031301      Hierarchical Data Format (version 4) data
2110 !:mime  application/x-hdf
2111 !:ext   hdf/hdf4/h4
2112 0       string  \211HDF\r\n\032\n       Hierarchical Data Format (version 5) data
2113 #!:mime application/x-hdf
2114 !:mime  application/x-hdf5
2115 !:ext   h5/hdf5/hdf/he5
2116 512     string  \211HDF\r\n\032\n
2117 # skip Matlab v5 mat-file testhdf5_7.4_GLNX86.mat handled by ./mathematica
2118 >0      string  !MATLAB                 Hierarchical Data Format (version 5) with 512 bytes user block
2119 #!:mime application/x-hdf
2120 !:mime  application/x-hdf5
2121 !:ext   h5/hdf5/hdf/he5
2122 1024    string  \211HDF\r\n\032\n       Hierarchical Data Format (version 5) with 1k user block
2123 #!:mime application/x-hdf
2124 !:mime  application/x-hdf5
2125 !:ext   h5/hdf5/hdf/he5
2126 2048    string  \211HDF\r\n\032\n       Hierarchical Data Format (version 5) with 2k user block
2127 #!:mime application/x-hdf
2128 !:mime  application/x-hdf5
2129 !:ext   h5/hdf5/hdf/he5
2130 4096    string  \211HDF\r\n\032\n       Hierarchical Data Format (version 5) with 4k user block
2131 #!:mime application/x-hdf
2132 !:mime  application/x-hdf5
2133 !:ext   h5/hdf5/hdf/he5
2134
2135 # From: Tobias Burnus <burnus@net-b.de>
2136 # Xara (for a while: Corel Xara) is a graphic package, see
2137 # http://www.xara.com/ for Windows and as GPL application for Linux
2138 0       string  XARA\243\243    Xara graphics file
2139
2140 # From:         Joerg Jenderek
2141 # URL:          http://fileformats.archiveteam.org/wiki/Corel_Gallery
2142 # Reference:    http://mark0.net/download/triddefs_xml.7z/defs/b/bmf-corel.trid.xml 
2143 # Note:         called "Corel Binary Material Format" by TrID and
2144 #               "Corel Flow" by XnView
2145 0       string  @CorelBMF\n\rCorel\040Corporation       Corel GALLERY Clipart
2146 !:mime  image/x-corel-bmf
2147 !:ext   bmf
2148
2149 # https://www.cartesianinc.com/Tech/
2150 # Reference:    http://fileformats.archiveteam.org/wiki/Cartesian_Perceptual_Compression
2151 0       string  CPC\262         Cartesian Perceptual Compression image
2152 !:mime  image/x-cpi
2153 !:ext   cpi/cpc
2154
2155 # From Albert Cahalan <acahalan@gmail.com>
2156 # puredigital used it for the CVS disposable camcorder
2157 #8       lelong         4       ZBM bitmap image data
2158 #>4      uleshort       x       %u x
2159 #>6      uleshort       x       %u
2160
2161 # From Albert Cahalan <acahalan@gmail.com>
2162 # uncompressed 5:6:5 HighColor image for OLPC XO firmware icons
2163 0       string          C565     OLPC firmware icon image data
2164 >4      uleshort        x       %u x
2165 >6      uleshort        x       %u
2166
2167 # Applied Images - Image files from Cytovision
2168 # Gustavo Junior Alves <gjalves@gjalves.com.br>
2169 0       string  \xce\xda\xde\xfa        Cytovision Metaphases file
2170 0       string  \xed\xad\xef\xac        Cytovision Karyotype file
2171 0       string  \x0b\x00\x03\x00        Cytovision FISH Probe file
2172 0       string  \xed\xfe\xda\xbe        Cytovision FLEX file
2173 0       string  \xed\xab\xed\xfe        Cytovision FLEX file
2174 0       string  \xad\xfd\xea\xad        Cytovision RATS file
2175
2176 # Wavelet Scalar Quantization format used in gray-scale fingerprint images
2177 # From Tano M Fotang <mfotang@quanteq.com>
2178 0       string  \xff\xa0\xff\xa8\x00    Wavelet Scalar Quantization image data
2179
2180 # Type:         PCO B16 image files
2181 # URL:          http://www.pco.de/fileadmin/user_upload/db/download/MA_CWDCOPIE_0412b.pdf
2182 # From:         Florian Philipp <florian.philipp@binarywings.net>
2183 # Extension:    .b16
2184 # Description:  Pixel image format produced by PCO Camware, typically used
2185 #               together with PCO cameras.
2186 # Note:         Different versions exist for e.g. 8 bit and 16 bit images.
2187 #               Documentation is incomplete.
2188 0       string/b        PCO-    PCO B16 image data
2189 >12     ulelong         x       \b, %dx
2190 >16     ulelong         x       \b%d
2191 >20     ulelong         0       \b, short header
2192 >20     ulelong         -1      \b, extended header
2193 >>24    ulelong         0       \b, grayscale
2194 >>>36   ulelong         0       linear LUT
2195 >>>36   ulelong         1       logarithmic LUT
2196 >>>28   ulelong         x       [%d
2197 >>>32   ulelong         x       \b,%d]
2198 >>24    ulelong         1       \b, color
2199 >>>64   ulelong         0       linear LUT
2200 >>>64   ulelong         1       logarithmic LUT
2201 >>>40   ulelong         x       r[%d
2202 >>>44   ulelong         x       \b,%d]
2203 >>>48   ulelong         x       g[%d
2204 >>>52   ulelong         x       \b,%d]
2205 >>>56   ulelong         x       b[%d
2206 >>>60   ulelong         x       \b,%d]
2207
2208 # Polar Monitor Bitmap (.pmb) used as logo for Polar Electro watches
2209 # From: Markus Heidelberg <markus.heidelberg at web.de>
2210 0       string/t        [BitmapInfo2]   Polar Monitor Bitmap text
2211 !:mime  image/x-polar-monitor-bitmap
2212
2213 # From: Rick Richardson <rickrich@gmail.com>
2214 # updated by: Joerg Jenderek
2215 # URL: http://techmods.net/nuvi/
2216 0       string  GARMIN\ BITMAP\ 01      Garmin Bitmap file
2217 # extension is also used for
2218 # Sony SRF raw image (image/x-sony-srf)
2219 # SRF map
2220 # Terragen Surface Map (https://www.planetside.co.uk/terragen)
2221 # FileLocator Pro search criteria file (https://www.mythicsoft.com/filelocatorpro)
2222 !:ext srf
2223 #!:mime image/x-garmin-srf
2224 # version 1.00,2.00,2.10,2.40,2.50
2225 >0x2f   string          >0              \b, version %4.4s
2226 # width (2880,2881,3240)
2227 >0x55   uleshort        >0              \b, %dx
2228 # height (80,90)
2229 >>0x53  uleshort        x               \b%d
2230
2231 # From:         Joerg Jenderek
2232 # URL:          http://fileformats.archiveteam.org/wiki/Imageiio/imaginfo_(Ulead)
2233 # Reference:    http://mark0.net/download/triddefs_xml.7z/defs/p/pe3.trid.xml
2234 # Note:         called "Ulead Imageiio/Imaginfo thumbnail" by TrID
2235 0       string  IIO1$                   Ulead Photo Explorer 3
2236 #!:mime application/octet-stream
2237 !:mime  image/x-ulead-pe3
2238 # IMAGEIIO.PE3
2239 !:ext   pe3
2240 # look for DOS/Windows drive letter
2241 >5      search/192/s    :\\
2242 # directory or full name of corresponding imaginfo.pe3 like: "T:\SAMPLES\TEXTURES\SKY_SNOW\IIOE371.TMP "S:\PI3\PIMPACT3\PROGRAMS\PATTERNS\imaginfo.pe3"
2243 >>&-1   string  x                       "%s"
2244 # look for DOS/Windows network path if no drive letter part
2245 >5      default         x
2246 >>5     search/192/s    \x5c\x5c
2247 # full name of corresponding imaginfo.pe3 like: "\\Lionking\upi\SAMPLES\IMAGES\ANIMALS\imaginfo.pe3"
2248 >>>&0   string  x                       "%s"
2249 # Type: Ulead Photo Explorer5 (.pe5)
2250 # URL:          http://fileformats.archiveteam.org/wiki/Imageiio/imaginfo_(Ulead)
2251 # Reference:    http://mark0.net/download/triddefs_xml.7z/defs/p/pe4.trid.xml
2252 # From: Simon Horman <horms@debian.org>
2253 # Update:       Joerg Jenderek
2254 # Note:         some called "Ulead Imageiio/Imaginfo thumbnail" by TrID
2255 #               and used in various Ulead applications
2256 0       string  IIO2H                   Ulead Photo Explorer 4 or 5
2257 #!:mime application/octet-stream
2258 !:mime  image/x-ulead-pe4
2259 # IMAGEIIO.PE4 
2260 !:ext   pe4/pe5
2261 # look in most samples for JPEG signature like: SAMPLES/IMAGES/SCENES/IMAGINFO.PE4
2262 >0x4c2  search/0xE02/s  JFIF            with JPEG image data
2263 >>&-6   use                     jpeg
2264 # near the end list of image names like: Img0001.pcd 1116012L.JPG NCARD4.TPL
2265 #
2266 # Reference:    http://mark0.net/download/triddefs_xml.7z/defs/p/pe3-imaginfo.trid.xml
2267 11      string  \001\0\0\0\0
2268 # check for version 3 part
2269 >19     string  \0\001\0\003\0
2270 >>0     use     ulead-imaginfo
2271 # From:         Joerg Jenderek
2272 # Reference:    http://mark0.net/download/triddefs_xml.7z/defs/p/pe4-imaginfo.trid.xml
2273 11      string  \001\0\0\0\0
2274 # check for version 4 part
2275 >19     string  \0\0\0\004\0
2276 >>0     use     ulead-imaginfo
2277 # display information about Ulead Imaginfo thumbnail (version, directory, image extension)
2278 0       name    ulead-imaginfo
2279 >22     ubyte   x                       Ulead Imaginfo thumbnail
2280 #!:mime application/octet-stream
2281 !:mime  image/x-ulead-imaginfo
2282 >22     ubyte   =3                      \b, version 3
2283 # IMAGINFO.PE3
2284 !:ext   pe3
2285 >22     ubyte   =4                      \b, version 4
2286 # IMAGINFO.PE4 
2287 !:ext   pe4
2288 # MAYBE ALSO VERSION 5 ?
2289 #>22    ubyte   =5                      \b, version 5
2290 #!:ext  pe5
2291 >22     ubyte   x
2292 # look for DOS/Windows driver letter
2293 >>4     search/192/s    :\x5c
2294 # skip f:\Programme\iPhoto Plus 4\Template\Business Cards\IMAGINFO.PE4
2295 # by looking for driver letter in range A-Z
2296 >>>&-1  ubyte   >0x40
2297 # directory path like: "E:\iPE\CDSample\Images\Scenes" "D:\XmasCard\Samples" "C:\TEMP\PLANTS"
2298 >>>>&-5 pstring/l       >0              \b, "%s"
2299 # look for DOS/Windows network path if no valid drive letter part
2300 >>>&-1  default         x
2301 >>>>4   search/192/s    \x5c\x5c
2302 # directory path like: "\\FSX\SYS\OPPS\IPE.ENG\TEMPLATE\BUSINESS" "\\Lionking\upi\SAMPLES\IMAGES\ANIMALS"
2303 >>>>>&-4 pstring/l      >0              \b, "%s"
2304 # look for DOS/Windows network path if no drive letter part
2305 >>4     default         x
2306 >>>4    search/192/s    \x5c\x5c
2307 # directory path like: "\\FSX\SYS\opps\ipe.eng\samples" "\\DANIEL\IPE_CD\IPE.ITA"
2308 >>>>&-4 pstring/l       >0              \b, "%s"
2309 # look for point character inside image names
2310 >56     search/38/s     .
2311 # image name extension like: bmp jpg pcd tpl
2312 >>&1    string  x                       with %-.3s images
2313 # Summary:      Ulead Pattern image (Corel Corporation)
2314 # URL:          https://en.wikipedia.org/wiki/Ulead_Systems
2315 #               https://www.file-extensions.org/pst-file-extension-ulead-pattern-image-format
2316 # Reference:    http://mark0.net/download/triddefs_xml.7z/defs/p/pst-ulead.trid.xml
2317 # From:         Joerg Jenderek
2318 # Note:         used also by CorelDraw Essentials 3 version 13.0.0.800
2319 #               there seems to exist other versions
2320 0       ubelong         0xFFFF0100
2321 >8      search/21       PresetInfo      Ulead pattern image
2322 #!:mime application/octet-stream
2323 !:mime  image/x-ulead-pst
2324 !:ext   pst
2325 # string length like: 16 18 19 21 24
2326 #>>4    uleshort        x               n=%u
2327 # like: BlendPresetInfo DropShadowPresetInfo FileNewPresetInfo VectorExtrudePresetInfo EnvelopePresetInfo ContourPresetInfo DistortionPresetInfo
2328 >>4     pstring/h       x               "%s"
2329
2330 # Type: X11 cursor
2331 # URL:  http://webcvs.freedesktop.org/mime/shared-mime-info/freedesktop.org.xml.in?view=markup
2332 # From: Mathias Brodala <info@noctus.net>
2333 0       string  Xcur                    X11 cursor
2334
2335 # Type: Olympus ORF raw images.
2336 # URL:  https://libopenraw.freedesktop.org/wiki/Olympus_ORF
2337 # From: Adam Buchbinder <adam.buchbinder@gmail.com>
2338 0       string          MMOR            Olympus ORF raw image data, big-endian
2339 !:mime  image/x-olympus-orf
2340 0       string          IIRO            Olympus ORF raw image data, little-endian
2341 !:mime  image/x-olympus-orf
2342 0       string          IIRS            Olympus ORF raw image data, little-endian
2343 !:mime  image/x-olympus-orf
2344
2345 # Type: files used in modern AVCHD camcoders to store clip information
2346 # Extension: .cpi
2347 # From: Alexander Danilov <alexander.a.danilov@gmail.com>
2348 0       string  HDMV0100        AVCHD Clip Information
2349
2350 # From: Adam Buchbinder <adam.buchbinder@gmail.com>
2351 # URL: http://local.wasp.uwa.edu.au/~pbourke/dataformats/pic/
2352 # Radiance HDR; usually has .pic or .hdr extension.
2353 0       string  #?RADIANCE\n    Radiance HDR image data
2354 #!mime  image/vnd.radiance
2355
2356 # From: Adam Buchbinder <adam.buchbinder@gmail.com>
2357 # URL: https://www.mpi-inf.mpg.de/resources/pfstools/pfs_format_spec.pdf
2358 # Used by the pfstools packages. The regex matches for the image size could
2359 # probably use some work. The MIME type is made up; if there's one in
2360 # actual common use, it should replace the one below.
2361 0       string  PFS1\x0a        PFS HDR image data
2362 #!mime  image/x-pfs
2363 >1      regex   [0-9]*\         \b, %s
2364 >>1     regex   \ [0-9]{4}      \bx%s
2365
2366 # Type: Foveon X3F
2367 # URL:  https://www.photofo.com/downloads/x3f-raw-format.pdf
2368 # From: Adam Buchbinder <adam.buchbinder@gmail.com>
2369 # Note that the MIME type isn't defined anywhere that I can find; if
2370 # there's a canonical type for this format, it should replace this one.
2371 0       string  FOVb    Foveon X3F raw image data
2372 !:mime  image/x-x3f
2373 >6      uleshort        x       \b, version %d.
2374 >4      uleshort        x       \b%d
2375 >28     ulelong         x       \b, %dx
2376 >32     ulelong         x       \b%d
2377
2378 # Paint.NET file
2379 # From Adam Buchbinder <adam.buchbinder@gmail.com>
2380 0       string  PDN3    Paint.NET image data
2381 !:mime  image/x-paintnet
2382
2383 # Not really an image.
2384 # From: "Tano M. Fotang" <mfotang@quanteq.com>
2385 0       string  \x46\x4d\x52\x00        ISO/IEC 19794-2 Format Minutiae Record (FMR)
2386
2387 # doc: https://www.shikino.co.jp/eng/products/images/FLOWER.jpg.zip
2388 # example: https://www.shikino.co.jp/eng/products/images/FLOWER.wdp.zip
2389 90      ubequad         0x574D50484F544F00      JPEG-XR Image
2390 >98     ubyte&0x08      =0x08                   \b, hard tiling
2391 >99     ubyte&0x80      =0x80                   \b, tiling present
2392 >99     ubyte&0x40      =0x40                   \b, codestream present
2393 >99     ubyte&0x38      x                       \b, spatial xform=
2394 >99     ubyte&0x38      0x00                    \bTL
2395 >99     ubyte&0x38      0x08                    \bBL
2396 >99     ubyte&0x38      0x10                    \bTR
2397 >99     ubyte&0x38      0x18                    \bBR
2398 >99     ubyte&0x38      0x20                    \bBT
2399 >99     ubyte&0x38      0x28                    \bRB
2400 >99     ubyte&0x38      0x30                    \bLT
2401 >99     ubyte&0x38      0x38                    \bLB
2402 >100    ubyte&0x80      =0x80                   \b, short header
2403 >>102   ubeshort+1      x                       \b, %d
2404 >>104   ubeshort+1      x                       \bx%d
2405 >100    ubyte&0x80      =0x00                   \b, long header
2406 >>102   ubelong+1       x                       \b, %x
2407 >>106   ubelong+1       x                       \bx%x
2408 >101    ubeshort&0xf    x                       \b, bitdepth=
2409 >>101   ubeshort&0xf    0x0                     \b1-WHITE=1
2410 >>101   ubeshort&0xf    0x1                     \b8
2411 >>101   ubeshort&0xf    0x2                     \b16
2412 >>101   ubeshort&0xf    0x3                     \b16-SIGNED
2413 >>101   ubeshort&0xf    0x4                     \b16-FLOAT
2414 >>101   ubeshort&0xf    0x5                     \b(reserved 5)
2415 >>101   ubeshort&0xf    0x6                     \b32-SIGNED
2416 >>101   ubeshort&0xf    0x7                     \b32-FLOAT
2417 >>101   ubeshort&0xf    0x8                     \b5
2418 >>101   ubeshort&0xf    0x9                     \b10
2419 >>101   ubeshort&0xf    0xa                     \b5-6-5
2420 >>101   ubeshort&0xf    0xb                     \b(reserved %d)
2421 >>101   ubeshort&0xf    0xc                     \b(reserved %d)
2422 >>101   ubeshort&0xf    0xd                     \b(reserved %d)
2423 >>101   ubeshort&0xf    0xe                     \b(reserved %d)
2424 >>101   ubeshort&0xf    0xf                     \b1-BLACK=1
2425 >101    ubeshort&0xf0   x                       \b, colorfmt=
2426 >>101   ubeshort&0xf0   0x00                    \bYONLY
2427 >>101   ubeshort&0xf0   0x10                    \bYUV240
2428 >>101   ubeshort&0xf0   0x20                    \bYWV422
2429 >>101   ubeshort&0xf0   0x30                    \bYWV444
2430 >>101   ubeshort&0xf0   0x40                    \bCMYK
2431 >>101   ubeshort&0xf0   0x50                    \bCMYKDIRECT
2432 >>101   ubeshort&0xf0   0x60                    \bNCOMPONENT
2433 >>101   ubeshort&0xf0   0x70                    \bRGB
2434 >>101   ubeshort&0xf0   0x80                    \bRGBE
2435 >>101   ubeshort&0xf0   >0x80                   \b(reserved %#x)
2436
2437 # From: Johan van der Knijff <johan.vanderknijff@kb.nl>
2438 #
2439 # BPG (Better Portable Graphics) format
2440 # https://bellard.org/bpg/
2441 # http://fileformats.archiveteam.org/wiki/BPG
2442 #
2443 0       string  \x42\x50\x47\xFB        BPG (Better Portable Graphics)
2444 !:mime  image/bpg
2445
2446 # From: Joerg Jenderek
2447 # URL: https://en.wikipedia.org/wiki/Apple_Icon_Image_format
2448 0       string          icns            Mac OS X icon
2449 !:mime  image/x-icns
2450 !:apple ????icns
2451 !:ext icns
2452 >4      ubelong         >0
2453 # file size
2454 >>4     ubelong         x               \b, %d bytes
2455 # icon type
2456 >>8     string          x               \b, "%4.4s" type
2457
2458 # TIM images
2459 # URL:          http://fileformats.archiveteam.org/wiki/TIM_(PlayStation_graphics)
2460 # Reference:    https://mrclick.zophar.net/TilEd/download/timgfx.txt
2461 # Update:       Joerg Jenderek
2462 # Note:         called as "PSX TIM *bpp bitmap" by bitmap-tim-*.trid.xml
2463 #               verified as "TIM PSX" by XnView `nconvert -fullinfo *.tim` and
2464 #               by RECOIL `recoil2png -o TMP.PNG input.tim; file TMP.PNG` and often
2465 #               as "PSX TIM" by ImageMagick version 7.1.0-10 command `identify *.tim`
2466 #               here signed integers are used but according to Kaitai unsigned
2467 0               ulelong         0x00000010
2468 # 32 Flag bits *cttt; c~CLUT flag t~type 000~4BPP 001~8BPP 010~16BPP 011~24BPP 100~Mixed
2469 #>4             ulelong         x               FLAGS=%#x
2470 # 12+Size of CLUT (2Ch for 4BPP; 20Ch 40Ch 60Ch 80Ch C0Ch for 8BPP) or
2471 # +image data size (800Ch 2000Ch 2580C for 16BPP) (02000003h for dBase memo test.dbt)
2472 #>8             ulelong         x               \b, 12+CLUT or data size=%#8.8x
2473 # CLUT or data size remainder is 12 (Ch), but 03 for dBase memo test.dbt
2474 #>8             ubyte&0x0F      =0x0C           \b, SIZE REMAINDER IS 12
2475 # skip dBase III memo test.dbt with invalid flags 22D10189h
2476 >4              ulelong&0xffFFffF0      =0      Sony PlayStation PSX image,
2477 # file (version 5.40) labeled the above entry as "TIM image"
2478 !:mime  image/x-sony-tim
2479 !:ext   tim
2480 #>>4            ulelong&0x00000007      x       \b, BPP~%u
2481 # 4BPP and 8BPP examples exist with CLUT or without CLUT
2482 >>4             ulelong&0x07    0x0             4-Bit,
2483 >>4             ulelong&0x07    0x1             8-Bit,
2484 # 16BPP and 24BPP examples have no CLUT
2485 >>4             ulelong         0x2             15-Bit,
2486 >>4             ulelong         0x3             24-Bit,
2487 # no example
2488 >>4             ulelong&0x07    0x4             Mixed-Bit,
2489 # CLUT flag set
2490 >>4             ulelong         &8
2491 # 12 + size of CLUT like: 1000Ch 800Ch 400Ch 40Ch and 2FEh (KAGE.TIM)
2492 #>>>(8.l+8)     ulelong         x               \b, 12+CLUT SIZE=%#8.8x
2493 >>>(8.l+12)     uleshort        x               Pixel at (%d,
2494 >>>(8.l+14)     uleshort        x               \b%d) Size=
2495 # image width (to get actual width multiply by 4 for 4BPP and by 2 for 8BPP)
2496 >>>>4           ulelong         0x8
2497 >>>>>(8.l+16)   uleshort*4      x               \b%d
2498 >>>>4           ulelong         0x9
2499 >>>>>(8.l+16)   uleshort*2      x               \b%d
2500 # image height like: 32 64 128 144 160 208 256
2501 >>>(8.l+18)     uleshort        x               \bx%d,
2502 >>>4            ulelong         0x8             16 CLUT Entries at
2503 >>>4            ulelong         0x9             256 CLUT Entries at
2504 >>>12           uleshort        x               (%d,
2505 >>>14           uleshort        x               \b%d)
2506 # no Color LookUp Table (CLUT)
2507 >>4             ulelong         ^8
2508 # image origin X Y
2509 >>>12           uleshort        x               Pixel at (%d,
2510 >>>14           uleshort        x               \b%d) Size=
2511 # real image width = multiply by 4 (4BPP) 2 (8BPP) 1 (16BPP) 2/3 (24BPP)
2512 >>>>4           ulelong         0x0
2513 >>>>>16         uleshort*4      x               \b%d
2514 >>>>4           ulelong         0x1
2515 >>>>>16         uleshort*2      x               \b%d
2516 >>>>4           ulelong         0x2
2517 >>>>>16         uleshort                x               \b%d
2518 >>>>4           ulelong         0x3
2519 # GRR: NOT working
2520 #>>>>>16                uleshort*2/3    x               \b%d
2521 >>>>>16         uleshort                x               \b2/3*%d
2522 # mixed format width not explained!
2523 >>>>4           ulelong         0x4
2524 >>>>>16         uleshort                x               \b%d
2525 # image height like: 64 240 256
2526 >>>18           uleshort                x               \bx%d
2527 # TIM image data
2528
2529 # MDEC streams
2530 0               ulelong         0x80010160      MDEC video stream,
2531 >16             uleshort        x               %dx
2532 >18             uleshort        x               \b%d
2533 #>8             ulelong         x               %d frames
2534 #>4             uleshort        x               secCount=%d;
2535 #>6             uleshort        x               nSectors=%d;
2536 #>12            ulelong         x               frameSize=%d;
2537
2538 # BS encoded bitstreams
2539 2               uleshort        0x3800          BS image,
2540 >6              uleshort        x               Version %d,
2541 >4              uleshort        x               Quantization %d,
2542 >0              uleshort        x               (Decompresses to %d words)
2543
2544 # Type: farbfeld image.
2545 # Url: http://tools.suckless.org/farbfeld/
2546 # From: Ian D. Scott <ian@iandouglasscott.com>
2547 #
2548 0               string          farbfeld        farbfeld image data,
2549 >8              ubelong         x               %dx
2550 >12             ubelong         x               \b%d
2551
2552 # Type: Microsoft DirectDraw Surface (DXGI formats)
2553 # URL:  https://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/directx/graphics/reference/DDSFileReference/ddsfileformat.asp
2554 # From: Morten Hustveit <morten@debian.org>
2555 # Updated by: David Korth <gerbilsoft@gerbilsoft.com>
2556 0       name    ms-directdraw-dx10
2557 >0      ulelong x       \b, DXGI format:
2558 >0      ulelong 1       R32G32B32A32_TYPELESS
2559 >0      ulelong 2       R32G32B32A32_FLOAT
2560 >0      ulelong 3       R32G32B32A32_UINT
2561 >0      ulelong 4       R32G32B32A32_SINT
2562 >0      ulelong 5       R32G32B32_TYPELESS
2563 >0      ulelong 6       R32G32B32_FLOAT
2564 >0      ulelong 7       R32G32B32_UINT
2565 >0      ulelong 8       R32G32B32_SINT
2566 >0      ulelong 9       R16G16B16A16_TYPELESS
2567 >0      ulelong 10      R16G16B16A16_FLOAT
2568 >0      ulelong 11      R16G16B16A16_UNORM
2569 >0      ulelong 12      R16G16B16A16_UINT
2570 >0      ulelong 13      R16G16B16A16_SNORM
2571 >0      ulelong 14      R16G16B16A16_SINT
2572 >0      ulelong 15      R32G32_TYPELESS
2573 >0      ulelong 16      R32G32_FLOAT
2574 >0      ulelong 17      R32G32_UINT
2575 >0      ulelong 18      R32G32_SINT
2576 >0      ulelong 19      R32G8X24_TYPELESS
2577 >0      ulelong 20      D32_FLOAT_S8X24_UINT
2578 >0      ulelong 21      R32_FLOAT_X8X24_TYPELESS
2579 >0      ulelong 22      X32_TYPELESS_G8X24_UINT
2580 >0      ulelong 23      R10G10B10A2_TYPELESS
2581 >0      ulelong 24      R10G10B10A2_UNORM
2582 >0      ulelong 25      R10G10B10A2_UINT
2583 >0      ulelong 26      R11G11B10_FLOAT
2584 >0      ulelong 27      R8G8B8A8_TYPELESS
2585 >0      ulelong 28      R8G8B8A8_UNORM
2586 >0      ulelong 29      R8G8B8A8_UNORM_SRGB
2587 >0      ulelong 30      R8G8B8A8_UINT
2588 >0      ulelong 31      R8G8B8A8_SNORM
2589 >0      ulelong 32      R8G8B8A8_SINT
2590 >0      ulelong 33      R16G16_TYPELESS
2591 >0      ulelong 34      R16G16_FLOAT
2592 >0      ulelong 35      R16G16_UNORM
2593 >0      ulelong 36      R16G16_UINT
2594 >0      ulelong 37      R16G16_SNORM
2595 >0      ulelong 38      R16G16_SINT
2596 >0      ulelong 39      R32_TYPELESS
2597 >0      ulelong 40      D32_FLOAT
2598 >0      ulelong 41      R32_FLOAT
2599 >0      ulelong 42      R32_UINT
2600 >0      ulelong 43      R32_SINT
2601 >0      ulelong 44      R24G8_TYPELESS
2602 >0      ulelong 45      D24_UNORM_S8_UINT
2603 >0      ulelong 46      R24_UNORM_X8_TYPELESS
2604 >0      ulelong 47      X24_TYPELESS_G8_UINT
2605 >0      ulelong 48      R8G8_TYPELESS
2606 >0      ulelong 49      R8G8_UNORM
2607 >0      ulelong 50      R8G8_UINT
2608 >0      ulelong 51      R8G8_SNORM
2609 >0      ulelong 52      R8G8_SINT
2610 >0      ulelong 53      R16_TYPELESS
2611 >0      ulelong 54      R16_FLOAT
2612 >0      ulelong 55      D16_UNORM
2613 >0      ulelong 56      R16_UNORM
2614 >0      ulelong 57      R16_UINT
2615 >0      ulelong 58      R16_SNORM
2616 >0      ulelong 59      R16_SINT
2617 >0      ulelong 60      R8_TYPELESS
2618 >0      ulelong 61      R8_UNORM
2619 >0      ulelong 62      R8_UINT
2620 >0      ulelong 63      R8_SNORM
2621 >0      ulelong 64      R8_SINT
2622 >0      ulelong 65      A8_UNORM
2623 >0      ulelong 66      R1_UNORM
2624 >0      ulelong 67      R9G9B9E5_SHAREDEXP
2625 >0      ulelong 68      R8G8_B8G8_UNORM
2626 >0      ulelong 69      G8R8_G8B8_UNORM
2627 >0      ulelong 70      BC1_TYPELESS
2628 >0      ulelong 71      BC1_UNORM
2629 >0      ulelong 72      BC1_UNORM_SRGB
2630 >0      ulelong 73      BC2_TYPELESS
2631 >0      ulelong 74      BC2_UNORM
2632 >0      ulelong 75      BC2_UNORM_SRGB
2633 >0      ulelong 76      BC3_TYPELESS
2634 >0      ulelong 77      BC3_UNORM
2635 >0      ulelong 78      BC3_UNORM_SRGB
2636 >0      ulelong 79      BC4_TYPELESS
2637 >0      ulelong 80      BC4_UNORM
2638 >0      ulelong 81      BC4_SNORM
2639 >0      ulelong 82      BC5_TYPELESS
2640 >0      ulelong 83      BC5_UNORM
2641 >0      ulelong 84      BC5_SNORM
2642 >0      ulelong 85      B5G6R5_UNORM
2643 >0      ulelong 86      B5G5R5A1_UNORM
2644 >0      ulelong 87      B8G8R8A8_UNORM
2645 >0      ulelong 88      B8G8R8X8_UNORM
2646 >0      ulelong 89      R10G10B10_XR_BIAS_A2_UNORM
2647 >0      ulelong 90      B8G8R8A8_TYPELESS
2648 >0      ulelong 91      B8G8R8A8_UNORM_SRGB
2649 >0      ulelong 92      B8G8R8X8_TYPELESS
2650 >0      ulelong 93      B8G8R8X8_UNORM_SRGB
2651 >0      ulelong 94      BC6H_TYPELESS
2652 >0      ulelong 95      BC6H_UF16
2653 >0      ulelong 96      BC6H_SF16
2654 >0      ulelong 97      BC7_TYPELESS
2655 >0      ulelong 98      BC7_UNORM
2656 >0      ulelong 99      BC7_UNORM_SRGB
2657 >0      ulelong 100     AYUV
2658 >0      ulelong 101     Y410
2659 >0      ulelong 102     Y416
2660 >0      ulelong 103     NV12
2661 >0      ulelong 104     P010
2662 >0      ulelong 105     P016
2663 >0      ulelong 106     420_OPAQUE
2664 >0      ulelong 107     YUY2
2665 >0      ulelong 108     Y210
2666 >0      ulelong 109     Y216
2667 >0      ulelong 110     NV11
2668 >0      ulelong 111     AI44
2669 >0      ulelong 112     IA44
2670 >0      ulelong 113     P8
2671 >0      ulelong 114     A8P8
2672 >0      ulelong 115     B4G4R4A4_UNORM
2673
2674 >0      ulelong 116     XBOX_R10G10B10_7E3_A2_FLOAT
2675 >0      ulelong 117     XBOX_R10G10B10_6E4_A2_FLOAT
2676 >0      ulelong 118     XBOX_D16_UNORM_S8_UINT
2677 >0      ulelong 119     XBOX_R16_UNORM_X8_TYPELESS
2678 >0      ulelong 120     XBOX_X16_TYPELESS_G8_UINT
2679
2680 >0      ulelong 130     DXGI_FORMAT_P208
2681 >0      ulelong 131     DXGI_FORMAT_V208
2682 >0      ulelong 132     DXGI_FORMAT_V408
2683
2684 >0      ulelong 133     ASTC_4X4_TYPELESS
2685 >0      ulelong 134     ASTC_4X4_UNORM
2686 >0      ulelong 135     ASTC_4X4_UNORM_SRGB
2687 >0      ulelong 137     ASTC_5X4_TYPELESS
2688 >0      ulelong 138     ASTC_5X4_UNORM
2689 >0      ulelong 139     ASTC_5X4_UNORM_SRGB
2690 >0      ulelong 141     ASTC_5X5_TYPELESS
2691 >0      ulelong 142     ASTC_5X5_UNORM
2692 >0      ulelong 143     ASTC_5X5_UNORM_SRGB
2693 >0      ulelong 145     ASTC_6X5_TYPELESS
2694 >0      ulelong 146     ASTC_6X5_UNORM
2695 >0      ulelong 147     ASTC_6X5_UNORM_SRGB
2696 >0      ulelong 149     ASTC_6X6_TYPELESS
2697 >0      ulelong 150     ASTC_6X6_UNORM
2698 >0      ulelong 151     ASTC_6X6_UNORM_SRGB
2699 >0      ulelong 153     ASTC_8X5_TYPELESS
2700 >0      ulelong 154     ASTC_8X5_UNORM
2701 >0      ulelong 155     ASTC_8X5_UNORM_SRGB
2702 >0      ulelong 157     ASTC_8X6_TYPELESS
2703 >0      ulelong 158     ASTC_8X6_UNORM
2704 >0      ulelong 159     ASTC_8X6_UNORM_SRGB
2705 >0      ulelong 161     ASTC_8X8_TYPELESS
2706 >0      ulelong 162     ASTC_8X8_UNORM
2707 >0      ulelong 163     ASTC_8X8_UNORM_SRGB
2708 >0      ulelong 165     ASTC_10X5_TYPELESS
2709 >0      ulelong 166     ASTC_10X5_UNORM
2710 >0      ulelong 167     ASTC_10X5_UNORM_SRGB
2711 >0      ulelong 169     ASTC_10X6_TYPELESS
2712 >0      ulelong 170     ASTC_10X6_UNORM
2713 >0      ulelong 171     ASTC_10X6_UNORM_SRGB
2714 >0      ulelong 173     ASTC_10X8_TYPELESS
2715 >0      ulelong 174     ASTC_10X8_UNORM
2716 >0      ulelong 175     ASTC_10X8_UNORM_SRGB
2717 >0      ulelong 177     ASTC_10X10_TYPELESS
2718 >0      ulelong 178     ASTC_10X10_UNORM
2719 >0      ulelong 179     ASTC_10X10_UNORM_SRGB
2720 >0      ulelong 181     ASTC_12X10_TYPELESS
2721 >0      ulelong 182     ASTC_12X10_UNORM
2722 >0      ulelong 183     ASTC_12X10_UNORM_SRGB
2723 >0      ulelong 185     ASTC_12X12_TYPELESS
2724 >0      ulelong 186     ASTC_12X12_UNORM
2725 >0      ulelong 187     ASTC_12X12_UNORM_SRGB
2726
2727 >0      ulelong 190     XBOX_R10G10B10_SNORM_A2_UNORM
2728 >0      ulelong 189     XBOX_R4G4_UNORM
2729 >0      ulelong 0xFFFFFFFF      DXGI_FORMAT_FORCE_UINT
2730
2731 # Type: Microsoft DirectDraw Surface (common data)
2732 # URL:  https://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/directx/graphics/reference/DDSFileReference/ddsfileformat.asp
2733 # From: Morten Hustveit <morten@debian.org>
2734 # Updated by: David Korth <gerbilsoft@gerbilsoft.com>
2735 0       name    ms-directdraw-surface
2736 >0x10   ulelong x                       %u x
2737 >0x0C   ulelong x                       %u
2738 # Color depth.
2739 >0x58   ulelong >0                      \b, %u-bit color
2740 # Determine the pixel format.
2741 >0x50   ulelong&0x4     4
2742 # FIXME: Handle DX10 and XBOX formats.
2743 >>0x54  string  DX10
2744 >>>0x80 use     ms-directdraw-dx10
2745 >>0x54  string  !DX10                   \b, compressed using %.4s
2746 >0x50   ulelong&0x2     0x2             \b, alpha only
2747 >0x50   ulelong&0x200   0x200           \b, YUV
2748 >0x50   ulelong&0x20000 0x20000         \b, luminance
2749 # RGB pixel format
2750 >0x50   ulelong&0x40    0x40
2751
2752 # Determine the RGB format using the color masks.
2753 # ulequad order: 0xGGGGGGGGRRRRRRRR, 0xAAAAAAAABBBBBBBB
2754
2755 >>0x58          ulelong 16
2756
2757 # NOTE: 15-bit color formats usually have 16-bit listed as the color depth.
2758 >>>0x5C         ulequad 0x000003E000007C00
2759 >>>>0x64        ulequad 0x000000000000001F      \b, RGB555
2760 >>>0x5C         ulequad 0x000003E000001F00
2761 >>>>0x64        ulequad 0x000000000000007C      \b, BGR555
2762
2763 >>>0x5C         ulequad 0x000007E00000F800
2764 >>>>0x64        ulequad 0x000000000000001F      \b, RGB565
2765 >>>0x5C         ulequad 0x000007E000001F00
2766 >>>>0x64        ulequad 0x00000000000000F8      \b, BGR565
2767
2768 >>>0x5C         ulequad 0x000000F000000F00
2769 >>>>0x64        ulequad 0x0000F0000000000F      \b, ARGB4444
2770 >>>0x5C         ulequad 0x000000F00000000F
2771 >>>>0x64        ulequad 0x0000F00000000F00      \b, ABGR4444
2772
2773 >>>0x5C         ulequad 0x00000F000000F000
2774 >>>>0x64        ulequad 0x0000000F000000F0      \b, RGBA4444
2775 >>>0x5C         ulequad 0x00000F00000000F0
2776 >>>>0x64        ulequad 0x0000000F0000F000      \b, BGRA4444
2777
2778 >>>0x5C         ulequad 0x000000F000000F00
2779 >>>>0x64        ulequad 0x000000000000000F      \b, xRGB4444
2780 >>>0x5C         ulequad 0x000000F00000000F
2781 >>>>0x64        ulequad 0x0000000000000F00      \b, xBGR4444
2782
2783 >>>0x5C         ulequad 0x00000F000000F000
2784 >>>>0x64        ulequad 0x00000000000000F0      \b, RGBx4444
2785 >>>0x5C         ulequad 0x00000F00000000F0
2786 >>>>0x64        ulequad 0x000000000000F000      \b, BGRx4444
2787
2788 >>>0x5C         ulequad 0x000003E000007C00
2789 >>>>0x64        ulequad 0x000080000000001F      \b, ARGB1555
2790 >>>0x5C         ulequad 0x000003E000001F00
2791 >>>>0x64        ulequad 0x000080000000007C      \b, ABGR1555
2792 >>>0x5C         ulequad 0x000007C00000F800
2793 >>>>0x64        ulequad 0x000000010000003E      \b, RGBA5551
2794 >>>0x5C         ulequad 0x000007C00000003E
2795 >>>>0x64        ulequad 0x000000010000F800      \b, BGRA5551
2796
2797 >>88            ulelong 24
2798 >>>0x5C         ulequad 0x0000FF0000FF0000
2799 >>>>0x64        ulequad 0x00000000000000FF      \b, RGB888
2800 >>>0x5C         ulequad 0x0000FF00000000FF
2801 >>>>0x64        ulequad 0x0000000000FF0000      \b, BGR888
2802
2803 >>88            ulelong 32
2804 >>>0x5C         ulequad 0x0000FF0000FF0000
2805 >>>>0x64        ulequad 0xFF000000000000FF      \b, ARGB8888
2806 >>>0x5C         ulequad 0x0000FF00000000FF
2807 >>>>0x64        ulequad 0xFF00000000FF0000      \b, ABGR8888
2808
2809 >>>0x5C         ulequad 0x00FF0000FF000000
2810 >>>>0x64        ulequad 0x000000FF0000FF00      \b, RGBA8888
2811 >>>0x5C         ulequad 0x00FF00000000FF00
2812 >>>>0x64        ulequad 0x000000FFFF000000      \b, BGBA8888
2813
2814 >>>0x5C         ulequad 0x0000FF0000FF0000
2815 >>>>0x64        ulequad 0x00000000000000FF      \b, xRGB8888
2816 >>>0x5C         ulequad 0x0000FF00000000FF
2817 >>>>0x64        ulequad 0x0000000000FF0000      \b, xBGR8888
2818
2819 >>>0x5C         ulequad 0x00FF0000FF000000
2820 >>>>0x64        ulequad 0x000000000000FF00      \b, RGBx8888
2821 >>>0x5C         ulequad 0x00FF00000000FF00
2822 >>>>0x64        ulequad 0x00000000FF000000      \b, BGBx8888
2823
2824 # Less common 32-bit color formats.
2825 >>>0x5C         ulequad 0xFFFF00000000FFFF
2826 >>>>0x64        ulequad 0x0000000000000000      \b, G16R16
2827 >>>0x5C         ulequad 0x0000FFFFFFFF0000
2828 >>>>0x64        ulequad 0x0000000000000000      \b, R16G16
2829
2830 >>>0x5C         ulequad 0x000FFC003FF00000
2831 >>>>0x64        ulequad 0xC0000000000003FF      \b, A2R10G10B10
2832 >>>0x5C         ulequad 0x000FFC00000003FF
2833 >>>>0x64        ulequad 0xC00000003FF00000      \b, A2B10G10R10
2834
2835 # Type: Microsoft DirectDraw Surface
2836 # URL:  https://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/directx/graphics/reference/DDSFileReference/ddsfileformat.asp
2837 # From: Morten Hustveit <morten@debian.org>
2838 # Updated by: David Korth <gerbilsoft@gerbilsoft.com>
2839 0       string/b        DDS\040\174\000\000\000 Microsoft DirectDraw Surface (DDS):
2840 >0      use     ms-directdraw-surface
2841
2842 # Type: Sega PVR image.
2843 # From: David Korth <gerbilsoft@gerbilsoft.com>
2844 # References:
2845 # - https://fabiensanglard.net/Mykaruga/tools/segaPVRFormat.txt
2846 # - https://github.com/yazgoo/pvrx2png
2847 # - https://github.com/nickworonekin/puyotools
2848
2849 # Sega PVR header.
2850 0       name    sega-pvr-image-header
2851 >0x0C   uleshort        x       %u x
2852 >0x0E   uleshort        x       %u
2853 # Image format.
2854 >0x08   ubyte   0       \b, ARGB1555
2855 >0x08   ubyte   1       \b, RGB565
2856 >0x08   ubyte   2       \b, ARGB4444
2857 >0x08   ubyte   3       \b, YUV442
2858 >0x08   ubyte   4       \b, Bump
2859 >0x08   ubyte   5       \b, 4bpp
2860 >0x08   ubyte   6       \b, 8bpp
2861 # Image data type.
2862 >0x09   ubyte   0x01    \b, square twiddled
2863 >0x09   ubyte   0x02    \b, square twiddled & mipmap
2864 >0x09   ubyte   0x03    \b, VQ
2865 >0x09   ubyte   0x04    \b, VQ & mipmap
2866 >0x09   ubyte   0x05    \b, 8-bit CLUT twiddled
2867 >0x09   ubyte   0x06    \b, 4-bit CLUT twiddled
2868 >0x09   ubyte   0x07    \b, 8-bit direct twiddled
2869 >0x09   ubyte   0x08    \b, 4-bit direct twiddled
2870 >0x09   ubyte   0x09    \b, rectangle
2871 >0x09   ubyte   0x0B    \b, rectangular stride
2872 >0x09   ubyte   0x0D    \b, rectangular twiddled
2873 >0x09   ubyte   0x10    \b, small VQ
2874 >0x09   ubyte   0x11    \b, small VQ & mipmap
2875 >0x09   ubyte   0x12    \b, square twiddled & mipmap
2876
2877 # Sega PVR image.
2878 0       string  PVRT
2879 >0x10   string  DDS\040\174\000\000\000 Sega PVR (Xbox) image:
2880 >>0x20  use     ms-directdraw-surface
2881 >0x10   ubelong !0x44445320             Sega PVR image:
2882 >>0     use     sega-pvr-image-header
2883
2884 # Sega PVR image with GBIX.
2885 0       string  GBIX
2886 >0x10   string  PVRT
2887 >>0x10  string  DDS\040\174\000\000\000 Sega PVR (Xbox) image:
2888 >>>0x20 use     ms-directdraw-surface
2889 >>0x10  ubelong !0x44445320             Sega PVR image:
2890 >>>0x10 use     sega-pvr-image-header
2891 >>0x08  ulelong x       \b, global index = %u
2892
2893 # Sega GVR header.
2894 0       name    sega-gvr-image-header
2895 >0x0C   ubeshort        x       %u x
2896 >0x0E   ubeshort        x       %u
2897 # Image data format.
2898 >0x0B   ubyte   0       \b, I4
2899 >0x0B   ubyte   1       \b, I8
2900 >0x0B   ubyte   2       \b, IA4
2901 >0x0B   ubyte   3       \b, IA8
2902 >0x0B   ubyte   4       \b, RGB565
2903 >0x0B   ubyte   5       \b, RGB5A3
2904 >0x0B   ubyte   6       \b, ARGB8888
2905 >0x0B   ubyte   8       \b, CI4
2906 >0x0B   ubyte   9       \b, CI8
2907 >0x0B   ubyte   14      \b, DXT1
2908
2909 # Sega GVR image.
2910 0       string  GVRT    Sega GVR image:
2911 >0x10   use     sega-gvr-image-header
2912
2913 # Sega GVR image with GBIX.
2914 0       string  GBIX
2915 >0x10   string  GVRT    Sega GVR image:
2916 >>0x10  use     sega-gvr-image-header
2917 >>0x08  ubelong x       \b, global index = %u
2918
2919 # Sega GVR image with GCIX. (Wii)
2920 0       string  GCIX
2921 >0x10   string  GVRT    Sega GVR image:
2922 >>0x10  use     sega-gvr-image-header
2923 >>0x08  ubelong x       \b, global index = %u
2924
2925 # Light Field Picture
2926 # Documentation: http://optics.miloush.net/lytro/TheFileFormat.aspx
2927 # Typical file extensions: .lfp .lfr .lfx
2928
2929 0       ubelong 0x894C4650
2930 >4      ubelong 0x0D0A1A0A
2931 >12     ubelong 0x00000000      Lytro Light Field Picture
2932 >8      ubelong x               \b, version %d
2933
2934 # Type: Vision Research Phantom CINE Format
2935 # URL: https://www.phantomhighspeed.com/
2936 # URL2: http://phantomhighspeed.force.com/vriknowledge/servlet/fileField?id=0BEU0000000Cfyk
2937 # From: Harry Mallon <hjmallon at gmail.com>
2938 #
2939 # This has a short "CI" code but the 44 is the size of the struct which is
2940 # stable
2941 0       string  CI
2942 >2      uleshort 44             Vision Research CINE Video,
2943 >>4     uleshort        0               Grayscale,
2944 >>4     uleshort 1              JPEG Compressed,
2945 >>4     uleshort 2              RAW,
2946 >>6     uleshort x              version %d,
2947 >>20    ulelong x               %d frames,
2948 >>48    ulelong x               %dx
2949 >>52    ulelong x               \b%d
2950
2951 # Type: ARRI Raw Image
2952 # Info: SMPTE RDD30:2014
2953 # From: Harry Mallon <hjmallon at gmail.com>
2954 0       string ARRI             ARRI ARI image data,
2955 >4      ulelong 0x78563412      little-endian,
2956 >4      ulelong 0x12345678      big-endian,
2957 >12     ulelong x               version %d,
2958 >20     ulelong x               %dx
2959 >24     ulelong x               \b%d
2960
2961 # Type: Khronos KTX texture.
2962 # From: David Korth <gerbilsoft@gerbilsoft.com>
2963 # Reference: https://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/
2964
2965 # glEnum decoding.
2966 # NOTE: Only the most common formats are listed here.
2967 0       name    khronos-ktx-glEnum
2968 >0      ulelong 0x1907  \b, RGB
2969 >0      ulelong 0x1908  \b, RGBA
2970 >0      ulelong 0x1909  \b, LUMINANCE
2971 >0      ulelong 0x190A  \b, LUMINANCE_ALPHA
2972 >0      ulelong 0x80E1  \b, BGR
2973 >0      ulelong 0x80E2  \b, BGRA
2974 >0      ulelong 0x83A0  \b, RGB_S3TC
2975 >0      ulelong 0x83A1  \b, RGB4_S3TC
2976 >0      ulelong 0x83A2  \b, RGBA_S3TC
2977 >0      ulelong 0x83A3  \b, RGBA4_S3TC
2978 >0      ulelong 0x83A4  \b, RGBA_DXT5_S3TC
2979 >0      ulelong 0x83A5  \b, RGBA4_DXT5_S3TC
2980 >0      ulelong 0x83F0  \b, COMPRESSED_RGB_S3TC_DXT1_EXT
2981 >0      ulelong 0x83F1  \b, COMPRESSED_RGBA_S3TC_DXT1_EXT
2982 >0      ulelong 0x83F2  \b, COMPRESSED_RGBA_S3TC_DXT3_EXT
2983 >0      ulelong 0x83F3  \b, COMPRESSED_RGBA_S3TC_DXT5_EXT
2984 >0      ulelong 0x8D64  \b, ETC1_RGB8_OES
2985 >0      ulelong 0x9270  \b, COMPRESSED_R11_EAC
2986 >0      ulelong 0x9271  \b, COMPRESSED_SIGNED_R11_EAC
2987 >0      ulelong 0x9272  \b, COMPRESSED_RG11_EAC
2988 >0      ulelong 0x9273  \b, COMPRESSED_SIGNED_RG11_EAC
2989 >0      ulelong 0x9274  \b, COMPRESSED_RGB8_ETC2
2990 >0      ulelong 0x9275  \b, COMPRESSED_SRGB8_ETC2
2991 >0      ulelong 0x9276  \b, COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2
2992 >0      ulelong 0x9277  \b, COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2
2993 >0      ulelong 0x9278  \b, COMPRESSED_RGBA2_ETC2_EAC
2994 >0      ulelong 0x9279  \b, COMPRESSED_SRGB8_ALPHA8_ETC2_EAC
2995 >0      ulelong 0x93B0  \b, COMPRESSED_RGBA_ASTC_4x4_KHR
2996 >0      ulelong 0x93B1  \b, COMPRESSED_RGBA_ASTC_5x4_KHR
2997 >0      ulelong 0x93B2  \b, COMPRESSED_RGBA_ASTC_5x5_KHR
2998 >0      ulelong 0x93B3  \b, COMPRESSED_RGBA_ASTC_6x5_KHR
2999 >0      ulelong 0x93B4  \b, COMPRESSED_RGBA_ASTC_6x6_KHR
3000 >0      ulelong 0x93B5  \b, COMPRESSED_RGBA_ASTC_8x5_KHR
3001 >0      ulelong 0x93B6  \b, COMPRESSED_RGBA_ASTC_8x6_KHR
3002 >0      ulelong 0x93B7  \b, COMPRESSED_RGBA_ASTC_8x8_KHR
3003 >0      ulelong 0x93B8  \b, COMPRESSED_RGBA_ASTC_10x5_KHR
3004 >0      ulelong 0x93B9  \b, COMPRESSED_RGBA_ASTC_10x6_KHR
3005 >0      ulelong 0x93BA  \b, COMPRESSED_RGBA_ASTC_10x8_KHR
3006 >0      ulelong 0x93BB  \b, COMPRESSED_RGBA_ASTC_10x10_KHR
3007 >0      ulelong 0x93BC  \b, COMPRESSED_RGBA_ASTC_12x10_KHR
3008 >0      ulelong 0x93BD  \b, COMPRESSED_RGBA_ASTC_12x12_KHR
3009 >0      ulelong 0x93D0  \b, COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR
3010 >0      ulelong 0x93D1  \b, COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR
3011 >0      ulelong 0x93D2  \b, COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR
3012 >0      ulelong 0x93D3  \b, COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR
3013 >0      ulelong 0x93D4  \b, COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR
3014 >0      ulelong 0x93D5  \b, COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR
3015 >0      ulelong 0x93D6  \b, COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR
3016 >0      ulelong 0x93D7  \b, COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR
3017 >0      ulelong 0x93D8  \b, COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR
3018 >0      ulelong 0x93D9  \b, COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR
3019 >0      ulelong 0x93DA  \b, COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR
3020 >0      ulelong 0x93DB  \b, COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR
3021 >0      ulelong 0x93DC  \b, COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR
3022 >0      ulelong 0x93DD  \b, COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR
3023
3024 # Endian-specific KTX header.
3025 # TODO: glType (all textures I've seen so far are GL_UNSIGNED_BYTE)
3026 0       name    khronos-ktx-endian-header
3027 >20     ulelong x       \b, %u
3028 >24     ulelong >1      x %u
3029 >28     ulelong >1      x %u
3030 >8      ulelong >0
3031 >>8     use     khronos-ktx-glEnum
3032 >8      ulelong 0
3033 >>12    use     khronos-ktx-glEnum
3034
3035 # Main KTX header.
3036 # Determine endianness, then check the rest of the header.
3037 0       string  \xABKTX\ 11\xBB\r\n\x1A\n       Khronos KTX texture
3038 >12     ulelong 0x04030201                      (little-endian)
3039 >>16    use     khronos-ktx-endian-header
3040 >12     ubelong 0x04030201                      (big-endian)
3041 >>16    use     \^khronos-ktx-endian-header
3042
3043 # Type: Khronos KTX2 texture.
3044 # From: David Korth <gerbilsoft@gerbilsoft.com>
3045 # Based on draft19.
3046 # Reference: http://github.khronos.org/KTX-Specification/
3047
3048 # Supercompression enum.
3049 0       name    khronos-ktx2-supercompression
3050 >0      ulelong 1       BasisLZ
3051 >0      ulelong 2       Zstandard
3052 >0      ulelong 3       ZLIB
3053
3054 # Vulkan format identifier.
3055 # NOTE: Formats prohibited from KTX2 are commented out.
3056 0       name    khronos-ktx2-vkFormat
3057 >0      ulelong 0       UNDEFINED
3058 >0      ulelong 1       R4G4_UNORM_PACK8
3059 >0      ulelong 2       R4G4B4A4_UNORM_PACK16
3060 >0      ulelong 3       B4G4R4A4_UNORM_PACK16
3061 >0      ulelong 4       R5G6B5_UNORM_PACK16
3062 >0      ulelong 5       B5G6R5_UNORM_PACK16
3063 >0      ulelong 6       R5G5B5A1_UNORM_PACK16
3064 >0      ulelong 7       B5G5R5A1_UNORM_PACK16
3065 >0      ulelong 8       A1R5G5B5_UNORM_PACK16
3066 >0      ulelong 9       R8_UNORM
3067 >0      ulelong 10      R8_SNORM
3068 #>0     ulelong 11      R8_USCALED
3069 #>0     ulelong 12      R8_SSCALED
3070 >0      ulelong 13      R8_UINT
3071 >0      ulelong 14      R8_SINT
3072 >0      ulelong 15      R8_SRGB
3073 >0      ulelong 16      R8G8_UNORM
3074 >0      ulelong 17      R8G8_SNORM
3075 #>0     ulelong 18      R8G8_USCALED
3076 #>0     ulelong 19      R8G8_SSCALED
3077 >0      ulelong 20      R8G8_UINT
3078 >0      ulelong 21      R8G8_SINT
3079 >0      ulelong 22      R8G8_SRGB
3080 >0      ulelong 23      R8G8B8_UNORM
3081 >0      ulelong 24      R8G8B8_SNORM
3082 #>0     ulelong 25      R8G8B8_USCALED
3083 #>0     ulelong 26      R8G8B8_SSCALED
3084 >0      ulelong 27      R8G8B8_UINT
3085 >0      ulelong 28      R8G8B8_SINT
3086 >0      ulelong 29      R8G8B8_SRGB
3087 >0      ulelong 30      B8G8R8_UNORM
3088 >0      ulelong 31      B8G8R8_SNORM
3089 #>0     ulelong 32      B8G8R8_USCALED
3090 #>0     ulelong 33      B8G8R8_SSCALED
3091 >0      ulelong 34      B8G8R8_UINT
3092 >0      ulelong 35      B8G8R8_SINT
3093 >0      ulelong 36      B8G8R8_SRGB
3094 >0      ulelong 37      R8G8B8A8_UNORM
3095 >0      ulelong 38      R8G8B8A8_SNORM
3096 #>0     ulelong 39      R8G8B8A8_USCALED
3097 #>0     ulelong 40      R8G8B8A8_SSCALED
3098 >0      ulelong 41      R8G8B8A8_UINT
3099 >0      ulelong 42      R8G8B8A8_SINT
3100 >0      ulelong 43      R8G8B8A8_SRGB
3101 >0      ulelong 44      B8G8R8A8_UNORM
3102 >0      ulelong 45      B8G8R8A8_SNORM
3103 #>0     ulelong 46      B8G8R8A8_USCALED
3104 #>0     ulelong 47      B8G8R8A8_SSCALED
3105 >0      ulelong 48      B8G8R8A8_UINT
3106 >0      ulelong 49      B8G8R8A8_SINT
3107 >0      ulelong 50      B8G8R8A8_SRGB
3108 #>0     ulelong 51      A8B8G8R8_UNORM_PACK32
3109 #>0     ulelong 52      A8B8G8R8_SNORM_PACK32
3110 #>0     ulelong 53      A8B8G8R8_USCALED_PACK32
3111 #>0     ulelong 54      A8B8G8R8_SSCALED_PACK32
3112 #>0     ulelong 55      A8B8G8R8_UINT_PACK32
3113 #>0     ulelong 56      A8B8G8R8_SINT_PACK32
3114 #>0     ulelong 57      A8B8G8R8_SRGB_PACK32
3115 >0      ulelong 58      A2R10G10B10_UNORM_PACK32
3116 >0      ulelong 59      A2R10G10B10_SNORM_PACK32
3117 #>0     ulelong 60      A2R10G10B10_USCALED_PACK32
3118 #>0     ulelong 61      A2R10G10B10_SSCALED_PACK32
3119 >0      ulelong 62      A2R10G10B10_UINT_PACK32
3120 >0      ulelong 63      A2R10G10B10_SINT_PACK32
3121 >0      ulelong 64      A2B10G10R10_UNORM_PACK32
3122 >0      ulelong 65      A2B10G10R10_SNORM_PACK32
3123 #>0     ulelong 66      A2B10G10R10_USCALED_PACK32
3124 #>0     ulelong 67      A2B10G10R10_SSCALED_PACK32
3125 >0      ulelong 68      A2B10G10R10_UINT_PACK32
3126 >0      ulelong 69      A2B10G10R10_SINT_PACK32
3127 >0      ulelong 70      R16_UNORM
3128 >0      ulelong 71      R16_SNORM
3129 #>0     ulelong 72      R16_USCALED
3130 #>0     ulelong 73      R16_SSCALED
3131 >0      ulelong 74      R16_UINT
3132 >0      ulelong 75      R16_SINT
3133 >0      ulelong 76      R16_SFLOAT
3134 >0      ulelong 77      R16G16_UNORM
3135 >0      ulelong 78      R16G16_SNORM
3136 #>0     ulelong 79      R16G16_USCALED
3137 #>0     ulelong 80      R16G16_SSCALED
3138 >0      ulelong 81      R16G16_UINT
3139 >0      ulelong 82      R16G16_SINT
3140 >0      ulelong 83      R16G16_SFLOAT
3141 >0      ulelong 84      R16G16B16_UNORM
3142 >0      ulelong 85      R16G16B16_SNORM
3143 #>0     ulelong 86      R16G16B16_USCALED
3144 #>0     ulelong 87      R16G16B16_SSCALED
3145 >0      ulelong 88      R16G16B16_UINT
3146 >0      ulelong 89      R16G16B16_SINT
3147 >0      ulelong 90      R16G16B16_SFLOAT
3148 >0      ulelong 91      R16G16B16A16_UNORM
3149 >0      ulelong 92      R16G16B16A16_SNORM
3150 #>0     ulelong 93      R16G16B16A16_USCALED
3151 #>0     ulelong 94      R16G16B16A16_SSCALED
3152 >0      ulelong 95      R16G16B16A16_UINT
3153 >0      ulelong 96      R16G16B16A16_SINT
3154 >0      ulelong 97      R16G16B16A16_SFLOAT
3155 >0      ulelong 98      R32_UINT
3156 >0      ulelong 99      R32_SINT
3157 >0      ulelong 100     R32_SFLOAT
3158 >0      ulelong 101     R32G32_UINT
3159 >0      ulelong 102     R32G32_SINT
3160 >0      ulelong 103     R32G32_SFLOAT
3161 >0      ulelong 104     R32G32B32_UINT
3162 >0      ulelong 105     R32G32B32_SINT
3163 >0      ulelong 106     R32G32B32_SFLOAT
3164 >0      ulelong 107     R32G32B32A32_UINT
3165 >0      ulelong 108     R32G32B32A32_SINT
3166 >0      ulelong 109     R32G32B32A32_SFLOAT
3167 >0      ulelong 110     R64_UINT
3168 >0      ulelong 111     R64_SINT
3169 >0      ulelong 112     R64_SFLOAT
3170 >0      ulelong 113     R64G64_UINT
3171 >0      ulelong 114     R64G64_SINT
3172 >0      ulelong 115     R64G64_SFLOAT
3173 >0      ulelong 116     R64G64B64_UINT
3174 >0      ulelong 117     R64G64B64_SINT
3175 >0      ulelong 118     R64G64B64_SFLOAT
3176 >0      ulelong 119     R64G64B64A64_UINT
3177 >0      ulelong 120     R64G64B64A64_SINT
3178 >0      ulelong 121     R64G64B64A64_SFLOAT
3179 >0      ulelong 122     B10G11R11_UFLOAT_PACK32
3180 >0      ulelong 123     E5B9G9R9_UFLOAT_PACK32
3181 >0      ulelong 124     D16_UNORM
3182 >0      ulelong 125     X8_D24_UNORM_PACK32
3183 >0      ulelong 126     D32_SFLOAT
3184 >0      ulelong 127     S8_UINT
3185 >0      ulelong 128     D16_UNORM_S8_UINT
3186 >0      ulelong 129     D24_UNORM_S8_UINT
3187 >0      ulelong 130     D32_SFLOAT_S8_UINT
3188
3189 >0      ulelong 131     BC1_RGB_UNORM_BLOCK
3190 >0      ulelong 132     BC1_RGB_SRGB_BLOCK
3191 >0      ulelong 133     BC1_RGBA_UNORM_BLOCK
3192 >0      ulelong 134     BC1_RGBA_SRGB_BLOCK
3193 >0      ulelong 135     BC2_UNORM_BLOCK
3194 >0      ulelong 136     BC2_SRGB_BLOCK
3195 >0      ulelong 137     BC3_UNORM_BLOCK
3196 >0      ulelong 138     BC3_SRGB_BLOCK
3197 >0      ulelong 139     BC4_UNORM_BLOCK
3198 >0      ulelong 140     BC4_SNORM_BLOCK
3199 >0      ulelong 141     BC5_UNORM_BLOCK
3200 >0      ulelong 142     BC5_SNORM_BLOCK
3201 >0      ulelong 143     BC6H_UFLOAT_BLOCK
3202 >0      ulelong 144     BC6H_SFLOAT_BLOCK
3203 >0      ulelong 145     BC7_UNORM_BLOCK
3204 >0      ulelong 146     BC7_SRGB_BLOCK
3205
3206 >0      ulelong 147     ETC2_R8G8B8_UNORM_BLOCK
3207 >0      ulelong 148     ETC2_R8G8B8_SRGB_BLOCK
3208 >0      ulelong 149     ETC2_R8G8B8A1_UNORM_BLOCK
3209 >0      ulelong 150     ETC2_R8G8B8A1_SRGB_BLOCK
3210 >0      ulelong 151     ETC2_R8G8B8A8_UNORM_BLOCK
3211 >0      ulelong 152     ETC2_R8G8B8A8_SRGB_BLOCK
3212
3213 >0      ulelong 153     EAC_R11_UNORM_BLOCK
3214 >0      ulelong 154     EAC_R11_SNORM_BLOCK
3215 >0      ulelong 155     EAC_R11G11_UNORM_BLOCK
3216 >0      ulelong 156     EAC_R11G11_SNORM_BLOCK
3217
3218 >0      ulelong 157     ASTC_4x4_UNORM_BLOCK
3219 >0      ulelong 158     ASTC_4x4_SRGB_BLOCK
3220 >0      ulelong 159     ASTC_5x4_UNORM_BLOCK
3221 >0      ulelong 160     ASTC_5x4_SRGB_BLOCK
3222 >0      ulelong 161     ASTC_5x5_UNORM_BLOCK
3223 >0      ulelong 162     ASTC_5x5_SRGB_BLOCK
3224 >0      ulelong 163     ASTC_6x5_UNORM_BLOCK
3225 >0      ulelong 164     ASTC_6x5_SRGB_BLOCK
3226 >0      ulelong 165     ASTC_6x6_UNORM_BLOCK
3227 >0      ulelong 166     ASTC_6x6_SRGB_BLOCK
3228 >0      ulelong 167     ASTC_8x5_UNORM_BLOCK
3229 >0      ulelong 168     ASTC_8x5_SRGB_BLOCK
3230 >0      ulelong 169     ASTC_8x6_UNORM_BLOCK
3231 >0      ulelong 170     ASTC_8x6_SRGB_BLOCK
3232 >0      ulelong 171     ASTC_8x8_UNORM_BLOCK
3233 >0      ulelong 172     ASTC_8x8_SRGB_BLOCK
3234 >0      ulelong 173     ASTC_10x5_UNORM_BLOCK
3235 >0      ulelong 174     ASTC_10x5_SRGB_BLOCK
3236 >0      ulelong 175     ASTC_10x6_UNORM_BLOCK
3237 >0      ulelong 176     ASTC_10x6_SRGB_BLOCK
3238 >0      ulelong 177     ASTC_10x8_UNORM_BLOCK
3239 >0      ulelong 178     ASTC_10x8_SRGB_BLOCK
3240 >0      ulelong 179     ASTC_10x10_UNORM_BLOCK
3241 >0      ulelong 180     ASTC_10x10_SRGB_BLOCK
3242 >0      ulelong 181     ASTC_12x10_UNORM_BLOCK
3243 >0      ulelong 182     ASTC_12x10_SRGB_BLOCK
3244 >0      ulelong 183     ASTC_12x12_UNORM_BLOCK
3245 >0      ulelong 184     ASTC_12x12_SRGB_BLOCK
3246
3247 >0      ulelong 1000156000      G8B8G8R8_422_UNORM
3248 >0      ulelong 1000156001      B8G8R8G8_422_UNORM
3249 >0      ulelong 1000156002      G8_B8_R8_3PLANE_420_UNORM
3250 >0      ulelong 1000156003      G8_B8R8_2PLANE_420_UNORM
3251 >0      ulelong 1000156004      G8_B8_R8_3PLANE_422_UNORM
3252 >0      ulelong 1000156005      G8_B8R8_2PLANE_422_UNORM
3253 >0      ulelong 1000156006      G8_B8_R8_3PLANE_444_UNORM
3254 >0      ulelong 1000156007      R10X6_UNORM_PACK16
3255 >0      ulelong 1000156008      R10X6G10X6_UNORM_2PACK16
3256 >0      ulelong 1000156009      R10X6G10X6B10X6A10X6_UNORM_4PACK16
3257 >0      ulelong 1000156010      G10X6B10X6G10X6R10X6_422_UNORM_4PACK16
3258 >0      ulelong 1000156011      B10X6G10X6R10X6G10X6_422_UNORM_4PACK16
3259 >0      ulelong 1000156012      G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16
3260 >0      ulelong 1000156013      G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16
3261 >0      ulelong 1000156014      G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16
3262 >0      ulelong 1000156015      G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16
3263 >0      ulelong 1000156016      G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16
3264 >0      ulelong 1000156017      R12X4_UNORM_PACK16
3265 >0      ulelong 1000156018      R12X4G12X4_UNORM_2PACK16
3266 >0      ulelong 1000156019      R12X4G12X4B12X4A12X4_UNORM_4PACK16
3267 >0      ulelong 1000156020      G12X4B12X4G12X4R12X4_422_UNORM_4PACK16
3268 >0      ulelong 1000156021      B12X4G12X4R12X4G12X4_422_UNORM_4PACK16
3269 >0      ulelong 1000156022      G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16
3270 >0      ulelong 1000156023      G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16
3271 >0      ulelong 1000156024      G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16
3272 >0      ulelong 1000156025      G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16
3273 >0      ulelong 1000156026      G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16
3274 >0      ulelong 1000156027      G16B16G16R16_422_UNORM
3275 >0      ulelong 1000156028      B16G16R16G16_422_UNORM
3276 >0      ulelong 1000156029      G16_B16_R16_3PLANE_420_UNORM
3277 >0      ulelong 1000156030      G16_B16R16_2PLANE_420_UNORM
3278 >0      ulelong 1000156031      G16_B16_R16_3PLANE_422_UNORM
3279 >0      ulelong 1000156032      G16_B16R16_2PLANE_422_UNORM
3280 >0      ulelong 1000156033      G16_B16_R16_3PLANE_444_UNORM
3281
3282 >0      ulelong 1000054000      PVRTC1_2BPP_UNORM_BLOCK_IMG
3283 >0      ulelong 1000054001      PVRTC1_4BPP_UNORM_BLOCK_IMG
3284 >0      ulelong 1000054002      PVRTC2_2BPP_UNORM_BLOCK_IMG
3285 >0      ulelong 1000054003      PVRTC2_4BPP_UNORM_BLOCK_IMG
3286 >0      ulelong 1000054004      PVRTC1_2BPP_SRGB_BLOCK_IMG
3287 >0      ulelong 1000054005      PVRTC1_4BPP_SRGB_BLOCK_IMG
3288 >0      ulelong 1000054006      PVRTC2_2BPP_SRGB_BLOCK_IMG
3289 >0      ulelong 1000054007      PVRTC2_4BPP_SRGB_BLOCK_IMG
3290
3291 >0      ulelong 1000066000      ASTC_4x4_SFLOAT_BLOCK_EXT
3292 >0      ulelong 1000066001      ASTC_5x4_SFLOAT_BLOCK_EXT
3293 >0      ulelong 1000066002      ASTC_5x5_SFLOAT_BLOCK_EXT
3294 >0      ulelong 1000066003      ASTC_6x5_SFLOAT_BLOCK_EXT
3295 >0      ulelong 1000066004      ASTC_6x6_SFLOAT_BLOCK_EXT
3296 >0      ulelong 1000066005      ASTC_8x5_SFLOAT_BLOCK_EXT
3297 >0      ulelong 1000066006      ASTC_8x6_SFLOAT_BLOCK_EXT
3298 >0      ulelong 1000066007      ASTC_8x8_SFLOAT_BLOCK_EXT
3299 >0      ulelong 1000066008      ASTC_10x5_SFLOAT_BLOCK_EXT
3300 >0      ulelong 1000066009      ASTC_10x6_SFLOAT_BLOCK_EXT
3301 >0      ulelong 1000066010      ASTC_10x8_SFLOAT_BLOCK_EXT
3302 >0      ulelong 1000066011      ASTC_10x10_SFLOAT_BLOCK_EXT
3303 >0      ulelong 1000066012      ASTC_12x10_SFLOAT_BLOCK_EXT
3304 >0      ulelong 1000066013      ASTC_12x12_SFLOAT_BLOCK_EXT
3305
3306 # Main KTX2 header.
3307 0       string  \xABKTX\ 20\xBB\r\n\x1A\n       Khronos KTX2 texture
3308 >20     ulelong x       \b, %u
3309 >24     ulelong >1      x %u
3310 >28     ulelong >1      x %u
3311 >32     ulelong >1      \b, %u layers
3312 >36     ulelong >1      \b, %u faces
3313 >40     ulelong >1      \b, %u mipmaps
3314 >44     ulelong >0      \b,
3315 >>44    use     khronos-ktx2-supercompression
3316 >12     ulelong >0      \b,
3317 >>12    use     khronos-ktx2-vkFormat
3318
3319 # Type: Valve VTF texture.
3320 # From: David Korth <gerbilsoft@gerbilsoft.com>
3321 # References:
3322 # - https://developer.valvesoftware.com/wiki/Valve_Texture_Format
3323
3324 # VTF image formats.
3325 0       name    vtf-image-format
3326 >0      ulelong 0       RGBA8888
3327 >0      ulelong 1       ABGR8888
3328 >0      ulelong 2       RGB888
3329 >0      ulelong 3       BGR888
3330 >0      ulelong 4       RGB565
3331 >0      ulelong 5       I8
3332 >0      ulelong 6       IA88
3333 >0      ulelong 7       P8
3334 >0      ulelong 8       A8
3335 >0      ulelong 9       RGB888 (bluescreen)
3336 >0      ulelong 10      BGR888 (bluescreen)
3337 >0      ulelong 11      ARGB8888
3338 >0      ulelong 12      BGRA8888
3339 >0      ulelong 13      DXT1
3340 >0      ulelong 14      DXT3
3341 >0      ulelong 15      DXT5
3342 >0      ulelong 16      BGRx8888
3343 >0      ulelong 17      BGR565
3344 >0      ulelong 18      BGRx5551
3345 >0      ulelong 19      BGRA4444
3346 >0      ulelong 20      DXT1+A1
3347 >0      ulelong 21      BGRA5551
3348 >0      ulelong 22      UV88
3349 >0      ulelong 23      UVWQ8888
3350 >0      ulelong 24      RGBA16161616F
3351 >0      ulelong 25      RGBA16161616
3352 >0      ulelong 26      UVLX8888
3353
3354 # Main VTF header.
3355 0       string  VTF\0                           Valve Texture Format
3356 >4      ulelong x                               v%u
3357 >8      ulelong x                               \b.%u
3358 >0x10   uleshort        x                               \b, %u
3359 >0x12   uleshort        >1                              x %u
3360 >4      lequad  0x0000000700000002
3361 >>0x3F  uleshort        >1                              x %u
3362 >0x18   uleshort        >1                              \b, %u frames
3363 >0x38   ubyte   x                               \b, mipmaps: %u
3364 >0x34   ulelong >-1                             \b,
3365 >>0x34  use     vtf-image-format
3366
3367 # Type: Valve VTF3 (PS3) texture.
3368 # From: David Korth <gerbilsoft@gerbilsoft.com>
3369 0       string          VTF3    Valve Texture Format (PS3)
3370 >0x14   ubeshort                x       \b, %u
3371 >0x16   ubeshort                x       \b x %u
3372 >0x10   ubelong&0x2000  0       \b, DXT1
3373 >0x10   ubelong&0x2000  0x2000  \b, DXT5
3374
3375 # Type: ASTC texture.
3376 # From: David Korth <gerbilsoft@gerbilsoft.com>
3377 # References:
3378 # - https://stackoverflow.com/questions/22600678/determine-internal-format-of-given-astc-compressed-image-through-its-header
3379 # - https://stackoverflow.com/a/22682244
3380 0       ulelong 0x5ca1ab13                      ASTC
3381 >4      ubyte   x                               %u
3382 >5      ubyte   x                               \bx%u
3383 >6      ubyte   >1                              \bx%u
3384 # X, Y, and Z dimensions are stored as 24-bit LE.
3385 # Pretend it's 32-bit and mask off the high byte.
3386 >7      ulelong&0x00FFFFFF      x               texture, %u
3387 >10     ulelong&0x00FFFFFF      x               x %u
3388 >13     ulelong&0x00FFFFFF      >1              x %u
3389
3390 # Zebra Metafile graphic
3391 # http://www.fileformat.info/format/zbr/egff.htm
3392 0       ubeshort        0x9a02  Zebra Metafile graphic
3393 >2      uleshort 1      (version 1.x)
3394 >2      uleshort        2       (version 1.1x or 1.2x)
3395 >2      uleshort        3       (version 1.49)
3396 >2      uleshort        4       (version 1.50)
3397 >4      string  x       (comment = %s)
3398
3399 # Microsoft Paint graphic
3400 # http://www.fileformat.info/format/mspaint/egff.htm
3401 0       string  DanM    icrosoft Paint image data (version 1.x)
3402 >4      uleshort        x       (%d
3403 >>6     uleshort        x       x %d)
3404 0       string  LinS    Microsoft Paint image data (version 2.0)
3405 >4      uleshort        x       (%d
3406 >>6     uleshort        x       x %d)
3407
3408 # reMarkable tablet internal file format (https://www.remarkable.com/)
3409 # https://github.com/ax3l/lines-are-beautiful
3410 # https://plasma.ninja/blog/devices/remarkable/binary/format/2017/12/26/\
3411 #       reMarkable-lines-file-format.html#what-to-do-next
3412 # from Axel Huebl
3413 0               string  reMarkable
3414 >11             string  lines
3415 >>17            string  with
3416 >>>22           string  selections
3417 >>>>33          string  and
3418 >>>>>37         string  layers
3419 >>>>>>43        ulelong x       reMarkable tablet notebook lines, 1404 x 1872, %x page(s)
3420
3421 # newer per-page files for the reMarkable
3422 0               string  reMarkable
3423 >11             string  .lines
3424 >>18            string  file,
3425 >>>24           string  version=
3426 >>>>32          ubyte   x       reMarkable tablet page (v%c), 1404 x 1872,
3427 >>>>>43         ulelong x       %d layer(s)
3428
3429 # Type: PVR3 texture.
3430 # From: David Korth <gerbilsoft@gerbilsoft.com>
3431 # References:
3432 # - http://cdn.imgtec.com/sdk-documentation/PVR+File+Format.Specification.pdf
3433
3434 # PVR3 pixel formats.
3435 0       name            pvr3-pixel-format
3436 >0      ulelong 0       PVRTC 2bpp RGB
3437 >0      ulelong 1       PVRTC 2bpp RGBA
3438 >0      ulelong 2       PVRTC 4bpp RGB
3439 >0      ulelong 3       PVRTC 4bpp RGBA
3440 >0      ulelong 4       PVRTC-II 2bpp
3441 >0      ulelong 5       PVRTC-II 4bpp
3442 >0      ulelong 6       ETC1
3443 >0      ulelong 7       DXT1
3444 >0      ulelong 8       DXT2
3445 >0      ulelong 9       DXT3
3446 >0      ulelong 10      DXT4
3447 >0      ulelong 11      DXT5
3448 >0      ulelong 12      BC4
3449 >0      ulelong 13      BC5
3450 >0      ulelong 14      BC6
3451 >0      ulelong 15      BC7
3452 >0      ulelong 16      UYVY
3453 >0      ulelong 17      YUY2
3454 >0      ulelong 18      BW1bpp
3455 >0      ulelong 19      R9G9B9E5 Shared Exponent
3456 >0      ulelong 20      RGBG8888
3457 >0      ulelong 21      GRGB8888
3458 >0      ulelong 22      ETC2 RGB
3459 >0      ulelong 23      ETC2 RGBA
3460 >0      ulelong 24      ETC2 RGB A1
3461 >0      ulelong 25      EAC R11
3462 >0      ulelong 26      EAC RG11
3463 >0      ulelong 27      ASTC_4x4
3464 >0      ulelong 28      ASTC_5x4
3465 >0      ulelong 29      ASTC_5x5
3466 >0      ulelong 30      ASTC_6x5
3467 >0      ulelong 31      ASTC_6x6
3468 >0      ulelong 32      ASTC_8x5
3469 >0      ulelong 33      ASTC_8x6
3470 >0      ulelong 34      ASTC_8x8
3471 >0      ulelong 35      ASTC_10x5
3472 >0      ulelong 36      ASTC_10x6
3473 >0      ulelong 37      ASTC_10x8
3474 >0      ulelong 38      ASTC_10x10
3475 >0      ulelong 39      ASTC_12x10
3476 >0      ulelong 40      ASTC_12x12
3477 >0      ulelong 41      ASTC_3x3x3
3478 >0      ulelong 42      ASTC_4x3x3
3479 >0      ulelong 43      ASTC_4x4x3
3480 >0      ulelong 44      ASTC_4x4x4
3481 >0      ulelong 45      ASTC_5x4x4
3482 >0      ulelong 46      ASTC_5x5x4
3483 >0      ulelong 47      ASTC_5x5x5
3484 >0      ulelong 48      ASTC_6x5x5
3485 >0      ulelong 49      ASTC_6x6x5
3486 >0      ulelong 50      ASTC_6x6x6
3487
3488 0       string          PVR\x03                 PowerVR 3.0 texture:
3489 >0x18   ulelong         x       %u x
3490 >0x1C   ulelong         x       %u
3491 >0x20   ulelong         >1      x %u
3492 >0x08   ubyte           x       \b,
3493 >0x0C   ulelong         0
3494 >>0x08  use     pvr3-pixel-format
3495 >0x0C   ulelong         !0
3496 >>0x08  ubyte   !0      %c
3497 >>>0x0C ubyte   !0      \b%u
3498 >>0x09  ubyte   !0      \b%c
3499 >>>0x0D ubyte   !0      \b%u
3500 >>0x0A  ubyte   !0      \b%c
3501 >>>0x0E ubyte   !0      \b%u
3502 >>0x0B  ubyte   !0      \b%c
3503 >>>0x0F ubyte   !0      \b%u
3504 >0x10   ulelong         1       \b, sRGB
3505 >0x04   ulelong&0x02    0x02    \b, premultiplied alpha
3506
3507 0       string          \x03RVP                 PowerVR 3.0 texture: BE,
3508 >0x18   ubelong         x       %u x
3509 >0x1C   ubelong         x       %u
3510 >0x20   ubelong         >1      x %u
3511 >0x08   ubyte           x       \b,
3512 >0x0C   ubelong         0
3513 >>0x08  use     pvr3-pixel-format
3514 >0x0C   ubelong         !0
3515 >>0x0B  ubyte   !0      %c
3516 >>>0x0F ubyte   !0      \b%u
3517 >>0x0A  ubyte   !0      \b%c
3518 >>>0x0E ubyte   !0      \b%u
3519 >>0x09  ubyte   !0      \b%c
3520 >>>0x0D ubyte   !0      \b%u
3521 >>0x08  ubyte   !0      \b%c
3522 >>>0x0C ubyte   !0      \b%u
3523 >0x10   ubelong         1       \b, sRGB
3524 >0x04   ubelong&0x02    0x02    \b, premultiplied alpha
3525
3526 # Type: Microsoft Xbox XPR0 texture.
3527 # From: David Korth <gerbilsoft@gerbilsoft.com>
3528 # References:
3529 # - https://github.com/Cxbx-Reloaded/Cxbx-Reloaded/blob/develop/src/core/hle/D3D8/XbD3D8Types.h
3530
3531 # XPR pixel formats.
3532 0       name    xbox-xpr-pixel-format
3533 >0      ubyte   0x00    L8
3534 >0      ubyte   0x01    AL8
3535 >0      ubyte   0x02    ARGB1555
3536 >0      ubyte   0x03    RGB555
3537 >0      ubyte   0x04    ARGB4444
3538 >0      ubyte   0x05    RGB565
3539 >0      ubyte   0x06    ARGB8888
3540 >0      ubyte   0x07    xRGB8888
3541 >0      ubyte   0x0B    P8
3542 >0      ubyte   0x0C    DXT1
3543 >0      ubyte   0x0E    DXT2
3544 >0      ubyte   0x0F    DXT4
3545 >0      ubyte   0x10    Linear ARGB1555
3546 >0      ubyte   0x11    Linear RGB565
3547 >0      ubyte   0x12    Linear ARGB8888
3548 >0      ubyte   0x13    Linear L8
3549 >0      ubyte   0x16    Linear R8B8
3550 >0      ubyte   0x17    Linear G8B8
3551 >0      ubyte   0x19    A8
3552 >0      ubyte   0x1A    A8L8
3553 >0      ubyte   0x1B    Linear AL8
3554 >0      ubyte   0x1C    Linear RGB555
3555 >0      ubyte   0x1D    Linear ARGB4444
3556 >0      ubyte   0x1E    Linear xRGB8888
3557 >0      ubyte   0x1F    Linear A8
3558 >0      ubyte   0x20    Linear A8L8
3559 >0      ubyte   0x24    YUY2
3560 >0      ubyte   0x25    UYVY
3561 >0      ubyte   0x27    L6V5U5
3562 >0      ubyte   0x28    V8U8
3563 >0      ubyte   0x29    R8B8
3564 >0      ubyte   0x2A    D24S8
3565 >0      ubyte   0x2B    F24S8
3566 >0      ubyte   0x2C    D16
3567 >0      ubyte   0x2D    F16
3568 >0      ubyte   0x2E    Linear D24S8
3569 >0      ubyte   0x2F    Linear F24S8
3570 >0      ubyte   0x30    Linear D16
3571 >0      ubyte   0x31    Linear F16
3572 >0      ubyte   0x32    L16
3573 >0      ubyte   0x33    V16U16
3574 >0      ubyte   0x35    Linear L16
3575 >0      ubyte   0x36    Linear V16U16
3576 >0      ubyte   0x37    Linear L6V5U5
3577 >0      ubyte   0x38    RGBA5551
3578 >0      ubyte   0x39    RGBA4444
3579 >0      ubyte   0x3A    QWVU8888
3580 >0      ubyte   0x3B    BGRA8888
3581 >0      ubyte   0x3C    RGBA8888
3582 >0      ubyte   0x3D    Linear RGBA5551
3583 >0      ubyte   0x3E    Linear RGBA4444
3584 >0      ubyte   0x3F    Linear ABGR8888
3585 >0      ubyte   0x40    Linear BGRA8888
3586 >0      ubyte   0x41    Linear RGBA8888
3587 >0      ubyte   0x64    Vertex Data
3588
3589 0       string          XPR0    Microsoft Xbox XPR0 texture
3590 >0x19   ubyte   x       \b, format:
3591 >>0x19  use     xbox-xpr-pixel-format
3592
3593 # ILDA Image Data Transfer Format
3594 # https://www.ilda.com/resources/StandardsDocs/ILDA_IDTF14_rev011.pdf
3595 #
3596 # Updated by Chuck Hein (laser@geekdude.com)
3597 #
3598 0       string          ILDA    ILDA Image Data Transfer Format
3599 >7      ubyte           0x00    3D Coordinates with Indexed Color
3600 >7      ubyte           0x01    2D Coordinates with Indexed Color
3601 >7      ubyte           0x02    Color Palette
3602 >7      ubyte           0x04    3D Coordinates with True Color
3603 >7      ubyte           0x05    2D Coordinates with True Color
3604 >8      string          >0      \b, palette %s
3605 >16     string          >0      \b, company %s
3606 >24     ubeshort        >0      \b, number of records %d
3607 >>26    ubeshort        x       \b, palette number %d
3608 >>28    ubeshort        >0      \b, number of frames %d
3609 >>30    ubyte           >0      \b, projector number %d
3610
3611 # Dropbox "lepton" compressed jpeg format
3612 # https://github.com/dropbox/lepton
3613 0       ubelong&0xfffff0ff      0xcf84005a      Lepton image file
3614 >2      ubyte                   x               (version %d)
3615
3616 # Apple QuickTake camera raw images
3617 # https://en.wikipedia.org/wiki/Apple_QuickTake
3618 # dcraw can decode them
3619 0       name quicktake
3620 >4      ubelong         8
3621 >>544   ubeshort        x       \b, %dx
3622 >>546   ubeshort        x       \b%d
3623 >4      ubelong         4
3624 >>546   ubeshort        x       \b, %dx
3625 >>544   ubeshort        x       \b%d
3626
3627 0       string  qktk    Apple QuickTake 100 Raw Image
3628 >0      use quicktake
3629
3630 0       string  qktn
3631 >4      ubyte   0       Apple QuickTake 150 Raw Image
3632 >4      ubyte   >0      Apple QuickTake 200 Raw Image
3633 >0      use quicktake
3634
3635 # From:         Joerg Jenderek
3636 # URL:          http://fileformats.archiveteam.org/wiki/Corel_Photo-Paint_image
3637 # Reference:    http://blog.argasinski.eu/wp-content/uploads/2011/08/cpt-specification-0.01.pdf
3638 0       string  CPT
3639 >4      string  FILE            Corel Photo-Paint image, version
3640 # version like 7, 9 or 8
3641 >>3     ubyte   x               %c,
3642 !:mime  image/x-corel-cpt
3643 !:ext   cpt
3644 # if blocks_array_offset available jump blockNumber*8 bytes 
3645 >>0x34  ulelong         >0
3646 >>>(0x28.l*8)   ubyte   x
3647 # jump additional stored blocks_array_offset bytes forward to object block
3648 >>>>&(0x34.l-1) ulelong x       %u
3649 # object height in pixels
3650 >>>>>&0         ulelong x       x %u
3651 # if no blocks_array_offset available jump blockNumber*8 bytes
3652 >>0x34  ulelong         =0
3653 >>>(0x28.l*8)   ubyte   x
3654 # jump additional 0x13C bytes forward to object block
3655 >>>>&0x13B      ulelong x       %u
3656 >>>>>&0 ulelong         x       x %u
3657 # image color model used
3658 >>0x8   ulelong x
3659 >>>0x8  ulelong 0x1             RGB 24 bits
3660 >>>0x8  ulelong 0x3             CMYK 24 bits
3661 >>>0x8  ulelong 0x5             greyscale 8 bits
3662 >>>0x8  ulelong 0x6             black and white 1 bit
3663 >>>0x8  ulelong 0xA             RGB 8 bits
3664 # palette_length  number of colors * 3 in case of 8-bit RGB paletted image
3665 # 0 otherwise. Allowed values: 0 or [1..256] * 3
3666 #>>0xC  ulelong >0              \b, palette length %u
3667 >>>>0xC ulelong/3       <256    \b, %u colors
3668 >>>0x8  ulelong 0xB             LAB
3669 >>>0x8  ulelong 0xC             RGB 48 bits
3670 >>>0x8  ulelong 0xE             greyscale 16 bits
3671 # this should not happen
3672 >>>0x8  default x               color model
3673 >>>>0x8 ulelong x               %#x
3674 # bit 1 in CPT file flags: UCS-2 file comment present
3675 >>0x31  ubyte           &0x02
3676 # look for comment marker
3677 >>>0x100        search/0xc9d    \4\2\0\0
3678 # UCS-2 file comment
3679 >>>>&0          lestring16      x       "%s"
3680 # if no UCS-2 is present show ANSI file comment[112] if available
3681 >>0x31  ubyte&0x02      =0
3682 >>>0x3C string          >\0     "%-.112s"
3683 # reserved seems to be always 0
3684 #>>0x10 ulelong         >0      \b, reserved1 %u
3685 # horizontal real dpi = dpi_h * 25.4 / 10**6
3686 >>0x18  ulelong x               \b, %u micro dots/mm
3687 # image vertical DPI in CPT DPI unit
3688 #>>0x1C ulelong x               \b, %u micro dots/mm
3689 # reserved seems to be always 0
3690 #>>0x20 ulelong         >0      \b, reserved2 %u
3691 #>>0x24 ulelong         >0      \b, reserved3 %u
3692 # blocks_count; number of CPT_Block blocks. Allowed values: > 0
3693 >>0x28  ulelong         x       \b, %u block
3694 # plural s
3695 >>0x28  ulelong         !1      \bs
3696 # CPT file flags
3697 # lower byte of CPT file flags: 0x94~CPT9FILE 0x01~often CPT7FILE 0x8C~CPT8FILE
3698 #>>0x30 ubyte           x       \b, lower flags %#x
3699 # upper byte of CPT file flags:
3700 #>>0x31 ubyte           >0      \b, upper flags %#x
3701 # bit 2 in CPT file flags: unknown
3702 #>>0x31 ubyte           &0x04   \b, with UNKNOWN
3703 # bits 3-7 in CPT file flags: unknown, seem to be often 0
3704 # show unusual flag combinations
3705 >>0x31  ubyte&0xFC      >0
3706 >>>0x30 uleshort        x       \b, flags %#4.4x
3707 # reserved seems to be always 0
3708 #>>0x32 uleshort        >0      \b, reserved4 %#x
3709 # blocks_array_offset is always 0 for CPT7 and CPT8 files created by PP7-PP8
3710 # typical values like: 13Ch 154h 43Ch 4F0h DA8h 
3711 >>0x34  ulelong x               \b, array offset %#x
3712 # reserved seems to be often 0
3713 >>0x38  ulelong         >0      \b, reserved5 %#x
3714 # possible next master block
3715 #>>0x100        ubequad         !0      \b, next block=%#llx...
3716 # bit 0: ICC profile block present
3717 >>0x31  ubyte           &0x01   \b, with ICC profile
3718 # check for characteristic string acsp of color profile for DEBUGGING
3719 #>>>0x178       string  x       icc=%.4s
3720 #       display ICC/ICM color profile by ./icc
3721 #>>>0x154       use             color-profile
3722
3723 # Type: Crunch compressed texture.
3724 # From: David Korth <gerbilsoft@gerbilsoft.com>
3725 # References:
3726 # - https://github.com/BinomialLLC/crunch/blob/44c8402e24441c7524ca364941fd224ab3b971e9/inc/crn_decomp.h#L267
3727 0       ubelong         0x4878004A      Crunch compressed texture:
3728 >0x0C   ubeshort        x       %u x
3729 >0x0E   ubeshort        x       %u
3730 >0x12   ubyte           0       \b, DXT1
3731 >0x12   ubyte           1       \b, DXT3
3732 >0x12   ubyte           2       \b, DXT5
3733 >0x12   ubyte           3       \b, DXT5 CCxY
3734 >0x12   ubyte           4       \b, DXT5 xGxR
3735 >0x12   ubyte           5       \b, DXT5 xGBR
3736 >0x12   ubyte           6       \b, DXT5 AGBR
3737 >0x12   ubyte           7       \b, DXn XY
3738 >0x12   ubyte           8       \b, DXn YX
3739 >0x12   ubyte           9       \b, DXT5 Alpha
3740 >0x12   ubyte           10      \b, ETC1
3741 >0x10   ubyte           >1      \b, %u images
3742 >0x11   ubyte           >1      \b, %u faces
3743 # TODO: Flags at 0x13? (ubeshort)
3744
3745 # Type: BasisLZ compressed texture.
3746 # From: David Korth <gerbilsoft@gerbilsoft.com>
3747 # References:
3748 # - https://github.com/BinomialLLC/basis_universal/blob/master/spec/basis_spec.txt
3749 0       uleshort                0x4273
3750 >0x04   uleshort                0x4D    BasisLZ
3751 >>0x02  uleshort                x       v%x compressed texture:
3752 >>0x14  ubyte                   0       ETC1S
3753 >>0x14  ubyte                   1       UASTC 4x4
3754 >>0x0E  ulelong&0xFFFFFF        >1      \b, %u slices
3755 >>0x11  ulelong&0xFFFFFF        >1      \b, %u images
3756 >>0x15  uleshort&0x02           2       \b, Y-flipped
3757
3758 # MIME registration: https://www.iana.org/assignments/media-types/model/e57
3759 # Sample files: http://www.libe57.org/data.html
3760 # Reference implementation: http://www.libe57.org/
3761 # https://www.ri.cmu.edu/pub_files/2011/1/2011-huber-e57-v3.pdf
3762 0       string          ASTM-E57        ASTM E57 three-dimensional model
3763 !:mime model/e57
3764 !:ext e57
3765
3766 # QOI [Quite OK Image Format] images
3767 # (Horia Mihai David, mihaidavid@posteo.net)
3768 #
3769 # QOI format by Dominic Szablewski <http://phoboslab.org/>
3770 #           <https://qoiformat.org/>
3771 #
3772 # Based on spec v1.0 (2022.01.05) <https://qoiformat.org/qoi-specification.pdf>
3773
3774 0       string          qoif    QOI image data
3775 !:ext qoi
3776 !:mime image/x-qoi
3777 # See <https://github.com/phoboslab/qoi/issues/167>
3778 >4      ubelong         x       %ux
3779 >8      ubelong         x       \b%u,
3780 >>13    ubyte           0       s
3781 >>>12   ubyte           3       \bRGB
3782 >>>12   ubyte           4       \bRGBA
3783 >>>12   default         x
3784 >>>>12  ubyte           x       \b*bad channels %u*
3785 >>>13   ubyte           0       (linear alpha)
3786 >>13    ubyte           1
3787 >>>12   ubyte           3       RGB
3788 >>>12   ubyte           4       RGBA
3789 >>>13   ubyte           1       (all channels linear)
3790 >>13    default         x
3791 >>>13   ubyte           x       *bad colorspace %u*
3792
3793
3794 # Type: Godot 3, 4 texture (pixel format)
3795 # From: David Korth <gerbilsoft@gerbilsoft.com>
3796 0       name    godot-pixel-format
3797 >0      ulelong&0xFFFFF 0       L8
3798 >0      ulelong&0xFFFFF 1       LA8
3799 >0      ulelong&0xFFFFF 2       R8
3800 >0      ulelong&0xFFFFF 3       RG8
3801 >0      ulelong&0xFFFFF 4       RGB8
3802 >0      ulelong&0xFFFFF 5       RGBA8
3803 >0      ulelong&0xFFFFF 6       RGBA4444
3804 >0      ulelong&0xFFFFF 7       RGB565
3805 >0      ulelong&0xFFFFF 8       RF
3806 >0      ulelong&0xFFFFF 9       RGF
3807 >0      ulelong&0xFFFFF 10      RGBF
3808 >0      ulelong&0xFFFFF 11      RGBAF
3809 >0      ulelong&0xFFFFF 12      RH
3810 >0      ulelong&0xFFFFF 13      RGH
3811 >0      ulelong&0xFFFFF 14      RGBH
3812 >0      ulelong&0xFFFFF 15      RGBAH
3813 >0      ulelong&0xFFFFF 16      RGBE9995
3814 >0      ulelong&0xFFFFF 17      DXT1
3815 >0      ulelong&0xFFFFF 18      DXT3
3816 >0      ulelong&0xFFFFF 19      DXT5
3817 >0      ulelong&0xFFFFF 20      RGTC_R
3818 >0      ulelong&0xFFFFF 21      RGTC_RG
3819 >0      ulelong&0xFFFFF 22      BPTC_RGBA
3820 >0      ulelong&0xFFFFF 23      BPTC_RGBF
3821 >0      ulelong&0xFFFFF 24      BPTC_RGBFU
3822 >0      ulelong&0xFFFFF 25      PVRTC1_2
3823 >0      ulelong&0xFFFFF 26      PVRTC1_2A
3824 >0      ulelong&0xFFFFF 27      PVRTC1_4
3825 >0      ulelong&0xFFFFF 28      PVRTC1_4A
3826 >0      ulelong&0xFFFFF 29      ETC
3827 >0      ulelong&0xFFFFF 30      ETC2_R11
3828 >0      ulelong&0xFFFFF 31      ETC2_R11S
3829 >0      ulelong&0xFFFFF 32      ETC2_RG11
3830 >0      ulelong&0xFFFFF 33      ETC2_RG11S
3831 >0      ulelong&0xFFFFF 34      ETC2_RGB8
3832 >0      ulelong&0xFFFFF 35      ETC2_RGBA8
3833 >0      ulelong&0xFFFFF 36      ETC2_RGB8A1
3834 >0      ulelong&0xFFFFF 37      ASTC_8x8
3835
3836 # Type: Godot 3, 4 texture (rescale display, width)
3837 # From: David Korth <gerbilsoft@gerbilsoft.com>
3838 # Shows rescale value if it's not a power of 2.
3839 0       name    godot-rescale-display-w
3840 >0      uleshort        0
3841 >0      uleshort        1
3842 >0      uleshort        2
3843 >0      uleshort        4
3844 >0      uleshort        8
3845 >0      uleshort        16
3846 >0      uleshort        32
3847 >0      uleshort        64
3848 >0      uleshort        128
3849 >0      uleshort        256
3850 >0      uleshort        512
3851 >0      uleshort        1024
3852 >0      uleshort        2048
3853 >0      uleshort        4096
3854 >0      uleshort        8192
3855 >0      uleshort        16384
3856 >0      uleshort        32768
3857 >0      default         x
3858 >>0     uleshort        x       (rescale to %u x
3859
3860 # Type: Godot 3, 4 texture (rescale display, height)
3861 # From: David Korth <gerbilsoft@gerbilsoft.com>
3862 # Shows rescale value if it's not a power of 2.
3863 0       name    godot-rescale-display-h
3864 >0      clear   x
3865 >0      uleshort        0
3866 >0      uleshort        1
3867 >0      uleshort        2
3868 >0      uleshort        4
3869 >0      uleshort        8
3870 >0      uleshort        16
3871 >0      uleshort        32
3872 >0      uleshort        64
3873 >0      uleshort        128
3874 >0      uleshort        256
3875 >0      uleshort        512
3876 >0      uleshort        1024
3877 >0      uleshort        2048
3878 >0      uleshort        4096
3879 >0      uleshort        8192
3880 >0      uleshort        16384
3881 >0      uleshort        32768
3882 >0      default         x
3883 >>0     uleshort        x       %u)
3884
3885 # Type: Godot 3 texture
3886 # From: David Korth <gerbilsoft@gerbilsoft.com>
3887 # References:
3888 # - https://github.com/godotengine/godot/blob/3.3/core/image.h
3889 # - https://github.com/godotengine/godot/blob/3.3/scene/resources/texture.cpp
3890 # - https://github.com/godotengine/godot/blob/3.3/scene/resources/texture.h
3891 # TODO: Don't show "rescale to" if it matches the image size.
3892 0       string  GDST    Godot 3 texture:
3893 !:ext   stex
3894 !:mime  image/x-godot-stex
3895 >4      uleshort        x       %u x
3896 >8      uleshort        x       %u
3897 >6      uleshort        0       \b,
3898 >6      uleshort        !0
3899 >>6     use     godot-rescale-display-w
3900 >>10    use     godot-rescale-display-h
3901 >>10    uleshort        x       \b,
3902 >16     ulelong&0x800000        !0              has mipmaps,
3903 >16     ulelong&0x100000        0x100000        lossless encoding
3904 >16     ulelong&0x200000        0x200000        lossy encoding
3905 >16     ulelong&0x300000        0
3906 >>16    use     godot-pixel-format
3907
3908 # Type: Godot 4 texture
3909 # From: David Korth <gerbilsoft@gerbilsoft.com>
3910 # References:
3911 # - https://github.com/godotengine/godot/blob/master/core/io/image.h
3912 # - https://github.com/godotengine/godot/blob/master/scene/resources/texture.cpp
3913 # - https://github.com/godotengine/godot/blob/master/scene/resources/texture.h
3914 # TODO: Don't show "rescale to" if it matches the image size.
3915 0       string  GST2    Godot 4 texture
3916 !:ext   stex
3917 !:mime  image/x-godot-stex
3918 >4      ulelong         x       v%u:
3919 >0x28   uleshort        x       %u x
3920 >0x2A   uleshort        x       %u
3921 >8      use     godot-rescale-display-w
3922 >12     use     godot-rescale-display-h
3923 >12     uleshort        x       \b,
3924 >0x2C   ulelong         >1      %u mipmaps,
3925 >0x30   use     godot-pixel-format
3926 >0x24   ulelong         1       \b, embedded PNG image
3927 >0x24   ulelong         2       \b, embedded WebP image
3928 >0x24   ulelong         3       \b, Basis Universal
3929
3930 # Summary:      iCEDraw graphic *.IDF
3931 # URL:          http://fileformats.archiveteam.org/wiki/ICEDraw
3932 # Reference:    http://mark0.net/download/triddefs_xml.7z/defs/i/idf-icedraw.trid.xml
3933 # From:         Joerg Jenderek
3934 # Note:         called "iCEDraw graphic" by TrID, "iCEDraw text" by FFmpeg and "iCE Draw" by Ansilove
3935 #               verified by FFmpeg command `ffprobe ICE-9605.IDF` and `ansilove -s SQ-FORCE.IDF`
3936 0       string          \0041.4\0\0\0\0O\0      iCEDraw graphic
3937 #!:mime application/octet-stream
3938 !:mime  image/x-idf
3939 !:ext   idf