xref: /freebsd/contrib/file/magic/Magdir/images (revision 29fc4075e69fd27de0cded313ac6000165d99f8b)
1
2#------------------------------------------------------------------------------
3# $File: images,v 1.223 2022/05/14 20:05:09 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
290	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
570	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
1810	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
1860	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
2000	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
2090	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
2170	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
2250	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
2330	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
2440	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)
2590	string		\117\072	Solitaire Image Recorder format
260>4	string		\013		MGI Type 11
261>4	string		\021		MGI Type 17
2620	string		.MDA		MicroDesign data
263>21	ubyte		48		version 2
264>21	ubyte		51		version 3
2650	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]
2710	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
2780	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
2880	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
3020	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.
3110	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
3160	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
3220	name		tiff_ifd
323>0	uleshort	x		\b, direntries=%d
324>2	use		tiff_entry
325
3260	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, PhotometricIntepretation=
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
4670	string		MM\x00\x2b	Big TIFF image data, big-endian
468!:mime	image/tiff
4690	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
4800	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.
4940	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.
5010	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"):
5120	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#
5170	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#
5230	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)
5280	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.
5490	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
5590	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
5840	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
5930	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
6090	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
6120	search/1/bs	#FIG
613>&0	use		image-xfig
614#	display XFIG image describing text, mime type, file name extension and version
6150	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
6350	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
6440	string		ARF_BEGARF		PHIGS clear text archive
6450	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)
6510	string		GKSM		GKS Metafile
652>24	string		SunGKS		\b, SunGKS
653
654# CGM image files
6550	string		BEGMF		clear text Computer Graphics Metafile
656
657# MGR bitmaps  (Michael Haardt, u31b3hs@pool.informatik.rwth-aachen.de)
6580	string	yz	MGR bitmap, modern format, 8-bit aligned
6590	string	zz	MGR bitmap, old format, 1-bit deep, 16-bit aligned
6600	string	xz	MGR bitmap, old format, 1-bit deep, 32-bit aligned
6610	string	yx	MGR bitmap, modern format, squeezed
662
663# Fuzzy Bitmap (FBM) images
6640	string		%bitmap\0	FBM image data
665>30	long		0x31		\b, mono
666>30	long		0x33		\b, color
667
668# facsimile data
6691	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>
6730	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`
6780	string		\x11\x06	Award BIOS Logo, 136 x 84
679!:mime	image/x-award-bioslogo
680!:ext	epa
6810	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`
6870	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/
6940	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`
7210	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
7550	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#
7790	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
7980	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`
9900	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
10070	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
10490	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
10580	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
10990	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
11380	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
11550	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)
11820	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)
11960	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)
12010	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#
12230	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
12350	string		IT01		FIT image data
1236>4	ubelong		x		\b, %d x
1237>8	ubelong		x		%d x
1238>12	ubelong		x		%d
1239#
12400	string		IT02		FIT image data
1241>4	ubelong		x		\b, %d x
1242>8	ubelong		x		%d x
1243>12	ubelong		x		%d
1244#
12452048	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
12500	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.)
12560	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
12660	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#
12710	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
1277128	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
12990	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
13720	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.
14190	string	NJPL1I00		PDS (JPL) image data
14202	string	NJPL1I			PDS (JPL) image data
14210	string	CCSD3ZF			PDS (CCSD) image data
14222	string	CCSD3Z			PDS (CCSD) image data
14230	string	PDS_			PDS image data
14240	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#
14350	string	pM85		Atari ST STAD bitmap image data (hor)
1436>5	ubyte	0x00		(white background)
1437>5	ubyte	0xFF		(black background)
14380	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
14440	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
14560		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		use		degas-bitmap
1462# DEGAS mid-res uncompressed bitmap *.pi2 (strength=50) after GEM Images like:
1463# BEETHVEN.IMG CHURCH.IMG GAMEOVR4.IMG TURKEY.IMG clinton.img
14640		beshort		0x0001
1465#!:strength +0
1466# skip many control files like gnucash-4.8.setup.exe.aria2 by test for non black in 4 palette entries
1467>2		quad		!0
1468# skip control file load-v0001.aria2 by test for unused bits of 5th color palette entry
1469>>10		ubeshort&0xF000	0
1470# skip many GEM Image data like DANCER.IMG GAMEOVR4.IMG SHIP.IMG by test for unused bits of 8th color palette entry
1471>>>16		ubeshort&0xF000	0
1472# skip many GEM Image data like BEETHVEN.IMG CABINETS.IMG MEMO.IMG by test for unused bits of 14th color palette entry
1473>>>>28		ubeshort&0xF000	0
1474# skip few GEM Image data like CHURCH.IMG by test for unused bits of 15th color palette entry
1475>>>>>30		ubeshort&0xF000	0
1476# skip many GEM Image data like TIGER.IMG TURKEY.IMG XMAS.IMG by test for unused bits of 16th color palette entry
1477>>>>>>32	ubeshort&0xF000	0
1478# skip GEM Image data like clinton.img by test for existing bytes at the end
1479>>>>>>>32026	quad		x
1480>>>>>>>>0	use		degas-bitmap
1481# DEGAS high-res uncompressed bitmap *.pi3
14820	beshort		0x0002
1483# skip Intel ia64 COFF msvcrt.lib by test for unused bits of 1st atari color palette entry
1484>2		ubeshort&0xF000	0
1485# skip few Adobe PhotoShop Brushes like Faux-Spitzen.abr by check
1486# for invalid Adobe PhotoShop Brush UTF16-LE string length
1487>>19		ubyte			=0
1488# many like: 4th_ofj2.pi3 GEMINI03.PI3 PEOPLE18.PI3 POWERFIX.PI3 abydos.pi3 highres.pi3 sigirl1.pi3 vanna5.pi3
1489>>>0		use		degas-bitmap
1490# Adobe PhotoShop Brush UTF16-LE string length 15 "Gitter - klein " 8 "Kreis 1 "
1491>>19		ubyte			!0
1492#>>19		ubyte			!0	\b, NOTE LENGTH %u
1493#>>>21		lestring16		x	\b, BRUSH NOTE "%s"
1494>>>(19.b*2)	ubequad			x
1495# maybe last character of Adobe PhotoShop Brush UTF16-LE string and terminating nul char like
1496# 006e0000 for n in "Faux-Spitzen.abr" 00310000 for 1 in "Verschiedene Spitzen.abr"
1497# 00000000 "LEREDACT.PI3" 03730773 "TBX_DEMO.PI3"
1498#>>>>&8		ubelong			x	\b, LAST CHAR+NIL %8.8x
1499>>>>&8		ubelong&0xff00ffFF	!0
1500# 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
1501>>>>>0		use		degas-bitmap
1502# test for last character of Adobe PhotoShop Brush UTF16-LE string and terminating nul char
1503>>>>&8		ubelong&0xff00ffFF	=0
1504# select last DEGAS bitmaps by invalid last char of brush note like BASICNES.PI3 DB_HELP.PI3 DB_WRITR.PI3 LEREDACT.PI3
1505>>>>>&-4	ubelong&0x00FF0000	<0x00200000
1506>>>>>>0		use		degas-bitmap
1507# last character of Adobe PhotoShop Brush UTF16-LE note
1508#>>>>>&-4	ubelong&0x00FF0000	>0x001F0000	\b, THAT IS ABR
1509# DEGAS low-res compressed bitmap *.pc1 like: BATTLSHP.PC1 GNUCHESS.PC1 MEDUSABL.PC1 MOONLORD.PC1 WILDROSE.PC1
15100		beshort			0x8000
1511# skip lif files handled via ./lif by test for unused bits of 1st palette entry
1512>2		ubeshort&0xF000		0
1513>>0		use		degas-bitmap
1514# DEGAS mid-res compressed bitmap *.pc2 like: abydos.pc2 ARTIS3.PC2 SMTHDRAW.PC2 STAR_2K.PC2 TX2_DEMO.PC2
15150		beshort			0x8001
1516>0		use		degas-bitmap
1517# DEGAS high-res compressed bitmap *.pc3 like: abydos.pc3 COYOTE.PC3 ELEPHANT.PC3 TX2_DEMO.PC3 SMTHDRAW.PC3
15180		beshort			0x8002
1519>0		use		degas-bitmap
1520# display information of Atari DEGAS and DEGAS Elite bitmap images
15210	name		degas-bitmap
1522>0	ubyte		x		Atari DEGAS
1523#!:mime	application/octet-stream
1524!:mime	image/x-atari-degas
1525# compressed
1526>0	ubyte		=0x80		Elite compressed
1527# uncompressed
1528#>0	ubyte		=0x00		uncompressed
1529#>0	ubyte		=0x00		un.
1530>0	ubyte		=0x00
1531# check for existence of footer for DEGAS Elite images
1532>>32042	ubequad		x		Elite
1533>0	beshort		0x0000		bitmap
1534!:ext	pi1
1535>0	beshort		0x0001		bitmap
1536!:ext	pi2
1537>0	beshort		0x0002		bitmap
1538# no example with SUH extension found
1539#!:ext	pi3/suh
1540!:ext	pi3
1541>0	beshort		0x8000		bitmap
1542!:ext	pc1
1543>0	beshort		0x8001		bitmap
1544!:ext	pc2
1545>0	beshort		0x8002		bitmap
1546!:ext	pc3
1547# low resolution; 320x200, 16 colors
1548>1	ubyte		=0		320 x 200 x 16
1549# medium resolution; 640x200, 4 colors
1550>1	ubyte		=1		640 x 200 x 4
1551# high resolution; 640x400, 2 colors
1552>1	ubyte		=2		640 x 400 x 2
1553# http://fileformats.archiveteam.org/wiki/Atari_ST_color_palette
1554# hardware_palette[16]; 9 bit ?????RRR?GGG?BBB; 12 bit ????RRRRGGGGBBBB for Atari STE
1555# for Atari DEGAS apparently no Spectrum 512 Enhanced 15 bit palette RGB?RRRRGGGGBBBB
1556# Red Green Blue unused bit ? often 0 but not bilboule.pi1; color_value (examples or numbers)
1557# 1st color palette entry like: 0777 (61) 0fff (LEREDACT.PI3) 0fcf (devgem7.pi3) 0001 (9)
1558>2	ubeshort	x		\b, color palette %4.4x
1559# 2nd palette entry like: 0000 (32) 0700 (38) 0f00 (LEREDACT.PI3 devgem7.pi3)
1560>4	ubeshort	x		%4.4x
1561# 3rd palette entry
1562>6	ubeshort	x		%4.4x
1563# 4th palette entry like: 0000 (72)
1564>8	ubeshort	x		%4.4x
1565# 5th palette entry
1566>10	ubeshort	x		%4.4x
1567>2	ubeshort	x		...
1568# 6th palette entry
1569#>12	ubeshort	x		%4.4x
1570# 7th palette entry like: 0000 (16) 0001 (ELMRSESN.PI3 elmrsesn.pi3) 0070 (51) 00f0 (BASICNES.PI3 LEREDACT.PI3) 00f8 (devgem7.pi3)
1571#>14	ubeshort	x		%4.4x
1572# 8th palette entry
1573#>16	ubeshort	x		%4.4x
1574# 9 palette entry
1575#>18	ubeshort	x		%4.4x
1576# 10 palette entry
1577#>20	ubeshort	x		%4.4x
1578# 11 palette entry
1579#>22	ubeshort	x		%4.4x
1580# 12 palette entry
1581#>24	ubeshort	x		%4.4x
1582# 13 palette entry
1583#>26	ubeshort	x		%4.4x
1584# 14th palette entry
1585#>28	ubeshort	x		%4.4x
1586# 15th palette entry
1587#>30	ubeshort	x		%4.4x
1588# 16th palette entry
1589#>32	ubeshort	x		%4.4x
1590# data[16000] for uncompressed images; pixel data
1591#>34	ubequad		x		\b, DATA %#16.16llx...
1592# footer for Elite variant images
1593# https://www.fileformat.info/format/atari/egff.htm
1594# https://pulkomandy.tk/projects/GrafX2/wiki/Develop/FileFormats/Atari
1595# left_color_animation[4]; like: 0000000000000000 0000000100020003 fffafff000000030 (bigspid.pi1)
1596#>32034  ubequad		!0		\b, color animations %16.16llx (left)
1597# right_color_animation[4]; like: 0000000000000000 0000000100020003
1598#>>32042  ubequad	!0		%16.16llx (right)
1599# channel_direction[4]; 0~left 1~none 2~right like: 0001000100010001 0002000000010001 (cycle2.pi1)
1600# sometimes unexpected like: feaafc0000000000 (bigspid.pi1)
1601#>32050  ubequad		!0		\b, channel directions %16.16llx
1602# channel_delay[4]; 128 - channel delay, timebase 1/60 s
1603#>32058  ubequad		!0		\b, channel delays %16.16llx
1604
1605# From:		Joerg Jenderek
1606# URL:		http://fileformats.archiveteam.org/wiki/ImageLab/PrintTechnic
1607# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-b_w.trid.xml
1608# Note:		called "ImageLab bitmap" by TrID
1609#		verfied by XnView `nconvert -fullinfo "MAEDCHEN.B&W"`
16100	string		B&W256	ImageLab bitmap
1611!:mime	image/x-ilab
1612#	https://www.xnview.com/de/image_formats/
1613# GRR: add char & inside parse_ext in ../../src/apprentice.c to avoid in file version 5.40 error like:
1614# Magdir\images, 1090: Warning: EXTENSION type `        b_w/b&w' has bad char '&'
1615!:ext	b_w/b&w
1616# Width
1617>6	ubeshort	x	\b, %u
1618# Height
1619>8	ubeshort	x	x %u
1620
1621# XXX:
1622# This is bad magic 0x5249 == 'RI' conflicts with RIFF and other
1623# magic.
1624# SGI RICE image file <mpruett@sgi.com>
1625#0	ubeshort	0x5249		RICE image
1626#>2	ubeshort	x		v%d
1627#>4	ubeshort	x		(%d x
1628#>6	ubeshort	x		%d)
1629#>8	ubeshort	0		8 bit
1630#>8	ubeshort	1		10 bit
1631#>8	ubeshort	2		12 bit
1632#>8	ubeshort	3		13 bit
1633#>10	ubeshort	0		4:2:2
1634#>10	ubeshort	1		4:2:2:4
1635#>10	ubeshort	2		4:4:4
1636#>10	ubeshort	3		4:4:4:4
1637#>12	ubeshort	1		RGB
1638#>12	ubeshort	2		CCIR601
1639#>12	ubeshort	3		RP175
1640#>12	ubeshort	4		YUV
1641
1642# PCX image files
1643# From: Dan Fandrich <dan@coneharvesters.com>
1644# updated by Joerg Jenderek at Feb 2013 by https://de.wikipedia.org/wiki/PCX
1645# https://web.archive.org/web/20100206055706/http://www.qzx.com/pc-gpe/pcx.txt
1646# GRR: original test was still too general as it catches xbase examples T5.DBT,T6.DBT with 0xa000000
1647# 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
16480	ubelong&0xffF8fe00	0x0a000000
1649# for PCX bit depth > 0
1650>3	ubyte		>0
1651# test for valid versions
1652>>1	ubyte		<6
1653>>>1	ubyte		!1	PCX
1654!:mime	image/x-pcx
1655#!:mime	image/pcx
1656>>>>1	ubyte		0	ver. 2.5 image data
1657>>>>1	ubyte		2	ver. 2.8 image data, with palette
1658>>>>1	ubyte		3	ver. 2.8 image data, without palette
1659>>>>1	ubyte		4	for Windows image data
1660>>>>1	ubyte		5	ver. 3.0 image data
1661>>>>4	uleshort	x	bounding box [%d,
1662>>>>6	uleshort	x	%d] -
1663>>>>8	uleshort	x	[%d,
1664>>>>10	uleshort	x	%d],
1665>>>>65	ubyte		>1	%d planes each of
1666>>>>3	ubyte		x	%d-bit
1667>>>>68	ubyte		1	colour,
1668>>>>68	ubyte		2	grayscale,
1669# this should not happen
1670>>>>68	default		x	image,
1671>>>>12	uleshort	>0	%d x
1672>>>>>14	uleshort	x	%d dpi,
1673>>>>2	ubyte		0	uncompressed
1674>>>>2	ubyte		1	RLE compressed
1675
1676# Adobe Photoshop
1677# From: Asbjoern Sloth Toennesen <asbjorn@lila.io>
1678# URL: 		http://fileformats.archiveteam.org/wiki/PSD
1679# Reference:	https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/
1680# Note:		verfied by XnView `nconvert -fullinfo *.psd *.psb *.pdd`
1681#		and ImageMagick `identify -verbose *.pdd`
16820	string		8BPS
1683# skip DROID x-fmt-92-signature-id-277.psd by checking valid width
1684>18	ubelong		>0	Adobe Photoshop
1685!:mime	image/vnd.adobe.photoshop
1686!:apple	????8BPS
1687# version: always equal to 1, but 2 for PSB
1688>>4   beshort 1
1689# URL: 		http://fileformats.archiveteam.org/wiki/PhotoDeluxe
1690# EXTRAS/PHOTOS/DEMOPIX/ORIGINAL.PDD
1691>>>34	search/0xC0d7	PHUT	Image (PhotoDeluxe)
1692!:ext	pdd
1693>>>34	default		x	Image
1694!:ext	psd
1695# URL: 		http://fileformats.archiveteam.org/wiki/PSB
1696>>4   beshort 2 Image (PSB)
1697!:ext	psb
1698# width in pixels: 1-30000 1-300000 for PSB
1699>>18  belong  x \b, %d x
1700>>14  belong  x %d,
1701# The color mode; 0~Bitmap 1~Grayscale 2~Indexed 3~RGB 4~CMYK 7~Multichannel 9~Duotone 9~Lab
1702>>24  beshort 0 bitmap
1703>>24  beshort 1 grayscale
1704# the number of channels; range is 1 to 56
1705>>>12 beshort 2 with alpha
1706>>24  beshort 2 indexed
1707>>24  beshort 3 RGB
1708>>>12 beshort 4 \bA
1709>>24  beshort 4 CMYK
1710>>>12 beshort 5 \bA
1711>>24  beshort 7 multichannel
1712>>24  beshort 8 duotone
1713>>24  beshort 9 lab
1714>>12  beshort > 1
1715>>>12 beshort x \b, %dx
1716>>12  beshort 1 \b,
1717>>22  beshort x %d-bit channel
1718>>12  beshort > 1 \bs
1719# 6 reserved bytes; must be zero, but spaces inside ImageMagick input.psd
1720# https://download.imagemagick.org/ImageMagick/download/ImageMagick-7.0.11-11.zip
1721# ImageMagick-7.0.11-11\PerlMagick\t\input.psd
1722>>6   bequad&0xFFffFFffFFff0000 !0 \b, at offset 6
1723>>>6  belong  x	 0x%8.8x
1724>>>6  beshort x   \b%4.4x
1725
1726# XV thumbnail indicator (ThMO)
1727# URL:		https://en.wikipedia.org/wiki/Xv_(software)
1728# Reference:	http://fileformats.archiveteam.org/wiki/XV_thumbnail
1729# Update:	Joerg Jenderek
17300	string		P7\ 332		XV thumbnail image data
1731#0	string		P7\ 332		XV "thumbnail file" (icon) data
1732!:mime	image/x-xv-thumbnail
1733# thumbnail .xvpic/foo.bar for graphic foo.bar
1734!:ext	p7/gif/tif/xpm/jpg
1735
1736# NITF is defined by United States MIL-STD-2500A
17370	string	NITF	National Imagery Transmission Format
1738>25	string	>\0	dated %.14s
1739
1740# GEM Image: Version 1, Headerlen 8 (Wolfram Kleff)
1741# Format variations from: Bernd Nuernberger <bernd.nuernberger@web.de>
1742# Update: Joerg Jenderek
1743# See http://fileformats.archiveteam.org/wiki/GEM_Raster
1744# For variations, also see:
1745#    https://www.seasip.info/Gem/ff_img.html (Ventura)
1746#    http://www.atari-wiki.com/?title=IMG_file (XIMG, STTT)
1747#    http://www.fileformat.info/format/gemraster/spec/index.htm (XIMG, STTT)
1748#    http://sylvana.net/1stguide/1STGUIDE.ENG (TIMG)
17490       beshort     0x0001
1750# header_size
1751>2      beshort     0x0008
1752>>0     use gem_info
1753>2      beshort     0x0009
1754>>0     use gem_info
1755# no example for NOSIG
1756>2      beshort     24
1757>>0     use gem_info
1758# no example for HYPERPAINT
1759>2      beshort     25
1760>>0     use gem_info
176116      string      XIMG\0
1762>0      use gem_info
1763# no example
176416      string      STTT\0\x10
1765>0      use gem_info
1766# no example or description
176716      string      TIMG\0
1768>0      use gem_info
1769
17700   name        gem_info
1771# version is 2 for some XIMG and 1 for all others
1772>0	ubeshort		<0x0003		GEM
1773# https://www.snowstone.org.uk/riscos/mimeman/mimemap.txt
1774!:mime	image/x-gem
1775# header_size 24 25 27 59 779 words for colored bitmaps
1776>>2	ubeshort	>9
1777>>>16	string		STTT\0\x10	STTT
1778>>>16	string		TIMG\0		TIMG
1779# HYPERPAINT or NOSIG variant
1780>>>16	string		\0\x80
1781>>>>2	ubeshort	=24		NOSIG
1782>>>>2	ubeshort	!24		HYPERPAINT
1783# NOSIG or XIMG variant
1784>>>16	default		x
1785>>>>16	string		!XIMG\0		NOSIG
1786>>16	string		=XIMG\0		XIMG Image data
1787!:ext	img/ximg
1788# to avoid Warning: Current entry does not yet have a description for adding a EXTENSION type
1789>>16	string		!XIMG\0		Image data
1790!:ext	img
1791# header_size is 9 for Ventura files and 8 for other GEM Paint files
1792>>2	ubeshort	9		(Ventura)
1793#>>2	ubeshort	8		(Paint)
1794>>12	ubeshort	x		%d x
1795>>14	ubeshort	x		%d,
1796# 1 4 8
1797>>4	ubeshort	x		%d planes,
1798# in tenths of a millimetre
1799>>8	ubeshort	x		%d x
1800>>10	ubeshort	x		%d pixelsize
1801# pattern_size 1-8. 2 for GEM Paint
1802>>6	ubeshort	!2		\b, pattern size %d
1803
1804# GEM Metafile (Wolfram Kleff)
18050	ulelong		0x0018FFFF	GEM Metafile data
1806>4	uleshort	x		version %d
1807
1808#
1809# SMJPEG. A custom Motion JPEG format used by Loki Entertainment
1810# Software Torbjorn Andersson <d91tan@Update.UU.SE>.
1811#
18120	string	\0\nSMJPEG	SMJPEG
1813>8	ubelong	x		%d.x data
1814# According to the specification you could find any number of _TXT
1815# headers here, but I can't think of any way of handling that. None of
1816# the SMJPEG files I tried it on used this feature. Even if such a
1817# file is encountered the output should still be reasonable.
1818>16	string		_SND		\b,
1819>>24	ubeshort	>0		%d Hz
1820>>26	ubyte		8		8-bit
1821>>26	ubyte		16		16-bit
1822>>28	string		NONE		uncompressed
1823# >>28	string		APCM		ADPCM compressed
1824>>27	ubyte		1		mono
1825>>28	ubyte		2		stereo
1826# Help! Isn't there any way to avoid writing this part twice?
1827# Yes, use a name/use
1828>>32	string		_VID		\b,
1829# >>>48	string		JFIF		JPEG
1830>>>40	ubelong		>0		%d frames
1831>>>44	ubeshort	>0		(%d x
1832>>>46	ubeshort	>0		%d)
1833>16	string		_VID		\b,
1834# >>32	string		JFIF		JPEG
1835>>24	ubelong		>0		%d frames
1836>>28	ubeshort	>0		(%d x
1837>>30	ubeshort	>0		%d)
1838
18390	string	Paint\ Shop\ Pro\ Image\ File	Paint Shop Pro Image File
1840
1841# taken from fkiss: (<yav@mte.biglobe.ne.jp> ?)
18420	string		KiSS		KISS/GS
1843>4	ubyte		16		color
1844>>5	ubyte		x		%d bit
1845>>8	uleshort	x		%d colors
1846>>10	uleshort	x		%d groups
1847>4	ubyte		32		cell
1848>>5	ubyte		x		%d bit
1849>>8	uleshort	x		%d x
1850>>10	uleshort	x		%d
1851>>12	uleshort	x		+%d
1852>>14	uleshort	x		+%d
1853
1854# Webshots (www.webshots.com), by John Harrison
18550       string          C\253\221g\230\0\0\0 Webshots Desktop .wbz file
1856
1857# Hercules DASD image files
1858# From Jan Jaeger <jj@septa.nl> and Jay Maynard <jaymaynard@gmail.com>
18590       string  CKD_P370        Hercules CKD DASD image file
1860>8      lelong  x               \b, %d heads per cylinder
1861>12     lelong  x               \b, track size %d bytes
1862>16     byte    x               \b, device type 33%2.2X
1863
18640       string  CKD_C370        Hercules compressed CKD DASD image file
1865>8      lelong  x               \b, %d heads per cylinder
1866>12     lelong  x               \b, track size %d bytes
1867>16     byte    x               \b, device type 33%2.2X
1868>552    lelong  x               \b, %d total cylinders
1869>>557   byte    0               \b, no compression
1870>>557   byte    1               \b, ZLIB compression
1871>>557   byte    2               \b, BZ2 compression
1872
18730       string  CKD_S370        Hercules CKD DASD shadow file
1874>8      lelong  x               \b, %d heads per cylinder
1875>12     lelong  x               \b, track size %d bytes
1876>16     byte    x               \b, device type 33%2.2X
1877
18780       string  CKD_P064        Hercules CKD64 DASD image file
1879>8      lelong  x               \b, %d heads per cylinder
1880>12     lelong  x               \b, track size %d bytes
1881>16     byte    x               \b, device type 33%2.2X
1882
18830       string  CKD_C064        Hercules compressed CKD64 DASD image file
1884>8      lelong  x               \b, %d heads per cylinder
1885>12     lelong  x               \b, track size %d bytes
1886>16     byte    x               \b, device type 33%2.2X
1887>524    lelong  x               \b, %d total cylinders
1888>>585   byte    0               \b, no compression
1889>>585   byte    1               \b, ZLIB compression
1890>>585   byte    2               \b, BZ2 compression
1891
18920       string  CKD_S064        Hercules CKD64 DASD shadow file
1893>8      lelong  x               \b, %d heads per cylinder
1894>12     lelong  x               \b, track size %d bytes
1895>16     byte    x               \b, device type 33%2.2X
1896
1897# Squeak images and programs - etoffi@softhome.net
18980	string		\146\031\0\0	Squeak image data
18990	search/1	'From\040Squeak	Squeak program text
1900
1901# partimage: file(1) magic for PartImage files (experimental, incomplete)
1902# Author: Hans-Joachim Baader <hjb@pro-linux.de>
19030		string	PaRtImAgE-VoLuMe	PartImage
1904>0x0020		string	0.6.1		file version %s
1905>>0x0060	ulelong	>-1		volume %d
1906#>>0x0064 8 byte identifier
1907#>>0x007c reserved
1908>>0x0200	string	>\0		type %s
1909>>0x1400	string	>\0		device %s,
1910>>0x1600	string	>\0		original filename %s,
1911# Some fields omitted
1912>>0x2744	ulelong	0		not compressed
1913>>0x2744	ulelong	1		gzip compressed
1914>>0x2744	ulelong	2		bzip2 compressed
1915>>0x2744	ulelong	>2		compressed with unknown algorithm
1916>0x0020		string	>0.6.1		file version %s
1917>0x0020		string	<0.6.1		file version %s
1918
1919# DCX is multi-page PCX, using a simple header of up to 1024
1920# offsets for the respective PCX components.
1921# From: Joerg Wunsch <joerg_wunsch@uriah.heep.sax.de>
1922# Update:	Joerg Jenderek
1923# URL:		http://fileformats.archiveteam.org/wiki/DCX
19240	ulelong	987654321	DCX multi-page
1925# http://www.nationalarchives.gov.uk/pronom/x-fmt/348
1926!:mime	image/x-dcx
1927!:ext	dcx
1928# The first file offset usually starts at file offset 0x1004
1929# print 1 space after 0x100? offset and then handles PCX images by ./images
1930>4	ulelong	x		\b, at %#x
1931>(4.l)	indirect		x
1932# possible 2nd PCX image
1933#>8	ulelong	!0		\b, at %#x
1934#>>(8.l)	indirect		x
1935# possible 3rd PCX image
1936#>12	ulelong	!0		\b, at %#x
1937#>>(12.l)	indirect		x
1938
1939# Simon Walton <simonw@matteworld.com>
1940# Kodak Cineon format for scanned negatives
1941# http://www.kodak.com/US/en/motion/support/dlad/
19420	ulelong  0xd75f2a80	Cineon image data
1943>200	ubelong  >0		\b, %d x
1944>204	ubelong  >0		%d
1945
1946
1947# Bio-Rad .PIC is an image format used by microscope control systems
1948# and related image processing software used by biologists.
1949# From: Vebjorn Ljosa <vebjorn@ljosa.com>
1950# BOOL values are two-byte integers; use them to rule out false positives.
1951# https://web.archive.org/web/20050317223257/www.cs.ubc.ca/spider/ladic/text/biorad.txt
1952# Samples: https://www.loci.wisc.edu/software/sample-data
195314	uleshort	<2
1954>62	uleshort	<2
1955>>54	uleshort	12345		Bio-Rad .PIC Image File
1956>>>0	uleshort	>0		%d x
1957>>>2	uleshort	>0		%d,
1958>>>4	uleshort	=1		1 image in file
1959>>>4	uleshort	>1		%d images in file
1960
1961# From Jan "Yenya" Kasprzak <kas@fi.muni.cz>
1962# The description of *.mrw format can be found at
1963# http://www.dalibor.cz/minolta/raw_file_format.htm
19640	string	\000MRM			Minolta Dimage camera raw image data
1965
1966# Summary: DjVu image / document
1967# Extension: .djvu
1968# Reference: http://djvu.org/docs/DjVu3Spec.djvu
1969# Submitted by: Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
1970# Modified by (1): Abel Cheung <abelcheung@gmail.com>
19710	string	AT&TFORM
1972>12	string	DJVM		DjVu multiple page document
1973!:mime	image/vnd.djvu
1974>12	string	DJVU		DjVu image or single page document
1975!:mime	image/vnd.djvu
1976>12	string	DJVI		DjVu shared document
1977!:mime	image/vnd.djvu
1978>12	string	THUM		DjVu page thumbnails
1979!:mime	image/vnd.djvu
1980
1981# Originally by Marc Espie
1982# Modified by Robert Minsk <robertminsk at yahoo.com>
1983# https://www.openexr.com/openexrfilelayout.pdf
19840	ulelong		20000630	OpenEXR image data,
1985!:mime image/x-exr
1986>4	ulelong&0x000000ff x		version %d,
1987>4	ulelong		^0x00000200	storage: scanline
1988>4	ulelong		&0x00000200	storage: tiled
1989>8	search/0x1000	compression\0	\b, compression:
1990>>&16	ubyte		0		none
1991>>&16	ubyte		1		rle
1992>>&16	ubyte		2		zips
1993>>&16	ubyte		3		zip
1994>>&16	ubyte		4		piz
1995>>&16	ubyte		5		pxr24
1996>>&16	ubyte		6		b44
1997>>&16	ubyte		7		b44a
1998>>&16	ubyte		8		dwaa
1999>>&16	ubyte		9		dwab
2000>>&16	ubyte		>9		unknown
2001>8	 search/0x1000	dataWindow\0	\b, dataWindow:
2002>>&10	ulelong		x		(%d
2003>>&14	ulelong		x		%d)-
2004>>&18	ulelong		x		\b(%d
2005>>&22	ulelong		x		%d)
2006>8	search/0x1000	displayWindow\0	\b, displayWindow:
2007>>&10	ulelong		x		(%d
2008>>&14	ulelong		x		%d)-
2009>>&18	ulelong		x		\b(%d
2010>>&22	ulelong		x		%d)
2011>8	search/0x1000	lineOrder\0	 \b, lineOrder:
2012>>&14	ubyte		0		increasing y
2013>>&14	ubyte		1		decreasing y
2014>>&14	ubyte		2		random y
2015>>&14	ubyte		>2		unknown
2016
2017# SMPTE Digital Picture Exchange Format, SMPTE DPX
2018#
2019# ANSI/SMPTE 268M-1994, SMPTE Standard for File Format for Digital
2020# Moving-Picture Exchange (DPX), v1.0, 18 February 1994
2021# Robert Minsk <robertminsk at yahoo.com>
2022# Modified by Harry Mallon <hjmallon at gmail.com>
20230	string		SDPX	DPX image data, big-endian,
2024!:mime image/x-dpx
2025>0	use		dpx_info
20260	string		XPDS	DPX image data, little-endian,
2027!:mime image/x-dpx
2028>0	use		\^dpx_info
2029
20300	name		dpx_info
2031>768	ubeshort	<4
2032>>772	ubelong		x	%dx
2033>>776	ubelong		x	\b%d,
2034>768	ubeshort	>3
2035>>776	ubelong		x	%dx
2036>>772	ubelong		x	\b%d,
2037>768	ubeshort	0	left to right/top to bottom
2038>768	ubeshort	1	right to left/top to bottom
2039>768	ubeshort	2	left to right/bottom to top
2040>768	ubeshort	3	right to left/bottom to top
2041>768	ubeshort	4	top to bottom/left to right
2042>768	ubeshort	5	top to bottom/right to left
2043>768	ubeshort	6	bottom to top/left to right
2044>768	ubeshort	7	bottom to top/right to left
2045
2046# From: Tom Hilinski <tom.hilinski@comcast.net>
2047# Update:	Joerg Jenderek
2048# URL: 		https://en.wikipedia.org/wiki/NetCDF
2049#		http://fileformats.archiveteam.org/wiki/NetCDF
2050# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/n/netcdf.trid.xml
2051#		https://www.loc.gov/preservation/digital/formats/fdd/fdd000330.shtml
2052# Note:		called "NetCDF Network Common Data Form" by TrID and
2053#		"netCDF-3 Classic" by DROID via PUID fmt/282
2054# https://www.unidata.ucar.edu/packages/netcdf/
20550	string	CDF\001
2056# skip DROID fmt-282-signature-id-298.nc by test for more content bytes
2057>3	uleshort	>0		NetCDF Data Format data
2058#!:mime	application/netcdf
2059# https://reposcope.com/mimetype/application/x-netcdf
2060!:mime	application/x-netcdf
2061!:ext	nc
2062# https://fileinfo.com/extension/cdf
2063# https://www.file-extensions.org/cdf-file-extension-unidata-network-common-data-form
2064# in 1994 changed from CDF to NC file extension avoid a clash with other file formats
2065#!:ext	nc/cdf
2066# 64-bit offset netcdf Classic https://www.unidata.ucar.edu/software/netcdf/docs/file_format_specifications
2067# Note:		called "netCDF-3 64-bit" by DROID via PUID fmt/283
20680	string	CDF\002
2069# skip DROID fmt-283-signature-id-299.nc by test for more content bytes
2070>3	uleshort	>0		NetCDF Data Format data (64-bit offset)
2071#!:mime	application/netcdf
2072!:mime	application/x-netcdf
2073!:ext	nc
2074
2075# From: Michael Liu
2076# https://en.wikipedia.org/wiki/Common_Data_Format
20770	ubelong	0xCDF30001	Common Data Format (Version 3 or later) data
2078!:mime  application/x-cdf
2079
20800	ubelong	0xCDF26002	Common Data Format (Version 2.6 or 2.7) data
2081!:mime  application/x-cdf
2082
20830	ubelong	0x0000FFFF	Common Data Format (Version 2.5 or earlier) data
2084!:mime  application/x-cdf
2085
2086# Hierarchical Data Format, used to facilitate scientific data exchange
2087# specifications at http://hdf.ncsa.uiuc.edu/
2088# URL: 		http://fileformats.archiveteam.org/wiki/HDF
2089#		https://en.wikipedia.org/wiki/Hierarchical_Data_Format
2090# Reference:	https://portal.hdfgroup.org/download/attachments/52627880/HDF5_File_Format_Specification_Version-3.0.pdf
20910	ubelong	0x0e031301	Hierarchical Data Format (version 4) data
2092!:mime	application/x-hdf
2093!:ext	hdf/hdf4/h4
20940	string	\211HDF\r\n\032\n	Hierarchical Data Format (version 5) data
2095#!:mime	application/x-hdf
2096!:mime	application/x-hdf5
2097!:ext	h5/hdf5/hdf/he5
2098512	string	\211HDF\r\n\032\n
2099# skip Matlab v5 mat-file testhdf5_7.4_GLNX86.mat handled by ./mathematica
2100>0	string	!MATLAB			Hierarchical Data Format (version 5) with 512 bytes user block
2101#!:mime	application/x-hdf
2102!:mime	application/x-hdf5
2103!:ext	h5/hdf5/hdf/he5
21041024	string	\211HDF\r\n\032\n	Hierarchical Data Format (version 5) with 1k user block
2105#!:mime	application/x-hdf
2106!:mime	application/x-hdf5
2107!:ext	h5/hdf5/hdf/he5
21082048	string	\211HDF\r\n\032\n	Hierarchical Data Format (version 5) with 2k user block
2109#!:mime	application/x-hdf
2110!:mime	application/x-hdf5
2111!:ext	h5/hdf5/hdf/he5
21124096	string	\211HDF\r\n\032\n	Hierarchical Data Format (version 5) with 4k user block
2113#!:mime	application/x-hdf
2114!:mime	application/x-hdf5
2115!:ext	h5/hdf5/hdf/he5
2116
2117# From: Tobias Burnus <burnus@net-b.de>
2118# Xara (for a while: Corel Xara) is a graphic package, see
2119# http://www.xara.com/ for Windows and as GPL application for Linux
21200	string	XARA\243\243	Xara graphics file
2121
2122# From:		Joerg Jenderek
2123# URL:		http://fileformats.archiveteam.org/wiki/Corel_Gallery
2124# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/b/bmf-corel.trid.xml
2125# Note:		called "Corel Binary Material Format" by TrID and
2126# 		"Corel Flow" by XnView
21270	string	@CorelBMF\n\rCorel\040Corporation 	Corel GALLERY Clipart
2128!:mime	image/x-corel-bmf
2129!:ext	bmf
2130
2131# https://www.cartesianinc.com/Tech/
2132# Reference:	http://fileformats.archiveteam.org/wiki/Cartesian_Perceptual_Compression
21330	string	CPC\262		Cartesian Perceptual Compression image
2134!:mime	image/x-cpi
2135!:ext	cpi/cpc
2136
2137# From Albert Cahalan <acahalan@gmail.com>
2138# puredigital used it for the CVS disposable camcorder
2139#8       lelong		4       ZBM bitmap image data
2140#>4      uleshort	x       %u x
2141#>6      uleshort	x       %u
2142
2143# From Albert Cahalan <acahalan@gmail.com>
2144# uncompressed 5:6:5 HighColor image for OLPC XO firmware icons
21450       string		C565     OLPC firmware icon image data
2146>4      uleshort	x       %u x
2147>6      uleshort	x       %u
2148
2149# Applied Images - Image files from Cytovision
2150# Gustavo Junior Alves <gjalves@gjalves.com.br>
21510	string	\xce\xda\xde\xfa	Cytovision Metaphases file
21520	string	\xed\xad\xef\xac	Cytovision Karyotype file
21530	string	\x0b\x00\x03\x00	Cytovision FISH Probe file
21540	string	\xed\xfe\xda\xbe	Cytovision FLEX file
21550	string	\xed\xab\xed\xfe	Cytovision FLEX file
21560	string	\xad\xfd\xea\xad	Cytovision RATS file
2157
2158# Wavelet Scalar Quantization format used in gray-scale fingerprint images
2159# From Tano M Fotang <mfotang@quanteq.com>
21600	string	\xff\xa0\xff\xa8\x00	Wavelet Scalar Quantization image data
2161
2162# Type:		PCO B16 image files
2163# URL:		http://www.pco.de/fileadmin/user_upload/db/download/MA_CWDCOPIE_0412b.pdf
2164# From:		Florian Philipp <florian.philipp@binarywings.net>
2165# Extension:	.b16
2166# Description:	Pixel image format produced by PCO Camware, typically used
2167#		together with PCO cameras.
2168# Note:		Different versions exist for e.g. 8 bit and 16 bit images.
2169#		Documentation is incomplete.
21700	string/b	PCO-	PCO B16 image data
2171>12	ulelong		x	\b, %dx
2172>16	ulelong		x	\b%d
2173>20	ulelong		0	\b, short header
2174>20	ulelong		-1	\b, extended header
2175>>24	ulelong		0	\b, grayscale
2176>>>36	ulelong		0	linear LUT
2177>>>36	ulelong		1	logarithmic LUT
2178>>>28	ulelong		x	[%d
2179>>>32	ulelong		x	\b,%d]
2180>>24	ulelong		1	\b, color
2181>>>64	ulelong		0	linear LUT
2182>>>64	ulelong		1	logarithmic LUT
2183>>>40	ulelong		x	r[%d
2184>>>44	ulelong		x	\b,%d]
2185>>>48	ulelong		x	g[%d
2186>>>52	ulelong		x	\b,%d]
2187>>>56	ulelong		x	b[%d
2188>>>60	ulelong		x	\b,%d]
2189
2190# Polar Monitor Bitmap (.pmb) used as logo for Polar Electro watches
2191# From: Markus Heidelberg <markus.heidelberg at web.de>
21920	string/t	[BitmapInfo2]	Polar Monitor Bitmap text
2193!:mime	image/x-polar-monitor-bitmap
2194
2195# From: Rick Richardson <rickrich@gmail.com>
2196# updated by: Joerg Jenderek
2197# URL: http://techmods.net/nuvi/
21980	string	GARMIN\ BITMAP\ 01	Garmin Bitmap file
2199# extension is also used for
2200# Sony SRF raw image (image/x-sony-srf)
2201# SRF map
2202# Terragen Surface Map (https://www.planetside.co.uk/terragen)
2203# FileLocator Pro search criteria file (https://www.mythicsoft.com/filelocatorpro)
2204!:ext srf
2205#!:mime	image/x-garmin-srf
2206# version 1.00,2.00,2.10,2.40,2.50
2207>0x2f	string		>0		\b, version %4.4s
2208# width (2880,2881,3240)
2209>0x55	uleshort	>0		\b, %dx
2210# height (80,90)
2211>>0x53	uleshort	x		\b%d
2212
2213# Type:	Ulead Photo Explorer5 (.pe5)
2214# URL:	http://www.jisyo.com/cgibin/view.cgi?EXT=pe5 (Japanese)
2215# From:	Simon Horman <horms@debian.org>
22160	string	IIO2H			Ulead Photo Explorer5
2217
2218# Type:	X11 cursor
2219# URL:	http://webcvs.freedesktop.org/mime/shared-mime-info/freedesktop.org.xml.in?view=markup
2220# From:	Mathias Brodala <info@noctus.net>
22210	string	Xcur			X11 cursor
2222
2223# Type:	Olympus ORF raw images.
2224# URL:	https://libopenraw.freedesktop.org/wiki/Olympus_ORF
2225# From:	Adam Buchbinder <adam.buchbinder@gmail.com>
22260	string		MMOR		Olympus ORF raw image data, big-endian
2227!:mime	image/x-olympus-orf
22280	string		IIRO		Olympus ORF raw image data, little-endian
2229!:mime	image/x-olympus-orf
22300	string		IIRS		Olympus ORF raw image data, little-endian
2231!:mime	image/x-olympus-orf
2232
2233# Type: files used in modern AVCHD camcoders to store clip information
2234# Extension: .cpi
2235# From: Alexander Danilov <alexander.a.danilov@gmail.com>
22360	string	HDMV0100	AVCHD Clip Information
2237
2238# From: Adam Buchbinder <adam.buchbinder@gmail.com>
2239# URL: http://local.wasp.uwa.edu.au/~pbourke/dataformats/pic/
2240# Radiance HDR; usually has .pic or .hdr extension.
22410	string	#?RADIANCE\n	Radiance HDR image data
2242#!mime	image/vnd.radiance
2243
2244# From: Adam Buchbinder <adam.buchbinder@gmail.com>
2245# URL: https://www.mpi-inf.mpg.de/resources/pfstools/pfs_format_spec.pdf
2246# Used by the pfstools packages. The regex matches for the image size could
2247# probably use some work. The MIME type is made up; if there's one in
2248# actual common use, it should replace the one below.
22490	string	PFS1\x0a	PFS HDR image data
2250#!mime	image/x-pfs
2251>1	regex	[0-9]*\ 	\b, %s
2252>>1	regex	\ [0-9]{4}	\bx%s
2253
2254# Type: Foveon X3F
2255# URL:  https://www.photofo.com/downloads/x3f-raw-format.pdf
2256# From: Adam Buchbinder <adam.buchbinder@gmail.com>
2257# Note that the MIME type isn't defined anywhere that I can find; if
2258# there's a canonical type for this format, it should replace this one.
22590	string	FOVb	Foveon X3F raw image data
2260!:mime	image/x-x3f
2261>6	uleshort	x	\b, version %d.
2262>4	uleshort	x	\b%d
2263>28	ulelong		x	\b, %dx
2264>32	ulelong		x	\b%d
2265
2266# Paint.NET file
2267# From Adam Buchbinder <adam.buchbinder@gmail.com>
22680	string	PDN3	Paint.NET image data
2269!:mime	image/x-paintnet
2270
2271# Not really an image.
2272# From: "Tano M. Fotang" <mfotang@quanteq.com>
22730	string	\x46\x4d\x52\x00	ISO/IEC 19794-2 Format Minutiae Record (FMR)
2274
2275# doc: https://www.shikino.co.jp/eng/products/images/FLOWER.jpg.zip
2276# example: https://www.shikino.co.jp/eng/products/images/FLOWER.wdp.zip
227790	ubequad		0x574D50484F544F00	JPEG-XR Image
2278>98	ubyte&0x08	=0x08			\b, hard tiling
2279>99	ubyte&0x80	=0x80			\b, tiling present
2280>99	ubyte&0x40	=0x40			\b, codestream present
2281>99	ubyte&0x38	x			\b, spatial xform=
2282>99	ubyte&0x38	0x00			\bTL
2283>99	ubyte&0x38	0x08			\bBL
2284>99	ubyte&0x38	0x10			\bTR
2285>99	ubyte&0x38	0x18			\bBR
2286>99	ubyte&0x38	0x20			\bBT
2287>99	ubyte&0x38	0x28			\bRB
2288>99	ubyte&0x38	0x30			\bLT
2289>99	ubyte&0x38	0x38			\bLB
2290>100	ubyte&0x80	=0x80			\b, short header
2291>>102	ubeshort+1	x			\b, %d
2292>>104	ubeshort+1	x			\bx%d
2293>100	ubyte&0x80	=0x00			\b, long header
2294>>102	ubelong+1	x			\b, %x
2295>>106	ubelong+1	x			\bx%x
2296>101	ubeshort&0xf	x			\b, bitdepth=
2297>>101	ubeshort&0xf	0x0			\b1-WHITE=1
2298>>101	ubeshort&0xf	0x1			\b8
2299>>101	ubeshort&0xf	0x2			\b16
2300>>101	ubeshort&0xf	0x3			\b16-SIGNED
2301>>101	ubeshort&0xf	0x4			\b16-FLOAT
2302>>101	ubeshort&0xf	0x5			\b(reserved 5)
2303>>101	ubeshort&0xf	0x6			\b32-SIGNED
2304>>101	ubeshort&0xf	0x7			\b32-FLOAT
2305>>101	ubeshort&0xf	0x8			\b5
2306>>101	ubeshort&0xf	0x9			\b10
2307>>101	ubeshort&0xf	0xa			\b5-6-5
2308>>101	ubeshort&0xf	0xb			\b(reserved %d)
2309>>101	ubeshort&0xf	0xc			\b(reserved %d)
2310>>101	ubeshort&0xf	0xd			\b(reserved %d)
2311>>101	ubeshort&0xf	0xe			\b(reserved %d)
2312>>101	ubeshort&0xf	0xf			\b1-BLACK=1
2313>101	ubeshort&0xf0	x			\b, colorfmt=
2314>>101	ubeshort&0xf0	0x00			\bYONLY
2315>>101	ubeshort&0xf0	0x10			\bYUV240
2316>>101	ubeshort&0xf0	0x20			\bYWV422
2317>>101	ubeshort&0xf0	0x30			\bYWV444
2318>>101	ubeshort&0xf0	0x40			\bCMYK
2319>>101	ubeshort&0xf0	0x50			\bCMYKDIRECT
2320>>101	ubeshort&0xf0	0x60			\bNCOMPONENT
2321>>101	ubeshort&0xf0	0x70			\bRGB
2322>>101	ubeshort&0xf0	0x80			\bRGBE
2323>>101	ubeshort&0xf0	>0x80			\b(reserved %#x)
2324
2325# From: Johan van der Knijff <johan.vanderknijff@kb.nl>
2326#
2327# BPG (Better Portable Graphics) format
2328# https://bellard.org/bpg/
2329# http://fileformats.archiveteam.org/wiki/BPG
2330#
23310	string	\x42\x50\x47\xFB	BPG (Better Portable Graphics)
2332!:mime  image/bpg
2333
2334# From: Joerg Jenderek
2335# URL: https://en.wikipedia.org/wiki/Apple_Icon_Image_format
23360	string		icns		Mac OS X icon
2337!:mime	image/x-icns
2338!:apple	????icns
2339!:ext icns
2340>4	ubelong		>0
2341# file size
2342>>4	ubelong		x		\b, %d bytes
2343# icon type
2344>>8	string		x		\b, "%4.4s" type
2345
2346# TIM images
2347# URL:		http://fileformats.archiveteam.org/wiki/TIM_(PlayStation_graphics)
2348# Reference:	https://mrclick.zophar.net/TilEd/download/timgfx.txt
2349# Update:	Joerg Jenderek
2350# Note:		called as "PSX TIM *bpp bitmap" by bitmap-tim-*.trid.xml
2351#		verified as "TIM PSX" by XnView `nconvert -fullinfo *.tim` and
2352#		by RECOIL `recoil2png -o TMP.PNG input.tim; file TMP.PNG` and often
2353#		as "PSX TIM" by ImageMagick version 7.1.0-10 command `identify *.tim`
2354#		here signed integers are used but according to Kaitai unsigned
23550		ulelong		0x00000010
2356# 32 Flag bits *cttt; c~CLUT flag t~type 000~4BPP 001~8BPP 010~16BPP 011~24BPP 100~Mixed
2357#>4		ulelong  	x		FLAGS=%#x
2358# 12+Size of CLUT (2Ch for 4BPP; 20Ch 40Ch 60Ch 80Ch C0Ch for 8BPP) or
2359# +image data size (800Ch 2000Ch 2580C for 16BPP) (02000003h for dBase memo test.dbt)
2360#>8		ulelong		x		\b, 12+CLUT or data size=%#8.8x
2361# CLUT or data size remainder is 12 (Ch), but 03 for dBase memo test.dbt
2362#>8		ubyte&0x0F	=0x0C		\b, SIZE REMAINDER IS 12
2363# skip dBase III memo test.dbt with invalid flags 22D10189h
2364>4		ulelong&0xffFFffF0	=0	Sony PlayStation PSX image,
2365# file (version 5.40) labeled the above entry as "TIM image"
2366!:mime	image/x-sony-tim
2367!:ext	tim
2368#>>4		ulelong&0x00000007	x	\b, BPP~%u
2369# 4BPP and 8BPP examples exist with CLUT or without CLUT
2370>>4		ulelong&0x07	0x0		4-Bit,
2371>>4		ulelong&0x07	0x1		8-Bit,
2372# 16BPP and 24BPP examples have no CLUT
2373>>4		ulelong  	0x2		15-Bit,
2374>>4		ulelong  	0x3		24-Bit,
2375# no example
2376>>4		ulelong&0x07  	0x4		Mixed-Bit,
2377# CLUT flag set
2378>>4		ulelong 	&8
2379# 12 + size of CLUT like: 1000Ch 800Ch 400Ch 40Ch and 2FEh (KAGE.TIM)
2380#>>>(8.l+8)	ulelong		x		\b, 12+CLUT SIZE=%#8.8x
2381>>>(8.l+12)	uleshort	x		Pixel at (%d,
2382>>>(8.l+14)	uleshort	x		\b%d) Size=
2383# image width (to get actual width multiply by 4 for 4BPP and by 2 for 8BPP)
2384>>>>4		ulelong  	0x8
2385>>>>>(8.l+16)	uleshort*4	x		\b%d
2386>>>>4		ulelong  	0x9
2387>>>>>(8.l+16)	uleshort*2	x		\b%d
2388# image height like: 32 64 128 144 160 208 256
2389>>>(8.l+18)	uleshort	x		\bx%d,
2390>>>4		ulelong 	0x8		16 CLUT Entries at
2391>>>4		ulelong 	0x9		256 CLUT Entries at
2392>>>12		uleshort	x		(%d,
2393>>>14		uleshort	x		\b%d)
2394# no Color LookUp Table (CLUT)
2395>>4		ulelong		^8
2396# image origin X Y
2397>>>12		uleshort	x		Pixel at (%d,
2398>>>14		uleshort	x		\b%d) Size=
2399# real image width = multiply by 4 (4BPP) 2 (8BPP) 1 (16BPP) 2/3 (24BPP)
2400>>>>4		ulelong  	0x0
2401>>>>>16		uleshort*4	x		\b%d
2402>>>>4		ulelong  	0x1
2403>>>>>16		uleshort*2	x		\b%d
2404>>>>4		ulelong  	0x2
2405>>>>>16		uleshort		x		\b%d
2406>>>>4		ulelong  	0x3
2407# GRR: NOT working
2408#>>>>>16		uleshort*2/3	x		\b%d
2409>>>>>16		uleshort		x		\b2/3*%d
2410# mixed format width not explained!
2411>>>>4		ulelong  	0x4
2412>>>>>16		uleshort		x		\b%d
2413# image height like: 64 240 256
2414>>>18		uleshort		x		\bx%d
2415# TIM image data
2416
2417# MDEC streams
24180		ulelong		0x80010160	MDEC video stream,
2419>16		uleshort	x		%dx
2420>18		uleshort	x		\b%d
2421#>8		ulelong		x		%d frames
2422#>4		uleshort	x		secCount=%d;
2423#>6		uleshort	x		nSectors=%d;
2424#>12		ulelong		x		frameSize=%d;
2425
2426# BS encoded bitstreams
24272		uleshort	0x3800		BS image,
2428>6		uleshort	x		Version %d,
2429>4		uleshort	x		Quantization %d,
2430>0		uleshort	x		(Decompresses to %d words)
2431
2432# Type: farbfeld image.
2433# Url: http://tools.suckless.org/farbfeld/
2434# From: Ian D. Scott <ian@iandouglasscott.com>
2435#
24360		string		farbfeld	farbfeld image data,
2437>8		ubelong		x		%dx
2438>12		ubelong		x		\b%d
2439
2440# Type: Microsoft DirectDraw Surface (DXGI formats)
2441# URL:	https://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/directx/graphics/reference/DDSFileReference/ddsfileformat.asp
2442# From: Morten Hustveit <morten@debian.org>
2443# Updated by: David Korth <gerbilsoft@gerbilsoft.com>
24440	name	ms-directdraw-dx10
2445>0	ulelong	x	\b, DXGI format:
2446>0	ulelong	1	R32G32B32A32_TYPELESS
2447>0	ulelong	2	R32G32B32A32_FLOAT
2448>0	ulelong	3	R32G32B32A32_UINT
2449>0	ulelong	4	R32G32B32A32_SINT
2450>0	ulelong	5	R32G32B32_TYPELESS
2451>0	ulelong	6	R32G32B32_FLOAT
2452>0	ulelong	7	R32G32B32_UINT
2453>0	ulelong	8	R32G32B32_SINT
2454>0	ulelong	9	R16G16B16A16_TYPELESS
2455>0	ulelong	10	R16G16B16A16_FLOAT
2456>0	ulelong	11	R16G16B16A16_UNORM
2457>0	ulelong	12	R16G16B16A16_UINT
2458>0	ulelong	13	R16G16B16A16_SNORM
2459>0	ulelong	14	R16G16B16A16_SINT
2460>0	ulelong	15	R32G32_TYPELESS
2461>0	ulelong	16	R32G32_FLOAT
2462>0	ulelong	17	R32G32_UINT
2463>0	ulelong	18	R32G32_SINT
2464>0	ulelong	19	R32G8X24_TYPELESS
2465>0	ulelong	20	D32_FLOAT_S8X24_UINT
2466>0	ulelong	21	R32_FLOAT_X8X24_TYPELESS
2467>0	ulelong	22	X32_TYPELESS_G8X24_UINT
2468>0	ulelong	23	R10G10B10A2_TYPELESS
2469>0	ulelong	24	R10G10B10A2_UNORM
2470>0	ulelong	25	R10G10B10A2_UINT
2471>0	ulelong	26	R11G11B10_FLOAT
2472>0	ulelong	27	R8G8B8A8_TYPELESS
2473>0	ulelong	28	R8G8B8A8_UNORM
2474>0	ulelong	29	R8G8B8A8_UNORM_SRGB
2475>0	ulelong	30	R8G8B8A8_UINT
2476>0	ulelong	31	R8G8B8A8_SNORM
2477>0	ulelong	32	R8G8B8A8_SINT
2478>0	ulelong	33	R16G16_TYPELESS
2479>0	ulelong	34	R16G16_FLOAT
2480>0	ulelong	35	R16G16_UNORM
2481>0	ulelong	36	R16G16_UINT
2482>0	ulelong	37	R16G16_SNORM
2483>0	ulelong	38	R16G16_SINT
2484>0	ulelong	39	R32_TYPELESS
2485>0	ulelong	40	D32_FLOAT
2486>0	ulelong	41	R32_FLOAT
2487>0	ulelong	42	R32_UINT
2488>0	ulelong	43	R32_SINT
2489>0	ulelong	44	R24G8_TYPELESS
2490>0	ulelong	45	D24_UNORM_S8_UINT
2491>0	ulelong	46	R24_UNORM_X8_TYPELESS
2492>0	ulelong	47	X24_TYPELESS_G8_UINT
2493>0	ulelong	48	R8G8_TYPELESS
2494>0	ulelong	49	R8G8_UNORM
2495>0	ulelong	50	R8G8_UINT
2496>0	ulelong	51	R8G8_SNORM
2497>0	ulelong	52	R8G8_SINT
2498>0	ulelong	53	R16_TYPELESS
2499>0	ulelong	54	R16_FLOAT
2500>0	ulelong	55	D16_UNORM
2501>0	ulelong	56	R16_UNORM
2502>0	ulelong	57	R16_UINT
2503>0	ulelong	58	R16_SNORM
2504>0	ulelong	59	R16_SINT
2505>0	ulelong	60	R8_TYPELESS
2506>0	ulelong	61	R8_UNORM
2507>0	ulelong	62	R8_UINT
2508>0	ulelong	63	R8_SNORM
2509>0	ulelong	64	R8_SINT
2510>0	ulelong	65	A8_UNORM
2511>0	ulelong	66	R1_UNORM
2512>0	ulelong	67	R9G9B9E5_SHAREDEXP
2513>0	ulelong	68	R8G8_B8G8_UNORM
2514>0	ulelong	69	G8R8_G8B8_UNORM
2515>0	ulelong	70	BC1_TYPELESS
2516>0	ulelong	71	BC1_UNORM
2517>0	ulelong	72	BC1_UNORM_SRGB
2518>0	ulelong	73	BC2_TYPELESS
2519>0	ulelong	74	BC2_UNORM
2520>0	ulelong	75	BC2_UNORM_SRGB
2521>0	ulelong	76	BC3_TYPELESS
2522>0	ulelong	77	BC3_UNORM
2523>0	ulelong	78	BC3_UNORM_SRGB
2524>0	ulelong	79	BC4_TYPELESS
2525>0	ulelong	80	BC4_UNORM
2526>0	ulelong	81	BC4_SNORM
2527>0	ulelong	82	BC5_TYPELESS
2528>0	ulelong	83	BC5_UNORM
2529>0	ulelong	84	BC5_SNORM
2530>0	ulelong	85	B5G6R5_UNORM
2531>0	ulelong	86	B5G5R5A1_UNORM
2532>0	ulelong	87	B8G8R8A8_UNORM
2533>0	ulelong	88	B8G8R8X8_UNORM
2534>0	ulelong	89	R10G10B10_XR_BIAS_A2_UNORM
2535>0	ulelong	90	B8G8R8A8_TYPELESS
2536>0	ulelong	91	B8G8R8A8_UNORM_SRGB
2537>0	ulelong	92	B8G8R8X8_TYPELESS
2538>0	ulelong	93	B8G8R8X8_UNORM_SRGB
2539>0	ulelong	94	BC6H_TYPELESS
2540>0	ulelong	95	BC6H_UF16
2541>0	ulelong	96	BC6H_SF16
2542>0	ulelong	97	BC7_TYPELESS
2543>0	ulelong	98	BC7_UNORM
2544>0	ulelong	99	BC7_UNORM_SRGB
2545>0	ulelong	100	AYUV
2546>0	ulelong	101	Y410
2547>0	ulelong	102	Y416
2548>0	ulelong	103	NV12
2549>0	ulelong	104	P010
2550>0	ulelong	105	P016
2551>0	ulelong	106	420_OPAQUE
2552>0	ulelong	107	YUY2
2553>0	ulelong	108	Y210
2554>0	ulelong	109	Y216
2555>0	ulelong	110	NV11
2556>0	ulelong	111	AI44
2557>0	ulelong	112	IA44
2558>0	ulelong	113	P8
2559>0	ulelong	114	A8P8
2560>0	ulelong	115	B4G4R4A4_UNORM
2561
2562>0	ulelong	116	XBOX_R10G10B10_7E3_A2_FLOAT
2563>0	ulelong	117	XBOX_R10G10B10_6E4_A2_FLOAT
2564>0	ulelong	118	XBOX_D16_UNORM_S8_UINT
2565>0	ulelong	119	XBOX_R16_UNORM_X8_TYPELESS
2566>0	ulelong	120	XBOX_X16_TYPELESS_G8_UINT
2567
2568>0	ulelong	130	DXGI_FORMAT_P208
2569>0	ulelong	131	DXGI_FORMAT_V208
2570>0	ulelong	132	DXGI_FORMAT_V408
2571
2572>0	ulelong	133	ASTC_4X4_TYPELESS
2573>0	ulelong	134	ASTC_4X4_UNORM
2574>0	ulelong	135	ASTC_4X4_UNORM_SRGB
2575>0	ulelong	137	ASTC_5X4_TYPELESS
2576>0	ulelong	138	ASTC_5X4_UNORM
2577>0	ulelong	139	ASTC_5X4_UNORM_SRGB
2578>0	ulelong	141	ASTC_5X5_TYPELESS
2579>0	ulelong	142	ASTC_5X5_UNORM
2580>0	ulelong	143	ASTC_5X5_UNORM_SRGB
2581>0	ulelong	145	ASTC_6X5_TYPELESS
2582>0	ulelong	146	ASTC_6X5_UNORM
2583>0	ulelong	147	ASTC_6X5_UNORM_SRGB
2584>0	ulelong	149	ASTC_6X6_TYPELESS
2585>0	ulelong	150	ASTC_6X6_UNORM
2586>0	ulelong	151	ASTC_6X6_UNORM_SRGB
2587>0	ulelong	153	ASTC_8X5_TYPELESS
2588>0	ulelong	154	ASTC_8X5_UNORM
2589>0	ulelong	155	ASTC_8X5_UNORM_SRGB
2590>0	ulelong	157	ASTC_8X6_TYPELESS
2591>0	ulelong	158	ASTC_8X6_UNORM
2592>0	ulelong	159	ASTC_8X6_UNORM_SRGB
2593>0	ulelong	161	ASTC_8X8_TYPELESS
2594>0	ulelong	162	ASTC_8X8_UNORM
2595>0	ulelong	163	ASTC_8X8_UNORM_SRGB
2596>0	ulelong	165	ASTC_10X5_TYPELESS
2597>0	ulelong	166	ASTC_10X5_UNORM
2598>0	ulelong	167	ASTC_10X5_UNORM_SRGB
2599>0	ulelong	169	ASTC_10X6_TYPELESS
2600>0	ulelong	170	ASTC_10X6_UNORM
2601>0	ulelong	171	ASTC_10X6_UNORM_SRGB
2602>0	ulelong	173	ASTC_10X8_TYPELESS
2603>0	ulelong	174	ASTC_10X8_UNORM
2604>0	ulelong	175	ASTC_10X8_UNORM_SRGB
2605>0	ulelong	177	ASTC_10X10_TYPELESS
2606>0	ulelong	178	ASTC_10X10_UNORM
2607>0	ulelong	179	ASTC_10X10_UNORM_SRGB
2608>0	ulelong	181	ASTC_12X10_TYPELESS
2609>0	ulelong	182	ASTC_12X10_UNORM
2610>0	ulelong	183	ASTC_12X10_UNORM_SRGB
2611>0	ulelong	185	ASTC_12X12_TYPELESS
2612>0	ulelong	186	ASTC_12X12_UNORM
2613>0	ulelong	187	ASTC_12X12_UNORM_SRGB
2614
2615>0	ulelong	190	XBOX_R10G10B10_SNORM_A2_UNORM
2616>0	ulelong	189	XBOX_R4G4_UNORM
2617>0	ulelong	0xFFFFFFFF	DXGI_FORMAT_FORCE_UINT
2618
2619# Type: Microsoft DirectDraw Surface (common data)
2620# URL:	https://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/directx/graphics/reference/DDSFileReference/ddsfileformat.asp
2621# From: Morten Hustveit <morten@debian.org>
2622# Updated by: David Korth <gerbilsoft@gerbilsoft.com>
26230	name	ms-directdraw-surface
2624>0x10	ulelong	x			%u x
2625>0x0C	ulelong	x			%u
2626# Color depth.
2627>0x58	ulelong	>0			\b, %u-bit color
2628# Determine the pixel format.
2629>0x50	ulelong&0x4	4
2630# FIXME: Handle DX10 and XBOX formats.
2631>>0x54	string	DX10
2632>>>0x80	use	ms-directdraw-dx10
2633>>0x54	string	!DX10			\b, compressed using %.4s
2634>0x50	ulelong&0x2	0x2		\b, alpha only
2635>0x50	ulelong&0x200	0x200		\b, YUV
2636>0x50	ulelong&0x20000	0x20000		\b, luminance
2637# RGB pixel format
2638>0x50	ulelong&0x40	0x40
2639
2640# Determine the RGB format using the color masks.
2641# ulequad order: 0xGGGGGGGGRRRRRRRR, 0xAAAAAAAABBBBBBBB
2642
2643>>0x58		ulelong	16
2644
2645# NOTE: 15-bit color formats usually have 16-bit listed as the color depth.
2646>>>0x5C		ulequad	0x000003E000007C00
2647>>>>0x64	ulequad 0x000000000000001F	\b, RGB555
2648>>>0x5C		ulequad	0x000003E000001F00
2649>>>>0x64	ulequad 0x000000000000007C	\b, BGR555
2650
2651>>>0x5C		ulequad	0x000007E00000F800
2652>>>>0x64	ulequad 0x000000000000001F	\b, RGB565
2653>>>0x5C		ulequad	0x000007E000001F00
2654>>>>0x64	ulequad 0x00000000000000F8	\b, BGR565
2655
2656>>>0x5C		ulequad	0x000000F000000F00
2657>>>>0x64	ulequad 0x0000F0000000000F	\b, ARGB4444
2658>>>0x5C		ulequad	0x000000F00000000F
2659>>>>0x64	ulequad 0x0000F00000000F00	\b, ABGR4444
2660
2661>>>0x5C		ulequad	0x00000F000000F000
2662>>>>0x64	ulequad 0x0000000F000000F0	\b, RGBA4444
2663>>>0x5C		ulequad	0x00000F00000000F0
2664>>>>0x64	ulequad 0x0000000F0000F000	\b, BGRA4444
2665
2666>>>0x5C		ulequad	0x000000F000000F00
2667>>>>0x64	ulequad 0x000000000000000F	\b, xRGB4444
2668>>>0x5C		ulequad	0x000000F00000000F
2669>>>>0x64	ulequad 0x0000000000000F00	\b, xBGR4444
2670
2671>>>0x5C		ulequad	0x00000F000000F000
2672>>>>0x64	ulequad 0x00000000000000F0	\b, RGBx4444
2673>>>0x5C		ulequad	0x00000F00000000F0
2674>>>>0x64	ulequad 0x000000000000F000	\b, BGRx4444
2675
2676>>>0x5C		ulequad	0x000003E000007C00
2677>>>>0x64	ulequad 0x000080000000001F	\b, ARGB1555
2678>>>0x5C		ulequad	0x000003E000001F00
2679>>>>0x64	ulequad 0x000080000000007C	\b, ABGR1555
2680>>>0x5C		ulequad	0x000007C00000F800
2681>>>>0x64	ulequad 0x000000010000003E	\b, RGBA5551
2682>>>0x5C		ulequad	0x000007C00000003E
2683>>>>0x64	ulequad 0x000000010000F800	\b, BGRA5551
2684
2685>>88		ulelong 24
2686>>>0x5C		ulequad	0x0000FF0000FF0000
2687>>>>0x64	ulequad 0x00000000000000FF	\b, RGB888
2688>>>0x5C		ulequad	0x0000FF00000000FF
2689>>>>0x64	ulequad 0x0000000000FF0000	\b, BGR888
2690
2691>>88		ulelong 32
2692>>>0x5C		ulequad	0x0000FF0000FF0000
2693>>>>0x64	ulequad 0xFF000000000000FF	\b, ARGB8888
2694>>>0x5C		ulequad	0x0000FF00000000FF
2695>>>>0x64	ulequad 0xFF00000000FF0000	\b, ABGR8888
2696
2697>>>0x5C		ulequad	0x00FF0000FF000000
2698>>>>0x64	ulequad 0x000000FF0000FF00	\b, RGBA8888
2699>>>0x5C		ulequad	0x00FF00000000FF00
2700>>>>0x64	ulequad 0x000000FFFF000000	\b, BGBA8888
2701
2702>>>0x5C		ulequad	0x0000FF0000FF0000
2703>>>>0x64	ulequad 0x00000000000000FF	\b, xRGB8888
2704>>>0x5C		ulequad	0x0000FF00000000FF
2705>>>>0x64	ulequad 0x0000000000FF0000	\b, xBGR8888
2706
2707>>>0x5C		ulequad	0x00FF0000FF000000
2708>>>>0x64	ulequad 0x000000000000FF00	\b, RGBx8888
2709>>>0x5C		ulequad	0x00FF00000000FF00
2710>>>>0x64	ulequad 0x00000000FF000000	\b, BGBx8888
2711
2712# Less common 32-bit color formats.
2713>>>0x5C		ulequad	0xFFFF00000000FFFF
2714>>>>0x64	ulequad 0x0000000000000000	\b, G16R16
2715>>>0x5C		ulequad	0x0000FFFFFFFF0000
2716>>>>0x64	ulequad 0x0000000000000000	\b, R16G16
2717
2718>>>0x5C		ulequad	0x000FFC003FF00000
2719>>>>0x64	ulequad 0xC0000000000003FF	\b, A2R10G10B10
2720>>>0x5C		ulequad	0x000FFC00000003FF
2721>>>>0x64	ulequad 0xC00000003FF00000	\b, A2B10G10R10
2722
2723# Type: Microsoft DirectDraw Surface
2724# URL:	https://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/directx/graphics/reference/DDSFileReference/ddsfileformat.asp
2725# From: Morten Hustveit <morten@debian.org>
2726# Updated by: David Korth <gerbilsoft@gerbilsoft.com>
27270	string/b	DDS\040\174\000\000\000 Microsoft DirectDraw Surface (DDS):
2728>0	use	ms-directdraw-surface
2729
2730# Type: Sega PVR image.
2731# From: David Korth <gerbilsoft@gerbilsoft.com>
2732# References:
2733# - https://fabiensanglard.net/Mykaruga/tools/segaPVRFormat.txt
2734# - https://github.com/yazgoo/pvrx2png
2735# - https://github.com/nickworonekin/puyotools
2736
2737# Sega PVR header.
27380	name	sega-pvr-image-header
2739>0x0C	uleshort	x	%u x
2740>0x0E	uleshort	x	%u
2741# Image format.
2742>0x08	ubyte	0	\b, ARGB1555
2743>0x08	ubyte	1	\b, RGB565
2744>0x08	ubyte	2	\b, ARGB4444
2745>0x08	ubyte	3	\b, YUV442
2746>0x08	ubyte	4	\b, Bump
2747>0x08	ubyte	5	\b, 4bpp
2748>0x08	ubyte	6	\b, 8bpp
2749# Image data type.
2750>0x09	ubyte	0x01	\b, square twiddled
2751>0x09	ubyte	0x02	\b, square twiddled & mipmap
2752>0x09	ubyte	0x03	\b, VQ
2753>0x09	ubyte	0x04	\b, VQ & mipmap
2754>0x09	ubyte	0x05	\b, 8-bit CLUT twiddled
2755>0x09	ubyte	0x06	\b, 4-bit CLUT twiddled
2756>0x09	ubyte	0x07	\b, 8-bit direct twiddled
2757>0x09	ubyte	0x08	\b, 4-bit direct twiddled
2758>0x09	ubyte	0x09	\b, rectangle
2759>0x09	ubyte	0x0B	\b, rectangular stride
2760>0x09	ubyte	0x0D	\b, rectangular twiddled
2761>0x09	ubyte	0x10	\b, small VQ
2762>0x09	ubyte	0x11	\b, small VQ & mipmap
2763>0x09	ubyte	0x12	\b, square twiddled & mipmap
2764
2765# Sega PVR image.
27660	string	PVRT
2767>0x10	string	DDS\040\174\000\000\000 Sega PVR (Xbox) image:
2768>>0x20	use	ms-directdraw-surface
2769>0x10	ubelong	!0x44445320		Sega PVR image:
2770>>0	use	sega-pvr-image-header
2771
2772# Sega PVR image with GBIX.
27730	string	GBIX
2774>0x10	string	PVRT
2775>>0x10	string	DDS\040\174\000\000\000 Sega PVR (Xbox) image:
2776>>>0x20	use	ms-directdraw-surface
2777>>0x10	ubelong	!0x44445320		Sega PVR image:
2778>>>0x10	use	sega-pvr-image-header
2779>>0x08	ulelong	x	\b, global index = %u
2780
2781# Sega GVR header.
27820	name	sega-gvr-image-header
2783>0x0C	ubeshort	x	%u x
2784>0x0E	ubeshort	x	%u
2785# Image data format.
2786>0x0B	ubyte	0	\b, I4
2787>0x0B	ubyte	1	\b, I8
2788>0x0B	ubyte	2	\b, IA4
2789>0x0B	ubyte	3	\b, IA8
2790>0x0B	ubyte	4	\b, RGB565
2791>0x0B	ubyte	5	\b, RGB5A3
2792>0x0B	ubyte	6	\b, ARGB8888
2793>0x0B	ubyte	8	\b, CI4
2794>0x0B	ubyte	9	\b, CI8
2795>0x0B	ubyte	14	\b, DXT1
2796
2797# Sega GVR image.
27980	string	GVRT	Sega GVR image:
2799>0x10	use	sega-gvr-image-header
2800
2801# Sega GVR image with GBIX.
28020	string	GBIX
2803>0x10	string	GVRT	Sega GVR image:
2804>>0x10	use	sega-gvr-image-header
2805>>0x08	ubelong	x	\b, global index = %u
2806
2807# Sega GVR image with GCIX. (Wii)
28080	string	GCIX
2809>0x10	string	GVRT	Sega GVR image:
2810>>0x10	use	sega-gvr-image-header
2811>>0x08	ubelong	x	\b, global index = %u
2812
2813# Light Field Picture
2814# Documentation: http://optics.miloush.net/lytro/TheFileFormat.aspx
2815# Typical file extensions: .lfp .lfr .lfx
2816
28170	ubelong	0x894C4650
2818>4	ubelong	0x0D0A1A0A
2819>12	ubelong	0x00000000	Lytro Light Field Picture
2820>8	ubelong	x		\b, version %d
2821
2822# Type: Vision Research Phantom CINE Format
2823# URL: https://www.phantomhighspeed.com/
2824# URL2: http://phantomhighspeed.force.com/vriknowledge/servlet/fileField?id=0BEU0000000Cfyk
2825# From: Harry Mallon <hjmallon at gmail.com>
2826#
2827# This has a short "CI" code but the 44 is the size of the struct which is
2828# stable
28290	string	CI
2830>2	uleshort 44		Vision Research CINE Video,
2831>>4	uleshort	0		Grayscale,
2832>>4	uleshort 1		JPEG Compressed,
2833>>4	uleshort 2		RAW,
2834>>6	uleshort x		version %d,
2835>>20	ulelong	x		%d frames,
2836>>48	ulelong	x		%dx
2837>>52	ulelong	x		\b%d
2838
2839# Type: ARRI Raw Image
2840# Info: SMPTE RDD30:2014
2841# From: Harry Mallon <hjmallon at gmail.com>
28420	string ARRI		ARRI ARI image data,
2843>4	ulelong 0x78563412	little-endian,
2844>4 	ulelong 0x12345678	big-endian,
2845>12	ulelong x		version %d,
2846>20	ulelong x 		%dx
2847>24	ulelong x		\b%d
2848
2849# Type: Khronos KTX texture.
2850# From: David Korth <gerbilsoft@gerbilsoft.com>
2851# Reference: https://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/
2852
2853# glEnum decoding.
2854# NOTE: Only the most common formats are listed here.
28550	name	khronos-ktx-glEnum
2856>0	ulelong	0x1907	\b, RGB
2857>0	ulelong	0x1908	\b, RGBA
2858>0	ulelong	0x1909	\b, LUMINANCE
2859>0	ulelong	0x190A	\b, LUMINANCE_ALPHA
2860>0	ulelong	0x80E1	\b, BGR
2861>0	ulelong	0x80E2	\b, BGRA
2862>0	ulelong	0x83A0	\b, RGB_S3TC
2863>0	ulelong	0x83A1	\b, RGB4_S3TC
2864>0	ulelong	0x83A2	\b, RGBA_S3TC
2865>0	ulelong	0x83A3	\b, RGBA4_S3TC
2866>0	ulelong	0x83A4	\b, RGBA_DXT5_S3TC
2867>0	ulelong	0x83A5	\b, RGBA4_DXT5_S3TC
2868>0	ulelong	0x83F0	\b, COMPRESSED_RGB_S3TC_DXT1_EXT
2869>0	ulelong	0x83F1	\b, COMPRESSED_RGBA_S3TC_DXT1_EXT
2870>0	ulelong	0x83F2	\b, COMPRESSED_RGBA_S3TC_DXT3_EXT
2871>0	ulelong	0x83F3	\b, COMPRESSED_RGBA_S3TC_DXT5_EXT
2872>0	ulelong	0x8D64	\b, ETC1_RGB8_OES
2873>0	ulelong	0x9270	\b, COMPRESSED_R11_EAC
2874>0	ulelong	0x9271	\b, COMPRESSED_SIGNED_R11_EAC
2875>0	ulelong	0x9272	\b, COMPRESSED_RG11_EAC
2876>0	ulelong	0x9273	\b, COMPRESSED_SIGNED_RG11_EAC
2877>0	ulelong	0x9274	\b, COMPRESSED_RGB8_ETC2
2878>0	ulelong	0x9275	\b, COMPRESSED_SRGB8_ETC2
2879>0	ulelong	0x9276	\b, COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2
2880>0	ulelong	0x9277	\b, COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2
2881>0	ulelong	0x9278	\b, COMPRESSED_RGBA2_ETC2_EAC
2882>0	ulelong	0x9279	\b, COMPRESSED_SRGB8_ALPHA8_ETC2_EAC
2883>0	ulelong	0x93B0	\b, COMPRESSED_RGBA_ASTC_4x4_KHR
2884>0	ulelong	0x93B1	\b, COMPRESSED_RGBA_ASTC_5x4_KHR
2885>0	ulelong	0x93B2	\b, COMPRESSED_RGBA_ASTC_5x5_KHR
2886>0	ulelong	0x93B3	\b, COMPRESSED_RGBA_ASTC_6x5_KHR
2887>0	ulelong	0x93B4	\b, COMPRESSED_RGBA_ASTC_6x6_KHR
2888>0	ulelong	0x93B5	\b, COMPRESSED_RGBA_ASTC_8x5_KHR
2889>0	ulelong	0x93B6	\b, COMPRESSED_RGBA_ASTC_8x6_KHR
2890>0	ulelong	0x93B7	\b, COMPRESSED_RGBA_ASTC_8x8_KHR
2891>0	ulelong	0x93B8	\b, COMPRESSED_RGBA_ASTC_10x5_KHR
2892>0	ulelong	0x93B9	\b, COMPRESSED_RGBA_ASTC_10x6_KHR
2893>0	ulelong	0x93BA	\b, COMPRESSED_RGBA_ASTC_10x8_KHR
2894>0	ulelong	0x93BB	\b, COMPRESSED_RGBA_ASTC_10x10_KHR
2895>0	ulelong	0x93BC	\b, COMPRESSED_RGBA_ASTC_12x10_KHR
2896>0	ulelong	0x93BD	\b, COMPRESSED_RGBA_ASTC_12x12_KHR
2897>0	ulelong	0x93D0	\b, COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR
2898>0	ulelong	0x93D1	\b, COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR
2899>0	ulelong	0x93D2	\b, COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR
2900>0	ulelong	0x93D3	\b, COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR
2901>0	ulelong	0x93D4	\b, COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR
2902>0	ulelong	0x93D5	\b, COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR
2903>0	ulelong	0x93D6	\b, COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR
2904>0	ulelong	0x93D7	\b, COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR
2905>0	ulelong	0x93D8	\b, COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR
2906>0	ulelong	0x93D9	\b, COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR
2907>0	ulelong	0x93DA	\b, COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR
2908>0	ulelong	0x93DB	\b, COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR
2909>0	ulelong	0x93DC	\b, COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR
2910>0	ulelong	0x93DD	\b, COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR
2911
2912# Endian-specific KTX header.
2913# TODO: glType (all textures I've seen so far are GL_UNSIGNED_BYTE)
29140	name	khronos-ktx-endian-header
2915>20	ulelong	x	\b, %u
2916>24	ulelong	>1	x %u
2917>28	ulelong	>1	x %u
2918>8	ulelong	>0
2919>>8	use	khronos-ktx-glEnum
2920>8	ulelong	0
2921>>12	use	khronos-ktx-glEnum
2922
2923# Main KTX header.
2924# Determine endianness, then check the rest of the header.
29250	string	\xABKTX\ 11\xBB\r\n\x1A\n	Khronos KTX texture
2926>12	ulelong	0x04030201			(little-endian)
2927>>16	use	khronos-ktx-endian-header
2928>12	ubelong	0x04030201			(big-endian)
2929>>16	use	\^khronos-ktx-endian-header
2930
2931# Type: Khronos KTX2 texture.
2932# From: David Korth <gerbilsoft@gerbilsoft.com>
2933# Based on draft19.
2934# Reference: http://github.khronos.org/KTX-Specification/
2935
2936# Supercompression enum.
29370	name	khronos-ktx2-supercompression
2938>0	ulelong	1	BasisLZ
2939>0	ulelong	2	Zstandard
2940>0	ulelong	3	ZLIB
2941
2942# Vulkan format identifier.
2943# NOTE: Formats prohibited from KTX2 are commented out.
29440	name	khronos-ktx2-vkFormat
2945>0	ulelong	0	UNDEFINED
2946>0	ulelong	1	R4G4_UNORM_PACK8
2947>0	ulelong	2	R4G4B4A4_UNORM_PACK16
2948>0	ulelong	3	B4G4R4A4_UNORM_PACK16
2949>0	ulelong	4	R5G6B5_UNORM_PACK16
2950>0	ulelong	5	B5G6R5_UNORM_PACK16
2951>0	ulelong	6	R5G5B5A1_UNORM_PACK16
2952>0	ulelong	7	B5G5R5A1_UNORM_PACK16
2953>0	ulelong	8	A1R5G5B5_UNORM_PACK16
2954>0	ulelong	9	R8_UNORM
2955>0	ulelong	10	R8_SNORM
2956#>0	ulelong	11	R8_USCALED
2957#>0	ulelong	12	R8_SSCALED
2958>0	ulelong	13	R8_UINT
2959>0	ulelong	14	R8_SINT
2960>0	ulelong	15	R8_SRGB
2961>0	ulelong	16	R8G8_UNORM
2962>0	ulelong	17	R8G8_SNORM
2963#>0	ulelong	18	R8G8_USCALED
2964#>0	ulelong	19	R8G8_SSCALED
2965>0	ulelong	20	R8G8_UINT
2966>0	ulelong	21	R8G8_SINT
2967>0	ulelong	22	R8G8_SRGB
2968>0	ulelong	23	R8G8B8_UNORM
2969>0	ulelong	24	R8G8B8_SNORM
2970#>0	ulelong	25	R8G8B8_USCALED
2971#>0	ulelong	26	R8G8B8_SSCALED
2972>0	ulelong	27	R8G8B8_UINT
2973>0	ulelong	28	R8G8B8_SINT
2974>0	ulelong	29	R8G8B8_SRGB
2975>0	ulelong	30	B8G8R8_UNORM
2976>0	ulelong	31	B8G8R8_SNORM
2977#>0	ulelong	32	B8G8R8_USCALED
2978#>0	ulelong	33	B8G8R8_SSCALED
2979>0	ulelong	34	B8G8R8_UINT
2980>0	ulelong	35	B8G8R8_SINT
2981>0	ulelong	36	B8G8R8_SRGB
2982>0	ulelong	37	R8G8B8A8_UNORM
2983>0	ulelong	38	R8G8B8A8_SNORM
2984#>0	ulelong	39	R8G8B8A8_USCALED
2985#>0	ulelong	40	R8G8B8A8_SSCALED
2986>0	ulelong	41	R8G8B8A8_UINT
2987>0	ulelong	42	R8G8B8A8_SINT
2988>0	ulelong	43	R8G8B8A8_SRGB
2989>0	ulelong	44	B8G8R8A8_UNORM
2990>0	ulelong	45	B8G8R8A8_SNORM
2991#>0	ulelong	46	B8G8R8A8_USCALED
2992#>0	ulelong	47	B8G8R8A8_SSCALED
2993>0	ulelong	48	B8G8R8A8_UINT
2994>0	ulelong	49	B8G8R8A8_SINT
2995>0	ulelong	50	B8G8R8A8_SRGB
2996#>0	ulelong	51	A8B8G8R8_UNORM_PACK32
2997#>0	ulelong	52	A8B8G8R8_SNORM_PACK32
2998#>0	ulelong	53	A8B8G8R8_USCALED_PACK32
2999#>0	ulelong	54	A8B8G8R8_SSCALED_PACK32
3000#>0	ulelong	55	A8B8G8R8_UINT_PACK32
3001#>0	ulelong	56	A8B8G8R8_SINT_PACK32
3002#>0	ulelong	57	A8B8G8R8_SRGB_PACK32
3003>0	ulelong	58	A2R10G10B10_UNORM_PACK32
3004>0	ulelong	59	A2R10G10B10_SNORM_PACK32
3005#>0	ulelong	60	A2R10G10B10_USCALED_PACK32
3006#>0	ulelong	61	A2R10G10B10_SSCALED_PACK32
3007>0	ulelong	62	A2R10G10B10_UINT_PACK32
3008>0	ulelong	63	A2R10G10B10_SINT_PACK32
3009>0	ulelong	64	A2B10G10R10_UNORM_PACK32
3010>0	ulelong	65	A2B10G10R10_SNORM_PACK32
3011#>0	ulelong	66	A2B10G10R10_USCALED_PACK32
3012#>0	ulelong	67	A2B10G10R10_SSCALED_PACK32
3013>0	ulelong	68	A2B10G10R10_UINT_PACK32
3014>0	ulelong	69	A2B10G10R10_SINT_PACK32
3015>0	ulelong	70	R16_UNORM
3016>0	ulelong	71	R16_SNORM
3017#>0	ulelong	72	R16_USCALED
3018#>0	ulelong	73	R16_SSCALED
3019>0	ulelong	74	R16_UINT
3020>0	ulelong	75	R16_SINT
3021>0	ulelong	76	R16_SFLOAT
3022>0	ulelong	77	R16G16_UNORM
3023>0	ulelong	78	R16G16_SNORM
3024#>0	ulelong	79	R16G16_USCALED
3025#>0	ulelong	80	R16G16_SSCALED
3026>0	ulelong	81	R16G16_UINT
3027>0	ulelong	82	R16G16_SINT
3028>0	ulelong	83	R16G16_SFLOAT
3029>0	ulelong	84	R16G16B16_UNORM
3030>0	ulelong	85	R16G16B16_SNORM
3031#>0	ulelong	86	R16G16B16_USCALED
3032#>0	ulelong	87	R16G16B16_SSCALED
3033>0	ulelong	88	R16G16B16_UINT
3034>0	ulelong	89	R16G16B16_SINT
3035>0	ulelong	90	R16G16B16_SFLOAT
3036>0	ulelong	91	R16G16B16A16_UNORM
3037>0	ulelong	92	R16G16B16A16_SNORM
3038#>0	ulelong	93	R16G16B16A16_USCALED
3039#>0	ulelong	94	R16G16B16A16_SSCALED
3040>0	ulelong	95	R16G16B16A16_UINT
3041>0	ulelong	96	R16G16B16A16_SINT
3042>0	ulelong	97	R16G16B16A16_SFLOAT
3043>0	ulelong	98	R32_UINT
3044>0	ulelong	99	R32_SINT
3045>0	ulelong	100	R32_SFLOAT
3046>0	ulelong	101	R32G32_UINT
3047>0	ulelong	102	R32G32_SINT
3048>0	ulelong	103	R32G32_SFLOAT
3049>0	ulelong	104	R32G32B32_UINT
3050>0	ulelong	105	R32G32B32_SINT
3051>0	ulelong	106	R32G32B32_SFLOAT
3052>0	ulelong	107	R32G32B32A32_UINT
3053>0	ulelong	108	R32G32B32A32_SINT
3054>0	ulelong	109	R32G32B32A32_SFLOAT
3055>0	ulelong	110	R64_UINT
3056>0	ulelong	111	R64_SINT
3057>0	ulelong	112	R64_SFLOAT
3058>0	ulelong	113	R64G64_UINT
3059>0	ulelong	114	R64G64_SINT
3060>0	ulelong	115	R64G64_SFLOAT
3061>0	ulelong	116	R64G64B64_UINT
3062>0	ulelong	117	R64G64B64_SINT
3063>0	ulelong	118	R64G64B64_SFLOAT
3064>0	ulelong	119	R64G64B64A64_UINT
3065>0	ulelong	120	R64G64B64A64_SINT
3066>0	ulelong	121	R64G64B64A64_SFLOAT
3067>0	ulelong	122	B10G11R11_UFLOAT_PACK32
3068>0	ulelong	123	E5B9G9R9_UFLOAT_PACK32
3069>0	ulelong	124	D16_UNORM
3070>0	ulelong	125	X8_D24_UNORM_PACK32
3071>0	ulelong	126	D32_SFLOAT
3072>0	ulelong	127	S8_UINT
3073>0	ulelong	128	D16_UNORM_S8_UINT
3074>0	ulelong	129	D24_UNORM_S8_UINT
3075>0	ulelong	130	D32_SFLOAT_S8_UINT
3076
3077>0	ulelong	131	BC1_RGB_UNORM_BLOCK
3078>0	ulelong	132	BC1_RGB_SRGB_BLOCK
3079>0	ulelong	133	BC1_RGBA_UNORM_BLOCK
3080>0	ulelong	134	BC1_RGBA_SRGB_BLOCK
3081>0	ulelong	135	BC2_UNORM_BLOCK
3082>0	ulelong	136	BC2_SRGB_BLOCK
3083>0	ulelong	137	BC3_UNORM_BLOCK
3084>0	ulelong	138	BC3_SRGB_BLOCK
3085>0	ulelong	139	BC4_UNORM_BLOCK
3086>0	ulelong	140	BC4_SNORM_BLOCK
3087>0	ulelong	141	BC5_UNORM_BLOCK
3088>0	ulelong	142	BC5_SNORM_BLOCK
3089>0	ulelong	143	BC6H_UFLOAT_BLOCK
3090>0	ulelong	144	BC6H_SFLOAT_BLOCK
3091>0	ulelong	145	BC7_UNORM_BLOCK
3092>0	ulelong	146	BC7_SRGB_BLOCK
3093
3094>0	ulelong	147	ETC2_R8G8B8_UNORM_BLOCK
3095>0	ulelong	148	ETC2_R8G8B8_SRGB_BLOCK
3096>0	ulelong	149	ETC2_R8G8B8A1_UNORM_BLOCK
3097>0	ulelong	150	ETC2_R8G8B8A1_SRGB_BLOCK
3098>0	ulelong	151	ETC2_R8G8B8A8_UNORM_BLOCK
3099>0	ulelong	152	ETC2_R8G8B8A8_SRGB_BLOCK
3100
3101>0	ulelong	153	EAC_R11_UNORM_BLOCK
3102>0	ulelong	154	EAC_R11_SNORM_BLOCK
3103>0	ulelong	155	EAC_R11G11_UNORM_BLOCK
3104>0	ulelong	156	EAC_R11G11_SNORM_BLOCK
3105
3106>0	ulelong	157	ASTC_4x4_UNORM_BLOCK
3107>0	ulelong	158	ASTC_4x4_SRGB_BLOCK
3108>0	ulelong	159	ASTC_5x4_UNORM_BLOCK
3109>0	ulelong	160	ASTC_5x4_SRGB_BLOCK
3110>0	ulelong	161	ASTC_5x5_UNORM_BLOCK
3111>0	ulelong	162	ASTC_5x5_SRGB_BLOCK
3112>0	ulelong	163	ASTC_6x5_UNORM_BLOCK
3113>0	ulelong	164	ASTC_6x5_SRGB_BLOCK
3114>0	ulelong	165	ASTC_6x6_UNORM_BLOCK
3115>0	ulelong	166	ASTC_6x6_SRGB_BLOCK
3116>0	ulelong	167	ASTC_8x5_UNORM_BLOCK
3117>0	ulelong	168	ASTC_8x5_SRGB_BLOCK
3118>0	ulelong	169	ASTC_8x6_UNORM_BLOCK
3119>0	ulelong	170	ASTC_8x6_SRGB_BLOCK
3120>0	ulelong	171	ASTC_8x8_UNORM_BLOCK
3121>0	ulelong	172	ASTC_8x8_SRGB_BLOCK
3122>0	ulelong	173	ASTC_10x5_UNORM_BLOCK
3123>0	ulelong	174	ASTC_10x5_SRGB_BLOCK
3124>0	ulelong	175	ASTC_10x6_UNORM_BLOCK
3125>0	ulelong	176	ASTC_10x6_SRGB_BLOCK
3126>0	ulelong	177	ASTC_10x8_UNORM_BLOCK
3127>0	ulelong	178	ASTC_10x8_SRGB_BLOCK
3128>0	ulelong	179	ASTC_10x10_UNORM_BLOCK
3129>0	ulelong	180	ASTC_10x10_SRGB_BLOCK
3130>0	ulelong	181	ASTC_12x10_UNORM_BLOCK
3131>0	ulelong	182	ASTC_12x10_SRGB_BLOCK
3132>0	ulelong	183	ASTC_12x12_UNORM_BLOCK
3133>0	ulelong	184	ASTC_12x12_SRGB_BLOCK
3134
3135>0	ulelong	1000156000	G8B8G8R8_422_UNORM
3136>0	ulelong	1000156001	B8G8R8G8_422_UNORM
3137>0	ulelong	1000156002	G8_B8_R8_3PLANE_420_UNORM
3138>0	ulelong	1000156003	G8_B8R8_2PLANE_420_UNORM
3139>0	ulelong	1000156004	G8_B8_R8_3PLANE_422_UNORM
3140>0	ulelong	1000156005	G8_B8R8_2PLANE_422_UNORM
3141>0	ulelong	1000156006	G8_B8_R8_3PLANE_444_UNORM
3142>0	ulelong	1000156007	R10X6_UNORM_PACK16
3143>0	ulelong	1000156008	R10X6G10X6_UNORM_2PACK16
3144>0	ulelong	1000156009	R10X6G10X6B10X6A10X6_UNORM_4PACK16
3145>0	ulelong	1000156010	G10X6B10X6G10X6R10X6_422_UNORM_4PACK16
3146>0	ulelong	1000156011	B10X6G10X6R10X6G10X6_422_UNORM_4PACK16
3147>0	ulelong	1000156012	G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16
3148>0	ulelong	1000156013	G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16
3149>0	ulelong	1000156014	G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16
3150>0	ulelong	1000156015	G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16
3151>0	ulelong	1000156016	G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16
3152>0	ulelong	1000156017	R12X4_UNORM_PACK16
3153>0	ulelong	1000156018	R12X4G12X4_UNORM_2PACK16
3154>0	ulelong	1000156019	R12X4G12X4B12X4A12X4_UNORM_4PACK16
3155>0	ulelong	1000156020	G12X4B12X4G12X4R12X4_422_UNORM_4PACK16
3156>0	ulelong	1000156021	B12X4G12X4R12X4G12X4_422_UNORM_4PACK16
3157>0	ulelong	1000156022	G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16
3158>0	ulelong	1000156023	G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16
3159>0	ulelong	1000156024	G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16
3160>0	ulelong	1000156025	G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16
3161>0	ulelong	1000156026	G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16
3162>0	ulelong	1000156027	G16B16G16R16_422_UNORM
3163>0	ulelong	1000156028	B16G16R16G16_422_UNORM
3164>0	ulelong	1000156029	G16_B16_R16_3PLANE_420_UNORM
3165>0	ulelong	1000156030	G16_B16R16_2PLANE_420_UNORM
3166>0	ulelong	1000156031	G16_B16_R16_3PLANE_422_UNORM
3167>0	ulelong	1000156032	G16_B16R16_2PLANE_422_UNORM
3168>0	ulelong	1000156033	G16_B16_R16_3PLANE_444_UNORM
3169
3170>0	ulelong	1000054000	PVRTC1_2BPP_UNORM_BLOCK_IMG
3171>0	ulelong	1000054001	PVRTC1_4BPP_UNORM_BLOCK_IMG
3172>0	ulelong	1000054002	PVRTC2_2BPP_UNORM_BLOCK_IMG
3173>0	ulelong	1000054003	PVRTC2_4BPP_UNORM_BLOCK_IMG
3174>0	ulelong	1000054004	PVRTC1_2BPP_SRGB_BLOCK_IMG
3175>0	ulelong	1000054005	PVRTC1_4BPP_SRGB_BLOCK_IMG
3176>0	ulelong	1000054006	PVRTC2_2BPP_SRGB_BLOCK_IMG
3177>0	ulelong	1000054007	PVRTC2_4BPP_SRGB_BLOCK_IMG
3178
3179>0	ulelong	1000066000	ASTC_4x4_SFLOAT_BLOCK_EXT
3180>0	ulelong	1000066001	ASTC_5x4_SFLOAT_BLOCK_EXT
3181>0	ulelong	1000066002	ASTC_5x5_SFLOAT_BLOCK_EXT
3182>0	ulelong	1000066003	ASTC_6x5_SFLOAT_BLOCK_EXT
3183>0	ulelong	1000066004	ASTC_6x6_SFLOAT_BLOCK_EXT
3184>0	ulelong	1000066005	ASTC_8x5_SFLOAT_BLOCK_EXT
3185>0	ulelong	1000066006	ASTC_8x6_SFLOAT_BLOCK_EXT
3186>0	ulelong	1000066007	ASTC_8x8_SFLOAT_BLOCK_EXT
3187>0	ulelong	1000066008	ASTC_10x5_SFLOAT_BLOCK_EXT
3188>0	ulelong	1000066009	ASTC_10x6_SFLOAT_BLOCK_EXT
3189>0	ulelong	1000066010	ASTC_10x8_SFLOAT_BLOCK_EXT
3190>0	ulelong	1000066011	ASTC_10x10_SFLOAT_BLOCK_EXT
3191>0	ulelong	1000066012	ASTC_12x10_SFLOAT_BLOCK_EXT
3192>0	ulelong	1000066013	ASTC_12x12_SFLOAT_BLOCK_EXT
3193
3194# Main KTX2 header.
31950	string	\xABKTX\ 20\xBB\r\n\x1A\n	Khronos KTX2 texture
3196>20	ulelong	x	\b, %u
3197>24	ulelong	>1	x %u
3198>28	ulelong	>1	x %u
3199>32	ulelong	>1	\b, %u layers
3200>36	ulelong	>1	\b, %u faces
3201>40	ulelong	>1	\b, %u mipmaps
3202>44	ulelong	>0	\b,
3203>>44	use	khronos-ktx2-supercompression
3204>12	ulelong	>0	\b,
3205>>12	use	khronos-ktx2-vkFormat
3206
3207# Type: Valve VTF texture.
3208# From: David Korth <gerbilsoft@gerbilsoft.com>
3209# References:
3210# - https://developer.valvesoftware.com/wiki/Valve_Texture_Format
3211
3212# VTF image formats.
32130	name	vtf-image-format
3214>0	ulelong	0	RGBA8888
3215>0	ulelong	1	ABGR8888
3216>0	ulelong	2	RGB888
3217>0	ulelong	3	BGR888
3218>0	ulelong	4	RGB565
3219>0	ulelong	5	I8
3220>0	ulelong	6	IA88
3221>0	ulelong	7	P8
3222>0	ulelong	8	A8
3223>0	ulelong	9	RGB888 (bluescreen)
3224>0	ulelong	10	BGR888 (bluescreen)
3225>0	ulelong	11	ARGB8888
3226>0	ulelong	12	BGRA8888
3227>0	ulelong	13	DXT1
3228>0	ulelong	14	DXT3
3229>0	ulelong	15	DXT5
3230>0	ulelong	16	BGRx8888
3231>0	ulelong	17	BGR565
3232>0	ulelong	18	BGRx5551
3233>0	ulelong	19	BGRA4444
3234>0	ulelong	20	DXT1+A1
3235>0	ulelong	21	BGRA5551
3236>0	ulelong	22	UV88
3237>0	ulelong	23	UVWQ8888
3238>0	ulelong	24	RGBA16161616F
3239>0	ulelong	25	RGBA16161616
3240>0	ulelong	26	UVLX8888
3241
3242# Main VTF header.
32430	string	VTF\0				Valve Texture Format
3244>4	ulelong	x				v%u
3245>8	ulelong	x				\b.%u
3246>0x10	uleshort	x				\b, %u
3247>0x12	uleshort	>1				x %u
3248>4	lequad	0x0000000700000002
3249>>0x3F	uleshort	>1				x %u
3250>0x18	uleshort	>1				\b, %u frames
3251>0x38	ubyte	x				\b, mipmaps: %u
3252>0x34	ulelong	>-1				\b,
3253>>0x34	use	vtf-image-format
3254
3255# Type: Valve VTF3 (PS3) texture.
3256# From: David Korth <gerbilsoft@gerbilsoft.com>
32570	string		VTF3	Valve Texture Format (PS3)
3258>0x14	ubeshort		x	\b, %u
3259>0x16	ubeshort		x	\b x %u
3260>0x10	ubelong&0x2000	0	\b, DXT1
3261>0x10	ubelong&0x2000	0x2000	\b, DXT5
3262
3263# Type: ASTC texture.
3264# From: David Korth <gerbilsoft@gerbilsoft.com>
3265# References:
3266# - https://stackoverflow.com/questions/22600678/determine-internal-format-of-given-astc-compressed-image-through-its-header
3267# - https://stackoverflow.com/a/22682244
32680	ulelong	0x5ca1ab13			ASTC
3269>4	ubyte	x				%u
3270>5	ubyte	x				\bx%u
3271>6	ubyte	>1				\bx%u
3272# X, Y, and Z dimensions are stored as 24-bit LE.
3273# Pretend it's 32-bit and mask off the high byte.
3274>7	ulelong&0x00FFFFFF	x		texture, %u
3275>10	ulelong&0x00FFFFFF	x		x %u
3276>13	ulelong&0x00FFFFFF	>1		x %u
3277
3278# Zebra Metafile graphic
3279# http://www.fileformat.info/format/zbr/egff.htm
32800	ubeshort	0x9a02	Zebra Metafile graphic
3281>2	uleshort 1	(version 1.x)
3282>2	uleshort	2	(version 1.1x or 1.2x)
3283>2	uleshort	3	(version 1.49)
3284>2	uleshort	4	(version 1.50)
3285>4	string	x	(comment = %s)
3286
3287# Microsoft Paint graphic
3288# http://www.fileformat.info/format/mspaint/egff.htm
32890	string	DanM 	icrosoft Paint image data (version 1.x)
3290>4	uleshort	x	(%d
3291>>6	uleshort	x	x %d)
32920	string	LinS 	Microsoft Paint image data (version 2.0)
3293>4	uleshort	x	(%d
3294>>6	uleshort	x	x %d)
3295
3296# reMarkable tablet internal file format (https://www.remarkable.com/)
3297# https://github.com/ax3l/lines-are-beautiful
3298# https://plasma.ninja/blog/devices/remarkable/binary/format/2017/12/26/\
3299#	reMarkable-lines-file-format.html#what-to-do-next
3300# from Axel Huebl
33010		string	reMarkable
3302>11		string	lines
3303>>17		string	with
3304>>>22		string	selections
3305>>>>33		string	and
3306>>>>>37		string	layers
3307>>>>>>43	ulelong	x	reMarkable tablet notebook lines, 1404 x 1872, %x page(s)
3308
3309# newer per-page files for the reMarkable
33100		string	reMarkable
3311>11		string	.lines
3312>>18		string	file,
3313>>>24		string	version=
3314>>>>32		ubyte	x	reMarkable tablet page (v%c), 1404 x 1872,
3315>>>>>43		ulelong	x	%d layer(s)
3316
3317# Type: PVR3 texture.
3318# From: David Korth <gerbilsoft@gerbilsoft.com>
3319# References:
3320# - http://cdn.imgtec.com/sdk-documentation/PVR+File+Format.Specification.pdf
3321
3322# PVR3 pixel formats.
33230	name		pvr3-pixel-format
3324>0	ulelong	0	PVRTC 2bpp RGB
3325>0	ulelong	1	PVRTC 2bpp RGBA
3326>0	ulelong	2	PVRTC 4bpp RGB
3327>0	ulelong	3	PVRTC 4bpp RGBA
3328>0	ulelong	4	PVRTC-II 2bpp
3329>0	ulelong	5	PVRTC-II 4bpp
3330>0	ulelong	6	ETC1
3331>0	ulelong	7	DXT1
3332>0	ulelong	8	DXT2
3333>0	ulelong	9	DXT3
3334>0	ulelong	10	DXT4
3335>0	ulelong	11	DXT5
3336>0	ulelong	12	BC4
3337>0	ulelong	13	BC5
3338>0	ulelong	14	BC6
3339>0	ulelong	15	BC7
3340>0	ulelong	16	UYVY
3341>0	ulelong	17	YUY2
3342>0	ulelong	18	BW1bpp
3343>0	ulelong	19	R9G9B9E5 Shared Exponent
3344>0	ulelong	20	RGBG8888
3345>0	ulelong	21	GRGB8888
3346>0	ulelong	22	ETC2 RGB
3347>0	ulelong	23	ETC2 RGBA
3348>0	ulelong	24	ETC2 RGB A1
3349>0	ulelong	25	EAC R11
3350>0	ulelong	26	EAC RG11
3351>0	ulelong	27	ASTC_4x4
3352>0	ulelong	28	ASTC_5x4
3353>0	ulelong	29	ASTC_5x5
3354>0	ulelong	30	ASTC_6x5
3355>0	ulelong	31	ASTC_6x6
3356>0	ulelong	32	ASTC_8x5
3357>0	ulelong	33	ASTC_8x6
3358>0	ulelong	34	ASTC_8x8
3359>0	ulelong	35	ASTC_10x5
3360>0	ulelong	36	ASTC_10x6
3361>0	ulelong	37	ASTC_10x8
3362>0	ulelong	38	ASTC_10x10
3363>0	ulelong	39	ASTC_12x10
3364>0	ulelong	40	ASTC_12x12
3365>0	ulelong	41	ASTC_3x3x3
3366>0	ulelong	42	ASTC_4x3x3
3367>0	ulelong	43	ASTC_4x4x3
3368>0	ulelong	44	ASTC_4x4x4
3369>0	ulelong	45	ASTC_5x4x4
3370>0	ulelong	46	ASTC_5x5x4
3371>0	ulelong	47	ASTC_5x5x5
3372>0	ulelong	48	ASTC_6x5x5
3373>0	ulelong	49	ASTC_6x6x5
3374>0	ulelong	50	ASTC_6x6x6
3375
33760	string		PVR\x03			PowerVR 3.0 texture:
3377>0x18	ulelong		x	%u x
3378>0x1C	ulelong		x	%u
3379>0x20	ulelong		>1	x %u
3380>0x08	ubyte		x	\b,
3381>0x0C	ulelong		0
3382>>0x08	use	pvr3-pixel-format
3383>0x0C	ulelong		!0
3384>>0x08	ubyte	!0	%c
3385>>>0x0C	ubyte	!0	\b%u
3386>>0x09	ubyte	!0	\b%c
3387>>>0x0D	ubyte	!0	\b%u
3388>>0x0A	ubyte	!0	\b%c
3389>>>0x0E	ubyte	!0	\b%u
3390>>0x0B	ubyte	!0	\b%c
3391>>>0x0F	ubyte	!0	\b%u
3392>0x10	ulelong		1	\b, sRGB
3393>0x04	ulelong&0x02	0x02	\b, premultiplied alpha
3394
33950	string		\x03RVP			PowerVR 3.0 texture: BE,
3396>0x18	ubelong		x	%u x
3397>0x1C	ubelong		x	%u
3398>0x20	ubelong		>1	x %u
3399>0x08	ubyte		x	\b,
3400>0x0C	ubelong		0
3401>>0x08	use	pvr3-pixel-format
3402>0x0C	ubelong		!0
3403>>0x0B	ubyte	!0	%c
3404>>>0x0F	ubyte	!0	\b%u
3405>>0x0A	ubyte	!0	\b%c
3406>>>0x0E	ubyte	!0	\b%u
3407>>0x09	ubyte	!0	\b%c
3408>>>0x0D	ubyte	!0	\b%u
3409>>0x08	ubyte	!0	\b%c
3410>>>0x0C	ubyte	!0	\b%u
3411>0x10	ubelong		1	\b, sRGB
3412>0x04	ubelong&0x02	0x02	\b, premultiplied alpha
3413
3414# Type: Microsoft Xbox XPR0 texture.
3415# From: David Korth <gerbilsoft@gerbilsoft.com>
3416# References:
3417# - https://github.com/Cxbx-Reloaded/Cxbx-Reloaded/blob/develop/src/core/hle/D3D8/XbD3D8Types.h
3418
3419# XPR pixel formats.
34200	name	xbox-xpr-pixel-format
3421>0	ubyte	0x00	L8
3422>0	ubyte	0x01	AL8
3423>0	ubyte	0x02	ARGB1555
3424>0	ubyte	0x03	RGB555
3425>0	ubyte	0x04	ARGB4444
3426>0	ubyte	0x05	RGB565
3427>0	ubyte	0x06	ARGB8888
3428>0	ubyte	0x07	xRGB8888
3429>0	ubyte	0x0B	P8
3430>0	ubyte	0x0C	DXT1
3431>0	ubyte	0x0E	DXT2
3432>0	ubyte	0x0F	DXT4
3433>0	ubyte	0x10	Linear ARGB1555
3434>0	ubyte	0x11	Linear RGB565
3435>0	ubyte	0x12	Linear ARGB8888
3436>0	ubyte	0x13	Linear L8
3437>0	ubyte	0x16	Linear R8B8
3438>0	ubyte	0x17	Linear G8B8
3439>0	ubyte	0x19	A8
3440>0	ubyte	0x1A	A8L8
3441>0	ubyte	0x1B	Linear AL8
3442>0	ubyte	0x1C	Linear RGB555
3443>0	ubyte	0x1D	Linear ARGB4444
3444>0	ubyte	0x1E	Linear xRGB8888
3445>0	ubyte	0x1F	Linear A8
3446>0	ubyte	0x20	Linear A8L8
3447>0	ubyte	0x24	YUY2
3448>0	ubyte	0x25	UYVY
3449>0	ubyte	0x27	L6V5U5
3450>0	ubyte	0x28	V8U8
3451>0	ubyte	0x29	R8B8
3452>0	ubyte	0x2A	D24S8
3453>0	ubyte	0x2B	F24S8
3454>0	ubyte	0x2C	D16
3455>0	ubyte	0x2D	F16
3456>0	ubyte	0x2E	Linear D24S8
3457>0	ubyte	0x2F	Linear F24S8
3458>0	ubyte	0x30	Linear D16
3459>0	ubyte	0x31	Linear F16
3460>0	ubyte	0x32	L16
3461>0	ubyte	0x33	V16U16
3462>0	ubyte	0x35	Linear L16
3463>0	ubyte	0x36	Linear V16U16
3464>0	ubyte	0x37	Linear L6V5U5
3465>0	ubyte	0x38	RGBA5551
3466>0	ubyte	0x39	RGBA4444
3467>0	ubyte	0x3A	QWVU8888
3468>0	ubyte	0x3B	BGRA8888
3469>0	ubyte	0x3C	RGBA8888
3470>0	ubyte	0x3D	Linear RGBA5551
3471>0	ubyte	0x3E	Linear RGBA4444
3472>0	ubyte	0x3F	Linear ABGR8888
3473>0	ubyte	0x40	Linear BGRA8888
3474>0	ubyte	0x41	Linear RGBA8888
3475>0	ubyte	0x64	Vertex Data
3476
34770	string		XPR0	Microsoft Xbox XPR0 texture
3478>0x19	ubyte	x	\b, format:
3479>>0x19	use	xbox-xpr-pixel-format
3480
3481# ILDA Image Data Transfer Format
3482# https://www.ilda.com/resources/StandardsDocs/ILDA_IDTF14_rev011.pdf
3483#
3484# Updated by Chuck Hein (laser@geekdude.com)
3485#
34860	string		ILDA	ILDA Image Data Transfer Format
3487>7	ubyte		0x00	3D Coordinates with Indexed Color
3488>7	ubyte		0x01	2D Coordinates with Indexed Color
3489>7	ubyte		0x02	Color Palette
3490>7	ubyte		0x04	3D Coordinates with True Color
3491>7	ubyte		0x05	2D Coordinates with True Color
3492>8	string		>0	\b, palette %s
3493>16	string		>0	\b, company %s
3494>24	ubeshort	>0	\b, number of records %d
3495>>26	ubeshort	x	\b, palette number %d
3496>>28	ubeshort	>0	\b, number of frames %d
3497>>30	ubyte		>0	\b, projector number %d
3498
3499# Dropbox "lepton" compressed jpeg format
3500# https://github.com/dropbox/lepton
35010	ubelong&0xfffff0ff	0xcf84005a	Lepton image file
3502>2	ubyte			x		(version %d)
3503
3504# Apple QuickTake camera raw images
3505# https://en.wikipedia.org/wiki/Apple_QuickTake
3506# dcraw can decode them
35070	name quicktake
3508>4	ubelong		8
3509>>544	ubeshort	x	\b, %dx
3510>>546	ubeshort	x	\b%d
3511>4	ubelong		4
3512>>546	ubeshort	x	\b, %dx
3513>>544	ubeshort	x	\b%d
3514
35150	string	qktk	Apple QuickTake 100 Raw Image
3516>0	use quicktake
3517
35180	string	qktn
3519>4	ubyte	0	Apple QuickTake 150 Raw Image
3520>4	ubyte	>0	Apple QuickTake 200 Raw Image
3521>0	use quicktake
3522
3523# From:		Joerg Jenderek
3524# URL:		http://fileformats.archiveteam.org/wiki/Corel_Photo-Paint_image
3525# Reference:	http://blog.argasinski.eu/wp-content/uploads/2011/08/cpt-specification-0.01.pdf
35260	string	CPT
3527>4	string	FILE		Corel Photo-Paint image, version
3528# version like 7, 9 or 8
3529>>3	ubyte	x		%c,
3530!:mime	image/x-corel-cpt
3531!:ext	cpt
3532# if blocks_array_offset available jump blockNumber*8 bytes
3533>>0x34	ulelong		>0
3534>>>(0x28.l*8)	ubyte	x
3535# jump additional stored blocks_array_offset bytes forward to object block
3536>>>>&(0x34.l-1) ulelong x	%u
3537# object height in pixels
3538>>>>>&0		ulelong	x	x %u
3539# if no blocks_array_offset available jump blockNumber*8 bytes
3540>>0x34	ulelong		=0
3541>>>(0x28.l*8)	ubyte	x
3542# jump additional 0x13C bytes forward to object block
3543>>>>&0x13B	ulelong x	%u
3544>>>>>&0	ulelong		x	x %u
3545# image color model used
3546>>0x8	ulelong	x
3547>>>0x8	ulelong	0x1		RGB 24 bits
3548>>>0x8	ulelong	0x3		CMYK 24 bits
3549>>>0x8	ulelong	0x5		greyscale 8 bits
3550>>>0x8	ulelong	0x6		black and white 1 bit
3551>>>0x8	ulelong	0xA		RGB 8 bits
3552# palette_length  number of colors * 3 in case of 8-bit RGB paletted image
3553# 0 otherwise. Allowed values: 0 or [1..256] * 3
3554#>>0xC	ulelong	>0		\b, palette length %u
3555>>>>0xC	ulelong/3	<256	\b, %u colors
3556>>>0x8	ulelong	0xB		LAB
3557>>>0x8	ulelong	0xC		RGB 48 bits
3558>>>0x8	ulelong	0xE		greyscale 16 bits
3559# this should not happen
3560>>>0x8	default	x		color model
3561>>>>0x8	ulelong	x		%#x
3562# bit 1 in CPT file flags: UCS-2 file comment present
3563>>0x31	ubyte		&0x02
3564# look for comment marker
3565>>>0x100	search/0xc9d	\4\2\0\0
3566# UCS-2 file comment
3567>>>>&0		lestring16	x	"%s"
3568# if no UCS-2 is present show ANSI file comment[112] if available
3569>>0x31	ubyte&0x02	=0
3570>>>0x3C string		>\0	"%-.112s"
3571# reserved seems to be always 0
3572#>>0x10	ulelong		>0	\b, reserved1 %u
3573# horizontal real dpi = dpi_h * 25.4 / 10**6
3574>>0x18	ulelong	x		\b, %u micro dots/mm
3575# image vertical DPI in CPT DPI unit
3576#>>0x1C	ulelong	x		\b, %u micro dots/mm
3577# reserved seems to be always 0
3578#>>0x20	ulelong		>0	\b, reserved2 %u
3579#>>0x24	ulelong		>0	\b, reserved3 %u
3580# blocks_count; number of CPT_Block blocks. Allowed values: > 0
3581>>0x28	ulelong		x	\b, %u block
3582# plural s
3583>>0x28	ulelong		!1	\bs
3584# CPT file flags
3585# lower byte of CPT file flags: 0x94~CPT9FILE 0x01~often CPT7FILE 0x8C~CPT8FILE
3586#>>0x30	ubyte		x	\b, lower flags %#x
3587# upper byte of CPT file flags:
3588#>>0x31	ubyte		>0	\b, upper flags %#x
3589# bit 2 in CPT file flags: unknown
3590#>>0x31	ubyte		&0x04	\b, with UNKNOWN
3591# bits 3-7 in CPT file flags: unknown, seem to be often 0
3592# show unusual flag combinations
3593>>0x31	ubyte&0xFC	>0
3594>>>0x30	uleshort	x	\b, flags %#4.4x
3595# reserved seems to be always 0
3596#>>0x32	uleshort	>0	\b, reserved4 %#x
3597# blocks_array_offset is always 0 for CPT7 and CPT8 files created by PP7-PP8
3598# typical values like: 13Ch 154h 43Ch 4F0h DA8h
3599>>0x34	ulelong	x		\b, array offset %#x
3600# reserved seems to be often 0
3601>>0x38	ulelong		>0	\b, reserved5 %#x
3602# possible next master block
3603#>>0x100	ubequad		!0	\b, next block=%#llx...
3604# bit 0: ICC profile block present
3605>>0x31	ubyte		&0x01	\b, with ICC profile
3606# check for characteristic string acsp of color profile for DEBUGGING
3607#>>>0x178	string	x	icc=%.4s
3608#	display ICC/ICM color profile by ./icc
3609#>>>0x154	use		color-profile
3610
3611# Type: Crunch compressed texture.
3612# From: David Korth <gerbilsoft@gerbilsoft.com>
3613# References:
3614# - https://github.com/BinomialLLC/crunch/blob/44c8402e24441c7524ca364941fd224ab3b971e9/inc/crn_decomp.h#L267
36150	ubelong		0x4878004A	Crunch compressed texture:
3616>0x0C	ubeshort	x	%u x
3617>0x0E	ubeshort	x	%u
3618>0x12	ubyte		0	\b, DXT1
3619>0x12	ubyte		1	\b, DXT3
3620>0x12	ubyte		2	\b, DXT5
3621>0x12	ubyte		3	\b, DXT5 CCxY
3622>0x12	ubyte		4	\b, DXT5 xGxR
3623>0x12	ubyte		5	\b, DXT5 xGBR
3624>0x12	ubyte		6	\b, DXT5 AGBR
3625>0x12	ubyte		7	\b, DXn XY
3626>0x12	ubyte		8	\b, DXn YX
3627>0x12	ubyte		9	\b, DXT5 Alpha
3628>0x12	ubyte		10	\b, ETC1
3629>0x10	ubyte		>1	\b, %u images
3630>0x11	ubyte		>1	\b, %u faces
3631# TODO: Flags at 0x13? (ubeshort)
3632
3633# Type: BasisLZ compressed texture.
3634# From: David Korth <gerbilsoft@gerbilsoft.com>
3635# References:
3636# - https://github.com/BinomialLLC/basis_universal/blob/master/spec/basis_spec.txt
36370	uleshort		0x4273
3638>0x04	uleshort		0x4D	BasisLZ
3639>>0x02	uleshort		x	v%x compressed texture:
3640>>0x14	ubyte			0	ETC1S
3641>>0x14	ubyte			1	UASTC 4x4
3642>>0x0E	ulelong&0xFFFFFF	>1	\b, %u slices
3643>>0x11	ulelong&0xFFFFFF	>1	\b, %u images
3644>>0x15	uleshort&0x02		2	\b, Y-flipped
3645
3646# MIME registration: https://www.iana.org/assignments/media-types/model/e57
3647# Sample files: http://www.libe57.org/data.html
3648# Reference implementation: http://www.libe57.org/
3649# https://www.ri.cmu.edu/pub_files/2011/1/2011-huber-e57-v3.pdf
36500	string		ASTM-E57	ASTM E57 three-dimensional model
3651!:mime model/e57
3652!:ext e57
3653
3654# QOI [Quite OK Image Format] images
3655# (Horia Mihai David, mihaidavid@posteo.net)
3656#
3657# QOI format by Dominic Szablewski <http://phoboslab.org/>
3658#           <https://qoiformat.org/>
3659#
3660# Based on spec v1.0 (2022.01.05) <https://qoiformat.org/qoi-specification.pdf>
3661
36620	string		qoif	QOI image data
3663!:ext qoi
3664!:mime image/x-qoi
3665# See <https://github.com/phoboslab/qoi/issues/167>
3666>4      ubelong		x       %ux
3667>8      ubelong		x       \b%u,
3668>>13	ubyte		0	s
3669>>>12	ubyte		3	\bRGB
3670>>>12	ubyte		4	\bRGBA
3671>>>12	default		x
3672>>>>12	ubyte		x	\b*bad channels %u*
3673>>>13	ubyte		0	(linear alpha)
3674>>13	ubyte		1
3675>>>12	ubyte		3	RGB
3676>>>12	ubyte		4	RGBA
3677>>>13	ubyte		1	(all channels linear)
3678>>13	default		x
3679>>>13	ubyte		x	*bad colorspace %u*
3680
3681
3682# Type: Godot 3, 4 texture (pixel format)
3683# From: David Korth <gerbilsoft@gerbilsoft.com>
36840	name	godot-pixel-format
3685>0	ulelong&0xFFFFF	0	L8
3686>0	ulelong&0xFFFFF	1	LA8
3687>0	ulelong&0xFFFFF	2	R8
3688>0	ulelong&0xFFFFF	3	RG8
3689>0	ulelong&0xFFFFF	4	RGB8
3690>0	ulelong&0xFFFFF	5	RGBA8
3691>0	ulelong&0xFFFFF	6	RGBA4444
3692>0	ulelong&0xFFFFF	7	RGB565
3693>0	ulelong&0xFFFFF	8	RF
3694>0	ulelong&0xFFFFF	9	RGF
3695>0	ulelong&0xFFFFF	10	RGBF
3696>0	ulelong&0xFFFFF	11	RGBAF
3697>0	ulelong&0xFFFFF	12	RH
3698>0	ulelong&0xFFFFF	13	RGH
3699>0	ulelong&0xFFFFF	14	RGBH
3700>0	ulelong&0xFFFFF	15	RGBAH
3701>0	ulelong&0xFFFFF	16	RGBE9995
3702>0	ulelong&0xFFFFF	17	DXT1
3703>0	ulelong&0xFFFFF	18	DXT3
3704>0	ulelong&0xFFFFF	19	DXT5
3705>0	ulelong&0xFFFFF	20	RGTC_R
3706>0	ulelong&0xFFFFF	21	RGTC_RG
3707>0	ulelong&0xFFFFF	22	BPTC_RGBA
3708>0	ulelong&0xFFFFF	23	BPTC_RGBF
3709>0	ulelong&0xFFFFF	24	BPTC_RGBFU
3710>0	ulelong&0xFFFFF	25	PVRTC1_2
3711>0	ulelong&0xFFFFF	26	PVRTC1_2A
3712>0	ulelong&0xFFFFF	27	PVRTC1_4
3713>0	ulelong&0xFFFFF	28	PVRTC1_4A
3714>0	ulelong&0xFFFFF	29	ETC
3715>0	ulelong&0xFFFFF	30	ETC2_R11
3716>0	ulelong&0xFFFFF	31	ETC2_R11S
3717>0	ulelong&0xFFFFF	32	ETC2_RG11
3718>0	ulelong&0xFFFFF	33	ETC2_RG11S
3719>0	ulelong&0xFFFFF	34	ETC2_RGB8
3720>0	ulelong&0xFFFFF	35	ETC2_RGBA8
3721>0	ulelong&0xFFFFF	36	ETC2_RGB8A1
3722>0	ulelong&0xFFFFF	37	ASTC_8x8
3723
3724# Type: Godot 3, 4 texture (rescale display, width)
3725# From: David Korth <gerbilsoft@gerbilsoft.com>
3726# Shows rescale value if it's not a power of 2.
37270	name	godot-rescale-display-w
3728>0	uleshort	0
3729>0	uleshort	1
3730>0	uleshort	2
3731>0	uleshort	4
3732>0	uleshort	8
3733>0	uleshort	16
3734>0	uleshort	32
3735>0	uleshort	64
3736>0	uleshort	128
3737>0	uleshort	256
3738>0	uleshort	512
3739>0	uleshort	1024
3740>0	uleshort	2048
3741>0	uleshort	4096
3742>0	uleshort	8192
3743>0	uleshort	16384
3744>0	uleshort	32768
3745>0	default		x
3746>>0	uleshort	x	(rescale to %u x
3747
3748# Type: Godot 3, 4 texture (rescale display, height)
3749# From: David Korth <gerbilsoft@gerbilsoft.com>
3750# Shows rescale value if it's not a power of 2.
37510	name	godot-rescale-display-h
3752>0	clear	x
3753>0	uleshort	0
3754>0	uleshort	1
3755>0	uleshort	2
3756>0	uleshort	4
3757>0	uleshort	8
3758>0	uleshort	16
3759>0	uleshort	32
3760>0	uleshort	64
3761>0	uleshort	128
3762>0	uleshort	256
3763>0	uleshort	512
3764>0	uleshort	1024
3765>0	uleshort	2048
3766>0	uleshort	4096
3767>0	uleshort	8192
3768>0	uleshort	16384
3769>0	uleshort	32768
3770>0	default		x
3771>>0	uleshort	x	%u)
3772
3773# Type: Godot 3 texture
3774# From: David Korth <gerbilsoft@gerbilsoft.com>
3775# References:
3776# - https://github.com/godotengine/godot/blob/3.3/core/image.h
3777# - https://github.com/godotengine/godot/blob/3.3/scene/resources/texture.cpp
3778# - https://github.com/godotengine/godot/blob/3.3/scene/resources/texture.h
3779# TODO: Don't show "rescale to" if it matches the image size.
37800	string	GDST	Godot 3 texture:
3781!:ext	stex
3782!:mime	image/x-godot-stex
3783>4	uleshort	x	%u x
3784>8	uleshort	x	%u
3785>6	uleshort	0	\b,
3786>6	uleshort	!0
3787>>6	use	godot-rescale-display-w
3788>>10	use	godot-rescale-display-h
3789>>10	uleshort	x	\b,
3790>16	ulelong&0x800000	!0		has mipmaps,
3791>16	ulelong&0x100000	0x100000	lossless encoding
3792>16	ulelong&0x200000	0x200000	lossy encoding
3793>16	ulelong&0x300000	0
3794>>16	use	godot-pixel-format
3795
3796# Type: Godot 4 texture
3797# From: David Korth <gerbilsoft@gerbilsoft.com>
3798# References:
3799# - https://github.com/godotengine/godot/blob/master/core/io/image.h
3800# - https://github.com/godotengine/godot/blob/master/scene/resources/texture.cpp
3801# - https://github.com/godotengine/godot/blob/master/scene/resources/texture.h
3802# TODO: Don't show "rescale to" if it matches the image size.
38030	string	GST2	Godot 4 texture
3804!:ext	stex
3805!:mime	image/x-godot-stex
3806>4	ulelong		x	v%u:
3807>0x28	uleshort	x	%u x
3808>0x2A	uleshort	x	%u
3809>8	use	godot-rescale-display-w
3810>12	use	godot-rescale-display-h
3811>12	uleshort	x	\b,
3812>0x2C	ulelong		>1	%u mipmaps,
3813>0x30	use	godot-pixel-format
3814>0x24	ulelong		1	\b, embedded PNG image
3815>0x24	ulelong		2	\b, embedded WebP image
3816>0x24	ulelong		3	\b, Basis Universal
3817