xref: /php-src/ext/fileinfo/tests/magic (revision bd24c562)
1# Magic data for file(1) command.
2# Format is described in magic(files), where:
3# files is 5 on V7 and BSD, 4 on SV, and ?? on SVID.
4# Don't edit this file, edit /etc/magic or send your magic improvements
5# to the maintainers, at file@astron.com
6
7#------------------------------------------------------------------------------
8# Localstuff:  file(1) magic for locally observed files
9#
10# $File: Localstuff,v 1.5 2007/01/12 17:38:27 christos Exp $
11# Add any locally observed files here.  Remember:
12# text if readable, executable if runnable binary, data if unreadable.
13
14#------------------------------------------------------------------------------
15# $File: acorn,v 1.8 2021/04/26 15:56:00 christos Exp $
16# acorn:  file(1) magic for files found on Acorn systems
17#
18
19# RISC OS Chunk File Format
20# From RISC OS Programmer's Reference Manual, Appendix D
21# We guess the file type from the type of the first chunk.
220	lelong		0xc3cbc6c5	RISC OS Chunk data
23>12	string		OBJ_		\b, AOF object
24>12	string		LIB_		\b, ALF library
25
26# RISC OS AIF, contains "SWI OS_Exit" at offset 16.
2716	lelong		0xef000011	RISC OS AIF executable
28
29# RISC OS Draw files
30# From RISC OS Programmer's Reference Manual, Appendix E
310	string 		Draw		RISC OS Draw file data
32
33# RISC OS new format font files
34# From RISC OS Programmer's Reference Manual, Appendix E
350	string		FONT\0		RISC OS outline font data,
36>5	byte		x		version %d
370	string		FONT\1		RISC OS 1bpp font data,
38>5	byte		x		version %d
390	string		FONT\4		RISC OS 4bpp font data
40>5	byte		x		version %d
41
42# RISC OS Music files
43# From RISC OS Programmer's Reference Manual, Appendix E
440	string		Maestro\r	RISC OS music file
45>8	byte		x		version %d
46
47>8	byte		x		type %d
48
49# Digital Symphony data files
50# From: Bernard Jungen (bern8817@euphonynet.be)
510		string	\x02\x01\x13\x13\x13\x01\x0d\x10	Digital Symphony sound sample (RISC OS),
52>8		byte	x	version %d,
53>9		pstring	x	named "%s",
54>(9.b+19)	byte	=0	8-bit logarithmic
55>(9.b+19)	byte	=1	LZW-compressed linear
56>(9.b+19)	byte	=2	8-bit linear signed
57>(9.b+19)	byte	=3	16-bit linear signed
58>(9.b+19)	byte	=4	SigmaDelta-compressed linear
59>(9.b+19)	byte	=5	SigmaDelta-compressed logarithmic
60>(9.b+19)	byte	>5	unknown format
61
620	string	\x02\x01\x13\x13\x14\x12\x01\x0b	Digital Symphony song (RISC OS),
63>8	byte	x	version %d,
64>9	byte	=1	1 voice,
65>9	byte	!1	%d voices,
66>10	leshort	=1	1 track,
67>10	leshort	!1	%d tracks,
68>12	leshort	=1	1 pattern
69>12	leshort	!1	%d patterns
70
710	string	\x02\x01\x13\x13\x10\x14\x12\x0e
72>9	byte	=0	Digital Symphony sequence (RISC OS),
73>>8	byte	x	version %d,
74>>10	byte	=1	1 line,
75>>10	byte	!1	%d lines,
76>>11	leshort	=1	1 position
77>>11	leshort	!1	%d positions
78>9	byte	=1	Digital Symphony pattern data (RISC OS),
79>>8	byte	x	version %d,
80>>10	leshort	=1	1 pattern
81>>10	leshort	!1	%d patterns
82
83# From: Joerg Jenderek
84# URL: https://www.kyzer.me.uk/pack/xad/#PackDir
85# reference: https://www.kyzer.me.uk/pack/xad/xad_PackDir.lha/PackDir.c
86# GRR: line below is too general as it matches also "Git pack" in ./revision
870	string	PACK\0
88# check for valid compression method 0-4
89>5	ulelong	<5
90# https://www.riscosopen.org/wiki/documentation/show/Introduction%20To%20Filing%20Systems
91# To skip "Git pack" version 0 test for root directory object like
92# ADFS::RPC.$.websitezip.FONTFIX
93>>9	string	>ADFS\  PackDir archive (RISC OS)
94# TrID labels above as "Acorn PackDir compressed Archive"
95# compression mode y (0 - 4) for GIF LZW with a maximum n bits
96# (y~n,0~12,1~13,2~14,3~15,4~16)
97>>>5	ulelong+12 x	\b, LZW %u-bits compression
98# https://www.filebase.org.uk/filetypes
99# !Packdir compressed archive has three hexadecimal digits code 68E
100!:mime	application/x-acorn-68E
101!:ext	pkd/bin
102# null terminated root directory object like IDEFS::IDE-4.$.Apps.GRAPHICS.!XFMPdemo
103>>>9	string	x	\b, root "%s"
104# load address 0xFFFtttdd, ttt is the object filetype and dddddddddd is time
105>>>>&1	ulelong	x	\b, load address %#x
106# execution address 0xdddddddd dddddddddd is 40 bit unsigned centiseconds since 1.1.1900 UTC
107>>>>&5	ulelong	x	\b, exec address %#x
108# attributes (bits: 0~owner read,1~owner write,3~no delete,4~public read,5~public write)
109>>>>&9	ulelong	x	\b, attributes %#x
110# number of entries in this directory. for root dir 0
111#>>>&13	ulelong	x	\b, entries %#x
112# the entries start here with object name
113>>>>&17	string	x	\b, 1st object "%s"
114
115
116#------------------------------------------------------------------------------
117# $File: adi,v 1.4 2009/09/19 16:28:07 christos Exp $
118# adi: file(1) magic for ADi's objects
119# From Gregory McGarry <g.mcgarry@ieee.org>
120#
1210	leshort		0x521c		COFF DSP21k
122>18	lelong		&02		executable,
123>18	lelong		^02
124>>18	lelong		&01		static object,
125>>18	lelong		^01		relocatable object,
126>18	lelong		&010		stripped
127>18	lelong		^010		not stripped
128
129#------------------------------------------------------------------------------
130# $File: adventure,v 1.18 2019/04/19 00:42:27 christos Exp $
131# adventure: file(1) magic for Adventure game files
132#
133# from Allen Garvin <earendil@faeryland.tamu-commerce.edu>
134# Edited by Dave Chapeskie <dchapes@ddm.on.ca> Jun 28, 1998
135# Edited by Chris Chittleborough <cchittleborough@yahoo.com.au>, March 2002
136#
137# ALAN
138# I assume there are other, lower versions, but these are the only ones I
139# saw in the archive.
1400	beshort	0x0206	ALAN game data
141>2	byte	<10	version 2.6%d
142
143
144# Infocom (see z-machine)
145#------------------------------------------------------------------------------
146# Z-machine:  file(1) magic for Z-machine binaries.
147# Sanity checks by David Griffith <dave@661.org>
148# Updated by Adam Buchbinder <adam.buchbinder@gmail.com>
149#
150#http://www.gnelson.demon.co.uk/zspec/sect11.html
151#https://www.jczorkmid.net/~jpenney/ZSpec11-latest.txt
152#https://en.wikipedia.org/wiki/Z-machine
153# The first byte is the Z-machine revision; it is always between 1 and 8. We
154# had false matches (for instance, inbig5.ocp from the Omega TeX extension as
155# well as an occasional MP3 file), so we sanity-check the version number.
156#
157# It might be possible to sanity-check the release number as well, as it seems
158# (at least in classic Infocom games) to always be a relatively small number,
159# always under 150 or so, but as this isn't rigorous, we'll wait on that until
160# it becomes clear that it's needed.
161#
1620	ubyte			>0
163>0	ubyte			<9
164>>16	belong&0xfe00f0f0	0x3030
165>>>0	ubyte			< 10
166>>>>2	ubeshort		x
167>>>>>18	regex			[0-9][0-9][0-9][0-9][0-9][0-9]
168>>>>>>0	ubyte			< 10	Infocom (Z-machine %d
169>>>>>>>2	ubeshort	x 	\b, Release %d
170>>>>>>>>18	string		>\0	\b, Serial %.6s
171>>>>>>>>18	string		x	\b)
172!:strength + 40
173!:mime	application/x-zmachine
174
175#------------------------------------------------------------------------------
176# Glulx:  file(1) magic for Glulx binaries.
177#
178# David Griffith <dave@661.org>
179# I haven't checked for false matches yet.
180#
1810	string			Glul	Glulx game data
182>4	beshort			x	(Version %d
183>>6	byte			x	\b.%d
184>>8	byte			x	\b.%d)
185>36	string			Info	Compiled by Inform
186!:mime	application/x-glulx
187
188
189# For Quetzal and blorb magic see iff
190
191
192# TADS (Text Adventure Development System) version 2
193#  All files are machine-independent (games compile to byte-code) and are tagged
194#  with a version string of the form "V2.<digit>.<digit>\0".
195#  Game files start with "TADS2 bin\n\r\032\0" then the compiler version.
1960	string	TADS2\ bin	TADS
197>9	belong  !0x0A0D1A00	game data, CORRUPTED
198>9	belong	 0x0A0D1A00
199>>13	string	>\0		%s game data
200!:mime	application/x-tads
201#  Resource files start with "TADS2 rsc\n\r\032\0" then the compiler version.
2020	string	TADS2\ rsc	TADS
203>9	belong  !0x0A0D1A00	resource data, CORRUPTED
204>9	belong	 0x0A0D1A00
205>>13	string	>\0		%s resource data
206!:mime	application/x-tads
207#  Some saved game files start with "TADS2 save/g\n\r\032\0", a little-endian
208#  2-byte length N, the N-char name of the game file *without* a NUL (darn!),
209# "TADS2 save\n\r\032\0" and the interpreter version.
2100	string	TADS2\ save/g	TADS
211>12	belong	!0x0A0D1A00	saved game data, CORRUPTED
212>12	belong	 0x0A0D1A00
213>>(16.s+32) string >\0		%s saved game data
214!:mime	application/x-tads
215#  Other saved game files start with "TADS2 save\n\r\032\0" and the interpreter
216#  version.
2170	string	TADS2\ save	TADS
218>10	belong	!0x0A0D1A00	saved game data, CORRUPTED
219>10	belong	 0x0A0D1A00
220>>14	string	>\0		%s saved game data
221!:mime	application/x-tads
222
223# TADS (Text Adventure Development System) version 3
224#  Game files start with "T3-image\015\012\032"
2250	string	T3-image\015\012\032
226>11	leshort	x		TADS 3 game data (format version %d)
227#  Saved game files start with "T3-state-v####\015\012\032"
228#  where #### is a format version number
2290	string	T3-state-v
230>14	string	\015\012\032	TADS 3 saved game data (format version
231>>10	byte	x		%c
232>>11	byte	x		\b%c
233>>12	byte	x		\b%c
234>>13	byte	x		\b%c)
235!:mime	application/x-t3vm-image
236
237# edited by David Griffith <dave@661.org>
238# Danny Milosavljevic <danny.milo@gmx.net>
239# These are ADRIFT (adventure game standard) game files, extension .taf
240# Checked from source at (http://www.adrift.co/) and various taf files
241# found at the Interactive Fiction Archive (https://ifarchive.org/)
2420	belong  0x3C423FC9
243>4	belong  0x6A87C2CF	Adrift game file version
244>>8	belong  0x94453661	3.80
245>>8	belong  0x94453761	3.90
246>>8	belong  0x93453E61	4.0
247>>8	belong  0x92453E61	5.0
248>>8	default x		unknown
249!:mime	application/x-adrift
250
251#------------------------------------------------------------------------------
252# $File: aes,v 1.1 2020/08/18 21:20:22 christos Exp $
253#
254# aes: magic file for AES encrypted files
255
256# Summary:	AES Crypt Encrypted Data File
257# From:		Joerg Jenderek
258# URL:		https://en.wikipedia.org/wiki/Advanced_Encryption_Standard
259# Reference:	https://www.aescrypt.com/aes_file_format.html
2600	string		AES
261>3	ubyte		<3		AES encrypted data, version %u
262#!:mime	application/aes
263!:mime	application/x-aes-encrypted
264!:ext	aes
265# For Version 2 the encrypted file can have text tags
266>>3	ubyte		=2
267# length of an extension identifier and contents like: 0 24 33 38
268#>>5	ubeshort	x		\b, tag length %u
269#>>5	pstring/H	x		'%s'
270# standard extension tags like CREATED_BY
271>>>7	string		CREATED_BY	\b, created by
272# software product, manufacturer like "SharpAESCrypt v1.3.3.0" "aescrypt (Windows GUI) 3.10" ...
273>>>>&1	string		x		"%s"
274# TODO: more other tags
275# tag CREATED_DATE like YYYY-MM-DD
276# tag CREATED_TIME like HH:MM:SS
277#
278
279
280#------------------------------------------------------------------------------
281# $File: algol68,v 1.4 2021/08/15 06:00:55 christos Exp $
282# algol68:  file(1) magic for Algol 68 source
283#
284# URL: 		https://en.wikipedia.org/wiki/ALGOL_68
285# Reference:	http://www.softwarepreservation.org/projects/ALGOL/report/Algol68_revised_report-AB.pdf
286# Update:	Joerg Jenderek
2870	search/8192	(input,
288>0	use		algol_68
289# graph_2d.a68
2900	regex/4006	\^PROC
291#>&-4	string		x			\b, dBase or Algol "%s"
292# most xBase scripts *.prg with PROCEDURE like: Areacode BarCount Def_mens Vendors
293#>&-4	string		=PROCEDURE		\b, dBase PROCEDURE
294# skip xBase program scripts *.prg with PROCEDURE keyword
295# keyword proc probably followed by white space used to specify algol procedures
296>&-4	string		!PROCEDURE
297>>0	use		algol_68
2980	regex/1024	\bMODE[\t\ ]
299>0	use		algol_68
3000	regex/1024	\bMODE[\t\ ]
301>0	use		algol_68
3020	regex/1024	\bREF[\t\ ]
303>0	use		algol_68
3040	regex/1024	\bFLEX[\t\ ]\*\\[
305>0	use		algol_68
306
307# display information like mime type and file name extension of Algol 68 source text
3080	name		algol_68		Algol 68 source text
309!:mime	text/x-Algol68
310# https://file-extension.net/seeker/file_extension_a68
311!:ext   a68
312#!:ext   a68/alg
313
314#0	regex          	[\t\ ]OD		Algol 68 source text
315#>0	use		algol_68
316#!:mime	text/x-Algol68
317#0	regex          	[\t\ ]FI		Algol 68 source text
318#>0	use		algol_68
319#!:mime	text/x-Algol68
320
321#------------------------------------------------------------------------------
322# $File: allegro,v 1.4 2009/09/19 16:28:07 christos Exp $
323# allegro:  file(1) magic for Allegro datafiles
324# Toby Deshane <hac@shoelace.digivill.net>
325#
3260 belong 0x736C6821   Allegro datafile (packed)
3270 belong 0x736C682E   Allegro datafile (not packed/autodetect)
3280 belong 0x736C682B   Allegro datafile (appended exe data)
329
330#------------------------------------------------------------------------------
331# $File: alliant,v 1.7 2009/09/19 16:28:07 christos Exp $
332# alliant:  file(1) magic for Alliant FX series a.out files
333#
334# If the FX series is the one that had a processor with a 68K-derived
335# instruction set, the "short" should probably become "beshort" and the
336# "long" should probably become "belong".
337# If it's the i860-based one, they should probably become either the
338# big-endian or little-endian versions, depending on the mode they ran
339# the 860 in....
340#
3410	short		0420		0420 Alliant virtual executable
342>2	short		&0x0020		common library
343>16	long		>0		not stripped
3440	short		0421		0421 Alliant compact executable
345>2	short		&0x0020		common library
346>16	long		>0		not stripped
347
348#------------------------------------------------------------------------------
349# $File: amanda,v 1.6 2017/03/17 21:35:28 christos Exp $
350# amanda:  file(1) magic for amanda file format
351#
3520	string	AMANDA:\ 		AMANDA
353>8	string	TAPESTART\ DATE		tape header file,
354>>23	string	X
355>>>25	string	>\ 			Unused %s
356>>23	string	>\ 			DATE %s
357>8	string	FILE\ 			dump file,
358>>13	string	>\ 			DATE %s
359
360#------------------------------------------------------------------------------
361# $File: amigaos,v 1.20 2021/09/20 00:42:19 christos Exp $
362# amigaos:  file(1) magic for AmigaOS binary formats:
363
364#
365# From ignatios@cs.uni-bonn.de (Ignatios Souvatzis)
366#
3670	belong		0x000003fa	AmigaOS shared library
3680	belong		0x000003f3	AmigaOS loadseg()ble executable/binary
3690	belong		0x000003e7	AmigaOS object/library data
370#
3710	beshort		0xe310		Amiga Workbench
372>2	beshort		1
373>>48	byte		1		disk icon
374>>48	byte		2		drawer icon
375>>48	byte		3		tool icon
376>>48	byte		4		project icon
377>>48	byte		5		garbage icon
378>>48	byte		6		device icon
379>>48	byte		7		kickstart icon
380>>48	byte		8		workbench application icon
381>2	beshort		>1		icon, vers. %d
382#
383# various sound formats from the Amiga
384# G=F6tz Waschk <waschk@informatik.uni-rostock.de>
385#
3860	string		FC14		Future Composer 1.4 Module sound file
3870	string		SMOD		Future Composer 1.3 Module sound file
3880	string		AON4artofnoise	Art Of Noise Module sound file
3891	string		MUGICIAN/SOFTEYES Mugician Module sound file
39058	string		SIDMON\ II\ -\ THE	Sidmon 2.0 Module sound file
3910	string		Synth4.0	Synthesis Module sound file
3920	string		ARP.		The Holy Noise Module sound file
3930	string		BeEp\0		JamCracker Module sound file
3940	string		COSO\0		Hippel-COSO Module sound file
395# Too simple (short, pure ASCII, deep), MPi
396#26	string		V.3		Brian Postma's Soundmon Module sound file v3
397#26	string		BPSM		Brian Postma's Soundmon Module sound file v3
398#26	string		V.2		Brian Postma's Soundmon Module sound file v2
399
400# The following are from: "Stefan A. Haubenthal" <polluks@web.de>
401# Update:	Joerg Jenderek
402# URL:		http://fileformats.archiveteam.org/wiki/Amiga_bitmap_font
403# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/f/font-amiga.trid.xml
404#		https://wiki.amigaos.net/wiki/Graphics_Library_and_Text
405# fch_FileID=FCH_ID=0x0f00
4060	beshort		0x0f00
407# skip some AVM powerline firmware images by check for positive number of font elements
408# https://download.avm.de/fritzpowerline/fritzpowerline-1000e-t/other/fritz.os/fritz.powerline_1000ET_01_05.image
409>2	ubeshort	>0		AmigaOS bitmap font
410#!:mime	application/octet-stream
411!:mime	font/x-amiga-font
412!:ext	font
413# struct FontContents fch_FC; 1st fc_FileName [MAXFONTPATH=256]; ~ filename "/" fc_YSize
414# like: topazb/6 suits/8  Excel/9e emerald/17 Franklin/23 DIAMONDS/60.8C
415>>4	string		x		"%.256s"
416# fc_YSize ~number after slash in fc_FileName; like: 6 7 8 9 11 12 16 17 21 23 45 60
417>>260	beshort		x		\b, fc_YSize %u
418# fch_NumEntries; number of FontContents elements like:
419# 1 (often) 2 3 (IconCondensed.font tempfont.font) 4 (Franklin.font) 6 (mcoop.font)
420>>2	ubeshort	>1		\b, %u elements
421#>>2	beshort		x		\b, %u element
422# plural s
423#>>2	beshort		!1		\bs
424# like: 6 7 8 9 11 12 16 17 21 23 45 60
425#>>262	beshort		x		\b, FLAGS_STYLE
426>>2	beshort		>1		\b, 2nd
427# 2nd fc_FileName like: Franklin/36
428>>>264	string		x		"%.256s"
429>>2	beshort		>2		\b, 3rd
430# 3rd fc_FileName like: Franklin/18
431>>>524	string		x		"%.256s"
432# URL:		http://fileformats.archiveteam.org/wiki/Amiga_bitmap_font
433# Reference:	https://wiki.amigaos.net/wiki/Graphics_Library_and_Text
434#		http://mark0.net/download/triddefs_xml.7z/defs/f/font-amiga-var2.trid.xml
435# Note:		called by TrID "Amiga bitmap Font (var.2)"
436# fch_FileID=TFCH_ID=0x0f02
4370	beshort		0x0f02
438# skip possible misidentified foo by check for positive number of font elements
439>2	ubeshort	>0		AmigaOS bitmap font (TFCH)
440#!:mime	application/octet-stream
441!:mime	font/x-amiga-font
442!:ext	font
443# struct TFontContents fch_TFC[]; 1st tfc_FileName [254]; ~ filename "/" fc_YSize
444# like: Abbey/45 XScript/75 XTriumvirate/45
445>>4	string		x		"%.254s"
446# tfc_TagCount; including the TAG_END tag like: 4
447>>258	ubeshort	x		\b, tfc_TagCount %u
448# tfc_YSize ~number after slash in tfc_FileName; like: 45 75
449>>260	beshort		x		\b, tfc_YSize %u
450# tfc_Style; tfc_Flags like: 8022h 8222h
451#>>262	ubeshort	x		\b, FLAGS_STYLE %#x
452# fch_NumEntries; number of FontContents elements like: 1 (abbey.font) 2 (xscript.font xtriumvirate.font)
453>>2	ubeshort	>1		\b, %u elements
454>>2	beshort		>1		\b, 2nd
455# 2nd tfc_FileName like: XScript/45 XTriumvirate/30
456>>>264	string		x		"%.254s"
4570	beshort		0x0f03		AmigaOS outline font
4580	belong		0x80001001	AmigaOS outline tag
4590	string		##\ version	catalog translation
4600	string		EMOD\0		Amiga E module
4618	string		ECXM\0		ECX module
4620	string/c	@database	AmigaGuide file
463
464# Amiga disk types
465#	display information like volume name of root block on Amiga (floppy) disk
4660	name   	adf-rootblock
467# block primary type = T_HEADER (value 2)
468>0x000	ubelong		!2		\b, type %u
469# header_key; unused in rootblock (value 0)
470>0x004	ubelong		!0		\b, header_key %u
471# high_seq; unused (value 0)
472>0x008	ubelong		!0		\b, high_seq %u
473# ht_size; hash table size; 0x48 for flopies
474>0x00c	ubelong		!0x48		\b, hash table size %#x
475# bm_flag; bitmap flag, -1 means VALID
476>0x138	belong		!-1		\b, bitmap flag %#x
477# bm_ext; first bitmap extension block (Hard disks only)
478>0x1A0	ubelong		!0		\b, bitmap extension block %#x
479# name_len; volume name length; diskname[30]; volume name
480>0x1B0	pstring		>\0		\b, "%s"
481# first directory cache block for FFS; otherwise 0
482>0x1F8	ubelong		!0		\b, directory cache block %#x
483# block secondary type = ST_ROOT (value 1)
484>0x1FC	ubelong		!1		\b, sec_type %#x
485#
4860	string		RDSK		Rigid Disk Block
487>160	string		x		on %.24s
488# URL:		http://fileformats.archiveteam.org/wiki/ADF_(Amiga)
489#		https://en.wikipedia.org/wiki/Amiga_Fast_File_System
490# Reference:	http://lclevy.free.fr/adflib/adf_info.html
491# Update:	Joerg Jenderek
492# Note:		created by ADFOpus.exe
493# 		and verified by `unadf -l TURBO_SILVER_SV.ADF`
4940	string		DOS
495# skip DOS Client Message Files like IPXODI.MSG DOSRQSTR.MSG
496>3	ubyte		<8		Amiga
497# https://reposcope.com/mimetype/application/x-amiga-disk-format
498!:mime	application/x-amiga-disk-format
499!:ext	adf
500>>3	ubyte		0		DOS disk
501>>3	ubyte		1		FFS disk
502>>3	ubyte		2		Inter DOS disk
503>>3	ubyte		3		Inter FFS disk
504# For Fastdir mode the international mode is also enabled,
505>>3	ubyte		4		Fastdir DOS disk
506>>3	ubyte		5		Fastdir FFS dis
507# called by TrID "Amiga Disk image File (OFS+INTL+DIRC)"
508>>3	ubyte		6		Inter Fastdir DOS disk
509# called by TrID "Amiga Disk image File (FFS+INTL+DIRC)"
510>>3	ubyte		7		Inter Fastdir FFS disk
511# but according to Wikipedia variants with long name support
512#>>3	ubyte		6		long name DOS disk
513#>>3	ubyte		7		long name FFS disk
514# DOES NOT only work! Partly for file size  ~< FILE_BYTES_MAX=1 MiB defined in ../../src/file.h
515#>>-0		offset	x		\b, %lld bytes
516# Correct file size, but next lines are NOT executed
517#>>-0		offset	901120		(DD 880 KiB floppy)
518# 880 KiB Double Density floppy disk by characteristic hash table size 0x48 and T_HEADER=2
519>>0x6E00C	ubelong	0x48
520>>>0x6E000	ubelong	2		(DD 880 KiB)
521# 1760 KiB High Density floppy disk (1802240 bytes) by characteristic hash table size 0x48
522>>0xDC00C	ubelong	0x48
523>>>0xDC000	ubelong	2		(HD 1760 KiB)
524# Chksum; special block checksum like: 0 0x44ccf4c0 0x51f32cac 0xe33d0e7d ...
525#>>4	ubelong		x		\b, CRC %#x
526# Rootblock: 0 880 (often for DD and HD) 1146049280 (IMAGINE_1_0_DISK_01.ADF TURBO_SILVER_SV.ADF)
527>>8	ubelong		>0		\b, probably root block %d
528# bootblock code
529>>12	quad		!0		\b, bootable
530# assembler instructions: lea exp(pc),a1; moveq 25h,d0; jsr -552(a6)
531>>>12	ubequad	=0x43fa003e70254eae	AmigaDOS 3.0
532>>>12	default	x
533>>>>12	ubequad	!0x43fa003e70254eae	%#llx..
534# 880 KiB Double Density floppy disk (901120 bytes)
535>>0x6E00C	ubelong	0x48
536>>>0x6E000	ubelong	2
537>>>>0x6E000	use			adf-rootblock
538# 1760 KiB High Density floppy disk (1802240 bytes)
539>>0xDC00C	ubelong	0x48
540>>>0xDC000	ubelong	2
541>>>>0xDC000	use			adf-rootblock
542# 1 MiB hard disc by test for T_HEADER=2 and header_key=0=high_seq
543>>0x80000	ubelong	2
544>>>0x80004	quad	0
545>>>>0x80000	use			adf-rootblock
546# 2 MiB hard disc; only works if in ../../src/file.h FILE_BYTES_MAX is raised to 2 MiB
547#>>0x100000	ubelong	x		2 MiB TEST
548#>>0x100000	ubelong	2		\b, 2 MiB hard disc rootblock
549#>>>0x100000	use			adf-rootblock
5500	string		KICK		Kickstart disk
551
552# From: Alex Beregszaszi <alex@fsn.hu>
5530	string		LZX		LZX compressed archive (Amiga)
554
555# From: Przemek Kramarczyk <pkramarczyk@gmail.com>
5560	string 		.KEY		AmigaDOS script
5570	string 		.key		AmigaDOS script
558
559# AMOS Basic file formats
560# https://www.exotica.org.uk/wiki/AMOS_file_formats
5610	string		AMOS\040Basic\040 	AMOS Basic source code
562>11	byte		=0x56 			\b, tested
563>11	byte		=0x76 			\b, untested
5640 	string		AMOS\040Pro		AMOS Basic source code
565>11	byte		=0x56 			\b, tested
566>11	byte		=0x76 			\b, untested
5670	string		AmSp			AMOS Basic sprite bank
568>4	beshort		x			\b, %d sprites
5690	string		AmIc			AMOS Basic icon bank
570>4	beshort		x			\b, %d icons
5710	string		AmBk			AMOS Basic memory bank
572>4	beshort		x			\b, bank number %d
573>8	belong&0xFFFFFFF	x		\b, length %d
574>12	regex		.{8}			\b, type %s
5750	string		AmBs			AMOS Basic memory banks
576>4	beshort		x			\b, %d banks
577
578#------------------------------------------------------------
579# $File: android,v 1.19 2021/04/26 15:56:00 christos Exp $
580# Various android related magic entries
581#------------------------------------------------------------
582
583# Dalvik .dex format. http://retrodev.com/android/dexformat.html
584# From <mkf@google.com> "Mike Fleming"
585# Fixed to avoid regexec 17 errors on some dex files
586# From <diff@lookout.com> "Tim Strazzere"
5870	string	dex\n
588>0	regex	dex\n[0-9]{2}\0	Dalvik dex file
589>4	string	>000			version %s
5900	string	dey\n
591>0	regex	dey\n[0-9]{2}\0	Dalvik dex file (optimized for host)
592>4	string	>000			version %s
593
594# Android bootimg format
595# From https://android.googlesource.com/\
596# platform/system/core/+/master/mkbootimg/bootimg.h
597# https://github.com/djrbliss/loki/blob/master/loki.h#L43
5980		string	ANDROID!	Android bootimg
599>1024	string	LOKI		\b, LOKI'd
600>>1028	lelong	0			\b (boot)
601>>1028	lelong	1			\b (recovery)
602>8		lelong	>0			\b, kernel
603>>12	lelong	>0			\b (%#x)
604>16		lelong	>0			\b, ramdisk
605>>20	lelong	>0			\b (%#x)
606>24		lelong	>0			\b, second stage
607>>28	lelong	>0			\b (%#x)
608>36		lelong	>0			\b, page size: %d
609>38		string	>0			\b, name: %s
610>64		string	>0		 	\b, cmdline (%s)
611
612# Android Backup archive
613# From: Ariel Shkedi
614# Update: Joerg Jenderek
615# URL: https://github.com/android/platform_frameworks_base/blob/\
616# 0bacfd2ba68d21a68a3df345b830bc2a1e515b5a/services/java/com/\
617# android/server/BackupManagerService.java#L2367
618# Reference: https://sourceforge.net/projects/adbextractor/
619#            android-backup-extractor/perl/backupencrypt.pl
620# Note:	only unix line feeds "\n" found
621# After the header comes a tar file
622# If compressed, the entire tar file is compressed with JAVA deflate
623#
624# Include the version number hardcoded with the magic string to avoid
625# false positives
6260	string/b	ANDROID\ BACKUP\n	Android Backup
627# maybe look for some more characteristics like linefeed '\n' or version
628#>16	string		\n
629# No mime-type defined officially
630!:mime	application/x-google-ab
631!:ext	ab
632# on 2nd line version (often 1, 2 on kitkat 4.4.3+, 4 on 7.1.2)
633>15	string		>\0			\b, version %s
634# "1" on 3rd line means compressed
635>17	string		0\n			\b, Not-Compressed
636>17	string		1\n			\b, Compressed
637# The 4th line is encryption "none" or "AES-256"
638# any string as long as it's not the word none (which is matched below)
639>19	string		none\n			\b, Not-Encrypted
640# look for backup content after line with encryption info
641#>>19	search/7	\n
642# data part after header for not encrypted Android Backup
643#>>>&0	ubequad		x	\b, content %#16.16llx...
644# look for zlib compressed by ./compress after message with 1 space at end
645#>>>&0	indirect	x	\b; contains
646# look for tar archive block by ./archive for package name manifest
647>>288	string		ustar	\b; contains
648>>>31	use	tar-file
649# look for zip/jar archive by ./archive ./zip after message with 1 space at end
650#>>2079	search/1025/s	PK\003\004	\b; contains
651#>>>&0	indirect	x
652>19	string		!none
653>>19    regex/1l	\^([^n\n]|n[^o]|no[^n]|non[^e]|none.+).*	\b, Encrypted (%s)
654# Commented out because they don't seem useful to print
655# (but they are part of the header - the tar file comes after them):
656# The 5th line is User Password Salt (128 Hex)
657# string length too high with standard src configuration
658#>>>&1		string	>\0	\b, PASSWORD salt: "%-128.128s"
659#>>>&1		regex/1l .*	\b, Password salt: %s
660# The 6th line is Master Key Checksum Salt (128 Hex)
661#>>>>&1		regex/1l .*	\b, Master salt: %s
662# The 7th line is Number of PBDKF2 Rounds (10000)
663#>>>>>&1	regex/1l .*	\b, PBKDF2 rounds: %s
664# The 8th line is User key Initialization Vector (IV) (32 Hex)
665#>>>>>>&1	regex/1l .*	\b, IV: %s
666#>>>>>>&1	regex/1l .*	\b, IV: %s
667# The 9th line is Master IV+Key+Checksum (192 Hex)
668#>>>>>>>&1	regex/1l .*	\b, Key: %s
669# look for new line separator char after line number 9
670#>>>0x204	ubyte	0x0a	NL found
671#>>>>&1		ubequad	x	\b, Content magic %16.16llx
672
673# *.pit files by Joerg Jenderek
674# https://forum.xda-developers.com/showthread.php?p=9122369
675# https://forum.xda-developers.com/showthread.php?t=816449
676# Partition Information Table for Samsung's smartphone with Android
677# used by flash software Odin
6780		ulelong			0x12349876
679# 1st pit entry marker
680>0x01C	ulequad&0xFFFFFFFCFFFFFFFC	=0x0000000000000000
681# minimal 13 and maximal 18 PIT entries found
682>>4		ulelong			<128	Partition Information Table for Samsung smartphone
683>>>4		ulelong			x	\b, %d entries
684# 1. pit entry
685>>>4		ulelong			>0	\b; #1
686>>>0x01C	use				PIT-entry
687>>>4		ulelong			>1	\b; #2
688>>>0x0A0	use				PIT-entry
689>>>4		ulelong			>2	\b; #3
690>>>0x124	use				PIT-entry
691>>>4		ulelong			>3	\b; #4
692>>>0x1A8	use				PIT-entry
693>>>4		ulelong			>4	\b; #5
694>>>0x22C	use				PIT-entry
695>>>4		ulelong			>5	\b; #6
696>>>0x2B0	use				PIT-entry
697>>>4		ulelong			>6	\b; #7
698>>>0x334	use				PIT-entry
699>>>4		ulelong			>7 	\b; #8
700>>>0x3B8	use				PIT-entry
701>>>4		ulelong			>8 	\b; #9
702>>>0x43C	use				PIT-entry
703>>>4		ulelong			>9	\b; #10
704>>>0x4C0	use				PIT-entry
705>>>4		ulelong			>10	\b; #11
706>>>0x544	use				PIT-entry
707>>>4		ulelong			>11	\b; #12
708>>>0x5C8	use				PIT-entry
709>>>4		ulelong			>12	\b; #13
710>>>>0x64C	use				PIT-entry
711# 14. pit entry
712>>>4		ulelong			>13	\b; #14
713>>>>0x6D0	use				PIT-entry
714>>>4		ulelong			>14	\b; #15
715>>>0x754	use				PIT-entry
716>>>4		ulelong			>15	\b; #16
717>>>0x7D8	use				PIT-entry
718>>>4		ulelong			>16	\b; #17
719>>>0x85C	use				PIT-entry
720# 18. pit entry
721>>>4		ulelong			>17	\b; #18
722>>>0x8E0	use				PIT-entry
723
7240	name			PIT-entry
725# garbage value implies end of pit entries
726>0x00		ulequad&0xFFFFFFFCFFFFFFFC	=0x0000000000000000
727# skip empty partition name
728>>0x24		ubyte				!0
729# partition name
730>>>0x24		string				>\0			%-.32s
731# flags
732>>>0x0C		ulelong&0x00000002		2			\b+RW
733# partition ID:
734# 0~IPL,MOVINAND,GANG;1~PIT,GPT;2~HIDDEN;3~SBL,HIDDEN;4~SBL2,HIDDEN;5~BOOT;6~kernel,RECOVER,misc;7~RECOVER
735# ;11~MODEM;20~efs;21~PARAM;22~FACTORY,SYSTEM;23~DBDATAFS,USERDATA;24~CACHE;80~BOOTLOADER;81~TZSW
736>>>0x08	ulelong		x			(%#x)
737# filename
738>>>0x44		string				>\0			"%-.64s"
739#>>>0x18	ulelong				>0
740# blocksize in 512 byte units ?
741#>>>>0x18	ulelong				x			\b, %db
742# partition size in blocks ?
743#>>>>0x22	ulelong				x			\b*%d
744
745# Android sparse img format
746# From https://android.googlesource.com/\
747# platform/system/core/+/master/libsparse/sparse_format.h
7480		lelong	0xed26ff3a		Android sparse image
749>4		leshort	x			\b, version: %d
750>6		leshort	x			\b.%d
751>16		lelong	x			\b, Total of %d
752>12		lelong	x			\b %d-byte output blocks in
753>20		lelong	x			\b %d input chunks.
754
755# Android binary XML magic
756# In include/androidfw/ResourceTypes.h:
757# RES_XML_TYPE = 0x0003 followed by the size of the header (ResXMLTree_header),
758# which is 8 bytes (2 bytes type + 2 bytes header size + 4 bytes size).
7590	lelong	0x00080003	Android binary XML
760
761# Android cryptfs footer
762# From https://android.googlesource.com/\
763# platform/system/vold/+/refs/heads/master/cryptfs.h
7640	lelong	0xd0b5b1c4	Android cryptfs footer
765>4	leshort	x	\b, version: %d
766>6	leshort	x	\b.%d
767
768# Android Vdex format
769# From https://android.googlesource.com/\
770# platform/art/+/master/runtime/vdex_file.h
7710	string	vdex	Android vdex file,
772>4	string	>000	verifier deps version: %s,
773>8	string	>000	dex section version: %s,
774>12	lelong	>0	number of dex files: %d,
775>16	lelong	>0	verifier deps size: %d
776
777# Android Vdex format, dexfile is currently being updated
778# by android system
779# From https://android.googlesource.com/\
780# platform/art/+/master/dex2oat/dex2oat.cc
7810	string	wdex	Android vdex file, being processed by dex2oat,
782>4	string	>000	verifier deps version: %s,
783>8	string	>000	dex section version: %s,
784>12	lelong	>0	number of dex files: %d,
785>16	lelong	>0	verifier deps size: %d
786
787#------------------------------------------------------------------------------
788# $File: animation,v 1.90 2022/08/16 11:16:39 christos Exp $
789# animation:  file(1) magic for animation/movie formats
790#
791# animation formats
792# MPEG, FLI, DL originally from vax@ccwf.cc.utexas.edu (VaX#n8)
793# FLC, SGI, Apple originally from Daniel Quinlan (quinlan@yggdrasil.com)
794
795# SGI and Apple formats
7960	string		MOVI		Silicon Graphics movie file
797!:mime	video/x-sgi-movie
7984       string          moov            Apple QuickTime
799!:mime	video/quicktime
800>12     string          mvhd            \b movie (fast start)
801>12     string          mdra            \b URL
802>12     string          cmov            \b movie (fast start, compressed header)
803>12     string          rmra            \b multiple URLs
8044       string          mdat            Apple QuickTime movie (unoptimized)
805!:mime	video/quicktime
806#4       string          wide            Apple QuickTime movie (unoptimized)
807#!:mime	video/quicktime
808#4       string          skip            Apple QuickTime movie (modified)
809#!:mime	video/quicktime
810#4       string          free            Apple QuickTime movie (modified)
811#!:mime	video/quicktime
8124       string          idsc            Apple QuickTime image (fast start)
813!:mime	image/x-quicktime
814#4       string          idat            Apple QuickTime image (unoptimized)
815#!:mime	image/x-quicktime
8164       string          pckg            Apple QuickTime compressed archive
817!:mime	application/x-quicktime-player
818
819#### MP4 ####
820# https://www.ftyps.com/ with local additions
821# https://cconcolato.github.io/mp4ra/filetype.html
8224	string		ftyp		ISO Media
823# https://aeroquartet.com/wordpress/2016/03/05/3-xavc-s/
824>8	string		XAVC		\b, MPEG v4 system, Sony XAVC Codec
825>>96	string		x		\b, Audio "%.4s"
826>>118	beshort		x		at %dHz
827>>140	string		x		\b, Video "%.4s"
828>>168	beshort		x		%d
829>>170	beshort		x		\bx%d
830>8	string		3g2		\b, MPEG v4 system, 3GPP2
831!:mime	video/3gpp2
832>>11	byte		4		\b v4 (H.263/AMR GSM 6.10)
833>>11	byte		5		\b v5 (H.263/AMR GSM 6.10)
834>>11	byte		6		\b v6 (ITU H.264/AMR GSM 6.10)
835# https://www.3gpp2.org/Public_html/Specs/C.S0050-B_v1.0_070521.pdf
836# Section 8.1.1, corresponds to a, b, c
837>>11	byte		0x61		\b C.S0050-0 V1.0
838>>11	byte		0x62		\b C.S0050-0-A V1.0.0
839>>11	byte		0x63		\b C.S0050-0-B V1.0
840>8	string		3ge		\b, MPEG v4 system, 3GPP
841!:mime	video/3gpp
842>>11	byte		6		\b, Release %d MBMS Extended Presentations
843>>11	byte		7		\b, Release %d MBMS Extended Presentations
844>>11	byte		9		\b, Release %d MBMS Extended Presentations
845>8	string		3gf		\b, MPEG v4 system, 3GPP
846>>11	byte		9		\b, Release %d File-delivery profile
847>8	string		3gg		\b, MPEG v4 system, 3GPP
848!:mime	video/3gpp
849>>11	byte		6		\b, Release %d General Profile
850>>11	byte		9		\b, Release %d General Profile
851>8	string		3gh		\b, MPEG v4 system, 3GPP
852!:mime	video/3gpp
853>>11	byte		9		\b, Release %d Adaptive Streaming Profile
854>8	string		3gm		\b, MPEG v4 system, 3GPP
855!:mime	video/3gpp
856>>11	byte		9		\b, Release %d Media Segment Profile
857>8	string		3gp		\b, MPEG v4 system, 3GPP
858!:mime	video/3gpp
859>>11	byte		1		\b, Release %d (non existent)
860>>11	byte		2		\b, Release %d (non existent)
861>>11	byte		3		\b, Release %d (non existent)
862>>11	byte		4		\b, Release %d
863>>11	byte		5		\b, Release %d
864>>11	byte		6		\b, Release %d
865>>11	byte		7		\b, Release %d Streaming Servers
866>8	string		3gr		\b, MPEG v4 system, 3GPP
867!:mime	video/3gpp
868>>11	byte		6		\b, Release %d Progressive Download Profile
869>>11	byte		9		\b, Release %d Progressive Download Profile
870>8	string		3gs		\b, MPEG v4 system, 3GPP
871!:mime	video/3gpp
872>>11	byte		6		\b, Release %d Streaming Servers
873>>11	byte		7		\b, Release %d Streaming Servers
874>>11	byte		9		\b, Release %d Streaming Servers
875>8	string		3gt		\b, MPEG v4 system, 3GPP
876!:mime	video/3gpp
877>>11	byte		8		\b, Release %d Media Stream Recording Profile
878>>11	byte		9		\b, Release %d Media Stream Recording Profile
879>8	string		ARRI		\b, MPEG v4 system, ARRI Digital Camera
880!:mime	video/mp4
881>8	string		avc1		\b, MPEG v4 system, 3GPP JVT AVC [ISO 14496-12:2005]
882!:mime	video/mp4
883>8	string		bbxm		\b, Blinkbox Master File: H.264 video/16-bit LE LPCM audio
884!:mime	video/mp4
885>8	string/W	qt		\b, Apple QuickTime movie
886!:mime	video/quicktime
887>8	string		CAEP		\b, Canon Digital Camera
888>8	string		caqv		\b, Casio Digital Camera
889>8	string		CDes		\b, Convergent Design
890>8	string		caaa		\b, CMAF Media Profile - AAC Adaptive Audio
891>8	string		caac		\b, CMAF Media Profile - AAC Core
892>8	string		caqv		\b, Casio Digital Camera	Casio
893>8	string		ccea		\b, CMAF Supplemental Data - CEA-608/708
894>8	string		ccff		\b, Common container file format
895>8	string		cfhd		\b, CMAF Media Profile - AVC HD
896>8	string		cfsd		\b, CMAF Media Profile - AVC SD
897>8	string		chd1		\b, CMAF Media Profile - HEVC HDR10
898>8	string		chdf		\b, CMAF Media Profile - AVC HDHF
899>8	string		chhd		\b, CMAF Media Profile - HEVC HHD8
900>8	string		chh1		\b, CMAF Media Profile - HEVC HHD10
901>8	string		clg1		\b, CMAF Media Profile - HEVC HLG10
902>8	string		cmfc		\b, CMAF Track Format
903>8	string		cmff		\b, CMAF Fragment Format
904>8	string		cmfl		\b, CMAF Chunk Format
905>8	string		cmfs		\b, CMAF Segment Format
906>8	string		cud1		\b, CMAF Media Profile - HEVC UHD10
907>8	string		cud8		\b, CMAF Media Profile - HEVC UHD8
908>8	string		cwvt		\b, CMAF Media Profile - WebVTT
909>8	string		da0a		\b, DMB MAF w/ MPEG Layer II aud, MOT slides, DLS, JPG/PNG/MNG
910>8	string		da0b		\b, DMB MAF, ext DA0A, with 3GPP timed text, DID, TVA, REL, IPMP
911>8	string		da1a		\b, DMB MAF audio with ER-BSAC audio, JPG/PNG/MNG images
912>8	string		da1b		\b, DMB MAF, ext da1a, with 3GPP timed text, DID, TVA, REL, IPMP
913>8	string		da2a		\b, DMB MAF aud w/ HE-AAC v2 aud, MOT slides, DLS, JPG/PNG/MNG
914>8	string		da2b		\b, DMB MAF, ext da2a, with 3GPP timed text, DID, TVA, REL, IPMP
915>8	string		da3a		\b, DMB MAF aud with HE-AAC aud, JPG/PNG/MNG images
916>8	string		da3b		\b, DMB MAF, ext da3a w/ BIFS, 3GPP, DID, TVA, REL, IPMP
917>8	string		dash		\b, MPEG v4 system, Dynamic Adaptive Streaming over HTTP
918!:mime	video/mp4
919>8	string		dby1		\b, MP4 files with Dolby content
920>8	string		dsms		\b, Media Segment DASH conformant
921>8	string		dts1		\b, MP4 track file with audio codecs dtsc dtsh or dtse
922>8	string		dts2		\b, MP4 track file with audio codec dtsx
923>8	string		dts3		\b, MP4 track file with audio codec dtsy
924>8	string		dxo$20		\b, DxO ONE camera
925>8	string		dmb1		\b, DMB MAF supporting all the components defined in the spec
926>8	string		dmpf		\b, Digital Media Project
927>8	string		drc1		\b, Dirac (wavelet compression), encap in ISO base media (MP4)
928>8	string		dv1a		\b, DMB MAF vid w/ AVC vid, ER-BSAC aud, BIFS, JPG/PNG/MNG, TS
929>8	string		dv1b		\b, DMB MAF, ext dv1a, with 3GPP timed text, DID, TVA, REL, IPMP
930>8	string		dv2a		\b, DMB MAF vid w/ AVC vid, HE-AAC v2 aud, BIFS, JPG/PNG/MNG, TS
931>8	string		dv2b		\b, DMB MAF, ext dv2a, with 3GPP timed text, DID, TVA, REL, IPMP
932>8	string		dv3a		\b, DMB MAF vid w/ AVC vid, HE-AAC aud, BIFS, JPG/PNG/MNG, TS
933>8	string		dv3b		\b, DMB MAF, ext dv3a, with 3GPP timed text, DID, TVA, REL, IPMP
934>8	string		dvr1		\b, DVB (.DVB) over RTP
935!:mime	video/vnd.dvb.file
936>8	string		dvt1		\b, DVB (.DVB) over MPEG-2 Transport Stream
937>8	string		emsg		\b, Event message box present
938!:mime	video/vnd.dvb.file
939>8	string		F4V		\b, Video for Adobe Flash Player 9+ (.F4V)
940!:mime	video/mp4
941>8	string		F4P		\b, Protected Video for Adobe Flash Player 9+ (.F4P)
942!:mime	video/mp4
943>8	string		F4A		\b, Audio for Adobe Flash Player 9+ (.F4A)
944!:mime	audio/mp4
945>8	string		F4B		\b, Audio Book for Adobe Flash Player 9+ (.F4B)
946!:mime	audio/mp4
947>8	string		ifrm		\b, Apple iFrame Specification, Version 8.1 Jan 2013
948>8	string		im1i		\b, CMAF Media Profile - IMSC1 Image
949>8	string		im1t		\b, CMAF Media Profile - IMSC1 Text
950>8	string		isc2		\b, ISMACryp 2.0 Encrypted File
951#	?/enc-isoff-generic
952>8	string		iso		\b, MP4 Base Media
953!:mime	video/mp4
954!:ext	mp4
955>>11	string		m 		v1 [ISO 14496-12:2003]
956>>11	string		2		v2 [ISO 14496-12:2005]
957>>11	string		4		v4
958>>11	string		5		v5
959>>11	string		6		v6
960>8	string		isml		\b, MP4 Base Media v2 [ISO 14496-12:2005]
961!:mime	video/mp4
962>8	string		J2P0		\b, JPEG2000 Profile 0
963>8	string		J2P1		\b, JPEG2000 Profile 1
964>8	string/W	jp2		\b, JPEG 2000
965!:mime	image/jp2
966>8	string		JP2		\b, JPEG 2000 Image (.JP2) [ISO 15444-1 ?]
967!:mime	image/jp2
968>8	string		JP20		\b, Unknown, from GPAC samples (prob non-existent)
969>8	string		jpm		\b, JPEG 2000 Compound Image (.JPM) [ISO 15444-6]
970!:mime	image/jpm
971>8	string		jpsi		\b, The JPSearch data interchange format
972>8	string		jpx		\b, JPEG 2000 w/ extensions (.JPX) [ISO 15444-2]
973!:mime	image/jpx
974>8	string		KDDI		\b, 3GPP2 EZmovie for KDDI 3G cellphones
975!:mime	video/3gpp2
976>8	string		LCAG		\b,  Leica digital camera
977>8	string		lmsg		\b, Last Media Segment indicator for ISO base media file format.
978>8	string		M4A 		\b, Apple iTunes ALAC/AAC-LC (.M4A) Audio
979!:mime	audio/x-m4a
980>8	string		M4B 		\b, Apple iTunes ALAC/AAC-LC (.M4B) Audio Book
981!:mime	audio/mp4
982>8	string		M4P 		\b, Apple iTunes ALAC/AAC-LC (.M4P) AES Protected Audio
983!:mime	video/mp4
984>8	string		M4V 		\b, Apple iTunes Video (.M4V) Video
985!:mime	video/x-m4v
986>8	string		M4VH		\b, Apple TV (.M4V)
987!:mime	video/x-m4v
988>8	string		M4VP		\b, Apple iPhone (.M4V)
989!:mime	video/x-m4v
990>8	string		mj2s		\b, Motion JPEG 2000 [ISO 15444-3] Simple Profile
991!:mime	video/mj2
992>8	string		mjp2		\b, Motion JPEG 2000 [ISO 15444-3] General Profile
993>8	string		MFSM		\b, Media File for Samsung video Metadata
994>8	string		MGSV		\b, Sony Home and Mobile Multimedia Platform (HMMP)
995!:mime	video/mj2
996>8	string		mmp4		\b, MPEG-4/3GPP Mobile Profile (.MP4 / .3GP) (for NTT)
997!:mime	video/mp4
998>8	string		mobi		\b, MPEG-4, MOBI format
999!:mime	video/mp4
1000>8	string		mp21		\b, MPEG-21 [ISO/IEC 21000-9]
1001>8	string		mp41		\b, MP4 v1 [ISO 14496-1:ch13]
1002!:mime	video/mp4
1003>8	string		mp42		\b, MP4 v2 [ISO 14496-14]
1004!:mime	video/mp4
1005>8	string		mp71		\b, MP4 w/ MPEG-7 Metadata [per ISO 14496-12]
1006>8	string		mp7t		\b, MPEG v4 system, MPEG v7 XML
1007>8	string		mp7b		\b, MPEG v4 system, MPEG v7 binary XML
1008>8	string		mpuf		\b, Compliance with the MMT Processing Unit format
1009>8	string		msdh		\b, Media Segment conforming to ISO base media file format.
1010>8	string		msix		\b, Media Segment conforming to ISO base media file format.
1011>8	string		mmp4		\b, MPEG v4 system, 3GPP Mobile
1012!:mime	video/mp4
1013>8	string		MPPI		\b, Photo Player, MAF [ISO/IEC 23000-3]
1014>8	string		mqt		\b, Sony / Mobile QuickTime (.MQV) US Pat 7,477,830
1015!:mime	video/quicktime
1016>8	string		MSNV		\b, MPEG-4 (.MP4) for SonyPSP
1017!:mime	audio/mp4
1018>8	string		NDAS		\b, MP4 v2 [ISO 14496-14] Nero Digital AAC Audio
1019!:mime	audio/mp4
1020>8	string		NDSC		\b, MPEG-4 (.MP4) Nero Cinema Profile
1021!:mime	video/mp4
1022>8	string		NDSH		\b, MPEG-4 (.MP4) Nero HDTV Profile
1023!:mime	video/mp4
1024>8	string		NDSM		\b, MPEG-4 (.MP4) Nero Mobile Profile
1025!:mime	video/mp4
1026>8	string		NDSP		\b, MPEG-4 (.MP4) Nero Portable Profile
1027!:mime	video/mp4
1028>8	string		NDSS		\b, MPEG-4 (.MP4) Nero Standard Profile
1029!:mime	video/mp4
1030>8	string		NDXC		\b, H.264/MPEG-4 AVC (.MP4) Nero Cinema Profile
1031!:mime	video/mp4
1032>8	string		NDXH		\b, H.264/MPEG-4 AVC (.MP4) Nero HDTV Profile
1033!:mime	video/mp4
1034>8	string		NDXM		\b, H.264/MPEG-4 AVC (.MP4) Nero Mobile Profile
1035!:mime	video/mp4
1036>8	string		NDXP		\b, H.264/MPEG-4 AVC (.MP4) Nero Portable Profile
1037!:mime	video/mp4
1038>8	string		NDXS		\b, H.264/MPEG-4 AVC (.MP4) Nero Standard Profile
1039>8	string		niko		\b, Nikon Digital Camera
1040!:mime	video/mp4
1041>8	string		odcf  		\b, OMA DCF DRM Format 2.0 (OMA-TS-DRM-DCF-V2_0-20060303-A)
1042>8	string		opf2 		\b, OMA PDCF DRM Format 2.1 (OMA-TS-DRM-DCF-V2_1-20070724-C)
1043>8	string		opx2  		\b, OMA PDCF DRM + XBS ext (OMA-TS-DRM_XBS-V1_0-20070529-C)
1044>8	string		pana		\b, Panasonic Digital Camera
1045>8	string		piff		\b, Protected Interoperable File Format
1046>8	string		pnvi		]b, Panasonic Video Intercom
1047>8	string		qt  		\b, Apple QuickTime (.MOV/QT)
1048!:mime	video/quicktime
1049# HEIF image format
1050# see https://nokiatech.github.io/heif/technical.html
1051>8	string		mif1		\b, HEIF Image
1052!:mime image/heif
1053>8	string		msf1		\b, HEIF Image Sequence
1054!:mime image/heif-sequence
1055>8	string		heic		\b, HEIF Image HEVC Main or Main Still Picture Profile
1056!:mime image/heic
1057>8	string		heix		\b, HEIF Image HEVC Main 10 Profile
1058!:mime image/heic
1059>8	string		hevc		\b, HEIF Image Sequenz HEVC Main or Main Still Picture Profile
1060!:mime image/heic-sequence
1061>8	string		hevx		\b, HEIF Image Sequence HEVC Main 10 Profile
1062!:mime image/heic-sequence
1063# following HEIF brands are not mentioned in the heif technical info currently (Oct 2017)
1064# but used in the reference implementation:
1065# https://github.com/nokiatech/heif/blob/d5e9a21c8ba8df712bdf643021dd9f6518134776/Srcs/reader/hevcimagefilereader.cpp
1066>8	string		heim		\b, HEIF Image L-HEVC
1067!:mime image/heif
1068>8	string		heis		\b, HEIF Image L-HEVC
1069!:mime image/heif
1070>8	string		avic		\b, HEIF Image AVC
1071!:mime image/heif
1072>8	string		hevm		\b, HEIF Image Sequence L-HEVC
1073!:mime image/heif-sequence
1074>8	string		hevs		\b, HEIF Image Sequence L-HEVC
1075!:mime image/heif-sequence
1076>8	string		avcs		\b, HEIF Image Sequence AVC
1077!:mime image/heif-sequence
1078# AVIF image format
1079# see https://aomediacodec.github.io/av1-avif/
1080>8	string		avif		\b, AVIF Image
1081!:mime image/avif
1082>8	string		avis		\b, AVIF Image Sequence
1083!:mime image/avif
1084>8	string		risx		\b, Representation Index Segment for MPEG-2 TS Segments
1085>8	string		ROSS		\b, Ross Video
1086>8	string		sdv		\b, SD Memory Card Video
1087>8	string		ssc1		\b, Samsung stereo, single stream (patent pending)
1088>8	string		ssc2		\b, Samsung stereo, dual stream (patent pending)
1089>8	string		SEAU		\b, Sony Home and Mobile Multimedia Platform (HMMP)
1090>8	string		SEBK		\b, Sony Home and Mobile Multimedia Platform (HMMP)
1091>8	string		senv		\b, Video contents Sony Entertainment Network
1092>8	string		sims		\b, Media Segment for Sub-Indexed Media Segment format
1093>8	string		sisx		\b, Single Index Segment forindex MPEG-2 TS
1094>8	string		ssss		\b, Subsegment Index Segment used to index MPEG-2 Segments
1095>8	string		uvvu		\b, UltraViolet file brand for DECE Common Format
1096
1097# MPEG sequences
1098# Scans for all common MPEG header start codes
10990	 belong		    0x00000001
1100>4	 byte&0x1F	    0x07	   JVT NAL sequence, H.264 video
1101>>5      byte               66             \b, baseline
1102>>5      byte               77             \b, main
1103>>5      byte               88             \b, extended
1104>>7      byte               x              \b @ L %u
11050        belong&0xFFFFFF00  0x00000100
1106>3       byte               0xBA           MPEG sequence
1107!:mime  video/mpeg
1108# http://fileformats.archiveteam.org/wiki/Enhanced_VOB
1109# https://reposcope.com/mimetype/video/mpeg
1110!:ext	vob/evo/mpg/mpeg
1111>>4      byte               &0x40          \b, v2, program multiplex
1112>>4      byte               ^0x40          \b, v1, system multiplex
1113>3       byte               0xBB           MPEG sequence, v1/2, multiplex (missing pack header)
1114>3       byte&0x1F          0x07           MPEG sequence, H.264 video
1115>>4      byte               66             \b, baseline
1116>>4      byte               77             \b, main
1117>>4      byte               88             \b, extended
1118>>6      byte               x              \b @ L %u
1119# GRR too general as it catches also FoxPro Memo example NG.FPT
1120>3       byte               0xB0           MPEG sequence, v4
1121# TODO: maybe this extra line exclude FoxPro Memo example NG.FPT starting with 000001b0 00000100 00000000
1122#>>4      byte               !0             MPEG sequence, v4
1123!:mime  video/mpeg4-generic
1124>>5      belong             0x000001B5
1125>>>9     byte               &0x80
1126>>>>10   byte&0xF0          16             \b, video
1127>>>>10   byte&0xF0          32             \b, still texture
1128>>>>10   byte&0xF0          48             \b, mesh
1129>>>>10   byte&0xF0          64             \b, face
1130>>>9     byte&0xF8          8              \b, video
1131>>>9     byte&0xF8          16             \b, still texture
1132>>>9     byte&0xF8          24             \b, mesh
1133>>>9     byte&0xF8          32             \b, face
1134>>4      byte               1              \b, simple @ L1
1135>>4      byte               2              \b, simple @ L2
1136>>4      byte               3              \b, simple @ L3
1137>>4      byte               4              \b, simple @ L0
1138>>4      byte               17             \b, simple scalable @ L1
1139>>4      byte               18             \b, simple scalable @ L2
1140>>4      byte               33             \b, core @ L1
1141>>4      byte               34             \b, core @ L2
1142>>4      byte               50             \b, main @ L2
1143>>4      byte               51             \b, main @ L3
1144>>4      byte               53             \b, main @ L4
1145>>4      byte               66             \b, n-bit @ L2
1146>>4      byte               81             \b, scalable texture @ L1
1147>>4      byte               97             \b, simple face animation @ L1
1148>>4      byte               98             \b, simple face animation @ L2
1149>>4      byte               99             \b, simple face basic animation @ L1
1150>>4      byte               100            \b, simple face basic animation @ L2
1151>>4      byte               113            \b, basic animation text @ L1
1152>>4      byte               114            \b, basic animation text @ L2
1153>>4      byte               129            \b, hybrid @ L1
1154>>4      byte               130            \b, hybrid @ L2
1155>>4      byte               145            \b, advanced RT simple @ L!
1156>>4      byte               146            \b, advanced RT simple @ L2
1157>>4      byte               147            \b, advanced RT simple @ L3
1158>>4      byte               148            \b, advanced RT simple @ L4
1159>>4      byte               161            \b, core scalable @ L1
1160>>4      byte               162            \b, core scalable @ L2
1161>>4      byte               163            \b, core scalable @ L3
1162>>4      byte               177            \b, advanced coding efficiency @ L1
1163>>4      byte               178            \b, advanced coding efficiency @ L2
1164>>4      byte               179            \b, advanced coding efficiency @ L3
1165>>4      byte               180            \b, advanced coding efficiency @ L4
1166>>4      byte               193            \b, advanced core @ L1
1167>>4      byte               194            \b, advanced core @ L2
1168>>4      byte               209            \b, advanced scalable texture @ L1
1169>>4      byte               210            \b, advanced scalable texture @ L2
1170>>4      byte               211            \b, advanced scalable texture @ L3
1171>>4      byte               225            \b, simple studio @ L1
1172>>4      byte               226            \b, simple studio @ L2
1173>>4      byte               227            \b, simple studio @ L3
1174>>4      byte               228            \b, simple studio @ L4
1175>>4      byte               229            \b, core studio @ L1
1176>>4      byte               230            \b, core studio @ L2
1177>>4      byte               231            \b, core studio @ L3
1178>>4      byte               232            \b, core studio @ L4
1179>>4      byte               240            \b, advanced simple @ L0
1180>>4      byte               241            \b, advanced simple @ L1
1181>>4      byte               242            \b, advanced simple @ L2
1182>>4      byte               243            \b, advanced simple @ L3
1183>>4      byte               244            \b, advanced simple @ L4
1184>>4      byte               245            \b, advanced simple @ L5
1185>>4      byte               247            \b, advanced simple @ L3b
1186>>4      byte               248            \b, FGS @ L0
1187>>4      byte               249            \b, FGS @ L1
1188>>4      byte               250            \b, FGS @ L2
1189>>4      byte               251            \b, FGS @ L3
1190>>4      byte               252            \b, FGS @ L4
1191>>4      byte               253            \b, FGS @ L5
1192>3       byte               0xB5           MPEG sequence, v4
1193!:mime  video/mpeg4-generic
1194>>4      byte               &0x80
1195>>>5     byte&0xF0          16             \b, video (missing profile header)
1196>>>5     byte&0xF0          32             \b, still texture (missing profile header)
1197>>>5     byte&0xF0          48             \b, mesh (missing profile header)
1198>>>5     byte&0xF0          64             \b, face (missing profile header)
1199>>4      byte&0xF8          8              \b, video (missing profile header)
1200>>4      byte&0xF8          16             \b, still texture (missing profile header)
1201>>4      byte&0xF8          24             \b, mesh (missing profile header)
1202>>4      byte&0xF8          32             \b, face (missing profile header)
1203>3       byte               0xB3           MPEG sequence
1204!:mime  video/mpeg
1205>>12     belong             0x000001B8     \b, v1, progressive Y'CbCr 4:2:0 video
1206>>12     belong             0x000001B2     \b, v1, progressive Y'CbCr 4:2:0 video
1207>>12     belong             0x000001B5     \b, v2,
1208>>>16    byte&0x0F          1              \b HP
1209>>>16    byte&0x0F          2              \b Spt
1210>>>16    byte&0x0F          3              \b SNR
1211>>>16    byte&0x0F          4              \b MP
1212>>>16    byte&0x0F          5              \b SP
1213>>>17    byte&0xF0          64             \b@HL
1214>>>17    byte&0xF0          96             \b@H-14
1215>>>17    byte&0xF0          128            \b@ML
1216>>>17    byte&0xF0          160            \b@LL
1217>>>17    byte               &0x08          \b progressive
1218>>>17    byte               ^0x08          \b interlaced
1219>>>17    byte&0x06          2              \b Y'CbCr 4:2:0 video
1220>>>17    byte&0x06          4              \b Y'CbCr 4:2:2 video
1221>>>17    byte&0x06          6              \b Y'CbCr 4:4:4 video
1222>>11     byte               &0x02
1223>>>75    byte               &0x01
1224>>>>140  belong             0x000001B8     \b, v1, progressive Y'CbCr 4:2:0 video
1225>>>>140  belong             0x000001B2     \b, v1, progressive Y'CbCr 4:2:0 video
1226>>>>140  belong             0x000001B5     \b, v2,
1227>>>>>144 byte&0x0F          1              \b HP
1228>>>>>144 byte&0x0F          2              \b Spt
1229>>>>>144 byte&0x0F          3              \b SNR
1230>>>>>144 byte&0x0F          4              \b MP
1231>>>>>144 byte&0x0F          5              \b SP
1232>>>>>145 byte&0xF0          64             \b@HL
1233>>>>>145 byte&0xF0          96             \b@H-14
1234>>>>>145 byte&0xF0          128            \b@ML
1235>>>>>145 byte&0xF0          160            \b@LL
1236>>>>>145 byte               &0x08          \b progressive
1237>>>>>145 byte               ^0x08          \b interlaced
1238>>>>>145 byte&0x06          2              \b Y'CbCr 4:2:0 video
1239>>>>>145 byte&0x06          4              \b Y'CbCr 4:2:2 video
1240>>>>>145 byte&0x06          6              \b Y'CbCr 4:4:4 video
1241>>76    belong             0x000001B8     \b, v1, progressive Y'CbCr 4:2:0 video
1242>>76    belong             0x000001B2     \b, v1, progressive Y'CbCr 4:2:0 video
1243>>76    belong             0x000001B5     \b, v2,
1244>>>80   byte&0x0F          1              \b HP
1245>>>80   byte&0x0F          2              \b Spt
1246>>>80   byte&0x0F          3              \b SNR
1247>>>80   byte&0x0F          4              \b MP
1248>>>80   byte&0x0F          5              \b SP
1249>>>81   byte&0xF0          64             \b@HL
1250>>>81   byte&0xF0          96             \b@H-14
1251>>>81   byte&0xF0          128            \b@ML
1252>>>81   byte&0xF0          160            \b@LL
1253>>>81   byte               &0x08          \b progressive
1254>>>81   byte               ^0x08          \b interlaced
1255>>>81   byte&0x06          2              \b Y'CbCr 4:2:0 video
1256>>>81   byte&0x06          4              \b Y'CbCr 4:2:2 video
1257>>>81   byte&0x06          6              \b Y'CbCr 4:4:4 video
1258>>4      belong&0xFFFFFF00  0x78043800     \b, HD-TV 1920P
1259>>>7     byte&0xF0          0x10           \b, 16:9
1260>>4      belong&0xFFFFFF00  0x50002D00     \b, SD-TV 1280I
1261>>>7     byte&0xF0          0x10           \b, 16:9
1262>>4      belong&0xFFFFFF00  0x30024000     \b, PAL Capture
1263>>>7     byte&0xF0          0x10           \b, 4:3
1264>>4      beshort&0xFFF0     0x2C00         \b, 4CIF
1265>>>5     beshort&0x0FFF     0x01E0         \b NTSC
1266>>>5     beshort&0x0FFF     0x0240         \b PAL
1267>>>7     byte&0xF0          0x20           \b, 4:3
1268>>>7     byte&0xF0          0x30           \b, 16:9
1269>>>7     byte&0xF0          0x40           \b, 11:5
1270>>>7     byte&0xF0          0x80           \b, PAL 4:3
1271>>>7     byte&0xF0          0xC0           \b, NTSC 4:3
1272>>4      belong&0xFFFFFF00  0x2801E000     \b, LD-TV 640P
1273>>>7     byte&0xF0          0x10           \b, 4:3
1274>>4      belong&0xFFFFFF00  0x1400F000     \b, 320x240
1275>>>7     byte&0xF0          0x10           \b, 4:3
1276>>4      belong&0xFFFFFF00  0x0F00A000     \b, 240x160
1277>>>7     byte&0xF0          0x10           \b, 4:3
1278>>4      belong&0xFFFFFF00  0x0A007800     \b, 160x120
1279>>>7     byte&0xF0          0x10           \b, 4:3
1280>>4      beshort&0xFFF0     0x1600         \b, CIF
1281>>>5     beshort&0x0FFF     0x00F0         \b NTSC
1282>>>5     beshort&0x0FFF     0x0120         \b PAL
1283>>>7     byte&0xF0          0x20           \b, 4:3
1284>>>7     byte&0xF0          0x30           \b, 16:9
1285>>>7     byte&0xF0          0x40           \b, 11:5
1286>>>7     byte&0xF0          0x80           \b, PAL 4:3
1287>>>7     byte&0xF0          0xC0           \b, NTSC 4:3
1288>>>5     beshort&0x0FFF     0x0240         \b PAL 625
1289>>>>7    byte&0xF0          0x20           \b, 4:3
1290>>>>7    byte&0xF0          0x30           \b, 16:9
1291>>>>7    byte&0xF0          0x40           \b, 11:5
1292>>4      beshort&0xFFF0     0x2D00         \b, CCIR/ITU
1293>>>5     beshort&0x0FFF     0x01E0         \b NTSC 525
1294>>>5     beshort&0x0FFF     0x0240         \b PAL 625
1295>>>7     byte&0xF0          0x20           \b, 4:3
1296>>>7     byte&0xF0          0x30           \b, 16:9
1297>>>7     byte&0xF0          0x40           \b, 11:5
1298>>4      beshort&0xFFF0     0x1E00         \b, SVCD
1299>>>5     beshort&0x0FFF     0x01E0         \b NTSC 525
1300>>>5     beshort&0x0FFF     0x0240         \b PAL 625
1301>>>7     byte&0xF0          0x20           \b, 4:3
1302>>>7     byte&0xF0          0x30           \b, 16:9
1303>>>7     byte&0xF0          0x40           \b, 11:5
1304>>7      byte&0x0F          1              \b, 23.976 fps
1305>>7      byte&0x0F          2              \b, 24 fps
1306>>7      byte&0x0F          3              \b, 25 fps
1307>>7      byte&0x0F          4              \b, 29.97 fps
1308>>7      byte&0x0F          5              \b, 30 fps
1309>>7      byte&0x0F          6              \b, 50 fps
1310>>7      byte&0x0F          7              \b, 59.94 fps
1311>>7      byte&0x0F          8              \b, 60 fps
1312>>11     byte               &0x04          \b, Constrained
1313
1314# MPEG ADTS Audio (*.mpx/mxa/aac)
1315# from dreesen@math.fu-berlin.de
1316# modified to fully support MPEG ADTS
1317
1318# MP3, M1A
1319# modified by Joerg Jenderek
1320# GRR the original test are too common for many DOS files
1321# so don't accept as MP3 until we've tested the rate
1322# But also beat GEMDOS fonts
13230       beshort&0xFFFE  0xFFFA
1324# rates
1325>2	byte&0xF0	!0
1326>>2	byte&0xF0	!0xF0		MPEG ADTS, layer III, v1
1327!:strength +20
1328!:mime	audio/mpeg
1329>2	byte&0xF0	0x10		\b, 32 kbps
1330>2	byte&0xF0	0x20		\b, 40 kbps
1331>2	byte&0xF0	0x30		\b, 48 kbps
1332>2	byte&0xF0	0x40		\b, 56 kbps
1333>2	byte&0xF0	0x50		\b, 64 kbps
1334>2	byte&0xF0	0x60		\b, 80 kbps
1335>2	byte&0xF0	0x70		\b, 96 kbps
1336>2	byte&0xF0	0x80		\b, 112 kbps
1337>2	byte&0xF0	0x90		\b, 128 kbps
1338>2	byte&0xF0	0xA0		\b, 160 kbps
1339>2	byte&0xF0	0xB0		\b, 192 kbps
1340>2	byte&0xF0	0xC0		\b, 224 kbps
1341>2	byte&0xF0	0xD0		\b, 256 kbps
1342>2	byte&0xF0	0xE0		\b, 320 kbps
1343# timing
1344>2	byte&0x0C	0x00		\b, 44.1 kHz
1345>2	byte&0x0C	0x04		\b, 48 kHz
1346>2	byte&0x0C	0x08		\b, 32 kHz
1347# channels/options
1348>3	byte&0xC0	0x00		\b, Stereo
1349>3	byte&0xC0	0x40		\b, JntStereo
1350>3	byte&0xC0	0x80		\b, 2x Monaural
1351>3	byte&0xC0	0xC0		\b, Monaural
1352#>1	byte		^0x01		\b, Data Verify
1353#>2	byte		&0x02		\b, Packet Pad
1354#>2	byte		&0x01		\b, Custom Flag
1355#>3	byte		&0x08		\b, Copyrighted
1356#>3	byte		&0x04		\b, Original Source
1357#>3	byte&0x03	1		\b, NR: 50/15 ms
1358#>3	byte&0x03	3		\b, NR: CCIT J.17
1359
1360# MP2, M1A
13610       beshort&0xFFFE  0xFFFC         MPEG ADTS, layer II, v1
1362!:mime	audio/mpeg
1363# rates
1364>2      byte&0xF0       0x10           \b,  32 kbps
1365>2      byte&0xF0       0x20           \b,  48 kbps
1366>2      byte&0xF0       0x30           \b,  56 kbps
1367>2      byte&0xF0       0x40           \b,  64 kbps
1368>2      byte&0xF0       0x50           \b,  80 kbps
1369>2      byte&0xF0       0x60           \b,  96 kbps
1370>2      byte&0xF0       0x70           \b, 112 kbps
1371>2      byte&0xF0       0x80           \b, 128 kbps
1372>2      byte&0xF0       0x90           \b, 160 kbps
1373>2      byte&0xF0       0xA0           \b, 192 kbps
1374>2      byte&0xF0       0xB0           \b, 224 kbps
1375>2      byte&0xF0       0xC0           \b, 256 kbps
1376>2      byte&0xF0       0xD0           \b, 320 kbps
1377>2      byte&0xF0       0xE0           \b, 384 kbps
1378# timing
1379>2      byte&0x0C       0x00           \b, 44.1 kHz
1380>2      byte&0x0C       0x04           \b, 48 kHz
1381>2      byte&0x0C       0x08           \b, 32 kHz
1382# channels/options
1383>3      byte&0xC0       0x00           \b, Stereo
1384>3      byte&0xC0       0x40           \b, JntStereo
1385>3      byte&0xC0       0x80           \b, 2x Monaural
1386>3      byte&0xC0       0xC0           \b, Monaural
1387#>1     byte            ^0x01          \b, Data Verify
1388#>2     byte            &0x02          \b, Packet Pad
1389#>2     byte            &0x01          \b, Custom Flag
1390#>3     byte            &0x08          \b, Copyrighted
1391#>3     byte            &0x04          \b, Original Source
1392#>3     byte&0x03       1              \b, NR: 50/15 ms
1393#>3     byte&0x03       3              \b, NR: CCIT J.17
1394
1395# MPA, M1A
1396# updated by Joerg Jenderek
1397# GRR the original test are too common for many DOS files, so test 32 <= kbits <= 448
1398# GRR this test is still too general as it catches a BOM of UTF-16 files (0xFFFE)
1399# FIXME: Almost all little endian UTF-16 text with BOM are clobbered by these entries
1400#0	beshort&0xFFFE		0xFFFE
1401#>2	ubyte&0xF0	>0x0F
1402#>>2	ubyte&0xF0	<0xE1		MPEG ADTS, layer I, v1
1403## rate
1404#>>>2      byte&0xF0       0x10           \b,  32 kbps
1405#>>>2      byte&0xF0       0x20           \b,  64 kbps
1406#>>>2      byte&0xF0       0x30           \b,  96 kbps
1407#>>>2      byte&0xF0       0x40           \b, 128 kbps
1408#>>>2      byte&0xF0       0x50           \b, 160 kbps
1409#>>>2      byte&0xF0       0x60           \b, 192 kbps
1410#>>>2      byte&0xF0       0x70           \b, 224 kbps
1411#>>>2      byte&0xF0       0x80           \b, 256 kbps
1412#>>>2      byte&0xF0       0x90           \b, 288 kbps
1413#>>>2      byte&0xF0       0xA0           \b, 320 kbps
1414#>>>2      byte&0xF0       0xB0           \b, 352 kbps
1415#>>>2      byte&0xF0       0xC0           \b, 384 kbps
1416#>>>2      byte&0xF0       0xD0           \b, 416 kbps
1417#>>>2      byte&0xF0       0xE0           \b, 448 kbps
1418## timing
1419#>>>2      byte&0x0C       0x00           \b, 44.1 kHz
1420#>>>2      byte&0x0C       0x04           \b, 48 kHz
1421#>>>2      byte&0x0C       0x08           \b, 32 kHz
1422## channels/options
1423#>>>3      byte&0xC0       0x00           \b, Stereo
1424#>>>3      byte&0xC0       0x40           \b, JntStereo
1425#>>>3      byte&0xC0       0x80           \b, 2x Monaural
1426#>>>3      byte&0xC0       0xC0           \b, Monaural
1427##>1     byte            ^0x01          \b, Data Verify
1428##>2     byte            &0x02          \b, Packet Pad
1429##>2     byte            &0x01          \b, Custom Flag
1430##>3     byte            &0x08          \b, Copyrighted
1431##>3     byte            &0x04          \b, Original Source
1432##>3     byte&0x03       1              \b, NR: 50/15 ms
1433##>3     byte&0x03       3              \b, NR: CCIT J.17
1434
1435# MP3, M2A
14360       beshort&0xFFFE  0xFFF2         MPEG ADTS, layer III, v2
1437!:mime	audio/mpeg
1438# rate
1439>2      byte&0xF0       0x10           \b,   8 kbps
1440>2      byte&0xF0       0x20           \b,  16 kbps
1441>2      byte&0xF0       0x30           \b,  24 kbps
1442>2      byte&0xF0       0x40           \b,  32 kbps
1443>2      byte&0xF0       0x50           \b,  40 kbps
1444>2      byte&0xF0       0x60           \b,  48 kbps
1445>2      byte&0xF0       0x70           \b,  56 kbps
1446>2      byte&0xF0       0x80           \b,  64 kbps
1447>2      byte&0xF0       0x90           \b,  80 kbps
1448>2      byte&0xF0       0xA0           \b,  96 kbps
1449>2      byte&0xF0       0xB0           \b, 112 kbps
1450>2      byte&0xF0       0xC0           \b, 128 kbps
1451>2      byte&0xF0       0xD0           \b, 144 kbps
1452>2      byte&0xF0       0xE0           \b, 160 kbps
1453# timing
1454>2      byte&0x0C       0x00           \b, 22.05 kHz
1455>2      byte&0x0C       0x04           \b, 24 kHz
1456>2      byte&0x0C       0x08           \b, 16 kHz
1457# channels/options
1458>3      byte&0xC0       0x00           \b, Stereo
1459>3      byte&0xC0       0x40           \b, JntStereo
1460>3      byte&0xC0       0x80           \b, 2x Monaural
1461>3      byte&0xC0       0xC0           \b, Monaural
1462#>1     byte            ^0x01          \b, Data Verify
1463#>2     byte            &0x02          \b, Packet Pad
1464#>2     byte            &0x01          \b, Custom Flag
1465#>3     byte            &0x08          \b, Copyrighted
1466#>3     byte            &0x04          \b, Original Source
1467#>3     byte&0x03       1              \b, NR: 50/15 ms
1468#>3     byte&0x03       3              \b, NR: CCIT J.17
1469
1470# MP2, M2A
14710       beshort&0xFFFE  0xFFF4         MPEG ADTS, layer II, v2
1472!:mime	audio/mpeg
1473# rate
1474>2      byte&0xF0       0x10           \b,   8 kbps
1475>2      byte&0xF0       0x20           \b,  16 kbps
1476>2      byte&0xF0       0x30           \b,  24 kbps
1477>2      byte&0xF0       0x40           \b,  32 kbps
1478>2      byte&0xF0       0x50           \b,  40 kbps
1479>2      byte&0xF0       0x60           \b,  48 kbps
1480>2      byte&0xF0       0x70           \b,  56 kbps
1481>2      byte&0xF0       0x80           \b,  64 kbps
1482>2      byte&0xF0       0x90           \b,  80 kbps
1483>2      byte&0xF0       0xA0           \b,  96 kbps
1484>2      byte&0xF0       0xB0           \b, 112 kbps
1485>2      byte&0xF0       0xC0           \b, 128 kbps
1486>2      byte&0xF0       0xD0           \b, 144 kbps
1487>2      byte&0xF0       0xE0           \b, 160 kbps
1488# timing
1489>2      byte&0x0C       0x00           \b, 22.05 kHz
1490>2      byte&0x0C       0x04           \b, 24 kHz
1491>2      byte&0x0C       0x08           \b, 16 kHz
1492# channels/options
1493>3      byte&0xC0       0x00           \b, Stereo
1494>3      byte&0xC0       0x40           \b, JntStereo
1495>3      byte&0xC0       0x80           \b, 2x Monaural
1496>3      byte&0xC0       0xC0           \b, Monaural
1497#>1     byte            ^0x01          \b, Data Verify
1498#>2     byte            &0x02          \b, Packet Pad
1499#>2     byte            &0x01          \b, Custom Flag
1500#>3     byte            &0x08          \b, Copyrighted
1501#>3     byte            &0x04          \b, Original Source
1502#>3     byte&0x03       1              \b, NR: 50/15 ms
1503#>3     byte&0x03       3              \b, NR: CCIT J.17
1504
1505# MPA, M2A
15060       beshort&0xFFFE  0xFFF6         MPEG ADTS, layer I, v2
1507!:mime	audio/mpeg
1508# rate
1509>2      byte&0xF0       0x10           \b,  32 kbps
1510>2      byte&0xF0       0x20           \b,  48 kbps
1511>2      byte&0xF0       0x30           \b,  56 kbps
1512>2      byte&0xF0       0x40           \b,  64 kbps
1513>2      byte&0xF0       0x50           \b,  80 kbps
1514>2      byte&0xF0       0x60           \b,  96 kbps
1515>2      byte&0xF0       0x70           \b, 112 kbps
1516>2      byte&0xF0       0x80           \b, 128 kbps
1517>2      byte&0xF0       0x90           \b, 144 kbps
1518>2      byte&0xF0       0xA0           \b, 160 kbps
1519>2      byte&0xF0       0xB0           \b, 176 kbps
1520>2      byte&0xF0       0xC0           \b, 192 kbps
1521>2      byte&0xF0       0xD0           \b, 224 kbps
1522>2      byte&0xF0       0xE0           \b, 256 kbps
1523# timing
1524>2      byte&0x0C       0x00           \b, 22.05 kHz
1525>2      byte&0x0C       0x04           \b, 24 kHz
1526>2      byte&0x0C       0x08           \b, 16 kHz
1527# channels/options
1528>3      byte&0xC0       0x00           \b, Stereo
1529>3      byte&0xC0       0x40           \b, JntStereo
1530>3      byte&0xC0       0x80           \b, 2x Monaural
1531>3      byte&0xC0       0xC0           \b, Monaural
1532#>1     byte            ^0x01          \b, Data Verify
1533#>2     byte            &0x02          \b, Packet Pad
1534#>2     byte            &0x01          \b, Custom Flag
1535#>3     byte            &0x08          \b, Copyrighted
1536#>3     byte            &0x04          \b, Original Source
1537#>3     byte&0x03       1              \b, NR: 50/15 ms
1538#>3     byte&0x03       3              \b, NR: CCIT J.17
1539
1540# MP3, M25A
15410       beshort&0xFFFE  0xFFE2         MPEG ADTS, layer III,  v2.5
1542!:mime	audio/mpeg
1543# rate
1544>2      byte&0xF0       0x10           \b,   8 kbps
1545>2      byte&0xF0       0x20           \b,  16 kbps
1546>2      byte&0xF0       0x30           \b,  24 kbps
1547>2      byte&0xF0       0x40           \b,  32 kbps
1548>2      byte&0xF0       0x50           \b,  40 kbps
1549>2      byte&0xF0       0x60           \b,  48 kbps
1550>2      byte&0xF0       0x70           \b,  56 kbps
1551>2      byte&0xF0       0x80           \b,  64 kbps
1552>2      byte&0xF0       0x90           \b,  80 kbps
1553>2      byte&0xF0       0xA0           \b,  96 kbps
1554>2      byte&0xF0       0xB0           \b, 112 kbps
1555>2      byte&0xF0       0xC0           \b, 128 kbps
1556>2      byte&0xF0       0xD0           \b, 144 kbps
1557>2      byte&0xF0       0xE0           \b, 160 kbps
1558# timing
1559>2      byte&0x0C       0x00           \b, 11.025 kHz
1560>2      byte&0x0C       0x04           \b, 12 kHz
1561>2      byte&0x0C       0x08           \b, 8 kHz
1562# channels/options
1563>3      byte&0xC0       0x00           \b, Stereo
1564>3      byte&0xC0       0x40           \b, JntStereo
1565>3      byte&0xC0       0x80           \b, 2x Monaural
1566>3      byte&0xC0       0xC0           \b, Monaural
1567#>1     byte            ^0x01          \b, Data Verify
1568#>2     byte            &0x02          \b, Packet Pad
1569#>2     byte            &0x01          \b, Custom Flag
1570#>3     byte            &0x08          \b, Copyrighted
1571#>3     byte            &0x04          \b, Original Source
1572#>3     byte&0x03       1              \b, NR: 50/15 ms
1573#>3     byte&0x03       3              \b, NR: CCIT J.17
1574
1575# AAC (aka MPEG-2 NBC audio) and MPEG-4 audio
1576
1577# Stored AAC streams (instead of the MP4 format)
15780       string          ADIF           MPEG ADIF, AAC
1579!:mime	audio/x-hx-aac-adif
1580>4      byte            &0x80
1581>>13    byte            &0x10          \b, VBR
1582>>13    byte            ^0x10          \b, CBR
1583>>16    byte&0x1E       0x02           \b, single stream
1584>>16    byte&0x1E       0x04           \b, 2 streams
1585>>16    byte&0x1E       0x06           \b, 3 streams
1586>>16    byte            &0x08          \b, 4 or more streams
1587>>16    byte            &0x10          \b, 8 or more streams
1588>>4    byte            &0x80          \b, Copyrighted
1589>>13   byte            &0x40          \b, Original Source
1590>>13   byte            &0x20          \b, Home Flag
1591>4      byte            ^0x80
1592>>4     byte            &0x10          \b, VBR
1593>>4     byte            ^0x10          \b, CBR
1594>>7     byte&0x1E       0x02           \b, single stream
1595>>7     byte&0x1E       0x04           \b, 2 streams
1596>>7     byte&0x1E       0x06           \b, 3 streams
1597>>7     byte            &0x08          \b, 4 or more streams
1598>>7     byte            &0x10          \b, 8 or more streams
1599>>4    byte            &0x40          \b, Original Stream(s)
1600>>4    byte            &0x20          \b, Home Source
1601
1602# Live or stored single AAC stream (used with MPEG-2 systems)
16030       beshort&0xFFF6  0xFFF0         MPEG ADTS, AAC
1604!:mime	audio/x-hx-aac-adts
1605>1      byte            &0x08          \b, v2
1606>1      byte            ^0x08          \b, v4
1607# profile
1608>>2     byte            &0xC0          \b LTP
1609>2      byte&0xc0       0x00           \b Main
1610>2      byte&0xc0       0x40           \b LC
1611>2      byte&0xc0       0x80           \b SSR
1612# timing
1613>2      byte&0x3c       0x00           \b, 96 kHz
1614>2      byte&0x3c       0x04           \b, 88.2 kHz
1615>2      byte&0x3c       0x08           \b, 64 kHz
1616>2      byte&0x3c       0x0c           \b, 48 kHz
1617>2      byte&0x3c       0x10           \b, 44.1 kHz
1618>2      byte&0x3c       0x14           \b, 32 kHz
1619>2      byte&0x3c       0x18           \b, 24 kHz
1620>2      byte&0x3c       0x1c           \b, 22.05 kHz
1621>2      byte&0x3c       0x20           \b, 16 kHz
1622>2      byte&0x3c       0x24           \b, 12 kHz
1623>2      byte&0x3c       0x28           \b, 11.025 kHz
1624>2      byte&0x3c       0x2c           \b, 8 kHz
1625# channels
1626>2      beshort&0x01c0  0x0040         \b, monaural
1627>2      beshort&0x01c0  0x0080         \b, stereo
1628>2      beshort&0x01c0  0x00c0         \b, stereo + center
1629>2      beshort&0x01c0  0x0100         \b, stereo+center+LFE
1630>2      beshort&0x01c0  0x0140         \b, surround
1631>2      beshort&0x01c0  0x0180         \b, surround + LFE
1632>2      beshort         &0x01C0        \b, surround + side
1633#>1     byte            ^0x01           \b, Data Verify
1634#>2     byte            &0x02           \b, Custom Flag
1635#>3     byte            &0x20           \b, Original Stream
1636#>3     byte            &0x10           \b, Home Source
1637#>3     byte            &0x08           \b, Copyrighted
1638
1639# Live MPEG-4 audio streams (instead of RTP FlexMux)
16400       beshort&0xFFE0  0x56E0         MPEG-4 LOAS
1641!:mime	audio/x-mp4a-latm
1642#>1     beshort&0x1FFF  x              \b, %hu byte packet
1643>3      byte&0xE0       0x40
1644>>4     byte&0x3C       0x04           \b, single stream
1645>>4     byte&0x3C       0x08           \b, 2 streams
1646>>4     byte&0x3C       0x0C           \b, 3 streams
1647>>4     byte            &0x08          \b, 4 or more streams
1648>>4     byte            &0x20          \b, 8 or more streams
1649>3      byte&0xC0       0
1650>>4     byte&0x78       0x08           \b, single stream
1651>>4     byte&0x78       0x10           \b, 2 streams
1652>>4     byte&0x78       0x18           \b, 3 streams
1653>>4     byte            &0x20          \b, 4 or more streams
1654>>4     byte            &0x40          \b, 8 or more streams
1655# This magic isn't strong enough (matches plausible ISO-8859-1 text)
1656#0       beshort         0x4DE1         MPEG-4 LO-EP audio stream
1657#!:mime	audio/x-mp4a-latm
1658
1659# Summary: FLI animation format
1660# Created by: Daniel Quinlan <quinlan@yggdrasil.com>
1661# Modified by (1): Abel Cheung <abelcheung@gmail.com> (avoid over-generic detection)
16624	leshort		0xAF11
1663# standard FLI always has 320x200 resolution and 8 bit color
1664>8	leshort		320
1665>>10	leshort		200
1666>>>12	leshort		8			FLI animation, 320x200x8
1667!:mime	video/x-fli
1668>>>>6	leshort		x			\b, %d frames
1669# frame speed is multiple of 1/70s
1670>>>>16	leshort		x			\b, %d/70s per frame
1671
1672# Summary: FLC animation format
1673# Created by: Daniel Quinlan <quinlan@yggdrasil.com>
1674# Modified by (1): Abel Cheung <abelcheung@gmail.com> (avoid over-generic detection)
16754	leshort		0xAF12
1676# standard FLC always use 8 bit color
1677>12	leshort		8			FLC animation
1678!:mime	video/x-flc
1679>>8	leshort		x			\b, %d
1680>>10	leshort		x			\bx%dx8
1681>>6	uleshort	x			\b, %d frames
1682>>16	uleshort	x			\b, %dms per frame
1683
1684# DL animation format
1685# XXX - collision with most `mips' magic
1686#
1687# I couldn't find a real magic number for these, however, this
1688# -appears- to work.  Note that it might catch other files, too, so be
1689# careful!
1690#
1691# Note that title and author appear in the two 20-byte chunks
1692# at decimal offsets 2 and 22, respectively, but they are XOR'ed with
1693# 255 (hex FF)!  The DL format is really bad.
1694#
1695#0	byte	1	DL version 1, medium format (160x100, 4 images/screen)
1696#!:mime	video/x-unknown
1697#>42	byte	x	- %d screens,
1698#>43	byte	x	%d commands
1699#0	byte	2	DL version 2
1700#!:mime	video/x-unknown
1701#>1	byte	1	- large format (320x200,1 image/screen),
1702#>1	byte	2	- medium format (160x100,4 images/screen),
1703#>1	byte	>2	- unknown format,
1704#>42	byte	x	%d screens,
1705#>43	byte	x	%d commands
1706# Based on empirical evidence, DL version 3 have several nulls following the
1707# \003.  Most of them start with non-null values at hex offset 0x34 or so.
1708#0	string	\3\0\0\0\0\0\0\0\0\0\0\0	DL version 3
1709
1710# iso 13818 transport stream
1711#
1712# from Oskar Schirmer <schirmer@scara.com> Feb 3, 2001 (ISO 13818.1)
1713# syncbyte      8 bit	0x47
1714# error_ind     1 bit	-
1715# payload_start 1 bit	1
1716# priority      1 bit	-
1717# PID          13 bit	0x0000
1718# scrambling    2 bit	-
1719# adaptfld_ctrl 2 bit	1 or 3
1720# conti_count   4 bit	-
17210	belong&0xFF5FFF10	0x47400010
1722>188	byte			0x47		MPEG transport stream data
1723!:mime  video/MP2T
1724!:ext	ts
1725
1726# DIF digital video file format <mpruett@sgi.com>
17270	belong&0xffffff00	0x1f070000      DIF
1728!:mime  video/x-dv
1729>4	byte			&0x01		(DVCPRO) movie file
1730>4	byte			^0x01		(DV) movie file
1731>3	byte			&0x80		(PAL)
1732>3	byte			^0x80		(NTSC)
1733
1734# MNG Video Format, <URL:http://www.libpng.org/pub/mng/spec/>
17350	string			\x8aMNG		MNG video data,
1736!:mime	video/x-mng
1737>4	belong			!0x0d0a1a0a	CORRUPTED,
1738>4	belong			0x0d0a1a0a
1739>>16    belong	x				%d x
1740>>20    belong	x				%d
1741
1742# JNG Video Format, <URL:http://www.libpng.org/pub/mng/spec/>
17430	string			\x8bJNG		JNG video data,
1744!:mime	video/x-jng
1745>4	belong			!0x0d0a1a0a	CORRUPTED,
1746>4	belong			0x0d0a1a0a
1747>>16    belong	x				%d x
1748>>20    belong	x				%d
1749
1750# Vivo video (Wolfram Kleff)
17513	string		\x0D\x0AVersion:Vivo	Vivo video data
1752
1753# ABC (alembic.io 3d models)
17540	string	0gawa		ABC 3d model
1755
1756#---------------------------------------------------------------------------
1757# HVQM4: compressed movie format designed by Hudson for Nintendo GameCube
1758# From Mark Sheppard <msheppard@climax.co.uk>, 2002-10-03
1759#
17600	string		HVQM4		%s
1761>6	string		>\0		v%s
1762>0	byte		x		GameCube movie,
1763>0x34	ubeshort	x		%d x
1764>0x36	ubeshort	x		%d,
1765>0x26	ubeshort	x		%dus,
1766>0x42	ubeshort	0		no audio
1767>0x42	ubeshort	>0		%dHz audio
1768
1769# From: Stefan A. Haubenthal <polluks@sdf.lonestar.org>
1770# Update: Joerg Jenderek
1771# URL: https://en.wikipedia.org/wiki/VOB
17720	string		DVDVIDEO-VTS	Video title set,
1773!:mime	video/x-ifo
1774!:ext	ifo/bup
1775>0x21	byte		x		v%x
17760	string		DVDVIDEO-VMG	Video manager,
1777!:mime	video/x-ifo
1778!:ext	ifo/bup
1779>0x21	byte		x		v%x
1780
1781# From: Stefan A. Haubenthal <polluks@sdf.lonestar.org>
17820 string xMovieSetter MovieSetter movie
17830 string xSceneEditor MovieSetter movie
1784
1785# From: Behan Webster <behanw@websterwood.com>
1786# NuppelVideo used by Mythtv (*.nuv)
1787# Note: there are two identical stanzas here differing only in the
1788# initial string matched. It used to be done with a regex, but we're
1789# trying to get rid of those.
17900	string		NuppelVideo	MythTV NuppelVideo
1791>12	string		x		v%s
1792>20	lelong		x		(%d
1793>24	lelong		x		\bx%d),
1794>36	string		P		\bprogressive,
1795>36	string		I		\binterlaced,
1796>40	ledouble	x		\baspect:%.2f,
1797>48	ledouble	x		\bfps:%.2f
17980	string		MythTV		MythTV NuppelVideo
1799>12	string		x		v%s
1800>20	lelong		x		(%d
1801>24	lelong		x		\bx%d),
1802>36	string		P		\bprogressive,
1803>36	string		I		\binterlaced,
1804>40	ledouble	x		\baspect:%.2f,
1805>48	ledouble	x		\bfps:%.2f
1806
1807#						MPEG file
1808# MPEG sequences
1809# FIXME: This section is from the old magic.mime file and needs
1810# integrating with the rest
1811#0       belong             0x000001BA
1812#>4      byte               &0x40
1813#!:mime	video/mp2p
1814#>4      byte               ^0x40
1815#!:mime	video/mpeg
1816#0       belong             0x000001BB
1817#!:mime	video/mpeg
1818#0       belong             0x000001B0
1819#!:mime	video/mp4v-es
1820#0       belong             0x000001B5
1821#!:mime	video/mp4v-es
1822#0       belong             0x000001B3
1823#!:mime	video/mpv
1824#0       belong&0xFF5FFF10  0x47400010
1825#!:mime	video/mp2t
1826#0       belong             0x00000001
1827#>4      byte&0x1F	   0x07
1828#!:mime	video/h264
1829
1830# Type: Bink Video
1831# Extension: .bik
1832# URL:  https://wiki.multimedia.cx/index.php?title=Bink_Container
1833# From: <hoehle@users.sourceforge.net>  2008-07-18
18340	name		bik
1835#>4	ulelong		x	size %d
1836>20	ulelong		x	\b, %d
1837>24	ulelong		x	\bx%d
1838>8	ulelong		x	\b, %d frames
1839>32	ulelong		x	at rate %d/
1840>28	ulelong		>1	\b%d
1841>40	ulelong		=0	\b, no audio
1842>40	ulelong		!0	\b, %d audio track
1843>>40	ulelong		!1	\bs
1844# follow properties of the first audio track only
1845>>48	uleshort	x	%dHz
1846>>51	byte&0x20	0	mono
1847>>51	byte&0x20	!0	stereo
1848#>>51	byte&0x10	0	FFT
1849#>>51	byte&0x10	!0	DCT
1850
18510	string		BIK
1852>3	regex		=[bdfghi]	Bink Video rev.%s
1853>>0	use		bik
1854
18550	string		KB2
1856>3	regex		=[adfghi]	Bink Video 2 rev.%s
1857>>0	use		bik
1858
1859# Type:	NUT Container
1860# URL:	https://wiki.multimedia.cx/index.php?title=NUT
1861# From:	Adam Buchbinder <adam.buchbinder@gmail.com>
18620	string	nut/multimedia\ container\0	NUT multimedia container
1863
1864# Type: Nullsoft Video (NSV)
1865# URL:  https://wiki.multimedia.cx/index.php?title=Nullsoft_Video
1866# From: Mike Melanson <mike@multimedia.cx>
18670	string	NSVf	Nullsoft Video
1868
1869# Type: REDCode Video
1870# URL:  https://www.red.com/ ; https://wiki.multimedia.cx/index.php?title=REDCode
1871# From: Mike Melanson <mike@multimedia.cx>
18724	string	RED1	REDCode Video
1873
1874# Type: MTV Multimedia File
1875# URL:  https://wiki.multimedia.cx/index.php?title=MTV
1876# From: Mike Melanson <mike@multimedia.cx>
18770	string	AMVS	MTV Multimedia File
1878
1879# Type: ARMovie
1880# URL:  https://wiki.multimedia.cx/index.php?title=ARMovie
1881# From: Mike Melanson <mike@multimedia.cx>
18820	string	ARMovie\012	ARMovie
1883
1884# Type: Interplay MVE Movie
1885# URL:  https://wiki.multimedia.cx/index.php?title=Interplay_MVE
1886# From: Mike Melanson <mike@multimedia.cx>
18870	string	Interplay\040MVE\040File\032	Interplay MVE Movie
1888
1889# Type: Windows Television DVR File
1890# URL:  https://wiki.multimedia.cx/index.php?title=WTV
1891# From: Mike Melanson <mike@mutlimedia.cx>
1892# This takes the form of a Windows-style GUID
18930	bequad	0xB7D800203749DA11
1894>8	bequad	0xA64E0007E95EAD8D	Windows Television DVR Media
1895
1896# Type: Sega FILM/CPK Multimedia
1897# URL:  https://wiki.multimedia.cx/index.php?title=Sega_FILM
1898# From: Mike Melanson <mike@multimedia.cx>
18990	string	FILM	Sega FILM/CPK Multimedia,
1900>32	belong	x	%d x
1901>28	belong	x	%d
1902
1903# Type: Nintendo THP Multimedia
1904# URL:  https://wiki.multimedia.cx/index.php?title=THP
1905# From: Mike Melanson <mike@multimedia.cx>
19060	string	THP\0	Nintendo THP Multimedia
1907
1908# Type: BBC Dirac Video
1909# URL:  https://wiki.multimedia.cx/index.php?title=Dirac
1910# From: Mike Melanson <mike@multimedia.cx>
19110	string	BBCD	BBC Dirac Video
1912
1913# Type: RAD Game Tools Smacker Multimedia
1914# URL:  https://wiki.multimedia.cx/index.php?title=Smacker
1915# From: Mike Melanson <mike@multimedia.cx>
19160	string	SMK	RAD Game Tools Smacker Multimedia
1917>3	byte	x	version %c,
1918>4	lelong	x	%d x
1919>8	lelong	x	%d,
1920>12	lelong	x	%d frames
1921
1922# Material Exchange Format
1923# More information:
1924# https://en.wikipedia.org/wiki/Material_Exchange_Format
1925# http://www.freemxf.org/
19260	string	\x06\x0e\x2b\x34\x02\x05\x01\x01\x0d\x01\x02\x01\x01\x02	Material exchange container format
1927!:ext	mxf
1928!:mime	application/mxf
1929
1930# Recognize LucasArts Smush video files (cf.
1931# https://wiki.multimedia.cx/index.php/Smush)
19320	string	ANIM
1933>8	string	AHDR	LucasArts Smush Animation Format (SAN) video
19340	string	SANM
1935>8	string	SHDR	LucasArts Smush v2 (SANM) video
1936
1937# Type: Scaleform video
1938# Extension: .usm
1939# URL:  https://wiki.multimedia.cx/index.php/USM
1940# From: David Korth <gerbilsoft@gerbilsoft.com>
19410	string	CRID
1942>32	string	@UTF	Scaleform video
1943
1944# http://www.jerrysguide.com/tips/demystify-tvs-file-format.html
19450	string	TVS\015\012
1946>&0	string	Version\040	TeamViewer Session File
1947>>&0	string	x		\b, version %s
1948
1949# SER file format - simple uncompressed video format for astronomical use
1950# Initially developed by Lucam Recorder,
1951# as of 2021 maintained by Heiko Wilkens, Grischa Hahn
1952# Typical extensions: .SER
1953# http://www.grischa-hahn.homepage.t-online.de/astro/ser/SER%20Doc%20V3b.pdf
19540	string	LUCAM-RECORDER	SER video sequence
1955!:ext	ser
1956>18	lelong	0	\b, bayer: mono
1957>18	lelong	8	\b, bayer: RGGB
1958>18	lelong	9	\b, bayer: GRBG
1959>18	lelong	10	\b, bayer: GBRG
1960>18	lelong	11	\b, bayer: BGGR
1961>18	lelong	16	\b, bayer: CYYM
1962>18	lelong	17	\b, bayer: YCMY
1963>18	lelong	18	\b, bayer: YMCY
1964>18	lelong	19	\b, bayer: MYYC
1965>18	lelong	100	\b, bayer: RGB
1966>18	lelong	101	\b, bayer: BGR
1967>22	lelong	0	\b, big-endian
1968>22	lelong	1	\b, little-endian
1969>26	lelong	x	\b, width: %d
1970>30	lelong	x	\b, height: %d
1971>34	lelong	x	\b, %d bit
1972>38	lelong	x	\b, frames: %d
1973
1974#------------------------------------------------------------------------------
1975# $File: aout,v 1.1 2013/01/09 22:37:23 christos Exp $
1976# aout:  file(1) magic for a.out executable/object/etc entries that
1977# handle executables on multiple platforms.
1978#
1979
1980#
1981# Little-endian 32-bit-int a.out, merged from bsdi (for BSD/OS, from
1982# BSDI), netbsd, and vax (for UNIX/32V and BSD)
1983#
1984# XXX - is there anything we can look at to distinguish BSD/OS 386 from
1985# NetBSD 386 from various VAX binaries?  The BSD/OS shared library flag
1986# works only for binaries using shared libraries.  Grabbing the entry
1987# point from the a.out header, using it to find the first code executed
1988# in the program, and looking at that might help.
1989#
19900	lelong		0407		a.out little-endian 32-bit executable
1991>16	lelong		>0		not stripped
1992>32	byte		0x6a		(uses BSD/OS shared libs)
1993
19940	lelong		0410		a.out little-endian 32-bit pure executable
1995>16	lelong		>0		not stripped
1996>32	byte		0x6a		(uses BSD/OS shared libs)
1997
19980	lelong		0413		a.out little-endian 32-bit demand paged pure executable
1999>16	lelong		>0		not stripped
2000>32	byte		0x6a		(uses BSD/OS shared libs)
2001
2002#
2003# Big-endian 32-bit-int a.out, merged from sun (for old 68010 SunOS a.out),
2004# mips (for old 68020(!) SGI a.out), and netbsd (for old big-endian a.out).
2005#
2006# XXX - is there anything we can look at to distinguish old SunOS 68010
2007# from old 68020 IRIX from old NetBSD?  Again, I guess we could look at
2008# the first instruction or instructions in the program.
2009#
20100	belong		0407		a.out big-endian 32-bit executable
2011>16	belong		>0		not stripped
2012
20130	belong		0410		a.out big-endian 32-bit pure executable
2014>16	belong		>0		not stripped
2015
20160	belong		0413		a.out big-endian 32-bit demand paged executable
2017>16	belong		>0		not stripped
2018
2019
2020#------------------------------------------------------------------------------
2021# $File: apache,v 1.1 2017/04/11 14:52:15 christos Exp $
2022# apache: file(1) magic for Apache Big Data formats
2023
2024# Avro files
20250	string		Obj		Apache Avro
2026>3	byte		x		version %d
2027
2028# ORC files
2029# Important information is in file footer, which we can't index to :(
20300	string		ORC		Apache ORC
2031
2032# Parquet files
20330	string		PAR1		Apache Parquet
2034
2035# Hive RC files
20360	string		RCF		Apache Hive RC file
2037>3	byte		x		version %d
2038
2039# Sequence files (and the careless first version of RC file)
2040
20410	string		SEQ
2042>3	byte		<6		Apache Hadoop Sequence file version %d
2043>3	byte		>6		Apache Hadoop Sequence file version %d
2044>3	byte		=6
2045>>5	string		org.apache.hadoop.hive.ql.io.RCFile$KeyBuffer  Apache Hive RC file version 0
2046>>3	default		x		Apache Hadoop Sequence file version 6
2047
2048#------------------------------------------------------------------------------
2049# $File: apl,v 1.6 2009/09/19 16:28:07 christos Exp $
2050# apl:  file(1) magic for APL (see also "pdp" and "vax" for other APL
2051#       workspaces)
2052#
20530	long		0100554		APL workspace (Ken's original?)
2054
2055#------------------------------------------------------------------------------
2056# $File: apple,v 1.45 2021/04/26 15:56:00 christos Exp $
2057# apple:  file(1) magic for Apple file formats
2058#
20590	search/1/t	FiLeStArTfIlEsTaRt	binscii (apple ][) text
20600	string		\x0aGL			Binary II (apple ][) data
20610	string		\x76\xff		Squeezed (apple ][) data
20620	string		NuFile			NuFile archive (apple ][) data
20630	string		N\xf5F\xe9l\xe5		NuFile archive (apple ][) data
20640	belong		0x00051600		AppleSingle encoded Macintosh file
20650	belong		0x00051607		AppleDouble encoded Macintosh file
2066
2067# Type: Apple Emulator WOZ format
2068# From: Greg Wildman <greg@apple2.org.za>
2069# Ref: https://applesaucefdc.com/woz/reference/
2070# Ref: https://applesaucefdc.com/woz/reference2/
2071#
2072# Note: The following test are mostly identical. I would rather not
2073# use a regex to identify the WOZ format number.
20740	string		WOZ1
2075>4	string		\xFF\x0A\x0D\x0A	Apple ][ WOZ 1.0 Disk Image
2076>12	string		INFO
2077>>21	byte		01			\b, 5.25 inch
2078>>21	byte		02			\b, 3.5 inch
2079>>22	byte		01			\b, write protected
2080>>23	byte		01			\b, cross track synchronized
2081>>25	string/T	x			\b, %.32s
20820	string		WOZ2
2083>4	string		\xFF\x0A\x0D\x0A	Apple ][ WOZ 2.0 Disk Image
2084>12	string		INFO
2085>>21	byte		01			\b, 5.25 inch
2086>>21	byte		02			\b, 3.5 inch
2087>>22	byte		01			\b, write protected
2088>>23	byte		01			\b, cross track synchronized
2089>>25	string/T	x			\b, %.32s
2090
2091# Type: Apple Emulator disk images
2092# From: Greg Wildman <greg@apple2.org.za>
2093# ProDOS boot loader?
20940		string	\x01\x38\xB0\x03\x4C	Apple ProDOS Image
2095# Detect Volume Directory block ($02)
2096>0x400		string	\x00\x00\x03\x00
2097>>0x404		byte	&0xF0
2098>>>0x405	string	x			\b, Volume /%s
2099>>>0x429	leshort	x			\b, %u Blocks
2100# ProDOS ordered ?
2101>0xb00		string	\x00\x00\x03\x00
2102>>0xb04		byte	&0xF0
2103>>>0xb05	string	x			\b, Volume /%s
2104>>>0xb29	leshort	x			\b, %u Blocks
2105#
2106# DOS3.3 boot loader?
21070		string	\x01\xA5\x27\xC9\x09\xD0\x18\xA5\x2B
2108>0x11001	string	\x11\x0F\x03	Apple DOS 3.3 Image
2109>>0x11006	byte	x		\b, Volume %u
2110>>0x11034	byte	x		\b, %u Tracks
2111>>0x11035	byte	x		\b, %u Sectors
2112>>0x11036	leshort	x		\b, %u bytes per sector
2113# DOS3.2 ?
2114>0x11001	string	\x11\x0C\x02	Apple DOS 3.2 Image
2115>>0x11006	byte	x		\b, Volume %u
2116>>0x11034	byte	x		\b, %u Tracks
2117>>0x11035	byte	x		\b, %u Sectors
2118>>0x11036	leshort	x		\b, %u bytes per sector
2119# DOS3.1 ?
2120>0x11001	string	\x11\x0C\x01
2121>>0x11c00	string	\x00\x11\x0B	Apple DOS 3.1 Image
2122#
2123# Pascal boot loader?
21240		string	\x01\xE0\x60\xF0\x03\x4C\xE3\x08\xAD
2125>0xd6		pstring SYSTEM.APPLE
2126>>0xb00		leshort	0x0000
2127>>>0xb04	leshort 0x0000		Apple Pascal Image
2128>>>>0xb06	pstring x		\b, Volume %s:
2129>>>>0xb0e	leshort x		\b, %u Blocks
2130>>>>0xb10	leshort x		\b, %u Files
2131#
2132# Diversi Dos boot loader?
21330		string	\x01\xA8\xAD\x81\xC0\xEE\x09\x08\xAD
2134>0x11001	string	\x11\x0F\x03	Apple Diversi Dos Image
2135>>0x11006	byte	x		\b, Volume %u
2136>>0x11034	byte	x		\b, %u Tracks
2137>>0x11035	byte	x		\b, %u Sectors
2138>>0x11036	leshort	x		\b, %u bytes per sector
2139
2140# Type: Apple Emulator 2IMG format
2141# From: Radek Vokal <rvokal@redhat.com>
2142# Update: Greg Wildman <greg@apple2.org.za>
21430		string	2IMG		Apple ][ 2IMG Disk Image
2144>4		clear	x
2145>4		string	XGS!		\b, XGS
2146>4		string	CTKG		\b, Catakig
2147>4		string	ShIm		\b, Sheppy's ImageMaker
2148>4		string	SHEP		\b, Sheppy's ImageMaker
2149>4		string	WOOF		\b, Sweet 16
2150>4		string	B2TR		\b, Bernie ][ the Rescue
2151>4		string	\!nfc		\b, ASIMOV2
2152>4		string	\>BD\<		\b, Brutal Deluxe's Cadius
2153>4		string	CdrP		\b, CiderPress
2154>4		string	Vi][		\b, Virtual ][
2155>4		string	PRFS		\b, ProFUSE
2156>4		string	FISH		\b, FishWings
2157>4		string	RVLW		\b, Revival for Windows
2158>4		default	x
2159>>4		string	x		\b, Creator tag "%-4.4s"
2160>0xc		byte	00		\b, DOS 3.3 sector order
2161>>0x10		byte	00		\b, Volume 254
2162>>0x10		byte&0x7f x		\b, Volume %u
2163>0xc		byte	01		\b, ProDOS sector order
2164# Detect Volume Directory block ($02) + 2mg header offset
2165>>0x440		string	\x00\x00\x03\x00
2166>>>0x444	byte	&0xF0
2167>>>>0x445	string	x		\b, Volume /%s
2168>>>>0x469	leshort	x		\b, %u Blocks
2169>0xc		byte	02		\b, NIB data
2170
2171# magic for Newton PDA package formats
2172# from Ruda Moura <ruda@helllabs.org>
21730	string	package0	Newton package, NOS 1.x,
2174>12	belong	&0x80000000	AutoRemove,
2175>12	belong	&0x40000000	CopyProtect,
2176>12	belong	&0x10000000	NoCompression,
2177>12	belong	&0x04000000	Relocation,
2178>12	belong	&0x02000000	UseFasterCompression,
2179>16	belong	x		version %d
2180
21810	string	package1	Newton package, NOS 2.x,
2182>12	belong	&0x80000000	AutoRemove,
2183>12	belong	&0x40000000	CopyProtect,
2184>12	belong	&0x10000000	NoCompression,
2185>12	belong	&0x04000000	Relocation,
2186>12	belong	&0x02000000	UseFasterCompression,
2187>16	belong	x		version %d
2188
21890	string	package4	Newton package,
2190>8	byte	8		NOS 1.x,
2191>8	byte	9		NOS 2.x,
2192>12	belong	&0x80000000	AutoRemove,
2193>12	belong	&0x40000000	CopyProtect,
2194>12	belong	&0x10000000	NoCompression,
2195
2196# The following entries for the Apple II are for files that have
2197# been transferred as raw binary data from an Apple, without having
2198# been encapsulated by any of the above archivers.
2199#
2200# In general, Apple II formats are hard to identify because Apple DOS
2201# and especially Apple ProDOS have strong typing in the file system and
2202# therefore programmers never felt much need to include type information
2203# in the files themselves.
2204#
2205# Eric Fischer <enf@pobox.com>
2206
2207# AppleWorks word processor:
2208# URL: https://en.wikipedia.org/wiki/AppleWorks
2209# Reference: http://www.gno.org/pub/apple2/doc/apple/filetypes/ftn.1a.xxxx
2210# Update: Joerg Jenderek
2211# NOTE:
2212# The "O" is really the magic number, but that's so common that it's
2213# necessary to check the tab stops that follow it to avoid false positives.
2214# and/or look for unused bits of booleans bytes like zoom, paginated, mail merge
2215# the newer AppleWorks is from claris with extension CWK
22164	string		O
2217# test for unused bits of zoom- , paginated-boolean bytes
2218>84	ubequad		^0x00Fe00000000Fe00
2219# look for tabstop definitions "=" no tab, "|" no tab
2220# "<" left tab,"^" center tab,">" right tab, "." decimal tab,
2221# unofficial "!" other , "\x8a" other
2222# official only if SFMinVers is nonzero
2223>>5	regex/s	[=.<>|!^\x8a]{79}	AppleWorks Word Processor
2224# AppleWorks Word Processor File (Apple II)
2225# ./apple (version 5.25) labeled the entry as "AppleWorks word processor data"
2226# application/x-appleworks is mime type for claris version with cwk extension
2227!:mime	application/x-appleworks3
2228# http://home.earthlink.net/~hughhood/appleiiworksenvoy/
2229# ('p' + 1-byte ProDOS File Type + 2-byte ProDOS Aux Type')
2230# $70 $1A $F8 $FF is this the apple type ?
2231#:apple pdosp^Z\xf8\xff
2232!:ext awp
2233# minimum version needed to read this files. SFMinVers (0 , 30~3.0 )
2234>>>183	ubyte		30	3.0
2235>>>183	ubyte		!30
2236>>>>183	ubyte		!0	%#x
2237# usual tabstop start sequence "=====<"
2238>>>5	string		x	\b, tabstop ruler "%6.6s"
2239# tabstop ruler
2240#>>>5	string		>\0	\b, tabstops "%-79s"
2241# zoom switch
2242>>>85	  byte&0x01	>0	\b, zoomed
2243# whether paginated
2244>>>90	  byte&0x01	>0	\b, paginated
2245# contains any mail-merge commands
2246>>>92	  byte&0x01	>0	\b, with mail merge
2247# left margin in 1/10 inches ( normally 0 or 10 )
2248>>>91	ubyte		>0
2249>>>>91	ubyte		x	\b, %d/10 inch left margin
2250
2251# AppleWorks database:
2252#
2253# This isn't really a magic number, but it's the closest thing to one
2254# that I could find.  The 1 and 2 really mean "order in which you defined
2255# categories" and "left to right, top to bottom," respectively; the D and R
2256# mean that the cursor should move either down or right when you press Return.
2257
2258#30	string		\x01D	AppleWorks database data
2259#30	string		\x02D	AppleWorks database data
2260#30	string		\x01R	AppleWorks database data
2261#30	string		\x02R	AppleWorks database data
2262
2263# AppleWorks spreadsheet:
2264#
2265# Likewise, this isn't really meant as a magic number.  The R or C means
2266# row- or column-order recalculation; the A or M means automatic or manual
2267# recalculation.
2268
2269#131	string		RA	AppleWorks spreadsheet data
2270#131	string		RM	AppleWorks spreadsheet data
2271#131	string		CA	AppleWorks spreadsheet data
2272#131	string		CM	AppleWorks spreadsheet data
2273
2274# Applesoft BASIC:
2275#
2276# This is incredibly sloppy, but will be true if the program was
2277# written at its usual memory location of 2048 and its first line
2278# number is less than 256.  Yuck.
2279# update by Joerg Jenderek at Feb 2013
2280
2281# GRR: this test is still too general as it catches also Gujin BOOT144.SYS (0xfa080000)
2282#0       belong&0xff00ff 0x80000 Applesoft BASIC program data
22830	belong&0x00ff00ff	0x00080000
2284# assuming that line number must be positive
2285>2	leshort			>0		Applesoft BASIC program data, first line number %d
2286#>2     leshort         x       \b, first line number %d
2287
2288# ORCA/EZ assembler:
2289#
2290# This will not identify ORCA/M source files, since those have
2291# some sort of date code instead of the two zero bytes at 6 and 7
2292# XXX Conflicts with ELF
2293#4       belong&0xff00ffff       0x01000000      ORCA/EZ assembler source data
2294#>5      byte                    x               \b, build number %d
2295
2296# Broderbund Fantavision
2297#
2298# I don't know what these values really mean, but they seem to recur.
2299# Will they cause too many conflicts?
2300
2301# Probably :-)
2302#2	belong&0xFF00FF		0x040008	Fantavision movie data
2303
2304# Some attempts at images.
2305#
2306# These are actually just bit-for-bit dumps of the frame buffer, so
2307# there's really no reasonably way to distinguish them except for their
2308# address (if preserved) -- 8192 or 16384 -- and their length -- 8192
2309# or, occasionally, 8184.
2310#
2311# Nevertheless this will manage to catch a lot of images that happen
2312# to have a solid-colored line at the bottom of the screen.
2313
2314# GRR: Magic too weak
2315#8144	string	\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F	Apple II image with white background
2316#8144	string	\x55\x2A\x55\x2A\x55\x2A\x55\x2A	Apple II image with purple background
2317#8144	string	\x2A\x55\x2A\x55\x2A\x55\x2A\x55	Apple II image with green background
2318#8144	string	\xD5\xAA\xD5\xAA\xD5\xAA\xD5\xAA	Apple II image with blue background
2319#8144	string	\xAA\xD5\xAA\xD5\xAA\xD5\xAA\xD5	Apple II image with orange background
2320
2321# Beagle Bros. Apple Mechanic fonts
2322
23230	belong&0xFF00FFFF	0x6400D000	Apple Mechanic font
2324
2325# Apple Universal Disk Image Format (UDIF) - dmg files.
2326# From Johan Gade.
2327# These entries are disabled for now until we fix the following issues.
2328#
2329# Note there might be some problems with the "VAX COFF executable"
2330# entry. Note this entry should be placed before the mac filesystem section,
2331# particularly the "Apple Partition data" entry.
2332#
2333# The intended meaning of these tests is, that the file is only of the
2334# specified type if both of the lines are correct - i.e. if the first
2335# line matches and the second doesn't then it is not of that type.
2336#
2337#0	long	0x7801730d
2338#>4	long	0x62626060	UDIF read-only zlib-compressed image (UDZO)
2339#
2340# Note that this entry is recognized correctly by the "Apple Partition
2341# data" entry - however since this entry is more specific - this
2342# information seems to be more useful.
2343#0	long	0x45520200
2344#>0x410	string	disk\ image	UDIF read/write image (UDRW)
2345
2346# From: Toby Peterson <toby@apple.com>
23470	string	bplist00	Apple binary property list
2348
2349# Apple binary property list (bplist)
2350#  Assumes version bytes are hex.
2351#  Provides content hints for version 0 files. Assumes that the root
2352#  object is the first object (true for CoreFoundation implementation).
2353# From: David Remahl <dremahl@apple.com>
23540		string	bplist
2355>6		byte	x	\bCoreFoundation binary property list data, version %#c
2356>>7		byte	x	\b%c
2357>6		string		00		\b
2358>>8		byte&0xF0	0x00	\b
2359>>>8	byte&0x0F	0x00	\b, root type: null
2360>>>8	byte&0x0F	0x08	\b, root type: false boolean
2361>>>8	byte&0x0F	0x09	\b, root type: true boolean
2362>>8		byte&0xF0	0x10	\b, root type: integer
2363>>8		byte&0xF0	0x20	\b, root type: real
2364>>8		byte&0xF0	0x30	\b, root type: date
2365>>8		byte&0xF0	0x40    \b, root type: data
2366>>8		byte&0xF0	0x50	\b, root type: ascii string
2367>>8		byte&0xF0	0x60	\b, root type: unicode string
2368>>8		byte&0xF0	0x80	\b, root type: uid (CORRUPT)
2369>>8		byte&0xF0	0xa0	\b, root type: array
2370>>8		byte&0xF0	0xd0	\b, root type: dictionary
2371
2372# Apple/NeXT typedstream data
2373#  Serialization format used by NeXT and Apple for various
2374#  purposes in YellowStep/Cocoa, including some nib files.
2375# From: David Remahl <dremahl@apple.com>
23762		string		typedstream	NeXT/Apple typedstream data, big endian
2377>0		byte		x		\b, version %d
2378>0		byte		<5		\b
2379>>13	byte		0x81	\b
2380>>>14	ubeshort	x		\b, system %d
23812		string		streamtyped NeXT/Apple typedstream data, little endian
2382>0		byte		x		\b, version %d
2383>0		byte		<5		\b
2384>>13	byte		0x81	\b
2385>>>14	uleshort	x		\b, system %d
2386
2387#------------------------------------------------------------------------------
2388# CAF: Apple CoreAudio File Format
2389#
2390# Container format for high-end audio purposes.
2391# From: David Remahl <dremahl@apple.com>
2392#
23930	string		caff		CoreAudio Format audio file
2394>4	beshort		<10		version %d
2395>6	beshort		x
2396
2397
2398#------------------------------------------------------------------------------
2399# Keychain database files
24000	string		kych		Mac OS X Keychain File
2401
2402#------------------------------------------------------------------------------
2403# Code Signing related file types
24040	belong		0xfade0c00	Mac OS X Code Requirement
2405>8	belong		1			(opExpr)
2406>4	belong		x			- %d bytes
2407
24080	belong		0xfade0c01	Mac OS X Code Requirement Set
2409>8	belong		>1			containing %d items
2410>4	belong		x			- %d bytes
2411
24120	belong		0xfade0c02	Mac OS X Code Directory
2413>8	belong		x			version %x
2414>12	belong		>0			flags %#x
2415>4	belong		x			- %d bytes
2416
24170	belong		0xfade0cc0	Mac OS X Detached Code Signature (non-executable)
2418>4	belong		x			- %d bytes
2419
24200	belong		0xfade0cc1	Mac OS X Detached Code Signature
2421>8	belong		>1			(%d elements)
2422>4	belong		x			- %d bytes
2423
2424# From: "Nelson A. de Oliveira" <naoliv@gmail.com>
2425# .vdi
24264	string innotek\ VirtualBox\ Disk\ Image %s
2427
2428# Apple disk partition stuff
2429# URL: https://en.wikipedia.org/wiki/Apple_Partition_Map
2430# Reference: https://ftp.netbsd.org/pub/NetBSD/NetBSD-current/src/sys/sys/bootblock.h
2431# Update: Joerg Jenderek
2432# "ER" is APPLE_DRVR_MAP_MAGIC signature
24330	beshort	0x4552
2434# display Apple Driver Map (strength=50) after Syslinux bootloader (71)
2435#!:strength +0
2436# strengthen the magic by looking for used blocksizes 512 2048
2437>2	ubeshort&0xf1FF		0	Apple Driver Map
2438# last 6 bytes for padding found are 0 or end with 55AAh marker for MBR hybrid
2439#>>504	ubequad&0x0000FFffFFff0000	0
2440!:mime	application/x-apple-diskimage
2441!:apple	????devr
2442# https://en.wikipedia.org/wiki/Apple_Disk_Image
2443!:ext	dmg/iso
2444# sbBlkSize for driver descriptor map 512 2048
2445>>2	beshort	x			\b, blocksize %d
2446# sbBlkCount sometimes garbish like
2447# 0xb0200000 for unzlibed install_flash_player_19.0.0.245_osx.dmg
2448# 0xf2720100 for bunziped Firefox 48.0-2.dmg
2449# 0xeb02ffff for super_grub2_disk_hybrid_2.02s3.iso
2450# 0x00009090 by syslinux-6.03/utils/isohybrid.c
2451>>4	ubelong	x			\b, blockcount %u
2452# following device/driver information not very useful
2453# device type 0 1 (37008 garbage for super_grub2_disk_hybrid_2.02s3.iso)
2454>>8	ubeshort	x		\b, devtype %u
2455# device id 0 1 (37008 garbage for super_grub2_disk_hybrid_2.02s3.iso)
2456>>10	ubeshort	x		\b, devid %u
2457# driver data 0 (2425393296 garbage for super_grub2_disk_hybrid_2.02s3.iso)
2458>>12	ubelong		>0
2459>>>12	ubelong		x		\b, driver data %u
2460# number of driver descriptors sbDrvrCount <= 61
2461# (37008 garbage for super_grub2_disk_hybrid_2.02s3.iso)
2462>>16	ubeshort	x		\b, driver count %u
2463# 61 * apple_drvr_descriptor[8]. information not very useful or same as in partition map
2464# >>18	use		apple-driver-map
2465# >>26	use		apple-driver-map
2466# # ...
2467# >>500	use		apple-driver-map
2468# number of partitions is always same in every partition (map block count)
2469#>>0x0204	ubelong		x	\b, %u partitions
2470>>0x0204	ubelong		>0	\b, contains[@0x200]:
2471>>>0x0200	use		apple-apm
2472>>0x0204	ubelong		>1	\b, contains[@0x400]:
2473>>>0x0400	use		apple-apm
2474>>0x0204	ubelong		>2	\b, contains[@0x600]:
2475>>>0x0600	use		apple-apm
2476>>0x0204	ubelong		>3	\b, contains[@0x800]:
2477>>>0x0800	use		apple-apm
2478>>0x0204	ubelong		>4	\b, contains[@0xA00]:
2479>>>0x0A00	use		apple-apm
2480>>0x0204	ubelong		>5	\b, contains[@0xC00]:
2481>>>0x0C00	use		apple-apm
2482>>0x0204	ubelong		>6	\b, contains[@0xE00]:
2483>>>0x0E00	use		apple-apm
2484>>0x0204	ubelong		>7	\b, contains[@0x1000]:
2485>>>0x1000	use		apple-apm
2486#	display apple driver descriptor map (start-block, # blocks in sbBlkSize sizes, type)
24870	name				apple-driver-map
2488>0	ubequad		!0
2489# descBlock first block of driver
2490>>0	ubelong	x			\b, driver start block %u
2491# descSize driver size in blocks
2492>>4	ubeshort	x		\b, size %u
2493# descType driver system type 1 701h F8FFh FFFFh
2494>>6	ubeshort	x		\b, type %#x
2495
2496# URL: https://en.wikipedia.org/wiki/Apple_Partition_Map
2497# Reference: https://opensource.apple.com/source/IOStorageFamily/IOStorageFamily-116/IOApplePartitionScheme.h
2498# Update: Joerg Jenderek
2499# Yes, the 3rd and 4th bytes pmSigPad are reserved, but we use them to make the
2500# magic stronger.
2501# for apple partition map stored as a single file
25020	belong	0x504d0000
2503# to display Apple Partition Map (strength=70) after Syslinux bootloader (71)
2504#!:strength +0
2505>0	use		apple-apm
2506# magic/Magdir/apple14.test, 365: Warning: Current entry does not yet have a description for adding a EXTENSION type
2507# file: could not find any valid magic files!
2508#!:ext	bin
2509#	display apple partition map. Normally called after Apple driver map
25100	name				apple-apm
2511>0	belong	0x504d0000		Apple Partition Map
2512# number of partitions
2513>>4	ubelong	x			\b, map block count %u
2514# logical block (512 bytes) start of partition
2515>>8	ubelong	x			\b, start block %u
2516>>12	ubelong	x			\b, block count %u
2517>>16	string >0			\b, name %s
2518>>48	string >0			\b, type %s
2519# processor type dpme_process_id[16] e.g. "68000" "68020"
2520>>120	string >0			\b, processor %s
2521# A/UX boot arguments BootArgs[128]
2522>>136	string >0			\b, boot arguments %s
2523# status of partition dpme_flags
2524>>88	belong	& 1			\b, valid
2525>>88	belong	& 2			\b, allocated
2526>>88	belong	& 4			\b, in use
2527>>88	belong	& 8			\b, has boot info
2528>>88	belong	& 16			\b, readable
2529>>88	belong	& 32			\b, writable
2530>>88	belong	& 64			\b, pic boot code
2531>>88	belong	& 128			\b, chain compatible driver
2532>>88	belong	& 256			\b, real driver
2533>>88	belong	& 512			\b, chain driver
2534# mount automatically at startup APPLE_PS_AUTO_MOUNT
2535>>88	ubelong	&0x40000000		\b, mount at startup
2536# is the startup partition APPLE_PS_STARTUP
2537>>88	ubelong	&0x80000000		\b, is the startup partition
2538
2539#https://wiki.mozilla.org/DS_Store_File_Format
2540#https://en.wikipedia.org/wiki/.DS_Store
25410	string	\0\0\0\1Bud1\0		Apple Desktop Services Store
2542
2543# HFS/HFS+ Resource fork files (andrew.roazen@nau.edu Apr 13 2015)
2544# Usually not in separate files, but have either filename rsrc with
2545# no extension, or a filename corresponding to another file, with
2546# extensions rsr/rsrc
25470	string  \000\000\001\000
2548>4	leshort 0
2549>>16	lelong  0			Apple HFS/HFS+ resource fork
2550
2551#https://en.wikipedia.org/wiki/AppleScript
25520	string	FasdUAS			AppleScript compiled
2553
2554# AppleWorks/ClarisWorks
2555# https://github.com/joshenders/appleworks_format
2556# http://fileformats.archiveteam.org/wiki/AppleWorks
25570	name			appleworks
2558>0	belong&0x00ffffff	0x07e100	AppleWorks CWK Document
2559>0	belong&0x00ffffff	0x008803	ClarisWorks CWK Document
2560>0	default			x
2561>>0	belong			x		AppleWorks/ClarisWorks CWK Document
2562>0	byte			x		\b, version %d
2563>30	beshort			x		\b, %d
2564>32	beshort			x		\bx%d
2565!:ext cwk
2566
25674	string	BOBO
2568>0	byte	>4
2569>>12	belong	0
2570>>>26	belong	0
2571>>>>0	use	appleworks
2572>0	belong	0x0481ad00
2573>>0	use 	appleworks
2574
2575# magic for Apple File System (APFS)
2576# from Alex Myczko <alex@aiei.ch>
257732		string	NXSB		Apple File System (APFS)
2578>36		ulelong	x		\b, blocksize %u
2579
2580# iTunes cover art (versions 1 and 2)
25814		string	itch
2582>24		string	artw
2583>>0x1e8		string	data		iTunes cover art
2584>>>0x1ed	string	PNG		(PNG)
2585>>>0x1ec	beshort 0xffd8		(JPEG)
2586
2587# MacPaint image
258865		string	PNTGMPNT	MacPaint image data
2589#0		belong	2		MacPaint image data
2590
2591#------------------------------------------------------------------------------
2592# $File: application,v 1.1 2016/10/17 12:13:01 christos Exp $
2593# application:  file(1) magic for applications on small devices
2594#
2595# Pebble Application
25960	string	PBLAPP\000\000	Pebble application
2597
2598#------------------------------------------------------------------------------
2599# $File: applix,v 1.5 2009/09/19 16:28:08 christos Exp $
2600# applix:  file(1) magic for Applixware
2601# From: Peter Soos <sp@osb.hu>
2602#
26030	string		*BEGIN		Applixware
2604>7	string		WORDS			Words Document
2605>7	string		GRAPHICS		Graphic
2606>7	string		RASTER			Bitmap
2607>7	string		SPREADSHEETS		Spreadsheet
2608>7	string		MACRO			Macro
2609>7	string		BUILDER			Builder Object
2610
2611#------------------------------------------------------------------------------
2612# $File: apt,v 1.1 2016/10/17 19:51:57 christos Exp $
2613# apt: file(1) magic for APT Cache files
2614# <http://www.fifi.org/doc/libapt-pkg-doc/cache.html/ch2.html>
2615# <https://anonscm.debian.org/cgit/apt/apt.git/tree/apt-pkg/pkgcache.h#n292>
2616
2617# before version 10 ("old format"), data was in arch-specific long/short
2618
2619# old format 64 bit
26200   	name		apt-cache-64bit-be
2621>12	beshort		1		\b, dirty
2622>40 	bequad		x		\b, %llu packages
2623>48 	bequad		x		\b, %llu versions
2624
2625# old format 32 bit
26260   	name    	apt-cache-32bit-be
2627>8  	beshort 	1		\b, dirty
2628>40 	belong  	x		\b, %u packages
2629>44 	belong  	x		\b, %u versions
2630
2631# new format
26320	name		apt-cache-be
2633>6	byte    	1		\b, dirty
2634>24	belong  	x		\b, %u packages
2635>28	belong		x		\b, %u versions
2636
26370	bequad		0x98FE76DC
2638>8	ubeshort	<10		APT cache data, version %u
2639>>10	beshort	    	x	  	\b.%u, 64 bit big-endian
2640>>0	use		apt-cache-64bit-be
2641
26420	lequad	    	0x98FE76DC
2643>8	uleshort    	<10		APT cache data, version %u
2644>>10	leshort		x		\b.%u, 64 bit little-endian
2645>>0	use		\^apt-cache-64bit-be
2646
26470	belong	    	0x98FE76DC
2648>4	ubeshort    	<10	 	APT cache data, version %u
2649>>6	ubeshort    	x		\b.%u, 32 bit big-endian
2650>>0	use  		apt-cache-32bit-be
2651>4	ubyte	    	>9		APT cache data, version %u
2652>>5	ubyte	    	x		\b.%u, big-endian
2653>>0	use 		apt-cache-be
2654
26550	lelong	    	0x98FE76DC
2656>4	uleshort    	<10		APT cache data, version %u
2657>>6	uleshort   	x		\b.%u, 32 bit little-endian
2658>>0	use 		\^apt-cache-32bit-be
2659>4	ubyte	    	>9		APT cache data, version %u
2660>>5	ubyte	    	x		\b.%u, little-endian
2661>>0	use		\^apt-cache-be
2662#------------------------------------------------------------------------------
2663# $File: archive,v 1.169 2022/09/12 13:13:28 christos Exp $
2664# archive:  file(1) magic for archive formats (see also "msdos" for self-
2665#           extracting compressed archives)
2666#
2667# cpio, ar, arc, arj, hpack, lha/lharc, rar, squish, uc2, zip, zoo, etc.
2668# pre-POSIX "tar" archives are also handled in the C code ../../src/is_tar.c.
2669
2670# POSIX tar archives
2671# URL: https://en.wikipedia.org/wiki/Tar_(computing)
2672# Reference: https://www.freebsd.org/cgi/man.cgi?query=tar&sektion=5&manpath=FreeBSD+8-current
2673# header mainly padded with nul bytes
2674500	quad		0
2675!:strength /2
2676# filename or extended attribute printable strings in range space null til umlaut ue
2677>0	ubeshort	>0x1F00
2678>>0	ubeshort	<0xFCFD
2679# last 4 header bytes often null but tar\0 in gtarfail2.tar gtarfail.tar-bad
2680# at https://sourceforge.net/projects/s-tar/files/testscripts/
2681>>>508	ubelong&0x8B9E8DFF	0
2682# nul, space or ascii digit 0-7 at start of mode
2683>>>>100	ubyte&0xC8	=0
2684>>>>>101 ubyte&0xC8	=0
2685# nul, space at end of check sum
2686>>>>>>155 ubyte&0xDF	=0
2687# space or ascii digit 0 at start of check sum
2688>>>>>>>148	ubyte&0xEF	=0x20
2689# FOR DEBUGGING:
2690#>>>>>>>>0	regex		\^[0-9]{2,4}[.](png|jpg|jpeg|tif|tiff|gif|bmp)	NAME "%s"
2691# check for 1st image main name with digits used for sorting
2692# and for name extension case insensitive like: PNG JPG JPEG TIF TIFF GIF BMP
2693>>>>>>>>0	regex		\^[0-9]{2,4}[.](png|jpg|jpeg|tif|tiff|gif|bmp)
2694#foo
2695>>>>>>>>>0	use	tar-cbt
2696# if 1st member name without digits and without used image suffix then it is a TAR archive
2697>>>>>>>>0	default		x
2698>>>>>>>>>0	use	tar-file
2699#	minimal check and then display tar archive information which can also be
2700#	embedded inside others like Android Backup, Clam AntiVirus database
27010	name		tar-file
2702>257	string		!ustar
2703# header padded with nuls
2704>>257	ulong		=0
2705# GNU tar version 1.29 with non pax format option without refusing
2706# creates misleading V7 header for Long path, Multi-volume, Volume type
2707>>>156	ubyte		0x4c		GNU tar archive
2708!:mime	application/x-gtar
2709!:ext	tar/gtar
2710>>>156	ubyte		0x4d		GNU tar archive
2711!:mime	application/x-gtar
2712!:ext	tar/gtar
2713>>>156	ubyte		0x56		GNU tar archive
2714!:mime	application/x-gtar
2715!:ext	tar/gtar
2716>>>156	default		x		tar archive (V7)
2717!:mime	application/x-tar
2718!:ext	tar
2719# other stuff in padding
2720# some implementations add new fields to the blank area at the end of the header record
2721# created for example by DOS TAR 3.20g 1994 Tim V.Shapore with -j option
2722>>257	ulong		!0		tar archive (old)
2723!:mime	application/x-tar
2724!:ext	tar
2725# magic in newer, GNU, posix variants
2726>257	string		=ustar
2727# 2 last char of magic and UStar version because string expression does not work
2728# 2 space characters followed by a null for GNU variant
2729>>261	ubelong		=0x72202000	POSIX tar archive (GNU)
2730!:mime	application/x-gtar
2731!:ext	tar/gtar
2732# UStar version with ASCII "00"
2733>>261	ubelong		0x72003030	POSIX
2734# gLOBAL and ExTENSION type only found in POSIX.1-2001 format
2735>>>156	ubyte		0x67		\b.1-2001
2736>>>156	ubyte		0x78		\b.1-2001
2737>>>156	ubyte		x		tar archive
2738!:mime	application/x-ustar
2739!:ext	tar/ustar
2740# version with 2 binary nuls embedded in Android Backup like com.android.settings.ab
2741>>261	ubelong		0x72000000	tar archive (ustar)
2742!:mime	application/x-ustar
2743!:ext	tar/ustar
2744# not seen ustar variant with garbish version
2745>>261	default		x		tar archive (unknown ustar)
2746!:mime	application/x-ustar
2747!:ext	tar/ustar
2748# type flag of 1st tar archive member
2749#>156	ubyte		x		\b, %c-type
2750>156	ubyte		x
2751>>156	ubyte		0		\b, file
2752>>156	ubyte		0x30		\b, file
2753>>156	ubyte		0x31		\b, hard link
2754>>156	ubyte		0x32		\b, symlink
2755>>156	ubyte		0x33		\b, char device
2756>>156	ubyte		0x34		\b, block device
2757>>156	ubyte		0x35		\b, directory
2758>>156	ubyte		0x36		\b, fifo
2759>>156	ubyte		0x37		\b, reserved
2760>>156	ubyte		0x4c		\b, long path
2761>>156	ubyte		0x4d		\b, multi volume
2762>>156	ubyte		0x56		\b, volume
2763>>156	ubyte		0x67		\b, global
2764>>156	ubyte		0x78		\b, extension
2765>>156	default		x		\b, type
2766>>>156	ubyte		x		'%c'
2767# name[100]
2768>0	string		>\0		%-.60s
2769# mode mainly stored as an octal number in ASCII null or space terminated
2770>100	string		>\0		\b, mode %-.7s
2771# user id mainly as octal numbers in ASCII null or space terminated
2772>108	string		>\0		\b, uid %-.7s
2773# group id mainly as octal numbers in ASCII null or space terminated
2774>116	string		>\0		\b, gid %-.7s
2775# size mainly as octal number in ASCII
2776>124	ubyte		<0x38
2777>>124	string		>\0		\b, size %-.12s
2778# coding indicated by setting the high-order bit of the leftmost byte
2779>124	ubyte		>0xEF		\b, size 0x
2780>>124	ubyte		!0xff		\b%2.2x
2781>>125	ubyte		!0xff		\b%2.2x
2782>>126	ubyte		!0xff		\b%2.2x
2783>>127	ubyte		!0xff		\b%2.2x
2784>>128	ubyte		!0xff		\b%2.2x
2785>>129	ubyte		!0xff		\b%2.2x
2786>>130	ubyte		!0xff		\b%2.2x
2787>>131	ubyte		!0xff		\b%2.2x
2788>>132	ubyte		!0xff		\b%2.2x
2789>>133	ubyte		!0xff		\b%2.2x
2790>>134	ubyte		!0xff		\b%2.2x
2791>>135	ubyte		!0xff		\b%2.2x
2792# seconds since 0:0:0 1 jan 1970 UTC as octal number mainly in ASCII null or space terminated
2793>136	string		>\0		\b, seconds %-.11s
2794# header checksum stored as an octal number in ASCII null or space terminated
2795#>148	string		x		\b, cksum %.7s
2796# linkname[100]
2797>157	string		>\0		\b, linkname %-.40s
2798# additional fields for ustar
2799>257	string		=ustar
2800# owner user name null terminated
2801>>265	string		>\0		\b, user %-.32s
2802# group name null terminated
2803>>297	string		>\0		\b, group %-.32s
2804# device major minor if not zero
2805>>329	ubequad&0xCFCFCFCFcFcFcFdf	!0
2806>>>329	string		x		\b, devmaj %-.7s
2807>>337	ubequad&0xCFCFCFCFcFcFcFdf	!0
2808>>>337	string		x		\b, devmin %-.7s
2809# prefix[155]
2810>>345	string		>\0		\b, prefix %-.155s
2811# old non ustar/POSIX tar
2812>257	string		!ustar
2813>>508	string		=tar\0
2814# padding[255] in old star
2815>>>257	string		>\0		\b, padding: %-.40s
2816>>508	default		x
2817# padding[255] in old tar sometimes comment field
2818>>>257	string		>\0		\b, comment: %-.40s
2819# Summary:	Comic Book Archive *.CBT with TAR format
2820# URL:		https://en.wikipedia.org/wiki/Comic_book_archive
2821#		http://fileformats.archiveteam.org/wiki/Comic_Book_Archive
2822# Note:		there exist also RAR, ZIP, ACE and 7Z packed variants
28230	name		tar-cbt
2824>0	string		x		Comic Book archive, tar archive
2825#!:mime	application/x-tar
2826!:mime	application/vnd.comicbook
2827#!:mime	application/vnd.comicbook+tar
2828!:ext	cbt
2829# name[100] probably like: 19.jpg 0001.png 0002.png
2830# or maybe like ComicInfo.xml
2831>0	string		>\0		\b, 1st image %-.60s
2832
2833# Incremental snapshot gnu-tar format from:
2834# https://www.gnu.org/software/tar/manual/html_node/Snapshot-Files.html
28350	string		GNU\ tar-	GNU tar incremental snapshot data
2836>&0	regex		[0-9]\\.[0-9]+-[0-9]+	version %s
2837
2838# cpio archives
2839#
2840# Yes, the top two "cpio archive" formats *are* supposed to just be "short".
2841# The idea is to indicate archives produced on machines with the same
2842# byte order as the machine running "file" with "cpio archive", and
2843# to indicate archives produced on machines with the opposite byte order
2844# from the machine running "file" with "byte-swapped cpio archive".
2845#
2846# The SVR4 "cpio(4)" hints that there are additional formats, but they
2847# are defined as "short"s; I think all the new formats are
2848# character-header formats and thus are strings, not numbers.
28490	short		070707		cpio archive
2850!:mime	application/x-cpio
28510	short		0143561		byte-swapped cpio archive
2852!:mime	application/x-cpio # encoding: swapped
28530	string		070707		ASCII cpio archive (pre-SVR4 or odc)
2854!:mime	application/x-cpio
28550	string		070701		ASCII cpio archive (SVR4 with no CRC)
2856!:mime	application/x-cpio
28570	string		070702		ASCII cpio archive (SVR4 with CRC)
2858!:mime	application/x-cpio
2859
2860#
2861# Various archive formats used by various versions of the "ar"
2862# command.
2863#
2864
2865#
2866# Original UNIX archive formats.
2867# They were written with binary values in host byte order, and
2868# the magic number was a host "int", which might have been 16 bits
2869# or 32 bits.  We don't say "PDP-11" or "VAX", as there might have
2870# been ports to little-endian 16-bit-int or 32-bit-int platforms
2871# (x86?) using some of those formats; if none existed, feel free
2872# to use "PDP-11" for little-endian 16-bit and "VAX" for little-endian
2873# 32-bit.  There might have been big-endian ports of that sort as
2874# well.
2875#
28760	leshort		0177555		very old 16-bit-int little-endian archive
28770	beshort		0177555		very old 16-bit-int big-endian archive
28780	lelong		0177555		very old 32-bit-int little-endian archive
28790	belong		0177555		very old 32-bit-int big-endian archive
2880
28810	leshort		0177545		old 16-bit-int little-endian archive
2882>2	string		__.SYMDEF	random library
28830	beshort		0177545		old 16-bit-int big-endian archive
2884>2	string		__.SYMDEF	random library
28850	lelong		0177545		old 32-bit-int little-endian archive
2886>4	string		__.SYMDEF	random library
28870	belong		0177545		old 32-bit-int big-endian archive
2888>4	string		__.SYMDEF	random library
2889
2890#
2891# From "pdp" (but why a 4-byte quantity?)
2892#
28930	lelong		0x39bed		PDP-11 old archive
28940	lelong		0x39bee		PDP-11 4.0 archive
2895
2896#
2897# XXX - what flavor of APL used this, and was it a variant of
2898# some ar archive format?  It's similar to, but not the same
2899# as, the APL workspace magic numbers in pdp.
2900#
29010	long		0100554		apl workspace
2902
2903#
2904# System V Release 1 portable(?) archive format.
2905#
29060	string		=<ar>		System V Release 1 ar archive
2907!:mime	application/x-archive
2908
2909#
2910# Debian package; it's in the portable archive format, and needs to go
2911# before the entry for regular portable archives, as it's recognized as
2912# a portable archive whose first member has a name beginning with
2913# "debian".
2914#
2915# Update: Joerg Jenderek
2916# URL: https://en.wikipedia.org/wiki/Deb_(file_format)
29170	string		=!<arch>\ndebian
2918# https://manpages.debian.org/testing/dpkg/dpkg-split.1.en.html
2919>14	string		-split	part of multipart Debian package
2920!:mime	application/vnd.debian.binary-package
2921# udeb is used for stripped down deb file
2922!:ext	deb/udeb
2923>14	string		-binary	Debian binary package
2924!:mime	application/vnd.debian.binary-package
2925# For ipk packager see also https://en.wikipedia.org/wiki/Opkg
2926!:ext	deb/udeb/ipk
2927# This should not happen
2928>14	default		x	Unknown Debian package
2929# NL terminated version; for most Debian cases this is 2.0 or 2.1 for split
2930>68	string		>\0		(format %s)
2931#>68	string		!2.0\n
2932#>>68	string		x		(format %.3s)
2933>68	string		=2.0\n
2934# 2nd archive name=control archive name like control.tar.gz or control.tar.xz
2935>>72	string		>\0		\b, with %.14s
2936# look for 3rd archive name=data archive name like data.tar.{gz,xz,bz2,lzma}
2937>>0	search/0x93e4f	data.tar.	\b, data compression
2938# the above line only works if FILE_BYTES_MAX in ../../src/file.h is raised
2939# for example like libreoffice-dev-doc_1%3a5.2.7-1+rpi1+deb9u3_all.deb
2940>>>&0	string		x		%.2s
2941# skip space (0x20 BSD) and slash (0x2f System V) character marking end of name
2942>>>&2	ubyte		!0x20
2943>>>>&-1	ubyte		!0x2f
2944# display 3rd character of file name extension like 2 of bz2 or m of lzma
2945>>>>>&-1	ubyte	x		\b%c
2946>>>>>>&0	ubyte	!0x20
2947>>>>>>>&-1	ubyte	!0x2f
2948# display 4th character of file name extension like a of lzma
2949>>>>>>>>&-1	ubyte	x		\b%c
2950# split debian package case
2951>68	string		=2.1\n
2952# dpkg-1.18.25/dpkg-split/info.c
2953# NL terminated ASCII package name like ckermit
2954>>&0	string		x		\b, %s
2955# NL terminated package version like 302-5.3
2956>>>&1	string		x		%s
2957# NL terminated MD5 checksum
2958>>>>&1	string		x		\b, MD5 %s
2959# NL terminated original package length
2960>>>>>&1	string		x		\b, unsplitted size %s
2961# NL terminated part length
2962>>>>>>&1	string	x		\b, part length %s
2963# NL terminated package part like n/m
2964>>>>>>>&1	string	x		\b, part %s
2965# NL terminated package architecture like armhf since dpkg 1.16.1 or later
2966>>>>>>>>&1	string	x		\b, %s
2967
2968#
2969# MIPS archive; they're in the portable archive format, and need to go
2970# before the entry for regular portable archives, as it's recognized as
2971# a portable archive whose first member has a name beginning with
2972# "__________E".
2973#
29740	string	=!<arch>\n__________E	MIPS archive
2975!:mime	application/x-archive
2976>20	string	U			with MIPS Ucode members
2977>21	string	L			with MIPSEL members
2978>21	string	B			with MIPSEB members
2979>19	string	L			and an EL hash table
2980>19	string	B			and an EB hash table
2981>22	string	X			-- out of date
2982
2983#
2984# BSD/SVR2-and-later portable archive formats.
2985#
2986# Update: Joerg Jenderek
2987# URL:		http://fileformats.archiveteam.org/wiki/AR
2988# Reference:	https://www.unix.com/man-page/opensolaris/3HEAD/ar.h/
2989# Note:		Mach-O universal binary in ./cafebabe is dependent
2990# TODO:		unify current ar archive, MIPS archive, Debian package
2991#		distinguish BSD, SVR; 32, 64 bit; HP from other 32-bit SVR;
2992#		*.ar packages from *.a libraries. handle empty archive
29930	string		=!<arch>\n		current ar archive
2994# print first and possibly second ar_name[16] for debugging purpose
2995#>8			string	x	\b, 1st "%.16s"
2996#>68			string	x	\b, 2nd "%.16s"
2997!:mime	application/x-archive
2998# a in most case for libraries; lib for Microsoft libraries; ar else cases
2999!:ext	a/lib/ar
3000>8	string		__.SYMDEF	random library
3001# first member with long marked name __.SYMDEF SORTED implies BSD library
3002>68	string		__.SYMDEF\ SORTED	random library
3003# Reference: https://parisc.wiki.kernel.org/images-parisc/b/b2/Rad_11_0_32.pdf
3004# "archive file" entry moved from ./hp
3005# LST header system_id 0210h~PA-RISC 1.1,... identifies the target architecture
3006# LST header a_magic 0619h~relocatable library
3007>68	belong 		0x020b0619	- PA-RISC1.0 relocatable library
3008>68	belong	 	0x02100619	- PA-RISC1.1 relocatable library
3009>68	belong 		0x02110619	- PA-RISC1.2 relocatable library
3010>68	belong 		0x02140619	- PA-RISC2.0 relocatable library
3011#EOF for common ar archives
3012
3013#
3014# "Thin" archive, as can be produced by GNU ar.
3015#
30160	string		=!<thin>\n	thin archive with
3017>68	belong		0		no symbol entries
3018>68	belong		1		%d symbol entry
3019>68	belong		>1		%d symbol entries
3020
30210	search/1	-h-		Software Tools format archive text
3022
3023# ARC archiver, from Daniel Quinlan (quinlan@yggdrasil.com)
3024#
3025# The first byte is the magic (0x1a), byte 2 is the compression type for
3026# the first file (0x01 through 0x09), and bytes 3 to 15 are the MS-DOS
3027# filename of the first file (null terminated).  Since some types collide
3028# we only test some types on basis of frequency: 0x08 (83%), 0x09 (5%),
3029# 0x02 (5%), 0x03 (3%), 0x04 (2%), 0x06 (2%).  0x01 collides with terminfo.
30300	lelong&0x8080ffff	0x0000081a	ARC archive data, dynamic LZW
3031!:mime	application/x-arc
30320	lelong&0x8080ffff	0x0000091a	ARC archive data, squashed
3033!:mime	application/x-arc
30340	lelong&0x8080ffff	0x0000021a	ARC archive data, uncompressed
3035!:mime	application/x-arc
30360	lelong&0x8080ffff	0x0000031a	ARC archive data, packed
3037!:mime	application/x-arc
30380	lelong&0x8080ffff	0x0000041a	ARC archive data, squeezed
3039!:mime	application/x-arc
30400	lelong&0x8080ffff	0x0000061a	ARC archive data, crunched
3041!:mime	application/x-arc
3042# [JW] stuff taken from idarc, obviously ARC successors:
30430	lelong&0x8080ffff	0x00000a1a	PAK archive data
3044!:mime	application/x-arc
30450	lelong&0x8080ffff	0x0000141a	ARC+ archive data
3046!:mime	application/x-arc
30470	lelong&0x8080ffff	0x0000481a	HYP archive data
3048!:mime	application/x-arc
3049
3050# Acorn archive formats (Disaster prone simpleton, m91dps@ecs.ox.ac.uk)
3051# I can't create either SPARK or ArcFS archives so I have not tested this stuff
3052# [GRR:  the original entries collide with ARC, above; replaced with combined
3053#  version (not tested)]
3054#0	byte		0x1a		RISC OS archive (spark format)
30550	string		\032archive	RISC OS archive (ArcFS format)
30560       string          Archive\000     RISC OS archive (ArcFS format)
3057
3058# All these were taken from idarc, many could not be verified. Unfortunately,
3059# there were many low-quality sigs, i.e. easy to trigger false positives.
3060# Please notify me of any real-world fishy/ambiguous signatures and I'll try
3061# to get my hands on the actual archiver and see if I find something better. [JW]
3062# probably many can be enhanced by finding some 0-byte or control char near the start
3063
3064# idarc calls this Crush/Uncompressed... *shrug*
30650	string	CRUSH Crush archive data
3066# Squeeze It (.sqz)
30670	string	HLSQZ Squeeze It archive data
3068# SQWEZ
30690	string	SQWEZ SQWEZ archive data
3070# HPack (.hpk)
30710	string	HPAK HPack archive data
3072# HAP
30730	string	\x91\x33HF HAP archive data
3074# MD/MDCD
30750	string	MDmd MDCD archive data
3076# LIM
30770	string	LIM\x1a LIM archive data
3078# SAR
30793	string	LH5 SAR archive data
3080# BSArc/BS2
30810	string	\212\3SB\020\0	BSArc/BS2 archive data
3082# Bethesda Softworks Archive (Oblivion)
30830	string	BSA\0 		BSArc archive data
3084>4	lelong	x		version %d
3085# MAR
30862	string	=-ah MAR archive data
3087# ACB
3088#0	belong&0x00f800ff	0x00800000 ACB archive data
3089# CPZ
3090# TODO, this is what idarc says: 0	string	\0\0\0 CPZ archive data
3091# JRC
30920	string	JRchive JRC archive data
3093# Quantum
30940	string	DS\0 Quantum archive data
3095# ReSOF
30960	string	PK\3\6 ReSOF archive data
3097# QuArk
30980	string	7\4 QuArk archive data
3099# YAC
310014	string	YC YAC archive data
3101# X1
31020	string	X1 X1 archive data
31030	string	XhDr X1 archive data
3104# CDC Codec (.dqt)
31050	belong&0xffffe000	0x76ff2000 CDC Codec archive data
3106# AMGC
31070	string	\xad6" AMGC archive data
3108# NuLIB
31090	string	N\xc3\xb5F\xc3\xa9lx\xc3\xa5 NuLIB archive data
3110# PakLeo
31110	string	LEOLZW PAKLeo archive data
3112# ChArc
31130	string	SChF ChArc archive data
3114# PSA
31150	string	PSA PSA archive data
3116# CrossePAC
31170	string	DSIGDCC CrossePAC archive data
3118# Freeze
31190	string	\x1f\x9f\x4a\x10\x0a Freeze archive data
3120# KBoom
31210	string	\xc2\xa8MP\xc2\xa8 KBoom archive data
3122# NSQ, must go after CDC Codec
31230	string	\x76\xff NSQ archive data
3124# DPA
31250	string	Dirk\ Paehl DPA archive data
3126# BA
3127# TODO: idarc says "bytes 0-2 == bytes 3-5"
3128# TTComp
3129# URL: http://fileformats.archiveteam.org/wiki/TTComp_archive
3130# Update: Joerg Jenderek
3131# GRR: line below is too general as it matches also Panorama database "TCDB 2003-10 demo.pan", others
31320	string	\0\6
3133# look for first keyword of Panorama database *.pan
3134>12	search/261	DESIGN
3135# skip keyword with low entropy
3136>12	default		x
3137# skip DOS 2.0 backup id file, sequence 6 with many nils like BACKUPID_xx6.@@@ handled by ./msdos
3138>>8	quad		!0
3139>>>0	use	ttcomp
3140# variant ASCII, 4K dictionary (strength=48=50-2). With strength=49 wrong order! WHY?
31410	string	\1\6
3142# TODO:
3143# skip VAX-order 68k Blit mpx/mux executable (strength=50) handled by ./blit
3144!:strength	-2
3145>0	use	ttcomp
31460	string	\0\5
3147# skip some DOS 2.0 backup id file, sequence 5 with many nils like BACKUPID_075.@@@ handled by ./msdos
3148>8	quad	!0
3149>>0	use	ttcomp
31500	string	\1\5
3151# TODO:
3152# variant ASCII, 2K dictionary (strength=48=50-2). With strength=49 wrong order! WHY?
3153# skip ctab data (strength=50) handled by ./ibm6000
3154# skip locale data table (strength=50) handled by ./digital
3155!:strength	-2
3156>0	use	ttcomp
31570	string	\0\4
3158# skip many Maple help database *.hdb with version tag handled by ./maple
3159>1028	string	!version
3160# skip veclib maple.hdb by looking for Mable keyword
3161>>4	search/1091	Maple\040
3162#>4	search/34090	Maple\040
3163>>4	default		x
3164# skip DOS 2.0-3.2 backed up sequence 4 with many nils like LOTUS5.RAR handled by ./msdos
3165# skip xBASE Compound Index file *.CDX with many nils
3166>>>0x54	quad		!0
3167>>>>0	use	ttcomp
31680	string	\1\4
3169# TODO:
3170# skip Commodore PET BASIC 4.0 program *.prg
3171# variant ASCII, 1K dictionary (strength=48=50-2). With strength=49 wrong order! WHY?
3172# skip shared library (strength=50) handled by ./ibm6000
3173!:strength	-2
3174>0	use	ttcomp
3175#	display information of TTComp archive
31760	name	ttcomp
3177# (version 5.25) labeled the entry as "TTComp archive data"
3178>0	ubyte	x	TTComp archive data
3179!:mime	application/x-compress-ttcomp
3180# PBACKSCR.PI1
3181!:ext	$xe/$ts/pi1/__d
3182# compression type: 0~binary compression 1~ASCII compression
3183>0	ubyte	0	\b, binary
3184>0	ubyte	1	\b, ASCII
3185# size of the dictionary:  4~1024 bytes 5~2048 bytes 6~4096 bytes
3186>1	ubyte	4	\b, 1K
3187>1	ubyte	5	\b, 2K
3188>1	ubyte	6	\b, 4K
3189>1	ubyte	x	dictionary
3190#	https://mark0.net/forum/index.php?topic=848
3191# last 3 bytes probably have only 8 possible bit sequences
3192# xxxxxxxx 0000000x 11111111	____FFh
3193# xxxxxxxx 10000000 01111111	__807Fh
3194# 0xxxxxxx 11000000 00111111	__C03Fh
3195# 00xxxxxx 11100000 00011111	__E01Fh
3196# 000xxxxx 11110000 00001111	__F00Fh
3197# 0000xxxx 11111000 00000111	__F807h
3198# 00000xxx 11111100 00000011	__FC03h
3199# 000000xx 11111110 00000001	__FE01h
3200# but for quickgif.__d 0A7DD4h
3201#>-3	ubyte		x	\b, last 3 bytes 0x%2.2x
3202#>-2	ubeshort	x	\b%4.4x
3203# From:		Joerg Jenderek
3204# URL:		https://en.wikipedia.org/wiki/Disk_Copy
3205# reference:	http://nulib.com/library/FTN.e00005.htm
32060x52	ubeshort	0x0100
3207# test for disk image size equal or above 400k
3208>0x40	ubelong		>409599
3209# test also for disk image size equal or below 1440k to skip
3210# windows7en.mbr UNICODE.DAT
3211#>>0x40	ubelong		<1474561
3212# test now for "low" disk image size equal or below 64 MiB to skip
3213# windows7en.mbr (B441BBAAh) UNICODE.DAT (0400AF05h)
3214>>0x40	ubelong		<0x04000001
3215# To skip Flags$StringJoiner.class with size 00106A61h test also for valid disk image sizes
3216# 00064000 for  400k GCR disks	dc42-400k-gcr.trid.xml
3217# 000c8000 for  800k GCR disks	dc42-800k-gcr.trid.xml
3218# 000b4000 for  720k MFM disks	dc42-720k-mfm.trid.xml
3219# 00168000 for 1440k MFM disks	dc42-1440k-mfm.trid.xml
3220#	https://lisaem.sunder.net/LisaProjectDocs.txt
3221# 00500000	05M	available
3222# 00A00000	10M	available
3223# 01800000	24M	possible
3224# 02000000	32M	uncertain
3225# 04000000	64M	uncertain
3226>>>0x40	ubelong&0xf8003fFF	0
3227# skip samples with invalid disk name length like:
3228# 181 (biosmd80.rom) 202 (Flags$StringJoiner.class) 90 (UNICODE.DAT)
3229>>>>0x0	ubyte			<64
3230>>>>>0	use			dc42-floppy
3231#	display information of Apple DiskCopy 4.2 floppy image
32320	name		dc42-floppy
3233# disk name length; maximal 63
3234#>0	ubyte	    	x	DISK NAME LENGTH %u
3235# ASCII image pascal (maximal 63 bytes) name padded with NULs like:
3236# "Microsoft Mail" "Disquette 2" "IIe Installer Disk"
3237# "-lisaem.sunder.net hd-" (dc42-lisaem.trid.xml) "-not a Macintosh disk" (dc42-nonmac.trid.xml)
3238>00	pstring/B	x	Apple DiskCopy 4.2 image %s
3239#!:mime	application/octet-stream
3240!:mime	application/x-dc42-floppy-image
3241!:apple	dCpydImg
3242# probably also img like: "Utilitaires 2.img" "Installation 7.img"
3243!:ext	image/dc42/img
3244# data size in bytes like: 409600 737280 819200 1474560
3245>0x40	ubelong		x	\b, %u bytes
3246# for debugging purpose size in hexadecimal
3247#>0x40	ubelong		x	(%#8.8x)
3248# tag size in bytes like: 0 (often) 2580h (PUID fmt/625) 4B00h (Microsoft Mail.image)
3249>0x44	ubelong		>0	\b, %#x tag size
3250# data checksum
3251#>0x48	ubelong		x	\b, %#x checksum
3252# tag checksum
3253#>0x4c	ubelong		x	\b, %#x tag checksum
3254# disk encoding like: 0 1 2 3 (PUID: fmt/625)
3255>0x50	ubyte		0	\b, GCR CLV ssdd (400k)
3256>0x50	ubyte		1	\b, GCR CLV dsdd (800k)
3257>0x50	ubyte		2	\b, MFM CAV dsdd (720k)
3258>0x50	ubyte		3	\b, MFM CAV dshd (1440k)
3259>0x50	ubyte		>3	\b, %#x encoding
3260# format byte like: 12h (Lisa 400K) 24h (400K Macintosh) 96h (800K Apple II disk)
3261# 2 (Mac 400k "Disquette Installation 13.image")
3262# 22h (double-sided MFM or Mac 800k "Disco 12.image" "IIe Installer Disk.image")
3263>0x51	ubyte		x	\b, %#x format
3264#>0x54	ubequad		x	\b, data %#16.16llx
3265# ESP, could this conflict with Easy Software Products' (e.g.ESP ghostscript) documentation?
32660	string	ESP ESP archive data
3267# ZPack
32680	string	\1ZPK\1 ZPack archive data
3269# Sky
32700	string	\xbc\x40 Sky archive data
3271# UFA
32720	string	UFA UFA archive data
3273# Dry
32740	string	=-H2O DRY archive data
3275# FoxSQZ
32760	string	FOXSQZ FoxSQZ archive data
3277# AR7
32780	string	,AR7 AR7 archive data
3279# PPMZ
32800	string	PPMZ PPMZ archive data
3281# MS Compress
3282# Update: Joerg Jenderek
3283# URL: http://fileformats.archiveteam.org/wiki/MS-DOS_installation_compression
3284# Reference: https://hwiegman.home.xs4all.nl/fileformats/compress/szdd_kwaj_format.html
3285# Note: use correct version of extracting tool like EXPAND, UNPACK, DECOMP or 7Z
32864	string	\x88\xf0\x27
3287#		KWAJ variant
3288>0	string	KWAJ		MS Compress archive data, KWAJ variant
3289!:mime	application/x-ms-compress-kwaj
3290# extension not working in version 5.32
3291# magic/Magdir/archive, 284: Warning: EXTENSION type ` ??_' has bad char '?'
3292# file: line 284: Bad magic entry '   ??_'
3293!:ext	??_
3294# compression method (0-4)
3295>>8	uleshort	x	\b, %u method
3296# offset of compressed data
3297>>10	uleshort	x	\b, %#x offset
3298#>>(10.s)	uleshort	x
3299#>>>&-6		string	x	\b, TEST extension %-.3s
3300# header flags to mark header extensions
3301>>12	uleshort	>0	\b, %#x flags
3302# 4 bytes: decompressed length of file
3303>>12	uleshort	&0x01
3304>>>14	ulelong		x	\b, original size: %u bytes
3305# 2 bytes: unknown purpose
3306# 2 bytes: length of unknown data + mentioned bytes
3307# 1-9 bytes: null-terminated file name
3308# 1-4 bytes: null-terminated file extension
3309>>12	uleshort	&0x08
3310>>>12	uleshort				^0x01
3311>>>>12		uleshort			^0x02
3312>>>>>12			uleshort		^0x04
3313>>>>>>12			uleshort	^0x10
3314>>>>>>>14				string	x	\b, %-.8s
3315>>>>>>12			uleshort	&0x10
3316>>>>>>>14				string	x	\b, %-.8s
3317>>>>>>>>&1				string	x	\b.%-.3s
3318>>>>>12			uleshort		&0x04
3319>>>>>>12			uleshort	^0x10
3320>>>>>>>(14.s)			uleshort	x
3321>>>>>>>>&14				string	x	\b, %-.8s
3322>>>>>>12			uleshort	&0x10
3323>>>>>>>(14.s)			uleshort	x
3324>>>>>>>>&14				string	x	\b, %-.8s
3325>>>>>>>>>&1				string	x	\b.%-.3s
3326>>>>12		uleshort			&0x02
3327>>>>>12			uleshort		^0x04
3328>>>>>>12			uleshort	^0x10
3329>>>>>>>16				string	x	\b, %-.8s
3330>>>>>>12			uleshort	&0x10
3331>>>>>>>16				string	x	\b, %-.8s
3332>>>>>>>>&1				string	x	\b.%-.3s
3333>>>>>12			uleshort		&0x04
3334>>>>>>12			uleshort	^0x10
3335>>>>>>>(16.s)			uleshort	x
3336>>>>>>>>&16				string	x	\b, %-.8s
3337>>>>>>12			uleshort	&0x10
3338>>>>>>>(16.s)			uleshort	x
3339>>>>>>>&16				string	x	%-.8s
3340>>>>>>>>&1				string	x	\b.%-.3s
3341>>>12	uleshort				&0x01
3342>>>>12		uleshort			^0x02
3343>>>>>12			uleshort		^0x04
3344>>>>>>12			uleshort	^0x10
3345>>>>>>>18				string	x	\b, %-.8s
3346>>>>>>12			uleshort	&0x10
3347>>>>>>>18				string	x	\b, %-.8s
3348>>>>>>>>&1				string	x	\b.%-.3s
3349>>>>>12			uleshort		&0x04
3350>>>>>>12			uleshort	^0x10
3351>>>>>>>(18.s)			uleshort	x
3352>>>>>>>>&18				string	x	\b, %-.8s
3353>>>>>>12			uleshort	&0x10
3354>>>>>>>(18.s)			uleshort	x
3355>>>>>>>>&18				string	x	\b, %-.8s
3356>>>>>>>>>&1				string	x	\b.%-.3s
3357>>>>12		uleshort			&0x02
3358>>>>>12			uleshort		^0x04
3359>>>>>>12			uleshort	^0x10
3360>>>>>>>20				string	x	\b, %-.8s
3361>>>>>>12			uleshort	&0x10
3362>>>>>>>20				string	x	\b, %-.8s
3363>>>>>>>>&1				string	x	\b.%-.3s
3364>>>>>12			uleshort		&0x04
3365>>>>>>12			uleshort	^0x10
3366>>>>>>>(20.s)			uleshort	x
3367>>>>>>>>&20				string	x	\b, %-.8s
3368>>>>>>12			uleshort	&0x10
3369>>>>>>>(20.s)			uleshort	x
3370>>>>>>>>&20				string	x	\b, %-.8s
3371>>>>>>>>>&1				string	x	\b.%-.3s
3372# 2 bytes: length of data + mentioned bytes
3373#
3374#		SZDD variant Haruhiko Okumura's LZSS or 7z type MsLZ
3375# URL:		http://fileformats.archiveteam.org/wiki/MS-DOS_installation_compression
3376# Reference:	http://www.cabextract.org.uk/libmspack/doc/szdd_kwaj_format.html
3377#		http://mark0.net/download/triddefs_xml.7z/defs/s/szdd.trid.xml
3378# Note:		called "Microsoft SZDD compressed (Haruhiko Okumura's LZSS)" by TrID
3379#		verfied by 7-Zip `7z l -tMsLZ -slt *.??_` as MsLZ
3380#		`deark -l -m lzss_oku -d2 setup-1-41.bin` as "LZSS.C by Haruhiko Okumura"
3381>0	string	SZDD		MS Compress archive data, SZDD variant
3382# 2nd part of signature
3383#>>4	ubelong	0x88F02733	\b, SIGNATURE OK
3384!:mime	application/x-ms-compress-szdd
3385!:ext	??_
3386# The character missing from the end of the filename (0=unknown)
3387>>9	string	>\0		\b, %-.1s is last character of original name
3388# https://www.betaarchive.com/forum/viewtopic.php?t=26161
3389# Compression mode: "A" (0x41) found but sometimes "B" in Windows 3.1 builds 026 and 034e
3390>>8	string	!A		\b, %-.1s method
3391>>10	ulelong	>0		\b, original size: %u bytes
3392# Summary:	InstallShield archive with SZDD compressed
3393# URL:		https://community.flexera.com/t5/InstallShield-Knowledge-Base/InstallShield-Redistributable-Files/ta-p/5647
3394# From:		Joerg Jenderek
33951	search/48/bs	SZDD\x88\xF0\x27\x33	InstallShield archive
3396#!:mime	application/octet-stream
3397!:mime	application/x-installshield-compress-szdd
3398!:ext	ibt
3399# name of compressed archive member like: setup.dl_ _setup7int.dl_ _setup2k.dl_ _igdi.dl_ cabinet.dl_
3400>0	string	x		%s
3401# name of uncompressed archive member like: setup.dll _Setup.dll IGdi.dll CABINET.DLL
3402>>&1	string	x		(%s)
3403# probably version like: 9.0.0.333 9.1.0.429 11.50.0.42618
3404>>>&1	string	x		\b, version %s
3405# SZDD member length like: 168048 169333 181842
3406>>>>&1	string	x		\b, %s bytes
3407# MS Compress archive data
3408#>&0	string		SZDD	\b, SIGNATURE FOUND
3409>&0	indirect	x
3410#		QBasic SZDD variant
34113	string	\x88\xf0\x27
3412>0	string	SZ\x20		MS Compress archive data, QBasic variant
3413!:mime	application/x-ms-compress-sz
3414!:ext	??$
3415>>8	ulelong	>0		\b, original size: %u bytes
3416
3417# Summary:	CAZIP compressed file
3418# From:		Joerg Jenderek
3419# URL:		http://fileformats.archiveteam.org/wiki/CAZIP
3420# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/c/caz.trid.xml
3421# Note:		Format is distinct from CAZIPXP compressed
34220	string	\x0D\x0A\x1ACAZIP	CAZIP compressed file
3423#!:mime	application/octet-stream
3424!:mime	application/x-compress-cazip
3425# like: BLINKER.WR_ CLIPDEFS._ CAOSETUP.EX_ CLIPPER.EX_ FILEIO.C_
3426!:ext	??_/?_/_
3427
3428# Summary:	FTCOMP compressed archive
3429# From:		Joerg Jenderek
3430# URL:		http://fileformats.archiveteam.org/wiki/FTCOMP
3431# Reference:    http://mark0.net/download/triddefs_xml.7z/defs/a/ark-ftcomp.trid.xml
3432# Note:		called by TrID "FTCOMP compressed archive"
3433#		extracted by `unpack seahelp.hl_`
343424	string/b	FTCOMP		FTCOMP compressed archive
3435#!:mime	application/octet-stream
3436!:mime	application/x-compress-ftcomp
3437!:ext	??_/??@/dll/drv/pk2/
3438# probably A596FDFF magic at the beginning
3439>0	ubelong		!0xA596FDFF	\b, at beginning %#x
3440# probably original file name with directory like: \OS2\unpack.exe \SYSTEM\8514.DRV MAHJONGG.EXE
3441>41	string		x		"%s"
3442
3443# MP3 (archiver, not lossy audio compression)
34440	string	MP3\x1a MP3-Archiver archive data
3445# ZET
34460	string	OZ\xc3\x9d ZET archive data
3447# TSComp
34480	string	\x65\x5d\x13\x8c\x08\x01\x03\x00 TSComp archive data
3449# ARQ
34500	string	gW\4\1 ARQ archive data
3451# Squash
34523	string	OctSqu Squash archive data
3453# Terse
34540	string	\5\1\1\0 Terse archive data
3455# PUCrunch
34560	string	\x01\x08\x0b\x08\xef\x00\x9e\x32\x30\x36\x31 PUCrunch archive data
3457# UHarc
34580	string	UHA UHarc archive data
3459# ABComp
34600	string	\2AB ABComp archive data
34610	string	\3AB2 ABComp archive data
3462# CMP
34630	string	CO\0 CMP archive data
3464# Splint
34650	string	\x93\xb9\x06 Splint archive data
3466# InstallShield
34670	string	\x13\x5d\x65\x8c InstallShield Z archive Data
3468# Gather
34691	string	GTH Gather archive data
3470# BOA
34710	string	BOA BOA archive data
3472# RAX
34730	string	ULEB\xa RAX archive data
3474# Xtreme
34750	string	ULEB\0 Xtreme archive data
3476# Pack Magic
34770	string	@\xc3\xa2\1\0 Pack Magic archive data
3478# BTS
34790	belong&0xfeffffff	0x1a034465 BTS archive data
3480# ELI 5750
34810	string	Ora\  ELI 5750 archive data
3482# QFC
34830	string	\x1aFC\x1a QFC archive data
34840	string	\x1aQF\x1a QFC archive data
3485# PRO-PACK
34860	string	RNC PRO-PACK archive data
3487# 777
34880	string	777 777 archive data
3489# LZS221
34900	string	sTaC LZS221 archive data
3491# HPA
34920	string	HPA HPA archive data
3493# Arhangel
34940	string	LG Arhangel archive data
3495# EXP1, uses bzip2
34960	string	0123456789012345BZh EXP1 archive data
3497# IMP
34980	string	IMP\xa IMP archive data
3499# NRV
35000	string	\x00\x9E\x6E\x72\x76\xFF NRV archive data
3501# Squish
35020	string	\x73\xb2\x90\xf4 Squish archive data
3503# Par
35040	string	PHILIPP Par archive data
35050	string	PAR Par archive data
3506# HIT
35070	string	UB HIT archive data
3508# SBX
35090	belong&0xfffff000	0x53423000 SBX archive data
3510# NaShrink
35110	string	NSK NaShrink archive data
3512# SAPCAR
35130	string	#\ CAR\ archive\ header SAPCAR archive data
35140	string	CAR\ 2.00 SAPCAR archive data
35150	string	CAR\ 2.01 SAPCAR archive data
3516#!:mime	application/octet-stream
3517!:mime	application/vnd.sar
3518!:ext	sar
3519# Disintegrator
35200	string	DST Disintegrator archive data
3521# ASD
35220	string	ASD ASD archive data
3523# InstallShield CAB
3524# Update:	Joerg Jenderek at Nov 2021
3525# URL:		https://en.wikipedia.org/wiki/InstallShield
3526# Reference:	https://github.com/twogood/unshield/blob/master/lib/cabfile.h
3527# Note:		Not compatible with Microsoft CAB files
3528# http://mark0.net/download/triddefs_xml.7z/defs/a/ark-cab-ishield.trid.xml
3529# CAB_SIGNATURE 0x28635349
35300	string	ISc( InstallShield
3531#!:mime		application/octet-stream
3532!:mime		application/x-installshield
3533# http://mark0.net/download/triddefs_xml.7z/defs/a/ark-cab-ishield-hdr.trid.xml
3534>16	ulelong	!0	setup header
3535# like: _SYS1.HDR _USER1.HDR data1.hdr
3536!:ext	hdr
3537>16	ulelong	=0	CAB
3538# like: _SYS1.CAB _USER1.CAB DATA1.CAB  data2.cab
3539!:ext	cab
3540# https://github.com/twogood/unshield/blob/master/lib/helper.c
3541# version like:	0x1005201 0x100600c 0x1007000 0x1009500
3542#		0x2000578 0x20005dc 0x2000640 0x40007d0 0x4000834
3543>4	ulelong	x	\b, version %#x
3544# volume_info like: 0
3545>8	ulelong	!0	\b, volume_info %#x
3546# cab_descriptor_offset like: 0x200
3547>12	ulelong	!0x200	\b, offset %#x
3548#>0x200	ubequad	x	\b, at 0x200 %#16.16llx
3549# cab_descriptor_size like: 0 (*.cab) BD5 C8B DA5 E2A E36 116C 251D 4DA9 56F0 5CC2 6E4B 777D 779E 1F7C2
3550>16	ulelong	!0	\b, descriptor size %#x
3551# TOP4
35520	string	T4\x1a TOP4 archive data
3553# BatComp left out: sig looks like COM executable
3554# so TODO: get real 4dos batcomp file and find sig
3555# BlakHole
35560	string	BH\5\7 BlakHole archive data
3557# BIX
35580	string	BIX0 BIX archive data
3559# ChiefLZA
35600	string	ChfLZ ChiefLZA archive data
3561# Blink
35620	string	Blink Blink archive data
3563# Logitech Compress
35640	string	\xda\xfa Logitech Compress archive data
3565# ARS-Sfx (FIXME: really a SFX? then goto COM/EXE)
35661	string	(C)\ STEPANYUK ARS-Sfx archive data
3567# AKT/AKT32
35680	string	AKT32 AKT32 archive data
35690	string	AKT AKT archive data
3570# NPack
35710	string	MSTSM NPack archive data
3572# PFT
35730	string	\0\x50\0\x14 PFT archive data
3574# SemOne
35750	string	SEM SemOne archive data
3576# PPMD
35770	string	\x8f\xaf\xac\x84 PPMD archive data
3578# FIZ
35790	string	FIZ FIZ archive data
3580# MSXiE
35810	belong&0xfffff0f0	0x4d530000 MSXiE archive data
3582# DeepFreezer
35830	belong&0xfffffff0	0x797a3030 DeepFreezer archive data
3584# DC
35850	string	=<DC- DC archive data
3586# TPac
35870	string	\4TPAC\3 TPac archive data
3588# Ai
35890	string	Ai\1\1\0 Ai archive data
35900	string	Ai\1\0\0 Ai archive data
3591# Ai32
35920	string	Ai\2\0 Ai32 archive data
35930	string	Ai\2\1 Ai32 archive data
3594# SBC
35950	string	SBC SBC archive data
3596# Ybs
35970	string	YBS Ybs archive data
3598# DitPack
35990	string	\x9e\0\0 DitPack archive data
3600# DMS
36010	string	DMS! DMS archive data
3602# EPC
36030	string	\x8f\xaf\xac\x8c EPC archive data
3604# VSARC
36050	string	VS\x1a VSARC archive data
3606# PDZ
36070	string	PDZ PDZ archive data
3608# ReDuq
36090	string	rdqx ReDuq archive data
3610# GCA
36110	string	GCAX GCA archive data
3612# PPMN
36130	string	pN PPMN archive data
3614# WinImage
36153	string	WINIMAGE WinImage archive data
3616# Compressia
36170	string	CMP0CMP Compressia archive data
3618# UHBC
36190	string	UHB UHBC archive data
3620# WinHKI
36210	string	\x61\x5C\x04\x05 WinHKI archive data
3622# WWPack data file
36230	string	WWP WWPack archive data
3624# BSN (BSA, PTS-DOS)
36250	string	\xffBSG BSN archive data
36261	string	\xffBSG BSN archive data
36273	string	\xffBSG BSN archive data
36281	string	\0\xae\2 BSN archive data
36291	string	\0\xae\3 BSN archive data
36301	string	\0\xae\7 BSN archive data
3631# AIN
36320	string	\x33\x18 AIN archive data
36330	string	\x33\x17 AIN archive data
3634# XPA32 test moved and merged with XPA by Joerg Jenderek at Sep 2015
3635# SZip (TODO: doesn't catch all versions)
36360	string	SZ\x0a\4 SZip archive data
3637# XPack DiskImage
3638# *.XDI updated by Joerg Jenderek Sep 2015
3639# ftp://ftp.sac.sk/pub/sac/pack/0index.txt
3640# GRR: this test is still too general as it catches also text files starting with jm
36410	string	jm
3642# only found examples with this additional characteristic 2 bytes
3643>2	string	\x2\x4	Xpack DiskImage archive data
3644#!:ext xdi
3645# XPack Data
3646# *.xpa updated by Joerg Jenderek Sep 2015
3647# ftp://ftp.elf.stuba.sk/pub/pc/pack/
36480	string	xpa	XPA
3649!:ext	xpa
3650# XPA32
3651# ftp://ftp.elf.stuba.sk/pub/pc/pack/xpa32.zip
3652# created by XPA32.EXE version 1.0.2 for Windows
3653>0	string	xpa\0\1 \b32 archive data
3654# created by XPACK.COM version 1.67m or 1.67r with short 0x1800
3655>3	ubeshort	!0x0001	\bck archive data
3656# XPack Single Data
3657# changed by Joerg Jenderek Sep 2015 back to like in version 5.12
3658# letter 'I'+ acute accent is equivalent to \xcd
36590	string	\xcd\ jm	Xpack single archive data
3660#!:mime	application/x-xpa-compressed
3661!:ext xpa
3662
3663# TODO: missing due to unknown magic/magic at end of file:
3664#DWC
3665#ARG
3666#ZAR
3667#PC/3270
3668#InstallIt
3669#RKive
3670#RK
3671#XPack Diskimage
3672
3673# These were inspired by idarc, but actually verified
3674# Dzip archiver (.dz)
3675# Update: Joerg Jenderek
3676# URL: http://speeddemosarchive.com/dzip/
3677# reference: http://speeddemosarchive.com/dzip/dz29src.zip/main.c
3678# GRR: line below is too general as it matches also ASCII texts like Doszip commander help dz.txt
36790	string	DZ
3680# latest version is 2.9 dated 7 may 2003
3681>2	byte	<4 Dzip archive data
3682!:mime	application/x-dzip
3683!:ext	dz
3684>>2	byte	x \b, version %i
3685>>3	byte	x \b.%i
3686>>4	ulelong	x \b, offset %#x
3687>>8	ulelong	x \b, %u files
3688# ZZip archiver (.zz)
36890	string	ZZ\ \0\0 ZZip archive data
36900	string	ZZ0 ZZip archive data
3691# PAQ archiver (.paq)
36920	string	\xaa\x40\x5f\x77\x1f\xe5\x82\x0d PAQ archive data
36930	string	PAQ PAQ archive data
3694>3	byte&0xf0	0x30
3695>>3	byte	x (v%c)
3696# JAR archiver (.j), this is the successor to ARJ, not Java's JAR (which is essentially ZIP)
3697# Update:	Joerg Jenderek
3698# URL:		http://fileformats.archiveteam.org/wiki/JAR_(ARJ_Software)
3699# reference:	http://mark0.net/download/triddefs_xml.7z/defs/a/ark-jar.trid.xml
3700#		https://www.sac.sk/download/pack/jar102x.exe/TECHNOTE.DOC
3701# Note:		called "JAR compressed archive" by TrID
37020xe	string	\x1aJar\x1b JAR (ARJ Software, Inc.) archive data
3703#!:mime	application/octet-stream
3704!:mime	application/x-compress-j
3705>0	ulelong	x		\b, CRC32 %#x
3706# standard suffix is ".j"; for multi volumes following order j01 j02 ... j99 100 ... 990
3707!:ext	j/j01/j02
3708# URL:		http://fileformats.archiveteam.org/wiki/JARCS
3709# reference:	http://mark0.net/download/triddefs_xml.7z/defs/a/ark-jarcs.trid.xml
3710# Note:		called "JARCS compressed archive" by TrID
37110	string	JARCS JAR (ARJ Software, Inc.) archive data
3712#!:mime	application/octet-stream
3713!:mime	application/x-compress-jar
3714!:ext	jar
3715
3716# ARJ archiver (jason@jarthur.Claremont.EDU)
3717# URL:		http://fileformats.archiveteam.org/wiki/ARJ
3718# reference:	http://mark0.net/download/triddefs_xml.7z/defs/a/ark-arj.trid.xml
3719#		https://github.com/FarGroup/FarManager/
3720#		blob/master/plugins/multiarc/arc.doc/arj.txt
3721# Note:		called "ARJ compressed archive" by TrID and
3722#		"ARJ File Format" by DROID via PUID fmt/610
3723#		verified by `7z l -tarj PHRACK1.ARJ` and
3724#		`arj.exe l TEST-hk9.ARJ`
37250	leshort		0xea60
3726# skip DROID fmt-610-signature-id-946.arj by check for valid file type of main header
3727>0xA	ubyte		2
3728>>0	use		arj-archive
37290	name		arj-archive
3730>0	leshort		x		ARJ archive
3731!:mime	application/x-arj
3732# look for terminating 0-character of filename
3733>0x26	search/1024	\0
3734# file name extension is normally .arj but not for parts of multi volume
3735#>>&-5	string		x		extension %.4s
3736>>&-5	string/c	.arj		data
3737!:ext	arj
3738>>&-5	default		x
3739# for multi volume first name is archive.arj then following parts archive.a01 archive.a02 ...
3740>>>8	byte		&0x04		data
3741!:ext	a01/a02
3742# for SFX first name is archive.exe then following parts archive.e01 archive.e02 ...
3743>>>8	byte		^0x04		data, SFX multi-volume
3744!:ext	e01/e02
3745# basic header size like: 0x002b 0x002c 0x04e0 0x04e3 0x04e7
3746#>2	uleshort	x		basic header size %#4.4x
3747# next fragment content like: 0x0a200a003a8fc713 0x524a000010bb3471 0x524a0000c73c70f9
3748#>(2.s)	ubequad		x		NEXT FRAGMENT CONTENT %#16.16llx
3749# first_hdr_size; seems to be same as basic header size
3750#>2	uleshort	x		1st header size %#x
3751# archiver version number like: 3 4 6 11 102
3752>5	byte		x		\b, v%d
3753# minimum archiver version to extract like: 1
3754>6	ubyte		!1		\b, minimum %u to extract
3755# FOR DEBUGGING
3756#>8	byte		x		\b, FLAGS %#x
3757# GARBLED_FLAG1; garble with password; g switch
3758>8	byte		&0x01		\b, password-protected
3759# encryption version: 0~old  1~old 2~new 3~reserved 4~40 bit key GOST
3760>>0x20	ubyte		x		(v%u)
3761#>8	byte		&0x02		\b, secured
3762# ANSIPAGE_FLAG; indicates ANSI codepage used by ARJ32; hy switch
3763>8	byte		&0x02		\b, ANSI codepage
3764# VOLUME_FLAG indicates presence of succeeding volume; but apparently not for SFX
3765>8	byte		&0x04		\b, multi-volume
3766#>8	byte		&0x08		\b, file-offset
3767# ARJPROT_FLAG; build with data protection record; hk switch
3768>8	byte		&0x08		\b, recoverable
3769# arj protection factor; maximal 10; switch hky -> factor=y+1
3770>>0x22	byte		x		(factor %u)
3771>8	byte		&0x10		\b, slash-switched
3772# BACKUP_FLAG; obsolete
3773>8	byte		&0x20		\b, backup
3774# SECURED_FLAG;
3775>8	byte		&0x40		\b, secured,
3776# ALTNAME_FLAG; indicates dual-name archive
3777>8	byte		&0x80		\b, dual-name
3778# security version; 0~old 2~current
3779>9	ubyte		!0
3780>>9	ubyte		!2		\b, security version %u
3781# file type; 2 in main header; 0~binary 1~7-bitText 2~comment 3~directory 4~VolumeLabel 5=ChapterLabel
3782>0xA	ubyte		!2		\b, file type %u
3783# date+time when original archive was created in MS-DOS format via ./msdos
3784>0xC	ulelong		x		\b, created
3785>0xC	use		dos-date
3786# or date and time by new internal function
3787#>0xE	lemsdosdate	x		%s
3788#>0xC	lemsdostime	x		%s
3789# FOR DEBUGGING
3790#>0x12	uleshort	x		RAW DATE %#4.4x
3791#>0x10	uleshort	x		RAW TIME %#4.4x
3792# date+time when archive was last modified; sometimes nil or
3793# maybe wrong like in HP4DRVR.ARJ
3794#>0x10	ulelong		>0		\b, modified
3795#>>0x10	use		dos-date
3796# or date and time by new internal function
3797#>>0x12	lemsdosdate	x		%s
3798#>>0x10	lemsdostime	x		%s
3799# archive size (currently used only for secured archives); MAYBE?
3800#>0x14	ulelong		!0		\b, file size %u
3801# security envelope file position; MAYBE?
3802#>0x18	ulelong		!0		\b, at %#x security envelope
3803# filespec position in filename; WHAT IS THAT?
3804#>0x1C	uleshort	>0		\b, filespec position %#x
3805# length in bytes of security envelope data like: 2CAh 301h 364h 471h
3806>0x1E	uleshort	!0		\b, security envelope length %#x
3807# last chapter like: 0 1
3808>0x21	ubyte		!0		\b, last chapter %u
3809# filename (null-terminated string); sometimes at 0x26 when 4 bytes for extra data
3810>34	byte		x		\b, original name:
3811# with extras data
3812>34	byte		<0x0B
3813>>38	string		x		%s
3814# without extras data
3815>34	byte		>0x0A
3816>>34	string		x		%s
3817# host OS: 0~MSDOS ... 11~WIN32
3818>7	byte		0		\b, os: MS-DOS
3819>7	byte		1		\b, os: PRIMOS
3820>7	byte		2		\b, os: Unix
3821>7	byte		3		\b, os: Amiga
3822>7	byte		4		\b, os: Macintosh
3823>7	byte		5		\b, os: OS/2
3824>7	byte		6		\b, os: Apple ][ GS
3825>7	byte		7		\b, os: Atari ST
3826>7	byte		8		\b, os: NeXT
3827>7	byte		9		\b, os: VAX/VMS
3828>7	byte		10		\b, os: WIN95
3829>7	byte		11		\b, os: WIN32
3830# [JW] idarc says this is also possible
38312	leshort		0xea60		ARJ archive data
3832#2	leshort		0xea60
3833#>2	use		arj-archive
3834
3835# HA archiver (Greg Roelofs, newt@uchicago.edu)
3836# This is a really bad format. A file containing HAWAII will match this...
3837#0	string		HA		HA archive data,
3838#>2	leshort		=1		1 file,
3839#>2	leshort		>1		%hu files,
3840#>4	byte&0x0f	=0		first is type CPY
3841#>4	byte&0x0f	=1		first is type ASC
3842#>4	byte&0x0f	=2		first is type HSC
3843#>4	byte&0x0f	=0x0e		first is type DIR
3844#>4	byte&0x0f	=0x0f		first is type SPECIAL
3845# suggestion: at least identify small archives (<1024 files)
38460  belong&0xffff00fc 0x48410000 HA archive data
3847>2	leshort		=1		1 file,
3848>2	leshort		>1		%u files,
3849>4	byte&0x0f	=0		first is type CPY
3850>4	byte&0x0f	=1		first is type ASC
3851>4	byte&0x0f	=2		first is type HSC
3852>4	byte&0x0f	=0x0e		first is type DIR
3853>4	byte&0x0f	=0x0f		first is type SPECIAL
3854
3855# HPACK archiver (Peter Gutmann, pgut1@cs.aukuni.ac.nz)
38560	string		HPAK		HPACK archive data
3857
3858# JAM Archive volume format, by Dmitry.Kohmanyuk@UA.net
38590	string		\351,\001JAM\ 		JAM archive,
3860>7	string		>\0			version %.4s
3861>0x26	byte		=0x27			-
3862>>0x2b	string          >\0			label %.11s,
3863>>0x27	lelong		x			serial %08x,
3864>>0x36	string		>\0			fstype %.8s
3865
3866# LHARC/LHA archiver (Greg Roelofs, newt@uchicago.edu)
3867# Update: Joerg Jenderek
3868# URL: https://en.wikipedia.org/wiki/LHA_(file_format)
3869# Reference: https://web.archive.org/web/20021005080911/http://www.osirusoft.com/joejared/lzhformat.html
3870#
3871#	check and display information of lharc (LHa,PMarc) file
38720	name				lharc-file
3873# check 1st character of method id like -lz4- -lh5- or -pm2-
3874>2	string		-
3875# check 5th character of method id
3876>>6	string		-
3877# check header level 0 1 2 3
3878>>>20	ubyte		<4
3879# check 2nd, 3th and 4th character of method id
3880>>>>3	regex		\^(lh[0-9a-ex]|lz[s2-8]|pm[012]|pc1)		\b
3881!:mime	application/x-lzh-compressed
3882# creator type "LHA "
3883!:apple	????LHA
3884# display archive type name like "LHa/LZS archive data" or "LArc archive"
3885>>>>>2	string		-lz		\b
3886!:ext	lzs
3887# already known  -lzs- -lz4- -lz5- with old names
3888>>>>>>2	string	-lzs		LHa/LZS archive data
3889>>>>>>3	regex	\^lz[45]	LHarc 1.x archive data
3890# missing -lz?- with wikipedia names
3891>>>>>>3	regex	\^lz[2378]	LArc archive
3892# display archive type name like "LHa (2.x) archive data"
3893>>>>>2	string		-lh		\b
3894# already known -lh0- -lh1- -lh2- -lh3-  -lh4- -lh5- -lh6- -lh7- -lhd- variants with old names
3895>>>>>>3	regex		\^lh[01]	LHarc 1.x/ARX archive data
3896# LHice archiver use ".ICE" as name extension instead usual one ".lzh"
3897# FOOBAR archiver use ".foo" as name extension instead usual one
3898# "Florain Orjanov's and Olga Bachetska's ARchiver" not found at the moment
3899>>>>>>>2	string	-lh1		\b
3900!:ext lha/lzh/ice
3901>>>>>>3	regex		\^lh[23d]	LHa 2.x? archive data
3902>>>>>>3	regex		\^lh[7]		LHa (2.x)/LHark archive data
3903>>>>>>3	regex		\^lh[456]	LHa (2.x) archive data
3904>>>>>>>2	string	-lh5		\b
3905# https://en.wikipedia.org/wiki/BIOS
3906# Some mainboard BIOS like Award use LHa compression. So archives with unusual extension are found like
3907# bios.rom , kd7_v14.bin, 1010.004, ...
3908!:ext lha/lzh/rom/bin
3909# missing -lh?- variants (Joe Jared)
3910>>>>>>3	regex		\^lh[89a-ce]	LHa (Joe Jared) archive
3911# UNLHA32 2.67a
3912>>>>>>2	string		-lhx		LHa (UNLHA32) archive
3913# lha archives with standard file name extensions ".lha" ".lzh"
3914>>>>>>3	regex		!\^(lh1|lh5)	\b
3915!:ext lha/lzh
3916# this should not happen if all -lh variants are described
3917>>>>>>2	default		x		LHa (unknown) archive
3918#!:ext	lha
3919# PMarc
3920>>>>>3	regex		\^pm[012]	PMarc archive data
3921!:ext pma
3922# append method id without leading and trailing minus character
3923>>>>>3	string		x		[%3.3s]
3924>>>>>>0	use	lharc-header
3925#
3926#	check and display information of lharc header
39270	name				lharc-header
3928# header size 0x4 , 0x1b-0x61
3929>0	ubyte		x
3930# compressed data size != compressed file size
3931#>7	ulelong		x		\b, data size %d
3932# attribute: 0x2~?? 0x10~symlink|target 0x20~normal
3933#>19	ubyte		x		\b, 19_%#x
3934# level identifier 0 1 2 3
3935#>20	ubyte		x		\b, level %d
3936# time stamp
3937#>15		ubelong	x		DATE %#8.8x
3938# OS ID for level 1
3939>20	ubyte		1
3940# 0x20 types find for *.rom files
3941>>(21.b+24)	ubyte	<0x21		\b, %#x OS
3942# ascii type like M for MSDOS
3943>>(21.b+24)	ubyte	>0x20		\b, '%c' OS
3944# OS ID for level 2
3945>20	ubyte		2
3946#>>23	ubyte		x		\b, OS ID %#x
3947>>23	ubyte		<0x21		\b, %#x OS
3948>>23	ubyte		>0x20		\b, '%c' OS
3949# filename only for level 0 and 1
3950>20	ubyte		<2
3951# length of filename
3952>>21		ubyte	>0		\b, with
3953# filename
3954>>>21		pstring	x		"%s"
3955#
3956#2	string		-lh0-		LHarc 1.x/ARX archive data [lh0]
3957#!:mime	application/x-lharc
39582	string		-lh0-
3959>0	use	lharc-file
3960#2	string		-lh1-		LHarc 1.x/ARX archive data [lh1]
3961#!:mime	application/x-lharc
39622	string		-lh1-
3963>0	use	lharc-file
3964# NEW -lz2- ... -lz8-
39652	string		-lz2-
3966>0	use	lharc-file
39672	string		-lz3-
3968>0	use	lharc-file
39692	string		-lz4-
3970>0	use	lharc-file
39712	string		-lz5-
3972>0	use	lharc-file
39732	string		-lz7-
3974>0	use	lharc-file
39752	string		-lz8-
3976>0	use	lharc-file
3977#	[never seen any but the last; -lh4- reported in comp.compression:]
3978#2	string		-lzs-		LHa/LZS archive data [lzs]
39792	string		-lzs-
3980>0	use	lharc-file
3981# According to wikipedia and others such a version does not exist
3982#2	string		-lh\40-		LHa 2.x? archive data [lh ]
3983#2	string		-lhd-		LHa 2.x? archive data [lhd]
39842	string		-lhd-
3985>0	use	lharc-file
3986#2	string		-lh2-		LHa 2.x? archive data [lh2]
39872	string		-lh2-
3988>0	use	lharc-file
3989#2	string		-lh3-		LHa 2.x? archive data [lh3]
39902	string		-lh3-
3991>0	use	lharc-file
3992#2	string		-lh4-		LHa (2.x) archive data [lh4]
39932	string		-lh4-
3994>0	use	lharc-file
3995#2	string		-lh5-		LHa (2.x) archive data [lh5]
39962	string		-lh5-
3997>0	use	lharc-file
3998#2	string		-lh6-		LHa (2.x) archive data [lh6]
39992	string		-lh6-
4000>0	use	lharc-file
4001#2	string		-lh7-		LHa (2.x)/LHark archive data [lh7]
40022	string		-lh7-
4003# !:mime	application/x-lha
4004# >20	byte		x		- header level %d
4005>0	use	lharc-file
4006# NEW -lh8- ... -lhe- , -lhx-
40072	string		-lh8-
4008>0	use	lharc-file
40092	string		-lh9-
4010>0	use	lharc-file
40112	string		-lha-
4012>0	use	lharc-file
40132	string		-lhb-
4014>0	use	lharc-file
40152	string		-lhc-
4016>0	use	lharc-file
40172	string		-lhe-
4018>0	use	lharc-file
40192	string		-lhx-
4020>0	use	lharc-file
4021# taken from idarc [JW]
40222   string      -lZ         PUT archive data
4023# already done by LHarc magics
4024# this should never happen if all sub types of LZS archive are identified
4025#2   string      -lz         LZS archive data
40262   string      -sw1-       Swag archive data
4027
40280	name		rar-file-header
4029>24	byte		15		\b, v1.5
4030>24	byte		20		\b, v2.0
4031>24	byte		29		\b, v4
4032>15	byte		0		\b, os: MS-DOS
4033>15	byte		1		\b, os: OS/2
4034>15	byte		2		\b, os: Win32
4035>15	byte		3		\b, os: Unix
4036>15	byte		4		\b, os: Mac OS
4037>15	byte		5		\b, os: BeOS
4038
40390	name		rar-archive-header
4040>3	leshort&0x1ff	>0		\b, flags:
4041>>3	leshort		&0x01		ArchiveVolume
4042>>3	leshort		&0x02		Commented
4043>>3	leshort		&0x04		Locked
4044>>3	leshort		&0x10		NewVolumeNaming
4045>>3	leshort		&0x08		Solid
4046>>3	leshort		&0x20		Authenticated
4047>>3	leshort		&0x40		RecoveryRecordPresent
4048>>3	leshort		&0x80		EncryptedBlockHeader
4049>>3	leshort		&0x100		FirstVolume
4050
4051# RAR (Roshal Archive) archive
40520	string		Rar!\x1a\7\0		RAR archive data
4053!:mime	application/x-rar
4054!:ext	rar/cbr
4055# file header
4056>(0xc.l+9)	byte	0x74
4057>>(0xc.l+7)	use	rar-file-header
4058# subblock seems to share information with file header
4059>(0xc.l+9)	byte	0x7a
4060>>(0xc.l+7)	use	rar-file-header
4061>9		byte	0x73
4062>>7		use	rar-archive-header
4063
40640	string		Rar!\x1a\7\1\0		RAR archive data, v5
4065!:mime	application/x-rar
4066!:ext	rar
4067
4068# Very old RAR archive
4069# https://jasonblanks.com/wp-includes/images/papers/KnowyourarchiveRAR.pdf
40700	string		RE\x7e\x5e  RAR archive data (<v1.5)
4071!:mime	application/x-rar
4072!:ext	rar/cbr
4073
4074# SQUISH archiver (Greg Roelofs, newt@uchicago.edu)
40750	string		SQSH		squished archive data (Acorn RISCOS)
4076
4077# UC2 archiver (Greg Roelofs, newt@uchicago.edu)
4078# [JW] see exe section for self-extracting version
40790	string		UC2\x1a		UC2 archive data
4080
4081# PKZIP multi-volume archive
40820	string		PK\x07\x08PK\x03\x04	Zip multi-volume archive data, at least PKZIP v2.50 to extract
4083!:mime	application/zip
4084!:ext zip/cbz
4085
4086# Zip archives (Greg Roelofs, c/o zip-bugs@wkuvx1.wku.edu)
40870	string		PK\005\006	Zip archive data (empty)
4088!:mime application/zip
4089!:ext zip/cbz
4090!:strength +1
40910	string		PK\003\004
4092!:strength +1
4093
4094# Specialised zip formats which start with a member named 'mimetype'
4095# (stored uncompressed, with no 'extra field') containing the file's MIME type.
4096# Check for have 8-byte name, 0-byte extra field, name "mimetype", and
4097#  contents starting with "application/":
4098>26	string		\x8\0\0\0mimetypeapplication/
4099
4100#  KOffice / OpenOffice & StarOffice / OpenDocument formats
4101#    From: Abel Cheung <abel@oaka.org>
4102
4103#   KOffice (1.2 or above) formats
4104#    (mimetype contains "application/vnd.kde.<SUBTYPE>")
4105>>50	string	vnd.kde.		KOffice (>=1.2)
4106>>>58	string	karbon			Karbon document
4107>>>58	string	kchart			KChart document
4108>>>58	string	kformula		KFormula document
4109>>>58	string	kivio			Kivio document
4110>>>58	string	kontour			Kontour document
4111>>>58	string	kpresenter		KPresenter document
4112>>>58	string	kspread			KSpread document
4113>>>58	string	kword			KWord document
4114
4115#   OpenOffice formats (for OpenOffice 1.x / StarOffice 6/7)
4116#    (mimetype contains "application/vnd.sun.xml.<SUBTYPE>")
4117# URL:		https://en.wikipedia.org/wiki/OpenOffice.org_XML
4118# reference:	http://fileformats.archiveteam.org/wiki/OpenOffice.org_XML
4119>>50	string	vnd.sun.xml.		OpenOffice.org 1.x
4120>>>62	string	writer			Writer
4121>>>>68	byte	!0x2e			document
4122!:mime	application/vnd.sun.xml.writer
4123!:ext	sxw
4124>>>>68	string	.template		template
4125!:mime	application/vnd.sun.xml.writer.template
4126!:ext	stw
4127>>>>68	string	.web			Web template
4128!:mime	application/vnd.sun.xml.writer.web
4129!:ext	stw
4130>>>>68	string	.global			global document
4131!:mime	application/vnd.sun.xml.writer.global
4132!:ext	sxg
4133>>>62	string	calc			Calc
4134>>>>66	byte	!0x2e			spreadsheet
4135!:mime	application/vnd.sun.xml.calc
4136!:ext	sxc
4137>>>>66	string	.template		template
4138!:mime	application/vnd.sun.xml.calc.template
4139!:ext	stc
4140>>>62	string	draw			Draw
4141>>>>66	byte	!0x2e			document
4142!:mime	application/vnd.sun.xml.draw
4143!:ext	sxd
4144>>>>66	string	.template		template
4145!:mime	application/vnd.sun.xml.draw.template
4146!:ext	std
4147>>>62	string	impress			Impress
4148>>>>69	byte	!0x2e			presentation
4149!:mime	application/vnd.sun.xml.impress
4150!:ext	sxi
4151>>>>69	string	.template		template
4152!:mime	application/vnd.sun.xml.impress.template
4153!:ext	sti
4154>>>62	string	math			Math document
4155!:mime	application/vnd.sun.xml.math
4156!:ext	sxm
4157>>>62	string	base			Database file
4158!:mime	application/vnd.sun.xml.base
4159!:ext	sdb
4160
4161# URL:	https://wiki.openoffice.org/wiki/Documentation/DevGuide/Extensions/File_Format
4162# From:	Joerg Jenderek
4163# Note:	only few OXT samples are detected here by mimetype member
4164#	is used by OpenOffice and LibreOffice and probably also NeoOffice
4165#	verified by `unzip -Zv *.oxt` or `7z l -slt *.oxt`
4166>>50	string	vnd.openofficeorg.		OpenOffice
4167>>>68	string	extension			\b/LibreOffice Extension
4168# http://extension.nirsoft.net/oxt
4169!:mime	application/vnd.openofficeorg.extension
4170# like: Gallery-Puzzle.2.1.0.1.oxt
4171!:ext	oxt
4172
4173#   OpenDocument formats (for OpenOffice 2.x / StarOffice >= 8)
4174#   URL: http://fileformats.archiveteam.org/wiki/OpenDocument
4175#    https://lists.oasis-open.org/archives/office/200505/msg00006.html
4176#    (mimetype contains "application/vnd.oasis.opendocument.<SUBTYPE>")
4177>>50	string	vnd.oasis.opendocument.	OpenDocument
4178>>>73	string	text
4179>>>>77	byte	!0x2d			Text
4180!:mime	application/vnd.oasis.opendocument.text
4181!:ext	odt
4182>>>>77	string	-template		Text Template
4183!:mime	application/vnd.oasis.opendocument.text-template
4184!:ext	ott
4185>>>>77	string	-web			HTML Document Template
4186!:mime	application/vnd.oasis.opendocument.text-web
4187!:ext	oth
4188>>>>77	string	-master			Master Document
4189!:mime	application/vnd.oasis.opendocument.text-master
4190!:ext	odm
4191>>>73	string	graphics
4192>>>>81	byte	!0x2d			Drawing
4193!:mime	application/vnd.oasis.opendocument.graphics
4194!:ext	odg
4195>>>>81	string	-template		Drawing Template
4196!:mime	application/vnd.oasis.opendocument.graphics-template
4197!:ext	otg
4198>>>73	string	presentation
4199>>>>85	byte	!0x2d			Presentation
4200!:mime	application/vnd.oasis.opendocument.presentation
4201!:ext	odp
4202>>>>85	string	-template		Presentation Template
4203!:mime	application/vnd.oasis.opendocument.presentation-template
4204!:ext	otp
4205>>>73	string	spreadsheet
4206>>>>84	byte	!0x2d			Spreadsheet
4207!:mime	application/vnd.oasis.opendocument.spreadsheet
4208!:ext	ods
4209>>>>84	string	-template		Spreadsheet Template
4210!:mime	application/vnd.oasis.opendocument.spreadsheet-template
4211!:ext	ots
4212>>>73	string	chart
4213>>>>78	byte	!0x2d			Chart
4214!:mime	application/vnd.oasis.opendocument.chart
4215!:ext	odc
4216>>>>78	string	-template		Chart Template
4217!:mime	application/vnd.oasis.opendocument.chart-template
4218!:ext	otc
4219>>>73	string	formula
4220>>>>80	byte	!0x2d			Formula
4221!:mime	application/vnd.oasis.opendocument.formula
4222!:ext	odf
4223>>>>80	string	-template		Formula Template
4224!:mime	application/vnd.oasis.opendocument.formula-template
4225!:ext	otf
4226# https://www.loc.gov/preservation/digital/formats/fdd/fdd000441.shtml
4227>>>73	string	database		Database
4228!:mime	application/vnd.oasis.opendocument.database
4229!:ext	odb
4230# Valid for LibreOffice Base 6.0.1.1 at least
4231>>>73	string	base 			Database
4232# https://bugs.documentfoundation.org/show_bug.cgi?id=45854
4233!:mime	application/vnd.oasis.opendocument.database
4234#!:mime	application/vnd.oasis.opendocument.base
4235!:ext	odb
4236>>>73	string	image
4237>>>>78	byte	!0x2d			Image
4238!:mime	application/vnd.oasis.opendocument.image
4239!:ext	odi
4240>>>>78	string	-template		Image Template
4241!:mime	application/vnd.oasis.opendocument.image-template
4242!:ext	oti
4243
4244#  EPUB (OEBPS) books using OCF (OEBPS Container Format)
4245#    https://www.idpf.org/ocf/ocf1.0/download/ocf10.htm, section 4.
4246#    From: Ralf Brown <ralf.brown@gmail.com>
4247>>50	string	epub+zip	EPUB document
4248!:mime application/epub+zip
4249
4250# From:	Joerg Jenderek
4251# URL:	http://en.wikipedia.org/wiki/CorelDRAW
4252# NOTE:	version; til 2 WL-based; from 3 til 13 by ./riff; from 14 zip based
4253>>50	string	x-vnd.corel.	 Corel
4254>>>62	string	draw.document+zip	Draw drawing, version 14-16
4255!:mime	application/x-vnd.corel.draw.document+zip
4256!:ext	cdr
4257>>>62	string	draw.template+zip	Draw template, version 14-16
4258!:mime	application/x-vnd.corel.draw.template+zip
4259!:ext	cdrt
4260>>>62	string	zcf.draw.document+zip	Draw drawing, version 17-22
4261!:mime	application/x-vnd.corel.zcf.draw.document+zip
4262!:ext	cdr
4263>>>62	string	zcf.draw.template+zip	Draw template, version 17-22
4264!:mime	application/x-vnd.corel.zcf.draw.template+zip
4265!:ext	cdt/cdrt
4266# URL:	http://product.corel.com/help/CorelDRAW/540240626/Main/EN/Doc/CorelDRAW-Other-file-formats.html
4267>>>62	string	zcf.pattern+zip		Draw pattern, version 22
4268!:mime	application/x-vnd.corel.zcf.pattern+zip
4269!:ext	pat
4270# URL:		https://en.wikipedia.org/wiki/Corel_Designer
4271# Reference:	http://fileformats.archiveteam.org/wiki/Corel_Designer
4272# Note:		called by TrID "Corel DESIGN graphics"
4273>>>62	string	designer.document+zip		DESIGNER graphics, version 14-16
4274!:mime	application/x-vnd.corel.designer.document+zip
4275!:ext	des
4276>>>62	string	zcf.designer.document+zip	DESIGNER graphics, version 17-21
4277!:mime	application/x-vnd.corel.zcf.designer.document+zip
4278!:ext	des
4279# URL:	http://product.corel.com/help/CorelDRAW/540223850/Main/EN/Documentation/
4280#	CorelDRAW-Corel-Symbol-Library-CSL.html
4281>>>62	string	symbol.library+zip		Symbol Library, version 6-16.3
4282!:mime	application/x-vnd.corel.symbol.library+zip
4283!:ext	csl
4284>>>62	string	zcf.symbol.library+zip		Symbol Library, version 17-22
4285!:mime	application/x-vnd.corel.zcf.symbol.library+zip
4286!:ext	csl
4287
4288#  Catch other ZIP-with-mimetype formats
4289#	In a ZIP file, the bytes immediately after a member's contents are
4290#	always "PK". The 2 regex rules here print the "mimetype" member's
4291#	contents up to the first 'P'. Luckily, most MIME types don't contain
4292#	any capital 'P's. This is a kludge.
4293#    (mimetype contains "application/<OTHER>")
4294>>50		default	x			Zip data
4295>>>38		regex	[!-OQ-~]+		(MIME type "%s"?)
4296!:mime	application/zip
4297#    (mimetype contents other than "application/*")
4298>26		string	\x8\0\0\0mimetype
4299>>38		string	!application/
4300>>>38		regex	[!-OQ-~]+		Zip data (MIME type "%s"?)
4301!:mime	application/zip
4302
4303# Java Jar files
4304>(26.s+30)	leshort	0xcafe		Java archive data (JAR)
4305!:mime	application/java-archive
4306
4307# iOS App
4308>(26.s+30)	leshort	!0xcafe
4309>>26		string	!\x8\0\0\0mimetype
4310>>>30		string	Payload/
4311>>>>38		search/64       .app/   iOS App
4312!:mime application/x-ios-app
4313
4314# Dup, see above.
4315#>30	search/100/b application/epub+zip	EPUB document
4316#!:mime application/epub+zip
4317
4318# Generic zip archives (Greg Roelofs, c/o zip-bugs@wkuvx1.wku.edu)
4319#   Next line excludes specialized formats:
4320>(26.s+30)	leshort	!0xcafe
4321>>30	search/100/b !application/epub+zip
4322>>>26    string          !\x8\0\0\0mimetype	Zip archive data
4323!:mime	application/zip
4324>>>>4	beshort		x			\b, at least
4325>>>>4	use		zipversion
4326>>>>4	beshort		x			to extract
4327>>>>8	beshort		x			\b, compression method=
4328>>>>8	use		zipcompression
4329>>>>0x161	string		WINZIP		\b, WinZIP self-extracting
4330
4331# StarView Metafile
4332# From Pierre Ducroquet <pinaraf@pinaraf.info>
43330	string	VCLMTF	StarView MetaFile
4334>6	beshort	x	\b, version %d
4335>8	belong	x	\b, size %d
4336
4337# Zoo archiver
433820	lelong		0xfdc4a7dc	Zoo archive data
4339!:mime	application/x-zoo
4340>4	byte		>48		\b, v%c.
4341>>6	byte		>47		\b%c
4342>>>7	byte		>47		\b%c
4343>32	byte		>0		\b, modify: v%d
4344>>33	byte		x		\b.%d+
4345>42	lelong		0xfdc4a7dc	\b,
4346>>70	byte		>0		extract: v%d
4347>>>71	byte		x		\b.%d+
4348
4349# Shell archives
435010	string		#\ This\ is\ a\ shell\ archive	shell archive text
4351!:mime	application/octet-stream
4352
4353#
4354# LBR. NB: May conflict with the questionable
4355#          "binary Computer Graphics Metafile" format.
4356#
43570       string  \0\ \ \ \ \ \ \ \ \ \ \ \0\0    LBR archive data
4358#
4359# PMA (CP/M derivative of LHA)
4360# Update: Joerg Jenderek
4361# URL: https://en.wikipedia.org/wiki/LHA_(file_format)
4362#
4363#2       string          -pm0-           PMarc archive data [pm0]
43642	string		-pm0-
4365>0	use	lharc-file
4366#2       string          -pm1-           PMarc archive data [pm1]
43672	string		-pm1-
4368>0	use	lharc-file
4369#2       string          -pm2-           PMarc archive data [pm2]
43702	string		-pm2-
4371>0	use	lharc-file
43722       string          -pms-           PMarc SFX archive (CP/M, DOS)
4373#!:mime	application/x-foobar-exec
4374!:ext com
43755       string          -pc1-           PopCom compressed executable (CP/M)
4376#!:mime	application/x-
4377#!:ext com
4378
4379# From Rafael Laboissiere <rafael@laboissiere.net>
4380# The Project Revision Control System (see
4381# http://prcs.sourceforge.net) generates a packaged project
4382# file which is recognized by the following entry:
43830	leshort		0xeb81	PRCS packaged project
4384
4385# Microsoft cabinets
4386# by David Necas (Yeti) <yeti@physics.muni.cz>
4387#0	string	MSCF\0\0\0\0	Microsoft cabinet file data,
4388#>25	byte	x		v%d
4389#>24	byte	x		\b.%d
4390# MPi: All CABs have version 1.3, so this is pointless.
4391# Better magic in debian-additions.
4392
4393# GTKtalog catalogs
4394# by David Necas (Yeti) <yeti@physics.muni.cz>
43954	string	gtktalog\ 	GTKtalog catalog data,
4396>13	string	3		version 3
4397>>14	beshort	0x677a		(gzipped)
4398>>14	beshort	!0x677a		(not gzipped)
4399>13	string	>3		version %s
4400
4401############################################################################
4402# Parity archive reconstruction file, the 'par' file format now used on Usenet.
44030       string          PAR\0	PARity archive data
4404>48	leshort		=0	- Index file
4405>48	leshort		>0	- file number %d
4406
4407# Felix von Leitner <felix-file@fefe.de>
44080	string	d8:announce	BitTorrent file
4409!:mime	application/x-bittorrent
4410!:ext	torrent
4411# Durval Menezes, <jmgthbfile at durval dot com>
44120	string	d13:announce-list	BitTorrent file
4413!:mime	application/x-bittorrent
4414!:ext	torrent
44150	string	d7:comment	BitTorrent file
4416!:mime	application/x-bittorrent
4417!:ext	torrent
44180	string	d4:info		BitTorrent file
4419!:mime	application/x-bittorrent
4420!:ext	torrent
4421
4422# Atari MSA archive - Teemu Hukkanen <tjhukkan@iki.fi>
4423# URL:		http://fileformats.archiveteam.org/wiki/MSA_(Magic_Shadow_Archiver)
4424# Reference:	http://info-coach.fr/atari/documents/_mydoc/FD_Image_File_Format.pdf
4425#		http://mark0.net/download/triddefs_xml.7z/defs/m/msa.trid.xml
4426# Update:	Joerg Jenderek
4427# Note:		called by TrID "Atari MSA Disk Image" and verified by
4428#		command like `deark -l -m msa -d2 PDATS578.msa` as " Atari ST floppy disk image"
4429# GRR: line below is too general as it matches setup.skin
44300	beshort 0x0e0f
4431# skip foo setup.skin with unrealistic high number 52255 of sides by check for valid "low" value
4432>4	ubeshort <2		Atari MSA archive data
4433#!:mime	application/octet-stream
4434!:mime	application/x-atari-msa
4435!:ext	msa
4436# sectors per track like: 9 10
4437>>2	beshort x		\b, %d sectors per track
4438# sides (0 or 1; add 1 to this to get correct number of sides)
4439>>4	beshort 0		\b, 1 sided
4440>>4	beshort 1		\b, 2 sided
4441# starting track like: 0
4442>>6	beshort x		\b, starting track: %d
4443# ending track like: 39 79 80 81
4444>>8	beshort x		\b, ending track: %d
4445# tracks content
4446#>>10	ubequad x		\b, track content %#16.16llx
4447
4448# Alternate ZIP string (amc@arwen.cs.berkeley.edu)
44490	string	PK00PK\003\004	Zip archive data
4450!:mime	application/zip
4451!:ext zip/cbz
4452
4453# ACE archive (from http://www.wotsit.org/download.asp?f=ace)
4454# by Stefan `Sec` Zehl <sec@42.org>
44557	string		**ACE**		ACE archive data
4456!:mime	application/x-ace-compressed
4457!:ext	ace
4458>15	byte	>0		version %d
4459>16	byte	=0x00		\b, from MS-DOS
4460>16	byte	=0x01		\b, from OS/2
4461>16	byte	=0x02		\b, from Win/32
4462>16	byte	=0x03		\b, from Unix
4463>16	byte	=0x04		\b, from MacOS
4464>16	byte	=0x05		\b, from WinNT
4465>16	byte	=0x06		\b, from Primos
4466>16	byte	=0x07		\b, from AppleGS
4467>16	byte	=0x08		\b, from Atari
4468>16	byte	=0x09		\b, from Vax/VMS
4469>16	byte	=0x0A		\b, from Amiga
4470>16	byte	=0x0B		\b, from Next
4471>14	byte	x		\b, version %d to extract
4472>5	leshort &0x0080		\b, multiple volumes,
4473>>17	byte	x		\b (part %d),
4474>5	leshort &0x0002		\b, contains comment
4475>5	leshort	&0x0200		\b, sfx
4476>5	leshort	&0x0400		\b, small dictionary
4477>5	leshort	&0x0800		\b, multi-volume
4478>5	leshort	&0x1000		\b, contains AV-String
4479>>30	string	\x16*UNREGISTERED\x20VERSION*	(unregistered)
4480>5	leshort &0x2000		\b, with recovery record
4481>5	leshort &0x4000		\b, locked
4482>5	leshort &0x8000		\b, solid
4483# Date in MS-DOS format (whatever that is)
4484#>18	lelong	x		Created on
4485
4486# sfArk : compression program for Soundfonts (sf2) by Dirk Jagdmann
4487# <doj@cubic.org>
44880x1A	string	sfArk		sfArk compressed Soundfont
4489>0x15	string	2
4490>>0x1	string	>\0		Version %s
4491>>0x2A	string	>\0		: %s
4492
4493# DR-DOS 7.03 Packed File *.??_
4494# Reference: http://www.antonis.de/dos/dos-tuts/mpdostip/html/nwdostip.htm
4495# Note:	unpacked by PNUNPACK.EXE
44960	string	Packed\ File\
4497# by looking for Control-Z skip ASCII text starting with Packed File
4498>0x18	ubyte	0x1a		Personal NetWare Packed File
4499!:mime	application/x-novell-compress
4500!:ext	??_
4501>>12	string	x		\b, was "%.12s"
4502# 1 or 2
4503#>>0x19	ubyte	x		\b, at 0x19 %u
4504>>0x1b	ulelong	x		with %u bytes
4505
4506# EET archive
4507# From: Tilman Sauerbeck <tilman@code-monkey.de>
45080	belong	0x1ee7ff00	EET archive
4509!:mime	application/x-eet
4510
4511# rzip archives
45120	string	RZIP		rzip compressed data
4513>4	byte	x		- version %d
4514>5	byte	x		\b.%d
4515>6	belong	x		(%d bytes)
4516
4517# From:		Joerg Jenderek
4518# URL:		https://help.foxitsoftware.com/kb/install-fzip-file.php
4519# reference:	http://mark0.net/download/triddefs_xml.7z/
4520#		defs/f/fzip.trid.xml
4521# Note: unknown compression; No "PK" zip magic; normally in directory like
4522#	"%APPDATA%\Foxit Software\Addon\Foxit Reader\Install"
45230	ubequad	0x2506781901010000	Foxit add-on/update
4524!:mime	application/x-fzip
4525!:ext	fzip
4526
4527# From: "Robert Dale" <robdale@gmail.com>
45280	belong	123		dar archive,
4529>4	belong	x		label "%.8x
4530>>8	belong	x		%.8x
4531>>>12	beshort	x		%.4x"
4532>14	byte	0x54		end slice
4533>14	beshort	0x4e4e		multi-part
4534>14	beshort	0x4e53		multi-part, with -S
4535
4536# Symbian installation files
4537#  https://www.thouky.co.uk/software/psifs/sis.html
4538#  http://developer.symbian.com/main/downloads/papers/SymbianOSv91/softwareinstallsis.pdf
45398	lelong	0x10000419	Symbian installation file
4540!:mime	application/vnd.symbian.install
4541>4	lelong	0x1000006D	(EPOC release 3/4/5)
4542>4	lelong	0x10003A12	(EPOC release 6)
45430	lelong	0x10201A7A	Symbian installation file (Symbian OS 9.x)
4544!:mime	x-epoc/x-sisx-app
4545
4546# From "Nelson A. de Oliveira" <naoliv@gmail.com>
45470	string	MPQ\032		MoPaQ (MPQ) archive
4548
4549# From: "Nelson A. de Oliveira" <naoliv@gmail.com>
4550# .kgb
45510	string KGB_arch		KGB Archiver file
4552>10	string x		with compression level %.1s
4553
4554# xar (eXtensible ARchiver) archive
4555# URL: https://en.wikipedia.org/wiki/Xar_(archiver)
4556# xar archive format: https://code.google.com/p/xar/
4557# From: "David Remahl" <dremahl@apple.com>
4558# Update: Joerg Jenderek
4559# TODO: lzma compression; X509Data for pkg and xip
4560# Note: verified by `xar --dump-header -f FullBundleUpdate.xar` or
4561# 7z t -txar Xcode_10.2_beta_4.xip`
45620	string	xar!		xar archive
4563!:mime	application/x-xar
4564# pkg for Mac OSX installer package like FullBundleUpdate.pkg
4565# xip for signed Apple software like Xcode_10.2_beta_4.xip
4566!:ext	xar/pkg/xip
4567# always 28 in older archives
4568>4	ubeshort >28		\b, header size %u
4569# currently there exit only version 1 since about 2014
4570>6	ubeshort >1		version %u,
4571>8	ubequad	x		compressed TOC: %llu,
4572#>16	ubequad	x		uncompressed TOC: %llu,
4573# cksum_alg 0-2 in older and also 3-4 in newer
4574>24	belong	0		no checksum
4575>24	belong	1		SHA-1 checksum
4576>24	belong	2		MD5 checksum
4577>24	belong	3		SHA-256 checksum
4578>24	belong	4		SHA-512 checksum
4579>24	belong	>4		unknown %#x checksum
4580#>24	belong	>4		checksum
4581#			For no compression jump 0 bytes
4582>24	belong	0
4583>>0		ubyte	x
4584# jump more bytes forward by header size
4585>>>&(4.S)	ubyte	x
4586# jump more bytes forward by compressed table of contents size
4587#>>>>&(8.Q)	ubequad	x	\b, heap data %#llx
4588>>>>&(8.Q)	ubyte	x
4589# look for data by ./compress after message with 1 space at end
4590>>>>>&-3	indirect x	\b, contains
4591#			For SHA-1 jump 20 minus 2 bytes
4592>24	belong	1
4593>>18		ubyte	x
4594# jump more bytes forward by header size
4595>>>&(4.S)	ubyte	x
4596# jump more bytes forward by compressed table of contents size
4597>>>>&(8.Q)	ubyte	x
4598# data compressed by gzip, bzip, lzma or none
4599>>>>>&-1	indirect x	\b, contains
4600#			For SHA-256 jump 32 minus 2 bytes
4601>24	belong	3
4602>>30		ubyte	x
4603# jump more bytes forward by header size
4604>>>&(4.S)	ubyte	x
4605# jump more bytes forward by compressed table of contents size
4606>>>>&(8.Q)	ubyte	x
4607>>>>>&-1	indirect x	\b, contains
4608#			For SHA-512 jump 64 minus 2 bytes
4609>24	belong	4
4610>>62		ubyte	x
4611# jump more bytes forward by header size
4612>>>&(4.S)	ubyte	x
4613# jump more bytes forward by compressed table of contents size
4614>>>>&(8.Q)	ubyte	x
4615>>>>>&-1	indirect x	\b, contains
4616
4617# Type: Parity Archive
4618# From: Daniel van Eeden <daniel_e@dds.nl>
46190	string	PAR2		Parity Archive Volume Set
4620
4621# Bacula volume format. (Volumes always start with a block header.)
4622# URL: https://bacula.org/3.0.x-manuals/en/developers/developers/Block_Header.html
4623# From: Adam Buchbinder <adam.buchbinder@gmail.com>
462412	string	BB02		Bacula volume
4625>20	bedate	x		\b, started %s
4626
4627# ePub is XHTML + XML inside a ZIP archive.  The first member of the
4628#   archive must be an uncompressed file called 'mimetype' with contents
4629#   'application/epub+zip'
4630
4631
4632# From: "Michael Gorny" <mgorny@gentoo.org>
4633# ZPAQ: http://mattmahoney.net/dc/zpaq.html
46340	string	zPQ	ZPAQ stream
4635>3	byte	x	\b, level %d
4636# From: Barry Carter <carter.barry@gmail.com>
4637# https://encode.ru/threads/456-zpaq-updates/page32
46380	string	7kSt	ZPAQ file
4639
4640# BBeB ebook, unencrypted (LRF format)
4641# URL: https://www.sven.de/librie/Librie/LrfFormat
4642# From: Adam Buchbinder <adam.buchbinder@gmail.com>
46430	string	L\0R\0F\0\0\0	BBeB ebook data, unencrypted
4644>8	beshort	x		\b, version %d
4645>36	byte	1		\b, front-to-back
4646>36	byte	16		\b, back-to-front
4647>42	beshort	x		\b, (%dx,
4648>44	beshort	x		%d)
4649
4650# Symantec GHOST image by Joerg Jenderek at May 2014
4651# https://us.norton.com/ghost/
4652# https://www.garykessler.net/library/file_sigs.html
46530		ubelong&0xFFFFf7f0	0xFEEF0100	Norton GHost image
4654# *.GHO
4655>2		ubyte&0x08		0x00		\b, first file
4656# *.GHS or *.[0-9] with cns program option
4657>2		ubyte&0x08		0x08		\b, split file
4658# part of split index interesting for *.ghs
4659>>4		ubyte			x		id=%#x
4660# compression tag minus one equals numeric compression command line switch z[1-9]
4661>3		ubyte			0		\b, no compression
4662>3		ubyte			2		\b, fast compression (Z1)
4663>3		ubyte			3		\b, medium compression (Z2)
4664>3		ubyte			>3
4665>>3		ubyte			<11		\b, compression (Z%d-1)
4666>2		ubyte&0x08		0x00
4667# ~ 30 byte password field only for *.gho
4668>>12		ubequad			!0		\b, password protected
4669>>44		ubyte			!1
4670# 1~Image All, sector-by-sector only for *.gho
4671>>>10		ubyte			1		\b, sector copy
4672# 1~Image Boot track only for *.gho
4673>>>43		ubyte			1		\b, boot track
4674# 1~Image Disc only for *.gho implies Image Boot track and sector copy
4675>>44		ubyte			1		\b, disc sector copy
4676# optional image description only *.gho
4677>>0xff		string			>\0		"%-.254s"
4678# look for DOS sector end sequence
4679>0xE08	search/7776		\x55\xAA
4680>>&-512	indirect		x		\b; contains
4681
4682# Google Chrome extensions
4683# https://developer.chrome.com/extensions/crx
4684# https://developer.chrome.com/extensions/hosting
46850	string	Cr24	Google Chrome extension
4686!:mime	application/x-chrome-extension
4687>4	ulong	x	\b, version %u
4688
4689# SeqBox - Sequenced container
4690# ext: sbx, seqbox
4691# Marco Pontello marcopon@gmail.com
4692# reference: https://github.com/MarcoPon/SeqBox
46930	string	SBx	SeqBox,
4694>3	byte	x	version %d
4695
4696# LyNX archive
469756	string	USE\040LYNX\040TO\040DISSOLVE\040THIS\040FILE	 LyNX archive
4698
4699# From: Joerg Jenderek
4700# URL: https://www.acronis.com/
4701# Reference: https://en.wikipedia.org/wiki/TIB_(file_format)
4702# Note: only tested with True Image 2013 Build 5962 and 2019 Build 14110
47030	ubequad		0xce24b9a220000000	Acronis True Image backup
4704!:mime	application/x-acronis-tib
4705!:ext	tib
4706# 01000000
4707#>20	ubelong		x			\b, at 20 %#x
4708# 20000000
4709#>28	ubelong		x			\b, at 28 %#x
4710# strings like "Generic- SD/MMC 1.00" "Unknown Disk" "Msft Virtual Disk 1.0"
4711# ???
4712# strings like "\Device\0000011e" "\Device\0000015a"
4713#>0	search/0x6852300/cs	\\Device\\
4714#>>&-1	pstring		x			\b, %s
4715# "\Device\HarddiskVolume30" "\Device\HarddiskVolume39"
4716#>>>&1	search/180/cs	\\Device\\
4717#>>>>&-1	pstring		x			\b, %s
4718#>>>>>&0	search/29/cs	\0\0\xc8\0
4719# disk label
4720#>>>>>>&10	lestring16	x		\b, disk label %11.11s
4721#>>>>>>&9	plestring16	x		\b, disk label "%11.11s"
4722#>>>>>>&10	ubequad	x			%16.16llx
4723
4724
4725# Gentoo XPAK binary package
4726# by Michal Gorny <mgorny@gentoo.org>
4727# https://gitweb.gentoo.org/proj/portage.git/tree/man/xpak.5
4728-4	string	STOP
4729>-16	string	XPAKSTOP	Gentoo binary package (XPAK)
4730
4731# From:		Joerg Jenderek
4732# URL:		https://kodi.wiki/view/TexturePacker
4733# Reference:	https://mirrors.kodi.tv/releases/source/17.3-Krypton.tar.gz
4734# /xbmc-Krypton/xbmc/guilib/XBTF.h
4735# /xbmc-Krypton/xbmc/guilib/XBTF.cpp
47360	string	XBTF
4737# skip ASCII text by looking for terminating \0 of path
4738>264	ubyte	0		XBMC texture package
4739!:mime	application/x-xbmc-xbt
4740!:ext	xbt
4741# XBTF_VERSION 2
4742>>4	string	!2		\b, version %-.1s
4743# nofFiles /xbmc-Krypton/xbmc/guilib/XBTFReader.cpp
4744>>5	ulelong	x		\b, %u file
4745# plural s
4746>>5	ulelong	>1		\bs
4747# path[CXBTFFile[MaximumPathLength=256]
4748>>9	string	x		\b, 1st %s
4749
4750# ALZIP archive
4751# by Hyungjun Park <hyungjun.park@worksmobile.com>, Hajin Jang <hajin_jang@worksmobile.com>
4752# http://kippler.com/win/unalz/
4753# https://salsa.debian.org/l10n-korean-team/unalz
47540	string	ALZ\001		ALZ archive data
4755!:ext   alz
4756
4757# https://cf-aldn.altools.co.kr/setup/EGG_Specification.zip
47580	string	EGGA		EGG archive data,
4759!:ext   egg
4760>5	byte	x		version %u
4761>4	byte	x		\b.%u
4762>>0x0E	ulelong	=0x08E28222
4763>>0x0E	ulelong	=0x24F5A262	\b, split
4764>>0x0E	ulelong	=0x24E5A060	\b, solid
4765>>0x0E	default	x		\b, unknown
4766
4767# PAQ9A archive
4768# URL: http://mattmahoney.net/dc/#paq9a
4769# Note: Line 1186 of paq9a.cpp gives the magic bytes
47700	string	pQ9\001		PAQ9A archive
4771
4772# From wof (wof@stachelkaktus.net)
47730	string	Unison\ archive\ format	Unison archive format
4774
4775#------------------------------------------------------------------------------
4776# URL: 		https://de.wikipedia.org/wiki/Aria_(Software)
4777# Reference:	https://github.com/aria2/aria2/blob/master/doc/manual-src/en/technical-notes.rst
4778# From:		Joerg Jenderek
4779# Note:		only version 1 suited
4780# check for valid version one
47810		beshort		0x0001
4782# skip most uncompressed DEGAS med-res bitmap *.PI2 and GEM bitmap (v1) *.IMG
4783# by test for valid infoHashCheck extension
4784>2		ubelong&0xffFFffFE	0x00000000
4785# skip DEGAS med-res bitmap DIAGRAM1.PI2 by test for valid length of download
4786>>(6.L+14)	ubequad			>0
4787>>>0	use     aria
47880	name	aria
4789# version; (0x0000) or (0x0001); for 0 all multi-byte are in host byte order. For 1 big endian
4790>0	beshort		x	aria2 control file, version %u
4791#!:mime	application/octet-stream
4792!:mime	application/x-aria
4793!:ext	aria2
4794# EXTension; if EXT[3]&1 == 1 checks whether saved InfoHash and current downloading the same; infoHashCheck extension
4795>2		ubelong		!0	\b, infoHashCheck %#x
4796# info hash length like: 0 14h
4797>6		ubelong		!0	\b, %#x bytes info hash
4798# info hash; BitTorrent InfoHash
4799>>10		ubequad		x	%#16.16llx...
4800# piece length; the length of the piece like: 400h 100000h
4801>(6.L+10)	ubelong		x	\b, piece length 0x%x
4802# total length; the total length of the download
4803>(6.L+14)	ubequad		x	\b, total length %llu
4804#>(6.L+14)	ubequad		x	\b, total length %#llx
4805# upload length; the uploaded length of download like: 0 400h
4806>(6.L+22)	ubequad		!0	\b, upload length %#llx
4807# bitfield length; the length of bitfield like: 4 6 Ah 10h 13h 167h
4808>(6.L+30)	ubelong		x	\b, %#x bytes bitfield
4809# bitfield; bitfield which represents current download progress
4810>(6.L+34)	ubequad		!0	%#llx...
4811
4812#------------------------------------------------------------------------------
4813# $File: arm,v 1.2 2021/07/14 17:40:31 christos Exp $
4814# arm: file(1) magic for ARM COFF
4815#
4816# https://docs.microsoft.com/en-us/windows/win32/debug/pe-format
4817
4818# Aarch64
48190	leshort		0xaa64
4820# test for unused flag bits in f_flags
4821>18	uleshort&0x8E80	0
4822# use little endian variant of subroutine to
4823# display name+variables+flags for common object formatted files
4824>>0	use				display-coff
4825!:strength -10
4826
4827# ARM
48280	leshort		0x01c0
4829# test for unused flag bits in f_flags
4830>18	uleshort&0x8E80	0
4831# use little endian variant of subroutine to
4832# display name+variables+flags for common object formatted files
4833>>0	use				display-coff
4834!:strength -10
4835
4836# ARM Thumb
48370	leshort		0x01c2
4838# test for unused flag bits in f_flags
4839>18	uleshort&0x8E80	0
4840# use little endian variant of subroutine to
4841# display name+variables+flags for common object formatted files
4842>>0	use				display-coff
4843!:strength -10
4844
4845# ARMv7 Thumb
48460	leshort		0x01c4
4847# test for unused flag bits in f_flags
4848>18	uleshort&0x8E80	0
4849# use little endian variant of subroutine to
4850# display name+variables+flags for common object formatted files
4851>>0	use				display-coff
4852!:strength -10
4853
4854#------------------------------------------------------------------------------
4855# $File: asf,v 1.3 2022/04/25 17:33:13 christos Exp $
4856# asf:  file(1) magic for Microsoft Advanced Systems Format (ASF) files
4857# http://www.staroceans.org/e-book/ASF_Specification.pdf
4858
48590	name	asf-name
4860# ASF_Data_Object
4861#>0	guid	75B22636-668E-11CF-A6D9-00AA0062CE6C
4862#>16	lequad	>0
4863#>>(16.q)	use	asf-object
4864# ASF_Simple_Index_Object
4865>0	guid	33000890-E5B1-11CF-89F4-00A0C90349CB
4866>0	guid	D6E229D3-35DA-11D1-9034-00A0C90349BE ASF_Index_Object
4867>0	guid	FEB103F8-12AD-4C64-840F-2A1D2F7AD48C ASF_Media_Object_Index_Object
4868>0	guid	3CB73FD0-0C4A-4803-953D-EDF7B6228F0C ASF_Timecode_Index_Object
4869
4870# ASF_File_Properties_Object
4871>0	guid	8CABDCA1-A947-11CF-8EE4-00C00C205365
4872
4873# ASF_Stream_Properties_Object
4874>0	guid	B7DC0791-A9B7-11CF-8EE6-00C00C205365
4875#>>56	lequad	x		Time Offset %lld
4876#>>64	lelong	x		Type-Specicic Data Length %d
4877#>>68	lelong	x		Error Correction Data Length %d
4878#>>72	leshort	x		Flags %#x
4879#>>74	lelong	x		Reserved %x
4880# ASF_Audio_Media
4881>>24	guid	F8699E40-5B4D-11CF-A8FD-00805F5C442B \b, Audio Media (
4882>>>78	leshort	x	\bCodec Id %d
4883>>>80	leshort	x	\b, Number of channels %d
4884>>>82	lelong	x	\b, Samples Per Second %d
4885>>>86	lelong	x	\b, Average Number of Bytes Per Second %d
4886>>>90	lelong	x	\b, Block Alignment %d
4887>>>94	leshort	x	\b, Bits Per Sample %d
4888# ASF_Video_Media
4889>>24	guid	BC19EFC0-5B4D-11CF-A8FD-00805F5C442B \b, Video Media (
4890>>>78	lelong	x	\bEncoded Image Width %d
4891>>>82	lelong	x	\b, Encoded Image Height %d
4892#>>>85	leshort	x	\b, Format Data Size %x
4893>>>93	lelong	x	\b, Image Width %d
4894>>>97	lelong	x	\b, Image Height %d
4895#>>>101	leshort	x	\b, Reserved %#x
4896>>>103	leshort	x	\b, Bits Per Pixel Count %d
4897#>>>105	lelong	x 	\b, Compression ID %d
4898#>>>109	lelong	x	\b, Image Size %d
4899#>>>113	lelong	x	\b, Horizontal Pixels Per Meter %d
4900#>>>117	lelong	x	\b, Vertical Pixels Per Meter %d
4901#>>>121	lelong	x	\b, Colors Used Count %d
4902#>>>125	lelong	x	\b, Important Colors Count %d
4903>>0	lelong	x	\b, Error correction type
4904>>40	use	asf-name
4905>>0	lelong	x	\b)
4906#ASF_Header_Extension_Object
4907>0	guid	5FBF03B5-A92E-11CF-8EE3-00C00C205365
4908# ASF_Codec_List_Object
4909>0	guid	86D15240-311D-11D0-A3A4-00A0C90348F6
4910>0	guid	1EFB1A30-0B62-11D0-A39B-00A0C90348F6 ASF_Script_Command_Object
4911>0	guid	F487CD01-A951-11CF-8EE6-00C00C205365 ASF_Marker_Object
4912>0	guid	D6E229DC-35DA-11D1-9034-00A0C90349BE ASF_Bitrate_Mutual_Exclusion_Object
4913>0	guid	75B22635-668E-11CF-A6D9-00AA0062CE6C ASF_Error_Correction_Object
4914# ASF_Content_Description_Object
4915>0	guid	75B22633-668E-11CF-A6D9-00AA0062CE6C
4916#>>24	leshort	title length %d
4917#>>26	leshort	author length %d
4918#>>28	leshort	copyright length %d
4919#>>30	leshort	descriptor length %d
4920#>>32	leshort	rating length %d
4921>0	guid	D2D0A440-E307-11D2-97F0-00A0C95EA850 ASF_Extended_Content_Description_Object
4922>0	guid	2211B3FA-BD23-11D2-B4B7-00A0C955FC6E ASF_Content_Branding_Object
4923>0	guid	7BF875CE-468D-11D1-8D82-006097C9A2B2 ASF_Stream_Bitrate_Properties_Object
4924>0	guid	2211B3FB-BD23-11D2-B4B7-00A0C955FC6E ASF_Content_Encryption_Object
4925>0	guid	298AE614-2622-4C17-B935-DAE07EE9289C ASF_Extended_Content_Encryption_Object
4926>0	guid	2211B3FC-BD23-11D2-B4B7-00A0C955FC6E ASF_Digital_Signature_Object
4927# ASF_Padding_Object
4928>0	guid	1806D474-CADF-4509-A4BA-9AABCB96AAE8
4929>0	guid	14E6A5CB-C672-4332-8399-A96952065B5A ASF_Extended_Stream_Properties_Object
4930>0	guid	A08649CF-4775-4670-8A16-6E35357566CD ASF_Advanced_Mutual_Exclusion_Object
4931>0	guid	D1465A40-5A79-4338-B71B-E36B8FD6C249 ASF_Group_Mutual_Exclusion_Object
4932>0	guid	D4FED15B-88D3-454F-81F0-ED5C45999E24 ASF_Stream_Prioritization_Object
4933>0	guid	A69609E6-517B-11D2-B6AF-00C04FD908E9 ASF_Bandwidth_Sharing_Object
4934>0	guid	7C4346A9-EFE0-4BFC-B229-393EDE415C85 ASF_Language_List_Object
4935>0	guid	C5F8CBEA-5BAF-4877-8467-AA8C44FA4CCA ASF_Metadata_Object
4936>0	guid	44231C94-9498-49D1-A141-1D134E457054 ASF_Metadata_Library_Object
4937>0	guid	D6E229DF-35DA-11D1-9034-00A0C90349BE ASF_Index_Parameters_Object
4938>0	guid	6B203BAD-3F11-48E4-ACA8-D7613DE2CFA7 ASF_Media_Object_Index_Parameters_Object
4939>0	guid	F55E496D-9797-4B5D-8C8B-604DFE9BFB24 ASF_Timecode_Index_Parameters_Object
4940>0	guid	26F18B5D-4584-47EC-9F5F-0E651F0452C9 ASF_Compatibility_Object
4941>0	guid	43058533-6981-49E6-9B74-AD12CB86D58C ASF_Advanced_Content_Encryption_Object
4942>0	guid	59DACFC0-59E6-11D0-A3AC-00A0C90348F6 ASF_Command_Media
4943>0	guid	B61BE100-5B4E-11CF-A8FD-00805F5C442B ASF_JFIF_Media
4944>0	guid	35907DE0-E415-11CF-A917-00805F5C442B ASF_Degradable_JPEG_Media
4945>0	guid	91BD222C-F21C-497A-8B6D-5AA86BFC0185 ASF_File_Transfer_Media
4946>0	guid	3AFB65E2-47EF-40F2-AC2C-70A90D71D343 ASF_Binary_Media
4947>0	guid	776257D4-C627-41CB-8F81-7AC7FF1C40CC ASF_Web_Stream_Media_Subtype
4948>0	guid	DA1E6B13-8359-4050-B398-388E965BF00C ASF_Web_Stream_Format
4949>0	guid	20FB5700-5B55-11CF-A8FD-00805F5C442B ASF_No_Error_Correction
4950>0	guid	BFC3CD50-618F-11CF-8BB2-00AA00B4E220 ASF_Audio_Spread
4951>0	guid	ABD3D211-A9BA-11cf-8EE6-00C00C205365 ASF_Reserved_1
4952>0	guid	7A079BB6-DAA4-4e12-A5CA-91D38DC11A8D ASF_Content_Encryption_System_Windows_Media_DRM
4953# _Network_Devices
4954>0	guid	86D15241-311D-11D0-A3A4-00A0C90348F6 ASF_Reserved_2
4955>0	guid	4B1ACBE3-100B-11D0-A39B-00A0C90348F6 ASF_Reserved_3
4956>0	guid	4CFEDB20-75F6-11CF-9C0F-00A0C90349CB ASF_Reserved_4
4957>0	guid	D6E22A00-35DA-11D1-9034-00A0C90349BE ASF_Mutex_Language
4958>0	guid	D6E22A01-35DA-11D1-9034-00A0C90349BE ASF_Mutex_Bitrate
4959>0	guid	D6E22A02-35DA-11D1-9034-00A0C90349BE ASF_Mutex_Unknown
4960>0	guid	AF6060AA-5197-11D2-B6AF-00C04FD908E9 ASF_Bandwidth_Sharing_Exclusive
4961>0	guid	AF6060AB-5197-11D2-B6AF-00C04FD908E9 ASF_Bandwidth_Sharing_Partial
4962>0	guid	399595EC-8667-4E2D-8FDB-98814CE76C1E ASF_Payload_Extension_System_Timecode
4963>0	guid	E165EC0E-19ED-45D7-B4A7-25CBD1E28E9B ASF_Payload_Extension_System_File_Name
4964>0	guid	D590DC20-07BC-436C-9CF7-F3BBFBF1A4DC ASF_Payload_Extension_System_Content_Type
4965>0	guid	1B1EE554-F9EA-4BC8-821A-376B74E4C4B8 ASF_Payload_Extension_System_Pixel_Aspect_Ratio
4966>0	guid	C6BD9450-867F-4907-83A3-C77921B733AD ASF_Payload_Extension_System_Sample_Duration
4967>0	guid	6698B84E-0AFA-4330-AEB2-1C0A98D7A44D ASF_Payload_Extension_System_Encryption_Sample_ID
4968>0	guid	00E1AF06-7BEC-11D1-A582-00C04FC29CFB ASF_Payload_Extension_System_Degradable_JPEG
4969
49700	name	asf-object
4971>0	use	asf-name
4972#>>16	lequad	>0					(size %lld) [
4973>>16	lequad	>0
4974>>>(16.q)	use	asf-object
4975#>>16	lequad	0	]
4976
4977# Microsoft Advanced Streaming Format (ASF) <mpruett@sgi.com>
49780	guid	75B22630-668E-11CF-A6D9-00AA0062CE6C	Microsoft ASF
4979!:mime  video/x-ms-asf
4980#>16	lequad	>0					(size %lld
4981#>>24	lelong	x					\b, %d header objects)
4982>16	lequad	>0
4983>>30	use	asf-object
4984>>(16.q)	use	asf-object
4985#------------------------------------------------------------------------------
4986# $File: assembler,v 1.6 2013/12/11 14:14:20 christos Exp $
4987# make:  file(1) magic for assembler source
4988#
49890	regex	\^[\040\t]{0,50}\\.asciiz		assembler source text
4990!:mime	text/x-asm
49910	regex	\^[\040\t]{0,50}\\.byte		assembler source text
4992!:mime	text/x-asm
49930	regex	\^[\040\t]{0,50}\\.even		assembler source text
4994!:mime	text/x-asm
49950	regex	\^[\040\t]{0,50}\\.globl		assembler source text
4996!:mime	text/x-asm
49970	regex	\^[\040\t]{0,50}\\.text		assembler source text
4998!:mime	text/x-asm
49990	regex	\^[\040\t]{0,50}\\.file		assembler source text
5000!:mime	text/x-asm
50010	regex	\^[\040\t]{0,50}\\.type		assembler source text
5002!:mime	text/x-asm
5003
5004#------------------------------------------------------------------------------
5005# $File: asterix,v 1.5 2009/09/19 16:28:08 christos Exp $
5006# asterix:  file(1) magic for Aster*x; SunOS 5.5.1 gave the 4-character
5007# strings as "long" - we assume they're just strings:
5008# From: guy@netapp.com (Guy Harris)
5009#
50100	string		*STA		Aster*x
5011>7	string		WORD			Words Document
5012>7	string		GRAP			Graphic
5013>7	string		SPRE			Spreadsheet
5014>7	string		MACR			Macro
50150	string		2278		Aster*x Version 2
5016>29	byte		0x36			Words Document
5017>29	byte		0x35			Graphic
5018>29	byte		0x32			Spreadsheet
5019>29	byte		0x38			Macro
5020
5021
5022#------------------------------------------------------------------------------
5023# $File: att3b,v 1.10 2017/03/17 21:35:28 christos Exp $
5024# att3b:  file(1) magic for AT&T 3B machines
5025#
5026# The `versions' should be un-commented if they work for you.
5027# (Was the problem just one of endianness?)
5028#
5029# 3B20
5030#
5031# The 3B20 conflicts with SCCS.
5032#0	beshort		0550		3b20 COFF executable
5033#>12	belong		>0		not stripped
5034#>22	beshort		>0		- version %d
5035#0	beshort		0551		3b20 COFF executable (TV)
5036#>12	belong		>0		not stripped
5037#>22	beshort		>0		- version %d
5038#
5039# WE32K
5040#
50410	beshort		0560		WE32000 COFF
5042>18	beshort		^00000020	object
5043>18	beshort		&00000020	executable
5044>12	belong		>0		not stripped
5045>18	beshort		^00010000	N/A on 3b2/300 w/paging
5046>18	beshort		&00020000	32100 required
5047>18	beshort		&00040000	and MAU hardware required
5048>20	beshort		0407		(impure)
5049>20	beshort		0410		(pure)
5050>20	beshort		0413		(demand paged)
5051>20	beshort		0443		(target shared library)
5052>22	beshort		>0		- version %d
50530	beshort		0561		WE32000 COFF executable (TV)
5054>12	belong		>0		not stripped
5055#>18	beshort		&00020000	- 32100 required
5056#>18	beshort		&00040000	and MAU hardware required
5057#>22	beshort		>0		- version %d
5058#
5059# core file for 3b2
50600	string		\000\004\036\212\200	3b2 core file
5061>364	string		>\0		of '%s'
5062
5063#------------------------------------------------------------------------------
5064# $File: audio,v 1.124 2022/08/28 08:58:20 christos Exp $
5065# audio:  file(1) magic for sound formats (see also "iff")
5066#
5067# Jan Nicolai Langfeldt (janl@ifi.uio.no), Dan Quinlan (quinlan@yggdrasil.com),
5068# and others
5069#
5070
5071# Sun/NeXT audio data
50720	string		.snd		Sun/NeXT audio data:
5073>12	belong		1		8-bit ISDN mu-law,
5074!:mime	audio/basic
5075>12	belong		2		8-bit linear PCM [REF-PCM],
5076!:mime	audio/basic
5077>12	belong		3		16-bit linear PCM,
5078!:mime	audio/basic
5079>12	belong		4		24-bit linear PCM,
5080!:mime	audio/basic
5081>12	belong		5		32-bit linear PCM,
5082!:mime	audio/basic
5083>12	belong		6		32-bit IEEE floating point,
5084!:mime	audio/basic
5085>12	belong		7		64-bit IEEE floating point,
5086!:mime	audio/basic
5087>12	belong		8		Fragmented sample data,
5088>12	belong		10		DSP program,
5089>12	belong		11		8-bit fixed point,
5090>12	belong		12		16-bit fixed point,
5091>12	belong		13		24-bit fixed point,
5092>12	belong		14		32-bit fixed point,
5093>12	belong		18		16-bit linear with emphasis,
5094>12	belong		19		16-bit linear compressed,
5095>12	belong		20		16-bit linear with emphasis and compression,
5096>12	belong		21		Music kit DSP commands,
5097>12	belong		23		8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice enc.),
5098!:mime  audio/x-adpcm
5099>12	belong		24		compressed (8-bit CCITT G.722 ADPCM)
5100>12	belong		25		compressed (3-bit CCITT G.723.3 ADPCM),
5101>12	belong		26		compressed (5-bit CCITT G.723.5 ADPCM),
5102>12	belong		27		8-bit A-law (CCITT G.711),
5103>20	belong		1		mono,
5104>20	belong		2		stereo,
5105>20	belong		4		quad,
5106>16	belong		>0		%d Hz
5107
5108# DEC systems (e.g. DECstation 5000) use a variant of the Sun/NeXT format
5109# that uses little-endian encoding and has a different magic number
51100	lelong		0x0064732E	DEC audio data:
5111>12	lelong		1		8-bit ISDN mu-law,
5112!:mime	audio/x-dec-basic
5113>12	lelong		2		8-bit linear PCM [REF-PCM],
5114!:mime	audio/x-dec-basic
5115>12	lelong		3		16-bit linear PCM,
5116!:mime	audio/x-dec-basic
5117>12	lelong		4		24-bit linear PCM,
5118!:mime	audio/x-dec-basic
5119>12	lelong		5		32-bit linear PCM,
5120!:mime	audio/x-dec-basic
5121>12	lelong		6		32-bit IEEE floating point,
5122!:mime	audio/x-dec-basic
5123>12	lelong		7		64-bit IEEE floating point,
5124!:mime	audio/x-dec-basic
5125>12	belong		8		Fragmented sample data,
5126>12	belong		10		DSP program,
5127>12	belong		11		8-bit fixed point,
5128>12	belong		12		16-bit fixed point,
5129>12	belong		13		24-bit fixed point,
5130>12	belong		14		32-bit fixed point,
5131>12	belong		18		16-bit linear with emphasis,
5132>12	belong		19		16-bit linear compressed,
5133>12	belong		20		16-bit linear with emphasis and compression,
5134>12	belong		21		Music kit DSP commands,
5135>12	lelong		23		8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice enc.),
5136!:mime	audio/x-dec-basic
5137>12	belong		24		compressed (8-bit CCITT G.722 ADPCM)
5138>12	belong		25		compressed (3-bit CCITT G.723.3 ADPCM),
5139>12	belong		26		compressed (5-bit CCITT G.723.5 ADPCM),
5140>12	belong		27		8-bit A-law (CCITT G.711),
5141>20	lelong		1		mono,
5142>20	lelong		2		stereo,
5143>20	lelong		4		quad,
5144>16	lelong		>0		%d Hz
5145
5146# Creative Labs AUDIO stuff
51470	string	MThd			Standard MIDI data
5148!:mime	audio/midi
5149>8 	beshort	x			(format %d)
5150>10	beshort	x			using %d track
5151>10	beshort		>1		\bs
5152>12	beshort&0x7fff	x		at 1/%d
5153>12	beshort&0x8000	>0		SMPTE
5154
51550	string	CTMF			Creative Music (CMF) data
5156!:mime	audio/x-unknown
51570	string	SBI			SoundBlaster instrument data
5158!:mime	audio/x-unknown
51590	string	Creative\ Voice\ File	Creative Labs voice data
5160!:mime	audio/x-unknown
5161# is this next line right?  it came this way...
5162>19	byte	0x1A
5163>23	byte	>0			- version %d
5164>22	byte	>0			\b.%d
5165
5166# first entry is also the string "NTRK"
51670	belong		0x4e54524b	MultiTrack sound data
5168>4	belong		x		- version %d
5169
5170# Extended MOD format (*.emd) (Greg Roelofs, newt@uchicago.edu); NOT TESTED
5171# [based on posting 940824 by "Dirk/Elastik", husberg@lehtori.cc.tut.fi]
51720	string		EMOD		Extended MOD sound data,
5173>4	byte&0xf0	x		version %d
5174>4	byte&0x0f	x		\b.%d,
5175>45	byte		x		%d instruments
5176>83	byte		0		(module)
5177>83	byte		1		(song)
5178
5179# Real Audio (Magic .ra\0375)
51800	belong		0x2e7261fd	RealAudio sound file
5181!:mime	audio/x-pn-realaudio
51820	string		.RMF\0\0\0	RealMedia file
5183!:mime	application/vnd.rn-realmedia
5184#video/x-pn-realvideo
5185#video/vnd.rn-realvideo
5186#application/vnd.rn-realmedia
5187#	sigh, there are many mimes for that but the above are the most common.
5188
5189# MTM/669/FAR/S3M/ULT/XM format checking [Aaron Eppert, aeppert@dialin.ind.net]
5190# Oct 31, 1995
5191# fixed by <doj@cubic.org> 2003-06-24
5192# Too short...
5193#0	string		MTM		MultiTracker Module sound file
5194#0	string		if		Composer 669 Module sound data
5195#0	string		JN		Composer 669 Module sound data (extended format)
51960	string		MAS_U		ULT(imate) Module sound data
5197
5198#0	string		FAR		Module sound data
5199#>4	string		>\15		Title: "%s"
5200
52010x2c	string		SCRM		ScreamTracker III Module sound data
5202>0	string		>\0		Title: "%s"
5203!:mime	audio/x-s3m
5204
5205# .stm before it got above .s3m extension
52060x16	string		\!Scream\!	ScreamTracker Module sound data
5207>0	string		>\0		Title: "%s"
5208
5209# Gravis UltraSound patches
5210# From <ache@nagual.ru>
5211
52120	string		GF1PATCH110\0ID#000002\0	GUS patch
52130	string		GF1PATCH100\0ID#000002\0	Old GUS	patch
5214
5215# mime types according to http://www.geocities.com/nevilo/mod.htm:
5216#	audio/it	.it
5217#	audio/x-zipped-it	.itz
5218#	audio/xm	fasttracker modules
5219#	audio/x-s3m	screamtracker modules
5220#	audio/s3m	screamtracker modules
5221#	audio/x-zipped-mod	mdz
5222#	audio/mod	mod
5223#	audio/x-mod	All modules (mod, s3m, 669, mtm, med, xm, it, mdz, stm, itz, xmz, s3z)
5224
5225#
5226# Taken from loader code from mikmod version 2.14
5227# by Steve McIntyre (stevem@chiark.greenend.org.uk)
5228# <doj@cubic.org> added title printing on 2003-06-24
52290	string	MAS_UTrack_V00
5230>14	string	>/0		ultratracker V1.%.1s module sound data
5231!:mime	audio/x-mod
5232#audio/x-tracker-module
5233
52340	string	UN05		MikMod UNI format module sound data
5235
52360	string	Extended\ Module: Fasttracker II module sound data
5237!:mime	audio/x-mod
5238#audio/x-tracker-module
5239>17	string	>\0		Title: "%s"
5240
524121	string/c	=!SCREAM!	Screamtracker 2 module sound data
5242!:mime	audio/x-mod
5243#audio/x-screamtracker-module
524421	string	BMOD2STM	Screamtracker 2 module sound data
5245!:mime	audio/x-mod
5246#audio/x-screamtracker-module
52471080	string	M.K.		4-channel Protracker module sound data
5248!:mime	audio/x-mod
5249#audio/x-protracker-module
5250>0	string	>\0		Title: "%s"
52511080	string	M!K!		4-channel Protracker module sound data
5252!:mime	audio/x-mod
5253#audio/x-protracker-module
5254>0	string	>\0		Title: "%s"
52551080	string	FLT4		4-channel Startracker module sound data
5256!:mime	audio/x-mod
5257#audio/x-startracker-module
5258>0	string	>\0		Title: "%s"
52591080	string	FLT8		8-channel Startracker module sound data
5260!:mime	audio/x-mod
5261#audio/x-startracker-module
5262>0	string	>\0		Title: "%s"
52631080	string	4CHN		4-channel Fasttracker module sound data
5264!:mime	audio/x-mod
5265#audio/x-fasttracker-module
5266>0	string	>\0		Title: "%s"
52671080	string	6CHN		6-channel Fasttracker module sound data
5268!:mime	audio/x-mod
5269#audio/x-fasttracker-module
5270>0	string	>\0		Title: "%s"
52711080	string	8CHN		8-channel Fasttracker module sound data
5272!:mime	audio/x-mod
5273#audio/x-fasttracker-module
5274>0	string	>\0		Title: "%s"
52751080	string	CD81		8-channel Octalyser module sound data
5276!:mime	audio/x-mod
5277#audio/x-octalysertracker-module
5278>0	string	>\0		Title: "%s"
52791080	string	OKTA		8-channel Octalyzer module sound data
5280!:mime	audio/x-mod
5281#audio/x-octalysertracker-module
5282>0	string	>\0		Title: "%s"
5283# Not good enough.
5284#1082	string	CH
5285#>1080	string	>/0		%.2s-channel Fasttracker "oktalyzer" module sound data
52861080	string	16CN		16-channel Taketracker module sound data
5287!:mime	audio/x-mod
5288#audio/x-taketracker-module
5289>0	string	>\0		Title: "%s"
52901080	string	32CN		32-channel Taketracker module sound data
5291!:mime	audio/x-mod
5292#audio/x-taketracker-module
5293>0	string	>\0		Title: "%s"
5294
5295# TOC sound files -Trevor Johnson <trevor@jpj.net>
5296#
52970       string          TOC             TOC sound file
5298
5299# sidfiles <pooka@iki.fi>
5300# added name,author,(c) and new RSID type by <doj@cubic.org> 2003-06-24
53010	string		SIDPLAY\ INFOFILE	Sidplay info file
5302
53030	string		PSID			PlaySID v2.2+ (AMIGA) sidtune
5304>4	beshort		>0			w/ header v%d,
5305>14	beshort		=1			single song,
5306>14	beshort		>1			%d songs,
5307>16	beshort		>0			default song: %d
5308>0x16	string		>\0			name: "%s"
5309>0x36	string		>\0			author: "%s"
5310>0x56	string		>\0			copyright: "%s"
5311
53120	string		RSID			RSID sidtune PlaySID compatible
5313>4	beshort		>0			w/ header v%d,
5314>14	beshort		=1			single song,
5315>14	beshort		>1			%d songs,
5316>16	beshort		>0			default song: %d
5317>0x16	string		>\0			name: "%s"
5318>0x36	string		>\0			author: "%s"
5319>0x56	string		>\0			copyright: "%s"
5320
5321# IRCAM sound files - Michael Pruett <michael@68k.org>
5322# http://www-mmsp.ece.mcgill.ca/documents/AudioFormats/IRCAM/IRCAM.html
53230	belong		0x64a30100		IRCAM file (VAX little-endian)
53240	belong		0x0001a364		IRCAM file (VAX big-endian)
53250	belong		0x64a30200		IRCAM file (Sun big-endian)
53260	belong		0x0002a364		IRCAM file (Sun little-endian)
53270	belong		0x64a30300		IRCAM file (MIPS little-endian)
53280	belong		0x0003a364		IRCAM file (MIPS big-endian)
53290	belong		0x64a30400		IRCAM file (NeXT big-endian)
53300	belong		0x64a30400		IRCAM file (NeXT big-endian)
53310	belong		0x0004a364		IRCAM file (NeXT little-endian)
5332
5333# NIST SPHERE <mpruett@sgi.com>
53340	string		NIST_1A\n\ \ \ 1024\n	NIST SPHERE file
5335
5336# Sample Vision <mpruett@sgi.com>
53370	string		SOUND\ SAMPLE\ DATA\ 	Sample Vision file
5338
5339# Audio Visual Research <tonigonenstein@users.sourceforge.net>
53400	string		2BIT			Audio Visual Research file,
5341>12	beshort		=0			mono,
5342>12	beshort		=-1			stereo,
5343>14	beshort		x			%d bits
5344>16	beshort		=0			unsigned,
5345>16	beshort		=-1			signed,
5346>22	belong&0x00ffffff	x		%d Hz,
5347>18	beshort		=0			no loop,
5348>18	beshort		=-1			loop,
5349>21	ubyte		<128			note %d,
5350>22	byte		=0			replay 5.485 KHz
5351>22	byte		=1			replay 8.084 KHz
5352>22	byte		=2			replay 10.971 KHz
5353>22	byte		=3			replay 16.168 KHz
5354>22	byte		=4			replay 21.942 KHz
5355>22	byte		=5			replay 32.336 KHz
5356>22	byte		=6			replay 43.885 KHz
5357>22	byte		=7			replay 47.261 KHz
5358
5359# SGI SoundTrack <mpruett@sgi.com>
53600	string		_SGI_SoundTrack		SGI SoundTrack project file
5361# ID3 version 2 tags <waschk@informatik.uni-rostock.de>
53620	string		ID3	Audio file with ID3 version 2
5363>3	byte		x	\b.%d
5364>4	byte		x	\b.%d
5365>>5	byte		&0x80	\b, unsynchronized frames
5366>>5	byte		&0x40	\b, extended header
5367>>5	byte		&0x20	\b, experimental
5368>>5	byte		&0x10	\b, footer present
5369>(6.I+10)	indirect	x	\b, contains:
5370
5371# NSF (NES sound file) magic
53720	string		NESM\x1a	NES Sound File
5373>14	string		>\0		("%s" by
5374>46	string		>\0		%s, copyright
5375>78	string		>\0		%s),
5376>5	byte		x		version %d,
5377>6	byte		x		%d tracks,
5378>122	byte&0x2	=1		dual PAL/NTSC
5379>122	byte&0x1	=1		PAL
5380>122	byte&0x1	=0		NTSC
5381
5382# NSFE (Extended NES sound file) magic
5383# http://slickproductions.org/docs/NSF/nsfespec.txt
5384# From: David Pflug <david@pflug.email>
53850	string		NSFE		Extended NES Sound File
5386>48	search/0x1000	auth
5387>>&0	string		>\0		("%s"
5388>>>&1	string		>\0		by %s
5389>>>>&1	string		>\0		\b, copyright %s
5390>>>>>&1	string		>\0		\b, ripped by %s
5391>20	byte		x		\b), %d tracks,
5392>18	byte&0x2	=1		dual PAL/NTSC
5393>18     byte&0x2	=0
5394>>18	byte&0x1	=1		PAL
5395>>18	byte&0x1	=0		NTSC
5396
5397# Type: SNES SPC700 sound files
5398# From: Josh Triplett <josh@freedesktop.org>
53990	string	SNES-SPC700\ Sound\ File\ Data\ v	SNES SPC700 sound file
5400>&0	string	0.30					\b, version %s
5401>>0x23	byte	0x1B					\b, without ID666 tag
5402>>0x23	byte	0x1A					\b, with ID666 tag
5403>>>0x2E	string	>\0					\b, song "%.32s"
5404>>>0x4E	string	>\0					\b, game "%.32s"
5405
5406# Impulse tracker module (audio/x-it)
54070	string		IMPM		Impulse Tracker module sound data -
5408!:mime	audio/x-mod
5409>4	string		>\0		"%s"
5410>40	leshort		!0		compatible w/ITv%x
5411>42	leshort		!0		created w/ITv%x
5412
5413# Imago Orpheus module (audio/x-imf)
541460	string		IM10		Imago Orpheus module sound data -
5415>0	string		>\0		"%s"
5416
5417# From <collver1@attbi.com>
5418# These are the /etc/magic entries to decode modules, instruments, and
5419# samples in Impulse Tracker's native format.
5420
54210	string		IMPS		Impulse Tracker Sample
5422>18	byte		&2		16 bit
5423>18	byte		^2		8 bit
5424>18	byte		&4		stereo
5425>18	byte		^4		mono
54260	string		IMPI		Impulse Tracker Instrument
5427>28	leshort		!0		ITv%x
5428>30	byte		!0		%d samples
5429
5430# Yamaha TX Wave:  file(1) magic for Yamaha TX Wave audio files
5431# From <collver1@attbi.com>
54320	string		LM8953		Yamaha TX Wave
5433>22	byte		0x49		looped
5434>22	byte		0xC9		non-looped
5435>23	byte		1		33kHz
5436>23	byte		2		50kHz
5437>23	byte		3		16kHz
5438
5439# scream tracker:  file(1) magic for Scream Tracker sample files
5440#
5441# From <collver1@attbi.com>
544276	string		SCRS		Scream Tracker Sample
5443>0	byte		1		sample
5444>0	byte		2		adlib melody
5445>0	byte		>2		adlib drum
5446>31	byte		&2		stereo
5447>31	byte		^2		mono
5448>31	byte		&4		16bit little endian
5449>31	byte		^4		8bit
5450>30	byte		0		unpacked
5451>30	byte		1		packed
5452
5453# audio
5454# From: Cory Dikkers <cdikkers@swbell.net>
54550	string		MMD0		MED music file, version 0
54560	string		MMD1		OctaMED Pro music file, version 1
54570	string		MMD3		OctaMED Soundstudio music file, version 3
54580	string		OctaMEDCmpr	OctaMED Soundstudio compressed file
54590	string		MED		MED_Song
54600	string		SymM		Symphonie SymMOD music file
5461#
5462# Track Length (TRL), Tracks (TRK), Samples (SMP), Subsongs (SS)
5463# http://lclevy.free.fr/exotica/ahx/ahxformat.txt
54640	string		THX		AHX version
5465>3	byte		=0		1 module data
5466>3	byte		=1		2 module data
5467>11	ubyte		x		TRK: %u
5468>10	ubyte		x		TRL: %u
5469>12	ubyte		x		SMP: %u
5470>13	ubyte		x		SS: %u
5471>(4.H)		string		x		Title: "%.128s"
5472
5473# header is mostly AHX format
54740		string		HVL
5475>3		byte		<2	Hively Tracker Song
5476>3		byte		=0		v1 module data
5477>3		byte		=1		v2 module data
5478>11		ubyte		x		TRK: %u
5479>10		ubyte		x		TRL: %u
5480>12		ubyte		x		SMP: %u
5481>13		ubyte		x		SS: %u
5482>8		ubyte/4		=0		CHN: 4
5483>8		ubyte/4		>0		CHN: 4+%u
5484#>-0		offset		<0xffff
5485>(4.H)		string		x		Title: "%.128s"
5486
5487#
54880	string		OKTASONG	Oktalyzer module data
5489#
54900	string		DIGI\ Booster\ module\0	%s
5491>20	byte		>0		%c
5492>>21	byte		>0		\b%c
5493>>>22	byte		>0		\b%c
5494>>>>23	byte		>0		\b%c
5495>610	string		>\0		\b, "%s"
5496#
54970	string		DBM0	   	DIGI Booster Pro Module
5498>4	byte		>0		V%X.
5499>>5	byte		x		\b%02X
5500>16	string		>\0		\b, "%s"
5501#
55020	string		FTMN		FaceTheMusic module
5503>16	string		>\0d		\b, "%s"
5504
5505# From: <doj@cubic.org> 2003-06-24
55060	string		AMShdr\32	Velvet Studio AMS Module v2.2
55070	string		Extreme		Extreme Tracker AMS Module v1.3
55080	string		DDMF		Xtracker DMF Module
5509>4	byte		x		v%i
5510>0xD	string		>\0		Title: "%s"
5511>0x2B	string		>\0		Composer: "%s"
55120	string		DSM\32		Dynamic Studio Module DSM
55130	string		SONG		DigiTrekker DTM Module
55140	string		DMDL		DigiTrakker MDL Module
55150	string		PSM\32		Protracker Studio PSM Module
551644	string		PTMF		Poly Tracker PTM Module
5517>0	string		>\32		Title: "%s"
55180	string		MT20		MadTracker 2.0 Module MT2
55190	string		RAD\40by\40REALiTY!! RAD Adlib Tracker Module RAD
55200	string		RTMM		RTM Module
55210x426	string		MaDoKaN96	XMS Adlib Module
5522>0	string		>\0		Composer: "%s"
55230	string		AMF		AMF Module
5524>4	string		>\0		Title: "%s"
55250	string		MODINFO1	Open Cubic Player Module Information MDZ
55260	string		Extended\40Instrument: Fast Tracker II Instrument
5527
5528# From: Takeshi Hamasaki <hma@syd.odn.ne.jp>
5529# NOA Nancy Codec file
55300	string		\210NOA\015\012\032	NOA Nancy Codec Movie file
5531# Yamaha SMAF format
55320	string		MMMD		Yamaha SMAF file
5533# Sharp Jisaku Melody format for PDC
55340	string		\001Sharp\040JisakuMelody	SHARP Cell-Phone ringing Melody
5535>20	string		Ver01.00	Ver. 1.00
5536>>32	byte		x		, %d tracks
5537
5538# Free lossless audio codec <http://flac.sourceforge.net>
5539# From: Przemyslaw Augustyniak <silvathraec@rpg.pl>
55400	string			fLaC		FLAC audio bitstream data
5541!:mime	audio/flac
5542>4	byte&0x7f		>0		\b, unknown version
5543>4	byte&0x7f		0		\b
5544# some common bits/sample values
5545>>20	beshort&0x1f0		0x030		\b, 4 bit
5546>>20	beshort&0x1f0		0x050		\b, 6 bit
5547>>20	beshort&0x1f0		0x070		\b, 8 bit
5548>>20	beshort&0x1f0		0x0b0		\b, 12 bit
5549>>20	beshort&0x1f0		0x0f0		\b, 16 bit
5550>>20	beshort&0x1f0		0x170		\b, 24 bit
5551>>20	byte&0xe		0x0		\b, mono
5552>>20	byte&0xe		0x2		\b, stereo
5553>>20	byte&0xe		0x4		\b, 3 channels
5554>>20	byte&0xe		0x6		\b, 4 channels
5555>>20	byte&0xe		0x8		\b, 5 channels
5556>>20	byte&0xe		0xa		\b, 6 channels
5557>>20	byte&0xe		0xc		\b, 7 channels
5558>>20	byte&0xe		0xe		\b, 8 channels
5559# sample rates derived from known oscillator frequencies;
5560# 24.576 MHz (video/fs=48kHz), 22.5792 (audio/fs=44.1kHz) and
5561# 16.384 (other/fs=32kHz).
5562>>17	belong&0xfffff0       	0x02b110	\b, 11.025 kHz
5563>>17	belong&0xfffff0       	0x03e800	\b, 16 kHz
5564>>17	belong&0xfffff0       	0x056220	\b, 22.05 kHz
5565>>17	belong&0xfffff0       	0x05dc00	\b, 24 kHz
5566>>17	belong&0xfffff0       	0x07d000	\b, 32 kHz
5567>>17	belong&0xfffff0       	0x0ac440	\b, 44.1 kHz
5568>>17	belong&0xfffff0       	0x0bb800	\b, 48 kHz
5569>>17	belong&0xfffff0       	0x0fa000	\b, 64 kHz
5570>>17	belong&0xfffff0       	0x158880	\b, 88.2 kHz
5571>>17	belong&0xfffff0       	0x177000	\b, 96 kHz
5572>>17	belong&0xfffff0       	0x1f4000	\b, 128 kHz
5573>>17	belong&0xfffff0       	0x2b1100	\b, 176.4 kHz
5574>>17	belong&0xfffff0       	0x2ee000	\b, 192 kHz
5575>>17	belong&0xfffff0       	0x3e8000	\b, 256 kHz
5576>>17	belong&0xfffff0       	0x562200	\b, 352.8 kHz
5577>>17	belong&0xfffff0       	0x5dc000	\b, 384 kHz
5578>>21	byte&0xf		>0		\b, >4G samples
5579>>21	byte&0xf		0		\b
5580>>>22	belong			>0		\b, %u samples
5581>>>22	belong			0		\b, length unknown
5582
5583# (ISDN) VBOX voice message file (Wolfram Kleff)
55840       string          VBOX            VBOX voice message data
5585
5586# ReBorn Song Files (.rbs)
5587# David J. Singer <doc@deadvirgins.org.uk>
55888       string          RB40             RBS Song file
5589>29     string          ReBorn           created by ReBorn
5590>37     string          Propellerhead    created by ReBirth
5591
5592# Synthesizer Generator and Kimwitu share their file format
55930	string		A#S#C#S#S#L#V#3	    Synthesizer Generator or Kimwitu data
5594# Kimwitu++ uses a slightly different magic
55950	string		A#S#C#S#S#L#HUB	    Kimwitu++ data
5596
5597# From "Simon Hosie
55980       string  TFMX-SONG       TFMX module sound data
5599
5600# Monkey's Audio compressed audio format (.ape)
5601# From danny.milo@gmx.net (Danny Milosavljevic)
5602# New version from Abel Cheung <abel (@) oaka.org>
56030		string		MAC\040		Monkey's Audio compressed format
5604!:mime audio/x-ape
5605>4		uleshort	>0x0F8B		version %d
5606>>(0x08.l)	uleshort	=1000		with fast compression
5607>>(0x08.l)	uleshort	=2000		with normal compression
5608>>(0x08.l)	uleshort	=3000		with high compression
5609>>(0x08.l)	uleshort	=4000		with extra high compression
5610>>(0x08.l)	uleshort	=5000		with insane compression
5611>>(0x08.l+18)	uleshort	=1		\b, mono
5612>>(0x08.l+18)	uleshort	=2		\b, stereo
5613>>(0x08.l+20)	ulelong		x		\b, sample rate %d
5614>4		uleshort	<0x0F8C		version %d
5615>>6		uleshort	=1000		with fast compression
5616>>6		uleshort	=2000		with normal compression
5617>>6		uleshort	=3000		with high compression
5618>>6		uleshort	=4000		with extra high compression
5619>>6		uleshort	=5000		with insane compression
5620>>10		uleshort	=1		\b, mono
5621>>10		uleshort	=2		\b, stereo
5622>>12		ulelong		x		\b, sample rate %d
5623
5624# adlib sound files
5625# From: Alex Myczko <alex@aiei.ch>
5626
5627# https://github.com/rerrahkr/BambooTracker
56280	string	BambooTracker	BambooTracker
5629>13	string	Mod		Module
5630>13	string	Ist		Instrument
5631>13	string	Bnk		Bank
5632>22	byte	x		\b, version %u
5633>21	byte	x		\b.%u
5634>20	byte	x		\b.%u
5635
56360	string		CC2x		CheeseCutter 2 song
5637
56380    	string		RAWADATA	RdosPlay RAW
5639
56401068	string		RoR		AMUSIC Adlib Tracker
5641
56420	string		JCH		EdLib
5643
56440	string		mpu401tr	MPU-401 Trakker
5645
56460	string		SAdT		Surprise! Adlib Tracker
5647>4	byte		x		Version %d
5648
56490	string		XAD!		eXotic ADlib
5650
56510	string		ofTAZ!		eXtra Simple Music
5652
56530	string		FMK!		FM Kingtracker Song
5654
56550	string		DFM		DFM Song
5656
56570	string		\<CUD-FM-File\>	CFF Song
5658
56590	string		_A2module	A2M Song
5660
5661# Spectrum 128 tunes (.ay files).
5662# From: Emanuel Haupt <ehaupt@critical.ch>
56630	string		ZXAYEMUL	Spectrum 128 tune
5664
56650	string		\0BONK		BONK,
5666#>5	byte		x		version %d
5667>14	byte		x		%d channel(s),
5668>15	byte		=1		lossless,
5669>15	byte		=0		lossy,
5670>16	byte		x		mid-side
5671
5672384	string		LockStream	LockStream Embedded file (mostly MP3 on old Nokia phones)
5673
5674# format VQF (proprietary codec for sound)
5675# some infos on the header file available at :
5676# http://www.twinvq.org/english/technology_format.html
56770	string		TWIN97012000	VQF data
5678>27	short		0		\b, Mono
5679>27	short		1		\b, Stereo
5680>31	short 		>0		\b, %d kbit/s
5681>35	short 		>0		\b, %d kHz
5682
5683# Nelson A. de Oliveira (naoliv@gmail.com)
5684# .eqf
56850	string	Winamp\ EQ\ library\ file	%s
5686# it will match only versions like v<digit>.<digit>
5687# Since I saw only eqf files with version v1.1 I think that it's OK
5688>23	string	x	\b%.4s
5689# .preset
56900	string	[Equalizer\ preset]	XMMS equalizer preset
5691# .m3u
56920	search/1	#EXTM3U 	M3U playlist text
5693# .pls
56940	search/1	[playlist]	PLS playlist text
5695# licq.conf
56961	string	[licq]			LICQ configuration file
5697
5698# Atari ST audio files by Dirk Jagdmann <doj@cubic.org>
5699# NOTE: Most SNDH music is packed using ICE, which has
5700# magic numbers "ICE!" and "Ice!". Some SNDH music is
5701# not packed, so we check for both packed and unpacked.
570212	string			SNDH	SNDH Atari ST music
57030	belong&0xFFDFDFFF	0x49434521
5704>14	search/40		NDH	SNDH Atari ST music
5705>14	search/40		TITL	SNDH Atari ST music
57060	string		SC68\ Music-file\ /\ (c)\ (BeN)jami	sc68 Atari ST music
5707
5708# musepak support From: "Jiri Pejchal" <jiri.pejchal@gmail.com>
57090       string          MP+     Musepack audio (MP+)
5710!:mime	audio/x-musepack
5711>3      byte            255     \b, SV pre8
5712>3      byte&0xF        0x6     \b, SV 6
5713>3      byte&0xF        0x8     \b, SV 8
5714>3      byte&0xF        0x7     \b, SV 7
5715>>3     byte&0xF0       0x0     \b.0
5716>>3     byte&0xF0       0x10    \b.1
5717>>3     byte&0xF0       240     \b.15
5718>>10    byte&0xF0       0x0     \b, no profile
5719>>10    byte&0xF0       0x10    \b, profile 'Unstable/Experimental'
5720>>10    byte&0xF0       0x50    \b, quality 0
5721>>10    byte&0xF0       0x60    \b, quality 1
5722>>10    byte&0xF0       0x70    \b, quality 2 (Telephone)
5723>>10    byte&0xF0       0x80    \b, quality 3 (Thumb)
5724>>10    byte&0xF0       0x90    \b, quality 4 (Radio)
5725>>10    byte&0xF0       0xA0    \b, quality 5 (Standard)
5726>>10    byte&0xF0       0xB0    \b, quality 6 (Xtreme)
5727>>10    byte&0xF0       0xC0    \b, quality 7 (Insane)
5728>>10    byte&0xF0       0xD0    \b, quality 8 (BrainDead)
5729>>10    byte&0xF0       0xE0    \b, quality 9
5730>>10    byte&0xF0       0xF0    \b, quality 10
5731>>27    byte            0x0     \b, Buschmann 1.7.0-9, Klemm 0.90-1.05
5732>>27    byte            102     \b, Beta 1.02
5733>>27    byte            104     \b, Beta 1.04
5734>>27    byte            105     \b, Alpha 1.05
5735>>27    byte            106     \b, Beta 1.06
5736>>27    byte            110     \b, Release 1.1
5737>>27    byte            111     \b, Alpha 1.11
5738>>27    byte            112     \b, Beta 1.12
5739>>27    byte            113     \b, Alpha 1.13
5740>>27    byte            114     \b, Beta 1.14
5741>>27    byte            115     \b, Alpha 1.15
5742
57430       string          MPCK    Musepack audio (MPCK)
5744!:mime	audio/x-musepack
5745
5746# IMY
5747# from http://filext.com/detaillist.php?extdetail=IMY
5748# https://cellphones.about.com/od/cellularfaqs/f/rf_imelody.htm
5749# http://download.ncl.ie/doc/api/ie/ncl/media/music/IMelody.html
5750# http://www.wx800.com/msg/download/irda/iMelody.pdf
57510	string	BEGIN:IMELODY	iMelody Ringtone Format
5752
5753# From: "Mateus Caruccio" <mateus@caruccio.com>
5754# guitar pro v3,4,5 from http://filext.com/file-extension/gp3
57550	string	\030FICHIER\ GUITAR\ PRO\ v3.	Guitar Pro Ver. 3 Tablature
5756
5757# From: "Leslie P. Polzer" <leslie.polzer@gmx.net>
575860	string	SONG		SoundFX Module sound file
5759
5760# Type: Adaptive Multi-Rate Codec
5761# URL:  http://filext.com/detaillist.php?extdetail=AMR
5762# From: Russell Coker <russell@coker.com.au>
57630	string	#!AMR		Adaptive Multi-Rate Codec (GSM telephony)
5764!:mime	audio/amr
5765!:ext  amr
5766
5767# Type: SuperCollider 3 Synth Definition File Format
5768# From: Mario Lang <mlang@debian.org>
57690	string	SCgf	SuperCollider3 Synth Definition file,
5770>4	belong	x	version %d
5771
5772# Type: True Audio Lossless Audio
5773# URL:  https://wiki.multimedia.cx/index.php?title=True_Audio
5774# From: Mike Melanson <mike@multimedia.cx>
57750	string	TTA1	True Audio Lossless Audio
5776
5777# Type: WavPack Lossless Audio
5778# URL:  https://wiki.multimedia.cx/index.php?title=WavPack
5779# From: Mike Melanson <mike@multimedia.cx>
57800	string	wvpk	WavPack Lossless Audio
5781
5782# From Fabio R. Schmidlin <frs@pop.com.br>
5783# VGM music file
57840	string		Vgm\040
5785>9	ubyte		>0	VGM Video Game Music dump v
5786!:mime	audio/x-vgm
5787!:ext	vgm
5788>>9	ubyte/16	>0	\b%d
5789>>9	ubyte&0x0F	x	\b%d
5790>>8	ubyte/16	x	\b.%d
5791>>8	ubyte&0x0F	>0	\b%d
5792#Get soundchips
5793>>8	ubyte		x	\b, soundchip(s)=
5794>>0x0C	ulelong		>0	SN76489 (PSG),
5795>>0x10	ulelong		>0	YM2413 (OPLL),
5796>>0x2C	ulelong		>0	YM2612 (OPN2),
5797>>0x30	ulelong		>0	YM2151 (OPM),
5798>>0x38	ulelong		>0	Sega PCM,
5799>>0x34	ulelong		>0xC
5800>>>0x40	ulelong		>0	RF5C68 (PCM),
5801>>0x34	ulelong		>0x10
5802>>>0x44	ulelong		>0	YM2203 (OPN),
5803>>0x34	ulelong		>0x14
5804>>>0x48	ulelong		>0	YM2608 (OPNA),
5805>>0x34	ulelong		>0x18
5806>>>0x4C	lelong		>0	YM2610 (OPNB),
5807>>>0x4C	lelong		<0	YM2610B (OPNB+2FM),
5808>>0x34	ulelong		>0x1C
5809>>>0x50	ulelong		>0	YM3812 (OPL2),
5810>>0x34	ulelong		>0x20
5811>>>0x54	ulelong		>0	YM3526 (OPL),
5812>>0x34	ulelong		>0x24
5813>>>0x58	ulelong		>0	Y8950 (MSX-Audio),
5814>>0x34	ulelong		>0x28
5815>>>0x5C	ulelong		>0	YMF262 (OPL3),
5816>>0x34	ulelong		>0x2C
5817>>>0x60	ulelong		>0	YMF278B (OPL4),
5818>>0x34	ulelong		>0x30
5819>>>0x64	ulelong		>0	YMF271 (OPX),
5820>>0x34	ulelong		>0x34
5821>>>0x68	ulelong		>0	YMZ280B (PCMD8),
5822>>0x34	ulelong		>0x38
5823>>>0x6C	ulelong		>0	RF5C164 (PCM),
5824>>0x34	ulelong		>0x3C
5825>>>0x70	ulelong		>0	PWM,
5826>>0x34	ulelong		>0x40
5827>>>0x74	ulelong		>0
5828>>>>0x78 ubyte		0x00	AY-3-8910,
5829>>>>0x78 ubyte		0x01	AY-3-8912,
5830>>>>0x78 ubyte		0x02	AY-3-8913,
5831>>>>0x78 ubyte		0x03	AY-3-8930,
5832>>>>0x78 ubyte		0x10	YM2149,
5833>>>>0x78 ubyte		0x11	YM3439,
5834>>>>0x78 ubyte		0x12	YMZ284,
5835>>>>0x78 ubyte		0x13	YMZ294,
5836# VGM 1.61
5837>>0x34	ulelong		>0x4C
5838>>>0x80	ulelong		>0	DMG,
5839>>0x34	ulelong		>0x50
5840>>>0x84	lelong		>0	NES APU,
5841>>>0x84	lelong		<0	NES APU with FDS,
5842>>0x34	ulelong		>0x54
5843>>>0x88	ulelong		>0	MultiPCM,
5844>>0x34	ulelong		>0x58
5845>>>0x8C	ulelong		>0	uPD7759 (ADPCM Speech),
5846>>0x34	ulelong		>0x5C
5847>>>0x90	ulelong		>0	OKIM6258 (ADPCM Speech),
5848>>0x34	ulelong		>0x64
5849>>>0x98	ulelong		>0	OKIM6295 (ADPCM),
5850>>0x34	ulelong		>0x68
5851>>>0x9C	ulelong		>0	K051649,
5852>>0x34	ulelong		>0x6C
5853>>>0xA0	ulelong		>0	K054539,
5854>>0x34	ulelong		>0x70
5855>>>0xA4	ulelong		>0	HuC6280,
5856>>0x34	ulelong		>0x74
5857>>>0xA8	ulelong		>0	C140,
5858>>0x34	ulelong		>0x78
5859>>>0xAC	ulelong		>0	K053260,
5860>>0x34	ulelong		>0x7C
5861>>>0xB0	ulelong		>0	Pokey,
5862>>0x34	ulelong		>0x80
5863>>>0xB4	ulelong		>0	QSound,
5864# VGM 1.71
5865>>0x34	ulelong		>0x84
5866>>>0xB8	ulelong		>0	SCSP,
5867>>0x34	ulelong		>0x8C
5868>>>0xC0	ulelong		>0	WonderSwan,
5869>>0x34	ulelong		>0x90
5870>>>0xC4	ulelong		>0	VSU,
5871>>0x34	ulelong		>0x94
5872>>>0xC8	ulelong		>0	SAA1099,
5873>>0x34	ulelong		>0x98
5874>>>0xCC	ulelong		>0	ES5503 (DOC),
5875>>0x34	ulelong		>0x9C
5876>>>0xD0	lelong		>0	ES5505 (OTIS),
5877>>>0xD0	lelong		<0	ES5506 (OTTO),
5878>>0x34	ulelong		>0xA4
5879>>>0xD8	ulelong		>0	X1-010,
5880>>0x34	ulelong		>0xA8
5881>>>0xDC	ulelong		>0	C352,
5882>>0x34	ulelong		>0xAC
5883>>>0xE0	ulelong		>0	GA20,
5884
5885# GVOX Encore file format
5886# Since this is a proprietary file format and there is no publicly available
5887# format specification, this is just based on induction
5888#
58890	string	SCOW
5890>4	byte	0xc4	GVOX Encore music, version 5.0 or above
5891>4	byte	0xc2	GVOX Encore music, version < 5.0
5892
58930	string	ZBOT
5894>4	byte	0xc5	GVOX Encore music, version < 5.0
5895
5896# Summary:	Garmin Voice Processing Module (WAVE audios)
5897# From:		Joerg Jenderek
5898# URL:		https://www.garmin.com/
5899# Reference:	http://www.poi-factory.com/node/19580
5900# NOTE:		there exist 2 other Garmin VPM formats
59010		string	AUDIMG
5902# skip text files starting with string "AUDIMG"
5903>13		ubyte		<13	Garmin Voice Processing Module
5904!:mime	audio/x-vpm-wav-garmin
5905!:ext	vpm
5906# 3 bytes indicating the voice version (200,220)
5907>>6		string		x	\b, version %3.3s
5908# day of release (01-31)
5909>>12		ubyte		x	\b, %.2d
5910# month of release (01-12)
5911>>13		ubyte		x	\b.%.2d
5912# year of release (like 2006, 2007, 2008)
5913>>14		uleshort	x	\b.%.4d
5914# hour of release (0-23)
5915>>11		ubyte		x	%.2d
5916# minute of release (0-59)
5917>>10		ubyte		x	\b:%.2d
5918# second of release (0-59)
5919>>9		ubyte		x	\b:%.2d
5920# if you select a language like german on your garmin device
5921# you can only select voice modules with corresponding language byte ID like 1
5922>>18		ubyte		x	\b, language ID %d
5923# structure for phrases/sentences?
5924# number of voice sample in the 1st phrase?
5925#>>19		uleshort		x	\b, %#x samples
5926#>>>21		uleshort		>0	\b, at %#4.4x
5927#>>>(21.s)	ubequad			x	%#llx
5928# 2nd phrase?
5929#>>23		uleshort		x	\b, %#x samples
5930#>>>25		uleshort		>0	\b, at %#4.4x
5931#>>>(25.s)	ubequad			x	%#llx
5932# pointer to 1st audio WAV sample
5933>>16		uleshort	>0
5934>>>(16.s)	ulelong		>0	\b, at %#x
5935# WAV length
5936# 1 space char after "bytes" to get phrase "bytes RIFF"
5937>>>>(16.s+4)	ulelong		>0	%u bytes
5938# look for magic
5939>>>>>(&-8.l)	string		RIFF
5940# determine type by ./riff
5941>>>>>>&-4	indirect	x
5942# 2 - ~ 131 WAV samples following same way
5943#
5944# Summary:	encrypted Garmin Voice Processing Module
5945# From:		Joerg Jenderek
5946# URL:		https://www.garmin.com/us/products/ontheroad/voicestudio
5947# NOTE:		Encrypted variant used in voices like DrNightmare, Elfred, Yeti.
5948#		There exist 2 other Garmin VPM formats
59490	ubequad		0xa141190fecc8ced6	Garmin Voice Processing Module (encrypted)
5950!:mime	audio/x-vpm-garmin
5951!:ext	vpm
5952
5953# From Martin Mueller Skarbiniks Pedersen
59540		string		GDM
5955>0x3		byte		0xFE	General Digital Music.
5956>0x4		string		>\0	title: "%s"
5957>0x24		string		>\0	musician: "%s"
5958>>0x44		beshort		0x0D0A
5959>>>0x46		byte		0x1A
5960>>>>0x47	string		GMFS	Version
5961>>>>0x4B	byte		x	%d.
5962>>>>0x4C	byte		x	\b%02d
5963>>>>0x4D	beshort		0x000	(2GDM v
5964>>>>0x4F	byte		x	\b%d.
5965>>>>>0x50	byte		x	\b%d)
5966
59670		string		MTM	Multitracker
5968>0x3		byte/16		x	Version %d.
5969>0x3		byte&0x0F	x	\b%02d
5970>>0x4		string		>\0	title: "%s"
5971
59720		string		MO3
5973>3		ubyte		<6	MOdule with MP3
5974>>3		byte		0	Version	0	(With MP3 and lossless)
5975>>3		byte		1	Version	1	(With ogg and lossless)
5976>>3		byte		3	Version 2.2
5977>>3		byte		4	(With no LAME header)
5978>>3		byte		5	Version 2.4
5979
59800		string		ADRVPACK	AProSys	module
5981
5982# ftp://ftp.modland.com/pub/documents/format_documentation/\
5983# Art%20Of%20Noise%20(.aon).txt
59840		string		AON
5985>4		string		"ArtOfNoise by Bastian Spiegel(twice/lego)"
5986>0x2e		string		NAME	Art of Noise Tracker Song
5987>3		string		<9
5988>3		string		4	(4 voices)
5989>3		string		8	(8 voices)
5990>>0x36		string		>\0	Title: "%s"
5991
59920		string		FAR
5993>0x2c		byte		0x0d
5994>0x2d		byte		0x0a
5995>0x2e		byte		0x1a
5996>>0x3		byte		0xFE	Farandole Tracker Song
5997>>>0x31		byte/16		x	Version %d.
5998>>>0x31		byte&0x0F	x	\b%02d
5999>>>>0x4		string		>\0	\b, title: "%s"
6000
6001# magic for Klystrack, https://kometbomb.github.io/klystrack/
6002# from Alex Myczko <alex@aiei.ch>
60030	string	cyd!song	Klystrack song
6004>8	byte	>0		\b, version %u
6005>8	byte	>26
6006#>>9	byte	x		\b, channels %u
6007#>>10	leshort	x		\b, time signature %u
6008#>>12	leshort	x		\b, sequence step %u
6009#>>14	byte	x		\b, instruments %u
6010#>>15	leshort	x		\b, patterns %u
6011#>>17	leshort	x		\b, sequences %u
6012#>>19	leshort	x		\b, length %u
6013#>>21	leshort	x		\b, loop point %u
6014#>>23	byte	x		\b, master volume %u
6015#>>24	byte	x		\b, song speed %u
6016#>>25	byte	x		\b, song speed2 %u
6017#>>26	byte	x		\b, song rate %u
6018#>>27	belong	x		\b, flags %#x
6019#>>31	byte	x		\b, multiplex period %u
6020#>>32	byte	x		\b, pitch inaccuracy %u
6021>>149	pstring	x		\b, title %s
6022
60230	string	cyd!inst	Klystrack instrument
6024
6025# magic for WOPL instrument files, https://github.com/Wohlstand/OPL3BankEditor
6026# see Specifications/WOPL-and-OPLI-Specification.txt
6027
60280	string	WOPL3-INST\0	WOPL instrument
6029>11	leshort	x	\b, version %u
60300	string	WOPL3-BANK\0	WOPL instrument bank
6031>11	leshort	x	\b, version %u
6032
6033# AdLib/OPL instrument files. Format specifications on
6034#  http://www.shikadi.net/moddingwiki
60350	string	Junglevision\ Patch\ File	Junglevision instrument data
60360	string	#OPL_II#	DMX OP2 instrument data
60370	string	IBK\x1a		IBK instrument data
60380	string	2OP\x1a		IBK instrument data, 2 operators
60390	string	4OP\x1a		IBK instrument data, 4 operators
60402	string	ADLIB-		AdLib instrument data
6041>0	byte	x		\b, version %u
6042>1	byte	x		\b.%u
6043
6044# CRI ADX ADPCM audio
6045# Used by various Sega games.
6046# https://en.wikipedia.org/wiki/ADX_(file_format)
6047# https://wiki.multimedia.cx/index.php/CRI_ADX_file
6048# Added by David Korth <gerbilsoft@gerbilsoft.com>
60490x00		beshort		0x8000
6050>(2.S-2)	string		(c)CRI		CRI ADX ADPCM audio
6051!:ext adx
6052!:mime audio/x-adx
6053!:strength +50
6054>>0x12		byte		x		v%u
6055>>0x04		byte		0x02		\b, pre-set prediction coefficients
6056>>0x04		byte		0x03		\b, standard ADX
6057>>0x04		byte		0x04		\b, exponential scale
6058>>0x04		byte		0x10		\b, AHX (Dreamcast)
6059>>0x04		byte		0x11		\b, AHX
6060>>0x08		belong		x		\b, %u Hz
6061>>0x12		byte		0x03
6062>>>0x02		beshort		>0x2B
6063>>>>0x18	belong		!0		\b, looping
6064>>0x12		byte		0x04
6065>>>0x02		beshort		>0x37
6066>>>>0x24	belong		!0		\b, looping
6067>>0x13		byte&0x08	0x08		\b, encrypted
6068
6069# Lossless audio (.la) (http://www.lossless-audio.com/)
60700	string	LA
6071>2	string	03	Lossless audio version 0.3
6072>2	string	04	Lossless audio version 0.4
6073
6074# Sony PlayStation Audio (.xa)
60750	leshort 0x4158	Sony PlayStation Audio
6076
6077# Portable Sound Format
6078# Used for audio rips for various consoles.
6079# http://fileformats.archiveteam.org/wiki/Portable_Sound_Format
6080# Added by David Korth <gerbilsoft@gerbilsoft.com>
60810	string	PSF
6082>3	byte	0x01
6083>3	byte	0x02
6084>3	byte	0x11
6085>3	byte	0x12
6086>3	byte	0x13
6087>3	byte	0x21
6088>3	byte	0x22
6089>3	byte	0x23
6090>3	byte	0x41
6091>>0	string	PSF	Portable Sound Format
6092!:mime	audio/x-psf
6093>>>3	byte	0x01	(Sony PlayStation)
6094>>>3	byte	0x02	(Sony PlayStation 2)
6095>>>3	byte	0x11	(Sega Saturn)
6096>>>3	byte	0x12	(Sega Dreamcast)
6097>>>3	byte	0x13	(Sega Mega Drive)
6098>>>3	byte	0x21	(Nintendo 64)
6099>>>3	byte	0x22	(Game Boy Advance)
6100>>>3	byte	0x23	(Super NES)
6101>>>3	byte	0x41	(Capcom QSound)
6102
6103# Atari 8-bit SAP audio format
6104# http://asap.sourceforge.net/sap-format.html
6105# Added by David Korth <gerbilsoft@gerbilsoft.com>
61060	string		SAP\r\n	Atari 8-bit SAP audio file
6107!:mime	audio/x-sap
6108!:ext	sap
6109>5	search/1024	NAME
6110>>&1	string		x	\b: %s
6111>>5	search/1024	AUTHOR
6112>>>&1	string		x	by %s
6113
6114# Nintendo Wii BRSTM audio format (fields)
6115# NOTE: Assuming HEAD starts at 0x40.
6116# FIXME: Replace 0x48 with HEAD offset plus 8.
61170	name	nintendo-wii-brstm-fields
6118>(0x10.L)	string	HEAD	\b:
6119>>(0x10.L+0x0C)	belong	x
6120>>>(&-4.L+0x48)	belong	x
6121>>>>&-4		byte	0	PCM, signed 8-bit,
6122>>>>&-4		byte	1	PCM, signed 16-bit,
6123>>>>&-4		byte	2	THP ADPCM,
6124>>>>&-3		byte	!0	looping,
6125>>>>&-2		byte	1	mono
6126>>>>&-2		byte	2	stereo
6127>>>>&-2		byte	3	3 channels
6128>>>>&-2		byte	4	quad
6129>>>>&-2		byte	>4	%u channels
6130>>>>&0		beshort	!0	%u Hz
6131
6132# Nintendo Wii BRSTM audio format
6133# https://wiibrew.org/wiki/BRSTM_file
6134# Added by David Korth <gerbilsoft@gerbilsoft.com>
61350	string		RSTM	Nintendo Wii BRSTM audio file
6136!:mime	audio/x-brstm
6137!:ext	brstm
6138# Wii is big-endian, so default to BE.
6139>4	beshort		0xFEFF
6140>>0	use		nintendo-wii-brstm-fields
6141>4	leshort		0xFEFF
6142>>0	use		\^nintendo-wii-brstm-fields
6143
6144# Nintendo 3DS BCSTM audio format (fields)
61450	name	nintendo-3ds-bcstm-fields
6146>(0x18.l)	string	INFO	\b:
6147# INFO block: Stream information starts at 0x20 (minus 4 for the 'INFO' magic)
6148>>&0x1C		byte	0	PCM, signed 8-bit,
6149>>&0x1C		byte	1	PCM, signed 16-bit,
6150>>&0x1C		byte	2	DSP ADPCM,
6151>>&0x1C		byte	3	IMA ADPCM,
6152>>&0x1D		byte	!0	looping,
6153>>&0x1E		byte	1	mono
6154>>&0x1E		byte	2	stereo
6155>>&0x1E		byte	3	3 channels
6156>>&0x1E		byte	4	quad
6157>>&0x1E		byte	>4	%u channels
6158>>&0x20		lelong	!0	%u Hz
6159
6160# Nintendo 3DS BCSTM audio format
6161# https://www.3dbrew.org/wiki/BCSTM
6162# Added by David Korth <gerbilsoft@gerbilsoft.com>
61630	string		CSTM	Nintendo 3DS BCSTM audio file
6164!:mime	audio/x-bcstm
6165!:ext	bcstm
6166# 3DS is little-endian, so default to LE.
6167>4	leshort		0xFEFF
6168>>0	use		nintendo-3ds-bcstm-fields
6169>4	beshort		0xFEFF
6170>>0	use		\^nintendo-3ds-bcstm-fields
6171
6172# Nintendo Wii U BFSTM audio format
6173# http://mk8.tockdom.com/wiki/BFSTM_(File_Format)
6174# NOTE: This format is very similar to BCSTM.
6175# Added by David Korth <gerbilsoft@gerbilsoft.com>
61760	string		FSTM	Nintendo Wii U BFSTM audio file
6177!:mime	audio/x-bfstm
6178!:ext	bfstm
6179# BFSTM is used on both Wii U (BE) and Switch (LE),
6180# so default to LE.
6181>4	leshort		0xFEFF
6182>>0	use		nintendo-3ds-bcstm-fields
6183>4	beshort		0xFEFF
6184>>0	use		\^nintendo-3ds-bcstm-fields
6185
6186# Nintendo 3DS BCSTM audio format (fields)
61870	name	nintendo-3ds-bcwav-fields
6188>(0x18.l)	string	INFO	\b:
6189# INFO block (minus 4 for INFO magic)
6190>>&0x4		byte	0	PCM, signed 8-bit,
6191>>&0x4		byte	1	PCM, signed 16-bit,
6192>>&0x4		byte	2	DSP ADPCM,
6193>>&0x4		byte	3	IMA ADPCM,
6194>>&0x5		byte	!0	looping,
6195>>&0x8		lelong	x	stereo
6196>>&0x8		lelong	!0	%u Hz
6197
6198# Nintendo 3DS BCWAV audio format
6199# https://www.3dbrew.org/wiki/BCWAV
6200# Added by David Korth <gerbilsoft@gerbilsoft.com>
62010	string		CWAV	Nintendo 3DS BCWAV audio file
6202!:mime	audio/x-bcwav
6203!:ext	bcwav
6204# 3DS is little-endian, so default to LE.
6205>4	leshort		0xFEFF
6206>>0	use		nintendo-3ds-bcwav-fields
6207>4	beshort		0xFEFF
6208>>0	use		\^nintendo-3ds-bcwav-fields
6209
6210# Philips DSDIFF audio format (Direct Stream Digital Interchange File Format)
6211# Used for DSD audio recordings and Super Audio CD (SACD) mastering annotations
6212# https://dsd-guide.com/sites/default/files/white-papers/DSDIFF_1.5_Spec.pdf
6213# From: Toni Ruottu <toni.ruottu@iki.fi>
62140		string		FRM8
621512		string		DSD\x20		DSDIFF audio bitstream data
6216!:mime		audio/x-dff
6217!:ext		dff
6218
6219# format version chunk
6220>&0		string		FVER
6221# version 1
6222>>&8		byte		1
6223
6224# v1 / sampling resolution ( 1 bit PDM only )
6225>>>&0		string		x		\b, 1 bit
6226
6227# v1 / sound property chunk
6228>>>&0		search/0xff	PROP
6229>>>>&8		string		SND
6230
6231# v1 / sound property chunk / channel configuration chunk
6232>>>>>&0		search/0xff	CHNL
6233>>>>>>&8	ubeshort	1							\b, mono
6234>>>>>>&8	ubeshort	2
6235>>>>>>>&0	string		SLFTSRGT						\b, stereo
6236>>>>>>>&0	default		x							\b, 2 channels
6237>>>>>>&8	ubeshort	3
6238>>>>>>>&0	string		SLFTSRGTLFE\x20						\b, 2.1 stereo
6239>>>>>>>&0	string		SLFTSRGTC\x20\x20\x20					\b, 3.0 stereo
6240>>>>>>>&0	default		x							\b, 3 channels
6241>>>>>>&8	ubeshort	4
6242>>>>>>>&0	string		MLFTMRGTLS\x20\x20RS\x20\x20				\b, 4.0 surround
6243>>>>>>>&0	string		SLFTSRGTC\x20\x20\x20LFE\x20				\b, 3.1 stereo
6244>>>>>>>&0	default		x							\b, 4 channels
6245>>>>>>&8	ubeshort	5
6246>>>>>>>&0	string		MLFTMRGTC\x20\x20\x20LS\x20\x20RS\x20\x20		\b, 5.0 surround
6247>>>>>>>&0	string		MLFTMRGTLFE\x20LS\x20\x20RS\x20\x20			\b, 4.1 surround
6248>>>>>>>&0	default		x							\b, 5 channels
6249>>>>>>&8	ubeshort	6
6250>>>>>>>&0	string		MLFTMRGTC\x20\x20\x20LFE\x20LS\x20\x20RS\x20\x20	\b, 5.1 surround
6251>>>>>>>&0	default		x							\b, 6 channels
6252>>>>>>&8	ubeshort	>6							\b, %u channels
6253
6254# v1 / sound property chunk / sample rate chunk
6255>>>>>&0		search/0xff	FS\x20\x20
6256>>>>>>&0	string		x		\b,
6257>>>>>>&8	ubelong%44100	0
6258>>>>>>>&-4	ubelong/44100	x		"DSD %u"
6259>>>>>>>&-4	ubelong		x		%u Hz
6260
6261# v1 / sound property chunk / compression type chunk
6262>>>>>&0		search/0xff	CMPR
6263>>>>>>&8	string		DSD\x20		\b, no compression
6264>>>>>>&8	string		DST\x20		\b, DST compression
6265>>>>>>&8	default		x		\b, unknown compression
6266
6267# v1 / quest for metadata
6268>>>&0		string		x
6269
6270# v1 / quest for metadata / edited master information chunk
6271>>>>&0		search		DIIN
6272>>>>>&0		ubequad		>0		\b, "edited master" metadata
6273
6274# v1 / quest for metadata / ID3 chunk ( defacto standard )
6275>>>>&0		search		ID3\x20
6276>>>>>&8		string		ID3		\b, ID3 version 2
6277>>>>>&0		byte		x		\b.%u
6278>>>>>&1		byte		x		\b.%u
6279
6280# v1 / quest for metadata / failure ( possibly due to -P bytes=... being too low )
6281>>>>&0		default		x		\b, ID3 missing (or unreachable)
6282
6283# version > 1 or 0
6284>>&0		default		x		\b, unknown version
6285
6286# Sony DSF audio format (Direct Stream Digital Stream File)
6287# Used for lossless digital storage of songs produced as DSD audio
6288# Portable analog of a track stored on a Super Audio CD (SACD)
6289# https://dsd-guide.com/sites/default/files/white-papers/DSFFileFormatSpec_E.pdf
6290# From: Toni Ruottu <toni.ruottu@iki.fi>
62910		string		DSD\x20		DSF audio bitstream data
6292!:mime		audio/x-dsf
6293!:ext		dsf
6294
6295# format chunk
6296>28		string		fmt\x20
6297# version 1
6298>>&8		ulelong		1
6299
6300# v1 / sampling resolution ( 1 bit PDM only )
6301# NOTE: the spec incorrectly uses "bits per sample" instead of "bits per byte"
6302>>>&0		string		x		\b, 1 bit
6303
6304# v1 / channel configuration
6305>>>>&4		ulelong		1		\b, mono
6306>>>>&4		ulelong		2		\b, stereo
6307>>>>&4		ulelong		3		\b, 3.0 stereo
6308>>>>&4		ulelong		4		\b, 4.0 surround
6309>>>>&4		ulelong		5		\b, 3.1 stereo
6310>>>>&4		ulelong		6		\b, 5.0 surround
6311>>>>&4		ulelong		7		\b, 5.1 surround
6312>>>>&0		default		x
6313>>>>>&4		ulelong		x		\b, %u channels
6314
6315# v1 / sample rate chunk
6316>>>>&0		string		x		\b,
6317>>>>&12		ulelong%44100	0
6318>>>>>&-4	ulelong/44100	x		"DSD %u"
6319>>>>&12		ulelong		x		%u Hz
6320
6321# v1 / compression
6322>>>>&0		string		x
6323>>>>>&0		ulelong		0		\b, no compression
6324>>>>>&0		default		x		\b, unknown compression
6325
6326# v1 / embedded ID3v2 metadata
6327>>>0		string		x 		\b, ID3
6328>>>>20		ulequad		!0
6329>>>>>(20.q)	string		ID3		version 2
6330>>>>>>&0	byte		x		\b.%u
6331>>>>>>&1	byte		x		\b.%u
6332# unable to verify ID3 ( possibly due to -P bytes=... being too low )
6333>>>>>&0		default		x		unreachable
6334>>>>&0		default		x		missing
6335
6336# version > 1 or 0
6337>>&0		default		x		\b, unknown version
6338
6339#------------------------------------------------------------------------------
6340# $File: avm,v 1.1 2020/08/28 20:37:58 christos Exp $
6341# avm:  file(1) magic for avm files; this is not use
6342
6343# Summary:	FRITZ!Box router configuration backup
6344# From:		Joerg Jenderek
6345# URL:		https://en.wikipedia.org/wiki/Fritz!Box
6346# Reference:	http://www.mengelke.de/Projekte/FritzBoxTools2
6347# Note:		only tested with models 4040 and 6490 Cable (lgi)
63480	string		****\ FRITZ!Box\ 	FRITZ!Box configuration backup
6349#!:mime	text/plain
6350!:mime	application/x-avm-export
6351!:ext	export
6352# router model name like "4040" , "6490 Cable (lgi)" followed by " CONFIGURATION EXPORT"
6353>15	string		x			of %-.4s
6354# on 2nd line hashed password
6355#>41	search/54	Password=		\b, password
6356# on 3rd line firmware version like: 141.06.24 141.06.50 141.07.10 ... 155.06.83
6357>41	search/172	FirmwareVersion=	\b, firmware version
6358>>&0	string		x			%s
6359# on 5th line oem like: avme lgi
6360>41	search/285	OEM=			\b, oem
6361>>&0	string		x			%s
6362# on 7th line language like: de en
6363>41	search/305	Language=		\b, language
6364>>&0	string		x			%s
6365# on 10th line cfg file name like: /var/tmp.cfg
6366>41	search/349	tmp.cfg
6367# on 11th line date inside c-comment like: Thu Jun  4 22:25:19 2015
6368>>&4	string		x			\b, %s
6369#
6370
6371
6372#----------------------------------------------------------------
6373# $File: basis,v 1.5 2019/04/19 00:42:27 christos Exp $
6374# basis: file(1) magic for BBx/Pro5-files
6375#      Oliver Dammer <dammer@olida.de>	 2005/11/07
6376# https://www.basis.com business-basic-files.
6377#
63780	string		\074\074bbx\076\076	BBx
6379>7	string		\000			indexed file
6380>7	string		\001			serial file
6381>7	string		\002			keyed file
6382>>13	short		0			(sort)
6383>7	string		\004			program
6384>>18	byte		x			(LEVEL %d)
6385>>>23	string		>\000			psaved
6386>7	string		\006			mkeyed file
6387>>13	short		0			(sort)
6388>>8	string		\000			(mkey)
6389#------------------------------------------------------------------------------
6390# $File: beetle,v 1.2 2018/02/05 23:42:17 rrt Exp $
6391# beetle:  file(1) magic for Beetle VM object files
6392# https://github.com/rrthomas/beetle/
6393
6394# Beetle object module
63950	string		BEETLE\000	Beetle VM object file
6396
6397#------------------------------------------------------------------------------
6398# $File: ber,v 1.2 2019/04/19 00:42:27 christos Exp $
6399# ber:  file(1) magic for several BER formats used in the mobile
6400# telecommunications industry (Georg Sauthoff)
6401
6402# The file formats are standardized by the GSMA (GSM association).
6403# They are specified via ASN.1 schemas and some prose. Basic encoding
6404# rules (BER) is the used encoding. The formats are used for exchanging
6405# call data records (CDRs) between mobile operators and associated
6406# parties for roaming clearing purposes and fraud detection.
6407
6408# The magic file covers:
6409
6410# - TAP files (TD.57) - CDR batches and notifications
6411# - RAP files (TD.32) - return batches and acknowledgements
6412# - NRT files (TD.35) - CDR batches for 'near real time' processing
6413
6414#
6415# TAP 3 Files
6416# TAP -> Transferred Account Procedure
6417# cf. https://www.gsma.com/newsroom/wp-content/uploads/TD.57-v32.31.pdf
6418# TransferBatch short tag
64190	byte	0x61
6420# BatchControlInfo short tag
6421>&1	search/b5	\x64
6422# Sender long tag #TAP 3.x (BER encoded)
6423>>&1	search/b8	\x5f\x81\x44
6424# <SpecificationVersionNumber>3</><ReleaseVersionNumber> block
6425>>>&64	search/b64	\x5f\x81\x49\x01\x03\x5f\x81\x3d\x01
6426>>>>&0	byte	x	TAP 3.%d Batch (TD.57, Transferred Account)
6427
6428# Notification short tag
64290	byte	0x62
6430# Sender long tag
6431>2	search/b8	\x5f\x81\x44
6432# <SpecificationVersionNumber>3</><ReleaseVersionNumber> block
6433>>&64	search/b64	\x5f\x81\x49\x01\x03\x5f\x81\x3d\x01
6434>>>&0	byte	x	TAP 3.%d Notification (TD.57, Transferred Account)
6435
6436
6437# NRT Files
6438# NRT a.k.a. NRTRDE
64390	byte	0x61
6440# <SpecificationVersionNumber>2</><ReleaseVersionNumber> block
6441>&1	search/b8 \x5f\x29\x01\x02\x5f\x25\x01
6442>>&0	byte	x	NRT 2.%d (TD.35, Near Real Time Roaming Data Exchange)
6443
6444# RAP Files
6445# cf. https://www.gsma.com/newsroom/wp-content/uploads/TD.32-v6.11.pdf
6446# Long ReturnBatch tag
64470	string	\x7f\x84\x16
6448# Long RapBatchControlInfo tag
6449>&1	search/b8	\x7f\x84\x19
6450# <SpecificationVersionNumber>3</><ReleaseVersionNumber> block
6451>>&64	search/b64	\x5f\x81\x49\x01\x03\x5f\x81\x3d\x01
6452# <RapSpecificationVersionNumber>1</><RapReleaseVersionNumber> block
6453>>>&1	string/b	\x5f\x84\x20\x01\x01\x5f\x84\x1f\x01
6454>>>>&0	byte	x	RAP 1.%d Batch (TD.32, Returned Account Procedure),
6455>>>&0	byte	x	TAP 3.%d
6456
6457# Long Acknowledgement tag
64580	string \x7f\x84\x17
6459# Long Sender tag
6460>&1	search/b5	\x5f\x81\x44	RAP Acknowledgement (TD.32, Returned Account Procedure)
6461
6462#------------------------------------------------------------------------------
6463# $File: bflt,v 1.5 2014/04/30 21:41:02 christos Exp $
6464# bFLT: file(1) magic for BFLT uclinux binary files
6465#
6466# From Philippe De Muyter <phdm@macqel.be>
6467#
64680	string		bFLT		BFLT executable
6469>4	belong		x		- version %d
6470>4	belong		4
6471>>36	belong&0x1	0x1		ram
6472>>36	belong&0x2	0x2		gotpic
6473>>36	belong&0x4	0x4		gzip
6474>>36	belong&0x8	0x8		gzdata
6475
6476#------------------------------------------------------------------------------
6477# $File: bhl,v 1.1 2017/06/11 22:20:02 christos Exp $
6478# BlockHashLoc
6479# ext: bhl
6480# Marco Pontello marcopon@gmail.com
6481# reference: https://github.com/MarcoPon/BlockHashLoc
64820	string	BlockHashLoc\x1a	BlockHashLoc recovery info,
6483>13	byte	x			version %d
6484!:ext   bhl
6485
6486#------------------------------------------------------------------------------
6487# $File: bioinformatics,v 1.5 2019/04/19 00:42:27 christos Exp $
6488# bioinfomatics:  file(1) magic for Bioinfomatics file formats
6489
6490###############################################################################
6491# BGZF (Blocked GNU Zip Format) - gzip compatible, but also indexable
6492# used by SAMtools bgzip/tabix (http://samtools.sourceforge.net/tabix.shtml)
6493###############################################################################
64940	string		\037\213
6495>3	byte		&0x04
6496>>12	string		BC
6497>>>14	leshort		&0x02	Blocked GNU Zip Format (BGZF; gzip compatible)
6498>>>>16	leshort		x	\b, block length %d
6499!:mime	application/x-gzip
6500
6501
6502###############################################################################
6503# Tabix index file
6504# used by SAMtools bgzip/tabix (http://samtools.sourceforge.net/tabix.shtml)
6505###############################################################################
65060	string	TBI\1		SAMtools TBI (Tabix index format)
6507>0x04	lelong	=1		\b, with %d reference sequence
6508>0x04	lelong	>1		\b, with %d reference sequences
6509>0x08	lelong	&0x10000	\b, using half-closed-half-open coordinates (BED style)
6510>0x08	lelong	^0x10000
6511>>0x08	lelong	=0		\b, using closed and one based coordinates (GFF style)
6512>>0x08	lelong	=1		\b, using SAM format
6513>>0x08	lelong	=2		\b, using VCF format
6514>0x0c	lelong	x		\b, sequence name column: %d
6515>0x10	lelong	x		\b, region start column: %d
6516>0x08	lelong	=0
6517>>0x14	lelong	x		\b, region end column: %d
6518>0x18	byte	x		\b, comment character: %c
6519>0x1c	lelong	x		\b, skip line count: %d
6520
6521
6522###############################################################################
6523# BAM (Binary Sequence Alignment/Map format)
6524# used by SAMtools (http://samtools.sourceforge.net/SAM1.pdf)
6525# data is normally present only within compressed BGZF blocks (CDATA), so use file -z to examine it
6526###############################################################################
65270	string	BAM\1	SAMtools BAM (Binary Sequence Alignment/Map)
6528>0x04	lelong	>0
6529>>&0x00 regex	=^[@]HD\t.*VN:		\b, with SAM header
6530>>>&0	regex	=[0-9.]+		\b version %s
6531>>&(0x04)	lelong	>0	\b, with %d reference sequences
6532
6533
6534###############################################################################
6535# BAI (BAM indexing format)
6536# used by SAMtools (http://samtools.sourceforge.net/SAM1.pdf)
6537###############################################################################
65380		string	BAI\1	SAMtools BAI (BAM indexing format)
6539>0x04		lelong	>0	\b, with %d reference sequences
6540
6541
6542###############################################################################
6543# CRAM (Binary Sequence Alignment/Map format)
6544###############################################################################
65450	string	CRAM	CRAM
6546>0x04	byte	>-1	version %d.
6547>0x05	byte	>-1	\b%d
6548>0x06	string	>\0	(identified as %s)
6549
6550
6551###############################################################################
6552# BCF (Binary Call Format), version 1
6553# used by SAMtools & VCFtools (http://vcftools.sourceforge.net/bcf.pdf)
6554# data is normally present only within compressed BGZF blocks (CDATA), so use file -z to examine it
6555###############################################################################
65560		string	   BCF\4
6557# length of seqnm data in bytes is positive
6558>&0x00		lelong	  >0
6559# length of smpl data in bytes is positive
6560>>&(&-0x04)	lelong	  >0			SAMtools BCF (Binary Call Format)
6561# length of meta in bytes
6562>>>&(&-0x04)	lelong	  >0
6563# have meta text string
6564>>>>&0x00	search	  ##samtoolsVersion=
6565>>>>>&0x00	string	  x			\b, generated by SAMtools version %s
6566
6567
6568###############################################################################
6569# BCF (Binary Call Format), version 2.1
6570# used by SAMtools (https://samtools.github.io/hts-specs/BCFv2_qref.pdf)
6571# data is normally present only within compressed BGZF blocks (CDATA), so use file -z to examine it
6572###############################################################################
65730		string	   BCF\2\1    Binary Call Format (BCF) version 2.1
6574# length of header text
6575>&0x00		lelong	  >0
6576# have header string
6577>>&0x00 search	  ##samtoolsVersion=
6578>>>&0x00	string	  x			\b, generated by SAMtools version %s
6579
6580
6581###############################################################################
6582# BCF (Binary Call Format), version 2.2
6583# used by SAMtools (https://samtools.github.io/hts-specs/BCFv2_qref.pdf)
6584# data is normally present only within compressed BGZF blocks (CDATA), so use file -z to examine it
6585###############################################################################
65860		string	   BCF\2\2    Binary Call Format (BCF) version 2.2
6587# length of header text
6588>&0x00		lelong	  >0
6589# have header string
6590>>&0x00 search	  ##samtoolsVersion=
6591>>>&0x00	string	  x			\b, generated by SAMtools version %s
6592
6593###############################################################################
6594# VCF (Variant Call Format)
6595# used by VCFtools (http://vcftools.sourceforge.net/)
6596###############################################################################
65970      search	   ##fileformat=VCFv	Variant Call Format (VCF)
6598>&0    string	   x			\b version %s
6599
6600###############################################################################
6601# FASTQ
6602# used by MAQ (http://maq.sourceforge.net/fastq.shtml)
6603###############################################################################
6604# XXX Broken?
6605# @<seqname>
6606#0	regex	=^@[A-Za-z0-9_.:-]+\?\n
6607# <seq>
6608#>&1	regex	=^[A-Za-z\n.~]++
6609# +[<seqname>]
6610#>>&1	regex	=^[A-Za-z0-9_.:-]*\?\n
6611# <qual>
6612#>>>&1	regex	=^[!-~\n]+\n		FASTQ
6613
6614###############################################################################
6615# FASTA
6616# used by FASTA (https://fasta.bioch.virginia.edu/fasta_www2/fasta_guide.pdf)
6617###############################################################################
6618#0	byte	0x3e
6619# q>0	regex	=^[>][!-~\t\ ]+$
6620# Amino Acid codes: [A-IK-Z*-]+
6621#>>1	regex	!=[!-'Jj;:=?@^`|~\\]		FASTA
6622# IUPAC codes/gaps: [ACGTURYKMSWBDHVNX-]+
6623# not in IUPAC codes/gaps: [EFIJLOPQZ]
6624#>>>1	regex	!=[EFIJLOPQZefijlopqz]		\b, with IUPAC nucleotide codes
6625#>>>1	regex	=^[EFIJLOPQZefijlopqz]+$	\b, with Amino Acid codes
6626
6627###############################################################################
6628# SAM (Sequence Alignment/Map format)
6629# used by SAMtools (http://samtools.sourceforge.net/SAM1.pdf)
6630###############################################################################
6631# Short-cut version to recognise SAM files with (optional) header at beginning
6632###############################################################################
66330      string	   @HD\t
6634>4     search	   VN:		Sequence Alignment/Map (SAM), with header
6635>>&0   regex	   [0-9.]+	\b version %s
6636###############################################################################
6637# Longer version to recognise SAM alignment lines using (many) regexes
6638###############################################################################
6639# SAM Alignment QNAME
66400		regex	=^[!-?A-~]{1,255}(\t[^\t]+){11}
6641# SAM Alignment FLAG
6642>0		regex	=^([^\t]+\t){1}[0-9]{1,5}\t
6643# SAM Alignment RNAME
6644>>0		regex	=^([^\t]+\t){2}\\*|[^*=]*\t
6645# SAM Alignment POS
6646>>>0		regex	=^([^\t]+\t){3}[0-9]{1,9}\t
6647# SAM Alignment MAPQ
6648>>>>0		regex	=^([^\t]+\t){4}[0-9]{1,3}\t
6649# SAM Alignment CIGAR
6650>>>>>0		regex	=\t(\\*|([0-9]+[MIDNSHPX=])+)\t
6651# SAM Alignment RNEXT
6652>>>>>>0		regex	=\t(\\*|=|[!-()+->?-~][!-~]*)\t
6653# SAM Alignment PNEXT
6654>>>>>>>0	regex	=^([^\t]+\t){7}[0-9]{1,9}\t
6655# SAM Alignment TLEN
6656>>>>>>>>0	regex	=\t[+-]{0,1}[0-9]{1,9}\t.*\t
6657# SAM Alignment SEQ
6658>>>>>>>>>0	regex	=^([^\t]+\t){9}(\\*|[A-Za-z=.]+)\t
6659# SAM Alignment QUAL
6660>>>>>>>>>>0	regex	=^([^\t]+\t){10}[!-~]+	Sequence Alignment/Map (SAM)
6661>>>>>>>>>>>0	regex	=^[@]HD\t.*VN:		\b, with header
6662>>>>>>>>>>>>&0	regex	=[0-9.]+		\b version %s
6663
6664##############################################################################
6665#
6666#    Magic ids for biomedical signal file formats
6667#    Copyright (C) 2018 Alois Schloegl <alois.schloegl@gmail.com>
6668#
6669#    The list has been derived from biosig projects
6670#      http://biosig.sourceforge.net
6671#      https://pub.ist.ac.at/~schloegl/matlab/eeg/
6672#      https://pub.ist.ac.at/~schloegl/biosig/TESTED
6673#
6674##############################################################################
6675#
66760	string  ABF\x20					Biosig/Axon Binary format
6677!:mime biosig/abf2
66780	string  ABF2\0\0				Biosig/Axon Binary format
6679!:mime biosig/abf2
6680#
66810	string  ATES\x20MEDICA\x20SOFT.\x20EEG\x20for\x20Windows	Biosig/ATES MEDICA SOFT. EEG for Windows
6682!:mime biosig/ates
6683#
66840	string  ATF\x09					Biosig/Axon Text format
6685!:mime biosig/atf
6686#
66870	string  ADU1					Biosig/Axona file format
6688!:mime biosig/axona
66890	string  ADU2					Biosig/Axona file format
6690!:mime biosig/axona
6691#
66920	string  ALPHA-TRACE-MEDICAL			Biosig/alpha trace
6693!:mime biosig/alpha
6694#
66950       string  AxGr					Biosig/AXG
66960       string  axgx					Biosig/AXG
6697!:mime biosig/axg
6698#
66990	string  HeaderLen=				Biosig/BCI2000
67000	string  BCI2000V				Biosig/BCI2000
6701!:mime biosig/bci2000
6702#
6703### Specification: https://www.biosemi.com/faq/file_format.htm
67040	string  \xffBIOSEMI				Biosig/Biosemi data format
6705!:mime biosig/bdf
6706#
67070	string  Brain\x20Vision\x20Data\x20Exchange\x20Header\x20File			Biosig/Brainvision data file
67080	string  Brain\x20Vision\x20V-Amp\x20Data\x20Header\x20File\x20Version		Biosig/Brainvision V-Amp file
67090	string  Brain\x20Vision\x20Data\x20Exchange\x20Marker\x20File,\x20Version	Biosig/Brainvision Marker file
6710!:mime biosig/brainvision
6711#
67120	string  CEDFILE					Biosig/CFS: Cambridge Electronic devices File format
6713!:mime biosig/ced
6714#
6715### Specification: https://www.edfplus.info/specs/index.html
67160	string	0\x20\x20\x20\x20\x20\x20\x20		Biosig/EDF: European Data format
6717!:mime biosig/edf
6718#
6719### Specifications: https://arxiv.org/abs/cs/0608052
67200	string  GDF					Biosig/GDF: General data format for biosignals
6721!:mime biosig/gdf
6722#
67230	string  DATA\0\0\0\0				Biosig/Heka Patchmaster
67240	string  DAT1\0\0\0\0				Biosig/Heka Patchmaster
67250	string  DAT2\0\0\0\0				Biosig/Heka Patchmaster
6726!:mime biosig/heka
6727#
67280	string  (C)\x20CED\x2087			Biosig/CED SMR
6729!:mime biosig/ced-smr
6730#
67310	string  CFWB\1\0\0\0				Biosig/CFWB
6732!:mime biosig/cfwb
6733#
67340	string  DEMG					Biosig/DEMG
6735!:mime biosig/demg
6736#
67370	string  EBS\x94\x0a\x13\x1a\x0d			Biosig/EBS
6738!:mime biosig/ebs
6739#
67400	string  Embla\x20data\x20file			Biosig/Embla
6741!:mime biosig/embla
6742#
67430	string  Header\r\nFile Version			Biosig/ETG4000
6744!:mime biosig/etg4000
6745#
67460	string  GALILEO\x20EEG\x20TRACE\x20FILE		Biosig/Galileo
6747!:mime biosig/galileo
6748#
67490	string  IGOR					Biosig/IgorPro ITX file
6750!:mime biosig/igorpro
6751#
6752#	Specification: http://www.ampsmedical.com/uploads/2017-12-7/The_ISHNE_Format.pdf
67530	string  ISHNE1.0				Biosig/ISHNE
6754!:mime biosig/ishne
6755#
6756# 	CEN/ISO 11073/22077 series, http://www.mfer.org/en/document.htm
67570	string  @\x20\x20MFER\x20			Biosig/MFER
67580	string  @\x20MFR\x20				Biosig/MFER
6759!:mime biosig/mfer
6760#
67610	string  NEURALEV				Biosig/NEV
67620	string  N.EV.\0					Biosig/NEV
6763!:mime biosig/nev
6764#
67650	string  NEX1					Biosig/NEX
6766!:mime biosig/nex1
6767#
67680	string  PLEX 					Biosig/Plexon v1.0
676910	string  PLEXON 					Biosig/Plexon v2.0
6770!:mime biosig/plexon
6771#
67720	string  \x02\x27\x91\xC6			Biosig/RHD2000: Intan RHD2000 format
6773#
6774#	Specification: CEN 1064:2005/ISO 11073:91064
677516	string  SCPECG\0\0 				Biosig/SCP-ECG format CEN 1064:2005/ISO 11073:91064
6776!:mime biosig/scpecg
6777#
67780	string  IAvSFo									Biosig/SIGIF
6779!:mime biosig/sigif
6780#
67810	string  POLY\x20SAMPLE\x20FILEversion\x20					Biosig/TMS32
6782!:mime biosig/tms32
6783#
67840	string  FileId=TMSi\x20PortiLab\x20sample\x20log\x20file\x0a\x0dVersion=	Biosig/TMSiLOG
6785!:mime biosig/tmsilog
6786#
67874	string	Synergy\0\48\49\50\46\48\48\51\46\48\48\48\46\48\48\48\0\28\0\0\0\2\0\0\0
6788>63	string	CRawDataElement
6789>>85	string	CRawDataBuffer								Biosig/SYNERGY
6790!:mime biosig/synergy
6791#
67924	string	\40\0\4\1\44\1\102\2\146\3\44\0\190\3					Biosig/UNIPRO
6793!:mime biosig/unipro
6794#
67950	string	VER=9\r\nCTIME=								Biosig/WCP
6796!:mime biosig/wcp
6797#
67980	string	\xAF\xFE\xDA\xDA							Biosig/Walter Graphtek
67990	string	\xDA\xDA\xFE\xAF							Biosig/Walter Graphtek
68000	string	\x55\x55\xFE\xAF							Biosig/Walter Graphtek
6801!:mime biosig/walter-graphtek
6802#
68030	string  V3.0\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
6804>32	string  [PatInfo]								Biosig/Sigma
6805!:mime biosig/sigma
6806#
68070	string  \067\069\078\013\010\0x1a\04\0x84					Biosig/File exchange format (FEF)
6808!:mime biosig/fef
68090	string  \67\69\78\0x13\0x10\0x1a\4\0x84						Biosig/File exchange format (FEF)
6810!:mime biosig/fef
6811#
68120	string  \0\0\0\x64\0\0\0\x1f\0\0\0\x14\0\0\0\0\0\1
6813>36  	string  \0\0\0\x65\0\0\0\3\0\0\0\4\0\0
6814>>56	string  \0\0\0\x6a\0\0\0\3\0\0\0\4\0\0\0\0\xff\xff\xff\xff\0\0			Biosig/FIFF
6815!:mime biosig/fiff
6816#
6817
6818#------------------------------------------------------------------------------
6819# $File: blackberry,v 1.2 2017/03/17 21:35:28 christos Exp $
6820# blackberry:  file(1) magic for BlackBerry file formats
6821#
68225	belong	0
6823>8	belong  010010010	BlackBerry RIM ETP file
6824>>22	string	x		\b for %s
6825# Berkeley Lab Checkpoint Restart (BLCR) checkpoint context files
6826# https://ftg.lbl.gov/checkpoint
68270	string	C\0\0\0R\0\0\0	BLCR
6828>16	lelong	1	x86
6829>16	lelong	3	alpha
6830>16	lelong	5	x86-64
6831>16	lelong	7	ARM
6832>8	lelong	x	context data (little endian, version %d)
6833# Uncomment the following only of your "file" program supports "search"
6834#>0	search/1024	VMA\06	for kernel
6835#>>&1	byte	x	%d.
6836#>>&2	byte	x	%d.
6837#>>&3	byte	x	%d
68380	string	\0\0\0C\0\0\0R	BLCR
6839>16	belong	2	SPARC
6840>16	belong	4	ppc
6841>16	belong	6	ppc64
6842>16	belong	7	ARMEB
6843>16	belong	8	SPARC64
6844>8	belong	x	context data (big endian, version %d)
6845# Uncomment the following only of your "file" program supports "search"
6846#>0	search/1024	VMA\06	for kernel
6847#>>&1	byte	x	%d.
6848#>>&2	byte	x	\b%d.
6849#>>&3	byte	x	\b%d
6850
6851#------------------------------------------------------------------------------
6852# $File: blender,v 1.8 2019/04/19 00:42:27 christos Exp $
6853# blender: file(1) magic for Blender 3D related files
6854#
6855# Native format rule v1.2. For questions use the developers list
6856# https://lists.blender.org/mailman/listinfo/bf-committers
6857# GLOB chunk was moved near start and provides subversion info since 2.42
6858
68590		string	=BLENDER	Blender3D,
6860>7		string	=_		saved as 32-bits
6861>>8		string	=v		little endian
6862>>>9		byte	x		with version %c.
6863>>>10		byte	x		\b%c
6864>>>11		byte	x		\b%c
6865>>>0x40		string	=GLOB		\b.
6866>>>>0x58	leshort	x		\b%.4d
6867>>8		string	=V		big endian
6868>>>9		byte	x		with version %c.
6869>>>10		byte	x		\b%c
6870>>>11		byte	x		\b%c
6871>>>0x40		string	=GLOB		\b.
6872>>>>0x58	beshort	x		\b%.4d
6873>7		string	=-		saved as 64-bits
6874>>8		string	=v		little endian
6875>>9		byte	x		with version %c.
6876>>10		byte	x		\b%c
6877>>11		byte	x		\b%c
6878>>0x44		string	=GLOB		\b.
6879>>>0x60		leshort	x		\b%.4d
6880>>8		string	=V		big endian
6881>>>9		byte	x		with version %c.
6882>>>10		byte	x		\b%c
6883>>>11		byte	x		\b%c
6884>>>0x44		string	=GLOB		\b.
6885>>>>0x60	beshort	x		\b%.4d
6886
6887# Scripts that run in the embedded Python interpreter
68880		string	#!BPY		Blender3D BPython script
6889
6890#------------------------------------------------------------------------------
6891# $File: blit,v 1.9 2021/07/03 14:01:46 christos Exp $
6892# blit:  file(1) magic for 68K Blit stuff as seen from 680x0 machine
6893#
6894# Note that this 0407 conflicts with several other a.out formats...
6895#
6896# XXX - should this be redone with "be" and "le", so that it works on
6897# little-endian machines as well?  If so, what's the deal with
6898# "VAX-order" and "VAX-order2"?
6899#
6900#0	long		0407		68K Blit (standalone) executable
6901#0	short		0407		VAX-order2 68K Blit (standalone) executable
69020	short		03401		VAX-order 68K Blit (standalone) executable
69030	long		0406		68k Blit mpx/mux executable
69040	short		0406		VAX-order2 68k Blit mpx/mux executable
6905# GRR: line below is too general as it matches also TTComp archive, ASCII, 4K handled by ./archive
69060	short		03001		VAX-order 68k Blit mpx/mux executable
6907# TODO:
6908# skip TTComp archive, ASCII, 4K by looking for executable keyword like main
6909#>0	search/5536	main\0		VAX-order 68k Blit mpx/mux executable
6910# Need more values for WE32 DMD executables.
6911# Note that 0520 is the same as COFF
6912#0	short		0520		tty630 layers executable
6913
6914#------------------------------------------------------------------------------
6915# $File: bm,v 1.2 2021/03/14 16:56:51 christos Exp $
6916# bm:  file(1) magic for "Birtual Machine", cf. https://github.com/tsoding/bm
6917
69180	string	bm\001\244	Birtual Machine
6919>4	leshort	x		\b, version %d
6920>6	lelong	x		\b, program size %u
6921>14	lelong	x		\b, memory size %u
6922>22	lelong	x		\b, memory capacity %u
6923
6924#------------------------------------------------------------------------------
6925# $File: bout,v 1.5 2009/09/19 16:28:08 christos Exp $
6926# i80960 b.out objects and archives
6927#
69280	long		0x10d		i960 b.out relocatable object
6929>16	long		>0		not stripped
6930#
6931# b.out archive (hp-rt on i960)
69320	string		=!<bout>	b.out archive
6933>8	string		__.SYMDEF	random library
6934
6935#------------------------------------------------------------------------------
6936# $File: bsdi,v 1.7 2014/03/29 15:40:34 christos Exp $
6937# bsdi:  file(1) magic for BSD/OS (from BSDI) objects
6938# Some object/executable formats use the same magic numbers as are used
6939# in other OSes; those are handled by entries in aout.
6940#
6941
69420	lelong		0314		386 compact demand paged pure executable
6943>16	lelong		>0		not stripped
6944>32	byte		0x6a		(uses shared libs)
6945
6946# same as in SunOS 4.x, except for static shared libraries
69470	belong&077777777	0600413		SPARC demand paged
6948>0	byte		&0x80
6949>>20	belong		<4096		shared library
6950>>20	belong		=4096		dynamically linked executable
6951>>20	belong		>4096		dynamically linked executable
6952>0	byte		^0x80		executable
6953>16	belong		>0		not stripped
6954>36	belong		0xb4100001	(uses shared libs)
6955
69560	belong&077777777	0600410		SPARC pure
6957>0	byte		&0x80		dynamically linked executable
6958>0	byte		^0x80		executable
6959>16	belong		>0		not stripped
6960>36	belong		0xb4100001	(uses shared libs)
6961
69620	belong&077777777	0600407		SPARC
6963>0	byte		&0x80		dynamically linked executable
6964>0	byte		^0x80		executable
6965>16	belong		>0		not stripped
6966>36	belong		0xb4100001	(uses shared libs)
6967# Chiasmus is an encryption standard developed by the German Federal
6968# Office for Information Security (Bundesamt fuer Sicherheit in der
6969# Informationstechnik).
6970
6971# https://www.bsi.bund.de/EN/Topics/OtherTopics/Chiasmus/Chiasmus_node.html
69720	string		XIA1\r		Chiasmus Encrypted data
6973!:ext xia
6974
69750	string	XIS	Chiasmus key
6976!:ext xis
6977
6978#------------------------------------------------------------------------------
6979# $File: btsnoop,v 1.5 2009/09/19 16:28:08 christos Exp $
6980# BTSnoop:  file(1) magic for BTSnoop files
6981#
6982# From <marcel@holtmann.org>
69830	string		btsnoop\0		BTSnoop
6984>8	belong		x			version %d,
6985>12	belong		1001			Unencapsulated HCI
6986>12	belong		1002			HCI UART (H4)
6987>12	belong		1003			HCI BCSP
6988>12	belong		1004			HCI Serial (H5)
6989>>12	belong		x			type %d
6990
6991#------------------------------------------------------------
6992# $File: burp,v 1.1 2022/07/04 17:15:09 christos Exp $
6993# Burp file, I don't know the version
6994#------------------------------------------------------------
6995# From wof (wof@stachelkaktus.net)
69960	bequad	0x6685828000000001	Burp project save file
6997
6998#------------------------------------------------------------
6999# $File: bytecode,v 1.3 2022/03/24 15:48:58 christos Exp $
7000# magic for various bytecodes
7001
7002# From: Mikhail Gusarov <dottedmag@dottedmag.net>
7003# NekoVM (https://nekovm.org/) bytecode
70040	string		NEKO	NekoVM bytecode
7005>4	lelong		x	(%d global symbols,
7006>8	lelong		x	%d global fields,
7007>12	lelong		x	%d bytecode ops)
7008!:mime	application/x-nekovm-bytecode
7009
7010# https://www.iana.org/assignments/media-types/application/vnd.resilient.logic
7011# From: Benedikt Muessig <benedikt@resilient-group.de>
70120	belong		0x07524c4d	Resilient Logic bytecode
7013!:mime	application/vnd.resilient.logic
7014>4	byte/16		x	\b, version %d
7015>4	byte&0x0f	x	\b.%d
7016
7017# Guile file magic from <dalepsmith@gmail.com>
7018# https://www.gnu.org/s/guile/
7019# https://git.savannah.gnu.org/gitweb/?p=guile.git;f=libguile/_scm.h;hb=HEAD#l250
7020
70210	string	GOOF----	Guile Object
7022>8	string	LE		\b, little endian
7023>8	string	BE		\b, big endian
7024>11	string	4		\b, 32bit
7025>11	string	8		\b, 64bit
7026>13	regex	.\\..		\b, bytecode v%s
7027
7028#------------------------------------------------------------------------------
7029# $File: c64,v 1.12 2022/05/14 20:03:39 christos Exp $
7030# c64:  file(1) magic for various commodore 64 related files
7031#
7032# From: Dirk Jagdmann <doj@cubic.org>
7033
70340x16500	belong		0x12014100	D64 Image
70350x16500	belong		0x12014180	D71 Image
70360x61800 belong		0x28034400	D81 Image
70370	belong		0x43154164	X64 Image
7038
7039# C64 (and other CBM) cartridges
7040# Extended by David Korth <gerbilsoft@gerbilsoft.com>
7041# Reference: https://vice-emu.sourceforge.io/vice_17.html#SEC391
7042
70430	string		C64\40CARTRIDGE	Commodore 64 cartridge
7044>0x20	ubyte	0	\b,
7045>0x20	ubyte	!0
7046>>0x20	string/T	x	\b: "%.32s",
7047>0x16	beshort	0
7048>>0x18	beshort	0x0000	16 KB game
7049>>0x18	beshort	0x0001	8 KB game
7050>>0x18	beshort	0x0100	UltiMax mode
7051>>0x18	beshort	0x0101	RAM/disabled
7052>0x16	beshort	1	Action Replay
7053>0x16	beshort	2	KCS Power Cartridge
7054>0x16	beshort	3	Final Cartridge III
7055>0x16	beshort	4	Simons' BASIC
7056>0x16	beshort	5	Ocean type 1
7057>0x16	beshort	6	Expert Cartridge
7058>0x16	beshort	7	Fun Play, Power Play
7059>0x16	beshort	8	Super Games
7060>0x16	beshort	9	Atomic Power
7061>0x16	beshort	10	Epyx Fastload
7062>0x16	beshort	11	Westermann Learning
7063>0x16	beshort	12	Rex Utility
7064>0x16	beshort	13	Final Cartridge I
7065>0x16	beshort	14	Magic Formel
7066>0x16	beshort	15	C64 Game System, System 3
7067>0x16	beshort	16	Warp Speed
7068>0x16	beshort	17	Dinamic
7069>0x16	beshort	18	Zaxxon / Super Zaxxon (Sega)
7070>0x16	beshort	19	Magic Desk, Domark, HES Australia
7071>0x16	beshort	20	Super Snapshot V5
7072>0x16	beshort	21	Comal-80
7073>0x16	beshort	22	Structured BASIC
7074>0x16	beshort	23	Ross
7075>0x16	beshort	24	Dela EP64
7076>0x16	beshort	25	Dela EP7x8
7077>0x16	beshort	26	Dela EP256
7078>0x16	beshort	27	Rex EP256
7079>0x16	beshort	28	Mikro Assembler
7080>0x16	beshort	29	Final Cartridge Plus
7081>0x16	beshort	30	Action Replay 4
7082>0x16	beshort	31	Stardos
7083>0x16	beshort	32	EasyFlash
7084>0x16	beshort	33	EasyFlash Xbank
7085>0x16	beshort	34	Capture
7086>0x16	beshort	35	Action Replay 3
7087>0x16	beshort	36
7088>>0x1A	ubyte	1	Nordic Replay
7089>>0x1A	ubyte	!1	Retro Replay
7090>0x16	beshort	37	MMC64
7091>0x16	beshort	38	MMC Replay
7092>0x16	beshort	39	IDE64
7093>0x16	beshort	40	Super Snapshot V4
7094>0x16	beshort	41	IEEE-488
7095>0x16	beshort	42	Game Killer
7096>0x16	beshort	43	Prophet64
7097>0x16	beshort	44	EXOS
7098>0x16	beshort	45	Freeze Frame
7099>0x16	beshort	46	Freeze Machine
7100>0x16	beshort	47	Snapshot64
7101>0x16	beshort	48	Super Explode V5.0
7102>0x16	beshort	49	Magic Voice
7103>0x16	beshort	50	Action Replay 2
7104>0x16	beshort	51	MACH 5
7105>0x16	beshort	52	Diashow-Maker
7106>0x16	beshort	53	Pagefox
7107>0x16	beshort	54	Kingsoft
7108>0x16	beshort	55	Silverrock 128K Cartridge
7109>0x16	beshort	56	Formel 64
7110>0x16	beshort	57
7111>>0x1A	ubyte	1	Hucky
7112>>0x1A	ubyte	!1	RGCD
7113>0x16	beshort	58	RR-Net MK3
7114>0x16	beshort	59	EasyCalc
7115>0x16	beshort	60	GMod2
7116>0x16	beshort	61	MAX Basic
7117>0x16	beshort	62	GMod3
7118>0x16	beshort	63	ZIPP-CODE 48
7119>0x16	beshort	64	Blackbox V8
7120>0x16	beshort	65	Blackbox V3
7121>0x16	beshort	66	Blackbox V4
7122>0x16	beshort	67	REX RAM-Floppy
7123>0x16	beshort	68	BIS-Plus
7124>0x16	beshort	69	SD-BOX
7125>0x16	beshort	70	MultiMAX
7126>0x16	beshort	71	Blackbox V9
7127>0x16	beshort	72	Lt. Kernal Host Adaptor
7128>0x16	beshort	73	RAMLink
7129>0x16	beshort	74	H.E.R.O.
7130>0x16	beshort	75	IEEE Flash! 64
7131>0x16	beshort	76	Turtle Graphics II
7132>0x16	beshort	77	Freeze Frame MK2
7133
71340	string		C128\40CARTRIDGE	Commodore 128 cartridge
7135>0x20	ubyte	0	\b,
7136>0x20	ubyte	!0
7137>>0x20	string/T	x	\b: "%.32s",
7138>0x16	beshort	0	generic cartridge
7139>0x16	beshort	1	Warpspeed128
7140>>0x1A	ubyte	1	\b, REU support
7141>>0x1A	ubyte	2	\b, REU support, with I/O and ROM banking
7142
71430	string		CBM2\40CARTRIDGE	Commodore CBM-II cartridge
7144>0x20	ubyte	!0
7145>>0x20	string/T	x	\b: "%.32s"
7146
71470	string		VIC20\40CARTRIDGE	Commodore VIC-20 cartridge
7148>0x20	ubyte	0	\b,
7149>0x20	ubyte	!0
7150>>0x20	string/T	x	\b: "%.32s",
7151>0x16	beshort	0	generic cartridge
7152>0x16	beshort	1	Mega-Cart
7153>0x16	beshort	2	Behr Bonz
7154>0x16	beshort	3	Vic Flash Plugin
7155>0x16	beshort	4	UltiMem
7156>0x16	beshort	5	Final Expansion
7157
71580	string		PLUS4\40CARTRIDGE	Commodore 16/Plus4 cartridge
7159>0x20	ubyte	!0
7160>>0x20	string/T	x	\b: "%.32s"
7161
7162
7163# DreamLoad archives see:
7164# https://www.lemon64.com/forum/viewtopic.php?t=37415\
7165# &sid=494dc2ca91289e05dadf80a7f8a968fe (at the bottom).
7166# https://www.c64-wiki.com/wiki/DreamLoad.
7167# Example HVSC Commodore 64 music collection:
7168# https://kohina.duckdns.org/HVSC/C64Music/10_Years_HVSC.dfi
7169
71700	byte	0
7171>1	string	DREAMLOAD\40FILE\40ARCHIVE
7172>>0x17	byte	0	DFI Image
7173>>>0x1a	leshort	x	version: %d.
7174>>>0x18	leshort	x	\b%d
7175>>>0x1c	lelong	x	tracks: %d
7176
71770	string		GCR-1541	GCR Image
7178>8	byte		x		version: %i
7179>9	byte		x		tracks: %i
7180
71819	string		PSUR		ARC archive (c64)
71822	string		-LH1-		LHA archive (c64)
7183
71840	string		C64File		PC64 Emulator file
7185>8	string		>\0		"%s"
71860	string		C64Image	PC64 Freezer Image
7187
71880	beshort		0x38CD		C64 PCLink Image
71890	string		CBM\144\0\0	Power 64 C64 Emulator Snapshot
7190
71910	belong		0xFF424CFF	WRAptor packer (c64)
7192
71930	string		C64S\x20tape\x20file	T64 tape Image
7194>32	leshort		x		Version:%#x
7195>36	leshort		!0		Entries:%i
7196>40	string		x		Name:%.24s
7197
71980	string		C64\x20tape\x20image\x20file\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0	T64 tape Image
7199>32	leshort		x		Version:%#x
7200>36	leshort		!0		Entries:%i
7201>40	string		x		Name:%.24s
7202
72030	string		C64S\x20tape\x20image\x20file\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0	T64 tape Image
7204>32	leshort		x		Version:%#x
7205>36	leshort		!0		Entries:%i
7206>40	string		x		Name:%.24s
7207
7208# Raw tape file format (.tap files)
7209# Esa Hyyti <esa@netlab.tkk.fi>
72100	string		C64-TAPE-RAW	C64 Raw Tape File (.tap),
7211>0x0c	byte		x		Version:%u,
7212>0x10	lelong		x		Length:%u cycles
7213
7214# magic for Goattracker2, http://covertbitops.c64.org/
7215# from Alex Myczko <alex@aiei.ch>
72160	string		GTS5		GoatTracker 2 song
7217>4	string		>\0		\b, "%s"
7218>36	string		>\0		\b by %s
7219>68	string		>\0		\b (C) %s
7220>100	byte		>0		\b, %u subsong(s)
7221
7222# CBM BASIC (cc65 compiled)
72230	leshort		0x0801
7224>2	leshort		0x080b
7225>6	string		\x9e		CBM BASIC
7226>7	string		>\0		\b, SYS %s
7227
7228#------------------------------------------------------------------------------
7229# $File: cad,v 1.29 2021/12/06 19:33:27 christos Exp $
7230# autocad:  file(1) magic for cad files
7231#
7232
7233# Microstation DGN/CIT Files (www.bentley.com)
7234# Last updated July 29, 2005 by Lester Hightower
7235# DGN is the default file extension of Microstation/Intergraph CAD files.
7236# CIT is the proprietary raster format (similar to TIFF) used to attach
7237# raster underlays to Microstation DGN (vector) drawings.
7238#
7239# http://www.wotsit.org/search.asp
7240# https://filext.com/detaillist.php?extdetail=DGN
7241# https://filext.com/detaillist.php?extdetail=CIT
7242#
7243# https://www.bentley.com/products/default.cfm?objectid=97F351F5-9C35-4E5E-89C2
7244# 3F86C928&method=display&p_objectid=97F351F5-9C35-4E5E-89C280A93F86C928
7245# https://www.bentley.com/products/default.cfm?objectid=A5C2FD43-3AC9-4C71-B682
7246# 721C479F&method=display&p_objectid=A5C2FD43-3AC9-4C71-B682C7BE721C479F
7247#
7248# URL:		https://en.wikipedia.org/wiki/MicroStation
7249# reference:	http://dgnlib.maptools.org/dgn.html
7250#		http://dgnlib.maptools.org/dl/ref18.pdf
7251# Update:	Joerg Jenderek
7252# Note: verfied by command like `dgndump seed2d_b.dgn`
7253# test for level 8 and type 5 or 9
72540	beshort&0x3F73	0x0801
7255# level of element like 8
7256#>0	ubyte&0x3F	x			\b, level %u
7257#>0	ubyte		&0x80			\b, complex
7258#>0	ubyte		&0x40			\b, reserved
7259# type of element 9~TCB 8~Digitizer setup 5~Group Data Elements
7260#>1	ubyte&0x7F	x			\b, type %u
7261# words to follow in element: 17H~CEL library 2FEh~DGN 9FEh,DFEh~CIT
7262#>2	uleshort	x			\b, words %#4.4x to follow
7263# test for 3 reserved 0 bytes in CIT or "conversion" in ViewInfo structure (DGN CEL)
7264#>508	ubelong		x			\b, RESERVED %8.8x
7265>508	ubelong&0xFFffFF00	=0
7266# test for level 8 and type 9 for INGR raster image
7267>>0	beshort		0x0809
7268# test for length of 1st element is multiple of blocks a 512 bytes
7269>>>2	ubyte		0xfe
7270>>>>0 	use		ingr-image
7271# test for DGN or CEL by jump words (uleshort) forward to next element
7272>(2.s*2)	ulong		x
7273# 2nd element type: 8~Digitizer~DesiGNfile 1~library cell header other~CIT
7274#>>&1		ubyte&0x7F	x		\b, 2nd type %u
7275# DGN
7276>>&1		ubyte&0x7F	8
7277>>>2		uleshort	=0x02FE		Bentley/Intergraph Microstation CAD drawing
7278!:mime		application/x-bentley-dgn
7279!:ext		dgn
7280# The 0x40 bit of this byte is 1 if the file is 3D, otherwise 0
7281>>>>1214	ubyte  		&0x40		3D
7282>>>>1214	ubyte  		^0x40		2D
7283# 2 chars for name of subunits like ft FT in IN mu m mm '\0 '\040
7284>>>>1120	string		x		\b, units %-.2s
7285# 2 chars for name of master unit like IN in ML SU tn th TH HU mm "\0 "\040 \0\0
7286>>>>1122	string		>\0		%-.2s
7287#>>>>1120	ubelong		x		\b, units %#8.8x
7288# element range low,high x y z like xlow=0 08010000h 01080000h
7289#>>>>4		ubelong	  	!0		\b, xlow %8.8x
7290#>>>>8		ubelong	  	!0		\b, ylow %8.8x
7291#>>>>12		ubelong	  	!0		\b, zlow %8.8x
7292#>>>>16		ubelong	  	!0		\b, xhigh %8.8x
7293#>>>>20		ubelong	  	!0		\b, yhigh %8.8x
7294#>>>>24		ubelong	  	!0		\b, zhigh %8.8x
7295# graphic group number; all other elements in that group have same non-0 number
7296#>>>>28		leshort		x		\b, grphgrp %#4.4x
7297# words to optional attribute linkage
7298#>>>>30		ubyte		x		\b, attindx \%o
7299#>>>>31		ubyte		x		\b\%o
7300# >>30	string	\026\105			DGNFile
7301# >>30	string	\034\105			DGNFile
7302# >>30	string	\073\107			DGNFile
7303# >>30	string	\073\110			DGNFile
7304# >>30	string	\106\107			DGNFile
7305# >>30	string	\110\103			DGNFile
7306# >>30	string	\120\104			DGNFile
7307# >>30	string	\172\104			DGNFile
7308# >>30	string	\172\105			DGNFile
7309# >>30	string	\172\106			DGNFile
7310# >>30	string	\234\106			DGNFile
7311# >>30	string	\273\105			DGNFile
7312# >>30	string	\306\106			DGNFile
7313# >>30	string	\310\104			DGNFile
7314# >>30	string	\341\104			DGNFile
7315# >>30	string	\372\103			DGNFile
7316# >>30	string	\372\104			DGNFile
7317# >>30	string	\372\106			DGNFile
7318# >>30	string	\376\103			DGNFile
7319# elements properties indicator
7320#>>>>32		uleshort	!0		\b, properties %#4.4x
7321# class 0~Primary
7322#>>>>>32		uleshort&0x000F	!0		\b, class %#4.4x
7323# Symbology
7324#>>>>>34		uleshort	x		\b, Symbology %#4.4x
7325# test for 2nd element type 1~library cell header
7326>>&1		ubyte&0x7F	1
7327# test for 1st element with level 8 and type 5 for cell library
7328>>>0		beshort		0x0805		Bentley/Intergraph Microstation CAD cell library
7329!:mime		application/x-bentley-cel
7330!:ext		cel
7331#
7332# URL:		http://fileformats.archiveteam.org/wiki/Intergraph_Raster
7333# reference:	https://web.archive.org/web/20140903185431/
7334#		http://oreilly.com/www/centers/gff/formats/ingr/index.htm
7335# note:		verfied by command like `nconvert -fullinfo LONGLAT.CIT`
7336# display information for intergraph raster bitmap
73370	name	ingr-image
7338# in 5.37 "Microstation CITFile" "Bentley/Intergraph MicroStation CIT raster CAD"
7339# DataTypeCode indicates format, depth of the pixel data and used compression
7340>4	uleshort	x			Intergraph raster image
7341>>4	uleshort	0x0009			\b, Run-Length Encoded 1-bit
7342!:mime	image/x-intergraph-rle
7343!:ext	rel
7344>>4	uleshort	0x0018			\b, CCITT Group 4 1-bit
7345!:mime	image/x-intergraph-cit
7346!:ext	cit
7347>>4	uleshort	27			\b, Adaptive RLE RGB
7348!:mime	image/x-intergraph-rgb
7349!:ext	rgb
7350>>4	default		x
7351>>>4	uleshort	x			\b, Type %u
7352!:mime	image/x-intergraph
7353# TODO:
7354#>4	uleshort	0			\b, no data
7355# ...
7356#>4	uleshort	0x0045			\b, Continuous Tone CMKY (Uncompressed)
7357# ApplicationType: 0~generic raster image 3~drawing, scanning
7358# 8~I/IMAGE and MicroStation Imager 9~ModelView
7359>6	uleshort	!0			\b, ApplicationType %u
7360#>6	uleshort	x			\b, ApplicationType %u
7361# XViewOrigin; Raster grid data X origin
7362#>8	ulequad		!0			\b, XViewOrigin %llx
7363# PixelsPerLine is the number of pixels in a scan line of bitmapp
7364>184	ulelong		x			\b, %u x
7365# NumberOfLines is height of the raster data in scanlines
7366>188	ulelong		x			%u
7367# DeviceResolution; resolution of scanning device
7368# positive indicates number of micros between lines; negative indicates DPI
7369#>192	leshort		x			\b, DeviceResolution %d
7370# ScanlineOrient indicates the origin and the orientation of the scan lines
7371#>194	ubyte		x			\b, ScanlineOrient %x
7372>194	ubyte		x			\b, orientation
7373>194	ubyte		&0x01			right
7374>194	ubyte		^0x01			left
7375>194	ubyte		&0x02			down
7376>194	ubyte		^0x02			top
7377>194	ubyte		&0x04			horizontal
7378>194	ubyte		^0x04			vertical
7379# ScannableFlag; Scanline indexing method used
7380#>195	ubyte		!0			\b, ScannableFlag %#x
7381# RotationAngle; Rotation angle of raster data
7382#>196	ubequad		!0			\b, RotationAngle %#llx
7383# SkewAngle; Skew angle of raster data
7384#>204	ubequad		!0			\b, SkewAngle %llx
7385# DataTypeModifier; Additional raster data format info
7386#>212	uleshort	!0			\b, DataTypeModifier %#4.4x
7387# DesignFile[66]; Name of the design file
7388>214	string		>\0			\b, DesignFile %-.66s
7389# DatabaseFile[66]; Name of the database file
7390>280	string		>\0			\b, DatabaseFile %-.66s
7391# ParentGridFile[66]; Name of parent grid file
7392>346	string		>\0			\b, ParentGridFile %-.66s
7393# FileDescription[80]; Text description of file and contents
7394>412	string		>\0			\b, FileDescription %-.80s
7395# MinValue
7396#>492	ubequad		!0			\b, MinValue %#llx
7397# MaxValue
7398#>500	ubequad		!0			\b, MaxValue %#llx
7399# Reserved[3]; Unused (always 0)
7400#>508	ubelong&0xFFffFF00	x		\b, RESERVED %8.8x
7401# GridFileVersion; Grid File Version like 2 3
7402#>511	ubyte		x			\b, GridFileVersion %x
7403
7404# AutoCAD
7405# Merge of the different contributions and updates from https://en.wikipedia.org/wiki/Dwg
7406# and https://www.iana.org/assignments/media-types/image/vnd.dwg
74070	string	MC0.0	DWG AutoDesk AutoCAD Release 1.0
7408!:mime image/vnd.dwg
74090	string	AC1.2	DWG AutoDesk AutoCAD Release 1.2
7410!:mime image/vnd.dwg
74110	string	AC1.3	DWG AutoDesk AutoCAD Release 1.3
7412!:mime image/vnd.dwg
74130	string	AC1.40	DWG AutoDesk AutoCAD Release 1.40
7414!:mime image/vnd.dwg
74150	string	AC1.50	DWG AutoDesk AutoCAD Release 2.05
7416!:mime image/vnd.dwg
74170	string	AC2.10	DWG AutoDesk AutoCAD Release 2.10
7418!:mime image/vnd.dwg
74190	string	AC2.21	DWG AutoDesk AutoCAD Release 2.21
7420!:mime image/vnd.dwg
74210	string	AC2.22	DWG AutoDesk AutoCAD Release 2.22
7422!:mime image/vnd.dwg
74230	string	AC1001	DWG AutoDesk AutoCAD Release 2.22
7424!:mime image/vnd.dwg
74250	string	AC1002	DWG AutoDesk AutoCAD Release 2.50
7426!:mime image/vnd.dwg
74270	string	AC1003	DWG AutoDesk AutoCAD Release 2.60
7428!:mime image/vnd.dwg
74290	string	AC1004	DWG AutoDesk AutoCAD Release 9
7430!:mime image/vnd.dwg
74310	string	AC1006	DWG AutoDesk AutoCAD Release 10
7432!:mime image/vnd.dwg
74330	string	AC1009	DWG AutoDesk AutoCAD Release 11/12
7434!:mime image/vnd.dwg
7435# AutoCAD DWG versions R13/R14 (www.autodesk.com)
7436# Written December 01, 2003 by Lester Hightower
7437# Based on the DWG File Format Specifications at http://www.opendwg.org/
7438# AutoCad, from Nahuel Greco
7439# AutoCAD DWG versions R12/R13/R14 (www.autodesk.com)
74400	string	AC1012	DWG AutoDesk AutoCAD Release 13
7441!:mime image/vnd.dwg
74420	string	AC1013	DWG AutoDesk AutoCAD Release 13c3
7443!:mime image/vnd.dwg
74440	string	AC1014	DWG AutoDesk AutoCAD Release 14
7445!:mime image/vnd.dwg
74460	string	AC1015	DWG AutoDesk AutoCAD 2000
7447!:mime image/vnd.dwg
7448
7449# A new version of AutoCAD DWG
7450# Sergey Zaykov (mail_of_sergey@mail.ru, sergey_zaikov@rambler.ru,
7451# ICQ 358572321)
7452# From various sources like:
7453# https://autodesk.blogs.com/between_the_lines/autocad-release-history.html
74540	string	AC1018	DWG AutoDesk AutoCAD 2004/2005/2006
7455!:mime image/vnd.dwg
74560	string	AC1021	DWG AutoDesk AutoCAD 2007/2008/2009
7457!:mime image/vnd.dwg
74580	string	AC1024	DWG AutoDesk AutoCAD 2010/2011/2012
7459!:mime image/vnd.dwg
74600	string	AC1027	DWG AutoDesk AutoCAD 2013-2017
7461!:mime image/vnd.dwg
7462
7463# From GNU LibreDWG
74640	string	AC1032	DWG AutoDesk AutoCAD 2018/2019/2020
7465!:mime image/vnd.dwg
74660	string	AC1035	DWG AutoDesk AutoCAD 2021
7467!:mime image/vnd.dwg
7468
7469# KOMPAS 2D drawing from ASCON
7470# This is KOMPAS 2D drawing or fragment of drawing but is not detailed nor
7471# gathered nor specification
7472# ASCON https://ascon.net/main/ in English,
7473#	https://ascon.ru/ main site in Russian
7474# Extension is CDW for drawing and FRW for fragment of drawing
7475# Sergey Zaykov (mail_of_sergey@mail.ru, sergey_zaikov@rambler.ru,
7476# ICQ 358572321, https://vkontakte.ru/id16076543)
7477# From:
7478# https://sd.ascon.ru/otrs/customer.pl?Action=CustomerFAQ&CategoryID=4&ItemID=292
7479# (in russian) and my experiments
74800	string	KF
7481>2	belong	0x4E00000C	Kompas drawing 12.0 SP1
7482>2	belong	0x4D00000C	Kompas drawing 12.0
7483>2	belong	0x3200000B	Kompas drawing 11.0 SP1
7484>2	belong	0x3100000B	Kompas drawing 11.0
7485>2	belong	0x2310000A	Kompas drawing 10.0 SP1
7486>2	belong	0x2110000A	Kompas drawing 10.0
7487>2	belong	0x08000009	Kompas drawing 9.0 SP1
7488>2	belong	0x05000009	Kompas drawing 9.0
7489>2	belong	0x33010008	Kompas drawing 8+
7490>2	belong	0x1A000008	Kompas drawing 8.0
7491>2	belong	0x2C010107	Kompas drawing 7+
7492>2	belong	0x05000007	Kompas drawing 7.0
7493>2	belong	0x32000006	Kompas drawing 6+
7494>2	belong	0x09000006	Kompas drawing 6.0
7495>2	belong	0x5C009005	Kompas drawing 5.11R03
7496>2	belong	0x54009005	Kompas drawing 5.11R02
7497>2	belong	0x51009005	Kompas drawing 5.11R01
7498>2	belong	0x22009005	Kompas drawing 5.10R03
7499>2	belong	0x22009005	Kompas drawing 5.10R02 mar
7500>2	belong	0x21009005	Kompas drawing 5.10R02 febr
7501>2	belong	0x19009005	Kompas drawing 5.10R01
7502>2	belong	0xF4008005	Kompas drawing 5.9R01.003
7503>2	belong	0x1C008005	Kompas drawing 5.9R01.002
7504>2	belong	0x11008005	Kompas drawing 5.8R01.003
7505
7506# CAD: file(1) magic for computer aided design files
7507# Phillip Griffith <phillip dot griffith at gmail dot com>
7508# AutoCAD magic taken from the Open Design Alliance's OpenDWG specifications.
7509#
7510
7511# 3DS (3d Studio files)
75120	leshort		0x4d4d
7513>6	leshort		0x2
7514>>8	lelong		0xa
7515>>>16	leshort		0x3d3d	3D Studio model
7516# Beat sgi MMV
7517!:strength +20
7518!:mime	image/x-3ds
7519!:ext 3ds
7520
7521# MegaCAD 2D/3D drawing (.prt)
7522# https://megacad.de/
7523# From: Markus Heidelberg <markus.heidelberg@web.de>
75240	string	MegaCad23\0	MegaCAD 2D/3D drawing
7525
7526# Hoops CAD files
7527# https://docs.techsoft3d.com/visualize/3df/latest/build/general/hsf/\
7528# HSF_architecture.html
7529# Stephane Charette <stephane.charette@gmail.com>
75300	string	;;\020HSF\020V		OpenHSF (Hoops Stream Format)
7531>7	regex/9 V[.0-9]{4,5}\020	%s
7532!:ext hsf
7533
7534# AutoCAD Drawing Exchange Format
75350	regex		\^[\ \t]*0\r?\000$
7536>1	regex		\^[\ \t]*SECTION\r?$
7537>>2	regex		\^[\ \t]*2\r?$
7538>>>3	regex		\^[\ \t]*HEADER\r?$	AutoCAD Drawing Exchange Format
7539!:mime	application/x-dxf
7540!:ext	dxf
7541>>>>&1	search/8192	AC1006			\b, R10
7542>>>>&1	search/8192	AC1009			\b, R11/R12
7543>>>>&1	search/8192	AC1012			\b, R13
7544>>>>&1	search/8192	AC1013			\b, R13c3
7545>>>>&1	search/8192	AC1014			\b, R14
7546>>>>&1	search/8192	AC1015			\b, version 2000
7547>>>>&1	search/8192	AC1018			\b, version 2004
7548>>>>&1	search/8192	AC1021			\b, version 2007
7549>>>>&1	search/8192	AC1024			\b, version 2010
7550>>>>&1	search/8192	AC1027			\b, version 2013
7551>>>>&1	search/8192	AC1032			\b, version 2018
7552>>>>&1	search/8192	AC1035			\b, version 2021
7553
7554# The Sketchup 3D model format https://www.sketchup.com/
75550	string	\xff\xfe\xff\x0e\x53\x00\x6b\x00\x65\x00\x74\x00\x63\x00\x68\x00\x55\x00\x70\x00\x20\x00\x4d\x00\x6f\x00\x64\x00\x65\x00\x6c\x00	SketchUp Model
7556!:mime application/vnd.sketchup.skp
7557!:ext skp
7558
75594	regex/b	P[0-9][0-9]\\.[0-9][0-9][0-9][0-9]\\.[0-9][0-9][0-9][0-9]\\.[0-9]	NAXOS CAD System file from version %s
7560!:strength +40
7561
7562# glTF (GL Transmission Format) - by the Khronos Group
7563# Reference: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#glb-file-format-specification
75640	string		glTF		glTF binary model
7565>4	ulelong		x		\b, version %d
7566>8	ulelong		x		\b, length %d bytes
7567!:mime	model/gltf-binary
7568!:ext	glb
7569
7570# FBX (FilmBoX) - by Kaydara/Autodesk
7571# Reference: https://code.blender.org/2013/08/fbx-binary-file-format-specification
75720	string	Kaydara\ FBX\ Binary\ \ \0	Kaydara FBX model,
7573>&2	ulelong	x	version %d
7574!:ext	fbx
7575
7576# PLY (Polygon File Format/Stanford Triangle Format) - by Greg Turk
7577# Reference: https://web.archive.org/web/20161204152348/http://www.dcs.ed.ac.uk/teaching/cs4/www/graphics/Web/ply.html
75780	string	ply\n          	PLY model,
7579!:ext	ply
7580>4	string	format\ ascii\ 	ASCII,
7581>>&0	regex/6	[0-9.]+        	version %s
7582>4	string	format\ binary  	binary,
7583>>&0	string	_little_endian\ 	little endian,
7584>>>&0	regex/6	[0-9.]+         	version %s
7585>>&0	string	_big_endian\ 	big endian,
7586>>>&0	regex/6	[0-9.]+      	version %s
7587
7588# VRML (Virtual Reality Modeling Language) - by the Web3D Consortium
7589# From:      Michel Briand <michelbriand@free.fr>
7590# Reference: https://www.web3d.org/standards
75910	string/w	#VRML\ V1.0\ ascii	VRML 1 file
7592!:mime	model/vrml
7593!:ext	wrl
75940	string/w	#VRML\ V2.0\ utf8	ISO/IEC 14772 VRML 97 file
7595!:mime	model/vrml
7596!:ext	wrl
7597# X3D, VRML encoded
75980	string	#X3D	X3D (Extensible 3D) model, VRML format
7599>4	string	V
7600>>5	regex/6	[0-9.]+	\b, version %s
7601!:mime	model/x3d+vrml
7602!:ext	x3dv
7603
7604## XML-based 3D CAD Formats
7605# From: Michel Briand <michelbriand@free.fr>, Oliver Galvin <odg@riseup.net>
76060	string/w        \<?xml\ version=
7607!:strength + 5
7608# X3D (Extensible 3D)
7609# Schema:    https://www.web3d.org/specifications/x3d-3.2.dtd
7610# MIME Type: https://www.iana.org/assignments/media-types/model/x3d+xml
7611# Example:   https://www.web3d.org/x3d/content/examples/Basic/course/CreateX3DFromStringRandomSpheres.x3d
7612>20	search/1000/w   \<!DOCTYPE\ X3D         X3D (Extensible 3D) model, XML document
7613!:mime	model/x3d+xml
7614!:ext	x3d
7615# COLLADA (COLLAborative Design Activity) - by the Khronos Group
7616# Schema:    http://www.collada.org/2005/11/COLLADASchema
7617# Reference: https://www.khronos.org/collada
7618>20	search/1000/w	\<COLLADA	COLLADA model, XML document
7619!:mime	model/vnd.collada+xml
7620!:ext	dae
7621# 3MF (3D Manufacturing Format) - by the 3MF Consortium
7622# Schema:    http://schemas.microsoft.com/3dmanufacturing/core/2015/02
7623# Reference: https://3mf.io/specification
7624>20	search/1000/w	xmlns="http://schemas.microsoft.com/3dmanufacturing	3MF (3D Manufacturing Format) model, XML document
7625!:mime	model/3mf
7626!:ext	3mf
7627# AMF (Additive Manufacturing File)
7628# Reference: https://www.astm.org/Standards/ISOASTM52915.htm
7629>20	search/1000/w	\<amf	AMF (Additive Manufacturing Format) model, XML document
7630!:mime	application/x-amf
7631!:ext	amf
7632
7633#------------------------------------------------------------------------------
7634# $File: cafebabe,v 1.28 2022/07/01 23:24:47 christos Exp $
7635# Cafe Babes unite!
7636#
7637# Since Java bytecode and Mach-O universal binaries have the same magic number,
7638# the test must be performed in the same "magic" sequence to get both right.
7639# The long at offset 4 in a Mach-O universal binary tells the number of
7640# architectures; the short at offset 4 in a Java bytecode file is the JVM minor
7641# version and the short at offset 6 is the JVM major version.  Since there are only
7642# only 18 labeled Mach-O architectures at current, and the first released
7643# Java class format was version 43.0, we can safely choose any number
7644# between 18 and 39 to test the number of architectures against
7645# (and use as a hack). Let's not use 18, because the Mach-O people
7646# might add another one or two as time goes by...
7647#
7648### JAVA START ###
7649# Reference:	http://en.wikipedia.org/wiki/Java_class_file
7650# Update:	Joerg Jenderek
76510	belong		0xcafebabe
7652>4	ubelong		>30		compiled Java class data,
7653!:mime	application/x-java-applet
7654#!:mime	application/java-byte-code
7655!:ext	class
7656>>6	ubeshort	x	        version %d.
7657>>4	ubeshort	x       	\b%d
7658# for debugging purpose version as hexadecimal to compare with Mach-O universal binary
7659#>>4	ubelong		x       	(%#8.8x)
7660# Which is which?
7661# https://docs.oracle.com/javase/specs/jvms/se6/html/ClassFile.doc.html
7662#>>4	belong		0x002b		(Java 0.?)
7663#>>4	belong		0x032d		(Java 1.0)
7664#>>4	belong		0x032d		(Java 1.1)
7665>>4	belong		0x002e		(Java 1.2)
7666>>4	belong		0x002f		(Java 1.3)
7667>>4	belong		0x0030		(Java 1.4)
7668>>4	belong		0x0031		(Java 1.5)
7669>>4	belong		0x0032		(Java 1.6)
7670>>4	belong		0x0033		(Java 1.7)
7671>>4	belong		0x0034		(Java 1.8)
7672>>4	belong		0x0035		(Java SE 9)
7673>>4	belong		0x0036		(Java SE 10)
7674>>4	belong		0x0037		(Java SE 11)
7675>>4	belong		0x0038		(Java SE 12)
7676>>4	belong		0x0039		(Java SE 13)
7677>>4	belong		0x003A		(Java SE 14)
7678>>4	belong		0x003B		(Java SE 15)
7679>>4	belong		0x003C		(Java SE 16)
7680>>4	belong		0x003D		(Java SE 17)
7681>>4	belong		0x003E		(Java SE 18)
7682>>4	belong		0x003F		(Java SE 19)
7683>>4	belong		0x0040		(Java SE 20)
7684# pool count unequal zero
7685#>>8	beshort		x	        \b, pool count %#x
7686# pool table
7687#>>10	ubequad		x	        \b, pool %#16.16llx...
7688
76890	belong		0xcafed00d	JAR compressed with pack200,
7690>5	byte		x		version %d.
7691>4	byte		x		\b%d
7692!:mime	application/x-java-pack200
7693
7694
76950	belong		0xcafed00d	JAR compressed with pack200,
7696>5	byte		x		version %d.
7697>4	byte		x		\b%d
7698!:mime	application/x-java-pack200
7699
7700### JAVA END ###
7701### MACH-O START ###
7702# URL:		https://en.wikipedia.org/wiki/Mach-O
7703
77040	name		mach-o		\b [
7705# for debugging purpose CPU type as hexadecimal
7706#>0	ubequad		x		CPU=%16.16llx
7707# display CPU type as string like: i386 x86_64 ... armv7 armv7k ...
7708>0	use		mach-o-cpu	\b
7709# for debugging purpose print offset to 1st mach_header like:
7710# 1000h 4000h seldom 2d000h 88000h 5b000h 10e000 h
7711#>8	ubelong		x		at %#x offset
7712>(8.L)	indirect	x		\b:
7713>0	belong		x		\b]
7714
7715# Reference:	https://opensource.apple.com/source/cctools/cctools-949.0.1/
7716#		include/mach-o/fat.h
7717#		include/mach/machine.h
77180	belong		0xcafebabe
7719>4	belong		1		Mach-O universal binary with 1 architecture:
7720!:mime application/x-mach-binary
7721>>8	use		mach-o		\b
7722# nfat_arch; number of CPU architectures; highest is 18 for CPU_TYPE_POWERPC in 2020
7723>4	ubelong		>1
7724>>4	ubelong		<20		Mach-O universal binary with %d architectures:
7725!:mime application/x-mach-binary
7726>>>8	use		mach-o		\b
7727>>>4	ubelong		>1
7728>>>>28	use		mach-o		\b
7729>>>4	ubelong		>2
7730>>>>48	use		mach-o		\b
7731>>>4	ubelong		>3
7732>>>>68	use		mach-o		\b
7733>>>4	ubelong		>4
7734>>>>88	use		mach-o		\b
7735>>>4	ubelong		>5
7736>>>>108	use		mach-o		\b
7737
7738### MACH-O END ###
7739
7740#------------------------------------------------------------------------------
7741# $File: cbor,v 1.1 2015/01/28 01:05:21 christos Exp $
7742# cbor:  file(1) magic for CBOR files as defined in RFC 7049
7743
77440	string	\xd9\xd9\xf7 Concise Binary Object Representation (CBOR) container
7745!:mime	application/cbor
7746>3	ubyte	<0x20	(positive integer)
7747>3	ubyte	<0x40
7748>>3	ubyte	>0x1f	(negative integer)
7749>3	ubyte	<0x60
7750>>3	ubyte	>0x3f	(byte string)
7751>3	ubyte	<0x80
7752>>3	ubyte	>0x5f	(text string)
7753>3	ubyte	<0xa0
7754>3	ubyte	>0x7f	(array)
7755>3	ubyte	<0xc0
7756>>3	ubyte	>0x9f	(map)
7757>3	ubyte	<0xe0
7758>>3	ubyte	>0xbf	(tagged)
7759>3	ubyte	>0xdf	(other)
7760
7761#------------------------------------------------------------------------------
7762# $File: ccf,v 1.1 2022/02/15 12:57:45 christos Exp $
7763# file(1) magic(5) data for Phillips remote controls
7764
7765# Exchange format for Philips Pronto universal infrared remote controls
7766# A CCF file describes a learned/customized remote control,
7767# i.e. it contains button UI and infrared pulse code definitions
7768# (Georg Sauthoff)
7769# http://files.remotecentral.com/download/45/pan-air-csakr.zip.html
7770# https://github.com/gsauthof/pronto-ccf/blob/
7771
77728	string	@\xa5Z@_CCF
7773>32	string	CCF\x00		Philips Pronto IR remote control CCF
7774
7775#------------------------------------------------------------------------------
7776# $File: cddb,v 1.4 2009/09/19 16:28:08 christos Exp $
7777# CDDB: file(1) magic for CDDB(tm) format CD text data files
7778#
7779# From <steve@gracenote.com>
7780#
7781# This is the /etc/magic entry to decode datafiles as used by
7782# CDDB-enabled CD player applications.
7783#
7784
77850	search/1/w	#\040xmcd	CDDB(tm) format CD text data
7786
7787#------------------------------------------------------------------------------
7788# $File: chord,v 1.5 2010/09/20 19:19:16 rrt Exp $
7789# chord: file(1) magic for Chord music sheet typesetting utility input files
7790#
7791# From Philippe De Muyter <phdm@macqel.be>
7792# File format is actually free, but many distributed files begin with `{title'
7793#
77940	string		{title		Chord text file
7795
7796# Type:	PowerTab file format
7797# URL:	http://www.power-tab.net/
7798# From:	Jelmer Vernooij <jelmer@samba.org>
77990	string		ptab\003\000	Power-Tab v3 Tablature File
78000	string		ptab\004\000	Power-Tab v4 Tablature File
7801
7802#------------------------------------------------------------------------------
7803# $File: cisco,v 1.4 2009/09/19 16:28:08 christos Exp $
7804# cisco:  file(1) magic for cisco Systems routers
7805#
7806# Most cisco file-formats are covered by the generic elf code
7807#
7808# Microcode files are non-ELF, 0x8501 conflicts with NetBSD/alpha.
78090	belong&0xffffff00	0x85011400  cisco IOS microcode
7810>7	string		>\0		    for '%s'
78110	belong&0xffffff00	0x8501cb00  cisco IOS experimental microcode
7812>7	string		>\0		    for '%s'
7813
7814#------------------------------------------------------------------------------
7815# $File: citrus,v 1.5 2021/01/04 19:48:31 christos Exp $
7816# citrus locale declaration
7817#
7818
78190	string		RuneCT		Citrus locale declaration for LC_CTYPE
78200	string		CtrsME		Citrus locale declaration for LC_MESSAGES
78210	string		CtrsMO		Citrus locale declaration for LC_MONETARY
78220	string		CtrsNU		Citrus locale declaration for LC_NUMERIC
78230	string		CtrsTI		Citrus locale declaration for LC_TIME
7824
7825#------------------------------------------------------------------------------
7826# $File: c-lang,v 1.30 2021/08/16 10:17:05 christos Exp $
7827# c-lang:  file(1) magic for C and related languages programs
7828#
7829# The strength is to beat standard HTML
7830
7831# BCPL
78320	search/8192	"libhdr"	BCPL source text
7833!:mime	text/x-bcpl
78340	search/8192	"LIBHDR"	BCPL source text
7835!:mime	text/x-bcpl
7836
7837# C
7838# Check for class if include is found, otherwise class is beaten by include because of lowered strength
78390	search/8192	#include
7840>0	regex	\^#include			C
7841>>0	regex	\^class[[:space:]]+
7842>>>&0	regex 	\\{[\.\*]\\}(;)?$			\b++
7843>>&0	clear	x				source text
7844!:strength + 13
7845!:mime	text/x-c
78460	search/8192	pragma
7847>0	regex	\^#[[:space:]]*pragma	C source text
7848!:mime	text/x-c
78490	search/8192	endif
7850>0	regex	\^#[[:space:]]*(if\|ifn)def
7851>>&0	regex	\^#[[:space:]]*endif$	C source text
7852!:mime	text/x-c
78530	search/8192	define
7854>0	regex	\^#[[:space:]]*(if\|ifn)def
7855>>&0	regex	\^#[[:space:]]*define	C source text
7856!:mime	text/x-c
78570	search/8192	char
7858>0	regex	\^[[:space:]]*char(\ \\*|\\*)(.+)(=.*)?;[[:space:]]*$			C source text
7859!:mime	text/x-c
78600	search/8192	double
7861>0	regex	\^[[:space:]]*double(\ \\*|\\*)(.+)(=.*)?;[[:space:]]*$			C source text
7862!:mime	text/x-c
78630	search/8192	extern
7864>0	regex	\^[[:space:]]*extern[[:space:]]+		C source text
7865!:mime	text/x-c
78660	search/8192	float
7867>0	regex	\^[[:space:]]*float(\ \\*|\\*)(.+)(=.*)?;[[:space:]]*$			C source text
7868!:mime	text/x-c
78690	search/8192	struct
7870>0	regex	\^struct[[:space:]]+		C source text
7871!:mime	text/x-c
78720	search/8192	union
7873>0	regex	\^union[[:space:]]+		C source text
7874!:mime	text/x-c
78750	search/8192	main(
7876>&0	search/64	String			Java source text
7877!:mime	text/x-java
7878>&0	default		x
7879>>&0 regex	\\)[[:space:]]*\\{		C source text
7880!:mime	text/x-c
7881
7882# C++
7883# The strength of these rules is increased so they beat the C rules above
78840	search/8192	namespace
7885>0	regex	\^namespace[[:space:]]+[_[:alpha:]]{1,30}[[:space:]]*\\{	C++ source text
7886!:strength + 30
7887!:mime	text/x-c++
7888# using namespace [namespace] or using std::[lib]
78890	search/8192	using
7890>0	regex	\^using[[:space:]]+(namespace\ )?std(::)?[[:alpha:]]*[[:space:]]*;		C++ source text
7891!:strength + 30
7892!:mime	text/x-c++
78930	search/8192	template
7894>0	regex	\^[[:space:]]*template[[:space:]]*<.*>[[:space:]]*$	C++ source text
7895!:strength + 30
7896!:mime	text/x-c++
78970	search/8192	virtual
7898>0	regex	\^[[:space:]]*virtual[[:space:]]+.*[};][[:space:]]*$		C++ source text
7899!:strength + 30
7900!:mime	text/x-c++
7901# But class alone is reduced to avoid beating php (Jens Schleusener)
79020	search/8192	class
7903>0	regex	\^[[:space:]]*class[[:space:]]+[[:digit:][:alpha:]:_]+[[:space:]]*\\{(.*[\n]*)*\\}(;)?$		C++ source text
7904!:strength + 13
7905!:mime	text/x-c++
79060	search/8192	public
7907>0	regex	\^[[:space:]]*public:		C++ source text
7908!:strength + 30
7909!:mime	text/x-c++
79100	search/8192	private
7911>0	regex	\^[[:space:]]*private:		C++ source text
7912!:strength + 30
7913!:mime	text/x-c++
79140	search/8192	protected
7915>0	regex	\^[[:space:]]*protected:		C++ source text
7916!:strength + 30
7917!:mime	text/x-c++
7918
7919# Objective-C
79200	search/8192	#import
7921>0	regex	\^#import			Objective-C source text
7922!:strength + 25
7923!:mime	text/x-objective-c
7924
7925# From: Mikhail Teterin <mi@aldan.algebra.com>
79260	string		cscope		cscope reference data
7927>7	string		x		version %.2s
7928# We skip the path here, because it is often long (so file will
7929# truncate it) and mostly redundant.
7930# The inverted index functionality was added some time between
7931# versions 11 and 15, so look for -q if version is above 14:
7932>7	string		>14
7933>>10	search/100	\ -q\ 		with inverted index
7934>10	search/100	\ -c\ 		text (non-compressed)
7935
7936#------------------------------------------------------------------------------
7937# $File: clarion,v 1.5 2014/04/30 21:41:02 christos Exp $
7938# clarion:  file(1) magic for # Clarion Personal/Professional Developer
7939# (v2 and above)
7940# From: Julien Blache <jb@jblache.org>
7941
7942# Database files
7943# signature
79440	leshort	0x3343	Clarion Developer (v2 and above) data file
7945# attributes
7946>2	leshort	&0x0001	\b, locked
7947>2	leshort	&0x0004	\b, encrypted
7948>2	leshort	&0x0008	\b, memo file exists
7949>2	leshort	&0x0010	\b, compressed
7950>2	leshort	&0x0040	\b, read only
7951# number of records
7952>5	lelong	x	\b, %d records
7953
7954# Memo files
79550	leshort	0x334d	Clarion Developer (v2 and above) memo data
7956
7957# Key/Index files
7958# No magic? :(
7959
7960# Help files
79610	leshort	0x49e0	Clarion Developer (v2 and above) help data
7962
7963#------------------------------------------------------------------------------
7964# $File: claris,v 1.8 2016/07/18 19:23:38 christos Exp $
7965# claris:  file(1) magic for claris
7966# "H. Nanosecond" <aldomel@ix.netcom.com>
7967# Claris Works a word processor, etc.
7968# Version 3.0
7969
7970# .pct claris works clip art files
7971#0000000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
7972#*
7973#0001000 #010 250 377 377 377 377 000 213 000 230 000 021 002 377 014 000
7974#null to byte 1000 octal
7975514	string	\377\377\377\377\000
7976>0	string	\0\0\0\0\0\0\0\0\0\0\0\0\0	Claris clip art
7977514	string	\377\377\377\377\001
7978>0	string	\0\0\0\0\0\0\0\0\0\0\0\0\0	Claris clip art
7979
7980# Claris works files
7981# .cwk
7982# Moved to Apple AppleWorks document
7983#0	string	\002\000\210\003\102\117\102\117\000\001\206 Claris works document
7984# .plt
79850	string	\020\341\000\000\010\010	Claris Works palette files .plt
7986
7987# .msp a dictionary file I am not sure about this I have only one .msp file
79880	string	\002\271\262\000\040\002\000\164	Claris works dictionary
7989
7990# .usp are user dictionary bits
7991# I am not sure about a magic header:
7992#0000000 001 123 160 146 070 125 104 040 136 123 015 012 160 157 144 151
7993#        soh   S   p   f   8   U   D  sp   ^   S  cr  nl   p   o   d   i
7994#0000020 141 164 162 151 163 164 040 136 123 015 012 144 151 166 040 043
7995#          a   t   r   i   s   t  sp   ^   S  cr  nl   d   i   v  sp   #
7996
7997# .mth Thesaurus
7998# starts with \0 but no magic header
7999
8000# .chy Hyphenation file
8001# I am not sure: 000 210 034 000 000
8002
8003# other claris files
8004#./windows/claris/useng.ndx: data
8005#./windows/claris/xtndtran.l32: data
8006#./windows/claris/xtndtran.lst: data
8007#./windows/claris/clworks.lbl: data
8008#./windows/claris/clworks.prf: data
8009#./windows/claris/userd.spl: data
8010
8011#------------------------------------------------------------------------------
8012# $File: clipper,v 1.9 2020/12/15 23:57:27 christos Exp $
8013# clipper:  file(1) magic for Intergraph (formerly Fairchild) Clipper.
8014#
8015# XXX - what byte order does the Clipper use?
8016#
8017# XXX - what's the "!" stuff:
8018#
8019# >18	short		!074000,000000	C1 R1
8020# >18	short		!074000,004000	C2 R1
8021# >18	short		!074000,010000	C3 R1
8022# >18	short		!074000,074000	TEST
8023#
8024# I shall assume it's ANDing the field with the first value and
8025# comparing it with the second, and rewrite it as:
8026#
8027# >18	short&074000	000000		C1 R1
8028# >18	short&074000	004000		C2 R1
8029# >18	short&074000	010000		C3 R1
8030# >18	short&074000	074000		TEST
8031#
8032# as SVR3.1's "file" doesn't support anything of the "!074000,000000"
8033# sort, nor does SunOS 4.x, so either it's something Intergraph added
8034# in CLIX, or something AT&T added in SVR3.2 or later, or something
8035# somebody else thought was a good idea; it's not documented in the
8036# man page for this version of "magic", nor does it appear to be
8037# implemented (at least not after I blew off the bogus code to turn
8038# old-style "&"s into new-style "&"s, which just didn't work at all).
8039#
80400	short		0575		CLIPPER COFF executable (VAX #)
8041>20	short		0407		(impure)
8042>20	short		0410		(5.2 compatible)
8043>20	short		0411		(pure)
8044>20	short		0413		(demand paged)
8045>20	short		0443		(target shared library)
8046>12	long		>0		not stripped
8047>22	short		>0		- version %d
80480	short		0577		CLIPPER COFF executable
8049>18	short&074000	000000		C1 R1
8050>18	short&074000	004000		C2 R1
8051>18	short&074000	010000		C3 R1
8052>18	short&074000	074000		TEST
8053>20	short		0407		(impure)
8054>20	short		0410		(pure)
8055>20	short		0411		(separate I&D)
8056>20	short		0413		(paged)
8057>20	short		0443		(target shared library)
8058>12	long		>0		not stripped
8059>22	short		>0		- version %d
8060>48	long&01		01		alignment trap enabled
8061>52	byte		1		-Ctnc
8062>52	byte		2		-Ctsw
8063>52	byte		3		-Ctpw
8064>52	byte		4		-Ctcb
8065>53	byte		1		-Cdnc
8066>53	byte		2		-Cdsw
8067>53	byte		3		-Cdpw
8068>53	byte		4		-Cdcb
8069>54	byte		1		-Csnc
8070>54	byte		2		-Cssw
8071>54	byte		3		-Cspw
8072>54	byte		4		-Cscb
8073#4	string		pipe		CLIPPER instruction trace
8074#4	string		prof		CLIPPER instruction profile
8075#------------------------------------------------------------------------------
8076# file:  file(1) magic for Clojure
8077# URL:  https://clojure.org/
8078# From: Jason Felice <jason.m.felice@gmail.com>
8079
80800	string/w	#!\ /usr/bin/clj	Clojure script text executable
8081!:mime	text/x-clojure
80820	string/w	#!\ /usr/local/bin/clj	Clojure script text executable
8083!:mime	text/x-clojure
80840	string/w	#!\ /usr/bin/clojure	Clojure script text executable
8085!:mime	text/x-clojure
80860	string/w	#!\ /usr/local/bin/clojure	Clojure script text executable
8087!:mime	text/x-clojure
80880	string/W	#!/usr/bin/env\ clj	Clojure script text executable
8089!:mime	text/x-clojure
80900	string/W	#!/usr/bin/env\ clojure	Clojure script text executable
8091!:mime	text/x-clojure
80920	string/W	#!\ /usr/bin/env\ clj	Clojure script text executable
8093!:mime	text/x-clojure
80940	string/W	#!\ /usr/bin/env\ clojure	Clojure script text executable
8095!:mime	text/x-clojure
8096
80970	regex	\^\\\(ns[[:space:]]+[a-z]	Clojure module source text
8098!:mime	text/x-clojure
8099
81000	regex	\^\\\(ns[[:space:]]+\\\^\\{:	Clojure module source text
8101!:mime	text/x-clojure
8102
81030	regex	\^\\\(defn-?[[:space:]]	Clojure module source text
8104!:mime	text/x-clojure
8105
8106#------------------------------------------------------------------------------
8107# $File: coff,v 1.6 2021/04/26 15:56:00 christos Exp $
8108# coff: file(1) magic for Common Object Files not specific to known cpu types or manufactures
8109#
8110# COFF
8111#
8112# by Joerg Jenderek at Oct 2015, Feb 2021
8113# https://en.wikipedia.org/wiki/COFF
8114# https://de.wikipedia.org/wiki/Common_Object_File_Format
8115# http://www.delorie.com/djgpp/doc/coff/filhdr.html
8116
8117# display name+variables+flags of Common Object Files Format (32bit)
8118# Maybe used also in adi,att3b,clipper,hitachi-sh,hp,ibm6000,intel,
8119# mips,motorola,msdos,osf1,sharc,varied.out,vax
81200	name				display-coff
8121# test for unused flag bits (0x8000,0x0800,0x0400,0x0200,x0080) in f_flags
8122>18	uleshort&0x8E80	0
8123# skip DOCTOR.DAILY READER.NDA REDBOX.ROOT by looking for positive number of sections
8124>>2	uleshort	>0
8125# skip ega80woa.fnt svgafix.fnt HP3FNTS1.DAT HP3FNTS2.DAT INTRO.ACT LEARN.PIF by looking for low number of sections
8126>>>2	uleshort	<4207
8127>>>>0	clear		x
8128# f_magic - magic number
8129# DJGPP, 80386 COFF executable, MS Windows COFF Intel 80386 object file (./intel)
8130>>>>0	uleshort	0x014C		Intel 80386
8131# Hitachi SH big-endian COFF (./hitachi-sh)
8132>>>>0	uleshort	0x0500		Hitachi SH big-endian
8133# Hitachi SH little-endian COFF (./hitachi-sh)
8134>>>>0	uleshort	0x0550		Hitachi SH little-endian
8135# executable (RISC System/6000 V3.1) or obj module (./ibm6000)
8136#>>>>0	uleshort	0x01DF
8137# MS Windows COFF Intel Itanium, AMD64
8138# https://msdn.microsoft.com/en-us/library/windows/desktop/ms680313(v=vs.85).aspx
8139>>>>0	uleshort	0x0200		Intel ia64
8140>>>>0	uleshort	0x8664		Intel amd64
8141# ARM COFF (./arm)
8142>>>>0	uleshort	0xaa64		Aarch64
8143>>>>0	uleshort	0x01c0		ARM
8144>>>>0	uleshort	0x01c2		ARM Thumb
8145>>>>0	uleshort	0x01c4		ARMv7 Thumb
8146# TODO for other COFFs
8147#>>>>0	uleshort	0xABCD		COFF_TEMPLATE
8148>>>>0	default		x
8149>>>>>0	uleshort	x		type %#04x
8150>>>>0	uleshort	x		COFF
8151# F_EXEC flag bit
8152>>>>18	leshort		^0x0002		object file
8153!:mime	application/x-coff
8154!:ext	o/obj/lib
8155# no cof sample found
8156#!:ext	cof/o/obj/lib
8157>>>>18	leshort		&0x0002		executable
8158#!:mime	application/x-coffexec
8159# F_RELFLG flag bit,static object
8160>>>>18	leshort		&0x0001		\b, no relocation info
8161# F_LNNO flag bit
8162>>>>18	leshort		&0x0004		\b, no line number info
8163# F_LSYMS flag bit
8164>>>>18	leshort		&0x0008		\b, stripped
8165>>>>18	leshort		^0x0008		\b, not stripped
8166# flags in other COFF versions
8167#0x0010    F_FDPR_PROF
8168#0x0020    F_FDPR_OPTI
8169#0x0040    F_DSA
8170# F_AR32WR flag bit
8171#>>>>18	leshort		&0x0100		\b, 32 bit little endian
8172#0x1000    F_DYNLOAD
8173#0x2000    F_SHROBJ
8174#0x4000    F_LOADONLY
8175# f_nscns - number of sections like: 1 2 3 4 5 7 8 9 11 12 15 16 19 20 21 22 26 30 36 40 42 56 80 89 96 124
8176>>>>2	uleshort	<2		\b, %u section
8177>>>>2	uleshort	>1		\b, %u sections
8178# f_symptr - symbol table pointer, only for not stripped
8179# like: 0 0x7c 0xf4 0x104 0x182 0x1c2 0x1c6 0x468 0x948 0x416e 0x149a6 0x1c9d8 0x23a68 0x35120 0x7afa0
8180>>>>8	ulelong		>0		\b, symbol offset=%#x
8181# f_nsyms - number of symbols, only for not stripped
8182# like: 0 2 7 9 10 11 20 35 41 63 71 80 105 146 153 158 170 208 294 572 831 1546
8183>>>>12	ulelong		>0		\b, %d symbols
8184# f_opthdr - optional header size. An object file should have a value of 0
8185>>>>16	uleshort	>0		\b, optional header size %u
8186# f_timdat - file time & date stamp only for little endian
8187>>>>4	ledate		>0		\b, created %s
8188# at offset 20 can be optional header, extra bytes FILHSZ-20 because
8189# do not rely on sizeof(FILHDR) to give the correct size for header.
8190# or first section header
8191# additional variables for other COFF files
8192>>>>16	uleshort	=0
8193# first section name s_name[8] like: .text .data .debug$S .drectve .testseg
8194>>>>>20	string		x		\b, 1st section name "%.8s"
8195# >20	beshort		0407		(impure)
8196# >20	beshort		0410		(pure)
8197# >20	beshort		0413		(demand paged)
8198# >20	beshort		0421		(standalone)
8199# >22	leshort		>0		- version %d
8200# >168	string		.lowmem		Apple toolbox
8201
8202
8203#------------------------------------------------------------------------------
8204# $File: commands,v 1.69 2022/04/20 21:14:23 christos Exp $
8205# commands:  file(1) magic for various shells and interpreters
8206#
8207#0	string/w	:			shell archive or script for antique kernel text
82080	string/fwt	#!\ /bin/sh		POSIX shell script text executable
8209!:mime	text/x-shellscript
82100	string/fwb	#!\ /bin/sh		POSIX shell script executable (binary data)
8211!:mime	text/x-shellscript
8212
82130	string/fwt	#!\ /bin/csh		C shell script text executable
8214!:mime	text/x-shellscript
8215
8216# korn shell magic, sent by George Wu, gwu@clyde.att.com
82170	string/fwt	#!\ /bin/ksh		Korn shell script text executable
8218!:mime	text/x-shellscript
82190	string/fwb	#!\ /bin/ksh		Korn shell script executable (binary data)
8220!:mime	text/x-shellscript
8221
82220	string/fwt 	#!\ /bin/tcsh		Tenex C shell script text executable
8223!:mime	text/x-shellscript
82240	string/fwt	#!\ /usr/bin/tcsh	Tenex C shell script text executable
8225!:mime	text/x-shellscript
82260	string/fwt 	#!\ /usr/local/tcsh	Tenex C shell script text executable
8227!:mime	text/x-shellscript
82280	string/fwt	#!\ /usr/local/bin/tcsh	Tenex C shell script text executable
8229!:mime	text/x-shellscript
8230
8231#
8232# zsh/ash/ae/nawk/gawk magic from cameron@cs.unsw.oz.au (Cameron Simpson)
82330	string/fwt	#!\ /bin/zsh		Paul Falstad's zsh script text executable
8234!:mime	text/x-shellscript
82350	string/fwt	#!\ /usr/bin/zsh	Paul Falstad's zsh script text executable
8236!:mime	text/x-shellscript
82370	string/fwt	#!\ /usr/local/bin/zsh	Paul Falstad's zsh script text executable
8238!:mime	text/x-shellscript
82390	string/fwt	#!\ /usr/bin/env\ zsh	Paul Falstad's zsh script text executable
8240!:mime	text/x-shellscript
8241
82420	string/fwt	#!\ /bin/ash		Neil Brown's ash script text executable
8243!:mime	text/x-shellscript
82440	string/fwt	#!\ /usr/bin/ash	Neil Brown's ash script text executable
8245!:mime	text/x-shellscript
82460	string/fwt	#!\ /usr/local/bin/ash	Neil Brown's ash script text executable
8247!:mime	text/x-shellscript
82480	string/fwt	#!\ /usr/local/bin/ae	Neil Brown's ae script text executable
8249!:mime	text/x-shellscript
82500	string/fwt	#!\ /bin/nawk		new awk script text executable
8251!:mime	text/x-nawk
82520	string/fwt	#!\ /usr/bin/nawk	new awk script text executable
8253!:mime	text/x-nawk
82540	string/fwt	#!\ /usr/local/bin/nawk	new awk script text executable
8255!:mime	text/x-nawk
82560	string/fwt	#!\ /bin/gawk		GNU awk script text executable
8257!:mime	text/x-gawk
82580	string/wt	#!\ /usr/bin/gawk	GNU awk script text executable
8259!:mime	text/x-gawk
82600	string/fwt	#!\ /usr/local/bin/gawk	GNU awk script text executable
8261!:mime	text/x-gawk
8262#
82630	string/fwt	#!\ /bin/awk		awk script text executable
8264!:mime	text/x-awk
82650	string/fwt	#!\ /usr/bin/awk	awk script text executable
8266!:mime	text/x-awk
82670	regex/4096	=^[\040\t\f\r\n]{0,100}BEGIN[\040\t\f\r\n]{0,100}[{]	awk or perl script text
8268
8269# AT&T Bell Labs' Plan 9 shell
82700	string/fwt	#!\ /bin/rc	Plan 9 rc shell script text executable
8271
8272# bash shell magic, from Peter Tobias (tobias@server.et-inf.fho-emden.de)
82730	string/fwt	#!\ /bin/bash	Bourne-Again shell script text executable
8274!:mime	text/x-shellscript
82750	string/fwb	#!\ /bin/bash	Bourne-Again shell script executable (binary data)
8276!:mime	text/x-shellscript
82770	string/fwt	#!\ /usr/bin/bash	Bourne-Again shell script text executable
8278!:mime	text/x-shellscript
82790	string/fwb	#!\ /usr/bin/bash	Bourne-Again shell script executable (binary data)
8280!:mime	text/x-shellscript
82810	string/fwt	#!\ /usr/local/bash	Bourne-Again shell script text executable
8282!:mime	text/x-shellscript
82830	string/fwb	#!\ /usr/local/bash	Bourne-Again shell script executable (binary data)
8284!:mime	text/x-shellscript
82850	string/fwt	#!\ /usr/local/bin/bash	Bourne-Again shell script text executable
8286!:mime	text/x-shellscript
82870	string/fwb	#!\ /usr/local/bin/bash	Bourne-Again shell script executable (binary data)
8288!:mime	text/x-shellscript
82890	string/fwt	#!\ /usr/bin/env\ bash	Bourne-Again shell script text executable
8290!:mime	text/x-shellscript
8291
8292# Fish shell magic
8293# From: Benjamin Lowry <ben@ben.gmbh>
82940	string/fwt	#!\ /usr/local/bin/fish		fish shell script text executable
8295!:mime	text/x-shellscript
82960	string/fwt	#!\ /usr/bin/fish		fish shell script text executable
8297!:mime	text/x-shellscript
82980	string/fwt	#!\ /usr/bin/env\ fish		fish shell script text executable
8299!:mime	text/x-shellscript
8300
83010	string/wt	#!\ 	a
8302>&-1	string/T	x	%s script text executable
8303
83040	search/1/fwt	#!\ /usr/bin/tclsh	Tcl/Tk script text executable
8305!:mime  text/x-tcl
8306
83070	search/1/fwt	#!\ /usr/bin/texlua	LuaTex script text executable
8308!:mime	text/x-luatex
8309
83100	search/1/fwt	#!\ /usr/bin/luatex	LuaTex script text executable
8311!:mime	text/x-luatex
8312
83130	search/1/fwt	#!\ /usr/bin/stap	Systemtap script text executable
8314!:mime  text/x-systemtap
8315
8316# From: Kylie McClain <kylie@somas.is>
8317# Type: execline scripts
8318# URL:  https://skarnet.org/software/execline/
83190	string/fwt	#!\ /command/execlineb		execline script text executable
8320!:mime	text/x-execline
83210	string/fwt	#!\ /bin/execlineb		execline script text executable
8322!:mime	text/x-execline
83230	string/fwt	#!\ /usr/bin/execlineb		execline script text executable
8324!:mime	text/x-execline
83250	string/fwt	#!\ /usr/bin/env\ execlineb		execline script text executable
8326!:mime	text/x-execline
8327
83280	string	#!
8329>0	regex	\^#!.*/bin/execlineb([[:space:]].*)*$	execline script text executable
8330!:mime	text/x-execline
8331
8332# PHP scripts
8333# Ulf Harnhammar <ulfh@update.uu.se>
83340	search/1/c	=<?php			PHP script text
8335!:strength + 30
8336!:mime	text/x-php
83370	search/1	=<?\n			PHP script text
8338!:mime	text/x-php
83390	search/1	=<?\r			PHP script text
8340!:mime	text/x-php
83410	search/1/w	#!\ /usr/local/bin/php	PHP script text executable
8342!:strength + 10
8343!:mime	text/x-php
83440	search/1/w	#!\ /usr/bin/php	PHP script text executable
8345!:strength + 10
8346!:mime	text/x-php
8347# Smarty compiled template, https://www.smarty.net/
8348# Elan Ruusamae <glen@delfi.ee>
83490	string	=<?php
8350>5	regex	[\ \n]
8351>>6	string	/*\ Smarty\ version		Smarty compiled template
8352>>>24	regex	[0-9.]+				\b, version %s
8353!:mime	text/x-php
8354
83550	string		Zend\x00		PHP script Zend Optimizer data
8356
8357# From: Anatol Belski <ab@php.net>
83580	string		OPCACHE
8359>7	ubyte		0			PHP opcache filecache data
8360
83610	search/64	--TEST--
8362>16	search/64	--FILE--
8363>24	search/8192	--EXPECT		PHP core test
8364!:ext	phpt
8365
8366# https://www.php.net/manual/en/phar.fileformat.signature.php
8367-4	string		GBMB			PHP phar archive
8368>-8	ubyte		0x1			with MD5 signature
8369!:ext	phar
8370>-8	ubyte		0x2			with SHA1 signature
8371!:ext	phar
8372>-8	ubyte		0x3			with SHA256 signature
8373!:ext	phar
8374>-8	ubyte		0x4			with SHA512 signature
8375!:ext	phar
8376>-8	ubyte		0x10			with OpenSSL signature
8377!:ext	phar
8378>-8	ubyte		0x11			with OpenSSL SHA256 signature
8379!:ext	phar
8380>-8	ubyte		0x12			with OpenSSL SHA512 signature
8381!:ext	phar
8382
83830	string/t	$!			DCL command file
8384
8385# Type: Pdmenu
8386# URL:  https://packages.debian.org/pdmenu
8387# From: Edward Betts <edward@debian.org>
83880	string		#!/usr/bin/pdmenu	Pdmenu configuration file text
8389
8390# From Danny Weldon
83910	string	\x0b\x13\x08\x00
8392>0x04   uleshort	<4      ksh byte-code version %d
8393
8394#----------------------------------------------------------------------------
8395# $File: communications,v 1.5 2009/09/19 16:28:08 christos Exp $
8396# communication
8397
8398# TTCN is the Tree and Tabular Combined Notation described in ISO 9646-3.
8399# It is used for conformance testing of communication protocols.
8400# Added by W. Borgert <debacle@debian.org>.
84010	string		$Suite			TTCN Abstract Test Suite
8402>&1	string		$SuiteId
8403>>&1	string		>\n			%s
8404>&2	string		$SuiteId
8405>>&1	string		>\n			%s
8406>&3	string		$SuiteId
8407>>&1	string		>\n			%s
8408
8409# MSC (message sequence charts) are a formal description technique,
8410# described in ITU-T Z.120, mainly used for communication protocols.
8411# Added by W. Borgert <debacle@debian.org>.
84120	string		mscdocument	Message Sequence Chart (document)
84130	string		msc		Message Sequence Chart (chart)
84140	string		submsc		Message Sequence Chart (subchart)
8415#------------------------------------------------------------------------------
8416# $File: compress,v 1.83 2022/08/16 11:16:39 christos Exp $
8417# compress:  file(1) magic for pure-compression formats (no archives)
8418#
8419# compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, etc.
8420#
8421# Formats for various forms of compressed data
8422# Formats for "compress" proper have been moved into "compress.c",
8423# because it tries to uncompress it to figure out what's inside.
8424
8425# standard unix compress
84260	string		\037\235	compress'd data
8427!:mime	application/x-compress
8428!:apple	LZIVZIVU
8429>2	byte&0x80	>0		block compressed
8430>2	byte&0x1f	x		%d bits
8431
8432# gzip (GNU zip, not to be confused with Info-ZIP or PKWARE zip archiver)
8433# URL: https://en.wikipedia.org/wiki/Gzip
8434# Reference: https://tools.ietf.org/html/rfc1952
8435# Update: Joerg Jenderek, Apr 2019
8436#   Edited by Chris Chittleborough <cchittleborough@yahoo.com.au>, March 2002
8437#	* Original filename is only at offset 10 if "extra field" absent
8438#	* Produce shorter output - notably, only report compression methods
8439#         other than 8 ("deflate", the only method defined in RFC 1952).
8440# Note: find defs -iname '*.trid.xml' -exec grep -q '<Bytes>1F8B08' {} \; -ls
8441# TODO:
8442# FBR	Blueberry FlashBack screen Record	https://www.flashbackrecorder.com/
8443# KPR	KOffice/Calligra KPresenter		application/x-kpresenter
8444# KPT	KOffice/Calligra KPresenter template?	application/x-kpresenter
8445# SAV	Diggles Saved Game File			http://www.innonics.com
8446# SAV	FarCry (demo) saved game		http://www.farcry-thegame.com
8447# DAT	ZOAGZIP game data format		http://en.wikipedia.org/wiki/SD_Gundam_Capsule_Fighter
84480       string          \037\213
8449# to display gzip compressed (strength=100=2*50) before other (strength=50)?
8450#!:strength * 2
8451# no FNAME and FCOMMENT bit implies no file name/comment. That means only binary
8452>3	byte&0x18	=0
8453# For binary gzipped no ASCII text should occur
8454#	mcd-monu-cad.trid.xml
8455>>10	string		MCD			Monu-Cad Drawing, Component or Font
8456#>>36	string		Created\ with\ MONU-CAD
8457#!:mime	application/octet-stream
8458# http://fileformats.archiveteam.org/wiki/Monu-CAD
8459#	http://www.monucad.com/downloads/FullDemo-2005.EXE
8460#	/HANDS96.MCC	Component
8461#	/DEMO_DD01.MCD	Drawing
8462#	/MCALF020.FNT	Font
8463!:ext	mcc/mcd/fnt
8464# http://www.generalcadd.com
8465>>10	string		GXD			General CADD, Drawing or Component
8466#!:mime	application/octet-stream
8467#	/gxc/BUILDINGEDGE.gxc			Component
8468#	/gxd/HOCKETT-STPAUL-WRHSE.gxd		Drawing
8469#	/gxd/POWERLAND-MILL-ADD-11.gxd		Drawing		v9.1.06
8470!:ext	gxc/gxd
8471#>>>13	ubyte		0			\b, version 0
8472>>>13	string		09			\b, version 9
8473# other gzipped binary like gzipped tar, VirtualBox extension package,...
8474>>10	default		x		gzip compressed data
8475!:mime	application/gzip
8476>>>0	use	gzip-info
8477# size of the original (uncompressed) input data modulo 2^32
8478>>-0	offset		>48
8479>>>-4	ulelong		x		\b, original size modulo 2^32 %u
8480>>-0	offset		<48		\b, truncated
8481# gzipped TAR or VirtualBox extension package
8482#!:mime	application/x-compressed-tar
8483#!:mime	application/x-virtualbox-vbox-extpack
8484# https://www.w3.org/TR/SVG/mimereg.html
8485#!:mime	image/image/svg+xml-compressed
8486#	zlib.3.gz
8487#	microcode-20180312.tgz
8488#	tpz same as tgz
8489#	lua-md5_1.2-1_i386_i486.ipk	https://en.wikipedia.org/wiki/Opkg
8490#	Oracle_VM_VirtualBox_Extension_Pack-5.0.12-104815.vbox-extpack
8491!:ext	gz/tgz/tpz/ipk/vbox-extpack/svgz
8492# FNAME/FCOMMENT bit implies file name/comment as iso-8859-1 text
8493>3	byte&0x18	>0		gzip compressed data
8494!:mime	application/gzip
8495# gzipped tar, gzipped Abiword document
8496#!:mime	application/x-compressed-tar
8497#!:mime	application/x-abiword-compressed
8498#!:mime	image/image/svg+xml-compressed
8499#	kleopatra_splashscreen.svgz	gzipped .svg
8500!:ext	gz/tgz/tpz/zabw/svgz
8501>>0	use	gzip-info
8502# size of the original (uncompressed) input data modulo 2^32
8503>>-0	offset		>48
8504>>>-4	ulelong		x		\b, original size modulo 2^32 %u
8505>>-0	offset		<48		\b, truncated
8506#	display information of gzip compressed files
85070	name				gzip-info
8508#>2	byte		x		THIS iS GZIP
8509>2	byte		<8		\b, reserved method
8510>2	byte		>8		\b, unknown method
8511>3	byte		&0x01		\b, ASCII
8512>3	byte		&0x02		\b, has CRC
8513>3	byte		&0x04		\b, extra field
8514>3	byte&0xC	=0x08
8515>>10	string		x		\b, was "%s"
8516>3	byte		&0x10		\b, has comment
8517>3	byte		&0x20		\b, encrypted
8518>4	ledate		>0		\b, last modified: %s
8519>8	byte		2		\b, max compression
8520>8	byte		4		\b, max speed
8521>9	byte		=0x00		\b, from FAT filesystem (MS-DOS, OS/2, NT)
8522>9	byte		=0x01		\b, from Amiga
8523>9	byte		=0x02		\b, from VMS
8524>9	byte		=0x03		\b, from Unix
8525>9	byte		=0x04		\b, from VM/CMS
8526>9	byte		=0x05		\b, from Atari
8527>9	byte		=0x06		\b, from HPFS filesystem (OS/2, NT)
8528>9	byte		=0x07		\b, from MacOS
8529>9	byte		=0x08		\b, from Z-System
8530>9	byte		=0x09		\b, from CP/M
8531>9	byte		=0x0A		\b, from TOPS/20
8532>9	byte		=0x0B		\b, from NTFS filesystem (NT)
8533>9	byte		=0x0C		\b, from QDOS
8534>9	byte		=0x0D		\b, from Acorn RISCOS
8535# size of the original (uncompressed) input data modulo 2^32
8536#>-4	ulelong		x		\b, original size modulo 2^32 %u
8537#ERROR: line 114: non zero offset 1048572 at level 1
8538
8539# packed data, Huffman (minimum redundancy) codes on a byte-by-byte basis
85400	string		\037\036	packed data
8541!:mime	application/octet-stream
8542>2	belong		>1		\b, %d characters originally
8543>2	belong		=1		\b, %d character originally
8544#
8545# This magic number is byte-order-independent.
85460	short		0x1f1f		old packed data
8547!:mime	application/octet-stream
8548
8549# XXX - why *two* entries for "compacted data", one of which is
8550# byte-order independent, and one of which is byte-order dependent?
8551#
85520	short		0x1fff		compacted data
8553!:mime	application/octet-stream
8554# This string is valid for SunOS (BE) and a matching "short" is listed
8555# in the Ultrix (LE) magic file.
85560	string		\377\037	compacted data
8557!:mime	application/octet-stream
85580	short		0145405		huf output
8559!:mime	application/octet-stream
8560
8561# bzip2
85620	string		BZh		bzip2 compressed data
8563!:mime	application/x-bzip2
8564!:ext	bz2
8565>3	byte		>47		\b, block size = %c00k
8566
8567# bzip	a block-sorting file compressor
8568#	by Julian Seward <sewardj@cs.man.ac.uk> and others
85690	string		BZ0		bzip compressed data
8570!:mime	application/x-bzip
8571>3	byte		>47		\b, block size = %c00k
8572
8573# lzip
85740	string		LZIP		lzip compressed data
8575!:mime application/x-lzip
8576>4	byte		x		\b, version: %d
8577
8578# squeeze and crunch
8579# Michael Haardt <michael@cantor.informatik.rwth-aachen.de>
85800	beshort		0x76FF		squeezed data,
8581>4	string		x		original name %s
85820	beshort		0x76FE		crunched data,
8583>2	string		x		original name %s
85840	beshort		0x76FD		LZH compressed data,
8585>2	string		x		original name %s
8586
8587# Freeze
85880	string		\037\237	frozen file 2.1
85890	string		\037\236	frozen file 1.0 (or gzip 0.5)
8590
8591# SCO compress -H (LZH)
85920	string		\037\240	SCO compress -H (LZH) data
8593
8594# European GSM 06.10 is a provisional standard for full-rate speech
8595# transcoding, prI-ETS 300 036, which uses RPE/LTP (residual pulse
8596# excitation/long term prediction) coding at 13 kbit/s.
8597#
8598# There's only a magic nibble (4 bits); that nibble repeats every 33
8599# bytes.  This isn't suited for use, but maybe we can use it someday.
8600#
8601# This will cause very short GSM files to be declared as data and
8602# mismatches to be declared as data too!
8603#0	byte&0xF0	0xd0		data
8604#>33	byte&0xF0	0xd0
8605#>66	byte&0xF0	0xd0
8606#>99	byte&0xF0	0xd0
8607#>132	byte&0xF0	0xd0		GSM 06.10 compressed audio
8608
8609# lzop from <markus.oberhumer@jk.uni-linz.ac.at>
86100	string		\x89\x4c\x5a\x4f\x00\x0d\x0a\x1a\x0a	lzop compressed data
8611>9	beshort		<0x0940
8612>>9	byte&0xf0	=0x00		- version 0.
8613>>9	beshort&0x0fff	x		\b%03x,
8614>>13	byte		1		LZO1X-1,
8615>>13	byte		2		LZO1X-1(15),
8616>>13	byte		3		LZO1X-999,
8617## >>22	bedate		>0		last modified: %s,
8618>>14	byte		=0x00		os: MS-DOS
8619>>14	byte		=0x01		os: Amiga
8620>>14	byte		=0x02		os: VMS
8621>>14	byte		=0x03		os: Unix
8622>>14	byte		=0x05		os: Atari
8623>>14	byte		=0x06		os: OS/2
8624>>14	byte		=0x07		os: MacOS
8625>>14	byte		=0x0A		os: Tops/20
8626>>14	byte		=0x0B		os: WinNT
8627>>14	byte		=0x0E		os: Win32
8628>9	beshort		>0x0939
8629>>9	byte&0xf0	=0x00		- version 0.
8630>>9	byte&0xf0	=0x10		- version 1.
8631>>9	byte&0xf0	=0x20		- version 2.
8632>>9	beshort&0x0fff	x		\b%03x,
8633>>15	byte		1		LZO1X-1,
8634>>15	byte		2		LZO1X-1(15),
8635>>15	byte		3		LZO1X-999,
8636## >>25	bedate		>0		last modified: %s,
8637>>17	byte		=0x00		os: MS-DOS
8638>>17	byte		=0x01		os: Amiga
8639>>17	byte		=0x02		os: VMS
8640>>17	byte		=0x03		os: Unix
8641>>17	byte		=0x05		os: Atari
8642>>17	byte		=0x06		os: OS/2
8643>>17	byte		=0x07		os: MacOS
8644>>17	byte		=0x0A		os: Tops/20
8645>>17	byte		=0x0B		os: WinNT
8646>>17	byte		=0x0E		os: Win32
8647
8648# 4.3BSD-Quasijarus Strong Compression
8649# https://minnie.tuhs.org/Quasijarus/compress.html
86500	string		\037\241	Quasijarus strong compressed data
8651
8652# From: Cory Dikkers <cdikkers@swbell.net>
86530	string		XPKF		Amiga xpkf.library compressed data
86540	string		PP11		Power Packer 1.1 compressed data
86550	string		PP20		Power Packer 2.0 compressed data,
8656>4	belong		0x09090909	fast compression
8657>4	belong		0x090A0A0A	mediocre compression
8658>4	belong		0x090A0B0B	good compression
8659>4	belong		0x090A0C0C	very good compression
8660>4	belong		0x090A0C0D	best compression
8661
8662# 7-zip archiver, from Thomas Klausner (wiz@danbala.tuwien.ac.at)
8663# https://www.7-zip.org or DOC/7zFormat.txt
8664#
86650	string		7z\274\257\047\034	7-zip archive data,
8666>6	byte		x			version %d
8667>7	byte		x			\b.%d
8668!:mime	application/x-7z-compressed
8669!:ext 7z/cb7
8670
8671# Type: LZMA
86720	lelong&0xffffff	=0x5d
8673>12	leshort		0xff			LZMA compressed data,
8674!:mime	application/x-lzma
8675>>5	lequad		=0xffffffffffffffff	streamed
8676>>5	lequad		!0xffffffffffffffff	non-streamed, size %lld
8677>12	leshort		0			LZMA compressed data,
8678>>5	lequad		=0xffffffffffffffff	streamed
8679>>5	lequad		!0xffffffffffffffff	non-streamed, size %lld
8680
8681# http://tukaani.org/xz/xz-file-format.txt
86820	ustring		\xFD7zXZ\x00		XZ compressed data, checksum
8683!:strength * 2
8684!:mime	application/x-xz
8685>7	byte&0xf	0x0			NONE
8686>7	byte&0xf	0x1			CRC32
8687>7	byte&0xf	0x4			CRC64
8688>7	byte&0xf	0xa			SHA-256
8689
8690# https://github.com/ckolivas/lrzip/blob/master/doc/magic.header.txt
86910	string		LRZI			LRZIP compressed data
8692>4	byte		x			- version %d
8693>5	byte		x			\b.%d
8694>22	byte		1			\b, encrypted
8695!:mime	application/x-lrzip
8696
8697# https://fastcompression.blogspot.fi/2013/04/lz4-streaming-format-final.html
86980	lelong		0x184d2204	LZ4 compressed data (v1.4+)
8699!:mime	application/x-lz4
8700# Added by osm0sis@xda-developers.com
87010 	lelong		0x184c2103	LZ4 compressed data (v1.0-v1.3)
8702!:mime	application/x-lz4
87030	lelong		0x184c2102	LZ4 compressed data (v0.1-v0.9)
8704!:mime	application/x-lz4
8705
8706# Zstandard/LZ4 skippable frames
8707# https://github.com/facebook/zstd/blob/dev/zstd_compression_format.md
87080         lelong&0xFFFFFFF0  0x184D2A50
8709>(4.l+8)  indirect	x
8710
8711# Zstandard Dictionary ID subroutine
87120     name        zstd-dictionary-id
8713# Single Segment = True
8714>0    byte        &0x20   \b, Dictionary ID:
8715>>0   byte&0x03   0       None
8716>>0   byte&0x03   1
8717>>>1  byte        x       %u
8718>>0   byte&0x03   2
8719>>>1  leshort     x       %u
8720>>0   byte&0x03   3
8721>>>1  lelong      x       %u
8722# Single Segment = False
8723>0    byte        ^0x20   \b, Dictionary ID:
8724>>0   byte&0x03   0       None
8725>>0   byte&0x03   1
8726>>>2  byte        x       %u
8727>>0   byte&0x03   2
8728>>>2  leshort     x       %u
8729>>0   byte&0x03   3
8730>>>2  lelong      x       %u
8731
8732# Zstandard compressed data
8733# https://github.com/facebook/zstd/blob/dev/zstd_compression_format.md
87340     lelong       0xFD2FB522  Zstandard compressed data (v0.2)
8735!:mime  application/zstd
87360     lelong       0xFD2FB523  Zstandard compressed data (v0.3)
8737!:mime  application/zstd
87380     lelong       0xFD2FB524  Zstandard compressed data (v0.4)
8739!:mime  application/zstd
87400     lelong       0xFD2FB525  Zstandard compressed data (v0.5)
8741!:mime  application/zstd
87420     lelong       0xFD2FB526  Zstandard compressed data (v0.6)
8743!:mime  application/zstd
87440     lelong       0xFD2FB527  Zstandard compressed data (v0.7)
8745!:mime  application/zstd
8746>4    use          zstd-dictionary-id
87470     lelong       0xFD2FB528  Zstandard compressed data (v0.8+)
8748!:mime  application/zstd
8749>4    use          zstd-dictionary-id
8750
8751# https://github.com/facebook/zstd/blob/dev/zstd_compression_format.md
87520  lelong    0xEC30A437  Zstandard dictionary
8753!:mime  application/x-std-dictionary
8754>4 lelong    x           (ID %u)
8755
8756# AFX compressed files (Wolfram Kleff)
87572	string		-afx-		AFX compressed file data
8758
8759# Supplementary magic data for the file(1) command to support
8760# rzip(1).  The format is described in magic(5).
8761#
8762# Copyright (C) 2003 by Andrew Tridgell.  You may do whatever you want with
8763# this file.
8764#
87650	string		RZIP		rzip compressed data
8766>4	byte		x		- version %d
8767>5	byte		x		\b.%d
8768>6	belong		x		(%d bytes)
8769
87700	string		ArC\x01		FreeArc archive <http://freearc.org>
8771
8772# Type:	DACT compressed files
87730	long	0x444354C3	DACT compressed data
8774>4	byte	>-1		(version %i.
8775>5	byte	>-1		%i.
8776>6	byte	>-1		%i)
8777>7	long	>0		, original size: %i bytes
8778>15	long	>30		, block size: %i bytes
8779
8780# Valve Pack (VPK) files
87810	lelong	0x55aa1234	Valve Pak file
8782>0x4	lelong	x		\b, version %u
8783>0x8	lelong	x		\b, %u entries
8784
8785# Snappy framing format
8786# https://code.google.com/p/snappy/source/browse/trunk/framing_format.txt
87870	string	\377\006\0\0sNaPpY	snappy framed data
8788!:mime	application/x-snappy-framed
8789
8790# qpress, https://www.quicklz.com/
87910	string	qpress10	qpress compressed data
8792!:mime	application/x-qpress
8793
8794# Zlib https://www.ietf.org/rfc/rfc6713.txt
87950	string/b	x
8796>0	beshort%31	=0
8797>>0	byte&0xf	=8
8798>>>0	byte&0x80 	=0	zlib compressed data
8799!:mime	application/zlib
8800
8801# BWC compression
88020	string		BWC
8803>3	byte		0	BWC compressed data
8804
8805# UCL compression
88060	bequad		0x00e955434cff011a	UCL compressed data
8807
8808# Softlib archive
88090	string		SLIB	Softlib archive
8810>4	leshort		x	\b, version %d
8811>6	leshort		x	(contains %d files)
8812
8813# URL:  https://github.com/lzfse/lzfse/blob/master/src/lzfse_internal.h#L276
8814# From: Eric Hall <eric.hall@darkart.com>
88150	string	bvx-	lzfse encoded, no compression
88160	string	bvx1	lzfse compressed, uncompressed tables
88170	string	bvx2	lzfse compressed, compressed tables
88180	string	bvxn	lzfse encoded, lzvn compressed
8819
8820# pcxLib.exe compression program
8821# http://www.shikadi.net/moddingwiki/PCX_Library
88220	string/b	pcxLib
8823>0x0A	string/b	Copyright\020(c)\020Genus\020Microprogramming,\020Inc.	pcxLib compressed
8824
8825#------------------------------------------------------------------------------
8826# $File: console,v 1.68 2022/05/14 20:04:43 christos Exp $
8827# Console game magic
8828# Toby Deshane <hac@shoelace.digivill.net>
8829
8830# ines: file(1) magic for Marat's iNES Nintendo Entertainment System ROM dump format
8831# Updated by David Korth <gerbilsoft@gerbilsoft.com>
8832# References:
8833# - https://wiki.nesdev.com/w/index.php/INES
8834# - https://wiki.nesdev.com/w/index.php/NES_2.0
8835
8836# Common header for iNES, NES 2.0, and Wii U iNES.
88370	name		nes-rom-image-ines
8838>7	byte&0x0C	=0x8		(NES 2.0)
8839>4	byte		x		\b: %ux16k PRG
8840>5	byte		x		\b, %ux8k CHR
8841>6	byte&0x08	=0x8		[4-Scr]
8842>6	byte&0x09	=0x0		[H-mirror]
8843>6	byte&0x09	=0x1		[V-mirror]
8844>6	byte&0x02	=0x2		[SRAM]
8845>6	byte&0x04	=0x4		[Trainer]
8846>7	byte&0x03	=0x2		[PC10]
8847>7	byte&0x03	=0x1		[VS]
8848>>7	byte&0x0C	=0x8
8849# NES 2.0: VS PPU
8850>>>13	byte&0x0F	=0x0		\b, RP2C03B
8851>>>13	byte&0x0F	=0x1		\b, RP2C03G
8852>>>13	byte&0x0F	=0x2		\b, RP2C04-0001
8853>>>13	byte&0x0F	=0x3		\b, RP2C04-0002
8854>>>13	byte&0x0F	=0x4		\b, RP2C04-0003
8855>>>13	byte&0x0F	=0x5		\b, RP2C04-0004
8856>>>13	byte&0x0F	=0x6		\b, RP2C03B
8857>>>13	byte&0x0F	=0x7		\b, RP2C03C
8858>>>13	byte&0x0F	=0x8		\b, RP2C05-01
8859>>>13	byte&0x0F	=0x9		\b, RP2C05-02
8860>>>13	byte&0x0F	=0xA		\b, RP2C05-03
8861>>>13	byte&0x0F	=0xB		\b, RP2C05-04
8862>>>13	byte&0x0F	=0xC		\b, RP2C05-05
8863# TODO: VS protection hardware?
8864>>7	byte		x		\b]
8865# NES 2.0-specific flags.
8866>7	byte&0x0C	=0x8
8867>>12	byte&0x03	=0x0		[NTSC]
8868>>12	byte&0x03	=0x1		[PAL]
8869>>12	byte&0x02	=0x2		[NTSC+PAL]
8870
8871# Standard iNES ROM header.
88720	string		NES\x1A		NES ROM image (iNES)
8873!:mime	application/x-nes-rom
8874>0	use		nes-rom-image-ines
8875
8876# Wii U Virtual Console iNES ROM header.
88770	belong		0x4E455300	NES ROM image (Wii U Virtual Console)
8878!:mime	application/x-nes-rom
8879>0	use		nes-rom-image-ines
8880
8881#------------------------------------------------------------------------------
8882# unif: file(1) magic for UNIF-format Nintendo Entertainment System ROM images
8883# Reference: https://wiki.nesdev.com/w/index.php/UNIF
8884# From: David Korth <gerbilsoft@gerbilsoft.com>
8885#
8886# NOTE: The UNIF format uses chunks instead of a fixed header,
8887# so most of the data isn't easily parseable.
8888#
88890	string	UNIF
8890>4	lelong	<16	NES ROM image (UNIF v%d format)
8891!:mime	application/x-nes-rom
8892
8893#------------------------------------------------------------------------------
8894# fds: file(1) magic for Famciom Disk System disk images
8895# Reference: https://wiki.nesdev.com/w/index.php/Family_Computer_Disk_System#.FDS_format
8896# From: David Korth <gerbilsoft@gerbilsoft.com>
8897# TODO: Check "Disk info block" and get info from that in addition to the optional header.
8898
8899# Disk info block. (block 1)
89000	name	nintendo-fds-disk-info-block
8901>23	byte	!1		FMC-
8902>23	byte	1		FSC-
8903>16	string	x		\b%.3s
8904>15	ubyte	x		\b, mfr %02X
8905>20	ubyte	x		(Rev.%02u)
8906
8907# Headered version.
89080	string	FDS\x1A
8909>0x11	string	*NINTENDO-HVC*	Famicom Disk System disk image:
8910!:mime	application/x-fds-disk
8911>>0x10	use	nintendo-fds-disk-info-block
8912>4	byte	1	(%u side)
8913>4	byte	!1	(%u sides)
8914
8915# Unheadered version.
89161	string	*NINTENDO-HVC*	Famicom Disk System disk image:
8917!:mime	application/x-fds-disk
8918>0	use	nintendo-fds-disk-info-block
8919
8920#------------------------------------------------------------------------------
8921# tnes: file(1) magic for TNES-format Nintendo Entertainment System ROM images
8922# Used by Nintendo 3DS NES Virtual Console games.
8923# From: David Korth <gerbilsoft@gerbilsoft.com>
8924#
89250		string	TNES	NES ROM image (Nintendo 3DS Virtual Console)
8926!:mime		application/x-nes-rom
8927>4		byte	100	\b: FDS,
8928>>0x2010	use	nintendo-fds-disk-info-block
8929>4		byte	!100	\b: TNES mapper %u
8930>>5	byte		x		\b, %ux8k PRG
8931>>6	byte		x		\b, %ux8k CHR
8932>>7	byte&0x08	=1		[WRAM]
8933>>8	byte&0x09	=1		[H-mirror]
8934>>8	byte&0x09	=2		[V-mirror]
8935>>8	byte&0x02	=3		[VRAM]
8936
8937#------------------------------------------------------------------------------
8938# gameboy: file(1) magic for the Nintendo (Color) Gameboy raw ROM format
8939# Reference: http://gbdev.gg8.se/wiki/articles/The_Cartridge_Header
8940#
89410x104		bequad		0xCEED6666CC0D000B	Game Boy ROM image
8942# TODO: application/x-gameboy-color-rom for GBC.
8943!:mime		application/x-gameboy-rom
8944>0x143		byte&0x80	0x80
8945>>0x134		string		>\0			\b: "%.15s"
8946>0x143		byte&0x80	!0x80
8947>>0x134		string		>\0			\b: "%.16s"
8948>0x14c		byte		x			(Rev.%02u)
8949
8950# Machine type. (SGB, CGB, SGB+CGB)
8951# Old licensee code 0x33 is required for SGB, but not CGB.
8952>0x14b		byte		0x33
8953>>0x146		byte		0x03
8954>>>0x143	byte&0x80	0x80	[SGB+CGB]
8955>>>0x143	byte&0x80	!0x80	[SGB]
8956>>0x146		byte		!0x03
8957>>>0x143	byte&0xC0	0x80	[CGB]
8958>>>0x143	byte&0xC0	0xC0	[CGB ONLY]
8959>0x14b		byte		!0x33
8960>>0x143		byte&0xC0	0x80	[CGB]
8961>>0x143		byte&0xC0	0xC0	[CGB ONLY]
8962
8963# Mapper.
8964>0x147 byte 0x00  [ROM ONLY]
8965>0x147 byte 0x01  [MBC1]
8966>0x147 byte 0x02  [MBC1+RAM]
8967>0x147 byte 0x03  [MBC1+RAM+BATT]
8968>0x147 byte 0x05  [MBC2]
8969>0x147 byte 0x06  [MBC2+BATTERY]
8970>0x147 byte 0x08  [ROM+RAM]
8971>0x147 byte 0x09  [ROM+RAM+BATTERY]
8972>0x147 byte 0x0B  [MMM01]
8973>0x147 byte 0x0C  [MMM01+SRAM]
8974>0x147 byte 0x0D  [MMM01+SRAM+BATT]
8975>0x147 byte 0x0F  [MBC3+TIMER+BATT]
8976>0x147 byte 0x10  [MBC3+TIMER+RAM+BATT]
8977>0x147 byte 0x11  [MBC3]
8978>0x147 byte 0x12  [MBC3+RAM]
8979>0x147 byte 0x13  [MBC3+RAM+BATT]
8980>0x147 byte 0x19  [MBC5]
8981>0x147 byte 0x1A  [MBC5+RAM]
8982>0x147 byte 0x1B  [MBC5+RAM+BATT]
8983>0x147 byte 0x1C  [MBC5+RUMBLE]
8984>0x147 byte 0x1D  [MBC5+RUMBLE+SRAM]
8985>0x147 byte 0x1E  [MBC5+RUMBLE+SRAM+BATT]
8986>0x147 byte 0xFC  [Pocket Camera]
8987>0x147 byte 0xFD  [Bandai TAMA5]
8988>0x147 byte 0xFE  [Hudson HuC-3]
8989>0x147 byte 0xFF  [Hudson HuC-1]
8990
8991# ROM size.
8992>0x148 byte 0     \b, ROM: 256Kbit
8993>0x148 byte 1     \b, ROM: 512Kbit
8994>0x148 byte 2     \b, ROM: 1Mbit
8995>0x148 byte 3     \b, ROM: 2Mbit
8996>0x148 byte 4     \b, ROM: 4Mbit
8997>0x148 byte 5     \b, ROM: 8Mbit
8998>0x148 byte 6     \b, ROM: 16Mbit
8999>0x148 byte 7     \b, ROM: 32Mbit
9000>0x148 byte 0x52  \b, ROM: 9Mbit
9001>0x148 byte 0x53  \b, ROM: 10Mbit
9002>0x148 byte 0x54  \b, ROM: 12Mbit
9003
9004# RAM size.
9005>0x149 byte 1     \b, RAM: 16Kbit
9006>0x149 byte 2     \b, RAM: 64Kbit
9007>0x149 byte 3     \b, RAM: 256Kbit
9008>0x149 byte 4     \b, RAM: 1Mbit
9009>0x149 byte 5     \b, RAM: 512Kbit
9010
9011#------------------------------------------------------------------------------
9012# genesis: file(1) magic for various Sega Mega Drive / Genesis ROM image and disc formats
9013# Updated by David Korth <gerbilsoft@gerbilsoft.com>
9014# References:
9015# - https://www.retrodev.com/segacd.html
9016# - http://devster.monkeeh.com/sega/32xguide1.txt
9017#
9018
9019# Common Sega Mega Drive header format.
9020# FIXME: Name fields are 48 bytes, but have spaces for padding instead of 00s.
90210		name	sega-mega-drive-header
9022# ROM title. (Use domestic if present; if not, use international.)
9023>0x120		byte	>0x20
9024>>0x120		string	>\0	\b: "%.16s"
9025>0x120		byte	<0x21
9026>>0x150		string	>\0	\b: "%.16s"
9027# Other information.
9028>0x180		string	>\0	(%.14s
9029>>0x110		string  >\0	\b, %.16s
9030>0x180		byte	0
9031>>0x110		string  >\0	(%.16s
9032>0		byte	x	\b)
9033
9034# TODO: Check for 32X CD?
9035# Sega Mega CD disc images: 2048-byte sectors.
90360	string	SEGADISCSYSTEM\ \ 	Sega Mega CD disc image
9037!:mime	application/x-sega-cd-rom
9038>0	use	sega-mega-drive-header
9039>0	byte	x			\b, 2048-byte sectors
90400	string	SEGABOOTDISC\ \ \ \ 	Sega Mega CD disc image
9041!:mime	application/x-sega-cd-rom
9042>0	use	sega-mega-drive-header
9043>0	byte	x			\b, 2048-byte sectors
9044# Sega Mega CD disc images: 2352-byte sectors.
90450x10	string	SEGADISCSYSTEM\ \ 	Sega Mega CD disc image
9046!:mime	application/x-sega-cd-rom
9047>0x10	use	sega-mega-drive-header
9048>0	byte	x			\b, 2352-byte sectors
90490x10	string	SEGABOOTDISC\ \ \ \ 	Sega Mega CD disc image
9050!:mime	application/x-sega-cd-rom
9051>0x10	use	sega-mega-drive-header
9052>0	byte	x			\b, 2352-byte sectors
9053
9054# Sega Mega Drive: Identify the system ID.
90550x100		string	SEGA
9056>0x3C0		string	MARS\ CHECK\ MODE	Sega 32X ROM image
9057!:mime		application/x-genesis-32x-rom
9058>>0		use	sega-mega-drive-header
9059>0x104		string	\ PICO			Sega Pico ROM image
9060!:mime		application/x-sega-pico-rom
9061>>0		use	sega-mega-drive-header
9062>0x104		string	TOYS\ PICO		Sega Pico ROM image
9063!:mime		application/x-sega-pico-rom
9064>>0		use	sega-mega-drive-header
9065>0x104		string	\ TOYS\ PICO		Sega Pico ROM image
9066!:mime		application/x-sega-pico-rom
9067>>0		use	sega-mega-drive-header
9068>0x104		string	\ IAC			Sega Pico ROM image
9069!:mime		application/x-sega-pico-rom
9070>>0		use	sega-mega-drive-header
9071>0x104		string	\ TERA68K		Sega Teradrive (68K) ROM image
9072!:mime		application/x-sega-teradrive-rom
9073>>0		use	sega-mega-drive-header
9074>0x104		string	\ TERA286		Sega Teradrive (286) ROM image
9075!:mime		application/x-sega-teradrive-rom
9076>>0		use	sega-mega-drive-header
9077>0x180		string	BR			Sega Mega CD Boot ROM image
9078!:mime		application/x-genesis-rom
9079>>0		use	sega-mega-drive-header
9080>0x104		default	x			Sega Mega Drive / Genesis ROM image
9081!:mime		application/x-genesis-rom
9082>>0		use	sega-mega-drive-header
9083
9084# Sega Mega Drive: Some ROMs have "SEGA" at 0x101, not 0x100.
90850x100		string	\ SEGA			Sega Mega Drive / Genesis ROM image
9086>0		use	sega-mega-drive-header
9087
9088# Sega Pico ROMs that don't start with "SEGA".
90890x100		string	SAMSUNG\ PICO		Samsung Pico ROM image
9090!:mime		application/x-sega-pico-rom
9091>0		use	sega-mega-drive-header
90920x100		string	IMA\ IKUNOUJYUKU	Samsung Pico ROM image
9093!:mime		application/x-sega-pico-rom
9094>0		use	sega-mega-drive-header
90950x100		string	IMA IKUNOJYUKU		Samsung Pico ROM image
9096!:mime		application/x-sega-pico-rom
9097>0		use	sega-mega-drive-header
9098
9099# Sega Picture Magic (modified 32X)
91000x100		string	Picture\ Magic
9101>0x3C0		string	PICTURE MAGIC-01	Sega 32X ROM image
9102!:mime		application/x-genesis-32x-rom
9103>>0		use	sega-mega-drive-header
9104
9105#------------------------------------------------------------------------------
9106# genesis: file(1) magic for the Super MegaDrive ROM dump format
9107#
9108
9109# NOTE: Due to interleaving, we can't display anything
9110# other than the copier header information.
91110      name    sega-genesis-smd-header
9112>0     byte    x       %dx16k blocks
9113>2     byte    0       \b, last in series or standalone
9114>2     byte    >0      \b, split ROM
9115
9116# "Sega Genesis" header.
91170x280	string EAGN
9118>8	beshort	0xAABB	Sega Mega Drive / Genesis ROM image (SMD format):
9119!:mime	application/x-genesis-rom
9120>>0	use     sega-genesis-smd-header
9121
9122# "Sega Mega Drive" header.
91230x280	string EAMG
9124>8	beshort	0xAABB	Sega Mega Drive / Genesis ROM image (SMD format):
9125!:mime	application/x-genesis-rom
9126>>0	use     sega-genesis-smd-header
9127
9128#------------------------------------------------------------------------------
9129# smsgg:  file(1) magic for Sega Master System and Game Gear ROM images
9130# Detects all Game Gear and export Sega Master System ROM images,
9131# and some Japanese Sega Master System ROM images.
9132# From: David Korth <gerbilsoft@gerbilsoft.com>
9133# Reference: https://www.smspower.org/Development/ROMHeader
9134#
9135
9136# General SMS header rule.
9137# The SMS boot ROM checks the header at three locations.
91380	name	sega-master-system-rom-header
9139# Machine type.
9140>0x0F	byte&0xF0	0x30	Sega Master System
9141!:mime	application/x-sms-rom
9142>0x0F	byte&0xF0	0x40	Sega Master System
9143!:mime	application/x-sms-rom
9144>0x0F	byte&0xF0	0x50	Sega Game Gear
9145!:mime	application/x-gamegear-rom
9146>0x0F	byte&0xF0	0x60	Sega Game Gear
9147!:mime	application/x-gamegear-rom
9148>0x0F	byte&0xF0	0x70	Sega Game Gear
9149!:mime	application/x-gamegear-rom
9150>0x0F	default		x	Sega Master System / Game Gear
9151!:mime	application/x-sms-rom
9152>0	byte		x	ROM image:
9153# Product code.
9154>0x0E	byte&0xF0	0x10	1
9155>0x0E	byte&0xF0	0x20	2
9156>0x0E	byte&0xF0	0x30	3
9157>0x0E	byte&0xF0	0x40	4
9158>0x0E	byte&0xF0	0x50	5
9159>0x0E	byte&0xF0	0x60	6
9160>0x0E	byte&0xF0	0x70	7
9161>0x0E	byte&0xF0	0x80	8
9162>0x0E	byte&0xF0	0x90	9
9163>0x0E	byte&0xF0	0xA0	10
9164>0x0E	byte&0xF0	0xB0	11
9165>0x0E	byte&0xF0	0xC0	12
9166>0x0E	byte&0xF0	0xD0	13
9167>0x0E	byte&0xF0	0xE0	14
9168>0x0E	byte&0xF0	0xF0	15
9169# If the product code is 5 digits, we'll need to backspace here.
9170>0x0E	byte&0xF0	!0
9171>>0x0C	leshort		x	\b%04x
9172>0x0E	byte&0xF0	0
9173>>0x0C	leshort		x	%04x
9174# Revision.
9175>0x0E	byte&0x0F	x	(Rev.%02d)
9176# ROM size. (Used for the boot ROM checksum routine.)
9177>0x0F	byte&0x0F	0x0A	(8 KB)
9178>0x0F	byte&0x0F	0x0B	(16 KB)
9179>0x0F	byte&0x0F	0x0C	(32 KB)
9180>0x0F	byte&0x0F	0x0D	(48 KB)
9181>0x0F	byte&0x0F	0x0E	(64 KB)
9182>0x0F	byte&0x0F	0x0F	(128 KB)
9183>0x0F	byte&0x0F	0x00	(256 KB)
9184>0x0F	byte&0x0F	0x01	(512 KB)
9185>0x0F	byte&0x0F	0x02	(1 MB)
9186
9187# SMS/GG header locations.
91880x7FF0	string	TMR\ SEGA
9189>0x7FF0	use	sega-master-system-rom-header
91900x3FF0	string	TMR\ SEGA
9191>0x3FF0	use	sega-master-system-rom-header
91920x1FF0	string	TMR\ SEGA
9193>0x1FF0	use	sega-master-system-rom-header
9194
9195#------------------------------------------------------------------------------
9196# saturn: file(1) magic for the Sega Saturn disc image format.
9197# From: David Korth <gerbilsoft@gerbilsoft.com>
9198#
9199
9200# Common Sega Saturn disc header format.
9201# NOTE: Title is 112 bytes, but we're only showing 32 due to space padding.
9202# TODO: Release date, device information, region code, others?
92030	name	sega-saturn-disc-header
9204>0x60	string	>\0	\b: "%.32s"
9205>0x20	string	>\0	(%.10s
9206>>0x2A	string	>\0	\b, %.6s)
9207>>0x2A	byte	0	\b)
9208
9209# 2048-byte sector version.
92100	string	SEGA\ SEGASATURN\ 	Sega Saturn disc image
9211!:mime	application/x-saturn-rom
9212>0	use	sega-saturn-disc-header
9213>0	byte	x			(2048-byte sectors)
9214# 2352-byte sector version.
92150x10	string	SEGA\ SEGASATURN\ 	Sega Saturn disc image
9216!:mime	application/x-saturn-rom
9217>0x10	use	sega-saturn-disc-header
9218>0	byte	x			(2352-byte sectors)
9219
9220#------------------------------------------------------------------------------
9221# dreamcast: file(1) magic for the Sega Dreamcast disc image format.
9222# From: David Korth <gerbilsoft@gerbilsoft.com>
9223# Reference: https://mc.pp.se/dc/ip0000.bin.html
9224#
9225
9226# Common Sega Dreamcast disc header format.
9227# NOTE: Title is 128 bytes, but we're only showing 32 due to space padding.
9228# TODO: Release date, device information, region code, others?
92290	name	sega-dreamcast-disc-header
9230>0x80	string	>\0	\b: "%.32s"
9231>0x40	string	>\0	(%.10s
9232>>0x4A	string	>\0	\b, %.6s)
9233>>0x4A	byte	0	\b)
9234
9235# 2048-byte sector version.
92360	string	SEGA\ SEGAKATANA\ 	Sega Dreamcast disc image
9237!:mime	application/x-dc-rom
9238>0	use	sega-dreamcast-disc-header
9239>0	byte	x			(2048-byte sectors)
9240# 2352-byte sector version.
92410x10	string	SEGA\ SEGAKATANA\ 	Sega Dreamcast disc image
9242!:mime	application/x-dc-rom
9243>0x10	use	sega-dreamcast-disc-header
9244>0	byte	x			(2352-byte sectors)
9245
9246#------------------------------------------------------------------------------
9247# dreamcast:  file(1) uncertain magic for the Sega Dreamcast VMU image format
9248#
92490 belong 0x21068028   Sega Dreamcast VMU game image
92500 string LCDi         Dream Animator file
9251
9252#------------------------------------------------------------------------------
9253# z64: file(1) magic for the Z64 format N64 ROM dumps
9254# Reference: http://forum.pj64-emu.com/showthread.php?t=2239
9255# From: David Korth <gerbilsoft@gerbilsoft.com>
9256#
92570	bequad	0x803712400000000F	Nintendo 64 ROM image
9258!:mime	application/x-n64-rom
9259>0x20	string	>\0	\b: "%.20s"
9260>0x3B	string	x	(%.4s
9261>0x3F	byte	x	\b, Rev.%02u)
9262
9263#------------------------------------------------------------------------------
9264# v64: file(1) magic for the V64 format N64 ROM dumps
9265# Same as z64 format, but with 16-bit byteswapping.
9266#
92670	bequad	0x3780401200000F00	Nintendo 64 ROM image (V64)
9268!:mime	application/x-n64-rom
9269
9270#------------------------------------------------------------------------------
9271# n64-swap2: file(1) magic for the swap2 format N64 ROM dumps
9272# Same as z64 format, but with swapped 16-bit words.
9273#
92740	bequad	0x12408037000F0000	Nintendo 64 ROM image (wordswapped)
9275!:mime	application/x-n64-rom
9276
9277#------------------------------------------------------------------------------
9278# n64-le32: file(1) magic for the 32-bit byteswapped format N64 ROM dumps
9279# Same as z64 format, but with 32-bit byteswapping.
9280#
92810	bequad	0x401237800F000000	Nintendo 64 ROM image (32-bit byteswapped)
9282!:mime	application/x-n64-rom
9283
9284#------------------------------------------------------------------------------
9285# gba: file(1) magic for the Nintendo Game Boy Advance raw ROM format
9286# Reference: https://problemkaputt.de/gbatek.htm#gbacartridgeheader
9287#
9288# Original version from: "Nelson A. de Oliveira" <naoliv@gmail.com>
9289# Updated version from: David Korth <gerbilsoft@gerbilsoft.com>
9290#
92914	bequad	0x24FFAE51699AA221	Game Boy Advance ROM image
9292!:mime	application/x-gba-rom
9293>0xA0	string	>\0	\b: "%.12s"
9294>0xAC	string	x	(%.6s
9295>0xBC	byte	x	\b, Rev.%02u)
9296
9297#------------------------------------------------------------------------------
9298# nds: file(1) magic for the Nintendo DS(i) raw ROM format
9299# Reference: https://problemkaputt.de/gbatek.htm#dscartridgeheader
9300#
9301# Original version from: "Nelson A. de Oliveira" <naoliv@gmail.com>
9302# Updated version from: David Korth <gerbilsoft@gerbilsoft.com>
9303#
93040xC0	bequad	0x24FFAE51699AA221	Nintendo DS ROM image
9305!:mime	application/x-nintendo-ds-rom
9306>0x00	string	>\0		\b: "%.12s"
9307>0x0C	string	x		(%.6s
9308>0x1E	byte	x		\b, Rev.%02u)
9309>0x12	byte	2		(DSi enhanced)
9310>0x12	byte	3		(DSi only)
9311# Secure Area check.
9312>0x20		lelong	<0x4000		(homebrew)
9313>0x20		lelong	>0x3FFF
9314>>0x4000	lequad	0x0000000000000000	(multiboot)
9315>>0x4000	lequad	!0x0000000000000000
9316>>>0x4000	lequad	0xE7FFDEFFE7FFDEFF	(decrypted)
9317>>>0x4000	lequad	!0xE7FFDEFFE7FFDEFF
9318>>>>0x1000	lequad	0x0000000000000000	(encrypted)
9319>>>>0x1000	lequad	!0x0000000000000000	(mask ROM)
9320
9321#------------------------------------------------------------------------------
9322# nds_passme: file(1) magic for Nintendo DS ROM images for GBA cartridge boot.
9323# This is also used for loading .nds files using the MSET exploit on 3DS.
9324# Reference: https://github.com/devkitPro/ndstool/blob/master/source/ndscreate.cpp
93250xC0	bequad	0xC8604FE201708FE2	Nintendo DS Slot-2 ROM image (PassMe)
9326!:mime	application/x-nintendo-ds-rom
9327
9328#------------------------------------------------------------------------------
9329# ngp: file(1) magic for the Neo Geo Pocket (Color) raw ROM format.
9330# From: David Korth <gerbilsoft@gerbilsoft.com>
9331# References:
9332# - https://neogpc.googlecode.com/svn-history/r10/trunk/src/core/neogpc.cpp
9333# - https://www.devrs.com/ngp/files/ngpctech.txt
9334#
93350x0A	string		BY\ SNK\ CORPORATION	Neo Geo Pocket
9336!:mime	application/x-neo-geo-pocket-rom
9337>0x23	byte		0x10			Color
9338>0	byte		x			ROM image
9339>0x24	string		>\0			\b: "%.12s"
9340>0x21	uleshort	x			\b, NEOP%04X
9341>0x1F	ubyte		0xFF			(debug mode enabled)
9342
9343#------------------------------------------------------------------------------
9344# msx: file(1) magic for MSX game cartridge dumps
9345# Too simple - MPi
9346#0 beshort 0x4142 MSX game cartridge dump
9347
9348#------------------------------------------------------------------------------
9349# Sony Playstation executables (Adam Sjoegren <asjo@diku.dk>) :
93500	string	PS-X\ EXE	Sony Playstation executable
9351>16	lelong	x		PC=%#08x,
9352>20	lelong	!0		GP=%#08x,
9353>24	lelong	!0		.text=[%#08x,
9354>>28	lelong	x		\b%#x],
9355>32	lelong	!0		.data=[%#08x,
9356>>36	lelong	x		\b%#x],
9357>40	lelong	!0		.bss=[%#08x,
9358>>44	lelong	x		\b%#x],
9359>48	lelong	!0		Stack=%#08x,
9360>48	lelong	=0		No Stack!,
9361>52	lelong	!0		StackSize=%#x,
9362#>76	string	>\0		(%s)
9363#  Area:
9364>113	string	x		(%s)
9365
9366# CPE executables
93670	string	CPE		CPE executable
9368>3	byte	x		(version %d)
9369
9370#------------------------------------------------------------------------------
9371# Microsoft Xbox executables .xbe (Esa Hyytia <ehyytia@cc.hut.fi>)
93720	string	XBEH	Microsoft Xbox executable
9373!:mime	audio/x-xbox-executable
9374!:ext	xbe
9375# expect base address of 0x10000
9376>0x0104                 ulelong =0x10000
9377>>(0x0118.l-0x0FFF4)    lestring16 x       \b: "%.40s"
9378>>(0x0118.l-0x0FFF5)    byte     x         (%c
9379>>(0x0118.l-0x0FFF6)    byte     x         \b%c-
9380>>(0x0118.l-0x0FFF8)    uleshort x         \b%03u)
9381>>(0x0118.l-0x0FF60)    ulelong&0x80000007  0x80000007 \b, all regions
9382>>(0x0118.l-0x0FF60)    ulelong&0x80000007  !0x80000007
9383>>>(0x0118.l-0x0FF60)   ulelong >0           (regions:
9384>>>>(0x0118.l-0x0FF60)  ulelong &0x00000001  NA
9385>>>>(0x0118.l-0x0FF60)  ulelong &0x00000002  Japan
9386>>>>(0x0118.l-0x0FF60)  ulelong &0x00000004  Rest_of_World
9387>>>>(0x0118.l-0x0FF60)  ulelong &0x80000000  Manufacturer
9388>>>(0x0118.l-0x0FF60)   ulelong >0           \b)
9389# probabilistic checks whether signed or not
9390>0x0004 ulelong =0x0
9391>>&2    ulelong =0x0
9392>>>&2   ulelong =0x0  \b, not signed
9393>0x0004 ulelong >0
9394>>&2    ulelong >0
9395>>>&2   ulelong >0    \b, signed
9396
9397# --------------------------------
9398# Microsoft Xbox data file formats
93990       string          XIP0            XIP, Microsoft Xbox data
94000       string          XTF0            XTF, Microsoft Xbox data
9401
9402#------------------------------------------------------------------------------
9403# Microsoft Xbox 360 executables (.xex)
9404# From: David Korth <gerbilsoft@gerbilsoft.com>
9405# References:
9406# - https://free60project.github.io/wiki/XEX.html
9407# - https://github.com/xenia-project/xenia/blob/HEAD/src/xenia/kernel/util/xex2_info.h
9408
9409# Title ID (part of Execution ID section)
94100		name	xbox-360-xex-execution-id
9411>(0.L+0xC)	byte	x	(%c
9412>(0.L+0xD)	byte	x	\b%c
9413>(0.L+0xE)	beshort	x	\b-%04u, media ID:
9414>(0.L)		belong	x	%08X)
9415
9416# Region code (part of Security Info)
94170	name	xbox-360-xex-region-code
9418>0	ubelong	0xFFFFFFFF	\b, all regions
9419>0	ubelong	!0xFFFFFFFF
9420>>0	ubelong	>0		(regions:
9421>>0	ubelong&0x000000FF	0x000000FF	USA
9422>>0	ubelong&0x00000100	0x00000100	Japan
9423>>0	ubelong&0x00000200	0x00000200	China
9424>>0	ubelong&0x0000FC00	0x0000FC00	Asia
9425>>0	ubelong&0x00FF0000	0x00FF0000	PAL
9426>>0	ubelong&0x00FF0000	0x00FE0000	PAL [except AU/NZ]
9427>>0	ubelong&0x00FF0000	0x00010000	AU/NZ
9428>>0	ubelong&0xFF000000	0xFF000000	Other
9429>>0	ubelong	>0		\b)
9430
94310	string	XEX2	Microsoft Xbox 360 executable
9432!:mime	audio/x-xbox360-executable
9433!:ext	xex
9434>0x18	search/0x100	\x00\x04\x00\x06
9435>>&0	use	xbox-360-xex-execution-id
9436>(0x010.L+0x178)	use	xbox-360-xex-region-code
9437
94380	string	XEX1	Microsoft Xbox 360 executable (XEX1)
9439!:mime	audio/x-xbox360-executable
9440!:ext	xex
9441>0x18	search/0x100	\x00\x04\x00\x06
9442>>&0	use	xbox-360-xex-execution-id
9443>(0x010.L+0x154)	use	xbox-360-xex-region-code
9444
9445#------------------------------------------------------------------------------
9446# Microsoft Xbox 360 packages
9447# From: David Korth <gerbilsoft@gerbilsoft.com>
9448# References:
9449# - https://free60project.github.io/wiki/STFS.html
9450# - https://github.com/xenia-project/xenia/blob/HEAD/src/xenia/kernel/util/xex2_info.h
9451
9452# TODO: More information for console-signed packages.
9453
94540	name	xbox-360-package
9455>0x360	byte	x	(%c
9456>0x361	byte	x	\b%c
9457>0x362	beshort	x	\b-%04u, media ID:
9458>0x354	belong	x	%08X)
9459>0x344	belong	x	\b, content type:
9460>>0x344	belong	0x1		Saved Game
9461>>0x344	belong	0x2		Marketplace Content
9462>>0x344	belong	0x3		Publisher
9463>>0x344	belong	0x1000		Xbox 360 Title
9464>>0x344	belong	0x2000		IPTV Pause Buffer
9465>>0x344	belong	0x4000		Installed Game
9466>>0x344	belong	0x5000		Original Xbox Game
9467>>0x344	belong	0x9000		Avatar Item
9468>>0x344	belong	0x10000		Profile
9469>>0x344	belong	0x20000		Gamer Picture
9470>>0x344	belong	0x30000		Theme
9471>>0x344	belong	0x40000		Cache File
9472>>0x344	belong	0x50000		Storage Download
9473>>0x344	belong	0x60000		Xbox Saved Game
9474>>0x344	belong	0x70000		Xbox Download
9475>>0x344	belong	0x80000		Game Demo
9476>>0x344	belong	0x90000		Video
9477>>0x344	belong	0xA0000		Game
9478>>0x344	belong	0xB0000		Installer
9479>>0x344	belong	0xC0000		Game Trailer
9480>>0x344	belong	0xD0000		Arcade Title
9481>>0x344	belong	0xE0000		XNA
9482>>0x344	belong	0xF0000		License Store
9483>>0x344	belong	0x100000	Movie
9484>>0x344	belong	0x200000	TV
9485>>0x344	belong	0x300000	Music Video
9486>>0x344	belong	0x400000	Game Video
9487>>0x344	belong	0x500000	Podcast Video
9488>>0x344	belong	0x600000	Viral Video
9489>>0x344	belong	0x2000000	Community Game
9490
94910	string	CON\x20	Microsoft Xbox 360 package (console-signed)
9492>0	use	xbox-360-package
94930	string	PIRS
9494>0	belong	0	Microsoft Xbox 360 package (non-Xbox Live)
9495>>0	use	xbox-360-package
94960	string	LIVE
9497>0x104	belong	0	Microsoft Xbox 360 package (Xbox Live)
9498>>0	use	xbox-360-package
9499
9500# Atari Lynx cartridge dump (EXE/BLL header)
9501# From: "Stefan A. Haubenthal" <polluks@sdf.lonestar.org>
9502# Reference:
9503# https://raw.githubusercontent.com/cc65/cc65/master/libsrc/lynx/exehdr.s
9504# Double-check that the image type matches too, 0x8008 conflicts with
9505# 8 character OMF-86 object file headers.
95060	beshort		0x8008
9507>6	string		BS93		Lynx homebrew cartridge
9508!:mime	application/x-atari-lynx-rom
9509>>2	beshort		x		\b, RAM start $%04x
95100	string		LYNX		Lynx cartridge
9511!:mime	application/x-atari-lynx-rom
9512>4	leshort/4	>0		\b, bank 0 %dk
9513>6	leshort/4	>0		\b, bank 1 %dk
9514>10	string		>\0		\b, "%.32s"
9515>42	string		>\0		\b, "%.16s"
9516
9517# Opera file system that is used on the 3DO console
9518# From: Serge van den Boom <svdb@stack.nl>
95190	string		\x01ZZZZZ\x01	3DO "Opera" file system
9520
9521# From: Alex Myczko <alex@aiei.ch>
9522# From: David Pflug <david@pflug.email>
9523# is the offset 12 or the offset 16 correct?
9524# GBS (Game Boy Sound) magic
9525# ftp://ftp.modland.com/pub/documents/format_documentation/\
9526# Gameboy%20Sound%20System%20(.gbs).txt
95270	string		GBS		Nintendo Gameboy Music/Audio Data
9528#12	string		GameBoy\ Music\ Module	Nintendo Gameboy Music Module
9529>16	string		>\0	("%.32s" by
9530>48	string		>\0	%.32s, copyright
9531>80	string		>\0	%.32s),
9532>3	byte		x	version %u,
9533>4	byte		x	%u tracks
9534
9535# IPS Patch Files from: From: Thomas Klausner <tk@giga.or.at>
9536# see https://zerosoft.zophar.net/ips.php
95370	string	PATCH			IPS patch file
9538!:ext	ips
9539
9540# BPS Patch Files - from: David Korth <gerbilsoft@gerbilsoft.com>
9541# Reference: https://www.romhacking.net/documents/746/
95420	string	BPS1			BPS patch file
9543!:ext	bps
9544
9545# APS Patch Files - from: David Korth <gerbilsoft@gerbilsoft.com>
9546# Reference: https://github.com/btimofeev/UniPatcher/wiki/APS-(N64)
95470	string	APS10			APS patch file
9548!:ext	aps
9549>5	byte	0			\b, simple patch
9550>5	byte	1			\b, N64-specific patch for
9551>>58	byte	x			N%c
9552>>59	byte	x			\b%c
9553>>60	byte	x			\b%c
9554>7	byte	!0x20
9555# FIXME: /T specifier isn't working with a fixed-length string.
9556>>7	string	x			\b: "%.50s"
9557
9558# UPS Patch Files - from: David Korth <gerbilsoft@gerbilsoft.com>
9559# Reference: http://fileformats.archiveteam.org/wiki/UPS_(binary_patch_format)
95600	string	UPS1			UPS patch file
9561!:ext	ups
9562
9563# Playstations Patch Files from: From: Thomas Klausner <tk@giga.or.at>
95640	string	PPF30			Playstation Patch File version 3.0
9565>5	byte	0			\b, PPF 1.0 patch
9566>5	byte	1			\b, PPF 2.0 patch
9567>5	byte	2			\b, PPF 3.0 patch
9568>>56	byte	0			\b, Imagetype BIN (any)
9569>>56	byte	1			\b, Imagetype GI (PrimoDVD)
9570>>57	byte	0			\b, Blockcheck disabled
9571>>57	byte	1			\b, Blockcheck enabled
9572>>58	byte	0			\b, Undo data not available
9573>>58	byte	1			\b, Undo data available
9574>6	string	x			\b, description: %s
9575
95760	string	PPF20			Playstation Patch File version 2.0
9577>5	byte	0			\b, PPF 1.0 patch
9578>5	byte	1			\b, PPF 2.0 patch
9579>>56	lelong	>0			\b, size of file to patch %d
9580>6	string	x			\b, description: %s
9581
95820	string	PPF10			Playstation Patch File version 1.0
9583>5	byte	0			\b, Simple Encoding
9584>6	string	x			\b, description: %s
9585
9586# From: Daniel Dawson <ddawson@icehouse.net>
9587# SNES9x .smv "movie" file format.
95880		string		SMV\x1A	SNES9x input recording
9589>0x4		lelong		x	\b, version %d
9590# version 4 is latest so far
9591>0x4		lelong		<5
9592>>0x8		ledate		x	\b, recorded at %s
9593>>0xc		lelong		>0	\b, rerecorded %d times
9594>>0x10		lelong		x	\b, %d frames long
9595>>0x14		byte		>0	\b, data for controller(s):
9596>>>0x14		byte		&0x1	#1
9597>>>0x14		byte		&0x2	#2
9598>>>0x14		byte		&0x4	#3
9599>>>0x14		byte		&0x8	#4
9600>>>0x14		byte		&0x10	#5
9601>>0x15		byte		^0x1	\b, begins from snapshot
9602>>0x15		byte		&0x1	\b, begins from reset
9603>>0x15		byte		^0x2	\b, NTSC standard
9604>>0x15		byte		&0x2	\b, PAL standard
9605>>0x17		byte		&0x1    \b, settings:
9606# WIP1Timing not used as of version 4
9607>>>0x4		lelong		<4
9608>>>>0x17	byte		&0x2	WIP1Timing
9609>>>0x17		byte		&0x4	Left+Right
9610>>>0x17		byte		&0x8	VolumeEnvX
9611>>>0x17		byte		&0x10	FakeMute
9612>>>0x17		byte		&0x20	SyncSound
9613# New flag as of version 4
9614>>>0x4		lelong		>3
9615>>>>0x17	byte		&0x80	NoCPUShutdown
9616>>0x4		lelong		<4
9617>>>0x18		lelong		>0x23
9618>>>>0x20	leshort		!0
9619>>>>>0x20	lestring16	x	\b, metadata: "%s"
9620>>0x4		lelong		>3
9621>>>0x24		byte		>0	\b, port 1:
9622>>>>0x24	byte		1	joypad
9623>>>>0x24	byte		2	mouse
9624>>>>0x24	byte		3	SuperScope
9625>>>>0x24	byte		4	Justifier
9626>>>>0x24	byte		5	multitap
9627>>>0x24		byte		>0	\b, port 2:
9628>>>>0x25	byte		1	joypad
9629>>>>0x25	byte		2	mouse
9630>>>>0x25	byte		3	SuperScope
9631>>>>0x25	byte		4	Justifier
9632>>>>0x25	byte		5	multitap
9633>>>0x18		lelong		>0x43
9634>>>>0x40	leshort		!0
9635>>>>>0x40	lestring16	x	\b, metadata: "%s"
9636>>0x17		byte		&0x40   \b, ROM:
9637>>>(0x18.l-26)	lelong		x	CRC32 %#08x
9638>>>(0x18.l-23)	string		x	"%s"
9639
9640# Type: scummVM savegame files
9641# From: Sven Hartge <debian@ds9.argh.org>
96420	string	SCVM	ScummVM savegame
9643>12	string	>\0	"%s"
9644
9645#------------------------------------------------------------------------------
9646# Nintendo GameCube / Wii file formats.
9647#
9648
9649# Type: Nintendo GameCube/Wii common disc header data.
9650# From: David Korth <gerbilsoft@gerbilsoft.com>
9651# Reference: https://wiibrew.org/wiki/Wii_Disc
96520	name	nintendo-gcn-disc-common
9653>0x20	string	x	"%.64s"
9654>0x00	string	x	(%.6s
9655>0x06	byte	>0
9656>>0x06	byte	1	\b, Disc 2
9657>>0x06	byte	2	\b, Disc 3
9658>>0x06	byte	3	\b, Disc 4
9659>0x07	byte	x	\b, Rev.%02u)
9660>0x18	belong	0x5D1C9EA3
9661>>0x60	beshort	0x0101	\b (Unencrypted)
9662>0x200	string	NKIT	\b (NKit compressed)
9663
9664
9665# Type: Nintendo GameCube disc image
9666# From: David Korth <gerbilsoft@gerbilsoft.com>
9667# Reference: https://wiibrew.org/wiki/Wii_Disc
96680x1C	belong	0xC2339F3D	Nintendo GameCube disc image:
9669!:mime	application/x-gamecube-rom
9670>0	use	nintendo-gcn-disc-common
9671
9672# Type: Nintendo GameCube embedded disc image
9673# Commonly found on demo discs.
9674# From: David Korth <gerbilsoft@gerbilsoft.com>
9675# Reference: http://hitmen.c02.at/files/yagcd/yagcd/index.html#idx14.8
96760		belong	0xAE0F38A2
9677>0x0C		belong	0x00100000
9678>>(8.L+0x1C)	belong	0xC2339F3D	Nintendo GameCube embedded disc image:
9679!:mime	application/x-gamecube-rom
9680>>>(8.L)	use	nintendo-gcn-disc-common
9681
9682# Type: Nintendo Wii disc image
9683# From: David Korth <gerbilsoft@gerbilsoft.com>
9684# Reference: https://wiibrew.org/wiki/Wii_Disc
96850x18	belong	0x5D1C9EA3	Nintendo Wii disc image:
9686>0	use	nintendo-gcn-disc-common
9687
9688# Type: Nintendo Wii disc image (WBFS format)
9689# From: David Korth <gerbilsoft@gerbilsoft.com>
9690# Reference: https://wiibrew.org/wiki/Wii_Disc
96910	string	WBFS
9692>0x218	belong	0x5D1C9EA3	Nintendo Wii disc image (WBFS format):
9693!:mime	application/x-wii-rom
9694>>0x200	use	nintendo-gcn-disc-common
9695
9696# Type: Nintendo GameCube/Wii disc image (CISO format)
9697# NOTE: This is NOT the same as Compact ISO or PSP CISO,
9698# though it has the same magic number.
96990		string	CISO
9700# Other fields are used to determine what type of CISO this is:
9701# - 0x04 == 0x00200000: GameCube/Wii CISO (block_size)
9702# - 0x10 == 0x00000800: PSP CISO (ISO-9660 sector size)
9703# - None of the above: Compact ISO.
9704>4		lelong	0x200000
9705>>8		byte	1
9706>>>0x801C	belong	0xC2339F3D	Nintendo GameCube disc image (CISO format):
9707!:mime	application/x-wii-rom
9708>>>>0x8000	use	nintendo-gcn-disc-common
9709>>>0x8018	belong	0x5D1C9EA3	Nintendo Wii disc image (CISO format):
9710!:mime	application/x-wii-rom
9711>>>>0x8000	use	nintendo-gcn-disc-common
9712
9713# Type: Nintendo GameCube/Wii disc image (GCZ format)
9714# Due to zlib compression, we can't get the actual disc information.
97150	lelong	0xB10BC001
9716>4	lelong	0		Nintendo GameCube disc image (GCZ format)
9717!:mime	application/x-gamecube-rom
9718>4	lelong	1		Nintendo Wii disc image (GCZ format)
9719!:mime	application/x-wii-rom
9720>4	default	x		Nintendo GameCube/Wii disc image (GCZ format)
9721
9722# Type: Nintendo GameCube/Wii disc image (WDF format)
97230		string	WII\001DISC
9724>8		belong	1
9725# WDFv1
9726>>0x54		belong	0xC2339F3D	Nintendo GameCube disc image (WDFv1 format):
9727!:mime	application/x-gamecube-rom
9728>>>0x38		use	nintendo-gcn-disc-common
9729>>0x58		belong	0x5D1C9EA3	Nintendo Wii disc image (WDFv1 format):
9730!:mime	application/x-wii-rom
9731>>>0x38		use	nintendo-gcn-disc-common
9732>8		belong	2
9733# WDFv2
9734>>(12.L+0x1C)	belong	0xC2339F3D	Nintendo GameCube disc image (WDFv2 format):
9735!:mime	application/x-gamecube-rom
9736>>>(12.L)	use	nintendo-gcn-disc-common
9737>>(12.L+0x18)	belong	0x5D1C9EA3	Nintendo Wii disc image (WDFv2 format):
9738!:mime	application/x-wii-rom
9739>>>(12.L)	use	nintendo-gcn-disc-common
9740
9741# Type: Nintendo GameCube/Wii disc image (WIA format)
97420	string	WIA\001	Nintendo
9743>0x48	belong	1	GameCube
9744!:mime	application/x-gamecube-rom
9745>0x48	belong	2	Wii
9746!:mime	application/x-wii-rom
9747>0x48	default	x	GameCube/Wii
9748>0x48	belong	x	disc image (WIA format):
9749>>0x58	use	nintendo-gcn-disc-common
9750
9751# Type: Nintendo GameCube/Wii disc image (with SDK header)
9752# From: David Korth <gerbilsoft@gerbilsoft.com>
9753# Reference: https://wiibrew.org/wiki/Wii_Disc
97540		belong	0xFFFF0000
9755>0x18		belong	0x00000000
9756>>0x1C		belong	0x00000000
9757>>>0x8018	belong	0x5D1C9EA3	Nintendo Wii SDK disc image:
9758!:mime	application/x-wii-rom
9759>>>>0x8000	use	nintendo-gcn-disc-common
9760>>>0x801C	belong	0xC2339F3D	Nintendo GameCube SDK disc image:
9761!:mime	application/x-gamecube-rom
9762>>>>0x8000	use	nintendo-gcn-disc-common
9763
9764# Type: Nintendo GameCube/Wii disc image (RVZ format)
97650	string		RVZ\001	Nintendo
9766>0x48	belong		1	GameCube
9767!:mime	application/x-gamecube-rom
9768>0x48	belong		2	Wii
9769!:mime	application/x-wii-rom
9770>0x48	default		x	GameCube/Wii
9771>0x48	belong		x	disc image (RVZ format):
9772>>0x58	use		nintendo-gcn-disc-common
9773
9774#------------------------------------------------------------------------------
9775# Nintendo 3DS file formats.
9776#
9777
9778# Type: Nintendo 3DS "NCSD" image. (game cards and eMMC)
9779# From: David Korth <gerbilsoft@gerbilsoft.com>
9780# Reference: https://www.3dbrew.org/wiki/NCSD
97810x100		string		NCSD
9782>0x118		lequad		0		Nintendo 3DS Game Card image
9783# NCCH header for partition 0. (game data)
9784>>0x1150	string		>\0	\b: "%.16s"
9785>>0x312		byte		x	(Rev.%02u)
9786>>0x118C	byte		2	(New3DS only)
9787>>0x18D		byte		0		(inner device)
9788>>0x18D		byte		1		(Card1)
9789>>0x18D		byte		2		(Card2)
9790>>0x18D		byte		3		(extended device)
9791>0x118		bequad		0x0102020202000000	Nintendo 3DS eMMC dump (Old3DS)
9792>0x118		bequad		0x0102020203000000	Nintendo 3DS eMMC dump (New3DS)
9793
9794# Nintendo 3DS version code.
9795# Reference: https://www.3dbrew.org/wiki/Titles
9796# Format: leshort containing three fields:
9797# - 6-bit: Major
9798# - 6-bit: Minor
9799# - 4-bit: Revision
9800# NOTE: Only supporting major/minor versions from 0-15 right now.
9801# NOTE: Should be prefixed with "v".
98020	name	nintendo-3ds-version-code
9803# Raw version.
9804>0	leshort	x	\b%u,
9805# Major version.
9806>0	leshort&0xFC00	0x0000	0
9807>0	leshort&0xFC00	0x0400	1
9808>0	leshort&0xFC00	0x0800	2
9809>0	leshort&0xFC00	0x0C00	3
9810>0	leshort&0xFC00	0x1000	4
9811>0	leshort&0xFC00	0x1400	5
9812>0	leshort&0xFC00	0x1800	6
9813>0	leshort&0xFC00	0x1C00	7
9814>0	leshort&0xFC00	0x2000	8
9815>0	leshort&0xFC00	0x2400	9
9816>0	leshort&0xFC00	0x2800	10
9817>0	leshort&0xFC00	0x2C00	11
9818>0	leshort&0xFC00	0x3000	12
9819>0	leshort&0xFC00	0x3400	13
9820>0	leshort&0xFC00	0x3800	14
9821>0	leshort&0xFC00	0x3C00	15
9822# Minor version.
9823>0	leshort&0x03F0	0x0000	\b.0
9824>0	leshort&0x03F0	0x0010	\b.1
9825>0	leshort&0x03F0	0x0020	\b.2
9826>0	leshort&0x03F0	0x0030	\b.3
9827>0	leshort&0x03F0	0x0040	\b.4
9828>0	leshort&0x03F0	0x0050	\b.5
9829>0	leshort&0x03F0	0x0060	\b.6
9830>0	leshort&0x03F0	0x0070	\b.7
9831>0	leshort&0x03F0	0x0080	\b.8
9832>0	leshort&0x03F0	0x0090	\b.9
9833>0	leshort&0x03F0	0x00A0	\b.10
9834>0	leshort&0x03F0	0x00B0	\b.11
9835>0	leshort&0x03F0	0x00C0	\b.12
9836>0	leshort&0x03F0	0x00D0	\b.13
9837>0	leshort&0x03F0	0x00E0	\b.14
9838>0	leshort&0x03F0	0x00F0	\b.15
9839# Revision.
9840>0	leshort&0x000F	x	\b.%u
9841
9842# Type: Nintendo 3DS "NCCH" container.
9843# https://www.3dbrew.org/wiki/NCCH
98440x100		string	NCCH	Nintendo 3DS
9845>0x18D		byte&2	0	File Archive (CFA)
9846>0x18D		byte&2	2	Executable Image (CXI)
9847>0x150		string	>\0	\b: "%.16s"
9848>0x18D		byte	0x05
9849>>0x10E		leshort	x	(Old3DS System Update v
9850>>0x10E		use	nintendo-3ds-version-code
9851>>0x10E		leshort	x	\b)
9852>0x18D		byte	0x15
9853>>0x10E		leshort	x	(New3DS System Update v
9854>>0x10E		use	nintendo-3ds-version-code
9855>>0x10E		leshort	x	\b)
9856>0x18D		byte	!0x05
9857>>0x18D		byte	!0x15
9858>>>0x112	byte	x	(v
9859>>>0x112	use	nintendo-3ds-version-code
9860>>>0x112	byte	x	\b)
9861>0x18C		byte	2	(New3DS only)
9862
9863# Type: Nintendo 3DS "SMDH" file. (application description)
9864# From: David Korth <gerbilsoft@gerbilsoft.com>
9865# Reference: https://3dbrew.org/wiki/SMDH
98660		string		SMDH		Nintendo 3DS SMDH file
9867>0x208		leshort		!0
9868>>0x208		lestring16	x		\b: "%.128s"
9869>>0x388		leshort		!0
9870>>>0x388	lestring16	x		by %.128s
9871>0x208		leshort		0
9872>>0x008		leshort		!0
9873>>>0x008	lestring16	x		\b: "%.128s"
9874>>>0x188	leshort		!0
9875>>>>0x188	lestring16	x		by %.128s
9876
9877# Type: Nintendo 3DS Homebrew Application.
9878# From: David Korth <gerbilsoft@gerbilsoft.com>
9879# Reference: https://3dbrew.org/wiki/3DSX_Format
98800	string	3DSX	Nintendo 3DS Homebrew Application (3DSX)
9881
9882# Type: Nintendo 3DS Banner Model Data.
9883# From: David Korth <gerbilsoft@gerbilsoft.com>
9884# Reference: https://3dbrew.org/wiki/CBMD
98850	string	CBMD\0\0\0\0	Nintendo 3DS Banner Model Data
9886
9887#------------------------------------------------------------------------------
9888# a7800: file(1) magic for the Atari 7800 raw ROM format.
9889# From: David Korth <gerbilsoft@gerbilsoft.com>
9890# Reference: https://sites.google.com/site/atari7800wiki/a78-header
9891
98920	byte	>0
9893>0	byte	<3
9894>>1	string	ATARI7800	Atari 7800 ROM image
9895!:mime	application/x-atari-7800-rom
9896>>>0x11	string	>\0	\b: "%.32s"
9897# Display type.
9898>>>0x39	byte	0	(NTSC)
9899>>>0x39	byte	1	(PAL)
9900>>>0x36	byte&1	1	(POKEY)
9901
9902#------------------------------------------------------------------------------
9903# vectrex: file(1) magic for the GCE Vectrex raw ROM format.
9904# From: David Korth <gerbilsoft@gerbilsoft.com>
9905# Reference: http://www.playvectrex.com/designit/chrissalo/hello1.htm
9906#
9907# NOTE: Title is terminated with 0x80, not 0.
9908# The header is terminated with a 0, so that will
9909# terminate the title as well.
9910#
99110	string	g\ GCE	Vectrex ROM image
9912>0x11	string	>\0	\b: "%.16s"
9913
9914#------------------------------------------------------------------------------
9915# amiibo: file(1) magic for Nintendo amiibo NFC dumps.
9916# From: David Korth <gerbilsoft@gerbilsoft.com>
9917# Reference: https://www.3dbrew.org/wiki/Amiibo
99180x00		byte	0x04
9919>0x0A		beshort	0x0FE0
9920>>0x0C		belong	0xF110FFEE
9921>>>0x208	beshort	0x0100
9922>>>>0x020A	byte	0x0F
9923>>>>>0x020C	bequad	0x000000045F000000
9924>>>>>>0x5B	byte	0x02
9925>>>>>>>0x54	belong	x	Nintendo amiibo NFC dump - amiibo ID: %08X-
9926>>>>>>>0x58	belong	x	\b%08X
9927
9928#------------------------------------------------------------------------------
9929# Type: Nintendo Switch XCI (Game Cartridge Image)
9930# From: Benjamin Lowry <ben@ben.gmbh>
9931# Reference: https://switchbrew.org/wiki/Gamecard_Format
99320x100		string	HEAD
9933>0x10D		byte	0xFA	Nintendo Switch cartridge image (XCI), 1GB
9934>0x10D		byte	0xF8	Nintendo Switch cartridge image (XCI), 2GB
9935>0x10D		byte	0xF0	Nintendo Switch cartridge image (XCI), 4GB
9936>0x10D		byte	0xE0	Nintendo Switch cartridge image (XCI), 8GB
9937>0x10D		byte	0xE1	Nintendo Switch cartridge image (XCI), 16GB
9938>0x10D		byte	0xE2	Nintendo Switch cartridge image (XCI), 32GB
9939
9940#------------------------------------------------------------------------------
9941# Type: Nintendo Switch Executable
9942# From: Benjamin Lowry <ben@ben.gmbh>
9943# Reference: https://switchbrew.org/wiki/NSO
99440x00		string	NSO0	Nintendo Switch executable (NSO)
9945
9946#------------------------------------------------------------------------------
9947# Type: Nintendo Switch PFS0
9948# From: Benjamin Lowry <ben@ben.gmbh>
9949# Reference: https://switchbrew.org/wiki/NCA_Format#PFS0
99500x00		string	PFS0	Nintendo Switch partition filesystem (PFS0)
9951>0x04		ulelong	x	\b, %d files
9952
9953#------------------------------------------------------------------------------
9954# amiibo: file(1) magic for Nintendo Badge Arcade files.
9955# From: David Korth <gerbilsoft@gerbilsoft.com>
9956# References:
9957# - https://github.com/GerbilSoft/rom-properties/issues/92
9958# - https://github.com/CaitSith2/BadgeArcadeTool
9959# - https://github.com/TheMachinumps/Advanced-badge-editor
9960
9961# PRBS: Individual badge and/or mega badge.
99620		string	PRBS
9963>0x44		byte	>0x20	Nintendo Badge Arcade
9964>>0xB8		ulelong	<2
9965>>>0xBC		ulelong	<2	badge:
9966>>>0xBC		ulelong	>1	Mega Badge
9967>>>>0xB8	ulelong	x	(%ux
9968>>>>0xBC	ulelong	x	\b%u):
9969>>0xB8		ulelong	>1	Mega Badge
9970>>>0xB8		ulelong	x	(%ux
9971>>>0xBC		ulelong	x	\b%u):
9972>0x44		string	x	"%s"
9973>0x3C		ulelong	x	\b, badge ID: %u
9974>0x74		byte	>0x20
9975>>0x74		string	x	\b, set: "%s"
9976>0xA8		ulelong	!0xFFFFFFFF
9977>>0xA8		ulelong	x	\b, launch title ID: %08X
9978>>0xA4		ulelong	x	\b-%08X
9979
9980# CABS: Badge set.
99810	string	CABS
9982>0x2C	byte	>0x20	Nintendo Badge Arcade badge set:
9983>>0x2C	string	x	"%.48s"
9984>>0x24	ulelong	x	\b, set ID: %u
9985
9986#------------------------------------------------------------------------------
9987# sufami: file(1) magic for Sufami Turbo ROM images.
9988# From: David Korth <gerbilsoft@gerbilsoft.com>
9989# References:
9990# - https://problemkaputt.de/fullsnes.htm#snescartsufamiturbominicartridgeadaptor
99910	string		BANDAI\ SFC-ADX
9992>0x10	string		!SFC-ADX\ BACKUP	Sufami Turbo ROM image:
9993>>0x10	string/T	x	"%.14s"
9994>>0x30	byte		x	\b, ID %02X
9995>>0x31	byte		x	\b%02X
9996>>0x32	byte		x	\b%02X
9997>>0x33	ubyte		>0	\b, series index %u
9998>>0x34	ubyte		0	[SlowROM]
9999>>0x34	ubyte		1	[FastROM]
10000>>0x35	ubyte		1	[SRAM]
10001>>0x35	ubyte		3	[Special]
10002
10003#------------------------------------------------------------------------------
10004# $File: convex,v 1.8 2012/10/03 23:44:43 christos Exp $
10005# convex:  file(1) magic for Convex boxes
10006#
10007# Convexes are big-endian.
10008#
10009# /*\
10010#  * Below are the magic numbers and tests added for Convex.
10011#  * Added at beginning, because they are expected to be used most.
10012# \*/
100130	belong	0507	Convex old-style object
10014>16	belong	>0	not stripped
100150	belong	0513	Convex old-style demand paged executable
10016>16	belong	>0	not stripped
100170	belong	0515	Convex old-style pre-paged executable
10018>16	belong	>0	not stripped
100190	belong	0517	Convex old-style pre-paged, non-swapped executable
10020>16	belong	>0	not stripped
100210	belong	0x011257	Core file
10022#
10023# The following are a series of dump format magic numbers.  Each one
10024# corresponds to a drastically different dump format.  The first on is
10025# the original dump format on a 4.1 BSD or earlier file system.  The
10026# second marks the change between the 4.1 file system and the 4.2 file
10027# system.  The Third marks the changing of the block size from 1K
10028# to 2K to be compatible with an IDC file system.  The fourth indicates
10029# a dump that is dependent on Convex Storage Manager, because data in
10030# secondary storage is not physically contained within the dump.
10031# The restore program uses these number to determine how the data is
10032# to be extracted.
10033#
1003424	belong	=60013	dump format, 4.2 or 4.3 BSD (IDC compatible)
1003524	belong	=60014	dump format, Convex Storage Manager by-reference dump
10036#
10037# what follows is a bunch of bit-mask checks on the flags field of the opthdr.
10038# If there is no `=' sign, assume just checking for whether the bit is set?
10039#
100400	belong	0601		Convex SOFF
10041>88	belong&0x000f0000	=0x00000000	c1
10042>88	belong			&0x00010000	c2
10043>88	belong			&0x00020000	c2mp
10044>88	belong			&0x00040000	parallel
10045>88	belong			&0x00080000	intrinsic
10046>88	belong			&0x00000001	demand paged
10047>88	belong			&0x00000002	pre-paged
10048>88	belong			&0x00000004	non-swapped
10049>88	belong			&0x00000008	POSIX
10050#
10051>84	belong			&0x80000000	executable
10052>84	belong			&0x40000000	object
10053>84	belong&0x20000000	=0		not stripped
10054>84	belong&0x18000000	=0x00000000	native fpmode
10055>84	belong&0x18000000	=0x10000000	ieee fpmode
10056>84	belong&0x18000000	=0x18000000	undefined fpmode
10057#
100580	belong			0605		Convex SOFF core
10059#
100600	belong			0607		Convex SOFF checkpoint
10061>88	belong&0x000f0000	=0x00000000	c1
10062>88	belong			&0x00010000	c2
10063>88	belong			&0x00020000	c2mp
10064>88	belong			&0x00040000	parallel
10065>88	belong			&0x00080000	intrinsic
10066>88	belong			&0x00000008	POSIX
10067#
10068>84	belong&0x18000000	=0x00000000	native fpmode
10069>84	belong&0x18000000	=0x10000000	ieee fpmode
10070>84	belong&0x18000000	=0x18000000	undefined fpmode
10071
10072#------------------------------------------------------------------------------
10073# $File: coverage,v 1.3 2021/02/23 00:51:10 christos Exp $
10074# xoverage:  file(1) magic for test coverage data
10075
10076# File formats used to store test coverage data
10077# 2016-05-21, Georg Sauthoff <mail@georg.so>
10078
10079
10080# - GCC gcno - written by GCC at compile time when compiling with
10081# 	gcc -ftest-coverage
10082# - GCC gcda - written by a program that was compiled with
10083#	gcc -fprofile-arcs
10084# - LLVM raw profiles - generated by a program compiled with
10085#	clang -fprofile-instr-generate -fcoverage-mapping ...
10086# - LLVM indexed profiles - generated by
10087#	llvm-profdata
10088# - GCOV reports, i.e. the annotated source code
10089# - LCOV trace files, i.e. aggregated GCC profiles
10090#
10091# GCC coverage tracefiles
10092# .gcno file are created during compile time,
10093# while data collected during runtime is stored in .gcda files
10094# cf. gcov-io.h
10095# https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/Gcov-Data-Files.html
10096# Examples:
10097# Fedora 23/x86-64/gcc-5.3.1: 6f 6e 63 67 52 33 30 35
10098# Debian 8 PPC64/gcc-4.9.2  : 67 63 6e 6f 34 30 39 2a
100990	lelong	0x67636e6f	GCC gcno coverage (-ftest-coverage),
10100>&3	byte	x	version %c.
10101>&1	byte	x	\b%c
10102
10103# big endian
101040	belong	0x67636e6f	GCC gcno coverage (-ftest-coverage),
10105>&0	byte	x	version %c.
10106>&2	byte	x	\b%c (big-endian)
10107
10108# Examples:
10109# Fedora 23/x86-64/gcc-5.3.1: 61 64 63 67 52 33 30 35
10110# Debian 8 PPC64/gcc-4.9.2  : 67 63 64 61 34 30 39 2a
101110	lelong	0x67636461	GCC gcda coverage (-fprofile-arcs),
10112>&3	byte	x	version %c.
10113>&1	byte	x	\b%c
10114
10115# big endian
101160	belong	0x67636461	GCC gcda coverage (-fprofile-arcs),
10117>&0	byte	x	version %c.
10118>&2	byte	x	\b%c (big-endian)
10119
10120
10121# LCOV tracefiles
10122# cf. http://ltp.sourceforge.net/coverage/lcov/geninfo.1.php
101230	string	TN:
10124>&0	search/64	\nSF:/	LCOV coverage tracefile
10125
10126
10127# Coverage reports generated by gcov
10128# i.e. source code annotated with coverage information
101290	string	\x20\x20\x20\x20\x20\x20\x20\x20-:\x20\x20\x20\ 0:Source:
10130>&0	search/128	\x20\x20\x20\x20\x20\x20\x20\x20-:\x20\x20\x20\ 0:Graph:
10131>>&0	search/128	\x20\x20\x20\x20\x20\x20\x20\x20-:\x20\x20\x20\ 0:Data:	GCOV coverage report
10132
10133
10134# LLVM coverage files
10135
10136# raw data after running a program compiled with:
10137# `clang -fprofile-instr-generate -fcoverage-mapping ...`
10138# default name: default.profraw
10139# magic is: \xFF lprofr \x81
10140# cf. https://llvm.org/docs/doxygen/html/InstrProfData_8inc_source.html
101410	lequad	0xff6c70726f667281	LLVM raw profile data,
10142>&0	byte	x	version %d
10143
10144# big endian
101450	bequad	0xff6c70726f667281	LLVM raw profile data,
10146>&7	byte	x	version %d (big-endian)
10147
10148
10149# LLVM indexed instruction profile (as generated by llvm-profdata)
10150# magic is: reverse(\xFF lprofi \x81)
10151# cf. https://llvm.org/docs/CoverageMappingFormat.html
10152# https://llvm.org/docs/doxygen/html/namespacellvm_1_1IndexedInstrProf.html
10153# https://llvm.org/docs/CommandGuide/llvm-cov.html
10154# https://llvm.org/docs/CommandGuide/llvm-profdata.html
101550	lequad	0x8169666f72706cff	LLVM indexed profile data,
10156>&0	byte	x	version %d
10157
10158# big endian
101590	bequad	0x8169666f72706cff	LLVM indexed profile data,
10160>&7	byte	x	version %d (big-endian)
10161
10162
10163#------------------------------------------------------------------------------
10164# $File: cracklib,v 1.7 2009/09/19 16:28:08 christos Exp $
10165# cracklib:  file (1) magic for cracklib v2.7
10166
101670	lelong	0x70775631	Cracklib password index, little endian
10168>4	long	>0		(%i words)
10169>4	long	0		("64-bit")
10170>>8	long	>-1		(%i words)
101710	belong	0x70775631	Cracklib password index, big endian
10172>4	belong	>-1		(%i words)
10173# really bellong 0x0000000070775631
101740	search/1	\0\0\0\0pwV1	Cracklib password index, big endian ("64-bit")
10175>12	belong	>0		(%i words)
10176
10177#------------------------------------------------------------------------------
10178# $File: crypto,v 1.2 2021/03/27 20:15:53 christos Exp $
10179# crypto:  file(1) magic for crypto formats
10180#
10181
10182# ----------------------------------------------------------------------------
10183# $File: ctags,v 1.6 2009/09/19 16:28:08 christos Exp $
10184# ctags:  file (1) magic for Exuberant Ctags files
10185# From: Alexander Mai <mai@migdal.ikp.physik.tu-darmstadt.de>
101860	search/1	=!_TAG	Exuberant Ctags tag file text
10187
10188#--------------------------------------------------------------
10189# ctf:  file(1) magic for CTF (Common Trace Format) trace files
10190#
10191# Specs. available here: <https://www.efficios.com/ctf>
10192#--------------------------------------------------------------
10193
10194# CTF trace data
101950	lelong	0xc1fc1fc1	Common Trace Format (CTF) trace data (LE)
101960	belong	0xc1fc1fc1	Common Trace Format (CTF) trace data (BE)
10197
10198# CTF metadata (packetized)
101990	lelong	0x75d11d57	Common Trace Format (CTF) packetized metadata (LE)
10200>35	byte	x		\b, v%d
10201>36	byte	x		\b.%d
102020	belong	0x75d11d57	Common Trace Format (CTF) packetized metadata (BE)
10203>35	byte	x		\b, v%d
10204>36	byte	x		\b.%d
10205
10206# CTF metadata (plain text)
102070	string	/*\x20CTF\x20   Common Trace Format (CTF) plain text metadata
10208!:strength + 5			# this is to make sure we beat C
10209>&0	regex	[0-9]+\\.[0-9]+	\b, v%s
10210
10211#------------------------------------------------------------------------------
10212# $File: cubemap,v 1.1 2012/06/06 13:03:20 christos Exp $
10213# file(1) magic(5) data for cubemaps  Martin Erik Werner <martinerikwerner@gmail.com>
10214#
102150	string	ACMP	Map file for the AssaultCube FPS game
102160	string	CUBE	Map file for cube and cube2 engine games
102170	string	MAPZ)	Map file for the Blood Frontier/Red Eclipse FPS games
10218
10219#------------------------------------------------------------------------------
10220# $File: cups,v 1.6 2019/04/19 00:42:27 christos Exp $
10221# Cups: file(1) magic for the cups raster file format
10222# From: Laurent Martelli <martellilaurent@gmail.com>
10223# https://www.cups.org/documentation.php/spec-raster.html
10224#
10225
102260	name		cups-le
10227>280	lelong		x		\b, %d
10228>284	lelong		x		\bx%d dpi
10229>376	lelong		x		\b, %dx
10230>380	lelong		x		\b%d pixels
10231>388	lelong		x		%d bits/color
10232>392	lelong		x		%d bits/pixel
10233>400	lelong		0		ColorOrder=Chunky
10234>400	lelong		1		ColorOrder=Banded
10235>400	lelong		2		ColorOrder=Planar
10236>404	lelong		0		ColorSpace=gray
10237>404	lelong		1		ColorSpace=RGB
10238>404	lelong		2		ColorSpace=RGBA
10239>404	lelong		3		ColorSpace=black
10240>404	lelong		4		ColorSpace=CMY
10241>404	lelong		5		ColorSpace=YMC
10242>404	lelong		6		ColorSpace=CMYK
10243>404	lelong		7		ColorSpace=YMCK
10244>404	lelong		8		ColorSpace=KCMY
10245>404	lelong		9		ColorSpace=KCMYcm
10246>404	lelong		10		ColorSpace=GMCK
10247>404	lelong		11		ColorSpace=GMCS
10248>404	lelong		12		ColorSpace=WHITE
10249>404	lelong		13		ColorSpace=GOLD
10250>404	lelong		14		ColorSpace=SILVER
10251>404	lelong		15		ColorSpace=CIE XYZ
10252>404	lelong		16		ColorSpace=CIE Lab
10253>404	lelong		17		ColorSpace=RGBW
10254>404	lelong		18		ColorSpace=sGray
10255>404	lelong		19		ColorSpace=sRGB
10256>404	lelong		20		ColorSpace=AdobeRGB
10257
10258# Cups Raster image format, Big Endian
102590	string		RaS
10260>3	string		t		Cups Raster version 1, Big Endian
10261>3	string		2		Cups Raster version 2, Big Endian
10262>3	string		3		Cups Raster version 3, Big Endian
10263!:mime	application/vnd.cups-raster
10264>0	use		\^cups-le
10265
10266
10267# Cups Raster image format, Little Endian
102681	string		SaR
10269>0	string		t		Cups Raster version 1, Little Endian
10270>0	string		2		Cups Raster version 2, Little Endian
10271>0	string		3		Cups Raster version 3, Little Endian
10272!:mime	application/vnd.cups-raster
10273>0	use		cups-le
10274
10275#------------------------------------------------------------------------------
10276# $File: dact,v 1.4 2009/09/19 16:28:08 christos Exp $
10277# dact:  file(1) magic for DACT compressed files
10278#
102790	long		0x444354C3	DACT compressed data
10280>4	byte		>-1		(version %i.
10281>5	byte		>-1		$BS%i.
10282>6	byte		>-1		$BS%i)
10283>7	long		>0		$BS, original size: %i bytes
10284>15	long		>30		$BS, block size: %i bytes
10285
10286#------------------------------------------------------------------------------
10287# $File: database,v 1.67 2022/07/12 18:57:42 christos Exp $
10288# database:  file(1) magic for various databases
10289#
10290# extracted from header/code files by Graeme Wilford (eep2gw@ee.surrey.ac.uk)
10291#
10292#
10293# GDBM magic numbers
10294#  Will be maintained as part of the GDBM distribution in the future.
10295#  <downsj@teeny.org>
102960	belong	0x13579acd	GNU dbm 1.x or ndbm database, big endian, 32-bit
10297!:mime	application/x-gdbm
102980	belong	0x13579ace	GNU dbm 1.x or ndbm database, big endian, old
10299!:mime	application/x-gdbm
103000	belong	0x13579acf	GNU dbm 1.x or ndbm database, big endian, 64-bit
10301!:mime	application/x-gdbm
103020	lelong	0x13579acd	GNU dbm 1.x or ndbm database, little endian, 32-bit
10303!:mime	application/x-gdbm
103040	lelong	0x13579ace	GNU dbm 1.x or ndbm database, little endian, old
10305!:mime	application/x-gdbm
103060	lelong	0x13579acf	GNU dbm 1.x or ndbm database, little endian, 64-bit
10307!:mime	application/x-gdbm
103080	string	GDBM		GNU dbm 2.x database
10309!:mime	application/x-gdbm
10310#
10311# Berkeley DB
10312#
10313# Ian Darwin's file /etc/magic files: big/little-endian version.
10314#
10315# Hash 1.85/1.86 databases store metadata in network byte order.
10316# Btree 1.85/1.86 databases store the metadata in host byte order.
10317# Hash and Btree 2.X and later databases store the metadata in host byte order.
10318
103190	long	0x00061561	Berkeley DB
10320!:mime	application/x-dbm
10321>8	belong	4321
10322>>4	belong	>2		1.86
10323>>4	belong	<3		1.85
10324>>4	belong	>0		(Hash, version %d, native byte-order)
10325>8	belong	1234
10326>>4	belong	>2		1.86
10327>>4	belong	<3		1.85
10328>>4	belong	>0		(Hash, version %d, little-endian)
10329
103300	belong	0x00061561	Berkeley DB
10331>8	belong	4321
10332>>4	belong	>2		1.86
10333>>4	belong	<3		1.85
10334>>4	belong	>0		(Hash, version %d, big-endian)
10335>8	belong	1234
10336>>4	belong	>2		1.86
10337>>4	belong	<3		1.85
10338>>4	belong	>0		(Hash, version %d, native byte-order)
10339
103400	long	0x00053162	Berkeley DB 1.85/1.86
10341>4	long	>0		(Btree, version %d, native byte-order)
103420	belong	0x00053162	Berkeley DB 1.85/1.86
10343>4	belong	>0		(Btree, version %d, big-endian)
103440	lelong	0x00053162	Berkeley DB 1.85/1.86
10345>4	lelong	>0		(Btree, version %d, little-endian)
10346
1034712	long	0x00061561	Berkeley DB
10348>16	long	>0		(Hash, version %d, native byte-order)
1034912	belong	0x00061561	Berkeley DB
10350>16	belong	>0		(Hash, version %d, big-endian)
1035112	lelong	0x00061561	Berkeley DB
10352>16	lelong	>0		(Hash, version %d, little-endian)
10353
1035412	long	0x00053162	Berkeley DB
10355>16	long	>0		(Btree, version %d, native byte-order)
1035612	belong	0x00053162	Berkeley DB
10357>16	belong	>0		(Btree, version %d, big-endian)
1035812	lelong	0x00053162	Berkeley DB
10359>16	lelong	>0		(Btree, version %d, little-endian)
10360
1036112	long	0x00042253	Berkeley DB
10362>16	long	>0		(Queue, version %d, native byte-order)
1036312	belong	0x00042253	Berkeley DB
10364>16	belong	>0		(Queue, version %d, big-endian)
1036512	lelong	0x00042253	Berkeley DB
10366>16	lelong	>0		(Queue, version %d, little-endian)
10367
10368# From Max Bowsher.
1036912	long	0x00040988	Berkeley DB
10370>16	long	>0		(Log, version %d, native byte-order)
1037112	belong	0x00040988	Berkeley DB
10372>16	belong	>0		(Log, version %d, big-endian)
1037312	lelong	0x00040988	Berkeley DB
10374>16	lelong	>0		(Log, version %d, little-endian)
10375
10376#
10377#
10378# Round Robin Database Tool by Tobias Oetiker <oetiker@ee.ethz.ch>
103790	string/b	RRD\0		RRDTool DB
10380>4	string/b	x		version %s
10381
10382>>10	short		!0		16bit aligned
10383>>>10	bedouble	8.642135e+130	big-endian
10384>>>>18	short		x		32bit long (m68k)
10385
10386>>10	short		0
10387>>>12	long		!0		32bit aligned
10388>>>>12	bedouble	8.642135e+130	big-endian
10389>>>>>20 long		0		64bit long
10390>>>>>20 long		!0		32bit long
10391>>>>12	ledouble	8.642135e+130	little-endian
10392>>>>>24 long		0		64bit long
10393>>>>>24 long		!0		32bit long (i386)
10394>>>>12	string		\x43\x2b\x1f\x5b\x2f\x25\xc0\xc7	middle-endian
10395>>>>>24 short		!0		32bit long (arm)
10396
10397>>8	quad		0		64bit aligned
10398>>>16	bedouble	8.642135e+130	big-endian
10399>>>>24	long		0		64bit long (s390x)
10400>>>>24	long		!0		32bit long (hppa/mips/ppc/s390/SPARC)
10401>>>16	ledouble	8.642135e+130	little-endian
10402>>>>28	long		0		64bit long (alpha/amd64/ia64)
10403>>>>28	long		!0		32bit long (armel/mipsel)
10404
10405#----------------------------------------------------------------------
10406# ROOT: file(1) magic for ROOT databases
10407#
104080       string  root\0  ROOT file
10409>4      belong  x       Version %d
10410>33     belong  x       (Compression: %d)
10411
10412# XXX: Weak magic.
10413# Alex Ott <ott@jet.msk.su>
10414## Paradox file formats
10415#2	  leshort	0x0800	Paradox
10416#>0x39	  byte		3	v. 3.0
10417#>0x39	  byte		4	v. 3.5
10418#>0x39	  byte		9	v. 4.x
10419#>0x39	  byte		10	v. 5.x
10420#>0x39	  byte		11	v. 5.x
10421#>0x39	  byte		12	v. 7.x
10422#>>0x04	  byte		0	indexed .DB data file
10423#>>0x04	  byte		1	primary index .PX file
10424#>>0x04	  byte		2	non-indexed .DB data file
10425#>>0x04	  byte		3	non-incrementing secondary index .Xnn file
10426#>>0x04	  byte		4	secondary index .Ynn file
10427#>>0x04	  byte		5	incrementing secondary index .Xnn file
10428#>>0x04	  byte		6	non-incrementing secondary index .XGn file
10429#>>0x04	  byte		7	secondary index .YGn file
10430#>>>0x04	  byte		8	incrementing secondary index .XGn file
10431
10432## XBase database files
10433# updated by Joerg Jenderek at Feb 2013
10434# https://www.dbase.com/Knowledgebase/INT/db7_file_fmt.htm
10435# https://www.clicketyclick.dk/databases/xbase/format/dbf.html
10436# inspect VVYYMMDD , where 1<= MM <= 12 and 1<= DD <= 31
104370	ubelong&0x0000FFFF		<0x00000C20
10438!:strength +10
10439# skip Infocom game Z-machine
10440>2		ubyte			>0
10441# skip Androids *.xml
10442>>3		ubyte			>0
10443>>>3		ubyte			<32
10444# 1 < version VV
10445>>>>0		ubyte			>1
10446# skip HELP.CA3 by test for reserved byte ( NULL )
10447>>>>>27		ubyte			0
10448# reserved bytes not always 0 ; also found 0x3901 (T4.DBF) ,0x7101 (T5.DBF,T6.DBF)
10449#>>>>>30		ubeshort     		x		30NULL?%x
10450# possible production flag,tag numbers(<=0x30),tag length(<=0x20), reserved (NULL)
10451>>>>>>24	ubelong&0xffFFFFff	>0x01302000
10452# .DBF or .MDX
10453>>>>>>24	ubelong&0xffFFFFff	<0x01302001
10454# for Xbase Database file (*.DBF) reserved (NULL) for multi-user
10455>>>>>>>24	ubelong&0xffFFFFff	=0
10456# test for 2 reserved NULL bytes,transaction and encryption byte flag
10457>>>>>>>>12	ubelong&0xFFFFfEfE	0
10458# test for MDX flag
10459>>>>>>>>>28	ubyte			x
10460>>>>>>>>>28	ubyte&0xf8		0
10461# header size >= 32
10462>>>>>>>>>>8	uleshort		>31
10463# skip PIC15736.PCX by test for language driver name or field name
10464>>>>>>>>>>>32	ubyte			>0
10465#!:mime	application/x-dbf; charset=unknown-8bit ??
10466#!:mime	application/x-dbase
10467>>>>>>>>>>>>0	use			xbase-type
10468# database file
10469>>>>>>>>>>>>28	ubyte&0x04		=0		\b DBF
10470!:ext	dbf
10471>>>>>>>>>>>>28	ubyte&0x04		=4		\b DataBaseContainer
10472!:ext	dbc
10473>>>>>>>>>>>>4	lelong			0		\b, no records
10474>>>>>>>>>>>>4	lelong			>0		\b, %d record
10475# plural s appended
10476>>>>>>>>>>>>>4	lelong			>1		\bs
10477# https://www.clicketyclick.dk/databases/xbase/format/dbf_check.html#CHECK_DBF
10478# 1 <= record size <= 4000 (dBase 3,4) or 32 * KB (=0x8000)
10479>>>>>>>>>>>>10	uleshort		x		* %d
10480# file size = records * record size + header size
10481>>>>>>>>>>>>1	ubyte			x		\b, update-date
10482>>>>>>>>>>>>1	use			xbase-date
10483# https://msdn.microsoft.com/de-de/library/cc483186(v=vs.71).aspx
10484#>>>>>>>>>>>>29	ubyte			=0		\b, codepage ID=%#x
10485# 2~cp850 , 3~cp1252 , 0x1b~?? ; what code page is 0x1b ?
10486>>>>>>>>>>>>29	ubyte			>0		\b, codepage ID=%#x
10487#>>>>>>>>>>>>28	ubyte&0x01		0		\b, no index file
10488# MDX or CDX index
10489>>>>>>>>>>>>28	ubyte&0x01		1		\b, with index file .MDX
10490>>>>>>>>>>>>28	ubyte&0x02		2		\b, with memo .FPT
10491#>>>>>>>>>>>>28	ubyte&0x04		4		\b, DataBaseContainer
10492# 1st record offset + 1 = header size
10493>>>>>>>>>>>>8	uleshort		>0
10494>>>>>>>>>>>>(8.s+1)	ubyte		>0
10495>>>>>>>>>>>>>8		uleshort	>0		\b, at offset %d
10496>>>>>>>>>>>>>(8.s+1)	ubyte		>0
10497>>>>>>>>>>>>>>&-1	string		>\0		1st record "%s"
10498# for multiple index files (*.MDX) Production flag,tag numbers(<=0x30),tag length(<=0x20), reserved (NULL)
10499>>>>>>>24	ubelong&0x0133f7ff	>0
10500# test for reserved NULL byte
10501>>>>>>>>47	ubyte			0
10502# test for valid TAG key format (0x10 or 0)
10503>>>>>>>>>559	ubyte&0xeF		0
10504# test MM <= 12
10505>>>>>>>>>>45	ubeshort		<0x0C20
10506>>>>>>>>>>>45	ubyte			>0
10507>>>>>>>>>>>>46	ubyte			<32
10508>>>>>>>>>>>>>46	ubyte			>0
10509#!:mime	application/x-mdx
10510>>>>>>>>>>>>>>0		use		xbase-type
10511>>>>>>>>>>>>>>0		ubyte		x		\b MDX
10512>>>>>>>>>>>>>>1		ubyte		x		\b, creation-date
10513>>>>>>>>>>>>>>1		use		xbase-date
10514>>>>>>>>>>>>>>44	ubyte		x		\b, update-date
10515>>>>>>>>>>>>>>44	use		xbase-date
10516# No.of tags in use (1,2,5,12)
10517>>>>>>>>>>>>>>28	uleshort	x		\b, %d
10518# No. of entries in tag (0x30)
10519>>>>>>>>>>>>>>25	ubyte		x		\b/%d tags
10520#  Length of tag
10521>>>>>>>>>>>>>>26	ubyte		x		* %d
10522# 1st tag name_
10523>>>>>>>>>>>>>548	string		x		\b, 1st tag "%.11s"
10524# 2nd tag name
10525#>>>>>>>>>>>>(26.b+548)	string		x		\b, 2nd tag "%.11s"
10526#
10527#		Print the xBase names of different version variants
105280	name				xbase-type
10529>0	ubyte		<2
10530# 1 < version
10531>0	ubyte		>1
10532>>0	ubyte		0x02		FoxBase
10533!:mime	application/x-dbf
10534# like: ACCESS.DBF USER.DBF dbase3date.dbf mitarbei.dbf produkte.dbf umlaut-test-v2.dbf
10535# FoxBase+/dBaseIII+, no memo
10536>>0	ubyte		0x03		FoxBase+/dBase III
10537!:mime	application/x-dbf
10538# like: 92DATA.DBF MSCATLOG.DBF SYLLABI2.DBF SYLLABUS.DBF T4.DBF Teleadr.dbf us_city.dbf
10539# dBASE IV no memo file
10540>>0	ubyte		0x04		dBase IV
10541!:mime	application/x-dbf
10542# like: Quattro-test11.dbf umlaut-test-v4.dbf
10543# dBASE V no memo file
10544>>0	ubyte		0x05		dBase V
10545!:mime	application/x-dbf
10546# like: dbase4double.dbf Quattro-test2.dbf umlaut-test7.dbf
10547!:ext	dbf
10548# probably Apollo Database Server 9.7? xBase (0x6)
10549>>0	ubyte		0x06		Apollo
10550!:mime	application/x-dbf
10551# like: ALIAS.DBF CRYPT.DBF PROCS.DBF USERS.DBF
10552# https://docs.microsoft.com/en-us/previous-versions/visualstudio/foxpro/st4a0s68(v=vs.80)
10553>>0	ubyte		0x2F		FoxBase+/Dbase III plus, no memo
10554!:mime	application/x-dbf
10555# no example
10556>>0	ubyte		0x30		Visual FoxPro
10557!:mime	application/x-dbf
10558# like: 26FRX.DBF 30DBC.DBF 30DBCPRO.DBF BEHINDSC.DBF USER_LEV.DBF
10559# Microsoft Visual FoxPro Database Container File like: FOXPRO-DB-TEST.DBC TESTDATA.DBC TASTRADE.DBC
10560>>0	ubyte		0x31		Visual FoxPro, autoincrement
10561!:mime	application/x-dbf
10562# like: AI_Table.DBF dbase_31.dbf w_cityFoxpro.dbf
10563# Visual FoxPro, with field type Varchar or Varbinary
10564>>0	ubyte		0x32		Visual FoxPro, with field type Varchar
10565!:mime	application/x-dbf
10566# like: dbase_32.dbf
10567# dBASE IV SQL, no memo;dbv memo var size (Flagship)
10568>>0	ubyte		0x43		dBase IV, with SQL table
10569!:mime	application/x-dbf
10570# like: ASSEMBLY.DBF INVENTRY.DBF STAFF.DBF
10571# https://docs.microsoft.com/en-us/previous-versions/visualstudio/foxpro/st4a0s68(v=vs.80)
10572>>0	ubyte		0x62		dBase IV, with SQL table
10573#!:mime	application/x-dbf
10574# no example
10575# dBASE IV, with memo!!
10576>>0	ubyte		0x7b		dBase IV, with memo
10577!:mime	application/x-dbf
10578# like: test3memo.DBF dbase5.DBF
10579# https://docs.microsoft.com/en-us/previous-versions/visualstudio/foxpro/st4a0s68(v=vs.80)
10580>>0	ubyte		0x82		dBase IV, with SQL system
10581#!:mime	application/x-dbf
10582# no example
10583# FoxBase+/dBaseIII+ with memo .DBT!
10584>>0	ubyte		0x83		FoxBase+/dBase III, with memo .DBT
10585!:mime	application/x-dbf
10586# like: T2.DBF t3.DBF biblio.dbf dbase_83.dbf dbase3dbt0_4.dbf fsadress.dbf stop.dbf
10587# VISUAL OBJECTS (first 1.0 versions) for the Dbase III files (NTX clipper driver); memo file
10588>>0	ubyte		0x87		VISUAL OBJECTS, with memo file
10589!:mime	application/x-dbf
10590# like: ACCESS.DBF dbase3date.dbf dbase3float.dbf holdings.dbf mitarbei.dbf
10591# https://docs.microsoft.com/en-us/previous-versions/visualstudio/foxpro/st4a0s68(v=vs.80)
10592>>0	ubyte		0x8A		FoxBase+/dBase III, with memo .DBT
10593#!:mime	application/x-dbf
10594# no example
10595# dBASE IV with memo!
10596>>0	ubyte		0x8B		dBase IV, with memo .DBT
10597!:mime	application/x-dbf
10598# like: animals.dbf archive.dbf callin.dbf dbase_8b.dbf phnebook.dbf t6.dbf
10599# dBase IV with SQL Table,no memo?
10600>>0	ubyte		0x8E		dBase IV, with SQL table
10601!:mime	application/x-dbf
10602# like: dbase5.DBF test3memo.DBF test-memo.DBF
10603# .dbv and .dbt memo (Flagship)?
10604>>0	ubyte		0xB3		Flagship
10605!:mime	application/x-dbf
10606# no example
10607# https://docs.microsoft.com/en-us/previous-versions/visualstudio/foxpro/st4a0s68(v=vs.80)
10608>>0	ubyte		0xCA		dBase IV with memo .DBT
10609#!:mime	application/x-dbf
10610# no example
10611# dBASE IV with SQL table, with memo .DBT
10612>>0	ubyte		0xCB		dBase IV with SQL table, with memo .DBT
10613!:mime	application/x-dbf
10614# like: dbase5.DBF test3memo.DBF test-memo.DBF
10615# HiPer-Six format;Clipper SIX, with SMT memo file
10616>>0	ubyte		0xE5		Clipper SIX with memo
10617!:mime	application/x-dbf
10618# like: dbase5.DBF test3memo.DBF test-memo.DBF testClipper.dbf DATA.DBF
10619# https://docs.microsoft.com/en-us/previous-versions/visualstudio/foxpro/st4a0s68(v=vs.80)
10620>>0	ubyte		0xF4		dBase IV, with SQL table, with memo
10621#!:mime	application/x-dbf
10622# no example
10623>>0	ubyte		0xF5		FoxPro with memo
10624!:mime	application/x-dbf
10625# like: CUSTOMER.DBF FOXUSER1.DBF Invoice.DBF NG.DBF OBJSAMP.DBF dbase_f5.dbf kunde.dbf
10626# probably Apollo Database Server 9.7 with SQL and memo mask? xBase (0xF6)
10627>>0	ubyte		0xF6		Apollo, with SQL table with memo
10628!:mime	application/x-dbf
10629# like: SCRIPTS.DBF
10630# https://docs.microsoft.com/en-us/previous-versions/visualstudio/foxpro/st4a0s68(v=vs.80)
10631#>>0	ubyte		0xFA		FoxPro 2.x, with memo
10632#!:mime	application/x-dbf
10633# no example
10634# unknown version (should not happen)
10635>>0	default		x		xBase
10636!:mime	application/x-dbf
10637>>>0	ubyte		x		(%#x)
10638# flags in version byte
10639# DBT flag (with dBASE III memo .DBT)!!
10640# >>0	ubyte&0x80	>0		DBT_FLAG=%x
10641# memo flag ??
10642# >>0	ubyte&0x08	>0		MEMO_FLAG=%x
10643# SQL flag ??
10644# >>0	ubyte&0x70	>0		SQL_FLAG=%x
10645#		test and print the date of xBase .DBF .MDX
106460	name				xbase-date
10647# inspect YYMMDD , where 1<= MM <= 12 and 1<= DD <= 31
10648>0	ubelong		x
10649>1	ubyte		<13
10650>>1	ubyte		>0
10651>>>2	ubyte		>0
10652>>>>2	ubyte		<32
10653>>>>>0	ubyte		x
10654# YY is interpreted as 20YY or 19YY
10655>>>>>>0	ubyte		<100		\b %.2d
10656# YY is interpreted 1900+YY; TODO: display yy or 20yy instead 1YY
10657>>>>>>0	ubyte		>99		\b %d
10658>>>>>1	ubyte		x		\b-%d
10659>>>>>2	ubyte		x		\b-%d
10660
10661#	dBase memo files .DBT or .FPT
10662# https://msdn.microsoft.com/en-us/library/8599s21w(v=vs.80).aspx
1066316		ubyte		<4
10664>16		ubyte		!2
10665>>16		ubyte		!1
10666# next free block index is positive
10667>>>0		ulelong		>0
10668# skip many JPG. ZIP, BZ2 by test for reserved bytes NULL , 0|2 , 0|1 , low byte of block size
10669>>>>17		ubelong&0xFFfdFEff	0x00000000
10670# skip many RAR by test for low byte 0 ,high byte 0|2|even of block size, 0|a|e|d7 , 0|64h
10671>>>>>20		ubelong&0xFF01209B	0x00000000
10672# dBASE III
10673>>>>>>16	ubyte		3
10674# dBASE III DBT
10675>>>>>>>0	use		dbase3-memo-print
10676# dBASE III DBT without version, dBASE IV DBT , FoxPro FPT , or many ZIP , DBF garbage
10677>>>>>>16	ubyte		0
10678# unusual dBASE III DBT like angest.dbt, dBASE IV DBT with block size 0 , FoxPro FPT ,  or garbage PCX DBF
10679>>>>>>>20	uleshort	0
10680# FoxPro FPT , unusual dBASE III DBT like biblio.dbt or garbage
10681>>>>>>>>8	ulong		=0
10682>>>>>>>>>6	ubeshort	>0
10683# skip emacs.PIF
10684>>>>>>>>>>4	ushort		0
10685# check for valid FoxPro field type
10686>>>>>>>>>>>512	ubelong		<3
10687# skip LXMDCLN4.OUT LXMDCLN6.OUT LXMDALG6.OUT with invalid blocksize 170=AAh
10688>>>>>>>>>>>>6	ubeshort&0x002f	0
10689>>>>>>>>>>>>>0	use		foxpro-memo-print
10690# dBASE III DBT , garbage
10691# skip WORD1XW.DOC with improbably high free block index
10692>>>>>>>>>0	ulelong		<0x400000
10693# skip WinStore.App.exe by looking for printable 2nd character of 1st memo item
10694>>>>>>>>>>513	ubyte		>037
10695# skip DOS executables CPQ0TD.DRV E30ODI.COM IBM0MONO.DRV by looking for printable 1st character of 1st memo item
10696>>>>>>>>>>>512	ubyte		>037
10697# unusual dBASE III DBT like adressen.dbt
10698>>>>>>>>>>>>0	use		dbase3-memo-print
10699# dBASE III DBT like angest.dbt, or garbage PCX DBF
10700>>>>>>>>8	ubelong		!0
10701# skip PCX and some DBF by test for for reserved NULL bytes
10702>>>>>>>>>510	ubeshort	0
10703# skip bad symples with improbably high free block index above 2 GiB file limit
10704>>>>>>>>>>0	ulelong		<0x400000
10705# skip AI070GEP.EPS by printable 1st character of 1st memo item
10706>>>>>>>>>>>512	ubyte		>037
10707# skip some Microsoft Visual C, OMF library like: BZ2.LIB WATTCPWL.LIB ZLIB.LIB
10708>>>>>>>>>>>>512	ubyte		<0200
10709# skip gluon-ffhat-1.0-tp-link-tl-wr1043n-nd-v2-sysupgrade.bin by printable 2nd character
10710>>>>>>>>>>>>>513 ubyte		>037
10711>>>>>>>>>>>>>>0	use		dbase3-memo-print
10712# dBASE IV DBT with positive block size
10713>>>>>>>20	uleshort	>0
10714# dBASE IV DBT with valid block length like 512, 1024
10715# multiple of 2 in between 16 and 16 K ,implies upper and lower bits are zero
10716# skip also 3600h 3E00h size
10717>>>>>>>>20	uleshort&0xE00f	0
10718>>>>>>>>>0	use		dbase4-memo-print
10719
10720#		Print the information of dBase III DBT memo file
107210	name				dbase3-memo-print
10722>0	ubyte			x		dBase III DBT
10723!:mime	application/x-dbt
10724!:ext	dbt
10725# instead 3 as version number 0 for unusual examples like biblio.dbt
10726>16	ubyte			!3		\b, version number %u
10727# Number of next available block for appending data
10728#>0	lelong			=0		\b, next free block index %u
10729>0	lelong			!0		\b, next free block index %u
10730# no positive block length
10731#>20	uleshort		=0		\b, block length %u
10732>20	uleshort		!0		\b, block length %u
10733# dBase III memo field terminated by \032\032
10734# like: "WHAT IS XBASE" test.dbt "Borges, Malte" biblio.dbt "First memo\032\032" T2.DBT
10735>512	string			>\0		\b, 1st item "%s"
10736# For DEBUGGING
10737#>512	ubelong			x		\b, 1ST item %#8.8x
10738# https://www.clicketyclick.dk/databases/xbase/format/dbt.html
10739#		Print the information of dBase IV DBT memo file
107400	name				dbase4-memo-print
10741>0		lelong		x		dBase IV DBT
10742!:mime	application/x-dbt
10743!:ext dbt
10744# 8 character shorted main name of corresponding dBASE IV DBF file
10745>8		ubelong		>0x20000000
10746# skip unusual like for angest.dbt
10747>>20		uleshort	>0
10748>>>8		string		>\0		\b of %-.8s.DBF
10749# value 0 implies 512 as size
10750#>4		ulelong		=0		\b, blocks size %u
10751# size of blocks not reliable like 0x2020204C in angest.dbt
10752>4		ulelong		!0
10753>>4		ulelong&0x0000003f	0	\b, blocks size %u
10754# dBase IV DBT with positive block length (found 512 , 1024)
10755>20		uleshort	>0		\b, block length %u
10756# next available block
10757#>0		lelong		=0		\b, next free block index %u
10758>0		lelong		!0		\b, next free block index %u
10759>20		uleshort	>0
10760>>(20.s)	ubelong		x
10761>>>&-4		use		dbase4-memofield-print
10762# unusual dBase IV DBT without block length (implies 512 as length)
10763>20		uleshort	=0
10764>>512		ubelong		x
10765>>>&-4		use				dbase4-memofield-print
10766#		Print the information of dBase IV memo field
107670	name			dbase4-memofield-print
10768# free dBase IV memo field
10769>0		ubelong		!0xFFFF0800
10770>>0		lelong		x		\b, next free block %u
10771>>4		lelong		x		\b, next used block %u
10772# used dBase IV memo field
10773>0		ubelong		=0xFFFF0800
10774# length of memo field
10775>>4		lelong		x		\b, field length %d
10776>>>8		string		>\0		\b, 1st used item "%s"
10777# http://www.dbfree.org/webdocs/1-documentation/0018-developers_stuff_(advanced)/os_related_stuff/xbase_file_format.htm
10778#		Print the information of FoxPro FPT memo file
107790	name				foxpro-memo-print
10780>0		belong		x		FoxPro FPT
10781!:mime	application/x-fpt
10782!:ext	fpt
10783# Size of blocks for FoxPro ( 64,256 ); probably a multiple of two
10784>6		ubeshort	x		\b, blocks size %u
10785# next available block
10786#>0		belong		=0		\b, next free block index %u
10787>0		belong		!0		\b, next free block index %u
10788# field type ( 0~picture, 1~memo, 2~object )
10789>512		ubelong		<3		\b, field type %u
10790# length of memo field
10791>512		ubelong		1
10792>>516		belong		>0		\b, field length %d
10793>>>520		string		>\0		\b, 1st item "%s"
10794
10795# Summary:	DBASE Compound Index file *.CDX and FoxPro index *.IDX
10796# From:		Joerg Jenderek
10797# URL:		https://www.clicketyclick.dk/databases/xbase/format/cdx.html
10798#		https://www.clicketyclick.dk/databases/xbase/format/idx.html
10799#		https://www.clicketyclick.dk/databases/xbase/format/idx_comp.html
10800# Reference:	https://mark0.net/download/triddefs_xml.7z/defs/s/sybase-ianywhere-cdx.trid.xml
10801#		https://mark0.net/download/triddefs_xml.7z/defs/c/cdx-vfp7.trid.xml
10802# like: kunde.cdx
108030	ulelong		0x1C00
10804>0	use			xbase-index
10805# like: SYLLABI2.CDX SYLLABUS.CDX
108060	ulelong		0x0800
10807>0	use			xbase-index
10808# often in xBase index pointer to root node 400h
108090	ulelong		0x0400
10810# skip most Maple help database *.hdb with version tag handled by ./maple
10811>1028	string		!version
10812# skip Maple help database hsum.hdb checking for valid reserved area
10813>>492	quad		=0
10814# skip remaining Maple help database *.hdb by checking key length
10815#>>>12	uleshort	!0x000F			KEY_LENGTHVALID
10816>>>0	use			xbase-index
10817#	display information about dBase/FoxPro index
108180	name			xbase-index
10819>0	ulelong		x			xBase
10820!:mime	application/x-dbase-index
10821>14	ubyte		&0x40			compound index
10822# DCX for FoxPro database index like: TESTDATA.DCX
10823!:ext	cdx/dcx
10824>14	ubyte		^0x40			index
10825# only 1 example like: TEST.IDX
10826!:ext	idx
10827# pointer to root node like: 1C00h 800h often 400h
10828>0	ulelong		!0x400			\b, root pointer %#x
10829# Pointer to free node list: often 0 but -1 if not present
10830>4	ulelong		!0			\b, free node pointer %#x
10831# MAYBE number of pages in file (Foxbase, FoxPro 1.x) or
10832# http://www.foxpert.com/foxpro/knowlbits/files/knowlbits_200708_1.HTM
10833# Whenever Visual FoxPro updates the index file it increments this reserved field
10834# Reserved for internal use like: 02000000h 03000000h 460c0000h 780f0000h 89000000h 9fdc0100h often 0
10835>8	ulelong		!0			\b, reserved counter %#x
10836# length of key like: mostly 000Ah 0028h (TEST.IDX)
10837>12	uleshort	!0x000A			\b, key length %#x
10838# index options like: 24h E0h E8h
10839# 1~a unique index 8~index has FOR clause 32~compact index format 64~compound index header
10840# 16~Bit vector (SoftC) 128~Structure index (FoxPro)
10841>14	ubyte		x			\b, index options (%#x
10842>14	ubyte		&0x01			\b, unique
10843>14	ubyte		&0x08			\b, has FOR clause
10844>14	ubyte		&0x10			\b, bit vector (SoftC)
10845>14	ubyte		&0x20			\b, compact format
10846#>14	ubyte		&0x40			\b, compound header
10847>14	ubyte		&0x80			\b, structure
10848>14	ubyte		x			\b)
10849# WHAT EXACTLY IS THAT? index signature like: 0 (sybase-ianywhere-cdx.trid.xml) 1 (cdx-vfp7.trid.xml)
10850>15	ubyte		!0			\b, index signature %u
10851# reserved area (0-bytes) til about 500, but not for uncompressed Index files *.idx
10852>16	quad		!0			\b, at 16 reserved %#llx
10853>492	quad		!0			\b, at 492 reserved %#llx
10854# for IDX variant
10855#>14	ubyte		^0x40			IDX
10856# for CDX variant
10857>14	ubyte		&0x40
10858# Ascending or descending: 0~ascending 1~descending
10859>>502	uleshort	x			\b, sort order %u
10860# Total expression length (FoxPro 2) like: 0 1
10861>>504	uleshort	!0			\b, expression length %u
10862# FOR expression pool length like: 1
10863>>506	uleshort	!1			\b, FOR expression pool length %#x
10864# reserved for internal use like: 0
10865>>508	uleshort	!0			\b, at 0x508 reserved %#x
10866# Key expression pool length like: 1
10867>>510	uleshort	!1			\b, key expression pool length %#x
10868# 512 - 1023 Key & FOR expression pool (uncompiled)
10869>>512	quad		!0			\b, key expression pool %#llx
10870#>>520	quad		!0			\b, key expression pool %#llx
10871
10872# Summary:	dBASE IV Printer Form *.PRF
10873# From:		Joerg Jenderek
10874# URL:		https://en.wikipedia.org/wiki/.dbf#Other_file_types_found_in_dBASE
10875# Reference:	https://mark0.net/download/triddefs_xml.7z/defs/p/prf-dbase.trid.xml
108760	ubeshort	0x0400
10877# skip some Xbase Index files *.ndx and Infocom (Z-machine 4) *.z4 handled by ./adventure
10878# by looking for valid printer driver name extension
10879>0x58	search/8	.PR2
10880>>0	use			xbase-prf
10881#	display information of dbase print form like printer driver *.PR2
108820	name			xbase-prf	dBase Printer Form
10883!:mime	application/x-dbase-prf
10884!:ext	prf
10885# MAYBE version? like: 4~DBASE IV
10886#>0	ubyte		x			\b, version %u
10887# MAYBE flag like: 1~with output file name 0~not
10888#>2	ubyte		!0			\b, flag %u
10889# optional printer text output file name like E:\DBASE\IV\T6.txt
10890>3	string		>\0			\b, output file %s
10891# probably padding with nils til 0x53
10892#>0x48	 uquad		!0			\b, at 0x48 padding %#llx
10893# dBASE IV printer driver name like: Generic.PR2 ASCII.PR2
10894>0x56	string		>\0			\b, using printer driver %s
10895# 2 is probably last character of previous dBASE printer driver name
10896#>0x60	ubyte		!0x32			\b, at 0x60 %#x
10897# probably padding with nils til 0xa8
10898#>0x61	uquad		!0			\b, at 0x61 padding %#llx
10899# unknown 0x03020300 0x03020100 at 0xa8
10900>0xa8	ubelong 	x			\b, at 0xa8 unknown %#8.8x
10901# probably padding with nils til 0x2aa
10902#>0x2a0	uquad		!0			\b, at 0x2a0 padding %#llx
10903# unknown 0x100ff7f01000001 at 0x2AB
10904>0x2ab	ubequad		!0x100ff7f01000001	\b, at 0x2ab unknown %#llx
10905# unknown 0x0042 at 0x2b3
10906>0x2b3	ubeshort 	!0x0042			\b, at 0x2b3 unknown %#4.4x
10907# unknown last 4 bytes at 0x2b6 like: 0 0x23
10908>0x2b6	ubelong		!0			\b, at 0x2b6 unknown %#8.8x
10909
10910# TODO:
10911# DBASE index file *.NDX
10912# dBASE compiled Format *.FMO
10913# FoxPro Database memo file *.DCT
10914# FoxPro Forms Memo *.SCT
10915# FoxPro Generated Menu Program *.MPR
10916# FoxPro Report *.FRX
10917# FoxPro Report Memo *.FRT
10918# Foxpro Generated Screen Program *.SPR
10919# Foxpro memo *.PJT
10920## End of XBase database stuff
10921
10922# MS Access database
109234	string	Standard\ Jet\ DB	Microsoft Access Database
10924!:mime	application/x-msaccess
109254	string	Standard\ ACE\ DB	Microsoft Access Database
10926!:mime	application/x-msaccess
10927
10928# From: Joerg Jenderek
10929# URL: http://fileformats.archiveteam.org/wiki/Extensible_Storage_Engine
10930# Reference: https://github.com/libyal/libesedb/archive/master.zip
10931#	libesedb-master/documentation/
10932#	Extensible Storage Engine (ESE) Database File (EDB) format.asciidoc
10933# Note: also known as "JET Blue". Used by numerous Windows components such as
10934# Windows Search, Mail, Exchange and Active Directory.
109354	ubelong		0xefcdab89
10936# unknown1
10937>132	ubelong		0		Extensible storage engine
10938!:mime	application/x-ms-ese
10939# file_type 0~database 1~stream
10940>>12	ulelong		0		DataBase
10941# Security DataBase (sdb)
10942!:ext	edb/sdb
10943>>12	ulelong		1		STreaMing
10944!:ext	stm
10945# format_version 620h
10946>>8	uleshort	x		\b, version %#x
10947>>10	uleshort	>0		revision %#4.4x
10948>>0	ubelong		x	 	\b, checksum %#8.8x
10949# Page size 4096 8192 32768
10950>>236	ulequad		x		\b, page size %lld
10951# database_state
10952>>52	ulelong		1		\b, JustCreated
10953>>52	ulelong		2		\b, DirtyShutdown
10954#>>52	ulelong		3		\b, CleanShutdown
10955>>52	ulelong		4		\b, BeingConverted
10956>>52	ulelong		5		\b, ForceDetach
10957# Windows NT major version when the databases indexes were updated.
10958>>216	ulelong		x		\b, Windows version %d
10959# Windows NT minor version
10960>>220	ulelong		x		\b.%d
10961
10962# From: Joerg Jenderek
10963# URL: https://forensicswiki.org/wiki/Windows_Application_Compatibility
10964# Note: files contain application compatibility fixes, application compatibility modes and application help messages.
109658	string		sdbf
10966>7	ubyte		0
10967# TAG_TYPE_LIST+TAG_INDEXES
10968>>12	uleshort	0x7802		Windows application compatibility Shim DataBase
10969# version? 2 3
10970#>>>0	ulelong		x		\b, version %d
10971!:mime	application/x-ms-sdb
10972!:ext	sdb
10973
10974# TDB database from Samba et al - Martin Pool <mbp@samba.org>
109750	string	TDB\ file		TDB database
10976>32	lelong	0x2601196D		version 6, little-endian
10977>>36	lelong	x			hash size %d bytes
10978
10979# SE Linux policy database
109800       lelong  0xf97cff8c      SE Linux policy
10981>16     lelong  x               v%d
10982>20     lelong  1      MLS
10983>24     lelong  x       %d symbols
10984>28     lelong  x       %d ocons
10985
10986# ICE authority file data (Wolfram Kleff)
109872	string		ICE		ICE authority data
10988
10989# X11 Xauthority file (Wolfram Kleff)
1099010	string		MIT-MAGIC-COOKIE-1	X11 Xauthority data
1099111	string		MIT-MAGIC-COOKIE-1	X11 Xauthority data
1099212	string		MIT-MAGIC-COOKIE-1	X11 Xauthority data
1099313	string		MIT-MAGIC-COOKIE-1	X11 Xauthority data
1099414	string		MIT-MAGIC-COOKIE-1	X11 Xauthority data
1099515	string		MIT-MAGIC-COOKIE-1	X11 Xauthority data
1099616	string		MIT-MAGIC-COOKIE-1	X11 Xauthority data
1099717	string		MIT-MAGIC-COOKIE-1	X11 Xauthority data
1099818	string		MIT-MAGIC-COOKIE-1	X11 Xauthority data
10999
11000# From: Maxime Henrion <mux@FreeBSD.org>
11001# PostgreSQL's custom dump format, Maxime Henrion <mux@FreeBSD.org>
110020	string		PGDMP		PostgreSQL custom database dump
11003>5	byte		x		- v%d
11004>6	byte		x		\b.%d
11005>5	beshort		<0x101		\b-0
11006>5	beshort		>0x100
11007>>7	byte		x		\b-%d
11008
11009# Type: Advanced Data Format (ADF) database
11010# URL:  https://www.grc.nasa.gov/WWW/cgns/adf/
11011# From: Nicolas Chauvat <nicolas.chauvat@logilab.fr>
110120	string	@(#)ADF\ Database	CGNS Advanced Data Format
11013
11014# Tokyo Cabinet magic data
11015# http://tokyocabinet.sourceforge.net/index.html
110160	string		ToKyO\ CaBiNeT\n	Tokyo Cabinet
11017>14	string		x			\b (%s)
11018>32	byte		0			\b, Hash
11019!:mime	application/x-tokyocabinet-hash
11020>32	byte		1			\b, B+ tree
11021!:mime	application/x-tokyocabinet-btree
11022>32	byte		2			\b, Fixed-length
11023!:mime	application/x-tokyocabinet-fixed
11024>32	byte		3			\b, Table
11025!:mime	application/x-tokyocabinet-table
11026>33	byte		&1			\b, [open]
11027>33	byte		&2			\b, [fatal]
11028>34	byte		x			\b, apow=%d
11029>35	byte		x			\b, fpow=%d
11030>36	byte		&0x01			\b, [large]
11031>36	byte		&0x02			\b, [deflate]
11032>36	byte		&0x04			\b, [bzip]
11033>36	byte		&0x08			\b, [tcbs]
11034>36	byte		&0x10			\b, [excodec]
11035>40	lequad		x			\b, bnum=%lld
11036>48	lequad		x			\b, rnum=%lld
11037>56	lequad		x			\b, fsiz=%lld
11038
11039# Type:	QDBM Quick Database Manager
11040# From:	Benoit Sibaud <bsibaud@april.org>
110410	string		\\[depot\\]\n\f		Quick Database Manager, little endian
110420	string		\\[DEPOT\\]\n\f		Quick Database Manager, big endian
11043
11044# Type:	TokyoCabinet database
11045# URL:	http://tokyocabinet.sourceforge.net/
11046# From:	Benoit Sibaud <bsibaud@april.org>
110470	string		ToKyO\ CaBiNeT\n	TokyoCabinet database
11048>14	string		x			(version %s)
11049
11050# From:  Stephane Blondon https://www.yaal.fr
11051# Database file for Zope (done by FileStorage)
110520	string	FS21	Zope Object Database File Storage v3 (data)
110530	string	FS30	Zope Object Database File Storage v4 (data)
11054
11055# Cache file for the database of Zope (done by ClientStorage)
110560	string		ZEC3	Zope Object Database Client Cache File (data)
11057
11058# IDA (Interactive Disassembler) database
110590	string		IDA1	IDA (Interactive Disassembler) database
11060
11061# Hopper (reverse engineering tool) https://www.hopperapp.com/
110620	string		hopperdb	Hopper database
11063
11064# URL: https://en.wikipedia.org/wiki/Panorama_(database_engine)
11065# Reference: http://www.provue.com/Panorama/
11066# From: Joerg Jenderek
11067# NOTE: test only versions 4 and 6.0 with Windows
11068# length of Panorama database name
110695	ubyte				>0
11070# look after database name for "some" null bits
11071>(5.B+7)	ubelong&0xF3ffF000	0
11072# look for first keyword
11073>>&1		search/2		DESIGN		Panorama database
11074#!:mime	application/x-panorama-database
11075!:apple	KASXZEPD
11076!:ext	pan
11077# database name
11078>>>5	pstring				x		\b, "%s"
11079
11080#
11081#
11082# askSam Database by Stefan A. Haubenthal <polluks@web.de>
110830	string	askw40\0	askSam DB
11084
11085#
11086#
11087# MUIbase Database Tool by Stefan A. Haubenthal <polluks@web.de>
110880	string	MBSTV\040	MUIbase DB
11089>6	string	x		version %s
11090
11091#
11092# CDB database
110930	string	NBCDB\012	NetBSD Constant Database
11094>7	byte	x		\b, version %d
11095>8	string	x		\b, for '%s'
11096>24	lelong	x		\b, datasize %d
11097>28	lelong	x		\b, entries %d
11098>32	lelong	x		\b, index %d
11099>36	lelong	x		\b, seed %#x
11100
11101#
11102# Redis RDB - https://redis.io/topics/persistence
111030	string	REDIS			Redis RDB file,
11104>5	regex	[0-9][0-9][0-9][0-9]	version %s
11105
11106# Mork database.
11107# Used by older versions of Mozilla Suite and Firefox,
11108# and current versions of Thunderbird.
11109# From: David Korth <gerbilsoft@gerbilsoft.com>
111100	string	//\ <!--\ <mdb:mork:z\ v="	Mozilla Mork database
11111>23	string	x		\b, version %.3s
11112
11113# URL:		https://en.wikipedia.org/wiki/Management_Information_Format
11114# Reference:	https://www.dmtf.org/sites/default/files/standards/documents/DSP0005.pdf
11115# From:		Joerg Jenderek
11116# Note:		only tested with monitor asset reports of Dell Display Manager
11117#		skip start like Language=fr|CA|iso8859-1
111180	search/27/C	Start\040Component	DMI Management Information Format
11119#!:mime	text/plain
11120!:mime	text/x-dmtf-mif
11121!:ext	mif
11122
11123
11124#------------------------------------------------------------------------------
11125# $File: dataone,v 1.3 2022/04/18 21:38:10 christos Exp $
11126#
11127# DataONE- files from Dave Vieglais <dave.vieglais@gmail.com> &
11128#                     Pratik Shrivastava <pratikshrivastava23@gmail.com>
11129#
11130# file formats:   https://cn.dataone.org/cn/v2/formats
11131#------------------------------------------------------------------------------
11132
11133# EML (Ecological Metadata Language Format)
111340	string	\<?xml\ version=
11135>&0	regex/1024	eml-[0-9]\\.[0-9]\\.[0-9]+	eml://ecoinformatics.org/%s
11136
11137# onedcx (DataONE Dublin Core Extended v1.0)
11138>&0	regex/1024	onedcx/v[0-9]\\.[0-9]+		https://ns.dataone.org/metadata/schema/onedcx/v1.0
11139
11140# FGDC-STD-001-1998 (Content Standard for Digital Geospatial Metadata,
11141# version 001-1998)
11142>&0	search/1024	fgdc				FGDC-STD-001-1998
11143
11144# Mercury (Oak Ridge National Lab Mercury Metadata version 1.0)
11145>&0	regex/1024	mercury/terms/v[0-9]\\.[0-9]	https://purl.org/ornl/schema/mercury/terms/v1.0
11146
11147# ISOTC211 (Geographic MetaData (GMD) Extensible Markup Language)
11148>&0	search/1024	isotc211
11149>>&0	search/1024	eng;USA				https://www.isotc211.org/2005/gmd
11150
11151# ISOTC211 (NOAA Variant Geographic MetaData (GMD) Extensible Markup Language)
11152>>&0	regex/1024	gov\\.noaa\\.nodc:[0-9]+		https://www.isotc211.org/2005/gmd-noaa
11153
11154# ISOTC211 PANGAEA Variant Geographic MetaData (GMD) Extensible Markup Language
11155>>&0	regex/1024	pangaea\\.dataset[0-9][0-9][0-9][0-9][0-9][0-9]+	https://www.isotc211.org/2005/gmd-pangaea
11156!:mime	text/xml
11157
11158
11159# Object Reuse and Exchange Vocabulary
111600	string	\<?xml\ version=
11161>&0	search/1024	rdf
11162>>&0	search/1024	openarchives	https://www.openarchives.org/ore/terms
11163!:mime application/rdf+xml
11164
11165
11166# Dryad Metadata Application Profile Version 3.1
111670	string	<DryadData
11168>&0	regex/1024	dryad-bibo/v[0-9]\\.[0-9]	https://datadryad.org/profile/v3.1
11169!:mime	text/xml
11170
11171#------------------------------------------------------------------------------
11172# $File: dbpf,v 1.3 2019/04/19 00:42:27 christos Exp $
11173# dppf:	Maxis Database Packed Files, the stored data file format used by all
11174#	Maxis games after the Sims: http://wiki.niotso.org/DBPF
11175# 	https://www.wiki.sc4devotion.com/index.php?title=DBPF
11176#	13 Oct 2017, Kip Warner <kip at thevertigo dot com>
111770	string	DBPF	Maxis Database Packed File
11178>4	ulelong	x	\b, version: %u.
11179>>8	ulelong	x	\b%u
11180>>>36	ulelong	x       \b, files: %u
11181>>24	ledate	!0	\b, created: %s
11182>>28	ledate	!0	\b, modified: %s
11183!:ext	dbpf/package/dat/sc4
11184!:mime	application/x-maxis-dbpf
11185#------------------------------------------------------------------------------
11186# $File: der,v 1.5 2022/07/30 18:07:34 christos Exp $
11187# der: file(1) magic for DER encoded files
11188#
11189
11190# Certificate information piece
111910	name	certinfo
11192>0	der	seq
11193>>&0	der	set
11194>>>&0	der	seq
11195>>>>&0	der	obj_id3=550406
11196>>>>&0	der	prt_str=x	\b, countryName=%s
11197>>&0	der	set
11198>>>&0	der	seq
11199>>>>&0	der	obj_id3=550408
11200>>>>&0	der	utf8_str=x	\b, stateOrProvinceName=%s
11201>>&0	der	set
11202>>>&0	der	seq
11203>>>>&0	der	obj_id3=55040a
11204>>>>&0	der	utf8_str=x	\b, organizationName=%s
11205>>&0	der	set
11206>>>&0	der	seq
11207>>>>&0	der	obj_id3=550403
11208>>>>&0	der	utf8_str=x	\b, commonName=%s
11209>>&0	der	seq
11210
11211# Certificate requests
112120	der	seq
11213>&0	der	seq
11214>>&0	der	int1=00		DER Encoded Certificate request
11215>>&0	use	certinfo
11216
11217# Key Pairs
112180	der	seq
11219>&0	der	int1=00
11220>&0	der	int65=x
11221>&0	der	int3=010001	DER Encoded Key Pair, 512 bits
11222
112230	der	seq
11224>&0	der	int1=00
11225>&0	der	int129=x
11226>&0	der	int3=010001	DER Encoded Key Pair, 1024 bits
11227
112280	der	seq
11229>&0	der	int1=00
11230>&0	der	int257=x
11231>&0	der	int3=010001	DER Encoded Key Pair, 2048 bits
11232
112330	der	seq
11234>&0	der	int1=00
11235>&0	der	int513=x
11236>&0	der	int3=010001	DER Encoded Key Pair, 4096 bits
11237
112380	der	seq
11239>&0	der	int1=00
11240>&0	der	int1025=x
11241>&0	der	int3=010001	DER Encoded Key Pair, 8192 bits
11242
112430	der	seq
11244>&0	der	int1=00
11245>&0	der	int2049=x
11246>&0	der	int3=010001	DER Encoded Key Pair, 16k bits
11247
112480	der	seq
11249>&0	der	int1=00
11250>&0	der	int4097=x
11251>&0	der	int3=010001	DER Encoded Key Pair, 32k bits
11252
11253# Certificates
112540	der	seq
11255>&0	der	seq
11256>>&0	der	int2=0dfa	DER Encoded Certificate, 512 bits
11257>>&0	der	int2=0dfb	DER Encoded Certificate, 1024 bits
11258>>&0	der	int2=0dfc	DER Encoded Certificate, 2048 bits
11259>>&0	der	int2=0dfd	DER Encoded Certificate, 4096 bits
11260>>&0	der	int2=0dfe	DER Encoded Certificate, 8192 bits
11261>>&0	der	int2=0dff	DER Encoded Certificate, 16k bits
11262>>&0	der	int2=0e04	DER Encoded Certificate, 32k bits
11263>>&0	der	int2=x		DER Encoded Certificate, ? bits (%s)
11264>>&0	der	seq
11265>>>&0	der	obj_id9=2a864886f70d010105	\b, sha1WithRSAEncryption
11266>>>&0	der	obj_id9=x			\b, ? Encryption (%s)
11267>>>&0	der	null
11268>>&0	der	seq
11269>>>&0	der	set
11270>>>>&0	der	seq
11271>>>>>&0	der	obj_id3=550406
11272>>>>>&0	der	prt_str=x	\b, countryName=%s
11273>>>&0	der	set
11274>>>>&0	der	seq
11275>>>>>&0	der	obj_id3=550408
11276>>>>>&0	der	prt_str=x	\b, stateOrProvinceName=%s
11277>>>&0	der	set
11278>>>>&0	der	seq
11279>>>>>&0	der	obj_id3=550407
11280>>>>>&0	der	prt_str=x	\b, localityName=%s
11281>>>&0	der	set
11282>>>>&0	der	seq
11283>>>>>&0	der	obj_id3=55040a
11284>>>>>&0	der	prt_str=x	\b, organizationName=%s
11285>>>&0	der	set
11286>>>>&0	der	seq
11287>>>>>&0	der	obj_id3=55040b
11288>>>>>&0	der	prt_str=x	\b, organizationUnitName=%s
11289>>>&0	der	set
11290>>>>&0	der	seq
11291>>>>>&0	der	obj_id3=550403
11292>>>>>&0	der	prt_str=x	\b, commonName=%s
11293>>>&0	der	set
11294>>>>&0	der	seq
11295>>>>>&0	der	obj_id9=2a864886f70d010901
11296>>>>>&0	der	ia5_str=x	\b, emailAddress=%s
11297#>>&0	der	seq
11298#>>>&0	der	utc_time=x	\b, utcTime=%s
11299#>>>&0	der	utc_time=x	\b, utcTime=%s
11300>>&0	use	certinfo
11301
113020	der	seq
11303>&0	der	seq
11304>>&0	der	eoc
11305>>>&0	der	int1=02		Certificate, Version=3
11306>>>&0	der	int1=x		Certificate, Version=%s
11307>>&0	der	int9=x		\b, Serial=%s
11308>>&0	der	seq
11309>>>&0	der     obj_id9=2a864886f70d01010b
11310>>>&0	der	null
11311>>&0	der	seq
11312>>>&0	der	set
11313>>>>&0	der	seq
11314>>>>>&0	der     obj_id3=550403
11315>>>>>&0	der     utf8_str=x      \b, Issuer=%s
11316#>>&0	der	seq
11317#>>>&0	der	utc_time=x	\b, not-valid-before=%s
11318#>>>&0	der	utc_time=x	\b, not-valid-after=%s
11319>>&0	der	seq
11320>>>&0	der	set
11321>>>>&0	der	seq
11322>>>>>&0	der     obj_id3=550403
11323>>>>>&0	der     utf8_str=x      \b, Subject=%s
11324
11325#------------------------------------------------------------------------------
11326# $File: diamond,v 1.7 2009/09/19 16:28:08 christos Exp $
11327# diamond:  file(1) magic for Diamond system
11328#
11329# ... diamond is a multi-media mail and electronic conferencing system....
11330#
11331# XXX - I think it was either renamed Slate, or replaced by Slate....
11332#
11333#	The full deal is too long...
11334#0	string	<list>\n<protocol\ bbn-multimedia-format>	Diamond Multimedia Document
113350	string	=<list>\n<protocol\ bbn-m	Diamond Multimedia Document
11336
11337#------------------------------------------------------------------------------
11338# $File: dif,v 1.1 2020/04/09 19:14:01 christos Exp $
11339# dif:  file(1) magic for DIF text files
11340
11341#------------------------------------------------------------------------------
11342# From:	Joerg Jenderek
11343# URL:	http://en.wikipedia.org/wiki/Data_Interchange_Format
11344#	http://fileformats.archiveteam.org/wiki/Data_Interchange_Format
11345# Note:	called by TrID "Data Interchange Format",
11346#	by DROID x-fmt/368 "VisiCalc Database"
113470	string		TABLE
11348# skip text starting with TABLE by looking for numeric version on 2nd line
11349>6	search/2	0,
11350# skip DROID x-fmt-41-signature-id-380.dif by looking for key word TUPLES at the beginning
11351>>27	search/128	TUPLES		Data Interchange Format
11352# https://www.pcmatic.com/company/libraries/fileextension/detail.asp?ext=dif.html
11353#!:mime	application/x-dif-spreadsheet	Gnumeric
11354# https://github.com/LibreOffice/online/blob/master/discovery.xml
11355#!:mime	application/x-dif-document	LibreOffice
11356# https://www.wikidata.org/wiki/Wikidata:WikiProject_Informatics/File_formats/Lists/File_formats
11357!:mime	application/x-dif
11358# https://extension.nirsoft.net/dif
11359#!:mime	application/vnd.ms-excel
11360#!:mime	text/plain
11361!:ext	dif
11362# look for double quote 0x22 on 3rd line
11363>>>10	search/3	"
11364# skip if next character also double quote
11365>>>>&0	ubyte		!0x22		\b, generator or table name
11366# comment like EXCEL, pwm enclosed in double quotes
11367>>>>>&-2	string	x		%s
11368
11369
11370#------------------------------------------------------------------------------
11371# $File: diff,v 1.17 2020/08/22 18:16:58 christos Exp $
11372# diff:  file(1) magic for diff(1) output
11373#
113740	search/1	diff\040	diff output text
11375!:mime	text/x-diff
113760	search/1	***\040
11377>&0	search/1024	\n---\040	context diff output text
11378!:mime	text/x-diff
113790	search/1	Only\040in\040 	diff output text
11380!:mime	text/x-diff
113810	search/1	Common\040subdirectories:\040 	diff output text
11382!:mime	text/x-diff
11383
113840	search/1	Index:		RCS/CVS diff output text
11385!:mime	text/x-diff
11386
11387# bsdiff:  file(1) magic for bsdiff(1) output
113880	string/b	BSDIFF40	bsdiff(1) patch file
11389
11390
11391# unified diff
113920	search/4096	---\040
11393>&0	search/1024 	\n
11394>>&0	search/1 	+++\040
11395>>>&0	search/1024 	\n
11396>>>>&0	search/1	@@		unified diff output text
11397!:mime	text/x-diff
11398!:strength + 90
11399
11400# librsync -- the library for network deltas
11401#
11402# Copyright (C) 2001 by Martin Pool.  You may do whatever you want with
11403# this file.
11404#
114050	belong		0x72730236	rdiff network-delta data
11406
114070	belong		0x72730136	rdiff network-delta signature data
11408>4	belong		x		(block length=%d,
11409>8	belong		x		signature strength=%d)
11410
11411#------------------------------------------------------------------------------
11412# $File: digital,v 1.12 2021/07/03 14:01:46 christos Exp $
11413#  Digital UNIX - Info
11414#
114150	string	=!<arch>\n________64E	Alpha archive
11416>22	string	X			-- out of date
11417#
11418
114190	leshort		0603
11420>24	leshort		0410		COFF format alpha pure
11421>24	leshort		0413		COFF format alpha demand paged
11422>>22	leshort&030000	!020000		executable
11423>>22	leshort&020000	!0		dynamically linked
11424>>16	lelong		!0		not stripped
11425>>16	lelong		0		stripped
11426>>27	byte		x		- version %d
11427>>26	byte		x		\b.%d
11428>>28	byte		x		\b-%d
11429>24	leshort		0407		COFF format alpha object
11430>>22	leshort&030000	020000		shared library
11431>>27	byte		x		- version %d
11432>>26	byte		x		\b.%d
11433>>28	byte		x		\b-%d
11434
11435# Basic recognition of Digital UNIX core dumps - Mike Bremford <mike@opac.bl.uk>
11436#
11437# The actual magic number is just "Core", followed by a 2-byte version
11438# number; however, treating any file that begins with "Core" as a Digital
11439# UNIX core dump file may produce too many false hits, so we include one
11440# byte of the version number as well; DU 5.0 appears only to be up to
11441# version 2.
11442#
114430	string		Core\001	Alpha COFF format core dump (Digital UNIX)
11444>24	string		>\0		\b, from '%s'
114450	string		Core\002	Alpha COFF format core dump (Digital UNIX)
11446>24	string		>\0		\b, from '%s'
11447#
11448# The next is incomplete, we could tell more about this format,
11449# but its not worth it.
114500	leshort		0x188	Alpha compressed COFF
114510	leshort		0x18f	Alpha u-code object
11452#
11453#
11454# Some other interesting Digital formats,
114550	string	\377\377\177		ddis/ddif
114560	string	\377\377\174		ddis/dots archive
114570	string	\377\377\176		ddis/dtif table data
114580	string	\033c\033		LN03 output
114590	long	04553207		X image
11460#
114610	string	=!<PDF>!\n		profiling data file
11462#
11463# Locale data tables (MIPS and Alpha).
11464#
11465# GRR: line below is too general as it matches also TTComp archive, ASCII, 2K  handled by ./archive
114660	short		0x0501		locale data table
11467>6	short		0x24		for MIPS
11468>6	short		0x40		for Alpha
11469
11470#------------------------------------------------------------------------------
11471# $File: dolby,v 1.9 2019/04/19 00:42:27 christos Exp $
11472# ATSC A/53 aka AC-3 aka Dolby Digital <ashitaka@gmx.at>
11473# from https://www.atsc.org/standards/a_52a.pdf
11474# corrections, additions, etc. are always welcome!
11475#
11476# syncword
114770	beshort		0x0b77	ATSC A/52 aka AC-3 aka Dolby Digital stream,
11478# Proposed audio/ac3 RFC/4184
11479!:mime	audio/vnd.dolby.dd-raw
11480# fscod
11481>4	byte&0xc0 = 0x00	48 kHz,
11482>4	byte&0xc0 = 0x40	44.1 kHz,
11483>4	byte&0xc0 = 0x80	32 kHz,
11484# is this one used for 96 kHz?
11485>4	byte&0xc0 = 0xc0	reserved frequency,
11486#
11487>5	byte&0x07 = 0x00	\b, complete main (CM)
11488>5	byte&0x07 = 0x01	\b, music and effects (ME)
11489>5	byte&0x07 = 0x02	\b, visually impaired (VI)
11490>5	byte&0x07 = 0x03	\b, hearing impaired (HI)
11491>5	byte&0x07 = 0x04	\b, dialogue (D)
11492>5	byte&0x07 = 0x05	\b, commentary (C)
11493>5	byte&0x07 = 0x06	\b, emergency (E)
11494>5	beshort&0x07e0  0x0720	\b, voiceover (VO)
11495>5	beshort&0x07e0 >0x0720	\b, karaoke
11496# acmod
11497>6	byte&0xe0 = 0x00	1+1 front,
11498>>6	byte&0x10 = 0x10	LFE on,
11499>6	byte&0xe0 = 0x20	1 front/0 rear,
11500>>6	byte&0x10 = 0x10	LFE on,
11501>6	byte&0xe0 = 0x40	2 front/0 rear,
11502# dsurmod (for stereo only)
11503>>6	byte&0x18 = 0x00	Dolby Surround not indicated
11504>>6	byte&0x18 = 0x08	not Dolby Surround encoded
11505>>6	byte&0x18 = 0x10	Dolby Surround encoded
11506>>6	byte&0x18 = 0x18	reserved Dolby Surround mode
11507>>6	byte&0x04 = 0x04	LFE on,
11508>6	byte&0xe0 = 0x60	3 front/0 rear,
11509>>6	byte&0x04 = 0x04	LFE on,
11510>6	byte&0xe0 = 0x80	2 front/1 rear,
11511>>6	byte&0x04 = 0x04	LFE on,
11512>6	byte&0xe0 = 0xa0	3 front/1 rear,
11513>>6	byte&0x01 = 0x01	LFE on,
11514>6	byte&0xe0 = 0xc0	2 front/2 rear,
11515>>6	byte&0x04 = 0x04	LFE on,
11516>6	byte&0xe0 = 0xe0	3 front/2 rear,
11517>>6	byte&0x01 = 0x01	LFE on,
11518#
11519>4	byte&0x3e = 0x00	\b, 32 kbit/s
11520>4	byte&0x3e = 0x02	\b, 40 kbit/s
11521>4	byte&0x3e = 0x04	\b, 48 kbit/s
11522>4	byte&0x3e = 0x06	\b, 56 kbit/s
11523>4	byte&0x3e = 0x08	\b, 64 kbit/s
11524>4	byte&0x3e = 0x0a	\b, 80 kbit/s
11525>4	byte&0x3e = 0x0c	\b, 96 kbit/s
11526>4	byte&0x3e = 0x0e	\b, 112 kbit/s
11527>4	byte&0x3e = 0x10	\b, 128 kbit/s
11528>4	byte&0x3e = 0x12	\b, 160 kbit/s
11529>4	byte&0x3e = 0x14	\b, 192 kbit/s
11530>4	byte&0x3e = 0x16	\b, 224 kbit/s
11531>4	byte&0x3e = 0x18	\b, 256 kbit/s
11532>4	byte&0x3e = 0x1a	\b, 320 kbit/s
11533>4	byte&0x3e = 0x1c	\b, 384 kbit/s
11534>4	byte&0x3e = 0x1e	\b, 448 kbit/s
11535>4	byte&0x3e = 0x20	\b, 512 kbit/s
11536>4	byte&0x3e = 0x22	\b, 576 kbit/s
11537>4	byte&0x3e = 0x24	\b, 640 kbit/s
11538
11539#------------------------------------------------------------
11540# $File: dsf,v 1.1 2022/01/08 16:29:18 christos Exp $
11541# dsf:  file(1) magic for DSD Stream File
11542# URL:          https://en.wikipedia.org/wiki/Direct_Stream_Digital
11543# Reference:    https://dsd-guide.com/sites/default/files/white-papers/DSFFileFormatSpec_E.pdf
115440	string	DSD\x20		DSD Stream File,
11545>0x30	leshort	1		mono,
11546>0x30	leshort	2		stereo,
11547>0x30	leshort	3		three-channel,
11548>0x30	leshort	4		quad-channel,
11549>0x30	leshort	5		3.1 4-channel,
11550>0x30	leshort	6		five-channel,
11551>0x30	leshort	7		5.1 surround,
11552>0x30	default	x
11553>>0x30	leshort	x		unknown channel format (%d),
11554>0x38	lelong	2822400		simple-rate,
11555>0x38	lelong	5644800		double-rate,
11556>0x38	default	x
11557>>0x38	lelong	x		%d Hz,
11558>0x3c	leshort	1		1 bit,
11559>0x3c	leshort	8		8 bit,
11560>0x3c	default	x
11561>>0x3c	leshort	x		%d bit,
11562>0x40	lelong	x		%d samples
11563
11564#------------------------------------------------------------------------------
11565# $File: dump,v 1.17 2018/06/26 01:07:17 christos Exp $
11566# dump:  file(1) magic for dump file format--for new and old dump filesystems
11567#
11568# We specify both byte orders in order to recognize byte-swapped dumps.
11569#
115700	name	new-dump-be
11571>4	bedate	x		This dump %s,
11572>8	bedate	x		Previous dump %s,
11573>12	belong	>0		Volume %d,
11574>692	belong	0		Level zero, type:
11575>692	belong	>0		Level %d, type:
11576>0	belong	1		tape header,
11577>0	belong	2		beginning of file record,
11578>0	belong	3		map of inodes on tape,
11579>0	belong	4		continuation of file record,
11580>0	belong	5		end of volume,
11581>0	belong	6		map of inodes deleted,
11582>0	belong	7		end of medium (for floppy),
11583>676	string	>\0		Label %s,
11584>696	string	>\0		Filesystem %s,
11585>760	string	>\0		Device %s,
11586>824	string	>\0		Host %s,
11587>888	belong	>0		Flags %x
11588
115890	name	old-dump-be
11590#>4	bedate	x		This dump %s,
11591#>8	bedate	x		Previous dump %s,
11592>12	belong	>0		Volume %d,
11593>692	belong	0		Level zero, type:
11594>692	belong	>0		Level %d, type:
11595>0	belong	1		tape header,
11596>0	belong	2		beginning of file record,
11597>0	belong	3		map of inodes on tape,
11598>0	belong	4		continuation of file record,
11599>0	belong	5		end of volume,
11600>0	belong	6		map of inodes deleted,
11601>0	belong	7		end of medium (for floppy),
11602>676	string	>\0		Label %s,
11603>696	string	>\0		Filesystem %s,
11604>760	string	>\0		Device %s,
11605>824	string	>\0		Host %s,
11606>888	belong	>0		Flags %x
11607
116080	name	ufs2-dump-be
11609>896	beqdate	x		This dump %s,
11610>904	beqdate	x		Previous dump %s,
11611>12	belong	>0		Volume %d,
11612>692	belong	0		Level zero, type:
11613>692	belong	>0		Level %d, type:
11614>0	belong	1		tape header,
11615>0	belong	2		beginning of file record,
11616>0	belong	3		map of inodes on tape,
11617>0	belong	4		continuation of file record,
11618>0	belong	5		end of volume,
11619>0	belong	6		map of inodes deleted,
11620>0	belong	7		end of medium (for floppy),
11621>676	string	>\0		Label %s,
11622>696	string	>\0		Filesystem %s,
11623>760	string	>\0		Device %s,
11624>824	string	>\0		Host %s,
11625>888	belong	>0		Flags %x
11626
1162724	belong	60012		new-fs dump file (big endian),
11628>0	use	new-dump-be
11629
1163024	belong	60011		old-fs dump file (big endian),
11631>0	use	old-dump-be
11632
1163324	lelong	60012		new-fs dump file (little endian),
11634# to correctly recognize '*.mo' GNU message catalog (little endian)
11635!:strength - 15
11636>0	use	\^new-dump-be
11637
1163824	lelong	60011		old-fs dump file (little endian),
11639>0	use	\^old-dump-be
11640
11641
1164224	belong	0x19540119	new-fs dump file (ufs2, big endian),
11643>0	use	ufs2-dump-be
11644
1164524	lelong	0x19540119	new-fs dump file (ufs2, little endian),
11646>0	use	\^ufs2-dump-be
11647
1164818	leshort	60011		old-fs dump file (16-bit, assuming PDP-11 endianness),
11649>2	medate	x		Previous dump %s,
11650>6	medate	x		This dump %s,
11651>10	leshort	>0		Volume %d,
11652>0	leshort	1		tape header.
11653>0	leshort	2		beginning of file record.
11654>0	leshort	3		map of inodes on tape.
11655>0	leshort	4		continuation of file record.
11656>0	leshort	5		end of volume.
11657>0	leshort	6		map of inodes deleted.
11658>0	leshort	7		end of medium (for floppy).
11659
11660#------------------------------------------------------------------------------
11661# $File: dyadic,v 1.9 2019/04/19 00:42:27 christos Exp $
11662# Dyadic: file(1) magic for Dyalog APL.
11663#
11664# updated by Joerg Jenderek at Oct 2013
11665# https://en.wikipedia.org/wiki/Dyalog_APL
11666# https://www.dyalog.com/
11667# .DXV Dyalog APL External Variable
11668# .DIN Dyalog APL Input Table
11669# .DOT Dyalog APL Output Table
11670# .DFT Dyalog APL Format File
116710	ubeshort&0xFF60	0xaa00
11672# skip biblio.dbt
11673>1	byte		!4
11674# real Dyalog APL have non zero version numbers like 7.3 or 13.4
11675>>2	ubeshort	>0x0000		Dyalog APL
11676>>>1	byte		0x00		aplcore
11677#>>>1	byte		0x00		incomplete workspace
11678# *.DCF Dyalog APL Component File
11679>>>1	byte		0x01		component file 32-bit non-journaled non-checksummed
11680#>>>1	byte		0x01		component file
11681>>>1	byte		0x02		external variable exclusive
11682#>>>1	byte		0x02		external variable
11683# *.DWS Dyalog APL Workspace
11684>>>1	byte		0x03		workspace
11685>>>>7	byte&0x28	0x00		32-bit
11686>>>>7	byte&0x28	0x20		64-bit
11687>>>>7	byte&0x0c	0x00		classic
11688>>>>7	byte&0x0c	0x04		unicode
11689>>>>7	byte&0x88	0x00		big-endian
11690>>>>7	byte&0x88	0x80		little-endian
11691>>>1	byte		0x06		external variable shared
11692# *.DSE Dyalog APL Session , *.DLF Dyalog APL Session Log File
11693>>>1	byte		0x07		session
11694>>>1	byte		0x08		mapped file 32-bit
11695>>>1	byte		0x09		component file 64-bit non-journaled non-checksummed
11696>>>1	byte		0x0a		mapped file 64-bit
11697>>>1	byte		0x0b		component file 32-bit level 1 journaled non-checksummed
11698>>>1	byte		0x0c		component file 64-bit level 1 journaled non-checksummed
11699>>>1	byte		0x0d		component file 32-bit level 1 journaled checksummed
11700>>>1	byte		0x0e		component file 64-bit level 1 journaled checksummed
11701>>>1	byte		0x0f		component file 32-bit level 2 journaled checksummed
11702>>>1	byte		0x10		component file 64-bit level 2 journaled checksummed
11703>>>1	byte		0x11		component file 32-bit level 3 journaled checksummed
11704>>>1	byte		0x12		component file 64-bit level 3 journaled checksummed
11705>>>1	byte		0x13		component file 32-bit non-journaled checksummed
11706>>>1	byte		0x14		component file 64-bit non-journaled checksummed
11707>>>1	byte		0x15		component file under construction
11708>>>1	byte		0x16		DFS component file 64-bit level 1 journaled checksummed
11709>>>1	byte		0x17		DFS component file 64-bit level 2 journaled checksummed
11710>>>1	byte		0x18		DFS component file 64-bit level 3 journaled checksummed
11711>>>1	byte		0x19		external workspace
11712>>>1	byte		0x80		DDB
11713>>>2	byte		x		version %d
11714>>>3	byte		x		\b.%d
11715#>>>2	byte		x		type %d
11716#>>>3	byte		x		subtype %d
11717
11718# *.DXF Dyalog APL Transfer File
117190	short		0x6060		Dyalog APL transfer
11720
11721#------------------------------------------------------------------------------
11722# $File: ebml,v 1.2 2019/04/19 00:42:27 christos Exp $
11723# ebml:  file(1) magic for various Extensible Binary Meta Language
11724# https://www.matroska.org/technical/specs/index.html#track
117250	belong	0x1a45dfa3	EBML file
11726>4	search/b/100	\102\202
11727>>&1	string	x		\b, creator %.8s
11728
11729#------------------------------------------------------------------------------
11730# $File: edid,v 1.1 2019/03/28 12:36:01 christos Exp $
11731# edid:  file(1) magic for EDID dump files
11732
117330	quad	0x00ffffffffffff00	Extended display identification data dump
11734!:mime application/x-edid-dump
11735>18	byte	0x01			Version 1
11736>>19	byte	<0x04			\b.%d
11737>18	byte	0x02			Version 2
11738>>19	byte	0x00			\b.0
11739
11740#------------------------------------------------------------------------------
11741# $File: editors,v 1.12 2020/10/11 20:28:07 christos Exp $
11742# T602 editor documents
11743# by David Necas <yeti@physics.muni.cz>
117440	string	@CT\ 	T602 document data,
11745>4	string	0	Kamenicky
11746>4	string	1	CP 852
11747>4	string	2	KOI8-CS
11748>4	string	>2	unknown encoding
11749
11750# Vi IMproved Encrypted file
11751# by David Necas <yeti@physics.muni.cz>
11752# updated by Osman Surkatty
117530	string	VimCrypt~	Vim encrypted file data
11754>9	string	01!		with zip cryptmethod
11755>9	string	02!		with blowfish cryptmethod
11756>9	string	03!		with blowfish2 cryptmethod
11757
117580	name	vimnanoswap
11759>67	byte	0
11760>>107	byte	0
11761#>>>2	string	x	%s swap file
11762>>>24	ulelong	x	\b, pid %d
11763>>>28	string	>\0	\b, user %s
11764>>>68	string	>\0	\b, host %s
11765>>>108	string	>\0	\b, file %s
11766>>>1007	byte	0x55	\b, modified
11767
11768# Vi IMproved Swap file
11769# by Sven Wegener <swegener@gentoo.org>
117700	string  b0VIM\ 		Vim swap file
11771>&0	string  >\0		\b, version %s
11772>0	use	vimnanoswap
11773
11774
11775# Lock/swap file for several editors, at least
11776# Vi IMproved and nano
117770	string	b0nano		Nano swap file
11778>0	use	vimnanoswap
11779
11780# kate (K Advanced Text Editor)
117810	string	\x00\x00\x00\x12Kate\ Swap\ File\ 2.0\x00	Kate swap file
11782
11783#------------------------------------------------------------------------------
11784# $File: efi,v 1.5 2014/04/30 21:41:02 christos Exp $
11785# efi:  file(1) magic for Universal EFI binaries
11786
117870	lelong	0x0ef1fab9
11788>4	lelong	1		Universal EFI binary with 1 architecture
11789>>&0	lelong	7		\b, i386
11790>>&0	lelong	0x01000007	\b, x86_64
11791>4	lelong	2		Universal EFI binary with 2 architectures
11792>>&0	lelong	7		\b, i386
11793>>&0	lelong	0x01000007	\b, x86_64
11794>>&20	lelong	7		\b, i386
11795>>&20	lelong	0x01000007	\b, x86_64
11796>4	lelong	>2		Universal EFI binary with %d architectures
11797
11798#------------------------------------------------------------------------------
11799# $File: elf,v 1.87 2021/05/25 15:19:51 christos Exp $
11800# elf:  file(1) magic for ELF executables
11801#
11802# We have to check the byte order flag to see what byte order all the
11803# other stuff in the header is in.
11804#
11805# What're the correct byte orders for the nCUBE and the Fujitsu VPP500?
11806#
11807# Created by: unknown
11808# Modified by (1): Daniel Quinlan <quinlan@yggdrasil.com>
11809# Modified by (2): Peter Tobias <tobias@server.et-inf.fho-emden.de> (core support)
11810# Modified by (3): Christian 'Dr. Disk' Hechelmann <drdisk@ds9.au.s.shuttle.de> (fix of core support)
11811# Modified by (4): <gerardo.cacciari@gmail.com> (VMS Itanium)
11812# Modified by (5): Matthias Urlichs <smurf@debian.org> (Listing of many architectures)
11813
118140	name		elf-mips
11815>0	lelong&0xf0000000	0x00000000	MIPS-I
11816>0	lelong&0xf0000000	0x10000000	MIPS-II
11817>0	lelong&0xf0000000	0x20000000	MIPS-III
11818>0	lelong&0xf0000000	0x30000000	MIPS-IV
11819>0	lelong&0xf0000000	0x40000000	MIPS-V
11820>0	lelong&0xf0000000	0x50000000	MIPS32
11821>0	lelong&0xf0000000	0x60000000	MIPS64
11822>0	lelong&0xf0000000	0x70000000	MIPS32 rel2
11823>0	lelong&0xf0000000	0x80000000	MIPS64 rel2
11824>0	lelong&0xf0000000	0x90000000	MIPS32 rel6
11825>0	lelong&0xf0000000	0xa0000000	MIPS64 rel6
11826
118270	name		elf-sparc
11828>0	lelong&0x00ffff00	0x00000100	V8+ Required,
11829>0	lelong&0x00ffff00	0x00000200	Sun UltraSPARC1 Extensions Required,
11830>0	lelong&0x00ffff00	0x00000400	HaL R1 Extensions Required,
11831>0	lelong&0x00ffff00	0x00000800	Sun UltraSPARC3 Extensions Required,
11832>0	lelong&0x3		0		total store ordering,
11833>0	lelong&0x3		1		partial store ordering,
11834>0	lelong&0x3		2		relaxed memory ordering,
11835
118360	name		elf-pa-risc
11837>2	leshort		0x020b		1.0
11838>2	leshort		0x0210		1.1
11839>2	leshort		0x0214		2.0
11840>0	leshort		&0x0008		(LP64)
11841
118420	name		elf-riscv
11843>0	lelong&0x00000001	0x00000001	RVC,
11844>0	lelong&0x00000008	0x00000008	RVE,
11845>0	lelong&0x00000006	0x00000000	soft-float ABI,
11846>0	lelong&0x00000006	0x00000002	single-float ABI,
11847>0	lelong&0x00000006	0x00000004	double-float ABI,
11848>0	lelong&0x00000006	0x00000006	quad-float ABI,
11849
118500	name		elf-le
11851>16	leshort		0		no file type,
11852!:mime	application/octet-stream
11853>16	leshort		1		relocatable,
11854!:mime	application/x-object
11855>16	leshort		2		executable,
11856!:mime	application/x-executable
11857>16	leshort		3		${x?pie executable:shared object},
11858
11859!:mime	application/x-${x?pie-executable:sharedlib}
11860>16	leshort		4		core file,
11861!:mime	application/x-coredump
11862# OS-specific
11863>7	byte		202
11864>>16	leshort		0xFE01		executable,
11865!:mime	application/x-executable
11866# Core file detection is not reliable.
11867#>>>(0x38+0xcc) string	>\0		of '%s'
11868#>>>(0x38+0x10) lelong	>0		(signal %d),
11869>16	leshort		&0xff00
11870>>18	leshort		!8		processor-specific,
11871>>18	leshort		8
11872>>>16	leshort		0xFF80		PlayStation 2 IOP module,
11873!:mime	application/x-sharedlib
11874>>>16	leshort		!0xFF80		processor-specific,
11875>18	clear		x
11876>18	leshort		0		no machine,
11877>18	leshort		1		AT&T WE32100,
11878>18	leshort		2		SPARC,
11879>18	leshort		3		Intel 80386,
11880>18	leshort		4		Motorola m68k,
11881>>4	byte		1
11882>>>36	lelong		&0x01000000	68000,
11883>>>36	lelong		&0x00810000	CPU32,
11884>>>36	lelong		0		68020,
11885>18	leshort		5		Motorola m88k,
11886>18	leshort		6		Intel 80486,
11887>18	leshort		7		Intel 80860,
11888# The official e_machine number for MIPS is now #8, regardless of endianness.
11889# The second number (#10) will be deprecated later. For now, we still
11890# say something if #10 is encountered, but only gory details for #8.
11891>18	leshort		8		MIPS,
11892>>4	byte		1
11893>>>36	lelong		&0x20		N32
11894>18	leshort		10		MIPS,
11895>>4	byte		1
11896>>>36	lelong		&0x20		N32
11897>18	leshort		8
11898# only for 32-bit
11899>>4	byte		1
11900>>>36	use		elf-mips
11901# only for 64-bit
11902>>4	byte		2
11903>>>48	use		elf-mips
11904>18	leshort		9		Amdahl,
11905>18	leshort		10		MIPS (deprecated),
11906>18	leshort		11		RS6000,
11907>18	leshort		15		PA-RISC,
11908# only for 32-bit
11909>>4	byte		1
11910>>>36	use		elf-pa-risc
11911# only for 64-bit
11912>>4	byte		2
11913>>>48	use		elf-pa-risc
11914>18	leshort		16		nCUBE,
11915>18	leshort		17		Fujitsu VPP500,
11916>18	leshort		18		SPARC32PLUS,
11917# only for 32-bit
11918>>4	byte		1
11919>>>36	use		elf-sparc
11920>18	leshort		19		Intel 80960,
11921>18	leshort		20		PowerPC or cisco 4500,
11922>18	leshort		21		64-bit PowerPC or cisco 7500,
11923>>48	lelong		0		Unspecified or Power ELF V1 ABI,
11924>>48	lelong		1		Power ELF V1 ABI,
11925>>48	lelong		2		OpenPOWER ELF V2 ABI,
11926>18	leshort		22		IBM S/390,
11927>18	leshort		23		Cell SPU,
11928>18	leshort		24		cisco SVIP,
11929>18	leshort		25		cisco 7200,
11930>18	leshort		36		NEC V800 or cisco 12000,
11931>18	leshort		37		Fujitsu FR20,
11932>18	leshort		38		TRW RH-32,
11933>18	leshort		39		Motorola RCE,
11934>18	leshort		40		ARM,
11935>>4	byte		1
11936>>>36	lelong&0xff000000	0x04000000	EABI4
11937>>>36	lelong&0xff000000	0x05000000	EABI5
11938>>>36	lelong		&0x00800000	BE8
11939>>>36	lelong		&0x00400000	LE8
11940>18	leshort		41		Alpha,
11941>18	leshort		42		Renesas SH,
11942>18	leshort		43		SPARC V9,
11943>>4	byte		2
11944>>>48	use		elf-sparc
11945>18	leshort		44		Siemens Tricore Embedded Processor,
11946>18	leshort		45		Argonaut RISC Core, Argonaut Technologies Inc.,
11947>18	leshort		46		Renesas H8/300,
11948>18	leshort		47		Renesas H8/300H,
11949>18	leshort		48		Renesas H8S,
11950>18	leshort		49		Renesas H8/500,
11951>18	leshort		50		IA-64,
11952>18	leshort		51		Stanford MIPS-X,
11953>18	leshort		52		Motorola Coldfire,
11954>18	leshort		53		Motorola M68HC12,
11955>18	leshort		54		Fujitsu MMA,
11956>18	leshort		55		Siemens PCP,
11957>18	leshort		56		Sony nCPU,
11958>18	leshort		57		Denso NDR1,
11959>18	leshort		58		Start*Core,
11960>18	leshort		59		Toyota ME16,
11961>18	leshort		60		ST100,
11962>18	leshort		61		Tinyj emb.,
11963>18	leshort		62		x86-64,
11964>18	leshort		63		Sony DSP,
11965>18	leshort		64		DEC PDP-10,
11966>18	leshort		65		DEC PDP-11,
11967>18	leshort		66		FX66,
11968>18	leshort		67		ST9+ 8/16 bit,
11969>18	leshort		68		ST7 8 bit,
11970>18	leshort		69		MC68HC16,
11971>18	leshort		70		MC68HC11,
11972>18	leshort		71		MC68HC08,
11973>18	leshort		72		MC68HC05,
11974>18	leshort		73		SGI SVx or Cray NV1,
11975>18	leshort		74		ST19 8 bit,
11976>18	leshort		75		Digital VAX,
11977>18	leshort		76		Axis cris,
11978>18	leshort		77		Infineon 32-bit embedded,
11979>18	leshort		78		Element 14 64-bit DSP,
11980>18	leshort		79		LSI Logic 16-bit DSP,
11981>18	leshort		80		MMIX,
11982>18	leshort		81		Harvard machine-independent,
11983>18	leshort		82		SiTera Prism,
11984>18	leshort		83		Atmel AVR 8-bit,
11985>18	leshort		84		Fujitsu FR30,
11986>18	leshort		85		Mitsubishi D10V,
11987>18	leshort		86		Mitsubishi D30V,
11988>18	leshort		87		NEC v850,
11989>18	leshort		88		Renesas M32R,
11990>18	leshort		89		Matsushita MN10300,
11991>18	leshort		90		Matsushita MN10200,
11992>18	leshort		91		picoJava,
11993>18	leshort		92		OpenRISC,
11994>18	leshort		93		Synopsys ARCompact ARC700 cores,
11995>18	leshort		94		Tensilica Xtensa,
11996>18	leshort		95		Alphamosaic VideoCore,
11997>18	leshort		96		Thompson Multimedia,
11998>18	leshort		97		NatSemi 32k,
11999>18	leshort		98		Tenor Network TPC,
12000>18	leshort		99		Trebia SNP 1000,
12001>18	leshort		100		STMicroelectronics ST200,
12002>18	leshort		101		Ubicom IP2022,
12003>18	leshort		102		MAX Processor,
12004>18	leshort		103		NatSemi CompactRISC,
12005>18	leshort		104		Fujitsu F2MC16,
12006>18	leshort		105		TI msp430,
12007>18	leshort		106		Analog Devices Blackfin,
12008>18	leshort		107		S1C33 Family of Seiko Epson,
12009>18	leshort		108		Sharp embedded,
12010>18	leshort		109		Arca RISC,
12011>18	leshort		110		PKU-Unity Ltd.,
12012>18	leshort		111		eXcess: 16/32/64-bit,
12013>18	leshort		112		Icera Deep Execution Processor,
12014>18	leshort		113		Altera Nios II,
12015>18	leshort		114		NatSemi CRX,
12016>18	leshort		115		Motorola XGATE,
12017>18	leshort		116		Infineon C16x/XC16x,
12018>18	leshort		117		Renesas M16C series,
12019>18	leshort		118		Microchip dsPIC30F,
12020>18	leshort		119		Freescale RISC core,
12021>18	leshort		120		Renesas M32C series,
12022>18	leshort		131		Altium TSK3000 core,
12023>18	leshort		132		Freescale RS08,
12024>18	leshort		134		Cyan Technology eCOG2,
12025>18	leshort		135		Sunplus S+core7 RISC,
12026>18	leshort		136		New Japan Radio (NJR) 24-bit DSP,
12027>18	leshort		137		Broadcom VideoCore III,
12028>18	leshort		138		LatticeMico32,
12029>18	leshort		139		Seiko Epson C17 family,
12030>18	leshort		140		TI TMS320C6000 DSP family,
12031>18	leshort		141		TI TMS320C2000 DSP family,
12032>18	leshort		142		TI TMS320C55x DSP family,
12033>18	leshort		144		TI Programmable Realtime Unit
12034>18	leshort		160		STMicroelectronics 64bit VLIW DSP,
12035>18	leshort		161		Cypress M8C,
12036>18	leshort		162		Renesas R32C series,
12037>18	leshort		163		NXP TriMedia family,
12038>18	leshort		164		QUALCOMM DSP6,
12039>18	leshort		165		Intel 8051 and variants,
12040>18	leshort		166		STMicroelectronics STxP7x family,
12041>18	leshort		167		Andes embedded RISC,
12042>18	leshort		168		Cyan eCOG1X family,
12043>18	leshort		169		Dallas MAXQ30,
12044>18	leshort		170		New Japan Radio (NJR) 16-bit DSP,
12045>18	leshort		171		M2000 Reconfigurable RISC,
12046>18	leshort		172		Cray NV2 vector architecture,
12047>18	leshort		173		Renesas RX family,
12048>18	leshort		174		META,
12049>18	leshort		175		MCST Elbrus,
12050>18	leshort		176		Cyan Technology eCOG16 family,
12051>18	leshort		177		NatSemi CompactRISC,
12052>18	leshort		178		Freescale Extended Time Processing Unit,
12053>18	leshort		179		Infineon SLE9X,
12054>18	leshort		180		Intel L1OM,
12055>18	leshort		181		Intel K1OM,
12056>18	leshort		183		ARM aarch64,
12057>18	leshort		185		Atmel 32-bit family,
12058>18	leshort		186		STMicroeletronics STM8 8-bit,
12059>18	leshort		187		Tilera TILE64,
12060>18	leshort		188		Tilera TILEPro,
12061>18	leshort		189		Xilinx MicroBlaze 32-bit RISC,
12062>18	leshort		190		NVIDIA CUDA architecture,
12063>18	leshort		191		Tilera TILE-Gx,
12064>18	leshort		195		Synopsys ARCv2/HS3x/HS4x cores,
12065>18	leshort		197		Renesas RL78 family,
12066>18	leshort		199		Renesas 78K0R,
12067>18	leshort		200		Freescale 56800EX,
12068>18	leshort		201		Beyond BA1,
12069>18	leshort		202		Beyond BA2,
12070>18	leshort		203		XMOS xCORE,
12071>18	leshort		204		Microchip 8-bit PIC(r),
12072>18	leshort		210		KM211 KM32,
12073>18	leshort		211		KM211 KMX32,
12074>18	leshort		212		KM211 KMX16,
12075>18	leshort		213		KM211 KMX8,
12076>18	leshort		214		KM211 KVARC,
12077>18	leshort		215		Paneve CDP,
12078>18	leshort		216		Cognitive Smart Memory,
12079>18	leshort		217		iCelero CoolEngine,
12080>18	leshort		218		Nanoradio Optimized RISC,
12081>18	leshort		243		UCB RISC-V,
12082# only for 32-bit
12083>>4	byte		1
12084>>>36	use		elf-riscv
12085# only for 64-bit
12086>>4	byte		2
12087>>>48	use		elf-riscv
12088>18	leshort		244		Lanai 32-bit processor,
12089>18	leshort		245		CEVA Processor Architecture Family,
12090>18	leshort		246		CEVA X2 Processor Family,
12091>18	leshort		247		eBPF,
12092>18	leshort		248		Graphcore Intelligent Processing Unit,
12093>18	leshort		249		Imagination Technologies,
12094>18	leshort		250		Netronome Flow Processor,
12095>18	leshort		251             NEC Vector Engine,
12096>18	leshort		252		C-SKY processor family,
12097>18	leshort		253		Synopsys ARCv3 64-bit ISA/HS6x cores,
12098>18	leshort		254		MOS Technology MCS 6502 processor,
12099>18	leshort		255		Synopsys ARCv3 32-bit,
12100>18	leshort		256		Kalray VLIW core of the MPPA family,
12101>18	leshort		257		WDC 65816/65C816,
12102>18	leshort		258		LoongArch,
12103>18	leshort		259		ChipON KungFu32,
12104>18	leshort		0x1057		AVR (unofficial),
12105>18	leshort		0x1059		MSP430 (unofficial),
12106>18	leshort		0x1223		Adapteva Epiphany (unofficial),
12107>18	leshort		0x2530		Morpho MT (unofficial),
12108>18	leshort		0x3330		FR30 (unofficial),
12109>18	leshort		0x3426		OpenRISC (obsolete),
12110>18	leshort		0x4688		Infineon C166 (unofficial),
12111>18	leshort		0x5441		Cygnus FRV (unofficial),
12112>18	leshort		0x5aa5		DLX (unofficial),
12113>18	leshort		0x7650		Cygnus D10V (unofficial),
12114>18	leshort		0x7676		Cygnus D30V (unofficial),
12115>18	leshort		0x8217		Ubicom IP2xxx (unofficial),
12116>18	leshort		0x8472		OpenRISC (obsolete),
12117>18	leshort		0x9025		Cygnus PowerPC (unofficial),
12118>18	leshort		0x9026		Alpha (unofficial),
12119>18	leshort		0x9041		Cygnus M32R (unofficial),
12120>18	leshort		0x9080		Cygnus V850 (unofficial),
12121>18	leshort		0xa390		IBM S/390 (obsolete),
12122>18	leshort		0xabc7		Old Xtensa (unofficial),
12123>18	leshort		0xad45		xstormy16 (unofficial),
12124>18	leshort		0xbaab		Old MicroBlaze (unofficial),,
12125>18	leshort		0xbeef		Cygnus MN10300 (unofficial),
12126>18	leshort		0xdead		Cygnus MN10200 (unofficial),
12127>18	leshort		0xf00d		Toshiba MeP (unofficial),
12128>18	leshort		0xfeb0		Renesas M32C (unofficial),
12129>18	leshort		0xfeba		Vitesse IQ2000 (unofficial),
12130>18	leshort		0xfebb		NIOS (unofficial),
12131>18	leshort		0xfeed		Moxie (unofficial),
12132>18	default		x
12133>>18	leshort		x		*unknown arch %#x*
12134>20	lelong		0		invalid version
12135>20	lelong		1		version 1
12136
121370	string		\177ELF		ELF
12138!:strength *2
12139>4	byte		0		invalid class
12140>4	byte		1		32-bit
12141>4	byte		2		64-bit
12142>5	byte		0		invalid byte order
12143>5	byte		1		LSB
12144>>0	use		elf-le
12145>5	byte		2		MSB
12146>>0	use		\^elf-le
12147>7	byte		0		(SYSV)
12148>7	byte		1		(HP-UX)
12149>7	byte		2		(NetBSD)
12150>7	byte		3		(GNU/Linux)
12151>7	byte		4		(GNU/Hurd)
12152>7	byte		5		(86Open)
12153>7	byte		6		(Solaris)
12154>7	byte		7		(Monterey)
12155>7	byte		8		(IRIX)
12156>7	byte		9		(FreeBSD)
12157>7	byte		10		(Tru64)
12158>7	byte		11		(Novell Modesto)
12159>7	byte		12		(OpenBSD)
12160>7	byte		13		(OpenVMS)
12161>7	byte		14		(HP NonStop Kernel)
12162>7	byte		15		(AROS Research Operating System)
12163>7	byte		16		(FenixOS)
12164>7	byte		17		(Nuxi CloudABI)
12165>7	byte		97		(ARM)
12166>7	byte		202		(Cafe OS)
12167>7	byte		255		(embedded)
12168
12169#------------------------------------------------------------------------------
12170# $File: encore,v 1.7 2014/04/30 21:41:02 christos Exp $
12171# encore:  file(1) magic for Encore machines
12172#
12173# XXX - needs to have the byte order specified (NS32K was little-endian,
12174# dunno whether they run the 88K in little-endian mode or not).
12175#
121760	short		0x154		Encore
12177>20	short		0x107		executable
12178>20	short		0x108		pure executable
12179>20	short		0x10b		demand-paged executable
12180>20	short		0x10f		unsupported executable
12181>12	long		>0		not stripped
12182>22	short		>0		- version %d
12183>22	short		0		-
12184#>4	date		x		stamp %s
121850	short		0x155		Encore unsupported executable
12186>12	long		>0		not stripped
12187>22	short		>0		- version %d
12188>22	short		0		-
12189#>4	date		x		stamp %s
12190
12191#------------------------------------------------------------------------------
12192# $File: epoc,v 1.9 2013/12/21 14:28:15 christos Exp $
12193# EPOC : file(1) magic for EPOC documents [Psion Series 5/Osaris/Geofox 1]
12194# Stefan Praszalowicz <hpicollo@worldnet.fr> and Peter Breitenlohner <peb@mppmu.mpg.de>
12195# Useful information for improving this file can be found at:
12196# http://software.frodo.looijaard.name/psiconv/formats/Index.html
12197#------------------------------------------------------------------------------
121980	lelong		0x10000037	Psion Series 5
12199>4	lelong		0x10000039	font file
12200>4	lelong		0x1000003A	printer driver
12201>4	lelong		0x1000003B	clipboard
12202>4	lelong		0x10000042	multi-bitmap image
12203!:mime image/x-epoc-mbm
12204>4	lelong		0x1000006A	application information file
12205>4	lelong		0x1000006D
12206>>8	lelong		0x1000007D	Sketch image
12207!:mime image/x-epoc-sketch
12208>>8	lelong		0x1000007E	voice note
12209>>8	lelong		0x1000007F	Word file
12210!:mime application/x-epoc-word
12211>>8	lelong		0x10000085	OPL program (TextEd)
12212!:mime application/x-epoc-opl
12213>>8	lelong		0x10000087	Comms settings
12214>>8	lelong		0x10000088	Sheet file
12215!:mime application/x-epoc-sheet
12216>>8	lelong		0x100001C4	EasyFax initialisation file
12217>4	lelong		0x10000073	OPO module
12218!:mime application/x-epoc-opo
12219>4	lelong		0x10000074	OPL application
12220!:mime application/x-epoc-app
12221>4	lelong		0x1000008A	exported multi-bitmap image
12222>4	lelong		0x1000016D
12223>>8	lelong		0x10000087	Comms names
12224
122250	lelong		0x10000041	Psion Series 5 ROM multi-bitmap image
12226
122270	lelong		0x10000050	Psion Series 5
12228>4	lelong		0x1000006D	database
12229>>8	lelong		0x10000084	Agenda file
12230!:mime application/x-epoc-agenda
12231>>8	lelong		0x10000086	Data file
12232!:mime application/x-epoc-data
12233>>8	lelong		0x10000CEA	Jotter file
12234!:mime application/x-epoc-jotter
12235>4	lelong		0x100000E4	ini file
12236
122370	lelong		0x10000079	Psion Series 5 binary:
12238>4	lelong		0x00000000	DLL
12239>4	lelong		0x10000049	comms hardware library
12240>4	lelong		0x1000004A	comms protocol library
12241>4	lelong		0x1000005D	OPX
12242>4	lelong		0x1000006C	application
12243>4	lelong		0x1000008D	DLL
12244>4	lelong		0x100000AC	logical device driver
12245>4	lelong		0x100000AD	physical device driver
12246>4	lelong		0x100000E5	file transfer protocol
12247>4	lelong		0x100000E5	file transfer protocol
12248>4	lelong		0x10000140	printer definition
12249>4	lelong		0x10000141	printer definition
12250
122510	lelong		0x1000007A	Psion Series 5 executable
12252
12253#------------------------------------------------------------------------------
12254# $File: erlang,v 1.7 2019/04/19 00:42:27 christos Exp $
12255# erlang:  file(1) magic for Erlang JAM and BEAM files
12256# URL:  https://www.erlang.org/faq/x779.html#AEN812
12257
12258# OTP R3-R4
122590	string	\0177BEAM!	Old Erlang BEAM file
12260>6	short	>0		- version %d
12261
12262# OTP R5 and onwards
122630	string	FOR1
12264>8	string	BEAM		Erlang BEAM file
12265
12266# 4.2 version may have a copyright notice!
122674	string	Tue\ Jan\ 22\ 14:32:44\ MET\ 1991	Erlang JAM file - version 4.2
1226879	string	Tue\ Jan\ 22\ 14:32:44\ MET\ 1991	Erlang JAM file - version 4.2
12269
122704	string	1.0\ Fri\ Feb\ 3\ 09:55:56\ MET\ 1995	Erlang JAM file - version 4.3
12271
122720	bequad	0x0000000000ABCDEF	Erlang DETS file
12273
12274# $File: espressif,v 1.3 2021/04/26 15:56:00 christos Exp $
12275# configuration dump of Tasmota firmware for ESP8266 based devices by Espressif
12276# URL: https://github.com/arendst/Sonoff-Tasmota/
12277# Reference: https://codeload.github.com/arendst/Sonoff-Tasmota/zip/release-6.2/
12278# Sonoff-Tasmota-release-6.2.zip/Sonoff-Tasmota-release-6.2/sonoff/settings.h
12279# From: Joerg Jenderek
12280#
12281# cfg_holder=4617=0x1209
122820		uleshort	4617
12283# remaining settings normally 0x5A+offset XORed; free_1D5[20] empty since 5.12.0e
12284>0x1D5		ubequad		0x2f30313233343536	configuration of Tasmota firmware (ESP8266)
12285!:mime	application/x-tasmota-dmp
12286!:ext	dmp
12287# version like 6.2.1.0 ~ 0x06020100 XORed to 0x63666262
12288>>11		ubyte^0x65	x			\b, version %u
12289>>10		ubyte^0x64	x			\b.%u
12290>>9		ubyte^0x63	x			\b.%u
12291>>8		ubyte^0x62	x			\b.%u
12292#>8		ubelong		x			(%#x)
12293# hostname[33] XORed
12294>>0x165		ubyte^0x1BF	x			\b, hostname %c
12295>>0x166		ubyte^0x1C0	>037			\b%c
12296>>0x167		ubyte^0x1C1	>037			\b%c
12297>>0x168		ubyte^0x1C2	>037			\b%c
12298>>0x169		ubyte^0x1C3	>037			\b%c
12299>>0x16A		ubyte^0x1C4	>037			\b%c
12300>>0x16B		ubyte^0x1C5	>037			\b%c
12301>>0x16C		ubyte^0x1C6	>037			\b%c
12302>>0x16D		ubyte^0x1C7	>037			\b%c
12303>>0x16E		ubyte^0x1C8	>037			\b%c
12304>>0x16F		ubyte^0x1C9	>037			\b%c
12305>>0x170		ubyte^0x1CA	>037			\b%c
12306>>0x171		ubyte^0x1CB	>037			\b%c
12307>>0x172		ubyte^0x1CC 	>037			\b%c
12308>>0x173		ubyte^0x1CD	>037			\b%c
12309>>0x174		ubyte^0x1CE	>037			\b%c
12310>>0x175		ubyte^0x1CF	>037			\b%c
12311>>0x176		ubyte^0x1D0	>037			\b%c
12312>>0x177		ubyte^0x1D1	>037			\b%c
12313>>0x178		ubyte^0x1D2	>037			\b%c
12314>>0x179		ubyte^0x1D3	>037			\b%c
12315>>0x17A		ubyte^0x1D4	>037			\b%c
12316>>0x17B		ubyte^0x1D5	>037			\b%c
12317>>0x17C		ubyte^0x1D6	>037			\b%c
12318>>0x17D		ubyte^0x1D7	>037			\b%c
12319>>0x17E		ubyte^0x1D8	>037			\b%c
12320>>0x17F		ubyte^0x1D9	>037			\b%c
12321>>0x180		ubyte^0x1DA	>037			\b%c
12322>>0x181		ubyte^0x1DB	>037			\b%c
12323>>0x182		ubyte^0x1DC	>037			\b%c
12324>>0x183		ubyte^0x1DD	>037			\b%c
12325>>0x184		ubyte^0x1DE	>037			\b%c
12326>>0x185		ubyte^0x1DF	>037			\b%c
12327#>>0x165		string		x			(%.33s)
12328
12329
12330
12331#------------------------------------------------------------------------------
12332# $File: esri,v 1.5 2019/04/19 00:42:27 christos Exp $
12333# ESRI Shapefile format (.shp .shx .dbf=DBaseIII)
12334# Based on info from
12335# <URL:https://www.esri.com/library/whitepapers/pdfs/shapefile.pdf>
123360	belong	9994	ESRI Shapefile
12337>4	belong	=0
12338>8	belong	=0
12339>12	belong	=0
12340>16	belong	=0
12341>20	belong	=0
12342>28	lelong	x	version %d
12343>24	belong	x	length %d
12344>32	lelong	=0	type Null Shape
12345>32	lelong	=1	type Point
12346>32	lelong	=3	type PolyLine
12347>32	lelong	=5	type Polygon
12348>32	lelong	=8	type MultiPoint
12349>32	lelong	=11	type PointZ
12350>32	lelong	=13	type PolyLineZ
12351>32	lelong	=15	type PolygonZ
12352>32	lelong	=18	type MultiPointZ
12353>32	lelong	=21	type PointM
12354>32	lelong	=23	type PolyLineM
12355>32	lelong	=25	type PolygonM
12356>32	lelong	=28	type MultiPointM
12357>32	lelong	=31	type MultiPatch
12358
12359#------------------------------------------------------------------------------
12360# $File: fcs,v 1.4 2009/09/19 16:28:09 christos Exp $
12361# fcs: file(1) magic for FCS (Flow Cytometry Standard) data files
12362# From Roger Leigh <roger@whinlatter.uklinux.net>
123630       string          FCS1.0          Flow Cytometry Standard (FCS) data, version 1.0
123640       string          FCS2.0          Flow Cytometry Standard (FCS) data, version 2.0
123650       string          FCS3.0          Flow Cytometry Standard (FCS) data, version 3.0
12366
12367#------------------------------------------------------------------------------
12368# $File: filesystems,v 1.150 2022/07/04 16:40:33 christos Exp $
12369# filesystems:  file(1) magic for different filesystems
12370#
123710	name	partid
12372>0	ubyte	0x00	Unused
12373>0	ubyte	0x01	12-bit FAT
12374>0	ubyte	0x02	XENIX /
12375>0	ubyte	0x03	XENIX /usr
12376>0	ubyte	0x04	16-bit FAT, less than 32M
12377>0	ubyte	0x05	extended partition
12378>0	ubyte	0x06	16-bit FAT, more than 32M
12379>0	ubyte	0x07	OS/2 HPFS, NTFS, QNX2, Adv. UNIX
12380>0	ubyte	0x08	AIX or os, or etc.
12381>0	ubyte	0x09	AIX boot partition or Coherent
12382>0	ubyte	0x0a	O/2 boot manager or Coherent swap
12383>0	ubyte	0x0b	32-bit FAT
12384>0	ubyte	0x0c	32-bit FAT, LBA-mapped
12385>0	ubyte	0x0d	7XXX, LBA-mapped
12386>0	ubyte	0x0e	16-bit FAT, LBA-mapped
12387>0	ubyte	0x0f	extended partition, LBA-mapped
12388>0	ubyte	0x10	OPUS
12389>0	ubyte	0x11 	OS/2 DOS 12-bit FAT
12390>0	ubyte	0x12 	Compaq diagnostics
12391>0	ubyte	0x14 	OS/2 DOS 16-bit FAT <32M
12392>0	ubyte	0x16 	OS/2 DOS 16-bit FAT >=32M
12393>0	ubyte	0x17 	OS/2 hidden IFS
12394>0	ubyte	0x18 	AST Windows swapfile
12395>0	ubyte	0x19 	Willowtech Photon coS
12396>0	ubyte	0x1b 	hidden win95 fat 32
12397>0	ubyte	0x1c 	hidden win95 fat 32 lba
12398>0	ubyte	0x1d	hidden win95 fat 16 lba
12399>0	ubyte	0x20 	Willowsoft OFS1
12400>0	ubyte	0x21 	reserved
12401>0	ubyte	0x23 	reserved
12402>0	ubyte	0x24	NEC DOS
12403>0	ubyte	0x26 	reserved
12404>0	ubyte	0x31 	reserved
12405>0	ubyte	0x32	Alien Internet Services NOS
12406>0	ubyte	0x33 	reserved
12407>0	ubyte	0x34 	reserved
12408>0	ubyte	0x35 	JFS on OS2
12409>0	ubyte	0x36 	reserved
12410>0	ubyte	0x38 	Theos
12411>0	ubyte	0x39 	Plan 9, or Theos spanned
12412>0	ubyte	0x3a 	Theos ver 4 4gb partition
12413>0	ubyte	0x3b 	Theos ve 4 extended partition
12414>0	ubyte	0x3c 	PartitionMagic recovery
12415>0	ubyte	0x3d 	Hidden Netware
12416>0	ubyte	0x40 	VENIX 286 or LynxOS
12417>0	ubyte	0x41	PReP
12418>0	ubyte	0x42	linux swap sharing DRDOS disk
12419>0	ubyte	0x43	linux sharing DRDOS disk
12420>0	ubyte	0x44	GoBack change utility
12421>0	ubyte	0x45	Boot US Boot manager
12422>0	ubyte	0x46	EUMEL/Elan or Ergos 3
12423>0	ubyte	0x47	EUMEL/Elan or Ergos 3
12424>0	ubyte	0x48	EUMEL/Elan or Ergos 3
12425>0	ubyte	0x4a	ALFX/THIN filesystem for DOS
12426>0	ubyte	0x4c	Oberon partition
12427>0	ubyte	0x4d 	QNX4.x
12428>0	ubyte	0x4e 	QNX4.x 2nd part
12429>0	ubyte	0x4f 	QNX4.x 3rd part
12430>0	ubyte	0x50 	DM (disk manager)
12431>0	ubyte	0x51 	DM6 Aux1 (or Novell)
12432>0	ubyte	0x52 	CP/M or Microport SysV/AT
12433>0	ubyte	0x53 	DM6 Aux3
12434>0	ubyte	0x54	DM6 DDO
12435>0	ubyte	0x55	EZ-Drive (disk manager)
12436>0	ubyte	0x56	Golden Bow (disk manager)
12437>0	ubyte	0x57	Drive PRO
12438>0	ubyte	0x5c	Priam Edisk (disk manager)
12439>0	ubyte	0x61	SpeedStor
12440>0	ubyte	0x63	GNU HURD or Mach or Sys V/386
12441>0	ubyte	0x64	Novell Netware 2.xx or Speedstore
12442>0	ubyte	0x65	Novell Netware 3.xx
12443>0	ubyte	0x66	Novell 386 Netware
12444>0	ubyte	0x67	Novell
12445>0	ubyte	0x68	Novell
12446>0	ubyte	0x69	Novell
12447>0	ubyte	0x70	DiskSecure Multi-Boot
12448>0	ubyte	0x71	reserved
12449>0	ubyte	0x73	reserved
12450>0	ubyte	0x74	reserved
12451>0	ubyte	0x75	PC/IX
12452>0	ubyte	0x76	reserved
12453>0	ubyte	0x77	M2FS/M2CS partition
12454>0	ubyte	0x78	XOSL boot loader filesystem
12455>0	ubyte	0x80	MINIX until 1.4a
12456>0	ubyte	0x81	MINIX since 1.4b
12457>0	ubyte	0x82	Linux swap or Solaris
12458>0	ubyte	0x83	Linux native
12459>0	ubyte	0x84	OS/2 hidden C: drive
12460>0	ubyte	0x85	Linux extended partition
12461>0	ubyte	0x86	NT FAT volume set
12462>0	ubyte	0x87	NTFS volume set or HPFS mirrored
12463>0	ubyte	0x8a	Linux Kernel AiR-BOOT partition
12464>0	ubyte	0x8b	Legacy Fault tolerant FAT32
12465>0	ubyte	0x8c	Legacy Fault tolerant FAT32 ext
12466>0	ubyte	0x8d	Hidden free FDISK FAT12
12467>0	ubyte	0x8e	Linux Logical Volume Manager
12468>0	ubyte	0x90	Hidden free FDISK FAT16
12469>0	ubyte	0x91	Hidden free FDISK DOS EXT
12470>0	ubyte	0x92	Hidden free FDISK FAT16 Big
12471>0	ubyte	0x93	Amoeba filesystem
12472>0	ubyte	0x94	Amoeba bad block table
12473>0	ubyte	0x95	MIT EXOPC native partitions
12474>0	ubyte	0x97	Hidden free FDISK FAT32
12475>0	ubyte	0x98	Datalight ROM-DOS Super-Boot
12476>0	ubyte	0x99	Mylex EISA SCSI
12477>0	ubyte	0x9a	Hidden free FDISK FAT16 LBA
12478>0	ubyte	0x9b	Hidden free FDISK EXT LBA
12479>0	ubyte	0x9f	BSDI?
12480>0	ubyte	0xa0	IBM Thinkpad hibernation
12481>0	ubyte	0xa1	HP Volume expansion (SpeedStor)
12482>0	ubyte	0xa3	HP Volume expansion (SpeedStor)
12483>0	ubyte	0xa4	HP Volume expansion (SpeedStor)
12484>0	ubyte	0xa5	386BSD partition type
12485>0	ubyte	0xa6	OpenBSD partition type
12486>0	ubyte	0xa7	NeXTSTEP 486
12487>0	ubyte	0xa8	Apple UFS
12488>0	ubyte	0xa9	NetBSD partition type
12489>0	ubyte	0xaa	Olivetty Fat12 1.44MB Service part
12490>0	ubyte	0xab	Apple Boot
12491>0	ubyte	0xae	SHAG OS filesystem
12492>0	ubyte	0xaf	Apple HFS
12493>0	ubyte	0xb0	BootStar Dummy
12494>0	ubyte	0xb1	reserved
12495>0	ubyte	0xb3	reserved
12496>0	ubyte	0xb4	reserved
12497>0	ubyte	0xb6	reserved
12498>0	ubyte	0xb7	BSDI BSD/386 filesystem
12499>0	ubyte	0xb8	BSDI BSD/386 swap
12500>0	ubyte	0xbb	Boot Wizard Hidden
12501>0	ubyte	0xbe	Solaris 8 partition type
12502>0	ubyte	0xbf	Solaris partition type
12503>0	ubyte	0xc0 	CTOS
12504>0	ubyte	0xc1 	DRDOS/sec (FAT-12)
12505>0	ubyte	0xc2 	Hidden Linux
12506>0	ubyte	0xc3 	Hidden Linux swap
12507>0	ubyte	0xc4 	DRDOS/sec (FAT-16, < 32M)
12508>0	ubyte	0xc5 	DRDOS/sec (EXT)
12509>0	ubyte	0xc6 	DRDOS/sec (FAT-16, >= 32M)
12510>0	ubyte	0xc7 	Syrinx (Cyrnix?) or HPFS disabled
12511>0	ubyte	0xc8 	Reserved for DR-DOS 8.0+
12512>0	ubyte	0xc9 	Reserved for DR-DOS 8.0+
12513>0	ubyte	0xca 	Reserved for DR-DOS 8.0+
12514>0	ubyte	0xcb 	DR-DOS 7.04+ Secured FAT32 CHS
12515>0	ubyte	0xcc 	DR-DOS 7.04+ Secured FAT32 LBA
12516>0	ubyte	0xcd	CTOS Memdump
12517>0	ubyte	0xce 	DR-DOS 7.04+ FAT16X LBA
12518>0	ubyte	0xcf 	DR-DOS 7.04+ EXT LBA
12519>0	ubyte	0xd0 	REAL/32 secure big partition
12520>0	ubyte	0xd1 	Old Multiuser DOS FAT12
12521>0	ubyte	0xd4 	Old Multiuser DOS FAT16 Small
12522>0	ubyte	0xd5 	Old Multiuser DOS Extended
12523>0	ubyte	0xd6 	Old Multiuser DOS FAT16 Big
12524>0	ubyte	0xd8 	CP/M 86
12525>0	ubyte	0xdb 	CP/M or Concurrent CP/M
12526>0	ubyte	0xdd 	Hidden CTOS Memdump
12527>0	ubyte	0xde 	Dell PowerEdge Server utilities
12528>0	ubyte	0xdf 	DG/UX virtual disk manager
12529>0	ubyte	0xe0 	STMicroelectronics ST AVFS
12530>0	ubyte	0xe1 	DOS access or SpeedStor 12-bit
12531>0	ubyte	0xe3 	DOS R/O or Storage Dimensions
12532>0	ubyte	0xe4 	SpeedStor 16-bit FAT < 1024 cyl.
12533>0	ubyte	0xe5	reserved
12534>0	ubyte	0xe6	reserved
12535>0	ubyte	0xeb 	BeOS
12536>0	ubyte	0xee	GPT Protective MBR
12537>0	ubyte	0xef	EFI system partition
12538>0	ubyte	0xf0 	Linux PA-RISC boot loader
12539>0	ubyte	0xf1 	SpeedStor or Storage Dimensions
12540>0	ubyte	0xf2 	DOS 3.3+ Secondary
12541>0	ubyte	0xf3	reserved
12542>0	ubyte	0xf4	SpeedStor large partition
12543>0	ubyte	0xf5	Prologue multi-volumen partition
12544>0	ubyte	0xf6 	reserved
12545>0	ubyte	0xf9 	pCache: ext2/ext3 persistent cache
12546>0	ubyte	0xfa 	Bochs x86 emulator
12547>0	ubyte	0xfb 	VMware File System
12548>0	ubyte	0xfc 	VMware Swap
12549>0	ubyte	0xfd 	Linux RAID partition persistent sb
12550>0	ubyte	0xfe	LANstep or IBM PS/2 IML
12551>0	ubyte	0xff 	Xenix Bad Block Table
12552
125530	string	\366\366\366\366	PC formatted floppy with no filesystem
12554# Sun disk labels
12555# From /usr/include/sun/dklabel.h:
125560774	beshort		0xdabe
12557# modified by Joerg Jenderek, because original test
12558# succeeds for Cabinet archive dao360.dl_ with negative blocks
12559>0770	long		>0		Sun disk label
12560>>0	string		x		'%s
12561>>>31	string		>\0		\b%s
12562>>>>63	string		>\0		\b%s
12563>>>>>95	string		>\0		\b%s
12564>>0	string		x		\b'
12565>>0734	short		>0		%d rpm,
12566>>0736	short		>0		%d phys cys,
12567>>0740	short		>0		%d alts/cyl,
12568>>0746	short		>0		%d interleave,
12569>>0750	short		>0		%d data cyls,
12570>>0752	short		>0		%d alt cyls,
12571>>0754	short		>0		%d heads/partition,
12572>>0756	short		>0		%d sectors/track,
12573>>0764	long		>0		start cyl %d,
12574>>0770	long		x		%d blocks
12575# Is there a boot block written 1 sector in?
12576>512    belong&077777777	0600407	\b, boot block present
12577
12578# Joerg Jenderek: Smart Boot Manager backup file is 25 (MSDOS) or 41 (LINUX) byte header + first sectors of disk
12579# (http://btmgr.sourceforge.net/docs/user-guide-3.html)
125800		string	SBMBAKUP_	Smart Boot Manager backup file
12581>9		string	x		\b, version %-5.5s
12582>>14		string	=_
12583>>>15		string	x		%-.1s
12584>>>>16		string	=_		\b.
12585>>>>>17		string	x		\b%-.1s
12586>>>>>>18	string	=_		\b.
12587>>>>>>>19	string	x		\b%-.1s
12588>>>22		ubyte	0
12589>>>>21		ubyte	x		\b, from drive %#x
12590>>>22		ubyte	>0
12591>>>>21		string	x		\b, from drive %s
12592>>>535		search/17	\x55\xAA
12593>>>>&-512	indirect	x	\b; contains
12594
12595# updated by Joerg Jenderek at Nov 2012
12596# DOS Emulator image is 128 byte, null right padded header + harddisc image
125970	string	DOSEMU\0
12598>0x27E	leshort	0xAA55
12599#offset is 128
12600>>19	ubyte	128
12601>>>(19.b-1)	ubyte	0x0	DOS Emulator image
12602>>>>7	ulelong	>0		\b, %u heads
12603>>>>11	ulelong	>0		\b, %d sectors/track
12604>>>>15	ulelong	>0		\b, %d cylinders
12605>>>>128	indirect	x	\b; contains
12606
12607# added by Joerg Jenderek at Nov 2012
12608# http://www.thenakedpc.com/articles/v04/08/0408-05.html
12609# Symantec (Peter Norton) Image.dat file consists of variable header, bootrecord, part of FAT and root directory data
126100	string	PNCIHISK\0		Norton Utilities disc image data
12611# real x86 boot sector with jump instruction
12612>509	search/1026	\x55\xAA\xeb
12613>>&-1	indirect	x		\b; contains
12614# http://file-extension.net/seeker/file_extension_dat
126150	string	PNCIUNDO		Norton Disk Doctor UnDo file
12616#
12617
12618# DOS/MBR boot sector updated by Joerg Jenderek at Sep 2007,May 2011,2013
12619# for any allowed sector sizes
1262030		search/481	\x55\xAA
12621# to display DOS/MBR boot sector (40) before old one (strength=50+21),Syslinux bootloader (71),SYSLINUX MBR (37+36),NetBSD mbr (110),AdvanceMAME mbr (111)
12622# DOS BPB information (70) and after DOS floppy (120) like in previous file version
12623!:strength +65
12624# for sector sizes < 512 Bytes
12625>11		uleshort	<512
12626>>(11.s-2)	uleshort	0xAA55		DOS/MBR boot sector
12627# for sector sizes with 512 or more Bytes
12628>0x1FE		leshort		0xAA55		DOS/MBR boot sector
12629
12630# ExFAT
126313		string/w	=EXFAT
12632>0x1FE		leshort		0xAA55
12633>>0x6E		ubyte		1
12634>>>0x6F		ubyte		0x80
12635>>>0		ubyte		0xEB	DOS/MBR boot sector,
12636>>>0x69		ubyte		x	ExFAT Filesystem version %d.
12637>>>0x68		ubyte		x	\b%d
12638>>>0x6d		ubyte		x	\b, (1<<%d) sectors per cluster
12639>>>0x48		ulequad		x	\b, sectors %lld
12640>>>0x64		ulelong		x	\b, serial number %#x
12641
12642# keep old DOS/MBR boot sector as dummy for mbr and bootloader displaying
12643# only for sector sizes with 512 or more Bytes
126440x1FE          leshort         0xAA55         	DOS/MBR boot sector
12645#
12646# to display information (50) before DOS BPB (strength=70) and after DOS floppy (120) like in old file version
12647!:strength +65
12648>2		string		OSBS		OS/BS MBR
12649# added by Joerg Jenderek at Feb 2013 according to https://thestarman.pcministry.com/asm/mbr/
12650# and https://en.wikipedia.org/wiki/Master_Boot_Record
12651# test for nearly all MS-DOS Master Boot Record initial program loader (IPL) is now done by
12652# characteristic assembler instructions: xor ax,ax;mov ss,ax;mov sp,7c00
12653>0	search/2	\x33\xc0\x8e\xd0\xbc\x00\x7c	MS-MBR
12654# Microsoft Windows 95A and early ( https://thestarman.pcministry.com/asm/mbr/STDMBR.htm )
12655# assembler instructions: mov si,sp;push ax;pop es;push ax;pop ds;sti;cld
12656>>8	ubequad		0x8bf45007501ffbfc
12657# https://thestarman.pcministry.com/asm/mbr/200MBR.htm
12658>>>0x16	ubyte		0xF3				\b,DOS 2
12659>>>>219	regex		Author\ -\ 			Author:
12660# found "David Litton" , "A Pehrsson  "
12661>>>>>&0	string		x				"%s"
12662>>>0x16	ubyte		0xF2
12663# NEC MS-DOS 3.30 Rev. 3 . See https://thestarman.pcministry.com/asm/mbr/DOS33MBR.htm
12664# assembler instructions: mov di,077c;cmp word ptrl[di],a55a;jnz
12665>>>>0x22	ubequad	0xbf7c07813d5aa575		\b,NEC 3.3
12666# version MS-DOS 3.30 til MS-Windows 95A (WinVer=4.00.1111)
12667>>>>0x22	default	x				\b,D0S version 3.3-7.0
12668# error messages are printed by assembler instructions: mov si,06nn;...;int 10 (0xBEnn06;...)
12669# where nn is string offset varying for different languages
12670# "Invalid partition table"				nn=0x8b for english version
12671>>>>>(0x49.b)	string		Invalid\ partition\ table		english
12672>>>>>(0x49.b)	string		Ung\201ltige\ Partitionstabelle		german
12673>>>>>(0x49.b)	string		Table\ de\ partition\ invalide		french
12674>>>>>(0x49.b)	string		Tabela\ de\ parti\207ao\ inv\240lida	portuguese
12675>>>>>(0x49.b)	string		Tabla\ de\ partici\242n\ no\ v\240lida	spanish
12676>>>>>(0x49.b)	string		Tavola\ delle\ partizioni\ non\ valida	italian
12677>>>>>0x49	ubyte		>0			at offset %#x
12678>>>>>>(0x49.b)	string		>\0			"%s"
12679# "Error loading operating system"			nn=0xa3 for english version
12680# "Fehler beim Laden des Betriebssystems"		nn=0xa7 for german version
12681# "Erreur en chargeant syst\212me d'exploitation"	nn=0xa7 for french version
12682# "Erro na inicializa\207ao do sistema operacional"	nn=0xa7 for portuguese Brazilian version
12683# "Error al cargar sistema operativo"			nn=0xa8 for spanish version
12684# "Errore durante il caricamento del sistema operativo"	nn=0xae for italian version
12685>>>>>0x74	ubyte		>0			at offset %#x
12686>>>>>>(0x74.b)	string		>\0			"%s"
12687# "Missing operating system"				nn=0xc2 for english version
12688# "Betriebssystem fehlt"				nn=0xcd for german version
12689# "Syst\212me d'exploitation absent"			nn=0xd2 for french version
12690# "Sistema operacional nao encontrado"			nn=0xd4 for portuguese Brazilian version
12691# "Falta sistema operativo"				nn=0xca for spanish version
12692# "Sistema operativo mancante"				nn=0xe2 for italian version
12693>>>>>0x79	ubyte		>0			at offset %#x
12694>>>>>>(0x79.b)	string		>\0			"%s"
12695# Microsoft Windows 95B to XP (https://thestarman.pcministry.com/asm/mbr/95BMEMBR.htm)
12696# assembler instructions: push ax;pop es;push  ax;pop ds;cld;mov si,7c1b
12697>>8	ubequad		0x5007501ffcbe1b7c
12698# assembler instructions: rep;movsb;retf;mov si,07be;mov cl,04
12699>>>24		ubequad	0xf3a4cbbebe07b104		9M
12700# "Invalid partition table"				nn=0x10F for english version
12701# "Ung\201ltige Partitionstabelle"				nn=0x10F for german version
12702# "Table de partition erron\202e"				nn=0x10F for french version
12703# "\216\257\245\340\240\346\250\256\255\255\240\357 \341\250\341\342\245\254\240 \255\245 \255\240\251\244\245\255\240"	nn=0x10F for russian version
12704>>>>(0x3C.b+0x0FF)	string	Invalid\ partition\ table		english
12705>>>>(0x3C.b+0x0FF)	string	Ung\201ltige\ Partitionstabelle		german
12706>>>>(0x3C.b+0x0FF)	string	Table\ de\ partition\ erron\202e	french
12707>>>>(0x3C.b+0x0FF)	string	\215\245\257\340\240\242\250\253\354\255\240\357\ \342\240\241\253\250\346\240	russian
12708>>>>0x3C		ubyte	x			at offset %#x+0xFF
12709>>>>(0x3C.b+0x0FF)	string	>\0			"%s"
12710# "Error loading operating system"			nn=0x127 for english version
12711# "Fehler beim Laden des Betriebssystems"		nn=0x12b for german version
12712# "Erreur lors du chargement du syst\212me d'exploitation"	nn=0x12a for french version
12713# "\216\350\250\241\252\240 \257\340\250 \247\240\243\340\343\247\252\245 \256\257\245\340\240\346\250\256\255\255\256\251 \341\250\341\342\245\254\353"	nn=0x12d for russian version
12714>>>>0xBD		ubyte	x			at offset 0x1%x
12715>>>>(0xBD.b+0x100)	string	>\0			"%s"
12716# "Missing operating system"				nn=0x146 for english version
12717# "Betriebssystem fehlt"				nn=0x151 for german version
12718# "Syst\212me d'exploitation manquant"			nn=0x15e for french version
12719# "\216\257\245\340\240\346\250\256\255\255\240\357 \341\250\341\342\245\254\240 \255\245 \255\240\251\244\245\255\240"	nn=0x156 for russian version
12720>>>>0xA9		ubyte	x			at offset 0x1%x
12721>>>>(0xA9.b+0x100)	string	>\0			"%s"
12722# https://thestarman.pcministry.com/asm/mbr/Win2kmbr.htm
12723# assembler instructions: rep;movsb;retf;mov BP,07be;mov cl,04
12724>>>24		ubequad	0xf3a4cbbdbe07b104		XP
12725# where xxyyzz are lower bits from offsets of error messages varying for different languages
12726>>>>0x1B4	ubelong&0x00FFFFFF	0x002c4463	english
12727>>>>0x1B4	ubelong&0x00FFFFFF	0x002c486e	german
12728# "Invalid partition table"				xx=0x12C for english version
12729# "Ung\201ltige Partitionstabelle"				xx=0x12C for german version
12730>>>>0x1b5	ubyte		>0			at offset 0x1%x
12731>>>>(0x1b5.b+0x100)	string	>\0			"%s"
12732# "Error loading operating system"			yy=0x144 for english version
12733# "Fehler beim Laden des Betriebssystems"		yy=0x148 for german version
12734>>>>0x1b6	ubyte		>0			at offset 0x1%x
12735>>>>(0x1b6.b+0x100)	string	>\0			"%s"
12736# "Missing operating system"				zz=0x163 for english version
12737# "Betriebssystem nicht vorhanden"			zz=0x16e for german version
12738>>>>0x1b7	ubyte		>0			at offset 0x1%x
12739>>>>(0x1b7.b+0x100)	string	>\0			"%s"
12740# Microsoft Windows Vista or 7
12741# assembler instructions: ..;mov ds,ax;mov si,7c00;mov di,..00
12742>>8	ubequad		0xc08ed8be007cbf00
12743# Microsoft Windows Vista (https://thestarman.pcministry.com/asm/mbr/VistaMBR.htm)
12744# assembler instructions: jnz 0729;cmp ebx,"TCPA"
12745>>>0xEC		ubequad	0x753b6681fb544350		Vista
12746# where xxyyzz are lower bits from offsets of error messages varying for different languages
12747>>>>0x1B4	ubelong&0x00FFFFFF	0x00627a99	english
12748#>>>>0x1B4	ubelong&0x00FFFFFF	?		german
12749# "Invalid partition table"				xx=0x162 for english version
12750# "Ung\201ltige Partitionstabelle"				xx=0x1?? for german version
12751>>>>0x1b5	ubyte		>0			at offset 0x1%x
12752>>>>(0x1b5.b+0x100)	string	>\0			"%s"
12753# "Error loading operating system"			yy=0x17a for english version
12754# "Fehler beim Laden des Betriebssystems"		yy= 0x1?? for german version
12755>>>>0x1b6	ubyte		>0			at offset 0x1%x
12756>>>>(0x1b6.b+0x100)	string	>\0			"%s"
12757# "Missing operating system"				zz=0x199 for english version
12758# "Betriebssystem nicht vorhanden"			zz=0x1?? for german version
12759>>>>0x1b7	ubyte		>0			at offset 0x1%x
12760>>>>(0x1b7.b+0x100)	string	>\0			"%s"
12761# Microsoft Windows 7 (https://thestarman.pcministry.com/asm/mbr/W7MBR.htm)
12762# assembler instructions: cmp ebx,"TCPA";cmp
12763>>>0xEC		ubequad	0x6681fb5443504175		Windows 7
12764# where xxyyzz are lower bits from offsets of error messages varying for different languages
12765>>>>0x1B4	ubelong&0x00FFFFFF	0x00637b9a	english
12766#>>>>0x1B4	ubelong&0x00FFFFFF	?		german
12767# "Invalid partition table"				xx=0x163 for english version
12768# "Ung\201ltige Partitionstabelle"				xx=0x1?? for german version
12769>>>>0x1b5	ubyte		>0			at offset 0x1%x
12770>>>>(0x1b5.b+0x100)	string	>\0			"%s"
12771# "Error loading operating system"			yy=0x17b for english version
12772# "Fehler beim Laden des Betriebssystems"		yy=0x1?? for german version
12773>>>>0x1b6	ubyte		>0			at offset 0x1%x
12774>>>>(0x1b6.b+0x100)	string	>\0			"%s"
12775# "Missing operating system"				zz=0x19a for english version
12776# "Betriebssystem nicht vorhanden"			zz=0x1?? for german version
12777>>>>0x1b7	ubyte		>0			at offset 0x1%x
12778>>>>(0x1b7.b+0x100)	string	>\0			"%s"
12779# https://thestarman.pcministry.com/asm/mbr/Win2kmbr.htm#DiskSigs
12780# https://en.wikipedia.org/wiki/MBR_disk_signature#ID
12781>>0x1b8	ulelong		>0				\b, disk signature %#-.4x
12782# driveID/timestamp for Win 95B,98,98SE and ME. See https://thestarman.pcministry.com/asm/mbr/mystery.htm
12783>>0xDA	uleshort		0
12784>>>0xDC 	ulelong		>0			\b, created
12785# physical drive number (0x80-0xFF) when the Windows wrote that byte to the drive
12786>>>>0xDC	ubyte		x			with driveID %#x
12787# hours, minutes and seconds
12788>>>>0xDf	ubyte		x			at %x
12789>>>>0xDe	ubyte		x			\b:%x
12790>>>>0xDd	ubyte		x			\b:%x
12791# special case for Microsoft MS-DOS 3.21 spanish
12792# assembler instructions: cli;mov $0x30,%ax;mov %ax,%ss;mov
12793>0	ubequad		0xfab830008ed0bc00
12794# assembler instructions: $0x1f00,%sp;mov $0x80cb,%di;add %cl,(%bx,%si);in (%dx),%ax;mov
12795>>8	ubequad		0x1fbfcb800008ed8		MS-MBR,D0S version 3.21 spanish
12796# Microsoft MBR IPL end
12797
12798# dr-dos with some upper-, lowercase variants
12799>0x9D	string	Invalid\ partition\ table$
12800>>181	string	No\ Operating\ System$
12801>>>201	string	Operating\ System\ load\ error$	\b, DR-DOS MBR, Version 7.01 to 7.03
12802>0x9D	string	Invalid\ partition\ table$
12803>>181	string	No\ operating\ system$
12804>>>201	string	Operating\ system\ load\ error$	\b, DR-DOS MBR, Version 7.01 to 7.03
12805>342	string	Invalid\ partition\ table$
12806>>366	string	No\ operating\ system$
12807>>>386	string	Operating\ system\ load\ error$	\b, DR-DOS MBR, version 7.01 to 7.03
12808>295	string	NEWLDR\0
12809>>302	string	Bad\ PT\ $
12810>>>310	string	No\ OS\ $
12811>>>>317	string	OS\ load\ err$
12812>>>>>329	string	Moved\ or\ missing\ IBMBIO.LDR\n\r
12813>>>>>>358	string	Press\ any\ key\ to\ continue.\n\r$
12814>>>>>>>387	string	Copyright\ (c)\ 1984,1998
12815>>>>>>>>411	string	Caldera\ Inc.\0		\b, DR-DOS MBR (IBMBIO.LDR)
12816#
12817# tests for different MS-DOS Master Boot Records (MBR) moved and merged
12818#
12819#>0x145	string	Default:\ F				\b, FREE-DOS MBR
12820#>0x14B	string	Default:\ F				\b, FREE-DOS 1.0 MBR
12821>0x145	search/7	Default:\ F			\b, FREE-DOS MBR
12822#>>313		string	F0\ .\ .\ .
12823#>>>322		string	disk\ 1
12824#>>>>382	string	FAT3
12825>64	string	no\ active\ partition\ found
12826>>96	string	read\ error\ while\ reading\ drive	\b, FREE-DOS Beta 0.9 MBR
12827# Ranish Partition Manager http://www.ranish.com/part/
12828>387	search/4	\0\ Error!\r
12829>>378	search/7	Virus!
12830>>>397	search/4	Booting\040
12831>>>>408	search/4	HD1/\0	 			\b, Ranish MBR (
12832>>>>>416	string	Writing\ changes...		\b2.37
12833>>>>>>438	ubyte		x			\b,%#x dots
12834>>>>>>440	ubyte		>0			\b,virus check
12835>>>>>>441	ubyte		>0			\b,partition %c
12836#2.38,2.42,2.44
12837>>>>>416	string	!Writing\ changes...		\b
12838>>>>>>418	ubyte	1				\bvirus check,
12839>>>>>>419	ubyte	x				\b%#x seconds
12840>>>>>>420	ubyte&0x0F	>0			\b,partition
12841>>>>>>>420	ubyte&0x0F	<5			\b %x
12842>>>>>>>420	ubyte&0x0F	0Xf			\b ask
12843>>>>>420	ubyte		x			\b)
12844#
12845# SYSLINUX MBR moved
12846# https://www.acronis.de/
12847>362	string	MBR\ Error\ \0\r
12848>>376	string	ress\ any\ key\ to\040
12849>>>392	string	boot\ from\ floppy...\0			\b, Acronis MBR
12850# added by Joerg Jenderek
12851# https://www.visopsys.org/
12852# https://partitionlogic.org.uk/
12853>309	string	No\ bootable\ partition\ found\r
12854>>339	string	I/O\ Error\ reading\ boot\ sector\r	\b, Visopsys MBR
12855>349	string	No\ bootable\ partition\ found\r
12856>>379	string	I/O\ Error\ reading\ boot\ sector\r	\b, simple Visopsys MBR
12857# bootloader, bootmanager
12858>0x40	string	SBML
12859# label with 11 characters of FAT 12 bit filesystem
12860>>43	string	SMART\ BTMGR
12861>>>430	string	SBMK\ Bad!\r			\b, Smart Boot Manager
12862# OEM-ID not always "SBM"
12863#>>>>3	strings	SBM
12864>>>>6	string	>\0                             \b, version %s
12865>382	string	XOSLLOADXCF			\b, eXtended Operating System Loader
12866>6	string	LILO				\b, LInux i386 boot LOader
12867>>120	string	LILO				\b, version 22.3.4 SuSe
12868>>172	string	LILO				\b, version 22.5.8 Debian
12869# updated by Joerg Jenderek at Oct 2008
12870# variables according to grub-0.97/stage1/stage1.S or
12871# https://www.gnu.org/software/grub/manual/grub.html#Embedded-data
12872# usual values are marked with comments to get only information of strange GRUB loaders
12873>342		search/60	\0Geom\0
12874#>0		ulelong		x		%x=0x009048EB ,	0x2a9048EB  0
12875>>0x41		ubyte		<2
12876>>>0x3E		ubyte		>2		\b; GRand Unified Bootloader
12877# 0x3 for 0.5.95,0.93,0.94,0.96 0x4 for 1.90
12878>>>>0x3E	ubyte		x		\b, stage1 version %#x
12879#If it is 0xFF, use a drive passed by BIOS
12880>>>>0x40	ubyte		<0xFF		\b, boot drive %#x
12881# in most case 0,1,0x2e for GRUB 0.5.95
12882>>>>0x41	ubyte		>0		\b, LBA flag %#x
12883>>>>0x42	uleshort	<0x8000		\b, stage2 address %#x
12884#>>>>0x42	uleshort	=0x8000		\b, stage2 address %#x (usual)
12885>>>>0x42	uleshort	>0x8000		\b, stage2 address %#x
12886#>>>>0x44	ulelong		=1		\b, 1st sector stage2 %#x (default)
12887>>>>0x44	ulelong		>1		\b, 1st sector stage2 %#x
12888>>>>0x48	uleshort	<0x800		\b, stage2 segment %#x
12889#>>>>0x48	uleshort	=0x800		\b, stage2 segment %#x (usual)
12890>>>>0x48	uleshort	>0x800		\b, stage2 segment %#x
12891>>>>402		string	Geom\0Hard\ Disk\0Read\0\ Error\0
12892>>>>>394	string	stage1			\b, GRUB version 0.5.95
12893>>>>382		string	Geom\0Hard\ Disk\0Read\0\ Error\0
12894>>>>>376	string	GRUB\ \0		\b, GRUB version 0.93 or 1.94
12895>>>>383		string	Geom\0Hard\ Disk\0Read\0\ Error\0
12896>>>>>377	string	GRUB\ \0		\b, GRUB version 0.94
12897>>>>385		string	Geom\0Hard\ Disk\0Read\0\ Error\0
12898>>>>>379	string	GRUB\ \0		\b, GRUB version 0.95 or 0.96
12899>>>>391		string	Geom\0Hard\ Disk\0Read\0\ Error\0
12900>>>>>385	string	GRUB\ \0		\b, GRUB version 0.97
12901# unknown version
12902>>>343		string	Geom\0Read\0\ Error\0
12903>>>>321		string	Loading\ stage1.5	\b, GRUB version x.y
12904>>>380		string	Geom\0Hard\ Disk\0Read\0\ Error\0
12905>>>>374		string	GRUB\ \0		\b, GRUB version n.m
12906# SYSLINUX bootloader moved
12907>395	string	chksum\0\ ERROR!\0		\b, Gujin bootloader
12908# http://www.bcdwb.de/bcdw/index_e.htm
12909>3	string	BCDL
12910>>498	string	BCDL\ \ \ \ BIN			\b, Bootable CD Loader (1.50Z)
12911# mbr partition table entries updated by Joerg Jenderek at Sep 2013
12912# skip Norton Utilities disc image data
12913>3		string		!IHISK
12914# skip Linux style boot sector starting with assembler instructions mov 0x7c0,ax;
12915>>0		belong		!0xb8c0078e
12916# not Linux kernel
12917>>>514		string		!HdrS
12918# not BeOS
12919>>>>422		string		!Be\ Boot\ Loader
12920# jump over BPB instruction implies DOS bootsector or AdvanceMAME mbr
12921>>>>>0		ubelong&0xFD000000	=0xE9000000
12922# AdvanceMAME mbr
12923>>>>>>(1.b+2)	ubequad		0xfa31c08ed88ec08e
12924>>>>>>>446	use		partition-table
12925# mbr, Norton Utilities disc image data, or 2nd,etc. sector of x86 bootloader
12926>>>>>0		ubelong&0xFD000000	!0xE9000000
12927# skip FSInfosector
12928>>>>>>0		string		!RRaA
12929# skip 3rd sector of MS x86 bootloader with assembler instructions cli;MOVZX EAX,BYTE PTR [BP+10];MOV ECX,
12930# https://thestarman.pcministry.com/asm/mbr/MSWIN41.htm
12931>>>>>>>0	ubequad		!0xfa660fb64610668b
12932# skip 13rd sector of MS x86 bootloader
12933>>>>>>>>0	ubequad		!0x660fb64610668b4e
12934# skip sector starting with DOS new line
12935>>>>>>>>>0	string		!\r\n
12936# allowed active flag 0,80h-FFh
12937>>>>>>>>>>446	ubyte		0
12938>>>>>>>>>>>446	use		partition-table
12939>>>>>>>>>>446	ubyte		>0x7F
12940>>>>>>>>>>>446	use		partition-table
12941# TODO: test for extended bootrecord (ebr) moved and merged with mbr partition table entries
12942# mbr partition table entries end
12943# https://www.acronis.de/
12944#FAT label=ACRONIS\ SZ
12945#OEM-ID=BOOTWIZ0
12946>442	string	Non-system\ disk,\040
12947>>459	string	press\ any\ key...\x7\0		\b, Acronis Startup Recovery Loader
12948# updated by Joerg Jenderek at Nov 2012, Sep 2013
12949# DOS names like F11.SYS or BOOTWIZ.SYS are 8 right space padded bytes+3 bytes
12950# display 1 space
12951>>>447	ubyte	x		\b
12952>>>477	use	DOS-filename
12953#
12954>185	string	FDBOOT\ Version\040
12955>>204	string	\rNo\ Systemdisk.\040
12956>>>220	string	Booting\ from\ harddisk.\n\r
12957>>>245	string	Cannot\ load\ from\ harddisk.\n\r
12958>>>>273 string	Insert\ Systemdisk\040
12959>>>>>291 string and\ press\ any\ key.\n\r		\b, FDBOOT harddisk Bootloader
12960>>>>>>200 string	>\0                             \b, version %-3s
12961>242	string	Bootsector\ from\ C.H.\ Hochst\204
12962# http://freecode.com/projects/dosfstools	dosfstools-n.m/src/mkdosfs.c
12963# updated by Joerg Jenderek at Nov 2012. Use search directive with offset instead of string
12964# skip name "C.H. Hochstaetter" partly because it is sometimes written without umlaut
12965>242	search/127	Bootsector\ from\ C.H.\ Hochst
12966>>278	search/127	No\ Systemdisk.\ Booting\ from\ harddisk
12967# followed by variants with point,CR-NL or NL-CR
12968>>>208	search/261	Cannot\ load\ from\ harddisk.
12969# followed by variants CR-NL or NL-CR
12970>>>>236	search/235	Insert\ Systemdisk\ and\ press\ any\ key.
12971# followed by variants with point,CR-NL or NL-CR
12972>>>>>180	search/96	Disk\ formatted\ with\ WinImage\ 	\b, WinImage harddisk Bootloader
12973# followed by string like "6.50 (c) 1993-2004 Gilles Vollant"
12974>>>>>>&0	string		x 					\b, version %-4.4s
12975>(1.b+2)	ubyte		0xe
12976>>(1.b+3)	ubyte		0x1f
12977>>>(1.b+4)	ubyte		0xbe
12978# message offset found at (1.b+5) is 0x77 for FAT32 or 0x5b for others
12979>>>>(1.b+5)	ubyte&0xd3	0x53
12980>>>>>(1.b+6)	ubyte		0x7c
12981# assembler instructions: lodsb;and al,al;jz 0xb;push si;mov ah,
12982>>>>>>(1.b+7)	ubyte		0xac
12983>>>>>>>(1.b+8)	ubyte		0x22
12984>>>>>>>>(1.b+9)	ubyte		0xc0
12985>>>>>>>>>(1.b+10)	ubyte	0x74
12986>>>>>>>>>>(1.b+11)	ubyte	0x0b
12987>>>>>>>>>>>(1.b+12)	ubyte	0x56
12988>>>>>>>>>>>>(1.b+13)	ubyte	0xb4			\b, mkdosfs boot message display
12989# FAT1X version
12990>>>>>>>>>>>>>(1.b+5)	ubyte	0x5b
12991>>>>>>>>>>>>>>0x5b	string	>\0			"%-s"
12992# FAT32 version
12993>>>>>>>>>>>>>(1.b+5)	ubyte	0x77
12994>>>>>>>>>>>>>>0x77	string	>\0			"%-s"
12995>214	string	Please\ try\ to\ install\ FreeDOS\ 	\b, DOS Emulator boot message display
12996#>>244	string	from\ dosemu-freedos-*-bin.tgz\r
12997#>>>170	string	Sorry,\ could\ not\ load\ an\040
12998#>>>>195	string	operating\ system.\r\n
12999#
13000>103	string	This\ is\ not\ a\ bootable\ disk.\040
13001>>132	string	Please\ insert\ a\ bootable\040
13002>>>157	string	floppy\ and\r\n
13003>>>>169	string	press\ any\ key\ to\ try\ again...\r	\b, FREE-DOS message display
13004#
13005>66	string	Solaris\ Boot\ Sector
13006>>99	string	Incomplete\ MDBoot\ load.
13007>>>89	string	Version 				\b, Sun Solaris Bootloader
13008>>>>97	byte	x					version %c
13009#
13010>408	string	OS/2\ !!\ SYS01475\r\0
13011>>429	string	OS/2\ !!\ SYS02025\r\0
13012>>>450	string	OS/2\ !!\ SYS02027\r\0
13013>>>469	string	OS2BOOT\ \ \ \ 				\b, IBM OS/2 Warp bootloader
13014#
13015>409	string	OS/2\ !!\ SYS01475\r\0
13016>>430	string	OS/2\ !!\ SYS02025\r\0
13017>>>451	string	OS/2\ !!\ SYS02027\r\0
13018>>>470	string	OS2BOOT\ \ \ \ 				\b, IBM OS/2 Warp Bootloader
13019>112		string	This\ disk\ is\ not\ bootable\r
13020>>142		string	If\ you\ wish\ to\ make\ it\ bootable
13021>>>176		string	run\ the\ DOS\ program\ SYS\040
13022>>>200		string	after\ the\r
13023>>>>216		string	system\ has\ been\ loaded\r\n
13024>>>>>242	string	Please\ insert\ a\ DOS\ diskette\040
13025>>>>>271	string	into\r\n\ the\ drive\ and\040
13026>>>>>>292	string	strike\ any\ key...\0		\b, IBM OS/2 Warp message display
13027# XP
13028>430	string	NTLDR\ is\ missing\xFF\r\n
13029>>449	string	Disk\ error\xFF\r\n
13030>>>462	string	Press\ any\ key\ to\ restart\r		\b, Microsoft Windows XP Bootloader
13031# DOS names like NTLDR,CMLDR,$LDR$ are 8 right space padded bytes+3 bytes
13032>>>>417		ubyte&0xDF	>0
13033>>>>>417	string		x			%-.5s
13034>>>>>>422	ubyte&0xDF	>0
13035>>>>>>>422	string		x 			\b%-.3s
13036>>>>>425	ubyte&0xDF	>0
13037>>>>>>425	string		>\ 			\b.%-.3s
13038#
13039>>>>371		ubyte		>0x20
13040>>>>>368	ubyte&0xDF	>0
13041>>>>>>368	string		x 			%-.5s
13042>>>>>>>373	ubyte&0xDF	>0
13043>>>>>>>>373	string		x 			\b%-.3s
13044>>>>>>376	ubyte&0xDF	>0
13045>>>>>>>376	string		x 			\b.%-.3s
13046#
13047>430	string	NTLDR\ nicht\ gefunden\xFF\r\n
13048>>453	string	Datentr\204gerfehler\xFF\r\n
13049>>>473	string	Neustart\ mit\ beliebiger\ Taste\r	\b, Microsoft Windows XP Bootloader (german)
13050>>>>417		ubyte&0xDF	>0
13051>>>>>417	string		x			%-.5s
13052>>>>>>422	ubyte&0xDF	>0
13053>>>>>>>422	string		x 			\b%-.3s
13054>>>>>425	ubyte&0xDF	>0
13055>>>>>>425	string		>\ 			\b.%-.3s
13056# offset variant
13057>>>>379	string	\0
13058>>>>>368	ubyte&0xDF	>0
13059>>>>>>368	string		x 			%-.5s
13060>>>>>>>373	ubyte&0xDF	>0
13061>>>>>>>>373	string		x 			\b%-.3s
13062#
13063>430	string	NTLDR\ fehlt\xFF\r\n
13064>>444	string	Datentr\204gerfehler\xFF\r\n
13065>>>464	string	Neustart\ mit\ beliebiger\ Taste\r	\b, Microsoft Windows XP Bootloader (2.german)
13066>>>>417		ubyte&0xDF	>0
13067>>>>>417	string		x			%-.5s
13068>>>>>>422	ubyte&0xDF	>0
13069>>>>>>>422	string		x 			\b%-.3s
13070>>>>>425	ubyte&0xDF	>0
13071>>>>>>425	string		>\ 			\b.%-.3s
13072# variant
13073>>>>371		ubyte		>0x20
13074>>>>>368	ubyte&0xDF	>0
13075>>>>>>368	string		x 			%-.5s
13076>>>>>>>373	ubyte&0xDF	>0
13077>>>>>>>>373	string		x 			\b%-.3s
13078>>>>>>376	ubyte&0xDF	>0
13079>>>>>>>376	string		x 			\b.%-.3s
13080#
13081>430	string	NTLDR\ fehlt\xFF\r\n
13082>>444	string	Medienfehler\xFF\r\n
13083>>>459	string	Neustart:\ Taste\ dr\201cken\r		\b, Microsoft Windows XP Bootloader (3.german)
13084>>>>371		ubyte		>0x20
13085>>>>>368	ubyte&0xDF	>0
13086>>>>>>368	string		x 			%-.5s
13087>>>>>>>373	ubyte&0xDF	>0
13088>>>>>>>>373	string		x 			\b%-.3s
13089>>>>>>376	ubyte&0xDF	>0
13090>>>>>>>376	string		x 			\b.%-.3s
13091# variant
13092>>>>417		ubyte&0xDF	>0
13093>>>>>417	string		x			%-.5s
13094>>>>>>422	ubyte&0xDF	>0
13095>>>>>>>422	string		x 			\b%-.3s
13096>>>>>425	ubyte&0xDF	>0
13097>>>>>>425	string		>\ 			\b.%-.3s
13098#
13099>430	string	Datentr\204ger\ entfernen\xFF\r\n
13100>>454	string	Medienfehler\xFF\r\n
13101>>>469	string	Neustart:\ Taste\ dr\201cken\r		\b, Microsoft Windows XP Bootloader (4.german)
13102>>>>379		string		\0
13103>>>>>368	ubyte&0xDF	>0
13104>>>>>>368	string		x 			%-.5s
13105>>>>>>>373	ubyte&0xDF	>0
13106>>>>>>>>373	string		x 			\b%-.3s
13107>>>>>>376	ubyte&0xDF	>0
13108>>>>>>>376	string		x 			\b.%-.3s
13109# variant
13110>>>>417		ubyte&0xDF	>0
13111>>>>>417	string		x			%-.5s
13112>>>>>>422	ubyte&0xDF	>0
13113>>>>>>>422	string		x 			\b%-.3s
13114>>>>>425	ubyte&0xDF	>0
13115>>>>>>425	string		>\ 			\b.%-.3s
13116#
13117
13118#>3	string	NTFS\ \ \ \040
13119>389	string	Fehler\ beim\ Lesen\040
13120>>407	string	des\ Datentr\204gers
13121>>>426	string	NTLDR\ fehlt
13122>>>>440	string	NTLDR\ ist\ komprimiert
13123>>>>>464 string	Neustart\ mit\ Strg+Alt+Entf\r		\b, Microsoft Windows XP Bootloader NTFS (german)
13124#>3	string	NTFS\ \ \ \040
13125>313	string	A\ disk\ read\ error\ occurred.\r
13126>>345	string	A\ kernel\ file\ is\ missing\040
13127>>>370	string	from\ the\ disk.\r
13128>>>>484	string	NTLDR\ is\ compressed
13129>>>>>429 string	Insert\ a\ system\ diskette\040
13130>>>>>>454 string and\ restart\r\nthe\ system.\r		\b, Microsoft Windows XP Bootloader NTFS
13131# DOS loader variants different languages,offsets
13132>472	ubyte&0xDF	>0
13133>>389	string	Invalid\ system\ disk\xFF\r\n
13134>>>411	string	Disk\ I/O\ error
13135>>>>428	string	Replace\ the\ disk,\ and\040
13136>>>>>455 string	press\ any\ key				\b, Microsoft Windows 98 Bootloader
13137#IO.SYS
13138>>>>>>472	ubyte&0xDF	>0
13139>>>>>>>472	string		x 			\b %-.2s
13140>>>>>>>>474	ubyte&0xDF	>0
13141>>>>>>>>>474	string		x 			\b%-.5s
13142>>>>>>>>>>479	ubyte&0xDF	>0
13143>>>>>>>>>>>479 string		x 			\b%-.1s
13144>>>>>>>480	ubyte&0xDF	>0
13145>>>>>>>>480	string		x 			\b.%-.3s
13146#MSDOS.SYS
13147>>>>>>>483	ubyte&0xDF	>0			\b+
13148>>>>>>>>483	string		x 			\b%-.5s
13149>>>>>>>>>488	ubyte&0xDF	>0
13150>>>>>>>>>>488	string		x 			\b%-.3s
13151>>>>>>>>491	ubyte&0xDF	>0
13152>>>>>>>>>491	string		x 			\b.%-.3s
13153#
13154>>390	string	Invalid\ system\ disk\xFF\r\n
13155>>>412	string	Disk\ I/O\ error\xFF\r\n
13156>>>>429	string	Replace\ the\ disk,\ and\040
13157>>>>>451 string	then\ press\ any\ key\r			\b, Microsoft Windows 98 Bootloader
13158>>388	string	Ungueltiges\ System\ \xFF\r\n
13159>>>410	string	E/A-Fehler\ \ \ \ \xFF\r\n
13160>>>>427	string	Datentraeger\ wechseln\ und\040
13161>>>>>453 string	Taste\ druecken\r			\b, Microsoft Windows 95/98/ME Bootloader (german)
13162#WINBOOT.SYS only not spaces (0xDF)
13163>>>>>>497	ubyte&0xDF	>0
13164>>>>>>>497	string		x 			%-.5s
13165>>>>>>>>502	ubyte&0xDF	>0
13166>>>>>>>>>502	string		x 			\b%-.1s
13167>>>>>>>>>>503	ubyte&0xDF	>0
13168>>>>>>>>>>>503	string		x 			\b%-.1s
13169>>>>>>>>>>>>504	ubyte&0xDF	>0
13170>>>>>>>>>>>>>504 string		x 			\b%-.1s
13171>>>>>>505	ubyte&0xDF	>0
13172>>>>>>>505	string		x 			\b.%-.3s
13173#IO.SYS
13174>>>>>>472	ubyte&0xDF	>0			or
13175>>>>>>>472	string		x 			\b %-.2s
13176>>>>>>>>474	ubyte&0xDF	>0
13177>>>>>>>>>474	string		x 			\b%-.5s
13178>>>>>>>>>>479	ubyte&0xDF	>0
13179>>>>>>>>>>>479 string		x 			\b%-.1s
13180>>>>>>>480	ubyte&0xDF	>0
13181>>>>>>>>480	string		x 			\b.%-.3s
13182#MSDOS.SYS
13183>>>>>>>483	ubyte&0xDF	>0			\b+
13184>>>>>>>>483	string		x 			\b%-.5s
13185>>>>>>>>>488	ubyte&0xDF	>0
13186>>>>>>>>>>488	string		x 			\b%-.3s
13187>>>>>>>>491	ubyte&0xDF	>0
13188>>>>>>>>>491	string		x 			\b.%-.3s
13189#
13190>>390	string	Ungueltiges\ System\ \xFF\r\n
13191>>>412	string	E/A-Fehler\ \ \ \ \xFF\r\n
13192>>>>429	string	Datentraeger\ wechseln\ und\040
13193>>>>>455 string	Taste\ druecken\r			\b, Microsoft Windows 95/98/ME Bootloader (German)
13194#WINBOOT.SYS only not spaces (0xDF)
13195>>>>>>497	ubyte&0xDF	>0
13196>>>>>>>497	string		x 			%-.7s
13197>>>>>>>>504	ubyte&0xDF	>0
13198>>>>>>>>>504	string		x 			\b%-.1s
13199>>>>>>505	ubyte&0xDF	>0
13200>>>>>>>505	string		x 			\b.%-.3s
13201#IO.SYS
13202>>>>>>472	ubyte&0xDF	>0			or
13203>>>>>>>472	string		x 			\b %-.2s
13204>>>>>>>>474	ubyte&0xDF	>0
13205>>>>>>>>>474	string		x 			\b%-.6s
13206>>>>>>>480	ubyte&0xDF	>0
13207>>>>>>>>480	string		x 			\b.%-.3s
13208#MSDOS.SYS
13209>>>>>>>483	ubyte&0xDF	>0			\b+
13210>>>>>>>>483	string		x 			\b%-.5s
13211>>>>>>>>>488	ubyte&0xDF	>0
13212>>>>>>>>>>488	string		x 			\b%-.3s
13213>>>>>>>>491	ubyte&0xDF	>0
13214>>>>>>>>>491	string		x 			\b.%-.3s
13215#
13216>>389	string	Ungueltiges\ System\ \xFF\r\n
13217>>>411	string	E/A-Fehler\ \ \ \ \xFF\r\n
13218>>>>428	string	Datentraeger\ wechseln\ und\040
13219>>>>>454 string	Taste\ druecken\r			\b, Microsoft Windows 95/98/ME Bootloader (GERMAN)
13220# DOS names like IO.SYS,WINBOOT.SYS,MSDOS.SYS,WINBOOT.INI are 8 right space padded bytes+3 bytes
13221>>>>>>472	string		x 			%-.2s
13222>>>>>>>474	ubyte&0xDF	>0
13223>>>>>>>>474	string		x 			\b%-.5s
13224>>>>>>>>479	ubyte&0xDF	>0
13225>>>>>>>>>479	string		x 			\b%-.1s
13226>>>>>>480	ubyte&0xDF	>0
13227>>>>>>>480	string		x 			\b.%-.3s
13228>>>>>>483	ubyte&0xDF	>0			\b+
13229>>>>>>>483	string		x 			\b%-.5s
13230>>>>>>>488	ubyte&0xDF	>0
13231>>>>>>>>488	string		x 			\b%-.2s
13232>>>>>>>>490	ubyte&0xDF	>0
13233>>>>>>>>>490	string		x 			\b%-.1s
13234>>>>>>>491	ubyte&0xDF	>0
13235>>>>>>>>491	string		x 			\b.%-.3s
13236>479	ubyte&0xDF	>0
13237>>416	string	Kein\ System\ oder\040
13238>>>433	string	Laufwerksfehler
13239>>>>450	string	Wechseln\ und\ Taste\ dr\201cken	\b, Microsoft DOS Bootloader (german)
13240#IO.SYS
13241>>>>>479	string		x 			\b %-.2s
13242>>>>>>481	ubyte&0xDF	>0
13243>>>>>>>481	string		x 			\b%-.6s
13244>>>>>487	ubyte&0xDF	>0
13245>>>>>>487	string		x 			\b.%-.3s
13246#MSDOS.SYS
13247>>>>>>490	ubyte&0xDF	>0			\b+
13248>>>>>>>490	string		x 			\b%-.5s
13249>>>>>>>>495	ubyte&0xDF	>0
13250>>>>>>>>>495	string		x 			\b%-.3s
13251>>>>>>>498	ubyte&0xDF	>0
13252>>>>>>>>498	string		x 			\b.%-.3s
13253#
13254>376	search/41	Non-System\ disk\ or\040
13255>>395	search/41	disk\ error\r
13256>>>407	search/41	Replace\ and\040
13257>>>>419	search/41	press\ 				\b,
13258>>>>419	search/41	strike\ 			\b, old
13259>>>>426	search/41	any\ key\ when\ ready\r		MS or PC-DOS bootloader
13260#449			Disk\ Boot\ failure\r		MS 3.21
13261#466			Boot\ Failure\r			MS 3.30
13262>>>>>468 search/18	\0
13263#IO.SYS,IBMBIO.COM
13264>>>>>>&0	string		x 			\b %-.2s
13265>>>>>>>&-20	ubyte&0xDF	>0
13266>>>>>>>>&-1	string		x 			\b%-.4s
13267>>>>>>>>>&-16	ubyte&0xDF	>0
13268>>>>>>>>>>&-1	string		x 			\b%-.2s
13269>>>>>>&8	ubyte&0xDF	>0			\b.
13270>>>>>>>&-1	string		x 			\b%-.3s
13271#MSDOS.SYS,IBMDOS.COM
13272>>>>>>&11	ubyte&0xDF	>0			\b+
13273>>>>>>>&-1	string		x 			\b%-.5s
13274>>>>>>>>&-6	ubyte&0xDF	>0
13275>>>>>>>>>&-1	string		x 			\b%-.1s
13276>>>>>>>>>>&-5	ubyte&0xDF	>0
13277>>>>>>>>>>>&-1	string		x 			\b%-.2s
13278>>>>>>>&7	ubyte&0xDF	>0			\b.
13279>>>>>>>>&-1	string		x 			\b%-.3s
13280>441	string	Cannot\ load\ from\ harddisk.\n\r
13281>>469	string	Insert\ Systemdisk\040
13282>>>487	string	and\ press\ any\ key.\n\r		\b, MS (2.11) DOS bootloader
13283#>43	string	\224R-LOADER\ \ SYS			=label
13284>54	string	SYS
13285>>324	string	VASKK
13286>>>495	string	NEWLDR\0				\b, DR-DOS Bootloader (LOADER.SYS)
13287#
13288>98	string	Press\ a\ key\ to\ retry\0\r
13289>>120	string	Cannot\ find\ file\ \0\r
13290>>>139	string	Disk\ read\ error\0\r
13291>>>>156	string	Loading\ ...\0				\b, DR-DOS (3.41) Bootloader
13292#DRBIOS.SYS
13293>>>>>44		ubyte&0xDF	>0
13294>>>>>>44	string		x			\b %-.6s
13295>>>>>>>50	ubyte&0xDF	>0
13296>>>>>>>>50	string		x 			\b%-.2s
13297>>>>>>52	ubyte&0xDF	>0
13298>>>>>>>52	string		x 			\b.%-.3s
13299#
13300>70	string	IBMBIO\ \ COM
13301>>472	string	Cannot\ load\ DOS!\040
13302>>>489	string	Any\ key\ to\ retry			\b, DR-DOS Bootloader
13303>>471	string	Cannot\ load\ DOS\040
13304>>487	string	press\ key\ to\ retry			\b, Open-DOS Bootloader
13305#??
13306>444	string	KERNEL\ \ SYS
13307>>314	string	BOOT\ error!				\b, FREE-DOS Bootloader
13308>499	string	KERNEL\ \ SYS
13309>>305	string	BOOT\ err!\0				\b, Free-DOS Bootloader
13310>449	string	KERNEL\ \ SYS
13311>>319	string	BOOT\ error!				\b, FREE-DOS 0.5 Bootloader
13312#
13313>449	string	Loading\ FreeDOS
13314>>0x1AF		ulelong		>0			\b, FREE-DOS 0.95,1.0 Bootloader
13315>>>497		ubyte&0xDF	>0
13316>>>>497		string		x 			\b %-.6s
13317>>>>>503	ubyte&0xDF	>0
13318>>>>>>503	string		x 			\b%-.1s
13319>>>>>>>504	ubyte&0xDF	>0
13320>>>>>>>>504	string		x 			\b%-.1s
13321>>>>505		ubyte&0xDF	>0
13322>>>>>505	string		x 			\b.%-.3s
13323#
13324>331	string	Error!.0				\b, FREE-DOS 1.0 bootloader
13325#
13326>125	string	Loading\ FreeDOS...\r
13327>>311	string	BOOT\ error!\r				\b, FREE-DOS bootloader
13328>>>441		ubyte&0xDF	>0
13329>>>>441		string		x 			\b %-.6s
13330>>>>>447	ubyte&0xDF	>0
13331>>>>>>447	string		x 			\b%-.1s
13332>>>>>>>448	ubyte&0xDF	>0
13333>>>>>>>>448	string		x 			\b%-.1s
13334>>>>449		ubyte&0xDF	>0
13335>>>>>449	string		x 			\b.%-.3s
13336>124	string	FreeDOS\0
13337>>331	string	\ err\0					\b, FREE-DOS BETa 0.9 Bootloader
13338# DOS names like KERNEL.SYS,KERNEL16.SYS,KERNEL32.SYS,METAKERN.SYS are 8 right space padded bytes+3 bytes
13339>>>497		ubyte&0xDF	>0
13340>>>>497		string		x 			\b %-.6s
13341>>>>>503	ubyte&0xDF	>0
13342>>>>>>503	string		x 			\b%-.1s
13343>>>>>>>504	ubyte&0xDF	>0
13344>>>>>>>>504	string		x 			\b%-.1s
13345>>>>505		ubyte&0xDF	>0
13346>>>>>505	string		x 			\b.%-.3s
13347>>333	string	\ err\0					\b, FREE-DOS BEta 0.9 Bootloader
13348>>>497		ubyte&0xDF	>0
13349>>>>497		string		x 			\b %-.6s
13350>>>>>503	ubyte&0xDF	>0
13351>>>>>>503	string		x 			\b%-.1s
13352>>>>>>>504	ubyte&0xDF	>0
13353>>>>>>>>504	string		x 			\b%-.1s
13354>>>>505		ubyte&0xDF	>0
13355>>>>>505	string		x 			\b.%-.3s
13356>>334	string	\ err\0					\b, FREE-DOS Beta 0.9 Bootloader
13357>>>497		ubyte&0xDF	>0
13358>>>>497		string		x 			\b %-.6s
13359>>>>>503	ubyte&0xDF	>0
13360>>>>>>503	string		x 			\b%-.1s
13361>>>>>>>504	ubyte&0xDF	>0
13362>>>>>>>>504	string		x 			\b%-.1s
13363>>>>505		ubyte&0xDF	>0
13364>>>>>505	string		x 			\b.%-.3s
13365>336	string	Error!\040
13366>>343	string	Hit\ a\ key\ to\ reboot.		\b, FREE-DOS Beta 0.9sr1 Bootloader
13367>>>497		ubyte&0xDF	>0
13368>>>>497		string		x 			\b %-.6s
13369>>>>>503	ubyte&0xDF	>0
13370>>>>>>503	string		x 			\b%-.1s
13371>>>>>>>504	ubyte&0xDF	>0
13372>>>>>>>>504	string		x 			\b%-.1s
13373>>>>505		ubyte&0xDF	>0
13374>>>>>505	string		x 			\b.%-.3s
13375# added by Joerg Jenderek
13376# https://www.visopsys.org/
13377# https://partitionlogic.org.uk/
13378# OEM-ID=Visopsys
13379>478		ulelong	0
13380>>(1.b+326)	string	I/O\ Error\ reading\040
13381>>>(1.b+344)	string	Visopsys\ loader\r
13382>>>>(1.b+361)	string	Press\ any\ key\ to\ continue.\r	\b, Visopsys loader
13383# http://alexfru.chat.ru/epm.html#bootprog
13384>494	ubyte	>0x4D
13385>>495	string	>E
13386>>>495	string	<S
13387#OEM-ID is not reliable
13388>>>>3	string	BootProg
13389# It just looks for a program file name at the root directory
13390# and loads corresponding file with following execution.
13391# DOS names like STARTUP.BIN,STARTUPC.COM,STARTUPE.EXE are 8 right space padded bytes+3 bytes
13392>>>>499			ubyte&0xDF	>0		\b, COM/EXE Bootloader
13393>>>>>499		use		DOS-filename
13394#If the boot sector fails to read any other sector,
13395#it prints a very short message ("RE") to the screen and hangs the computer.
13396#If the boot sector fails to find needed program in the root directory,
13397#it also hangs with another message ("NF").
13398>>>>>492		string		RENF		\b, FAT (12 bit)
13399>>>>>495		string		RENF		\b, FAT (16 bit)
13400#If the boot sector fails to read any other sector,
13401#it prints a very short message ("RE") to the screen and hangs the computer.
13402# x86 bootloader end
13403
13404# added by Joerg Jenderek at Feb 2013 according to https://thestarman.pcministry.com/asm/mbr/MSWIN41.htm#FSINFO
13405# and https://en.wikipedia.org/wiki/File_Allocation_Table#FS_Information_Sector
13406>0		string		RRaA
13407>>0x1E4		string		rrAa		\b, FSInfosector
13408#>>0x1FC	uleshort	=0		SHOULD BE ZERO
13409>>>0x1E8	ulelong		<0xffffffff	\b, %u free clusters
13410>>>0x1EC	ulelong		<0xffffffff	\b, last allocated cluster %u
13411
13412# updated by Joerg Jenderek at Sep 2007
13413>3	ubyte	0
13414#no active flag
13415>>446	ubyte	0
13416# partition 1 not empty
13417>>>450	ubyte	>0
13418# partitions 3,4 empty
13419>>>>482		ubyte	0
13420>>>>>498	ubyte	0
13421# partition 2 ID=0,5,15
13422>>>>>>466	ubyte	<0x10
13423>>>>>>>466	ubyte	0x05			\b, extended partition table
13424>>>>>>>466	ubyte	0x0F			\b, extended partition table (LBA)
13425>>>>>>>466	ubyte	0x0			\b, extended partition table (last)
13426
13427# DOS x86 sector separated and moved from "DOS/MBR boot sector" by Joerg Jenderek at May 2011
13428
13429>0x200	lelong	0x82564557		\b, BSD disklabel
13430
13431# by Joerg Jenderek at Apr 2013
13432#	Print the DOS filenames from directory entry form with 8 right space padded bytes + 3 bytes for extension
13433#	like IO.SYS. MSDOS.SYS , KERNEL.SYS , DRBIO.SYS
134340	name			DOS-filename
13435# space=0x20 (00100000b) means empty
13436>0			ubyte&0xDF	>0
13437>>0			ubyte		x 		\b%c
13438>>>1			ubyte&0xDF	>0
13439>>>>1			ubyte		x 		\b%c
13440>>>>>2			ubyte&0xDF	>0
13441>>>>>>2			ubyte		x 		\b%c
13442>>>>>>>3		ubyte&0xDF	>0
13443>>>>>>>>3		ubyte		x 		\b%c
13444>>>>>>>>>4		ubyte&0xDF	>0
13445>>>>>>>>>>4		ubyte		x 		\b%c
13446>>>>>>>>>>>5		ubyte&0xDF	>0
13447>>>>>>>>>>>>5		ubyte		x 		\b%c
13448>>>>>>>>>>>>>6		ubyte&0xDF	>0
13449>>>>>>>>>>>>>>6		ubyte		x 		\b%c
13450>>>>>>>>>>>>>>>7	ubyte&0xDF	>0
13451>>>>>>>>>>>>>>>>7	ubyte		x 		\b%c
13452# DOS filename extension
13453>>8			ubyte&0xDF	>0		\b.
13454>>>8			ubyte		x 		\b%c
13455>>>>9			ubyte&0xDF	>0
13456>>>>>9			ubyte		x 		\b%c
13457>>>>>>10		ubyte&0xDF	>0
13458>>>>>>>10		ubyte		x 		\b%c
13459#	Print 2 following DOS filenames from directory entry form
13460#	like IO.SYS+MSDOS.SYS or ibmbio.com+ibmdos.com
134610	name			2xDOS-filename
13462# display 1 space
13463>0			ubyte		x		\b
13464>0			use		DOS-filename
13465>11			ubyte		x		\b+
13466>11			use		DOS-filename
13467
13468# https://en.wikipedia.org/wiki/Master_boot_record#PTE
13469# display standard partition table
134700	name				partition-table
13471#>0		ubyte		x	PARTITION-TABLE
13472# test and display 1st til 4th partition table entry
13473>0		use			partition-entry-test
13474>16		use			partition-entry-test
13475>32		use			partition-entry-test
13476>48		use			partition-entry-test
13477#		test for entry of partition table
134780	name				partition-entry-test
13479# partition type ID > 0
13480>4		ubyte		>0
13481# active flag 0
13482>>0		ubyte		0
13483>>>0		use		partition-entry
13484# active flag 0x80, 0x81, ...
13485>>0		ubyte		>0x7F
13486>>>0		use		partition-entry
13487#		Print entry of partition table
134880	name				partition-entry
13489# partition type ID > 0
13490>4		ubyte		>0	\b; partition
13491>>64		leshort		0xAA55	1
13492>>48		leshort		0xAA55	2
13493>>32		leshort		0xAA55	3
13494>>16		leshort		0xAA55	4
13495>>4		ubyte		x	: ID=%#x
13496>>0		ubyte&0x80	0x80	\b, active
13497>>0		ubyte		>0x80	%#x
13498>>1		ubyte		x	\b, start-CHS (
13499>>1		use		partition-chs
13500>>5		ubyte		x	\b), end-CHS (
13501>>5		use		partition-chs
13502>>8		ulelong		x	\b), startsector %u
13503>>12		ulelong		x	\b, %u sectors
13504#		Print cylinder,head,sector (CHS) of partition entry
135050	name				partition-chs
13506# cylinder
13507>1		ubyte		x	\b0x
13508>1		ubyte&0xC0	0x40	\b1
13509>1		ubyte&0xC0	0x80	\b2
13510>1		ubyte&0xC0	0xC0	\b3
13511>2		ubyte		x	\b%x
13512# head
13513>0		ubyte		x	\b,%u
13514# sector
13515>1		ubyte&0x3F	x	\b,%u
13516
13517# FATX
135180		string		FATX		FATX filesystem data
13519
13520# romfs filesystems - Juan Cespedes <cespedes@debian.org>
135210	string		-rom1fs-	romfs filesystem, version 1
13522>8	belong	x			%d bytes,
13523>16	string	x			named %s.
13524
13525# netboot image - Juan Cespedes <cespedes@debian.org>
135260	lelong		0x1b031336L	Netboot image,
13527>4	lelong&0xFFFFFF00	0
13528>>4	lelong&0x100	0x000		mode 2
13529>>4	lelong&0x100	0x100		mode 3
13530>4	lelong&0xFFFFFF00	!0	unknown mode
13531
135320x18b	string	OS/2	OS/2 Boot Manager
13533
13534# updated by Joerg Jenderek at Oct 2008 and Sep 2012
13535# https://syslinux.zytor.com/iso.php
13536# tested with versions 1.47,1.48,1.49,1.50,1.62,1.76,2.00,2.10;3.00,3.11,3.31,;3.70,3.71,3.73,3.75,3.80,3.82,3.84,3.86,4.01,4.03 and 4.05
13537# assembler instructions: cli;jmp 0:7Cyy (yy=0x40,0x5e,0x6c,0x6e,0x77);nop;nop
135380	ulequad&0x909000007cc0eafa	0x909000007c40eafa
13539>631	search/689	ISOLINUX\ 	isolinux Loader
13540>>&0	string		x		(version %-4.4s)
13541# https://syslinux.zytor.com/pxe.php
13542# assembler instructions: jmp 7C05
135430	ulelong	0x007c05ea		pxelinux loader (version 2.13 or older)
13544# assembler instructions: pushfd;pushad
135450	ulelong	0x60669c66		pxelinux loader
13546# assembler instructions: jmp 05
135470	ulelong	0xc00005ea		pxelinux loader (version 3.70 or newer)
13548# https://syslinux.zytor.com/wiki/index.php/SYSLINUX
135490	string	LDLINUX\ SYS\ 		SYSLINUX loader
13550>12	string	x			(older version %-4.4s)
135510	string	\r\nSYSLINUX\ 		SYSLINUX loader
13552>11	string	x			(version %-4.4s)
13553# syslinux updated and separated from "DOS/MBR boot sector" by Joerg Jenderek at Sep 2012
13554# assembler instructions: jmp yy (yy=0x3c,0x58);nop;"SYSLINUX"
135550	ulelong&0x80909bEB	0x009018EB
13556# OEM-ID not always "SYSLINUX"
13557>434	search/47	Boot\ failed
13558# followed by \r\n\0 or :\
13559>>482	search/132	\0LDLINUX\ SYS		Syslinux bootloader (version 2.13 or older)
13560>>1	ubyte		0x58			Syslinux bootloader (version 3.0-3.9)
13561>459	search/30	Boot\ error\r\n\0
13562>>1	ubyte		0x58			Syslinux bootloader (version 3.10 or newer)
13563# SYSLINUX MBR updated and separated from "DOS/MBR boot sector" by Joerg Jenderek at Sep 2012
13564# assembler instructions: mov di,0600h;mov cx,0100h
1356516	search/4	\xbf\x00\x06\xb9\x00\x01
13566# to display SYSLINUX MBR (36) before old DOS/MBR boot sector one with partition table (strength=50+21)
13567!:strength +36
13568>94	search/249	Missing\ operating\ system
13569# followed by \r for versions older 3.35 , .\r for versions newer 3.52 and point for other
13570# skip Ranish MBR
13571>>408	search/4	HD1/\0
13572>>408	default		x
13573>>>250	search/118	\0Operating\ system\ load		SYSLINUX MBR
13574# followed by "ing " or space
13575>>>>292	search/98	error
13576>>>>>&0	string		\r		    			(version 3.35 or older)
13577>>>>>&0	string		.\r					(version 3.52 or newer)
13578>>>>>&0	default		x					(version 3.36-3.51 )
13579>368	search/106	\0Disk\ error\ on\ boot\r\n		SYSLINUX GPT-MBR
13580>>156	search/10	\0Boot\ partition\ not\ found\r\n
13581>>>270	search/10	\0OS\ not\ bootable\r\n			(version 3.86 or older)
13582>>174	search/10	\0Missing\ OS\r\n
13583>>>189	search/10	\0Multiple\ active\ partitions\r\n	(version 4.00 or newer)
13584# SYSLINUX END
13585
13586# NetBSD mbr variants (master-boot-code version 1.22) added by Joerg Jenderek at Nov 2012
13587# assembler instructions: xor ax,ax;mov	ax,ss;mov sp,0x7c00;mov	ax,
135880	ubequad		0x31c08ed0bc007c8e
13589# mbr_bootsel magic before partition table not reliable with small ipl fragments
13590#>444	uleshort	0xb5e1
13591>0004	uleshort	x
13592# ERRorTeXT
13593>>181	search/166		Error\ \0\r\n				NetBSD mbr
13594# NT Drive Serial Number https://thestarman.pcministry.com/asm/mbr/Win2kmbr.htm#DS
13595>>>0x1B8	ubelong		>0					\b,Serial %#-.8x
13596# BOOTSEL definitions contains assembler instructions: int 0x13;pop dx;push dx;push dx
13597>>>0xbb		search/71	\xcd\x13\x5a\x52\x52			\b,bootselector
13598# BOOT_EXTENDED definitions contains assembler instructions:
13599# xchg ecx,edx;addl ecx,edx;movw lba_info,si;movb 0x42,ah;pop dx;push dx;int 0x13
13600>>>0x96	search/1	\x66\x87\xca\x66\x01\xca\x66\x89\x16\x3a\x07\xbe\x32\x07\xb4\x42\x5a\x52\xcd\x13	\b,boot extended
13601# COM_PORT_VAL definitions contains assembler instructions: outb al,dx;add 5,dl;inb %dx;test 0x40,al
13602>>>0x130	search/55	\xee\x80\xc2\x05\xec\xa8\x40		\b,serial IO
13603# not TERSE_ERROR
13604>>>196		search/106	No\ active\ partition\0
13605>>>>&0		string		Disk\ read\ error\0
13606>>>>>&0		string		No\ operating\ system\0			\b,verbose
13607# not NO_CHS definitions contains assembler instructions: pop dx;push dx;movb $8,ah;int0x13
13608>>>0x7d		search/7	\x5a\x52\xb4\x08\xcd\x13		\b,CHS
13609# not NO_LBA_CHECK definitions contains assembler instructions: movw 0x55aa,bx;movb 0x41,ah;pop	dx;push	dx;int 0x13
13610>>>0xa4		search/84	\xbb\xaa\x55\xb4\x41\x5a\x52\xcd\x13	\b,LBA-check
13611# assembler instructions: movw nametab,bx
13612>>>0x26	    search/21	\xBB\x94\x07
13613# not NO_BANNER definitions contains assembler instructions: mov banner,si;call message_crlf
13614>>>>&-9	ubequad&0xBE00f0E800febb94	0xBE0000E80000bb94
13615>>>>>181	search/166		Error\ \0
13616# "a: disk" , "Fn: diskn" or "NetBSD MBR boot"
13617>>>>>>&3	string			x				\b,"%s"
13618>>>446	use		partition-table
13619# Andrea Mazzoleni AdvanceCD mbr loader of http://advancemame.sourceforge.net/boot-readme.html
13620# added by Joerg Jenderek at Nov 2012 for versions 1.3 - 1.4
13621# assembler instructions: jmp short 0x58;nop;ASCII
136220	ubequad&0xeb58908000000000	0xeb58900000000000
13623# assembler instructions: cli;xor ax,ax;mov ds,ax;mov es,ax;mov ss,
13624>(1.b+2)	ubequad			0xfa31c08ed88ec08e
13625# Error messages at end of code
13626>>376		string	No\ operating\ system\r\n\0
13627>>>398		string	Disk\ error\r\n\0FDD\0HDD\0
13628>>>>419		string	\ EBIOS\r\n\0				AdvanceMAME mbr
13629
13630# Neil Turton mbr loader variant of https://www.chiark.greenend.org.uk/~neilt/mbr/
13631# added by Joerg Jenderek at Mar 2011 for versions 1.0.0 - 1.1.11
13632# for 1st version assembler instructions:	cld;xor ax,ax;mov DS,ax;MOV ES,AX;mov SI,
13633# or  	  	  	    			cld;xor ax,ax;mov SS,ax;XOR SP,SP;mov DS,
136340	ulequad&0xcE1b40D48EC031FC	0x8E0000D08EC031FC
13635# pointer to the data starting with Neil Turton signature string
13636>(0x1BC.s)		string		NDTmbr
13637>>&-14			string		1234F\0			Turton mbr (
13638# parameters also viewed by install-mbr --list
13639>>>(0x1BC.s+7)		ubyte		x			\b%u<=
13640>>>(0x1BC.s+9)		ubyte		x			\bVersion<=%u
13641#>>>(0x1BC.s+8)		ubyte		x			asm_flag_%x
13642>>>(0x1BC.s+8)		ubyte&1		1			\b,Y2K-Fix
13643# variant used by testdisk of https://www.cgsecurity.org/wiki/Menu_MBRCode
13644>>>(0x1BC.s+8)		ubyte&2		2			\b,TestDisk
13645#0x1~1,..,0x8~4,0x10~F,0x80~A enabled
13646#>>>(0x1BC.s+10)		ubyte		x			\b,flags %#x
13647#0x0~1,0x1~2,...,0x3~4,0x4~F,0x7~D default boot
13648#>>>(0x1BC.s+11)		ubyte		x			\b,cfg_def %#x
13649# for older versions
13650>>>(0x1BC.s+9)		ubyte		<2
13651#>>>>(0x1BC.s+12)	ubyte		18			\b,%hhu/18 seconds
13652>>>>(0x1BC.s+12)	ubyte		!18			\b,%u/18 seconds
13653# floppy A: or B:
13654>>>>(0x1BC.s+13)	ubyte		<2			\b,floppy %#x
13655>>>>(0x1BC.s+13)	ubyte		>1
13656# 1st hard disc
13657#>>>>>(0x1BC.s+13)	ubyte		0x80			\b,drive %#x
13658# not 1st hard disc
13659>>>>>(0x1BC.s+13)	ubyte		!0x80			\b,drive %#x
13660# for version >= 2 maximal timeout can be 65534
13661>>>(0x1BC.s+9)		ubyte		>1
13662#>>>>(0x1BC.s+12)	uleshort	18			\b,%u/18 seconds
13663>>>>(0x1BC.s+12)	uleshort	!18			\b,%u/18 seconds
13664# floppy A: or B:
13665>>>>(0x1BC.s+14)	ubyte		<2			\b,floppy %#x
13666>>>>(0x1BC.s+14)	ubyte		>1
13667# 1st hard disc
13668#>>>>>(0x1BC.s+14)	ubyte		0x80			\b,drive %#x
13669# not 1st hard disc
13670>>>>>(0x1BC.s+14)	ubyte		!0x80			\b,drive %#x
13671>>>0	ubyte		x					\b)
13672
13673# added by Joerg Jenderek
13674# In the second sector (+0x200) are variables according to grub-0.97/stage2/asm.S or
13675# grub-1.94/kern/i386/pc/startup.S
13676# https://www.gnu.org/software/grub/manual/grub.html#Embedded-data
13677# usual values are marked with comments to get only information of strange GRUB loaders
136780x200	uleshort		0x70EA
13679# found only version 3.{1,2}
13680>0x206		ubeshort	>0x0300
13681# GRUB version (0.5.)95,0.93,0.94,0.96,0.97 > "00"
13682>>0x212 	ubyte		>0x29
13683>>>0x213 	ubyte		>0x29
13684# not iso9660_stage1_5
13685#>>>0	ulelong&0x00BE5652	0x00BE5652
13686>>>>0x213 	ubyte		>0x29		GRand Unified Bootloader
13687# config_file for stage1_5 is 0xffffffff + default "/boot/grub/stage2"
13688>>>>0x217 	ubyte		0xFF		stage1_5
13689>>>>0x217 	ubyte		<0xFF		stage2
13690>>>>0x206	ubyte		x		\b version %u
13691>>>>0x207	ubyte		x		\b.%u
13692# module_size for 1.94
13693>>>>0x208	ulelong		<0xffffff	\b, installed partition %u
13694#>>>>0x208	ulelong		=0xffffff	\b, %lu (default)
13695>>>>0x208	ulelong		>0xffffff	\b, installed partition %u
13696# GRUB 0.5.95 unofficial
13697>>>>0x20C	ulelong&0x2E300000 0x2E300000
13698# 0=stage2	1=ffs	2=e2fs	3=fat	4=minix	5=reiserfs
13699>>>>>0x20C	ubyte		x		\b, identifier %#x
13700#>>>>>0x20D	ubyte		=0		\b, LBA flag %#x (default)
13701>>>>>0x20D	ubyte		>0		\b, LBA flag %#x
13702# GRUB version as string
13703>>>>>0x20E 	string		>\0		\b, GRUB version %-s
13704# for stage1_5 is 0xffffffff + config_file "/boot/grub/stage2" default
13705>>>>>>0x215 	ulong		0xffffffff
13706>>>>>>>0x219 	string		>\0		\b, configuration file %-s
13707>>>>>>0x215 	ulong		!0xffffffff
13708>>>>>>>0x215 	string		>\0		\b, configuration file %-s
13709# newer GRUB versions
13710>>>>0x20C	ulelong&0x2E300000 !0x2E300000
13711##>>>>>0x20C	ulelong		=0		\b, saved entry %d (usual)
13712>>>>>0x20C	ulelong		>0		\b, saved entry %d
13713# for 1.94 contains kernel image size
13714# for 0.93,0.94,0.96,0.97
13715# 0=stage2	1=ffs	2=e2fs	3=fat	4=minix	5=reiserfs	6=vstafs	7=jfs	8=xfs	9=iso9660	a=ufs2
13716>>>>>0x210	ubyte		x		\b, identifier %#x
13717# The flag for LBA forcing is in most cases 0
13718#>>>>>0x211	ubyte		=0		\b, LBA flag %#x (default)
13719>>>>>0x211	ubyte		>0		\b, LBA flag %#x
13720# GRUB version as string
13721>>>>>0x212 	string		>\0		\b, GRUB version %-s
13722# for stage1_5 is 0xffffffff + config_file "/boot/grub/stage2" default
13723>>>>>0x217 	ulong		0xffffffff
13724>>>>>>0x21b 	string		>\0		\b, configuration file %-s
13725>>>>>0x217 	ulong		!0xffffffff
13726>>>>>>0x217 	string		>\0		\b, configuration file %-s
13727
13728# DOS x86 sector updated and separated from "DOS/MBR boot sector" by Joerg Jenderek at May 2011
13729# JuMP short     bootcodeoffset NOP assembler instructions will usually be EB xx 90
13730# over BIOS parameter block (BPB)
13731# https://thestarman.pcministry.com/asm/2bytejumps.htm#FWD
13732# older drives may use Near JuMP instruction E9 xx xx
13733# minimal short forward jump found 0x29 for bootloaders or 0x0
13734# maximal short forward jump is 0x7f
13735# OEM-ID is empty or contain readable bytes
137360		ulelong&0x804000E9	0x000000E9
13737!:strength	+60
13738# mtools-3.9.8/msdos.h
13739# usual values are marked with comments to get only information of strange FAT systems
13740# valid sectorsize must be a power of 2 from 32 to 32768
13741>11		uleshort&0x001f	0
13742>>11		uleshort	<32769
13743>>>11		uleshort	>31
13744>>>>21		ubyte&0xf0	0xF0
13745>>>>>0		ubyte		0xEB		DOS/MBR boot sector
13746>>>>>>1		ubyte		x		\b, code offset %#x+2
13747>>>>>0		ubyte		0xE9
13748>>>>>>1		uleshort	x		\b, code offset %#x+3
13749>>>>>3		string		>\0		\b, OEM-ID "%-.8s"
13750#http://mirror.href.com/thestarman/asm/debug/debug2.htm#IHC
13751>>>>>>8		string		IHC		\b cached by Windows 9M
13752>>>>>11		uleshort	>512		\b, Bytes/sector %u
13753#>>>>>11	uleshort	=512		\b, Bytes/sector %u=512 (usual)
13754>>>>>11		uleshort	<512		\b, Bytes/sector %u
13755>>>>>13		ubyte		>1		\b, sectors/cluster %u
13756#>>>>>13	ubyte		=1		\b, sectors/cluster %u (usual on Floppies)
13757# for lazy FAT32 implementation like Transcend digital photo frame PF830
13758>>>>>82		string/c	fat32
13759>>>>>>14	uleshort	!32		\b, reserved sectors %u
13760#>>>>>>14	uleshort	=32		\b, reserved sectors %u (usual Fat32)
13761>>>>>82		string/c	!fat32
13762>>>>>>14	uleshort	>1		\b, reserved sectors %u
13763#>>>>>>14	uleshort	=1		\b, reserved sectors %u (usual FAT12,FAT16)
13764#>>>>>>14	uleshort	0		\b, reserved sectors %u (usual NTFS)
13765>>>>>16		ubyte		>2		\b, FATs %u
13766#>>>>>16	ubyte		=2		\b, FATs %u (usual)
13767>>>>>16		ubyte		=1		\b, FAT  %u
13768>>>>>16		ubyte		>0
13769>>>>>17		uleshort	>0		\b, root entries %u
13770#>>>>>17	uleshort	=0		\b, root entries %hu=0 (usual Fat32)
13771>>>>>19		uleshort	>0		\b, sectors %u (volumes <=32 MB)
13772#>>>>>19	uleshort	=0		\b, sectors %hu=0 (usual Fat32)
13773>>>>>21		ubyte		>0xF0		\b, Media descriptor %#x
13774#>>>>>21	ubyte		=0xF0		\b, Media descriptor %#x (usual floppy)
13775>>>>>21		ubyte		<0xF0		\b, Media descriptor %#x
13776>>>>>22		uleshort	>0		\b, sectors/FAT %u
13777#>>>>>22	uleshort	=0		\b, sectors/FAT %hu=0 (usual Fat32)
13778>>>>>24		uleshort	x		\b, sectors/track %u
13779>>>>>26		ubyte		>2		\b, heads %u
13780#>>>>>26	ubyte		=2		\b, heads %u (usual floppy)
13781>>>>>26		ubyte		=1		\b, heads %u
13782# valid only for sector sizes with more then 32 Bytes
13783>>>>>11		uleshort	>32
13784# https://en.wikipedia.org/wiki/Design_of_the_FAT_file_system#Extended_BIOS_Parameter_Block
13785# skip for values 2,2Ah,70h,73h,DFh
13786# and continue for extended boot signature values 0,28h,29h,80h
13787>>>>>>38	ubyte&0x56	=0
13788>>>>>>>28	ulelong		>0		\b, hidden sectors %u
13789#>>>>>>>28	ulelong		=0		\b, hidden sectors %u (usual floppy)
13790>>>>>>>32	ulelong		>0		\b, sectors %u (volumes > 32 MB)
13791#>>>>>>>32	ulelong		=0		\b, sectors %u (volumes > 32 MB)
13792# FAT<32 bit specific
13793>>>>>>>82	string/c	!fat32
13794#>>>>>>>>36	ubyte		0x80		\b, physical drive %#x=0x80 (usual harddisk)
13795#>>>>>>>>36	ubyte		0		\b, physical drive %#x=0 (usual floppy)
13796>>>>>>>>36	ubyte		!0x80
13797>>>>>>>>>36	ubyte		!0		\b, physical drive %#x
13798# VGA-copy CRC or
13799# in Windows NT bit 0 is a dirty flag to request chkdsk at boot time. bit 1 requests surface scan too
13800>>>>>>>>37	ubyte		>0		\b, reserved %#x
13801#>>>>>>>>37	ubyte		=0		\b, reserved %#x
13802# extended boot signature value is 0x80 for NTFS, 0x28 or 0x29 for others
13803>>>>>>>>38	ubyte		!0x29		\b, dos < 4.0 BootSector (%#x)
13804>>>>>>>>38	ubyte&0xFE	=0x28
13805>>>>>>>>>39	ulelong		x		\b, serial number %#x
13806>>>>>>>>38	ubyte		=0x29
13807>>>>>>>>>43	string		<NO\ NAME	\b, label: "%11.11s"
13808>>>>>>>>>43	string		>NO\ NAME	\b, label: "%11.11s"
13809>>>>>>>>>43	string		=NO\ NAME	\b, unlabeled
13810# there exist some old floppies without word FAT at offset 54
13811# a word like "FATnm   " is only a hint for a FAT size on nm-bits
13812# Normally the number of clusters is calculated by the values of BPP.
13813# if it is small enough FAT is 12 bit, if it is too big enough FAT is 32 bit,
13814# otherwise FAT is 16 bit.
13815# http://homepage.ntlworld.com/jonathan.deboynepollard/FGA/determining-fat-widths.html
13816>>>>>82		string/c	!fat32
13817>>>>>>54	string		FAT12		\b, FAT (12 bit)
13818>>>>>>54	string		FAT16		\b, FAT (16 bit)
13819>>>>>>54	default		x
13820# determinate FAT bit size by media descriptor
13821# small floppies implies FAT12
13822>>>>>>>21	ubyte		<0xF0		\b, FAT (12 bit by descriptor)
13823# with media descriptor F0h floppy or maybe superfloppy with FAT16
13824>>>>>>>21	ubyte		=0xF0
13825# superfloppy (many sectors) implies FAT16
13826>>>>>>>>32	ulelong		>0xFFFF		\b, FAT (16 bit by descriptor+sectors)
13827# no superfloppy with media descriptor F0h implies FAT12
13828>>>>>>>>32	default		x		\b, FAT (12 bit by descriptor+sectors)
13829# with media descriptor F8h floppy or hard disc with FAT12 or FAT16
13830>>>>>>>21	ubyte		=0xF8
13831# 360 KiB with media descriptor F8h, 9 sectors per track ,single sided floppy implies FAT12
13832>>>>>>>>19	ubequad	0xd002f80300090001	\b, FAT (12 bit by descriptor+geometry)
13833# hard disc with FAT12 or FAT16
13834>>>>>>>>19	default		x		\b, FAT (1Y bit by descriptor)
13835# with media descriptor FAh floppy, RAM disc with FAT12 or FAT16 or Tandy hard disc
13836>>>>>>>21	ubyte		=0xFA
13837# 320 KiB with media descriptor FAh, 8 sectors per track ,single sided floppy implies FAT12
13838>>>>>>>>19	ubequad	0x8002fa0200080001	\b, FAT (12 bit by descriptor+geometry)
13839# RAM disc with FAT12 or FAT16 or Tandy hard disc
13840>>>>>>>>19	default		x		\b, FAT (1Y bit by descriptor)
13841# others are floppy
13842>>>>>>>21	default		x		\b, FAT (12 bit by descriptor)
13843# FAT32 bit specific
13844>>>>>82		string/c	fat32		\b, FAT (32 bit)
13845>>>>>>36	ulelong		x		\b, sectors/FAT %u
13846# https://technet.microsoft.com/en-us/library/cc977221.aspx
13847>>>>>>40	uleshort	>0		\b, extension flags %#x
13848#>>>>>>40	uleshort	=0		\b, extension flags %hu
13849>>>>>>42	uleshort	>0		\b, fsVersion %u
13850#>>>>>>42	uleshort	=0		\b, fsVersion %u (usual)
13851>>>>>>44	ulelong		>2		\b, rootdir cluster %u
13852#>>>>>>44	ulelong		=2		\b, rootdir cluster %u
13853#>>>>>>44	ulelong		=1		\b, rootdir cluster %u
13854>>>>>>48	uleshort	>1		\b, infoSector %u
13855#>>>>>>48	uleshort	=1		\b, infoSector %u (usual)
13856>>>>>>48	uleshort	<1		\b, infoSector %u
13857# 0 or 0xFFFF instead of usual 6 means no backup sector
13858>>>>>>50	uleshort	=0xFFFF		\b, no Backup boot sector
13859>>>>>>50	uleshort	=0		\b, no Backup boot sector
13860#>>>>>>50	uleshort	=6		\b, Backup boot sector %u (usual)
13861>>>>>>50	default		x
13862>>>>>>>50	uleshort	x		\b, Backup boot sector %u
13863# corrected by Joerg Jenderek at Feb 2011 according to https://thestarman.pcministry.com/asm/mbr/MSWIN41.htm#FSINFO
13864>>>>>>52	ulelong		>0		\b, reserved1 %#x
13865>>>>>>56	ulelong		>0		\b, reserved2 %#x
13866>>>>>>60	ulelong		>0		\b, reserved3 %#x
13867# same structure as FAT1X
13868#>>>>>>64	ubyte		=0x80		\b, physical drive %#x=80 (usual harddisk)
13869#>>>>>>64	ubyte		=0		\b, physical drive %#x=0 (usual floppy)
13870>>>>>>64	ubyte		!0x80
13871>>>>>>>64	ubyte		>0		\b, physical drive %#x
13872# in Windows NT bit 0 is a dirty flag to request chkdsk at boot time. bit 1 requests surface scan too
13873>>>>>>65	ubyte		>0		\b, reserved %#x
13874>>>>>>66	ubyte		!0x29		\b, dos < 4.0 BootSector (%#x)
13875>>>>>>66	ubyte		=0x29
13876>>>>>>>67	ulelong		x		\b, serial number %#x
13877>>>>>>>71	string		<NO\ NAME	\b, label: "%11.11s"
13878>>>>>>>71	string		>NO\ NAME	\b, label: "%11.11s"
13879>>>>>>>71	string		=NO\ NAME	\b, unlabeled
13880# additional tests for floppy image added by Joerg Jenderek
13881# no fixed disk
13882>>>>>21		ubyte		!0xF8
13883# floppy media with 12 bit FAT
13884>>>>>>54	string		!FAT16
13885# test for FAT after bootsector
13886>>>>>>>(11.s)	ulelong&0x00ffffF0	0x00ffffF0	\b, followed by FAT
13887# floppy image
13888!:mime application/x-ima
13889# NTFS specific added by Joerg Jenderek at Mar 2011 according to https://thestarman.pcministry.com/asm/mbr/NTFSBR.htm
13890# and http://homepage.ntlworld.com/jonathan.deboynepollard/FGA/bios-parameter-block.html
13891# 0 FATs
13892>>>>>16	ubyte		=0
13893# 0 root entries
13894>>>>>>17	uleshort	=0
13895# 0 DOS sectors
13896>>>>>>>19	uleshort	=0
13897# 0 sectors/FAT
13898# dos < 4.0 BootSector value found is 0x80
13899#38	ubyte		=0x80			\b, dos < 4.0 BootSector (%#x)
13900>>>>>>>>22	uleshort	=0		\b; NTFS
13901>>>>>>>>>24	uleshort	>0		\b, sectors/track %u
13902>>>>>>>>>36	ulelong		!0x800080	\b, physical drive %#x
13903>>>>>>>>>40	ulequad		>0		\b, sectors %lld
13904>>>>>>>>>48	ulequad		>0		\b, $MFT start cluster %lld
13905>>>>>>>>>56	ulequad		>0		\b, $MFTMirror start cluster %lld
13906# Values 0 to 127 represent MFT record sizes of 0 to 127 clusters.
13907# Values 128 to 255 represent MFT record sizes of 2^(256-N) bytes.
13908>>>>>>>>>64	lelong		<256
13909>>>>>>>>>>64	lelong		<128		\b, clusters/RecordSegment %d
13910>>>>>>>>>>64	ubyte		>127		\b, bytes/RecordSegment 2^(-1*%i)
13911# Values 0 to 127 represent index block sizes of 0 to 127 clusters.
13912# Values 128 to 255 represent index block sizes of 2^(256-N) byte
13913>>>>>>>>>68	ulelong		<256
13914>>>>>>>>>>68	ulelong		<128		\b, clusters/index block %d
13915#>>>>>>>>>>68	ulelong		>127		\b, bytes/index block 2^(256-%d)
13916>>>>>>>>>>68	ubyte		>127		\b, bytes/index block 2^(-1*%i)
13917>>>>>>>>>72	ulequad		x		\b, serial number 0%llx
13918>>>>>>>>>80	ulelong		>0		\b, checksum %#x
13919#>>>>>>>>>80	ulelong		=0		\b, checksum %#x=0 (usual)
13920# unicode loadername size jump
13921>>>>>>>>>(0x200.s*2)	ubyte				x
13922# in next sector loadername terminated by unicode CTRL-D and $
13923>>>>>>>>>>&0x1FF	ulequad&0x0000FFffFFffFF00	0x0000002400040000 \b; contains
13924# if 2nd NTFS sectors is found then assume whole filesystem
13925#!:mime		application/x-raw-disk-image
13926!:ext		img/bin/ntfs
13927>>>>>>>>>>>0x200	use				ntfs-sector2
13928
13929# For 2nd NTFS sector added by Joerg Jenderek at Jan 2013, Mar 2019
13930# https://thestarman.pcministry.com/asm/mbr/NTFSbrHexEd.htm
13931# unused assembler instructions short JMP y2;NOP;NOP
139320x056		ulelong&0xFFFF0FFF	0x909002EB	NTFS
13933#!:mime		application/octet-stream
13934!:ext		bin
13935>0		use		ntfs-sector2
13936# https://memory.dataram.com/products-and-services/software/ramdisk
13937# assembler instructions JMP C000;NOP
139380x056		ulelong			0x9000c0e9	NTFS
13939#!:mime		application/octet-stream
13940!:ext		bin
13941>0		use		ntfs-sector2
13942# check for characteristics of second NTFS sector and then display loader name
139430		name		ntfs-sector2
13944# number of utf16 characters of loadername
13945>0		uleshort	<8
13946# unused assembler instructions JMP y2;NOP;NOP or JMP C000;NOP
13947>>0x056		ulelong&0xFF0000FD	0x900000E9
13948# loadernames are NTLDR,CMLDR,PELDR,$LDR$ or BOOTMGR
13949>>>0x002		lestring16	x	bootstrap %-5.5s
13950# check for 7 character length of loader name like BOOTMGR
13951>>>0		uleshort	7
13952>>>>0x0c	lestring16	x	\b%-2.2s
13953### DOS,NTFS boot sectors end
13954
13955# ntfsclone-image is a special save format for NTFS volumes,
13956# created and restored by the ntfsclone program
139570	string	\0ntfsclone-image	ntfsclone image,
13958>0x10	byte	x			version %d.
13959>0x11	byte	x			\b%d,
13960>0x12	lelong	x			cluster size %d,
13961>0x16	lequad	x			device size %lld,
13962>0x1e	lequad	x			%lld total clusters,
13963>0x26	lequad	x			%lld clusters in use
13964
139659564	lelong		0x00011954	Unix Fast File system [v1] (little-endian),
13966>8404	string		x		last mounted on %s,
13967#>9504	ledate		x		last checked at %s,
13968>8224	ledate		x		last written at %s,
13969>8401	byte		x		clean flag %d,
13970>8228	lelong		x		number of blocks %d,
13971>8232	lelong		x		number of data blocks %d,
13972>8236	lelong		x		number of cylinder groups %d,
13973>8240	lelong		x		block size %d,
13974>8244	lelong		x		fragment size %d,
13975>8252	lelong		x		minimum percentage of free blocks %d,
13976>8256	lelong		x		rotational delay %dms,
13977>8260	lelong		x		disk rotational speed %drps,
13978>8320	lelong		0		TIME optimization
13979>8320	lelong		1		SPACE optimization
13980
1398142332	lelong		0x19540119	Unix Fast File system [v2] (little-endian)
13982>&-1164	string		x		last mounted on %s,
13983>&-696	string		>\0		volume name %s,
13984>&-304	leqldate	x		last written at %s,
13985>&-1167	byte		x		clean flag %d,
13986>&-1168	byte		x		readonly flag %d,
13987>&-296	lequad		x		number of blocks %lld,
13988>&-288	lequad		x		number of data blocks %lld,
13989>&-1332	lelong		x		number of cylinder groups %d,
13990>&-1328	lelong		x		block size %d,
13991>&-1324	lelong		x		fragment size %d,
13992>&-180	lelong		x		average file size %d,
13993>&-176	lelong		x		average number of files in dir %d,
13994>&-272	lequad		x		pending blocks to free %lld,
13995>&-264	lelong		x		pending inodes to free %d,
13996>&-664	lequad		x		system-wide uuid %0llx,
13997>&-1316	lelong		x		minimum percentage of free blocks %d,
13998>&-1248	lelong		0		TIME optimization
13999>&-1248	lelong		1		SPACE optimization
14000
1400166908	lelong		0x19540119	Unix Fast File system [v2] (little-endian)
14002>&-1164	string		x		last mounted on %s,
14003>&-696	string		>\0		volume name %s,
14004>&-304	leqldate	x		last written at %s,
14005>&-1167	byte		x		clean flag %d,
14006>&-1168	byte		x		readonly flag %d,
14007>&-296	lequad		x		number of blocks %lld,
14008>&-288	lequad		x		number of data blocks %lld,
14009>&-1332	lelong		x		number of cylinder groups %d,
14010>&-1328	lelong		x		block size %d,
14011>&-1324	lelong		x		fragment size %d,
14012>&-180	lelong		x		average file size %d,
14013>&-176	lelong		x		average number of files in dir %d,
14014>&-272	lequad		x		pending blocks to free %lld,
14015>&-264	lelong		x		pending inodes to free %d,
14016>&-664	lequad		x		system-wide uuid %0llx,
14017>&-1316	lelong		x		minimum percentage of free blocks %d,
14018>&-1248	lelong		0		TIME optimization
14019>&-1248	lelong		1		SPACE optimization
14020
140219564	belong		0x00011954	Unix Fast File system [v1] (big-endian),
14022>7168   belong		0x4c41424c	Apple UFS Volume
14023>>7186  string		x		named %s,
14024>>7176  belong		x		volume label version %d,
14025>>7180  bedate		x		created on %s,
14026>8404	string		x		last mounted on %s,
14027#>9504	bedate		x		last checked at %s,
14028>8224	bedate		x		last written at %s,
14029>8401	byte		x		clean flag %d,
14030>8228	belong		x		number of blocks %d,
14031>8232	belong		x		number of data blocks %d,
14032>8236	belong		x		number of cylinder groups %d,
14033>8240	belong		x		block size %d,
14034>8244	belong		x		fragment size %d,
14035>8252	belong		x		minimum percentage of free blocks %d,
14036>8256	belong		x		rotational delay %dms,
14037>8260	belong		x		disk rotational speed %drps,
14038>8320	belong		0		TIME optimization
14039>8320	belong		1		SPACE optimization
14040
1404142332	belong		0x19540119	Unix Fast File system [v2] (big-endian)
14042>&-1164	string		x		last mounted on %s,
14043>&-696	string		>\0		volume name %s,
14044>&-304	beqldate	x		last written at %s,
14045>&-1167	byte		x		clean flag %d,
14046>&-1168	byte		x		readonly flag %d,
14047>&-296	bequad		x		number of blocks %lld,
14048>&-288	bequad		x		number of data blocks %lld,
14049>&-1332	belong		x		number of cylinder groups %d,
14050>&-1328	belong		x		block size %d,
14051>&-1324	belong		x		fragment size %d,
14052>&-180	belong		x		average file size %d,
14053>&-176	belong		x		average number of files in dir %d,
14054>&-272	bequad		x		pending blocks to free %lld,
14055>&-264	belong		x		pending inodes to free %d,
14056>&-664	bequad		x		system-wide uuid %0llx,
14057>&-1316	belong		x		minimum percentage of free blocks %d,
14058>&-1248	belong		0		TIME optimization
14059>&-1248	belong		1		SPACE optimization
14060
1406166908	belong		0x19540119	Unix Fast File system [v2] (big-endian)
14062>&-1164	string		x		last mounted on %s,
14063>&-696	string		>\0		volume name %s,
14064>&-304	beqldate	x		last written at %s,
14065>&-1167	byte		x		clean flag %d,
14066>&-1168	byte		x		readonly flag %d,
14067>&-296	bequad		x		number of blocks %lld,
14068>&-288	bequad		x		number of data blocks %lld,
14069>&-1332	belong		x		number of cylinder groups %d,
14070>&-1328	belong		x		block size %d,
14071>&-1324	belong		x		fragment size %d,
14072>&-180	belong		x		average file size %d,
14073>&-176	belong		x		average number of files in dir %d,
14074>&-272	bequad		x		pending blocks to free %lld,
14075>&-264	belong		x		pending inodes to free %d,
14076>&-664	bequad		x		system-wide uuid %0llx,
14077>&-1316	belong		x		minimum percentage of free blocks %d,
14078>&-1248	belong		0		TIME optimization
14079>&-1248	belong		1		SPACE optimization
14080
140810	ulequad		0xc8414d4dc5523031	HAMMER filesystem (little-endian),
14082>0x90	lelong+1	x			volume %d
14083>0x94	lelong		x			(of %d),
14084>0x50	string		x			name %s,
14085>0x98	ulelong		x			version %u,
14086>0xa0	ulelong		x			flags %#x
14087
140880	ulequad		0x48414d3205172011	HAMMER2 filesystem (little-endian),
14089>0x3b	byte		x			volume %d,
14090>0x28	ulequad/1073741824 x			size %lluGB,
14091>0x30	ulelong		x			version %u,
14092>0x34	ulelong		x			flags %#x
14093
14094# ext2/ext3 filesystems - Andreas Dilger <adilger@dilger.ca>
14095# ext4 filesystem - Eric Sandeen <sandeen@sandeen.net>
14096# volume label and UUID Russell Coker
14097# https://etbe.coker.com.au/2008/07/08/label-vs-uuid-vs-device/
140980x438   leshort         0xEF53          Linux
14099>0x44c  lelong          x               rev %d
14100>0x43e  leshort         x               \b.%d
14101# No journal?  ext2
14102>0x45c  lelong          ^0x0000004      ext2 filesystem data
14103>>0x43a leshort         ^0x0000001      (mounted or unclean)
14104# Has a journal?  ext3 or ext4
14105>0x45c  lelong          &0x0000004
14106#  and small INCOMPAT?
14107>>0x460 lelong          <0x0000040
14108#   and small RO_COMPAT?
14109>>>0x464 lelong         <0x0000008      ext3 filesystem data
14110#   else large RO_COMPAT?
14111>>>0x464 lelong         >0x0000007      ext4 filesystem data
14112#  else large INCOMPAT?
14113>>0x460	lelong          >0x000003f      ext4 filesystem data
14114>0x468	ubelong		x		\b, UUID=%08x
14115>0x46c	ubeshort	x		\b-%04x
14116>0x46e	ubeshort	x		\b-%04x
14117>0x470	ubeshort	x		\b-%04x
14118>0x472	ubelong		x		\b-%08x
14119>0x476	ubeshort	x		\b%04x
14120>0x478	string		>0		\b, volume name "%s"
14121# General flags for any ext* fs
14122>0x460	lelong          &0x0000004      (needs journal recovery)
14123>0x43a	leshort         &0x0000002      (errors)
14124# INCOMPAT flags
14125>0x460	lelong          &0x0000001      (compressed)
14126#>0x460	lelong          &0x0000002      (filetype)
14127#>0x460	lelong          &0x0000010      (meta bg)
14128>0x460	lelong          &0x0000040      (extents)
14129>0x460	lelong          &0x0000080      (64bit)
14130#>0x460	lelong          &0x0000100      (mmp)
14131#>0x460	lelong          &0x0000200      (flex bg)
14132# RO_INCOMPAT flags
14133#>0x464	lelong          &0x0000001      (sparse super)
14134>0x464	lelong          &0x0000002      (large files)
14135>0x464	lelong          &0x0000008      (huge files)
14136#>0x464	lelong          &0x0000010      (gdt checksum)
14137#>0x464	lelong          &0x0000020      (many subdirs)
14138#>0x463	lelong          &0x0000040      (extra isize)
14139
14140# f2fs filesystem - Tuomas Tynkkynen <tuomas.tynkkynen@iki.fi>
141410x400	lelong		0xF2F52010	F2FS filesystem
14142>0x46c	ubelong		x		\b, UUID=%08x
14143>0x470	ubeshort	x		\b-%04x
14144>0x472	ubeshort	x		\b-%04x
14145>0x474	ubeshort	x		\b-%04x
14146>0x476	ubelong		x		\b-%08x
14147>0x47a	ubeshort	x		\b%04x
14148>0x147c	lestring16	x		\b, volume name "%s"
14149
14150# Minix filesystems - Juan Cespedes <cespedes@debian.org>
141510x410	leshort		0x137f
14152!:strength / 2
14153>0x402	beshort		< 100
14154>0x402	beshort		> -1		Minix filesystem, V1, 14 char names, %d zones
14155>0x1e	string		minix		\b, bootable
141560x410	beshort		0x137f
14157!:strength / 2
14158>0x402	beshort		< 100
14159>0x402	beshort		> -1		Minix filesystem, V1 (big endian), %d zones
14160>0x1e	string		minix		\b, bootable
141610x410	leshort		0x138f
14162!:strength / 2
14163>0x402	beshort		< 100
14164>0x402	beshort		> -1		Minix filesystem, V1, 30 char names, %d zones
14165>0x1e	string		minix		\b, bootable
141660x410	beshort		0x138f
14167!:strength / 2
14168>0x402	beshort		< 100
14169>0x402	beshort		> -1		Minix filesystem, V1, 30 char names (big endian), %d zones
14170>0x1e	string		minix		\b, bootable
14171# Weak Magic: this is $x
14172#0x410	leshort		0x2468
14173#>0x402	beshort		< 100
14174#>>0x402	beshort		> -1		Minix filesystem, V2, 14 char names
14175#>0x1e	string		minix		\b, bootable
14176#0x410	beshort		0x2468
14177#>0x402	beshort		< 100
14178#>0x402	beshort		> -1		Minix filesystem, V2 (big endian)
14179#>0x1e	string		minix		\b, bootable
14180#0x410	leshort		0x2478
14181#>0x402	beshort		< 100
14182#>0x402	beshort		> -1		Minix filesystem, V2, 30 char names
14183#>0x1e	string		minix		\b, bootable
14184#0x410	leshort		0x2478
14185#>0x402	beshort		< 100
14186#>0x402	beshort		> -1		Minix filesystem, V2, 30 char names
14187#>0x1e	string		minix		\b, bootable
14188#0x410	beshort		0x2478
14189#>0x402	beshort		!0		Minix filesystem, V2, 30 char names (big endian)
14190#>0x1e	string		minix		\b, bootable
14191# Weak Magic! this is MD
14192#0x418	leshort		0x4d5a
14193#>0x402	beshort		<100
14194#>>0x402	beshort		> -1		Minix filesystem, V3, 60 char names
14195
14196# SGI disk labels - Nathan Scott <nathans@debian.org>
141970	belong		0x0BE5A941	SGI disk label (volume header)
14198
14199# SGI XFS filesystem - Nathan Scott <nathans@debian.org>
142000	belong		0x58465342	SGI XFS filesystem data
14201>0x4	belong		x		(blksz %d,
14202>0x68	beshort		x		inosz %d,
14203>0x64	beshort		^0x2004		v1 dirs)
14204>0x64	beshort		&0x2004		v2 dirs)
14205
14206############################################################################
14207# Minix-ST kernel floppy
142080x800	belong		0x46fc2700	Atari-ST Minix kernel image
14209# https://en.wikipedia.org/wiki/BIOS_parameter_block
14210# floppies with valid BPB and any instruction at beginning
14211>19	string		\240\005\371\005\0\011\0\2\0	\b, 720k floppy
14212>19	string		\320\002\370\005\0\011\0\1\0	\b, 360k floppy
14213
14214############################################################################
14215# Hmmm, is this a better way of detecting _standard_ floppy images ?
1421619	string		\320\002\360\003\0\011\0\1\0	DOS floppy 360k
14217>0x1FE	leshort		0xAA55		\b, DOS/MBR hard disk boot sector
1421819	string		\240\005\371\003\0\011\0\2\0	DOS floppy 720k
14219>0x1FE	leshort		0xAA55		\b, DOS/MBR hard disk boot sector
1422019	string		\100\013\360\011\0\022\0\2\0	DOS floppy 1440k
14221>0x1FE	leshort		0xAA55		\b, DOS/MBR hard disk boot sector
14222
1422319	string		\240\005\371\005\0\011\0\2\0	DOS floppy 720k, IBM
14224>0x1FE	leshort		0xAA55		\b, DOS/MBR hard disk boot sector
1422519	string		\100\013\371\005\0\011\0\2\0	DOS floppy 1440k, mkdosfs
14226>0x1FE	leshort		0xAA55		\b, DOS/MBR hard disk boot sector
14227
1422819	string		\320\002\370\005\0\011\0\1\0	Atari-ST floppy 360k
1422919	string		\240\005\371\005\0\011\0\2\0	Atari-ST floppy 720k
14230#			|       |   |     |     |
14231#			|       |   |     |     heads
14232#			|       |   |     sectors/track
14233#			|       |   sectors/FAT
14234#			|       media descriptor
14235#		BPB:	sectors
14236
14237#  Valid media descriptor bytes for MS-DOS:
14238#
14239#     Byte   Capacity   Media Size and Type
14240#     -------------------------------------------------
14241#
14242#     F0     2.88 MB    3.5-inch, 2-sided, 36-sector
14243#     F0     1.44 MB    3.5-inch, 2-sided, 18-sector
14244#     F9     720K       3.5-inch, 2-sided, 9-sector
14245#     F9     1.2 MB     5.25-inch, 2-sided, 15-sector
14246#     FD     360K       5.25-inch, 2-sided, 9-sector
14247#     FF     320K       5.25-inch, 2-sided, 8-sector
14248#     FC     180K       5.25-inch, 1-sided, 9-sector
14249#     FE     160K       5.25-inch, 1-sided, 8-sector
14250#     FE     250K       8-inch, 1-sided, single-density
14251#     FD     500K       8-inch, 2-sided, single-density
14252#     FE     1.2 MB     8-inch, 2-sided, double-density
14253#     F8     -----      Fixed disk
14254#
14255#     FC     xxxK       Apricot 70x1x9 boot disk.
14256#
14257# Originally a bitmap:
14258#  xxxxxxx0	Not two sided
14259#  xxxxxxx1	Double sided
14260#  xxxxxx0x	Not 8 SPT
14261#  xxxxxx1x	8 SPT
14262#  xxxxx0xx	Not Removable drive
14263#  xxxxx1xx	Removable drive
14264#  11111xxx	Must be one.
14265#
14266# But now it's rather random:
14267#  111111xx	Low density disk
14268#        00	SS, Not 8 SPT
14269#        01	DS, Not 8 SPT
14270#        10	SS, 8 SPT
14271#        11	DS, 8 SPT
14272#
14273#  11111001	Double density 3 1/2 floppy disk, high density 5 1/4
14274#  11110000	High density 3 1/2 floppy disk
14275#  11111000	Hard disk any format
14276#
14277
14278# all FAT12 (strength=70) floppies with sectorsize 512 added by Joerg Jenderek at Jun 2013
14279# https://en.wikipedia.org/wiki/File_Allocation_Table#Exceptions
14280# Too Weak.
14281#512		ubelong&0xE0ffff00	0xE0ffff00
14282# without valid Media descriptor in place of BPB, cases with are done at other places
14283#>21		ubyte			<0xE5			floppy with old FAT filesystem
14284# but valid Media descriptor at begin of FAT
14285#>>512		ubyte			=0xed			720k
14286#>>512		ubyte			=0xf0			1440k
14287#>>512		ubyte			=0xf8			720k
14288#>>512		ubyte			=0xf9			1220k
14289#>>512		ubyte			=0xfa			320k
14290#>>512		ubyte			=0xfb			640k
14291#>>512		ubyte			=0xfc			180k
14292# look like an old DOS directory entry
14293#>>>0xA0E	ubequad			0
14294#>>>>0xA00	ubequad			!0
14295#!:mime application/x-ima
14296#>>512		ubyte			=0xfd
14297# look for 2nd FAT at different location to distinguish between 360k and 500k
14298#>>>0x600	ubelong&0xE0ffff00	0xE0ffff00		360k
14299#>>>0x500	ubelong&0xE0ffff00	0xE0ffff00		500k
14300#>>>0xA0E	ubequad			0
14301#!:mime application/x-ima
14302#>>512		ubyte			=0xfe
14303#>>>0x400	ubelong&0xE0ffff00	0xE0ffff00		160k
14304#>>>>0x60E	ubequad			0
14305#>>>>>0x600	ubequad			!0
14306#!:mime application/x-ima
14307#>>>0xC00	ubelong&0xE0ffff00	0xE0ffff00		1200k
14308#>>512		ubyte			=0xff			320k
14309#>>>0x60E	ubequad			0
14310#>>>>0x600	ubequad			!0
14311#!:mime application/x-ima
14312#>>512		ubyte			x			\b, Media descriptor %#x
14313# without x86 jump instruction
14314#>>0		ulelong&0x804000E9	!0x000000E9
14315# assembler instructions: CLI;MOV SP,1E7;MOV AX;07c0;MOV
14316#>>>0	ubequad				0xfabce701b8c0078e	\b, MS-DOS 1.12 bootloader
14317# IOSYS.COM+MSDOS.COM
14318#>>>>0xc4	use			2xDOS-filename
14319#>>0		ulelong&0x804000E9	=0x000000E9
14320# only x86 short jump instruction found
14321#>>>0		ubyte			=0xEB
14322#>>>>1		ubyte			x			\b, code offset %#x+2
14323# https://thestarman.pcministry.com/DOS/ibm100/Boot.htm
14324# assembler instructions: CLI;MOV AX,CS;MOV DS,AX;MOV DX,0
14325#>>>>(1.b+2)	ubequad			0xfa8cc88ed8ba0000	\b, PC-DOS 1.0 bootloader
14326# ibmbio.com+ibmdos.com
14327#>>>>>0x176	use			DOS-filename
14328#>>>>>0x181	ubyte			x			\b+
14329#>>>>>0x182	use			DOS-filename
14330# https://thestarman.pcministry.com/DOS/ibm110/Boot.htm
14331# assembler instructions: CLI;MOV AX,CS;MOV DS,AX;XOR DX,DX;MOV
14332#>>>>(1.b+2)	ubequad			0xfa8cc88ed833d28e	\b, PC-DOS 1.1 bootloader
14333# ibmbio.com+ibmdos.com
14334#>>>>>0x18b	use			DOS-filename
14335#>>>>>0x196	ubyte			x			\b+
14336#>>>>>0x197	use			DOS-filename
14337# https://en.wikipedia.org/wiki/Zenith_Data_Systems
14338# assembler instructions: MOV BX,07c0;MOV SS,BX;MOV SP,01c6
14339#>>>>(1.b+2)	ubequad			0xbbc0078ed3bcc601	\b, Zenith Data Systems MS-DOS 1.25 bootloader
14340# IO.SYS+MSDOS.SYS
14341#>>>>>0x20	use			2xDOS-filename
14342# https://en.wikipedia.org/wiki/Corona_Data_Systems
14343# assembler instructions: MOV AX,CS;MOV DS,AX;CLI;MOV SS,AX;
14344#>>>>(1.b+2)	ubequad			0x8cc88ed8fa8ed0bc	\b, MS-DOS 1.25 bootloader
14345# IO.SYS+MSDOS.SYS
14346#>>>>>0x69	use			2xDOS-filename
14347# assembler instructions: CLI;PUSH CS;POP SS;MOV SP,7c00;
14348#>>>>(1.b+2)	ubequad			0xfa0e17bc007cb860	\b, MS-DOS 2.11 bootloader
14349# defect IO.SYS+MSDOS.SYS ?
14350#>>>>>0x162	use			2xDOS-filename
14351
143520	name				cdrom
14353>38913	string   !NSR0      ISO 9660 CD-ROM filesystem data
14354!:mime	application/x-iso9660-image
14355!:ext	iso/iso9660
14356>38913	string    NSR0      UDF filesystem data
14357!:mime	application/x-iso9660-image
14358!:ext	iso/udf
14359>>38917	string    1         (version 1.0)
14360>>38917	string    2         (version 1.5)
14361>>38917	string    3         (version 2.0)
14362>>38917	byte     >0x33      (unknown version, ID %#X)
14363>>38917	byte     <0x31      (unknown version, ID %#X)
14364# The next line is not necessary because the MBR staff is done looking for boot signature
14365>0x1FE	leshort  0xAA55     (DOS/MBR boot sector)
14366# "application id" which appears to be used as a volume label
14367>32808	string/T  >\0       '%.32s'
14368>34816	string    \000CD001\001EL\ TORITO\ SPECIFICATION    (bootable)
1436937633	string    CD001     ISO 9660 CD-ROM filesystem data (raw 2352 byte sectors)
14370!:mime	application/x-iso9660-image
1437132777	string    CDROM     High Sierra CD-ROM filesystem data
14372# "application id" which appears to be used as a volume label
14373>32816	string/T  >\0       '%.32s'
14374
14375
14376# CDROM Filesystems
14377# https://en.wikipedia.org/wiki/ISO_9660
14378# Modified for UDF by gerardo.cacciari@gmail.com
1437932769	string    CD001
14380# mime line at that position does not work
14381# to display CD-ROM (70=81-11) after MBR (113=40+72+1), partition-table (71=50+21) and before Apple Driver Map (51)
14382#!:strength -11
14383# to display CD-ROM (114=81+33) before MBR (113=40+72+1), partition-table (71=50+21) and Apple Driver Map (51)
14384!:strength +35
14385>0	use	cdrom
14386
14387# URL: https://en.wikipedia.org/wiki/NRG_(file_format)
14388# Reference: https://dl.opendesktop.org/api/files/download/id/1460731811/
14389#	11577-mount-iso-0.9.5.tar.bz2/mount-iso-0.9.5/install.sh
14390# From: Joerg Jenderek
14391# Note:	Only for nero disc with once (DAO) type after 300 KB header
14392339969	string    CD001	Nero CD image at 0x4B000
14393!:mime	application/x-nrg
14394!:ext	nrg
14395>307200	use cdrom
14396
14397# .cso files
14398# Reference: https://pismotec.com/ciso/ciso.h
14399# NOTE: There are two other formats with the same magic but
14400# completely incompatible specifications:
14401# - GameCube/Wii CISO: https://github.com/dolphin-emu/dolphin/blob/master/Source/Core/DiscIO/CISOBlob.h
14402# - PSP CISO: https://github.com/jamie/ciso/blob/master/ciso.h
144030    string    CISO
14404# Other fields are used to determine what type of CISO this is:
14405# - 0x04 == 0x00200000: GameCube/Wii CISO (block_size)
14406# - 0x10 == 0x00000800: PSP CISO (ISO-9660 sector size)
14407# - 0x10 == 0x00004000: For >2GB files using maxcso...
14408# 			https://github.com/unknownbrackets/maxcso/issues/26
14409# - None of the above: Compact ISO.
14410>4	lelong	!0
14411>>4	lelong	!0x200000
14412>>>16	lelong	!0x800
14413>>>>16	lelong	!0x4000		Compressed ISO CD image
14414
14415# cramfs filesystem - russell@coker.com.au
144160       lelong    0x28cd3d45      Linux Compressed ROM File System data, little endian
14417>4      lelong  x size %u
14418>8      lelong  &1 version #2
14419>8      lelong  &2 sorted_dirs
14420>8      lelong  &4 hole_support
14421>32     lelong  x CRC %#x,
14422>36     lelong  x edition %u,
14423>40     lelong  x %u blocks,
14424>44     lelong  x %u files
14425
144260       belong    0x28cd3d45      Linux Compressed ROM File System data, big endian
14427>4      belong  x size %u
14428>8      belong  &1 version #2
14429>8      belong  &2 sorted_dirs
14430>8      belong  &4 hole_support
14431>32     belong  x CRC %#x,
14432>36     belong  x edition %u,
14433>40     belong  x %u blocks,
14434>44     belong  x %u files
14435
14436# reiserfs - russell@coker.com.au
144370x10034		string	ReIsErFs	ReiserFS V3.5
144380x10034		string	ReIsEr2Fs	ReiserFS V3.6
144390x10034		string	ReIsEr3Fs	ReiserFS V3.6.19
14440>0x1002c 	leshort	x		block size %d
14441>0x10032	leshort	&2		(mounted or unclean)
14442>0x10000	lelong	x		num blocks %d
14443>0x10040	lelong	1		tea hash
14444>0x10040	lelong	2		yura hash
14445>0x10040	lelong	3		r5 hash
14446
14447# EST flat binary format (which isn't, but anyway)
14448# From: Mark Brown <broonie@sirena.org.uk>
144490	string	ESTFBINR	EST flat binary
14450
14451# Aculab VoIP firmware
14452# From: Mark Brown <broonie@sirena.org.uk>
144530	string	VoIP\ Startup\ and	Aculab VoIP firmware
14454>35	string	x	format %s
14455
14456# From: Mark Brown <broonie@sirena.org.uk> [old]
14457# From: Behan Webster <behanw@websterwood.com>
144580	belong	0x27051956	u-boot legacy uImage,
14459>32	string	x		%s,
14460>28	byte	0		Invalid os/
14461>28	byte	1		OpenBSD/
14462>28	byte	2		NetBSD/
14463>28	byte	3		FreeBSD/
14464>28	byte	4		4.4BSD/
14465>28	byte	5		Linux/
14466>28	byte	6		SVR4/
14467>28	byte	7		Esix/
14468>28	byte	8		Solaris/
14469>28	byte	9		Irix/
14470>28	byte	10		SCO/
14471>28	byte	11		Dell/
14472>28	byte	12		NCR/
14473>28	byte	13		LynxOS/
14474>28	byte	14		VxWorks/
14475>28	byte	15		pSOS/
14476>28	byte	16		QNX/
14477>28	byte	17		Firmware/
14478>28	byte	18		RTEMS/
14479>28	byte	19		ARTOS/
14480>28	byte	20		Unity OS/
14481>28	byte	21		INTEGRITY/
14482>29	byte	0		\bInvalid CPU,
14483>29	byte	1		\bAlpha,
14484>29	byte	2		\bARM,
14485>29	byte	3		\bIntel x86,
14486>29	byte	4		\bIA64,
14487>29	byte	5		\bMIPS,
14488>29	byte	6		\bMIPS 64-bit,
14489>29	byte	7		\bPowerPC,
14490>29	byte	8		\bIBM S390,
14491>29	byte	9		\bSuperH,
14492>29	byte	10		\bSparc,
14493>29	byte	11		\bSparc 64-bit,
14494>29	byte	12		\bM68K,
14495>29	byte	13		\bNios-32,
14496>29	byte	14		\bMicroBlaze,
14497>29	byte	15		\bNios-II,
14498>29	byte	16		\bBlackfin,
14499>29	byte	17		\bAVR32,
14500>29	byte	18		\bSTMicroelectronics ST200,
14501>29	byte	19		\bSandbox architecture,
14502>29	byte	20		\bANDES Technology NDS32,
14503>29	byte	21		\bOpenRISC 1000,
14504>29	byte	22		\bARM 64-bit,
14505>29	byte	23		\bDesignWare ARC,
14506>29	byte	24		\bx86_64,
14507>29	byte	25		\bXtensa,
14508>29	byte	26		\bRISC-V,
14509>30	byte	0		Invalid Image
14510>30	byte	1		Standalone Program
14511>30	byte	2		OS Kernel Image
14512>30	byte	3		RAMDisk Image
14513>30	byte	4		Multi-File Image
14514>30	byte	5		Firmware Image
14515>30	byte	6		Script File
14516>30	byte	7		Filesystem Image (any type)
14517>30	byte	8		Binary Flat Device Tree BLOB
14518>31	byte	0		(Not compressed),
14519>31	byte	1		(gzip),
14520>31	byte	2		(bzip2),
14521>31	byte	3		(lzma),
14522>12	belong	x		%d bytes,
14523>8	bedate	x		%s,
14524>16	belong	x		Load Address: %#08X,
14525>20	belong	x		Entry Point: %#08X,
14526>4	belong	x		Header CRC: %#08X,
14527>24	belong	x		Data CRC: %#08X
14528
14529# JFFS2 file system
145300	leshort	0x1984		Linux old jffs2 filesystem data little endian
145310	beshort	0x1984		Linux old jffs2 filesystem data big endian
145320	leshort	0x1985		Linux jffs2 filesystem data little endian
145330	beshort	0x1985		Linux jffs2 filesystem data big endian
14534
14535# Squashfs
145360	name	squashfs
14537>28	beshort	x	version %d.
14538>30	beshort	x	\b%d,
14539>20	beshort 0	uncompressed,
14540>20	beshort 1	zlib
14541>20	beshort 2	lzma
14542>20	beshort 3	lzo
14543>20	beshort 4	xz
14544>20	beshort 5	lz4
14545>20	beshort 6	zstd
14546>20	beshort >0	compressed,
14547>28	beshort <3
14548>>8	belong	x	%d bytes,
14549>28	beshort >2
14550>>28	beshort <4
14551>>>63	bequad x	%lld bytes,
14552>>28	beshort >3
14553>>>40	bequad x	%lld bytes,
14554#>>67	belong	x	%d bytes,
14555>4	belong	x	%d inodes,
14556>28	beshort <2
14557>>32	beshort	x	blocksize: %d bytes,
14558>28	beshort >1
14559>>28	beshort <4
14560>>>51	belong	x	blocksize: %d bytes,
14561>>28	beshort >3
14562>>>12	belong	x	blocksize: %d bytes,
14563>28	beshort <4
14564>>39	bedate	x	created: %s
14565>28	beshort >3
14566>>8	bedate	x	created: %s
14567
145680	string	sqsh	Squashfs filesystem, big endian,
14569>0	use	squashfs
14570
145710	string	hsqs	Squashfs filesystem, little endian,
14572>0	use	\^squashfs
14573
14574# AFS Dump Magic
14575# From: Ty Sarna <tsarna@sarna.org>
145760       string                  \x01\xb3\xa1\x13\x22    AFS Dump
14577>&0     belong                  x                       (v%d)
14578>>&0    byte                    0x76
14579>>>&0   belong                  x                       Vol %d,
14580>>>>&0  byte                    0x6e
14581>>>>>&0 string                  x                       %s
14582>>>>>>&1        byte            0x74
14583>>>>>>>&0       beshort         2
14584>>>>>>>>&4      bedate          x                       on: %s
14585>>>>>>>>&0      bedate          =0                      full dump
14586>>>>>>>>&0      bedate          !0                      incremental since: %s
14587
14588#----------------------------------------------------------
14589#delta ISO    Daniel Novotny (dnovotny@redhat.com)
145900	string  DISO	Delta ISO data
14591!:strength +50
14592>4	belong  x	version %d
14593
14594# VMS backup savesets - gerardo.cacciari@gmail.com
14595#
145964            string  \x01\x00\x01\x00\x01\x00
14597>(0.s+16)    string  \x01\x01
14598>>&(&0.b+8)  byte    0x42       OpenVMS backup saveset data
14599>>>40        lelong  x          (block size %d,
14600>>>49        string  >\0        original name '%s',
14601>>>2         short   1024       VAX generated)
14602>>>2         short   2048       AXP generated)
14603>>>2         short   4096       I64 generated)
14604
14605# Summary: Oracle Clustered Filesystem
14606# Created by: Aaron Botsis <redhat@digitalmafia.org>
146078	string		OracleCFS	Oracle Clustered Filesystem,
14608>4	long		x		rev %d
14609>0	long		x		\b.%d,
14610>560	string		x		label: %.64s,
14611>136	string		x		mountpoint: %.128s
14612
14613# Summary: Oracle ASM tagged volume
14614# Created by: Aaron Botsis <redhat@digitalmafia.org>
1461532	string		ORCLDISK	Oracle ASM Volume,
14616>40	string		x		Disk Name: %0.12s
1461732	string		ORCLCLRD	Oracle ASM Volume (cleared),
14618>40	string		x		Disk Name: %0.12s
14619
14620# Oracle Clustered Filesystem - Aaron Botsis <redhat@digitalmafia.org>
146218	string		OracleCFS	Oracle Clustered Filesystem,
14622>4	long		x		rev %d
14623>0	long		x		\b.%d,
14624>560	string		x		label: %.64s,
14625>136	string		x		mountpoint: %.128s
14626
14627# Oracle ASM tagged volume - Aaron Botsis <redhat@digitalmafia.org>
1462832	string		ORCLDISK	Oracle ASM Volume,
14629>40	string		x		Disk Name: %0.12s
1463032	string		ORCLCLRD	Oracle ASM Volume (cleared),
14631>40	string		x		Disk Name: %0.12s
14632
14633# Compaq/HP RILOE floppy image
14634# From: Dirk Jagdmann <doj@cubic.org>
146350	string	CPQRFBLO	Compaq/HP RILOE floppy image
14636
14637#------------------------------------------------------------------------------
14638# Files-11 On-Disk Structure (File system for various RSX-11 and VMS flavours).
14639# These bits come from LBN 1 (home block) of ODS-1, ODS-2 and ODS-5 volumes,
14640# which is mapped to VBN 2 of [000000]INDEXF.SYS;1 - gerardo.cacciari@gmail.com
14641#
146421008    string          DECFILE11       Files-11 On-Disk Structure
14643>525    byte            x               (ODS-%d);
14644>1017   string          A               RSX-11, VAX/VMS or OpenVMS VAX file system;
14645>1017   string          B
14646>>525   byte            2               VAX/VMS or OpenVMS file system;
14647>>525   byte            5               OpenVMS Alpha or Itanium file system;
14648>984    string          x               volume label is '%-12.12s'
14649
14650# From: Thomas Klausner <wiz@NetBSD.org>
14651# https://filext.com/file-extension/DAA
14652# describes the daa file format. The magic would be:
146530	string		DAA\x0\x0\x0\x0\x0	PowerISO Direct-Access-Archive
14654
14655# From Albert Cahalan <acahalan@gmail.com>
14656# really le32 operation,destination,payloadsize (but quite predictable)
14657# 01 00 00 00 00 00 00 c0 00 02 00 00
146580	string		\1\0\0\0\0\0\0\300\0\2\0\0	Marvell Libertas firmware
14659
14660# From Eric Sandeen
14661# GFS2
146620x10000         belong          0x01161970
14663>0x10018        belong          0x0000051d      GFS1 Filesystem
14664>>0x10024        belong          x               (blocksize %d,
14665>>0x10060        string          >\0             lockproto %s)
14666>0x10018        belong          0x00000709      GFS2 Filesystem
14667>>0x10024        belong          x               (blocksize %d,
14668>>0x10060        string          >\0             lockproto %s)
14669
14670# Russell Coker <russell@coker.com.au>
146710x10040		string		_BHRfS_M	BTRFS Filesystem
14672>0x1012b	string		>\0		label "%s",
14673>0x10090	lelong		x		sectorsize %d,
14674>0x10094	lelong		x		nodesize %d,
14675>0x10098	lelong		x		leafsize %d,
14676>0x10020	ubelong		x		UUID=%08x-
14677>0x10024	ubeshort	x		\b%04x-
14678>0x10026	ubeshort	x		\b%04x-
14679>0x10028	ubeshort	x		\b%04x-
14680>0x1002a	ubeshort	x		\b%04x
14681>0x1002c	ubelong		x		\b%08x,
14682>0x10078	lequad		x		%lld/
14683>0x10070	lequad		x		\b%lld bytes used,
14684>0x10088	lequad		x		%lld devices
14685
146860		string		btrfs-stream	BTRFS stream file
14687
14688# dvdisaster's .ecc
14689# From: "Nelson A. de Oliveira" <naoliv@gmail.com>
146900	string	*dvdisaster*	dvdisaster error correction file
14691
14692# xfs metadump image
14693# mb_magic XFSM at 0; superblock magic XFSB at 1 << mb_blocklog
14694# but can we do the << ?  For now it's always 512 (0x200) anyway.
146950	string XFSM
14696>0x200	string XFSB	XFS filesystem metadump image
14697
14698# Type:	CROM filesystem
14699# From:	Werner Fink <werner@suse.de>
147000	string	CROMFS	CROMFS
14701>6	string	>\0	\b version %2.2s,
14702>8	ulequad	>0	\b block data at %lld,
14703>16	ulequad	>0	\b fblock table at %lld,
14704>24	ulequad	>0	\b inode table at %lld,
14705>32	ulequad	>0	\b root at %lld,
14706>40	ulelong	>0	\b fblock size = %d,
14707>44	ulelong	>0	\b block size = %d,
14708>48	ulequad	>0	\b bytes = %lld
14709
14710# Type:	xfs metadump image
14711# From:	Daniel Novotny <dnovotny@redhat.com>
14712# mb_magic XFSM at 0; superblock magic XFSB at 1 << mb_blocklog
14713# but can we do the << ? For now it's always 512 (0x200) anyway.
147140	string	XFSM
14715>0x200	string	XFSB	XFS filesystem metadump image
14716
14717# Type:	delta ISO
14718# From:	Daniel Novotny <dnovotny@redhat.com>
147190	string	DISO	Delta ISO data,
14720>4	belong	x	version %d
14721
14722# JFS2 (Journaling File System) image. (Old JFS1 has superblock at 0x1000.)
14723# See linux/fs/jfs/jfs_superblock.h for layout; see jfs_filsys.h for flags.
14724# From: Adam Buchbinder <adam.buchbinder@gmail.com>
147250x8000	string	JFS1
14726# Because it's text-only magic, check a binary value (version) to be sure.
14727# Should always be 2, but mkfs.jfs writes it as 1. Needs to be 2 or 1 to be
14728# mountable.
14729>&0	lelong	<3	JFS2 filesystem image
14730# Label is followed by a UUID; we have to limit string length to avoid
14731# appending the UUID in the case of a 16-byte label.
14732>>&144	regex	[\x20-\x7E]{1,16}	(label "%s")
14733>>&0	lequad	x	\b, %lld blocks
14734>>&8	lelong	x	\b, blocksize %d
14735>>&32	lelong&0x00000006	>0	(dirty)
14736>>&36	lelong	>0	(compressed)
14737
14738# LFS
147390	lelong	0x070162	LFS filesystem image
14740>4	lelong	1		version 1,
14741>>8	lelong	x		\b blocks %u,
14742>>12	lelong	x		\b blocks per segment %u,
14743>4	lelong	2		version 2,
14744>>8	lelong	x		\b fragments %u,
14745>>12	lelong	x		\b bytes per segment %u,
14746>16	lelong	x		\b disk blocks %u,
14747>20	lelong	x		\b block size %u,
14748>24	lelong	x		\b fragment size %u,
14749>28	lelong	x		\b fragments per block %u,
14750>32	lelong	x		\b start for free list %u,
14751>36	lelong	x		\b number of free blocks %d,
14752>40	lelong	x		\b number of files %u,
14753>44	lelong	x		\b blocks available for writing %d,
14754>48	lelong	x		\b inodes in cache %d,
14755>52	lelong	x		\b inode file disk address %#x,
14756>56	lelong	x		\b inode file inode number %u,
14757>60	lelong	x		\b address of last segment written %#x,
14758>64	lelong	x		\b address of next segment to write %#x,
14759>68	lelong	x		\b address of current segment written %#x
14760
147610	string	td\000		floppy image data (TeleDisk, compressed)
147620	string	TD\000		floppy image data (TeleDisk)
14763
147640	string	CQ\024		floppy image data (CopyQM,
14765>16	leshort	x		%d sectors,
14766>18	leshort	x		%d heads.)
14767
147680	string	ACT\020Apricot\020disk\020image\032\004	floppy image data (ApriDisk)
14769
14770# URL:		http://fileformats.archiveteam.org/wiki/LoadDskF/SaveDskF
14771# Update:	Joerg Jenderek
14772# Note:		called "IBM SKF disk image" by TrID
14773#		verfied by 7-Zip `7z l -tFAT -slt *.dsk` and
14774#		`deark -l -m loaddskf  06200D19.DSK`
14775# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/d/dsk-skf-old.trid.xml
147760	beshort	0xAA58
14777>0	use		SaveDskF
14778# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/d/dsk-skf.trid.xml
147790	beshort	0xAA59
14780>0	use		SaveDskF
14781# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/d/dsk-skf-comp.trid.xml
147820	beshort	0xAA5A
14783# skip foo by additional check for unused upper byte of media type in SaveDskF header
14784#>3	ubyte		=0
14785# skip bar by additional check for valid "low" number of heads in SaveDskF header
14786#>>26	uleshort	<3
14787# skip foo by additional check for unused double word field in SaveDskF header
14788#>>>30	long		=0
14789#>>>>0	use		SaveDskF
14790>0	use		SaveDskF
14791# display information about IBM SaveDskF floppy disk images
147920	name			SaveDskF
14793# SaveDskF magic
14794>0	beshort	x		floppy image data (IBM SaveDskF
14795#!:mime	application/octet-stream
14796!:mime	application/x-ibm-dsk
14797!:ext	dsk
14798# also suffix with digit (1dk .2dk ...); NO example FOUND!
14799#!:ext	dsk/1dk/2dk
14800>1	ubyte		=0x58	\b, old)
14801>1	ubyte		=0x59	\b)
14802>1	ubyte		=0x5A	\b, compressed)
14803# media type; the first byte of the FAT like: 0xF0 (usual floppy) 0xF9 0xFE
14804# https://en.wikipedia.org/wiki/Design_of_the_FAT_file_system
14805>2	ubyte		!0xF0	\b, Media descriptor %#x
14806# upper byte of media type is not used; so this seems to be nil
14807>3	ubyte		!0	\b, upper byte of media type %#x
14808# sector size in bytes as in the BIOS parameter block like: 512 ; SAVEDSKF.EXE with other sizes produce garbage images
14809>4	uleshort	!512	\b, Bytes/sector %u
14810# cluster mask; number of sectors per cluster, minus 1
14811>6	uleshort+1	>1	\b, sectors/cluster %u
14812#>6	uleshort+1	x	\b, sectors/cluster %u
14813# cluster shift; log2(cluster size / sector size) like: 0~1=ClusterSize/SectorSize
14814>7	ubyte		>0	\b, cluster shift %u
14815#>7	ubyte		x	\b, cluster shift %u
14816# reserved sectors; as in the BIOS parameter block like: 1 256 (2M256R-K.DSK)
14817>8	uleshort	>1	\b, reserved sectors %u
14818#>8	uleshort	x	\b, reserved sectors %u
14819# FAT copies; as in the BIOS parameter block like: 2 (usual) 1 (2-NK.DSK)
14820>10	ubyte		!2	\b, FAT
14821# plural s
14822>>10	ubyte		>1	\bs
14823>>10	ubyte		x	%u
14824# root directory entries; as in the BIOS parameter block like: 224 (usual) 64 (H1-NK.DSK) 4096 (2-NK.DSK)
14825>11	uleshort	!224	\b, root entries %u
14826# sector number of first cluster (count sectors used by boot sector, FATs and root directory) like: 7 10 29 33 288
14827>13	uleshort	!33	\b, 1st cluster at sector %u
14828# number of clusters in image; empty clusters at the end are not saved and counted like: 2372 2848
14829>15	uleshort	x	\b, %u clusters
14830# sectors/FAT; as in the BIOS parameter block like: 1 (H1-NK.DSK) 7 9
14831>17	ubyte		!9	\b, sectors/FAT %u
14832# sector number of root directory (ie, count of sectors used by boot sector and FATs) like: 3 (H1-NK.DSK) 9 10 15 19 274 (2M256R-K.DSK)
14833>18	uleshort	!19	\b, root directory at sector %u
14834# checksum; sum of all bytes in the file
14835>20	ulelong		x	\b, checksum %#8.8x
14836# cylinders; number of cylinders like: 40 80
14837>24 	uleshort	!80	\b, %u cylinders
14838#>24 	uleshort	x	\b, %u cylinders
14839# heads; number of heads as in the BIOS parameter block like: 1 (H1-NK.DSK) 2
14840>26	uleshort	!2	\b, heads %u
14841#>26	uleshort	x	\b, heads %u
14842# sectors/track; number of sectors per track as in the BIOS parameter block like: 8 15 18 36
14843>28	uleshort	!18	\b, sectors/track %u
14844#>28	uleshort	x	\b, sectors/track %u
14845# unused double word field seems to be always like: 0
14846>30	ulelong		!0	\b, at 0x1E %#x
14847# number of sectors in images like: 1017 2786 2880
14848>34 	uleshort	x	\b, sectors %u
14849# if string is "printable" it can be a real comment
14850>(36.s)	ubyte		!0x00
14851# if 1st sector is far enough away (> 0x29) then there is space for comment part
14852>>38	uleshort	>41
14853# offset to comment string like: 28h=40
14854>>>36	uleshort	x	\b, at %#x
14855# comment string terminated with \r\n\0
14856>>>(36.s)	string	x	"%s"
14857# offset to the first sector like: 0 (If this is 0, assume it is 0x200) 29h=41 (DISPLAY3.DSK) 31h 43h 45h 46h 48h 50h 200h=512
14858>38	uleshort	!0	\b, 1st sector at %#x
14859# FOR DEBUGGING!
14860#>(38.s)	ubelong		x	SECTOR CONTENT %x
14861# not compressed floppy image implies readable DOS boot sector inside image
14862>>1		ubyte	!0x5A
14863# when not compressed it is readable as DOS boot sector via ./filesystems
14864#>>>(38.s)	indirect x	\b; contains
14865>38	uleshort	=0	\b, 1st sector at 0x200 (0)
14866# maybe standard DOS boot sector; NO example FOUND HERE!
14867#>>0x200	indirect	x	\b; contains
14868
148690	string	\074CPM_Disk\076	disk image data (YAZE)
14870
14871# From: 	Joerg Jenderek
14872# URL:		https://en.wikipedia.org/wiki/Central_Point_Software#cite_note-6
14873# Reference:	https://www.robcraig.com/download/transcopy-5-x-file-format
14874#		https://www.robcraig.com/download/transcopy-file-format-by-gene-thompson
14875#		http://mark0.net/download/triddefs_xml.7z/defs/t/tc-transcopy.trid.xml
14876# TransCopy signature
148770		beshort		0x5AA5
14878# skip Intel serial flash ROM with invalid 0 disk sides handled by ./intel
14879>0x103		ubyte		!0
14880# skip Intel serial flash ROM with unlikely "high" start cylinder 100 handled by ./intel
14881#>>0x101		ubyte		<100		VALID_START_CYLINDER
14882# skip Intel serial flash ROM with unlikely description handled by ./intel
14883#>>>2		beshort		!0xF00f		VALID_DESCRIPTION
14884# skip Intel serial flash ROM with invalid disk types 89h 88h handled by ./intel
14885#>>>>0x100	byte		!0x89		VALID_DISK_TYPE
14886>>0	use	tc-floppy
14887#	display information of Central Point Software (CPS) Option Board TransCopy floppy image
148880	name		tc-floppy
14889>0		beshort		x		TransCopy disk image
14890#!:mime	application/octet-stream
14891!:mime	application/x-floppy-image-tc
14892# like: disk04.tc VOCALC2.TC WIZ5_A.tc WIZ2_720.IMG
14893!:ext	tc/img
14894# 1st description (optional 0-terminated maximal 32) like:
14895# "Project Workbench 2.20" "Visi On Calc" "Wizardry V Disk 1 of 3"
14896>2		string		>\0		%.32s
14897# 2nd desc. (optional 0-terminated maximal 32) like:
14898# "(1988)." "Advanced - Utility" 'Program Disk 2"
14899>0x22		string		>\0		"%.32s"
14900# Looks like ascii (like MESSAGES) formatted with attribute bytes (190)?
14901# not needed for disk copy
14902#>>0x42		string		x		'%.190s'
14903#>>0x88		lestring16	x		"%.8s"
14904# disktype: 2~MFM High Density 3~MFM Double Density 4~Apple II GCR 5~FM Single Density
14905# 6~Commodore GCR 7~MFM Double Density 8~Commodore Amiga Ch~Atari FM FFh~Unknown
14906>0x100		ubyte		!0xFF		\b, disk type %u
14907# StartingCylinder like: 0
14908>0x101		ubyte		x		\b, cylinder
14909>0x101		ubyte		!0		start=%u
14910# EndingCylinder like: 40 (often) 41 79
14911>0x102		ubyte		x		end=%u
14912# NumberOfSides like: 2
14913>0x103		ubyte		!2		\b, %u sides
14914# TrackIncrement like: 1
14915>0x104		ubyte		!1		\b, track increment %u
14916# TrackPosTbl Track skew
14917#>0x105		ubequad		x		\b, Track skew %#16.16llx
14918# TrackOffsTbl
14919#>0x305		ubequad		x		\b, TrackOffsTbl %#16.16llx
14920# TrackLngthTbl
14921#>0x505		ubequad		x		\b, TrackLngthTbl %#16.16llx
14922# TrackTypeTable
14923#>0x705		ubequad		x		\b, TrackTypeTable %#16.16llx
14924# Address mark timing
14925#>0x905		ubequad		x		\b, Address mark timing %#16.16llx
14926# Track fragment
14927#>0x2905 ubequad			!0		\b, Track fragment %#16.16llx
14928# Track data
14929#>0x4000		ubequad		!0		\b, Track data %#16.16llx
14930
14931# ReFS
14932# Richard W.M. Jones <rjones@redhat.com>
149330	string	\0\0\0ReFS\0	ReFS filesystem image
14934
14935# EFW encase image file format:
14936# Gregoire Passault
14937# http://www.forensicswiki.org/wiki/Encase_image_file_format
149380	string	EVF\x09\x0d\x0a\xff\x00	EWF/Expert Witness/EnCase image file format
14939
14940# UBIfs
14941# Linux kernel sources: fs/ubifs/ubifs-media.h
149420	lelong	0x06101831
14943>0x16	leshort	0		UBIfs image
14944>0x08	lequad	x		\b, sequence number %llu
14945>0x10	leshort x		\b, length %u
14946>0x04	lelong	x		\b, CRC %#08x
14947
149480	lelong	0x23494255
14949>0x04	leshort	<2
14950>0x05	string	\0\0\0
14951>0x1c	string	\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
14952>0x04	leshort	x		UBI image, version %u
14953
14954# NEC PC-88 2D disk image
14955# From Fabio R. Schmidlin <sd-snatcher@users.sourceforge.net>
149560x20		ulelong&0xFFFFFEFF	0x2A0
14957>0x10		string			\0\0\0\0\0\0\0\0\0\0
14958>>0x280		string			\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
14959>>>0x1A		ubyte&0xEF		0
14960>>>>0x1B	ubyte&0x8F		0
14961>>>>>0x1B	ubyte&70		<0x40
14962>>>>>>0x1C	ulelong			>0x21
14963>>>>>>>0	regex	[[:print:]]*	NEC PC-88 disk image, name=%s
14964>>>>>>>>0x1B	ubyte	0		\b, media=2D
14965>>>>>>>>0x1B	ubyte	0x10		\b, media=2DD
14966>>>>>>>>0x1B	ubyte	0x20		\b, media=2HD
14967>>>>>>>>0x1B	ubyte	0x30		\b, media=1D
14968>>>>>>>>0x1B	ubyte	0x40		\b, media=1DD
14969>>>>>>>>0x1A	ubyte	0x10		\b, write-protected
14970
14971# HDD Raw Copy Tool disk image, file extension: .imgc
14972# From Benjamin Vanheuverzwijn <bvanheu@gmail.com>
149730	pstring	HDD\ Raw\ Copy\ Tool	%s
14974>0x100	pstring	x			%s
14975>0x200	pstring	x			- HD model: %s
14976#>0x300	pstring	x			unknown %s
14977>0x400	pstring	x			serial: %s
14978#>0x500	pstring	x			unknown: %s
14979!:ext	imgc
14980
14981# http://martin.hinner.info/fs/bfs/bfs-structure.html
149820	lelong	0x1BADFACE		SCO UnixWare BFS filesystem
14983
14984# https://arstechnica.com/information-technology/2018/07/the-beos-filesystem/
1498532	lelong	0x42465331		BE/OS BFS1 filesystem
14986>36	lelong	x			\b, byte order %d
14987>40	lelong	x			\b, block size %d
14988>44	lelong	x			\b, block shift %d
14989>48	lequad	x			\b, total blocks %lld
14990>56	lequad	x			\b, used blocks %lld
14991
14992
149930	name next
14994>0	lelong	x			\b, size %d
14995>4	string	x			\b, label %s
14996
14997# https://opensource.apple.com/source/IOStorageFamily/IOStorageFamily-44.3\
14998# /IONeXTPartitionScheme.h
149990	string	NeXT			NeXT version 1 disklabel
15000>12	use next
150010	string	dlV1			NeXT version 2 disklabel
15002>12	use next
150030	string	dlV2			NeXT version 3 disklabel
15004>12	use next
15005
15006# bcachefs
15007# From: Thomas Wei�schuh <thomas@t-8ch.de>
15008
150090	name	bcachefs-uuid
15010>0	ubelong		x	\b%08x
15011>4	ubeshort	x	\b-%04x
15012>6	ubeshort	x	\b-%04x
15013>8	ubeshort	x	\b-%04x
15014>10	ubelong		x	\b-%08x
15015>14	ubeshort	x	\b%04x
15016
150170x1018		string		\xc6\x85\x73\xf6\x4e\x1a\x45\xca\x82\x65\xf5\x7f\x48\xba\x6d\x81	bcachefs
15018>0x1068		lequad		8	\b, UUID=
15019>>0x1038	use		bcachefs-uuid
15020>>0x1048	string		>0	\b, label "%.32s"
15021>>0x1010	uleshort	x	\b, version %u
15022>>0x1012	uleshort	x	\b, min version %u
15023>>0x107a	byte		x	\b, device %d
15024# assumes the first field is the members field
15025>>0x12f4	ulelong		0x01	\b/UUID=
15026>>>0x12f0	default		x
15027>>>&(0x107a.b*56)	use	bcachefs-uuid
15028>>0x107b	byte		x	\b, %d devices
15029>>0x1090	byte		^0x02	\b (unclean)
15030
15031# EROFS
15032# https://kernel.googlesource.com/pub/scm/linux/kernel/git/xiang/erofs-utils/\
15033# +/refs/heads/experimental/include/erofs_fs.h#12
150341024		lelong		0xE0F5E1E2	EROFS filesystem
15035#>1028		lelong		x		\b, checksum=%#x
15036>1032		lelong		>0		\b, compat:
15037>>1032		lelong		&1		SB_CHKSUM
15038>>1032		lelong		&2		MTIME
15039>1036		byte		x		\b, blocksize=%u
15040>1037		byte		x		\b, exslots=%u
15041#>1038		leshort		x		\b, root_nid=%d
15042#>1040		lequad		x		\b, inodes=%ld
15043#>1048		leldate		x		\b, build_time=%s
15044#>1056		lelong		x		\b.%d
15045#>1060		lelong		x		\b, blocks=%d
15046#>1064		lelong		x		\b, metadata@%#x
15047#>1068		lelong		x		\b, xattr@%#x
15048>1072		guid		x		\b, uuid=%s
15049>1088		string		>0		\b, name=%s
15050>1104		lelong		>0		\b, incompat:
15051>>1104		lelong		&1		LZ4_0PADDING
15052>>1104		lelong		&2		BIG_PCLUSTER
15053>>1104		lelong		&4		CHUNKED_FILE
15054>>1104		lelong		&8		DEVICE_TABLE
15055>>1104		lelong		&16		ZTAILPACKING
15056
15057#------------------------------------------------------------------------------
15058# $File: finger,v 1.3 2019/04/19 00:42:27 christos Exp $
15059# fingerprint:  file(1) magic for fingerprint data
15060# XPM bitmaps)
15061#
15062
15063# https://cgit.freedesktop.org/libfprint/libfprint/tree/libfprint/data.c
15064
150650	string	FP1		libfprint fingerprint data V1
15066>3	beshort	x		\b, driver_id %x
15067>5	belong	x		\b, devtype %x
15068
150690	string	FP2		libfprint fingerprint data V2
15070>3	beshort	x		\b, driver_id %x
15071>5	belong	x		\b, devtype %x
15072
15073#------------------------------------------------------------------------------
15074# $File: flash,v 1.15 2019/04/19 00:42:27 christos Exp $
15075# flash:	file(1) magic for Macromedia Flash file format
15076#
15077# See
15078#
15079#	https://www.macromedia.com/software/flash/open/
15080#	https://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/\
15081#	en/devnet/swf/pdf/swf-file-format-spec.pdf page 27
15082#
15083
150840   name	swf-details
15085
15086>0	string		F
15087>>8	byte&0xfd	0x08		Macromedia Flash data
15088!:mime	application/x-shockwave-flash
15089>>>3	byte		x		\b, version %d
15090>>8	byte&0xfe	0x10		Macromedia Flash data
15091!:mime	application/x-shockwave-flash
15092>>>3	byte		x		\b, version %d
15093>>8	byte		0x18		Macromedia Flash data
15094!:mime	application/x-shockwave-flash
15095>>>3	byte		x		\b, version %d
15096>>8	beshort&0xff87	0x2000		Macromedia Flash data
15097!:mime	application/x-shockwave-flash
15098>>>3	byte		x		\b, version %d
15099>>8	beshort&0xffe0	0x3000		Macromedia Flash data
15100!:mime	application/x-shockwave-flash
15101>>>3	byte		x		\b, version %d
15102>>8	byte&0x7	0
15103>>>8	ubyte		>0x2f
15104>>>>9	ubyte		<0x20		Macromedia Flash data
15105!:mime	application/x-shockwave-flash
15106>>>>>3	byte		x		\b, version %d
15107
15108>0	string		C
15109>>8	byte		0x78		Macromedia Flash data (compressed)
15110!:mime	application/x-shockwave-flash
15111>>>3	byte		x		\b, version %d
15112
15113>0	string		Z
15114>>8	byte		0x5d		Macromedia Flash data (lzma compressed)
15115!:mime	application/x-shockwave-flash
15116>>>3	byte		x		\b, version %d
15117
15118
151191	string		WS
15120>4	ulelong		>14
15121>>3	ubyte		!0
15122>>>0	use		swf-details
15123
15124# From: Cal Peake <cp@absolutedigital.net>
151250	string		FLV\x01		Macromedia Flash Video
15126!:mime	video/x-flv
15127
15128#
15129# Yosu Gomez
151300	string	AGD2\xbe\xb8\xbb\xcd\x00	Macromedia Freehand 7 Document
151310	string	AGD3\xbe\xb8\xbb\xcc\x00	Macromedia Freehand 8 Document
15132# From Dave Wilson
151330	string	AGD4\xbe\xb8\xbb\xcb\x00	Macromedia Freehand 9 Document
15134
15135#------------------------------------------------------------------------------
15136#	$File: flif,v 1.1 2015/11/23 22:04:36 christos Exp $
15137#	flif:	Magic	data	for	file(1)	command.
15138#	FLIF	(Free	Lossless	Image	Format)
15139
151400	string	FLIF	FLIF
15141>4	string	<H	image data
15142>>6	beshort	x	\b, %u
15143>>8	beshort	x	\bx%u
15144>>5	string	1	\b, 8-bit/color,
15145>>5	string	2	\b, 16-bit/color,
15146>>4	string	1	\b, grayscale, non-interlaced
15147>>4	string	3	\b, RGB, non-interlaced
15148>>4	string	4	\b, RGBA, non-interlaced
15149>>4	string	A	\b, grayscale
15150>>4	string	C	\b, RGB, interlaced
15151>>4	string	D	\b, RGBA, interlaced
15152>4	string	>H	\b, animation data
15153>>5	ubyte	<255	\b, %i frames
15154>>>7	beshort	x	\b, %u
15155>>>9	beshort	x	\bx%u
15156>>>6	string	=1	\b, 8-bit/color
15157>>>6	string	=2	\b, 16-bit/color
15158>>5	ubyte	0xFF
15159>>>6	beshort	x	\b, %i frames,
15160>>>9	beshort	x	\b, %u
15161>>>11	beshort	x	\bx%u
15162>>>8	string	=1	\b, 8-bit/color
15163>>>8	string	=2	\b, 16-bit/color
15164>>4	string	=Q	\b, grayscale, non-interlaced
15165>>4	string	=S	\b, RGB, non-interlaced
15166>>4	string	=T	\b, RGBA, non-interlaced
15167>>4	string	=a	\b, grayscale
15168>>4	string	=c	\b, RGB, interlaced
15169>>4	string	=d	\b, RGBA, interlaced
15170
15171#------------------------------------------------------------------------------
15172# $File: fonts,v 1.51 2022/08/16 11:16:39 christos Exp $
15173# fonts:  file(1) magic for font data
15174#
151750	search/1	FONT		ASCII vfont text
151760	short		0436		Berkeley vfont data
151770	short		017001		byte-swapped Berkeley vfont data
15178
15179# PostScript fonts (must precede "printer" entries), quinlan@yggdrasil.com
15180# Modified by:	Joerg Jenderek
15181# URL:		https://en.wikipedia.org/wiki/PostScript_fonts
15182#		http://fileformats.archiveteam.org/wiki/Adobe_Type_1
15183# Reference:	http://mark0.net/download/triddefs_xml.7z
15184#		defs/p/pfb.trid.xml
15185# Note:		PFB stands for Printer Font Binary
151860	string		%!PS-AdobeFont-1.	PostScript Type 1 font text
15187#!:mime	font/x-postscript-pfb
15188#!:ext	pfb
15189>20	string		>\0			(%s)
15190# http://www.nationalarchives.gov.uk/pronom/fmt/525
151916	string		%!PS-AdobeFont-1.
15192# skip DROID fmt-525-signature-id-816.pfb by checking for content after header
15193>24	ubyte		x			PostScript Type 1 font program data
15194#!:mime	application/octet-stream
15195!:mime	font/x-postscript-pfb
15196!:ext	pfb
15197# often followed by colon (3Ah) and space (20h) and font name like: DarkGardenMK LetterGothic
15198>>24	ubyte		=0x3A
15199>>>26	string		>\0			(%s)
15200# some times instead of colon %%CreationDate: and "font name" later
15201>>24	ubyte		!0x3A
15202# font name directive followed by def like: c0633bt_.pfb
15203>>>25	search/1247	/FontName\040/
15204# show font name in parentheses like: Frankfurt Lithos CharterBT-BoldItalic Courier10PitchBT-Bold
15205>>>>&0	regex		[A-Za-z0-9-]+		(%s)
15206# http://cd.textfiles.com/maxfonts/ATM/M/MIRROR__.PFB
152076	string		%PS-AdobeFont-1.	PostScript Type 1 font program data
15208!:mime	font/x-postscript-pfb
15209!:ext	pfb
15210# font name like:  Times-Mirror
15211>25	string		>\0			(%s)
152120	string		%!FontType1	PostScript Type 1 font program data
15213#!:mime	font/x-postscript-pfb
15214#!:ext	pfb
152156	string		%!FontType1	PostScript Type 1 font program data
15216#!:mime	application/octet-stream
15217!:mime	font/x-postscript-pfb
15218!:ext	pfb
15219# font name like: CaslonOpenFace FetteFraktur Kaufmann Linotext MesozoicGothic Old-Town
15220>23	string		>\0			(%s)
15221# http://cd.textfiles.com/maxfonts/ATM/P/PLAYBI.PFB
15222230	string		%!FontType1	PostScript Type 1 font program data
15223!:mime	font/x-postscript-pfb
15224!:ext	pfb
15225# font name like: Playbill
15226>247	string		>\0			(%s)
152270	string		%!PS-Adobe-3.0\ Resource-Font	PostScript Type 1 font text
15228#!:mime	font/x-postscript-pfb
15229#!:ext	pfb
15230
15231# Summary:	PostScript Type 1 Printer Font Metrics
15232# URL:		https://en.wikipedia.org/wiki/PostScript_fonts
15233# Reference:	https://partners.adobe.com/public/developer/en/font/5178.PFM.pdf
15234# Modified by:	Joerg Jenderek
15235# Note:		moved from ./msdos magic
15236# dfVersion 256=0100h
152370		uleshort	0x0100
15238# GRR: line above is too general as it catches also TrueType font,
15239# raw G3 data FAX, WhatsApp encrypted and Panorama database
15240# dfType 129=0081h
15241>66		uleshort	0x0081
15242# dfVertRes 300=012Ch not needed as additional test
15243#>>70		uleshort	0x012c
15244# dfHorizRes 300=012Ch
15245#>>>72		uleshort	0x012c
15246# dfDriverInfo points to postscript information section
15247>>(101.l)	string/c	Postscript	Printer Font Metrics
15248# above labeled "PFM data" by ./msdos (version 5.28) or "Adobe Printer Font Metrics" by TrID
15249!:mime	application/x-font-pfm
15250# AppleShare Print Server
15251#!:apple	ASPS????
15252!:ext	pfm
15253# dfCopyright 60 byte null padded Copyright string. uncomment it to get old looking
15254#>>>6		string		>\060		- %-.60s
15255# dfDriverInfo
15256>>>139		ulelong		>0
15257# often abbreviated and same as filename
15258>>>>(139.l)	string		x		%s
15259# dfSize
15260>>>2		ulelong		x		\b, %d bytes
15261# dfFace 210=D2h 9Eh
15262>>>105		ulelong		>0
15263# Windows font name
15264>>>>(105.l)	string		x		\b, %s
15265# dfItalic
15266>>>80		ubyte		1		italic
15267# dfUnderline
15268>>>81		ubyte		1		underline
15269# dfStrikeOut
15270>>>82		ubyte		1		strikeout
15271# dfWeight 400=0x0190 300=0x012c 500=0x01f4 600=0x0258 700=0x02bc
15272>>>83		uleshort	>699		bold
15273# dfPitchAndFamily 16 17 48 49 64 65
15274>>>90		ubyte		16		serif
15275>>>90		ubyte		17		serif proportional
15276#>>>90		ubyte		48		other
15277>>>90		ubyte		49		proportional
15278>>>90		ubyte		64		script
15279>>>90		ubyte		65		script proportional
15280
15281# X11 font files in SNF (Server Natural Format) format
15282# updated by Joerg Jenderek at Feb 2013 and Nov 2021
15283# http://computer-programming-forum.com/51-perl/8f22fb96d2e34bab.htm
15284# URL:		http://fileformats.archiveteam.org/wiki/SNF
15285# Reference:	https://cgit.freedesktop.org/xorg/lib/libXfont/tree/src/bitmap/snfstr.h
152860	belong		00000004
15287# version2 same as version1 in struct _snfFontInfo
15288>104	belong		00000004		X11 SNF font data, MSB first
15289# GRR: line above is too general as it catches also DEGAS low-res bitmap like:
15290# http://cd.textfiles.com/geminiatari/FILES/GRAPHICS/ANIMAT/SPID_PAT/BIGSPID.PI1
15291!:mime	application/x-font-sfn
15292!:ext	snf
15293# GRR: line below is too general as it catches also Xbase index file t3-CHAR.NDX
152940	lelong		00000004
15295>104	lelong		00000004		X11 SNF font data, LSB first
15296!:mime	application/x-font-sfn
15297# Reference:    http://mark0.net/download/triddefs_xml.7z/defs/s/snf-x11-lsb.trid.xml
15298!:ext	snf
15299
15300# X11 Bitmap Distribution Format, from Daniel Quinlan (quinlan@yggdrasil.com)
153010	search/1	STARTFONT\ 		X11 BDF font text
15302
15303# From: Joerg Jenderek
15304# URL: https://grub.gibibit.com/New_font_format
15305# Reference: util/grub-mkfont.c
15306#		include/grub/fontformat.h
15307# FONT_FORMAT_SECTION_NAMES_FILE
153080			string		FILE
15309# FONT_FORMAT_PFF2_MAGIC
15310>8			string		PFF2
15311# leng 4 only at the moment
15312>>4			ubelong		4
15313# FONT_FORMAT_SECTION_NAMES_FONT_NAME
15314>>>12			string		NAME		GRUB2 font
15315!:mime			application/x-font-pf2
15316!:ext			pf2
15317# length of font_name
15318>>>>16			ubelong		>0
15319# font_name
15320>>>>>20			string		>\0		"%-s"
15321
15322# X11 fonts, from Daniel Quinlan (quinlan@yggdrasil.com)
15323# PCF must come before SGI additions ("MIPSEL MIPS-II COFF" collides)
153240	string		\001fcp			X11 Portable Compiled Font data,
15325>12	lelong		^0x08			bit: LSB,
15326>12	lelong		&0x08			bit: MSB,
15327>12	lelong		^0x04			byte: LSB first
15328>12	lelong		&0x04			byte: MSB first
153290	string		D1.0\015		X11 Speedo font data
15330
15331#------------------------------------------------------------------------------
15332# FIGlet fonts and controlfiles
15333# From figmagic supplied with Figlet version 2.2
15334# "David E. O'Brien" <obrien@FreeBSD.ORG>
153350	string		flf		FIGlet font
15336>3	string		>2a		version %-2.2s
153370	string		flc		FIGlet controlfile
15338>3	string		>2a		version %-2.2s
15339
15340# libGrx graphics lib fonts, from Albert Cahalan (acahalan@cs.uml.edu)
15341# Used with djgpp (DOS Gnu C++), sometimes Linux or Turbo C++
153420	belong		0x14025919	libGrx font data,
15343>8	leshort		x		%dx
15344>10	leshort		x		\b%d
15345>40	string		x		%s
15346# Misc. DOS VGA fonts, from Albert Cahalan (acahalan@cs.uml.edu)
15347# Update:	Joerg Jenderek
15348# URL:		http://fileformats.archiveteam.org/wiki/CPI
15349# Reference:	http://www.delorie.com/djgpp/doc/rbinter/it/58/17.html
153500	belong		0xff464f4e	DOS code page font data collection
15351!:mime	font/x-dos-cpi
15352!:ext	cpi
153530	string		\x7fDRFONT	DR-DOS code page font data collection
15354!:mime	font/x-drdos-cpi
15355!:ext	cpi
153567	belong		0x00454741	DOS code page font data
153577	belong		0x00564944	DOS code page font data (from Linux?)
153584098	string		DOSFONT		DOSFONT2 encrypted font data
15359
15360# From: Joerg Jenderek
15361# URL: http://fileformats.archiveteam.org/wiki/GEM_bitmap_font
15362# Reference: http://cd.textfiles.com/ataricompendium/BOOK/HTML/APPENDC.HTM#cnt
15363#
15364# usual case with lightening mask and skewing mask 5555h~UU
15365#62	ulelong		0x55555555
15366# skip cl8m8ocofedso.testfile by looking for face size lower/equal 72
15367#>2	uleshort	<73
15368#>>0	use		gdos-font
15369# BOX18.GFT COWBOY30.GFT ROYALK30.GFT
15370#62	ulelong		0
15371# skip ISO 9660 CD-ROM ./filesystem by looking for low positive face size
15372#>2	uleshort	>2
15373# skip DOS 2.0 backup id file ./msdos by looking for face size lower/equal 72
15374#>>2	uleshort	<73
15375# skip MS oem.hlp, some Windows ICO ./msdos by looking for valid long name like WYE
15376#>>>4	ulelong		>0x001F1f1F
15377# skip Microsoft WinWord 2.0 ./msdos by looking for positive offset to font data
15378#>>>>76	ulelong		>83
15379#>>>>>0	use		gdos-font
153800	name		gdos-font
15381>0	uleshort	x		GEM GDOS font
15382!:mime	application/x-font-gdos
15383# also .eps found like AA070GEP.EPS AI360GEP.EPS
15384!:ext	fnt/gtf
15385# font name like Big&Tall, Celtic #s, Courier, University Bold, WYE
15386>4	string		x		%.32s
15387# face size in points 3-72 SLSS03CG.FNT H1CELT72.FNT
15388>2	uleshort	x		%u
15389# face ID (must be unique)
15390>0	uleshort	x		\b, ID %#4.4x
15391# lowest character index in face (4 but usually 32 for disk-loaded fonts)
15392#>36	uleshort	!32		\b, unusual character index %u
15393# width of the widest character like 0 8 10 12 16 24 32
15394#>50	uleshort	x		\b, %u char width
15395# width of the widest character cell like 8 11 12 14 15 16 33 67
15396#>52	uleshort	x		\b, %u cell width
15397# thickening size in pixel like 0 1 2 3 4 5 6 7 8
15398#>58	uleshort	x		\b, %u thick
15399# lightening mask to eliminate pixels, usually 5555h
15400>62	uleshort	!0x5555		\b, lightening mask %#x
15401# skewing mask to determine when to perform additional rotation when skewing, usually 5555h
15402>64	uleshort	!0x5555		\b, skewing mask %#x
15403# offset to optional horizontal offset table 0 58h~88 5eh 252h
15404#>68	ulelong		x		\b, %#x horizontal table offset
15405# offset of character offset table 54h for many *.GFT 55h 58h 5Eh 120h 1D4h 202h 220h
15406#>72	ulelong		x		\b, %#x coffset
15407# offset to font data like 116h 118h 158 20Ah 20Eh
15408>76	ulelong		x		\b, %#x foffset
15409# form width in bytes like 58 67 156 190 227 317 345
15410#>80	uleshort	x		\b, %u fwidth
15411# form height in bytes like 4 8 11 17 26 56 70 90 120 146 150
15412#>82	uleshort	x		\b, %u fheight
15413# pointer to the next font like 0 10000h 20000h 30000h 40000h 60000h 80000h E0000h D0000h
15414#>84	ulelong		x		\b, %#x noffset
15415
15416# downloadable fonts for browser (prints type) anthon@mnt.org
15417# https://tools.ietf.org/html/rfc3073
154180	string		PFR1		Portable Font Resource font data (new)
15419>102	string		>0		\b: %s
154200	string		PFR0		Portable Font Resource font data (old)
15421>4	beshort		>0		version %d
15422
15423# True Type fonts
15424# Modified by: Joerg Jenderek
15425# URL: https://en.wikipedia.org/wiki/TrueType
15426# Reference: https://developer.apple.com/fonts/TrueType-Reference-Manual/
15427#
15428# sfnt version "typ1" used by some Apple, but no example found
154290	string	typ1
15430>0	use		sfnt-font
15431>0	use		sfnt-names
15432# sfnt version "true" used by some Apple
154330	string	true
15434>0	use		sfnt-font
15435>0	use		sfnt-names
15436# GRR: below test is too general
15437# sfnt version often 0x00010000
154380	string	\000\001\000\000
15439>0	use		sfnt-font
15440>0	use		sfnt-names
15441#	validate and display sfnt font data like number of tables
154420	name		sfnt-font
15443# file 5.30 version assumes 00FFh as maximal number of tables
15444#>4	ubeshort	<0x0100
15445# maximal 27 tables found like in Skia.ttf
15446# 46 different table names mentioned on Apple specification
15447# skip 1st sequence of DOS 2 backup with path separator (\~92 or /~47) misinterpreted as table number
15448>4	ubeshort	<47
15449# skip bad examples with garbage table names like in a5.show HYPERC MAC
15450# tag names consist of up to four characters padded with spaces at end like
15451# BASE DSIG OS/2 Zapf acnt glyf cvt vmtx xref ...
15452>>12	regex/4l	\^[A-Za-z][A-Za-z][A-Za-z/][A-Za-z2\ ]
15453#>>>0	ubelong	x	\b, sfnt version %#x
15454>>>0	ubelong	!0x4f54544f	TrueType
15455!:mime	font/sfnt
15456!:apple	????tfil
15457# .ttf for TrueType font
15458# EUDC.tte created by privat character editor %WINDIR%\system32\eudcedit.exe
15459!:ext	ttf/tte
15460# sfnt version 4F54544Fh~OTTO
15461>>>0	ubelong	=0x4f54544f	OpenType
15462!:mime	font/otf
15463!:apple	????OTTO
15464!:ext	otf
15465>>>0	ubelong	x		Font data
15466# DSIG=44454947h table name implies a digitally signed font
15467# search range = number of tables * 16 =< maximal number of tables * 16 = 27 * 16 = 432
15468>>>12	search/432	DSIG		\b, digitally signed
15469>>>4	ubeshort	x		\b, %d tables
15470# minimal 9 tables found like in NISC18030.ttf
15471#>>>4	ubeshort	<10		TMIN
15472#>>>4	ubeshort	>24		TBIG
15473# table directory entries
15474>>>12	string		x		\b, 1st "%4.4s"
15475
15476#	search and display 1st name in sfnt font which is often copyright text
15477#	does not work inside font collections
154780	name		sfnt-names
15479# search for naming table
15480>12	search/432/s	name
15481# biggest offset 0x0100bd28 like Windows10 Fonts\simsunb.ttf
15482#>>>>&8	ubelong		>0x0100bd27	BIGGEST OFFSET
15483>>&8	ubelong		>0x00100000
15484# offset of name table
15485>>>&-4	ubelong		x		\b, name offset %#x
15486# GRR: pointer to name table only works if offset ~< FILE_BYTES_MAX = 100000h defined in src\file.h
15487>>&8	ubelong		<0x00100000
15488>>>&-16	ubelong		x
15489# name table
15490>>>>(&8.L)	ubequad	x
15491# invalid format selector
15492#>>>>>&-8	ubeshort	!0	\b, invalid selector %x
15493# minimal 3 name records found like in c:\Program Files (x86)\Tesseract-OCR\tessdata\pdf.ttf
15494# maximal 1227 name records found like in Apple Chancery.ttf
15495#>>>>>&-6	ubeshort	<0x4	mincount
15496#>>>>>&-6	ubeshort	>130	maxcount
15497>>>>>&-6	ubeshort	x	\b, %d names
15498# offset to start of string storage from start of table
15499#>>>>>&-4	ubeshort	x	\b, record offset %d
15500# 1st name record
15501# string offset from start of storage area
15502#>>>>>&8		ubeshort	x	\b, string offset %d
15503# string length
15504#>>>>>&6		ubeshort	x	\b, string length %d
15505# minimal name string 7 like in c:\Program Files (x86)\Kodi\addons\webinterface.default\lib\video-js\font\VideoJS.ttf
15506# also found 0 like in SWZCONLN.TTF
15507#>>>>>&6		ubeshort	<8	MIN STRING
15508# maximal name string 806 like in c:\Windows\Fonts\palabi.ttf
15509#>>>>>&6		ubeshort	>805	MAX STRING
15510# platform identifier: 0~Apple Unicode, 1~Macintosh, 3~Microsoft
15511#>>>>>&-2	ubeshort	>3	BAD PLATFORM
15512>>>>>&-2	ubeshort	0	\b, Unicode
15513>>>>>&-2	ubeshort	1	\b, Macintosh
15514>>>>>&-2	ubeshort	3	\b, Microsoft
15515# languageID (0~english Macintosh, 0409h~english Microsoft, ...)
15516>>>>>&2		ubeshort	>0	\b, language %#x
15517# name identifiers
15518# often 0~copyright, 1~font, 2~font subfamily, 5~version, 13~license, 19~sample, ...
15519>>>>>&4		ubeshort	>0	\b, type %d string
15520# platform specific encoding:
15521# 0~undefined character set, 1~UGL set with Unicode, 3~Unicode 2.0 BMP only, 4~Unicode 2.0
15522#>>>>>&0		ubeshort	x	\b, %d encoding
15523>>>>>&0		ubeshort	0
15524# handle only name string offset 0 because do not know how to add 2 relative offsets
15525>>>>>>&6		ubeshort	0
15526>>>>>>>&(&-14.S-18)	ubyte		!0
15527# GRR: instead 806 only first MAXstring = 96 characters are displayed as defined in src\file.h
15528# often copyright string that starts like \251 2006 The Monotype Corporation
15529>>>>>>>>&-1		string		x	\b, %-11.96s
15530# test for unicode string
15531>>>>>>>&(&-14.S-18)	ubyte		0
15532>>>>>>>>&0		lestring16	x	\b, %-11.96s
15533# unicode encoding
15534>>>>>&0		ubeshort	>0
15535>>>>>>&6		ubeshort	0
15536>>>>>>>&(&-14.S-17)	lestring16	x	\b, %-11.96s
15537
155380	string		\007\001\001\000Copyright\ (c)\ 199	Adobe Multiple Master font
155390	string		\012\001\001\000Copyright\ (c)\ 199	Adobe Multiple Master font
15540
15541# TrueType/OpenType font collections (.ttc)
15542# URL: https://en.wikipedia.org/wiki/OpenType
15543# https://www.microsoft.com/typography/otspec/otff.htm
15544# Modified by: Joerg Jenderek
15545# Note:	container for TrueType, OpenType font
155460	string		ttcf
15547# skip ASCII text
15548>4	ubyte		0
15549# sfnt version often 0x00010000 of 1st table is TrueType
15550>>(12.L)	ubelong	!0x4f54544f	TrueType
15551!:mime	font/ttf
15552!:apple	????tfil
15553!:ext	ttc
15554# sfnt version 4F54544Fh~OTTO of 1st table is OpenType font
15555>>(12.L)	ubelong	=0x4f54544f	OpenType
15556!:mime	font/otf
15557!:apple	????OTTO
15558# no example found for otc
15559!:ext	ttc/otc
15560>>4	ubyte		x		font collection data
15561#!:mime	font/collection
15562# TCC version
15563>>4	belong		0x00010000	\b, 1.0
15564>>4	belong		0x00020000	\b, 2.0
15565>>8	ubelong		>0		\b, %d fonts
15566# array offset size = fonts * offsetsize = fonts * 4
15567>>(8.L*4) ubequad	x
15568# 0x44454947 = 'DSIG'
15569>>>&4	belong		0x44534947	\b, digitally signed
15570# offset to 1st font
15571>>12	ubelong		x		\b, at %#x
15572# point to 1st font that starts with sfnt version
15573>>(12.L) use		sfnt-font
15574
15575# Opentype font data from Avi Bercovich
155760	string		OTTO		OpenType font data
15577!:mime application/vnd.ms-opentype
15578
15579# From: Alex Myczko <alex@aiei.ch>
155800	string		SplineFontDB:	Spline Font Database
15581!:mime application/vnd.font-fontforge-sfd
15582>14	string		x		version %s
15583
15584# EOT
155850x40	string		\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
15586>0x22	string		LP		Embedded OpenType (EOT)
15587# workaround until there's lepstring16
15588# >>0x52	lepstring16/h	>\0		\b, %s family
15589>>0x52	short	!0
15590>>>0x54	lestring16	x		\b, %s family
15591!:mime application/vnd.ms-fontobject
15592
15593# Web Open Font Format (.woff)
155940	name		woff
15595>4	belong		0x00010000	\b, TrueType
15596>4	belong		0x4F54544F	\b, CFF
15597>4	belong		0x74727565	\b, TrueType
15598>4	default		x
15599>>4	belong		x		\b, flavor %d
15600>8	belong		x		\b, length %d
15601#>12	beshort		x		\b, numTables %d
15602#>14	beshort		x		\b, reserved %d
15603#>16	belong		x		\b, totalSfntSize %d
15604
15605# https://www.w3.org/TR/WOFF/
156060	string		wOFF	Web Open Font Format
15607!:mime font/woff
15608>0	use		woff
15609>20	beshort		x	\b, version %d
15610>22	beshort		x	\b.%d
15611# https://www.w3.org/TR/WOFF2/
156120	string		wOF2	Web Open Font Format (Version 2)
15613!:mime font/woff2
15614!:ext	woff2
15615>0	use		woff
15616#>20	belong		x	\b, totalCompressedSize %d
15617>24	beshort		x	\b, version %d
15618>26	beshort		x	\b.%d
15619
15620#------------------------------------------------------------------------------
15621# $File: forth,v 1.4 2021/04/26 15:56:00 christos Exp $
15622# forth:  file(1) magic for various Forth environments
15623# From: Lubomir Rintel <lkundrak@v3.sk>
15624#
15625
15626# Has a FORTH stack diagram and something that looks very much like a FORTH
15627# multi-line word definition. Probably a FORTH source.
156280       regex   \[[:space:]]\\(([[:space:]].*)?\ --\ (.*[[:space:]])?\\)
15629>0      regex   \^:\[[:space:]]
15630>>0     regex   \^;$				FORTH program
15631!:mime  text/x-forth
15632
15633# Inline word definition complete with a stack diagram
156340       regex   \^:[[:space:]].*[[:space:]]\\(([[:space:]].*)?\ --\ (.*[[:space:]])?\\)[[:space:]].*[[:space:]];$	FORTH program
15635!:mime  text/x-forth
15636
15637# Various dictionary images used by OpenFirware FORTH environment
15638
156390	lelong	0xe1a00000
15640>8	lelong	0xe1a00000
15641# skip raspberry pi kernel image kernel7.img by checking for positive text length
15642>>24	lelong	>0		ARM OpenFirmware FORTH Dictionary,
15643>>>24	lelong	x		Text length: %d bytes,
15644>>>28	lelong	x		Data length: %d bytes,
15645>>>32	lelong	x		Text Relocation Table length: %d bytes,
15646>>>36	lelong	x		Data Relocation Table length: %d bytes,
15647>>>40	lelong	x		Entry Point: %#08X,
15648>>>44	lelong	x		BSS length: %d bytes
15649
156500	string	MP
15651>28	lelong	1		x86 OpenFirmware FORTH Dictionary,
15652>>4	leshort	x		%d blocks
15653>>2	leshort	x		+ %d bytes,
15654>>6	leshort	x		%d relocations,
15655>>8	leshort	x		Header length: %d paragraphs,
15656>>10	leshort	x		Data Size: %d
15657>>12	leshort	x		- %d 4K pages,
15658>>14	lelong	x		Initial Stack Pointer: %#08X,
15659>>20	lelong	x		Entry Point: %#08X,
15660>>24	lelong	x		First Relocation Item: %d,
15661>>26	lelong	x		Overlay Number: %d,
15662>>18	leshort	x		Checksum: %#08X
15663
156640	belong	0x48000020	PowerPC OpenFirmware FORTH Dictionary,
15665>4	belong	x		Text length: %d bytes,
15666>8	belong	x		Data length: %d bytes,
15667>12	belong	x		BSS length: %d bytes,
15668>16	belong	x		Symbol Table length: %d bytes,
15669>20	belong	x		Entry Point: %#08X,
15670>24	belong	x		Text Relocation Table length: %d bytes,
15671>28	belong	x		Data Relocation Table length: %d bytes
15672
156730	lelong	0x10000007	MIPS OpenFirmware FORTH Dictionary,
15674>4	lelong	x		Text length: %d bytes,
15675>8	lelong	x		Data length: %d bytes,
15676>12	lelong	x		BSS length: %d bytes,
15677>16	lelong	x		Symbol Table length: %d bytes,
15678>20	lelong	x		Entry Point: %#08X,
15679>24	lelong	x		Text Relocation Table length: %d bytes,
15680>28	lelong	x		Data Relocation Table length: %d bytes
15681
15682# Dictionary images used by minimal C FORTH environments, any platform,
15683# using native byte order.
15684
15685# Weak.
15686#0	short	0x5820		cForth 16-bit Dictionary,
15687#>2	short	x		Serial: %#08X,
15688#>4	short	x		Dictionary Start: %#08X,
15689#>6	short	x		Dictionary Size: %d bytes,
15690#>8	short	x		User Area Start: %#08X,
15691#>10	short	x		User Area Size: %d bytes,
15692#>12	short	x		Entry Point: %#08X
15693
156940	long	0x581120	cForth 32-bit Dictionary,
15695>4	long	x		Serial: %#08X,
15696>8	long	x		Dictionary Start: %#08X,
15697>12	long	x		Dictionary Size: %d bytes,
15698>16	long	x		User Area Start: %#08X,
15699>20	long	x		User Area Size: %d bytes,
15700>24	long	x		Entry Point: %#08X
15701
15702#------------------------------------------------------------------------------
15703# $File: fortran,v 1.10 2015/11/05 18:47:16 christos Exp $
15704# FORTRAN source
15705# Check that the first 100 lines start with C or whitespace first.
157060       regex/100l      !\^[^Cc\ \t].*$
15707>0	regex/100l	\^[Cc][\ \t]	FORTRAN program text
15708!:mime	text/x-fortran
15709!:strength - 5
15710
15711#------------------------------------------------------------------------------
15712# $File: frame,v 1.14 2019/11/25 00:31:30 christos Exp $
15713# frame:  file(1) magic for FrameMaker files
15714#
15715# This stuff came on a FrameMaker demo tape, most of which is
15716# copyright, but this file is "published" as witness the following:
15717#
15718# Note that this is the Framemaker Maker Interchange Format, not the
15719# Normal format which would be application/vnd.framemaker.
15720#
157210	string		\<MakerFile	FrameMaker document
15722!:mime	application/x-mif
15723>11	string		5.5		 (5.5
15724>11	string		5.0		 (5.0
15725>11	string		4.0		 (4.0
15726>11	string		3.0		 (3.0
15727>11	string		2.0		 (2.0
15728>11	string		1.0		 (1.0
15729>14	byte		x		  %c)
15730# URL:		http://fileformats.archiveteam.org/wiki/Maker_Interchange_Format
15731# Reference:	https://help.adobe.com/en_US/framemaker/mifreference/mifref.pdf
15732# Update:	Joerg Jenderek 2019 Nov
157330	string		\<MIFFile	FrameMaker MIF (ASCII) file
15734# https://www.iana.org/assignments/media-types/application/vnd.mif
15735!:mime	application/vnd.mif
15736# mif most but also find bookTOC.framemif
15737!:ext	mif/framemif
15738# followed by space~20h
15739#>8	ubyte		0x20		\b, space before version
15740# 3 characters of version number of the MIF language like 1.0, 2.0 ... 2015 ...
15741>9	string		x		(%.3s
15742# if not greater sign then display 4th character of version
15743>12	ubyte		=0x3e		\b)
15744>12	ubyte		!0x3e		\b%c)
15745# comment starting with # shows the name+version number of generating program
15746>13	search/3	#
15747>>&0	string		x		"%s"
157480	search/1	\<MakerDictionary	FrameMaker Dictionary text
15749!:mime	application/x-mif
15750>17	string		3.0		 (3.0)
15751>17	string		2.0		 (2.0)
15752>17	string		1.0		 (1.x)
157530	string		\<MakerScreenFont	FrameMaker Font file
15754!:mime	application/x-mif
15755>17	string		1.01		 (%s)
157560	string		\<MML		FrameMaker MML file
15757!:mime	application/x-mif
157580	string		\<BookFile	FrameMaker Book file
15759!:mime	application/x-mif
15760>10	string		3.0		 (3.0
15761>10	string		2.0		 (2.0
15762>10	string		1.0		 (1.0
15763>13	byte		x		  %c)
15764# XXX - this book entry should be verified, if you find one, uncomment this
15765#0	string		\<Book\040 	FrameMaker Book (ASCII) file
15766#!:mime	application/x-mif
15767#>6	string		3.0		 (3.0)
15768#>6	string		2.0		 (2.0)
15769#>6	string		1.0		 (1.0)
157700	string		\<Maker\040Intermediate\040Print\040File	FrameMaker IPL file
15771!:mime	application/x-mif
15772
15773#------------------------------------------------------------------------------
15774# $File: freebsd,v 1.9 2022/01/19 12:44:13 christos Exp $
15775# freebsd:  file(1) magic for FreeBSD objects
15776#
15777# All new-style FreeBSD magic numbers are in host byte order (i.e.,
15778# little-endian on x86).
15779#
15780# XXX - this comes from the file "freebsd" in a recent FreeBSD version of
15781# "file"; it, and the NetBSD stuff in "netbsd", appear to use different
15782# schemes for distinguishing between executable images, shared libraries,
15783# and object files.
15784#
15785# FreeBSD says:
15786#
15787#    Regardless of whether it's pure, demand-paged, or none of the
15788#    above:
15789#
15790#	if the entry point is < 4096, then it's a shared library if
15791#	the "has run-time loader information" bit is set, and is
15792#	position-independent if the "is position-independent" bit
15793#	is set;
15794#
15795#	if the entry point is >= 4096 (or >4095, same thing), then it's
15796#	an executable, and is dynamically-linked if the "has run-time
15797#	loader information" bit is set.
15798#
15799# On x86, NetBSD says:
15800#
15801#    If it's neither pure nor demand-paged:
15802#
15803#	if it has the "has run-time loader information" bit set, it's
15804#	a dynamically-linked executable;
15805#
15806#	if it doesn't have that bit set, then:
15807#
15808#	    if it has the "is position-independent" bit set, it's
15809#	    position-independent;
15810#
15811#	    if the entry point is non-zero, it's an executable, otherwise
15812#	    it's an object file.
15813#
15814#    If it's pure:
15815#
15816#	if it has the "has run-time loader information" bit set, it's
15817#	a dynamically-linked executable, otherwise it's just an
15818#	executable.
15819#
15820#    If it's demand-paged:
15821#
15822#	if it has the "has run-time loader information" bit set,
15823#	then:
15824#
15825#	    if the entry point is < 4096, it's a shared library;
15826#
15827#	    if the entry point is = 4096 or > 4096 (i.e., >= 4096),
15828#	    it's a dynamically-linked executable);
15829#
15830#	if it doesn't have the "has run-time loader information" bit
15831#	set, then it's just an executable.
15832#
15833# (On non-x86, NetBSD does much the same thing, except that it uses
15834# 8192 on 68K - except for "68k4k", which is presumably "68K with 4K
15835# pages - SPARC, and MIPS, presumably because Sun-3's and Sun-4's
15836# had 8K pages; dunno about MIPS.)
15837#
15838# I suspect the two will differ only in perverse and uninteresting cases
15839# ("shared" libraries that aren't demand-paged and whose pages probably
15840# won't actually be shared, executables with entry points <4096).
15841#
15842# I leave it to those more familiar with FreeBSD and NetBSD to figure out
15843# what the right answer is (although using ">4095", FreeBSD-style, is
15844# probably better than separately checking for "=4096" and ">4096",
15845# NetBSD-style).  (The old "netbsd" file analyzed FreeBSD demand paged
15846# executables using the NetBSD technique.)
15847#
158480	lelong&0377777777	041400407	FreeBSD/i386
15849>20	lelong			<4096
15850>>3	byte&0xC0		&0x80		shared library
15851>>3	byte&0xC0		0x40		PIC object
15852>>3	byte&0xC0		0x00		object
15853>20	lelong			>4095
15854>>3	byte&0x80		0x80		dynamically linked executable
15855>>3	byte&0x80		0x00		executable
15856>16	lelong			>0		not stripped
15857
158580	lelong&0377777777	041400410	FreeBSD/i386 pure
15859>20	lelong			<4096
15860>>3	byte&0xC0		&0x80		shared library
15861>>3	byte&0xC0		0x40		PIC object
15862>>3	byte&0xC0		0x00		object
15863>20	lelong			>4095
15864>>3	byte&0x80		0x80		dynamically linked executable
15865>>3	byte&0x80		0x00		executable
15866>16	lelong			>0		not stripped
15867
158680	lelong&0377777777	041400413	FreeBSD/i386 demand paged
15869>20	lelong			<4096
15870>>3	byte&0xC0		&0x80		shared library
15871>>3	byte&0xC0		0x40		PIC object
15872>>3	byte&0xC0		0x00		object
15873>20	lelong			>4095
15874>>3	byte&0x80		0x80		dynamically linked executable
15875>>3	byte&0x80		0x00		executable
15876>16	lelong			>0		not stripped
15877
158780	lelong&0377777777	041400314	FreeBSD/i386 compact demand paged
15879>20	lelong			<4096
15880>>3	byte&0xC0		&0x80		shared library
15881>>3	byte&0xC0		0x40		PIC object
15882>>3	byte&0xC0		0x00		object
15883>20	lelong			>4095
15884>>3	byte&0x80		0x80		dynamically linked executable
15885>>3	byte&0x80		0x00		executable
15886>16	lelong			>0		not stripped
15887
15888# XXX gross hack to identify core files
15889# cores start with a struct tss; we take advantage of the following:
15890# byte 7:     highest byte of the kernel stack pointer, always 0xfe
15891#      8/9:   kernel (ring 0) ss value, always 0x0010
15892#      10 - 27: ring 1 and 2 ss/esp, unused, thus always 0
15893#      28:    low order byte of the current PTD entry, always 0 since the
15894#             PTD is page-aligned
15895#
158967	string	\357\020\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0	FreeBSD/i386 a.out core file
15897>1039	string	>\0	from '%s'
15898
15899# /var/run/ld.so.hints
15900# What are you laughing about?
159010	lelong			011421044151	ld.so hints file (Little Endian
15902>4	lelong			>0		\b, version %d)
15903>4	belong			<1		\b)
159040	belong			011421044151	ld.so hints file (Big Endian
15905>4	belong			>0		\b, version %d)
15906>4	belong			<1		\b)
15907
15908#
15909# Files generated by FreeBSD scrshot(1)/vidcontrol(1) utilities
15910#
159110	string	SCRSHOT_	scrshot(1) screenshot,
15912>8	byte	x		version %d,
15913>9	byte	2		%d bytes in header,
15914>>10	byte	x		%d chars wide by
15915>>11	byte	x		%d chars high
15916
15917#
15918# FreeBSD kernel minidumps
15919#
159200	string	minidump\040FreeBSD/	FreeBSD kernel minidump
15921# powerpc uses 32-byte magic, followed by 32-byte mmu kind, then version
15922>17	string	powerpc
15923>>17	string	>\0			for %s,
15924>>>32	string	>\0			%s,
15925>>>>64	byte	0			big endian,
15926>>>>>64	belong	x			version %d
15927>>>>64	default	x			little endian,
15928>>>>>64	lelong	x			version %d
15929# all other architectures use 24-byte magic, followed by version
15930>17	default	x
15931>>17	string	>\0			for %s,
15932>>>24	byte	0			big endian,
15933>>>>24	belong	x			version %d
15934>>>24	default	x			little endian,
15935>>>>24	lelong	x			version %d
15936
15937#------------------------------------------------------------------------------
15938# $File: fsav,v 1.22 2021/04/26 15:56:00 christos Exp $
15939# fsav:  file(1) magic for datafellows fsav virus definition files
15940# Anthon van der Neut (anthon@mnt.org)
15941
15942# ftp://ftp.f-prot.com/pub/{macrdef2.zip,nomacro.def}
159430	beshort		0x1575		fsav macro virus signatures
15944>8	leshort		>0		(%d-
15945>11	byte		>0		\b%02d-
15946>10	byte		>0		\b%02d)
15947# ftp://ftp.f-prot.com/pub/sign.zip
15948#10	ubyte		<12
15949#>9	ubyte		<32
15950#>>8	ubyte		0x0a
15951#>>>12	ubyte		0x07
15952#>>>>11	uleshort	>0		fsav DOS/Windows virus signatures (%d-
15953#>>>>10	byte		0		\b01-
15954#>>>>10	byte		1		\b02-
15955#>>>>10	byte		2		\b03-
15956#>>>>10	byte		3		\b04-
15957#>>>>10	byte		4		\b05-
15958#>>>>10	byte		5		\b06-
15959#>>>>10	byte		6		\b07-
15960#>>>>10	byte		7		\b08-
15961#>>>>10	byte		8		\b09-
15962#>>>>10	byte		9		\b10-
15963#>>>>10	byte		10		\b11-
15964#>>>>10	byte		11		\b12-
15965#>>>>9	ubyte		>0		\b%02d)
15966# ftp://ftp.f-prot.com/pub/sign2.zip
15967#0	ubyte		0x62
15968#>1	ubyte		0xF5
15969#>>2	ubyte		0x1
15970#>>>3	ubyte		0x1
15971#>>>>4	ubyte		0x0e
15972#>>>>>13		ubyte	>0		fsav virus signatures
15973#>>>>>>11	ubyte	x		size %#02x
15974#>>>>>>12	ubyte	x		\b%02x
15975#>>>>>>13	ubyte	x		\b%02x bytes
15976
15977# Joerg Jenderek: joerg dot jenderek at web dot de
15978# clamav-0.100.2\docs\html\node60.html
15979# https://github.com/vrtadmin/clamav-faq/raw/master/manual/clamdoc.pdf
15980# ClamAV virus database files start with a 512 bytes colon separated header
15981# ClamAV-VDB:buildDate:version:signaturesNumbers:functionalityLevelRequired:MD5:Signature:builder:buildTime
15982# + gzipped (optional) tarball files
15983# output can often be verified by `sigtool --info=FILE`
159840	string		ClamAV-VDB:	Clam AntiVirus
15985# padding spaces implies database
15986>511	ubyte		=0x20		database
15987!:mime	application/x-clamav-database
15988# empty build time
15989>>10	string		=::		(unsigned)
15990# sigtool(1) man page
15991!:ext	cud
15992# display some text to avoid error like:
15993# Magdir/fsav, 78: Warning: Current entry does not yet have a description for adding a EXTENSION type
15994# file: could not find any valid magic files! (No error)
15995>>10	default		x		(with buildtime)
15996#>>10	default		x
15997# clamtmp is used for temporarily database like update process
15998# for pure tar database only cld extension found
15999!:ext	cld/cvd/clamtmp/cud
16000>511	default		x		file
16001!:mime	application/x-clamav
16002!:ext	info
16003>11	string		>\0
16004# buildDate empty or like "22 Mar 2017 12-57 -0400"; verified by `sigtool -i FILE`
16005>>11	regex		\^[^:]{0,23}	\b, %s
16006# version like 25170
16007>>>&1	regex		\^[^:]{1,6}	\b, version %s
16008# signaturesNumbers like 4566249
16009>>>>&1	regex		\^[^:]{1,10}	\b, %s signatures
16010# functionalityLevelRequired like 60
16011>>>>>&1	regex		\^[^:]{1,4}	\b, level %s
16012# X for nothing or MD5
16013#>>>>>>&1	regex	\^[^:]{1,32}	\b, MD5 "%s"
16014>>>>>>&1	regex	\^[^:]{1,32}
16015# X for nothing or digital signature starting like AIzk/LYbX
16016#>>>>>>>&1	regex	\^[^:]{1,255}	\b, signature "%s"
16017>>>>>>>&1	regex	\^[^:]{1,255}
16018# builder like neo
16019>>>>>>>>&1	regex	\^[^:]{1,32}	\b, builder %s
16020# buildTime like 1506611558
16021#>>>>>>>>>&1	regex	\^[^:]{1,10}	\b, %s
16022>>>>>>>>>&1	regex	\^[^:]{1,10}
16023# padding with spaces
16024#>>>>>>>>>>&1	ubequad	x		\b, padding %#16.16llx
16025>510	ubyte		=0x20
16026# inspect real database content
16027#>>512	ubeshort	x		\b, database MAGIC %#x
16028# ./archive handle pure tar archives
16029>>1012	quad		=0		\b, with
16030>>>512	use		tar-file
16031# not pure tar
16032>>1012	quad		!0
16033# one space at the end of text and then handles gzipped archives by ./compress
16034>>>512	string		\037\213	\b, with
16035>>>>512	indirect	x
16036
16037# Type: Grisoft AVG AntiVirus
16038# From: David Newgas <david@newgas.net>
160390	string	AVG7_ANTIVIRUS_VAULT_FILE	AVG 7 Antivirus vault file data
16040
160410	string	X5O!P%@AP[4\\PZX54(P^)7CC)7}$EICAR
16042>33	string	-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*	EICAR virus test files
16043
16044# From: Joerg Jenderek
16045# URL: https://www.avira.com/
16046# Note: found in directory %ProgramData%\Avira\Antivirus\INFECTED (Windows)
16047# tested with version 15.0.43.23 at November 2019
160480	string		AntiVir\ Qua	Avira AntiVir quarantined
16049!:mime	application/x-avira-qua
16050#!:mime	application/octet-stream
16051!:ext	qua
16052>156	string		SUSPICIOUS_FILE
16053# file path of suspicious file
16054>>220	lestring16	x		%s
16055>156	string		!SUSPICIOUS_FILE
16056# file path of virus file
16057>>228	lestring16	x		%s
16058# quarantined date
16059>60	ldate		x		at %s
16060# virus/danger name
16061>156	string		!SUSPICIOUS_FILE
16062>>156	string		x		\b, category "%s"
16063
16064
16065#------------------------------------------------------------------------------
16066# $File: fusecompress,v 1.2 2011/08/08 09:05:55 christos Exp $
16067# fusecompress:   file(1) magic for fusecompress
160680	string	\037\135\211	FuseCompress(ed) data
16069>3	byte	0x00	(none format)
16070>3	byte	0x01	(bz2 format)
16071>3	byte	0x02	(gz format)
16072>3	byte	0x03	(lzo format)
16073>3	byte	0x04	(xor format)
16074>3	byte	>0x04	(unknown format)
16075>4	long	x	uncompressed size: %d
16076
16077#------------------------------------------------------------------------------
16078# $File: games,v 1.25 2022/05/31 18:40:20 christos Exp $
16079# games:  file(1) for games
16080
16081# Fabio Bonelli <fabiobonelli@libero.it>
16082# Quake II - III data files
160830       string  IDP2        	Quake II 3D Model file,
16084>20     long    x               %u skin(s),
16085>8      long    x               (%u x
16086>12     long    x 		%u),
16087>40     long    x               %u frame(s),
16088>16     long    x               Frame size %u bytes,
16089>24     long  	x               %u vertices/frame,
16090>28     long    x            	%u texture coordinates,
16091>32     long    x               %u triangles/frame
16092
160930       string  IBSP            Quake
16094>4      long    0x26            II Map file (BSP)
16095>4      long    0x2E      	III Map file (BSP)
16096
160970       string  IDS2            Quake II SP2 sprite file
16098
16099#---------------------------------------------------------------------------
16100# Doom and Quake
16101# submitted by Nicolas Patrois
16102
161030       string  \xcb\x1dBoom\xe6\xff\x03\x01    Boom or linuxdoom demo
16104# some doom lmp files don't match, I've got one beginning with \x6d\x02\x01\x01
16105
1610624      string  LxD\ 203        Linuxdoom save
16107>0      string  x       , name=%s
16108>44     string  x       , world=%s
16109
16110# Quake
16111
16112# Update: Joerg Jenderek
16113# URL: http://fileformats.archiveteam.org/wiki/PAK
16114# reference: https://quakewiki.org/wiki/.pak
16115# GRR: line below is too general as it matches also Acorn PackDir compressed Archive
16116# and Git pack ./revision
161170       string  PACK
16118# real Quake examples like pak0.pak have only some hundreds like 150 files
16119# So test for few files
16120>8	ulelong <0x01000000
16121# in file version 5.32 test for null terminator is only true for
16122# offset ~< FILE_BYTES_MAX = 1 MB defined in ../../src/file.h
16123# look for null terminator of 1st entry name
16124>>(4.l+55)	ubyte	0	Quake I or II world or extension
16125!:mime	application/x-dzip
16126!:ext	pak
16127#>>>8	ulelong	x	\b, table size %u
16128# dividing this by entry size (64) gives number of files
16129>>>8	ulelong/64 x	\b, %u files
16130# offset to the beginning of the file table
16131>>>4	ulelong	x	\b, offset %#x
16132# 1st file entry
16133>>>(4.l)	use	pak-entry
16134# 2nd file entry
16135#>>>4	ulelong+64	x	\b, offset %#x
16136#>>>(4.l+64)	use	pak-entry
16137#
16138#	display file table entry of Quake PAK archive
161390	name		pak-entry
16140# normally entry start after header which implies offset 12 or higher
16141>56	ulelong	>11
16142# the offset from the beginning of pak to beginning of this entry file contents
16143>>56	ulelong	x	at %#x
16144# the size of file for this entry
16145>>60	ulelong	x	%u bytes
16146# 56 byte null-terminated entry name string includes path like maps/e1m1.bsp
16147>>0	string	x	'%-.56s'
16148# inspect entry content by jumping to entry offset
16149>>(56)	indirect x	\b:
16150
16151#0       string  -1\x0a  Quake I demo
16152#>30     string  x        version %.4s
16153#>61     string  x        level %s
16154
16155#0       string  5\x0a   Quake I save
16156
16157# The levels
16158
16159# Quake 1
16160
161610	string	5\x0aIntroduction             Quake I save: start Introduction
161620	string	5\x0athe_Slipgate_Complex     Quake I save: e1m1 The slipgate complex
161630	string	5\x0aCastle_of_the_Damned     Quake I save: e1m2 Castle of the damned
161640	string	5\x0athe_Necropolis           Quake I save: e1m3 The necropolis
161650	string	5\x0athe_Grisly_Grotto        Quake I save: e1m4 The grisly grotto
161660	string	5\x0aZiggurat_Vertigo         Quake I save: e1m8 Ziggurat vertigo (secret)
161670	string	5\x0aGloom_Keep               Quake I save: e1m5 Gloom keep
161680	string	5\x0aThe_Door_To_Chthon       Quake I save: e1m6 The door to Chthon
161690	string	5\x0aThe_House_of_Chthon      Quake I save: e1m7 The house of Chthon
161700	string	5\x0athe_Installation         Quake I save: e2m1 The installation
161710	string	5\x0athe_Ogre_Citadel         Quake I save: e2m2 The ogre citadel
161720	string	5\x0athe_Crypt_of_Decay       Quake I save: e2m3 The crypt of decay (dopefish lives!)
161730	string	5\x0aUnderearth               Quake I save: e2m7 Underearth (secret)
161740	string	5\x0athe_Ebon_Fortress        Quake I save: e2m4 The ebon fortress
161750	string	5\x0athe_Wizard's_Manse       Quake I save: e2m5 The wizard's manse
161760	string	5\x0athe_Dismal_Oubliette     Quake I save: e2m6 The dismal oubliette
161770	string	5\x0aTermination_Central      Quake I save: e3m1 Termination central
161780	string	5\x0aVaults_of_Zin            Quake I save: e3m2 Vaults of Zin
161790	string	5\x0athe_Tomb_of_Terror       Quake I save: e3m3 The tomb of terror
161800	string	5\x0aSatan's_Dark_Delight     Quake I save: e3m4 Satan's dark delight
161810	string	5\x0athe_Haunted_Halls        Quake I save: e3m7 The haunted halls (secret)
161820	string	5\x0aWind_Tunnels             Quake I save: e3m5 Wind tunnels
161830	string	5\x0aChambers_of_Torment      Quake I save: e3m6 Chambers of torment
161840	string	5\x0athe_Sewage_System        Quake I save: e4m1 The sewage system
161850	string	5\x0aThe_Tower_of_Despair     Quake I save: e4m2 The tower of despair
161860	string	5\x0aThe_Elder_God_Shrine     Quake I save: e4m3 The elder god shrine
161870	string	5\x0athe_Palace_of_Hate       Quake I save: e4m4 The palace of hate
161880	string	5\x0aHell's_Atrium            Quake I save: e4m5 Hell's atrium
161890	string	5\x0athe_Nameless_City        Quake I save: e4m8 The nameless city (secret)
161900	string	5\x0aThe_Pain_Maze            Quake I save: e4m6 The pain maze
161910	string	5\x0aAzure_Agony              Quake I save: e4m7 Azure agony
161920	string	5\x0aShub-Niggurath's_Pit     Quake I save: end Shub-Niggurath's pit
16193
16194# Quake DeathMatch levels
16195
161960	string	5\x0aPlace_of_Two_Deaths	 Quake I save: dm1 Place of two deaths
161970	string	5\x0aClaustrophobopolis		 Quake I save: dm2 Claustrophobopolis
161980	string	5\x0aThe_Abandoned_Base		 Quake I save: dm3 The abandoned base
161990	string	5\x0aThe_Bad_Place		 Quake I save: dm4 The bad place
162000	string	5\x0aThe_Cistern		 Quake I save: dm5 The cistern
162010	string	5\x0aThe_Dark_Zone		 Quake I save: dm6 The dark zone
16202
16203# Scourge of Armagon
16204
162050	string	5\x0aCommand_HQ               Quake I save: start Command HQ
162060	string	5\x0aThe_Pumping_Station      Quake I save: hip1m1 The pumping station
162070	string	5\x0aStorage_Facility         Quake I save: hip1m2 Storage facility
162080	string	5\x0aMilitary_Complex         Quake I save: hip1m5 Military complex (secret)
162090	string	5\x0athe_Lost_Mine            Quake I save: hip1m3 The lost mine
162100	string	5\x0aResearch_Facility        Quake I save: hip1m4 Research facility
162110	string	5\x0aAncient_Realms           Quake I save: hip2m1 Ancient realms
162120	string	5\x0aThe_Gremlin's_Domain     Quake I save: hip2m6 The gremlin's domain (secret)
162130	string	5\x0aThe_Black_Cathedral      Quake I save: hip2m2 The black cathedral
162140	string	5\x0aThe_Catacombs            Quake I save: hip2m3 The catacombs
162150	string	5\x0athe_Crypt__              Quake I save: hip2m4 The crypt
162160	string	5\x0aMortum's_Keep            Quake I save: hip2m5 Mortum's keep
162170	string	5\x0aTur_Torment              Quake I save: hip3m1 Tur torment
162180	string	5\x0aPandemonium              Quake I save: hip3m2 Pandemonium
162190	string	5\x0aLimbo                    Quake I save: hip3m3 Limbo
162200	string	5\x0athe_Edge_of_Oblivion     Quake I save: hipdm1 The edge of oblivion (secret)
162210	string	5\x0aThe_Gauntlet             Quake I save: hip3m4 The gauntlet
162220	string	5\x0aArmagon's_Lair           Quake I save: hipend Armagon's lair
16223
16224# Malice
16225
162260	string	5\x0aThe_Academy      Quake I save: start The academy
162270	string	5\x0aThe_Lab          Quake I save: d1 The lab
162280	string	5\x0aArea_33          Quake I save: d1b Area 33
162290	string	5\x0aSECRET_MISSIONS  Quake I save: d3b Secret missions
162300	string	5\x0aThe_Hospital     Quake I save: d10 The hospital (secret)
162310	string	5\x0aThe_Genetics_Lab Quake I save: d11 The genetics lab (secret)
162320	string	5\x0aBACK_2_MALICE    Quake I save: d4b Back to Malice
162330	string	5\x0aArea44           Quake I save: d1c Area 44
162340	string	5\x0aTakahiro_Towers  Quake I save: d2 Takahiro towers
162350	string	5\x0aA_Rat's_Life     Quake I save: d3 A rat's life
162360	string	5\x0aInto_The_Flood   Quake I save: d4 Into the flood
162370	string	5\x0aThe_Flood        Quake I save: d5 The flood
162380	string	5\x0aNuclear_Plant    Quake I save: d6 Nuclear plant
162390	string	5\x0aThe_Incinerator_Plant    Quake I save: d7 The incinerator plant
162400	string	5\x0aThe_Foundry              Quake I save: d7b The foundry
162410	string	5\x0aThe_Underwater_Base      Quake I save: d8 The underwater base
162420	string	5\x0aTakahiro_Base            Quake I save: d9 Takahiro base
162430	string	5\x0aTakahiro_Laboratories    Quake I save: d12 Takahiro laboratories
162440	string	5\x0aStayin'_Alive    Quake I save: d13 Stayin' alive
162450	string	5\x0aB.O.S.S._HQ      Quake I save: d14 B.O.S.S. HQ
162460	string	5\x0aSHOWDOWN!        Quake I save: d15 Showdown!
16247
16248# Malice DeathMatch levels
16249
162500	string	5\x0aThe_Seventh_Precinct	 Quake I save: ddm1 The seventh precinct
162510	string	5\x0aSub_Station		 Quake I save: ddm2 Sub station
162520	string	5\x0aCrazy_Eights!		 Quake I save: ddm3 Crazy eights!
162530	string	5\x0aEast_Side_Invertationa	 Quake I save: ddm4 East side invertationa
162540	string	5\x0aSlaughterhouse		 Quake I save: ddm5 Slaughterhouse
162550	string	5\x0aDOMINO			 Quake I save: ddm6 Domino
162560	string	5\x0aSANDRA'S_LADDER		 Quake I save: ddm7 Sandra's ladder
16257
16258
162590	string	MComprHD	MAME CHD compressed hard disk image,
16260>12	belong	x		version %u
16261
16262# doom - submitted by Jon Dowland
16263
162640	string	=IWAD		doom main IWAD data
16265>4	lelong	x		containing %d lumps
162660	string	=PWAD		doom patch PWAD data
16267>4	lelong	x		containing %d lumps
16268
16269# Build engine group files (Duke Nukem, Shadow Warrior, ...)
16270# Extension: .grp
16271# Created by: "Ganael Laplanche" <ganael.laplanche@martymac.org>
162720	string	KenSilverman	Build engine group file
16273>12	lelong	x		containing %d files
16274
16275# Summary: Warcraft 3 save
16276# Extension: .w3g
16277# Created by: "Nelson A. de Oliveira" <naoliv@gmail.com>
162780	string		Warcraft\ III\ recorded\ game	%s
16279
16280
16281# Summary: Warcraft 3 map
16282# Extension: .w3m
16283# Created by: "Nelson A. de Oliveira" <naoliv@gmail.com>
162840	string		HM3W		Warcraft III map file
16285
16286
16287# Summary: SGF Smart Game Format
16288# Extension: .sgf
16289# Reference: https://www.red-bean.com/sgf/
16290# Created by: Eduardo Sabbatella <eduardo_sabbatella@yahoo.com.ar>
16291# Modified by (1): Abel Cheung (regex, more game format)
16292# FIXME: Some games don't have GM (game type)
162930	regex		\\(;.*GM\\[[0-9]{1,2}\\]	Smart Game Format
16294>2	search/0x200/b	GM[
16295>>&0	string		1]	(Go)
16296>>&0	string		2]	(Othello)
16297>>&0	string		3]	(chess)
16298>>&0	string		4]	(Gomoku+Renju)
16299>>&0	string		5]	(Nine Men's Morris)
16300>>&0	string		6]	(Backgammon)
16301>>&0	string		7]	(Chinese chess)
16302>>&0	string		8]	(Shogi)
16303>>&0	string		9]	(Lines of Action)
16304>>&0	string		10]	(Ataxx)
16305>>&0	string		11]	(Hex)
16306>>&0	string		12]	(Jungle)
16307>>&0	string		13]	(Neutron)
16308>>&0	string		14]	(Philosopher's Football)
16309>>&0	string		15]	(Quadrature)
16310>>&0	string		16]	(Trax)
16311>>&0	string		17]	(Tantrix)
16312>>&0	string		18]	(Amazons)
16313>>&0	string		19]	(Octi)
16314>>&0	string		20]	(Gess)
16315>>&0	string		21]	(Twixt)
16316>>&0	string		22]	(Zertz)
16317>>&0	string		23]	(Plateau)
16318>>&0	string		24]	(Yinsh)
16319>>&0	string		25]	(Punct)
16320>>&0	string		26]	(Gobblet)
16321>>&0	string		27]	(hive)
16322>>&0	string		28]	(Exxit)
16323>>&0	string		29]	(Hnefatal)
16324>>&0	string		30]	(Kuba)
16325>>&0	string		31]	(Tripples)
16326>>&0	string		32]	(Chase)
16327>>&0	string		33]	(Tumbling Down)
16328>>&0	string		34]	(Sahara)
16329>>&0	string		35]	(Byte)
16330>>&0	string		36]	(Focus)
16331>>&0	string		37]	(Dvonn)
16332>>&0	string		38]	(Tamsk)
16333>>&0	string		39]	(Gipf)
16334>>&0	string		40]	(Kropki)
16335
16336##############################################
16337# NetImmerse/Gamebryo game engine entries
16338
16339# Summary: Gamebryo game engine file
16340# Extension: .nif, .kf
16341# Created by: Abel Cheung <abelcheung@gmail.com>
163420		string		Gamebryo\ File\ Format,\ Version\ 	Gamebryo game engine file
16343>&0		regex		[0-9a-z.]+				\b, version %s
16344
16345# Summary: Gamebryo game engine file
16346# Extension: .kfm
16347# Created by: Abel Cheung <abelcheung@gmail.com>
163480		string		;Gamebryo\ KFM\ File\ Version\ 		Gamebryo game engine animation File
16349>&0		regex		[0-9a-z.]+				\b, version %s
16350
16351# Summary: NetImmerse game engine file
16352# Extension .nif
16353# Created by: Abel Cheung <abelcheung@gmail.com>
163540		string		NetImmerse\ File\ Format,\ Version
16355>&0		string		n\ 					NetImmerse game engine file
16356>>&0		regex		[0-9a-z.]+				\b, version %s
16357
16358# Type:	SGF Smart Game Format
16359# URL:	https://www.red-bean.com/sgf/
16360# From:	Eduardo Sabbatella <eduardo_sabbatella@yahoo.com.ar>
163612	regex/c	\\(;.*GM\\[[0-9]{1,2}\\]	Smart Game Format
16362>2	regex/c	GM\\[1\\]			- Go Game
16363>2	regex/c	GM\\[6\\]			- BackGammon Game
16364>2	regex/c	GM\\[11\\]			- Hex Game
16365>2	regex/c	GM\\[18\\]			- Amazons Game
16366>2	regex/c	GM\\[19\\]			- Octi Game
16367>2	regex/c	GM\\[20\\]			- Gess Game
16368>2	regex/c	GM\\[21\\]			- twix Game
16369
16370# Epic Games/Unreal Engine Package
16371#
163720	lelong		0x9E2A83C1	Unreal Engine Package,
16373>4	leshort		x		version: %i
16374>12	lelong		!0		\b, names: %i
16375>28	lelong		!0		\b, imports: %i
16376>20	lelong		!0		\b, exports: %i
16377
163780	string		ESVG
16379>4	lelong		0x00160000
16380>10	string		TOC\020		Empire Deluxe for DOS saved game
16381
16382# Sid Meier's Civilization V/VI
16383# From: Benjamin Lowry <ben@ben.gmbh>
163840	string	CIV5
16385>4	byte	0x08		Sid Meier's Civilization V saved game,
16386>>12	regex	[0-9a-z.]+	saved by game version %s
16387>4	byte	0x01		Sid Meier's Civilization V replay data,
16388>>12	regex	[0-9a-z.]+	saved by game version %s
16389
163900	string	CIV6		Sid Meier's Civilization VI saved game
16391
16392# https://syzygy-tables.info/
16393# From Michel Van den Bergh
163940	string	\327f\f\245	Syzygy DTZ tablebase
16395!:mime	application/syzygy
163960	string	q\350#]		Syzygy WDL tablebase
16397!:mime	application/syzygy
16398
16399##############################################################################
16400# Grand Theft Auto (GTA) file formats.
16401#
16402# Summary:
16403# Includes GTA-specific formats used in all games from 1997 to present. Games
16404# and formats were created by Rockstar North, formerly DMA Design. Magic tests
16405# were written based on a combination of official and community documentation.
16406#
16407# Created by: Oliver Galvin <odg@riseup.net>
16408#
16409# References:
16410# * Classic GTA documentation and research:
16411#    <https://gitlab.com/classic-gta/gta-data>
16412# * Official RenderWare documentation available from EA:
16413#    <https://github.com/electronicarts/RenderWare3Docs>
16414# * Lots of community research in the GTAMods wiki:
16415#    <https://gtamods.com/wiki>
16416
16417# GTA 2D-Era data - 'Classic' top down games (1/L/2)
16418
16419## GTA text
16420
164210	string	\xbf\xf8\xbd\x49\x62\xbe	GTA1 in-game text (FXT),
164220	string	GBL	GTA2 in-game text (GXT),
16423>3	string  	E	English,
16424>>4	uleshort	x	version %d
16425>3	string  	F	French,
16426>>4	uleshort	x	version %d
16427>3	string  	G	German,
16428>>4	uleshort	x	version %d
16429>3	string  	I	Italian,
16430>>4	uleshort	x	version %d
16431>3	string  	S	Spanish,
16432>>4	uleshort	x	version %d
16433>3	string  	J	Japanese,
16434>>4	uleshort	x	version %d
16435
16436## GTA maps
16437
164380	ulelong 	331	GTA1 map layout (CMP),
16439>4	byte    	1	Level 1
16440>4	byte    	2	Level 2
16441>4	byte    	3	Level 3
164420	string  	GBMP	GTA2/GBH map layout (GMP),
16443>4	uleshort	x	version %d
164440	string/t	[MapFiles]	GTA2 multiplayer map metadata (MMP)
164450	string/t	MainOrBonus\ =\ MAIN	GTA2 single player map listing (test1.seq)
16446
16447## GTA 2D sprites and textures
16448
164490	ulelong 	290	GTA1 style data (GRX), 8 bit editor graphics
164500	ulelong 	325	GTA1 style data (GRY), 8 bit in-game graphics
164510	ulelong 	336	GTA1 style data (G24), 24 bit in-game graphics
164520	string  	GBST	GTA2/GBH style data (STY), in-game graphics,
16453>4	uleshort	x	version %d
16454
16455## GTA audio index
16456
164570	ulelong	0
16458>4	ulelong	<0x40000
16459>>8	ulelong	>4500
16460>>>8	ulelong	<45000	GTA audio index data (SDT)
16461
16462## GTA scripts
16463
164640	ulelong 	0x00080000
16465>4	uleshort	0x0024    	GTA2 binary main script (SCR)
16466
164670	uleshort	0x063c    	GTA2 binary mission script (SCR), Residential area (ste)
164680	uleshort	0x055b    	GTA2 binary mission script (SCR), Downtown area (wil)
164690	uleshort	0x0469    	GTA2 binary mission script (SCR), Industrial area (bil)
16470
164710	string   	v9.6\0\0 	GTA2 replay file (REP),
16472>8	regex/30c	[a-z0-9:\ ]+\0\0	created on %s
16473
16474# GTA 3D-Era (III/VC/SA/LCS/VCS) - used by the RenderWare engine by Criterion Games
16475
16476## GTA 3D models and textures - RenderWare binary streams
16477
164788	ulelong	0x00000310	RenderWare data, v3.1.0.0, used in GTA III on PS2,
16479>0	ulelong	0x00000016	texture archive (TXD)
16480>0	ulelong 0x00000010	3D models (DFF)
164818	ulelong	0x0401ffff	RenderWare data, v3.1.0.1, used in GTA III on PC/PS2,
16482>0	ulelong	0x00000016	texture archive (TXD)
16483>0	ulelong 0x00000010	3D models (DFF)
164848	ulelong	0x0800ffff	RenderWare data, v3.2.0.0, used in GTA III on PC,
16485>0	ulelong	0x00000016	texture archive (TXD)
16486>0	ulelong 0x00000010	3D models (DFF)
164878	ulelong	0x0c00ffff	RenderWare data, v3.3.0.0,
16488>0	ulelong	0x00000016	texture archive (TXD)
16489>0	ulelong 0x00000010	3D models (DFF)
164908	ulelong	0x0c02ffff	RenderWare data, v3.3.0.2, used in GTA III PC and GTA VC PS2,
16491>0	ulelong	0x00000016	texture archive (TXD)
16492>0	ulelong 0x00000010	3D models (DFF)
164938	ulelong	0x1000ffff	RenderWare data, v3.4.0.0,
16494>0	ulelong	0x00000016	texture archive (TXD)
16495>0	ulelong 0x00000010	3D models (DFF)
164968	ulelong	0x1003ffff	RenderWare data, v3.4.0.3, used in GTA VC PC,
16497>0	ulelong	0x00000016	texture archive (TXD)
16498>0	ulelong 0x00000010	3D models (DFF)
164998	ulelong	0x1005ffff	RenderWare data, v3.4.0.5, used in GTA III/VC on Android,
16500>0	ulelong	0x00000016	texture archive (TXD)
16501>0	ulelong 0x00000010	3D models (DFF)
165028	ulelong	0x1400ffff	RenderWare data, v3.5.0.0, used in GTA III/VC on Xbox,
16503>0	ulelong	0x00000016	texture archive (TXD)
16504>0	ulelong 0x00000010	3D models (DFF)
165058	ulelong	0x1803ffff	RenderWare data, v3.6.0.3, used in GTA SA,
16506>0	ulelong	0x00000016	texture archive (TXD)
16507>0	ulelong 0x00000010	3D models (DFF)
16508
165090	string	COL	RenderWare collision data (COL),
16510>3	string	L	version 1, used in GTA III/VC/SA
16511>3	string	2	version 2, used in GTA SA
16512>3	string	3	version 3, used in GTA SA
16513>3	string	4	version 4, used in GTA SA
16514
16515## GTA items and animations
16516
165170	string/c	#\ ipl\ generated\ from\ max\ file	GTA Item Placement data (IPL), used in GTA III/VC
165180	string/b	bnry	GTA Item Placement data (IPL), used in GTA SA/IV,
16519>4	ulelong 	x	%d items
16520
165210	string	ANP	GTA animation data (IFP),
16522>3	string	K	version 1, used in GTA III/VC
16523>3	string	3	version 2, used in GTA SA
16524
165250	string	GtaSA29	GTA Replay data (REP), used in GTA SA
16526
16527## GTA text
16528
165290	string	TKEY	GTA in-game text (GXT), version 2, used in GTA III
165300	string	TABL	GTA in-game text (GXT), version 3, used in GTA VC/LS/VCS
16531
16532## GTA scripts
16533
165340	string	\x02\x00\x01	GTA script (SCM), used in GTA III/VC/SA
16535
16536## GTA archives
16537
165380	string	VER2	GTA archive (IMG), version 2, used in GTA SA,
16539>4	ulelong	x	%d items
16540
16541# GTA HD-Era (IV/V) - used by the Rockstar Advanced Game Engine (RAGE)
16542
16543## GTA models and textures - RAGE resources
16544# Note: GTA IV formats not yet documented - WAD, WBD, WBN, WHM, WPL
16545
165460	ulelong	0x00695254	GTA Drawable data (WDR), model and weapon data, used in GTA IV
165470	ulelong	0x00695238	GTA Windows Frag Type (WFT), vehicle models, used in GTA IV
165480	ulelong	0x006953A4	GTA Ped and LOD models (WDD), used in GTA IV
165490	ulelong	0x00695384	GTA Windows Texture Dictionary (WTD), used in GTA IV
16550
16551## GTA text
16552
165534	string  	TABL	GTA in-game text (GXT),
16554>0	uleshort	x	version %d, used in GTA SA/IV
165550	string  	2GXT	GTA in-game text (GXT2), used in GTA V
16556
16557## GTA scripts
16558
165590	ulelong	0x0d524353	GTA script (SCO), unencrypted, used in GTA IV,
16560>4	ulelong	x         	%d code bytes,
16561>>8	ulelong	x         	%d static variables,
16562>>>12	ulelong	x         	%d global variables
165630	ulelong	0x0e726373	GTA script (SCO), encrypted, used in GTA IV
16564>4	ulelong	x         	%d code bytes,
16565>>8	ulelong	x         	%d static variables,
16566>>>12	ulelong	x         	%d global variables
16567
16568## GTA archives
16569
165700	ulelong	0xa94e2a52	GTA archive (IMG),
16571>4	ulelong	x        	version %d, used in GTA IV,
16572>>8	ulelong	x        	%d items
16573
16574# RPF[0-8]
165750	ulelong&0xfffffff0 =0x52504630
16576>0	ulelong&0xf	<9	RAGE Package Format (RPF), version %d, used in
16577>>0	ulelong&0xf	=0	Rockstar Table Tennis,
16578>>0	ulelong&0xf	=1	*unknown*
16579>>0	ulelong&0xf	=2	GTA IV,
16580>>0	ulelong&0xf	=3	GTA IV Audio & Midnight Club: LA,
16581>>0	ulelong&0xf	=4	Max Payne 3,
16582>>0	ulelong&0xf	=5	*unknown*
16583>>0	ulelong&0xf	=6	RDR,
16584>>0	ulelong&0xf	=7	GTA V,
16585>>0	ulelong&0xf	=8	RDR 2,
16586>>4	ulelong 	x	%d bytes,
16587>>>8	ulelong 	x	%d entries
16588
16589#------------------------------------------------------------------------------
16590# $File: gcc,v 1.5 2016/07/01 23:31:13 christos Exp $
16591# gcc:  file(1) magic for GCC special files
16592#
165930	string		gpch		GCC precompiled header
16594
16595# The version field is annoying.  It's 3 characters, not zero-terminated.
16596>5	byte		x			(version %c
16597>6	byte		x			\b%c
16598>7	byte		x			\b%c)
16599
16600# 67 = 'C', 111 = 'o', 43 = '+', 79 = 'O'
16601>4	byte		67			for C
16602>4	byte		111			for Objective-C
16603>4	byte		43			for C++
16604>4	byte		79			for Objective-C++
16605
16606#------------------------------------------------------------------------------
16607# $File: gconv
16608# gconv: file(1) magic for iconv/gconv module configuration cache
16609#
16610# Magic number defined in glibc/iconv/iconvconfig.h as GCONVCACHE_MAGIC
16611#
16612# From: Marek Cermak <macermak@redhat.com>
16613#
166140		lelong		0x20010324 	gconv module configuration cache data
16615#------------------------------------------------------------------------------
16616# $File: gentoo,v 1.2 2022/09/12 13:13:28 christos Exp $
16617# gentoo:  file(1) magic for gentoo specific formats
16618#
16619# Summary: Gentoo ebuild Manifest files (GLEP 74)
16620# Reference: https://www.gentoo.org/glep/glep-0074.html
16621# Submitted by: Michal Gorny <mgorny@gentoo.org>
16622# Start by doing a fast check for the most common tags.
166230	string	AUX
16624>0	use	gentoo-manifest
166250	string	DATA
16626>0	use	gentoo-manifest
166270	string	DIST
16628>0	use	gentoo-manifest
166290	string	EBUILD
16630>0	use	gentoo-manifest
166310	string	MANIFEST
16632>0	use	gentoo-manifest
16633
16634# Manifest can be PGP-signed.
166350	string	-----BEGIN\040PGP\040SIGNED\040MESSAGE-----
16636>34	search/32	\n\n
16637>>&0	string	AUX
16638>>>&0	use	gentoo-manifest
16639>>&0	string	DATA
16640>>>&0	use	gentoo-manifest
16641>>&0	string	DIST
16642>>>&0	use	gentoo-manifest
16643>>&0	string	EBUILD
16644>>>&0	use	gentoo-manifest
16645>>&0	string	MANIFEST
16646>>>&0	use	gentoo-manifest
16647
16648# Use a more detailed regex to verify that we were correct.
16649# <tag> <filename> <size> <hash-name> <hash-value>...
16650# (<tag>'s already been matched prior to calling)
166510	name	gentoo-manifest
16652>&0	regex	[[:space:]]+[[:print:]]+[[:space:]]+[[:digit:]]+[[:space:]]+[[:alnum:]]+[[:space:]]+[[:xdigit:]]{32}	Gentoo Manifest (GLEP 74)
16653
16654# Summary: Gentoo ebuild and eclass files
16655# Reference: https://projects.gentoo.org/pms/8/pms.html
16656# Submitted by: Michal Gorny <mgorny@gentoo.org>
166570	search/512	EAPI=
16658>0	regex		.*\n[\040\t]*EAPI=["']?	Gentoo ebuild
16659>>&0	regex		[[:alnum:]+_.-]+	\b, EAPI %s
16660
166610	search/512	@ECLASS:\040		Gentoo eclass
16662>&0	string		x			%s
16663
16664# Summary: Gentoo supplementary package and category metadata files
16665# Reference: https://www.gentoo.org/glep/glep-0068.html
16666# Submitted by: Michal Gorny <mgorny@gentoo.org>
166670	string		\<?xml
16668>0	search/512	\<catmetadata		Gentoo category metadata file
16669>0	search/512	\<pkgmetadata		Gentoo package metadata file
16670
16671# Summary: Gentoo GLEP 78 binary package
16672# Reference: https://www.gentoo.org/glep/glep-0078.html
16673# Note: assumes the strict format
16674# Submitted by: Michal Gorny <mgorny@gentoo.org>
16675
16676# GPKG uses ustar (or ustar-compatible GNU format) that starts with
16677# a <directory>/gpkg-1 file
16678257	string		ustar
16679>0	search/100	/gpkg-1\0
16680>>0	regex		[^/]+		Gentoo GLEP 78 (GPKG) binary package for "%s"
16681!:mime	application/x-tar
16682!:ext	tar
16683# the logic below requires the gpkg-1 file to be empty
16684>>>124	string	00000000000\0
16685# determine the compression used by looking at the second member name
16686>>>>512	search/100	.tar.
16687>>>>>&0	string		gz\0		using gzip compression
16688>>>>>&0	string		bz2\0		using bzip2 compression
16689>>>>>&0	string		lz\0		using lzip compression
16690>>>>>&0	string		lz4\0		using lz4 compression
16691>>>>>&0	string		lzo\0		using lzo compression
16692>>>>>&0	string		xz\0		using xz compression
16693>>>>>&0	string		zst\0		using zstd compression
16694>>>>(636.o+1024)	search/611	.sig\0	\b, signed
16695
16696#------------------------------------------------------------------------------
16697# $File: geo,v 1.8 2022/03/24 15:48:58 christos Exp $
16698# Geo- files from Kurt Schwehr <schwehr@ccom.unh.edu>
16699
16700######################################################################
16701#
16702# Acoustic Doppler Current Profilers (ADCP)
16703#
16704######################################################################
16705
167060	beshort	0x7f7f	RDI Acoustic Doppler Current Profiler (ADCP)
16707
16708######################################################################
16709#
16710# Metadata
16711#
16712######################################################################
16713
167140	string	Identification_Information	FGDC ASCII metadata
16715
16716######################################################################
16717#
16718# Seimsic / Subbottom
16719#
16720######################################################################
16721
16722# Knudsen subbottom chirp profiler - Binary File Format: B9
16723# KEB D409-03167 V1.75 Huffman
167240	string	KEB\ 	Knudsen seismic KEL binary (KEB) -
16725>4	regex	[-A-Z0-9]+	Software: %s
16726>>&1	regex	V[0-9]+\\.[0-9]+	version %s
16727
16728######################################################################
16729#
16730# LIDAR - Laser altimetry or bathy
16731#
16732######################################################################
16733
16734
16735# Caris LIDAR format for LADS comes as two parts... ascii location file and binary waveform data
167360	string	HCA	LADS Caris Ascii Format (CAF) bathymetric lidar
16737>4	regex [0-9]+\\.[0-9]+	version %s
16738
167390	string	HCB	LADS Caris Binary Format (CBF) bathymetric lidar waveform data
16740>3      byte    x	version %d .
16741>4	byte	x	%d
16742
16743
16744######################################################################
16745#
16746# MULTIBEAM SONARS https://www.ldeo.columbia.edu/res/pi/MB-System/formatdoc/
16747#
16748######################################################################
16749
16750# GeoAcoustics - GeoSwath Plus
167514	beshort	0x2002	GeoSwath RDF
167520	string	Start:-	GeoSwatch auf text file
16753
16754# Seabeam 2100
16755# mbsystem code mb41
167560	string SB2100	SeaBeam 2100 multibeam sonar
167570	string SB2100DR	SeaBeam 2100 DR multibeam sonar
167580	string SB2100PR SeaBeam 2100 PR multibeam sonar
16759
16760# This corresponds to MB-System format 94, L-3/ELAC/SeaBeam XSE vendor
16761# format. It is the format of our upgraded SeaBeam 2112 on R/V KNORR.
167620    string $HSF    XSE multibeam
16763
16764# mb121 https://www.saic.com/maritime/gsf/
167658	string	GSF-v	SAIC generic sensor format (GSF) sonar data,
16766>&0	regex [0-9]+\\.[0-9]+	version %s
16767
16768# MGD77 - https://www.ngdc.noaa.gov/mgg/dat/geodas/docs/mgd77.htm
16769# mb161
167709	string MGD77	MGD77 Header, Marine Geophysical Data Exchange Format
16771
16772# MBSystem processing caches the mbinfo output
167731	string	Swath\ Data\ File:	mbsystem info cache
16774
16775# Caris John Hughes Clark format
167760	string	HDCS	Caris multibeam sonar related data
167771	string	Start/Stop\ parameter\ header:	Caris ASCII project summary
16778
16779######################################################################
16780#
16781# Visualization and 3D modeling
16782#
16783######################################################################
16784
16785# IVS - IVS3d.com Tagged Data Represetation
167860	string	%%\ TDR\ 2.0	IVS Fledermaus TDR file
16787
16788# http://www.ecma-international.org/publications/standards/Ecma-363.htm
16789# 3D in PDFs
167900	string	U3D	ECMA-363, Universal 3D
16791
16792######################################################################
16793#
16794# Support files
16795#
16796######################################################################
16797
16798# https://midas.psi.ch/elog/
167990	string	$@MID@$	elog journal entry
16800
16801# Geospatial Designs https://www.geospatialdesigns.com/surfer6_format.htm
168020	string		DSBB	Surfer 6 binary grid file
16803>4	leshort		x	\b, %d
16804>6	leshort		x	\bx%d
16805>8	ledouble	x	\b, minx=%g
16806>16	ledouble	x	\b, maxx=%g
16807>24	ledouble	x	\b, miny=%g
16808>32	ledouble	x	\b, maxy=%g
16809>40	ledouble	x	\b, minz=%g
16810>48	ledouble	x	\b, maxz=%g
16811
16812# magic for LAS format files
16813# alex myczko <alex@aiei.ch>
16814# https://www.asprs.org/wp-content/uploads/2010/12/LAS_1_3_r11.pdf
168150	string		LASF	LIDAR point data records
16816>24	byte		>0	\b, version %u
16817>25	byte		>0	\b.%u
16818>26	string		>\0	\b, SYSID %s
16819>58	string		>\0	\b, Generating Software %s
16820
16821# magic for PCD format files
16822# alex myczko <alex@aiei.ch>
16823# http://pointclouds.org/documentation/tutorials/pcd_file_format.php
168240	string		#\ .PCD	Point Cloud Data
16825
16826#------------------------------------------------------------------------------
16827# $File: geos,v 1.4 2009/09/19 16:28:09 christos Exp $
16828# GEOS files (Vidar Madsen, vidar@gimp.org)
16829# semi-commonly used in embedded and handheld systems.
168300	belong	0xc745c153	GEOS
16831>40	byte	1	executable
16832>40	byte	2	VMFile
16833>40	byte	3	binary
16834>40	byte	4	directory label
16835>40	byte	<1	unknown
16836>40	byte	>4	unknown
16837>4	string	>\0	\b, name "%s"
16838#>44	short	x	\b, version %d
16839#>46	short	x	\b.%d
16840#>48	short	x	\b, rev %d
16841#>50	short	x	\b.%d
16842#>52	short	x	\b, proto %d
16843#>54	short	x	\br%d
16844#>168	string	>\0	\b, copyright "%s"
16845
16846#------------------------------------------------------------------------------
16847# $File: gimp,v 1.10 2019/10/15 18:19:40 christos Exp $
16848# GIMP Gradient: file(1) magic for the GIMP's gradient data files (.ggr)
16849# by Federico Mena <federico@nuclecu.unam.mx>
16850
168510       string/t        GIMP\ Gradient  GIMP gradient data
16852#!:mime	text/plain
16853!:mime	text/x-gimp-ggr
16854!:ext	ggr
16855
16856# GIMP palette (.gpl)
16857# From: Markus Heidelberg <markus.heidelberg@web.de>
168580       string/t        GIMP\ Palette   GIMP palette data
16859# URL:		https://docs.gimp.org/en/gimp-concepts-palettes.html
16860# Reference:	http://fileformats.archiveteam.org/wiki/GIMP_Palette
16861#!:mime	text/plain
16862!:mime	text/x-gimp-gpl
16863!:ext	gpl
16864
16865#------------------------------------------------------------------------------
16866# XCF:  file(1) magic for the XCF image format used in the GIMP (.xcf) developed
16867#       by Spencer Kimball and Peter Mattis
16868#       ('Bucky' LaDieu, nega@vt.edu)
16869
16870# URL:		https://en.wikipedia.org/wiki/XCF_(file_format)
16871# Reference:	https://gitlab.gnome.org/GNOME/gimp/blob/master/devel-docs/xcf.txt
168720	string		gimp\ xcf	GIMP XCF image data,
16873!:mime	image/x-xcf
16874!:ext	xcf
16875>9	string		file		version 0,
16876>9	string		v		version
16877>>10	string		>\0		%s,
16878>14	belong		x		%u x
16879>18	belong		x		%u,
16880>22     belong          0               RGB Color
16881>22     belong          1               Greyscale
16882>22     belong          2               Indexed Color
16883>22	belong		>2		Unknown Image Type.
16884
16885#------------------------------------------------------------------------------
16886# XCF:  file(1) magic for the patterns used in the GIMP (.pat), developed
16887#       by Spencer Kimball and Peter Mattis
16888#       ('Bucky' LaDieu, nega@vt.edu)
16889
16890# Reference:	http://fileformats.archiveteam.org/wiki/GIMP_Pattern
1689120      string          GPAT            GIMP pattern data,
16892>24     string          x               %s
16893!:mime	image/x-gimp-pat
16894!:ext	pat
16895
16896#------------------------------------------------------------------------------
16897# XCF:  file(1) magic for the brushes used in the GIMP (.gbr), developed
16898#       by Spencer Kimball and Peter Mattis
16899#       ('Bucky' LaDieu, nega@vt.edu)
16900
1690120      string          GIMP            GIMP brush data
16902# Reference:	http://fileformats.archiveteam.org/wiki/GIMP_Brush
16903!:mime	image/x-gimp-gbr
16904# some sources also list gpb
16905!:ext	gbr
16906
16907# From:		Joerg Jenderek
16908# URL:		https://docs.gimp.org/en/gimp-using-animated-brushes.html
16909# Reference:	http://fileformats.archiveteam.org/wiki/GIMP_Animated_Brush
16910# share\gimp\2.0\brushes\Legacy\confetti.gih
169110	search/21/b	\040ncells:		GIMP animated brush data
16912!:mime	image/x-gimp-gih
16913!:ext	gih
16914
16915# GIMP Curves File
16916# From: "Nelson A. de Oliveira" <naoliv@gmail.com>
169170	string	#\040GIMP\040Curves\040File	GIMP curve file
16918#!:mime	text/plain
16919!:mime	text/x-gimp-curve
16920!:ext	/txt
16921
16922
16923#------------------------------------------------------------------------------
16924# $File: git,v 1.2 2020/08/09 16:57:15 christos Exp $
16925# git:  file(1) magic for Git objects
16926
169270	string	blob\040
16928>5	regex	[0-9a-f]+		Git blob %s
16929
169300	string	tree\040
16931>5	regex	[0-9a-f]+		Git tree %s
16932
169330	string	commit\040
16934>7	regex	[0-9a-f]+		Git commit %s
16935
16936#------------------------------------------------------------------------------
16937# $File: glibc,v 1.1 2018/10/11 15:35:43 christos Exp $
16938# glibc locale files
16939#
16940# https://sourceware.org/git/?p=glibc.git;f=locale/localeinfo.h;h=68822a63#l32
16941
169420	belong	0x20070920	glibc locale file LC_CTYPE
169430	belong	0x14110320	glibc locale file LC_NUMERIC
169440	belong	0x17110320	glibc locale file LC_TIME
169450	belong	0x17100520	glibc locale file LC_COLLATE
169460	belong	0x11110320	glibc locale file LC_MONETARY
169470	belong	0x10110320	glibc locale file LC_MESSAGES
169480	belong	0x13110320	glibc locale file LC_ALL
169490	belong	0x12110320	glibc locale file LC_PAPER
169500	belong	0x1d110320	glibc locale file LC_NAME
169510	belong	0x1c110320	glibc locale file LC_ADDRESS
169520	belong	0x1f110320	glibc locale file LC_TELEPHONE
169530	belong	0x1e110320	glibc locale file LC_MEASUREMENT
169540	belong	0x19110320	glibc locale file LC_IDENTIFICATION
16955
16956
16957#------------------------------------------------------------------------------
16958# $File: gnome,v 1.7 2020/06/23 16:17:08 christos Exp $
16959# GNOME related files
16960
16961# Contributed by Josh Triplett
16962# FIXME: Could be simplified if pstring supported two-byte counts
169630         string   GnomeKeyring\n\r\0\n GNOME keyring
16964>&0       ubyte    0                    \b, major version 0
16965>>&0      ubyte    0                    \b, minor version 0
16966>>>&0     ubyte    0                    \b, crypto type 0 (AES)
16967>>>&0     ubyte    >0                   \b, crypto type %u (unknown)
16968>>>&1     ubyte    0                    \b, hash type 0 (MD5)
16969>>>&1     ubyte    >0                   \b, hash type %u (unknown)
16970>>>&2     ubelong  0xFFFFFFFF           \b, name NULL
16971>>>&2     ubelong  !0xFFFFFFFF
16972>>>>&-4   ubelong  >255                 \b, name too long for file's pstring type
16973>>>>&-4   ubelong  <256
16974>>>>>&-1  pstring  x                    \b, name "%s"
16975>>>>>>&0  ubeqdate x                    \b, last modified %s
16976>>>>>>&8  ubeqdate x                    \b, created %s
16977>>>>>>&16 ubelong  &1
16978>>>>>>>&0 ubelong  x                    \b, locked if idle for %u seconds
16979>>>>>>&16 ubelong  ^1                   \b, not locked if idle
16980>>>>>>&24 ubelong  x                    \b, hash iterations %u
16981>>>>>>&28 ubequad  x                    \b, salt %llu
16982>>>>>>&52 ubelong  x                    \b, %u item(s)
16983
16984# From: Alex Beregszaszi <alex@fsn.hu>
169854	string	gtktalog		GNOME Catalogue (gtktalog)
16986>13	string	>\0			version %s
16987
16988# Summary: GStreamer binary registry
16989# Extension: .bin
16990# Submitted by: Josh Triplett <josh@joshtriplett.org>
169910	belong	0xc0def00d		GStreamer binary registry
16992>4	string	x			\b, version %s
16993
16994# GVariant Database file
16995# By Elan Ruusamae <glen@delfi.ee>
16996# https://github.com/GNOME/gvdb/blob/master/gvdb-format.h
16997# It's always "GVariant", it's byte swapped on incompatible archs
16998# See https://github.com/GNOME/gvdb/blob/master/gvdb-builder.c
16999# file_builder_serialise()
17000# https://developer.gnome.org/glib/2.34/glib-GVariant.html#GVariant
170010	string	GVariant	GVariant Database file,
17002# version is never filled. probably future extension
17003>8	lelong	x		version %d
17004# not sure are these usable, so commented out
17005#>>16	lelong	x		start %d,
17006#>>>20	lelong	x		end %d
17007
17008# G-IR database made by gobject-introspect toolset,
17009# https://live.gnome.org/GObjectIntrospection
170100	string		GOBJ\nMETADATA\r\n\032	G-IR binary database
17011>16	byte		x			\b, v%d
17012>17	byte		x			\b.%d
17013>20	short		x			\b, %d entries
17014>22	short		x			\b/%d local
17015
17016#------------------------------------------------------------------------------
17017# $File: gnu,v 1.24 2021/04/26 15:56:00 christos Exp $
17018# gnu:  file(1) magic for various GNU tools
17019#
17020# GNU nlsutils message catalog file format
17021#
17022# GNU message catalog (.mo and .gmo files)
17023
17024# Update: Joerg Jenderek
17025# URL: https://www.gnu.org/software/gettext/manual/html_node/MO-Files.html
17026# Reference: ftp://ftp.gnu.org/pub/gnu/gettext/gettext-0.19.8.tar.gz/
17027#	gettext-0.19.8.1/gettext-runtime/intl/gmo.h
17028# Note: maybe call it like "GNU translation gettext machine object"
170290	string		\336\22\4\225	GNU message catalog (little endian),
17030#0	ulelong	0x950412DE		GNU-format message catalog data
17031# TODO: write lines in such a way that code can also be called for big endian variant
17032#>0	use		gettext-object
17033#0	name		gettext-object
17034>4	ulelong		x		revision
17035!:mime	application/x-gettext-translation
17036# mo extension is also used for Easeus Partition Master PE32 executable module
17037# like ConvertFatToNTFS.mo
17038!:ext	gmo/mo
17039# only found three revision combinations 0.0 0.1 1.1 as unsigned 32-bit
17040# major revision
17041>4	ulelong/0xFFff	x		%u.
17042# minor revision
17043>4	ulelong&0x0000FFff	x	\b%u
17044>>8	ulelong		x		\b, %u message
17045# plural s
17046>>8	ulelong		>1		\bs
17047# size of hashing table
17048#>20	ulelong		x		\b, %u hash
17049#>20	ulelong		>1		\bes
17050#>24	ulelong		x		at %#x
17051# for revision x.0 offset of table with originals is 1Ch if directly after header
17052>4	ulelong&0x0000FFff	=0
17053>>12	ulelong		!0x1C		\b, at %#x string table
17054# but for x.1 table offset i found is 30h. That means directly after bigger header
17055>4	ulelong&0x0000FFff	>0
17056>>12	ulelong		!0x30		\b, at %#x string table
17057# The following variables are only used in .mo files with minor revision >= 1
17058# number of system dependent segments
17059#>>28	ulelong		x		\b, %u segment
17060#>>28	ulelong		>1		\bs
17061# offset of table describing system dependent segments
17062#>>32	ulelong		x		at %#x
17063# number of system dependent strings pairs
17064>>36	ulelong		x		\b, %u sysdep message
17065>>36	ulelong		>1		\bs
17066# offset of table with start offsets of original sysdep strings
17067#>>40	ulelong		x		\b, at %#x sysdep strings
17068# offset of table with start offsets of translated sysdep strings
17069#>>44	ulelong		x		\b, at %#x sysdep translations
17070# >>(44.l)	ulelong	x		%#x chars
17071# >>>&0		ulelong	x		at %#x
17072# >>>>(&-4)	string	x		"%s"
17073# string table after big header
17074#>>48	ubequad		x		\b, string table %#llx
17075#
17076# 0th string length seems to be always 0
17077#>(12.l)	ulelong	x		\b, %u chars
17078#>>&0		ulelong	x		at %#x
17079# if 1st string length positive inspect offset and string
17080#>(12.l+8)	ulelong	>0		\b, %u chars
17081#>>&0		ulelong	x		at %#x
17082# if 2nd string length positive inspect offset and string
17083# >(12.l+16)	ulelong	>0		\b, %u chars
17084# >>&0		ulelong	x		at %#x
17085# skip newline byte
17086#>>>(&-4)	ubyte	=0x0A
17087#>>>>&0		string	x		"%s"
17088#>>>(&-4)	ubyte	!0x0A
17089#>>>>&-1		string	x		'%s'
17090# offset of table with translation strings
17091#>16	ulelong		x		\b, at %#x translation table
17092# check translation 0 length and offset
17093>(16.l)		ulelong	>0
17094>>&0		ulelong	x
17095# translation 0 seems to be often Project-Id with name and version
17096>>>(&-4)	string	x		\b, %s
17097# trans. 1 with bytes >= 1 unlike icoutils-0.31.0\po\en@boldquot.gmo with 1 NL
17098>(16.l+8)	ulelong	>1
17099>>&0		ulelong	x
17100>>>(&-4)	ubyte	!0x0A
17101>>>>&-1		string	x		'%s'
17102# 1 New Line like in tar-1.29\po\de.gmo
17103>>>(&-4)	ubyte	=0x0A
17104>>>>&0		ubyte	!0x0A
17105>>>>>&-1	string	x		'%s'
17106# 2nd New Line like in parted-3.1\po\de.gmo
17107>>>>&0		ubyte	=0x0A
17108>>>>>&0		string	x		'%s'
17109
171100	string		\225\4\22\336	GNU message catalog (big endian),
17111#0	ubelong	0x950412DE		GNU-format message catalog data
17112!:mime	application/x-gettext-translation
17113!:ext	gmo/mo
17114# TODO: for big endian use same code as for little endian
17115#>0	use		\^gettext-object
17116# DEBUG code
17117#>16	ubelong		x		\b, at %#x translation table
17118#>(16.L)		ubelong	x		%#x chars
17119#>>&0		ubelong	x		at %#x
17120# unexpected value HERE!
17121#>>>(&-4)	ubequad	x		%#llx
17122#
17123>4	beshort		x		revision %d.
17124>6	beshort		>0		\b%d,
17125>>8	belong		x		%d messages,
17126>>36	belong		x		%d sysdep messages
17127>6	beshort		=0		\b%d,
17128>>8	belong		x		%d messages
17129
17130
17131# GnuPG
17132# The format is very similar to pgp
171330	string          \001gpg                 GPG key trust database
17134>4	byte            x                       version %d
17135# Note: magic.mime had 0x8501 for the next line instead of 0x8502
171360	beshort		0x8502			GPG encrypted data
17137!:mime	text/PGP # encoding: data
17138
17139# Update: Joerg Jenderek
17140# Note:	PGP and GPG use same data structure.
17141#	So recognition is now done by ./pgp with start test for byte 0x99
17142# This magic is not particularly good, as the keyrings don't have true
17143# magic. Nevertheless, it covers many keyrings.
17144# 0	ubeshort-0x9901	<2
17145# >3	byte		4
17146# >>4	bedate		x		GPG key public ring, created %s
17147# !:mime application/x-gnupg-keyring
17148
17149# Symmetric encryption
171500	leshort		0x0d8c
17151>4	leshort		0x0203
17152>>2	leshort		0x0204		GPG symmetrically encrypted data (3DES cipher)
17153>>2	leshort		0x0304		GPG symmetrically encrypted data (CAST5 cipher)
17154>>2	leshort		0x0404		GPG symmetrically encrypted data (BLOWFISH cipher)
17155>>2	leshort		0x0704		GPG symmetrically encrypted data (AES cipher)
17156>>2	leshort		0x0804		GPG symmetrically encrypted data (AES192 cipher)
17157>>2	leshort		0x0904		GPG symmetrically encrypted data (AES256 cipher)
17158>>2	leshort		0x0a04		GPG symmetrically encrypted data (TWOFISH cipher)
17159>>2	leshort		0x0b04		GPG symmetrically encrypted data (CAMELLIA128 cipher)
17160>>2	leshort		0x0c04		GPG symmetrically encrypted data (CAMELLIA192 cipher)
17161>>2	leshort		0x0d04		GPG symmetrically encrypted data (CAMELLIA256 cipher)
17162
17163
17164# GnuPG Keybox file
17165# <https://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=blob;f=kbx/keybox-blob.c;hb=HEAD>
17166# From: Philipp Hahn <hahn@univention.de>
171670	belong	32
17168>4	byte	1
17169>>8	string	KBXf	GPG keybox database
17170>>>5	byte	1	version %d
17171>>>16	bedate	x	\b, created-at %s
17172>>>20	bedate	x	\b, last-maintained %s
17173
17174
17175# From: James Youngman <jay@gnu.org>
17176# gnu find magic
171770	string	\0LOCATE	GNU findutils locate database data
17178>7	string	>\0		\b, format %s
17179>7	string	02		\b (frcode)
17180
17181# Files produced by GNU gettext
17182
17183# gettext message catalogue
171840	search/1024	\nmsgid
17185>&0	search/1024	\nmsgstr	GNU gettext message catalogue text
17186!:strength +100
17187!:mime text/x-po
17188
17189#------------------------------------------------------------------------------
17190# $File: gnumeric,v 1.4 2009/09/19 16:28:09 christos Exp $
17191# gnumeric:  file(1) magic for Gnumeric spreadsheet
17192# This entry is only semi-helpful, as Gnumeric compresses its files, so
17193# they will ordinarily reported as "compressed", but at least -z helps
1719439	string	=<gmr:Workbook	Gnumeric spreadsheet
17195!:mime	application/x-gnumeric
17196
17197#------------------------------------------------------------------------------
17198# $File: gpt,v 1.5 2020/12/12 20:01:47 christos Exp $
17199#
17200# GPT Partition table patterns.
17201# Author: Rogier Goossens (goossens.rogier@gmail.com)
17202# Note that a GPT-formatted disk must contain an MBR as well.
17203#
17204
17205# The initial segment (up to >>>>>>>>422) was copied from the X86
17206# partition table code (aka MBR).
17207# This is kept separate, so that MBR partitions are not reported as well.
17208# (use -k if you do want them as well)
17209
17210# First, detect the MBR partition table
17211# If more than one GPT protective MBR partition exists, don't print anything
17212# (the other MBR detection code will then just print the MBR partition table)
172130x1FE			leshort		0xAA55
17214>3			string		!MS
17215>>3			string		!SYSLINUX
17216>>>3			string		!MTOOL
17217>>>>3			string		!NEWLDR
17218>>>>>5			string		!DOS
17219# not FAT (32 bit)
17220>>>>>>82		string		!FAT32
17221#not Linux kernel
17222>>>>>>>514		string		!HdrS
17223#not BeOS
17224>>>>>>>>422		string		!Be\ Boot\ Loader
17225# GPT with protective MBR entry in partition 1 (only)
17226>>>>>>>>>450		ubyte		0xee
17227>>>>>>>>>>466		ubyte		!0xee
17228>>>>>>>>>>>482		ubyte		!0xee
17229>>>>>>>>>>>>498		ubyte		!0xee
17230#>>>>>>>>>>>>>446	use		gpt-mbr-partition
17231>>>>>>>>>>>>>(454.l*8192)	string		EFI\ PART	GPT partition table
17232>>>>>>>>>>>>>>0			use		gpt-mbr-type
17233>>>>>>>>>>>>>>&-8		use		gpt-table
17234>>>>>>>>>>>>>>0			ubyte		x		of 8192 bytes
17235>>>>>>>>>>>>>(454.l*8192)	string		!EFI\ PART
17236>>>>>>>>>>>>>>(454.l*4096)	string		EFI\ PART	GPT partition table
17237>>>>>>>>>>>>>>>0		use		gpt-mbr-type
17238>>>>>>>>>>>>>>>&-8		use		gpt-table
17239>>>>>>>>>>>>>>>0		ubyte		x		of 4096 bytes
17240>>>>>>>>>>>>>>(454.l*4096)	string		!EFI\ PART
17241>>>>>>>>>>>>>>>(454.l*2048)	string		EFI\ PART	GPT partition table
17242>>>>>>>>>>>>>>>>0		use		gpt-mbr-type
17243>>>>>>>>>>>>>>>>&-8		use		gpt-table
17244>>>>>>>>>>>>>>>>0		ubyte		x		of 2048 bytes
17245>>>>>>>>>>>>>>>(454.l*2048)	string		!EFI\ PART
17246>>>>>>>>>>>>>>>>(454.l*1024)	string		EFI\ PART	GPT partition table
17247>>>>>>>>>>>>>>>>>0		use		gpt-mbr-type
17248>>>>>>>>>>>>>>>>>&-8		use		gpt-table
17249>>>>>>>>>>>>>>>>>0		ubyte		x		of 1024 bytes
17250>>>>>>>>>>>>>>>>(454.l*1024)	string		!EFI\ PART
17251>>>>>>>>>>>>>>>>>(454.l*512)	string		EFI\ PART	GPT partition table
17252>>>>>>>>>>>>>>>>>>0		use		gpt-mbr-type
17253>>>>>>>>>>>>>>>>>>&-8		use		gpt-table
17254>>>>>>>>>>>>>>>>>>0		ubyte		x		of 512 bytes
17255# GPT with protective MBR entry in partition 2 (only)
17256>>>>>>>>>450		ubyte		!0xee
17257>>>>>>>>>>466		ubyte		0xee
17258>>>>>>>>>>>482		ubyte		!0xee
17259>>>>>>>>>>>>498		ubyte		!0xee
17260#>>>>>>>>>>>>>462	use		gpt-mbr-partition
17261>>>>>>>>>>>>>(470.l*8192)	string		EFI\ PART	GPT partition table
17262>>>>>>>>>>>>>>0			use		gpt-mbr-type
17263>>>>>>>>>>>>>>&-8		use		gpt-table
17264>>>>>>>>>>>>>>0			ubyte		x		of 8192 bytes
17265>>>>>>>>>>>>>(470.l*8192)	string		!EFI\ PART
17266>>>>>>>>>>>>>>(470.l*4096)	string		EFI\ PART	GPT partition table
17267>>>>>>>>>>>>>>>0		use		gpt-mbr-type
17268>>>>>>>>>>>>>>>&-8		use		gpt-table
17269>>>>>>>>>>>>>>>0		ubyte		x		of 4096 bytes
17270>>>>>>>>>>>>>>(470.l*4096)	string		!EFI\ PART
17271>>>>>>>>>>>>>>>(470.l*2048)	string		EFI\ PART	GPT partition table
17272>>>>>>>>>>>>>>>>0		use		gpt-mbr-type
17273>>>>>>>>>>>>>>>>&-8		use		gpt-table
17274>>>>>>>>>>>>>>>>0		ubyte		x		of 2048 bytes
17275>>>>>>>>>>>>>>>(470.l*2048)	string		!EFI\ PART
17276>>>>>>>>>>>>>>>>(470.l*1024)	string		EFI\ PART	GPT partition table
17277>>>>>>>>>>>>>>>>>0		use		gpt-mbr-type
17278>>>>>>>>>>>>>>>>>&-8		use		gpt-table
17279>>>>>>>>>>>>>>>>>0		ubyte		x		of 1024 bytes
17280>>>>>>>>>>>>>>>>(470.l*1024)	string		!EFI\ PART
17281>>>>>>>>>>>>>>>>>(470.l*512)	string		EFI\ PART	GPT partition table
17282>>>>>>>>>>>>>>>>>>0		use		gpt-mbr-type
17283>>>>>>>>>>>>>>>>>>&-8		use		gpt-table
17284>>>>>>>>>>>>>>>>>>0		ubyte		x		of 512 bytes
17285# GPT with protective MBR entry in partition 3 (only)
17286>>>>>>>>>450		ubyte		!0xee
17287>>>>>>>>>>466		ubyte		!0xee
17288>>>>>>>>>>>482		ubyte		0xee
17289>>>>>>>>>>>>498		ubyte		!0xee
17290#>>>>>>>>>>>>>478	use		gpt-mbr-partition
17291>>>>>>>>>>>>>(486.l*8192)	string		EFI\ PART	GPT partition table
17292>>>>>>>>>>>>>>0			use		gpt-mbr-type
17293>>>>>>>>>>>>>>&-8		use		gpt-table
17294>>>>>>>>>>>>>>0			ubyte		x		of 8192 bytes
17295>>>>>>>>>>>>>(486.l*8192)	string		!EFI\ PART
17296>>>>>>>>>>>>>>(486.l*4096)	string		EFI\ PART	GPT partition table
17297>>>>>>>>>>>>>>>0		use		gpt-mbr-type
17298>>>>>>>>>>>>>>>&-8		use		gpt-table
17299>>>>>>>>>>>>>>>0		ubyte		x		of 4096 bytes
17300>>>>>>>>>>>>>>(486.l*4096)	string		!EFI\ PART
17301>>>>>>>>>>>>>>>(486.l*2048)	string		EFI\ PART	GPT partition table
17302>>>>>>>>>>>>>>>>0		use		gpt-mbr-type
17303>>>>>>>>>>>>>>>>&-8		use		gpt-table
17304>>>>>>>>>>>>>>>>0		ubyte		x		of 2048 bytes
17305>>>>>>>>>>>>>>>(486.l*2048)	string		!EFI\ PART
17306>>>>>>>>>>>>>>>>(486.l*1024)	string		EFI\ PART	GPT partition table
17307>>>>>>>>>>>>>>>>>0		use		gpt-mbr-type
17308>>>>>>>>>>>>>>>>>&-8		use		gpt-table
17309>>>>>>>>>>>>>>>>>0		ubyte		x		of 1024 bytes
17310>>>>>>>>>>>>>>>>(486.l*1024)	string		!EFI\ PART
17311>>>>>>>>>>>>>>>>>(486.l*512)	string		EFI\ PART	GPT partition table
17312>>>>>>>>>>>>>>>>>>0		use		gpt-mbr-type
17313>>>>>>>>>>>>>>>>>>&-8		use		gpt-table
17314>>>>>>>>>>>>>>>>>>0		ubyte		x		of 512 bytes
17315# GPT with protective MBR entry in partition 4 (only)
17316>>>>>>>>>450		ubyte		!0xee
17317>>>>>>>>>>466		ubyte		!0xee
17318>>>>>>>>>>>482		ubyte		!0xee
17319>>>>>>>>>>>>498		ubyte		0xee
17320#>>>>>>>>>>>>>494	use		gpt-mbr-partition
17321>>>>>>>>>>>>>(502.l*8192)	string		EFI\ PART	GPT partition table
17322>>>>>>>>>>>>>>0			use		gpt-mbr-type
17323>>>>>>>>>>>>>>&-8		use		gpt-table
17324>>>>>>>>>>>>>>0			ubyte		x		of 8192 bytes
17325>>>>>>>>>>>>>(502.l*8192)	string		!EFI\ PART
17326>>>>>>>>>>>>>>(502.l*4096)	string		EFI\ PART	GPT partition table
17327>>>>>>>>>>>>>>>0		use		gpt-mbr-type
17328>>>>>>>>>>>>>>>&-8		use		gpt-table
17329>>>>>>>>>>>>>>>0		ubyte		x		of 4096 bytes
17330>>>>>>>>>>>>>>(502.l*4096)	string		!EFI\ PART
17331>>>>>>>>>>>>>>>(502.l*2048)	string		EFI\ PART	GPT partition table
17332>>>>>>>>>>>>>>>>0		use		gpt-mbr-type
17333>>>>>>>>>>>>>>>>&-8		use		gpt-table
17334>>>>>>>>>>>>>>>>0		ubyte		x		of 2048 bytes
17335>>>>>>>>>>>>>>>(502.l*2048)	string		!EFI\ PART
17336>>>>>>>>>>>>>>>>(502.l*1024)	string		EFI\ PART	GPT partition table
17337>>>>>>>>>>>>>>>>>0		use		gpt-mbr-type
17338>>>>>>>>>>>>>>>>>&-8		use		gpt-table
17339>>>>>>>>>>>>>>>>>0		ubyte		x		of 1024 bytes
17340>>>>>>>>>>>>>>>>(502.l*1024)	string		!EFI\ PART
17341>>>>>>>>>>>>>>>>>(502.l*512)	string		EFI\ PART	GPT partition table
17342>>>>>>>>>>>>>>>>>>0		use		gpt-mbr-type
17343>>>>>>>>>>>>>>>>>>&-8		use		gpt-table
17344>>>>>>>>>>>>>>>>>>0		ubyte		x		of 512 bytes
17345
17346# The following code does GPT detection and processing, including
17347# sector size detection.
17348# It has to be duplicated above because the top-level pattern
17349# (i.e. not called using 'use') must print *something* for file
17350# to count it as a match. Text only printed in named patterns is
17351# not counted, and causes file to continue, and try and match
17352# other patterns.
17353#
17354# Unfortunately, when assuming sector sizes >=16k, if the sector size
17355# happens to be 512 instead, we may find confusing data after the GPT
17356# table...  If the GPT table has less than 128 entries, this may even
17357# happen for assumed sector sizes as small as 4k
17358# This could be solved by checking for the presence of the backup GPT
17359# header as well, but that makes the logic extremely complex
17360##0		name		gpt-mbr-partition
17361##>(8.l*8192)	string		EFI\ PART
17362##>>(8.l*8192)	use		gpt-mbr-type
17363##>>&-8		use		gpt-table
17364##>>0		ubyte		x		of 8192 bytes
17365##>(8.l*8192)	string		!EFI\ PART
17366##>>(8.l*4096)	string		EFI\ PART	GPT partition table
17367##>>>0		use		gpt-mbr-type
17368##>>>&-8		use		gpt-table
17369##>>>0		ubyte		x		of 4096 bytes
17370##>>(8.l*4096)	string		!EFI\ PART
17371##>>>(8.l*2048)	string		EFI\ PART	GPT partition table
17372##>>>>0		use		gpt-mbr-type
17373##>>>>&-8		use		gpt-table
17374##>>>>0		ubyte		x		of 2048 bytes
17375##>>>(8.l*2048)	string		!EFI\ PART
17376##>>>>(8.l*1024)	string		EFI\ PART	GPT partition table
17377##>>>>>0		use		gpt-mbr-type
17378##>>>>>&-8	use		gpt-table
17379##>>>>>0		ubyte		x		of 1024 bytes
17380##>>>>(8.l*1024)	string		!EFI\ PART
17381##>>>>>(8.l*512)	string		EFI\ PART	GPT partition table
17382##>>>>>>0		use		gpt-mbr-type
17383##>>>>>>&-8	use		gpt-table
17384##>>>>>>0		ubyte		x		of 512 bytes
17385
17386# Print details of MBR type for a GPT-disk
17387# Calling code ensures that there is only one 0xee partition.
173880		name		gpt-mbr-type
17389# GPT with protective MBR entry in partition 1
17390>450		ubyte		0xee
17391>>454		ulelong		1
17392>>>462		string		!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0	\b (with hybrid MBR)
17393>>454		ulelong		!1													\b (nonstandard: not at LBA 1)
17394# GPT with protective MBR entry in partition 2
17395>466		ubyte		0xee
17396>>470		ulelong		1
17397>>>478		string		\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
17398>>>>446		string		!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0					\b (with hybrid MBR)
17399>>>478		string		!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0	\b (with hybrid MBR)
17400>>470		ulelong		!1									\b (nonstandard: not at LBA 1)
17401# GPT with protective MBR entry in partition 3
17402>482		ubyte		0xee
17403>>486		ulelong		1
17404>>>494		string		\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
17405>>>>446		string		!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0	\b (with hybrid MBR)
17406>>>494		string		!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0					\b (with hybrid MBR)
17407>>486		ulelong		!1									\b (nonstandard: not at LBA 1)
17408# GPT with protective MBR entry in partition 4
17409>498		ubyte		0xee
17410>>502		ulelong		1
17411>>>446		string		!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0	\b (with hybrid MBR)
17412>>502		ulelong		!1													\b (nonstandard: not at LBA 1)
17413
17414# Print the information from a GPT partition table structure
174150		name		gpt-table
17416>10		uleshort	x		\b, version %u
17417>8		uleshort	x		\b.%u
17418>56		ulelong		x		\b, GUID: %08x
17419>60		uleshort	x		\b-%04x
17420>62		uleshort	x		\b-%04x
17421>64		ubeshort	x		\b-%04x
17422>66		ubeshort	x		\b-%04x
17423>68		ubelong		x		\b%08x
17424#>80		uleshort	x		\b, %d partition entries
17425>32		ulequad+1	x		\b, disk size: %lld sectors
17426
17427# In case a GPT data-structure is at LBA 0, report it as well
17428# This covers systems which are not GPT-aware, and which show
17429# and allow access to the protective partition. This code will
17430# detect the contents of such a partition.
174310		string		EFI\ PART	GPT data structure (nonstandard: at LBA 0)
17432>0		use		gpt-table
17433>0		ubyte		x		(sector size unknown)
17434
17435
17436
17437#------------------------------------------------------------------------------
17438# $File: gpu,v 1.3 2021/04/26 15:56:00 christos Exp $
17439# gpu: file(1) magic for GPU input files
17440
17441# Standard Portable Intermediate Representation (SPIR)
17442# Documentation: https://www.khronos.org/spir
17443# Typical file extension: .spv
17444
174450	belong	0x07230203	Khronos SPIR-V binary, big-endian
17446>4	belong	x		\b, version %#08x
17447>8	belong	x		\b, generator %#08x
17448
174490	lelong	0x07230203      Khronos SPIR-V binary, little-endian
17450>4	lelong	x		\b, version %#08x
17451>8	lelong	x		\b, generator %#08x
17452
17453# Vulkan Trace file
17454# Documentation:
17455# https://github.com/LunarG/VulkanTools/blob/master/vktrace/vktrace_common/\
17456# vktrace_trace_packet_identifiers.h
17457# Typical file extension: .vktrace
17458
174598	lequad  0xABADD068ADEAFD0C	Vulkan trace file, little-endian
17460>0	leshort	x			\b, version %d
17461
174628	bequad  0xABADD068ADEAFD0C	Vulkan trace file, big-endian
17463>0	beshort	x			\b, version %d
17464
17465#------------------------------------------------------------------------------
17466# $File: grace,v 1.4 2009/09/19 16:28:09 christos Exp $
17467# ACE/gr and Grace type files - PLEASE DO NOT REMOVE THIS LINE
17468#
17469# ACE/gr binary
174700	string	\000\000\0001\000\000\0000\000\000\0000\000\000\0002\000\000\0000\000\000\0000\000\000\0003		old ACE/gr binary file
17471>39	byte	>0			- version %c
17472# ACE/gr ascii
174730	string	#\ xvgr\ parameter\ file	ACE/gr ascii file
174740	string	#\ xmgr\ parameter\ file	ACE/gr ascii file
174750	string	#\ ACE/gr\ parameter\ file	ACE/gr ascii file
17476# Grace projects
174770	string	#\ Grace\ project\ file		Grace project file
17478>23	string	@version\  			(version
17479>>32	byte	>0 				%c
17480>>33	string	>\0 				\b.%.2s
17481>>35	string	>\0 				\b.%.2s)
17482# ACE/gr fit description files
174830	string	#\ ACE/gr\ fit\ description\ 	ACE/gr fit description file
17484# end of ACE/gr and Grace type files - PLEASE DO NOT REMOVE THIS LINE
17485
17486#------------------------------------------------------------------------------
17487# $File: graphviz,v 1.9 2019/04/30 04:01:40 christos Exp $
17488# graphviz:  file(1) magic for https://www.graphviz.org/
17489
17490# FIXME: These patterns match too generally. For example, the first
17491# line matches a LaTeX file containing the word "graph" (with a {
17492# following later) and the second line matches this file.
17493#0	regex/100l	[\r\n\t\ ]*graph[\r\n\t\ ]+.*\\{	graphviz graph text
17494#!:mime	text/vnd.graphviz
17495#0	regex/100l	[\r\n\t\ ]*digraph[\r\n\t\ ]+.*\\{	graphviz digraph text
17496#!:mime	text/vnd.graphviz
17497
17498#------------------------------------------------------------------------------
17499# $File: gringotts,v 1.6 2017/03/17 21:35:28 christos Exp $
17500# gringotts:  file(1) magic for Gringotts
17501# http://devel.pluto.linux.it/projects/Gringotts/
17502# author: Germano Rizzo <mano@pluto.linux.it>
17503#GRG3????Y
175040	string	GRG		Gringotts data file
17505#file format 1
17506>3	string		1		v.1, MCRYPT S2K, SERPENT crypt, SHA-256 hash, ZLib lvl.9
17507#file format 2
17508>3	string		2		v.2, MCRYPT S2K,
17509>>8	byte&0x70	0x00		RIJNDAEL-128 crypt,
17510>>8	byte&0x70	0x10		SERPENT crypt,
17511>>8	byte&0x70	0x20		TWOFISH crypt,
17512>>8	byte&0x70	0x30		CAST-256 crypt,
17513>>8	byte&0x70	0x40		SAFER+ crypt,
17514>>8	byte&0x70	0x50		LOKI97 crypt,
17515>>8	byte&0x70	0x60		3DES crypt,
17516>>8	byte&0x70	0x70		RIJNDAEL-256 crypt,
17517>>8	byte&0x08	0x00		SHA1 hash,
17518>>8	byte&0x08	0x08		RIPEMD-160 hash,
17519>>8	byte&0x04	0x00		ZLib
17520>>8	byte&0x04	0x04		BZip2
17521>>8	byte&0x03	0x00		lvl.0
17522>>8	byte&0x03	0x01		lvl.3
17523>>8	byte&0x03	0x02		lvl.6
17524>>8	byte&0x03	0x03		lvl.9
17525#file format 3
17526>3	string		3		v.3, OpenPGP S2K,
17527>>8	byte&0x70	0x00		RIJNDAEL-128 crypt,
17528>>8	byte&0x70	0x10		SERPENT crypt,
17529>>8	byte&0x70	0x20		TWOFISH crypt,
17530>>8	byte&0x70	0x30		CAST-256 crypt,
17531>>8	byte&0x70	0x40		SAFER+ crypt,
17532>>8	byte&0x70	0x50		LOKI97 crypt,
17533>>8	byte&0x70	0x60		3DES crypt,
17534>>8	byte&0x70	0x70		RIJNDAEL-256 crypt,
17535>>8	byte&0x08	0x00		SHA1 hash,
17536>>8	byte&0x08	0x08		RIPEMD-160 hash,
17537>>8	byte&0x04	0x00		ZLib
17538>>8	byte&0x04	0x04		BZip2
17539>>8	byte&0x03	0x00		lvl.0
17540>>8	byte&0x03	0x01		lvl.3
17541>>8	byte&0x03	0x02		lvl.6
17542>>8	byte&0x03	0x03		lvl.9
17543#file format >3
17544>3	string		>3		v.%.1s (unknown details)
17545
17546#------------------------------------------------------------------------------
17547# $File: hardware,v 1.1 2018/08/02 06:32:52 christos Exp $
17548# hardware magic
17549
17550# EDID
17551# https://en.wikipedia.org/wiki/Extended_Display_Identification_Data
175520	string		\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00
17553>19	byte		x
17554>>18	byte		x	EDID data, version %u.
17555>>19	byte		x	\b%u
17556#>>17	ubyte+1990	<255	\b, manufactured %u
17557
17558#------------------------------------------------------------------------------
17559# $File: hitachi-sh,v 1.10 2020/12/12 20:01:47 christos Exp $
17560# hitach-sh: file(1) magic for Hitachi Super-H
17561#
17562# Super-H COFF
17563#
17564# updated by Joerg Jenderek at Oct 2015
17565# https://en.wikipedia.org/wiki/COFF
17566# https://de.wikipedia.org/wiki/Common_Object_File_Format
17567# http://www.delorie.com/djgpp/doc/coff/filhdr.html
17568# below test line conflicts with 2nd NTFS filesystem sector
17569# 2nd NTFS filesystem sector often starts with 0x05004e00 for unicode string 5 NTLDR
17570# and Portable Gaming Notation Compressed format (*.WID http://pgn.freeservers.com/)
175710	beshort		0x0500
17572# test for unused flag bits (0x8000,0x0800,0x0400,0x0200,x0080) in f_flags
17573>18	ubeshort&0x8E80	0
17574# use big endian variant of subroutine to display name+variables+flags
17575# for common object formatted files
17576>>0	use				\^display-coff
17577!:strength -10
17578
175790	leshort		0x0550
17580# test for unused flag bits in f_flags
17581>18	uleshort&0x8E80	0
17582# use little endian variant of subroutine to
17583# display name+variables+flags for common object formatted files
17584>>0	use				display-coff
17585!:strength -10
17586
17587
17588#------------------------------------------------------------------------------
17589# $File: hp,v 1.25 2019/01/13 00:32:38 christos Exp $
17590# hp:  file(1) magic for Hewlett Packard machines (see also "printer")
17591#
17592# XXX - somebody should figure out whether any byte order needs to be
17593# applied to the "TML" stuff; I'm assuming the Apollo stuff is
17594# big-endian as it was mostly 68K-based.
17595#
17596# I think the 500 series was the old stack-based machines, running a
17597# UNIX environment atop the "SUN kernel"; dunno whether it was
17598# big-endian or little-endian.
17599#
17600# Daniel Quinlan (quinlan@yggdrasil.com): hp200 machines are 68010 based;
17601# hp300 are 68020+68881 based; hp400 are also 68k.  The following basic
17602# HP magic is useful for reference, but using "long" magic is a better
17603# practice in order to avoid collisions.
17604#
17605# Guy Harris (guy@netapp.com): some additions to this list came from
17606# HP-UX 10.0's "/usr/include/sys/unistd.h" (68030, 68040, PA-RISC 1.1,
17607# 1.2, and 2.0).  The 1.2 and 2.0 stuff isn't in the HP-UX 10.0
17608# "/etc/magic", though, except for the "archive file relocatable library"
17609# stuff, and the 68030 and 68040 stuff isn't there at all - are they not
17610# used in executables, or have they just not yet updated "/etc/magic"
17611# completely?
17612#
17613# 0	beshort		200		hp200 (68010) BSD binary
17614# 0	beshort		300		hp300 (68020+68881) BSD binary
17615# 0	beshort		0x20c		hp200/300 HP-UX binary
17616# 0	beshort		0x20d		hp400 (68030) HP-UX binary
17617# 0	beshort		0x20e		hp400 (68040?) HP-UX binary
17618# 0	beshort		0x20b		PA-RISC1.0 HP-UX binary
17619# 0	beshort		0x210		PA-RISC1.1 HP-UX binary
17620# 0	beshort		0x211		PA-RISC1.2 HP-UX binary
17621# 0	beshort		0x214		PA-RISC2.0 HP-UX binary
17622
17623#
17624# The "misc" stuff needs a byte order; the archives look suspiciously
17625# like the old 177545 archives (0xff65 = 0177545).
17626#
17627#### Old Apollo stuff
176280	beshort		0627		Apollo m68k COFF executable
17629>18	beshort		^040000		not stripped
17630>22	beshort		>0		- version %d
176310	beshort		0624		apollo a88k COFF executable
17632>18	beshort		^040000		not stripped
17633>22	beshort		>0		- version %d
176340       long            01203604016     TML 0123 byte-order format
176350       long            01702407010     TML 1032 byte-order format
176360       long            01003405017     TML 2301 byte-order format
176370       long            01602007412     TML 3210 byte-order format
17638#### PA-RISC 1.1
176390	belong 		0x02100106	PA-RISC1.1 relocatable object
176400	belong 		0x02100107	PA-RISC1.1 executable
17641>168	belong		&0x00000004	dynamically linked
17642>(144)	belong		0x054ef630	dynamically linked
17643>96	belong		>0		- not stripped
17644
176450	belong 		0x02100108	PA-RISC1.1 shared executable
17646>168	belong&0x4	0x4		dynamically linked
17647>(144)	belong		0x054ef630	dynamically linked
17648>96	belong		>0		- not stripped
17649
176500	belong 		0x0210010b	PA-RISC1.1 demand-load executable
17651>168	belong&0x4	0x4		dynamically linked
17652>(144)	belong		0x054ef630	dynamically linked
17653>96	belong		>0		- not stripped
17654
176550	belong 		0x0210010e	PA-RISC1.1 shared library
17656>96	belong		>0		- not stripped
17657
176580	belong 		0x0210010d	PA-RISC1.1 dynamic load library
17659>96	belong		>0		- not stripped
17660
17661#### PA-RISC 2.0
176620	belong		0x02140106	PA-RISC2.0 relocatable object
17663
176640       belong		0x02140107	PA-RISC2.0 executable
17665>168	belong		&0x00000004	dynamically linked
17666>(144)	belong		0x054ef630	dynamically linked
17667>96	belong		>0		- not stripped
17668
176690       belong		0x02140108	PA-RISC2.0 shared executable
17670>168	belong		&0x00000004	dynamically linked
17671>(144)	belong		0x054ef630	dynamically linked
17672>96	belong		>0		- not stripped
17673
176740       belong		0x0214010b	PA-RISC2.0 demand-load executable
17675>168	belong		&0x00000004	dynamically linked
17676>(144)	belong		0x054ef630	dynamically linked
17677>96	belong		>0		- not stripped
17678
176790       belong		0x0214010e	PA-RISC2.0 shared library
17680>96	belong		>0		- not stripped
17681
176820       belong		0x0214010d	PA-RISC2.0 dynamic load library
17683>96	belong		>0		- not stripped
17684
17685#### 800
176860	belong 		0x020b0106	PA-RISC1.0 relocatable object
17687
176880	belong 		0x020b0107	PA-RISC1.0 executable
17689>168	belong&0x4	0x4		dynamically linked
17690>(144)	belong		0x054ef630	dynamically linked
17691>96	belong		>0		- not stripped
17692
176930	belong 		0x020b0108	PA-RISC1.0 shared executable
17694>168	belong&0x4	0x4		dynamically linked
17695>(144)	belong		0x054ef630	dynamically linked
17696>96	belong		>0		- not stripped
17697
176980	belong 		0x020b010b	PA-RISC1.0 demand-load executable
17699>168	belong&0x4	0x4		dynamically linked
17700>(144)	belong		0x054ef630	dynamically linked
17701>96	belong		>0		- not stripped
17702
177030	belong 		0x020b010e	PA-RISC1.0 shared library
17704>96	belong		>0		- not stripped
17705
177060	belong 		0x020b010d	PA-RISC1.0 dynamic load library
17707>96	belong		>0		- not stripped
17708
17709#### 500
177100	long		0x02080106	HP s500 relocatable executable
17711>16	long		>0		- version %d
17712
177130	long		0x02080107	HP s500 executable
17714>16	long		>0		- version %d
17715
177160	long		0x02080108	HP s500 pure executable
17717>16	long		>0		- version %d
17718
17719#### 200
177200	belong 		0x020c0108	HP s200 pure executable
17721>4	beshort		>0		- version %d
17722>8	belong		&0x80000000	save fp regs
17723>8	belong		&0x40000000	dynamically linked
17724>8	belong		&0x20000000	debuggable
17725>36	belong		>0		not stripped
17726
177270	belong		0x020c0107	HP s200 executable
17728>4	beshort		>0		- version %d
17729>8	belong		&0x80000000	save fp regs
17730>8	belong		&0x40000000	dynamically linked
17731>8	belong		&0x20000000	debuggable
17732>36	belong		>0		not stripped
17733
177340	belong		0x020c010b	HP s200 demand-load executable
17735>4	beshort		>0		- version %d
17736>8	belong		&0x80000000	save fp regs
17737>8	belong		&0x40000000	dynamically linked
17738>8	belong		&0x20000000	debuggable
17739>36	belong		>0		not stripped
17740
177410	belong		0x020c0106	HP s200 relocatable executable
17742>4	beshort		>0		- version %d
17743>6	beshort		>0		- highwater %d
17744>8	belong		&0x80000000	save fp regs
17745>8	belong		&0x20000000	debuggable
17746>8	belong		&0x10000000	PIC
17747
177480	belong 		0x020a0108	HP s200 (2.x release) pure executable
17749>4	beshort		>0		- version %d
17750>36	belong		>0		not stripped
17751
177520	belong		0x020a0107	HP s200 (2.x release) executable
17753>4	beshort		>0		- version %d
17754>36	belong		>0		not stripped
17755
177560	belong		0x020c010e	HP s200 shared library
17757>4	beshort		>0		- version %d
17758>6	beshort		>0		- highwater %d
17759>36	belong		>0		not stripped
17760
177610	belong		0x020c010d	HP s200 dynamic load library
17762>4	beshort		>0		- version %d
17763>6	beshort		>0		- highwater %d
17764>36	belong		>0		not stripped
17765
17766#### MISC
177670	long		0x0000ff65	HP old archive
177680	long		0x020aff65	HP s200 old archive
177690	long		0x020cff65	HP s200 old archive
177700	long		0x0208ff65	HP s500 old archive
17771
177720	long		0x015821a6	HP core file
17773
177740	long		0x4da7eee8	HP-WINDOWS font
17775>8	byte		>0		- version %d
177760	string		Bitmapfile	HP Bitmapfile
17777
177780	string		IMGfile	CIS 	compimg HP Bitmapfile
17779# XXX - see "lif"
17780#0	short		0x8000		lif file
177810	long		0x020c010c	compiled Lisp
17782
177830	string		msgcat01	HP NLS message catalog,
17784>8	long		>0		%d messages
17785
17786# Summary: HP-48/49 calculator
17787# Created by: phk@data.fls.dk
17788# Modified by (1): AMAKAWA Shuhei <sa264@cam.ac.uk>
17789# Modified by (2): Samuel Thibault <samuel.thibault@ens-lyon.org> (HP49 support)
177900	string		HPHP		HP
17791>4	string		48		48 binary
17792>4	string		49		49 binary
17793>7	byte		>64		- Rev %c
17794>8	leshort		0x2911		(ADR)
17795>8	leshort		0x2933		(REAL)
17796>8	leshort		0x2955		(LREAL)
17797>8	leshort		0x2977		(COMPLX)
17798>8	leshort		0x299d		(LCOMPLX)
17799>8	leshort		0x29bf		(CHAR)
17800>8	leshort		0x29e8		(ARRAY)
17801>8	leshort		0x2a0a		(LNKARRAY)
17802>8	leshort		0x2a2c		(STRING)
17803>8	leshort		0x2a4e		(HXS)
17804>8	leshort		0x2a74		(LIST)
17805>8	leshort		0x2a96		(DIR)
17806>8	leshort		0x2ab8		(ALG)
17807>8	leshort		0x2ada		(UNIT)
17808>8	leshort		0x2afc		(TAGGED)
17809>8	leshort		0x2b1e		(GROB)
17810>8	leshort		0x2b40		(LIB)
17811>8	leshort		0x2b62		(BACKUP)
17812>8	leshort		0x2b88		(LIBDATA)
17813>8	leshort		0x2d9d		(PROG)
17814>8	leshort		0x2dcc		(CODE)
17815>8	leshort		0x2e48		(GNAME)
17816>8	leshort		0x2e6d		(LNAME)
17817>8	leshort		0x2e92		(XLIB)
17818
178190	string		%%HP:		HP text
17820>6	string		T(0)		- T(0)
17821>6	string		T(1)		- T(1)
17822>6	string		T(2)		- T(2)
17823>6	string		T(3)		- T(3)
17824>10	string		A(D)		A(D)
17825>10	string		A(R)		A(R)
17826>10	string		A(G)		A(G)
17827>14	string		F(.)		F(.);
17828>14	string		F(,)		F(,);
17829
17830
17831# Summary: HP-38/39 calculator
17832# Created by: Samuel Thibault <samuel.thibault@ens-lyon.org>
178330	string		HP3
17834>3	string		8		HP 38
17835>3	string		9		HP 39
17836>4	string		Bin		binary
17837>4	string		Asc		ASCII
17838>7	string		A		(Directory List)
17839>7	string		B		(Zaplet)
17840>7	string		C		(Note)
17841>7	string		D		(Program)
17842>7	string		E		(Variable)
17843>7	string		F		(List)
17844>7	string		G		(Matrix)
17845>7	string		H		(Library)
17846>7	string		I		(Target List)
17847>7	string		J		(ASCII Vector specification)
17848>7	string		K		(wildcard)
17849
17850# Summary: HP-38/39 calculator
17851# Created by: Samuel Thibault <samuel.thibault@ens-lyon.org>
178520	string		HP3
17853>3	string		8		HP 38
17854>3	string		9		HP 39
17855>4	string		Bin		binary
17856>4	string		Asc		ASCII
17857>7	string		A		(Directory List)
17858>7	string		B		(Zaplet)
17859>7	string		C		(Note)
17860>7	string		D		(Program)
17861>7	string		E		(Variable)
17862>7	string		F		(List)
17863>7	string		G		(Matrix)
17864>7	string		H		(Library)
17865>7	string		I		(Target List)
17866>7	string		J		(ASCII Vector specification)
17867>7	string		K		(wildcard)
17868
17869# hpBSD magic numbers
178700	beshort		200		hp200 (68010) BSD
17871>2	beshort		0407		impure binary
17872>2	beshort		0410		read-only binary
17873>2	beshort		0413		demand paged binary
178740	beshort		300		hp300 (68020+68881) BSD
17875>2	beshort		0407		impure binary
17876>2	beshort		0410		read-only binary
17877>2	beshort		0413		demand paged binary
17878#
17879# From David Gero <dgero@nortelnetworks.com>
17880# HP-UX 10.20 core file format from /usr/include/sys/core.h
17881# Unfortunately, HP-UX uses corehead blocks without specifying the order
17882# There are four we care about:
17883#     CORE_KERNEL, which starts with the string "HP-UX"
17884#     CORE_EXEC, which contains the name of the command
17885#     CORE_PROC, which contains the signal number that caused the core dump
17886#     CORE_FORMAT, which contains the version of the core file format (== 1)
17887# The only observed order in real core files is KERNEL, EXEC, FORMAT, PROC
17888# but we include all 6 variations of the order of the first 3, and
17889# assume that PROC will always be last
17890# Order 1: KERNEL, EXEC, FORMAT, PROC
178910x10		string	HP-UX
17892>0		belong	2
17893>>0xC		belong	0x3C
17894>>>0x4C		belong	0x100
17895>>>>0x58	belong	0x44
17896>>>>>0xA0	belong	1
17897>>>>>>0xAC	belong	4
17898>>>>>>>0xB0	belong	1
17899>>>>>>>>0xB4	belong	4		core file
17900>>>>>>>>>0x90	string	>\0		from '%s'
17901>>>>>>>>>0xC4	belong	3		- received SIGQUIT
17902>>>>>>>>>0xC4	belong	4		- received SIGILL
17903>>>>>>>>>0xC4	belong	5		- received SIGTRAP
17904>>>>>>>>>0xC4	belong	6		- received SIGABRT
17905>>>>>>>>>0xC4	belong	7		- received SIGEMT
17906>>>>>>>>>0xC4	belong	8		- received SIGFPE
17907>>>>>>>>>0xC4	belong	10		- received SIGBUS
17908>>>>>>>>>0xC4	belong	11		- received SIGSEGV
17909>>>>>>>>>0xC4	belong	12		- received SIGSYS
17910>>>>>>>>>0xC4	belong	33		- received SIGXCPU
17911>>>>>>>>>0xC4	belong	34		- received SIGXFSZ
17912# Order 2: KERNEL, FORMAT, EXEC, PROC
17913>>>0x4C		belong	1
17914>>>>0x58	belong	4
17915>>>>>0x5C	belong	1
17916>>>>>>0x60	belong	0x100
17917>>>>>>>0x6C	belong	0x44
17918>>>>>>>>0xB4	belong	4		core file
17919>>>>>>>>>0xA4	string	>\0		from '%s'
17920>>>>>>>>>0xC4	belong	3		- received SIGQUIT
17921>>>>>>>>>0xC4	belong	4		- received SIGILL
17922>>>>>>>>>0xC4	belong	5		- received SIGTRAP
17923>>>>>>>>>0xC4	belong	6		- received SIGABRT
17924>>>>>>>>>0xC4	belong	7		- received SIGEMT
17925>>>>>>>>>0xC4	belong	8		- received SIGFPE
17926>>>>>>>>>0xC4	belong	10		- received SIGBUS
17927>>>>>>>>>0xC4	belong	11		- received SIGSEGV
17928>>>>>>>>>0xC4	belong	12		- received SIGSYS
17929>>>>>>>>>0xC4	belong	33		- received SIGXCPU
17930>>>>>>>>>0xC4	belong	34		- received SIGXFSZ
17931# Order 3: FORMAT, KERNEL, EXEC, PROC
179320x24		string	HP-UX
17933>0		belong	1
17934>>0xC		belong	4
17935>>>0x10		belong	1
17936>>>>0x14	belong	2
17937>>>>>0x20	belong	0x3C
17938>>>>>>0x60	belong	0x100
17939>>>>>>>0x6C	belong	0x44
17940>>>>>>>>0xB4	belong	4		core file
17941>>>>>>>>>0xA4	string	>\0		from '%s'
17942>>>>>>>>>0xC4	belong	3		- received SIGQUIT
17943>>>>>>>>>0xC4	belong	4		- received SIGILL
17944>>>>>>>>>0xC4	belong	5		- received SIGTRAP
17945>>>>>>>>>0xC4	belong	6		- received SIGABRT
17946>>>>>>>>>0xC4	belong	7		- received SIGEMT
17947>>>>>>>>>0xC4	belong	8		- received SIGFPE
17948>>>>>>>>>0xC4	belong	10		- received SIGBUS
17949>>>>>>>>>0xC4	belong	11		- received SIGSEGV
17950>>>>>>>>>0xC4	belong	12		- received SIGSYS
17951>>>>>>>>>0xC4	belong	33		- received SIGXCPU
17952>>>>>>>>>0xC4	belong	34		- received SIGXFSZ
17953# Order 4: EXEC, KERNEL, FORMAT, PROC
179540x64		string	HP-UX
17955>0		belong	0x100
17956>>0xC		belong	0x44
17957>>>0x54		belong	2
17958>>>>0x60	belong	0x3C
17959>>>>>0xA0	belong	1
17960>>>>>>0xAC	belong	4
17961>>>>>>>0xB0	belong	1
17962>>>>>>>>0xB4	belong	4		core file
17963>>>>>>>>>0x44	string	>\0		from '%s'
17964>>>>>>>>>0xC4	belong	3		- received SIGQUIT
17965>>>>>>>>>0xC4	belong	4		- received SIGILL
17966>>>>>>>>>0xC4	belong	5		- received SIGTRAP
17967>>>>>>>>>0xC4	belong	6		- received SIGABRT
17968>>>>>>>>>0xC4	belong	7		- received SIGEMT
17969>>>>>>>>>0xC4	belong	8		- received SIGFPE
17970>>>>>>>>>0xC4	belong	10		- received SIGBUS
17971>>>>>>>>>0xC4	belong	11		- received SIGSEGV
17972>>>>>>>>>0xC4	belong	12		- received SIGSYS
17973>>>>>>>>>0xC4	belong	33		- received SIGXCPU
17974>>>>>>>>>0xC4	belong	34		- received SIGXFSZ
17975# Order 5: FORMAT, EXEC, KERNEL, PROC
179760x78		string	HP-UX
17977>0		belong	1
17978>>0xC		belong	4
17979>>>0x10		belong	1
17980>>>>0x14	belong	0x100
17981>>>>>0x20	belong	0x44
17982>>>>>>0x68	belong	2
17983>>>>>>>0x74	belong	0x3C
17984>>>>>>>>0xB4	belong	4		core file
17985>>>>>>>>>0x58	string	>\0		from '%s'
17986>>>>>>>>>0xC4	belong	3		- received SIGQUIT
17987>>>>>>>>>0xC4	belong	4		- received SIGILL
17988>>>>>>>>>0xC4	belong	5		- received SIGTRAP
17989>>>>>>>>>0xC4	belong	6		- received SIGABRT
17990>>>>>>>>>0xC4	belong	7		- received SIGEMT
17991>>>>>>>>>0xC4	belong	8		- received SIGFPE
17992>>>>>>>>>0xC4	belong	10		- received SIGBUS
17993>>>>>>>>>0xC4	belong	11		- received SIGSEGV
17994>>>>>>>>>0xC4	belong	12		- received SIGSYS
17995>>>>>>>>>0xC4	belong	33		- received SIGXCPU
17996>>>>>>>>>0xC4	belong	34		- received SIGXFSZ
17997# Order 6: EXEC, FORMAT, KERNEL, PROC
17998>0		belong	0x100
17999>>0xC		belong	0x44
18000>>>0x54		belong	1
18001>>>>0x60	belong	4
18002>>>>>0x64	belong	1
18003>>>>>>0x68	belong	2
18004>>>>>>>0x74	belong	0x2C
18005>>>>>>>>0xB4	belong	4		core file
18006>>>>>>>>>0x44	string	>\0		from '%s'
18007>>>>>>>>>0xC4	belong	3		- received SIGQUIT
18008>>>>>>>>>0xC4	belong	4		- received SIGILL
18009>>>>>>>>>0xC4	belong	5		- received SIGTRAP
18010>>>>>>>>>0xC4	belong	6		- received SIGABRT
18011>>>>>>>>>0xC4	belong	7		- received SIGEMT
18012>>>>>>>>>0xC4	belong	8		- received SIGFPE
18013>>>>>>>>>0xC4	belong	10		- received SIGBUS
18014>>>>>>>>>0xC4	belong	11		- received SIGSEGV
18015>>>>>>>>>0xC4	belong	12		- received SIGSYS
18016>>>>>>>>>0xC4	belong	33		- received SIGXCPU
18017>>>>>>>>>0xC4	belong	34		- received SIGXFSZ
18018
18019
18020
18021#------------------------------------------------------------------------------
18022# $File: human68k,v 1.6 2021/04/26 15:56:00 christos Exp $
18023# human68k:  file(1) magic for Human68k (X680x0 DOS) binary formats
18024# Magic too short!
18025#0		string	HU		Human68k
18026#>68		string	LZX		LZX compressed
18027#>>72		string	>\0		(version %s)
18028#>(8.L+74)	string	LZX		LZX compressed
18029#>>(8.L+78)	string	>\0		(version %s)
18030#>60		belong	>0		binded
18031#>(8.L+66)	string	#HUPAIR		hupair
18032#>0		string	HU		X executable
18033#>(8.L+74)	string	#LIBCV1		- linked PD LIBC ver 1
18034#>4		belong	>0		- base address %#x
18035#>28		belong	>0		not stripped
18036#>32		belong	>0		with debug information
18037#0		beshort	0x601a		Human68k Z executable
18038#0		beshort	0x6000		Human68k object file
18039#0		belong	0xd1000000	Human68k ar binary archive
18040#0		belong	0xd1010000	Human68k ar ascii archive
18041#0		beshort	0x0068		Human68k lib archive
18042#4		string	LZX		Human68k LZX compressed
18043#>8		string	>\0		(version %s)
18044#>4		string	LZX		R executable
18045#2		string	#HUPAIR		Human68k hupair R executable
18046
18047#------------------------------------------------------------------------------
18048# $File: ibm370,v 1.11 2021/03/14 16:51:45 christos Exp $
18049# ibm370:  file(1) magic for IBM 370 and compatibles.
18050#
18051# "ibm370" said that 0x15d == 0535 was "ibm 370 pure executable".
18052# What the heck *is* "USS/370"?
18053# AIX 4.1's "/etc/magic" has
18054#
18055#	0	short		0535		370 sysV executable
18056#	>12	long		>0		not stripped
18057#	>22	short		>0		- version %d
18058#	>30	long		>0		- 5.2 format
18059#	0	short		0530		370 sysV pure executable
18060#	>12	long		>0		not stripped
18061#	>22	short		>0		- version %d
18062#	>30	long		>0		- 5.2 format
18063#
18064# instead of the "USS/370" versions of the same magic numbers.
18065#
180660	beshort		0537		370 XA sysV executable
18067>12	belong		>0		not stripped
18068>22	beshort		>0		- version %d
18069>30	belong		>0		- 5.2 format
180700	beshort		0532		370 XA sysV pure executable
18071>12	belong		>0		not stripped
18072>22	beshort		>0		- version %d
18073>30	belong		>0		- 5.2 format
180740	beshort		054001		370 sysV pure executable
18075>12	belong		>0		not stripped
180760	beshort		055001		370 XA sysV pure executable
18077>12	belong		>0		not stripped
180780	beshort		056401		370 sysV executable
18079>12	belong		>0		not stripped
180800	beshort		057401		370 XA sysV executable
18081>12	belong		>0		not stripped
180820       beshort		0531		SVR2 executable (Amdahl-UTS)
18083>12	belong		>0		not stripped
18084>24     belong		>0		- version %d
180850	beshort		0534		SVR2 pure executable (Amdahl-UTS)
18086>12	belong		>0		not stripped
18087>24	belong		>0		- version %d
180880	beshort		0530		SVR2 pure executable (USS/370)
18089>12	belong		>0		not stripped
18090>24	belong		>0		- version %d
180910	beshort		0535		SVR2 executable (USS/370)
18092>12	belong		>0		not stripped
18093>24	belong		>0		- version %d
18094
18095# NETDATA (https://en.wikipedia.org/wiki/NETDATA)
18096#	-\INMR01 In EBCDIC
180970	string 		\x60\xe0\xc9\xd5\xd4\xd9\xf0\xf1	IBM NETDATA file
18098
18099#------------------------------------------------------------------------------
18100# $File: ibm6000,v 1.15 2021/07/03 14:01:46 christos Exp $
18101# ibm6000:  file(1) magic for RS/6000 and the RT PC.
18102#
181030	beshort		0x01df		executable (RISC System/6000 V3.1) or obj module
18104>12	belong		>0		not stripped
18105# Breaks sun4 statically linked execs.
18106#0      beshort		0x0103		executable (RT Version 2) or obj module
18107#>2	byte		0x50		pure
18108#>28	belong		>0		not stripped
18109#>6	beshort		>0		- version %ld
18110# GRR: line below is too general as it matches also TTComp archive, ASCII, 1K handled by ./archive
181110	beshort		0x0104		shared library
18112# GRR: line below is too general as it matches also TTComp archive, ASCII, 2K handled by ./archive
181130	beshort		0x0105		ctab data
181140	beshort		0xfe04		structured file
181150	string		0xabcdef	AIX message catalog
181160	belong		0x000001f9	AIX compiled message catalog
181170	string		\<aiaff>	archive
181180	string		\<bigaf>	archive (big format)
181190	belong		0x09006bea	AIX backup/restore format file
181200	belong		0x09006fea	AIX backup/restore format file
18121
181220	beshort		0x01f7		64-bit XCOFF executable or object module
18123>20	belong		0		not stripped
18124# GRR: this test is still too general as it catches also many FATs of DOS filesystems
181254	belong		&0x0feeddb0
18126# real core dump could not be 32-bit and 64-bit together
18127>7	byte&0x03	!3		AIX core file
18128>>1	byte		&0x01		fulldump
18129>>7	byte		&0x01		32-bit
18130>>>0x6e0	string	>\0		\b, %s
18131>>7	byte		&0x02		64-bit
18132>>>0x524	string	>\0		\b, %s
18133
18134#------------------------------------------------------------------------------
18135# $File: icc,v 1.7 2021/04/26 15:56:00 christos Exp $
18136# icc:  file(1) magic for International Color Consortium file formats
18137
18138#
18139# Color profiles as per the ICC's "Image technology colour management -
18140# Architecture, profile format, and data structure" specification.
18141# See
18142#
18143#	http://www.color.org/specification/ICC1v43_2010-12.pdf
18144#
18145# for Specification ICC.1:2010 (Profile version 4.3.0.0).
18146# URL: http://fileformats.archiveteam.org/wiki/ICC_profile
18147# Reference: http://www.color.org/iccmax/ICC.2-2016-7.pdf
18148# Update: Joerg Jenderek
18149#
18150# Bytes 36 to 39 contain a generic profile file signature of "acsp";
18151# bytes 40 to 43 "may be used to identify the primary platform/operating
18152# system framework for which the profile was created".
18153#
18154#	check and display ICC/ICM color profile
181550	name	color-profile
18156>36	string		acsp
18157# skip ASCII like Cognacspirit.txt by month <= 12
18158>>26	ubeshort	<13
18159# platform/operating system. Only 5 mentioned
18160
18161#
18162# This appears to be what's used for Apple ColorSync profiles.
18163# Instead of adding that, Apple just changed the generic "acsp" entry
18164# to be for "ColorSync ICC Color Profile" rather than "Kodak Color
18165# Management System, ICC Profile".
18166# Yes, it's "APPL", not "AAPL"; see the spec.
18167>>>40	string		APPL		ColorSync
18168
18169# Microsoft ICM color profile
18170>>>40	string		MSFT		Microsoft
18171
18172# Yes, that's a blank after "SGI".
18173>>>40	string		SGI\ 		SGI
18174
18175# XXX - is this what's used for the Sun KCMS or not?  The standard file
18176# uses just "acsp" for that, but Apple's file uses it for "ColorSync",
18177# and there *is* an identified "primary platform" value of SUNW.
18178>>>40	string		SUNW		Sun KCMS
18179
18180# 5th platform
18181>>>40	string		TGNT		Taligent
18182
18183# remaining "l" "e" of "color profile" printed later to avoid error
18184>>>40	string		x 		color profi
18185#>>>40	string		x		(%.4s)
18186!:mime	application/vnd.iccprofile
18187# for "ICM" extension only versions 2.x and for Kodak "CC" 2.0 is found
18188>>>8	ubyte		=2
18189# do not use empty message text to avoid error like
18190# icc, 82: Warning: Current entry does not yet have a description for adding a EXTENSION type
18191# file.exe: could not find any valid magic files!
18192>>>>9	ubyte		!0		\ble
18193!:ext	icc/icm
18194# minor version
18195>>>>9	ubyte		=0		\bl
18196# Kodak colour management system
18197>>>>>4	string		=KCMS		\be
18198!:ext	icc/icm/cc
18199>>>>>4	string		!KCMS		\be
18200!:ext	icc/icm
18201>>>8	ubyte		!2		\ble
18202!:ext	icc
18203# Profile version major.4bit-minor.sub1.sub2 like 4.3.0.0 (04300000h)
18204>>>8	ubyte		x		%u
18205>>>9	ubyte/16	x		\b.%u
18206# reserved and shall be null but 205.205 in umx1220u.icm
18207>>>10	ubyte		>0		\b.%u
18208>>>>11	ubyte		>0		\b.%u
18209# preferred colour management module like appl CCMS KCMS Lino UCCM "Win " "FF  "
18210# skip space like in brmsl08f.icm and null like in brmsl09f.icm, brmsl07f.icm
18211>>>4	string		>\ 		\b, type %.2s
18212>>>>6	string		>\  		\b%.1s
18213>>>>>7	string		>\  		\b%.1s
18214# colour space "XYZ " "Lab " "RGB " CMYK GRAY ...
18215>>>16	string		x		\b, %.3s
18216>>>19	string		>\  		\b%.1s
18217# Profile Connection Space (PCS) field usually "XYZ " or "Lab " but sometimes
18218# null or CMYK like in ISOcoated_v2_to_PSOcoated_v3_DeviceLink.icc
18219>>>20	string		>\0		\b/%.3s
18220>>>>23	string		>\ 		\b%.1s
18221# eleven device classes
18222>>>12	string		x		\b-%.4s device
18223# skip 00001964h in hpf69000.icc or 0h in XRDC50Q.ICM or " ROT" in brmsl05f.icm
18224>>>52	string		>\040
18225# skip "none" model like in "Trinitron Compatible 9300K G2.2.icm"
18226>>>>52	ubelong		!0x6e6f6e65
18227# device manufacturer field like "HP  " "IBM " EPSO
18228>>>>>48	string		x		\b, %.2s
18229>>>>>50	string		>\  		\b%.1s
18230>>>>>51	string		>\  		\b%.1s
18231# model like "ADI " "A265" and skip 20000404h in IS330.icm for RICOH RUSSIAN-SC
18232>>>>>52	string		>\ \  		\b/%.3s
18233>>>>>>55 string		>\  		\b%.1s
18234>>>>>52	string		x		model
18235# creator (often same as manufacture) like HP SONY XROX or null like in A925A.icm
18236>>>80	string		>\0		by %.2s
18237>>>>82	string		>\  		\b%.1s
18238>>>>>83	string		>\  		\b%.1s
18239# profile size
18240>>>0	ubelong		x		\b, %u bytes
18241# skip invalid date 0 like in linearSRGB.icc
18242>>>24	ubequad		!0
18243# datetime dd-mm-yyyy hh:mm:ss
18244>>>>28	ubeshort	x		\b, %u
18245# month <= 12
18246>>>>26	ubeshort	x		\b-%u
18247# year
18248>>>>24	ubeshort	x		\b-%u
18249# do not display midnight time like in CNHP8308.ICC
18250>>>>30	ubequad&0xFFffFFffFFff0000	!0
18251# hour <= 24
18252>>>>>30	ubeshort	x		%u
18253# minutes <= 59
18254>>>>>32	ubeshort	x		\b:%.2u
18255# seconds <= 59
18256>>>>>34	ubeshort	x		\b:%.2u
18257# vendor specific flags like 2 in HPCLJ5.ICM
18258>>>44	ubeshort	>0		\b, %#x vendor flags
18259# profile flags bits 0-2 of least 16 used by ICC
18260#>>>44	ubelong		>0		\b, %#x flags
18261# icEmbeddedProfileTrue
18262>>>44	ubelong		&1		\b, embedded
18263# icEmbeddedProfileFalse
18264#>>>44	ubelong		^1		\b, not embedded
18265# icUseWithEmbeddedDataOnly
18266>>>44	ubelong		&2		\b, dependently
18267# icUseAnywhere
18268#>>>44	ubelong		^2		\b, independently
18269>>>44	ubelong		&4		\b, MCS
18270#>>>44	ubelong		^4		\b, no MCS
18271# vendor specific device attributes 1~srgb.icc
18272# E000D00h~CNB7QEDA.ICM C000A00h~CNB5FCAA.ICM 01040401h~CNB25PE3.ICM
18273>>>56	ubelong		>0		\b, %#x vendor attribute
18274# ICC device attributes bits 0-7 used
18275#>>>60	ubelong		x		\b, %#x attribute
18276# http://www.color.org/icc34.h
18277>>>60	ubelong		&0x01		\b, transparent
18278#>>>60	ubelong		^0x01		\b, reflective
18279>>>60	ubelong		&0x02		\b, matte
18280#>>>60	ubelong		^0x02		\b, glossy
18281>>>60	ubelong		&0x04		\b, negative
18282#>>>60	ubelong		^0x04		\b, positive
18283>>>60	ubelong		&0x08		\b, black&white
18284#>>>60	ubelong		^0x08		\b, colour
18285>>>60	ubelong		&0x10		\b, non-paper
18286#>>>60	ubelong		^0x10		\b, paper
18287>>>60	ubelong		&0x20		\b, non-textured
18288#>>>60	ubelong		^0x20		\b, textured
18289>>>60	ubelong		&0x40		\b, non-isotropic
18290#>>>60	ubelong		^0x40		\b, isotropic
18291>>>60	ubelong		&0x80		\b, self-luminous
18292#>>>60	ubelong		^0x80		\b, non-self-luminous
18293# rendering intent 0-3 but 7AEA5027h in EE051__1.ICM 6CB1BCh in EE061__1.ICM
18294>>>64	ubelong		>3		\b, %#x rendering intent
18295#>>>64	ubelong		=0		\b, perceptual
18296>>>64	ubelong		=1		\b, relative colorimetric
18297>>>64	ubelong		=2		\b, saturation
18298>>>64	ubelong		=3		\b, absolute colorimetric
18299# PCS illuminant (3*s15Fixed16Numbers) often 0000f6d6 00010000 0000d32d
18300>>>71	ubequad		!0xd6000100000000d3	\b, PCS
18301# usually X~0.9642*65536=63189.8112~63190=F6D5h ; but also found
18302# often F6D6 in gt5000r.icm, F6B8 in kodakce.icm, F6CA in RSWOP.icm
18303>>>>68	ubelong			!0x0000f6d5	X=%#x
18304# usually Y=1.0~00010000h but Y=0 in brmsl07f.icm
18305>>>>72	ubelong			!0x00010000	Y=%#x
18306# usually Z~0.8249*65536=54060.6464~54061=D32Dh ; but also found
18307# D2F7 in hp1200c.icm, often D32C in A925A.icm, D309 in RSWOP.icm , D2F8 in kodak_dc.icm
18308>>>>76	ubelong			!0x0000d32d	Z=%#x
18309# Profile ID. MD5 fingerprinting method as defined in Internet RFC 1321.
18310>>>84	ubequad		>0		\b, %#llx MD5
18311# reserved in older versions should be zero but also found CDCDCDCDCDCDCDCD
18312#>>100	ubequad		x		\b %#llx reserved
18313# tag table
18314# 6 <= tags count <= 43
18315#>>>128	ubelong		>43		\b, %u tags
18316>>>128	ubelong		x
18317# shall contain the profileDescriptionTag "desc" , copyrightTag "cprt"
18318# search range = tags count * 12 -8=< maximal tag count * 12 -8= 43 * 12 -8= 508
18319>>>>132	search/508	cprt
18320# but no copyright tag in linearSRGB.icc
18321# beneath /System/Library/Frameworks/WebKit.framework/
18322# Versions/A/Frameworks/WebCore.framework/Versions/A/Resources
18323>>>>132	default		x		\b, no copyright tag
18324# 1st tag
18325#>>>132	string		x		\b, 1st tag %.4s
18326#>>>136	ubelong		x		%#x offset
18327#>>>140	ubelong		x		%#x len
18328# 2nd tag,...
18329# look also for profileDescriptionTag "desc"
18330>>>132	search/508	desc
18331# look further for TextDescriptionType "desc" signature
18332>>>>(&0.L)	string		=desc
18333>>>>>&4		pstring/l	x	"%s"
18334# look alternative for multiLocalizedUnicodeType "mluc" signature like in VideoPAL.icc
18335>>>>(&0.L)	string		=mluc
18336>>>>>&(&8.L)	ubequad		x
18337>>>>>>&4	bestring16	x	'%s'
18338
18339# Any other profile.
18340# XXX - should we use "acsp\0\0\0\0" for "no primary platform" profiles,
18341# and use "acsp" for everything else and dump the "primary platform"
18342# string in those cases?
1834336	string		acsp
18344>0	use		color-profile
18345
18346
18347
18348#------------------------------------------------------------------------------
18349# $File: iff,v 1.18 2022/03/21 19:57:18 christos Exp $
18350# iff:	file(1) magic for Interchange File Format (see also "audio" & "images")
18351#
18352# Daniel Quinlan (quinlan@yggdrasil.com) -- IFF was designed by Electronic
18353# Arts for file interchange.  It has also been used by Apple, SGI, and
18354# especially Commodore-Amiga.
18355#
18356# IFF files begin with an 8 byte FORM header, followed by a 4 character
18357# FORM type, which is followed by the first chunk in the FORM.
18358
183590	string		FORM		IFF data
18360#>4	belong		x		\b, FORM is %d bytes long
18361# audio formats
18362>8	string		AIFF		\b, AIFF audio
18363!:mime	audio/x-aiff
18364>8	string		AIFC		\b, AIFF-C compressed audio
18365!:mime	audio/x-aiff
18366>8	string		8SVX		\b, 8SVX 8-bit sampled sound voice
18367!:mime	audio/x-aiff
18368>8	string		16SV		\b, 16SV 16-bit sampled sound voice
18369>8	string		SAMP		\b, SAMP sampled audio
18370>8	string		MAUD		\b, MAUD MacroSystem audio
18371>8	string		SMUS		\b, SMUS simple music
18372>8	string		CMUS		\b, CMUS complex music
18373# image formats
18374>8	string		ILBMBMHD	\b, ILBM interleaved image
18375>>20	beshort		x		\b, %d x
18376>>22	beshort		x		%d
18377>8	string		RGBN		\b, RGBN 12-bit RGB image
18378>8	string		RGB8		\b, RGB8 24-bit RGB image
18379>8	string		DEEP		\b, DEEP TVPaint/XiPaint image
18380>8	string		DR2D		\b, DR2D 2-D object
18381>8	string		TDDD		\b, TDDD 3-D rendering
18382>8	string		LWOB		\b, LWOB 3-D object
18383>8	string		LWO2		\b, LWO2 3-D object, v2
18384>8	string		LWLO		\b, LWLO 3-D layered object
18385>8	string		REAL		\b, REAL Real3D rendering
18386>8	string		MC4D		\b, MC4D MaxonCinema4D rendering
18387>8	string		ANIM		\b, ANIM animation
18388>8	string		YAFA		\b, YAFA animation
18389>8	string		SSA\ 		\b, SSA super smooth animation
18390>8	string		FANT		\b, Fantavision animation
18391>8	string		ACBM		\b, ACBM continuous image
18392>8	string		FAXX		\b, FAXX fax image
18393>8	string		STFX		\b, ST-Fax image
18394>8	string		IMAGIHDR	\b, CD-i image
18395# other formats
18396>8	string		FTXT		\b, FTXT formatted text
18397>8	string		CTLG		\b, CTLG message catalog
18398>8	string		PREF		\b, PREF preferences
18399>8	string		DTYP		\b, DTYP datatype description
18400>8	string		PTCH		\b, PTCH binary patch
18401>8	string		AMFF		\b, AMFF AmigaMetaFile format
18402>8	string		WZRD		\b, WZRD StormWIZARD resource
18403>8	string		DOC\040		\b, DOC desktop publishing document
18404>8	string		SWRT		\b, SWRT Final Copy/Writer document
18405>8	string		WORD		\b, ProWrite document
18406>8	string 		WTXT		\b, WTXT Wordworth document
18407>8	string 		WOWO		\b, WOWO Wordworth document
18408>8	string		WVQA 		\b, Westwood Studios VQA Multimedia,
18409>>24	leshort		x		%d video frames,
18410>>26	leshort		x		%d x
18411>>28	leshort		x		%d
18412>8	string		MOVE		\b, Wing Commander III Video
18413>>12	string		_PC_		\b, PC version
18414>>12	string		3DO_		\b, 3DO version
18415
18416# These go at the end of the iff rules
18417#
18418# David Griffith <dave@661.org>
18419# I don't see why these might collide with anything else.
18420#
18421# Interactive Fiction related formats
18422#
18423>8	string		IFRS		\b, Blorb Interactive Fiction
18424>>24	string		Exec		with executable chunk
18425>8	string          IFZS		\b, Z-machine or Glulx saved game file (Quetzal)
18426!:mime	application/x-blorb
18427
18428#------------------------------------------------------------------------------
18429# $File: images,v 1.227 2022/09/11 20:58:52 christos Exp $
18430# images:  file(1) magic for image formats (see also "iff", and "c-lang" for
18431# XPM bitmaps)
18432#
18433# originally from jef@helios.ee.lbl.gov (Jef Poskanzer),
18434# additions by janl@ifi.uio.no as well as others. Jan also suggested
18435# merging several one- and two-line files into here.
18436#
18437# little magic: PCX (first byte is 0x0a)
18438
18439# Targa - matches `povray', `ppmtotga' and `xv' outputs
18440# by Philippe De Muyter <phdm@macqel.be>
18441# URL: http://justsolve.archiveteam.org/wiki/TGA
18442# Reference: http://www.dca.fee.unicamp.br/~martino/disciplinas/ea978/tgaffs.pdf
18443# Update: Joerg Jenderek
18444# at 2, byte ImgType must be 1, 2, 3, 9, 10 or 11
18445#	,32 or 33 (both not observed)
18446# at 1, byte CoMapType must be 1 if ImgType is 1 or 9, 0 otherwise
18447#	or theoretically 2-128 reserved for use by Truevision or 128-255 may be used for developer applications
18448# at 3, leshort Index is 0 for povray, ppmtotga and xv outputs
18449# `xv' recognizes only a subset of the following (RGB with pixelsize = 24)
18450# `tgatoppm' recognizes a superset (Index may be anything)
18451#
18452# test of Color Map Type 0~no 1~color map
18453# and Image Type 1 2 3 9 10 11 32 33
18454# and Color Map Entry Size 0 15 16 24 32
184550	ubequad&0x00FeC400000000C0	0
18456# Conflict with MPEG sequences.
18457!:strength -40
18458# Prevent conflicts with CRI ADX.
18459#>(2.S-2) belong	!0x28632943
18460# above line does not work for rgb32_top_left_rle.tga
18461# skip some MPEG sequence *.vob and some CRI ADX audio with improbable interleave bits
18462>17	ubyte&0xC0		!0xC0
18463# skip more garbage like *.iso by looking for positive image type
18464>>2	ubyte			>0
18465# skip some compiled terminfo like xterm+tmux by looking for image type less equal 33
18466>>>2	ubyte			<34
18467# skip some MPEG sequence *.vob HV001T01.EVO winnicki.mpg with unacceptable alpha channel depth 11
18468>>>>17	ubyte&0x0F		!11
18469# skip arches.3200 , Finder.Root , Slp.1 by looking for low pixel depth 1 8 15 16 24 32
18470>>>>>16	ubyte			1
18471>>>>>>0		use		tga-image
18472>>>>>16	ubyte			8
18473>>>>>>0		use		tga-image
18474>>>>>16	ubyte			15
18475>>>>>>0		use		tga-image
18476>>>>>16	ubyte			16
18477>>>>>>0		use		tga-image
18478>>>>>16	ubyte			24
18479>>>>>>0		use		tga-image
18480>>>>>16	ubyte			32
18481>>>>>>0		use		tga-image
18482#	display tga bitmap image information
184830	name				tga-image
18484>2	ubyte		<34		Targa image data
18485!:mime	image/x-tga
18486!:apple	????TPIC
18487# normal extension .tga but some Truevision products used others:
18488# tpic (Apple),icb (Image Capture Board),vda (Video Display Adapter),vst (NuVista),win (UNSURE about that)
18489!:ext	tga/tpic/icb/vda/vst
18490# image type 1 2 3 9 10 11 32 33
18491>2	ubyte&0xF7	1		- Map
18492>2	ubyte&0xF7	2		- RGB
18493# alpha channel
18494>>17	ubyte&0x0F	>0		\bA
18495>2	ubyte&0xF7	3		- Mono
18496# type not found, but by http://www.fileformat.info/format/tga/corion.htm
18497# Compressed color-mapped data, using Huffman, Delta, and runlength encoding
18498>2	ubyte		32		- Color
18499# Compressed color-mapped data, using Huffman, Delta, and RLE. 4-pass quadtree- type process
18500>2	ubyte		33		- Color
18501# Color Map Type 0~no 1~color map
18502>1	ubyte		1		(
18503# first color map entry, 0 normal
18504>>3	uleshort	>0		\b%d-
18505# color map length 0 2 1dh 3bh d9h 100h
18506>>5	uleshort	x		\b%d)
18507# 8~run length encoding bit
18508>2	ubyte&0x08	8		- RLE
18509# gimp can create big pictures!
18510>12	uleshort	>0		%d x
18511>12	uleshort	=0		65536 x
18512# image height. 0 interpreted as 65536
18513>14	uleshort	>0		%d
18514>14	uleshort	=0		65536
18515# Image Pixel depth 1 8 15 16 24 32
18516>16	ubyte		x		x %d
18517# X origin of image. 0 normal
18518>8	uleshort	>0		+%d
18519# Y origin of image. 0 normal; positive for top
18520>10	uleshort	>0		+%d
18521# Image descriptor: bits 3-0 give the alpha channel depth, bits 5-4 give direction
18522# alpha depth like: 1 8
18523>17	ubyte&0x0F	>0		- %d-bit alpha
18524# bits 5-4 give direction. normal bottom left
18525>17	ubyte		&0x20		- top
18526#>17	ubyte		^0x20		- bottom
18527>17	ubyte		&0x10		- right
18528#>17	ubyte		^0x10		- left
18529# some info say other bits 6-7 should be zero
18530# but data storage interleave by http://www.fileformat.info/format/tga/corion.htm
18531# 00 - no interleave;01 - even/odd interleave; 10 - four way interleave; 11 - reserved
18532#>17	ubyte&0xC0	0x00		- no interleave
18533>17	ubyte&0xC0	0x40		- interleave
18534>17	ubyte&0xC0	0x80		- four way interleave
18535>17	ubyte&0xC0	0xC0		- reserved
18536# positive length implies identification field
18537>0	ubyte		>0
18538>>18	string		x		"%s"
18539# last 18 bytes of newer tga file footer signature
18540>18	search/4261301/s	TRUEVISION-XFILE.\0
18541# extension area offset if not 0
18542>>&-8		ulelong			>0
18543# length of the extension area. normal 495 for version 2.0
18544>>>(&-4.l)	uleshort		0x01EF
18545# AuthorName[41]
18546>>>>&0		string			>\0		- author "%-.40s"
18547# Comment[324]=4 * 80 null terminated
18548>>>>&41		string			>\0		- comment "%-.80s"
18549# date
18550>>>>&365	ubequad&0xffffFFFFffff0000	!0
18551# Day
18552>>>>>&-6	uleshort		x		%d
18553# Month
18554>>>>>&-8	uleshort		x		\b-%d
18555# Year
18556>>>>>&-4	uleshort		x		\b-%d
18557# time
18558>>>>&371	ubequad&0xffffFFFFffff0000	!0
18559# hour
18560>>>>>&-8	uleshort		x		%d
18561# minutes
18562>>>>>&-6	uleshort		x		\b:%.2d
18563# second
18564>>>>>&-4	uleshort		x		\b:%.2d
18565# JobName[41]
18566>>>>&377	string			>\0		- job "%-.40s"
18567# JobHour Jobminute Jobsecond
18568>>>>&418	ubequad&0xffffFFFFffff0000	!0
18569>>>>>&-8	uleshort		x		%d
18570>>>>>&-6	uleshort		x		\b:%.2d
18571>>>>>&-4	uleshort		x		\b:%.2d
18572# SoftwareId[41]
18573>>>>&424	string			>\0		- %-.40s
18574# SoftwareVersionNumber
18575>>>>&424	ubyte			>0
18576>>>>>&40	uleshort/100		x		%d
18577>>>>>&40	uleshort%100		x		\b.%d
18578# VersionLetter
18579>>>>>&42	ubyte			>0x20		\b%c
18580# KeyColor
18581>>>>&468	ulelong			>0		- keycolor %#8.8x
18582# Denominator of Pixel ratio. 0~no pixel aspect
18583>>>>&474	uleshort		>0
18584# Numerator
18585>>>>>&-4	uleshort		>0		- aspect %d
18586>>>>>&-2	uleshort		x		\b/%d
18587# Denominator of Gamma ratio. 0~no Gamma value
18588>>>>&478	uleshort		>0
18589# Numerator
18590>>>>>&-4	uleshort		>0		- gamma %d
18591>>>>>&-2	uleshort		x		\b/%d
18592# ColorOffset
18593#>>>>&480	ulelong			x		- col offset %#8.8x
18594# StampOffset
18595#>>>>&484	ulelong			x		- stamp offset %#8.8x
18596# ScanOffset
18597#>>>>&488	ulelong			x		- scan offset %#8.8x
18598# AttributesType
18599#>>>>&492	ubyte			x		- Attributes %#x
18600## EndOfTGA
18601
18602# PBMPLUS images
18603# URL: 		https://en.wikipedia.org/wiki/Netpbm
18604# The next byte following the magic is always whitespace.
18605# adding 65 to strength so that Netpbm images comes before "x86 boot sector" or
18606# "DOS/MBR boot sector" identified by ./filesystems
186070	name		netpbm
18608>3	regex/s		=[0-9]{1,50}[\040\t\f\r\n]+[0-9]{1,50}	Netpbm image data
18609>>&0	regex		=[0-9]{1,50} 			\b, size = %s x
18610>>>&0	regex		=[0-9]{1,50}			\b %s
18611
186120	search/1	P1
18613# test for whitespace after 2 byte magic
18614>2	regex/2		[\040\t\f\r\n]
18615# skip DROID x-fmt-164-signature-id-583.pbm with ten 0 digits
18616>>3	string		!000000000
18617>>>0	use		netpbm
18618>>>0	string		x	\b, bitmap
18619!:strength + 65
18620!:mime	image/x-portable-bitmap
18621!:ext	pbm
18622# check for character # starting a comment line
18623>>>3	ubyte		=0x23
18624>>>>4	string		x	%s
18625
186260	search/1	P2
18627>0	regex/4		P2[\040\t\f\r\n]
18628>>0	use		netpbm
18629>>0	string		x	\b, greymap
18630!:strength + 65
18631# american spelling gray
18632!:mime	image/x-portable-graymap
18633!:ext	pgm
18634
186350	search/1	P3
18636>0	regex/4		P3[\040\t\f\r\n]
18637>>0	use		netpbm
18638>>0	string		x	\b, pixmap
18639!:strength + 65
18640!:mime	image/x-portable-pixmap
18641!:ext	ppm
18642
186430	string		P4
18644>0	regex/4		P4[\040\t\f\r\n]
18645>>0	use		netpbm
18646>>0	string		x	\b, rawbits, bitmap
18647!:strength + 65
18648!:mime	image/x-portable-bitmap
18649!:ext	pbm
18650
186510	string		P5
18652>0	regex/4		P5[\040\t\f\r\n]
18653>>0	use		netpbm
18654>>0	string		x	\b, rawbits, greymap
18655!:strength + 65
18656!:mime	image/x-portable-greymap
18657!:ext	pgm
18658
186590	string		P6
18660>0	regex/4		P6[\040\t\f\r\n]
18661>>0	use		netpbm
18662>>0	string		x	\b, rawbits, pixmap
18663!:strength + 65
18664!:mime	image/x-portable-pixmap
18665!:ext	ppm/pnm
18666
18667# URL: 		https://en.wikipedia.org/wiki/Netpbm#PAM_graphics_format
18668# Reference:	http://fileformats.archiveteam.org/wiki/Portable_Arbitrary_Map
18669# Update:	Joerg Jenderek
186700	string		P7
18671# skip DROID fmt-405-signature-id-589.pam by looking for character like New Line
18672>2	ubyte		!0xAB
18673#>2	ubyte		=0x0A
18674>>3	search/256/b	WIDTH		Netpbm PAM image file, size =
18675!:mime	image/x-portable-arbitrarymap
18676!:ext	pam
18677!:strength + 65
18678>>>&1	string		x		%s
18679>>>3	search/256/b	HEIGHT		x
18680>>>>&1	string		x		%s
18681# at offset 2 a New Line character (0xA) should appear
18682>>>2	ubyte		!0x0A		\b, %#x at offset 2 instead new line
18683
18684# From: bryanh@giraffe-data.com (Bryan Henderson)
186850	string		\117\072	Solitaire Image Recorder format
18686>4	string		\013		MGI Type 11
18687>4	string		\021		MGI Type 17
186880	string		.MDA		MicroDesign data
18689>21	ubyte		48		version 2
18690>21	ubyte		51		version 3
186910	string		.MDP		MicroDesign page data
18692>21	ubyte		48		version 2
18693>21	ubyte		51		version 3
18694
18695# NIFF (Navy Interchange File Format, a modification of TIFF) images
18696# [GRR:  this *must* go before TIFF]
186970	string		IIN1		NIFF image data
18698!:mime	image/x-niff
18699
18700# Canon RAW version 1 (CRW) files are a type of Canon Image File Format
18701# (CIFF) file. These are apparently all little-endian.
18702# From: Adam Buchbinder <adam.buchbinder@gmail.com>
18703# URL: https://www.sno.phy.queensu.ca/~phil/exiftool/canon_raw.html
187040	string		II\x1a\0\0\0HEAPCCDR	Canon CIFF raw image data
18705!:mime	image/x-canon-crw
18706>16	uleshort	x	\b, version %d.
18707>14	uleshort	x	\b%d
18708
18709# Canon RAW version 2 (CR2) files are a kind of TIFF with an extra magic
18710# number. Put this above the TIFF test to make sure we detect them.
18711# These are apparently all little-endian.
18712# From: Adam Buchbinder <adam.buchbinder@gmail.com>
18713# URL: https://libopenraw.freedesktop.org/wiki/Canon_CR2
187140	string		II\x2a\0\x10\0\0\0CR	Canon CR2 raw image data
18715!:mime	image/x-canon-cr2
18716!:strength +80
18717>10	ubyte		x	\b, version %d.
18718>11	ubyte		x	\b%d
18719
18720# Fujifilm RAF RAW image files with embedded JPEG data and compressed
18721# or uncompressed CFA RAW data. Byte order: Big Endian.
18722# URL: https://libopenraw.freedesktop.org/formats/raf/
18723# Useful info from http://fileformats.archiveteam.org/wiki/Fujifilm_RAF.
18724# File extension: RAF
18725# Works for both the FinePix S2 Pro and the X-T3. Anybody have some more Fuji
18726# raw samples available?
18727# -- David Dyer-Bennet <dd-b@dd-b.net> 9-Sep-2021
187280	string		FUJIFILMCCD-RAW		Fujifilm RAF raw image data
18729!:mime  image/x-fuji-raf
18730!:ext	raf
18731>0x10	string		x			\b, format version %4.4s
18732>0x1C	string		x			\b, camera %s
18733
18734# Tag Image File Format, from Daniel Quinlan (quinlan@yggdrasil.com)
18735# The second word of TIFF files is the TIFF version number, 42, which has
18736# never changed.  The TIFF specification recommends testing for it.
187370	string		MM\x00\x2a	TIFF image data, big-endian
18738!:strength +70
18739!:mime	image/tiff
18740!:ext	tif,tiff
18741>(4.L)	use		\^tiff_ifd
187420	string		II\x2a\x00	TIFF image data, little-endian
18743!:mime	image/tiff
18744!:strength +70
18745!:ext	tif,tiff
18746>(4.l)	use		tiff_ifd
18747
187480	name		tiff_ifd
18749>0	uleshort	x		\b, direntries=%d
18750>2	use		tiff_entry
18751
187520	name		tiff_entry
18753# NewSubFileType
18754>0	uleshort	0xfe
18755>>12	use		tiff_entry
18756>0	uleshort	0x100
18757>>4	ulelong		1
18758>>>12	use		tiff_entry
18759>>>8	uleshort	x		\b, width=%d
18760>0	uleshort	0x101
18761>>4	ulelong		1
18762>>>8	uleshort	x		\b, height=%d
18763>>>12	use		tiff_entry
18764>0	uleshort	0x102
18765>>8	uleshort	x		\b, bps=%d
18766>>12	use		tiff_entry
18767>0	uleshort	0x103
18768>>4	ulelong		1		\b, compression=
18769>>>8	uleshort	1		\bnone
18770>>>8	uleshort	2		\bhuffman
18771>>>8	uleshort	3		\bbi-level group 3
18772>>>8	uleshort	4		\bbi-level group 4
18773>>>8	uleshort	5		\bLZW
18774>>>8	uleshort	6		\bJPEG (old)
18775>>>8	uleshort	7		\bJPEG
18776>>>8	uleshort	8		\bdeflate
18777>>>8	uleshort	9		\bJBIG, ITU-T T.85
18778>>>8	uleshort	0xa		\bJBIG, ITU-T T.43
18779>>>8	uleshort	0x7ffe		\bNeXT RLE 2-bit
18780>>>8	uleshort	0x8005		\bPackBits (Macintosh RLE)
18781>>>8	uleshort	0x8029		\bThunderscan RLE
18782>>>8	uleshort	0x807f		\bRasterPadding (CT or MP)
18783>>>8	uleshort	0x8080		\bRLE (Line Work)
18784>>>8	uleshort	0x8081		\bRLE (High-Res Cont-Tone)
18785>>>8	uleshort	0x8082		\bRLE (Binary Line Work)
18786>>>8	uleshort	0x80b2		\bDeflate (PKZIP)
18787>>>8	uleshort	0x80b3		\bKodak DCS
18788>>>8	uleshort	0x8765		\bJBIG
18789>>>8	uleshort	0x8798		\bJPEG2000
18790>>>8	uleshort	0x8799		\bNikon NEF Compressed
18791>>>8	default		x
18792>>>>8	uleshort	x		\b(unknown %#x)
18793>>>12	use		tiff_entry
18794>0	uleshort	0x106		\b, PhotometricInterpretation=
18795>>8	clear		x
18796>>8	uleshort	0		\bWhiteIsZero
18797>>8	uleshort	1		\bBlackIsZero
18798>>8	uleshort	2		\bRGB
18799>>8	uleshort	3		\bRGB Palette
18800>>8	uleshort	4		\bTransparency Mask
18801>>8	uleshort	5		\bCMYK
18802>>8	uleshort	6		\bYCbCr
18803>>8	uleshort	8		\bCIELab
18804>>8	default		x
18805>>>8	uleshort	x		\b(unknown=%#x)
18806>>12	use		tiff_entry
18807# FillOrder
18808>0	uleshort	0x10a
18809>>4	ulelong		1
18810>>>12	use		tiff_entry
18811# DocumentName
18812>0	uleshort	0x10d
18813>>(8.l)	string		x		\b, name=%s
18814>>>12	use		tiff_entry
18815# ImageDescription
18816>0	uleshort	0x10e
18817>>(8.l)	string		x		\b, description=%s
18818>>>12	use		tiff_entry
18819# Make
18820>0	uleshort	0x10f
18821>>(8.l)	string		x		\b, manufacturer=%s
18822>>>12	use		tiff_entry
18823# Model
18824>0	uleshort	0x110
18825>>(8.l)	string		x		\b, model=%s
18826>>>12	use		tiff_entry
18827# StripOffsets
18828>0	uleshort	0x111
18829>>12	use		tiff_entry
18830# Orientation
18831>0	uleshort	0x112		\b, orientation=
18832>>8	uleshort	1		\bupper-left
18833>>8	uleshort	3		\blower-right
18834>>8	uleshort	6		\bupper-right
18835>>8	uleshort	8		\blower-left
18836>>8	uleshort	9		\bundefined
18837>>8	default		x
18838>>>8	uleshort	x		\b[*%d*]
18839>>12	use		tiff_entry
18840# XResolution
18841>0	uleshort	0x11a
18842>>8	ulelong		x		\b, xresolution=%d
18843>>12	use		tiff_entry
18844# YResolution
18845>0	uleshort	0x11b
18846>>8	ulelong		x		\b, yresolution=%d
18847>>12	use		tiff_entry
18848# ResolutionUnit
18849>0	uleshort	0x128
18850>>8	uleshort	x		\b, resolutionunit=%d
18851>>12	use		tiff_entry
18852# Software
18853>0	uleshort	0x131
18854>>(8.l)	string		x		\b, software=%s
18855>>12	use		tiff_entry
18856# Datetime
18857>0	uleshort	0x132
18858>>(8.l)	string		x		\b, datetime=%s
18859>>12	use		tiff_entry
18860# HostComputer
18861>0	uleshort	0x13c
18862>>(8.l)	string		x		\b, hostcomputer=%s
18863>>12	use		tiff_entry
18864# WhitePoint
18865>0	uleshort	0x13e
18866>>12	use		tiff_entry
18867# PrimaryChromaticities
18868>0	uleshort	0x13f
18869>>12	use		tiff_entry
18870# YCbCrCoefficients
18871>0	uleshort	0x211
18872>>12	use		tiff_entry
18873# YCbCrPositioning
18874>0	uleshort	0x213
18875>>12	use		tiff_entry
18876# ReferenceBlackWhite
18877>0	uleshort	0x214
18878>>12	use		tiff_entry
18879# Copyright
18880>0	uleshort	0x8298
18881>>(8.l)	string		x		\b, copyright=%s
18882>>12	use		tiff_entry
18883# ExifOffset
18884>0	uleshort	0x8769
18885>>12	use		tiff_entry
18886# GPS IFD
18887>0	uleshort	0x8825		\b, GPS-Data
18888>>12	use		tiff_entry
18889
18890#>0	uleshort	x		\b, unknown=%#x
18891#>>12	use		tiff_entry
18892
188930	string		MM\x00\x2b	Big TIFF image data, big-endian
18894!:mime	image/tiff
188950	string		II\x2b\x00	Big TIFF image data, little-endian
18896!:mime	image/tiff
18897
18898# PNG [Portable Network Graphics, or "PNG's Not GIF"] images
18899# (Greg Roelofs, newt@uchicago.edu)
18900# (Albert Cahalan, acahalan@cs.uml.edu)
18901#
18902# 137 P N G \r \n ^Z \n [4-byte length] I H D R [HEAD data] [HEAD crc] ...
18903#
18904
18905# IHDR parser
189060	name		png-ihdr
18907>0	ubelong		x		\b, %d x
18908>4	ubelong		x		%d,
18909>8	ubyte		x		%d-bit
18910>9	ubyte		0		grayscale,
18911>9	ubyte		2		\b/color RGB,
18912>9	ubyte		3		colormap,
18913>9	ubyte		4		gray+alpha,
18914>9	ubyte		6		\b/color RGBA,
18915#>10	ubyte		0		deflate/32K,
18916>12	ubyte		0		non-interlaced
18917>12	ubyte		1		interlaced
18918
18919# Standard PNG image.
189200	string		\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0DIHDR	PNG image data
18921!:mime	image/png
18922!:ext   png
18923!:strength +10
18924>16	use		png-ihdr
18925
18926# Apple CgBI PNG image.
189270	string		\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x04CgBI
18928>24	string  	\x00\x00\x00\x0DIHDR	PNG image data (CgBI)
18929!:mime	image/png
18930!:ext   png
18931!:strength +10
18932>>32	use		png-ihdr
18933
18934# possible GIF replacements; none yet released!
18935# (Greg Roelofs, newt@uchicago.edu)
18936#
18937# GRR 950115:  this was mine ("Zip GIF"):
189380	string		GIF94z		ZIF image (GIF+deflate alpha)
18939!:mime	image/x-unknown
18940#
18941# GRR 950115:  this is Jeremy Wohl's Free Graphics Format (better):
18942#
189430	string		FGF95a		FGF image (GIF+deflate beta)
18944!:mime	image/x-unknown
18945#
18946# GRR 950115:  this is Thomas Boutell's Portable Bitmap Format proposal
18947# (best; not yet implemented):
18948#
189490	string		PBF		PBF image (deflate compression)
18950!:mime	image/x-unknown
18951
18952# GIF
18953# Strength set up to beat 0x55AA DOS/MBR signature word lookups (+65)
189540	string		GIF8		GIF image data
18955!:strength +80
18956!:mime	image/gif
18957!:apple	8BIMGIFf
18958!:ext	gif
18959>4	string		7a		\b, version 8%s,
18960>4	string		9a		\b, version 8%s,
18961>6	uleshort	>0		%d x
18962>8	uleshort	>0		%d
18963#>10	ubyte		&0x80		color mapped,
18964#>10	ubyte&0x07	=0x00		2 colors
18965#>10	ubyte&0x07	=0x01		4 colors
18966#>10	ubyte&0x07	=0x02		8 colors
18967#>10	ubyte&0x07	=0x03		16 colors
18968#>10	ubyte&0x07	=0x04		32 colors
18969#>10	ubyte&0x07	=0x05		64 colors
18970#>10	ubyte&0x07	=0x06		128 colors
18971#>10	ubyte&0x07	=0x07		256 colors
18972
18973# ITC (CMU WM) raster files.  It is essentially a byte-reversed Sun raster,
18974# 1 plane, no encoding.
189750	string		\361\0\100\273	CMU window manager raster image data
18976>4	ulelong		>0		%d x
18977>8	ulelong		>0		%d,
18978>12	ulelong		>0		%d-bit
18979
18980# Magick Image File Format
18981# URL:		https://imagemagick.org/script/miff.php
18982# Reference:	http://fileformats.archiveteam.org/wiki/MIFF
18983# Update:	Joerg Jenderek
18984# http://www.nationalarchives.gov.uk/pronom/fmt/930
189850	search/256/bc	id=imagemagick
18986# skip bad ASCII text by following new line~0x0A or space~0x20 character
18987#>&0	ubyte		x		\b, next character %#x
18988# called by TriD ImageMagick Machine independent File Format bitmap
18989>&0	ubyte&0xD5	0		MIFF image data
18990# https://reposcope.com/mimetype/image/miff
18991#!:mime	image/miff
18992!:mime	image/x-miff
18993!:ext	miff/mif
18994# examples with standard file(1) magic
18995#>>0	string		=id=ImageMagick	with standard magic
18996# examples with unusual file(1) magic like
18997>>0	string		!id=ImageMagick	starting with
18998# start with comment (brace) like http://samples.fileformat.info/.../AQUARIUM.MIF
18999>>>0	ubyte		=0x7b		comment
19000# skip second character which is often a newline and show comment
19001>>>>2	string		x		"%s"
19002# does not start with comment, probably letters with other case like Id=ImageMagick
19003# ImageMagick-7.0.9-2/Magick++/demo/smile_anim.miff
19004>>>0	ubyte		!0x7b
19005>>>>0	string		>\0		'%-.14s'
19006# URL:		https://imagemagick.org/
19007# Reference:	https://imagemagick.org/script/magick-vector-graphics.php
19008# From:		Joerg Jenderek
19009# Note:		all white-spaces between commands are ignored
190100	string		push
19011# skip some white spaces
19012>5	search/3	graphic-context	ImageMagick Vector Graphic
19013# TODO: look for dangerous commands like CVE-2016-3715
19014#!:mime	text/plain
19015!:mime	image/x-mvg
19016!:ext	mvg
19017
19018# Artisan
190190	long		1123028772	Artisan image data
19020>4	long		1		\b, rectangular 24-bit
19021>4	long		2		\b, rectangular 8-bit with colormap
19022>4	long		3		\b, rectangular 32-bit (24-bit with matte)
19023
19024# FIG (Facility for Interactive Generation of figures), an object-based format
19025# URL: 		http://fileformats.archiveteam.org/wiki/Fig
19026#		https://en.wikipedia.org/wiki/Xfig
19027# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/f/fig.trid.xml
19028# https://web.archive.org/web/20070920204655/http://epb.lbl.gov/xfig/fig-format.html
19029# Update:	Joerg Jenderek
19030# Note:		called "FIG vector drawing" by TrID,
19031#		4 byte magic is assumed to be always at offset 0 and
19032#		verified by `fig2mpdf -v bootloader.fig && file bootloader.pdf`
19033#0	search/1/tb	#FIG		FIG image text
19034# GRR: with --keep-going option the line above gives duplicate messages
190350	search/1/ts	#FIG
19036>&0	use		image-xfig
19037# binary data variant with non ASCII text characters like Control-A or �C in thermostat.fig
190380	search/1/bs	#FIG
19039>&0	use		image-xfig
19040#	display XFIG image describing text, mime type, file name extension and version
190410	name		image-xfig
19042>8	ubyte		x		FIG image text
19043#!:mime	text/plain
19044# https://reposcope.com/mimetype/image/x-xfig
19045!:mime	image/x-xfig
19046!:ext	fig
19047# version string like: 1.4 2.1 3.1 3.2
19048>5	string		x		\b, version %.3s
19049# some times after version text like: "Produced by xfig version 3.2.5-alpha5"
19050>8	ubyte		>0x0D
19051>>8	string		x		"%s"
19052# should be point character (2Eh) of version string according to TrID
19053#>6	ubyte		!0x2E		\b, at 6 %#x
19054# caret character (23h) at the beginning in most or probaly all exanples
19055#>0	ubyte		!0x23		\b, starting with character %#x
19056# URL: 		http://fileformats.archiveteam.org/wiki/DeskMate_Draw
19057#		http://en.wikipedia.org/wiki/Deskmate
19058# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/d/dm-fig.trid.xml
19059# From:		Joerg Jenderek
19060# Note:		called "DeskMate Draw drawing" by TrID
190610	string		\x14FIG		DeskMate Drawing
19062#!:mime	application/octet-stream
19063!:mime	image/x-deskmate-fig
19064!:ext	fig
19065# TODO:
19066#	"Cabri 3D Figure"	by TrID fig-cabri.trid.xml
19067#	"Playmation Figure"	by TrID fig-playmation.trid.xml
19068
19069# PHIGS
190700	string		ARF_BEGARF		PHIGS clear text archive
190710	string		@(#)SunPHIGS		SunPHIGS
19072# version number follows, in the form m.n
19073>40	string		SunBin			binary
19074>32	string		archive			archive
19075
19076# GKS (Graphics Kernel System)
190770	string		GKSM		GKS Metafile
19078>24	string		SunGKS		\b, SunGKS
19079
19080# CGM image files
190810	string		BEGMF		clear text Computer Graphics Metafile
19082
19083# MGR bitmaps  (Michael Haardt, u31b3hs@pool.informatik.rwth-aachen.de)
190840	string	yz	MGR bitmap, modern format, 8-bit aligned
190850	string	zz	MGR bitmap, old format, 1-bit deep, 16-bit aligned
190860	string	xz	MGR bitmap, old format, 1-bit deep, 32-bit aligned
190870	string	yx	MGR bitmap, modern format, squeezed
19088
19089# Fuzzy Bitmap (FBM) images
190900	string		%bitmap\0	FBM image data
19091>30	long		0x31		\b, mono
19092>30	long		0x33		\b, color
19093
19094# facsimile data
190951	string		PC\ Research,\ Inc	group 3 fax data
19096>29	ubyte		0		\b, normal resolution (204x98 DPI)
19097>29	ubyte		1		\b, fine resolution (204x196 DPI)
19098# From: Herbert Rosmanith <herp@wildsau.idv.uni.linz.at>
190990	string		Sfff		structured fax file
19100
19101# From: Joerg Jenderek <joerg.jen.der.ek@gmx.net>
19102# URL:	http://fileformats.archiveteam.org/wiki/Award_BIOS_logo
19103# Note:	verified by XnView command `nconvert -fullinfo *.EPA`
191040	string		\x11\x06	Award BIOS Logo, 136 x 84
19105!:mime	image/x-award-bioslogo
19106!:ext	epa
191070	string		\x11\x09	Award BIOS Logo, 136 x 126
19108!:mime	image/x-award-bioslogo
19109!:ext	epa
19110# https://telparia.com/fileFormatSamples/image/epa/IO.EPA
19111# Note:	by bitmap-awbm-v1x1009.trid.xml called "Award BIOS logo bitmap (128x126) (v1)"
19112#	verified by RECOIL `recoil2png -o tmp.png IO.EPA; file tmp.png`
191130	string		\x10\x09	Award BIOS Logo, 128 x 126
19114!:mime	image/x-award-bioslogo
19115!:ext	epa
19116#0	string		\x07\x1f	BIOS Logo corrupted?
19117# http://www.blackfiveservices.co.uk/awbmtools.shtml
19118# http://biosgfx.narod.ru/v3/
19119# http://biosgfx.narod.ru/abr-2/
191200	string		AWBM
19121# Note:    by bitmap-awbm.trid.xml called "Award BIOS logo bitmap (v2)"
19122>4	uleshort	<1981		Award BIOS Logo, version 2
19123#>4	uleshort	<1981		Award BIOS bitmap
19124!:mime	image/x-award-bioslogo2
19125#!:mime	image/x-award-bmp
19126!:ext	epa/bmp
19127# image width is a multiple of 4
19128>>4	uleshort&0x0003	0
19129>>>4	uleshort	x		\b, %d
19130>>>6	uleshort	x		x %d
19131>>4	uleshort&0x0003	>0		\b,
19132>>>4	uleshort&0x0003	=1
19133>>>>4	uleshort	x		%d+3
19134>>>4	uleshort&0x0003	=2
19135>>>>4	uleshort	x		%d+2
19136>>>4	uleshort&0x0003	=3
19137>>>>4	uleshort	x		%d+1
19138>>>6	uleshort	x		x %d
19139# at offset 8 starts imagedata followed by "RGB " marker
19140
19141# PC bitmaps (OS/2, Windows BMP files)  (Greg Roelofs, newt@uchicago.edu)
19142# https://en.wikipedia.org/wiki/BMP_file_format#DIB_header_.\
19143# 28bitmap_information_header.29
19144# Note:	variant starting direct with DIB header see
19145#	http://fileformats.archiveteam.org/wiki/BMP
19146#	verified by ImageMagick version 6.8.9-8 command `identify *.dib`
191470	uleshort		40
19148# skip bad samples like GAME by looking for valid number of color planes
19149>12	uleshort	1		Device independent bitmap graphic
19150!:mime	image/x-ms-bmp
19151!:apple	????BMPp
19152!:ext	dib
19153>>4	ulelong		x		\b, %d x
19154>>8	ulelong		x		%d x
19155>>14	uleshort	x		%d
19156# number of color planes (must be 1)
19157#>>12	uleshort	>1		\b, %u color planes
19158# compression method: 0~no 1~RLE 8-bit/pixel 3~Huffman 1D
19159#>>16	ulelong		3		\b, Huffman 1D compression
19160>>16	ulelong		>0		\b, %u compression
19161# image size is the size of raw bitmap; a dummy 0 can be given for BI_RGB bitmaps
19162>>20	ulelong		x		\b, image size %u
19163# horizontal and vertical resolution of the image (pixel per metre, signed integer)
19164>>24	ulelong		>0		\b, resolution %d x
19165>>>28	ulelong		x		%d px/m
19166# number of colors in palette, or 0 to default to 2**n
19167#>>32	ulelong		>0		\b, %u colors
19168# number of important colors used, or 0 when every color is important
19169>>36	ulelong		>0		\b, %u important colors
19170# From:		Joerg Jenderek
19171# URL:		http://fileformats.archiveteam.org/wiki/VBM_(VDC_BitMap)
19172# Reference:	http://csbruce.com/cbm/postings/csc19950906-1.txt
19173#		http://mark0.net/download/triddefs_xml.7z
19174#		defs/b/bitmap-vbm.trid.xml
19175#		defs/b/bitmap-vbm-v3.trid.xml
19176# Note:		called "VDC BitMap" by TrID
19177#		verified by RECOIL `recoil2png -o tmp.png coke_can.vbm; file tmp.png`
19178# begin with a signature of 'B' 'M' 0xCB, followed by a version byte 2 or 3
19179# Similar to the unrelated Windows BMP format
19180#	check for VDC bitmap and then display image dimension and version
191810	name		bitmap-vbm
19182>2	ubyte		0xCB		VDC bitmap
19183!:mime	image/x-commodore-vbm
19184# http://recoil.sourceforge.net/formats.html
19185!:ext	bm/vbm
19186# the VBM format version number: 2 or 3
19187>>3	ubyte		x		\b, version %u
19188# width of the image in Hi/Lo format
19189>>4	ubeshort	x		\b, %u
19190# height of the image
19191>>6	ubeshort	x		x %u
19192# version 3 images have the following additional header information
19193>>3	ubyte		=3
19194# data-encoding type: 0~uncompressed 1~RLE-compressed
19195>>>8	ubyte		0		\b, uncompressed
19196>>>8	ubyte		1		\b, RLE-compressed
19197# byte code for general RLE repetitions
19198#>>>9	ubyte		x		\b, RLE repetition code 0x%x
19199# reserved := 0
19200#>>>14	short		>0		\b, reserved 0x%x
19201# length of comment text; 0~no comment text
19202#>>>16	ubeshort	>0		\b, comment length %u
19203>>>16	pstring/H	>0		\b, comment "%s"
19204#
192050	string		BM
19206# check for magic and version 2 of VDC bitmap or BMP with cbSize=715=CB02
19207>2	ubeshort		0xCB02
19208>>6	short		=0
19209>>>0	use     	bitmap-bmp
19210# VDC bitmap height or maybe a few OS/2 BMP with nonzero "hotspot coordinates"
19211>>6	short		!0
19212>>>0	use     	bitmap-vbm
19213# check for magic and version 3 of VDC bitmap or BMP with cbSize=971=CB03
19214>2	ubeshort		0xCB03
19215# check for reserved value (=0) of VDC bitmap
19216>>14	short		=0
19217>>>0	use     	bitmap-vbm
19218# BMP with cbSize=????03CBh and dib header size != 0
19219>>14	short		!0
19220>>>0	use     	bitmap-bmp
19221# cbSize is size of header or file size of Windows BMP bitmap
19222>2	default		x
19223>>0	use     	bitmap-bmp
192240	name		bitmap-bmp
19225>14	ulelong		12		PC bitmap, OS/2 1.x format
19226!:mime	image/bmp
19227!:ext	bmp
19228>>18	uleshort	x		\b, %d x
19229>>20	uleshort	x		%d
19230# number of color planes (must be 1)
19231#>>22	uleshort	!1		\b, %u color planes
19232# number of bits per pixel (color depth); found 4 8
19233>>24	uleshort	x		x %d
19234# x, y coordinates of the hotspot
19235>>6	uleshort	>0		\b, hotspot %ux
19236>>>8	uleshort	x		\b%u
19237# cbSize; size of file or header like 1Ah 228C8h
19238>>2	ulelong		x		\b, cbSize %u
19239#>>2	ulelong		x		\b, cbSize 0x%8.8x
19240# offBits; offset to bitmap data like:
19241>>10	ulelong		x	\b, bits offset %u
19242# http://fileformats.archiveteam.org/wiki/BMP#OS.2F2_BMP_2.0 no examples found
19243>14	ulelong		48		PC bitmap, OS/2 2.x format (DIB header size=48)
19244>14	ulelong		24		PC bitmap, OS/2 2.x format (DIB header size=24)
19245# http://entropymine.com/jason/bmpsuite/bmpsuite/q/pal8os2v2-16.bmp
19246# Note:    by bitmap-bmp-v2o.trid.xml called "Windows Bitmap (v2o)"
19247>14	ulelong		16		PC bitmap, OS/2 2.x format (DIB header size=16)
19248!:mime	image/bmp
19249!:apple	????BMPp
19250!:ext	bmp
19251# image width and height fields are unsigned integers for OS/2
19252>>18	ulelong		x		\b, %u x
19253>>22	ulelong		x		%u
19254# number of bits per pixel (color depth); found 8
19255>>28	uleshort	>1		x %u
19256# x, y coordinates of the hotspot
19257>>6	uleshort	>0		\b, hotspot %ux
19258>>>8	uleshort	x		\b%u
19259# number of color planes (must be 1)
19260#>>26	uleshort	>1		\b, %u color planes
19261# cbSize; size of file like: 241E
19262>>2	ulelong		x		\b, cbSize %u
19263#>>2	ulelong		x		\b, cbSize 0x%x
19264# offBits; offset to bitmap data like: 41E
19265>>10	ulelong		x	\b, bits offset %u
19266#>>10	ulelong		x	\b, bits offset 0x%x
19267>14	ulelong		64		PC bitmap, OS/2 2.x format
19268!:mime	image/bmp
19269!:apple	????BMPp
19270!:ext	bmp
19271# image width and height fields are unsigned integers for OS/2
19272>>18	ulelong		x		\b, %u x
19273>>22	ulelong		x		%u
19274# number of bits per pixel (color depth); found 1 4 8
19275>>28	uleshort	>1		x %u
19276# x, y coordinates of the hotspot
19277>>6	uleshort	>0		\b, hotspot %ux
19278>>>8	uleshort	x		\b%u
19279>>26	uleshort	>1		\b, %u color planes
19280# cbSize; size of file or headers
19281>>2	ulelong		x		\b, cbSize %u
19282# BMP with cbSize 000002CBh=715 or 000003CBh=971 maybe misinterpreted as VDC bitmap
19283#>>2	ulelong		x		\b, cbSize %#x
19284# offBits; offset to bitmap data like 56h 5Eh 8Eh 43Eh
19285>>10	ulelong		x	\b, bits offset %u
19286#>>10	ulelong		x	\b, bits offset %#x
19287#>>(10.l) ubequad	!0	\b, bits %#16.16llx
19288# BITMAPV2INFOHEADER	adds RGB bit masks
19289>14	ulelong		52		PC bitmap, Adobe Photoshop
19290!:mime	image/bmp
19291!:apple	????BMPp
19292!:ext	bmp
19293>>18	ulelong		x		\b, %d x
19294>>22	ulelong		x		%d x
19295# number of bits per pixel (color depth); found 16 32
19296>>28	uleshort	x		%d
19297# x, y coordinates of the hotspot; should be zero for Windows variant
19298>>6	uleshort	>0		\b, hotspot %ux
19299>>>8	uleshort	x		\b%u
19300# cbSize; size of file like: 14A 7F42
19301>>2	ulelong		x		\b, cbSize %u
19302#>>2	ulelong		x		\b, cbSize 0x%x
19303# offBits; offset to bitmap data like: 42h
19304>>10	ulelong		x	\b, bits offset %u
19305#>>10	ulelong		x	\b, bits offset 0x%x
19306# BITMAPV3INFOHEADER	adds alpha channel bit mask
19307>14	ulelong		56		PC bitmap, Adobe Photoshop with alpha channel mask
19308!:mime	image/bmp
19309!:apple	????BMPp
19310!:ext	bmp
19311>>18	ulelong		x		\b, %d x
19312>>22	ulelong		x		%d x
19313# number of bits per pixel (color depth); found 16 32
19314>>28	uleshort		x		%d
19315# x, y coordinates of the hotspot; should be zero for Windows variant
19316>>6	uleshort	>0		\b, hotspot %ux
19317>>>8	uleshort	x		\b%u
19318# cbSize; size of file like: 4E 7F46 131DE 14046h
19319>>2	ulelong		x		\b, cbSize %u
19320#>>2	ulelong		x		\b, cbSize 0x%x
19321# offBits; offset to bitmap data like: 46h
19322>>10	ulelong			x	\b, bits offset %u
19323#>>10	ulelong			x	\b, bits offset 0x%x
19324>14	ulelong		40
19325# jump 4 bytes before end of file/header to skip fmt-116-signature-id-118.dib
19326# broken for large bitmaps
19327#>>(2.l-4)	ulong	x		PC bitmap, Windows 3.x format
19328>>14	ulelong		40		PC bitmap, Windows 3.x format
19329!:mime	image/bmp
19330!:apple	????BMPp
19331>>>18	ulelong		x		\b, %d x
19332>>>22	ulelong		x		%d
19333# 320 x 400		https://en.wikipedia.org/wiki/LOGO.SYS
19334>>>18	ulequad		=0x0000019000000140	x
19335!:ext	bmp/sys
19336>>>18	ulequad		!0x0000019000000140
19337# compression method 2~RLE 4-bit/pixel implies also extension rle
19338>>>>30	ulelong		2		x
19339!:ext	bmp/rle
19340# not RLE compressed and not 320x400 dimension
19341>>>>30	default		x
19342# "small" dimensions like: 14x15 15x16 16x14 16x16 32x32
19343#	https://en.wikipedia.org/wiki/Favicon
19344>>>>>18	ulequad&0xffFFffC0ffFFffC0 =0	x
19345# https://www.politi-kdigital.de/favicon.ico
19346# http://forum.rpc1.org/favicon.ico
19347!:ext	bmp/ico
19348# "big" dimensions > 63
19349>>>>>18	default		x		x
19350!:ext	bmp
19351# number of bits per pixel (color depth); found 1 2 4 8 16 24 32
19352>>>28	uleshort	x		%d
19353# x, y coordinates of the hotspot; there is no hotspot in bitmaps, so values 0
19354#>>>6	uleshort	>0		\b, hotspot %ux
19355#>>>>8	uleshort	x		\b%u
19356# number of color planes (must be 1), except badplanes.bmp for testing
19357#>>>26	uleshort	>1		\b, %u color planes
19358# compression method: 0~no 1~RLE 8-bit/pixel 2~RLE 4-bit/pixel 3~Huffman 1D 6~RGBA bit field masks
19359#>>>30	ulelong		3		\b, Huffman 1D compression
19360>>>30	ulelong		>0		\b, %u compression
19361# image size is the size of raw bitmap; a dummy 0 can be given for BI_RGB bitmaps
19362>>>34	ulelong		>0		\b, image size %u
19363# horizontal and vertical resolution of the image (pixel per metre, signed integer)
19364>>>38	ulelong		>0		\b, resolution %d x
19365>>>>42	ulelong		x		%d px/m
19366# number of colors in palette 16 256, or 0 to default to 2**n
19367#>>>46	ulelong		>0		\b, %u colors
19368# number of important colors used, or 0 when every color is important
19369>>>50	ulelong		>0		\b, %u important colors
19370# cbSize; often size of file
19371>>>2	ulelong		x		\b, cbSize %u
19372#>>>2	ulelong		x		\b, cbSize %#x
19373# offBits; offset to bitmap data like 36h 76h BEh 236h 406h 436h 4E6h
19374>>>10	ulelong		x	\b, bits offset %u
19375#>>>10	ulelong		x	\b, bits offset %#x
19376#>>>(10.l) ubequad	!0	\b, bits %#16.16llxd
19377>14	ulelong		124		PC bitmap, Windows 98/2000 and newer format
19378!:mime	image/bmp
19379!:ext	bmp
19380>>18	ulelong		x		\b, %d x
19381>>22	ulelong		x		%d x
19382# color planes; must be 1
19383#>>>26	uleshort	>1		\b, %u color planes
19384# 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)
19385>>28	uleshort	x		%d
19386# x, y coordinates of the hotspot; should be zero for Windows variant
19387>>6	uleshort	>0		\b, hotspot %ux
19388>>>8	uleshort	x		\b%u
19389# cbSize; size of file like: 8E AA 48A 999 247A 4F02 7F8A 3F88E B216E 1D4C8A 100008A
19390>>2	ulelong		x		\b, cbSize %u
19391#>>2	ulelong		x		\b, cbSize 0x%x
19392# offBits; offset to bitmap data like: 8A 47A ABABABAB (fmt-119-signature-id-121.bmp)
19393>>10	ulelong		x	\b, bits offset %u
19394#>>10	ulelong		x	\b, bits offset 0x%x
19395>14	ulelong		108		PC bitmap, Windows 95/NT4 and newer format
19396!:mime	image/bmp
19397!:ext	bmp
19398>>18	ulelong		x		\b, %d x
19399>>22	ulelong		x		%d x
19400# number of bits per pixel (color depth); found 8 24 32
19401>>28	uleshort	x		%d
19402# x, y coordinates of the hotspot; should be zero for Windows variant
19403>>6	uleshort	>0		\b, hotspot %ux
19404>>>8	uleshort	x		\b%u
19405# cbSize; size of file like: 82 8A 9A 9F86 1E07A 3007A 88B7A C007A
19406>>2	ulelong		x		\b, cbSize %u
19407#>>2	ulelong		x		\b, cbSize 0x%x
19408# offBits; offset to bitmap data like: 7A 7E 46A
19409>>10	ulelong		x	\b, bits offset %u
19410#>>10	ulelong		x	\b, bits offset 0x%x
19411# Update:	Joerg Jenderek
19412# URL:		http://fileformats.archiveteam.org/wiki/OS/2_Icon
19413# Reference:	http://www.fileformat.info
19414#		/format/os2bmp/spec/902d5c253f2a43ada39c2b81034f27fd/view.htm
19415# Note: verified by command like `deark -l -d3 OS2MEMU.ICO`
194160	string		IC
19417# skip Lotus smart icon *.smi by looking for valid hotspot coordinates
19418>6	ulelong&0xFF00FF00	=0	OS/2 icon
19419# jump 4 bytes before end of header/file and test for accessibility
19420#>>(2.l-4) ubelong	x	End of header is OK!
19421!:mime	image/x-os2-ico
19422!:ext	ico
19423# cbSize; size of header or file in bytes like 1ah 120h 420h
19424>>2	ulelong		x	\b, cbSize %u
19425# xHotspot, yHotspot; coordinates of the hotspot for icons like 16 32
19426>>6	uleshort	x	\b, hotspot %ux
19427>>8	uleshort	x	\b%u
19428# offBits; offset in bytes to the beginning of the bit-map pel data like 20h
19429>>10	ulelong		x	\b, bits offset %u
19430#>>(10.l) ubequad	x	\b, bits %#16.16llx
19431#0	string		PI		PC pointer image data
19432#0	string		CI		PC color icon data
194330	string		CI
19434# test also for valid dib header sizes 12 or 64
19435>14	ulelong		<65		OS/2
19436# test also for valid hotspot coordinates
19437#>>6	ulelong&0xFE00FE00	=0	OS/2
19438!:mime	image/x-os2-ico
19439!:ext	ico
19440>>14	ulelong		12		1.x color icon
19441# image width and height fields are unsigned integers for OS/2
19442>>>18	uleshort	x		%u x
19443# stored height = 2 * real height
19444>>>20	uleshort/2	x		%u
19445# number of bits per pixel (color depth). Typical 32 24 16 8 4 but only 1 found
19446>>>24	uleshort	>1		x %u
19447# color planes; must be 1
19448#>>>22	uleshort	>1		\b, %u color planes
19449>>14	ulelong		64		2.x color icon
19450# image width and height
19451>>>18	ulelong		x		%u x
19452# stored height = 2 * real height
19453>>>22	ulelong/2	x		%u
19454# number of bits per pixel (color depth). only 1 found
19455>>>28	uleshort	>1		x %u
19456#>>>26	uleshort	>1		\b, %u color planes
19457# compression method: 0~no 3~Huffman 1D
19458>>>30	ulelong		3		\b, Huffman 1D compression
19459#>>>30	ulelong		>0		\b, %u compression
19460# xHotspot, yHotspot; coordinates of the hotspot like 0 1 16 20 32 33 63 64
19461>>6	uleshort	x	\b, hotspot %ux
19462>>8	uleshort	x	\b%u
19463# cbSize; size of header or maybe file in bytes like 1Ah 4Eh 84Eh
19464>>2	ulelong		x	\b, cbSize %u
19465#>>2	ulelong		x	\b, cbSize %x
19466# offBits; offset to bitmap data (pixel array) like E4h 3Ah 66h 6Ah 33Ah 4A4h
19467>>10	ulelong		x	\b, bits offset %u
19468#>>10	ulelong		x	\b, bits offset %#x
19469#>>(10.l) ubequad	!0	\b, bits %#16.16llx
19470# dib header size: 12~Ch~OS/2 1.x 64~40h~OS/2 2.x
19471#>>14	ulelong		x		\b, dib header size %u
19472#0	string		CP		PC color pointer image data
19473# URL:		http://fileformats.archiveteam.org/wiki/OS/2_Pointer
19474# Reference:	http://www.fileformat.info/format/os2bmp/egff.htm
194750	string		CP
19476# skip many Corel Photo-Paint image "CPT9FILE" by checking for positive bits offset
19477>10	ulelong		>0
19478# skip CPU-Z Report by checking for valid dib header sizes 12 or 64
19479>>14	ulelong		=12
19480>>>0		use		os2-ptr
19481>>14	ulelong		=64
19482>>>0		use		os2-ptr
19483#	display information of OS/2 pointer bitmaps
194840	name		os2-ptr
19485>14	ulelong		x		OS/2
19486# http://extension.nirsoft.net/PTR
19487!:mime	image/x-ibm-pointer
19488!:ext	ptr
19489>>14	ulelong		12		1.x color pointer
19490# image width and height fields are unsigned integers for OS/2
19491>>>18	uleshort	x		%u x
19492# stored height = 2 * real height
19493>>>20	uleshort/2	x		%u
19494# number of bits per pixel (color depth). Typical 32 24 16 8 4 but only 1 found
19495>>>24	uleshort	>1		x %u
19496# color planes; must be 1
19497#>>>22	uleshort	>1		\b, %u color planes
19498>>14	ulelong		64		2.x color pointer
19499# image width and height
19500>>>18	ulelong		x		%u x
19501# stored height = 2 * real height
19502>>>22	ulelong/2	x		%u
19503# number of bits per pixel (color depth). only 1 found
19504>>>28	uleshort	>1		x %u
19505#>>>26	uleshort	>1		\b, %u color planes
19506# compression method: 0~no 3~Huffman 1D
19507>>>30	ulelong		3		\b, Huffman 1D compression
19508#>>>30	ulelong		>0		\b, %u compression
19509# xHotspot, yHotspot; coordinates of the hotspot like 0 3 4 8 15 16 23 27 31
19510>>6	uleshort	x	\b, hotspot %ux
19511>>8	uleshort	x	\b%u
19512# cbSize; size of header or maybe file in bytes like 1Ah 4Eh
19513>>2	ulelong		x	\b, cbSize %u
19514#>>2	ulelong		x	\b, cbSize %x
19515# offBits; offset to bitmap data (pixel array) like 6Ah A4h E4h 4A4h
19516>>10	ulelong		x	\b, bits offset %u
19517#>>10	ulelong		x	\b, bits offset %#x
19518#>>(10.l) ubequad	!0	\b, bits %#16.16llx
19519# dib header size: 12~Ch~OS/2 1.x 64~40h~OS/2 2.x
19520#>>14	ulelong		x		\b, dib header size %u
19521# Conflicts with other entries [BABYL]
19522# URL:	http://fileformats.archiveteam.org/wiki/BMP#OS.2F2_Bitmap_Array
19523# Note:	container for OS/2 icon "IC", color icon "CI", color pointer "CP" or bitmap "BM"
19524#0	string		BA		PC bitmap array data
195250	string		BA
19526# skip old Emacs RMAIL BABYL ./mail.news by checking for low header size
19527>2	ulelong		<0x004c5942	OS/2 graphic array
19528!:mime	image/x-os2-graphics
19529#!:apple	????BMPf
19530# cbSize; size of header like 28h 5Ch
19531>>2	ulelong		x	\b, cbSize %u
19532#>>2	ulelong		x	\b, cbSize %#x
19533# offNext; offset to data like 0 48h F2h 4Eh 64h C6h D2h D6h DAh E6h EAh 348h
19534>>6	ulelong		>0	\b, data offset %u
19535#>>6	ulelong		>0	\b, data offset %#x
19536#>>(6.l) ubequad	!0	\b, data %#16.16llx
19537# dimensions of the intended device like 640 x 480 for VGA or 1024 x 768
19538>>10	uleshort	>0		\b, display %u
19539>>>12	uleshort	>0		x %u
19540# usType of first array element
19541#>>14	string		x		\b, usType %2.2s
19542# 1 space char after "1st"
19543# no *.bga examples found https://www.openwith.org/file-extensions/bga/1342
19544>>14	string		BM	\b; 1st
19545!:ext	bmp/bga
19546>>14	string		CI	\b; 1st
19547!:ext	ico
19548>>14	string		CP	\b; 1st
19549!:ext	ico
19550>>14	string		IC	\b; 1st
19551!:ext	ico
19552# no white-black pointer found
19553#>>14	string		PT	\b; 1st
19554#!:ext
19555>>14	indirect	x
19556
19557# XPM icons (Greg Roelofs, newt@uchicago.edu)
19558# Update:	Joerg Jenderek
19559# URL:		http://fileformats.archiveteam.org/wiki/XPM
19560# Reference:	http://www.x.org/docs/XPM/xpm.pdf
19561#		http://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-xpm.trid.xml
19562# Note:		called "X PixMap bitmap" by TrID and "X-Windows Pixmap Image" by DROID via PUID x-fmt/208
19563# starting with c comment like: logo.xpm
195640	string			/*\040
19565# 9 byte c-comment "/* XPM */" not at the beginning like: mozicon16.xpm mozicon50.xpm (thunderbird)
19566>0	search/0xCE		/*\ XPM\ */
19567# skip DROID x-fmt-208-signature-id-620.xpm by looking for char aray without explict length
19568# and match mh-logo.xpm (emacs)
19569>>&0		search/1249	[]
19570>>>0		use		xpm-image
19571# non standard because no 9 byte c-comment "/* XPM */" like: logo.xpm in qemu package
19572>0	default			x
19573# words are separated by a white space which can be composed of space and tabulation characters
19574>>0		search/0x52	static\040char\040
19575# skip debug.c testmlc.c by looking for char aray without explict length
19576# https://www.clamav.net/downloads/production/clamav-0.104.2.tar.gz
19577# clamav-0.104.2\libclammspack\mspack\debug.c
19578>>>&0		search/64	[]
19579>>>>0		use		xpm-image
19580#	display X pixmap image information
195810	name			xpm-image
19582>0	string		x	X pixmap image text
19583#!:mime	text/plain
19584# https://reposcope.com/mimetype/image/x-xpixmap
19585# alias
19586#!:mime	image/x-xpm
19587!:mime	image/x-xpixmap
19588!:ext	xpm
19589# NO pm example found!
19590#!:ext	xpm/pm
19591# look for start of character array at beginning of a line like: psetupl.xpm (OpenOffice 4.1.7)
19592>0	search/0x406	\n"
19593# DEBUG VALUES string
19594#>>&0	string		x		'%s'
19595# width with optional white space before like: 16 24 32 48 1280
19596>>&0	regex/8		[0-9]{1,5}	\b, %s
19597# height with white space like: 15 16 17 24 32 48 1024
19598>>>&0	regex/8		[0-9]{1,5}	x %s
19599# number of colors with white space like: 1 2 3 4 5 8 11 14 162 255 but unrelistic 4294967295 by hardcopy tool
19600>>>>&0	regex/12	[0-9]{1,9}	x %s
19601# chars_per_pixel with white space like: 1 2
19602>>>>>&0	regex/14	[0-9]{1,2}	\b, %s chars/pixel
19603# non standard because not starting with 9 byte c-comment "/* XPM */"
19604>0	string		!/*\ XPM\ */
19605>>0	string		x	\b, 1st line "%s"
19606
19607# Utah Raster Toolkit RLE images (janl@ifi.uio.no)
196080	uleshort	0xcc52		RLE image data,
19609>6	uleshort	x		%d x
19610>8	uleshort	x		%d
19611>2	uleshort	>0		\b, lower left corner: %d
19612>4	uleshort	>0		\b, lower right corner: %d
19613>10	ubyte&0x1	=0x1		\b, clear first
19614>10	ubyte&0x2	=0x2		\b, no background
19615>10	ubyte&0x4	=0x4		\b, alpha channel
19616>10	ubyte&0x8	=0x8		\b, comment
19617>11	ubyte		>0		\b, %d color channels
19618>12	ubyte		>0		\b, %d bits per pixel
19619>13	ubyte		>0		\b, %d color map channels
19620
19621# image file format (Robert Potter, potter@cs.rochester.edu)
196220	string		Imagefile\ version-	iff image data
19623# this adds the whole header (inc. version number), informative but longish
19624>10	string		>\0		%s
19625
19626# Sun raster images, from Daniel Quinlan (quinlan@yggdrasil.com)
196270	ubelong		0x59a66a95	Sun raster image data
19628>4	ubelong		>0		\b, %d x
19629>8	ubelong		>0		%d,
19630>12	ubelong		>0		%d-bit,
19631#>16	ubelong		>0		%d bytes long,
19632>20	ubelong		0		old format,
19633#>20	ubelong		1		standard,
19634>20	ubelong		2		compressed,
19635>20	ubelong		3		RGB,
19636>20	ubelong		4		TIFF,
19637>20	ubelong		5		IFF,
19638>20	ubelong		0xffff		reserved for testing,
19639>24	ubelong		0		no colormap
19640>24	ubelong		1		RGB colormap
19641>24	ubelong		2		raw colormap
19642#>28	ubelong		>0		colormap is %d bytes long
19643
19644# SGI image file format, from Daniel Quinlan (quinlan@yggdrasil.com)
19645#
19646# See
19647#	http://reality.sgi.com/grafica/sgiimage.html
19648#
196490	ubeshort		474		SGI image data
19650#>2	ubyte		0		\b, verbatim
19651>2	ubyte		1		\b, RLE
19652#>3	ubyte		1		\b, normal precision
19653>3	ubyte		2		\b, high precision
19654>4	ubeshort	x		\b, %d-D
19655>6	ubeshort	x		\b, %d x
19656>8	ubeshort	x		%d
19657>10	ubeshort	x		\b, %d channel
19658>10	ubeshort	!1		\bs
19659>80	string		>0		\b, "%s"
19660
196610	string		IT01		FIT image data
19662>4	ubelong		x		\b, %d x
19663>8	ubelong		x		%d x
19664>12	ubelong		x		%d
19665#
196660	string		IT02		FIT image data
19667>4	ubelong		x		\b, %d x
19668>8	ubelong		x		%d x
19669>12	ubelong		x		%d
19670#
196712048	string		PCD_IPI		Kodak Photo CD image pack file
19672>0xe02	ubyte&0x03	0x00		, landscape mode
19673>0xe02	ubyte&0x03	0x01		, portrait mode
19674>0xe02	ubyte&0x03	0x02		, landscape mode
19675>0xe02	ubyte&0x03	0x03		, portrait mode
196760	string		PCD_OPA		Kodak Photo CD overview pack file
19677
19678# FITS format.  Jeff Uphoff <juphoff@tarsier.cv.nrao.edu>
19679# FITS is the Flexible Image Transport System, the de facto standard for
19680# data and image transfer, storage, etc., for the astronomical community.
19681# (FITS floating point formats are big-endian.)
196820	string	SIMPLE\ \ =	FITS image data
19683!:mime	image/fits
19684!:ext	fits/fts
19685>109	string	8		\b, 8-bit, character or unsigned binary integer
19686>108	string	16		\b, 16-bit, two's complement binary integer
19687>107	string	\ 32		\b, 32-bit, two's complement binary integer
19688>107	string	-32		\b, 32-bit, floating point, single precision
19689>107	string	-64		\b, 64-bit, floating point, double precision
19690
19691# other images
196920	string	This\ is\ a\ BitMap\ file	Lisp Machine bit-array-file
19693
19694# From SunOS 5.5.1 "/etc/magic" - appeared right before Sun raster image
19695# stuff.
19696#
196970	ubeshort		0x1010		PEX Binary Archive
19698
19699# DICOM medical imaging data
19700# URL:		https://en.wikipedia.org/wiki/DICOM#Data_format
19701# Note:		"dcm" is the official file name extension
19702# 		XnView mention also "dc3" and "acr" as file name extension
19703128	string	DICM			DICOM medical imaging data
19704!:mime	application/dicom
19705!:ext dcm/dicom/dic
19706
19707# XWD - X Window Dump file.
19708# URL:		http://fileformats.archiveteam.org/wiki/XWD
19709# Reference:	https://wiki.multimedia.cx/index.php?title=XWD
19710#		http://mark0.net/download/triddefs_xml.7z/defs/x/xdm-x11.trid.xml
19711# Note:		called "X-Windows Screen Dump (X11)" by TrID and
19712#		"X-Windows Screen Dump" version X11 by DROID via PUID fmt/483
19713#		verfied by XnView `nconvert -in xwd -info *`
19714#		and ImageMagick 6.9.11 `identify -verbose *` as XWD X Windows system window dump
19715#		and `xwud -in fig41.wxd -dumpheader`
19716#   As described in /usr/X11R6/include/X11/XWDFile.h
19717#   used by the xwd program.
19718#   Bradford Castalia, idaeim, 1/01
19719#   updated by Adam Buchbinder, 2/09 and Joerg Jenderek, May 2022
19720# The following assumes version 7 of the format; the first long is the length
19721# of the header, which is at least 25 4-byte longs, and the one at offset 8
19722# is a constant which is always either 1 or 2. Offset 12 is the pixmap depth,
19723# which is a maximum of 32.
19724# Size of the entire file header (bytes) like: 100 104 105 106 107 109 110 113 114 115 118 172
197250	ubelong	>99
19726# pixmap_format; Pixmap format; 0~1-bit (XYBitmap) format 1~single-plane (XYPixmap) 2~bitmap with two or more planes (ZPixmap)
19727>8	ubelong	<3
19728# pixmap_depth; Pixmap depth; value 1 - 32
19729>>12	ubelong	<33
19730# file_version; XWD_FILE_VERSION=7
19731>>>4	ubelong	7
19732# skip DROID fmt-401-signature-id-618.xwd by test for existing border field
19733>>>>96	ubelong	x			X-Window screen dump image data, version X11
19734# ./images (version 1.205) labeled the above entry as "XWD X Window Dump image data"
19735# https://reposcope.com/mimetype/image/x-xwindowdump
19736!:mime	image/x-xwindowdump
19737#!:ext	xwd
19738!:ext	xwd/dmp
19739# https://www.xnview.com/en/image_formats/ NO example with x11 suffix FOUND!
19740#!:ext	xwd/dmp/x11
19741# https://www.nationalarchives.gov.uk/PRONOM/fmt/401 NO example with xdm suffix FOUND!
19742#!:ext	xwd/dmp/x11/xmd
19743# file comment if header > 100; so not in MARBLES.XWD and hardcopy-x-window-v11.xwd
19744>>>>>0	ubelong	>100
19745# comment or windows name
19746>>>>>>100 string	>\0			\b, "%s"
19747# pixmap_width;	pixmap width like: 576 800 1014 1280 1419 NOT -1414812757=abABabABh
19748>>>>>16	ubelong	x			\b, %dx
19749# pixmap_height; pixmap height like: 449 454 600 704 720 1001 1024 NOT -1414812757=abABabABh
19750>>>>>20	ubelong	x			\b%dx
19751# pixmap_depth;	pixmap depth
19752>>>>>12	ubelong	x			\b%d
19753# XOffset; Bitmap X offset; pixel numbers to ignore at the beginning of each scan-line
19754#>>>>>24	ubelong	x			\b, %u ignore
19755# ByteOrder; byte order of image data: 0~least significant byte first 1~most significant byte first
19756>>>>>28	ubelong	>0			\b, order %u
19757# BitmapUnit; bitmap base data size unit in each scan line like: 8 16 32
19758#>>>>>32	ubelong	x			\b, unit %u
19759# BitmapBitOrder; bit-order of image data; apparently same as ByteOrder
19760#>>>>>36	ubelong	x			\b, bit order %u
19761# BitmapPad; number of padding bits added to each scan line like: 8 16 32
19762#>>>>>40	ubelong	x			\b, pad %u
19763# BitsPerPixel; Bits per pixel: 1~StaticGray and GrayScale 2-15~StaticColor and PseudoColor 16,24,32~TrueColor and DirectColor
19764#>>>>>44	ubelong	x			\b, %u bits/pixel
19765# BytesPerLine; size of each scan line in bytes
19766#>>>>>48	ubelong	x			\b, %u bytes/line
19767# VisualClass; class of the image: 0~StaticGray 1~GrayScale 2~StaticColor 3~PseudoColor 4~TrueColor 5~DirectColor
19768#>>>>>52	ubelong	x			\b, %u Class
19769# RedMask; red RGB mask values used by ZPixmaps like: 0 0xff0000
19770#>>>>>56	ubelong	!0			\b, %#x red
19771# GreenMask; green mask like: 0
19772#>>>>>60	ubelong	!0			\b, %#x green
19773# BlueMask; blue mask like: 0 0xff
19774#>>>>>64	ubelong	!0			\b, %#x blue
19775# BitsPerRgb; Size of each color mask in bits like: 0 1 8 24
19776#>>>>>68	ubelong	x			\b, %u bits/RGB
19777# NumberOfColors; number of colors in image like: 256 4 2 0 (WHAT DOES THIS MEAN?)
19778>>>>>72	ubelong	x			\b, %u colors
19779# ColorMapEntries; number of entries in color map like: 256 16 2 0~no color map
19780>>>>>76	ubelong	x			%u entries
19781# WindowWidth; window width
19782#>>>>>80	ubelong	x			\b, %u width
19783# WindowHeight; window height
19784#>>>>>84	ubelong	x			\b, %u height
19785# WindowX; Window upper left X coordinate like: 0 24 32 80 237 290 422 466 568 (lenna.dmp)
19786>>>>>88	ubelong	!0			\b, x=%d
19787# WindowY; Window upper left Y coordinate like: 0 8 18 26 60 73 107 (fig41.xwd) 128
19788>>>>>92	ubelong	!0			\b, y=%d
19789# WindowBorderWidth; Window border width; apparently pixmap_width=WindowWidth+2*WindowBorderWidth
19790# like: 1 (fig41.xwd) 2 (maze.dmp) 3 (lenna.dmp mandrill.dmp)
19791>>>>>96	ubelong	>0			\b, %u border
19792# From:		Joerg Jenderek
19793# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/x/xdm-x10.trid.xml
19794# Note:		called "X-Windows Screen Dump (X10)" by TrID and
19795#		"X-Windows Screen Dump" version X10 by DROID via PUID x-fmt/300
19796#		verfied by XnView `nconvert -in xwd -info *`
19797# HeaderSize is the size of the header in bytes; always 40 for X10 variant
197980	ubelong		=0x000000028
19799# FileVersion; always 6 for X10 variant
19800>4	ubelong		=6
19801# skip DROID x-fmt-300-signature-id-619.xdm by test existing border field
19802>>36	ubeshort	x		X-Window screen dump image data, version X10
19803!:mime	image/x-xwindowdump
19804!:ext	xwd
19805# http://www.nationalarchives.gov.uk/pronom/fmt/401 NO example with xdm suffix FOUND!
19806#!:ext	xwd/xdm
19807# PixmapWidth; pixmap width like: 127 1280
19808>>>20	ubelong		x		\b, %d
19809# PixmapHeight; pixmap height like: 64 1024
19810>>>24	ubelong		x		\bx%d
19811# DisplayPlanes; number of display planes like: 1 4 8
19812>>>12	ubelong		x		\bx%u
19813# DisplayType; display type like: 1 3
19814#>>>8	ubelong		x		\b, type %u
19815# PixmapFormat; pixmap format like: 1~bitmap with two or more planes (ZPixmap) 0~single-plane bitmap (XYBitmap)
19816#>>>16	ubelong	x			\b, %u format
19817# WindowWidth; window width; probably PixmapWidth=WindowWidth+2*WindowBorderWidth
19818#>>>28	ubeshort	x		\b, width %u
19819# WindowHeight;  window height; probably PixmapWidth=PixmapHeight+2*WindowBorderWidth
19820#>>>30	ubeshort	x		\b, height %u
19821# WindowX; window upper left X coordinate like: 0
19822>>>32	ubeshort		!0	\b, x=%d
19823# WindowY; window upper left Y coordinate like: 0
19824>>>34	ubeshort		!0	\b, y=%d
19825# WindowBorderWidth; window border width like: 0
19826>>>36	ubeshort	!0		\b, %u border
19827# WindowNumColors; Number of color entries in window like: 2 16 256
19828#>>>38	ubeshort	x		\b, %u colors
19829# if the image is a PseudoColor image, a color map immediately follows the header. X10COLORMAP[WindowNumColors];
19830# EntryNumber; number of the color-map entry like: 0
19831#>>>40	ubeshort	x		\b, colors #%u
19832# Red; red-channel value
19833#>>>42	ubeshort	!0		\b, red %#x
19834# Green; green-channel value
19835#>>>44	ubeshort	!0		\b, green %#x
19836# Blue; blue-channel value
19837#>>>46	ubeshort	!0		\b, blue %#x
19838# 2ND Entry like: 2
19839#>>>48	ubeshort	x		\b, colors #%u
19840
19841# PDS - Planetary Data System
19842#   These files use Parameter Value Language in the header section.
19843#   Unfortunately, there is no certain magic, but the following
19844#   strings have been found to be most likely.
198450	string	NJPL1I00		PDS (JPL) image data
198462	string	NJPL1I			PDS (JPL) image data
198470	string	CCSD3ZF			PDS (CCSD) image data
198482	string	CCSD3Z			PDS (CCSD) image data
198490	string	PDS_			PDS image data
198500	string	LBLSIZE=		PDS (VICAR) image data
19851
19852# pM8x: ATARI STAD compressed bitmap format
19853#
19854# from Oskar Schirmer <schirmer@scara.com> Feb 2, 2001
19855# p M 8 5/6 xx yy zz data...
19856# Atari ST STAD bitmap is always 640x400, bytewise runlength compressed.
19857# bytes either run horizontally (pM85) or vertically (pM86). yy is the
19858# most frequent byte, xx and zz are runlength escape codes, where xx is
19859# used for runs of yy.
19860#
198610	string	pM85		Atari ST STAD bitmap image data (hor)
19862>5	ubyte	0x00		(white background)
19863>5	ubyte	0xFF		(black background)
198640	string	pM86		Atari ST STAD bitmap image data (vert)
19865>5	ubyte	0x00		(white background)
19866>5	ubyte	0xFF		(black background)
19867
19868# From: Alex Myczko <alex@aiei.ch>
19869# https://www.atarimax.com/jindroush.atari.org/afmtatr.html
198700	uleshort	0x0296		Atari ATR image
19871
19872# URL:		http://fileformats.archiveteam.org/wiki/DEGAS_image
19873# Reference:	https://wiki.multimedia.cx/index.php?title=Degas
19874# From:		Joerg Jenderek
19875#		http://mark0.net/download/triddefs_xml.7z/defs/b
19876#		bitmap-pi2-degas.trid.xml bitmap-pi3-degas.trid.xml
19877#		bitmap-pc1-degas.trid.xml bitmap-pc2-degas.trid.xml bitmap-pc3-degas.trid.xml
19878# Note:		verified by NetPBM `pi3topbm sigirl1.pi3 | file`
19879# 		`deark -m degas -l -d2 ataribak.pi1`
19880#		XnView `nconvert -fullinfo *.p??`
19881# DEGAS low-res uncompressed bitmap *.pi1
198820		beshort		0x0000
19883# skip some ISO 9660 CD-ROM filesystems like plpbt.iso by test for 4 non black colors in palette entries
19884>2		quad		!0
19885# skip g3test.g3 by test for unused bits of 2nd color entry
19886>>4		ubeshort&0xF000	0
19887#>>>0		beshort	x	1ST_VALUE=%x
19888>>>-0		offset	x	FILE_SIZE=%lld
19889# standard DEGAS low-res uncompressed bitmap *.pi1 with file size 32034
19890>>>-0		offset	=32034	VARIANT_STANDARD
19891#>>>>0		beshort	x	1st_VALUE=%x
19892# like: 8ball.pi1 teddy.pi1 sonic01.pi1
19893>>>>0		use		degas-bitmap
19894# about 61 DEGAS Elite low-res uncompressed bitmap *.pi1 with file size 32066
19895>>>-0		offset	=32066	VARIANT_ELITE
19896# like: spider.pi1 pinkgirl.pi1 frog3.pi1
19897>>>>0		use		degas-bitmap
19898# about 55 DEGAS Elite low-res uncompressed bitmap *.pi1 with file size 32128
19899>>>-0		offset	=32128	VARIANT_3
19900# like: mountain.pi1 bigspid.pi1 alf33.pi1
19901>>>>0		use		degas-bitmap
19902# 1 DEGAS Elite low-res uncompressed bitmap *.pi1 with file size 44834
19903>>>-0		offset	=44834	VARIANT_4
19904# like: kenshin.pi1
19905>>>>0		use		degas-bitmap
19906# DEGAS mid-res uncompressed bitmap *.pi2 (strength=50) after GEM Images like:
19907# BEETHVEN.IMG CHURCH.IMG GAMEOVR4.IMG TURKEY.IMG clinton.img
199080		beshort		0x0001
19909#!:strength +0
19910# skip many control files like gnucash-4.8.setup.exe.aria2 by test for non black in 4 palette entries
19911>2		quad		!0
19912# skip control file load-v0001.aria2 by test for unused bits of 5th color palette entry
19913>>10		ubeshort&0xF000	0
19914# skip many GEM Image data like DANCER.IMG GAMEOVR4.IMG SHIP.IMG by test for unused bits of 8th color palette entry
19915>>>16		ubeshort&0xF000	0
19916# skip many GEM Image data like BEETHVEN.IMG CABINETS.IMG MEMO.IMG by test for unused bits of 14th color palette entry
19917>>>>28		ubeshort&0xF000	0
19918# skip few GEM Image data like CHURCH.IMG by test for unused bits of 15th color palette entry
19919>>>>>30		ubeshort&0xF000	0
19920# skip many GEM Image data like TIGER.IMG TURKEY.IMG XMAS.IMG by test for unused bits of 16th color palette entry
19921>>>>>>32	ubeshort&0xF000	0
19922# skip GEM Image data like clinton.img by test for existing bytes at the end
19923>>>>>>>32026	quad		x
19924>>>>>>>>0	use		degas-bitmap
19925# DEGAS high-res uncompressed bitmap *.pi3
199260	beshort		0x0002
19927# skip Intel ia64 COFF msvcrt.lib by test for unused bits of 1st atari color palette entry
19928>2		ubeshort&0xF000	0
19929# skip few Adobe PhotoShop Brushes like Faux-Spitzen.abr by check
19930# for invalid Adobe PhotoShop Brush UTF16-LE string length
19931>>19		ubyte			=0
19932# many like: 4th_ofj2.pi3 GEMINI03.PI3 PEOPLE18.PI3 POWERFIX.PI3 abydos.pi3 highres.pi3 sigirl1.pi3 vanna5.pi3
19933>>>0		use		degas-bitmap
19934# Adobe PhotoShop Brush UTF16-LE string length 15 "Gitter - klein " 8 "Kreis 1 "
19935>>19		ubyte			!0
19936#>>19		ubyte			!0	\b, NOTE LENGTH %u
19937#>>>21		lestring16		x	\b, BRUSH NOTE "%s"
19938>>>(19.b*2)	ubequad			x
19939# maybe last character of Adobe PhotoShop Brush UTF16-LE string and terminating nul char like
19940# 006e0000 for n in "Faux-Spitzen.abr" 00310000 for 1 in "Verschiedene Spitzen.abr"
19941# 00000000 "LEREDACT.PI3" 03730773 "TBX_DEMO.PI3"
19942#>>>>&8		ubelong			x	\b, LAST CHAR+NIL %8.8x
19943>>>>&8		ubelong&0xff00ffFF	!0
19944# 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
19945>>>>>0		use		degas-bitmap
19946# test for last character of Adobe PhotoShop Brush UTF16-LE string and terminating nul char
19947>>>>&8		ubelong&0xff00ffFF	=0
19948# select last DEGAS bitmaps by invalid last char of brush note like BASICNES.PI3 DB_HELP.PI3 DB_WRITR.PI3 LEREDACT.PI3
19949>>>>>&-4	ubelong&0x00FF0000	<0x00200000
19950>>>>>>0		use		degas-bitmap
19951# last character of Adobe PhotoShop Brush UTF16-LE note
19952#>>>>>&-4	ubelong&0x00FF0000	>0x001F0000	\b, THAT IS ABR
19953# DEGAS low-res compressed bitmap *.pc1 like: BATTLSHP.PC1 GNUCHESS.PC1 MEDUSABL.PC1 MOONLORD.PC1 WILDROSE.PC1
199540		beshort			0x8000
19955# skip lif files handled via ./lif by test for unused bits of 1st palette entry
19956>2		ubeshort&0xF000		0
19957>>0		use		degas-bitmap
19958# DEGAS mid-res compressed bitmap *.pc2 like: abydos.pc2 ARTIS3.PC2 SMTHDRAW.PC2 STAR_2K.PC2 TX2_DEMO.PC2
199590		beshort			0x8001
19960>0		use		degas-bitmap
19961# DEGAS high-res compressed bitmap *.pc3 like: abydos.pc3 COYOTE.PC3 ELEPHANT.PC3 TX2_DEMO.PC3 SMTHDRAW.PC3
199620		beshort			0x8002
19963>0		use		degas-bitmap
19964# display information of Atari DEGAS and DEGAS Elite bitmap images
199650	name		degas-bitmap
19966>0	ubyte		x		Atari DEGAS
19967#!:mime	application/octet-stream
19968!:mime	image/x-atari-degas
19969# compressed
19970>0	ubyte		=0x80		Elite compressed
19971# uncompressed
19972#>0	ubyte		=0x00		uncompressed
19973#>0	ubyte		=0x00		un.
19974>0	ubyte		=0x00
19975# check for existence of footer for DEGAS Elite images
19976>>32042	ubequad		x		Elite
19977>0	beshort		0x0000		bitmap
19978!:ext	pi1
19979>0	beshort		0x0001		bitmap
19980!:ext	pi2
19981>0	beshort		0x0002		bitmap
19982# no example with SUH extension found
19983#!:ext	pi3/suh
19984!:ext	pi3
19985>0	beshort		0x8000		bitmap
19986!:ext	pc1
19987>0	beshort		0x8001		bitmap
19988!:ext	pc2
19989>0	beshort		0x8002		bitmap
19990!:ext	pc3
19991# low resolution; 320x200, 16 colors
19992>1	ubyte		=0		320 x 200 x 16
19993# medium resolution; 640x200, 4 colors
19994>1	ubyte		=1		640 x 200 x 4
19995# high resolution; 640x400, 2 colors
19996>1	ubyte		=2		640 x 400 x 2
19997# http://fileformats.archiveteam.org/wiki/Atari_ST_color_palette
19998# hardware_palette[16]; 9 bit ?????RRR?GGG?BBB; 12 bit ????RRRRGGGGBBBB for Atari STE
19999# for Atari DEGAS apparently no Spectrum 512 Enhanced 15 bit palette RGB?RRRRGGGGBBBB
20000# Red Green Blue unused bit ? often 0 but not bilboule.pi1; color_value (examples or numbers)
20001# 1st color palette entry like: 0777 (61) 0fff (LEREDACT.PI3) 0fcf (devgem7.pi3) 0001 (9)
20002>2	ubeshort	x		\b, color palette %4.4x
20003# 2nd palette entry like: 0000 (32) 0700 (38) 0f00 (LEREDACT.PI3 devgem7.pi3)
20004>4	ubeshort	x		%4.4x
20005# 3rd palette entry
20006>6	ubeshort	x		%4.4x
20007# 4th palette entry like: 0000 (72)
20008>8	ubeshort	x		%4.4x
20009# 5th palette entry
20010>10	ubeshort	x		%4.4x
20011>2	ubeshort	x		...
20012# 6th palette entry
20013#>12	ubeshort	x		%4.4x
20014# 7th palette entry like: 0000 (16) 0001 (ELMRSESN.PI3 elmrsesn.pi3) 0070 (51) 00f0 (BASICNES.PI3 LEREDACT.PI3) 00f8 (devgem7.pi3)
20015#>14	ubeshort	x		%4.4x
20016# 8th palette entry
20017#>16	ubeshort	x		%4.4x
20018# 9 palette entry
20019#>18	ubeshort	x		%4.4x
20020# 10 palette entry
20021#>20	ubeshort	x		%4.4x
20022# 11 palette entry
20023#>22	ubeshort	x		%4.4x
20024# 12 palette entry
20025#>24	ubeshort	x		%4.4x
20026# 13 palette entry
20027#>26	ubeshort	x		%4.4x
20028# 14th palette entry
20029#>28	ubeshort	x		%4.4x
20030# 15th palette entry
20031#>30	ubeshort	x		%4.4x
20032# 16th palette entry
20033#>32	ubeshort	x		%4.4x
20034# data[16000] for uncompressed images; pixel data
20035#>34	ubequad		x		\b, DATA %#16.16llx...
20036# footer for Elite variant images
20037# https://www.fileformat.info/format/atari/egff.htm
20038# https://pulkomandy.tk/projects/GrafX2/wiki/Develop/FileFormats/Atari
20039# left_color_animation[4]; like: 0000000000000000 0000000100020003 fffafff000000030 (bigspid.pi1)
20040#>32034  ubequad		!0		\b, color animations %16.16llx (left)
20041# right_color_animation[4]; like: 0000000000000000 0000000100020003
20042#>>32042  ubequad	!0		%16.16llx (right)
20043# channel_direction[4]; 0~left 1~none 2~right like: 0001000100010001 0002000000010001 (cycle2.pi1)
20044# sometimes unexpected like: feaafc0000000000 (bigspid.pi1)
20045#>32050  ubequad		!0		\b, channel directions %16.16llx
20046# channel_delay[4]; 128 - channel delay, timebase 1/60 s
20047#>32058  ubequad		!0		\b, channel delays %16.16llx
20048
20049# From:		Joerg Jenderek
20050# URL:		http://fileformats.archiveteam.org/wiki/ImageLab/PrintTechnic
20051# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-b_w.trid.xml
20052# Note:		called "ImageLab bitmap" by TrID
20053#		verfied by XnView `nconvert -fullinfo "MAEDCHEN.B&W"`
200540	string		B&W256	ImageLab bitmap
20055!:mime	image/x-ilab
20056#	https://www.xnview.com/de/image_formats/
20057# GRR: add char & inside parse_ext in ../../src/apprentice.c to avoid in file version 5.40 error like:
20058# Magdir\images, 1090: Warning: EXTENSION type `        b_w/b&w' has bad char '&'
20059!:ext	b_w/b&w
20060# Width
20061>6	ubeshort	x	\b, %u
20062# Height
20063>8	ubeshort	x	x %u
20064
20065# XXX:
20066# This is bad magic 0x5249 == 'RI' conflicts with RIFF and other
20067# magic.
20068# SGI RICE image file <mpruett@sgi.com>
20069#0	ubeshort	0x5249		RICE image
20070#>2	ubeshort	x		v%d
20071#>4	ubeshort	x		(%d x
20072#>6	ubeshort	x		%d)
20073#>8	ubeshort	0		8 bit
20074#>8	ubeshort	1		10 bit
20075#>8	ubeshort	2		12 bit
20076#>8	ubeshort	3		13 bit
20077#>10	ubeshort	0		4:2:2
20078#>10	ubeshort	1		4:2:2:4
20079#>10	ubeshort	2		4:4:4
20080#>10	ubeshort	3		4:4:4:4
20081#>12	ubeshort	1		RGB
20082#>12	ubeshort	2		CCIR601
20083#>12	ubeshort	3		RP175
20084#>12	ubeshort	4		YUV
20085
20086# PCX image files
20087# From: Dan Fandrich <dan@coneharvesters.com>
20088# updated by Joerg Jenderek at Feb 2013 by https://de.wikipedia.org/wiki/PCX
20089# https://web.archive.org/web/20100206055706/http://www.qzx.com/pc-gpe/pcx.txt
20090# GRR: original test was still too general as it catches xbase examples T5.DBT,T6.DBT with 0xa000000
20091# 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
200920	ubelong&0xffF8fe00	0x0a000000
20093# for PCX bit depth > 0
20094>3	ubyte		>0
20095# test for valid versions
20096>>1	ubyte		<6
20097>>>1	ubyte		!1	PCX
20098!:mime	image/x-pcx
20099#!:mime	image/pcx
20100>>>>1	ubyte		0	ver. 2.5 image data
20101>>>>1	ubyte		2	ver. 2.8 image data, with palette
20102>>>>1	ubyte		3	ver. 2.8 image data, without palette
20103>>>>1	ubyte		4	for Windows image data
20104>>>>1	ubyte		5	ver. 3.0 image data
20105>>>>4	uleshort	x	bounding box [%d,
20106>>>>6	uleshort	x	%d] -
20107>>>>8	uleshort	x	[%d,
20108>>>>10	uleshort	x	%d],
20109>>>>65	ubyte		>1	%d planes each of
20110>>>>3	ubyte		x	%d-bit
20111>>>>68	ubyte		1	colour,
20112>>>>68	ubyte		2	grayscale,
20113# this should not happen
20114>>>>68	default		x	image,
20115>>>>12	uleshort	>0	%d x
20116>>>>>14	uleshort	x	%d dpi,
20117>>>>2	ubyte		0	uncompressed
20118>>>>2	ubyte		1	RLE compressed
20119
20120# Adobe Photoshop
20121# From: Asbjoern Sloth Toennesen <asbjorn@lila.io>
20122# URL: 		http://fileformats.archiveteam.org/wiki/PSD
20123# Reference:	https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/
20124# Note:		verfied by XnView `nconvert -fullinfo *.psd *.psb *.pdd`
20125#		and ImageMagick `identify -verbose *.pdd`
201260	string		8BPS
20127# skip DROID x-fmt-92-signature-id-277.psd by checking valid width
20128>18	ubelong		>0	Adobe Photoshop
20129!:mime	image/vnd.adobe.photoshop
20130!:apple	????8BPS
20131# version: always equal to 1, but 2 for PSB
20132>>4   beshort 1
20133# URL: 		http://fileformats.archiveteam.org/wiki/PhotoDeluxe
20134# EXTRAS/PHOTOS/DEMOPIX/ORIGINAL.PDD
20135>>>34	search/0xC0d7	PHUT	Image (PhotoDeluxe)
20136!:ext	pdd
20137>>>34	default		x	Image
20138!:ext	psd
20139# URL: 		http://fileformats.archiveteam.org/wiki/PSB
20140>>4   beshort 2 Image (PSB)
20141!:ext	psb
20142# width in pixels: 1-30000 1-300000 for PSB
20143>>18  belong  x \b, %d x
20144>>14  belong  x %d,
20145# The color mode; 0~Bitmap 1~Grayscale 2~Indexed 3~RGB 4~CMYK 7~Multichannel 9~Duotone 9~Lab
20146>>24  beshort 0 bitmap
20147>>24  beshort 1 grayscale
20148# the number of channels; range is 1 to 56
20149>>>12 beshort 2 with alpha
20150>>24  beshort 2 indexed
20151>>24  beshort 3 RGB
20152>>>12 beshort 4 \bA
20153>>24  beshort 4 CMYK
20154>>>12 beshort 5 \bA
20155>>24  beshort 7 multichannel
20156>>24  beshort 8 duotone
20157>>24  beshort 9 lab
20158>>12  beshort > 1
20159>>>12 beshort x \b, %dx
20160>>12  beshort 1 \b,
20161>>22  beshort x %d-bit channel
20162>>12  beshort > 1 \bs
20163# 6 reserved bytes; must be zero, but spaces inside ImageMagick input.psd
20164# https://download.imagemagick.org/ImageMagick/download/ImageMagick-7.0.11-11.zip
20165# ImageMagick-7.0.11-11\PerlMagick\t\input.psd
20166>>6   bequad&0xFFffFFffFFff0000 !0 \b, at offset 6
20167>>>6  belong  x	 0x%8.8x
20168>>>6  beshort x   \b%4.4x
20169
20170# XV thumbnail indicator (ThMO)
20171# URL:		https://en.wikipedia.org/wiki/Xv_(software)
20172# Reference:	http://fileformats.archiveteam.org/wiki/XV_thumbnail
20173# Update:	Joerg Jenderek
201740	string		P7\ 332		XV thumbnail image data
20175#0	string		P7\ 332		XV "thumbnail file" (icon) data
20176!:mime	image/x-xv-thumbnail
20177# thumbnail .xvpic/foo.bar for graphic foo.bar
20178!:ext	p7/gif/tif/xpm/jpg
20179
20180# NITF is defined by United States MIL-STD-2500A
201810	string	NITF	National Imagery Transmission Format
20182>25	string	>\0	dated %.14s
20183
20184# GEM Image: Version 1, Headerlen 8 (Wolfram Kleff)
20185# Format variations from: Bernd Nuernberger <bernd.nuernberger@web.de>
20186# Update: Joerg Jenderek
20187# See http://fileformats.archiveteam.org/wiki/GEM_Raster
20188# For variations, also see:
20189#    https://www.seasip.info/Gem/ff_img.html (Ventura)
20190#    http://www.atari-wiki.com/?title=IMG_file (XIMG, STTT)
20191#    http://www.fileformat.info/format/gemraster/spec/index.htm (XIMG, STTT)
20192#    http://sylvana.net/1stguide/1STGUIDE.ENG (TIMG)
201930       beshort     0x0001
20194# header_size
20195>2      beshort     0x0008
20196>>0     use gem_info
20197>2      beshort     0x0009
20198>>0     use gem_info
20199# no example for NOSIG
20200>2      beshort     24
20201>>0     use gem_info
20202# no example for HYPERPAINT
20203>2      beshort     25
20204>>0     use gem_info
2020516      string      XIMG\0
20206>0      use gem_info
20207# no example
2020816      string      STTT\0\x10
20209>0      use gem_info
20210# no example or description
2021116      string      TIMG\0
20212>0      use gem_info
20213
202140   name        gem_info
20215# version is 2 for some XIMG and 1 for all others
20216>0	ubeshort		<0x0003		GEM
20217# https://www.snowstone.org.uk/riscos/mimeman/mimemap.txt
20218!:mime	image/x-gem
20219# header_size 24 25 27 59 779 words for colored bitmaps
20220>>2	ubeshort	>9
20221>>>16	string		STTT\0\x10	STTT
20222>>>16	string		TIMG\0		TIMG
20223# HYPERPAINT or NOSIG variant
20224>>>16	string		\0\x80
20225>>>>2	ubeshort	=24		NOSIG
20226>>>>2	ubeshort	!24		HYPERPAINT
20227# NOSIG or XIMG variant
20228>>>16	default		x
20229>>>>16	string		!XIMG\0		NOSIG
20230>>16	string		=XIMG\0		XIMG Image data
20231!:ext	img/ximg
20232# to avoid Warning: Current entry does not yet have a description for adding a EXTENSION type
20233>>16	string		!XIMG\0		Image data
20234!:ext	img
20235# header_size is 9 for Ventura files and 8 for other GEM Paint files
20236>>2	ubeshort	9		(Ventura)
20237#>>2	ubeshort	8		(Paint)
20238>>12	ubeshort	x		%d x
20239>>14	ubeshort	x		%d,
20240# 1 4 8
20241>>4	ubeshort	x		%d planes,
20242# in tenths of a millimetre
20243>>8	ubeshort	x		%d x
20244>>10	ubeshort	x		%d pixelsize
20245# pattern_size 1-8. 2 for GEM Paint
20246>>6	ubeshort	!2		\b, pattern size %d
20247
20248# GEM Metafile (Wolfram Kleff)
202490	ulelong		0x0018FFFF	GEM Metafile data
20250>4	uleshort	x		version %d
20251
20252#
20253# SMJPEG. A custom Motion JPEG format used by Loki Entertainment
20254# Software Torbjorn Andersson <d91tan@Update.UU.SE>.
20255#
202560	string	\0\nSMJPEG	SMJPEG
20257>8	ubelong	x		%d.x data
20258# According to the specification you could find any number of _TXT
20259# headers here, but I can't think of any way of handling that. None of
20260# the SMJPEG files I tried it on used this feature. Even if such a
20261# file is encountered the output should still be reasonable.
20262>16	string		_SND		\b,
20263>>24	ubeshort	>0		%d Hz
20264>>26	ubyte		8		8-bit
20265>>26	ubyte		16		16-bit
20266>>28	string		NONE		uncompressed
20267# >>28	string		APCM		ADPCM compressed
20268>>27	ubyte		1		mono
20269>>28	ubyte		2		stereo
20270# Help! Isn't there any way to avoid writing this part twice?
20271# Yes, use a name/use
20272>>32	string		_VID		\b,
20273# >>>48	string		JFIF		JPEG
20274>>>40	ubelong		>0		%d frames
20275>>>44	ubeshort	>0		(%d x
20276>>>46	ubeshort	>0		%d)
20277>16	string		_VID		\b,
20278# >>32	string		JFIF		JPEG
20279>>24	ubelong		>0		%d frames
20280>>28	ubeshort	>0		(%d x
20281>>30	ubeshort	>0		%d)
20282
202830	string	Paint\ Shop\ Pro\ Image\ File	Paint Shop Pro Image File
20284
20285# taken from fkiss: (<yav@mte.biglobe.ne.jp> ?)
202860	string		KiSS		KISS/GS
20287>4	ubyte		16		color
20288>>5	ubyte		x		%d bit
20289>>8	uleshort	x		%d colors
20290>>10	uleshort	x		%d groups
20291>4	ubyte		32		cell
20292>>5	ubyte		x		%d bit
20293>>8	uleshort	x		%d x
20294>>10	uleshort	x		%d
20295>>12	uleshort	x		+%d
20296>>14	uleshort	x		+%d
20297
20298# Webshots (www.webshots.com), by John Harrison
202990       string          C\253\221g\230\0\0\0 Webshots Desktop .wbz file
20300
20301# Hercules DASD image files
20302# From Jan Jaeger <jj@septa.nl> and Jay Maynard <jaymaynard@gmail.com>
203030       string  CKD_P370        Hercules CKD DASD image file
20304>8      lelong  x               \b, %d heads per cylinder
20305>12     lelong  x               \b, track size %d bytes
20306>16     byte    x               \b, device type 33%2.2X
20307
203080       string  CKD_C370        Hercules compressed CKD DASD image file
20309>8      lelong  x               \b, %d heads per cylinder
20310>12     lelong  x               \b, track size %d bytes
20311>16     byte    x               \b, device type 33%2.2X
20312>552    lelong  x               \b, %d total cylinders
20313>>557   byte    0               \b, no compression
20314>>557   byte    1               \b, ZLIB compression
20315>>557   byte    2               \b, BZ2 compression
20316
203170       string  CKD_S370        Hercules CKD DASD shadow file
20318>8      lelong  x               \b, %d heads per cylinder
20319>12     lelong  x               \b, track size %d bytes
20320>16     byte    x               \b, device type 33%2.2X
20321
203220       string  CKD_P064        Hercules CKD64 DASD image file
20323>8      lelong  x               \b, %d heads per cylinder
20324>12     lelong  x               \b, track size %d bytes
20325>16     byte    x               \b, device type 33%2.2X
20326
203270       string  CKD_C064        Hercules compressed CKD64 DASD image file
20328>8      lelong  x               \b, %d heads per cylinder
20329>12     lelong  x               \b, track size %d bytes
20330>16     byte    x               \b, device type 33%2.2X
20331>524    lelong  x               \b, %d total cylinders
20332>>585   byte    0               \b, no compression
20333>>585   byte    1               \b, ZLIB compression
20334>>585   byte    2               \b, BZ2 compression
20335
203360       string  CKD_S064        Hercules CKD64 DASD shadow file
20337>8      lelong  x               \b, %d heads per cylinder
20338>12     lelong  x               \b, track size %d bytes
20339>16     byte    x               \b, device type 33%2.2X
20340
20341# Squeak images and programs - etoffi@softhome.net
203420	string		\146\031\0\0	Squeak image data
203430	search/1	'From\040Squeak	Squeak program text
20344
20345# partimage: file(1) magic for PartImage files (experimental, incomplete)
20346# Author: Hans-Joachim Baader <hjb@pro-linux.de>
203470		string	PaRtImAgE-VoLuMe	PartImage
20348>0x0020		string	0.6.1		file version %s
20349>>0x0060	ulelong	>-1		volume %d
20350#>>0x0064 8 byte identifier
20351#>>0x007c reserved
20352>>0x0200	string	>\0		type %s
20353>>0x1400	string	>\0		device %s,
20354>>0x1600	string	>\0		original filename %s,
20355# Some fields omitted
20356>>0x2744	ulelong	0		not compressed
20357>>0x2744	ulelong	1		gzip compressed
20358>>0x2744	ulelong	2		bzip2 compressed
20359>>0x2744	ulelong	>2		compressed with unknown algorithm
20360>0x0020		string	>0.6.1		file version %s
20361>0x0020		string	<0.6.1		file version %s
20362
20363# DCX is multi-page PCX, using a simple header of up to 1024
20364# offsets for the respective PCX components.
20365# From: Joerg Wunsch <joerg_wunsch@uriah.heep.sax.de>
20366# Update:	Joerg Jenderek
20367# URL:		http://fileformats.archiveteam.org/wiki/DCX
203680	ulelong	987654321	DCX multi-page
20369# http://www.nationalarchives.gov.uk/pronom/x-fmt/348
20370!:mime	image/x-dcx
20371!:ext	dcx
20372# The first file offset usually starts at file offset 0x1004
20373# print 1 space after 0x100? offset and then handles PCX images by ./images
20374>4	ulelong	x		\b, at %#x
20375>(4.l)	indirect		x
20376# possible 2nd PCX image
20377#>8	ulelong	!0		\b, at %#x
20378#>>(8.l)	indirect		x
20379# possible 3rd PCX image
20380#>12	ulelong	!0		\b, at %#x
20381#>>(12.l)	indirect		x
20382
20383# Simon Walton <simonw@matteworld.com>
20384# Kodak Cineon format for scanned negatives
20385# http://www.kodak.com/US/en/motion/support/dlad/
203860	ulelong  0xd75f2a80	Cineon image data
20387>200	ubelong  >0		\b, %d x
20388>204	ubelong  >0		%d
20389
20390
20391# Bio-Rad .PIC is an image format used by microscope control systems
20392# and related image processing software used by biologists.
20393# From: Vebjorn Ljosa <vebjorn@ljosa.com>
20394# BOOL values are two-byte integers; use them to rule out false positives.
20395# https://web.archive.org/web/20050317223257/www.cs.ubc.ca/spider/ladic/text/biorad.txt
20396# Samples: https://www.loci.wisc.edu/software/sample-data
2039714	uleshort	<2
20398>62	uleshort	<2
20399>>54	uleshort	12345		Bio-Rad .PIC Image File
20400>>>0	uleshort	>0		%d x
20401>>>2	uleshort	>0		%d,
20402>>>4	uleshort	=1		1 image in file
20403>>>4	uleshort	>1		%d images in file
20404
20405# From Jan "Yenya" Kasprzak <kas@fi.muni.cz>
20406# The description of *.mrw format can be found at
20407# http://www.dalibor.cz/minolta/raw_file_format.htm
204080	string	\000MRM			Minolta Dimage camera raw image data
20409
20410# Summary: DjVu image / document
20411# Extension: .djvu
20412# Reference: http://djvu.org/docs/DjVu3Spec.djvu
20413# Submitted by: Stephane Loeuillet <stephane.loeuillet@tiscali.fr>
20414# Modified by (1): Abel Cheung <abelcheung@gmail.com>
204150	string	AT&TFORM
20416>12	string	DJVM		DjVu multiple page document
20417!:mime	image/vnd.djvu
20418>12	string	DJVU		DjVu image or single page document
20419!:mime	image/vnd.djvu
20420>12	string	DJVI		DjVu shared document
20421!:mime	image/vnd.djvu
20422>12	string	THUM		DjVu page thumbnails
20423!:mime	image/vnd.djvu
20424
20425# Originally by Marc Espie
20426# Modified by Robert Minsk <robertminsk at yahoo.com>
20427# https://www.openexr.com/openexrfilelayout.pdf
204280	ulelong		20000630	OpenEXR image data,
20429!:mime image/x-exr
20430>4	ulelong&0x000000ff x		version %d,
20431>4	ulelong		^0x00000200	storage: scanline
20432>4	ulelong		&0x00000200	storage: tiled
20433>8	search/0x1000	compression\0	\b, compression:
20434>>&16	ubyte		0		none
20435>>&16	ubyte		1		rle
20436>>&16	ubyte		2		zips
20437>>&16	ubyte		3		zip
20438>>&16	ubyte		4		piz
20439>>&16	ubyte		5		pxr24
20440>>&16	ubyte		6		b44
20441>>&16	ubyte		7		b44a
20442>>&16	ubyte		8		dwaa
20443>>&16	ubyte		9		dwab
20444>>&16	ubyte		>9		unknown
20445>8	 search/0x1000	dataWindow\0	\b, dataWindow:
20446>>&10	ulelong		x		(%d
20447>>&14	ulelong		x		%d)-
20448>>&18	ulelong		x		\b(%d
20449>>&22	ulelong		x		%d)
20450>8	search/0x1000	displayWindow\0	\b, displayWindow:
20451>>&10	ulelong		x		(%d
20452>>&14	ulelong		x		%d)-
20453>>&18	ulelong		x		\b(%d
20454>>&22	ulelong		x		%d)
20455>8	search/0x1000	lineOrder\0	 \b, lineOrder:
20456>>&14	ubyte		0		increasing y
20457>>&14	ubyte		1		decreasing y
20458>>&14	ubyte		2		random y
20459>>&14	ubyte		>2		unknown
20460
20461# SMPTE Digital Picture Exchange Format, SMPTE DPX
20462#
20463# ANSI/SMPTE 268M-1994, SMPTE Standard for File Format for Digital
20464# Moving-Picture Exchange (DPX), v1.0, 18 February 1994
20465# Robert Minsk <robertminsk at yahoo.com>
20466# Modified by Harry Mallon <hjmallon at gmail.com>
204670	string		SDPX	DPX image data, big-endian,
20468!:mime image/x-dpx
20469>0	use		dpx_info
204700	string		XPDS	DPX image data, little-endian,
20471!:mime image/x-dpx
20472>0	use		\^dpx_info
20473
204740	name		dpx_info
20475>768	ubeshort	<4
20476>>772	ubelong		x	%dx
20477>>776	ubelong		x	\b%d,
20478>768	ubeshort	>3
20479>>776	ubelong		x	%dx
20480>>772	ubelong		x	\b%d,
20481>768	ubeshort	0	left to right/top to bottom
20482>768	ubeshort	1	right to left/top to bottom
20483>768	ubeshort	2	left to right/bottom to top
20484>768	ubeshort	3	right to left/bottom to top
20485>768	ubeshort	4	top to bottom/left to right
20486>768	ubeshort	5	top to bottom/right to left
20487>768	ubeshort	6	bottom to top/left to right
20488>768	ubeshort	7	bottom to top/right to left
20489
20490# From: Tom Hilinski <tom.hilinski@comcast.net>
20491# Update:	Joerg Jenderek
20492# URL: 		https://en.wikipedia.org/wiki/NetCDF
20493#		http://fileformats.archiveteam.org/wiki/NetCDF
20494# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/n/netcdf.trid.xml
20495#		https://www.loc.gov/preservation/digital/formats/fdd/fdd000330.shtml
20496# Note:		called "NetCDF Network Common Data Form" by TrID and
20497#		"netCDF-3 Classic" by DROID via PUID fmt/282
20498# https://www.unidata.ucar.edu/packages/netcdf/
204990	string	CDF\001
20500# skip DROID fmt-282-signature-id-298.nc by test for more content bytes
20501>3	uleshort	>0		NetCDF Data Format data
20502#!:mime	application/netcdf
20503# https://reposcope.com/mimetype/application/x-netcdf
20504!:mime	application/x-netcdf
20505!:ext	nc
20506# https://fileinfo.com/extension/cdf
20507# https://www.file-extensions.org/cdf-file-extension-unidata-network-common-data-form
20508# in 1994 changed from CDF to NC file extension avoid a clash with other file formats
20509#!:ext	nc/cdf
20510# 64-bit offset netcdf Classic https://www.unidata.ucar.edu/software/netcdf/docs/file_format_specifications
20511# Note:		called "netCDF-3 64-bit" by DROID via PUID fmt/283
205120	string	CDF\002
20513# skip DROID fmt-283-signature-id-299.nc by test for more content bytes
20514>3	uleshort	>0		NetCDF Data Format data (64-bit offset)
20515#!:mime	application/netcdf
20516!:mime	application/x-netcdf
20517!:ext	nc
20518
20519# From: Michael Liu
20520# https://en.wikipedia.org/wiki/Common_Data_Format
205210	ubelong	0xCDF30001	Common Data Format (Version 3 or later) data
20522!:mime  application/x-cdf
20523
205240	ubelong	0xCDF26002	Common Data Format (Version 2.6 or 2.7) data
20525!:mime  application/x-cdf
20526
205270	ubelong	0x0000FFFF	Common Data Format (Version 2.5 or earlier) data
20528!:mime  application/x-cdf
20529
20530# Hierarchical Data Format, used to facilitate scientific data exchange
20531# specifications at http://hdf.ncsa.uiuc.edu/
20532# URL: 		http://fileformats.archiveteam.org/wiki/HDF
20533#		https://en.wikipedia.org/wiki/Hierarchical_Data_Format
20534# Reference:	https://portal.hdfgroup.org/download/attachments/52627880/HDF5_File_Format_Specification_Version-3.0.pdf
205350	ubelong	0x0e031301	Hierarchical Data Format (version 4) data
20536!:mime	application/x-hdf
20537!:ext	hdf/hdf4/h4
205380	string	\211HDF\r\n\032\n	Hierarchical Data Format (version 5) data
20539#!:mime	application/x-hdf
20540!:mime	application/x-hdf5
20541!:ext	h5/hdf5/hdf/he5
20542512	string	\211HDF\r\n\032\n
20543# skip Matlab v5 mat-file testhdf5_7.4_GLNX86.mat handled by ./mathematica
20544>0	string	!MATLAB			Hierarchical Data Format (version 5) with 512 bytes user block
20545#!:mime	application/x-hdf
20546!:mime	application/x-hdf5
20547!:ext	h5/hdf5/hdf/he5
205481024	string	\211HDF\r\n\032\n	Hierarchical Data Format (version 5) with 1k user block
20549#!:mime	application/x-hdf
20550!:mime	application/x-hdf5
20551!:ext	h5/hdf5/hdf/he5
205522048	string	\211HDF\r\n\032\n	Hierarchical Data Format (version 5) with 2k user block
20553#!:mime	application/x-hdf
20554!:mime	application/x-hdf5
20555!:ext	h5/hdf5/hdf/he5
205564096	string	\211HDF\r\n\032\n	Hierarchical Data Format (version 5) with 4k user block
20557#!:mime	application/x-hdf
20558!:mime	application/x-hdf5
20559!:ext	h5/hdf5/hdf/he5
20560
20561# From: Tobias Burnus <burnus@net-b.de>
20562# Xara (for a while: Corel Xara) is a graphic package, see
20563# http://www.xara.com/ for Windows and as GPL application for Linux
205640	string	XARA\243\243	Xara graphics file
20565
20566# From:		Joerg Jenderek
20567# URL:		http://fileformats.archiveteam.org/wiki/Corel_Gallery
20568# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/b/bmf-corel.trid.xml
20569# Note:		called "Corel Binary Material Format" by TrID and
20570# 		"Corel Flow" by XnView
205710	string	@CorelBMF\n\rCorel\040Corporation 	Corel GALLERY Clipart
20572!:mime	image/x-corel-bmf
20573!:ext	bmf
20574
20575# https://www.cartesianinc.com/Tech/
20576# Reference:	http://fileformats.archiveteam.org/wiki/Cartesian_Perceptual_Compression
205770	string	CPC\262		Cartesian Perceptual Compression image
20578!:mime	image/x-cpi
20579!:ext	cpi/cpc
20580
20581# From Albert Cahalan <acahalan@gmail.com>
20582# puredigital used it for the CVS disposable camcorder
20583#8       lelong		4       ZBM bitmap image data
20584#>4      uleshort	x       %u x
20585#>6      uleshort	x       %u
20586
20587# From Albert Cahalan <acahalan@gmail.com>
20588# uncompressed 5:6:5 HighColor image for OLPC XO firmware icons
205890       string		C565     OLPC firmware icon image data
20590>4      uleshort	x       %u x
20591>6      uleshort	x       %u
20592
20593# Applied Images - Image files from Cytovision
20594# Gustavo Junior Alves <gjalves@gjalves.com.br>
205950	string	\xce\xda\xde\xfa	Cytovision Metaphases file
205960	string	\xed\xad\xef\xac	Cytovision Karyotype file
205970	string	\x0b\x00\x03\x00	Cytovision FISH Probe file
205980	string	\xed\xfe\xda\xbe	Cytovision FLEX file
205990	string	\xed\xab\xed\xfe	Cytovision FLEX file
206000	string	\xad\xfd\xea\xad	Cytovision RATS file
20601
20602# Wavelet Scalar Quantization format used in gray-scale fingerprint images
20603# From Tano M Fotang <mfotang@quanteq.com>
206040	string	\xff\xa0\xff\xa8\x00	Wavelet Scalar Quantization image data
20605
20606# Type:		PCO B16 image files
20607# URL:		http://www.pco.de/fileadmin/user_upload/db/download/MA_CWDCOPIE_0412b.pdf
20608# From:		Florian Philipp <florian.philipp@binarywings.net>
20609# Extension:	.b16
20610# Description:	Pixel image format produced by PCO Camware, typically used
20611#		together with PCO cameras.
20612# Note:		Different versions exist for e.g. 8 bit and 16 bit images.
20613#		Documentation is incomplete.
206140	string/b	PCO-	PCO B16 image data
20615>12	ulelong		x	\b, %dx
20616>16	ulelong		x	\b%d
20617>20	ulelong		0	\b, short header
20618>20	ulelong		-1	\b, extended header
20619>>24	ulelong		0	\b, grayscale
20620>>>36	ulelong		0	linear LUT
20621>>>36	ulelong		1	logarithmic LUT
20622>>>28	ulelong		x	[%d
20623>>>32	ulelong		x	\b,%d]
20624>>24	ulelong		1	\b, color
20625>>>64	ulelong		0	linear LUT
20626>>>64	ulelong		1	logarithmic LUT
20627>>>40	ulelong		x	r[%d
20628>>>44	ulelong		x	\b,%d]
20629>>>48	ulelong		x	g[%d
20630>>>52	ulelong		x	\b,%d]
20631>>>56	ulelong		x	b[%d
20632>>>60	ulelong		x	\b,%d]
20633
20634# Polar Monitor Bitmap (.pmb) used as logo for Polar Electro watches
20635# From: Markus Heidelberg <markus.heidelberg at web.de>
206360	string/t	[BitmapInfo2]	Polar Monitor Bitmap text
20637!:mime	image/x-polar-monitor-bitmap
20638
20639# From: Rick Richardson <rickrich@gmail.com>
20640# updated by: Joerg Jenderek
20641# URL: http://techmods.net/nuvi/
206420	string	GARMIN\ BITMAP\ 01	Garmin Bitmap file
20643# extension is also used for
20644# Sony SRF raw image (image/x-sony-srf)
20645# SRF map
20646# Terragen Surface Map (https://www.planetside.co.uk/terragen)
20647# FileLocator Pro search criteria file (https://www.mythicsoft.com/filelocatorpro)
20648!:ext srf
20649#!:mime	image/x-garmin-srf
20650# version 1.00,2.00,2.10,2.40,2.50
20651>0x2f	string		>0		\b, version %4.4s
20652# width (2880,2881,3240)
20653>0x55	uleshort	>0		\b, %dx
20654# height (80,90)
20655>>0x53	uleshort	x		\b%d
20656
20657# From:		Joerg Jenderek
20658# URL:		http://fileformats.archiveteam.org/wiki/Imageiio/imaginfo_(Ulead)
20659# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/p/pe3.trid.xml
20660# Note:		called "Ulead Imageiio/Imaginfo thumbnail" by TrID
206610	string	IIO1$			Ulead Photo Explorer 3
20662#!:mime	application/octet-stream
20663!:mime	image/x-ulead-pe3
20664# IMAGEIIO.PE3
20665!:ext	pe3
20666# look for DOS/Windows drive letter
20667>5	search/192/s	:\\
20668# directory or full name of corresponding imaginfo.pe3 like: "T:\SAMPLES\TEXTURES\SKY_SNOW\IIOE371.TMP "S:\PI3\PIMPACT3\PROGRAMS\PATTERNS\imaginfo.pe3"
20669>>&-1	string	x			"%s"
20670# look for DOS/Windows network path if no drive letter part
20671>5	default		x
20672>>5	search/192/s	\x5c\x5c
20673# full name of corresponding imaginfo.pe3 like: "\\Lionking\upi\SAMPLES\IMAGES\ANIMALS\imaginfo.pe3"
20674>>>&0	string	x			"%s"
20675# Type:	Ulead Photo Explorer5 (.pe5)
20676# URL:		http://fileformats.archiveteam.org/wiki/Imageiio/imaginfo_(Ulead)
20677# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/p/pe4.trid.xml
20678# From:	Simon Horman <horms@debian.org>
20679# Update:	Joerg Jenderek
20680# Note:		some called "Ulead Imageiio/Imaginfo thumbnail" by TrID
20681#		and used in various Ulead applications
206820	string	IIO2H			Ulead Photo Explorer 4 or 5
20683#!:mime	application/octet-stream
20684!:mime	image/x-ulead-pe4
20685# IMAGEIIO.PE4
20686!:ext	pe4/pe5
20687# look in most samples for JPEG signature like: SAMPLES/IMAGES/SCENES/IMAGINFO.PE4
20688>0x4c2	search/0xE02/s	JFIF		with JPEG image data
20689>>&-6	use			jpeg
20690# near the end list of image names like: Img0001.pcd 1116012L.JPG NCARD4.TPL
20691#
20692# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/p/pe3-imaginfo.trid.xml
2069311	string	\001\0\0\0\0
20694# check for version 3 part
20695>19	string	\0\001\0\003\0
20696>>0	use	ulead-imaginfo
20697# From:		Joerg Jenderek
20698# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/p/pe4-imaginfo.trid.xml
2069911	string	\001\0\0\0\0
20700# check for version 4 part
20701>19	string	\0\0\0\004\0
20702>>0	use	ulead-imaginfo
20703# display information about Ulead Imaginfo thumbnail (version, directory, image extension)
207040	name	ulead-imaginfo
20705>22	ubyte	x			Ulead Imaginfo thumbnail
20706#!:mime	application/octet-stream
20707!:mime	image/x-ulead-imaginfo
20708>22	ubyte	=3			\b, version 3
20709# IMAGINFO.PE3
20710!:ext	pe3
20711>22	ubyte	=4			\b, version 4
20712# IMAGINFO.PE4
20713!:ext	pe4
20714# MAYBE ALSO VERSION 5 ?
20715#>22	ubyte	=5			\b, version 5
20716#!:ext	pe5
20717>22	ubyte	x
20718# look for DOS/Windows driver letter
20719>>4	search/192/s	:\x5c
20720# skip f:\Programme\iPhoto Plus 4\Template\Business Cards\IMAGINFO.PE4
20721# by looking for driver letter in range A-Z
20722>>>&-1	ubyte	>0x40
20723# directory path like: "E:\iPE\CDSample\Images\Scenes" "D:\XmasCard\Samples" "C:\TEMP\PLANTS"
20724>>>>&-5	pstring/l	>0		\b, "%s"
20725# look for DOS/Windows network path if no valid drive letter part
20726>>>&-1	default		x
20727>>>>4	search/192/s	\x5c\x5c
20728# directory path like: "\\FSX\SYS\OPPS\IPE.ENG\TEMPLATE\BUSINESS" "\\Lionking\upi\SAMPLES\IMAGES\ANIMALS"
20729>>>>>&-4 pstring/l	>0		\b, "%s"
20730# look for DOS/Windows network path if no drive letter part
20731>>4	default		x
20732>>>4	search/192/s	\x5c\x5c
20733# directory path like: "\\FSX\SYS\opps\ipe.eng\samples" "\\DANIEL\IPE_CD\IPE.ITA"
20734>>>>&-4 pstring/l	>0		\b, "%s"
20735# look for point character inside image names
20736>56	search/38/s	.
20737# image name extension like: bmp jpg pcd tpl
20738>>&1	string	x			with %-.3s images
20739# Summary:	Ulead Pattern image (Corel Corporation)
20740# URL:		https://en.wikipedia.org/wiki/Ulead_Systems
20741#		https://www.file-extensions.org/pst-file-extension-ulead-pattern-image-format
20742# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/p/pst-ulead.trid.xml
20743# From:		Joerg Jenderek
20744# Note:		used also by CorelDraw Essentials 3 version 13.0.0.800
20745#		there seems to exist other versions
207460	ubelong		0xFFFF0100
20747>8	search/21	PresetInfo	Ulead pattern image
20748#!:mime	application/octet-stream
20749!:mime	image/x-ulead-pst
20750!:ext	pst
20751# string length like: 16 18 19 21 24
20752#>>4	uleshort	x		n=%u
20753# like: BlendPresetInfo DropShadowPresetInfo FileNewPresetInfo VectorExtrudePresetInfo EnvelopePresetInfo ContourPresetInfo DistortionPresetInfo
20754>>4	pstring/h	x		"%s"
20755
20756# Type:	X11 cursor
20757# URL:	http://webcvs.freedesktop.org/mime/shared-mime-info/freedesktop.org.xml.in?view=markup
20758# From:	Mathias Brodala <info@noctus.net>
207590	string	Xcur			X11 cursor
20760
20761# Type:	Olympus ORF raw images.
20762# URL:	https://libopenraw.freedesktop.org/wiki/Olympus_ORF
20763# From:	Adam Buchbinder <adam.buchbinder@gmail.com>
207640	string		MMOR		Olympus ORF raw image data, big-endian
20765!:mime	image/x-olympus-orf
207660	string		IIRO		Olympus ORF raw image data, little-endian
20767!:mime	image/x-olympus-orf
207680	string		IIRS		Olympus ORF raw image data, little-endian
20769!:mime	image/x-olympus-orf
20770
20771# Type: files used in modern AVCHD camcoders to store clip information
20772# Extension: .cpi
20773# From: Alexander Danilov <alexander.a.danilov@gmail.com>
207740	string	HDMV0100	AVCHD Clip Information
20775
20776# From: Adam Buchbinder <adam.buchbinder@gmail.com>
20777# URL: http://local.wasp.uwa.edu.au/~pbourke/dataformats/pic/
20778# Radiance HDR; usually has .pic or .hdr extension.
207790	string	#?RADIANCE\n	Radiance HDR image data
20780#!mime	image/vnd.radiance
20781
20782# From: Adam Buchbinder <adam.buchbinder@gmail.com>
20783# URL: https://www.mpi-inf.mpg.de/resources/pfstools/pfs_format_spec.pdf
20784# Used by the pfstools packages. The regex matches for the image size could
20785# probably use some work. The MIME type is made up; if there's one in
20786# actual common use, it should replace the one below.
207870	string	PFS1\x0a	PFS HDR image data
20788#!mime	image/x-pfs
20789>1	regex	[0-9]*\ 	\b, %s
20790>>1	regex	\ [0-9]{4}	\bx%s
20791
20792# Type: Foveon X3F
20793# URL:  https://www.photofo.com/downloads/x3f-raw-format.pdf
20794# From: Adam Buchbinder <adam.buchbinder@gmail.com>
20795# Note that the MIME type isn't defined anywhere that I can find; if
20796# there's a canonical type for this format, it should replace this one.
207970	string	FOVb	Foveon X3F raw image data
20798!:mime	image/x-x3f
20799>6	uleshort	x	\b, version %d.
20800>4	uleshort	x	\b%d
20801>28	ulelong		x	\b, %dx
20802>32	ulelong		x	\b%d
20803
20804# Paint.NET file
20805# From Adam Buchbinder <adam.buchbinder@gmail.com>
208060	string	PDN3	Paint.NET image data
20807!:mime	image/x-paintnet
20808
20809# Not really an image.
20810# From: "Tano M. Fotang" <mfotang@quanteq.com>
208110	string	\x46\x4d\x52\x00	ISO/IEC 19794-2 Format Minutiae Record (FMR)
20812
20813# doc: https://www.shikino.co.jp/eng/products/images/FLOWER.jpg.zip
20814# example: https://www.shikino.co.jp/eng/products/images/FLOWER.wdp.zip
2081590	ubequad		0x574D50484F544F00	JPEG-XR Image
20816>98	ubyte&0x08	=0x08			\b, hard tiling
20817>99	ubyte&0x80	=0x80			\b, tiling present
20818>99	ubyte&0x40	=0x40			\b, codestream present
20819>99	ubyte&0x38	x			\b, spatial xform=
20820>99	ubyte&0x38	0x00			\bTL
20821>99	ubyte&0x38	0x08			\bBL
20822>99	ubyte&0x38	0x10			\bTR
20823>99	ubyte&0x38	0x18			\bBR
20824>99	ubyte&0x38	0x20			\bBT
20825>99	ubyte&0x38	0x28			\bRB
20826>99	ubyte&0x38	0x30			\bLT
20827>99	ubyte&0x38	0x38			\bLB
20828>100	ubyte&0x80	=0x80			\b, short header
20829>>102	ubeshort+1	x			\b, %d
20830>>104	ubeshort+1	x			\bx%d
20831>100	ubyte&0x80	=0x00			\b, long header
20832>>102	ubelong+1	x			\b, %x
20833>>106	ubelong+1	x			\bx%x
20834>101	ubeshort&0xf	x			\b, bitdepth=
20835>>101	ubeshort&0xf	0x0			\b1-WHITE=1
20836>>101	ubeshort&0xf	0x1			\b8
20837>>101	ubeshort&0xf	0x2			\b16
20838>>101	ubeshort&0xf	0x3			\b16-SIGNED
20839>>101	ubeshort&0xf	0x4			\b16-FLOAT
20840>>101	ubeshort&0xf	0x5			\b(reserved 5)
20841>>101	ubeshort&0xf	0x6			\b32-SIGNED
20842>>101	ubeshort&0xf	0x7			\b32-FLOAT
20843>>101	ubeshort&0xf	0x8			\b5
20844>>101	ubeshort&0xf	0x9			\b10
20845>>101	ubeshort&0xf	0xa			\b5-6-5
20846>>101	ubeshort&0xf	0xb			\b(reserved %d)
20847>>101	ubeshort&0xf	0xc			\b(reserved %d)
20848>>101	ubeshort&0xf	0xd			\b(reserved %d)
20849>>101	ubeshort&0xf	0xe			\b(reserved %d)
20850>>101	ubeshort&0xf	0xf			\b1-BLACK=1
20851>101	ubeshort&0xf0	x			\b, colorfmt=
20852>>101	ubeshort&0xf0	0x00			\bYONLY
20853>>101	ubeshort&0xf0	0x10			\bYUV240
20854>>101	ubeshort&0xf0	0x20			\bYWV422
20855>>101	ubeshort&0xf0	0x30			\bYWV444
20856>>101	ubeshort&0xf0	0x40			\bCMYK
20857>>101	ubeshort&0xf0	0x50			\bCMYKDIRECT
20858>>101	ubeshort&0xf0	0x60			\bNCOMPONENT
20859>>101	ubeshort&0xf0	0x70			\bRGB
20860>>101	ubeshort&0xf0	0x80			\bRGBE
20861>>101	ubeshort&0xf0	>0x80			\b(reserved %#x)
20862
20863# From: Johan van der Knijff <johan.vanderknijff@kb.nl>
20864#
20865# BPG (Better Portable Graphics) format
20866# https://bellard.org/bpg/
20867# http://fileformats.archiveteam.org/wiki/BPG
20868#
208690	string	\x42\x50\x47\xFB	BPG (Better Portable Graphics)
20870!:mime  image/bpg
20871
20872# From: Joerg Jenderek
20873# URL: https://en.wikipedia.org/wiki/Apple_Icon_Image_format
208740	string		icns		Mac OS X icon
20875!:mime	image/x-icns
20876!:apple	????icns
20877!:ext icns
20878>4	ubelong		>0
20879# file size
20880>>4	ubelong		x		\b, %d bytes
20881# icon type
20882>>8	string		x		\b, "%4.4s" type
20883
20884# TIM images
20885# URL:		http://fileformats.archiveteam.org/wiki/TIM_(PlayStation_graphics)
20886# Reference:	https://mrclick.zophar.net/TilEd/download/timgfx.txt
20887# Update:	Joerg Jenderek
20888# Note:		called as "PSX TIM *bpp bitmap" by bitmap-tim-*.trid.xml
20889#		verified as "TIM PSX" by XnView `nconvert -fullinfo *.tim` and
20890#		by RECOIL `recoil2png -o TMP.PNG input.tim; file TMP.PNG` and often
20891#		as "PSX TIM" by ImageMagick version 7.1.0-10 command `identify *.tim`
20892#		here signed integers are used but according to Kaitai unsigned
208930		ulelong		0x00000010
20894# 32 Flag bits *cttt; c~CLUT flag t~type 000~4BPP 001~8BPP 010~16BPP 011~24BPP 100~Mixed
20895#>4		ulelong  	x		FLAGS=%#x
20896# 12+Size of CLUT (2Ch for 4BPP; 20Ch 40Ch 60Ch 80Ch C0Ch for 8BPP) or
20897# +image data size (800Ch 2000Ch 2580C for 16BPP) (02000003h for dBase memo test.dbt)
20898#>8		ulelong		x		\b, 12+CLUT or data size=%#8.8x
20899# CLUT or data size remainder is 12 (Ch), but 03 for dBase memo test.dbt
20900#>8		ubyte&0x0F	=0x0C		\b, SIZE REMAINDER IS 12
20901# skip dBase III memo test.dbt with invalid flags 22D10189h
20902>4		ulelong&0xffFFffF0	=0	Sony PlayStation PSX image,
20903# file (version 5.40) labeled the above entry as "TIM image"
20904!:mime	image/x-sony-tim
20905!:ext	tim
20906#>>4		ulelong&0x00000007	x	\b, BPP~%u
20907# 4BPP and 8BPP examples exist with CLUT or without CLUT
20908>>4		ulelong&0x07	0x0		4-Bit,
20909>>4		ulelong&0x07	0x1		8-Bit,
20910# 16BPP and 24BPP examples have no CLUT
20911>>4		ulelong  	0x2		15-Bit,
20912>>4		ulelong  	0x3		24-Bit,
20913# no example
20914>>4		ulelong&0x07  	0x4		Mixed-Bit,
20915# CLUT flag set
20916>>4		ulelong 	&8
20917# 12 + size of CLUT like: 1000Ch 800Ch 400Ch 40Ch and 2FEh (KAGE.TIM)
20918#>>>(8.l+8)	ulelong		x		\b, 12+CLUT SIZE=%#8.8x
20919>>>(8.l+12)	uleshort	x		Pixel at (%d,
20920>>>(8.l+14)	uleshort	x		\b%d) Size=
20921# image width (to get actual width multiply by 4 for 4BPP and by 2 for 8BPP)
20922>>>>4		ulelong  	0x8
20923>>>>>(8.l+16)	uleshort*4	x		\b%d
20924>>>>4		ulelong  	0x9
20925>>>>>(8.l+16)	uleshort*2	x		\b%d
20926# image height like: 32 64 128 144 160 208 256
20927>>>(8.l+18)	uleshort	x		\bx%d,
20928>>>4		ulelong 	0x8		16 CLUT Entries at
20929>>>4		ulelong 	0x9		256 CLUT Entries at
20930>>>12		uleshort	x		(%d,
20931>>>14		uleshort	x		\b%d)
20932# no Color LookUp Table (CLUT)
20933>>4		ulelong		^8
20934# image origin X Y
20935>>>12		uleshort	x		Pixel at (%d,
20936>>>14		uleshort	x		\b%d) Size=
20937# real image width = multiply by 4 (4BPP) 2 (8BPP) 1 (16BPP) 2/3 (24BPP)
20938>>>>4		ulelong  	0x0
20939>>>>>16		uleshort*4	x		\b%d
20940>>>>4		ulelong  	0x1
20941>>>>>16		uleshort*2	x		\b%d
20942>>>>4		ulelong  	0x2
20943>>>>>16		uleshort		x		\b%d
20944>>>>4		ulelong  	0x3
20945# GRR: NOT working
20946#>>>>>16		uleshort*2/3	x		\b%d
20947>>>>>16		uleshort		x		\b2/3*%d
20948# mixed format width not explained!
20949>>>>4		ulelong  	0x4
20950>>>>>16		uleshort		x		\b%d
20951# image height like: 64 240 256
20952>>>18		uleshort		x		\bx%d
20953# TIM image data
20954
20955# MDEC streams
209560		ulelong		0x80010160	MDEC video stream,
20957>16		uleshort	x		%dx
20958>18		uleshort	x		\b%d
20959#>8		ulelong		x		%d frames
20960#>4		uleshort	x		secCount=%d;
20961#>6		uleshort	x		nSectors=%d;
20962#>12		ulelong		x		frameSize=%d;
20963
20964# BS encoded bitstreams
209652		uleshort	0x3800		BS image,
20966>6		uleshort	x		Version %d,
20967>4		uleshort	x		Quantization %d,
20968>0		uleshort	x		(Decompresses to %d words)
20969
20970# Type: farbfeld image.
20971# Url: http://tools.suckless.org/farbfeld/
20972# From: Ian D. Scott <ian@iandouglasscott.com>
20973#
209740		string		farbfeld	farbfeld image data,
20975>8		ubelong		x		%dx
20976>12		ubelong		x		\b%d
20977
20978# Type: Microsoft DirectDraw Surface (DXGI formats)
20979# URL:	https://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/directx/graphics/reference/DDSFileReference/ddsfileformat.asp
20980# From: Morten Hustveit <morten@debian.org>
20981# Updated by: David Korth <gerbilsoft@gerbilsoft.com>
209820	name	ms-directdraw-dx10
20983>0	ulelong	x	\b, DXGI format:
20984>0	ulelong	1	R32G32B32A32_TYPELESS
20985>0	ulelong	2	R32G32B32A32_FLOAT
20986>0	ulelong	3	R32G32B32A32_UINT
20987>0	ulelong	4	R32G32B32A32_SINT
20988>0	ulelong	5	R32G32B32_TYPELESS
20989>0	ulelong	6	R32G32B32_FLOAT
20990>0	ulelong	7	R32G32B32_UINT
20991>0	ulelong	8	R32G32B32_SINT
20992>0	ulelong	9	R16G16B16A16_TYPELESS
20993>0	ulelong	10	R16G16B16A16_FLOAT
20994>0	ulelong	11	R16G16B16A16_UNORM
20995>0	ulelong	12	R16G16B16A16_UINT
20996>0	ulelong	13	R16G16B16A16_SNORM
20997>0	ulelong	14	R16G16B16A16_SINT
20998>0	ulelong	15	R32G32_TYPELESS
20999>0	ulelong	16	R32G32_FLOAT
21000>0	ulelong	17	R32G32_UINT
21001>0	ulelong	18	R32G32_SINT
21002>0	ulelong	19	R32G8X24_TYPELESS
21003>0	ulelong	20	D32_FLOAT_S8X24_UINT
21004>0	ulelong	21	R32_FLOAT_X8X24_TYPELESS
21005>0	ulelong	22	X32_TYPELESS_G8X24_UINT
21006>0	ulelong	23	R10G10B10A2_TYPELESS
21007>0	ulelong	24	R10G10B10A2_UNORM
21008>0	ulelong	25	R10G10B10A2_UINT
21009>0	ulelong	26	R11G11B10_FLOAT
21010>0	ulelong	27	R8G8B8A8_TYPELESS
21011>0	ulelong	28	R8G8B8A8_UNORM
21012>0	ulelong	29	R8G8B8A8_UNORM_SRGB
21013>0	ulelong	30	R8G8B8A8_UINT
21014>0	ulelong	31	R8G8B8A8_SNORM
21015>0	ulelong	32	R8G8B8A8_SINT
21016>0	ulelong	33	R16G16_TYPELESS
21017>0	ulelong	34	R16G16_FLOAT
21018>0	ulelong	35	R16G16_UNORM
21019>0	ulelong	36	R16G16_UINT
21020>0	ulelong	37	R16G16_SNORM
21021>0	ulelong	38	R16G16_SINT
21022>0	ulelong	39	R32_TYPELESS
21023>0	ulelong	40	D32_FLOAT
21024>0	ulelong	41	R32_FLOAT
21025>0	ulelong	42	R32_UINT
21026>0	ulelong	43	R32_SINT
21027>0	ulelong	44	R24G8_TYPELESS
21028>0	ulelong	45	D24_UNORM_S8_UINT
21029>0	ulelong	46	R24_UNORM_X8_TYPELESS
21030>0	ulelong	47	X24_TYPELESS_G8_UINT
21031>0	ulelong	48	R8G8_TYPELESS
21032>0	ulelong	49	R8G8_UNORM
21033>0	ulelong	50	R8G8_UINT
21034>0	ulelong	51	R8G8_SNORM
21035>0	ulelong	52	R8G8_SINT
21036>0	ulelong	53	R16_TYPELESS
21037>0	ulelong	54	R16_FLOAT
21038>0	ulelong	55	D16_UNORM
21039>0	ulelong	56	R16_UNORM
21040>0	ulelong	57	R16_UINT
21041>0	ulelong	58	R16_SNORM
21042>0	ulelong	59	R16_SINT
21043>0	ulelong	60	R8_TYPELESS
21044>0	ulelong	61	R8_UNORM
21045>0	ulelong	62	R8_UINT
21046>0	ulelong	63	R8_SNORM
21047>0	ulelong	64	R8_SINT
21048>0	ulelong	65	A8_UNORM
21049>0	ulelong	66	R1_UNORM
21050>0	ulelong	67	R9G9B9E5_SHAREDEXP
21051>0	ulelong	68	R8G8_B8G8_UNORM
21052>0	ulelong	69	G8R8_G8B8_UNORM
21053>0	ulelong	70	BC1_TYPELESS
21054>0	ulelong	71	BC1_UNORM
21055>0	ulelong	72	BC1_UNORM_SRGB
21056>0	ulelong	73	BC2_TYPELESS
21057>0	ulelong	74	BC2_UNORM
21058>0	ulelong	75	BC2_UNORM_SRGB
21059>0	ulelong	76	BC3_TYPELESS
21060>0	ulelong	77	BC3_UNORM
21061>0	ulelong	78	BC3_UNORM_SRGB
21062>0	ulelong	79	BC4_TYPELESS
21063>0	ulelong	80	BC4_UNORM
21064>0	ulelong	81	BC4_SNORM
21065>0	ulelong	82	BC5_TYPELESS
21066>0	ulelong	83	BC5_UNORM
21067>0	ulelong	84	BC5_SNORM
21068>0	ulelong	85	B5G6R5_UNORM
21069>0	ulelong	86	B5G5R5A1_UNORM
21070>0	ulelong	87	B8G8R8A8_UNORM
21071>0	ulelong	88	B8G8R8X8_UNORM
21072>0	ulelong	89	R10G10B10_XR_BIAS_A2_UNORM
21073>0	ulelong	90	B8G8R8A8_TYPELESS
21074>0	ulelong	91	B8G8R8A8_UNORM_SRGB
21075>0	ulelong	92	B8G8R8X8_TYPELESS
21076>0	ulelong	93	B8G8R8X8_UNORM_SRGB
21077>0	ulelong	94	BC6H_TYPELESS
21078>0	ulelong	95	BC6H_UF16
21079>0	ulelong	96	BC6H_SF16
21080>0	ulelong	97	BC7_TYPELESS
21081>0	ulelong	98	BC7_UNORM
21082>0	ulelong	99	BC7_UNORM_SRGB
21083>0	ulelong	100	AYUV
21084>0	ulelong	101	Y410
21085>0	ulelong	102	Y416
21086>0	ulelong	103	NV12
21087>0	ulelong	104	P010
21088>0	ulelong	105	P016
21089>0	ulelong	106	420_OPAQUE
21090>0	ulelong	107	YUY2
21091>0	ulelong	108	Y210
21092>0	ulelong	109	Y216
21093>0	ulelong	110	NV11
21094>0	ulelong	111	AI44
21095>0	ulelong	112	IA44
21096>0	ulelong	113	P8
21097>0	ulelong	114	A8P8
21098>0	ulelong	115	B4G4R4A4_UNORM
21099
21100>0	ulelong	116	XBOX_R10G10B10_7E3_A2_FLOAT
21101>0	ulelong	117	XBOX_R10G10B10_6E4_A2_FLOAT
21102>0	ulelong	118	XBOX_D16_UNORM_S8_UINT
21103>0	ulelong	119	XBOX_R16_UNORM_X8_TYPELESS
21104>0	ulelong	120	XBOX_X16_TYPELESS_G8_UINT
21105
21106>0	ulelong	130	DXGI_FORMAT_P208
21107>0	ulelong	131	DXGI_FORMAT_V208
21108>0	ulelong	132	DXGI_FORMAT_V408
21109
21110>0	ulelong	133	ASTC_4X4_TYPELESS
21111>0	ulelong	134	ASTC_4X4_UNORM
21112>0	ulelong	135	ASTC_4X4_UNORM_SRGB
21113>0	ulelong	137	ASTC_5X4_TYPELESS
21114>0	ulelong	138	ASTC_5X4_UNORM
21115>0	ulelong	139	ASTC_5X4_UNORM_SRGB
21116>0	ulelong	141	ASTC_5X5_TYPELESS
21117>0	ulelong	142	ASTC_5X5_UNORM
21118>0	ulelong	143	ASTC_5X5_UNORM_SRGB
21119>0	ulelong	145	ASTC_6X5_TYPELESS
21120>0	ulelong	146	ASTC_6X5_UNORM
21121>0	ulelong	147	ASTC_6X5_UNORM_SRGB
21122>0	ulelong	149	ASTC_6X6_TYPELESS
21123>0	ulelong	150	ASTC_6X6_UNORM
21124>0	ulelong	151	ASTC_6X6_UNORM_SRGB
21125>0	ulelong	153	ASTC_8X5_TYPELESS
21126>0	ulelong	154	ASTC_8X5_UNORM
21127>0	ulelong	155	ASTC_8X5_UNORM_SRGB
21128>0	ulelong	157	ASTC_8X6_TYPELESS
21129>0	ulelong	158	ASTC_8X6_UNORM
21130>0	ulelong	159	ASTC_8X6_UNORM_SRGB
21131>0	ulelong	161	ASTC_8X8_TYPELESS
21132>0	ulelong	162	ASTC_8X8_UNORM
21133>0	ulelong	163	ASTC_8X8_UNORM_SRGB
21134>0	ulelong	165	ASTC_10X5_TYPELESS
21135>0	ulelong	166	ASTC_10X5_UNORM
21136>0	ulelong	167	ASTC_10X5_UNORM_SRGB
21137>0	ulelong	169	ASTC_10X6_TYPELESS
21138>0	ulelong	170	ASTC_10X6_UNORM
21139>0	ulelong	171	ASTC_10X6_UNORM_SRGB
21140>0	ulelong	173	ASTC_10X8_TYPELESS
21141>0	ulelong	174	ASTC_10X8_UNORM
21142>0	ulelong	175	ASTC_10X8_UNORM_SRGB
21143>0	ulelong	177	ASTC_10X10_TYPELESS
21144>0	ulelong	178	ASTC_10X10_UNORM
21145>0	ulelong	179	ASTC_10X10_UNORM_SRGB
21146>0	ulelong	181	ASTC_12X10_TYPELESS
21147>0	ulelong	182	ASTC_12X10_UNORM
21148>0	ulelong	183	ASTC_12X10_UNORM_SRGB
21149>0	ulelong	185	ASTC_12X12_TYPELESS
21150>0	ulelong	186	ASTC_12X12_UNORM
21151>0	ulelong	187	ASTC_12X12_UNORM_SRGB
21152
21153>0	ulelong	190	XBOX_R10G10B10_SNORM_A2_UNORM
21154>0	ulelong	189	XBOX_R4G4_UNORM
21155>0	ulelong	0xFFFFFFFF	DXGI_FORMAT_FORCE_UINT
21156
21157# Type: Microsoft DirectDraw Surface (common data)
21158# URL:	https://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/directx/graphics/reference/DDSFileReference/ddsfileformat.asp
21159# From: Morten Hustveit <morten@debian.org>
21160# Updated by: David Korth <gerbilsoft@gerbilsoft.com>
211610	name	ms-directdraw-surface
21162>0x10	ulelong	x			%u x
21163>0x0C	ulelong	x			%u
21164# Color depth.
21165>0x58	ulelong	>0			\b, %u-bit color
21166# Determine the pixel format.
21167>0x50	ulelong&0x4	4
21168# FIXME: Handle DX10 and XBOX formats.
21169>>0x54	string	DX10
21170>>>0x80	use	ms-directdraw-dx10
21171>>0x54	string	!DX10			\b, compressed using %.4s
21172>0x50	ulelong&0x2	0x2		\b, alpha only
21173>0x50	ulelong&0x200	0x200		\b, YUV
21174>0x50	ulelong&0x20000	0x20000		\b, luminance
21175# RGB pixel format
21176>0x50	ulelong&0x40	0x40
21177
21178# Determine the RGB format using the color masks.
21179# ulequad order: 0xGGGGGGGGRRRRRRRR, 0xAAAAAAAABBBBBBBB
21180
21181>>0x58		ulelong	16
21182
21183# NOTE: 15-bit color formats usually have 16-bit listed as the color depth.
21184>>>0x5C		ulequad	0x000003E000007C00
21185>>>>0x64	ulequad 0x000000000000001F	\b, RGB555
21186>>>0x5C		ulequad	0x000003E000001F00
21187>>>>0x64	ulequad 0x000000000000007C	\b, BGR555
21188
21189>>>0x5C		ulequad	0x000007E00000F800
21190>>>>0x64	ulequad 0x000000000000001F	\b, RGB565
21191>>>0x5C		ulequad	0x000007E000001F00
21192>>>>0x64	ulequad 0x00000000000000F8	\b, BGR565
21193
21194>>>0x5C		ulequad	0x000000F000000F00
21195>>>>0x64	ulequad 0x0000F0000000000F	\b, ARGB4444
21196>>>0x5C		ulequad	0x000000F00000000F
21197>>>>0x64	ulequad 0x0000F00000000F00	\b, ABGR4444
21198
21199>>>0x5C		ulequad	0x00000F000000F000
21200>>>>0x64	ulequad 0x0000000F000000F0	\b, RGBA4444
21201>>>0x5C		ulequad	0x00000F00000000F0
21202>>>>0x64	ulequad 0x0000000F0000F000	\b, BGRA4444
21203
21204>>>0x5C		ulequad	0x000000F000000F00
21205>>>>0x64	ulequad 0x000000000000000F	\b, xRGB4444
21206>>>0x5C		ulequad	0x000000F00000000F
21207>>>>0x64	ulequad 0x0000000000000F00	\b, xBGR4444
21208
21209>>>0x5C		ulequad	0x00000F000000F000
21210>>>>0x64	ulequad 0x00000000000000F0	\b, RGBx4444
21211>>>0x5C		ulequad	0x00000F00000000F0
21212>>>>0x64	ulequad 0x000000000000F000	\b, BGRx4444
21213
21214>>>0x5C		ulequad	0x000003E000007C00
21215>>>>0x64	ulequad 0x000080000000001F	\b, ARGB1555
21216>>>0x5C		ulequad	0x000003E000001F00
21217>>>>0x64	ulequad 0x000080000000007C	\b, ABGR1555
21218>>>0x5C		ulequad	0x000007C00000F800
21219>>>>0x64	ulequad 0x000000010000003E	\b, RGBA5551
21220>>>0x5C		ulequad	0x000007C00000003E
21221>>>>0x64	ulequad 0x000000010000F800	\b, BGRA5551
21222
21223>>88		ulelong 24
21224>>>0x5C		ulequad	0x0000FF0000FF0000
21225>>>>0x64	ulequad 0x00000000000000FF	\b, RGB888
21226>>>0x5C		ulequad	0x0000FF00000000FF
21227>>>>0x64	ulequad 0x0000000000FF0000	\b, BGR888
21228
21229>>88		ulelong 32
21230>>>0x5C		ulequad	0x0000FF0000FF0000
21231>>>>0x64	ulequad 0xFF000000000000FF	\b, ARGB8888
21232>>>0x5C		ulequad	0x0000FF00000000FF
21233>>>>0x64	ulequad 0xFF00000000FF0000	\b, ABGR8888
21234
21235>>>0x5C		ulequad	0x00FF0000FF000000
21236>>>>0x64	ulequad 0x000000FF0000FF00	\b, RGBA8888
21237>>>0x5C		ulequad	0x00FF00000000FF00
21238>>>>0x64	ulequad 0x000000FFFF000000	\b, BGBA8888
21239
21240>>>0x5C		ulequad	0x0000FF0000FF0000
21241>>>>0x64	ulequad 0x00000000000000FF	\b, xRGB8888
21242>>>0x5C		ulequad	0x0000FF00000000FF
21243>>>>0x64	ulequad 0x0000000000FF0000	\b, xBGR8888
21244
21245>>>0x5C		ulequad	0x00FF0000FF000000
21246>>>>0x64	ulequad 0x000000000000FF00	\b, RGBx8888
21247>>>0x5C		ulequad	0x00FF00000000FF00
21248>>>>0x64	ulequad 0x00000000FF000000	\b, BGBx8888
21249
21250# Less common 32-bit color formats.
21251>>>0x5C		ulequad	0xFFFF00000000FFFF
21252>>>>0x64	ulequad 0x0000000000000000	\b, G16R16
21253>>>0x5C		ulequad	0x0000FFFFFFFF0000
21254>>>>0x64	ulequad 0x0000000000000000	\b, R16G16
21255
21256>>>0x5C		ulequad	0x000FFC003FF00000
21257>>>>0x64	ulequad 0xC0000000000003FF	\b, A2R10G10B10
21258>>>0x5C		ulequad	0x000FFC00000003FF
21259>>>>0x64	ulequad 0xC00000003FF00000	\b, A2B10G10R10
21260
21261# Type: Microsoft DirectDraw Surface
21262# URL:	https://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/directx/graphics/reference/DDSFileReference/ddsfileformat.asp
21263# From: Morten Hustveit <morten@debian.org>
21264# Updated by: David Korth <gerbilsoft@gerbilsoft.com>
212650	string/b	DDS\040\174\000\000\000 Microsoft DirectDraw Surface (DDS):
21266>0	use	ms-directdraw-surface
21267
21268# Type: Sega PVR image.
21269# From: David Korth <gerbilsoft@gerbilsoft.com>
21270# References:
21271# - https://fabiensanglard.net/Mykaruga/tools/segaPVRFormat.txt
21272# - https://github.com/yazgoo/pvrx2png
21273# - https://github.com/nickworonekin/puyotools
21274
21275# Sega PVR header.
212760	name	sega-pvr-image-header
21277>0x0C	uleshort	x	%u x
21278>0x0E	uleshort	x	%u
21279# Image format.
21280>0x08	ubyte	0	\b, ARGB1555
21281>0x08	ubyte	1	\b, RGB565
21282>0x08	ubyte	2	\b, ARGB4444
21283>0x08	ubyte	3	\b, YUV442
21284>0x08	ubyte	4	\b, Bump
21285>0x08	ubyte	5	\b, 4bpp
21286>0x08	ubyte	6	\b, 8bpp
21287# Image data type.
21288>0x09	ubyte	0x01	\b, square twiddled
21289>0x09	ubyte	0x02	\b, square twiddled & mipmap
21290>0x09	ubyte	0x03	\b, VQ
21291>0x09	ubyte	0x04	\b, VQ & mipmap
21292>0x09	ubyte	0x05	\b, 8-bit CLUT twiddled
21293>0x09	ubyte	0x06	\b, 4-bit CLUT twiddled
21294>0x09	ubyte	0x07	\b, 8-bit direct twiddled
21295>0x09	ubyte	0x08	\b, 4-bit direct twiddled
21296>0x09	ubyte	0x09	\b, rectangle
21297>0x09	ubyte	0x0B	\b, rectangular stride
21298>0x09	ubyte	0x0D	\b, rectangular twiddled
21299>0x09	ubyte	0x10	\b, small VQ
21300>0x09	ubyte	0x11	\b, small VQ & mipmap
21301>0x09	ubyte	0x12	\b, square twiddled & mipmap
21302
21303# Sega PVR image.
213040	string	PVRT
21305>0x10	string	DDS\040\174\000\000\000 Sega PVR (Xbox) image:
21306>>0x20	use	ms-directdraw-surface
21307>0x10	ubelong	!0x44445320		Sega PVR image:
21308>>0	use	sega-pvr-image-header
21309
21310# Sega PVR image with GBIX.
213110	string	GBIX
21312>0x10	string	PVRT
21313>>0x10	string	DDS\040\174\000\000\000 Sega PVR (Xbox) image:
21314>>>0x20	use	ms-directdraw-surface
21315>>0x10	ubelong	!0x44445320		Sega PVR image:
21316>>>0x10	use	sega-pvr-image-header
21317>>0x08	ulelong	x	\b, global index = %u
21318
21319# Sega GVR header.
213200	name	sega-gvr-image-header
21321>0x0C	ubeshort	x	%u x
21322>0x0E	ubeshort	x	%u
21323# Image data format.
21324>0x0B	ubyte	0	\b, I4
21325>0x0B	ubyte	1	\b, I8
21326>0x0B	ubyte	2	\b, IA4
21327>0x0B	ubyte	3	\b, IA8
21328>0x0B	ubyte	4	\b, RGB565
21329>0x0B	ubyte	5	\b, RGB5A3
21330>0x0B	ubyte	6	\b, ARGB8888
21331>0x0B	ubyte	8	\b, CI4
21332>0x0B	ubyte	9	\b, CI8
21333>0x0B	ubyte	14	\b, DXT1
21334
21335# Sega GVR image.
213360	string	GVRT	Sega GVR image:
21337>0x10	use	sega-gvr-image-header
21338
21339# Sega GVR image with GBIX.
213400	string	GBIX
21341>0x10	string	GVRT	Sega GVR image:
21342>>0x10	use	sega-gvr-image-header
21343>>0x08	ubelong	x	\b, global index = %u
21344
21345# Sega GVR image with GCIX. (Wii)
213460	string	GCIX
21347>0x10	string	GVRT	Sega GVR image:
21348>>0x10	use	sega-gvr-image-header
21349>>0x08	ubelong	x	\b, global index = %u
21350
21351# Light Field Picture
21352# Documentation: http://optics.miloush.net/lytro/TheFileFormat.aspx
21353# Typical file extensions: .lfp .lfr .lfx
21354
213550	ubelong	0x894C4650
21356>4	ubelong	0x0D0A1A0A
21357>12	ubelong	0x00000000	Lytro Light Field Picture
21358>8	ubelong	x		\b, version %d
21359
21360# Type: Vision Research Phantom CINE Format
21361# URL: https://www.phantomhighspeed.com/
21362# URL2: http://phantomhighspeed.force.com/vriknowledge/servlet/fileField?id=0BEU0000000Cfyk
21363# From: Harry Mallon <hjmallon at gmail.com>
21364#
21365# This has a short "CI" code but the 44 is the size of the struct which is
21366# stable
213670	string	CI
21368>2	uleshort 44		Vision Research CINE Video,
21369>>4	uleshort	0		Grayscale,
21370>>4	uleshort 1		JPEG Compressed,
21371>>4	uleshort 2		RAW,
21372>>6	uleshort x		version %d,
21373>>20	ulelong	x		%d frames,
21374>>48	ulelong	x		%dx
21375>>52	ulelong	x		\b%d
21376
21377# Type: ARRI Raw Image
21378# Info: SMPTE RDD30:2014
21379# From: Harry Mallon <hjmallon at gmail.com>
213800	string ARRI		ARRI ARI image data,
21381>4	ulelong 0x78563412	little-endian,
21382>4 	ulelong 0x12345678	big-endian,
21383>12	ulelong x		version %d,
21384>20	ulelong x 		%dx
21385>24	ulelong x		\b%d
21386
21387# Type: Khronos KTX texture.
21388# From: David Korth <gerbilsoft@gerbilsoft.com>
21389# Reference: https://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/
21390
21391# glEnum decoding.
21392# NOTE: Only the most common formats are listed here.
213930	name	khronos-ktx-glEnum
21394>0	ulelong	0x1907	\b, RGB
21395>0	ulelong	0x1908	\b, RGBA
21396>0	ulelong	0x1909	\b, LUMINANCE
21397>0	ulelong	0x190A	\b, LUMINANCE_ALPHA
21398>0	ulelong	0x80E1	\b, BGR
21399>0	ulelong	0x80E2	\b, BGRA
21400>0	ulelong	0x83A0	\b, RGB_S3TC
21401>0	ulelong	0x83A1	\b, RGB4_S3TC
21402>0	ulelong	0x83A2	\b, RGBA_S3TC
21403>0	ulelong	0x83A3	\b, RGBA4_S3TC
21404>0	ulelong	0x83A4	\b, RGBA_DXT5_S3TC
21405>0	ulelong	0x83A5	\b, RGBA4_DXT5_S3TC
21406>0	ulelong	0x83F0	\b, COMPRESSED_RGB_S3TC_DXT1_EXT
21407>0	ulelong	0x83F1	\b, COMPRESSED_RGBA_S3TC_DXT1_EXT
21408>0	ulelong	0x83F2	\b, COMPRESSED_RGBA_S3TC_DXT3_EXT
21409>0	ulelong	0x83F3	\b, COMPRESSED_RGBA_S3TC_DXT5_EXT
21410>0	ulelong	0x8D64	\b, ETC1_RGB8_OES
21411>0	ulelong	0x9270	\b, COMPRESSED_R11_EAC
21412>0	ulelong	0x9271	\b, COMPRESSED_SIGNED_R11_EAC
21413>0	ulelong	0x9272	\b, COMPRESSED_RG11_EAC
21414>0	ulelong	0x9273	\b, COMPRESSED_SIGNED_RG11_EAC
21415>0	ulelong	0x9274	\b, COMPRESSED_RGB8_ETC2
21416>0	ulelong	0x9275	\b, COMPRESSED_SRGB8_ETC2
21417>0	ulelong	0x9276	\b, COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2
21418>0	ulelong	0x9277	\b, COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2
21419>0	ulelong	0x9278	\b, COMPRESSED_RGBA2_ETC2_EAC
21420>0	ulelong	0x9279	\b, COMPRESSED_SRGB8_ALPHA8_ETC2_EAC
21421>0	ulelong	0x93B0	\b, COMPRESSED_RGBA_ASTC_4x4_KHR
21422>0	ulelong	0x93B1	\b, COMPRESSED_RGBA_ASTC_5x4_KHR
21423>0	ulelong	0x93B2	\b, COMPRESSED_RGBA_ASTC_5x5_KHR
21424>0	ulelong	0x93B3	\b, COMPRESSED_RGBA_ASTC_6x5_KHR
21425>0	ulelong	0x93B4	\b, COMPRESSED_RGBA_ASTC_6x6_KHR
21426>0	ulelong	0x93B5	\b, COMPRESSED_RGBA_ASTC_8x5_KHR
21427>0	ulelong	0x93B6	\b, COMPRESSED_RGBA_ASTC_8x6_KHR
21428>0	ulelong	0x93B7	\b, COMPRESSED_RGBA_ASTC_8x8_KHR
21429>0	ulelong	0x93B8	\b, COMPRESSED_RGBA_ASTC_10x5_KHR
21430>0	ulelong	0x93B9	\b, COMPRESSED_RGBA_ASTC_10x6_KHR
21431>0	ulelong	0x93BA	\b, COMPRESSED_RGBA_ASTC_10x8_KHR
21432>0	ulelong	0x93BB	\b, COMPRESSED_RGBA_ASTC_10x10_KHR
21433>0	ulelong	0x93BC	\b, COMPRESSED_RGBA_ASTC_12x10_KHR
21434>0	ulelong	0x93BD	\b, COMPRESSED_RGBA_ASTC_12x12_KHR
21435>0	ulelong	0x93D0	\b, COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR
21436>0	ulelong	0x93D1	\b, COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR
21437>0	ulelong	0x93D2	\b, COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR
21438>0	ulelong	0x93D3	\b, COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR
21439>0	ulelong	0x93D4	\b, COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR
21440>0	ulelong	0x93D5	\b, COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR
21441>0	ulelong	0x93D6	\b, COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR
21442>0	ulelong	0x93D7	\b, COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR
21443>0	ulelong	0x93D8	\b, COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR
21444>0	ulelong	0x93D9	\b, COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR
21445>0	ulelong	0x93DA	\b, COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR
21446>0	ulelong	0x93DB	\b, COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR
21447>0	ulelong	0x93DC	\b, COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR
21448>0	ulelong	0x93DD	\b, COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR
21449
21450# Endian-specific KTX header.
21451# TODO: glType (all textures I've seen so far are GL_UNSIGNED_BYTE)
214520	name	khronos-ktx-endian-header
21453>20	ulelong	x	\b, %u
21454>24	ulelong	>1	x %u
21455>28	ulelong	>1	x %u
21456>8	ulelong	>0
21457>>8	use	khronos-ktx-glEnum
21458>8	ulelong	0
21459>>12	use	khronos-ktx-glEnum
21460
21461# Main KTX header.
21462# Determine endianness, then check the rest of the header.
214630	string	\xABKTX\ 11\xBB\r\n\x1A\n	Khronos KTX texture
21464>12	ulelong	0x04030201			(little-endian)
21465>>16	use	khronos-ktx-endian-header
21466>12	ubelong	0x04030201			(big-endian)
21467>>16	use	\^khronos-ktx-endian-header
21468
21469# Type: Khronos KTX2 texture.
21470# From: David Korth <gerbilsoft@gerbilsoft.com>
21471# Based on draft19.
21472# Reference: http://github.khronos.org/KTX-Specification/
21473
21474# Supercompression enum.
214750	name	khronos-ktx2-supercompression
21476>0	ulelong	1	BasisLZ
21477>0	ulelong	2	Zstandard
21478>0	ulelong	3	ZLIB
21479
21480# Vulkan format identifier.
21481# NOTE: Formats prohibited from KTX2 are commented out.
214820	name	khronos-ktx2-vkFormat
21483>0	ulelong	0	UNDEFINED
21484>0	ulelong	1	R4G4_UNORM_PACK8
21485>0	ulelong	2	R4G4B4A4_UNORM_PACK16
21486>0	ulelong	3	B4G4R4A4_UNORM_PACK16
21487>0	ulelong	4	R5G6B5_UNORM_PACK16
21488>0	ulelong	5	B5G6R5_UNORM_PACK16
21489>0	ulelong	6	R5G5B5A1_UNORM_PACK16
21490>0	ulelong	7	B5G5R5A1_UNORM_PACK16
21491>0	ulelong	8	A1R5G5B5_UNORM_PACK16
21492>0	ulelong	9	R8_UNORM
21493>0	ulelong	10	R8_SNORM
21494#>0	ulelong	11	R8_USCALED
21495#>0	ulelong	12	R8_SSCALED
21496>0	ulelong	13	R8_UINT
21497>0	ulelong	14	R8_SINT
21498>0	ulelong	15	R8_SRGB
21499>0	ulelong	16	R8G8_UNORM
21500>0	ulelong	17	R8G8_SNORM
21501#>0	ulelong	18	R8G8_USCALED
21502#>0	ulelong	19	R8G8_SSCALED
21503>0	ulelong	20	R8G8_UINT
21504>0	ulelong	21	R8G8_SINT
21505>0	ulelong	22	R8G8_SRGB
21506>0	ulelong	23	R8G8B8_UNORM
21507>0	ulelong	24	R8G8B8_SNORM
21508#>0	ulelong	25	R8G8B8_USCALED
21509#>0	ulelong	26	R8G8B8_SSCALED
21510>0	ulelong	27	R8G8B8_UINT
21511>0	ulelong	28	R8G8B8_SINT
21512>0	ulelong	29	R8G8B8_SRGB
21513>0	ulelong	30	B8G8R8_UNORM
21514>0	ulelong	31	B8G8R8_SNORM
21515#>0	ulelong	32	B8G8R8_USCALED
21516#>0	ulelong	33	B8G8R8_SSCALED
21517>0	ulelong	34	B8G8R8_UINT
21518>0	ulelong	35	B8G8R8_SINT
21519>0	ulelong	36	B8G8R8_SRGB
21520>0	ulelong	37	R8G8B8A8_UNORM
21521>0	ulelong	38	R8G8B8A8_SNORM
21522#>0	ulelong	39	R8G8B8A8_USCALED
21523#>0	ulelong	40	R8G8B8A8_SSCALED
21524>0	ulelong	41	R8G8B8A8_UINT
21525>0	ulelong	42	R8G8B8A8_SINT
21526>0	ulelong	43	R8G8B8A8_SRGB
21527>0	ulelong	44	B8G8R8A8_UNORM
21528>0	ulelong	45	B8G8R8A8_SNORM
21529#>0	ulelong	46	B8G8R8A8_USCALED
21530#>0	ulelong	47	B8G8R8A8_SSCALED
21531>0	ulelong	48	B8G8R8A8_UINT
21532>0	ulelong	49	B8G8R8A8_SINT
21533>0	ulelong	50	B8G8R8A8_SRGB
21534#>0	ulelong	51	A8B8G8R8_UNORM_PACK32
21535#>0	ulelong	52	A8B8G8R8_SNORM_PACK32
21536#>0	ulelong	53	A8B8G8R8_USCALED_PACK32
21537#>0	ulelong	54	A8B8G8R8_SSCALED_PACK32
21538#>0	ulelong	55	A8B8G8R8_UINT_PACK32
21539#>0	ulelong	56	A8B8G8R8_SINT_PACK32
21540#>0	ulelong	57	A8B8G8R8_SRGB_PACK32
21541>0	ulelong	58	A2R10G10B10_UNORM_PACK32
21542>0	ulelong	59	A2R10G10B10_SNORM_PACK32
21543#>0	ulelong	60	A2R10G10B10_USCALED_PACK32
21544#>0	ulelong	61	A2R10G10B10_SSCALED_PACK32
21545>0	ulelong	62	A2R10G10B10_UINT_PACK32
21546>0	ulelong	63	A2R10G10B10_SINT_PACK32
21547>0	ulelong	64	A2B10G10R10_UNORM_PACK32
21548>0	ulelong	65	A2B10G10R10_SNORM_PACK32
21549#>0	ulelong	66	A2B10G10R10_USCALED_PACK32
21550#>0	ulelong	67	A2B10G10R10_SSCALED_PACK32
21551>0	ulelong	68	A2B10G10R10_UINT_PACK32
21552>0	ulelong	69	A2B10G10R10_SINT_PACK32
21553>0	ulelong	70	R16_UNORM
21554>0	ulelong	71	R16_SNORM
21555#>0	ulelong	72	R16_USCALED
21556#>0	ulelong	73	R16_SSCALED
21557>0	ulelong	74	R16_UINT
21558>0	ulelong	75	R16_SINT
21559>0	ulelong	76	R16_SFLOAT
21560>0	ulelong	77	R16G16_UNORM
21561>0	ulelong	78	R16G16_SNORM
21562#>0	ulelong	79	R16G16_USCALED
21563#>0	ulelong	80	R16G16_SSCALED
21564>0	ulelong	81	R16G16_UINT
21565>0	ulelong	82	R16G16_SINT
21566>0	ulelong	83	R16G16_SFLOAT
21567>0	ulelong	84	R16G16B16_UNORM
21568>0	ulelong	85	R16G16B16_SNORM
21569#>0	ulelong	86	R16G16B16_USCALED
21570#>0	ulelong	87	R16G16B16_SSCALED
21571>0	ulelong	88	R16G16B16_UINT
21572>0	ulelong	89	R16G16B16_SINT
21573>0	ulelong	90	R16G16B16_SFLOAT
21574>0	ulelong	91	R16G16B16A16_UNORM
21575>0	ulelong	92	R16G16B16A16_SNORM
21576#>0	ulelong	93	R16G16B16A16_USCALED
21577#>0	ulelong	94	R16G16B16A16_SSCALED
21578>0	ulelong	95	R16G16B16A16_UINT
21579>0	ulelong	96	R16G16B16A16_SINT
21580>0	ulelong	97	R16G16B16A16_SFLOAT
21581>0	ulelong	98	R32_UINT
21582>0	ulelong	99	R32_SINT
21583>0	ulelong	100	R32_SFLOAT
21584>0	ulelong	101	R32G32_UINT
21585>0	ulelong	102	R32G32_SINT
21586>0	ulelong	103	R32G32_SFLOAT
21587>0	ulelong	104	R32G32B32_UINT
21588>0	ulelong	105	R32G32B32_SINT
21589>0	ulelong	106	R32G32B32_SFLOAT
21590>0	ulelong	107	R32G32B32A32_UINT
21591>0	ulelong	108	R32G32B32A32_SINT
21592>0	ulelong	109	R32G32B32A32_SFLOAT
21593>0	ulelong	110	R64_UINT
21594>0	ulelong	111	R64_SINT
21595>0	ulelong	112	R64_SFLOAT
21596>0	ulelong	113	R64G64_UINT
21597>0	ulelong	114	R64G64_SINT
21598>0	ulelong	115	R64G64_SFLOAT
21599>0	ulelong	116	R64G64B64_UINT
21600>0	ulelong	117	R64G64B64_SINT
21601>0	ulelong	118	R64G64B64_SFLOAT
21602>0	ulelong	119	R64G64B64A64_UINT
21603>0	ulelong	120	R64G64B64A64_SINT
21604>0	ulelong	121	R64G64B64A64_SFLOAT
21605>0	ulelong	122	B10G11R11_UFLOAT_PACK32
21606>0	ulelong	123	E5B9G9R9_UFLOAT_PACK32
21607>0	ulelong	124	D16_UNORM
21608>0	ulelong	125	X8_D24_UNORM_PACK32
21609>0	ulelong	126	D32_SFLOAT
21610>0	ulelong	127	S8_UINT
21611>0	ulelong	128	D16_UNORM_S8_UINT
21612>0	ulelong	129	D24_UNORM_S8_UINT
21613>0	ulelong	130	D32_SFLOAT_S8_UINT
21614
21615>0	ulelong	131	BC1_RGB_UNORM_BLOCK
21616>0	ulelong	132	BC1_RGB_SRGB_BLOCK
21617>0	ulelong	133	BC1_RGBA_UNORM_BLOCK
21618>0	ulelong	134	BC1_RGBA_SRGB_BLOCK
21619>0	ulelong	135	BC2_UNORM_BLOCK
21620>0	ulelong	136	BC2_SRGB_BLOCK
21621>0	ulelong	137	BC3_UNORM_BLOCK
21622>0	ulelong	138	BC3_SRGB_BLOCK
21623>0	ulelong	139	BC4_UNORM_BLOCK
21624>0	ulelong	140	BC4_SNORM_BLOCK
21625>0	ulelong	141	BC5_UNORM_BLOCK
21626>0	ulelong	142	BC5_SNORM_BLOCK
21627>0	ulelong	143	BC6H_UFLOAT_BLOCK
21628>0	ulelong	144	BC6H_SFLOAT_BLOCK
21629>0	ulelong	145	BC7_UNORM_BLOCK
21630>0	ulelong	146	BC7_SRGB_BLOCK
21631
21632>0	ulelong	147	ETC2_R8G8B8_UNORM_BLOCK
21633>0	ulelong	148	ETC2_R8G8B8_SRGB_BLOCK
21634>0	ulelong	149	ETC2_R8G8B8A1_UNORM_BLOCK
21635>0	ulelong	150	ETC2_R8G8B8A1_SRGB_BLOCK
21636>0	ulelong	151	ETC2_R8G8B8A8_UNORM_BLOCK
21637>0	ulelong	152	ETC2_R8G8B8A8_SRGB_BLOCK
21638
21639>0	ulelong	153	EAC_R11_UNORM_BLOCK
21640>0	ulelong	154	EAC_R11_SNORM_BLOCK
21641>0	ulelong	155	EAC_R11G11_UNORM_BLOCK
21642>0	ulelong	156	EAC_R11G11_SNORM_BLOCK
21643
21644>0	ulelong	157	ASTC_4x4_UNORM_BLOCK
21645>0	ulelong	158	ASTC_4x4_SRGB_BLOCK
21646>0	ulelong	159	ASTC_5x4_UNORM_BLOCK
21647>0	ulelong	160	ASTC_5x4_SRGB_BLOCK
21648>0	ulelong	161	ASTC_5x5_UNORM_BLOCK
21649>0	ulelong	162	ASTC_5x5_SRGB_BLOCK
21650>0	ulelong	163	ASTC_6x5_UNORM_BLOCK
21651>0	ulelong	164	ASTC_6x5_SRGB_BLOCK
21652>0	ulelong	165	ASTC_6x6_UNORM_BLOCK
21653>0	ulelong	166	ASTC_6x6_SRGB_BLOCK
21654>0	ulelong	167	ASTC_8x5_UNORM_BLOCK
21655>0	ulelong	168	ASTC_8x5_SRGB_BLOCK
21656>0	ulelong	169	ASTC_8x6_UNORM_BLOCK
21657>0	ulelong	170	ASTC_8x6_SRGB_BLOCK
21658>0	ulelong	171	ASTC_8x8_UNORM_BLOCK
21659>0	ulelong	172	ASTC_8x8_SRGB_BLOCK
21660>0	ulelong	173	ASTC_10x5_UNORM_BLOCK
21661>0	ulelong	174	ASTC_10x5_SRGB_BLOCK
21662>0	ulelong	175	ASTC_10x6_UNORM_BLOCK
21663>0	ulelong	176	ASTC_10x6_SRGB_BLOCK
21664>0	ulelong	177	ASTC_10x8_UNORM_BLOCK
21665>0	ulelong	178	ASTC_10x8_SRGB_BLOCK
21666>0	ulelong	179	ASTC_10x10_UNORM_BLOCK
21667>0	ulelong	180	ASTC_10x10_SRGB_BLOCK
21668>0	ulelong	181	ASTC_12x10_UNORM_BLOCK
21669>0	ulelong	182	ASTC_12x10_SRGB_BLOCK
21670>0	ulelong	183	ASTC_12x12_UNORM_BLOCK
21671>0	ulelong	184	ASTC_12x12_SRGB_BLOCK
21672
21673>0	ulelong	1000156000	G8B8G8R8_422_UNORM
21674>0	ulelong	1000156001	B8G8R8G8_422_UNORM
21675>0	ulelong	1000156002	G8_B8_R8_3PLANE_420_UNORM
21676>0	ulelong	1000156003	G8_B8R8_2PLANE_420_UNORM
21677>0	ulelong	1000156004	G8_B8_R8_3PLANE_422_UNORM
21678>0	ulelong	1000156005	G8_B8R8_2PLANE_422_UNORM
21679>0	ulelong	1000156006	G8_B8_R8_3PLANE_444_UNORM
21680>0	ulelong	1000156007	R10X6_UNORM_PACK16
21681>0	ulelong	1000156008	R10X6G10X6_UNORM_2PACK16
21682>0	ulelong	1000156009	R10X6G10X6B10X6A10X6_UNORM_4PACK16
21683>0	ulelong	1000156010	G10X6B10X6G10X6R10X6_422_UNORM_4PACK16
21684>0	ulelong	1000156011	B10X6G10X6R10X6G10X6_422_UNORM_4PACK16
21685>0	ulelong	1000156012	G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16
21686>0	ulelong	1000156013	G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16
21687>0	ulelong	1000156014	G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16
21688>0	ulelong	1000156015	G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16
21689>0	ulelong	1000156016	G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16
21690>0	ulelong	1000156017	R12X4_UNORM_PACK16
21691>0	ulelong	1000156018	R12X4G12X4_UNORM_2PACK16
21692>0	ulelong	1000156019	R12X4G12X4B12X4A12X4_UNORM_4PACK16
21693>0	ulelong	1000156020	G12X4B12X4G12X4R12X4_422_UNORM_4PACK16
21694>0	ulelong	1000156021	B12X4G12X4R12X4G12X4_422_UNORM_4PACK16
21695>0	ulelong	1000156022	G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16
21696>0	ulelong	1000156023	G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16
21697>0	ulelong	1000156024	G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16
21698>0	ulelong	1000156025	G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16
21699>0	ulelong	1000156026	G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16
21700>0	ulelong	1000156027	G16B16G16R16_422_UNORM
21701>0	ulelong	1000156028	B16G16R16G16_422_UNORM
21702>0	ulelong	1000156029	G16_B16_R16_3PLANE_420_UNORM
21703>0	ulelong	1000156030	G16_B16R16_2PLANE_420_UNORM
21704>0	ulelong	1000156031	G16_B16_R16_3PLANE_422_UNORM
21705>0	ulelong	1000156032	G16_B16R16_2PLANE_422_UNORM
21706>0	ulelong	1000156033	G16_B16_R16_3PLANE_444_UNORM
21707
21708>0	ulelong	1000054000	PVRTC1_2BPP_UNORM_BLOCK_IMG
21709>0	ulelong	1000054001	PVRTC1_4BPP_UNORM_BLOCK_IMG
21710>0	ulelong	1000054002	PVRTC2_2BPP_UNORM_BLOCK_IMG
21711>0	ulelong	1000054003	PVRTC2_4BPP_UNORM_BLOCK_IMG
21712>0	ulelong	1000054004	PVRTC1_2BPP_SRGB_BLOCK_IMG
21713>0	ulelong	1000054005	PVRTC1_4BPP_SRGB_BLOCK_IMG
21714>0	ulelong	1000054006	PVRTC2_2BPP_SRGB_BLOCK_IMG
21715>0	ulelong	1000054007	PVRTC2_4BPP_SRGB_BLOCK_IMG
21716
21717>0	ulelong	1000066000	ASTC_4x4_SFLOAT_BLOCK_EXT
21718>0	ulelong	1000066001	ASTC_5x4_SFLOAT_BLOCK_EXT
21719>0	ulelong	1000066002	ASTC_5x5_SFLOAT_BLOCK_EXT
21720>0	ulelong	1000066003	ASTC_6x5_SFLOAT_BLOCK_EXT
21721>0	ulelong	1000066004	ASTC_6x6_SFLOAT_BLOCK_EXT
21722>0	ulelong	1000066005	ASTC_8x5_SFLOAT_BLOCK_EXT
21723>0	ulelong	1000066006	ASTC_8x6_SFLOAT_BLOCK_EXT
21724>0	ulelong	1000066007	ASTC_8x8_SFLOAT_BLOCK_EXT
21725>0	ulelong	1000066008	ASTC_10x5_SFLOAT_BLOCK_EXT
21726>0	ulelong	1000066009	ASTC_10x6_SFLOAT_BLOCK_EXT
21727>0	ulelong	1000066010	ASTC_10x8_SFLOAT_BLOCK_EXT
21728>0	ulelong	1000066011	ASTC_10x10_SFLOAT_BLOCK_EXT
21729>0	ulelong	1000066012	ASTC_12x10_SFLOAT_BLOCK_EXT
21730>0	ulelong	1000066013	ASTC_12x12_SFLOAT_BLOCK_EXT
21731
21732# Main KTX2 header.
217330	string	\xABKTX\ 20\xBB\r\n\x1A\n	Khronos KTX2 texture
21734>20	ulelong	x	\b, %u
21735>24	ulelong	>1	x %u
21736>28	ulelong	>1	x %u
21737>32	ulelong	>1	\b, %u layers
21738>36	ulelong	>1	\b, %u faces
21739>40	ulelong	>1	\b, %u mipmaps
21740>44	ulelong	>0	\b,
21741>>44	use	khronos-ktx2-supercompression
21742>12	ulelong	>0	\b,
21743>>12	use	khronos-ktx2-vkFormat
21744
21745# Type: Valve VTF texture.
21746# From: David Korth <gerbilsoft@gerbilsoft.com>
21747# References:
21748# - https://developer.valvesoftware.com/wiki/Valve_Texture_Format
21749
21750# VTF image formats.
217510	name	vtf-image-format
21752>0	ulelong	0	RGBA8888
21753>0	ulelong	1	ABGR8888
21754>0	ulelong	2	RGB888
21755>0	ulelong	3	BGR888
21756>0	ulelong	4	RGB565
21757>0	ulelong	5	I8
21758>0	ulelong	6	IA88
21759>0	ulelong	7	P8
21760>0	ulelong	8	A8
21761>0	ulelong	9	RGB888 (bluescreen)
21762>0	ulelong	10	BGR888 (bluescreen)
21763>0	ulelong	11	ARGB8888
21764>0	ulelong	12	BGRA8888
21765>0	ulelong	13	DXT1
21766>0	ulelong	14	DXT3
21767>0	ulelong	15	DXT5
21768>0	ulelong	16	BGRx8888
21769>0	ulelong	17	BGR565
21770>0	ulelong	18	BGRx5551
21771>0	ulelong	19	BGRA4444
21772>0	ulelong	20	DXT1+A1
21773>0	ulelong	21	BGRA5551
21774>0	ulelong	22	UV88
21775>0	ulelong	23	UVWQ8888
21776>0	ulelong	24	RGBA16161616F
21777>0	ulelong	25	RGBA16161616
21778>0	ulelong	26	UVLX8888
21779
21780# Main VTF header.
217810	string	VTF\0				Valve Texture Format
21782>4	ulelong	x				v%u
21783>8	ulelong	x				\b.%u
21784>0x10	uleshort	x				\b, %u
21785>0x12	uleshort	>1				x %u
21786>4	lequad	0x0000000700000002
21787>>0x3F	uleshort	>1				x %u
21788>0x18	uleshort	>1				\b, %u frames
21789>0x38	ubyte	x				\b, mipmaps: %u
21790>0x34	ulelong	>-1				\b,
21791>>0x34	use	vtf-image-format
21792
21793# Type: Valve VTF3 (PS3) texture.
21794# From: David Korth <gerbilsoft@gerbilsoft.com>
217950	string		VTF3	Valve Texture Format (PS3)
21796>0x14	ubeshort		x	\b, %u
21797>0x16	ubeshort		x	\b x %u
21798>0x10	ubelong&0x2000	0	\b, DXT1
21799>0x10	ubelong&0x2000	0x2000	\b, DXT5
21800
21801# Type: ASTC texture.
21802# From: David Korth <gerbilsoft@gerbilsoft.com>
21803# References:
21804# - https://stackoverflow.com/questions/22600678/determine-internal-format-of-given-astc-compressed-image-through-its-header
21805# - https://stackoverflow.com/a/22682244
218060	ulelong	0x5ca1ab13			ASTC
21807>4	ubyte	x				%u
21808>5	ubyte	x				\bx%u
21809>6	ubyte	>1				\bx%u
21810# X, Y, and Z dimensions are stored as 24-bit LE.
21811# Pretend it's 32-bit and mask off the high byte.
21812>7	ulelong&0x00FFFFFF	x		texture, %u
21813>10	ulelong&0x00FFFFFF	x		x %u
21814>13	ulelong&0x00FFFFFF	>1		x %u
21815
21816# Zebra Metafile graphic
21817# http://www.fileformat.info/format/zbr/egff.htm
218180	ubeshort	0x9a02	Zebra Metafile graphic
21819>2	uleshort 1	(version 1.x)
21820>2	uleshort	2	(version 1.1x or 1.2x)
21821>2	uleshort	3	(version 1.49)
21822>2	uleshort	4	(version 1.50)
21823>4	string	x	(comment = %s)
21824
21825# Microsoft Paint graphic
21826# http://www.fileformat.info/format/mspaint/egff.htm
218270	string	DanM 	icrosoft Paint image data (version 1.x)
21828>4	uleshort	x	(%d
21829>>6	uleshort	x	x %d)
218300	string	LinS 	Microsoft Paint image data (version 2.0)
21831>4	uleshort	x	(%d
21832>>6	uleshort	x	x %d)
21833
21834# reMarkable tablet internal file format (https://www.remarkable.com/)
21835# https://github.com/ax3l/lines-are-beautiful
21836# https://plasma.ninja/blog/devices/remarkable/binary/format/2017/12/26/\
21837#	reMarkable-lines-file-format.html#what-to-do-next
21838# from Axel Huebl
218390		string	reMarkable
21840>11		string	lines
21841>>17		string	with
21842>>>22		string	selections
21843>>>>33		string	and
21844>>>>>37		string	layers
21845>>>>>>43	ulelong	x	reMarkable tablet notebook lines, 1404 x 1872, %x page(s)
21846
21847# newer per-page files for the reMarkable
218480		string	reMarkable
21849>11		string	.lines
21850>>18		string	file,
21851>>>24		string	version=
21852>>>>32		ubyte	x	reMarkable tablet page (v%c), 1404 x 1872,
21853>>>>>43		ulelong	x	%d layer(s)
21854
21855# Type: PVR3 texture.
21856# From: David Korth <gerbilsoft@gerbilsoft.com>
21857# References:
21858# - http://cdn.imgtec.com/sdk-documentation/PVR+File+Format.Specification.pdf
21859
21860# PVR3 pixel formats.
218610	name		pvr3-pixel-format
21862>0	ulelong	0	PVRTC 2bpp RGB
21863>0	ulelong	1	PVRTC 2bpp RGBA
21864>0	ulelong	2	PVRTC 4bpp RGB
21865>0	ulelong	3	PVRTC 4bpp RGBA
21866>0	ulelong	4	PVRTC-II 2bpp
21867>0	ulelong	5	PVRTC-II 4bpp
21868>0	ulelong	6	ETC1
21869>0	ulelong	7	DXT1
21870>0	ulelong	8	DXT2
21871>0	ulelong	9	DXT3
21872>0	ulelong	10	DXT4
21873>0	ulelong	11	DXT5
21874>0	ulelong	12	BC4
21875>0	ulelong	13	BC5
21876>0	ulelong	14	BC6
21877>0	ulelong	15	BC7
21878>0	ulelong	16	UYVY
21879>0	ulelong	17	YUY2
21880>0	ulelong	18	BW1bpp
21881>0	ulelong	19	R9G9B9E5 Shared Exponent
21882>0	ulelong	20	RGBG8888
21883>0	ulelong	21	GRGB8888
21884>0	ulelong	22	ETC2 RGB
21885>0	ulelong	23	ETC2 RGBA
21886>0	ulelong	24	ETC2 RGB A1
21887>0	ulelong	25	EAC R11
21888>0	ulelong	26	EAC RG11
21889>0	ulelong	27	ASTC_4x4
21890>0	ulelong	28	ASTC_5x4
21891>0	ulelong	29	ASTC_5x5
21892>0	ulelong	30	ASTC_6x5
21893>0	ulelong	31	ASTC_6x6
21894>0	ulelong	32	ASTC_8x5
21895>0	ulelong	33	ASTC_8x6
21896>0	ulelong	34	ASTC_8x8
21897>0	ulelong	35	ASTC_10x5
21898>0	ulelong	36	ASTC_10x6
21899>0	ulelong	37	ASTC_10x8
21900>0	ulelong	38	ASTC_10x10
21901>0	ulelong	39	ASTC_12x10
21902>0	ulelong	40	ASTC_12x12
21903>0	ulelong	41	ASTC_3x3x3
21904>0	ulelong	42	ASTC_4x3x3
21905>0	ulelong	43	ASTC_4x4x3
21906>0	ulelong	44	ASTC_4x4x4
21907>0	ulelong	45	ASTC_5x4x4
21908>0	ulelong	46	ASTC_5x5x4
21909>0	ulelong	47	ASTC_5x5x5
21910>0	ulelong	48	ASTC_6x5x5
21911>0	ulelong	49	ASTC_6x6x5
21912>0	ulelong	50	ASTC_6x6x6
21913
219140	string		PVR\x03			PowerVR 3.0 texture:
21915>0x18	ulelong		x	%u x
21916>0x1C	ulelong		x	%u
21917>0x20	ulelong		>1	x %u
21918>0x08	ubyte		x	\b,
21919>0x0C	ulelong		0
21920>>0x08	use	pvr3-pixel-format
21921>0x0C	ulelong		!0
21922>>0x08	ubyte	!0	%c
21923>>>0x0C	ubyte	!0	\b%u
21924>>0x09	ubyte	!0	\b%c
21925>>>0x0D	ubyte	!0	\b%u
21926>>0x0A	ubyte	!0	\b%c
21927>>>0x0E	ubyte	!0	\b%u
21928>>0x0B	ubyte	!0	\b%c
21929>>>0x0F	ubyte	!0	\b%u
21930>0x10	ulelong		1	\b, sRGB
21931>0x04	ulelong&0x02	0x02	\b, premultiplied alpha
21932
219330	string		\x03RVP			PowerVR 3.0 texture: BE,
21934>0x18	ubelong		x	%u x
21935>0x1C	ubelong		x	%u
21936>0x20	ubelong		>1	x %u
21937>0x08	ubyte		x	\b,
21938>0x0C	ubelong		0
21939>>0x08	use	pvr3-pixel-format
21940>0x0C	ubelong		!0
21941>>0x0B	ubyte	!0	%c
21942>>>0x0F	ubyte	!0	\b%u
21943>>0x0A	ubyte	!0	\b%c
21944>>>0x0E	ubyte	!0	\b%u
21945>>0x09	ubyte	!0	\b%c
21946>>>0x0D	ubyte	!0	\b%u
21947>>0x08	ubyte	!0	\b%c
21948>>>0x0C	ubyte	!0	\b%u
21949>0x10	ubelong		1	\b, sRGB
21950>0x04	ubelong&0x02	0x02	\b, premultiplied alpha
21951
21952# Type: Microsoft Xbox XPR0 texture.
21953# From: David Korth <gerbilsoft@gerbilsoft.com>
21954# References:
21955# - https://github.com/Cxbx-Reloaded/Cxbx-Reloaded/blob/develop/src/core/hle/D3D8/XbD3D8Types.h
21956
21957# XPR pixel formats.
219580	name	xbox-xpr-pixel-format
21959>0	ubyte	0x00	L8
21960>0	ubyte	0x01	AL8
21961>0	ubyte	0x02	ARGB1555
21962>0	ubyte	0x03	RGB555
21963>0	ubyte	0x04	ARGB4444
21964>0	ubyte	0x05	RGB565
21965>0	ubyte	0x06	ARGB8888
21966>0	ubyte	0x07	xRGB8888
21967>0	ubyte	0x0B	P8
21968>0	ubyte	0x0C	DXT1
21969>0	ubyte	0x0E	DXT2
21970>0	ubyte	0x0F	DXT4
21971>0	ubyte	0x10	Linear ARGB1555
21972>0	ubyte	0x11	Linear RGB565
21973>0	ubyte	0x12	Linear ARGB8888
21974>0	ubyte	0x13	Linear L8
21975>0	ubyte	0x16	Linear R8B8
21976>0	ubyte	0x17	Linear G8B8
21977>0	ubyte	0x19	A8
21978>0	ubyte	0x1A	A8L8
21979>0	ubyte	0x1B	Linear AL8
21980>0	ubyte	0x1C	Linear RGB555
21981>0	ubyte	0x1D	Linear ARGB4444
21982>0	ubyte	0x1E	Linear xRGB8888
21983>0	ubyte	0x1F	Linear A8
21984>0	ubyte	0x20	Linear A8L8
21985>0	ubyte	0x24	YUY2
21986>0	ubyte	0x25	UYVY
21987>0	ubyte	0x27	L6V5U5
21988>0	ubyte	0x28	V8U8
21989>0	ubyte	0x29	R8B8
21990>0	ubyte	0x2A	D24S8
21991>0	ubyte	0x2B	F24S8
21992>0	ubyte	0x2C	D16
21993>0	ubyte	0x2D	F16
21994>0	ubyte	0x2E	Linear D24S8
21995>0	ubyte	0x2F	Linear F24S8
21996>0	ubyte	0x30	Linear D16
21997>0	ubyte	0x31	Linear F16
21998>0	ubyte	0x32	L16
21999>0	ubyte	0x33	V16U16
22000>0	ubyte	0x35	Linear L16
22001>0	ubyte	0x36	Linear V16U16
22002>0	ubyte	0x37	Linear L6V5U5
22003>0	ubyte	0x38	RGBA5551
22004>0	ubyte	0x39	RGBA4444
22005>0	ubyte	0x3A	QWVU8888
22006>0	ubyte	0x3B	BGRA8888
22007>0	ubyte	0x3C	RGBA8888
22008>0	ubyte	0x3D	Linear RGBA5551
22009>0	ubyte	0x3E	Linear RGBA4444
22010>0	ubyte	0x3F	Linear ABGR8888
22011>0	ubyte	0x40	Linear BGRA8888
22012>0	ubyte	0x41	Linear RGBA8888
22013>0	ubyte	0x64	Vertex Data
22014
220150	string		XPR0	Microsoft Xbox XPR0 texture
22016>0x19	ubyte	x	\b, format:
22017>>0x19	use	xbox-xpr-pixel-format
22018
22019# ILDA Image Data Transfer Format
22020# https://www.ilda.com/resources/StandardsDocs/ILDA_IDTF14_rev011.pdf
22021#
22022# Updated by Chuck Hein (laser@geekdude.com)
22023#
220240	string		ILDA	ILDA Image Data Transfer Format
22025>7	ubyte		0x00	3D Coordinates with Indexed Color
22026>7	ubyte		0x01	2D Coordinates with Indexed Color
22027>7	ubyte		0x02	Color Palette
22028>7	ubyte		0x04	3D Coordinates with True Color
22029>7	ubyte		0x05	2D Coordinates with True Color
22030>8	string		>0	\b, palette %s
22031>16	string		>0	\b, company %s
22032>24	ubeshort	>0	\b, number of records %d
22033>>26	ubeshort	x	\b, palette number %d
22034>>28	ubeshort	>0	\b, number of frames %d
22035>>30	ubyte		>0	\b, projector number %d
22036
22037# Dropbox "lepton" compressed jpeg format
22038# https://github.com/dropbox/lepton
220390	ubelong&0xfffff0ff	0xcf84005a	Lepton image file
22040>2	ubyte			x		(version %d)
22041
22042# Apple QuickTake camera raw images
22043# https://en.wikipedia.org/wiki/Apple_QuickTake
22044# dcraw can decode them
220450	name quicktake
22046>4	ubelong		8
22047>>544	ubeshort	x	\b, %dx
22048>>546	ubeshort	x	\b%d
22049>4	ubelong		4
22050>>546	ubeshort	x	\b, %dx
22051>>544	ubeshort	x	\b%d
22052
220530	string	qktk	Apple QuickTake 100 Raw Image
22054>0	use quicktake
22055
220560	string	qktn
22057>4	ubyte	0	Apple QuickTake 150 Raw Image
22058>4	ubyte	>0	Apple QuickTake 200 Raw Image
22059>0	use quicktake
22060
22061# From:		Joerg Jenderek
22062# URL:		http://fileformats.archiveteam.org/wiki/Corel_Photo-Paint_image
22063# Reference:	http://blog.argasinski.eu/wp-content/uploads/2011/08/cpt-specification-0.01.pdf
220640	string	CPT
22065>4	string	FILE		Corel Photo-Paint image, version
22066# version like 7, 9 or 8
22067>>3	ubyte	x		%c,
22068!:mime	image/x-corel-cpt
22069!:ext	cpt
22070# if blocks_array_offset available jump blockNumber*8 bytes
22071>>0x34	ulelong		>0
22072>>>(0x28.l*8)	ubyte	x
22073# jump additional stored blocks_array_offset bytes forward to object block
22074>>>>&(0x34.l-1) ulelong x	%u
22075# object height in pixels
22076>>>>>&0		ulelong	x	x %u
22077# if no blocks_array_offset available jump blockNumber*8 bytes
22078>>0x34	ulelong		=0
22079>>>(0x28.l*8)	ubyte	x
22080# jump additional 0x13C bytes forward to object block
22081>>>>&0x13B	ulelong x	%u
22082>>>>>&0	ulelong		x	x %u
22083# image color model used
22084>>0x8	ulelong	x
22085>>>0x8	ulelong	0x1		RGB 24 bits
22086>>>0x8	ulelong	0x3		CMYK 24 bits
22087>>>0x8	ulelong	0x5		greyscale 8 bits
22088>>>0x8	ulelong	0x6		black and white 1 bit
22089>>>0x8	ulelong	0xA		RGB 8 bits
22090# palette_length  number of colors * 3 in case of 8-bit RGB paletted image
22091# 0 otherwise. Allowed values: 0 or [1..256] * 3
22092#>>0xC	ulelong	>0		\b, palette length %u
22093>>>>0xC	ulelong/3	<256	\b, %u colors
22094>>>0x8	ulelong	0xB		LAB
22095>>>0x8	ulelong	0xC		RGB 48 bits
22096>>>0x8	ulelong	0xE		greyscale 16 bits
22097# this should not happen
22098>>>0x8	default	x		color model
22099>>>>0x8	ulelong	x		%#x
22100# bit 1 in CPT file flags: UCS-2 file comment present
22101>>0x31	ubyte		&0x02
22102# look for comment marker
22103>>>0x100	search/0xc9d	\4\2\0\0
22104# UCS-2 file comment
22105>>>>&0		lestring16	x	"%s"
22106# if no UCS-2 is present show ANSI file comment[112] if available
22107>>0x31	ubyte&0x02	=0
22108>>>0x3C string		>\0	"%-.112s"
22109# reserved seems to be always 0
22110#>>0x10	ulelong		>0	\b, reserved1 %u
22111# horizontal real dpi = dpi_h * 25.4 / 10**6
22112>>0x18	ulelong	x		\b, %u micro dots/mm
22113# image vertical DPI in CPT DPI unit
22114#>>0x1C	ulelong	x		\b, %u micro dots/mm
22115# reserved seems to be always 0
22116#>>0x20	ulelong		>0	\b, reserved2 %u
22117#>>0x24	ulelong		>0	\b, reserved3 %u
22118# blocks_count; number of CPT_Block blocks. Allowed values: > 0
22119>>0x28	ulelong		x	\b, %u block
22120# plural s
22121>>0x28	ulelong		!1	\bs
22122# CPT file flags
22123# lower byte of CPT file flags: 0x94~CPT9FILE 0x01~often CPT7FILE 0x8C~CPT8FILE
22124#>>0x30	ubyte		x	\b, lower flags %#x
22125# upper byte of CPT file flags:
22126#>>0x31	ubyte		>0	\b, upper flags %#x
22127# bit 2 in CPT file flags: unknown
22128#>>0x31	ubyte		&0x04	\b, with UNKNOWN
22129# bits 3-7 in CPT file flags: unknown, seem to be often 0
22130# show unusual flag combinations
22131>>0x31	ubyte&0xFC	>0
22132>>>0x30	uleshort	x	\b, flags %#4.4x
22133# reserved seems to be always 0
22134#>>0x32	uleshort	>0	\b, reserved4 %#x
22135# blocks_array_offset is always 0 for CPT7 and CPT8 files created by PP7-PP8
22136# typical values like: 13Ch 154h 43Ch 4F0h DA8h
22137>>0x34	ulelong	x		\b, array offset %#x
22138# reserved seems to be often 0
22139>>0x38	ulelong		>0	\b, reserved5 %#x
22140# possible next master block
22141#>>0x100	ubequad		!0	\b, next block=%#llx...
22142# bit 0: ICC profile block present
22143>>0x31	ubyte		&0x01	\b, with ICC profile
22144# check for characteristic string acsp of color profile for DEBUGGING
22145#>>>0x178	string	x	icc=%.4s
22146#	display ICC/ICM color profile by ./icc
22147#>>>0x154	use		color-profile
22148
22149# Type: Crunch compressed texture.
22150# From: David Korth <gerbilsoft@gerbilsoft.com>
22151# References:
22152# - https://github.com/BinomialLLC/crunch/blob/44c8402e24441c7524ca364941fd224ab3b971e9/inc/crn_decomp.h#L267
221530	ubelong		0x4878004A	Crunch compressed texture:
22154>0x0C	ubeshort	x	%u x
22155>0x0E	ubeshort	x	%u
22156>0x12	ubyte		0	\b, DXT1
22157>0x12	ubyte		1	\b, DXT3
22158>0x12	ubyte		2	\b, DXT5
22159>0x12	ubyte		3	\b, DXT5 CCxY
22160>0x12	ubyte		4	\b, DXT5 xGxR
22161>0x12	ubyte		5	\b, DXT5 xGBR
22162>0x12	ubyte		6	\b, DXT5 AGBR
22163>0x12	ubyte		7	\b, DXn XY
22164>0x12	ubyte		8	\b, DXn YX
22165>0x12	ubyte		9	\b, DXT5 Alpha
22166>0x12	ubyte		10	\b, ETC1
22167>0x10	ubyte		>1	\b, %u images
22168>0x11	ubyte		>1	\b, %u faces
22169# TODO: Flags at 0x13? (ubeshort)
22170
22171# Type: BasisLZ compressed texture.
22172# From: David Korth <gerbilsoft@gerbilsoft.com>
22173# References:
22174# - https://github.com/BinomialLLC/basis_universal/blob/master/spec/basis_spec.txt
221750	uleshort		0x4273
22176>0x04	uleshort		0x4D	BasisLZ
22177>>0x02	uleshort		x	v%x compressed texture:
22178>>0x14	ubyte			0	ETC1S
22179>>0x14	ubyte			1	UASTC 4x4
22180>>0x0E	ulelong&0xFFFFFF	>1	\b, %u slices
22181>>0x11	ulelong&0xFFFFFF	>1	\b, %u images
22182>>0x15	uleshort&0x02		2	\b, Y-flipped
22183
22184# MIME registration: https://www.iana.org/assignments/media-types/model/e57
22185# Sample files: http://www.libe57.org/data.html
22186# Reference implementation: http://www.libe57.org/
22187# https://www.ri.cmu.edu/pub_files/2011/1/2011-huber-e57-v3.pdf
221880	string		ASTM-E57	ASTM E57 three-dimensional model
22189!:mime model/e57
22190!:ext e57
22191
22192# QOI [Quite OK Image Format] images
22193# (Horia Mihai David, mihaidavid@posteo.net)
22194#
22195# QOI format by Dominic Szablewski <http://phoboslab.org/>
22196#           <https://qoiformat.org/>
22197#
22198# Based on spec v1.0 (2022.01.05) <https://qoiformat.org/qoi-specification.pdf>
22199
222000	string		qoif	QOI image data
22201!:ext qoi
22202!:mime image/x-qoi
22203# See <https://github.com/phoboslab/qoi/issues/167>
22204>4      ubelong		x       %ux
22205>8      ubelong		x       \b%u,
22206>>13	ubyte		0	s
22207>>>12	ubyte		3	\bRGB
22208>>>12	ubyte		4	\bRGBA
22209>>>12	default		x
22210>>>>12	ubyte		x	\b*bad channels %u*
22211>>>13	ubyte		0	(linear alpha)
22212>>13	ubyte		1
22213>>>12	ubyte		3	RGB
22214>>>12	ubyte		4	RGBA
22215>>>13	ubyte		1	(all channels linear)
22216>>13	default		x
22217>>>13	ubyte		x	*bad colorspace %u*
22218
22219
22220# Type: Godot 3, 4 texture (pixel format)
22221# From: David Korth <gerbilsoft@gerbilsoft.com>
222220	name	godot-pixel-format
22223>0	ulelong&0xFFFFF	0	L8
22224>0	ulelong&0xFFFFF	1	LA8
22225>0	ulelong&0xFFFFF	2	R8
22226>0	ulelong&0xFFFFF	3	RG8
22227>0	ulelong&0xFFFFF	4	RGB8
22228>0	ulelong&0xFFFFF	5	RGBA8
22229>0	ulelong&0xFFFFF	6	RGBA4444
22230>0	ulelong&0xFFFFF	7	RGB565
22231>0	ulelong&0xFFFFF	8	RF
22232>0	ulelong&0xFFFFF	9	RGF
22233>0	ulelong&0xFFFFF	10	RGBF
22234>0	ulelong&0xFFFFF	11	RGBAF
22235>0	ulelong&0xFFFFF	12	RH
22236>0	ulelong&0xFFFFF	13	RGH
22237>0	ulelong&0xFFFFF	14	RGBH
22238>0	ulelong&0xFFFFF	15	RGBAH
22239>0	ulelong&0xFFFFF	16	RGBE9995
22240>0	ulelong&0xFFFFF	17	DXT1
22241>0	ulelong&0xFFFFF	18	DXT3
22242>0	ulelong&0xFFFFF	19	DXT5
22243>0	ulelong&0xFFFFF	20	RGTC_R
22244>0	ulelong&0xFFFFF	21	RGTC_RG
22245>0	ulelong&0xFFFFF	22	BPTC_RGBA
22246>0	ulelong&0xFFFFF	23	BPTC_RGBF
22247>0	ulelong&0xFFFFF	24	BPTC_RGBFU
22248>0	ulelong&0xFFFFF	25	PVRTC1_2
22249>0	ulelong&0xFFFFF	26	PVRTC1_2A
22250>0	ulelong&0xFFFFF	27	PVRTC1_4
22251>0	ulelong&0xFFFFF	28	PVRTC1_4A
22252>0	ulelong&0xFFFFF	29	ETC
22253>0	ulelong&0xFFFFF	30	ETC2_R11
22254>0	ulelong&0xFFFFF	31	ETC2_R11S
22255>0	ulelong&0xFFFFF	32	ETC2_RG11
22256>0	ulelong&0xFFFFF	33	ETC2_RG11S
22257>0	ulelong&0xFFFFF	34	ETC2_RGB8
22258>0	ulelong&0xFFFFF	35	ETC2_RGBA8
22259>0	ulelong&0xFFFFF	36	ETC2_RGB8A1
22260>0	ulelong&0xFFFFF	37	ASTC_8x8
22261
22262# Type: Godot 3, 4 texture (rescale display, width)
22263# From: David Korth <gerbilsoft@gerbilsoft.com>
22264# Shows rescale value if it's not a power of 2.
222650	name	godot-rescale-display-w
22266>0	uleshort	0
22267>0	uleshort	1
22268>0	uleshort	2
22269>0	uleshort	4
22270>0	uleshort	8
22271>0	uleshort	16
22272>0	uleshort	32
22273>0	uleshort	64
22274>0	uleshort	128
22275>0	uleshort	256
22276>0	uleshort	512
22277>0	uleshort	1024
22278>0	uleshort	2048
22279>0	uleshort	4096
22280>0	uleshort	8192
22281>0	uleshort	16384
22282>0	uleshort	32768
22283>0	default		x
22284>>0	uleshort	x	(rescale to %u x
22285
22286# Type: Godot 3, 4 texture (rescale display, height)
22287# From: David Korth <gerbilsoft@gerbilsoft.com>
22288# Shows rescale value if it's not a power of 2.
222890	name	godot-rescale-display-h
22290>0	clear	x
22291>0	uleshort	0
22292>0	uleshort	1
22293>0	uleshort	2
22294>0	uleshort	4
22295>0	uleshort	8
22296>0	uleshort	16
22297>0	uleshort	32
22298>0	uleshort	64
22299>0	uleshort	128
22300>0	uleshort	256
22301>0	uleshort	512
22302>0	uleshort	1024
22303>0	uleshort	2048
22304>0	uleshort	4096
22305>0	uleshort	8192
22306>0	uleshort	16384
22307>0	uleshort	32768
22308>0	default		x
22309>>0	uleshort	x	%u)
22310
22311# Type: Godot 3 texture
22312# From: David Korth <gerbilsoft@gerbilsoft.com>
22313# References:
22314# - https://github.com/godotengine/godot/blob/3.3/core/image.h
22315# - https://github.com/godotengine/godot/blob/3.3/scene/resources/texture.cpp
22316# - https://github.com/godotengine/godot/blob/3.3/scene/resources/texture.h
22317# TODO: Don't show "rescale to" if it matches the image size.
223180	string	GDST	Godot 3 texture:
22319!:ext	stex
22320!:mime	image/x-godot-stex
22321>4	uleshort	x	%u x
22322>8	uleshort	x	%u
22323>6	uleshort	0	\b,
22324>6	uleshort	!0
22325>>6	use	godot-rescale-display-w
22326>>10	use	godot-rescale-display-h
22327>>10	uleshort	x	\b,
22328>16	ulelong&0x800000	!0		has mipmaps,
22329>16	ulelong&0x100000	0x100000	lossless encoding
22330>16	ulelong&0x200000	0x200000	lossy encoding
22331>16	ulelong&0x300000	0
22332>>16	use	godot-pixel-format
22333
22334# Type: Godot 4 texture
22335# From: David Korth <gerbilsoft@gerbilsoft.com>
22336# References:
22337# - https://github.com/godotengine/godot/blob/master/core/io/image.h
22338# - https://github.com/godotengine/godot/blob/master/scene/resources/texture.cpp
22339# - https://github.com/godotengine/godot/blob/master/scene/resources/texture.h
22340# TODO: Don't show "rescale to" if it matches the image size.
223410	string	GST2	Godot 4 texture
22342!:ext	stex
22343!:mime	image/x-godot-stex
22344>4	ulelong		x	v%u:
22345>0x28	uleshort	x	%u x
22346>0x2A	uleshort	x	%u
22347>8	use	godot-rescale-display-w
22348>12	use	godot-rescale-display-h
22349>12	uleshort	x	\b,
22350>0x2C	ulelong		>1	%u mipmaps,
22351>0x30	use	godot-pixel-format
22352>0x24	ulelong		1	\b, embedded PNG image
22353>0x24	ulelong		2	\b, embedded WebP image
22354>0x24	ulelong		3	\b, Basis Universal
22355
22356# Summary:	iCEDraw graphic *.IDF
22357# URL:		http://fileformats.archiveteam.org/wiki/ICEDraw
22358# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/i/idf-icedraw.trid.xml
22359# From:		Joerg Jenderek
22360# Note:		called "iCEDraw graphic" by TrID, "iCEDraw text" by FFmpeg and "iCE Draw" by Ansilove
22361#		verified by FFmpeg command `ffprobe ICE-9605.IDF` and `ansilove -s SQ-FORCE.IDF`
223620	string		\0041.4\0\0\0\0O\0	iCEDraw graphic
22363#!:mime	application/octet-stream
22364!:mime	image/x-idf
22365!:ext	idf
22366
22367#------------------------------------------------------------------------------
22368# $File: inform,v 1.5 2009/09/19 16:28:09 christos Exp $
22369# inform:  file(1) magic for Inform interactive fiction language
22370
22371# URL:  http://www.inform-fiction.org/
22372# From: Reuben Thomas <rrt@sc3d.org>
22373
223740	search/100/cW	constant\ story		Inform source text
22375
22376#------------------------------------------------------------------------------
22377# $File: intel,v 1.22 2022/04/02 14:47:42 christos Exp $
22378# intel:  file(1) magic for x86 Unix
22379#
22380# Various flavors of x86 UNIX executable/object (other than Xenix, which
22381# is in "microsoft").  DOS is in "msdos"; the ambitious soul can do
22382# Windows as well.
22383#
22384# Windows NT belongs elsewhere, as you need x86 and MIPS and Alpha and
22385# whatever comes next (HP-PA Hummingbird?).  OS/2 may also go elsewhere
22386# as well, if, as, and when IBM makes it portable.
22387#
22388# The `versions' should be un-commented if they work for you.
22389# (Was the problem just one of endianness?)
22390#
223910	leshort		0502		basic-16 executable
22392>12	lelong		>0		not stripped
22393#>22	leshort		>0		- version %d
223940	leshort		0503		basic-16 executable (TV)
22395>12	lelong		>0		not stripped
22396#>22	leshort		>0		- version %d
223970	leshort		0510		x86 executable
22398>12	lelong		>0		not stripped
223990	leshort		0511		x86 executable (TV)
22400>12	lelong		>0		not stripped
224010	leshort		=0512		iAPX 286 executable small model (COFF)
22402>12	lelong		>0		not stripped
22403#>22	leshort		>0		- version %d
224040	leshort		=0522		iAPX 286 executable large model (COFF)
22405>12	lelong		>0		not stripped
22406#>22	leshort		>0		- version %d
22407# updated by Joerg Jenderek at Oct 2015
22408# https://de.wikipedia.org/wiki/Common_Object_File_Format
22409# http://www.delorie.com/djgpp/doc/coff/filhdr.html
22410# ./msdos (version 5.25) labeled the next entry as "MS Windows COFF Intel 80386 object file"
22411# ./intel (version 5.25) label labeled the next entry as "80386 COFF executable"
22412# SGI labeled the next entry as "iAPX 386 executable" --Dan Quinlan
224130	leshort		=0514
22414# use subroutine to display name+flags+variables for common object formatted files
22415>0	use				display-coff
22416#>12	lelong		>0		not stripped
22417# no hint found, that at offset 22 is version
22418#>22	leshort		>0		- version %d
224190	leshort		0x0200
22420# no F_EXEC flag bit implies Intel ia64 COFF object file without optional header
22421>18	leshort		^0x0002
22422# skip some DEGAS high-res uncompressed bitmap *.pi3 handled by ./images like
22423# GEMINI03.PI3 MODEM2.PI3 POWERFIX.PI3 sigirl1.pi3 vanna5.pi3
22424# by test for valid starting character (often point 0x2E) of 1st section name
22425>>20	ubyte		>0x1F
22426>>>0	use				display-coff
22427# F_EXEC flag bit implies Intel ia64 COFF executable
22428>18	leshort		&0x0002
22429>>0	use				display-coff
224300	leshort		0x8664
22431>0	use				display-coff
22432
22433# rom: file(1) magic for BIOS ROM Extensions found in intel machines
22434#      mapped into memory between 0xC0000 and 0xFFFFF
22435# From: Alex Myczko <alex@aiei.ch>
22436# updated by Joerg Jenderek
22437# https://en.wikipedia.org/wiki/Option_ROM
22438# URL:		http://fileformats.archiveteam.org/wiki/BIOS
22439# Reference:	http://www.lejabeach.com/sisubb/BIOS_Disassembly_Ninjutsu_Uncovered.pdf
224400	beshort		0x55AA
22441# skip misidentified raspberry pi pieeprom-*.bin by check for
22442# unlikely high ROM size (0xF0*512=240*512) and not observed start instruction 0x0F
22443>2	ubeshort	!0xF00F
22444# skip 2 byte sized eof.bin with start magic
22445>>0	use		rom-x86
224460	name		rom-x86
22447>0	beshort		x		BIOS (ia32) ROM Ext.
22448#!:mime	application/octet-stream
22449!:mime	application/x-ibm-rom
22450!:ext	rom/bin
22451################################################################################
22452# not Plug aNd Play ($PnP) like 00000000 (ide_xtp.bin kvmvapic.bin V7VGA.ROM) 000000fc (MCT-VGA.bin)
22453# 55aaf00f (pieeprom-*.bin) 55aa40e9 (Trm3x5.bin) 24506f4f (sgabios-bin.rom)
22454# 55aa4be9 (vgabios-stdvga.rom vgabios-cirrus-bin.rom vgabios-vmware-bin.rom)
22455>(26.s)	ubelong		!0x24506e50
22456#>(26.s)	ubelong		!0x24506e50	NOT PNP=%8.8x
22457# also not PCI (PCIR) implies "old" ISA cards or foo like: 8a168404 (MCT-VGA.bin)
22458# 55aaf00f (pieeprom*.bin)
22459>>(24.s)	ubelong	!0x50434952
22460#>>(24.s)	ubelong	!0x50434952	ISA CARD=%8.8x
22461# "old" identification strings used in file version 5.41 and earlier
22462# probably an USB controller
22463>>>5	string		USB		USB
22464# probably	https://en.wikipedia.org/wiki/Preboot_Execution_Environment
22465>>>7	string		LDR		UNDI image
22466# probably another Adaptec SCSI controller
22467>>>26	string		Adaptec		Adaptec
22468# http://minuszerodegrees.net/rom/bin/adaptec_aha1542cp_bios_908501-00.bin
22469# already done by PNP variant
22470#>>>28	string		Adaptec		Adaptec
22471# probably Promise SCSI controller
22472>>>42	string		PROMISE		Promise
22473# old test for IBM compatible Video cards; INTERNAL FACTS WHY IS THIS WORKING?
22474>30      string          IBM          IBM comp. Video
22475# display exact text for IBM compatible Video cards with longer text
22476>>33	ubyte		!0
22477>>>30	string		x		"%s"
22478# http://minuszerodegrees.net/rom/bin/unknown/MCT-VGA-16%20-%20TDVGA%203588%20BIOS%20Version%20V1.04A.zip
22479# "IBM COMPATIBLETDVGA 3588 BIOS Version V1.04A2+"	"MCT-VGA-16 - TDVGA 3588 BIOS Version V1.04A.bin"
22480# "IBM VGA Compatible\001"				NVidia44.bin
22481# "IBM EGA ROM Video Seven BIOS Code, Version 1.04"	V7VGA.ROM
22482# "IBM"							vgabios-stdvga.rom
22483# "IBM"							vgabios-vmware-bin.rom:
22484# "IBM"							vgabios-cirrus-bin.rom
22485# "IBM"							vgabios-virtio-bin.rom
22486################################################################################
22487# ROM size in 512B blocks must be interpreted as unsigned for ROM of network cards
22488# like: efi-eepro100.rom efi-rtl8139.rom pxe-e1000.rom
22489>2       ubyte            x            (%u*512)
22490# file name		file size	calculated size	remark
22491# eof.bin		2		-		with start magic nothing is shown here
22492# orchid.bin		188		0	=0*512	on window 95 CD in Drivers\audio\orchid3d
22493# multiboot.bin		1024		1024	=2*512	QEMU emulator
22494# loader1.bin		512		2048	=4*512
22495# ide_xtp.bin		8192		8192	=16*512
22496# kvmvapic.bin		9216		9216	=18*512
22497# V7VGA.ROM		18832		16384	=32*512
22498# adaptec1542.bin	32768		16384	=32*512
22499# MCT-VGA.bin		32768		24576	=48*512
22500# 2975BIOS.BIN		32768		32256	=63*512
22501# efi-e1000.rom		196608		64000	=125*512
22502# efi-rtl8139.rom	176640		66048	=129*512
22503# pieeprom*.bin		524288		122880	=240*512
22504################################################################################
22505# initialization vector with executable code; often near JuMP instruction E9 yy zz
22506>3	ubyte			=0xE9	jmp
22507# jmp offset like: 008fh 0093h 009fh 00afh 0143h 3ad7h 5417h 54ech 594dh 895fh
22508>>4	uleshort		x	%#4.4x
22509# for initialization vector samples without 3 byte jump instruction
22510>3	ubyte			!0xE9	instruction
22511#	eb4b3734h	NVidia44.bin
22512#	00003234h	V7VGA.ROM
22513#	060e0731h	kvmvapic.bin
22514#	cb000000h	linuxboot-bin.rom
22515#	e80d0fcbh	PXE-Intel.rom
22516#	b8004875h	orchid.bin
22517>>3	ubelong			x	%#8.8x
22518# For misidetified raspberry pi pieeprom-*.bin like: 0xf00f
22519#>2	ubeshort		x	\b, AT 2 %#4.4x
22520################################################################################
22521#		new sections for BIOS (ia32) ROM Extension
22522# 4 bytes ASCII Signature "$PnP" for Plug aNd Play expansion header
22523>(26.s)	string		=$PnP		\b;
22524#>(26.s)	string		=$PnP		FOUND $PnP
22525# at 1Ah possible offset to expansion header structure; new for Plug aNd Play
22526>>26		uleshort	x	at %#x PNP
22527# Plug and Play vendor+device ID like: 0 0x000f1000 (2975BIOS.BIN) 0x31121095 (4243.bin) 0x04904215 (adaptec1542.bin)
22528#>>(26.s+0x0A)	ulelong		!0	NOT-nullID=%8.8x
22529>>(26.s+0x0A)	uleshort	!0
22530# show PnP Vendor identification in human readable text form instead of numeric
22531# For adaptec_ava1515_bios_585201-00.bin reverted endian! BUT IS THIS ALWAYS TRUE?
22532>>>(26.s+0x0C)	use		\^PCI-vendor
22533>>>(26.s+0x0A)	ubeshort	x	device=%#4.4x
22534# 3 byte Device type code; probably the same meaning as in PCI section?
22535# OK for	storage controller SCSI		(2975BIOS.BIN adaptec1542.bin)
22536# and		network controller ethernet	(efi-e1000.rom efi-rtl8139.rom)
22537>>(26.s+0x12)	use		PCI-class
22538# structure revision like: 01h
22539>>(26.s+4)	ubyte		!1	\b, revision %u
22540# PnP Header structure length in multiple of 16 bytes like: 2
22541>>(26.s+5)	uleshort	!2	\b, length %u*16
22542# offset to next header; 0 if none
22543>>(26.s+7)	uleshort	!0	\b, at %#x next header
22544# reserved byte; seems to be zero
22545>>(26.s+8)	ubyte		!0	\b, reserved %#x
22546# 8-bit checksum for this header; calculated and patched by patch2pnprom
22547>>(26.s+9)	ubyte		!0	\b, CRC %#x
22548# pointer to optional manufacturer string; like: 0 (4243.bin) 59h 5ch 60h c7h 14eh 27ch 296h 324h 3662h
22549>>(26.s+0x0E)	uleshort	>0	\b, at %#x
22550>>>(26.s+0x0C)	uleshort	x
22551# manufacturer ASCII-Z string like "http://ipxe.org" "Plop - Elmar Hanlhofer www.plop.at" "QEMU"
22552>>>>(&0.s)	string		x	"%s"
22553# pointer to optional product string; like: 0 (2975BIOS.BIN) 6ch 70h 7ch d9h 160h 281h 29bh 329h
22554>>(26.s+0x10)	uleshort	>0	\b, at %#x
22555>>>(26.s+0x0E)	uleshort	x
22556# often human readable product ASCII-Z string like "iPXE" "Plop Boot Manager"
22557# "multiboot loader" "Intel UNDI, PXE-2.0 (build 082)"
22558>>>>(&0.s)	string		x	"%s"
22559# PnP Device indicators; contains bits that identify the device as being capable of bootable
22560#>>(26.s+0x15)	ubyte		x	\b, INDICATORS %#x
22561# device is a display device
22562>>(26.s+0x15)	ubyte		&0x01	\b, display
22563# device is an input device
22564>>(26.s+0x15)	ubyte		&0x02	\b, input
22565# device is an IPL device
22566>>(26.s+0x15)	ubyte		&0x04	\b, IPL
22567#>>(26.s+0x15)	ubyte		&0x08	reserved
22568# ROM is only required if this device is selected as a boot device
22569>>(26.s+0x15)	ubyte		&0x10	\b, bootable
22570# indicates ROM is read cacheable
22571>>(26.s+0x15)	ubyte		&0x20	\b, cacheable
22572# ROM may be shadowed in RAM
22573>>(26.s+0x15)	ubyte		&0x40	\b, shadowable
22574# ROM supports the device driver initialization model
22575>>(26.s+0x15)	ubyte		&0x80	\b, InitialModel
22576# boot connection vector; an offset to a routine that hook into INT 9h, INT 10h, or INT 13h
22577# 0 means disabled 0x0429 (4650_sr5.bin) 0x0072 (adaptec1542.bin)
22578>>(26.s+0x16)	uleshort	!0	\b, boot vector offset %#x
22579# disconnect vector; offset to routine that do cleanup from an unsuccessful boot attempt
22580>>(26.s+0x18)	uleshort	!0	\b, disconnect offset %#x
22581# bootstrap entry point/vector (BEV); offset to a routine (like RPL) that hook into INT 19h
22582# 0 means disabled 0x3c (multiboot.bin) 0x358 (efi-rtl8139.rom) 0xae7 (PXE-Intel.rom)
22583>>(26.s+0x1A)	uleshort	!0	\b, bootstrap offset %#x
22584# 2nd reserved area; seems to be zero
22585>>(26.s+0x1C)	uleshort	!0	\b, 2nd reserved %#x
22586# static resource information vector; 0 means disabled
22587>>(26.s+0x1E)	uleshort	!0	\b, static offset %#4.4x
22588################################################################################
22589# 4 bytes ASCII Signature "PCIR" for PCI Data Structure
22590#>(24.s)	string			=PCIR	FOUND PCIR
22591>(24.s)	string			=PCIR	\b;
22592# pointer to PCI data structure like: 1Ch 38h 104h 8E44h
22593>>24	uleshort		x	at %#x PCI
22594# Vendor identification (ID)		https://pci-ids.ucw.cz/v2.2/pci.ids
22595#>>(24.s+4)	uleshort	x	ID=%4.4x
22596# show Vendor identification in human readable text form instead of numeric
22597>>(24.s+4)	use		PCI-vendor
22598# device identification (ID)
22599>>(24.s+6)	uleshort	x	device=%#4.4x
22600# Base+sub class code			https://wiki.osdev.org/PCI
22601>>(24.s+0x0D)	use		PCI-class
22602# pointer to vital product data (VPD); 0 indicates no VPD; WHAT EXACTLY iS VPD?
22603>>(24.s+8)	uleshort	!0	\b, at %#x VPD
22604# PCI data structure length like: 24h 28h
22605>>(24.s+0xA)	uleshort	>0x28	\b, length %u
22606# PCI data structure revision like: 0 3
22607>>(24.s+0xC)	ubyte		>0	\b, revison %u
22608# image length (hexadecimal) in multiple of 512 bytes like: 54 56 68 6a 76 78 7c 7d 7e 7f 80 81 83
22609# Apparently this gives the same information as given by byte at offset 2 but as 16-bit
22610#>>(24.s+0x10)	uleshort	x	\b, length %u*512
22611# revision level of code/data like: 0 1 201h 502h
22612>>(24.s+0xC)	ubyte		>1	\b, code revison %#x
22613# code type: 0~Intel x86/PC-AT compatible 1~Open firmware standard for PCI42 FF~Reserved
22614>>(24.s+0x14)	ubyte		>0	\b, code type %#x
22615# last image indicator; bit 7 indicates "last image"; bits 0-6 are reserved
22616>>(24.s+0x15)	ubyte		>0
22617>>>(24.s+0x15)	ubyte		=0x80	\b, last ROM
22618# THIS SHOULD NOT HAPPEN!
22619>>>(24.s+0x15)	ubyte		!0x80	\b, indicator %x
22620# 3rd reserved area; seems to be zero in most cases but not for
22621# efi-e1000.rom efi-rtl8139.rom
22622>>(24.s+0x16)	ubeshort	!0	\b, 3rd reserved %#x
22623
22624# Flash descriptors for Intel SPI flash roms.
22625# From Dr. Jesus <j@hug.gs>
226260	lelong		0x0ff0a55a	Intel serial flash for ICH/PCH ROM <= 5 or 3400 series A-step
2262716	lelong		0x0ff0a55a	Intel serial flash for PCH ROM
22628
22629# From: 	Joerg Jenderek
22630# URL:		https://en.wikipedia.org/wiki/Advanced_Configuration_and_Power_Interface
22631# Reference:	https://uefi.org/sites/default/files/resources/ACPI_6_3_final_Jan30.pdf
22632# Note:		generated for example by `cat /sys/firmware/acpi/tables/DSDT MyDSDT.aml`
226330	string		DSDT
22634>0	use		acpi-table
22635# not tested or other file format
226360	string		APIC
22637>0	use		acpi-table
22638#0	string		ASF!
22639#>0	use		acpi-table
226400	string		FACP
22641>0	use		acpi-table
22642#0	string		FACS
22643#>0	use		acpi-table
226440	string		MCFG
22645>0	use		acpi-table
226460	string		SLIC
22647>0	use		acpi-table
226480	string		SSDT
22649>0	use		acpi-table
226500	name		acpi-table
22651# skip ASCII text starting with DSDT by looking for valid "low" revision
22652>8	ubyte		<17	ACPI Machine Language file
22653# assume that ACPI tables size are lower than 16 MiB
22654#>4	ulelong		<0x01000000
22655# DSDT for Differentiated System Description Table
22656>>0	string		x	'%.4s'
22657#!:mime	application/octet-stream
22658!:mime	application/x-intel-aml
22659!:ext	aml
22660# the manufacture model ID like: VBOXBIOS BXDSDT
22661>>16	string		>\0	%.8s
22662# OEM revision of DSDT for supplied OEM Table ID like: 0 1 2 20090511
22663>>>24	ulelong		x	%x
22664# OEM ID like: INTEL VBOX (VirtualBox) BXDSDT (qemu) MEDION or \030\001\0\0 for s3pt.aml
22665>>10	ubyte		>040	by %c
22666>>>11		ubyte	>040	\b%c
22667>>>>12		ubyte	>040	\b%c
22668>>>>>13		ubyte	>040	\b%c
22669>>>>>>14	ubyte	>040	\b%c
22670>>>>>>>15	ubyte	>040	\b%c
22671# This field also sets the global integer width for the AML interpreter.
22672# Values less than two will cause the interpreter to use 32-bit.
22673# Values of two and greater will cause the interpreter to use full 64-bit.
22674# 16 for asf!.aml, 67 fo rsdp.aml
22675>>8	ubyte		x	\b, revision %u
22676# length, in bytes, of the entire DSDT (including the header)
22677>>4	ulelong		x	\b, %u bytes
22678# entire table must sum to zero
22679#>>9	ubyte		x	\b, checksum %#x
22680# vendor ID for the ASL Compiler like: INTL MSFT ...
22681>>28	string		>\0	\b, created by %.4s
22682# revision number of the ASL Compiler like: 20051117 20140724 20190703 20200110 ...
22683>>>32	ulelong		x	%x
22684
22685
22686#------------------------------------------------------------------------------
22687# $File: interleaf,v 1.10 2009/09/19 16:28:10 christos Exp $
22688# interleaf:  file(1) magic for InterLeaf TPS:
22689#
226900	string		=\210OPS	Interleaf saved data
226910	string		=<!OPS		Interleaf document text
22692>5	string		,\ Version\ =	\b, version
22693>>17	string		>\0		%.3s
22694
22695#------------------------------------------------------------------------------
22696# $File: island,v 1.5 2009/09/19 16:28:10 christos Exp $
22697# island:  file(1) magic for IslandWite/IslandDraw, from SunOS 5.5.1
22698# "/etc/magic":
22699# From: guy@netapp.com (Guy Harris)
22700#
227014	string		pgscriptver	IslandWrite document
2270213	string		DrawFile	IslandDraw document
22703
22704
22705#------------------------------------------------------------------------------
22706# $File: ispell,v 1.8 2009/09/19 16:28:10 christos Exp $
22707# ispell:  file(1) magic for ispell
22708#
22709# Ispell 3.0 has a magic of 0x9601 and ispell 3.1 has 0x9602.  This magic
22710# will match 0x9600 through 0x9603 in *both* little endian and big endian.
22711# (No other current magic entries collide.)
22712#
22713# Updated by Daniel Quinlan (quinlan@yggdrasil.com)
22714#
227150	leshort&0xFFFC	0x9600		little endian ispell
22716>0	byte		0		hash file (?),
22717>0	byte		1		3.0 hash file,
22718>0	byte		2		3.1 hash file,
22719>0	byte		3		hash file (?),
22720>2	leshort		0x00		8-bit, no capitalization, 26 flags
22721>2	leshort		0x01		7-bit, no capitalization, 26 flags
22722>2	leshort		0x02		8-bit, capitalization, 26 flags
22723>2	leshort		0x03		7-bit, capitalization, 26 flags
22724>2	leshort		0x04		8-bit, no capitalization, 52 flags
22725>2	leshort		0x05		7-bit, no capitalization, 52 flags
22726>2	leshort		0x06		8-bit, capitalization, 52 flags
22727>2	leshort		0x07		7-bit, capitalization, 52 flags
22728>2	leshort		0x08		8-bit, no capitalization, 128 flags
22729>2	leshort		0x09		7-bit, no capitalization, 128 flags
22730>2	leshort		0x0A		8-bit, capitalization, 128 flags
22731>2	leshort		0x0B		7-bit, capitalization, 128 flags
22732>2	leshort		0x0C		8-bit, no capitalization, 256 flags
22733>2	leshort		0x0D		7-bit, no capitalization, 256 flags
22734>2	leshort		0x0E		8-bit, capitalization, 256 flags
22735>2	leshort		0x0F		7-bit, capitalization, 256 flags
22736>4	leshort		>0		and %d string characters
227370	beshort&0xFFFC	0x9600		big endian ispell
22738>1	byte		0		hash file (?),
22739>1	byte		1		3.0 hash file,
22740>1	byte		2		3.1 hash file,
22741>1	byte		3		hash file (?),
22742>2	beshort		0x00		8-bit, no capitalization, 26 flags
22743>2	beshort		0x01		7-bit, no capitalization, 26 flags
22744>2	beshort		0x02		8-bit, capitalization, 26 flags
22745>2	beshort		0x03		7-bit, capitalization, 26 flags
22746>2	beshort		0x04		8-bit, no capitalization, 52 flags
22747>2	beshort		0x05		7-bit, no capitalization, 52 flags
22748>2	beshort		0x06		8-bit, capitalization, 52 flags
22749>2	beshort		0x07		7-bit, capitalization, 52 flags
22750>2	beshort		0x08		8-bit, no capitalization, 128 flags
22751>2	beshort		0x09		7-bit, no capitalization, 128 flags
22752>2	beshort		0x0A		8-bit, capitalization, 128 flags
22753>2	beshort		0x0B		7-bit, capitalization, 128 flags
22754>2	beshort		0x0C		8-bit, no capitalization, 256 flags
22755>2	beshort		0x0D		7-bit, no capitalization, 256 flags
22756>2	beshort		0x0E		8-bit, capitalization, 256 flags
22757>2	beshort		0x0F		7-bit, capitalization, 256 flags
22758>4	beshort		>0		and %d string characters
22759# ispell 4.0 hash files  kromJx <kromJx@crosswinds.net>
22760# Ispell 4.0
227610       string          ISPL            ispell
22762>4      long            x               hash file version %d,
22763>8      long            x               lexletters %d,
22764>12     long            x               lexsize %d,
22765>16     long            x               hashsize %d,
22766>20     long            x               stblsize %d
22767
22768#------------------------------------------------------------------------------
22769# $File: isz,v 1.5 2019/04/19 00:42:27 christos Exp $
22770# ISO Zipped file format
22771# https://www.ezbsystems.com/isz/iszspec.txt
227720	string	IsZ!	ISO Zipped file
22773>4	byte	x	\b, header size %u
22774>5	byte	x	\b, version %u
22775>8	lelong	x	\b, serial %u
22776#12	leshort	x	\b, sector size %u
22777#>16	lelong	x	\b, total sectors %u
22778>17	byte	>0	\b, password protected
22779#>24	lequad	x	\b, segment size %llu
22780#>32	lelong	x	\b, blocks %u
22781#>36	lelong	x	\b, block size %u
22782
22783#------------------------------------------------------------
22784# $File: java,v 1.21 2019/02/18 17:58:50 christos Exp $
22785# Java ByteCode and Mach-O binaries (e.g., Mac OS X) use the
22786# same magic number, 0xcafebabe, so they are both handled
22787# in the entry called "cafebabe".
22788#------------------------------------------------------------
22789# Java serialization
22790# From Martin Pool (m.pool@pharos.com.au)
227910	beshort		0xaced		Java serialization data
22792>2	beshort		>0x0004		\b, version %d
22793
227940	belong		0xfeedfeed	Java KeyStore
22795!:mime	application/x-java-keystore
227960	belong		0xcececece	Java JCE KeyStore
22797!:mime	application/x-java-jce-keystore
22798
22799# Java source
228000	regex	\^import.*;$	Java source
22801!:mime	text/x-java
22802
22803# Java HPROF dumps
22804# https://java.net/downloads/heap-snapshot/hprof-binary-format.html
228050	string		JAVA\x20PROFILE\x201.0.
22806>0x12	byte		0
22807>>0x11	ubyte-0x31	<2      Java HPROF dump,
22808>>>0x17	beqdate/1000	x       created %s
22809
22810# Java jmod module
22811# See https://hg.openjdk.java.net/jdk9/jdk9/jdk/file/tip/src/java.base/share/classes/jdk/internal/jmod/JmodFile.java
22812# Grr. 2 byte magic "JM", really? In 2019?
228130	belong		0x4a4d0100	Java jmod module version 1.0
22814!:mime	application/x-java-jmod
22815
22816# Java jlinked image
22817# See https://hg.openjdk.java.net/jdk9/jdk9/jdk/file/tip/src/java.base/share/native/libjimage/imageFile.hpp
228180	belong	0xcafedada	Java module image (big endian)
22819>4	beshort	>0x00	\b, version %d
22820>6	beshort	x	\b.%d
22821!:mime	application/x-java-image
22822
228230	lelong	0xcafedada	Java module image (little endian)
22824>6	leshort	>0x00	\b, version %d
22825>4	leshort	x	\b.%d
22826!:mime	application/x-java-image
22827
22828#------------------------------------------------------------------------------
22829# $File: javascript,v 1.4 2022/09/02 08:08:17 christos Exp $
22830# javascript:  magic for javascript and node.js scripts.
22831#
228320	string/w	#!/bin/node		Node.js script text executable
22833!:mime application/javascript
228340	string/w	#!/usr/bin/node		Node.js script text executable
22835!:mime application/javascript
228360	string/w	#!/bin/nodejs		Node.js script text executable
22837!:mime application/javascript
228380	string/w	#!/usr/bin/nodejs	Node.js script text executable
22839!:mime application/javascript
228400	string		#!/usr/bin/env\ node	Node.js script text executable
22841!:mime application/javascript
228420	string		#!/usr/bin/env\ nodejs	Node.js script text executable
22843!:mime application/javascript
22844# Hermes by Facebook https://hermesengine.dev/
22845# https://github.com/facebook/hermes/blob/master/include/hermes/\
22846# BCGen/HBC/BytecodeFileFormat.h#L24
228470	lequad		0x1F1903C103BC1FC6	Hermes JavaScript bytecode
22848>8	lelong		x			\b, version %d
22849
22850# v8 JavaScript engine bytecode
22851# From: Alexandre Iooss <erdnaxe@crans.org>
22852# URL:	https://v8.dev/docs/ignition
22853# Note: used in bytenode and NW.js protected source code
22854# V8 bytecode extraction was added in NodeJS v5.7.0 (V8 4.6.85.31).
22855# Version information is provided for some v8 versions found in NodeJS releases.
228562	uleshort		=0xC0DE
22857>0	ulelong^0xC0DE0000	>0
22858# Reservation table starts at 40
22859>>40	ulelong&0xFFFFFF00	=0x80000000
22860# Stub keys present
22861>>>24	ulelong			>0
22862>>>>0	ulelong^0xC0DE0000	x		v8 bytecode, external reference table size: %u bytes,
22863>>>>4	ulelong			=0xEE4BF478	version 5.1.281.111,
22864>>>>4	ulelong			=0xC4A0100C	version 5.5.372.43,
22865>>>>8	ulelong			x		source size: %u bytes,
22866>>>>12	ulelong			x		cpu features: %#08X,
22867>>>>16	ulelong			x		flag hash: %#08X,
22868>>>>20	ulelong			x		%u reservations,
22869>>>>28	ulelong			x		payload size: %u bytes,
22870>>>>32	ulelong			x		checksum1: %#08X,
22871>>>>36	ulelong			x		checksum2: %#08X
22872# No stub keys
22873>>>24	ulelong			=0
22874>>>>0	ulelong^0xC0DE0000	x		v8 bytecode, external reference table size: %u bytes,
22875>>>>4	ulelong			=0x54F0AD81	version 6.2.414.46,
22876>>>>4	ulelong			=0X7D1BF182	version 6.2.414.54,
22877>>>>4	ulelong			=0x35BA122E	version 6.2.414.77,
22878>>>>4	ulelong			=0X9319F9C2	version 6.2.414.78,
22879>>>>4	ulelong			=0xB1240060	version 6.6.346.32,
22880>>>>4	ulelong			=0x2B757060	version 6.7.288.46,
22881>>>>4	ulelong			=0x09D147AA	version 6.7.288.49,
22882>>>>4	ulelong			=0xF4D4F48A	version 6.8.275.32,
22883>>>>4	ulelong			=0xD3961326	version 7.0.276.38,
22884>>>>8	ulelong			x		source size: %u bytes,
22885>>>>12	ulelong			x		cpu features: %#08X,
22886>>>>16	ulelong			x		flag hash: %#08X,
22887>>>>20	ulelong			x		%u reservations,
22888>>>>28	ulelong			x		payload size: %u bytes,
22889>>>>32	ulelong			x		checksum1: %#08X,
22890>>>>36	ulelong			x		checksum2: %#08X
22891# Reservation table starts at 32
22892>>32	ulelong&0xFFFFFF00	=0x80000000
22893# Second checksum present
22894>>>28	ulelong			>0
22895>>>>0	ulelong^0xC0DE0000	x		v8 bytecode, external reference table size: %u bytes,
22896>>>>4	ulelong			=0x21DDF627	version 7.4.288.21,
22897>>>>4	ulelong			=0x1FC9FE84	version 7.4.288.27,
22898>>>>4	ulelong			=0x60A99E8B	version 7.5.288.22,
22899>>>>4	ulelong			=0x4F665E90	version 7.6.303.29,
22900>>>>4	ulelong			=0xC7ACFCDE	version 7.7.299.11,
22901>>>>4	ulelong			=0x7F641D8F	version 7.7.299.13,
22902>>>>4	ulelong			=0xFD9A4F2E	version 7.8.279.17,
22903>>>>4	ulelong			=0x3A845324	version 7.8.279.23,
22904>>>>4	ulelong			=0xFF52FEAF	version 7.9.317.25,
22905>>>>8	ulelong			x		source size: %u bytes,
22906>>>>12	ulelong			x		flag hash: %#08X,
22907>>>>16	ulelong			x		%u reservations,
22908>>>>20	ulelong			x		payload size: %u bytes,
22909>>>>24	ulelong			x		checksum1: %#08X,
22910>>>>28	ulelong			x		checksum2: %#08X
22911# No second checksum
22912>>>28	ulelong			=0
22913>>>>0	ulelong^0xC0DE0000	x		v8 bytecode, external reference table size: %u bytes,
22914>>>>4	ulelong			=0x8725E0F8	version 8.1.307.30,
22915>>>>4	ulelong			=0x09ED1289	version 8.1.307.31,
22916>>>>4	ulelong			=0xA5728C87	version 8.3.110.9,
22917>>>>4	ulelong			=0xB45C5D30	version 8.4.371.23,
22918>>>>4	ulelong			=0xED9C278B	version 8.4.371.19,
22919>>>>4	ulelong			=0xD27BFF42	version 8.6.395.16,
22920>>>>8	ulelong			x		source size: %u bytes,
22921>>>>12	ulelong			x		flag hash: %#08X,
22922>>>>16	ulelong			x		%u reservations,
22923>>>>20	ulelong			x		payload size: %u bytes,
22924>>>>24	ulelong			x		payload checksum: %#08X
22925# No reservation table and code starts at 24
22926>>32	ulelong		=0
22927>>>0	ulelong^0xC0DE0000	x		v8 bytecode, external reference table size: %u bytes,
22928>>>4	ulelong			=0x9A6F0B0F	version 9.0.257.17,
22929>>>4	ulelong			=0x271D5D1E	version 9.0.257.24,
22930>>>4	ulelong			=0x4EEA75DF	version 9.0.257.25,
22931>>>4	ulelong			=0x80809479	version 9.1.269.36,
22932>>>4	ulelong			=0x55C46F65	version 9.1.269.38,
22933>>>4	ulelong			=0x8A9C758A	version 9.2.230.21,
22934>>>4	ulelong			=0x9712F0E1	version 9.3.345.16,
22935>>>4	ulelong			=0x29593715	version 9.4.146.19,
22936>>>4	ulelong			=0xCD991825	version 9.4.146.24,
22937>>>4	ulelong			=0xACDD64EE	version 9.4.146.26,
22938>>>4	ulelong			=0xC96B4CD5	version 9.5.172.21,
22939>>>4	ulelong			=0xBCCE4578	version 9.5.172.25,
22940>>>4	ulelong			=0xA2EEA077	version 9.6.180.15,
22941>>>4	ulelong			=0xFD350011	version 10.1.124.8,
22942>>>4	ulelong			=0xBEF4028F	version 10.2.154.13,
22943>>>4	ulelong			=0xAF632352	version 10.2.154.4,
22944>>>8	ulelong			x		source size: %u bytes,
22945>>>12	ulelong			x		flag hash: %#08X,
22946>>>16	ulelong			x		payload size: %u bytes,
22947>>>20	ulelong			x		payload checksum: %#08X
22948
22949#------------------------------------------------------------------------------
22950# $File: jpeg,v 1.37 2022/06/17 18:03:35 christos Exp $
22951# JPEG images
22952# SunOS 5.5.1 had
22953#
22954#	0	string		\377\330\377\340	JPEG file
22955#	0	string		\377\330\377\356	JPG file
22956#
22957# both of which turn into "JPEG image data" here.
22958#
229590	belong			0xffd8fff7	JPEG-LS image data
22960!:mime	image/jls
22961!:ext jls
22962>0	use			jpeg
22963
229640	belong&0xffffff00	0xffd8ff00	JPEG image data
22965!:mime	image/jpeg
22966!:apple	8BIMJPEG
22967!:strength *3
22968!:ext jpeg/jpg/jpe/jfif
22969>0	use			jpeg
22970
229710	name		jpeg
22972>6	string		JFIF		\b, JFIF standard
22973# The following added by Erik Rossen <rossen@freesurf.ch> 1999-09-06
22974# in a vain attempt to add image size reporting for JFIF.  Note that these
22975# tests are not fool-proof since some perfectly valid JPEGs are currently
22976# impossible to specify in magic(4) format.
22977# First, a little JFIF version info:
22978>>11	byte		x		\b %d.
22979>>12	byte		x		\b%02d
22980# Next, the resolution or aspect ratio of the image:
22981>>13	byte		0		\b, aspect ratio
22982>>13	byte		1		\b, resolution (DPI)
22983>>13	byte		2		\b, resolution (DPCM)
22984>>14	beshort		x		\b, density %dx
22985>>16	beshort		x		\b%d
22986>>4	beshort		x		\b, segment length %d
22987# Next, show thumbnail info, if it exists:
22988>>18	byte		!0		\b, thumbnail %dx
22989>>>19	byte		x		\b%d
22990>6	string		Exif		\b, Exif standard: [
22991>>12	indirect/r	x
22992>>12	string		x		\b]
22993
22994# Jump to the first segment
22995>(4.S+4)	use		jpeg_segment
22996
22997# This uses recursion...
229980		name		jpeg_segment
22999>0	beshort		0xFFFE
23000# Recursion handled by FFE0
23001#>>(2.S+2)	use			jpeg_segment
23002>>2	pstring/HJ	x		\b, comment: "%s"
23003
23004>0	beshort		0xFFC0
23005>>(2.S+2)	use			jpeg_segment
23006>>4	byte		x		\b, baseline, precision %d
23007>>7	beshort		x		\b, %dx
23008>>5	beshort		x		\b%d
23009>>9	byte		x		\b, components %d
23010
23011>0	beshort		0xFFC1
23012>>(2.S+2)	use			jpeg_segment
23013>>4	byte		x		\b, extended sequential, precision %d
23014>>7	beshort		x		\b, %dx
23015>>5	beshort		x		\b%d
23016>>9	byte		x		\b, components %d
23017
23018>0	beshort		0xFFC2
23019>>(2.S+2)	use			jpeg_segment
23020>>4	byte		x		\b, progressive, precision %d
23021>>7	beshort		x		\b, %dx
23022>>5	beshort		x		\b%d
23023>>9	byte		x		\b, components %d
23024
23025# Define Huffman Tables
23026>0	beshort		0xFFC4
23027>>(2.S+2)	use			jpeg_segment
23028
23029>0	beshort		0xFFE1
23030# Recursion handled by FFE0
23031#>>(2.S+2)	use			jpeg_segment
23032>>4	string		Exif		\b, Exif Standard: [
23033>>>10	indirect/r	x
23034>>>10	string		x		\b]
23035
23036# Application specific markers
23037>0	beshort&0xFFE0	=0xFFE0
23038>>(2.S+2)	use			jpeg_segment
23039
23040# DB: Define Quantization tables
23041# DD: Define Restart interval [XXX: wrong here, it is 4 bytes]
23042# D8: Start of image
23043# D9: End of image
23044# Dn: Restart
23045>0	beshort&0xFFD0	=0xFFD0
23046>>0	beshort&0xFFE0	!0xFFE0
23047>>>(2.S+2)	use			jpeg_segment
23048
23049#>0	beshort		x		unknown %#x
23050#>>(2.S+2)	use			jpeg_segment
23051
23052# HSI is Handmade Software's proprietary JPEG encoding scheme
23053# Update:	Joerg Jenderek
23054# URL:		http://fileformats.archiveteam.org/wiki/HSI_JPEG
23055# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-hsi1.trid.xml
23056# Note:         called by TrID "HSI JPEG bitmap"
230570	string		hsi1		JPEG image data, HSI proprietary
23058#!:mime	application/octet-stream
23059!:mime	image/x-hsi
23060!:ext	hsi/jpg
23061
23062# From: David Santinoli <david@santinoli.com>
230630	string		\x00\x00\x00\x0C\x6A\x50\x20\x20\x0D\x0A\x87\x0A	JPEG 2000
23064# delete from ./animation (version 1.87) with jP (=6A50h) magic at offset 4
23065# From: Johan van der Knijff <johan.vanderknijff@kb.nl>
23066# Added sub-entries for JP2, JPX, JPM and MJ2 formats; added mimetypes
23067# https://github.com/bitsgalore/jp2kMagic
23068#
23069# Now read value of 'Brand' field, which yields a few possibilities:
23070# Update:	Joerg Jenderek
23071# URL:		http://fileformats.archiveteam.org/wiki/JP2
23072# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-jpeg2k.trid.xml
23073# Note:         called by TrID "JPEG 2000 bitmap"
23074>20	string		\x6a\x70\x32\x20	Part 1 (JP2)
23075# aliases	image/jpeg2000, image/jpeg2000-image, image/x-jpeg2000-image
23076!:mime	image/jp2
23077!:ext	jp2
23078# URL:		http://fileformats.archiveteam.org/wiki/JPX
23079# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-jpx.trid.xml
23080# Note:         called by TrID "JPEG 2000 eXtended bitmap"
23081>20	string		\x6a\x70\x78\x20	Part 2 (JPX)
23082!:mime	image/jpx
23083!:ext	jpf/jpx
23084# URL:		http://fileformats.archiveteam.org/wiki/JPM
23085# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-jpm.trid.xml
23086# Note:         called by TrID "JPEG 2000 eXtended bitmap"
23087>20	string		\x6a\x70\x6d\x20	Part 6 (JPM)
23088!:mime	image/jpm
23089!:ext	jpm
23090# URL:		http://fileformats.archiveteam.org/wiki/MJ2
23091# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/v/video-mj2.trid.xml
23092# Note:         called by TrID "Motion JPEG 2000 video"
23093>20	string		\x6d\x6a\x70\x32	Part 3 (MJ2)
23094!:mime	video/mj2
23095!:ext	mj2/mjp2
23096
23097# Type: JPEG 2000 codesream
23098# From: Mathieu Malaterre <mathieu.malaterre@gmail.com>
23099# Update:	Joerg Jenderek
23100# URL:		http://fileformats.archiveteam.org/wiki/JPEG_2000_codestream
23101# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-jpc.trid.xml
23102# Note:         called by TrID "JPEG-2000 Code Stream bitmap"
231030	belong		0xff4fff51						JPEG 2000 codestream
23104# value like: 0701h FF50h
23105#>45	ubeshort	x	\b, at 45 %#4.4x
23106#!:mime	application/octet-stream
23107# https://reposcope.com/mimetype/image/x-jp2-codestream
23108!:mime	image/x-jp2-codestream
23109!:ext	jpc/j2c/j2k
23110# MAYBE also JHC like in byte_causal.jhc ?
23111# WHAT IS THAT? DEAD ENTRY?
23112#45	beshort		0xff52
23113
23114# JPEG extended range
23115# URL:		http://fileformats.archiveteam.org/wiki/JPEG_XR
23116# Reference:	https://www.itu.int/rec/T-REC-T.832
23117#		http://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-wmp.trid.xml
23118# Note:         called by TrID "JPEG XR bitmap"
231190	string		\x49\x49\xbc
23120# FILE_VERSION_ID; shall be equal to 1; other values are reserved for future use
23121>3	byte		1
23122# FIRST_IFD_OFFSET; shall be an integer multiple of 2; so skip DROID fmt-590-signature-id-931.wdp
23123>>4	lelong%2	0	JPEG-XR
23124#!:mime	image/vnd.ms-photo
23125!:mime	image/jxr
23126# NO example for HDP !
23127!:ext	jxr/wdp/hdp
23128# MAYBE also WMP ?
23129#!:ext	jxr/wdp/hdp/wmp
23130# moved from ./images (version 1.205 ), merged and
23131# partly verified by XnView `nconvert -info abydos.jxr FLOWER.wdp`
23132# example: https://web.archive.org/web/20160403012904/
23133# http://shikino.co.jp/solution/upfile/FLOWER.wdp.zip
23134>90	bequad		0x574D50484F544F00
23135>>98	byte&0x08	=0x08			\b, hard tiling
23136>>99	byte&0x80	=0x80			\b, tiling present
23137>>99	byte&0x40	=0x40			\b, codestream present
23138>>99	byte&0x38	x			\b, spatial xform=
23139>>99	byte&0x38	0x00			\bTL
23140>>99	byte&0x38	0x08			\bBL
23141>>99	byte&0x38	0x10			\bTR
23142>>99	byte&0x38	0x18			\bBR
23143>>99	byte&0x38	0x20			\bBT
23144>>99	byte&0x38	0x28			\bRB
23145>>99	byte&0x38	0x30			\bLT
23146>>99	byte&0x38	0x38			\bLB
23147>>100	byte&0x80	=0x80			\b, short header
23148>>>102	beshort+1	x			\b, %d
23149>>>104	beshort+1	x			\bx%d
23150>>100	byte&0x80	=0x00			\b, long header
23151>>>102	belong+1	x			\b, %x
23152>>>106	belong+1	x			\bx%x
23153>>101	beshort&0xf	x			\b, bitdepth=
23154>>>101	beshort&0xf	0x0			\b1-WHITE=1
23155>>>101	beshort&0xf	0x1			\b8
23156>>>101	beshort&0xf	0x2			\b16
23157>>>101	beshort&0xf	0x3			\b16-SIGNED
23158>>>101	beshort&0xf	0x4			\b16-FLOAT
23159>>>101	beshort&0xf	0x5			\b(reserved 5)
23160>>>101	beshort&0xf	0x6			\b32-SIGNED
23161>>>101	beshort&0xf	0x7			\b32-FLOAT
23162>>>101	beshort&0xf	0x8			\b5
23163>>>101	beshort&0xf	0x9			\b10
23164>>>101	beshort&0xf	0xa			\b5-6-5
23165>>>101	beshort&0xf	0xb			\b(reserved %d)
23166>>>101	beshort&0xf	0xc			\b(reserved %d)
23167>>>101	beshort&0xf	0xd			\b(reserved %d)
23168>>>101	beshort&0xf	0xe			\b(reserved %d)
23169>>>101	beshort&0xf	0xf			\b1-BLACK=1
23170>>101	beshort&0xf0	x			\b, colorfmt=
23171>>>101	beshort&0xf0	0x00			\bYONLY
23172>>>101	beshort&0xf0	0x10			\bYUV240
23173>>>101	beshort&0xf0	0x20			\bYWV422
23174>>>101	beshort&0xf0	0x30			\bYWV444
23175>>>101	beshort&0xf0	0x40			\bCMYK
23176>>>101	beshort&0xf0	0x50			\bCMYKDIRECT
23177>>>101	beshort&0xf0	0x60			\bNCOMPONENT
23178>>>101	beshort&0xf0	0x70			\bRGB
23179>>>101	beshort&0xf0	0x80			\bRGBE
23180>>>101	beshort&0xf0	>0x80			\b(reserved %#x)
23181
23182# JPEG XL
23183# From: Ian Tester
23184# Update:	Joerg Jenderek
23185# URL:		http://fileformats.archiveteam.org/wiki/JPEG_XL
23186# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-jxl.trid.xml
23187# Note:         called by TrID "JPEG XL bitmap"
231880	string	\xff\x0a				JPEG XL codestream
23189#!:mime  image/jxl
23190!:mime	image/x-jxl
23191!:ext jxl
23192
23193# JPEG XL (transcoded JPEG file)
23194# Update:	Joerg Jenderek
23195# URL:		http://fileformats.archiveteam.org/wiki/JPEG_XL
23196# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-jxl-iso.trid.xml
23197# Note:         called by TrID "JPEG XL bitmap (ISOBMFF)"
231980	string	\x00\x00\x00\x0cJXL\x20\x0d\x0a\x87\x0a	JPEG XL container
23199#!:mime  image/jxl
23200!:mime	image/x-jxl
23201!:ext jxl
23202
23203#------------------------------------------------------------------------------
23204# $File: karma,v 1.8 2015/08/29 07:10:35 christos Exp $
23205# karma:  file(1) magic for Karma data files
23206#
23207# From <rgooch@atnf.csiro.au>
23208
232090	string	KarmaRHD\040Version	Karma Data Structure Version
23210>16	belong		x		%u
23211
23212#------------------------------------------------------------------------------
23213# $File: kde,v 1.5 2010/11/25 15:00:12 christos Exp $
23214# kde:  file(1) magic for KDE
23215
232160		string/t	[KDE\ Desktop\ Entry]	KDE desktop entry
23217!:mime	application/x-kdelnk
232180		string/t	#\ KDE\ Config\ File	KDE config file
23219!:mime	application/x-kdelnk
232200		string/t	#\ xmcd	xmcd database file for kscd
23221!:mime	text/x-xmcd
23222
23223#------------------------------------------------------------------------------
23224# $File: keepass,v 1.2 2019/04/19 00:42:27 christos Exp $
23225# keepass: file(1) magic for KeePass file
23226#
23227# Keepass Password Safe:
23228#  * original one: https://keepass.info/
23229#  * *nix port:    https://www.keepassx.org/
23230#  * android port: https://code.google.com/p/keepassdroid/
23231
232320	lelong		0x9AA2D903	Keepass password database
23233>4	lelong		0xB54BFB65	1.x KDB
23234>>48	lelong		>0		\b, %d groups
23235>>52	lelong		>0		\b, %d entries
23236>>8	lelong&0x0f	1		\b, SHA-256
23237>>8	lelong&0x0f	2		\b, AES
23238>>8	lelong&0x0f	4		\b, RC4
23239>>8	lelong&0x0f	8		\b, Twofish
23240>>120	lelong		>0		\b, %d key transformation rounds
23241>4	lelong		0xB54BFB67	2.x KDBX
23242
23243#------------------------------------------------------------------------------
23244# $File: kerberos,v 1.3 2019/04/19 00:42:27 christos Exp $
23245# kerberos: MIT kerberos file binary formats
23246#
23247
23248# This magic entry is for demonstration purposes and could be improved
23249# if the following features were implemented in file:
23250#
23251# Strings inside [[ .. ]] in the descriptions have special meanings and
23252# are not printed.
23253#
23254# 	- Provide some form of iteration in number of components
23255#		[[${counter}=%d]] in the description
23256#		then append
23257#		[${counter}--] in the offset of the entries
23258#	- Provide a way to round the next offset
23259#		Add [R:4] after the offset?
23260#	- Provide a way to have optional entries
23261#		XXX: Syntax:
23262#	- Provide a way to "save" entries to print them later.
23263#		if the description is [[${name}=%s]], then nothing is
23264#		printed and a subsequent entry in the same magic file
23265#		can refer to ${name}
23266#	- Provide a way to format strings as hex values
23267#
23268# https://www.gnu.org/software/shishi/manual/html_node/\
23269#	The-Keytab-Binary-File-Format.html
23270#
23271
232720		name		keytab_entry
23273#>0		beshort		x		\b, size=%d
23274#>2		beshort		x		\b, components=%d
23275>4		pstring/H	x		\b, realm=%s
23276>>&0		pstring/H	x		\b, principal=%s/
23277>>>&0		pstring/H	x		\b%s
23278>>>>&0		belong		x		\b, type=%d
23279>>>>>&0		bedate		x		\b, date=%s
23280>>>>>>&0	byte		x		\b, kvno=%u
23281#>>>>>>>&0	pstring/H	x
23282#>>>>>>>>&0	belong		x
23283#>>>>>>>>>>&0	use		keytab_entry
23284
232850		belong		0x05020000	Kerberos Keytab file
23286>4		use		keytab_entry
23287
23288#------------------------------------------------------------------------------
23289# $File: kicad,v 1.2 2020/05/06 14:03:28 christos Exp $
23290# kicad:  file(1) magic for KiCad files
23291#
23292# See
23293#
23294#	http://kicad-pcb.org
23295#
23296
23297# KiCad Schematic Document
232980	    string  (kicad_sch
23299>10	    byte    0x20		KiCad Schematic Document
23300!:ext kicad_sch/kicad_sch-bak
23301>>11	    string  (version
23302>>>19	    byte    0x20
23303>>>>20	    regex   [0-9.]+		(Version %s)
23304
23305# KiCad Schematic Document (Legacy)
233060	    string  EESchema
23307>8	    byte    0x20
23308>>9	    string  Schematic
23309>>>18	    byte    0x20		KiCad Schematic Document (Legacy)
23310!:ext sch/bak
23311>>>>24	    string  Version
23312>>>>>31	    byte    0x20
23313>>>>>>32    string  x			(Version %s)
23314
23315# KiCad Symbol Library
233160	    string  (kicad_symbol_lib
23317>17	    byte    0x20		KiCad Symbol Library
23318!:ext kicad_sym
23319>>18	    string  (version
23320>>>26	    byte    0x20
23321>>>>27	    regex   [0-9.]+		(Version %s)
23322
23323# KiCad Symbol Library (Legacy)
233240	    string  EESchema-LIBRARY
23325>16	    byte    0x20		KiCad Symbol Library (Legacy)
23326!:ext lib
23327>>17	    string  Version
23328>>>24	    byte    0x20
23329>>>>25	    string  x			(Version %s)
23330
23331# KiCad Symbol Library Documentation (Legacy)
233320	    string  EESchema-DOCLIB
23333>15	    byte    0x20		KiCad Symbol Library Documentation (Legacy)
23334!:ext dcm
23335>>17	    string  Version
23336>>>24	    byte    0x20
23337>>>>25	    string  x			(Version %s)
23338
23339# KiCad Board Layout
233400	    string  (kicad_pcb
23341>10	    byte    0x20		KiCad Board Layout
23342!:ext kicad_pcb/kicad_pcb-bak
23343>>11	    string  (version
23344>>>19	    byte    0x20
23345>>>>20	    regex   [0-9.]+		(Version %s)
23346
23347# KiCad Footprint
233480	    string  (module
23349>7	    byte    0x20		KiCad Footprint
23350!:ext kicad_mod
23351
23352# KiCad Footprint (Legacy)
233530	    string  PCBNEW-LibModule-V1	    KiCad Footprint (Legacy)
23354!:ext mod
23355
23356# KiCad Netlist
233570	    string  (export
23358>7	    byte    0x20		KiCad Netlist
23359!:ext net
23360
23361# KiCad Symbol Library Table
233620	    string  (sym_lib_table
23363>14	    byte    0xA			KiCad Symbol Library Table
23364>14	    byte    0xD			KiCad Symbol Library Table
23365>14	    byte    0x20		KiCad Symbol Library Table
23366
23367# KiCad Footprint Library Table
233680	    string  (fp_lib_table
23369>13	    byte    0xA			KiCad Footprint Library Table
23370>13	    byte    0xD			KiCad Footprint Library Table
23371>13	    byte    0x20		KiCad Footprint Library Table
23372
23373#------------------------------------------------------------------------------
23374# $File: kml,v 1.6 2019/05/21 04:50:10 christos Exp $
23375# Type: Google KML, formerly Keyhole Markup Language
23376# Future development of this format has been handed
23377# over to the Open Geospatial Consortium.
23378# https://www.opengeospatial.org/standards/kml/
23379# From: Asbjoern Sloth Toennesen <asbjorn@lila.io>
233800 string/t    \<?xml
23381>20  search/400 \ xmlns=
23382>>&0 regex ['"]http://earth.google.com/kml Google KML document
23383!:mime application/vnd.google-earth.kml+xml
23384>>>&1 string 2.0' \b, version 2.0
23385>>>&1 string 2.1' \b, version 2.1
23386>>>&1 string 2.2' \b, version 2.2
23387
23388#------------------------------------------------------------------------------
23389# Type: OpenGIS KML, formerly Keyhole Markup Language
23390# This standard is maintained by the
23391# Open Geospatial Consortium.
23392# https://www.opengeospatial.org/standards/kml/
23393# From: Asbjoern Sloth Toennesen <asbjorn@lila.io>
23394>>&0 regex ['"]http://www.opengis.net/kml OpenGIS KML document
23395!:mime application/vnd.google-earth.kml+xml
23396>>>&1 string/t 2.2 \b, version 2.2
23397
23398#------------------------------------------------------------------------------
23399# Type: Google KML Archive (ZIP based)
23400# https://code.google.com/apis/kml/documentation/kml_tut.html
23401# From: Asbjoern Sloth Toennesen <asbjorn@lila.io>
234020 string    PK\003\004
23403>4  byte    0x14
23404>>30  string doc.kml Compressed Google KML Document, including resources.
23405!:mime application/vnd.google-earth.kmz
23406#------------------------------------------------------------------------------
23407# $File: lammps,v 1.1 2021/03/14 16:24:18 christos Exp $
23408#
23409
23410# Magic file patterns for use with file(1) for the
23411# LAMMPS molecular dynamics simulation software.
23412# https://lammps.sandia.gov
23413#
23414# Updated: 2021-03-14 by akohlmey@gmail.com
23415
23416# Binary restart file for the LAMMPS MD code
234170        string  LammpS\ RestartT  LAMMPS binary restart file
23418>0x14    long    x                 (rev %d),
23419>>0x20   string  x                 Version %s,
23420>>>0x10  lelong  0x0001            Little Endian
23421>>>0x10  lelong  0x1000            Big Endian
23422
23423# Atom style binary dump file for the LAMMPS MD code
23424# written on a little endian machine
234250         lequad  -8
23426>0x08     string  DUMPATOM     LAMMPS atom style binary dump
23427>>0x14    long    x            (rev %d),
23428>>>0x10   lelong  0x0001       Little Endian,
23429>>>>0x18  lequad  x            First time step: %lld
23430
23431# written on a big endian machine
234320         bequad  -8
23433>0x08     string  DUMPATOM     LAMMPS atom style binary dump
23434>>0x14    belong  x            (rev %d),
23435>>>0x10   lelong  0x1000       Big Endian,
23436>>>>0x18  bequad  x            First time step: %lld
23437
23438# Atom style binary dump file for the LAMMPS MD code
23439# written on a little endian machine
234400         lequad  -10
23441>0x08     string  DUMPCUSTOM   LAMMPS custom style binary dump
23442>>0x16    lelong  x            (rev %d),
23443>>>0x12   lelong  0x0001       Little Endian,
23444>>>>0x1a  lequad  x            First time step: %lld
23445
23446# written on a big endian machine
234470         bequad  -10
23448>0x08     string  DUMPCUSTOM   LAMMPS custom style binary dump
23449>>0x16    belong  x            (rev %d),
23450>>>0x12   lelong  0x1000       Big Endian,
23451>>>>0x1a  bequad  x            First time step: %lld
23452
23453# LAMMPS log file
234540         string LAMMPS\ (                    LAMMPS log file
23455>8        regex/16 [0-9]+\ [A-Za-z]+\ [0-9]+  written by version %s
23456
23457# Data file written either by LAMMPS, msi2lmp or VMD/TopoTools
234580      string LAMMPS\ data\ file  LAMMPS data file
23459>0x12  string CGCMM\ style        written by TopoTools
23460>0x12  string msi2lmp             written by msi2lmp
23461>0x11  string via\ write_data     written by LAMMPS
23462
23463# LAMMPS data file written by OVITO
234640      string #\ LAMMPS\ data\ file   LAMMPS data file
23465>0x13  string written\ by\ OVITO      written by OVITO
23466
23467# LAMMPS text mode dump file
234680      string    ITEM:\ TIMESTEP      LAMMPS text mode dump,
23469>15    regex/16  [0-9]+               First time step: %s
23470
23471#------------------------------------------------------------------------------
23472# $File: lecter,v 1.4 2009/09/19 16:28:10 christos Exp $
23473# DEC SRC Virtual Paper: Lectern files
23474# Karl M. Hegbloom <karlheg@inetarena.com>
234750	string	lect	DEC SRC Virtual Paper Lectern file
23476
23477#------------------------------------------------------------------------------
23478# $File: lex,v 1.6 2009/09/19 16:28:10 christos Exp $
23479# lex:  file(1) magic for lex
23480#
23481#	derived empirically, your offsets may vary!
234820	search/100	yyprevious	C program text (from lex)
23483>3	search/1	>\0		 for %s
23484# C program text from GNU flex, from Daniel Quinlan <quinlan@yggdrasil.com>
234850	search/100	generated\ by\ flex	C program text (from flex)
23486# lex description file, from Daniel Quinlan <quinlan@yggdrasil.com>
234870	search/1	%{		lex description text
23488
23489#------------------------------------------------------------------------------
23490# $File: lif,v 1.10 2021/04/26 15:56:00 christos Exp $
23491# lif:  file(1) magic for lif
23492#
23493# (Daniel Quinlan <quinlan@yggdrasil.com>)
23494#
23495# Modified by:	Joerg Jenderek
23496# URL:		https://www.hp9845.net/9845/projects/hpdir/
23497#		https://github.com/bug400/lifutils
23498# Reference:	https://www.hp9845.net/9845/downloads/manuals/LIF_excerpt_64941-90906_flpRef_Jan84.pdf
23499# Note:		called by TrID "HP Logical Interchange Format disk image"
235000	beshort		0x8000
23501# GRR: line above is too general as it catches also compressed DEGAS low-res bitmap *.pc1
23502# skip many compressed DEGAS low-res bitmap *.pc1 by test for unused bytes
23503>14	beshort		=0
23504# skip MUNCHIE.PC1 BOARD.PC1 ENEMIES.PC1 by test for low version number
23505>>20	ubeshort	<0x0100
23506# skip DEGAS MUNCHIE.PC1 BOARD.PC1 ENEMIES.PC1 by test for ASCII like volume name
23507#>>>2	ubelong		>0x2020201F
23508>>>0	use		lif-file
235090	name		lif-file
23510# LIF ID
23511>0	beshort		x		lif file
23512!:mime	application/x-lif-disk
23513# lif used by Tony Duell LIF utilities; enhanced version by Joachim Siebold use also dat; hpi used by hpdir
23514!:ext	lif/hpi/dat
23515# volume label; A-Z 0-9 _ ; default are 6 spaces
23516>2	string		x		"%.6s"
23517# version number; 0 for systems without extensions or 1 for model 64000
23518>20	ubeshort	x		\b, version %u
23519# LIF identifier; 010000 for system 3000
23520>12	beshort		!0x1000		\b, LIF identifier %#x
23521# directory start address in units like: 2
23522>8	ubelong		x		\b, directory
23523>8	ubelong		!2		start address %u
23524# length of directory like: 2 4 7 10 12 14 (for model 64000) 16 18 20 24 30 50 57 77 80
23525>16	ubelong		x		length %u
23526# level 1 extensions
23527>20	beshort		=0
23528>>24	ubequad		!0		\b, for extensions %#llx...
23529>20	beshort		>0
23530>>24	ubequad		!0		\b, extensions %#llx...
23531# word 21-126 reserved for extensions and future use; set to nil
23532>42	ubequad		!0		\b, RESERVED %#llx
23533# lif first file name for standard directory; 0xffff... means uninitialized
23534>8	ubelong		2
23535>>512	string		<\xff\xff	\b, 1st file %-.10s
23536
23537
23538#------------------------------------------------------------------------------
23539# $File: linux,v 1.82 2022/09/07 11:23:44 christos Exp $
23540# linux:  file(1) magic for Linux files
23541#
23542# Values for Linux/i386 binaries, from Daniel Quinlan <quinlan@yggdrasil.com>
23543# The following basic Linux magic is useful for reference, but using
23544# "long" magic is a better practice in order to avoid collisions.
23545#
23546# 2	leshort		100		Linux/i386
23547# >0	leshort		0407		impure executable (OMAGIC)
23548# >0	leshort		0410		pure executable (NMAGIC)
23549# >0	leshort		0413		demand-paged executable (ZMAGIC)
23550# >0	leshort		0314		demand-paged executable (QMAGIC)
23551#
235520	lelong		0x00640107	Linux/i386 impure executable (OMAGIC)
23553>16	lelong		0		\b, stripped
235540	lelong		0x00640108	Linux/i386 pure executable (NMAGIC)
23555>16	lelong		0		\b, stripped
235560	lelong		0x0064010b	Linux/i386 demand-paged executable (ZMAGIC)
23557>16	lelong		0		\b, stripped
235580	lelong		0x006400cc	Linux/i386 demand-paged executable (QMAGIC)
23559>16	lelong		0		\b, stripped
23560#
235610	string		\007\001\000	Linux/i386 object file
23562>20	lelong		>0x1020		\b, DLL library
23563# Linux-8086 stuff:
235640	string		\01\03\020\04	Linux-8086 impure executable
23565>28	long		!0		not stripped
235660	string		\01\03\040\04	Linux-8086 executable
23567>28	long		!0		not stripped
23568#
235690	string		\243\206\001\0	Linux-8086 object file
23570#
235710	string		\01\03\020\20	Minix-386 impure executable
23572>28	long		!0		not stripped
235730	string		\01\03\040\20	Minix-386 executable
23574>28	long		!0		not stripped
235750	string		\01\03\04\20	Minix-386 NSYM/GNU executable
23576>28	long		!0		not stripped
23577# core dump file, from Bill Reynolds <bill@goshawk.lanl.gov>
23578216	lelong		0421		Linux/i386 core file
23579!:strength / 2
23580>220	string		>\0		of '%s'
23581>200	lelong		>0		(signal %d)
23582#
23583# LILO boot/chain loaders, from Daniel Quinlan <quinlan@yggdrasil.com>
23584# this can be overridden by the DOS executable (COM) entry
235852	string		LILO		Linux/i386 LILO boot/chain loader
23586#
23587# Linux make config build file, from Ole Aamot <oka@oka.no>
23588# Updated by Ken Sharp
2358928	string		make\ config		Linux make config build file (old)
2359049	search/70	Kernel\ Configuration	Linux make config build file
23591
23592#
23593# PSF fonts, from H. Peter Anvin <hpa@yggdrasil.com>
23594# Updated by Adam Buchbinder <adam.buchbinder@gmail.com>
23595# See: https://www.win.tue.nl/~aeb/linux/kbd/font-formats-1.html
235960	leshort		0x0436		Linux/i386 PC Screen Font v1 data,
23597>2	byte&0x01	0		256 characters,
23598>2	byte&0x01	!0		512 characters,
23599>2	byte&0x02	0		no directory,
23600>2	byte&0x02	!0		Unicode directory,
23601>3	byte		>0		8x%d
236020	string		\x72\xb5\x4a\x86\x00\x00 Linux/i386 PC Screen Font v2 data,
23603>16	lelong		x		%d characters,
23604>12	lelong&0x01	0		no directory,
23605>12	lelong&0x01	!0		Unicode directory,
23606>24	lelong		x		%d
23607>28	lelong		x		\bx%d
23608
23609# Linux swap and hibernate files
23610# Linux kernel: include/linux/swap.h
23611# util-linux: libblkid/src/superblocks/swap.c
23612
23613# format v0, unsupported since 2002
236140xff6	string		SWAP-SPACE	Linux old swap file, 4k page size
236150x1ff6	string		SWAP-SPACE	Linux old swap file, 8k page size
236160x3ff6	string		SWAP-SPACE	Linux old swap file, 16k page size
236170x7ff6	string		SWAP-SPACE	Linux old swap file, 32k page size
236180xfff6	string		SWAP-SPACE	Linux old swap file, 64k page size
23619
23620# format v1, supported since 1998
236210		name	linux-swap
23622>0x400	lelong		1	little endian, version %u,
23623>>0x404	lelong		x	size %u pages,
23624>>0x408	lelong		x	%u bad pages,
23625>0x400	belong		1	big endian, version %u,
23626>>0x404	belong		x	size %u pages,
23627>>0x408	belong		x	%u bad pages,
23628>0x41c	string		\0	no label,
23629>0x41c	string		>\0	LABEL=%s,
23630>0x40c	ubelong		x	UUID=%08x
23631>0x410	ubeshort	x	\b-%04x
23632>0x412	ubeshort	x	\b-%04x
23633>0x414	ubeshort	x	\b-%04x
23634>0x416	ubelong		x	\b-%08x
23635>0x41a	ubeshort	x	\b%04x
23636
236370xff6	string		SWAPSPACE2	Linux swap file, 4k page size,
23638>0		use			linux-swap
236390x1ff6	string		SWAPSPACE2	Linux swap file, 8k page size,
23640>0		use			linux-swap
236410x3ff6	string		SWAPSPACE2	Linux swap file, 16k page size,
23642>0		use			linux-swap
236430x7ff6	string		SWAPSPACE2	Linux swap file, 32k page size,
23644>0		use			linux-swap
236450xfff6	string		SWAPSPACE2	Linux swap file, 64k page size,
23646>0		use			linux-swap
23647
236480	name	linux-hibernate
23649>0	string	S1SUSPEND	\b, with SWSUSP1 image
23650>0	string	S2SUSPEND	\b, with SWSUSP2 image
23651>0	string	ULSUSPEND	\b, with uswsusp image
23652>0	string	LINHIB0001	\b, with compressed hibernate image
23653>0	string	\xed\xc3\x02\xe9\x98\x56\xe5\x0c	\b, with tuxonice image
23654>0	default	x			\b, with unknown hibernate image
23655
236560xfec	string		SWAPSPACE2	Linux swap file, 4k page size,
23657>0		use			linux-swap
23658>0xff6	use			linux-hibernate
236590x1fec	string		SWAPSPACE2	Linux swap file, 8k page size,
23660>0		use			linux-swap
23661>0x1ff6	use			linux-hibernate
236620x3fec	string		SWAPSPACE2	Linux swap file, 16k page size,
23663>0		use			linux-swap
23664>0x3ff6	use			linux-hibernate
236650x7fec	string		SWAPSPACE2	Linux swap file, 32k page size,
23666>0		use			linux-swap
23667>0x7ff6	use			linux-hibernate
236680xffec	string		SWAPSPACE2	Linux swap file, 64k page size,
23669>0		use			linux-swap
23670>0xfff6	use			linux-hibernate
23671
23672#
23673# Linux kernel boot images, from Albert Cahalan <acahalan@cs.uml.edu>
23674# and others such as Axel Kohlmeyer <akohlmey@rincewind.chemie.uni-ulm.de>
23675# and Nicolas Lichtmaier <nick@debian.org>
23676# All known start with: b8 c0 07 8e d8 b8 00 90 8e c0 b9 00 01 29 f6 29
23677# Linux kernel boot images (i386 arch) (Wolfram Kleff)
23678# URL: https://www.kernel.org/doc/Documentation/x86/boot.txt
23679514	string		HdrS		Linux kernel
23680!:strength + 55
23681# often no extension like in linux, vmlinuz, bzimage or memdisk but sometimes
23682# Acronis Recovery kernel64.dat and Plop Boot Manager plpbtrom.bin
23683# DamnSmallLinux 1.5 damnsmll.lnx
23684!:ext	/dat/bin/lnx
23685>510	leshort		0xAA55		x86 boot executable
23686>>518	leshort		>0x1ff
23687>>>529	byte		0		zImage,
23688>>>529	byte		1		bzImage,
23689>>>526	lelong		>0
23690>>>>(526.s+0x200) string	>\0	version %s,
23691>>498	leshort		1		RO-rootFS,
23692>>498	leshort		0		RW-rootFS,
23693>>508	leshort		>0		root_dev %#X,
23694>>502	leshort		>0		swap_dev %#X,
23695>>504	leshort		>0		RAMdisksize %u KB,
23696>>506	leshort		0xFFFF		Normal VGA
23697>>506	leshort		0xFFFE		Extended VGA
23698>>506	leshort		0xFFFD		Prompt for Videomode
23699>>506	leshort		>0		Video mode %d
23700# This also matches new kernels, which were caught above by "HdrS".
237010		belong	0xb8c0078e	Linux kernel
23702>0x1e3		string	Loading		version 1.3.79 or older
23703>0x1e9		string	Loading		from prehistoric times
23704
23705# System.map files - Nicolas Lichtmaier <nick@debian.org>
237068	search/1	\ A\ _text	Linux kernel symbol map text
23707
23708# LSM entries - Nicolas Lichtmaier <nick@debian.org>
237090	search/1	Begin3	Linux Software Map entry text
237100	search/1	Begin4	Linux Software Map entry text (new format)
23711
23712# From Matt Zimmerman, enhanced for v3 by Matthew Palmer
237130	belong	0x4f4f4f4d	User-mode Linux COW file
23714>4	belong	<3		\b, version %d
23715>>8	string	>\0		\b, backing file %s
23716>4	belong	>2		\b, version %d
23717>>32	string	>\0		\b, backing file %s
23718
23719############################################################################
23720# Linux kernel versions
23721
237220		string		\xb8\xc0\x07\x8e\xd8\xb8\x00\x90	Linux
23723>497		leshort		0		x86 boot sector
23724>>514		belong		0x8e	of a kernel from the dawn of time!
23725>>514		belong		0x908ed8b4	version 0.99-1.1.42
23726>>514		belong		0x908ed8b8	for memtest86
23727
23728>497		leshort		!0		x86 kernel
23729>>504		leshort		>0		RAMdisksize=%u KB
23730>>502		leshort		>0		swap=%#X
23731>>508		leshort		>0		root=%#X
23732>>>498		leshort		1		\b-ro
23733>>>498		leshort		0		\b-rw
23734>>506		leshort		0xFFFF		vga=normal
23735>>506		leshort		0xFFFE		vga=extended
23736>>506		leshort		0xFFFD		vga=ask
23737>>506		leshort		>0		vga=%d
23738>>514		belong		0x908ed881	version 1.1.43-1.1.45
23739>>514		belong		0x15b281cd
23740>>>0xa8e	belong		0x55AA5a5a	version 1.1.46-1.2.13,1.3.0
23741>>>0xa99	belong		0x55AA5a5a	version 1.3.1,2
23742>>>0xaa3	belong		0x55AA5a5a	version 1.3.3-1.3.30
23743>>>0xaa6	belong		0x55AA5a5a	version 1.3.31-1.3.41
23744>>>0xb2b	belong		0x55AA5a5a	version 1.3.42-1.3.45
23745>>>0xaf7	belong		0x55AA5a5a	version 1.3.46-1.3.72
23746>>514		string		HdrS
23747>>>518		leshort		>0x1FF
23748>>>>529		byte		0		\b, zImage
23749>>>>529		byte		1		\b, bzImage
23750>>>>(526.s+0x200) string 	>\0		\b, version %s
23751
23752# Linux boot sector thefts.
237530		belong		0xb8c0078e	Linux
23754>0x1e6		belong		0x454c4b53	ELKS Kernel
23755>0x1e6		belong		!0x454c4b53	style boot sector
23756
23757############################################################################
23758# Linux S390 kernel image
23759# Created by: Jan Kaluza <jkaluza@redhat.com>
237608 string \x02\x00\x00\x18\x60\x00\x00\x50\x02\x00\x00\x68\x60\x00\x00\x50\x40\x40\x40\x40\x40\x40\x40\x40 Linux S390
23761>0x00010000 search/b/4096 \x00\x0a\x00\x00\x8b\xad\xcc\xcc
23762# 64bit
23763>>&0 string \xc1\x00\xef\xe3\xf0\x68\x00\x00 Z10 64bit kernel
23764>>&0 string \xc1\x00\xef\xc3\x00\x00\x00\x00 Z9-109 64bit kernel
23765>>&0 string \xc0\x00\x20\x00\x00\x00\x00\x00 Z990 64bit kernel
23766>>&0 string \x00\x00\x00\x00\x00\x00\x00\x00 Z900 64bit kernel
23767# 32bit
23768>>&0 string \x81\x00\xc8\x80\x00\x00\x00\x00 Z10 32bit kernel
23769>>&0 string \x81\x00\xc8\x80\x00\x00\x00\x00 Z9-109 32bit kernel
23770>>&0 string \x80\x00\x20\x00\x00\x00\x00\x00 Z990 32bit kernel
23771>>&0 string \x80\x00\x00\x00\x00\x00\x00\x00 Z900 32bit kernel
23772
23773############################################################################
23774# Linux ARM compressed kernel image
23775# From: Kevin Cernekee <cernekee@gmail.com>
23776# Update: Joerg Jenderek
237770x24	lelong	0x016f2818	Linux kernel ARM boot executable zImage
23778# There are three possible situations: LE, BE with LE bootloader and pure BE.
23779# In order to aid telling these apart a new endian flag was added. In order
23780# to support kernels before the flag and BE with LE bootloader was added we'll
23781# do a negative check against the BE variant of the flag when we see a LE magic.
23782>0x30	belong	!0x04030201	(little-endian)
23783# raspian "kernel7.img", Vu+ Ultimo4K "kernel_auto.bin"
23784!:ext	img/bin
23785>0x30	belong	0x04030201	(big-endian)
237860x24	belong	0x016f2818	Linux kernel ARM boot executable zImage (big-endian)
23787
23788############################################################################
23789# Linux AARCH64 kernel image
237900x38    lelong  0x644d5241  Linux kernel ARM64 boot executable Image
23791>0x18   lelong  ^1          \b, little-endian
23792>0x18   lelong  &1          \b, big-endian
23793>0x18   lelong  &2          \b, 4K pages
23794>0x18   lelong  &4          \b, 16K pages
23795>0x18   lelong  &6          \b, 32K pages
23796
23797############################################################################
23798# Linux 8086 executable
237990	lelong&0xFF0000FF 0xC30000E9	Linux-Dev86 executable, headerless
23800>5	string		.
23801>>4	string		>\0		\b, libc version %s
23802
238030	lelong&0xFF00FFFF 0x4000301	Linux-8086 executable
23804>2	byte&0x01	!0		\b, unmapped zero page
23805>2	byte&0x20	0		\b, impure
23806>2	byte&0x20	!0
23807>>2	byte&0x10	!0		\b, A_EXEC
23808>2	byte&0x02	!0		\b, A_PAL
23809>2	byte&0x04	!0		\b, A_NSYM
23810>2	byte&0x08	!0		\b, A_STAND
23811>2	byte&0x40	!0		\b, A_PURE
23812>2	byte&0x80	!0		\b, A_TOVLY
23813>28     long            !0              \b, not stripped
23814>37	string		.
23815>>36	string		>\0		\b, libc version %s
23816
23817# 0	lelong&0xFF00FFFF 0x10000301	ld86 I80386 executable
23818# 0	lelong&0xFF00FFFF 0xB000301	ld86 M68K executable
23819# 0	lelong&0xFF00FFFF 0xC000301	ld86 NS16K executable
23820# 0	lelong&0xFF00FFFF 0x17000301	ld86 SPARC executable
23821
23822# SYSLINUX boot logo files (from 'ppmtolss16' sources)
23823# https://www.syslinux.org/wiki/index.php/SYSLINUX#Display_graphic_from_filename:
23824# file extension .lss .16
238250	lelong	=0x1413f33d		SYSLINUX' LSS16 image data
23826# syslinux-4.05/mime/image/x-lss16.xml
23827!:mime image/x-lss16
23828>4	leshort	x			\b, width %d
23829>6	leshort	x			\b, height %d
23830
238310	string	OOOM			User-Mode-Linux's Copy-On-Write disk image
23832>4	belong	x			version %d
23833
23834# SE Linux policy database
23835# From: Mike Frysinger <vapier@gentoo.org>
238360	lelong	0xf97cff8c		SE Linux policy
23837>16	lelong	x			v%d
23838>20	lelong	1			MLS
23839>24	lelong	x			%d symbols
23840>28	lelong	x			%d ocons
23841
23842# Linux Logical Volume Manager (LVM)
23843# Emmanuel VARAGNAT <emmanuel.varagnat@guzu.net>
23844#
23845# System ID, UUID and volume group name are 128 bytes long
23846# but they should never be full and initialized with zeros...
23847#
23848# LVM1
23849#
238500x0	string/b	HM\001		LVM1 (Linux Logical Volume Manager), version 1
23851>0x12c	string/b	>\0		, System ID: %s
23852
238530x0	string/b	HM\002		LVM1 (Linux Logical Volume Manager), version 2
23854>0x12c	string/b	>\0		, System ID: %s
23855
23856#  LVM2
23857#
23858# It seems that the label header can be in one the four first sector
23859# of the disk... (from _find_labeller in lib/label/label.c of LVM2)
23860#
23861# 0x200 seems to be the common case
238620		name	lvm2
23863# display UUID in LVM format + display all 32 bytes (instead of max string length: 31)
23864>0x0          string  >\x2f          \b, UUID: %.6s
23865>0x6          string  >\x2f          \b-%.4s
23866>0xa          string  >\x2f          \b-%.4s
23867>0xe          string  >\x2f          \b-%.4s
23868>0x12         string  >\x2f          \b-%.4s
23869>0x16         string  >\x2f          \b-%.4s
23870>0x1a         string  >\x2f          \b-%.6s
23871>0x20         lequad  x              \b, size: %lld
23872
23873
23874# read the offset to add to the start of the header, and the header
23875# start in 0x200
238760x218           string/b  LVM2\ 001      LVM2 PV (Linux Logical Volume Manager)
23877>&(&-12.l-0x20) use	lvm2
23878
238790x018           string/b  LVM2\ 001      LVM2 PV (Linux Logical Volume Manager)
23880>&(&-12.l-0x20) use	lvm2
23881
238820x418           string/b  LVM2\ 001      LVM2 PV (Linux Logical Volume Manager)
23883>&(&-12.l-0x20) use	lvm2
23884
238850x618           string/b  LVM2\ 001      LVM2 PV (Linux Logical Volume Manager)
23886>&(&-12.l-0x20) use	lvm2
23887
23888# LVM snapshot
23889# from Jason Farrel
238900	string	SnAp	LVM Snapshot (CopyOnWrite store)
23891>4	lelong	!0	- valid,
23892>4	lelong	0	- invalid,
23893>8	lelong	x	version %d,
23894>12	lelong	x	chunk_size %d
23895
23896# SE Linux policy database
238970	lelong	0xf97cff8c		SE Linux policy
23898>16	lelong	x			v%d
23899>20	lelong	1			MLS
23900>24	lelong	x			%d symbols
23901>28	lelong	x			%d ocons
23902
23903# Summary: Xen saved domain file
23904# Created by: Radek Vokal <rvokal@redhat.com>
239050	string		LinuxGuestRecord	Xen saved domain
23906>20	search/256	(name
23907>>&1	string		x			(name %s)
23908
23909# Type: Xen, the virtual machine monitor
23910# From: Radek Vokal <rvokal@redhat.com>
239110	string		LinuxGuestRecord	Xen saved domain
23912#>2	regex		\(name\ [^)]*\)		%s
23913>20	search/256	(name			(name
23914>>&1	string		x			%s...)
23915
23916# Systemd journald files
23917# See https://www.freedesktop.org/wiki/Software/systemd/journal-files/.
23918# From: Zbigniew Jedrzejewski-Szmek <zbyszek@in.waw.pl>
23919
23920# check magic
239210	string	LPKSHHRH
23922# check that state is one of known values
23923>16		ubyte&252	0
23924# check that each half of three unique id128s is non-zero
23925>>24		ubequad		>0
23926>>>32		ubequad		>0
23927>>>>40		ubequad		>0
23928>>>>>48		ubequad		>0
23929>>>>>>56	ubequad		>0
23930>>>>>>>64	ubequad		>0	Journal file
23931!:mime application/octet-stream
23932# provide more info
23933>>>>>>>>184	leqdate		0	empty
23934>>>>>>>>16	ubyte		0	\b, offline
23935>>>>>>>>16	ubyte		1	\b, online
23936>>>>>>>>16	ubyte		2	\b, archived
23937>>>>>>>>8	ulelong&1	1	\b, sealed
23938>>>>>>>>12	ulelong&1	1	\b, compressed
23939
23940# BCache backing and cache devices
23941# From: Gabriel de Perthuis <g2p.code@gmail.com>
239420x1008		lequad		8
23943>0x1018		string		\xc6\x85\x73\xf6\x4e\x1a\x45\xca\x82\x65\xf5\x7f\x48\xba\x6d\x81	BCache
23944>>0x1010	ulequad		0	cache device
23945>>0x1010	ulequad		1	backing device
23946>>0x1010	ulequad		3	cache device
23947>>0x1010	ulequad		4	backing device
23948>>0x1048	string		>0	\b, label "%.32s"
23949>>0x1028	ubelong		x	\b, uuid %08x
23950>>0x102c	ubeshort	x	\b-%04x
23951>>0x102e	ubeshort	x	\b-%04x
23952>>0x1030	ubeshort	x	\b-%04x
23953>>0x1032	ubelong		x	\b-%08x
23954>>0x1036	ubeshort	x	\b%04x
23955>>0x1038	ubelong		x	\b, set uuid %08x
23956>>0x103c	ubeshort	x	\b-%04x
23957>>0x103e	ubeshort	x	\b-%04x
23958>>0x1040	ubeshort	x	\b-%04x
23959>>0x1042	ubelong		x	\b-%08x
23960>>0x1046	ubeshort	x	\b%04x
23961
23962# Linux device tree:
23963# File format description can be found in the Linux kernel sources at
23964# Documentation/devicetree/booting-without-of.txt
23965# From Christoph Biedl
239660		belong		0xd00dfeed
23967# structure must be within blob, strings are omitted to handle devicetrees > 1M
23968>&(8.L)		byte		x
23969>>20		belong		>1	Device Tree Blob version %d
23970>>>4		belong		x	\b, size=%d
23971>>>20		belong		>1
23972>>>>28		belong		x	\b, boot CPU=%d
23973>>>20		belong		>2
23974>>>>32		belong		x	\b, string block size=%d
23975>>>20		belong		>16
23976>>>>36		belong		x	\b, DT structure block size=%d
23977
23978# glibc locale archive as defined in glibc locale/locarchive.h
239790		lelong		0xde020109	locale archive
23980>24		lelong		x		%d strings
23981
23982# Linux Software RAID (mdadm)
23983# Russell Coker <russell@coker.com.au>
239840	name	linuxraid
23985>16	belong	x		UUID=%8x:
23986>20	belong	x		\b%8x:
23987>24	belong	x		\b%8x:
23988>28	belong	x		\b%8x
23989>32	string	x		name=%s
23990>72	lelong	x		level=%d
23991>92	lelong	x		disks=%d
23992
239934096	lelong	0xa92b4efc	Linux Software RAID
23994>4100	lelong	x		version 1.2 (%d)
23995>4096	use	linuxraid
23996
239970	lelong	0xa92b4efc	Linux Software RAID
23998>4	lelong	x		version 1.1 (%d)
23999>0	use	linuxraid
24000
24001# Summary:     Database file for mlocate
24002# Description: A database file as used by mlocate, a fast implementation
24003#              of locate/updatedb. It uses merging to reuse the existing
24004#              database and avoid rereading most of the filesystem. It's
24005#              the default version of locate on Arch Linux (and others).
24006# File path:   /var/lib/mlocate/mlocate.db by default (but configurable)
24007# Site:        https://fedorahosted.org/mlocate/
24008# Format docs: https://linux.die.net/man/5/mlocate.db
24009# Type: mlocate database file
24010# URL:  https://fedorahosted.org/mlocate/
24011# From: Wander Nauta <info@wandernauta.nl>
240120		string		\0mlocate	mlocate database
24013>12		byte		x		\b, version %d
24014>13		byte		1		\b, require visibility
24015>16		string		x		\b, root %s
24016
24017# Dump files for iproute2 tool. Generated by the "ip r|a save" command. URL:
24018# https://www.linuxfoundation.org/collaborate/workgroups/networking/iproute2
24019# From: Pavel Emelyanov <xemul@parallels.com>
240200		lelong		0x45311224	iproute2 routes dump
240210		lelong		0x47361222	iproute2 addresses dump
24022
24023# Image and service files for CRIU tool.
24024# URL: https://criu.org
24025# From: Pavel Emelyanov <xemul@parallels.com>
240260		lelong		0x54564319	CRIU image file v1.1
240270		lelong		0x55105940	CRIU service file
240280		lelong		0x58313116	CRIU inventory
24029
24030# Kdump compressed dump files
24031# https://sourceforge.net/p/makedumpfile/code/ci/master/tree/IMPLEMENTATION
24032
240330		string		KDUMP          	Kdump compressed dump
24034>8		long		x		v%d
24035>12		string		>\0		\b, system %s
24036>77		string		>\0		\b, node %s
24037>142		string		>\0		\b, release %s
24038>207		string		>\0		\b, version %s
24039>272		string		>\0		\b, machine %s
24040>337		string		>\0		\b, domain %s
24041
24042# Device Tree files
240430		search/1024	/dts-v1/	Device Tree File (v1)
24044# beat c code
24045!:strength +14
24046
24047
24048# e2fsck undo file
24049# David Gilman <davidgilman1@gmail.com>
240500		string		E2UNDO02	e2fsck undo file, version 2
24051>44		lelong		x		\b, undo file is
24052>>44		lelong&1	0		not finished
24053>>44		lelong&1	1		finished
24054>48		lelong		x		\b, undo file features:
24055>>48		lelong&1	0		lacks filesystem offset
24056>>48		lelong&1	1		has filesystem offset
24057>>>64		lequad		x		at %#llx
24058
24059# ansible vault (does not really belong here)
240600		string		$ANSIBLE_VAULT;	Ansible Vault
24061>&0		regex		[0-9]+\\.[0-9]+	\b, version %s
24062>>&0		string		;
24063>>>&0		regex		[A-Z0-9]+	\b, encryption %s
24064
24065# From:		Joerg Jenderek
24066# URL:		https://www.gnu.org/software/grub
24067# Reference:	https://ftp.gnu.org/gnu/grub/grub-2.06.tar.gz
24068#		grub-2.06/include/grub/keyboard_layouts.h
24069#		grub-2.06/grub-core/commands/keylayouts.c
24070# GRUB_KEYBOARD_LAYOUTS_FILEMAGIC
240710	string		GRUBLAYO		GRUB Keyboard
24072!:mime			application/x-grub-keyboard
24073!:ext			gkb
24074# GRUB_KEYBOARD_LAYOUTS_VERSION like: 10
24075>8	ulelong		!10			\b, version %u
24076# 4 grub_uint32_t grub_keyboard_layout[160]
24077# for normal french keyboard this is letter a
24078>92	ubyte		!0x71
24079>>92	ubyte		>0x40			\b, english q is %c
24080#>732	ubyte		x			\b, english Q is %c
24081# for normal german keyboard this is letter z
24082>124	ubyte		!0x79
24083>>124	ubyte		>0x40			\b, english y is %c
24084#>764	ubyte		x			\b, english Y is %c
24085
24086#------------------------------------------------------------------------------
24087# $File: lisp,v 1.27 2020/08/14 19:23:39 christos Exp $
24088# lisp:  file(1) magic for lisp programs
24089#
24090# various lisp types, from Daniel Quinlan (quinlan@yggdrasil.com)
24091
24092# updated by Joerg Jenderek
24093# GRR: This lot is too weak
24094#0	string	;;
24095# windows INF files often begin with semicolon and use CRLF as line end
24096# lisp files are mainly created on unix system with LF as line end
24097#>2	search/4096	!\r		Lisp/Scheme program text
24098#>2	search/4096	\r		Windows INF file
24099
241000	search/4096	(setq\ 			Lisp/Scheme program text
24101!:mime	text/x-lisp
241020	search/4096	(defvar\ 		Lisp/Scheme program text
24103!:mime	text/x-lisp
241040	search/4096	(defparam\ 		Lisp/Scheme program text
24105!:mime	text/x-lisp
241060	search/4096	(defun\  		Lisp/Scheme program text
24107!:mime	text/x-lisp
241080	search/4096	(autoload\ 		Lisp/Scheme program text
24109!:mime	text/x-lisp
241100	search/4096	(custom-set-variables\ 	Lisp/Scheme program text
24111!:mime	text/x-lisp
24112
24113# URL: https://en.wikipedia.org/wiki/Emacs_Lisp
24114# Reference: https://ftp.gnu.org/old-gnu/emacs/elisp-manual-18-1.03.tar.gz
24115# Update: Joerg Jenderek
24116# Emacs 18 - this is always correct, but not very magical.
241170	string	\012(
24118# look for emacs lisp keywords
24119# GRR: split regex because it is too long or get error like
24120# lisp, 36: Warning: cannot get string from `^(defun|defvar|defconst|defmacro|setq|fset|put|provide|require|'
24121>&0	regex	\^(defun|defvar|defconst|defmacro|setq|fset)	Emacs v18 byte-compiled Lisp data
24122!:mime	application/x-elc
24123# https://searchcode.com/codesearch/view/2173420/
24124# not really pure text
24125!:apple	EMAxTEXT
24126!:ext elc
24127# remaining regex
24128>&0	regex	\^(put|provide|require|random)	Emacs v18 byte-compiled Lisp data
24129!:mime	application/x-elc
24130!:apple	EMAxTEXT
24131!:ext elc
24132# missed cl.elc dbx.elc simple.elc look like normal lisp starting with ;;;
24133
24134# Emacs 19+ - ver. recognition added by Ian Springer
24135# Also applies to XEmacs 19+ .elc files; could tell them apart with regexs
24136# - Chris Chittleborough <cchittleborough@yahoo.com.au>
24137# Update: Joerg Jenderek
241380	string	;ELC
24139# version\0\0\0
24140>4	byte	>18			Emacs/XEmacs v%d byte-compiled Lisp data
24141# why less than 32 ? does not make sense to me. GNU Emacs version is 24.5 at April 2015
24142#>4	byte    <32			Emacs/XEmacs v%d byte-compiled Lisp data
24143!:mime	application/x-elc
24144!:apple	EMAxTEXT
24145!:ext elc
24146
24147# Files produced by GNU/Emacs pdumper
241480	string	DUMPEDGNUEMACS	GNU/Emacs pdumper image
24149
24150# Files produced by CLISP Common Lisp From: Bruno Haible <haible@ilog.fr>
241510	string	(SYSTEM::VERSION\040'	CLISP byte-compiled Lisp program (pre 2004-03-27)
241520	string	(|SYSTEM|::|VERSION|\040'	CLISP byte-compiled Lisp program text
24153
241540	long	0x70768BD2		CLISP memory image data
241550	long	0xD28B7670		CLISP memory image data, other endian
24156
24157#.com and .bin for MIT scheme
241580	string	\372\372\372\372	MIT scheme (library?)
24159
24160# From: David Allouche <david@allouche.net>
241610	search/1	\<TeXmacs|	TeXmacs document text
24162!:mime	text/texmacs
24163
24164#------------------------------------------------------------------------------
24165# $File: llvm,v 1.9 2019/04/19 00:42:27 christos Exp $
24166# llvm:  file(1) magic for LLVM byte-codes
24167# URL:  https://llvm.org/docs/BitCodeFormat.html
24168# From: Al Stone <ahs3@fc.hp.com>
24169
241700	string	llvm	LLVM byte-codes, uncompressed
241710	string	llvc0	LLVM byte-codes, null compression
241720	string	llvc1	LLVM byte-codes, gzip compression
241730	string	llvc2	LLVM byte-codes, bzip2 compression
24174
241750	lelong	0x0b17c0de	LLVM bitcode, wrapper
24176# Are these Mach-O ABI values?  They appear to be.
24177>16	lelong	0x01000007	x86_64
24178>16	lelong	0x00000007	i386
24179>16	lelong	0x00000012	ppc
24180>16	lelong	0x01000012	ppc64
24181>16	lelong 	0x0000000c	arm
24182
241830	string	BC\xc0\xde	LLVM IR bitcode
24184
24185#------------------------------------------------------------------------------
24186# $File: locoscript,v 1.1 2021/01/03 20:56:25 christos Exp $
24187# locoscript:  file(1) magic for LocoScript documents and related files
24188#
24189# See http://fileformats.archiveteam.org/wiki/LocoScript
241900	string	JOY\x01\x01	LocoScript 1 document
241910	string	JOY\x01\x02	LocoScript 2 document
241920	string	JOY\x01\x04	LocoScript 3 document
241930	string	JOY\x01\x06	LocoScript 4 document
241940	string	DOC\x01\x01	LocoScript PC document
241950	string	DOC\x01\x03	LocoScript Professional document
24196
24197#------------------------------------------------------------------------------
24198# $File: lua,v 1.8 2020/10/08 23:23:56 christos Exp $
24199# lua:  file(1) magic for Lua scripting language
24200# URL:  https://www.lua.org/
24201# From: Reuben Thomas <rrt@sc3d.org>, Seo Sanghyeon <tinuviel@sparcs.kaist.ac.kr>
24202
24203# Lua scripts
242040	search/1/w	#!\ /usr/bin/lua	Lua script text executable
24205!:mime	text/x-lua
242060	search/1/w	#!\ /usr/local/bin/lua	Lua script text executable
24207!:mime	text/x-lua
242080	search/1	#!/usr/bin/env\ lua	Lua script text executable
24209!:mime	text/x-lua
242100	search/1	#!\ /usr/bin/env\ lua	Lua script text executable
24211!:mime	text/x-lua
24212
24213# Lua bytecode
242140	string		\033Lua			Lua bytecode,
24215# 2.4 uses 0x23 as its version byte because it shares the format
24216# with 2.3 (which was never released publicly).
24217>4	byte		0x23			version 2.4
24218>4	byte		0x25			version 2.5/3.0
24219>4	byte		0x31			version 3.1
24220>4	byte		0x32			version 3.2
24221>4	byte		0x40			version 4.0
24222>4	byte		0x50			version 5.0
24223>4	byte		0x51			version 5.1
24224>4	byte		0x52			version 5.2
24225>4	byte		0x53			version 5.3
24226>4	byte		0x54			version 5.4
24227
24228#------------------------------------------------------------------------------
24229# $File: luks,v 1.5 2022/09/07 11:23:44 christos Exp $
24230# luks:  file(1) magic for Linux Unified Key Setup
24231# URL:		https://en.wikipedia.org/wiki/Linux_Unified_Key_Setup
24232#		http://fileformats.archiveteam.org/wiki/LUKS
24233# From:	Anthon van der Neut <anthon@mnt.org>
24234# Update:	Joerg Jenderek
24235# Note:		verfied by command like `cryptsetup luksDump /dev/sda3`
24236
242370	string		LUKS\xba\xbe	LUKS encrypted file,
24238# https://reposcope.com/mimetype/application/x-raw-disk-image
24239!:mime	application/x-raw-disk-image
24240#!:mime	application/x-luks-volume
24241# img is the generic extension; no suffix for partitions; luksVolumeHeaderBackUp via zuluCrypt
24242!:ext	/luks/img/luksVolumeHeaderBackUp
24243# version like: 1 2
24244>6	beshort		x		ver %d
24245# test for version 1 variant
24246>6	beshort		1
24247>>0			use		luks-v1
24248# test for version 2 variant
24249>6	beshort		>1
24250>>0			use		luks-v2
24251# Reference:	https://mirrors.edge.kernel.org/pub/linux/utils/cryptsetup/LUKS_docs/on-disk-format.pdf
24252#		http://mark0.net/download/triddefs_xml.7z/defs/l/luks.trid.xml
24253# display information about LUKS version 1
242540	name		luks-v1
24255# cipher-name like: aes twofish
24256>8	string		x		[%s,
24257# cipher-mode like: xts-plain64 cbc-essiv
24258>40	string		x		%s,
24259# hash specification like: sha256 sha1 ripemd160
24260>72	string		x		%s]
24261>168	string		x		UUID: %s
24262# NEW PART!
24263# payload-offset; start offset of the bulk data
24264>104	 ubelong	x		\b, at %#x data
24265# key-bytes; number of key bytes; key-bytes*8=MK-bits
24266>108	 ubelong	x		\b, %u key bytes
24267# mk-digest[20]; master key checksum from PBKDF2
24268>112	ubequad		x		\b, MK digest %#16.16llx
24269>>120	ubequad		x		\b%16.16llx
24270>>128	ubelong		x		\b%8.8x
24271# mk-digest-salt[32]; salt parameter for master key PBKDF2
24272>132	ubequad		x		\b, MK salt %#16.16llx
24273>>140	ubequad		x		\b%16.16llx
24274>>148	ubequad		x		\b%16.16llx
24275>>156	ubequad		x		\b%16.16llx
24276# mk-digest-iter; iterations parameter for master key PBKDF2
24277>164	ubelong		x		\b, %u MK iterations
24278# key slot 1
24279>208	ubelong		=0x00AC71F3	\b; slot #0
24280>>208			use		luks-slot
24281# key slot 2
24282>256	ubelong		=0x00AC71F3	\b; slot #1
24283>>256			use		luks-slot
24284# key slot 3
24285>304	ubelong		=0x00AC71F3	\b; slot #2
24286>>304			use		luks-slot
24287# key slot 4
24288>352	ubelong		=0x00AC71F3	\b; slot #3
24289>>352			use		luks-slot
24290# key slot 5
24291>400	ubelong		=0x00AC71F3	\b; slot #4
24292>>400			use		luks-slot
24293# key slot 6
24294>448	ubelong		=0x00AC71F3	\b; slot #5
24295>>448			use		luks-slot
24296# key slot 7
24297>496	ubelong		=0x00AC71F3	\b; slot #6
24298>>496			use		luks-slot
24299# key slot 8
24300>544	ubelong		=0x00AC71F3	\b; slot #7
24301>>544			use		luks-slot
24302# Reference:	https://gitlab.com/cryptsetup/LUKS2-docs/-/raw/master/luks2_doc_wip.pdf
24303#		http://mark0.net/download/triddefs_xml.7z/defs/l/luks2.trid.xml
24304# display information about LUKS version 2
243050	name		luks-v2
24306# hdr_size; size including JSON area called Metadata area by cryptsetup with value like: 16384
24307>8	ubequad		x		\b, header size %llu
24308# possible check for MAGIC_2ND after header
24309#>(8.Q) 	 string		SKUL\xba\xbe	\b, 2nd_HEADER_OK
24310# seqid; sequence ID, increased on update; called Epoch by cryptsetup with value like: 3 4 8 10
24311>16	ubequad		x		\b, ID %llu
24312# label[48]; optional ASCII label or empty; called Label by cryptsetup with value like: "LUKS2_EXT4_ROOT"
24313>24	string		>\0		\b, label %s
24314# csum_alg[32]; checksum algorithm like: sha256 sha1 sha512 wirlpool ripemd160
24315>72	string		x		\b, algo %s
24316# salt[64]; salt , unique for every header
24317>104	ubequad		x		\b, salt %#llx...
24318# uuid[40]; UID of device as string like: 242256c6-396e-4a35-af5f-5b70cb7af9a7
24319>168	string		x		\b, UUID: %-.40s
24320# subsystem[48]; optional owner subsystem label or empty
24321>208	string		>\0		\b, sub label %-.48s
24322# hdr_offset; offset from device start [ bytes ] like: 0
24323>256	ubequad		!0		\b, offset %llx
24324# char _padding [184]; must be zeroed
24325#>264	ubequad		x		\b, padding %#16.16llx
24326#>440	ubequad		x		\b...%16.16llx
24327# csum[64]; header checksum
24328>448	ubequad		x		\b, crc %#llx...
24329# char _padding4096 [7*512];  Padding , must be zeroed
24330#>512	ubequad		x		\b, more padding %#16.16llx
24331#>4088	ubequad		x		\b...%16.16llx
24332# JSON text data terminated by the zero character; unused remainder empty and filled with zeroes like:
24333# {"keyslots":{"0":{"type":"luks2","key_size":64,"af":{"type":"luks1","stripes":4000,"hash":"sha256"},"area":{"type":"raw","offse"
24334>0x1000	string		x		\b, at 0x1000 %s
24335#>0x1000	indirect	x
24336# display information (like active) about LUKS1 slot
243370	name		luks-slot
24338# state of keyslot; 0x00AC71F3~active 0x0000DEAD~inactive
24339#>0	ubelong		x		\b, status %#8.8x
24340>0	ubelong		=0x00AC71F3	active
24341>0	ubelong		=0x0000DEAD	inactive
24342# iteration parameter for PBKDF2
24343#>4	ubelong		x		\b, %u iterations
24344# salt parameter for PBKDF2
24345#>8	ubequad		x		\b, salt %#16.16llx
24346#>>16	ubequad		x		\b%16.16llx
24347#>>24	ubequad		x		\b%16.16llx
24348#>>32	ubequad		x		\b%16.16llx
24349# start sector of key material like: 8 0x200 0x3f8 0x5f0 0xdd0
24350>40	ubelong		x		\b, %#x material offset
24351# number of anti-forensic stripes like: 4000
24352>44	ubelong		!4000		\b, %u stripes
24353#------------------------------------------------------------------------------
24354# $File: m4,v 1.3 2019/02/27 16:46:23 christos Exp $
24355# make:  file(1) magic for M4 scripts
24356#
243570	search/8192	dnl
24358>0	regex	\^dnl\ 		M4 macro processor script text
24359!:mime	text/x-m4
243600	search/8192	AC_DEFUN
24361>0	regex	\^AC_DEFUN\\(\\[	M4 macro processor script text
24362!:strength + 15
24363!:mime	text/x-m4
24364
24365#------------------------------------------------------------
24366# $File: mach,v 1.29 2021/04/26 15:56:00 christos Exp $
24367# Mach has two magic numbers, 0xcafebabe and 0xfeedface.
24368# Unfortunately the first, cafebabe, is shared with
24369# Java ByteCode, so they are both handled in the file "cafebabe".
24370# The "feedface" ones are handled herein.
24371#------------------------------------------------------------
24372# if set, it's for the 64-bit version of the architecture
24373# yes, this is separate from the low-order magic number bit
24374# it's also separate from the "64-bit libraries" bit in the
24375# upper 8 bits of the CPU subtype
24376
24377# Reference:	https://opensource.apple.com/source/cctools/cctools-949.0.1/
24378#               include/mach-o/loader.h
24379# display CPU type as string like: i386 x86_64 ... armv7 armv7k ...
243800	name	mach-o-cpu
24381>0	belong&0xff000000	0
24382#
24383# 32-bit ABIs.
24384#
24385#				1	vax
24386>>0	belong&0x00ffffff	1
24387>>>4		belong&0x00ffffff	0	vax
24388>>>4		belong&0x00ffffff	1	vax11/780
24389>>>4		belong&0x00ffffff	2	vax11/785
24390>>>4		belong&0x00ffffff	3	vax11/750
24391>>>4		belong&0x00ffffff	4	vax11/730
24392>>>4		belong&0x00ffffff	5	uvaxI
24393>>>4		belong&0x00ffffff	6	uvaxII
24394>>>4		belong&0x00ffffff	7	vax8200
24395>>>4		belong&0x00ffffff	8	vax8500
24396>>>4		belong&0x00ffffff	9	vax8600
24397>>>4		belong&0x00ffffff	10	vax8650
24398>>>4		belong&0x00ffffff	11	vax8800
24399>>>4		belong&0x00ffffff	12	uvaxIII
24400>>>4		belong&0x00ffffff	>12	vax subarchitecture=%d
24401>>0	belong&0x00ffffff	2	romp
24402>>0	belong&0x00ffffff	3	architecture=3
24403>>0	belong&0x00ffffff	4	ns32032
24404>>0	belong&0x00ffffff	5	ns32332
24405>>0	belong&0x00ffffff	6	m68k
24406#				7	x86
24407>>0	belong&0x00ffffff	7
24408>>>4	belong&0x0000000f	3		i386
24409>>>4	belong&0x0000000f	4		i486
24410>>>>4	belong&0x00fffff0	0
24411>>>>4	belong&0x00fffff0	0x80		\bsx
24412>>>4	belong&0x0000000f	5		i586
24413>>>4	belong&0x0000000f	6
24414>>>>4	belong&0x00fffff0	0		p6
24415>>>>4	belong&0x00fffff0	0x10		pentium_pro
24416>>>>4	belong&0x00fffff0	0x20		pentium_2_m0x20
24417>>>>4	belong&0x00fffff0	0x30		pentium_2_m3
24418>>>>4	belong&0x00fffff0	0x40		pentium_2_m0x40
24419>>>>4	belong&0x00fffff0	0x50		pentium_2_m5
24420>>>>4	belong&0x00fffff0	>0x50		pentium_2_m%#x
24421>>>4	belong&0x0000000f	7		celeron
24422>>>>4	belong&0x00fffff0	0x00		\b_m%#x
24423>>>>4	belong&0x00fffff0	0x10		\b_m%#x
24424>>>>4	belong&0x00fffff0	0x20		\b_m%#x
24425>>>>4	belong&0x00fffff0	0x30		\b_m%#x
24426>>>>4	belong&0x00fffff0	0x40		\b_m%#x
24427>>>>4	belong&0x00fffff0	0x50		\b_m%#x
24428>>>>4	belong&0x00fffff0	0x60
24429>>>>4	belong&0x00fffff0	0x70		\b_mobile
24430>>>>4	belong&0x00fffff0	>0x70		\b_m%#x
24431>>>4	belong&0x0000000f	8		pentium_3
24432>>>>4	belong&0x00fffff0	0x00
24433>>>>4	belong&0x00fffff0	0x10		\b_m
24434>>>>4	belong&0x00fffff0	0x20		\b_xeon
24435>>>>4	belong&0x00fffff0	>0x20		\b_m%#x
24436>>>4	belong&0x0000000f	9		pentiumM
24437>>>>4	belong&0x00fffff0	0x00
24438>>>>4	belong&0x00fffff0	>0x00		\b_m%#x
24439>>>4	belong&0x0000000f	10		pentium_4
24440>>>>4	belong&0x00fffff0	0x00
24441>>>>4	belong&0x00fffff0	0x10		\b_m
24442>>>>4	belong&0x00fffff0	>0x10		\b_m%#x
24443>>>4	belong&0x0000000f	11		itanium
24444>>>>4	belong&0x00fffff0	0x00
24445>>>>4	belong&0x00fffff0	0x10		\b_2
24446>>>>4	belong&0x00fffff0	>0x10		\b_m%#x
24447>>>4	belong&0x0000000f	12		xeon
24448>>>>4	belong&0x00fffff0	0x00
24449>>>>4	belong&0x00fffff0	0x10		\b_mp
24450>>>>4	belong&0x00fffff0	>0x10		\b_m%#x
24451>>>4	belong&0x0000000f	>12		ia32 family=%d
24452>>>>4	belong&0x00fffff0	0x00
24453>>>>4	belong&0x00fffff0	>0x00		model=%x
24454>>0	belong&0x00ffffff	8	mips
24455>>>4		belong&0x00ffffff	1	R2300
24456>>>4		belong&0x00ffffff	2	R2600
24457>>>4		belong&0x00ffffff	3	R2800
24458>>>4		belong&0x00ffffff	4	R2000a
24459>>>4		belong&0x00ffffff	5	R2000
24460>>>4		belong&0x00ffffff	6	R3000a
24461>>>4		belong&0x00ffffff	7	R3000
24462>>>4		belong&0x00ffffff	>7	subarchitecture=%d
24463>>0	belong&0x00ffffff	9	ns32532
24464>>0	belong&0x00ffffff	10	mc98000
24465>>0	belong&0x00ffffff	11	hppa
24466>>>4		belong&0x00ffffff	0	7100
24467>>>4		belong&0x00ffffff	1	7100LC
24468>>>4		belong&0x00ffffff	>1	subarchitecture=%d
24469>>0	belong&0x00ffffff	12	arm
24470>>>4		belong&0x00ffffff	0
24471>>>4		belong&0x00ffffff	1	subarchitecture=%d
24472>>>4		belong&0x00ffffff	2	subarchitecture=%d
24473>>>4		belong&0x00ffffff	3	subarchitecture=%d
24474>>>4		belong&0x00ffffff	4	subarchitecture=%d
24475>>>4		belong&0x00ffffff	5	\bv4t
24476>>>4		belong&0x00ffffff	6	\bv6
24477>>>4		belong&0x00ffffff	7	\bv5tej
24478>>>4		belong&0x00ffffff	8	\bxscale
24479>>>4		belong&0x00ffffff	9	\bv7
24480>>>4		belong&0x00ffffff	10	\bv7f
24481>>>4		belong&0x00ffffff	11	\bv7s
24482>>>4		belong&0x00ffffff	12	\bv7k
24483>>>4		belong&0x00ffffff	13	\bv8
24484>>>4		belong&0x00ffffff	14	\bv6m
24485>>>4		belong&0x00ffffff	15	\bv7m
24486>>>4		belong&0x00ffffff	16	\bv7em
24487>>>4		belong&0x00ffffff	>16	subarchitecture=%d
24488#				13	m88k
24489>>0	belong&0x00ffffff	13
24490>>>4		belong&0x00ffffff	0	mc88000
24491>>>4		belong&0x00ffffff	1	mc88100
24492>>>4		belong&0x00ffffff	2	mc88110
24493>>>4		belong&0x00ffffff	>2	mc88000 subarchitecture=%d
24494>>0	belong&0x00ffffff	14	SPARC
24495>>0	belong&0x00ffffff	15	i860g
24496>>0	belong&0x00ffffff	16	alpha
24497>>0	belong&0x00ffffff	17	rs6000
24498>>0	belong&0x00ffffff	18	ppc
24499>>>4		belong&0x00ffffff	0
24500>>>4		belong&0x00ffffff	1	\b_601
24501>>>4		belong&0x00ffffff	2	\b_602
24502>>>4		belong&0x00ffffff	3	\b_603
24503>>>4		belong&0x00ffffff	4	\b_603e
24504>>>4		belong&0x00ffffff	5	\b_603ev
24505>>>4		belong&0x00ffffff	6	\b_604
24506>>>4		belong&0x00ffffff	7	\b_604e
24507>>>4		belong&0x00ffffff	8	\b_620
24508>>>4		belong&0x00ffffff	9	\b_750
24509>>>4		belong&0x00ffffff	10	\b_7400
24510>>>4		belong&0x00ffffff	11	\b_7450
24511>>>4		belong&0x00ffffff	100	\b_970
24512>>>4		belong&0x00ffffff	>100	subarchitecture=%d
24513>>0	belong&0x00ffffff	>18	architecture=%d
24514>0	belong&0xff000000	0x01000000
24515#
24516# 64-bit ABIs.
24517#
24518>>0	belong&0x00ffffff	0	64-bit architecture=%d
24519>>0	belong&0x00ffffff	1	64-bit architecture=%d
24520>>0	belong&0x00ffffff	2	64-bit architecture=%d
24521>>0	belong&0x00ffffff	3	64-bit architecture=%d
24522>>0	belong&0x00ffffff	4	64-bit architecture=%d
24523>>0	belong&0x00ffffff	5	64-bit architecture=%d
24524>>0	belong&0x00ffffff	6	64-bit architecture=%d
24525>>0	belong&0x00ffffff	7	x86_64
24526>>>4		belong&0x00ffffff	0	subarchitecture=%d
24527>>>4		belong&0x00ffffff	1	subarchitecture=%d
24528>>>4		belong&0x00ffffff	2	subarchitecture=%d
24529>>>4		belong&0x00ffffff	3
24530>>>4		belong&0x00ffffff	4	\b_arch1
24531>>>4		belong&0x00ffffff	8	\b_haswell
24532>>>4		belong&0x00ffffff	>4	subarchitecture=%d
24533>>0	belong&0x00ffffff	8	64-bit architecture=%d
24534>>0	belong&0x00ffffff	9	64-bit architecture=%d
24535>>0	belong&0x00ffffff	10	64-bit architecture=%d
24536>>0	belong&0x00ffffff	11	64-bit architecture=%d
24537>>0	belong&0x00ffffff	12	arm64
24538>>>4		belong&0x00ffffff	0
24539>>>4		belong&0x00ffffff	1	\bv8
24540>>>4		belong&0x00ffffff	2	\be
24541>>>>7		ubyte&0xff		>0	(caps:
24542>>>>7		ubyte&0xff		<0x80	%#02x
24543>>>>7		ubyte&0xc0		0x80	PAC
24544>>>>>7		ubyte&0x3f		x	\b%02d
24545>>>>7		ubyte&0xc0		0xc0	PAK
24546>>>>>7		ubyte&0x3f		x	\b%02d
24547>>>>7		ubyte&0xff		x	\b)
24548>>>4		belong&0x00ffffff	>2	subarchitecture=%d
24549>>0	belong&0x00ffffff	13	64-bit architecture=%d
24550>>0	belong&0x00ffffff	14	64-bit architecture=%d
24551>>0	belong&0x00ffffff	15	64-bit architecture=%d
24552>>0	belong&0x00ffffff	16	64-bit architecture=%d
24553>>0	belong&0x00ffffff	17	64-bit architecture=%d
24554>>0	belong&0x00ffffff	18	ppc64
24555>>>4		belong&0x00ffffff	0
24556>>>4		belong&0x00ffffff	1		\b_601
24557>>>4		belong&0x00ffffff	2		\b_602
24558>>>4		belong&0x00ffffff	3		\b_603
24559>>>4		belong&0x00ffffff	4		\b_603e
24560>>>4		belong&0x00ffffff	5		\b_603ev
24561>>>4		belong&0x00ffffff	6		\b_604
24562>>>4		belong&0x00ffffff	7		\b_604e
24563>>>4		belong&0x00ffffff	8		\b_620
24564>>>4		belong&0x00ffffff	9		\b_650
24565>>>4		belong&0x00ffffff	10		\b_7400
24566>>>4		belong&0x00ffffff	11		\b_7450
24567>>>4		belong&0x00ffffff	100		\b_970
24568>>>4		belong&0x00ffffff	>100		subarchitecture=%d
24569>>0	belong&0x00ffffff	>18	64-bit architecture=%d
24570>0	belong&0xff000000	0x02000000
24571#
24572# 64_32-bit ABIs.
24573#
24574>>0	belong&0x00ffffff	0	64_32-bit architecture=%d
24575>>0	belong&0x00ffffff	1	64_32-bit architecture=%d
24576>>0	belong&0x00ffffff	2	64_32-bit architecture=%d
24577>>0	belong&0x00ffffff	3	64_32-bit architecture=%d
24578>>0	belong&0x00ffffff	4	64_32-bit architecture=%d
24579>>0	belong&0x00ffffff	5	64_32-bit architecture=%d
24580>>0	belong&0x00ffffff	6	64_32-bit architecture=%d
24581>>0	belong&0x00ffffff	7	64_32-bit architecture=%d
24582>>0	belong&0x00ffffff	8	64_32-bit architecture=%d
24583>>0	belong&0x00ffffff	9	64_32-bit architecture=%d
24584>>0	belong&0x00ffffff	10	64_32-bit architecture=%d
24585>>0	belong&0x00ffffff	11	64_32-bit architecture=%d
24586>>0	belong&0x00ffffff	12	64_32-bit arm
24587>>>4		belong&0x00ffffff	0
24588>>>4		belong&0x00ffffff	1	\bv8
24589>>>4		belong&0x00ffffff	>1	subarchitecture=%d
24590>>0	belong&0x00ffffff	13	64_32-bit architecture=%d
24591>>0	belong&0x00ffffff	14	64_32-bit architecture=%d
24592>>0	belong&0x00ffffff	15	64_32-bit architecture=%d
24593>>0	belong&0x00ffffff	16	64_32-bit architecture=%d
24594>>0	belong&0x00ffffff	17	64_32-bit architecture=%d
24595>>0	belong&0x00ffffff	18	64_32-bit architecture=%d
24596>>0	belong&0x00ffffff	>18	64_32-bit architecture=%d
24597
245980	name		mach-o-be
24599>0	byte		0xcf		64-bit
24600>4	use		mach-o-cpu
24601>12	belong		1		object
24602# GRR: Does not work for Mach-O with 2 architectures; instead display oo
24603#!:ext	o
24604!:ext	o/
24605>12	belong		2		executable
24606# the executables normally have no file extension like perl,
24607# but exceptions like perl5.18 perl5.16
24608!:ext	16/18/
24609>12	belong		3		fixed virtual memory shared library
24610>12	belong		4		core
24611>12	belong		5		preload executable
24612>12	belong		6		dynamically linked shared library
24613# GRR: Does not work for Mach-O with 2 architectures; instead display dylibdylib
24614#!:ext	dylib
24615!:ext	dylib/
24616>12	belong		7		dynamic linker
24617>12	belong		8		bundle
24618# normally name extension bundle; but exceptions like: AMDil_r700.dylib
24619!:ext	bundle/dylib/
24620>12	belong		9		dynamically linked shared library stub
24621>12	belong		10		dSYM companion file
24622>12	belong		11		kext bundle
24623>12	belong		>11
24624>>12	belong		x		filetype=%d
24625>24	belong		>0		\b, flags:<
24626>>24	belong		&0x00000001	\bNOUNDEFS
24627>>24	belong		&0x00000002	\b|INCRLINK
24628>>24	belong		&0x00000004	\b|DYLDLINK
24629>>24	belong		&0x00000008	\b|BINDATLOAD
24630>>24	belong		&0x00000010	\b|PREBOUND
24631>>24	belong		&0x00000020	\b|SPLIT_SEGS
24632>>24	belong		&0x00000040	\b|LAZY_INIT
24633>>24	belong		&0x00000080	\b|TWOLEVEL
24634>>24	belong		&0x00000100	\b|FORCE_FLAT
24635>>24	belong		&0x00000200	\b|NOMULTIDEFS
24636>>24	belong		&0x00000400	\b|NOFIXPREBINDING
24637>>24	belong		&0x00000800	\b|PREBINDABLE
24638>>24	belong		&0x00001000	\b|ALLMODSBOUND
24639>>24	belong		&0x00002000	\b|SUBSECTIONS_VIA_SYMBOLS
24640>>24	belong		&0x00004000	\b|CANONICAL
24641>>24	belong		&0x00008000	\b|WEAK_DEFINES
24642>>24	belong		&0x00010000	\b|BINDS_TO_WEAK
24643>>24	belong		&0x00020000	\b|ALLOW_STACK_EXECUTION
24644>>24	belong		&0x00040000	\b|ROOT_SAFE
24645>>24	belong		&0x00080000	\b|SETUID_SAFE
24646>>24	belong		&0x00100000	\b|NO_REEXPORTED_DYLIBS
24647>>24	belong		&0x00200000	\b|PIE
24648>>24	belong		&0x00400000	\b|DEAD_STRIPPABLE_DYLIB
24649>>24	belong		&0x00800000	\b|HAS_TLV_DESCRIPTORS
24650>>24	belong		&0x01000000	\b|NO_HEAP_EXECUTION
24651>>24	belong		&0x02000000	\b|APP_EXTENSION_SAFE
24652>>24	belong		&0x04000000	\b|NLIST_OUTOFSYNC_WITH_DYLDINFO
24653>>24	belong		&0x08000000	\b|SIM_SUPPORT
24654>>24	belong		&0x80000000	\b|DYLIB_IN_CACHE
24655>>24	belong		x		\b>
24656
24657#
246580	lelong&0xfffffffe	0xfeedface	Mach-O
24659!:strength +1
24660!:mime application/x-mach-binary
24661>0	use	\^mach-o-be
24662
246630	belong&0xfffffffe	0xfeedface	Mach-O
24664!:strength +1
24665!:mime application/x-mach-binary
24666>0	use	mach-o-be
24667
24668#------------------------------------------------------------------------------
24669# $File: macintosh,v 1.32 2021/04/26 15:56:00 christos Exp $
24670# macintosh description
24671#
24672# BinHex is the Macintosh ASCII-encoded file format (see also "apple")
24673# Daniel Quinlan, quinlan@yggdrasil.com
24674# Update:	Joerg Jenderek
24675# URL:		https://en.wikipedia.org/wiki/BinHex
24676# Reference:	http://fileformats.archiveteam.org/wiki/BinHex
24677# Note:		only tested with version 4.0 and hqx extension
24678# Any text/binary before the characteristic comment sentence is to be ignored like in
24679# http://ftp.vim.org/pub/ftp/ftp/infomac/disk/mac-update-40b7.hqx
246800	search/1602	(This\ file\
24681>&0	use		binhex
24682# http://ftp.vim.org/pub/ftp/ftp/infomac/_Disk_&_File/zap-res-forks-101.hqx
246830	search/2652/b	(This\ file\
24684>&0	use		binhex
246850	name				binhex
24686# keep split search string format similar like in version 5.37
24687>0	string	must\ be\ converted\ with\ BinHex\ 	BinHex binary text, version
24688# http://www.macdisk.com/binhexen.php3
24689!:apple	BNHQTEXT
24690# http://www.faqs.org/faqs/macintosh/comm-faq/part1/
24691>>&0	string	1.0					1.0
24692!:mime	application/mac-binhex
24693!:ext	hex
24694>>&0	string	2.0					2.0
24695!:mime	application/mac-binhex
24696!:ext	hcx
24697# BinHex	3.0 never existed
24698>>&0	string	4.0					4.0
24699!:mime	application/mac-binhex40
24700!:ext	hqx
24701# BinHex	5.0 also MacBinary I
24702>>&0	string	5.0					5.0
24703!:mime	application/mac-binhex40
24704!:ext	hqx
24705# this should never happen
24706>>&0	default	x
24707>>>&0	string	x					%.3s
24708!:mime	application/mac-binhex
24709!:ext	hqx
24710
24711# Stuffit archives are the de facto standard of compression for Macintosh
24712# files obtained from most archives. (franklsm@tuns.ca)
247130	string		SIT!			StuffIt Archive (data)
24714!:mime	application/x-stuffit
24715!:apple	SIT!SIT!
24716>2	string		x			: %s
247170	string		SITD			StuffIt Deluxe (data)
24718>2	string		x			: %s
247190	string		Seg			StuffIt Deluxe Segment (data)
24720>2	string		x			: %s
24721
24722# Newer StuffIt archives (grant@netbsd.org)
247230	string		StuffIt			StuffIt Archive
24724!:mime	application/x-stuffit
24725!:apple	SIT!SIT!
24726#>162	string		>0			: %s
24727
24728# Macintosh Applications and Installation binaries (franklsm@tuns.ca)
24729# GRR: Too weak
24730#0	string		APPL			Macintosh Application (data)
24731#>2	string		x			\b: %s
24732
24733# Macintosh System files (franklsm@tuns.ca)
24734# GRR: Too weak
24735#0	string		zsys			Macintosh System File (data)
24736#0	string		FNDR			Macintosh Finder (data)
24737#0	string		libr			Macintosh Library (data)
24738#>2	string		x			: %s
24739#0	string		shlb			Macintosh Shared Library (data)
24740#>2	string		x			: %s
24741#0	string		cdev			Macintosh Control Panel (data)
24742#>2	string		x			: %s
24743#0	string		INIT			Macintosh Extension (data)
24744#>2	string		x			: %s
24745#0	string		FFIL			Macintosh Truetype Font (data)
24746#>2	string		x			: %s
24747#0	string		LWFN			Macintosh Postscript Font (data)
24748#>2	string		x			: %s
24749
24750# Additional Macintosh Files (franklsm@tuns.ca)
24751# GRR: Too weak
24752#0	string		PACT			Macintosh Compact Pro Archive (data)
24753#>2	string		x			: %s
24754#0	string		ttro			Macintosh TeachText File (data)
24755#>2	string		x			: %s
24756#0	string		TEXT			Macintosh TeachText File (data)
24757#>2	string		x			: %s
24758#0	string		PDF			Macintosh PDF File (data)
24759#>2	string		x			: %s
24760
24761# MacBinary format (Eric Fischer, enf@pobox.com)
24762# Update: Joerg Jenderek
24763# URL: https://en.wikipedia.org/wiki/MacBinary
24764# Reference: https://files.stairways.com/other/macbinaryii-standard-info.txt
24765#
24766# Unfortunately MacBinary doesn't really have a magic number prior
24767# to the MacBinary III format.
24768#
24769
24770# old version number, must be kept at zero for compatibility
247710	byte	0
24772# length of filename (must be in the range 1-63)
24773>1	ubyte	>0
24774# skip T.PIC.LZ INSTRUMENT.7T INVENTORY
24775>>1	ubyte	<64
24776# skip Docs.MWII ReadMe.MacWrite "Notes (MacWrite II)"
24777# by looking for printable characters at beginning of file name
24778>>>2	ubelong	>0x1F000000
24779# zero fill, must be zero for compatibility
24780>>>>74	byte	0
24781# zero fill, must be zero for compatibility
24782>>>>>82	byte	0
24783# MacBinary I		test for valid version numbers
24784>>>>>>122	ubeshort	0
24785# additional check for creation date after 1 Jan 1970 ~ 7C25B080h
24786#>>>>>>>91	ubelong		>0x7c25b07F
24787# additional check for undefined header fields in MacBinary I
24788#>>>>>>>101	ulong		0
24789>>>>>>>0	use	mac-bin
24790# MacBinary II		the newer versions begins at 129
24791>>>>>>122	ubeshort	0x8181
24792>>>>>>>0	use	mac-bin
24793# MacBinary III with MacBinary II to read
24794>>>>>122	ubeshort	0x8281
24795>>>>>>0	use	mac-bin
24796
24797#	display information of MacBinary file
247980	name		mac-bin
24799>122	ubyte	x	MacBinary
24800# versions for MacBinary II/III
24801>122	ubyte	129		II
24802>122	ubyte	130		III
24803# only in MacBinary III
24804>>102	string	!mBIN		with surprising version
24805!:mime	application/x-macbinary
24806!:apple	PSPTBINA
24807!:ext	bin/macbin
24808# THIS SHOULD NEVER HAPPEN! Maybe another file type is misidetified as MacBinary
24809#>1	ubyte	>63		\b, name length %u too BIG!
24810#>122	ubeshort	x	\b, version %#x
24811# Finder flags if not 0
24812# >73	byte		!0		\b, flags 0x
24813# >73	byte		=0
24814# >>101	byte		!0		\b, flags 0x
24815# # original Finder flags (Bits 8-15)
24816# >73	byte		!0		\b%x
24817# # finder flags, bits 0-7
24818# >101	byte		!0		\b%x
24819>73	byte		&0x01		\b, inited
24820>73	byte		&0x02		\b, changed
24821>73	byte		&0x04		\b, busy
24822>73	byte		&0x08		\b, bozo
24823>73	byte		&0x10		\b, system
24824>73	byte		&0x20		\b, bundle
24825>73	byte		&0x40		\b, invisible
24826>73	byte		&0x80		\b, locked
24827
24828# 75	beshort				# vertical posn in window
24829#>75	beshort		!0		\b, v.pos %u
24830# 77	beshort				# horiz posn in window
24831#>77	beshort		!0		\b, h.pos %u
24832# 79	beshort				# window or folder ID
24833>79	ubeshort	!0		\b, ID %#x
24834# protected flag
24835>81	byte		!0		\b, protected %#x
24836# length of comment after resource
24837>99	ubeshort	!0		\b, comment length %u
24838# char. code of file name
24839>106	ubyte		!0		\b, char. code %#x
24840# still more Finder flags
24841>107	ubyte		!0		\b, more flags %#x
24842# length of total files when unpacked only used when pack and unpack on the fly
24843>116	ubelong		!0		\b, total length %u
24844# 120	beshort				# length of add'l header
24845>120	ubeshort	!0		\b, 2nd header length %u
24846# 124	beshort				# checksum
24847#>124	ubeshort	!0		\b, CRC %#x
24848# creation date in seconds since MacOS epoch start. So 1 Jan 1970 ~ 7C25B080
24849>91	beldate-0x7C25B080	x	\b, %s
24850# THIS SHOULD NEVER HAPPEN! Maybe another file type is misidetified or time overflow
24851>91	ubelong		<0x7c25b080	INVALID date
24852#>91	belong-0x7C25B080	x	\b, DEBUG DATE %d
24853# last modified date
24854>95	beldate-0x7C25B080	x	\b, modified %s
24855# Apple creator+typ if not null
24856# file creator (normally expressed as four characters)
24857>69	ulong			!0	\b, creator
24858# instead 4 character code display full creator name
24859>>69	use			apple-creator
24860# file type (normally expressed as four characters)
24861>65	ulong			!0	\b, type
24862>>65	use			apple-type
24863# length of data segment
24864>83	ubelong			!0	\b, %u bytes
24865# filename (in the range 1-63)
24866>1	pstring			x	"%s"
24867# print 1 space and then at offset 128 inspect data fork content if it has one
24868>83	ubelong			!0	\b
24869>>128	indirect		x
24870# Afterwards resource fork if length of resource segment not zero
24871>87	ubelong			!0
24872# calculate resource fork offset
24873>>83	ubelong+128		x	\b, at %#x
24874# length of resource segment
24875>>87	ubelong			!0	%u bytes
24876>>(83.S+128)	ubequad		x	resource
24877# further resource fork content inspection
24878>>>&-8	indirect		x
24879
24880# Apple Type/Creator Database
24881# URL: https://en.wikipedia.org/wiki/Type_code
24882# Reference:	https://www.lacikam.co.il/tcdb/
24883#		https://www.macdisk.com/macsigen.php
24884# Note:	classic Mac OS files have two 4 character codes for type and creator.
24885#	Thereby the Finder attach documents types to applications.
24886
24887#>65	string		x		\b, type "%4.4s"
24888
24889#	display information about apple type
248900	name		apple-type
24891>0	string		8BIM		PhotoShop
24892>0	string		ALB3		PageMaker 3
24893>0	string		ALB4		PageMaker 4
24894>0	string		ALT3		PageMaker 3
24895>0	string		APPL		application
24896>0	string		AWWP		AppleWorks word processor
24897>0	string		CIRC		simulated circuit
24898>0	string		DRWG		MacDraw
24899>0	string		EPSF		Encapsulated PostScript
24900>0	string		FFIL		font suitcase
24901>0	string		FKEY		function key
24902>0	string		FNDR		Macintosh Finder
24903>0	string		GIFf		GIF image
24904>0	string		Gzip		GNU gzip
24905>0	string		INIT		system extension
24906>0	string		LIB\ 		library
24907>0	string		LWFN		PostScript font
24908>0	string		MSBC		Microsoft BASIC
24909>0	string		PACT		Compact Pro archive
24910>0	string		PDF\ 		Portable Document Format
24911>0	string		PICT		picture
24912>0	string		PNTG		MacPaint picture
24913>0	string		PREF		preferences
24914>0	string		PROJ		Think C project
24915>0	string		QPRJ		Think Pascal project
24916>0	string		SCFL		Defender scores
24917>0	string		SCRN		startup screen
24918>0	string		SITD		StuffIt Deluxe
24919>0	string		SPn3		SuperPaint
24920>0	string		STAK		HyperCard stack
24921>0	string		Seg\ 		StuffIt segment
24922>0	string		TARF		Unix tar archive
24923>0	string		TEXT		ASCII
24924>0	string		TIFF		TIFF image
24925>0	string		TOVF		Eudora table of contents
24926>0	string		WDBN		Microsoft Word word processor
24927>0	string		WORD		MacWrite word processor
24928>0	string		XLS\ 		Microsoft Excel
24929>0	string		ZIVM		compress (.Z)
24930>0	string		ZSYS		Pre-System 7 system file
24931>0	string		acf3		Aldus FreeHand
24932>0	string		cdev		control panel
24933>0	string		dfil		Desk Accessory suitcase
24934>0	string		libr		library
24935>0	string		nX^d		WriteNow word processor
24936>0	string		nX^w		WriteNow dictionary
24937>0	string		rsrc		resource
24938>0	string		scbk		Scrapbook
24939>0	string		shlb		shared library
24940>0	string		ttro		SimpleText read-only
24941>0	string		zsys		system file
24942
24943#	additional types added in Dec 2017
24944>0	string		BINA		binary file
24945>0	string		BMPp		BMP image
24946>0	string		JPEG		JPEG image
24947#>0	string		W4BN		Microsoft Word x.y word processor?
24948# if type name is not known display 4 character identifier
24949>0	default		x
24950>>0	string		x		'%4.4s'
24951
24952#>69	string		x		\b, creator "%4.4s"
24953
24954# Now Apple has no repository of registered Creator IDs any more. These are
24955# just the ones that I happened to have files from and was able to identify.
24956
24957#	display information about apple creator
249580	name		apple-creator
24959>0	string		8BIM		Adobe Photoshop
24960>0	string		ALD3		PageMaker 3
24961>0	string		ALD4		PageMaker 4
24962>0	string		ALFA		Alpha editor
24963>0	string		APLS		Apple Scanner
24964>0	string		APSC		Apple Scanner
24965>0	string		BRKL		Brickles
24966>0	string		BTFT		BitFont
24967>0	string		CCL2		Common Lisp 2
24968>0	string		CCL\ 		Common Lisp
24969>0	string		CDmo		The Talking Moose
24970>0	string		CPCT		Compact Pro
24971>0	string		CSOm		Eudora
24972>0	string		DMOV		Font/DA Mover
24973>0	string		DSIM		DigSim
24974>0	string		EDIT		Macintosh Edit
24975>0	string		ERIK		Macintosh Finder
24976>0	string		EXTR		self-extracting archive
24977>0	string		Gzip		GNU gzip
24978>0	string		KAHL		Think C
24979>0	string		LWFU		LaserWriter Utility
24980>0	string		LZIV		compress
24981>0	string		MACA		MacWrite
24982>0	string		MACS		Macintosh operating system
24983>0	string		MAcK		MacKnowledge terminal emulator
24984>0	string		MLND		Defender
24985>0	string		MPNT		MacPaint
24986>0	string		MSBB		Microsoft BASIC (binary)
24987>0	string		MSWD		Microsoft Word
24988>0	string		NCSA		NCSA Telnet
24989>0	string		PJMM		Think Pascal
24990>0	string		PSAL		Hunt the Wumpus
24991#>0	string		PSI2		Apple File Exchange
24992>0	string		R*ch		BBEdit
24993>0	string		RMKR		Resource Maker
24994>0	string		RSED		Resource Editor
24995>0	string		Rich		BBEdit
24996>0	string		SIT!		StuffIt
24997>0	string		SPNT		SuperPaint
24998>0	string		Unix		NeXT Mac filesystem
24999>0	string		VIM!		Vim editor
25000>0	string		WILD		HyperCard
25001>0	string		XCEL		Microsoft Excel
25002>0	string		aCa2		Fontographer
25003>0	string		aca3		Aldus FreeHand
25004>0	string		dosa		Macintosh MS-DOS file system
25005>0	string		movr		Font/DA Mover
25006>0	string		nX^n		WriteNow
25007>0	string		pdos		Apple ProDOS file system
25008>0	string		scbk		Scrapbook
25009>0	string		ttxt		SimpleText
25010>0	string		ufox		Foreign File Access
25011#	additional creators added in Dec 2017
25012# Claris/Apple Works
25013>0	string		BOBO		Apple Works
25014# CU-SeeMe_0.87b3_(68K).bin
25015#>0	string		CUce		bar
25016>0	string		PSPT		Apple File Exchange
25017# Disk_Copy_4.2.sea.bin
25018#>0	string		NCse		foo
25019# probably StuffIt/Aladdin by Smith Micro Software, Inc.
25020>0	string		STi0		stuffit
25021# MacGzip-1.1.3.sea.bin
25022#>0	string		aust		bar
25023# D-Disk_Copy_6.3.3.smi.bin
25024>0	string		oneb		Disk Copy Self Mounting
25025# if creator name is not known display 4 character identifier
25026>0	default		x
25027>>0	string		x		'%4.4s'
25028
25029# sas magic from Bruce Foster (bef@nwu.edu)
25030#
25031#0	string		SAS		SAS
25032#>8	string		x		%s
250330	string		SAS		SAS
25034>24	string		DATA		data file
25035>24	string		CATALOG		catalog
25036>24	string		INDEX		data file index
25037>24	string		VIEW		data view
25038# sas 7+ magic from Reinhold Koch (reinhold.koch@roche.com)
25039#
250400x54    string          SAS             SAS 7+
25041>0x9C   string          DATA            data file
25042>0x9C   string          CATALOG         catalog
25043>0x9C   string          INDEX           data file index
25044>0x9C   string          VIEW            data view
25045
25046# spss magic for SPSS system and portable files,
25047#	 from Bruce Foster (bef@nwu.edu).
25048
250490	long		0xc1e2c3c9	SPSS Portable File
25050>40	string 		x		%s
25051
250520	string		$FL2		SPSS System File
25053>24	string		x		%s
25054
250550	string		$FL3		SPSS System File
25056>24	string		x		%s
25057
25058# Macintosh filesystem data
25059# From "Tom N Harris" <telliamed@mac.com>
25060# Fixed HFS+ and Partition map magic: Ethan Benson <erbenson@alaska.net>
25061# The MacOS epoch begins on 1 Jan 1904 instead of 1 Jan 1970, so these
25062# entries depend on the data arithmetic added after v.35
25063# There's also some Pascal strings in here, ditto...
25064
25065# The boot block signature, according to IM:Files, is
25066# "for HFS volumes, this field always contains the value 0x4C4B."
25067# But if this is true for MFS or HFS+ volumes, I don't know.
25068# Alternatively, the boot block is supposed to be zeroed if it's
25069# unused, so a simply >0 should suffice.
25070
250710x400	beshort			0xD2D7		Macintosh MFS data
25072>0	beshort			0x4C4B		(bootable)
25073>0x40a	beshort			&0x8000		(locked)
25074>0x402	beldate-0x7C25B080	x		created: %s,
25075>0x406	beldate-0x7C25B080	>0		last backup: %s,
25076>0x414	belong			x		block size: %d,
25077>0x412	beshort			x		number of blocks: %d,
25078>0x424	pstring			x		volume name: %s
25079
25080# *.hfs updated by Joerg Jenderek
25081# https://en.wikipedia.org/wiki/Hierarchical_File_System
25082# "BD" gives many false positives
250830x400	beshort			0x4244
25084# ftp://ftp.mars.org/pub/hfs/hfsutils-3.2.6.tar.gz/hfsutils-3.2.6/libhfs/apple.h
25085# first block of volume bit map (always 3)
25086>0x40e	ubeshort		0x0003
25087# maximal length of volume name is 27
25088>>0x424		ubyte			<28	Macintosh HFS data
25089!:mime	application/x-apple-diskimage
25090#!:apple	hfsdINIT
25091#!:apple	MACSdisk
25092# https://www.macdisk.com/macsigen.php
25093#!:apple	ddskdevi
25094!:apple	????devi
25095# https://en.wikipedia.org/wiki/Apple_Disk_Image
25096!:ext hfs/dmg
25097>>>0		beshort			0x4C4B	(bootable)
25098#>>>0		beshort			0x0000	(not bootable)
25099>>>0x40a	beshort			&0x8000	(locked)
25100>>>0x40a	beshort			^0x0100	(mounted)
25101>>>0x40a	beshort			&0x0200	(spared blocks)
25102>>>0x40a	beshort			&0x0800	(unclean)
25103>>>0x47C	beshort			0x482B	(Embedded HFS+ Volume)
25104# https://www.epochconverter.com/
25105# 0x7C245F00 seconds	~ 2082758400	~ 01 Jan 2036 00:00:00	~ 66 years to 1970
25106# 0x7C25B080 seconds	~ 2082844800	~ 02 Jan 2036 00:00:00
25107# construct not working
25108#>>>0x402	beldate-0x7C25B080	x	created: %s,
25109#>>>0x406	beldate-0x7C25B080	x	last modified: %s,
25110#>>>0x440	beldate-0x7C25B080	>0	last backup: %s,
25111# found block sizes 200h,1200h,2800h
25112>>>0x414	belong			x	block size: %d,
25113>>>0x412	beshort			x	number of blocks: %d,
25114>>>0x424	pstring			x	volume name: %s
25115
251160x400	beshort			0x482B		Macintosh HFS Extended
25117>&0	beshort			x		version %d data
25118>0	beshort			0x4C4B		(bootable)
25119>0x404	belong			^0x00000100	(mounted)
25120>&2	belong			&0x00000200	(spared blocks)
25121>&2	belong			&0x00000800	(unclean)
25122>&2	belong			&0x00008000	(locked)
25123>&6	string			x		last mounted by: '%.4s',
25124# really, that should be treated as a belong and we print a string
25125# based on the value. TN1150 only mentions '8.10' for "MacOS 8.1"
25126>&14	beldate-0x7C25B080	x		created: %s,
25127# only the creation date is local time, all other timestamps in HFS+ are UTC.
25128>&18	bedate-0x7C25B080	x		last modified: %s,
25129>&22	bedate-0x7C25B080	>0		last backup: %s,
25130>&26	bedate-0x7C25B080	>0		last checked: %s,
25131>&38	belong			x		block size: %d,
25132>&42	belong			x		number of blocks: %d,
25133>&46	belong			x		free blocks: %d
25134
25135## AFAIK, only the signature is different
25136# same as Apple Partition Map
25137# GRR: This magic is too weak, it is just "TS"
25138#0x200		beshort		0x5453		Apple Old Partition data
25139#>0x2		beshort		x		block size: %d,
25140#>0x230		string		x		first type: %s,
25141#>0x210		string		x		name: %s,
25142#>0x254		belong		x		number of blocks: %d,
25143#>0x400		beshort		0x504D
25144#>>0x430		string		x		second type: %s,
25145#>>0x410		string		x		name: %s,
25146#>>0x454		belong		x		number of blocks: %d,
25147#>>0x800		beshort		0x504D
25148#>>>0x830	string		x		third type: %s,
25149#>>>0x810	string		x		name: %s,
25150#>>>0x854	belong		x		number of blocks: %d,
25151#>>>0xa00	beshort		0x504D
25152#>>>>0xa30	string		x		fourth type: %s,
25153#>>>>0xa10	string		x		name: %s,
25154#>>>>0xa54	belong		x		number of blocks: %d
25155
25156# From: Remi Mommsen <mommsen@slac.stanford.edu>
251570		string		BOMStore	Mac OS X bill of materials (BOM) file
25158
25159# From: Adam Buchbinder <adam.buchbinder@gmail.com>
25160# URL: https://en.wikipedia.org/wiki/Datafork_TrueType
25161# Derived from the 'fondu' and 'ufond' source code (fondu.sf.net). 'sfnt' is
25162# TrueType; 'POST' is PostScript. 'FONT' and 'NFNT' sometimes appear, but I
25163# don't know what they mean.
251640	belong	0x100
25165>(0x4.L+24)	beshort	x
25166>>&4	belong	0x73666e74	Mac OSX datafork font, TrueType
25167>>&4	belong	0x464f4e54	Mac OSX datafork font, 'FONT'
25168>>&4	belong	0x4e464e54	Mac OSX datafork font, 'NFNT'
25169>>&4	belong	0x504f5354	Mac OSX datafork font, PostScript
25170
25171#------------------------------------------------------------------------------
25172# $File: macos,v 1.1 2012/12/21 16:41:07 christos Exp $
25173# MacOS files
25174#
25175
251760	string		book\0\0\0\0mark\0\0\0\0	MacOS Alias file
25177
25178#------------------------------------------------------------------------------
25179# $File: magic,v 1.10 2010/11/25 15:00:12 christos Exp $
25180# magic:  file(1) magic for magic files
25181#
251820	string/t		#\ Magic	magic text file for file(1) cmd
251830	lelong		0xF11E041C	magic binary file for file(1) cmd
25184>4	lelong		x		(version %d) (little endian)
251850	belong		0xF11E041C	magic binary file for file(1) cmd
25186>4	belong		x		(version %d) (big endian)
25187#------------------------------------------------------------------------------
25188# $File: mail.news,v 1.29 2022/06/17 18:02:19 christos Exp $
25189# mail.news:  file(1) magic for mail and news
25190#
25191# Unfortunately, saved netnews also has From line added in some news software.
25192#0	string		From 		mail text
251930	string/t		Relay-Version: 	old news text
25194!:mime	message/rfc822
251950	string/t		#!\ rnews	batched news text
25196!:mime	message/rfc822
251970	string/t		N#!\ rnews	mailed, batched news text
25198!:mime	message/rfc822
251990	string/t		Forward\ to 	mail forwarding text
25200!:mime	message/rfc822
252010	string/t		Pipe\ to 	mail piping text
25202!:mime	message/rfc822
252030	string/tc		delivered-to:	SMTP mail text
25204!:mime	message/rfc822
252050	string/tc		return-path:	SMTP mail text
25206!:mime	message/rfc822
252070	string/t		Path:		news text
25208!:mime	message/news
252090	string/t		Xref:		news text
25210!:mime	message/news
252110	string/t		From:		news or mail text
25212!:mime	message/rfc822
252130	string/t		Date:		news or mail text
25214!:mime	message/rfc822
252150	string/t		Article 	saved news text
25216!:mime	message/news
25217# Reference:	http://quimby.gnus.org/notes/BABYL
25218# Update:	Joerg Jenderek
25219# Note:		used by Rmail in Emacs version 22 and before
25220#		is not text because of characters like Control-L Control-_
252210	string/b		BABYL\ OPTIONS:	Emacs RMAIL
25222#0	string/t		BABYL		Emacs RMAIL text
25223# https://reposcope.com/mimetype/message/x-gnu-rmail
25224!:mime	message/x-gnu-rmail
25225# ~/RMAIL
25226!:ext	/
252270	string/t		Received:	RFC 822 mail text
25228!:mime	message/rfc822
252290	string/t		MIME-Version:	MIME entity text
25230#0	string/t		Content-	MIME entity text
25231
25232# TNEF files...
25233# URL:		http://fileformats.archiveteam.org/wiki/Transport_Neutral_Encapsulation_Format
25234#		https://en.wikipedia.org/wiki/Transport_Neutral_Encapsulation_Format
25235# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/t/tnef.trid.xml
25236#		https://interoperability.blob.core.windows.net/files/MS-OXTNEF/%5bMS-OXTNEF%5d-210817.pdf
25237# Update:	Joerg Jenderek
25238# Note:		moved and merged from ./msdos (version 1.154) there just called "TNEF"
25239#		partly verified by `tnef --list -v -f voice.tnef` and `ytnef -v  triples.tnef`
25240# TNEF magic From "Joomy" <joomy@se-ed.net>
25241# TNEF_SIGNATURE
252420	lelong		0x223E9F78	Transport Neutral Encapsulation Format (TNEF)
25243!:mime	application/vnd.ms-tnef
25244# winmail.dat or win.dat by Microsoft Outlook
25245!:ext	tnef/dat
25246# https://docs.microsoft.com/en-us/openspecs/exchange_server_protocols/ms-oxtnef/7fdb64ee-7f63-4d95-9af1-c672e7475c3a
25247# LegacyKey
25248#>4	uleshort	x		\b, key %#4.4x
25249# attrLevelMessage; Level where attribute applies like: 1~attrLevelMessage 2~attrLevelAttachment
25250>6	ubyte		!1		\b, 1st level %#2.2x
25251# other ID (like 02900000h) or TnefVersion ID (idTnefVersion=06900800h)
25252>7	ubelong		!0x06900800	\b, 1st id %#8.8x
25253>7	ubelong		=0x06900800
25254# TnefVersion lenght like: 4
25255>>11	ulelong		!4		\b, TnefVersion length %x
25256# TNEFVersionData; TnefVersion data like: 00010000h
25257>>15	ulelong		!0x00010000h	\b, version %#8.8x
25258# Checksum like: 1
25259>>19	uleshort	!1		\b, checksum %#4.4x
25260# attrLevelMessage; level of attOemCodepage like: 1
25261>>21	ubyte		!1		\b, level %#2.2x
25262# idOEMCodePage; OEMCodePage ID like: 07900600h
25263>>22	ubelong		=0x07900600	\b, OEM codepage
25264# OEMCodePage length like: 8
25265>>>26	ulelong		=8
25266# OEMCodePageData; PrimaryCodePage like: 1251 1252
25267>>>>30	ulelong		x		%u
25268# OEMCodePageData; SecondaryCodePage; unused and SHOULD contain zero
25269>>>>34	ulelong		!0		and %u
25270# OEMCodePageData Checksum like: E7h E8h
25271>>>>38	uleshort	x		(checksum %#x)
25272# attrLevelMessage of attMessageClass like: 1
25273>>40	ubyte		!1		\b, level %u
25274# idMessageClass; ID of attMessageClass like: 08800700h
25275>>41	ubelong		=0x08800700	\b, MessageAttribute
25276# attMessageClass length like: 16 24 25
25277#>>>45	ulelong		x		(length %u)
25278# attMessageClass data like: "IPM.Microsoft Mail.Note" "IPM.Note.Portada Newseum"
25279# "IPM.Appointment" "IPM.Note.Microsoft.Voicemail.UM.CA"
25280>>>45	pstring/l	x		"%s"
25281
25282# From: Kevin Sullivan <ksulliva@psc.edu>
252830	string		*mbx*		MBX mail folder
25284
25285# From: Simon Matter <simon.matter@invoca.ch>
252860	string		\241\002\213\015skiplist\ file\0\0\0	Cyrus skiplist DB
252870	string		\241\002\213\015twoskip\ file\0\0\0\0	Cyrus twoskip DB
25288
25289# JAM(mbp) Fidonet message area databases
25290# JHR file
252910	string	JAM\0			JAM message area header file
25292>12	leshort >0			(%d messages)
25293
25294# Squish Fidonet message area databases
25295# SQD file (requires at least one message in the area)
25296# XXX: Weak magic
25297#256	leshort	0xAFAE4453		Squish message area data file
25298#>4	leshort	>0			(%d messages)
25299
25300#0	string		\<!--\ MHonArc		text/html; x-type=mhonarc
25301
25302# Cyrus: file(1) magic for compiled Cyrus sieve scripts
25303# URL: https://www.cyrusimap.org/docs/cyrus-imapd/2.4.6/internal/bytecode.php
25304# URL: http://git.cyrusimap.org/cyrus-imapd/tree/sieve/bytecode.h?h=master
25305# From: Philipp Hahn <hahn@univention.de>
25306
25307# Compiled Cyrus sieve script
253080       string CyrSBytecode     Cyrus sieve bytecode data,
25309>12     belong =1       version 1, big-endian
25310>12     lelong =1       version 1, little-endian
25311>12     belong x        version %d, network-endian
25312
25313# Dovecot mail server, version 2.2 and later.
25314# Dovecot mailing list: dovecot@dovecot.org
25315# File format spec: https://wiki.dovecot.org/Design/Dcrypt/#File_format
25316# From: Stephen Gildea
253170	string	CRYPTED\003\007		Dovecot encrypted message
25318>9	byte	x			\b, dcrypt version %d
25319#------------------------------------------------------------------------------
25320# $File: make,v 1.5 2022/03/12 15:09:47 christos Exp $
25321# make:  file(1) magic for makefiles
25322#
25323# URL: https://en.wikipedia.org/wiki/Make_(software)
253240	regex/100l	\^(CFLAGS|VPATH|LDFLAGS|all:|\\.PRECIOUS)	makefile script text
25325!:mime	text/x-makefile
25326!:strength -15
25327# Update: Joerg Jenderek
25328# Reference: https://www.freebsd.org/cgi/man.cgi?make(1)
25329# exclude grub-core\lib\libgcrypt\mpi\Makefile.am with "#BEGIN_ASM_LIST"
25330# by additional escaping point character
25331# exclude MS Windows help file CoNtenT with ":include FOOBAR.CNT"
25332# and NSIS script with "!include" by additional escaping point character
253330	regex/100l	\^\\.(BEGIN|endif|include)	BSD makefile script text
25334!:mime	text/x-makefile
25335!:ext	/mk
25336!:strength -10
253370	regex/100l	\^SUBDIRS[[:space:]]+=	automake makefile script text
25338!:mime	text/x-makefile
25339!:strength -15
25340
25341
25342#------------------------------------------------------------------------------
25343# $File: map,v 1.9 2021/04/26 15:56:00 christos Exp $
25344# map:  file(1) magic for Map data
25345#
25346
25347# Garmin .FIT files https://pub.ks-and-ks.ne.jp/cycling/edge500_fit.shtml
253488	string	.FIT		FIT Map data
25349>15	byte	0
25350>>35	belong	x		\b, unit id %d
25351>>39	lelong	x		\b, serial %u
25352# https://pub.ks-and-ks.ne.jp/cycling/edge500_fit.shtml
25353# 20 years after unix epoch
25354# TZ=GMT date -d '1989-12-31 0:00' +%s
25355>>43	leldate+631065600	x	\b, %s
25356
25357>>47	leshort x		\b, manufacturer %d
25358>>47	leshort	1		\b (garmin)
25359>>49	leshort x		\b, product %d
25360>>53	byte	x		\b, type %d
25361>>53	byte	1		\b (Device)
25362>>53	byte	2		\b (Settings)
25363>>53	byte	3		\b (Sports/Cycling)
25364>>53	byte	4		\b (Activity)
25365>>53	byte	8		\b (Elevations)
25366>>53	byte	10		\b (Totals)
25367
25368# Summary: Garmin map
25369# From:	Joerg Jenderek
25370# URL: https://en.wikipedia.org/wiki/Garmin_.img
25371# Reference: https://wiki.openstreetmap.org/wiki/OSM_Map_On_Garmin/IMG_File_Format
25372# sourceforge.net/projects/garmin-img/files/IMG%20File%20Format/1.0/imgformat-1.0.pdf
25373# GRR: similar to MBR boot sector handled by ./filesystems
253740x1FE	leshort		=0xAA55
25375# look for valid map signature
25376>0x13	string		=IMG\0
25377>>0	use		garmin-map
253780	name				garmin-map
25379>0	ubyte		x		Garmin
25380!:mime	application/x-garmin-map
25381# If non-zero, every byte of the entire .img file is to be XORed with this value
25382>0	ubyte		!0		\b, %#x XORed
25383# goto block before FAT
25384>(0x40.b*512)	ubyte	x
25385# 1st fat name "DLLINFO TXT" only found for vpm
25386>>&512 		string	=DLLINFO\ TXT 	map (Voice Processing)
25387# there exist 2 other Garmin VPM formats; see ./audio
25388!:ext	vpm
25389# Deutsch__Yannick_D4481-00_0210.vpm
25390#>>>512	search/0x0116da60/s	RIFF	\b; with
25391# determine type voice type by ./riff
25392#>>>>&0	indirect	x	\b
25393>>&512 		string	!DLLINFO\ TXT 	map
25394!:ext	img
25395# 9 zeros
25396>1 	ubelong		!0 		\b, zeroes %#x
25397# Map's version major
25398>8	ubyte		x		v%u
25399# Map's version minor
25400>9	ubyte		x		\b.%.2u
25401# Map description[20], 0x20 padded
25402>0x49	string		x		%.20s
25403# Map name, continued (0x20 padded, \0 terminated)
25404>0x65	string		>\ 		\b%.31s
25405# Update year (+1900 for val >= 0x63, +2000 for val <= 0x62)
25406>0xB	ubyte		x		\b, updated
25407>>0xB	ubyte		>0x62
25408>>>0xB	ubyte-100	x		20%.2u
25409>>0xB	ubyte		<0x63
25410>>>0xB	ubyte		x		20%.2u
25411# Update month (0-11)
25412>0xA	ubyte		x		\b-%.2u
25413# All zeroes
25414>0xc 	uleshort	!0 		\b, zeroes %#x
25415# Mapsource flag, 1 - file created by Mapsource, 0 - Garmin map visible in Basecamp and Homeport
25416#>0xE	ubyte		!0		\b, Mapsource flag %#x
25417>0xE	ubyte		1		\b, Mapsource
25418# Checksum, sum of all bytes modulo 256 should be 0
25419#>0xF	ubyte		x		\b, Checksum %#x
25420# Signature: DSKIMG 0x00 or DSDIMG 0x00 for demo map
25421>0x10	string		!DSKIMG		\b, signature "%.7s"
25422>0x39	use		garmin-date
25423# Map file identifier like GARMIN\0
25424>0x41	string		!GARMIN		\b, id "%.7s"
25425# Block size exponent, E1; appears to always be 0x09; minimum block size 512 bytes
25426>0x61	ubyte		!0x09		\b, E1=%u
25427# Block size exponent, E2 ; file blocksize=2**(E1+E2)
25428>>0x62	ubyte		x		\b, E2=%u
25429>0x61	ubyte		=0x09		\b, blocksize
25430>>0x62	ubyte		0		512
25431>>0x62	ubyte		1		1024
25432>>0x62	ubyte		2		2048
25433>>0x62	ubyte		3		4096
25434>>0x62	ubyte		4		8192
25435>>0x62	ubyte		5		16384
25436>>0x62	default		x
25437>>>0x62	ubyte		x		E2=%u
25438# MBR signature
25439>0x1FE	leshort		!0xAA55		\b, invalid MBR
25440# 512 zeros
25441>0x200 	uquad		!0		\b, zeroes %#llx
25442# First sub-file offset (absolute); sometimes NO/UNKNOWN sub file!
25443>0x40C	ulelong		>0		\b, at %#x
25444# sub-file Header length
25445#>>(0x40C.l)	uleshort	x	\b, header len %#x
25446>>(0x40C.l)	uleshort	x	%u bytes
25447# sub-file Type[10] like "GARMIN RGN" "GARMIN TRE", "GARMIN TYP", etc.
25448>>(0x40C.l+2)	ubyte	>0x1F
25449>>>(0x40C.l+2)	ubyte	<0xFF
25450>>>>(0x40C.l+2)	string	x		"%.10s"
25451# 0x00 for most maps, 0x80 for locked maps (City Nav, City Select, etc.)
25452>>>>(0x40C.l+13)	ubyte	>0		\b, locked %#x
25453# Block sequence numbers like 0000 0100 0200 ... FFFF
25454# >0x420	ubequad		>0	\b, seq. %#16.16llx
25455# >>0x428	ubequad		>0	\b%16.16llx
25456# >>>0x430	ubequad	>0	\b%16.16llx
25457# >>>>0x438	ubequad	>0	\b%16.16llx
25458# >>>>>0x440	ubequad	>0	\b%16.16llx
25459# >>>>>>0x448	ubequad	>0	\b%16.16llx
25460# >>>>>>>0x450	ubequad	>0	\b%16.16llx
25461# >>>>>>>>0x458	ubequad	>0	\b%16.16llx
25462# >>>>>>>>>0x460	ubequad	>0	\b%16.16llx
25463# >>>>>>>>>>0x468	ubequad	>0	\b%16.16llx
25464# >>>>>>>>>>>0x470	ubequad	>0	\b%16.16llx
25465# >>>>>>>>>>>>0x478	ubequad	>0	\b%16.16llx
25466# >>>>>>>>>>>>>0x480	ubequad	>0	\b%16.16llx
25467# >>>>>>>>>>>>>>0x488	ubequad	>0	\b%16.16llx
25468# >>>>>>>>>>>>>>>0x490	ubequad	>0	\b%16.16llx
25469# >>>>>>>>>>>>>>>>0x498	ubequad	>0	\b%16.16llx
25470# >>>>>>>>>>>>>>>>>0x4A0	ubequad	>0	\b%16.16llx
25471# >>>>>>>>>>>>>>>>>>0x4A8	ubequad	>0	\b%16.16llx
25472# look for end of FAT
25473#>>0x420	search/512/s	\xff\xff	FAT END
25474# Physical block number of FAT header
25475#>0x40	ubyte		x		\b, FAT at phy. block %u
25476>0x40	ubyte		x
25477>>(0x40.b*512)	ubyte	x
25478# 1st FAT block
25479>>>&511 	use	garmin-fat
25480# 2nd FAT block
25481>>>&1023 	use	garmin-fat
25482# 3th FAT block
25483>>>&1535 	use	garmin-fat
25484# 4th FAT block
25485>>>&2047 	use	garmin-fat
25486# ... xth FAT block
25487#
25488# 314 zeros but not in vpm and also gmaptz.img
25489>0x84 	uquad		!0		\b, at 0x84 %#llx
25490# display FileAllocationTable block entry in garmin map
254910	name				garmin-fat
25492>0	ubyte		x		\b;
25493# sub file part; 0x0003 seems to be garbage
25494>0x10	uleshort	!0		next %#4.4x
25495>0x10	uleshort	=0
25496# fat flag 0~dummy block 1~true sub file
25497>>0	ubyte		!1		flag %u
25498>>0	ubyte		=1
25499# sub-file name like MAKEGMAP 12345678
25500>>>0x1	string		x		%.8s
25501# sub-file typ like RGN TRE MDR LBL
25502>>>0x9	string		x		\b.%.3s
25503# size of sub file
25504>>>0xC	ulelong		x		\b, %u bytes
25505# 32-bit block sequence numbers
25506#>>>0x20	ubequad		x		\b, seq. %#16.16llx
25507
25508#	display date stored inside Garmin maps like yyyy-mm-dd h:mm:ss
255090	name				garmin-date
25510# year like 2018
25511>0 	uleshort	x 		\b, created %u
25512# month (0-11)
25513>2	ubyte		x		\b-%.2u
25514# day (1-31)
25515>3	ubyte		x		\b-%.2u
25516# hour (0-23)
25517>4	ubyte		x		%u
25518# minute (0-59)
25519>5	ubyte		x		\b:%.2u
25520# second (0-59)
25521>6	ubyte		x		\b:%.2u
25522
25523# Summary: Garmin Map subfiles
25524# From:	Joerg Jenderek
25525# URL: https://wiki.openstreetmap.org/wiki/OSM_Map_On_Garmin/IMG_File_Format
25526# Garmin Common Header
255272	string	GARMIN\
25528# skip ASCII text by checking for low header length
25529>0	uleshort <0x1000	Garmin map,
25530# URL: https://wiki.openstreetmap.org/wiki/OSM_Map_On_Garmin/GMP_Subfile_Format
25531>>9	string	GMP				subtile
25532!:mime			application/x-garmin-gpm
25533!:ext			gmp
25534# copyright message
25535>>>(0.s)		string		x	%s
25536>>>0x0E 		use		garmin-date
25537# URL: https://wiki.openstreetmap.org/wiki/OSM_Map_On_Garmin/MDR_Subfile_Format
25538# This contains the searchable address table used for finding routing destinations
25539>>9	string	MDR				address table
25540!:mime			application/x-garmin-mdr
25541!:ext			mdr
25542# URL: https://wiki.openstreetmap.org/wiki/OSM_Map_On_Garmin/NOD_Subfile_Format
25543# http://svn.parabola.me.uk/display/trunk/doc/nod.txt
25544# This contains the routing information
25545>>9	string	NOD				routing
25546!:mime			application/x-garmin-nod
25547!:ext			nod
25548>>>0x0E 		use		garmin-date
25549#>>>0x15			ulelong		x	\b, at %#x
25550#>>>0x19			ulelong		x	%#x bytes NOD1
25551#>>>0x25			ulelong		x	\b, at %#x
25552#>>>0x29			ulelong		x	%#x bytes NOD2
25553#>>>0x31			ulelong		x	\b, at %#x
25554#>>>0x35			ulelong		x	%#x bytes NOD3
25555# URL: http://www.pinns.co.uk/osm/net.html
25556# routable highways (length, direction, allowed speed,house address information)
25557>>9	string	NET				highways
25558!:mime			application/x-garmin-net
25559!:ext			net
25560#>>>0x15			ulelong		x	\b, at %#x
25561#>>>0x19			ulelong		x	%#x bytes NET1
25562#>>>0x22			ulelong		>0
25563#>>>>0x1E		ulelong		x	\b, at %#x
25564#>>>>0x22		ulelong		x	%#x bytes NET2
25565#>>>0x2B			ulelong		>0
25566#>>>>0x27		ulelong		x	\b, at %#x
25567#>>>>0x2B		ulelong		x	%#x bytes NET3
25568# URL: https://wiki.openstreetmap.org/wiki/OSM_Map_On_Garmin/LBL_Subfile_Format
25569>>9	string	LBL				labels
25570!:mime			application/x-garmin-lbl
25571!:ext			lbl
25572>>>(0.s)		string	x	%s
25573# Label coding type 6h 9h and ah
25574>>>0x1E			ubyte		x	\b, coding type %#x
25575#>>>0x15			ulelong		x	\b, at %#x
25576#>>>0x19			ulelong		x	%#x bytes LBL1
25577#>>>0x1F			ulelong		x	\b, at %#x
25578#>>>0x23			ulelong		x	%#x bytes LBL2
25579#>>>0x2D			ulelong		x	\b, at %#x
25580#>>>0x31			ulelong		x	%#x bytes LBL3
25581# URL: https://wiki.openstreetmap.org/wiki/OSM_Map_On_Garmin/SRT_Subfile_Format
25582# A lookup table of the chars in the map's codepage, and their collating sequence
25583>>9	string	SRT				sort table
25584!:mime			application/x-garmin-srt
25585!:ext			srt
25586>>>0x0E 		use		garmin-date
25587# URL: https://wiki.openstreetmap.org/wiki/OSM_Map_On_Garmin/TRE_Subfile_Format
25588>>9	string	TRE				tree
25589!:mime			application/x-garmin-tre
25590!:ext			tre
25591# title like City Nav Europe NTU 2019.2 Basemap
25592# or OSM Street map
25593>>>(0.s)		string		x	%s
25594# 2nd title like Copyright 1995-2018 by GARMIN Corporation.
25595# or http://www.openstreetmap.org/
25596>>>>&1			string		x	%s
25597>>>0x0E 		use		garmin-date
25598#>>>0x21			ulelong		x	\b, at %#x
25599#>>>0x25			ulelong		x	%#x bytes TRE1
25600#>>>0x29			ulelong		x	\b, at %#x
25601#>>>0x2D			ulelong		x	%#x bytes TRE2
25602#>>>0x31			ulelong		x	\b, at %#x
25603#>>>0x35			ulelong		x	%#x bytes TRE3
25604# Copyright record size
25605#>>>0x39			uleshort	x	\b, copyright record size %u
25606# Map ID
25607>>>0x74			ulelong		x	\b, ID %#x
25608# URL: https://www.gpspower.net/garmin-tutorials/353310-basecamp-installing-free-desktop-map.html
25609# For road traffic information service (RDS/TMS/TMC). Commonly seen in City Navigator maps
25610>>9	string	TRF				traffic,
25611!:mime			application/x-garmin-trf
25612!:ext			trf
25613# city/region like Preitenegg
25614>>>(0.s+1) 		string		x	1st %s
25615# highway part like L606/L148
25616>>>>&1			string		x	%s
25617# URL: https://wiki.openstreetmap.org/wiki/OSM_Map_On_Garmin/Format
25618# Reference: http://www.pinns.co.uk/osm/typformat.html
25619# customize the appearance of objects. For GPS and MapSource/Qlandkarte better looking maps
25620>>9	string	TYP				types
25621!:mime			application/x-garmin-typ
25622!:ext			typ
25623>>>0x0E 		use		garmin-date
25624# character set 1252 65001~UTF8
25625>>>0x15			uleshort	x	\b, code page %u
25626# POIs
25627#>>>0x17			ulelong		x	\b, at %#x
25628#>>>0x1B			ulelong		x	%#x bytes TYP1
25629# extra pois
25630#>>>0x5B			ulelong		x	\b, at %#x
25631#>>>0x5F			ulelong		x	%#x bytes TYP8
25632# URL: https://wiki.openstreetmap.org/wiki/OSM_Map_On_Garmin/RGN_Subfile_Format
25633# http://www.pinns.co.uk/osm/RGN.html
25634# region data used by the Garmin software
25635>>9	string	RGN				region
25636!:mime			application/x-garmin-rgn
25637!:ext			rgn
25638# POIs,Indexed POIs,Polylines or Polygons or first map level
25639#>>>0x15			ulelong	       x	\b, at %#x
25640#>>>0x19			ulelong	       x	%#x bytes RGN1
25641# polygons with extended types
25642#>>>0x21			ulelong	       >0
25643#>>>>0x1D		ulelong	       x	\b, at %#x
25644#>>>>0x21		ulelong	       x	%#x bytes RGN2
25645# polylines with extended types
25646#>>>0x3D			ulelong	       >0
25647#>>>>0x39		ulelong	       x	\b, at %#x
25648#>>>>0x3D		ulelong	       x	%#x bytes RGN3
25649# extended POIs
25650#>>>0x59			ulelong	       >0
25651#>>>>0x55		ulelong	       x	\b, at %#x
25652#>>>>0x59		ulelong	       x	%#x bytes RGN3
25653#>>9	default		x		unknown map type
25654# Header length; GMP:31h 35h 3Dh,MDR:11Eh 238h 2C4h 310h,NOD:3Fh 7Fh,NET:64h,
25655# LBL:2A9h,SRT:1Dh 25h 27h,TRE:CFh 135h,TRF:5Ah,TYP:5Bh 6Eh 7Ch AEh,RGN:7Dh
25656>>0	uleshort	x		\b, header length %#x
25657
25658# URL:		https://www.memotech.franken.de/FileFormats/
25659# Reference:	https://www.memotech.franken.de/FileFormats/Garmin_RGN_Format.pdf
25660# From:		Joerg Jenderek
256610	string		KpGr		Garmin update
25662# format version like: 0064h~1.0
25663>0x4	uleshort	!0x0064
25664>>4	uleshort/100	x		\b, version %u
25665>>4	uleshort%100	x		\b.%u
25666# 1st Garmin entry
25667>6	use	garmin-entry
25668# 2nd Garmin entry
25669>(0x6.l+10)	ubyte		x
25670>>&0		use		garmin-entry
25671# 3rd entry
25672>(0x6.l+10)	ubyte		x
25673>>&(&0.l+4)	ubyte		x
25674>>>&0		use		garmin-entry
25675# look again at version to use default clause
25676>0x4	uleshort	x
25677# test for region content by looking for
25678# Garmin *.srf by ./images with normal builder name "SQA" or longer "hales"
25679# 1 space after equal sign
25680>>0x3a	search/5/s	GARMIN\ BITMAP	\b=
25681!:mime	image/x-garmin-exe
25682!:ext	exe
25683>>>&0	indirect	x
25684# if not bitmap *.srf then region; 1 space after equal sign
25685>>0x3a	default		x		\b=
25686!:mime	application/x-garmin-rgn
25687!:ext	rgn
25688# recursiv embedded
25689>>>0x3a	search/5/s	KpGrd
25690>>>>&0	indirect	x
25691# look for ZIP or JAR archive by ./archive and ./zip
25692>>>0x3a	search/5/s	PK\003\004
25693>>>>&0	indirect	x
25694# TODO: other garmin RGN record content like foo
25695#>>0x3a	search/5/s	bar		BAR
25696#		display information of Garmin RGN record
256970	name	garmin-entry
25698# record length: 2 for Data, for Application often 1Bh sometimes 1Dh, "big" for Region
25699#>0	ulelong		x		\b, length %#x
25700# data record (ID='D') with version content like 0064h~1.0
25701>4	ubyte		=0x44
25702>>5	uleshort	!0x0064		\b; Data
25703>>>5	uleshort/100	x		\b, version %u
25704>>>5	uleshort%100	x		\b.%u
25705# Application Record (ID='A')
25706>4	ubyte		=0x41		\b; App
25707# version content like 00c8h~2.0
25708>>5	uleshort	!0x00C8
25709>>>5	uleshort/100	x		\b, version %u
25710>>>5	uleshort%100	x		\b.%u
25711# builder name like: SQA sqa build hales
25712>>7	string		x		\b, build by %s
25713# build date like: Oct 25 1999, Oct 1 2008, Feb 23 2009, Dec 15 2009
25714>>>&1	string		x		%s
25715# build time like: 11:26:12, 11:45:54, 14:16:13, 18:23:01
25716>>>>&1	string		x		%s
25717# region record (ID='R')
25718>4	ubyte		=0x52		\b; Region
25719# region ID:14~fw_all.bin: 78~ZIP, RGN or SRF bitmap; 148~ZIP or JAR; 249~display firmware; 251~WiFi or GCD firmware; 255~ZIP
25720>>5	uleshort	x		ID=%u
25721# delay in ms: like 0, 500
25722>>7	ulelong		!0		\b, %u ms
25723# region size (is record length - 10)
25724#>>11	ulelong		x		\b, length %#x
25725# region content like:
25726# "KpGr"~recursiv embedded,"GARMIN BITMAP"~Garmin Bitmap *.srf, "PK"~ZIP archive
25727#>>15	string		x		\b, content "%s"
25728>>15	ubequad		x		\b, content %#llx...
25729# This does NOT WORK!
25730#>>15	indirect	x		\b; contains
25731>4	default		x		\b; other
25732# garmin Record ID Identifies the record content like: D A R
25733>>4	ubyte		x		ID '%c'
25734
25735# TOM TOM GPS watches ttbin files:
25736# https://github.com/ryanbinns/ttwatch/tree/master/ttbin
25737# From: Daniel Lenski
257380	byte	0x20
25739>1	leshort	0x0007
25740>>0x76	byte	0x20
25741>>>0x77	leshort	0x0075		TomTom activity file, v7
25742>>>>8	leldate	x		(%s,
25743>>>>3	byte    x		device firmware %d.
25744>>>>4	byte	x		\b%d.
25745>>>>5	byte	x		\b%d,
25746>>>>6	leshort	x		product ID %04d)
25747
25748
25749#------------------------------------------------------------------------------
25750# $File: maple,v 1.10 2021/08/30 13:31:25 christos Exp $
25751# maple:  file(1) magic for maple files
25752# "H. Nanosecond" <aldomel@ix.netcom.com>
25753# Maple V release 4, a multi-purpose math program
25754#
25755
25756# maple library .lib
25757# URL:		https://en.wikipedia.org/wiki/Maple_(software)
25758# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/l/lib-maple-v-r4.trid.xml
25759# Update:	Joerg Jenderek
257600	string	\000MVR4\nI	Maple Vr4 library
25761#!:mime	application/octet-stream
25762!:mime	application/x-maple-lib
25763!:ext	lib
25764
25765# URL:		https://en.wikipedia.org/wiki/Maple_(software)
25766# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/l/lib-maple-v-r5.trid.xml
25767# From:		Joerg Jenderek
257680	string	\000MVR5\n	Maple Vr5 library
25769#!:mime	application/octet-stream
25770!:mime	application/x-maple-lib
25771!:ext	lib
25772
25773# From:		Joerg Jenderek
257740x400	string	M7R0\nI		Maple Vr7 library
25775#!:mime	application/octet-stream
25776!:mime	application/x-maple-lib
25777!:ext	lib
25778# null terminated library name like: C:\Maple12/Cliffordlib\maple.lib ../Maplets/Tutors.lib
25779>5	string	x		%s
25780# probably library name padding with nil or points (0x2E)
25781#>0xF8	uquad	x		\b, PADDING 0x%16.16llx
25782# null terminated strings like: Exterior Clifford FunctionArithmetics
25783# like: 1 20 40
25784>0x115	ulelong	x		\b, %u string
25785# plural s
25786>0x115	ulelong	>1		\bs
25787>0x119	string	x		1st '%s'
25788# probably second name section padding with nil or points (0x2E)
25789#>0x3F0	uquad	x		\b, 2nd PADDING 0x%16.16llx
25790# line feed separated ASCII string with maximal 79 length
25791#>0x407	string	x		\b, section "%s"
25792>0x454	ubyte	!0x0a		\b, at 0x454 0x%x
25793
25794# .ind
25795# no magic for these :-(
25796# they are compiled indexes for maple files
25797
25798# .hdb
25799# Update:	Joerg Jenderek
25800# URL:		https://www.maplesoft.com/support/help/maple/view.aspx?path=Formats/HDB
25801# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/h/hdb-maple.trid.xml
25802# Note:		This format was replaced in Maple 18 by the Maple Help format (*.help)
258030	string	\000\004\000\000
25804# skip xBASE Compound Index file *.CDX by looking for version
25805>1028	string		version	Maple help database
25806# length of string version
25807#>>1024	ulelong		!7	\b, at 0x400 unexpected %u
25808#!:mime application/octet-stream
25809!:mime application/x-maple-hdb
25810!:ext	hdb
25811>1028	default		x
25812# skip more xBASE Compound Index file *.CDX by looking for keyword Maple
25813# like hsum.hdb
25814>>4	search/0xCC41	Maple	Maple help database
25815!:mime	application/x-maple-hdb
25816!:ext	hdb
25817
25818# .mhp
25819# this has the form <PACKAGE=name>
258200	string	\<PACKAGE=	Maple help file
258210	string	\<HELP\ NAME=	Maple help file
258220	string	\n\<HELP\ NAME=	Maple help file with extra carriage return at start (yuck)
25823#0	string	#\ Newton	Maple help file, old style
258240	string	#\ daub	Maple help file, old style
25825#0	string	#===========	Maple help file, old style
25826
25827# .mws
258280	string	\000\000\001\044\000\221	Maple worksheet
25829#this is anomalous
258300	string	WriteNow\000\002\000\001\000\000\000\000\100\000\000\000\000\000	Maple worksheet, but weird
25831# this has the form {VERSION 2 3 "IBM INTEL NT" "2.3" }\n
25832# that is {VERSION major_version miunor_version computer_type version_string}
258330	string	{VERSION\ 	Maple worksheet
25834>9	string	>\0	version %.1s.
25835>>11	string	>\0	%.1s
25836
25837# .mps
258380	string	\0\0\001$	Maple something
25839# from byte 4 it is either 'nul E' or 'soh R'
25840# I think 'nul E' means a file that was saved as  a different name
25841# a sort of revision marking
25842# 'soh R' means new
25843>4	string	\000\105	An old revision
25844>4	string	\001\122	The latest save
25845
25846# .mpl
25847# some of these are the same as .mps above
25848#0000000 000 000 001 044 000 105 same as .mps
25849#0000000 000 000 001 044 001 122 same as .mps
25850
258510	string	#\n##\ <SHAREFILE=	Maple something
258520	string	\n#\n##\ <SHAREFILE=	Maple something
258530	string	##\ <SHAREFILE=	Maple something
258540	string	#\r##\ <SHAREFILE=	Maple something
258550	string	\r#\r##\ <SHAREFILE=	Maple something
258560	string	#\ \r##\ <DESCRIBE>	Maple something anomalous.
25857#--------------------------------------------
25858# marc21: file(1) magic for MARC 21 Format
25859#
25860# Kevin Ford (kefo@loc.gov)
25861#
25862# MARC21 formats are for the representation and communication
25863# of bibliographic and related information in machine-readable
25864# form.  For more info, see https://www.loc.gov/marc/
25865
25866
25867# leader position 20-21 must be 45
25868# and 22-23 also 00 so far, but we check that later.
2586920	string		45
25870>0	search/2048	\x1e
25871
25872# leader starts with 5 digits, followed by codes specific to MARC format
25873>>0	regex/1l	(^[0-9]{5})[acdnp][^bhlnqsu-z]	MARC21 Bibliographic
25874!:mime	application/marc
25875>>0	regex/1l	(^[0-9]{5})[acdnosx][z]	MARC21 Authority
25876!:mime	application/marc
25877>>0	regex/1l	(^[0-9]{5})[cdn][uvxy]	MARC21 Holdings
25878!:mime	application/marc
25879>>0	regex/1l	(^[0-9]{5})[acdn][w]	MARC21 Classification
25880!:mime	application/marc
25881>>0	regex/1l	(^[0-9]{5})[cdn][q]	MARC21 Community
25882!:mime	application/marc
25883
25884# leader position 22-23, should be "00" but is it?
25885>>0	regex/1l	(^.{21})([^0]{2})	(non-conforming)
25886!:mime	application/marc
25887
25888#------------------------------------------------------------------------------
25889# $File: mathcad,v 1.5 2009/09/19 16:28:10 christos Exp $
25890# mathcad:  file(1) magic for Mathcad documents
25891# URL:	http://www.mathsoft.com/
25892# From:	Josh Triplett <josh@freedesktop.org>
25893
258940	string	.MCAD\t		Mathcad document
25895
25896#------------------------------------------------------------------------------
25897# $File: mathematica,v 1.14 2021/11/07 16:27:36 christos Exp $
25898# mathematica:  file(1) magic for mathematica files
25899# "H. Nanosecond" <aldomel@ix.netcom.com>
25900# Mathematica a multi-purpose math program
25901# versions 2.2 and 3.0
25902
25903#mathematica .mb
259040	string	\064\024\012\000\035\000\000\000	Mathematica version 2 notebook
25905!:ext mb
259060	string	\064\024\011\000\035\000\000\000	Mathematica version 2 notebook
25907!:ext mb
25908
25909# .ma
25910# multiple possibilities:
25911
259120	string	(*^\n\n::[\011frontEndVersion\ =\ 	Mathematica notebook
25913#>41	string	>\0	%s
25914!:ext mb
25915
25916#0	string	(*^\n\n::[\011palette	Mathematica notebook version 2.x
25917
25918#0	string	(*^\n\n::[\011Information	Mathematica notebook version 2.x
25919#>675	string	>\0	%s #doesn't work well
25920
25921# there may be 'cr' instead of 'nl' in some does this matter?
25922
25923# generic:
259240	string	(*^\r\r::[\011	Mathematica notebook version 2.x
25925!:ext mb
259260	string	(*^\r\n\r\n::[\011	Mathematica notebook version 2.x
25927!:ext mb
259280	string	(*^\015			Mathematica notebook version 2.x
25929!:ext mb
259300	string	(*^\n\r\n\r::[\011	Mathematica notebook version 2.x
25931!:ext mb
259320	string	(*^\r::[\011	Mathematica notebook version 2.x
25933!:ext mb
259340	string	(*^\r\n::[\011	Mathematica notebook version 2.x
25935!:ext mb
259360	string	(*^\n\n::[\011	Mathematica notebook version 2.x
25937!:ext mb
259380	string	(*^\n::[\011	Mathematica notebook version 2.x
25939!:ext mb
25940
25941
25942# Mathematica .mx files
25943
25944#0	string	(*This\ is\ a\ Mathematica\ binary\ dump\ file.\ It\ can\ be\ loaded\ with\ Get.*)	Mathematica binary file
259450	string	(*This\ is\ a\ Mathematica\ binary\ 	Mathematica binary file
25946#>71	string \000\010\010\010\010\000\000\000\000\000\000\010\100\010\000\000\000
25947# >71... is optional
25948>88	string	>\0	from %s
25949
25950
25951# Mathematica files PBF:
25952# 115 115 101 120 102 106 000 001 000 000 000 203 000 001 000
259530	string	MMAPBF\000\001\000\000\000\203\000\001\000	Mathematica PBF (fonts I think)
25954
25955# .ml files  These are menu resources I think
25956# these start with "[0-9][0-9][0-9]\ A~[0-9][0-9][0-9]\
25957# how to put that into a magic rule?
259584	string	\ A~	MAthematica .ml file
25959
25960# .nb files
25961#too long 0	string	(***********************************************************************\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Mathematica-Compatible Notebook	Mathematica 3.0 notebook
259620	string	(***********************	Mathematica 3.0 notebook
25963
25964# other (* matches it is a comment start in these langs
25965# GRR: Too weak; also matches other languages e.g. ML
25966#0	string	(*	Mathematica, or Pascal, Modula-2 or 3 code text
25967
25968#########################
25969# MatLab v5
25970# URL:		http://fileformats.archiveteam.org/wiki/MAT
25971# Reference:	https://www.mathworks.com/help/pdf_doc/matlab/matfile_format.pdf
25972# first 116 bytes of header contain text in human-readable form
259730       string  MATLAB  Matlab v
25974#>11	string/T	x	\b, at 11 "%.105s"
25975#!:mime	application/octet-stream
25976!:mime	application/x-matlab-data
25977!:ext	mat
25978#	https://de.mathworks.com/help/matlab/import_export/mat-file-versions.html
25979# level of the MAT-file like: 5.0 7.0 or maybe 7.3
25980#>7	string	x	LEVEL "%.3s"
25981>7	ubyte	=0x35	\b5 mat-file
25982>7	ubyte	!0x35
25983>>7	string	x	\b%.3s mat-file
25984>126    short   0x494d  (big endian)
25985>>124   beshort x       version %#04x
25986>126    short   0x4d49  (little endian)
25987# 0x0100 for level 5.0 and 0x0200 for level 7.0
25988>>124   leshort x       version %#04x
25989# test again so that default clause works
25990>126	short	x
25991# created by MATLAB include Platform sometimes without leading comma (0x2C) or missing
25992# like: GLNX86 PCWIN PCWIN64 SOL2 Windows\0407 nt posix
25993>>20	search/2	Platform:\040	\b, platform
25994>>>&0	string		x		%-0.2s
25995>>>&2		ubyte	!0x2C		\b%c
25996>>>>&0		ubyte	!0x2C		\b%c
25997>>>>>&0		ubyte	!0x2C		\b%c
25998>>>>>>&0	ubyte	!0x2C		\b%c
25999>>>>>>>&0	ubyte	!0x2C		\b%c
26000>>>>>>>>&0	ubyte	!0x2C		\b%c
26001>>>>>>>>>&0	ubyte	!0x2C		\b%c
26002# examples without Platform tag like one_by_zero_char.mat
26003>>20	default		x
26004>>>11	string		x	"%s"
26005# created by MATLAB include time like: Fri Feb 20 15:26:59 2009
26006>34	search/9/c	created\040on:\040	\b, created
26007>>&0	string	x		%-.24s
26008#	MatLab v4
26009# From:	Joerg Jenderek
26010# check for valid imaginary flag of Matlab matrix version 4
2601113	ushort	0
26012# check for valid ASCII matrix name
26013>20	ubyte	>0x1F
26014# skip PreviousEntries.dat with "invalid high" name \304P\344@\001
26015>>20	ubyte	<0304
26016# skip some Netwfw*.dat and $I3KREPH.dat by checking for non zero number of rows
26017>>>4	ulong		!0
26018# skip some CD-ROM filesystem like test-hfs.iso by looking for valid big endian type flag
26019>>>>0	ubelong&0xFFffFF00	0x00000300
26020>>>>>0	use	matlab4
26021# no example for 8-bit and 16-bit integers matrix
26022>>>>0	ubelong&0xFFffFF00	0x00000400
26023>>>>>0	use	matlab4
26024#	branch for Little-Endian variant of Matlab MATrix version 4
26025# skip big endian variant by looking for valid low lttle endian type flag
26026>>>>0	ulelong		<53
26027# skip tokens.dat and some Netwfw*.dat by check for valid imaginary flag value of MAT version 4
26028>>>>>12	ulelong		<2
26029# no misidentfied little endian MATrix example with "short" matrix name
26030>>>>>>16	ulelong		<3
26031>>>>>>>0	use	\^matlab4
26032# little endian MATrix with "long" matrix name or some misidentified samples
26033>>>>>>16	ulelong		>2
26034# skip TileCacheLogo-*.dat with invalid 2nd character \001 of matrix name with length 96
26035>>>>>>>21 ubyte	>0x1F
26036>>>>>>>>0 use	\^matlab4
26037#	display information of Matlab v4 mat-file
260380	name	matlab4		Matlab v4 mat-file
26039#!:mime	application/octet-stream
26040!:mime	application/x-matlab-data
26041!:ext	mat
26042# 20-byte header with 5 long integers that contains information describing certain attributes of the Matrix
26043# type flag decimal MOPT; maximal 4052=FD4h; maximal 52=34h for little endian
26044#>0	ubelong		x	\b, type flag %u
26045#>0	ubelong		x	(%#x)
26046# M: 0~little endian 1~Big Endian 2~VAX D-float 3~VAX G-float 4~Cray
26047#>0	ubelong/1000	x	\b, M=%u
26048>0	ubelong/1000	0	(little endian)
26049>0	ubelong/1000	1	(big endian)
26050>0	ubelong/1000	2	(VAX D-float)
26051>0	ubelong/1000	3	(VAX G-float)
26052>0	ubelong/1000	4	(Cray)
26053# namlen; the length of the matrix name
26054#>16	ubelong		x	\b, name length %u
26055#>(16.L+19)	ubyte	x	\b, TERMINATING NAME CHARACTER=%#x
26056# nul terminated matrix name like: fit_params testmatrix testsparsecomplex teststringarray
26057#>20	string		x	\b, MATRIX NAME="%s"
26058#>21		ubyte	x	\b, MAYBE 2ND CHAR=%c
26059>16	pstring/L	x	%s
26060# T indicates the matrix type: 0~numeric 1~text 2~sparse
26061#>0	ubelong%10	x	\b, T=%u
26062>0	ubelong%10	0	\b, numeric
26063>0	ubelong%10	1	\b, text
26064>0	ubelong%10	2	\b, sparse
26065# mrows; number of rows in the matrix like: 1 3 8
26066>4	ubelong		x	\b, rows %u
26067# ncols; number of columns in the matrix like: 1 3 4 5 9 43
26068>8	ubelong		x	\b, columns %u
26069# imagf; imaginary flag; 1~matrix has an imaginary part 0~only real data
26070>12	ubelong		!0	\b, imaginary (%u)
26071# real; Real part of the matrix consists of mrows * ncols numbers
26072
26073#------------------------------------------------------------------------------
26074# $File: matroska,v 1.9 2019/04/19 00:42:27 christos Exp $
26075# matroska:  file(1) magic for Matroska files
26076#
26077# See https://www.matroska.org/
26078#
26079
26080# EBML id:
260810		belong		0x1a45dfa3
26082# DocType id:
26083>4		search/4096 	\x42\x82
26084# DocType contents:
26085>>&1		string		webm		WebM
26086!:mime  video/webm
26087>>&1		string		matroska	Matroska data
26088!:mime  video/x-matroska
26089
26090#------------------------------------------------------------------------------
26091# $File: mcrypt,v 1.6 2022/02/08 18:51:45 christos Exp $
26092# Mavroyanopoulos Nikos <nmav@hellug.gr>
26093# mcrypt:   file(1) magic for mcrypt 2.2.x;
26094# URL: 		https://en.wikipedia.org/wiki/Mcrypt
26095#		http://fileformats.archiveteam.org/wiki/MCrypt
26096# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/n/nc-mcrypt.trid.xml
26097# Update:	Joerg Jenderek
26098# Note:		called by TrID "mcrypt encrypted (v2.5)"
260990	string		\0m\3		mcrypt 2.5 encrypted data,
26100#!:mime	application/octet-stream
26101!:mime	application/x-crypt-nc
26102!:ext	nc
26103>4	string		>\0		algorithm: %s,
26104>>&1	leshort		>0		keysize: %d bytes,
26105>>>&0	string		>\0		mode: %s,
26106
26107# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/n/nc-mcrypt-22.trid.xml
26108# Note:		called by TrID "mcrypt encrypted (v2.2)"
261090	string		\0m\2		mcrypt 2.2 encrypted data,
26110#!:mime	application/octet-stream
26111!:mime	application/x-crypt-nc
26112# no example
26113!:ext	nc
26114>3	byte		0		algorithm: blowfish-448,
26115>3	byte		1		algorithm: DES,
26116>3	byte		2		algorithm: 3DES,
26117>3	byte		3		algorithm: 3-WAY,
26118>3	byte		4		algorithm: GOST,
26119>3	byte		6		algorithm: SAFER-SK64,
26120>3	byte		7		algorithm: SAFER-SK128,
26121>3	byte		8		algorithm: CAST-128,
26122>3	byte		9		algorithm: xTEA,
26123>3	byte		10		algorithm: TWOFISH-128,
26124>3	byte		11		algorithm: RC2,
26125>3	byte		12		algorithm: TWOFISH-192,
26126>3	byte		13		algorithm: TWOFISH-256,
26127>3	byte		14		algorithm: blowfish-128,
26128>3	byte		15		algorithm: blowfish-192,
26129>3	byte		16		algorithm: blowfish-256,
26130>3	byte		100		algorithm: RC6,
26131>3	byte		101		algorithm: IDEA,
26132>4	byte		0		mode: CBC,
26133>4	byte		1		mode: ECB,
26134>4	byte		2		mode: CFB,
26135>4	byte		3		mode: OFB,
26136>4	byte		4		mode: nOFB,
26137>5	byte		0		keymode: 8bit
26138>5	byte		1		keymode: 4bit
26139>5	byte		2		keymode: SHA-1 hash
26140>5	byte		3		keymode: MD5 hash
26141
26142#------------------------------------------------------------------------------
26143# $File: measure,v 1.3 2021/03/25 17:30:10 christos Exp $
26144# measure: file(1) magic for measurement data
26145
26146# DIY-Thermocam raw data
261470	name	diy-thermocam-parser
26148>0	beshort	x	scale %d-
26149>2	beshort x	\b%d,
26150>4	lefloat	x	spot sensor temperature %f,
26151>9	ubyte	0	unit celsius,
26152>9	ubyte	1	unit fahrenheit,
26153>8	ubyte	x	color scheme %d
26154>10	ubyte	1	\b, show spot sensor
26155>11	ubyte	1	\b, show scale bar
26156>12	ubyte	&1	\b, minimum point enabled
26157>12	ubyte	&2	\b, maximum point enabled
26158>13	lefloat	x	\b, calibration: offset %f,
26159>17	lefloat x	slope %f
26160
261610	name	diy-thermocam-checker
26162>9	ubyte	<2
26163>>10	ubyte	<2
26164>>>11	ubyte	<2
26165>>>>12	ubyte	<4
26166>>>>>17	lefloat	>0.0001	DIY-Thermocam raw data
26167
26168# V2 and Leption 3.x:
2616938408	ubyte	<19
26170>38400	use	diy-thermocam-checker
26171>>38400	default x	(Lepton 3.x),
26172>>>38400	use	diy-thermocam-parser
26173
26174# V1 or Lepton 2.x
261759608	ubyte	<19
26176>9600	use	diy-thermocam-checker
26177>>9600	default	x	(Lepton 2.x),
26178>>>9600	use	diy-thermocam-parser
26179
26180# Becker & Hickl Photon Counting (PMS) data file
26181# format documentation: https://www.becker-hickl.com/wp-content/uploads/2018/11/opm-pms400-v01.pdf (page 57)
26182(0x02.l)	string	*IDENTIFICATION		Becker & Hickl PMS Data File
26183>0x12		short	x			(%d data blocks)
26184!:ext sdt
26185
26186#------------------------------------------------------------------------------
26187# $File: mercurial,v 1.5 2019/04/19 00:42:27 christos Exp $
26188# mercurial:  file(1) magic for Mercurial changeset bundles
26189# https://www.selenic.com/mercurial/wiki/
26190#
26191# Jesse Glick (jesse.glick@sun.com)
26192#
26193
261940	string		HG10		Mercurial changeset bundle
26195>4	string		UN		(uncompressed)
26196>4	string		GZ		(gzip compressed)
26197>4	string		BZ		(bzip2 compressed)
26198
26199#------------------------------------------------------------------------------
26200# $File: metastore,v 1.3 2019/04/19 00:42:27 christos Exp $
26201# metastore:  file(1) magic for metastore files
26202# From: Thomas Wissen
26203# see https://david.hardeman.nu/software.php#metastore
262040	string		MeTaSt00r3	Metastore data file,
26205>10	bequad		x		version %0llx
26206
26207#------------------------------------------------------------------------------
26208# $File: meteorological,v 1.2 2017/03/17 21:35:28 christos Exp $
26209# rinex:  file(1) magic for RINEX files
26210# http://igscb.jpl.nasa.gov/igscb/data/format/rinex210.txt
26211# ftp://cddis.gsfc.nasa.gov/pub/reports/formats/rinex300.pdf
26212# data for testing: ftp://cddis.gsfc.nasa.gov/pub/gps/data
2621360	string		RINEX
26214>80	search/256	XXRINEXB	RINEX Data, GEO SBAS Broadcast
26215>>&32	string		x		\b, date %15.15s
26216>>5	string		x		\b, version %6.6s
26217!:mime	rinex/broadcast
26218>80	search/256	XXRINEXD	RINEX Data, Observation (Hatanaka comp)
26219>>&32	string		x		\b, date %15.15s
26220>>5	string		x		\b, version %6.6s
26221!:mime	rinex/observation
26222>80	search/256	XXRINEXC	RINEX Data, Clock
26223>>&32	string		x		\b, date %15.15s
26224>>5	string		x		\b, version %6.6s
26225!:mime	rinex/clock
26226>80	search/256	XXRINEXH	RINEX Data, GEO SBAS Navigation
26227>>&32	string		x		\b, date %15.15s
26228>>5	string		x		\b, version %6.6s
26229!:mime	rinex/navigation
26230>80	search/256	XXRINEXG	RINEX Data, GLONASS Navigation
26231>>&32	string		x		\b, date %15.15s
26232>>5	string		x		\b, version %6.6s
26233!:mime	rinex/navigation
26234>80	search/256	XXRINEXL	RINEX Data, Galileo Navigation
26235>>&32	string		x		\b, date %15.15s
26236>>5	string		x		\b, version %6.6s
26237!:mime	rinex/navigation
26238>80	search/256	XXRINEXM	RINEX Data, Meteorological
26239>>&32	string		x		\b, date %15.15s
26240>>5	string		x		\b, version %6.6s
26241!:mime	rinex/meteorological
26242>80	search/256	XXRINEXN	RINEX Data, Navigation
26243>>&32	string		x		\b, date %15.15s
26244>>5	string		x		\b, version %6.6s
26245!:mime	rinex/navigation
26246>80	search/256	XXRINEXO	RINEX Data, Observation
26247>>&32	string		x		\b, date %15.15s
26248>>5	string		x		\b, version %6.6s
26249!:mime	rinex/observation
26250
26251# https://en.wikipedia.org/wiki/GRIB
262520	string	GRIB
26253>7	byte	=1	Gridded binary (GRIB) version 1
26254>7	byte	=2	Gridded binary (GRIB) version 2
26255
26256#------------------------------------------------------------------------------
26257# $File: microfocus,v 1.3 2019/04/19 00:42:27 christos Exp $
26258# Micro Focus COBOL data files.
26259
26260# https://documentation.microfocus.com/help/index.jsp?topic=\
26261# %2FGUID-0E0191D8-C39A-44D1-BA4C-D67107BAF784%2FHRFLRHFILE05.html
26262# http://www.cobolproducts.com/datafile/data-viewer.html
26263# https://github.com/miracle2k/mfcobol-export
26264
262650 string \x30\x00\x00\x7C
26266>36 string \x00\x3E Micro Focus File with Header (DAT)
26267!:mime application/octet-stream
26268
262690 string \x30\x7E\x00\x00
26270>36 string \x00\x3E Micro Focus File with Header (DAT)
26271!:mime application/octet-stream
26272
2627339 string \x02
26274>136 string \x02\x02\x04\x04 Micro Focus Index File (IDX)
26275!:mime application/octet-stream
26276
26277#------------------------------------------------------------------------------
26278# $File: mime,v 1.8 2017/03/17 22:20:22 christos Exp $
26279# mime:  file(1) magic for MIME encoded files
26280#
262810	string/t		Content-Type:\040
26282>14	string		>\0		%s
262830	string/t		Content-Type:
26284>13	string		>\0		%s
26285
26286#------------------------------------------------------------------------------
26287# $File: mips,v 1.10 2014/04/30 21:41:02 christos Exp $
26288# mips:  file(1) magic for MIPS ECOFF and Ucode, as used in SGI IRIX
26289# and DEC Ultrix
26290#
262910	beshort	0x0160		MIPSEB ECOFF executable
26292>20	beshort	0407		(impure)
26293>20	beshort	0410		(swapped)
26294>20	beshort	0413		(paged)
26295>8	belong	>0		not stripped
26296>8	belong	0		stripped
26297>22	byte	x		- version %d
26298>23	byte	x		\b.%d
26299#
263000	beshort	0x0162		MIPSEL-BE ECOFF executable
26301>20	beshort	0407		(impure)
26302>20	beshort	0410		(swapped)
26303>20	beshort	0413		(paged)
26304>8	belong	>0		not stripped
26305>8	belong	0		stripped
26306>23	byte	x		- version %d
26307>22	byte	x		\b.%d
26308#
263090	beshort	0x6001		MIPSEB-LE ECOFF executable
26310>20	beshort	03401		(impure)
26311>20	beshort	04001		(swapped)
26312>20	beshort	05401		(paged)
26313>8	belong	>0		not stripped
26314>8	belong	0		stripped
26315>23	byte	x		- version %d
26316>22	byte	x		\b.%d
26317#
263180	beshort	0x6201		MIPSEL ECOFF executable
26319>20	beshort	03401		(impure)
26320>20	beshort	04001		(swapped)
26321>20	beshort	05401		(paged)
26322>8	belong	>0		not stripped
26323>8	belong	0		stripped
26324>23	byte	x		- version %d
26325>22	byte	x		\b.%d
26326#
26327# MIPS 2 additions
26328#
263290	beshort	0x0163		MIPSEB MIPS-II ECOFF executable
26330>20	beshort	0407		(impure)
26331>20	beshort	0410		(swapped)
26332>20	beshort	0413		(paged)
26333>8	belong	>0		not stripped
26334>8	belong	0		stripped
26335>22	byte	x		- version %d
26336>23	byte	x		\b.%d
26337#
263380	beshort	0x0166		MIPSEL-BE MIPS-II ECOFF executable
26339>20	beshort	0407		(impure)
26340>20	beshort	0410		(swapped)
26341>20	beshort	0413		(paged)
26342>8	belong	>0		not stripped
26343>8	belong	0		stripped
26344>22	byte	x		- version %d
26345>23	byte	x		\b.%d
26346#
263470	beshort	0x6301		MIPSEB-LE MIPS-II ECOFF executable
26348>20	beshort	03401		(impure)
26349>20	beshort	04001		(swapped)
26350>20	beshort	05401		(paged)
26351>8	belong	>0		not stripped
26352>8	belong	0		stripped
26353>23	byte	x		- version %d
26354>22	byte	x		\b.%d
26355#
263560	beshort	0x6601		MIPSEL MIPS-II ECOFF executable
26357>20	beshort	03401		(impure)
26358>20	beshort	04001		(swapped)
26359>20	beshort	05401		(paged)
26360>8	belong	>0		not stripped
26361>8	belong	0		stripped
26362>23	byte	x		- version %d
26363>22	byte	x		\b.%d
26364#
26365# MIPS 3 additions
26366#
263670	beshort	0x0140		MIPSEB MIPS-III ECOFF executable
26368>20	beshort	0407		(impure)
26369>20	beshort	0410		(swapped)
26370>20	beshort	0413		(paged)
26371>8	belong	>0		not stripped
26372>8	belong	0		stripped
26373>22	byte	x		- version %d
26374>23	byte	x		\b.%d
26375#
263760	beshort	0x0142		MIPSEL-BE MIPS-III ECOFF executable
26377>20	beshort	0407		(impure)
26378>20	beshort	0410		(swapped)
26379>20	beshort	0413		(paged)
26380>8	belong	>0		not stripped
26381>8	belong	0		stripped
26382>22	byte	x		- version %d
26383>23	byte	x		\b.%d
26384#
263850	beshort	0x4001		MIPSEB-LE MIPS-III ECOFF executable
26386>20	beshort	03401		(impure)
26387>20	beshort	04001		(swapped)
26388>20	beshort	05401		(paged)
26389>8	belong	>0		not stripped
26390>8	belong	0		stripped
26391>23	byte	x		- version %d
26392>22	byte	x		\b.%d
26393#
263940	beshort	0x4201		MIPSEL MIPS-III ECOFF executable
26395>20	beshort	03401		(impure)
26396>20	beshort	04001		(swapped)
26397>20	beshort	05401		(paged)
26398>8	belong	>0		not stripped
26399>8	belong	0		stripped
26400>23	byte	x		- version %d
26401>22	byte	x		\b.%d
26402#
264030	beshort	0x180		MIPSEB Ucode
264040	beshort	0x182		MIPSEL-BE Ucode
26405
26406#------------------------------------------------------------------------------
26407# $File: mirage,v 1.7 2009/09/19 16:28:10 christos Exp $
26408# mirage:  file(1) magic for Mirage executables
26409#
26410# XXX - byte order?
26411#
264120	long	31415		Mirage Assembler m.out executable
26413
26414#-----------------------------------------------------------------------------
26415# $File: misctools,v 1.20 2021/05/25 15:13:55 christos Exp $
26416# misctools:  file(1) magic for miscellaneous UNIX tools.
26417#
264180	search/1	%%!!			X-Post-It-Note text
264190	string/c	BEGIN:VCALENDAR		vCalendar calendar file
26420!:mime	text/calendar
26421# updated by Joerg Jenderek at Apr 2015, May 2021
26422# https://en.wikipedia.org/wiki/VCard
26423# URL: 	http://fileformats.archiveteam.org/wiki/VCard
26424# https://datatracker.ietf.org/doc/html/rfc6350
26425# the value is case-insensitive
264260	string/c	begin:vcard
26427# skip DROID fmt-395-signature-id-634.vcf
26428>13	string		!VERSION:END		vCard visiting card
26429# deprecated
26430#!:mime	text/x-vcard
26431!:mime	text/vcard
26432!:apple	????vCrd
26433!:ext	vcf/vcard
26434# VERSION must come right after BEGIN for 3.0 or 4.0 except in 2.1 , where it can be anywhere
26435# Joerg_Jenderek_67.vcf
26436>>12	search/0x113b4/c	version:
26437# VERSION 2.1 , 3.0 or 4.0
26438>>>&0	string		x			\b, version %-.3s
26439>>>&0	string		!2.1
26440>>>>13	string		!VERSION:		\b, 2nd line does not start with VERSION:
26441# downcase violates RFC 6350, but some "bad" software produce such vcards
26442>>0	string		!BEGIN			\b, not up case
26443# http://ftp.mozilla.org/pub/thunderbird/candidates/
26444# 78.10.1-candidates/build1/source/thunderbird-78.10.1.source.tar.xz
26445# thunderbird-78.10.1/comm/mailnews/import/test/unit/resources/basic_vcard_addressbook.vcf
26446>>11	beshort		!0x0D0A			\b, lines not separated by CRLF
26447
26448# Summary: Libtool library file
26449# Extension: .la
26450# Submitted by: Tomasz Trojanowski <tomek@uninet.com.pl>
264510	search/80	.la\ -\ a\ libtool\ library\ file	libtool library file
26452
26453# Summary: Libtool object file
26454# Extension: .lo
26455# Submitted by: Abel Cheung <abelcheung@gmail.com>
264560	search/80	.lo\ -\ a\ libtool\ object\ file	libtool object file
26457
26458# From: Daniel Novotny <dnovotny@redhat.com>
26459# Update: Joerg Jenderek
26460# URL: https://en.wikipedia.org/wiki/Core_dump#User-mode_memory_dumps
26461# Reference: https://msdn.microsoft.com/en-us/library/ms680378%28VS.85%29.aspx
26462#
26463# "Windows Minidump" by TrID
26464# ./misctools (version 5.25) labeled the entry as "MDMP crash report data"
264650	string		MDMP					Mini DuMP crash report
26466# https://filext.com/file-extension/DMP
26467!:mime	application/x-dmp
26468!:ext	dmp/mdmp
26469# The high-order word is an internal value that is implementation specific.
26470# The low-order word is MINIDUMP_VERSION 0xA793
26471>4	ulelong&0x0000FFFF	!0xA793				\b, version %#4.4x
26472# NumberOfStreams 8,9,10,13
26473>8	ulelong			x				\b, %d streams
26474# StreamDirectoryRva 0x20
26475>12	ulelong			!0x20				\b, %#8.8x RVA
26476# CheckSum 0
26477>16	ulelong			!0				\b, CheckSum %#8.8x
26478# Reserved or TimeDateStamp
26479>20	ledate			x				\b, %s
26480# https://msdn.microsoft.com/en-us/library/windows/desktop/ms680519%28v=vs.85%29.aspx
26481# Flags MINIDUMP_TYPE enumeration type 0 0x121 0x800
26482>24	ulelong			x				\b, %#x type
26483# >24	ulelong			>0				\b; include
26484# >>24	ulelong			&0x00000001			\b data sections,
26485# >>24	ulelong			&0x00000020			\b list of unloaded modules,
26486# >>24	ulelong			&0x00000100			\b process and thread information,
26487# >>24	ulelong			&0x00000800			\b memory information,
26488
26489# Summary: abook addressbook file
26490# Submitted by: Mark Schreiber <mark7@alumni.cmu.edu>
264910	string	#\x20abook\x20addressbook\x20file abook address book
26492!:mime application/x-abook-addressbook
26493
26494#------------------------------------------------------------------------------
26495# $File: mkid,v 1.6 2009/09/19 16:28:10 christos Exp $
26496# mkid:  file(1) magic for mkid(1) databases
26497#
26498# ID is the binary tags database produced by mkid(1).
26499#
26500# XXX - byte order?
26501#
265020	string		\311\304	ID tags data
26503>2	short		>0		version %d
26504
26505#------------------------------------------------------------------------------
26506# $File: mlssa,v 1.4 2009/09/19 16:28:10 christos Exp $
26507# mlssa: file(1) magic for MLSSA datafiles
26508#
265090		lelong		0xffffabcd	MLSSA datafile,
26510>4		leshort		x		algorithm %d,
26511>10		lelong		x		%d samples
26512
26513#------------------------------------------------------------------------------
26514# $File: mmdf,v 1.6 2009/09/19 16:28:10 christos Exp $
26515# mmdf:  file(1) magic for MMDF mail files
26516#
265170	string	\001\001\001\001	MMDF mailbox
26518
26519#------------------------------------------------------------------------------
26520# $File: modem,v 1.10 2021/04/26 15:56:00 christos Exp $
26521# modem:  file(1) magic for modem programs
26522#
26523# From: Florian La Roche <florian@knorke.saar.de>
265241	string		PC\ Research,\ Inc	Digifax-G3-File
26525>29	byte		1			\b, fine resolution
26526>29	byte		0			\b, normal resolution
26527
26528# Summary: CCITT Group 3 Facsimile in "raw" form (i.e. no header).
26529# Modified by: Joerg Jenderek
26530# URL: https://de.wikipedia.org/wiki/Fax
26531# Reference: https://web.archive.org/web/20020628195336/http://www.netnam.vn/unescocourse/computervision/104.htm
26532# GRR: EOL of G3 is too general as it catches also TrueType fonts, Postscript PrinterFontMetric, others
265330	short		0x0100
26534# 16 0-bits near beginning like True Type fonts *.ttf, Postscript PrinterFontMetric *.pfm, FTYPE.HYPERCARD, XFER
26535>2	search/9	\0\0
26536# maximal 7 0-bits for pixel sequences or 11 0-bits for EOL in G3
26537>2	default		x
26538# skip IRCAM file (VAX big-endian)	./audio
26539>>0	belong		!0x0001a364
26540# skip GEM Image data			./images
26541>>>2	beshort		!0x0008
26542# look for first keyword of Panorama database *.pan
26543>>>>11	search/262	\x06DESIGN
26544# skip Panorama database
26545>>>>11	default		x
26546# old Apple DreamWorld DreamGrafix *.3200 with keyword at end of g3 looking files
26547>>>>>27118	search/1864	DreamWorld
26548>>>>>27118	default		x
26549# skip MouseTrap/Mt.Defaults with file size 16 found on Golden Orchard Apple II CD Rom
26550>>>>>>8		ubequad		!0x2e01010454010203
26551# skip PICTUREH.SML found on Golden Orchard Apple II CD Rom
26552>>>>>>>8	ubequad		!0x5dee74ad1aa56394	raw G3 (Group 3) FAX, byte-padded
26553# version 5.25 labeled the entry above "raw G3 data, byte-padded"
26554!:mime	image/g3fax
26555#!:apple	????TIFF
26556!:ext	g3
26557# unusual image starting with black pixel
26558#0	short		0x1300		raw G3 (Group 3) FAX
265590	short		0x1400
26560# 16 0-bits near beginning like PicturePuzzler found on Golden Orchard Apple CD Rom
26561>2	search/9	\0\0
26562# maximal 7 0-bits for pixel sequences or 11 0-bits for EOL in G3
26563>2	default		x		raw G3 (Group 3) FAX
26564# version 5.25 labeled the above entry as "raw G3 data"
26565!:mime	image/g3fax
26566!:ext	g3
26567# unusual image with black pixel near beginning
26568#0	short		0x1900		raw G3 (Group 3) FAX
26569
26570#
26571# Magic data for vgetty voice formats
26572# (Martin Seine & Marc Eberhard)
26573
26574#
26575# raw modem data version 1
26576#
265770    string    RMD1      raw modem data
26578>4   string    >\0       (%s /
26579>20  short     >0        compression type %#04x)
26580
26581#
26582# portable voice format 1
26583#
265840    string    PVF1\n         portable voice format
26585>5   string    >\0       (binary %s)
26586
26587#
26588# portable voice format 2
26589#
265900    string    PVF2\n         portable voice format
26591>5   string >\0          (ascii %s)
26592
26593# From: Bernd Nuernberger <bernd.nuernberger@web.de>
26594# Brooktrout G3 fax data incl. 128 byte header
26595# Common suffixes: 3??, BRK, BRT, BTR
265960	leshort		0x01bb
26597>2	leshort		0x0100		Brooktrout 301 fax image,
26598>>9	leshort		x		%d x
26599>>0x2d	leshort		x		%d
26600>>6	leshort		200		\b, fine resolution
26601>>6	leshort		100		\b, normal resolution
26602>>11	byte		1		\b, G3 compression
26603>>11	byte		2		\b, G32D compression
26604
26605#------------------------------------------------------------------------------
26606# $File: modulefile,v 1.1 2019/10/15 18:04:40 christos Exp $
26607# modulefile:  file(1) magic for user's environment modulefile
26608# URL: http://modules.sourceforge.net/
26609# Reference: https://modules.readthedocs.io/en/stable/modulefile.html
26610# From: Xavier Delaruelle <xavier.delaruelle@cea.fr>
266110	string	#%Module	modulefile
26612!:mime	text/x-modulefile
26613
26614#------------------------------------------------------------------------------
26615# $File: motorola,v 1.12 2021/04/26 15:56:00 christos Exp $
26616# motorola:  file(1) magic for Motorola 68K and 88K binaries
26617#
26618# 68K
26619#
266200	beshort		0520		mc68k COFF
26621>18	beshort		^00000020	object
26622>18	beshort		&00000020	executable
26623>12	belong		>0		not stripped
26624>168	string		.lowmem		Apple toolbox
26625>20	beshort		0407		(impure)
26626>20	beshort		0410		(pure)
26627>20	beshort		0413		(demand paged)
26628>20	beshort		0421		(standalone)
266290	beshort		0521		mc68k executable (shared)
26630>12	belong		>0		not stripped
266310	beshort		0522		mc68k executable (shared demand paged)
26632>12	belong		>0		not stripped
26633#
26634# Motorola/UniSoft 68K Binary Compatibility Standard (BCS)
26635#
266360	beshort		0554		68K BCS executable
26637#
26638# 88K
26639#
26640# Motorola/88Open BCS
26641#
266420	beshort		0555		88K BCS executable
26643#
26644# Motorola S-Records, from Gerd Truschinski <gt@freebsd.first.gmd.de>
266450   string      S0          Motorola S-Record; binary data in text format
26646
26647# ATARI ST relocatable PRG
26648#
26649# from Oskar Schirmer <schirmer@scara.com> Feb 3, 2001
26650# (according to Roland Waldi, Oct 21, 1987)
26651# besides the magic 0x601a, the text segment size is checked to be
26652# not larger than 1 MB (which is a lot on ST).
26653# The additional 0x601b distinction I took from Doug Lee's magic.
266540	belong&0xFFFFFFF0	0x601A0000	Atari ST M68K contiguous executable
26655>2	belong			x		(txt=%d,
26656>6	belong			x		dat=%d,
26657>10	belong			x		bss=%d,
26658>14	belong			x		sym=%d)
266590	belong&0xFFFFFFF0	0x601B0000	Atari ST M68K non-contig executable
26660>2	belong			x		(txt=%d,
26661>6	belong			x		dat=%d,
26662>10	belong			x		bss=%d,
26663>14	belong			x		sym=%d)
26664
26665# Atari ST/TT... program format (sent by Wolfram Kleff <kleff@cs.uni-bonn.de>)
266660       beshort         0x601A          Atari 68xxx executable,
26667>2      belong          x               text len %u,
26668>6      belong          x               data len %u,
26669>10     belong          x               BSS len %u,
26670>14     belong          x               symboltab len %u,
26671>18     belong          0
26672>22     belong          &0x01           fastload flag,
26673>22     belong          &0x02           may be loaded to alternate RAM,
26674>22     belong          &0x04           malloc may be from alternate RAM,
26675>22     belong          x               flags: %#X,
26676>26     beshort         0               no relocation tab
26677>26     beshort         !0              + relocation tab
26678>30     string          SFX             [Self-Extracting LZH SFX archive]
26679>38     string          SFX             [Self-Extracting LZH SFX archive]
26680>44     string          ZIP!            [Self-Extracting ZIP SFX archive]
26681
266820       beshort         0x0064          Atari 68xxx CPX file
26683>8      beshort         x               (version %04x)
26684
26685#------------------------------------------------------------------------------
26686# $File: mozilla,v 1.12 2021/04/26 15:56:00 christos Exp $
26687# mozilla:  file(1) magic for Mozilla XUL fastload files
26688# (XUL.mfasl and XPC.mfasl)
26689# URL:	https://www.mozilla.org/
26690# From:	Josh Triplett <josh@freedesktop.org>
26691
266920	string	XPCOM\nMozFASL\r\n\x1A		Mozilla XUL fastload data
26693# Probably the next magic line contains misspelled "mozLz40\0"
266940	string	mozLz4a				Mozilla lz4 compressed bookmark data
26695# From: Joerg Jenderek
26696# URL: https://lz4.github.io/lz4/
26697# Reference: https://github.com/avih/dejsonlz4/archive/master.zip/
26698# dejsonlz4-master\src\dejsonlz4.c
26699# Note: mostly JSON compressed with a non-standard LZ4 header
26700# can be unpacked by dejsonlz4 but not lz4 program.
267010	string	mozLz40\0			Mozilla lz4 compressed data
26702!:mime	application/x-lz4+json
26703# mozlz4 extension seems to be used for search/store, while jsonlz4 for bookmarks
26704!:ext	jsonlz4/mozlz4
26705# decomp_size
26706>8	ulelong	x				\b, originally %u bytes
26707# lz4 data
26708#>12	ubequad	x				\b, lz4 data %#16.16llx
26709
26710# From: Joerg Jenderek
26711# URL: https://en.wikipedia.org/wiki/Firefox_4
26712# Reference: https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT
26713# Note:	Most ZIP utilities are able to extract such archives
26714#	maybe only partly or after some warnings. Example:
26715#	zip -FF omni.ja --out omni.zip
267164	string	PK\001\002	Mozilla archive omni.ja
26717!:mime	application/x-zip
26718!:ext	ja
26719# TODO:
26720#>4	use	zip-dir-entry
26721
26722#------------------------------------------------------------------------------
26723# $File: msdos,v 1.158 2022/09/07 11:17:31 christos Exp $
26724# msdos:  file(1) magic for MS-DOS files
26725#
26726
26727# .BAT files (Daniel Quinlan, quinlan@yggdrasil.com)
26728# updated by Joerg Jenderek at Oct 2008,Apr 2011
267290	string/t	@
26730>1	string/cW	\ echo\ off	DOS batch file text
26731!:mime	text/x-msdos-batch
26732!:ext	bat
26733>1	string/cW	echo\ off	DOS batch file text
26734!:mime	text/x-msdos-batch
26735!:ext	bat
26736>1	string/cW	rem		DOS batch file text
26737!:mime	text/x-msdos-batch
26738!:ext	bat
26739>1	string/cW	set\ 		DOS batch file text
26740!:mime	text/x-msdos-batch
26741!:ext	bat
26742
26743
26744# OS/2 batch files are REXX. the second regex is a bit generic, oh well
26745# the matched commands seem to be common in REXX and uncommon elsewhere
26746100	search/0xffff   rxfuncadd
26747>100	regex/c =^[\ \t]{0,10}call[\ \t]{1,10}rxfunc	OS/2 REXX batch file text
26748100	search/0xffff   say
26749>100	regex/c =^[\ \t]{0,10}say\ ['"]			OS/2 REXX batch file text
26750
26751# updated by Joerg Jenderek at Oct 2015
26752# https://de.wikipedia.org/wiki/Common_Object_File_Format
26753# http://www.delorie.com/djgpp/doc/coff/filhdr.html
26754# ./intel already labeled COFF type 0x14c=0514 as "80386 COFF executable"
26755#0	leshort		0x14c	MS Windows COFF Intel 80386 object file
26756#>4	ledate		x	stamp %s
267570	leshort		0x166	MS Windows COFF MIPS R4000 object file
26758#>4	ledate		x	stamp %s
267590	leshort		0x184	MS Windows COFF Alpha object file
26760#>4	ledate		x	stamp %s
267610	leshort		0x268	MS Windows COFF Motorola 68000 object file
26762#>4	ledate		x	stamp %s
267630	leshort		0x1f0	MS Windows COFF PowerPC object file
26764#>4	ledate		x	stamp %s
267650	leshort		0x290	MS Windows COFF PA-RISC object file
26766#>4	ledate		x	stamp %s
26767
26768# Tests for various EXE types.
26769#
26770# Many of the compressed formats were extracted from IDARC 1.23 source code.
26771#
267720	string/b	MZ
26773# All non-DOS EXE extensions have the relocation table more than 0x40 bytes into the file.
26774>0x18	leshort <0x40 MS-DOS executable
26775!:mime	application/x-dosexec
26776# Windows and later versions of DOS will allow .EXEs to be named with a .COM
26777# extension, mostly for compatibility's sake.
26778# URL:		https://en.wikipedia.org/wiki/Personal_NetWare#VLM
26779# Reference:	https://mark0.net/download/triddefs_xml.7z/defs/e/exe-vlm-msg.trid.xml
26780!:ext	exe/com/vlm
26781# These traditional tests usually work but not always.  When test quality support is
26782# implemented these can be turned on.
26783#>>0x18	leshort	0x1c	(Borland compiler)
26784#>>0x18	leshort	0x1e	(MS compiler)
26785
26786# Maybe it's a PE?
26787>(0x3c.l)	string		PE\0\0	PE
26788!:mime	application/x-dosexec
26789>>(0x3c.l+24)	leshort		0x010b	\b32 executable
26790>>(0x3c.l+24)	leshort		0x020b	\b32+ executable
26791>>(0x3c.l+24)	leshort		0x0107	ROM image
26792>>(0x3c.l+24)	default		x	Unknown PE signature
26793>>>&0 		leshort		x	%#x
26794>>(0x3c.l+22)	leshort&0x2000	>0	(DLL)
26795>>(0x3c.l+92)	leshort		1
26796# Native PEs include ntoskrnl.exe, hal.dll, smss.exe, autochk.exe, and all the
26797# drivers in Windows/System32/drivers/*.sys.
26798>>>(0x3c.l+22)	leshort&0x2000	>0	(native)
26799!:ext	dll/sys
26800>>>(0x3c.l+22)	leshort&0x2000	0	(native)
26801!:ext	exe/sys
26802>>(0x3c.l+92)	leshort		2
26803>>>(0x3c.l+22)	leshort&0x2000	>0	(GUI)
26804# These could probably be at least partially distinguished from one another by
26805# looking for specific exported functions.
26806# CPL: Control Panel item
26807# TLB: Type library
26808# OCX: OLE/ActiveX control
26809# ACM: Audio compression manager codec
26810# AX: DirectShow source filter
26811# IME: Input method editor
26812!:ext	dll/cpl/tlb/ocx/acm/ax/ime
26813>>>(0x3c.l+22)	leshort&0x2000	0	(GUI)
26814# Screen savers typically include code from the scrnsave.lib static library, but
26815# that's not guaranteed.
26816!:ext	exe/scr
26817>>(0x3c.l+92)	leshort		3
26818>>>(0x3c.l+22)	leshort&0x2000	>0	(console)
26819!:ext	dll/cpl/tlb/ocx/acm/ax/ime
26820>>>(0x3c.l+22)	leshort&0x2000	0	(console)
26821!:ext	exe/com
26822# https://docs.microsoft.com/en-us/windows/win32/debug/pe-format
26823>>(0x3c.l+92)	leshort		7	(POSIX)
26824>>(0x3c.l+92)	leshort		9	(Windows CE)
26825>>(0x3c.l+92)	leshort		10	(EFI application)
26826>>(0x3c.l+92)	leshort		11	(EFI boot service driver)
26827>>(0x3c.l+92)	leshort		12	(EFI runtime driver)
26828>>(0x3c.l+92)	leshort		13	(EFI ROM)
26829>>(0x3c.l+92)	leshort		14	(XBOX)
26830>>(0x3c.l+92)	leshort		15	(Windows boot application)
26831>>(0x3c.l+92)	default		x	(Unknown subsystem
26832>>>&0		leshort		x	%#x)
26833>>(0x3c.l+4)	leshort		0x14c	Intel 80386
26834>>(0x3c.l+4)	leshort		0x166	MIPS R4000
26835>>(0x3c.l+4)	leshort		0x168	MIPS R10000
26836>>(0x3c.l+4)	leshort		0x184	Alpha
26837>>(0x3c.l+4)	leshort		0x1a2	Hitachi SH3
26838>>(0x3c.l+4)	leshort		0x1a3	Hitachi SH3 DSP
26839>>(0x3c.l+4)	leshort		0x1a8	Hitachi SH5
26840>>(0x3c.l+4)	leshort		0x169	MIPS WCE v2
26841>>(0x3c.l+4)	leshort		0x1a6	Hitachi SH4
26842>>(0x3c.l+4)	leshort		0x1c0	ARM
26843>>(0x3c.l+4)	leshort		0x1c2	ARM Thumb
26844>>(0x3c.l+4)	leshort		0x1c4	ARMv7 Thumb
26845>>(0x3c.l+4)	leshort		0x1d3	Matsushita AM33
26846>>(0x3c.l+4)	leshort		0x1f0	PowerPC
26847>>(0x3c.l+4)	leshort		0x1f1	PowerPC with FPU
26848>>(0x3c.l+4)	leshort		0x1f2	PowerPC (big-endian)
26849>>(0x3c.l+4)	leshort		0x200	Intel Itanium
26850>>(0x3c.l+4)	leshort		0x266	MIPS16
26851>>(0x3c.l+4)	leshort		0x268	Motorola 68000
26852>>(0x3c.l+4)	leshort		0x290	PA-RISC
26853>>(0x3c.l+4)	leshort		0x366	MIPSIV
26854>>(0x3c.l+4)	leshort		0x466	MIPS16 with FPU
26855>>(0x3c.l+4)	leshort		0xebc	EFI byte code
26856>>(0x3c.l+4)	leshort		0x5032	RISC-V 32-bit
26857>>(0x3c.l+4)	leshort		0x5064	RISC-V 64-bit
26858>>(0x3c.l+4)	leshort		0x5128	RISC-V 128-bit
26859>>(0x3c.l+4)	leshort		0x9041	Mitsubishi M32R
26860>>(0x3c.l+4)	leshort		0x8664	x86-64
26861>>(0x3c.l+4)	leshort		0xaa64	Aarch64
26862>>(0x3c.l+4)	leshort		0xc0ee	MSIL
26863>>(0x3c.l+4)	default		x	Unknown processor type
26864>>>&0		leshort		x	%#x
26865>>(0x3c.l+22)	leshort&0x0200	>0	(stripped to external PDB)
26866>>(0x3c.l+22)	leshort&0x1000	>0	system file
26867>>(0x3c.l+24)	leshort		0x010b
26868>>>(0x3c.l+232) lelong	>0	Mono/.Net assembly
26869>>(0x3c.l+24)	leshort		0x020b
26870>>>(0x3c.l+248) lelong	>0	Mono/.Net assembly
26871
26872# hooray, there's a DOS extender using the PE format, with a valid PE
26873# executable inside (which just prints a message and exits if run in win)
26874>>(8.s*16)		string		32STUB	\b, 32rtm DOS extender
26875>>(8.s*16)		string		!32STUB	\b, for MS Windows
26876>>(0x3c.l+0xf8)		string		UPX0 \b, UPX compressed
26877>>(0x3c.l+0xf8)		search/0x140	PEC2 \b, PECompact2 compressed
26878>>(0x3c.l+0xf8)		search/0x140	UPX2
26879>>>(&0x10.l+(-4))	string		PK\3\4 \b, ZIP self-extracting archive (Info-Zip)
26880>>(0x3c.l+0xf8)		search/0x140	.idata
26881>>>(&0xe.l+(-4))	string		PK\3\4 \b, ZIP self-extracting archive (Info-Zip)
26882>>>(&0xe.l+(-4))	string		ZZ0 \b, ZZip self-extracting archive
26883>>>(&0xe.l+(-4))	string		ZZ1 \b, ZZip self-extracting archive
26884>>(0x3c.l+0xf8)		search/0x140	.rsrc
26885>>>(&0x0f.l+(-4))	string		a\\\4\5 \b, WinHKI self-extracting archive
26886>>>(&0x0f.l+(-4))	string		Rar! \b, RAR self-extracting archive
26887>>>(&0x0f.l+(-4))	search/0x3000	MSCF \b, InstallShield self-extracting archive
26888>>>(&0x0f.l+(-4))	search/32	Nullsoft \b, Nullsoft Installer self-extracting archive
26889>>(0x3c.l+0xf8)		search/0x140	.data
26890>>>(&0x0f.l)		string		WEXTRACT \b, MS CAB-Installer self-extracting archive
26891>>(0x3c.l+0xf8)		search/0x140	.petite\0 \b, Petite compressed
26892>>>(0x3c.l+0xf7)	byte		x
26893>>>>(&0x104.l+(-4))	string		=!sfx! \b, ACE self-extracting archive
26894>>(0x3c.l+0xf8)		search/0x140	.WISE \b, WISE installer self-extracting archive
26895>>(0x3c.l+0xf8)		search/0x140	.dz\0\0\0 \b, Dzip self-extracting archive
26896>>&(0x3c.l+0xf8)	search/0x100	_winzip_ \b, ZIP self-extracting archive (WinZip)
26897>>&(0x3c.l+0xf8)	search/0x100	SharedD \b, Microsoft Installer self-extracting archive
26898>>0x30			string		Inno \b, InnoSetup self-extracting archive
26899
26900# If the relocation table is 0x40 or more bytes into the file, it's definitely
26901# not a DOS EXE.
26902>0x18  leshort >0x3f
26903
26904# Hmm, not a PE but the relocation table is too high for a traditional DOS exe,
26905# must be one of the unusual subformats.
26906>>(0x3c.l) string !PE\0\0 MS-DOS executable
26907!:mime	application/x-dosexec
26908
26909>>(0x3c.l)		string		NE \b, NE
26910!:mime	application/x-dosexec
26911>>>(0x3c.l+0x36)	byte		1 for OS/2 1.x
26912>>>(0x3c.l+0x36)	byte		2 for MS Windows 3.x
26913>>>(0x3c.l+0x36)	byte		3 for MS-DOS
26914>>>(0x3c.l+0x36)	byte		4 for Windows 386
26915>>>(0x3c.l+0x36)	byte		5 for Borland Operating System Services
26916>>>(0x3c.l+0x36)	default		x
26917>>>>(0x3c.l+0x36)	byte		x (unknown OS %x)
26918>>>(0x3c.l+0x36)	byte		0x81 for MS-DOS, Phar Lap DOS extender
26919>>>(0x3c.l+0x0c)	leshort&0x8000	0x8000 (DLL or font)
26920# DRV: Driver
26921# 3GR: Grabber device driver
26922# CPL: Control Panel Item
26923# VBX: Visual Basic Extension
26924# FON: Bitmap font
26925# FOT: Font resource file
26926!:ext	dll/drv/3gr/cpl/vbx/fon/fot
26927>>>(0x3c.l+0x0c)	leshort&0x8000	0 (EXE)
26928!:ext	exe/scr
26929>>>&(&0x24.s-1)		string		ARJSFX \b, ARJ self-extracting archive
26930>>>(0x3c.l+0x70)	search/0x80	WinZip(R)\ Self-Extractor \b, ZIP self-extracting archive (WinZip)
26931
26932>>(0x3c.l)		string		LX\0\0 \b, LX
26933!:mime	application/x-dosexec
26934>>>(0x3c.l+0x0a)	leshort		<1 (unknown OS)
26935>>>(0x3c.l+0x0a)	leshort		1 for OS/2
26936>>>(0x3c.l+0x0a)	leshort		2 for MS Windows
26937>>>(0x3c.l+0x0a)	leshort		3 for DOS
26938>>>(0x3c.l+0x0a)	leshort		>3 (unknown OS)
26939>>>(0x3c.l+0x10)	lelong&0x28000	=0x8000 (DLL)
26940>>>(0x3c.l+0x10)	lelong&0x20000	>0 (device driver)
26941>>>(0x3c.l+0x10)	lelong&0x300	0x300 (GUI)
26942>>>(0x3c.l+0x10)	lelong&0x28300	<0x300 (console)
26943>>>(0x3c.l+0x08)	leshort		1 i80286
26944>>>(0x3c.l+0x08)	leshort		2 i80386
26945>>>(0x3c.l+0x08)	leshort		3 i80486
26946>>>(8.s*16)		string		emx \b, emx
26947>>>>&1			string		x %s
26948>>>&(&0x54.l-3)		string		arjsfx \b, ARJ self-extracting archive
26949
26950# MS Windows system file, supposedly a collection of LE executables
26951>>(0x3c.l)		string		W3 \b, W3 for MS Windows
26952!:mime	application/x-dosexec
26953
26954>>(0x3c.l)		string		LE\0\0 \b, LE executable
26955!:mime	application/x-dosexec
26956>>>(0x3c.l+0x0a)	leshort		1
26957# some DOS extenders use LE files with OS/2 header
26958>>>>0x240		search/0x100	DOS/4G for MS-DOS, DOS4GW DOS extender
26959>>>>0x240		search/0x200	WATCOM\ C/C++ for MS-DOS, DOS4GW DOS extender
26960>>>>0x440		search/0x100	CauseWay\ DOS\ Extender for MS-DOS, CauseWay DOS extender
26961>>>>0x40		search/0x40	PMODE/W for MS-DOS, PMODE/W DOS extender
26962>>>>0x40		search/0x40	STUB/32A for MS-DOS, DOS/32A DOS extender (stub)
26963>>>>0x40		search/0x80	STUB/32C for MS-DOS, DOS/32A DOS extender (configurable stub)
26964>>>>0x40		search/0x80	DOS/32A for MS-DOS, DOS/32A DOS extender (embedded)
26965# this is a wild guess; hopefully it is a specific signature
26966>>>>&0x24		lelong		<0x50
26967>>>>>(&0x4c.l)		string		\xfc\xb8WATCOM
26968>>>>>>&0		search/8	3\xdbf\xb9 \b, 32Lite compressed
26969# another wild guess: if real OS/2 LE executables exist, they probably have higher start EIP
26970#>>>>(0x3c.l+0x1c)	lelong		>0x10000 for OS/2
26971# fails with DOS-Extenders.
26972>>>(0x3c.l+0x0a)	leshort		2 for MS Windows
26973>>>(0x3c.l+0x0a)	leshort		3 for DOS
26974>>>(0x3c.l+0x0a)	leshort		4 for MS Windows (VxD)
26975# VXD: VxD for Windows 95/98/Me
26976# 386: VxD for Windows 2.10, 3.0, 3.1x
26977# PDR: Port driver
26978# MPD: Miniport driver (?)
26979!:ext	vxd/386/pdr/mpd
26980>>>(&0x7c.l+0x26)	string		UPX \b, UPX compressed
26981>>>&(&0x54.l-3)		string		UNACE \b, ACE self-extracting archive
26982
26983# looks like ASCII, probably some embedded copyright message.
26984# and definitely not NE/LE/LX/PE
26985>>0x3c		lelong	>0x20000000
26986>>>(4.s*512)	leshort !0x014c \b, MZ for MS-DOS
26987!:mime	application/x-dosexec
26988!:ext	exe/com
26989# header data too small for extended executable
26990>2		long	!0
26991>>0x18		leshort <0x40
26992>>>(4.s*512)	leshort !0x014c
26993
26994>>>>&(2.s-514)	string	!LE
26995>>>>>&-2	string	!BW \b, MZ for MS-DOS
26996!:mime	application/x-dosexec
26997>>>>&(2.s-514)	string	LE \b, LE
26998>>>>>0x240	search/0x100	DOS/4G for MS-DOS, DOS4GW DOS extender
26999# educated guess since indirection is still not capable enough for complex offset
27000# calculations (next embedded executable would be at &(&2*512+&0-2)
27001# I suspect there are only LE executables in these multi-exe files
27002>>>>&(2.s-514)	string	BW
27003>>>>>0x240	search/0x100	DOS/4G	\b, LE for MS-DOS, DOS4GW DOS extender (embedded)
27004>>>>>0x240	search/0x100	!DOS/4G	\b, BW collection for MS-DOS
27005
27006# This sequence skips to the first COFF segment, usually .text
27007>(4.s*512)	leshort		0x014c \b, COFF
27008!:mime	application/x-dosexec
27009>>(8.s*16)	string		go32stub for MS-DOS, DJGPP go32 DOS extender
27010>>(8.s*16)	string		emx
27011>>>&1		string		x for DOS, Win or OS/2, emx %s
27012>>&(&0x42.l-3)	byte		x
27013>>>&0x26	string		UPX \b, UPX compressed
27014# and yet another guess: small .text, and after large .data is unusual, could be 32lite
27015>>&0x2c		search/0xa0	.text
27016>>>&0x0b	lelong		<0x2000
27017>>>>&0		lelong		>0x6000 \b, 32lite compressed
27018
27019>(8.s*16) string $WdX \b, WDos/X DOS extender
27020
27021# By now an executable type should have been printed out.  The executable
27022# may be a self-uncompressing archive, so look for evidence of that and
27023# print it out.
27024#
27025# Some signatures below from Greg Roelofs, newt@uchicago.edu.
27026#
27027>0x35	string	\x8e\xc0\xb9\x08\x00\xf3\xa5\x4a\x75\xeb\x8e\xc3\x8e\xd8\x33\xff\xbe\x30\x00\x05 \b, aPack compressed
27028>0xe7	string	LH/2\ 	Self-Extract \b, %s
27029>0x1c	string	UC2X	\b, UCEXE compressed
27030>0x1c	string	WWP\ 	\b, WWPACK compressed
27031>0x1c	string	RJSX 	\b, ARJ self-extracting archive
27032>0x1c	string	diet 	\b, diet compressed
27033>0x1c	string	LZ09 	\b, LZEXE v0.90 compressed
27034>0x1c	string	LZ91 	\b, LZEXE v0.91 compressed
27035>0x1c	string	tz 	\b, TinyProg compressed
27036>0x1e	string	Copyright\ 1989-1990\ PKWARE\ Inc.	Self-extracting PKZIP archive
27037!:mime	application/zip
27038# Yes, this really is "Copr", not "Corp."
27039>0x1e	string	PKLITE\ Copr.	Self-extracting PKZIP archive
27040!:mime	application/zip
27041# winarj stores a message in the stub instead of the sig in the MZ header
27042>0x20	search/0xe0	aRJsfX \b, ARJ self-extracting archive
27043>0x20	string AIN
27044>>0x23	string 2	\b, AIN 2.x compressed
27045>>0x23	string <2	\b, AIN 1.x compressed
27046>>0x23	string >2	\b, AIN 1.x compressed
27047>0x24	string	LHa's\ SFX \b, LHa self-extracting archive
27048!:mime	application/x-lha
27049>0x24	string	LHA's\ SFX \b, LHa self-extracting archive
27050!:mime	application/x-lha
27051>0x24	string	\ $ARX \b, ARX self-extracting archive
27052>0x24	string	\ $LHarc \b, LHarc self-extracting archive
27053>0x20	string	SFX\ by\ LARC \b, LARC self-extracting archive
27054>0x40	string aPKG \b, aPackage self-extracting archive
27055>0x64	string	W\ Collis\0\0 \b, Compack compressed
27056>0x7a	string		Windows\ self-extracting\ ZIP	\b, ZIP self-extracting archive
27057>>&0xf4 search/0x140 \x0\x40\x1\x0
27058>>>(&0.l+(4)) string MSCF \b, WinHKI CAB self-extracting archive
27059>1638	string	-lh5- \b, LHa self-extracting archive v2.13S
27060>0x17888 string Rar! \b, RAR self-extracting archive
27061
27062# Skip to the end of the EXE.  This will usually work fine in the PE case
27063# because the MZ image is hardcoded into the toolchain and almost certainly
27064# won't match any of these signatures.
27065>(4.s*512)	long	x
27066>>&(2.s-517)	byte	x
27067>>>&0	string		PK\3\4 \b, ZIP self-extracting archive
27068>>>&0	string		Rar! \b, RAR self-extracting archive
27069>>>&0	string		=!\x11 \b, AIN 2.x self-extracting archive
27070>>>&0	string		=!\x12 \b, AIN 2.x self-extracting archive
27071>>>&0	string		=!\x17 \b, AIN 1.x self-extracting archive
27072>>>&0	string		=!\x18 \b, AIN 1.x self-extracting archive
27073>>>&7	search/400	**ACE** \b, ACE self-extracting archive
27074>>>&0	search/0x480	UC2SFX\ Header \b, UC2 self-extracting archive
27075
27076# a few unknown ZIP sfxes, no idea if they are needed or if they are
27077# already captured by the generic patterns above
27078>(8.s*16)	search/0x20	PKSFX \b, ZIP self-extracting archive (PKZIP)
27079# TODO: how to add this? >FileSize-34 string Windows\ Self-Installing\ Executable \b, ZIP self-extracting archive
27080#
27081
27082# TELVOX Teleinformatica CODEC self-extractor for OS/2:
27083>49801	string	\x79\xff\x80\xff\x76\xff	\b, CODEC archive v3.21
27084>>49824 leshort		=1			\b, 1 file
27085>>49824 leshort		>1			\b, %u files
27086
27087# Summary:	OS/2 LX Library and device driver (no DOS stub)
27088# From:		Joerg Jenderek
27089# URL:		http://en.wikipedia.org/wiki/EXE
27090# Reference:	http://www.textfiles.com/programming/FORMATS/lxexe.txt
27091#		https://github.com/open-watcom/open-watcom-v2/blob/master/bld/watcom/h/exeflat.h
27092# Note:		by dll-os2-no-dos-stub.trid.xml called "OS/2 Dynamic Link Library (no DOS stub)"
27093# TODO:		unify with DOS stub variant (MZ magic)
270940	string/b	LX
27095>2	ushort		=0
27096>>0	use			lx-executable
27097# no examples found for big endian variant
27098>2	ushort		=0x0101
27099>>0	use			\^lx-executable
271000       name    	lx-executable
27101# similar looking like variant with MS-DOS stub (MZ magic): "MS-DOS executable, LX"
27102#>0x00	uleshort		x	executable,
27103# signature OSF_FLAT_LX_SIGNATURE~0x584C~LX OSF_FLAT_SIGNATURE~0x454C~LE
27104>0x00	uleshort		=0x584c	LX
27105>0x00	uleshort		=0x454C	LE
27106>0x00	uleshort		x	executable
27107#!:mime	application/x-msdownload
27108!:mime	application/x-lx-executable
27109# byte order: 00h~little-endian non-zero=1~big-endian
27110#>0x02	ubyte			=0		(little-endian)
27111>0x02	ubyte			!0		(big-endian)
27112# FOR DEBUGGING!
27113# word order: 00h~little-endian non-zero=1~big-endian
27114#>0x03	ubyte			=0		\b, little-endian word order
27115#>0x03	ubyte			!0		\b, big-endian word order
27116# cpu_type; CPU type like: 1~286 2~386 3~486 4 20h~i860 21h~Intel N11 40h~MIPS R2000,R3000 41h~MIPS R6000 42h~MIPS R4000
27117#>0x08	uleshort		x		\b, CPU %u
27118# os_type; target operating system like: 0~unknown 1~OS/2 2~Windows 3~DOS 4.x 4~Windows 386
27119#>0x0A	leshort			x		\b, OS %u
27120# flags; module type flags
27121#>0x10	ulelong			x		\b, FLAGS %#8.8x
27122# 00000002h				~Reserved for system use
27123#>0x10	ulelong			&0x00000002	\b, 2h reserved
27124# OSF_INIT_INSTANCE=00000004h		~Per-Process Library Initialization; setting this bit for EXE file is invalid
27125#>0x10	ulelong			&0x00000004	\b, per-process library Initialization
27126# OSF_INTERNAL_FIXUPS_DONE=00000010h	~Internal fixups for the module have been applied
27127#>0x10	ulelong			&0x00000010	\b, int. fixup
27128# OSF_EXTERNAL_FIXUPS_DONE=00000020h	~External fixups for the module have been applied
27129#>0x10	ulelong			&0x00000020	\b, ext. fixup
27130# OSF_NOT_PM_COMPATIBLE=00000100h	~Incompatible with PM windowing
27131#>0x10	ulelong&0x00000100	=0x00000100	\b, incompatible with PM windowing
27132# OSF_PM_COMPATIBLE=00000200h		~Compatible with PM windowing
27133#>0x10	ulelong&0x00000200	=0x00000200	\b, compatible with PM windowing
27134# bit 17; device driver
27135#>0x10	ulelong&0x00020000	>0		\b, device driver
27136# Per-process Library Termination; setting this bit for EXE file is invalid
27137#>0x10	ulelong&0x40000000	=0x40000000	\b, per-process library termination
27138>0x0a	leshort			1		for OS/2
27139# no example found
27140>0x0a	leshort			3		for DOS
27141# http://www.ctyme.com/intr/rb-2939.htm#Table1610
27142# library by module type mask 00038000h (bits 15-17);
27143# 0h ~exectable Program module
27144>0x10	ulelong&0x00038000	=0x00000000	(program)
27145#!:ext	exe
27146# OSF_IS_DLL=8000h			~Library module (DLL)
27147>0x10	ulelong&0x00038000	>0x00000000
27148# OSF_PHYS_DEVICE=00020000h		~device driver
27149>>0x10	ulelong&0x00020000	>0		(device driver)
27150!:ext	sys
27151# if not device driver it is library (DLL)
27152>>0x10	ulelong&0x00020000	=0		(library)
27153!:ext	dll
27154# bits 8-10; OSF_PM_APP=300h in flags	~Uses PM windowing API; either it is GUI or console
27155>0x10  	ulelong&0x00000300	=0x00000300	(GUI)
27156>0x10	ulelong&0x00000300	!0x00000300	(console)
27157# CPU type
27158>0x08	uleshort		1		i80286
27159# all inspected examples
27160>0x08	uleshort		2		i80386
27161>0x08	uleshort		3		i80486
27162>0x08	uleshort		4		i80586
27163# 21h 	Intel "N11" or compatible
27164# 40h 	MIPS Mark I ( R2000, R3000) or compatible
27165# 41h 	MIPS Mark II ( R6000 ) or compatible
27166# 42h 	MIPS Mark III ( R4000 ) or compatible
27167
27168# added by Joerg Jenderek of https://www.freedos.org/software/?prog=kc
27169# and https://www.freedos.org/software/?prog=kpdos
27170# for FreeDOS files like KEYBOARD.SYS, KEYBRD2.SYS, KEYBRD3.SYS, *.KBD
271710	string/b	KCF		FreeDOS KEYBoard Layout collection
27172# only version=0x100 found
27173>3	uleshort	x		\b, version %#x
27174# length of string containing author,info and special characters
27175>6	ubyte		>0
27176#>>6	pstring		x		\b, name=%s
27177>>7	string		>\0		\b, author=%-.14s
27178>>7	search/254	\xff		\b, info=
27179#>>>&0	string		x		\b%-s
27180>>>&0	string		x		\b%-.15s
27181# for FreeDOS *.KL files
271820	string/b	KLF		FreeDOS KEYBoard Layout file
27183# only version=0x100 or 0x101 found
27184>3	uleshort	x		\b, version %#x
27185# stringlength
27186>5	ubyte		>0
27187>>8	string		x		\b, name=%-.2s
271880	string	\xffKEYB\ \ \ \0\0\0\0
27189>12	string	\0\0\0\0`\004\360	MS-DOS KEYBoard Layout file
27190
27191# DOS device driver updated by Joerg Jenderek at May 2011,Mar 2017,Aug 2020
27192# URL:		http://fileformats.archiveteam.org/wiki/DOS_device_driver
27193# Reference:	http://www.delorie.com/djgpp/doc/rbinter/it/46/16.html
27194# https://amaus.net/static/S100/IBM/software/DOS/DOS%20techref/CHAPTER.009
271950	ulequad&0x07a0ffffffff		0xffffffff
27196# skip OS/2 INI ./os2
27197>4  ubelong   !0x14000000
27198>>0	use				msdos-driver
271990       name    			msdos-driver		DOS executable (
27200#!:mime	application/octet-stream
27201!:mime	application/x-dosdriver
27202# also found FreeDOS print driver SPOOL.DEV and disc compression driver STACLOAD.BIN
27203# and IBM Token-Ring adapter IBMTOK.DOS. Why and when DOS instead SYS is used?
27204# PROTMAN.DOS ELNKPL.DOS
27205!:ext	sys/dev/bin/dos
27206# 1 space char after "UPX compressed" to get phrase like "UPX compressed character device"
27207>40	search/7			UPX!			\bUPX compressed
27208# DOS device driver attributes
27209>4	uleshort&0x8000			0x0000			\bblock device driver
27210# character device
27211>4	uleshort&0x8000			0x8000			\b
27212# 1 space char after "clock" to get phrase like "clock character device driver CLOCK$"
27213>>4	uleshort&0x0008			0x0008			\bclock
27214# fast video output by int 29h
27215# 1 space char after "fast" to get phrase like "fast standard input/output character device driver"
27216>>4	uleshort&0x0010			0x0010			\bfast
27217# standard input/output device
27218# 1 space char after "standard" to get phrase like "standard input/output character device driver"
27219>>4	uleshort&0x0003			>0			\bstandard
27220>>>4	uleshort&0x0001			0x0001			\binput
27221>>>4	uleshort&0x0003			0x0003			\b/
27222# 1 space char after "output" to get phrase like "input/output character device driver"
27223>>>4	uleshort&0x0002			0x0002			\boutput
27224>>4	uleshort&0x8000			0x8000			\bcharacter device driver
27225>0	ubyte				x
27226# upx compressed device driver has garbage instead of real in name field of header
27227>>40	search/7			UPX!
27228>>40	default				x
27229# leading/trailing nulls, zeros or non ASCII characters in 8-byte name field at offset 10 are skipped
27230# 1 space char before device driver name to get phrase like "device driver PROTMAN$"
27231>>>12		ubyte			>0x2E			\b
27232>>>>10		ubyte			>0x20
27233>>>>>10		ubyte			!0x2E
27234>>>>>>10	ubyte			!0x2A			\b%c
27235>>>>11		ubyte			>0x20
27236>>>>>11		ubyte			!0x2E			\b%c
27237>>>>12		ubyte			>0x20
27238>>>>>12		ubyte			!0x39
27239>>>>>>12	ubyte			!0x2E			\b%c
27240>>>13		ubyte			>0x20
27241>>>>13		ubyte			!0x2E			\b%c
27242>>>>14		ubyte			>0x20
27243>>>>>14		ubyte			!0x2E			\b%c
27244>>>>15		ubyte			>0x20
27245>>>>>15		ubyte			!0x2E			\b%c
27246>>>>16		ubyte			>0x20
27247>>>>>16		ubyte			!0x2E
27248>>>>>>16	ubyte			<0xCB			\b%c
27249>>>>17		ubyte			>0x20
27250>>>>>17		ubyte			!0x2E
27251>>>>>>17	ubyte			<0x90			\b%c
27252# some character device drivers like ASPICD.SYS, btcdrom.sys and Cr_atapi.sys contain only spaces or points in name field
27253>>>12		ubyte			<0x2F
27254# they have their real name at offset 22
27255# also block device drivers like DUMBDRV.SYS
27256>>>>22		string			>\056			%-.6s
27257>4	uleshort&0x8000			0x0000
27258# 32 bit sector addressing ( > 32 MB) for block devices
27259>>4	uleshort&0x0002			0x0002			\b,32-bit sector-
27260# support by driver functions 13h, 17h, 18h
27261>4	uleshort&0x0040			0x0040			\b,IOCTL-
27262# open, close, removable media support by driver functions 0Dh, 0Eh, 0Fh
27263>4	uleshort&0x0800			0x0800			\b,close media-
27264# output until busy support by int 10h for character device driver
27265>4	uleshort&0x8000			0x8000
27266>>4	uleshort&0x2000			0x2000			\b,until busy-
27267# direct read/write support by driver functions 03h,0Ch
27268>4	uleshort&0x4000			0x4000			\b,control strings-
27269>4	uleshort&0x8000			0x8000
27270>>4	uleshort&0x6840			>0			\bsupport
27271>4	uleshort&0x8000			0x0000
27272>>4	uleshort&0x4842			>0			\bsupport
27273>0	ubyte				x			\b)
27274>0	ulelong				!0xffffffff		with pointer %#x
27275# DOS driver cmd640x.sys has 0x12 instead of 0xffffffff for pointer field to next device header
272760	ulequad				0x0513c00000000012
27277>0	use				msdos-driver
27278# DOS drivers DC2975.SYS, DUMBDRV.SYS, ECHO.SYS has also none 0xffffffff for pointer field
272790	ulequad				0x32f28000ffff0016
27280>0	use				msdos-driver
272810	ulequad				0x007f00000000ffff
27282>0	use				msdos-driver
27283# https://www.uwe-sieber.de/files/cfg_echo.zip
272840	ulequad				0x001600000000ffff
27285>0	use				msdos-driver
27286# DOS drivers LS120.SYS, MKELS120.SYS use reserved bits of attribute field
272870	ulequad				0x0bf708c2ffffffff
27288>0	use				msdos-driver
272890	ulequad				0x07bd08c2ffffffff
27290>0	use				msdos-driver
27291# 3Com EtherLink 3C501 CID\SERVER\IBMLS\IBM500D1\DLSNETDR.ZIP\ELNK.DOS
272920	ulequad				0x027ac0c0ffffffff
27293>0	use				msdos-driver
27294# IBM Streamer CID\SERVER\IBMLS\IBM500D1\DLSNETDR.ZIP\IBMMPC.DOS
272950	ulequad				0x00228880ffffffff
27296>0	use				msdos-driver
27297
27298# updated by Joerg Jenderek
27299# GRR: line below too general as it catches also
27300# rt.lib DYADISKS.PIC and many more
27301# start with assembler instruction MOV
273020	ubyte		0x8c
27303# skip "AppleWorks word processor data" like ARTICLE.1 ./apple
27304>4	string			!O====
27305# skip some unknown basic binaries like RocketRnger.SHR
27306>>5	string			!MAIN
27307# skip "GPG symmetrically encrypted data" ./gnu
27308# skip "PGP symmetric key encrypted data" ./pgp
27309# openpgpdefs.h: fourth byte < 14 indicate cipher algorithm type
27310>>>4	ubyte			>13
27311>>>>0		use	msdos-com
27312# the remaining files should be DOS *.COM executables
27313# dosshell.COM	8cc0 2ea35f07 e85211 e88a11 b80058 cd
27314# hmload.COM	8cc8 8ec0 bbc02b 89dc 83c30f c1eb04 b4
27315# UNDELETE.COM	8cca 2e8916 6503 b430 cd21 8b 2e0200 8b
27316# BOOTFIX.COM	8cca 2e8916 9603 b430 cd21 8b 2e0200 8b
27317# RAWRITE3.COM	8cca 2e8916 d602 b430 cd21 8b 2e0200 8b
27318# SHARE.COM	8cca 2e8916 d602 b430 cd21 8b 2e0200 8b
27319# validchr.COM	8cca 2e8916 9603 b430 cd21 8b 2e028b1e
27320# devload.COM	8cca 8916ad01 b430 cd21 8b2e0200 892e
27321
273220       name    msdos-com
27323# URL:		http://fileformats.archiveteam.org/wiki/DOS_executable_(.com)
27324>0  byte        x               DOS executable (
27325# DOS execuable with JuMP 16-bit instruction
27326>0	byte			=0xE9
27327# check for probably nil padding til offset 64 of Lotus driver name
27328>>56		quad		=0
27329# check for "long" alpabetical Lotus driver name like:
27330# Diablo "COMPAQ Text Display" "IBM Monochrome Display" "Plantronics ColorPlus"
27331>>>24			regex	=^[A-Z][A-Za-z\040]{5,21}	\bLotus driver) %s
27332!:mime				application/x-dosexec
27333# like: CPQ0TD.DRV IBM0MONO.DRV (Lotus 123 10a) SDIAB4.DRV SPL0CPLS.DRV (Lotus Symphony 2)
27334!:ext				drv
27335# COM with nils like MODE.COM IBMDOS.COM (pcdos 3.31 ru Compaq) RSSTUB.COM (PC-DOS 2000 de) ACCESS.COM (Lotus Symphony 1)
27336>>>24			default	x				\bCOM)
27337!:mime				application/x-dosexec
27338!:ext				com
27339# DOS excutable with JuMP 16-bit and without nil padding
27340>>56		quad		!0
27341# https://wiki.syslinux.org/wiki/index.php?title=Doc/comboot
27342# TODO: HOWTO distinguish COMboot from pure DOS executables?
27343# look for unreliable Syslinux specific api call INTerrupt 22h for 16-bit COMBOOT program
27344>>>1			search/0xc088	\xcd\x22		\bCOM or COMBOOT 16-bit)
27345!:mime				application/x-dosexec
27346# like: sbm.cbt command.com (Windows XP) UNI2ASCI.COM (FreeDOS 1.2)
27347!:ext				com/cbt
27348>>>1			default		x			\bCOM)
27349!:mime				application/x-dosexec
27350!:ext				com
27351# DOS executable without JuMP 16-bit instruction
27352>0	byte			!0xE9
27353# SCREATE.SYS	https://en.wikipedia.org/wiki/Stac_Electronics
27354>>10		string		=?STACVOL			\bSCREATE.SYS)
27355!:mime			application/x-dosexec
27356!:ext			sys
27357# COM executable without JuMP 16-bit instruction and not SCREATE.SYS
27358>>10		string		!?STACVOL			\bCOM)
27359!:mime			application/x-dosexec
27360!:ext			com
27361>6	string		SFX\ of\ LHarc	\b, %s
27362>0x1FE leshort	0xAA55		    \b, boot code
27363>85	string		UPX		        \b, UPX compressed
27364>4	string		\ $ARX		    \b, ARX self-extracting archive
27365>4	string		\ $LHarc	    \b, LHarc self-extracting archive
27366>0x20e string	SFX\ by\ LARC	\b, LARC self-extracting archive
27367# like: E30ODI.COM MADGEODI.COM UNI2ASCI.COM RECOVER.COM (DOS 2) COMMAND.COM (DOS 2)
27368>1	search/0xc088	\xcd\x22	\b, maybe with interrupt 22h
27369>0	ubelong		x		\b, start instruction %#8.8x
27370# show more instructions but not in samples like: rem.com (DJGPP)
27371>4	ubelong		x		%8.8x
27372
27373# JMP 8bit
273740	        byte	0xeb
27375# byte 0xeb conflicts with magic leshort 0xn2eb of "SYMMETRY i386" handled by ./sequent
27376# allow forward jumps only
27377>1          byte    >-1
27378# that offset must be accessible
27379# with hexadecimal values like: 0e 2e 50 8c 8d ba bc bd be e8 fb fc
27380>>(1.b+2)   byte    x
27381# if look like COM executable with x86 boot signature then this
27382# implies FAT volume with x86 real mode code already handled by ./filesystems
27383#
27384# No x86 boot signature implies often DOS executable
27385# check for unrealistic high number of FATs. Then it is an unusual disk image or often a DOS executable
27386# like: FIXBIOS.COM (50 bytes)
27387>>>16		ubyte		>3
27388# https://www.drivedroid.io/
27389# skip MBR disk image drivedroid.img version 12 July 2013 by start message
27390>>>>2		string		!DriveDroid
27391# ftp://old-dos.ru/OSCollect/OS/MS-DOS/Final Releases/
27392# skip unusual floppy image disk1.img of MS-DOS 1.25 (Corona Data Systems OEM)
27393# by check for characteristic message text near the beginning
27394>>>>>15		string		!Non\040System\040disk
27395# "ftp://old-dos.ru/OSCollect/OS/BeOS/BeOS 4.0.rar"
27396# skip BeOS 4 bootfloppy.img done as "Linux kernel x86 boot executable" by ./linux
27397# by check for characteristic message text near the beginning
27398>>>>>>6		string		!read\040error\015
27399# https://github.com/ventoy/Ventoy/releases/download/v1.0.78/ventoy-1.0.78-windows.zip
27400# skip ventoy 1.0.78 boot_hybrid.img
27401>>>>>>>24	string		!\220\220\353I$\022\017
27402# "ftp://old-dos.ru/OSCollect/OS/MS-DOS/Final Releases/PC-DOS 1.0 (5.25).rar"
27403# skip unusual floppy image PCDOS100.IMG of DOS 1.0
27404# by check for characteristic message text near the beginning
27405>>>>>>>>9	string		!7-May-81
27406# "ftp://old-dos.ru/OSCollect/OS/BeOS/BeOS 5.0 Personal (BA).rar"
27407# skip BeOS 5 floppy_1.44.00.ima done as "DOS/MBR boot sector" by ./filesystems
27408# by check for characteristic message near the beginning
27409>>>>>>>>>3	string		!\370sdfS\270
27410# like: FIXBIOS.COM (50 bytes)
27411>>>>>>>>>>0		use		msdos-com
27412# check for unrealistic low number of FATs. Then it is an unusual FAT disk image or often a DOS executable
27413# like: DEVICE.COM INSTALL.COM (GAG 4.10) WORD.COM (Word 1.15)
27414>>>16		ubyte		=0
27415# if low FATs with x86 boot signature it can be unusual disk image like: boot.img (Ventoy 1.0.27) geodspms.img (Syslinux)
27416>>>>0x1FE	leshort		=0xAA55
27417>>>>0x1FE	default		x
27418# https://thestarman.pcministry.com/tool/hxd/dimtut.htm
27419# skip unusual floppy image TK-DOS11.img IBMDOS11.img of IBM DOS 1.10
27420# by check for characteristic bootloader names near end of boot sector
27421>>>>>395	string		!ibmbio\040\040com
27422>>>>>>0			use		msdos-com
27423# 8-bit jump with valid number of FAT implies FAT volume already handled by ./filesystems
27424# like: balder.img
27425>>>16		default		x
27426# skip disk images with boot signature at end of 1st sector
27427# like: TDSK-64b.img
27428>>>>(11.s-2)	uleshort	!0xAA55
27429# skip unusual floppy image without boot signature like 360k-256.img (mtools 4.0.18)
27430# by check for characteristic file system type text for FAT (12 bit or 16 bit)
27431>>>>>54		string		!FAT
27432# "ftp://old-dos.ru/OSCollect/OS/MS-DOS/Final Releases/Microsoft MS-DOS 3.31 (Compaq OEM) (3.5).rar"
27433# skip unusual floppy image Disk4.img without boot signature and file system type text
27434# by check for characteristic OEM-ID text
27435>>>>>>3		string		!COMPAQ\040\040
27436# no such DOS COM executables found
27437>>>>>>>0		use		msdos-com
27438# JMP 16bit
274390           byte    0xe9
27440# 16-bit offset; for DEBUGGING!; can be negative like: USBDRIVE.COM
27441#>1		leshort		x	\b, OFFSET %d
27442# forward jumps
27443>1		leshort	>-1
27444# that offset must be accessible
27445# with hexadecimal values like: 06 1e 0e 2e 60 8c 8d b4 ba be e8 fc
27446>>(1.s+3)   byte    x
27447# check for unrealistic high number of FATs. Then it is not a disk image and it is a DOS executable
27448# like: CALLVER.COM CPUCACHE.COM K437_EUR.COM SHSUCDX.COM UMBFILL.COM (183 bytes)
27449>>>16		ubyte		>3
27450>>>>0			use		msdos-com
27451# check for unrealistic low number of FATs. Then it is not a disk image and it is a DOS executable
27452# like: GAG.COM DRMOUSE.COM NDN.COM CPQ0TD.DRV
27453>>>16		ubyte		=0
27454>>>>0			use		msdos-com
27455# maybe disc image with valid number of FATs or DOS executable
27456# like: IPXODI.COM PERUSE.COM TASKID.COM
27457>>>16		default	x
27458# invalid low media descriptor. Then it is not a disk image and it is a DOS executable
27459>>>>21		ubyte		<0xE5
27460>>>>>0			use		msdos-com
27461# valid media descriptor. Then it is maybe disk image or DOS executable
27462>>>>21		ubyte		>0xE4
27463# invalid sectorsize not a power of 2 from 32-32768. Then it is not a disk image and it must be DOS executable
27464# like: LEARN.COM (Word 1.15)
27465>>>>>11		uleshort&0x001f	!0
27466>>>>>>0			use		msdos-com
27467# negative offset, must not lead into PSP
27468# like: BASICA.COM (PC dos 3.20) FORMAT.COM SMC8100.COM WORD.COM (word4)
27469# HIDSUPT1.COM USBDRIVE.COM USBSUPT1.COM USBUHCI.COM (FreeDOS USBDOS)
27470>1		leshort	<-259
27471# that offset must be accessible
27472# add 10000h to jump at end of 64 KiB segment, add 1 for jump instruction and 2 for 16-bit offset
27473>>(1,s+65539)   byte    x
27474# after jump next instruction for DEBUGGING!
27475#>>>&-1		ubelong	x	\b, NEXT instruction %#8.8x
27476>>>0        use msdos-com
27477
27478# updated by Joerg Jenderek at Oct 2008,2015,2022
27479# following line is too general
274800	ubyte		0xb8
27481# skip 2 linux kernels like memtest.bin with "\xb8\xc0\x07\x8e" in ./linux
27482>0	string		!\xb8\xc0\x07\x8e
27483# modified by Joerg Jenderek
27484# syslinux COM32 or COM32R executable
27485>>1	lelong&0xFFFFFFFe 0x21CD4CFe	COM executable (32-bit COMBOOT
27486# https://www.syslinux.org/wiki/index.php/Comboot_API
27487# Since version 5.00 c32 modules switched from the COM32 object format to ELF
27488!:mime	application/x-c32-comboot-syslinux-exec
27489!:ext c32
27490# https://syslinux.zytor.com/comboot.php
27491# older syslinux version ( <4 )
27492# (32-bit COMBOOT) programs *.C32 contain 32-bit code and run in flat-memory 32-bit protected mode
27493# start with assembler instructions mov eax,21cd4cffh
27494>>>1	lelong		0x21CD4CFf	\b)
27495# syslinux:doc/comboot.txt
27496# A COM32R program must start with the byte sequence B8 FE 4C CD 21 (mov
27497# eax,21cd4cfeh) as a magic number.
27498# syslinux version (4.x)
27499# "COM executable (COM32R)" or "Syslinux COM32 module" by TrID
27500>>>1	lelong		0x21CD4CFe	\b, relocatable)
27501>>1	default	x
27502# look for interrupt instruction like in rem.com (DJGPP) LOADER.COM (DR-DOS 7.x)
27503>>>3	search/118	\xCD
27504# FOR DEBUGGING; possible hexadecimal interupt number like: 10~BANNER.COM 13~bcdw_cl.com 15~poweroff.com (Syslinux)
27505# 1A~BERNDPCI.COM 20~SETENHKB.COM 21~mostly 22~gfxboot.com (Syslinux) 2F~SHUTDOWN.COM (GEMSYS)
27506#>>>>&0	ubyte	x			\b, INTERUPT %#x
27507# few examples with interrupt 0x13 instruction
27508>>>>&0	ubyte	=0x13
27509# FOR DEBUGGING!
27510#>>>>>3	ubequad	x			\b, 2nd INSTRUCTION %#16.16llx
27511# skip Gpt.com Mbr.com (edk2-UDK2018 bootsector) described as "DOS/MBR boot sector" by ./filesystems
27512# by check for assembler instructions: mov  es,ax ; mov  ax,07c0h ; mov ds,ax
27513>>>>>3	ubequad	!0x8ec0b8c0078ed88d
27514# few COM exectables with interrupt 0x13 instruction like: Bootable CD Wizard executables bcdw_cl.com fdemuoff.com
27515# http://bootcd.narod.ru/bcdw150z_en.zip
27516>>>>>>0		use		msdos-com
27517# few examples with interrupt 0x16 instruction like flashimg.img
27518>>>>&0	ubyte	=0x16
27519# skip Syslinux 3.71 flashimg.img done as "DOS/MBR boot sector" by ./filesystems
27520# by check for assembler instructions: cmp ax 0xE4E4 (magic); jnz
27521>>>>>8	ubelong	!0x3DE4E475
27522# no DOS executable with interrupt 0x16 found
27523>>>>>>0		use		msdos-com
27524# most examples with interrupt instruction unequal 0x13 and 0x16
27525>>>>&0	default	x
27526#>>>>>&-1 ubyte	x			\b, INTERUPT %#x
27527# like: LOADER.COM SETENHKB.COM banner.com copybs.com gif2raw.com poweroff.com rem.com
27528>>>>>0		use		msdos-com
27529# few COM executables without interupt instruction like RESTART.COM (DOS 7.10) REBOOT.COM
27530# or some EUC-KR text files or one Ulead Imaginfo thumbnail
27531>>>3	default	x
27532# FOR DEBUGGING; 2nd instruction like 0x50 (RESTART.COM) 0x8e (REBOOT.COM)
27533# or random like: 0x0 (IMAGINFO.PE3 sky_snow) 0xb1 (euckr_.txt)
27534#>>>>3	ubyte	x			\b, 2nd INSTRUCTION %#x
27535# skip 1 Ulead Imaginfo thumbnail (IMAGINFO.PE3 sky_snow)
27536# inside SAMPLES/TEXTURES/SKY_SNOW
27537# from https://archive.org/download/PI3CANON/PI3CANON.iso
27538>>>>3	ubyte	!0x0
27539# skip some EUC-KR text files like: euckr_falsepositive.txt
27540# https://bugs.astron.com/view.php?id=186
27541>>>>>3	ubyte	!0xb1
27542# like: RESTART.COM (DOS 7.10) REBOOT.COM
27543>>>>>>0	use		msdos-com
27544
27545# URL:		https://en.wikipedia.org/wiki/UPX
27546# Reference:	https://github.com/upx/upx/archive/v3.96.zip/upx-3.96/
27547#		src/stub/src/i086-dos16.com.S
27548# Update:	Joerg Jenderek
27549# assembler instructions: cmp sp, offset sp_limit
275500	string/b	\x81\xfc
27551#>2	uleshort	x		\b, sp_limit=%#x
27552# assembler instructions: jump above +2; int 0x20; mov cx, offset bytes_to_copy
27553>4	string	\x77\x02\xcd\x20\xb9
27554#>9	uleshort	x		\b, [bytes_to_copy]=%#x
27555# at different offsets assembler instructions: push di; jump decomp_start_n2b
27556>0x1e	search/3	\x57\xe9
27557#>>&0	uleshort	x		\b, decomp_start_n2b=%#x
27558# src/stub/src/include/header.S; UPX_MAGIC_LE32
27559>>&2	string		UPX!		FREE-DOS executable (COM), UPX
27560!:mime	application/x-dosexec
27561# UPX compressed *.CPI; See ./fonts
27562>>>&21	string		=FONT		compressed DOS code page font
27563!:ext	cpx
27564>>>&21	string		!FONT		compressed
27565!:ext	com
27566# compressed size?
27567#>>>&14	uleshort+152	x		\b, %u bytes
27568# uncompressed len
27569>>>&12	uleshort	x		\b, uncompressed %u bytes
27570252	string Must\ have\ DOS\ version DR-DOS executable (COM)
27571!:mime	application/x-dosexec
27572!:ext	com
27573# GRR search is not working
27574#2	search/28	\xcd\x21	COM executable for MS-DOS
27575#WHICHFAT.cOM
275762	string	\xcd\x21		COM executable for DOS
27577!:mime	application/x-dosexec
27578!:ext	com
27579#DELTREE.cOM DELTREE2.cOM
275804	string	\xcd\x21		COM executable for DOS
27581!:mime	application/x-dosexec
27582!:ext	com
27583#IFMEMDSK.cOM ASSIGN.cOM COMP.cOM
275845	string	\xcd\x21		COM executable for DOS
27585!:mime	application/x-dosexec
27586!:ext	com
27587#DELTMP.COm HASFAT32.cOM
275887	string	\xcd\x21
27589>0	byte	!0xb8			COM executable for DOS
27590!:mime	application/x-dosexec
27591!:ext	com
27592#COMP.cOM MORE.COm
2759310	string	\xcd\x21
27594>5	string	!\xcd\x21		COM executable for DOS
27595!:mime	application/x-dosexec
27596!:ext	com
27597#comecho.com
2759813	string	\xcd\x21		COM executable for DOS
27599!:mime	application/x-dosexec
27600!:ext	com
27601#HELP.COm EDIT.coM
2760218	string	\xcd\x21
27603# not printable before it?
27604>17	byte	>32
27605>>17	byte	<126
27606>>17	default	x			COM executable for MS-DOS
27607!:mime	application/x-dosexec
27608!:ext	com
27609#NWRPLTRM.COm
2761023	string	\xcd\x21		COM executable for MS-DOS
27611!:mime	application/x-dosexec
27612!:ext	com
27613#LOADFIX.cOm LOADFIX.cOm
2761430	string	\xcd\x21		COM executable for MS-DOS
27615!:mime	application/x-dosexec
27616!:ext	com
27617#syslinux.com 3.11
2761870	string	\xcd\x21		COM executable for DOS
27619!:mime	application/x-dosexec
27620!:ext	com
27621# many compressed/converted COMs start with a copy loop instead of a jump
276220x6	search/0xa	\xfc\x57\xf3\xa5\xc3	COM executable for MS-DOS
27623!:mime	application/x-dosexec
27624!:ext	com
276250x6	search/0xa	\xfc\x57\xf3\xa4\xc3	COM executable for DOS
27626!:mime	application/x-dosexec
27627!:ext	com
27628>0x18	search/0x10	\x50\xa4\xff\xd5\x73	\b, aPack compressed
276290x3c	string		W\ Collis\0\0		COM executable for MS-DOS, Compack compressed
27630!:mime	application/x-dosexec
27631!:ext	com
27632# FIXME: missing diet .com compression
27633
27634# miscellaneous formats
276350	string/b	LZ		MS-DOS executable (built-in)
27636#0	byte		0xf0		MS-DOS program library data
27637#
27638
27639# AAF files:
27640# <stuartc@rd.bbc.co.uk> Stuart Cunningham
276410	string/b	\320\317\021\340\241\261\032\341AAFB\015\000OM\006\016\053\064\001\001\001\377			AAF legacy file using MS Structured Storage
27642>30	byte	9		(512B sectors)
27643>30	byte	12		(4kB sectors)
276440	string/b	\320\317\021\340\241\261\032\341\001\002\001\015\000\002\000\000\006\016\053\064\003\002\001\001			AAF file using MS Structured Storage
27645>30	byte	9		(512B sectors)
27646>30	byte	12		(4kB sectors)
27647
27648# Popular applications
27649#
27650# Update:	Joerg Jenderek
27651# URL:		http://fileformats.archiveteam.org/wiki/DOC
27652# Reference:	https://web.archive.org/web/20170206041048/
27653#		http://www.msxnet.org/word2rtf/formats/ffh-dosword5
27654# wIdent+dty
276550	belong	0x31be0000
27656# skip droid skeleton like x-fmt-274-signature-id-488.doc
27657>128	ubyte		>0  			Microsoft
27658>>96	uleshort	=0			Word
27659!:mime	application/msword
27660!:apple	MSWDWDBN
27661# DCX is used in the Unix version.
27662!:ext	doc/dcx
27663>>>0x6E	ulequad		=0			1.0-4.0
27664>>>0x6E	ulequad		!0			5.0-6.0
27665>>>0x6E	ulequad		x			(DOS) Document
27666# https://web.archive.org/web/20130831064118/http://msxnet.org/word2rtf/formats/write.txt
27667>>96	uleshort	!0			Write 3.0 (Windows) Document
27668!:mime	application/x-mswrite
27669!:apple	MSWDWDBN
27670# sometimes also doc like in splitter.doc srchtest.doc
27671!:ext	wri/doc
27672# wTool must be 0125400 octal
27673#>>4	uleshort	!0xAB00			\b, wTool %o
27674# reserved; must be zero
27675#>>6	ulelong		!0			\b, reserved %u
27676# block pointer to the block containing optional file manager information
27677#>>0x1C	uleshort	x			\b, at %#x info block
27678# jump to File manager information block
27679>>(0x1C.s*128)	uleshort x
27680# test for valid information start; maybe also 0012h
27681>>>&-2		uleshort	=0x0014
27682# Document ASCIIZ name
27683>>>>&0x12	string		x		%s
27684# author name
27685>>>>>&1		string		x		\b, author %s
27686# reviser name
27687>>>>>>&1	string		x		\b, reviser %s
27688# keywords
27689>>>>>>>&1	string		x		\b, keywords %s
27690# comment
27691>>>>>>>>&1	string		x		\b, comment %s
27692# version number
27693>>>>>>>>>&1	string		x		\b, version %s
27694# date of last change MM/DD/YY
27695>>>>>>>>>>&1	string		x		\b, %-.8s
27696# creation date MM/DD/YY
27697>>>>>>>>>>&9	string		x		created %-.8s
27698# file name of print format like NORMAL.STY
27699>>0x1E	string		>0			\b, formatted by %-.66s
27700# count of pages in whole file for write variant; maybe some times wrong
27701>>96	uleshort	>0			\b, %u pages
27702# name of the printer driver like HPLASMS
27703>>0x62	string		>0			\b, %-.8s printer
27704# number of blocks used in the file; seems to be 0 for Word 4.0 and Write 3.0
27705>>0x6A	uleshort	>0			\b, %u blocks
27706# bit field for corrected text areas
27707#>>0x6C	uleshort	x			\b, %#x bit field
27708# text of document; some times start with 4 non printable characters like CR LF
27709>>128	ubyte		x			\b,
27710>>>128		ubyte	>0x1F
27711>>>>128		string	x			%s
27712>>>128		ubyte	<0x20
27713>>>>129		ubyte	>0x1F
27714>>>>>129	string	x			%s
27715>>>>129		ubyte	<0x20
27716>>>>>130	ubyte	>0x1F
27717>>>>>>130	string	x			%s
27718>>>>>130	ubyte	<0x20
27719>>>>>>131	ubyte	>0x1F
27720>>>>>>>131	string	x			%s
27721>>>>>>131	ubyte	<0x20
27722>>>>>>>132	ubyte	>0x1F
27723>>>>>>>>132	string	x			%s
27724>>>>>>>132	ubyte	<0x20
27725>>>>>>>>133	ubyte	>0x1F
27726>>>>>>>>>133	string	x			%s
27727#
277280	string/b	PO^Q`				Microsoft Word 6.0 Document
27729!:mime	application/msword
27730#
277314   long        0
27732>0  belong      0xfe320000      Microsoft Word for Macintosh 1.0
27733!:mime	application/msword
27734!:ext   mcw
27735>0  belong      0xfe340000      Microsoft Word for Macintosh 3.0
27736!:mime	application/msword
27737!:ext   mcw
27738>0  belong      0xfe37001c      Microsoft Word for Macintosh 4.0
27739!:mime	application/msword
27740!:ext   mcw
27741>0  belong      0xfe370023      Microsoft Word for Macintosh 5.0
27742!:mime	application/msword
27743!:ext   mcw
27744
277450	string/b	\333\245-\0\0\0			Microsoft Word 2.0 Document
27746!:mime	application/msword
27747!:ext   doc
27748# Note: seems already recognized as "OLE 2 Compound Document" in ./ole2compounddocs
27749#512	string/b	\354\245\301			Microsoft Word Document
27750#!:mime	application/msword
27751
27752#
277530	string/b	\xDB\xA5\x2D\x00		Microsoft WinWord 2.0 Document
27754!:mime application/msword
27755#
277560	string/b	\xDB\xA5\x2D\x00		Microsoft WinWord 2.0 Document
27757!:mime application/msword
27758
27759#
277600	string/b	\x09\x04\x06\x00\x00\x00\x10\x00	Microsoft Excel Worksheet
27761!:mime	application/vnd.ms-excel
27762# https://www.macdisk.com/macsigen.php
27763!:apple	XCELXLS4
27764!:ext	xls
27765#
27766# Update: Joerg Jenderek
27767# URL: https://en.wikipedia.org/wiki/Lotus_1-2-3
27768# Reference: http://www.aboutvb.de/bas/formate/pdf/wk3.pdf
27769# Note: newer Lotus versions >2 use longer BOF record
27770# record type (BeginningOfFile=0000h) + length (001Ah)
277710	belong	0x00001a00
27772# reserved should be 0h but 8c0dh for TUTMAC.WK3, 5h for SAMPADNS.WK3, 1h for a_readme.wk3, 1eh for K&G86.WK3
27773#>18	uleshort&0x73E0	0
27774# Lotus Multi Byte Character Set (LMBCS=1-31)
27775>20	ubyte		>0
27776>>20	ubyte		<32	Lotus 1-2-3
27777#!:mime	application/x-123
27778!:mime	application/vnd.lotus-1-2-3
27779!:apple	????L123
27780# (version 5.26) labeled the entry as "Lotus 1-2-3 wk3 document data"
27781>>>4	uleshort	0x1000	WorKsheet, version 3
27782!:ext	wk3
27783# (version 5.26) labeled the entry as "Lotus 1-2-3 wk4 document data"
27784>>>4	uleshort	0x1002	WorKsheet, version 4
27785# also worksheet template 4 (.wt4)
27786!:ext	wk4/wt4
27787# no example or documentation for wk5
27788#>>4	uleshort	0x????	WorKsheet, version 4
27789#!:ext	wk5
27790# only MacrotoScript.123 example
27791>>>4	uleshort	0x1003	WorKsheet, version 97
27792# also worksheet template Smartmaster (.12M)?
27793!:ext	123
27794# only Set_Y2K.123 example
27795>>>4	uleshort	0x1005	WorKsheet, version 9.8 Millennium
27796!:ext	123
27797# no example for this version
27798>>>4	uleshort	0x8001	FoRMatting data
27799!:ext	frm
27800# (version 5.26) labeled the entry as "Lotus 1-2-3 fm3 or fmb document data"
27801# TrID labeles the entry as "Formatting Data for Lotus 1-2-3 worksheet"
27802>>>4	uleshort	0x8007	ForMatting data, version 3
27803!:ext	fm3
27804>>>4	default		x	unknown
27805# file revision sub code 0004h for worksheets
27806>>>>6	uleshort	=0x0004	worksheet
27807!:ext	wXX
27808>>>>6	uleshort	!0x0004	formatting data
27809!:ext	fXX
27810# main revision number
27811>>>>4	uleshort	x	\b, revision %#x
27812>>>6	uleshort	=0x0004	\b, cell range
27813# active cellcoord range (start row, page,column ; end row, page, column)
27814# start values normally 0~1st sheet A1
27815>>>>8	ulelong		!0
27816>>>>>10	ubyte		>0	\b%d*
27817>>>>>8	uleshort	x	\b%d,
27818>>>>>11	ubyte		x	\b%d-
27819# end page mostly 0
27820>>>>14	ubyte		>0	\b%d*
27821# end raw, column normally not 0
27822>>>>12	uleshort	x	\b%d,
27823>>>>15	ubyte		x	\b%d
27824# Lotus Multi Byte Character Set (1~cp850,2~cp851,...,16~japan,...,31~??)
27825>>>>20	ubyte		>1	\b, character set %#x
27826# flags
27827>>>>21	ubyte		x	\b, flags %#x
27828>>>6	uleshort	!0x0004
27829# record type (FONTNAME=00AEh)
27830>>>>30	search/29	\0\xAE
27831# variable length m (2) + entries (1) + ?? (1) + LCMBS string (n)
27832>>>>>&4	string		>\0	\b, 1st font "%s"
27833#
27834# Update: Joerg Jenderek
27835# URL: http://fileformats.archiveteam.org/wiki/Lotus_1-2-3
27836# Reference: http://www.schnarff.com/file-formats/lotus-1-2-3/WSFF2.TXT
27837# Note: Used by both old Lotus 1-2-3 and Lotus Symphony (DOS) til version 2.x
27838# record type (BeginningOfFile=0000h) + length (0002h)
278390	belong	0x00000200
27840# GRR: line above is too general as it catches also MS Windows CURsor
27841# to display MS Windows cursor (strength=70) before Lotus 1-2-3 (strength=70-1)
27842!:strength -1
27843# skip Windows cursors with image height <256 and keep Lotus with low opcode 0001-0083h
27844>7	ubyte		0
27845# skip Windows cursors with image width 256 and keep Lotus with positive opcode
27846>>6	ubyte		>0	Lotus
27847# !:mime	application/x-123
27848!:mime	application/vnd.lotus-1-2-3
27849!:apple	????L123
27850# revision number (0404h = 123 1A, 0405h = Lotus Symphony , 0406h = 123 2.x wk1 , 8006h = fmt , ...)
27851# undocumented; (version 5.26) labeled the configurations as "Lotus 1-2-3"
27852>>>4	uleshort	0x0007	1-2-3 CoNFiguration, version 2.x (PGRAPH.CNF)
27853!:ext	cnf
27854>>>4	uleshort	0x0C05	1-2-3 CoNFiguration, version 2.4J
27855!:ext	cnf
27856>>>4	uleshort	0x0801	1-2-3 CoNFiguration, version 1-2.1
27857!:ext	cnf
27858>>>4	uleshort	0x0802	Symphony CoNFiguration
27859!:ext	cnf
27860>>>4	uleshort	0x0804	1-2-3 CoNFiguration, version 2.2
27861!:ext	cnf
27862>>>4	uleshort	0x080A	1-2-3 CoNFiguration, version 2.3-2.4
27863!:ext	cnf
27864>>>4	uleshort	0x1402	1-2-3 CoNFiguration, version 3.x
27865!:ext	cnf
27866>>>4	uleshort	0x1450	1-2-3 CoNFiguration, version 4.x
27867!:ext	cnf
27868# (version 5.26) labeled the entry as "Lotus 123"
27869# TrID labeles the entry as "Lotus 123 Worksheet (generic)"
27870>>>4	uleshort	0x0404	1-2-3 WorKSheet, version 1
27871# extension "wks" also for Microsoft Works document
27872!:ext	wks
27873# (version 5.26) labeled the entry as "Lotus 123"
27874# TrID labeles the entry as "Lotus 123 Worksheet (generic)"
27875>>>4	uleshort	0x0405	Symphony WoRksheet, version 1.0
27876!:ext	wrk/wr1
27877# (version 5.26) labeled the entry as "Lotus 1-2-3 wk1 document data"
27878# TrID labeles the entry as "Lotus 123 Worksheet (V2)"
27879>>>4	uleshort	0x0406	1-2-3/Symphony worksheet, version 2
27880# Symphony (.wr1)
27881!:ext	wk1/wr1
27882# no example for this japan version
27883>>>4	uleshort	0x0600	1-2-3 WorKsheet, version 1.xJ
27884!:ext	wj1
27885# no example or documentation for wk2
27886#>>>4	uleshort	0x????	1-2-3 WorKsheet, version 2
27887#!:ext	wk2
27888# undocumented japan version
27889>>>4	uleshort	0x0602	1-2-3 worksheet, version 2.4J
27890!:ext	wj3
27891# (version 5.26) labeled the entry as "Lotus 1-2-3 fmt document data"
27892>>>4	uleshort	0x8006	1-2-3 ForMaTting data, version 2.x
27893# japan version 2.4J (fj3)
27894!:ext	fmt/fj3
27895# no example for this version
27896>>>4	uleshort	0x8007	1-2-3 FoRMatting data, version 2.0
27897!:ext	frm
27898# (version 5.26) labeled the entry as "Lotus 1-2-3"
27899>>>4	default		x	unknown worksheet or configuration
27900!:ext	cnf
27901>>>>4	uleshort	x	\b, revision %#x
27902# 2nd record for most worksheets describes cells range
27903>>>6		use	lotus-cells
27904# 3rd record for most japan worksheets describes cells range
27905>>>(8.s+10)	use	lotus-cells
27906#	check and then display Lotus worksheet cells range
279070	name		lotus-cells
27908# look for type (RANGE=0006h) + length (0008h) at record begin
27909>0	ubelong	0x06000800	\b, cell range
27910# cell range (start column, row, end column, row) start values normally 0,0~A1 cell
27911>>4	ulong		!0
27912>>>4	uleshort	x	\b%d,
27913>>>6	uleshort	x	\b%d-
27914# end of cell range
27915>>8	uleshort	x	\b%d,
27916>>10	uleshort	x	\b%d
27917# EndOfLotus123
279180	string/b		WordPro\0	Lotus WordPro
27919!:mime	application/vnd.lotus-wordpro
279200	string/b		WordPro\r\373	Lotus WordPro
27921!:mime	application/vnd.lotus-wordpro
27922
27923
27924# Summary: Script used by InstallScield to uninstall applications
27925# Extension: .isu
27926# Submitted by: unknown
27927# Modified by (1): Abel Cheung <abelcheung@gmail.com> (replace useless entry)
279280		string		\x71\xa8\x00\x00\x01\x02
27929>12		string		Stirling\ Technologies,		InstallShield Uninstall Script
27930
27931# Winamp .avs
27932#0	string	Nullsoft\ AVS\ Preset\ \060\056\061\032 A plug in for Winamp ms-windows Freeware media player
279330	string/b	Nullsoft\ AVS\ Preset\ 	Winamp plug in
27934
27935# Windows Metafile .WMF
279360	string/b	\327\315\306\232	Windows metafile
27937!:mime	image/wmf
27938!:ext	wmf
279390	string/b	\002\000\011\000	Windows metafile
27940!:mime	image/wmf
27941!:ext	wmf
279420	string/b	\001\000\011\000	Windows metafile
27943!:mime	image/wmf
27944!:ext	wmf
27945
27946#tz3 files whatever that is (MS Works files)
279470	string/b	\003\001\001\004\070\001\000\000	tz3 ms-works file
279480	string/b	\003\002\001\004\070\001\000\000	tz3 ms-works file
279490	string/b	\003\003\001\004\070\001\000\000	tz3 ms-works file
27950
27951# PGP sig files .sig
27952#0 string \211\000\077\003\005\000\063\237\127 065 to  \027\266\151\064\005\045\101\233\021\002 PGP sig
279530 string \211\000\077\003\005\000\063\237\127\065\027\266\151\064\005\045\101\233\021\002 PGP sig
279540 string \211\000\077\003\005\000\063\237\127\066\027\266\151\064\005\045\101\233\021\002 PGP sig
279550 string \211\000\077\003\005\000\063\237\127\067\027\266\151\064\005\045\101\233\021\002 PGP sig
279560 string \211\000\077\003\005\000\063\237\127\070\027\266\151\064\005\045\101\233\021\002 PGP sig
279570 string \211\000\077\003\005\000\063\237\127\071\027\266\151\064\005\045\101\233\021\002 PGP sig
279580 string \211\000\225\003\005\000\062\122\207\304\100\345\042 PGP sig
27959
27960# windows zips files .dmf
279610	string/b	MDIF\032\000\010\000\000\000\372\046\100\175\001\000\001\036\001\000 MS Windows special zipped file
27962
27963# Windows icons
27964# Update: Joerg Jenderek
27965# URL: https://en.wikipedia.org/wiki/CUR_(file_format)
27966# Note: similar to Windows CURsor. container for BMP (only DIB part) or PNG
279670   belong  0x00000100
27968>9  byte    0
27969>>0 byte    x
27970>>0 use     cur-ico-dir
27971>9  ubyte   0xff
27972>>0 byte    x
27973>>0 use     cur-ico-dir
27974#	displays number of icons and information for icon or cursor
279750	name		cur-ico-dir
27976# skip some Lotus 1-2-3 worksheets, CYCLE.PIC and keep Windows cursors with
27977# 1st data offset = dir header size + n * dir entry size = 6 + n * 10h = ?6h
27978>18		ulelong		&0x00000006
27979# skip remaining worksheets, because valid only for DIB image (40) or PNG image (\x89PNG)
27980>>(18.l)	ulelong		x		MS Windows
27981>>>0		ubelong		0x00000100	icon resource
27982# https://www.iana.org/assignments/media-types/image/vnd.microsoft.icon
27983!:mime		image/vnd.microsoft.icon
27984#!:mime		image/x-icon
27985!:ext		ico
27986>>>>4 		uleshort	x		- %d icon
27987# plural s
27988>>>>4 		uleshort	>1		\bs
27989# 1st icon
27990>>>>0x06	use		ico-entry
27991# 2nd icon
27992>>>>4 		uleshort	>1
27993>>>>>0x16	use		ico-entry
27994>>>0		ubelong		0x00000200	cursor resource
27995#!:mime		image/x-cur
27996!:mime		image/x-win-bitmap
27997!:ext		cur
27998>>>>4 		uleshort	x		- %d icon
27999>>>>4 		uleshort	>1		\bs
28000# 1st cursor
28001>>>>0x06	use		cur-entry
28002#>>>>0x16	use		cur-entry
28003#	display information of one cursor entry
280040	name		cur-entry
28005>0	use		cur-ico-entry
28006>4	uleshort	x	\b, hotspot @%dx
28007>6	uleshort	x	\b%d
28008#	display information of one icon entry
280090	name		ico-entry
28010>0			use	cur-ico-entry
28011# normally 0 1 but also found 14
28012>4	uleshort	>1	\b, %d planes
28013# normally 0 1 but also found some 3, 4, some 6, 8, 24, many 32, two 256
28014>6	uleshort	>1	\b, %d bits/pixel
28015#	display shared information of cursor or icon entry
280160		name		cur-ico-entry
28017>0		byte		=0		\b, 256x
28018>0		byte		!0		\b, %dx
28019>1		byte        	=0		\b256
28020>1		byte        	!0		\b%d
28021# number of colors in palette
28022>2		ubyte		!0		\b, %d colors
28023# reserved 0 FFh
28024#>3		ubyte        	x		\b, reserved %x
28025#>8		ulelong		x		\b, image size %d
28026# offset of PNG or DIB image
28027#>12		ulelong		x		\b, offset %#x
28028# PNG header (\x89PNG)
28029>(12.l)		ubelong		=0x89504e47
28030# 1 space char after "with" to get phrase "with PNG image" by magic in ./images
28031>>&-4		indirect	x	\b with
28032# DIB image
28033>(12.l)		ubelong		!0x89504e47
28034#>>&-4		use     	dib-image
28035
28036# Windows non-animated cursors
28037# Update: Joerg Jenderek
28038# URL: https://en.wikipedia.org/wiki/CUR_(file_format)
28039# Note: similar to Windows ICOn. container for BMP ( only DIB part)
28040# GRR: line below is too general as it catches also Lotus 1-2-3 files
280410   belong  0x00000200
28042>9  byte    0
28043>>0 use     cur-ico-dir
28044>9  ubyte   0xff
28045>>0 use     cur-ico-dir
28046
28047# .chr files
280480	string/b	PK\010\010BGI	Borland font
28049>4	string	>\0	%s
28050# then there is a copyright notice
28051
28052
28053# .bgi files
280540	string/b	pk\010\010BGI	Borland device
28055>4	string	>\0	%s
28056# then there is a copyright notice
28057
28058
28059# Windows Recycle Bin record file (named INFO2)
28060# By Abel Cheung (abelcheung AT gmail dot com)
28061# Version 4 always has 280 bytes (0x118) per record, version 5 has 800 bytes
28062# Since Vista uses another structure, INFO2 structure probably won't change
28063# anymore. Detailed analysis in:
28064# http://www.cybersecurityinstitute.biz/downloads/INFO2.pdf
280650	lelong		0x00000004
28066>12	lelong		0x00000118	Windows Recycle Bin INFO2 file (Win98 or below)
28067
280680	lelong		0x00000005
28069>12	lelong		0x00000320	Windows Recycle Bin INFO2 file (Win2k - WinXP)
28070
28071# From Doug Lee via a FreeBSD pr
280729	string		GERBILDOC	First Choice document
280739	string		GERBILDB	First Choice database
280749	string		GERBILCLIP	First Choice database
280750	string		GERBIL		First Choice device file
280769	string		RABBITGRAPH	RabbitGraph file
280770	string		DCU1		Borland Delphi .DCU file
280780	string		=!<spell>	MKS Spell hash list (old format)
280790	string		=!<spell2>	MKS Spell hash list
28080# Too simple - MPi
28081#0	string		AH		Halo(TM) bitmapped font file
280820	lelong		0x08086b70	TurboC BGI file
280830	lelong		0x08084b50	TurboC Font file
28084
28085# Debian#712046: The magic below identifies "Delphi compiled form data".
28086# An additional source of information is available at:
28087# http://www.woodmann.com/fravia/dafix_t1.htm
280880	string		TPF0
28089>4	pstring		>\0		Delphi compiled form '%s'
28090
28091# tests for DBase files moved, updated and merged to database
28092
280930	string		PMCC		Windows 3.x .GRP file
280941	string		RDC-meg		MegaDots
28095>8	byte		>0x2F		version %c
28096>9	byte		>0x2F		\b.%c file
280970	lelong		0x4C
28098>4	lelong		0x00021401	Windows shortcut file
28099
28100# .PIF files added by Joerg Jenderek from https://smsoft.ru/en/pifdoc.htm
28101# only for windows versions equal or greater 3.0
281020x171	string	MICROSOFT\ PIFEX\0	Windows Program Information File
28103!:mime	application/x-dosexec
28104!:ext	pif
28105#>2	string	 	>\0		\b, Title:%.30s
28106>0x24	string		>\0		\b for %.63s
28107>0x65	string		>\0		\b, directory=%.64s
28108>0xA5	string		>\0		\b, parameters=%.64s
28109#>0x181	leshort	x	\b, offset %x
28110#>0x183	leshort	x	\b, offsetdata %x
28111#>0x185	leshort	x	\b, section length %x
28112>0x187	search/0xB55	WINDOWS\ VMM\ 4.0\0
28113>>&0x5e		ubyte	>0
28114>>>&-1		string	<PIFMGR.DLL		\b, icon=%s
28115#>>>&-1		string	PIFMGR.DLL		\b, icon=%s
28116>>>&-1		string	>PIFMGR.DLL		\b, icon=%s
28117>>&0xF0		ubyte	>0
28118>>>&-1		string	<Terminal		\b, font=%.32s
28119#>>>&-1		string	=Terminal		\b, font=%.32s
28120>>>&-1		string	>Terminal		\b, font=%.32s
28121>>&0x110	ubyte	>0
28122>>>&-1		string	<Lucida\ Console	\b, TrueTypeFont=%.32s
28123#>>>&-1		string	=Lucida\ Console	\b, TrueTypeFont=%.32s
28124>>>&-1		string	>Lucida\ Console	\b, TrueTypeFont=%.32s
28125#>0x187	search/0xB55	WINDOWS\ 286\ 3.0\0	\b, Windows 3.X standard mode-style
28126#>0x187	search/0xB55	WINDOWS\ 386\ 3.0\0	\b, Windows 3.X enhanced mode-style
28127>0x187	search/0xB55	WINDOWS\ NT\ \ 3.1\0	\b, Windows NT-style
28128#>0x187	search/0xB55	WINDOWS\ NT\ \ 4.0\0	\b, Windows NT-style
28129>0x187	search/0xB55	CONFIG\ \ SYS\ 4.0\0	\b +CONFIG.SYS
28130#>>&06		string	x			\b:%s
28131>0x187	search/0xB55	AUTOEXECBAT\ 4.0\0	\b +AUTOEXEC.BAT
28132#>>&06		string	x			\b:%s
28133
28134# DOS EPS Binary File Header
28135# From: Ed Sznyter <ews@Black.Market.NET>
281360	belong		0xC5D0D3C6	DOS EPS Binary File
28137!:mime	image/x-eps
28138>4	long		>0		Postscript starts at byte %d
28139>>8	long		>0		length %d
28140>>>12	long		>0		Metafile starts at byte %d
28141>>>>16	long		>0		length %d
28142>>>20	long		>0		TIFF starts at byte %d
28143>>>>24	long		>0		length %d
28144
28145# Norton Guide (.NG , .HLP) files added by Joerg Jenderek from source NG2HTML.C
28146# of http://www.davep.org/norton-guides/ng2h-105.tgz
28147# https://en.wikipedia.org/wiki/Norton_Guides
281480	string		NG\0\001
28149# only value 0x100 found at offset 2
28150>2	ulelong		0x00000100	Norton Guide
28151!:mime	application/x-norton-guide
28152# often like NORTON.NG but some times like NC.HLP
28153!:ext	ng/hlp
28154# Title[40]
28155>>8	string		>\0		"%-.40s"
28156#>>6	uleshort	x		\b, MenuCount=%u
28157# szCredits[5][66]
28158>>48	string		>\0		\b, %-.66s
28159>>114	string		>\0		%-.66s
28160
28161# URL:		https://en.wikipedia.org/wiki/Norton_Commander
28162# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/m/msg-nc-eng.trid.xml
28163# From:		Joerg Jenderek
28164# Note:		Message file is used by executable with same main name.
28165#		Only tested with version 5.50 (english) and 2.01 (Windows)
281660	string		Abort
28167# \0 or i
28168#>5	ubyte		x		%x
28169# skip ASCII Abort text by looking for error message like in NCVIEW.MSG
28170>6	search/7089	Non-DOS\ disk	Norton Commander module message
28171!:mime	application/x-norton-msg
28172!:ext	msg
28173
28174# URL:		http://www.antonis.de/dos/dos-tuts/mpdostip/html/nwdostip.htm
28175# Reference:	https://mark0.net/download/triddefs_xml.7z/defs/m/msg-netware-dos.trid.xml
28176# From:		Joerg Jenderek
281770	string	DOS\ Client\ Message\ File:	Novell DOS client message
28178#!:mime	application/octet-stream
28179#!:mime	application/x-novell-msg
28180!:ext	msg
28181# look for second letter instead space character
28182>26	ubyte		>0x20
28183# digit 1 or often main or program name like: IPXODI.COM TASKID pnwtrap DOSRqstr
28184>>25		ubyte	!0x20			%c
28185>>>26		ubyte	!0x20			\b%c
28186>>>>27		ubyte	!0x20			\b%c
28187>>>>>28		ubyte	!0x20			\b%c
28188>>>>>>29	ubyte	!0x20			\b%c
28189>>>>>>>30	ubyte	!0x20			\b%c
28190>>>>>>>>31	ubyte	!0x20			\b%c
28191>>>>>>>>>32	ubyte	!0x20			\b%c
28192>>>>>>>>>>33	ubyte	!0x20			\b%c
28193>>>>>>>>>>>34	ubyte	!0x20			\b%c
28194>>>>>>>>>>>>35	ubyte	!0x20			\b%c
28195>>>>>>>>>>>>>36	ubyte	!0x20			\b%c
28196# followed by string like: 0 v.10 V1.20
28197#
28198# followed by ,\040Tran
28199>28	search/14	,\040Tran
28200# probably translated version string like: 0 v1.00
28201>>&0	string	x				\b, tran version %s
28202# followed by Ctrl-J Ctrl-Z
28203>>>&0	ubyte		!0xa			\b, terminated by %#2.2x
28204>>>>&0	ubyte		x			\b%2.2x
28205# Ctrl-Z
28206>0x65	ubyte		!0x1A			\b, at 0x65 %#x
28207# one
28208>0x66	ubyte		!0x01			\b, at 0x66 %#x
28209# URL:		https://en.wikipedia.org/wiki/NetWare
28210# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/d/dat-novell-msg.trid.xml
28211# ftp://ftp.iitb.ac.in/LDP/en/NLM-HOWTO/NLM-HOWTO-single.html
28212# From:		Joerg Jenderek
282130	string	Novell\ Message\ Librarian\ Data\ File	Novell message librarian data
28214#>35	string	Version\ 1.00
28215#>49	string	COPYRIGHT\ (c)\ 1985\ by\ Novell,\ Inc.
28216#>83	string	\ \ All\ Rights\ Reserved
28217#!:mime	application/octet-stream
28218#!:mime	application/x-novell-msg
28219!:ext	msg
28220#!:ext	msg/dat
28221# 4DOS help (.HLP) files added by Joerg Jenderek from source TPHELP.PAS
28222# of https://www.4dos.info/
28223# pointer,HelpID[8]=4DHnnnmm
282240	ulelong	0x48443408		4DOS help file
28225>4	string	x			\b, version %-4.4s
28226
28227# old binary Microsoft (.HLP) files added by Joerg Jenderek from http://file-extension.net/seeker/file_extension_hlp
282280	ulequad	0x3a000000024e4c	MS Advisor help file
28229
28230# HtmlHelp files (.chm)
282310	string/b	ITSF\003\000\000\000\x60\000\000\000	MS Windows HtmlHelp Data
28232!:mime	application/vnd.ms-htmlhelp
28233!:ext	chm
28234
28235# GFA-BASIC (Wolfram Kleff)
282362	string/b	GFA-BASIC3	GFA-BASIC 3 data
28237
28238#------------------------------------------------------------------------------
28239# From Stuart Caie <kyzer@4u.net> (developer of cabextract)
28240# Update: Joerg Jenderek
28241# URL: https://en.wikipedia.org/wiki/Cabinet_(file_format)
28242# Reference: https://msdn.microsoft.com/en-us/library/bb267310.aspx
28243# Note: verified by `7z l *.cab`
28244# Microsoft Cabinet files
282450	string/b	MSCF\0\0\0\0	Microsoft Cabinet archive data
28246#
28247# https://support.microsoft.com/en-us/help/973559/frequently-asked-questions-about-the-microsoft-support-diagnostic-tool
28248# CAB with *.{diagcfg,diagpkg} is used by Microsoft Support Diagnostic Tool MSDT.EXE
28249# because some archive does not have *.diag* as 1st or 2nd archive member like
28250# O15CTRRemove.diagcab or AzureStorageAnalyticsLogs_global.DiagCab
28251# brute looking after header for filenames with diagcfg or diagpkg extension in CFFILE section
28252>0x2c	search/980/c	.diag		\b, Diagnostic
28253!:mime	application/vnd.ms-cab-compressed
28254!:ext	diagcab
28255# http://fileformats.archiveteam.org/wiki/PUZ
28256# Microsoft Publisher version about 2003 has a "Pack and Go" feature that
28257# bundles a Publisher document *PNG.pub with all links into a CAB
28258>0x2c	search/300/c	png.pub\0		\b, Publisher Packed and Go
28259!:mime	application/vnd.ms-cab-compressed
28260!:ext	puz
28261# ppz variant with Microsoft PowerPoint Viewer ppview32.exe to play PowerPoint presentation
28262>0x2c	search/17/c	ppview32.exe\0		\b, PowerPoint Viewer Packed and Go
28263!:mime	application/vnd.ms-powerpoint
28264#!:mime	application/mspowerpoint
28265!:ext	ppz
28266# URL:		https://en.wikipedia.org/wiki/Windows_Desktop_Gadgets
28267# Reference:	https://docs.microsoft.com/en-us/previous-versions/windows/desktop/sidebar/
28268# http://win10gadgets.com/download/273/ All_CPU_Meter1.zip/All_CPU_Meter_V4.7.3.gadget
28269>0x2c	search/968/c	gadget.xml		\b, Windows Desktop Gadget
28270#!:mime	application/vnd.ms-cab-compressed
28271# http://extension.nirsoft.net/gadget
28272!:mime	application/x-windows-gadget
28273!:ext	gadget
28274# http://www.incredimail.com/
28275# IncrediMail CAB contains an initialisation file "content.ini" like in im2.ims
28276>0x2c	search/3369/c	content.ini\0	\b, IncrediMail
28277!:mime	application/x-incredimail
28278# member Flavor.htm implies IncrediMail ecard like in tell_a_friend.imf
28279>>0x2c	search/83/c	Flavor.htm\0	ecard
28280!:ext	imf
28281# member Macromedia Flash data *.swf implies IncrediMail skin like in im2.ims
28282>>0x2c	search/211/c	.swf\0		skin
28283!:ext	ims
28284# member anim.im3 implies IncrediMail animation like in letter_fold.ima
28285>>0x2c	search/92/c	anim.im3\0	animation
28286!:ext	ima
28287# other IncrediMail cab archive
28288>>0x2c	default		x
28289>>>0x2c	search/116/c	thumb		ecard, image, notifier or skin
28290!:ext	imf/imi/imn/ims
28291# http://file-extension.net/seeker/file_extension_ime
28292>>>0x2c	default		x		emoticons or sound
28293!:ext	ime/imw
28294# no Diagnostic, Packed and Go, Windows Desktop Gadget, IncrediMail
28295>0x2c	default		x
28296# look for 1st member name
28297>>(16.l+16)	ubyte	x
28298# https://en.wikipedia.org/wiki/SNP_file_format
28299>>>&-1	string/c 	_accrpt_.snp	\b, Access report snapshot
28300!:mime	application/msaccess
28301!:ext	snp
28302# https://en.wikipedia.org/wiki/Microsoft_InfoPath
28303>>>&-1	string 		manifest.xsf	\b, InfoPath Form Template
28304!:mime	application/vnd.ms-cab-compressed
28305#!:mime	application/vnd.ms-infopath
28306!:ext	xsn
28307# https://www.cabextract.org.uk/wince_cab_format/
28308# extension of DOS 8+3 name with ".000" of 1st archive member name implies Windows CE installer
28309>>>&7	string 		=.000		\b, WinCE install
28310!:mime	application/vnd.ms-cab-compressed
28311!:ext	cab
28312
28313# https://support.microsoft.com/kb/934307/en-US
28314# All inspected MSU contain a file with name WSUSSCAN.cab
28315# that is called "Windows Update meta data" by Microsoft
28316>>>&-1	string/c 	wsusscan.cab	\b, Microsoft Standalone Update
28317!:mime	application/vnd.ms-cab-compressed
28318!:ext	msu
28319>>>&-1	default		x
28320# look at point character of 1st archive member name for file name extension
28321>>>>&-1	search/255 	.
28322# http://www.pptfaq.com/FAQ00164_What_is_a_PPZ_file-.htm
28323# PPZ were created using Pack & Go feature of PowerPoint versions 97 - 2002
28324# packs optional files, a PowerPoint presentation *.ppt with optional PLAYLIST.LST to CAB
28325>>>>>&0	string/c	ppt\0		\b, PowerPoint Packed and Go
28326!:mime	application/vnd.ms-powerpoint
28327#!:mime	application/mspowerpoint
28328!:ext	ppz
28329# https://msdn.microsoft.com/en-us/library/windows/desktop/bb773190(v=vs.85).aspx
28330# first member *.theme implies Windows 7 Theme Pack like in CommunityShowcaseAqua3.themepack
28331# or Windows 8 Desktop Theme Pack like in PanoramicGlaciers.deskthemepack
28332>>>>>&0	string/c	theme		\b, Windows
28333!:mime	application/x-windows-themepack
28334# https://www.drewkeller.com/content/using-theme-both-windows-7-and-windows-8
28335# 1st member Panoramic.theme or Panoramas.theme implies Windows 8-10 Theme Pack
28336# with MTSM=RJSPBS in [MasterThemeSelector] inside *.theme
28337>>>>>>(16.l+16)	string	=Panoram	8
28338!:ext	deskthemepack
28339>>>>>>(16.l+16)	string	!Panoram	7 or 8
28340!:ext	themepack/deskthemepack
28341>>>>>>(16.l+16)	ubyte	x		Theme Pack
28342# URL:		https://en.wikipedia.org/wiki/Microsoft_OneNote#File_format
28343#		http://fileformats.archiveteam.org/wiki/OneNote
28344# Reference:	https://mark0.net/download/triddefs_xml.7z/defs/o/onepkg.trid.xml
28345# 1st member name like: "Class Notes.one" "test-onenote.one" "Open Notebook.onetoc2" "Editor �ffnen.onetoc2"
28346>>>>>&0	string/c	one		\b, OneNote Package
28347!:mime	application/msonenote
28348!:ext	onepkg
28349>>>>>&0	default		x
28350# look for null terminator of 1st member name
28351>>>>>>&0	search/255 	\0
28352# 2nd member name WSUSSCAN.cab like in Microsoft-Windows-MediaFeaturePack-OOB-Package.msu
28353>>>>>>>&16	string/c 	wsusscan.cab	\b, Microsoft Standalone Update
28354!:mime	application/vnd.ms-cab-compressed
28355!:ext	msu
28356>>>>>>>&16	default	x
28357# archive with more then one file need some output in version 5.32 to avoid error message like
28358# Magdir/msdos, 1138: Warning: Current entry does not yet have a description for adding a MIME type
28359# Magdir/msdos, 1139: Warning: Current entry does not yet have a description for adding a EXTENSION type
28360# file: could not find any valid magic files!
28361>>>>>>>>28	uleshort	>1	\b, many
28362!:mime	application/vnd.ms-cab-compressed
28363!:ext	cab
28364# remaining archives with just one file
28365>>>>>>>>28	uleshort	=1
28366# neither extra bytes nor cab chain implies Windows 2000,XP setup files in directory i386
28367>>>>>>>>>30	uleshort	=0x0000	\b, Windows 2000/XP setup
28368# cut of last char of source extension and add underscore to generate extension
28369# TERMCAP._ ... FXSCOUNT.H_ ... L3CODECA.AC_ ... NPDRMV2.ZI_
28370!:mime	application/vnd.ms-cab-compressed
28371!:ext	_/?_/??_
28372# archive need some output like "single" in version 5.32 to avoid error messages
28373>>>>>>>>>30	uleshort	!0x0000	\b, single
28374!:mime	application/vnd.ms-cab-compressed
28375!:ext	cab
28376# TODO: additional extensions like
28377# .xtp	InfoPath Template Part
28378# .lvf	Logitech Video Effects Face Accessory
28379>8	ulelong		x		\b, %u bytes
28380>28	uleshort		1		\b, 1 file
28381>28	uleshort		>1		\b, %u files
28382# Reserved fields, set to zero
28383#>4	belong		!0		\b, reserved1 %x
28384#>12	belong		!0		\b, reserved2 %x
28385# offset of the first CFFILE entry coffFiles: minimal 2Ch
28386>16	ulelong		x		\b, at %#x
28387>(16.l)	use		cab-file
28388# at least also 2nd member
28389>28	uleshort		>1
28390>>(16.l+16)	ubyte	x
28391>>>&0	search/255 	\0
28392# second member info
28393>>>>&0	use		cab-file
28394#>20	belong		!0		\b, reserved %x
28395# Cabinet file format version. Currently, versionMajor = 1 and versionMinor = 3
28396>24	ubeshort	!0x0301		\b version %#x
28397# number of CFFOLDER entries
28398>26	uleshort	>1		\b, %u cffolders
28399# cabinet file option indicators 1~PREVIOUS, 2~NEXT, 4~reserved fields
28400# only found for flags 0 1 2 3 4 not 7
28401>30	uleshort	>0		\b, flags %#x
28402# Cabinet files have a 16-bit cabinet setID field that is designed for application use.
28403# default is zero, however, the -i option of cabarc can be used to set this field
28404>32	uleshort	>0		\b, ID %u
28405# iCabinet is number of this cabinet file in a set, where 0 for the first cabinet
28406#>34	uleshort	x		\b, iCabinet %u
28407# add one for display because humans start numbering by 1 and also fit to name of disk szDisk*
28408>34	uleshort+1	x		\b, number %u
28409>30	uleshort	&0x0004		\b, extra bytes
28410# cbCFHeader optional size of per-cabinet reserved area 14h 1800h
28411>>36	uleshort	>0		%u in head
28412# cbCFFolder is optional size of per-folder reserved area
28413>>38	ubyte		>0		%u in folder
28414# cbCFData is optional size of per-datablock reserved area
28415>>39	ubyte		>0		%u in data block
28416# optional per-cabinet reserved area abReserve[cbCFHeader]
28417>>36	uleshort	>0
28418# 1st CFFOLDER after reserved area in header
28419>>>(36.s+40)	use			cab-folder
28420# no reserved area in header
28421>30	uleshort	^0x0004
28422# no previous and next cab archive
28423>>30	uleshort		=0x0000
28424>>>36	use				cab-folder
28425# only previous cab archive
28426>>30	uleshort		=0x0001	\b, previous
28427>>>36	use				cab-anchor
28428# only next cab archive
28429>>30	uleshort		=0x0002	\b, next
28430>>>36	use				cab-anchor
28431# previous+next cab archive
28432# can not use sub routine cab-anchor to display previous and next cabinet together
28433#>>>36	use				cab-anchor
28434#>>>>&0	use				cab-anchor
28435>>30	uleshort		=0x0003	\b, previous
28436>>>36	string		x		%s
28437# optional name of previous disk szDisk*
28438>>>>&1	string		x		disk %s
28439>>>>>&1	string		x		\b, next %s
28440# optional name of previous disk szDisk*
28441>>>>>>&1	string		x	disk %s
28442>>>>>>>&1	use			cab-folder
28443#	display filename and disk name of previous or next cabinet
284440       name    			cab-anchor
28445# optional name of previous/next cabinet file szCabinet*[255]
28446>&0	string		x		%s
28447# optional name of previous/next disk szDisk*[255]
28448>>&1	string		x		disk %s
28449#	display folder structure CFFOLDER information like compression of cabinet
284500       name    			cab-folder
28451# offset of the CFDATA block in this folder
28452#>0	ulelong		x		\b, coffCabStart %#x
28453# number of CFDATA blocks in folder
28454>4	uleshort	x		\b, %u datablock
28455# plural s
28456>4	uleshort	>1		\bs
28457# compression typeCompress: 0~None 1~MSZIP 0x1503~LZX:21 0x1003~LZX:16 0x0f03~LZX:15
28458>6	uleshort	x		\b, %#x compression
28459# optional per-folder reserved area
28460#>8	ubequad		x		\b, abReserve %#llx
28461#	display member structure CFFILE information like member name of cabinet
284620       name    			cab-file
28463# cbFile is uncompressed size of file in bytes
28464#>0	ulelong		x		\b, cbFile %u
28465# uoffFolderStart is uncompressed offset of file in folder
28466#>4	ulelong		>0		\b, uoffFolderStart %#x
28467# iFolder is index into the CFFOLDER area. 0 indicates first folder in cabinet
28468# define ifoldCONTINUED_FROM_PREV      (0xFFFD)
28469# define ifoldCONTINUED_TO_NEXT        (0xFFFE)
28470# define ifoldCONTINUED_PREV_AND_NEXT  (0xFFFF)
28471>8	uleshort	>0		\b, iFolder %#x
28472# date stamp for file
28473#>10	uleshort	x		\b, date %#x
28474# time stamp for file
28475#>12	uleshort	x		\b, time %#x
28476# attribs is attribute flags for file
28477# define  _A_RDONLY       (0x01)  file is read-only
28478# define  _A_HIDDEN       (0x02)  file is hidden
28479# define  _A_SYSTEM       (0x04)  file is a system file
28480# define  _A_ARCH         (0x20)  file modified since last backup
28481# example http://sebastien.kirche.free.fr/pebuilder_plugins/depends.cab
28482# define  _A_EXEC         (0x40)  run after extraction
28483# define  _A_NAME_IS_UTF  (0x80)  szName[] contains UTF
28484# define  UNKNOWN       (0x0100)  undocumented or accident
28485#>14	uleshort	x		\b, attribs %#x
28486>14	uleshort	>0		+
28487>>14	uleshort	&0x0001		\bR
28488>>14	uleshort	&0x0002		\bH
28489>>14	uleshort	&0x0004		\bS
28490>>14	uleshort	&0x0020		\bA
28491>>14	uleshort	&0x0040		\bX
28492>>14	uleshort	&0x0080		\bUtf
28493# unknown 0x0100 flag found on one XP_CD:\I386\DRIVER.CAB
28494>>14	uleshort	&0x0100		\b?
28495# szName is name of archive member
28496>16	string		x		"%s"
28497# next archive member name if more files
28498#>>&17	string		>\0		\b, NEXT NAME %-.50s
28499
28500# InstallShield Cabinet files
285010	string/b	ISc(		InstallShield Cabinet archive data
28502>5	byte&0xf0	=0x60		version 6,
28503>5	byte&0xf0	!0x60		version 4/5,
28504>(12.l+40)	lelong	x		%u files
28505
28506# Windows CE package files
285070	string/b	MSCE\0\0\0\0	Microsoft WinCE install header
28508>20	lelong		0		\b, architecture-independent
28509>20	lelong		103		\b, Hitachi SH3
28510>20	lelong		104		\b, Hitachi SH4
28511>20	lelong		0xA11		\b, StrongARM
28512>20	lelong		4000		\b, MIPS R4000
28513>20	lelong		10003		\b, Hitachi SH3
28514>20	lelong		10004		\b, Hitachi SH3E
28515>20	lelong		10005		\b, Hitachi SH4
28516>20	lelong		70001		\b, ARM 7TDMI
28517>52	leshort		1		\b, 1 file
28518>52	leshort		>1		\b, %u files
28519>56	leshort		1		\b, 1 registry entry
28520>56	leshort		>1		\b, %u registry entries
28521
28522
28523# Windows Enhanced Metafile (EMF)
28524# See msdn.microsoft.com/archive/en-us/dnargdi/html/msdn_enhmeta.asp
28525# for further information.
285260	ulelong 1
28527>40	string	\ EMF		Windows Enhanced Metafile (EMF) image data
28528>>44	ulelong x		version %#x
28529
28530
285310	string/b	\224\246\056		Microsoft Word Document
28532!:mime	application/msword
28533
28534# From: "Nelson A. de Oliveira" <naoliv@gmail.com>
28535# Magic type for Dell's BIOS .hdr files
28536# Dell's .hdr
285370	string/b $RBU
28538>23	string Dell			%s system BIOS
28539>5	byte   2
28540>>48	byte   x			version %d.
28541>>49	byte   x			\b%d.
28542>>50	byte   x			\b%d
28543>5	byte   <2
28544>>48	string x			version %.3s
28545
28546# Type: Microsoft Document Imaging Format (.mdi)
28547# URL:	https://en.wikipedia.org/wiki/Microsoft_Document_Imaging_Format
28548# From: Daniele Sempione <scrows@oziosi.org>
28549# Too weak (EP)
28550#0	short	0x5045			Microsoft Document Imaging Format
28551
28552# MS eBook format (.lit)
285530	string/b	ITOLITLS		Microsoft Reader eBook Data
28554>8	lelong	x			\b, version %u
28555!:mime					application/x-ms-reader
28556
28557# Windows CE Binary Image Data Format
28558# From: Dr. Jesus <j@hug.gs>
285590	string/b	B000FF\n	Windows Embedded CE binary image
28560
28561# The second byte of these signatures is a file version; I don't know what,
28562# if anything, produced files with version numbers 0-2.
28563# From: John Elliott <johne@seasip.demon.co.uk>
285640	string	\xfc\x03\x00	Mallard BASIC program data (v1.11)
285650	string	\xfc\x04\x00	Mallard BASIC program data (v1.29+)
285660	string	\xfc\x03\x01	Mallard BASIC protected program data (v1.11)
285670	string	\xfc\x04\x01	Mallard BASIC protected program data (v1.29+)
28568
285690	string	MIOPEN		Mallard BASIC Jetsam data
285700	string	Jetsam0		Mallard BASIC Jetsam index data
28571
28572# DOS backup 2.0 to 3.2
28573# URL:		http://fileformats.archiveteam.org/wiki/BACKUP_(MS-DOS)
28574# Reference:	http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/dos/restore/brtecdoc.htm
28575# backupid.@@@
28576
28577# plausibility check for date
285780x3	ushort	>1979
28579>0x5	ubyte-1 <31
28580>>0x6	ubyte-1 <12
28581# actually 121 nul bytes
28582>>>0x7	string	\0\0\0\0\0\0\0\0
28583>>>>0x1 ubyte	x	DOS 2.0 backup id file, sequence %d
28584#!:mime	application/octet-stream
28585!:ext @@@
28586>>>>0x0 ubyte	0xff	\b, last disk
28587
28588# backed up file
28589
28590# skip some AppleWorks word like Tomahawk.Awp, WIN98SE-DE.vhd
28591# by looking for trailing nul of maximal file name string
285920x52	ubyte	0
28593# test for flag byte: FFh~complete file, 00h~split file
28594# FFh -127 =	-1 -127 =	-128
28595# 00h -127 =	 0 -127 =	-127
28596>0	byte-127	<-126
28597# plausibility check for file name length
28598>>0x53	ubyte-1	<78
28599# looking for terminating nul of file name string
28600>>>(0x53.b+4)	ubyte	0
28601# looking if last char of string is valid DOS file name
28602>>>>(0x53.b+3)	ubyte	>0x1F
28603# actually 44 nul bytes
28604# but sometimes garbage according to Ralf Quint. So can not be used as test
28605#>0x54	string	\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
28606# first char of full file name is DOS (5Ch) or UNIX (2Fh) path separator
28607# only DOS variant found. UNIX variant according to V32SLASH.TXT in archive PD0315.EXE
28608>>>>>5	ubyte&0x8C	0x0C
28609# ./msdos (version 5.30) labeled the entry as
28610# "DOS 2.0 backed up file %s, split file, sequence %d" or
28611# "DOS 2.0 backed up file %s, complete file"
28612>>>>>>0	ubyte	x	DOS 2.0-3.2 backed up
28613#>>>>>>0	ubyte	0xff	complete
28614>>>>>>0	ubyte	0
28615>>>>>>>1 uleshort	x	sequence %d of
28616# full file name with path but without drive letter and colon stored from 0x05 til 0x52
28617>>>>>>0x5	string	x	file %s
28618#!:mime	application/octet-stream
28619# backup name is original filename
28620#!:ext	doc/exe/rar/zip
28621#!:ext	*
28622# magic/Magdir/msdos, 1169: Warning: EXTENSION type `     *' has bad char '*'
28623# file: line 1169: Bad magic entry '  *'
28624# after header original file content
28625>>>>>>128	indirect x	\b;
28626
28627
28628# DOS backup 3.3 to 5.x
28629
28630# CONTROL.nnn files
286310	string	\x8bBACKUP\x20
28632# actually 128 nul bytes
28633>0xa	string	\0\0\0\0\0\0\0\0
28634>>0x9	ubyte	x	DOS 3.3 backup control file, sequence %d
28635>>0x8a	ubyte	0xff	\b, last disk
28636
28637# NB: The BACKUP.nnn files consist of the files backed up,
28638# concatenated.
28639
28640# From:		Joerg Jenderek
28641# URL:		http://fileformats.archiveteam.org/wiki/MS-DOS_date/time
28642# Reference:	https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-dosdatetimetofiletime
28643# Note:		DOS date+time format is different from formats such as Unix epoch
28644#		bit encoded; uses year values relative to 1980 and 2 second precision
286450	name		dos-date
28646# HHHHHMMMMMMSSSSS bit encoded Hour (0-23) Minute (0-59) SecondPart (*2)
28647#>0	uleshort	x	RAW TIME [%#4.4x]
28648# hour part
28649#>0	uleshort/2048	x	hour [%u]
28650# YYYYYMMMMDDDDD bit encoded YearPart (+1980) Month (1-12) Day (1-31)
28651#>2	uleshort	x	RAW DATE [%#4.4x]
28652# day part
28653>2	uleshort&0x001F	x	%u
28654#>2	uleshort/16	x	MONTH PART [%#x]
28655# GRR: not working
28656#>2	uleshort/16	&0x000F	MONTH [%u]
28657#>2	uleshort&0x01E0	x	MONTH PART [%#4.4x]
28658>2	uleshort&0x01E0	=0x0020	jan
28659>2	uleshort&0x01E0	=0x0040	feb
28660>2	uleshort&0x01E0	=0x0060	mar
28661>2	uleshort&0x01E0	=0x0080	apr
28662>2	uleshort&0x01E0	=0x00A0	may
28663>2	uleshort&0x01E0	=0x00C0	jun
28664>2	uleshort&0x01E0	=0x00E0	jul
28665>2	uleshort&0x01E0	=0x0100	aug
28666>2	uleshort&0x01E0	=0x0120	sep
28667>2	uleshort&0x01E0	=0x0140	oct
28668>2	uleshort&0x01E0	=0x0160	nov
28669>2	uleshort&0x01E0	=0x0180	dec
28670# year part
28671>2	uleshort/512	x	1980+%u
28672#
28673
28674#------------------------------------------------------------------------------
28675# $File: msooxml,v 1.18 2022/08/16 11:16:39 christos Exp $
28676# msooxml:  file(1) magic for Microsoft Office XML
28677# From: Ralf Brown <ralf.brown@gmail.com>
28678
28679# .docx, .pptx, and .xlsx are XML plus other files inside a ZIP
28680#   archive.  The first member file is normally "[Content_Types].xml".
28681#   but some libreoffice generated files put this later. Perhaps skip
28682#   the "[Content_Types].xml" test?
28683# Since MSOOXML doesn't have anything like the uncompressed "mimetype"
28684#   file of ePub or OpenDocument, we'll have to scan for a filename
28685#   which can distinguish between the three types
28686
286870		name		msooxml
28688>0		string		word/		Microsoft Word 2007+
28689!:mime application/vnd.openxmlformats-officedocument.wordprocessingml.document
28690!:ext	docx
28691>0		string		ppt/		Microsoft PowerPoint 2007+
28692!:mime application/vnd.openxmlformats-officedocument.presentationml.presentation
28693!:ext	pptx
28694>0		string		xl/		Microsoft Excel 2007+
28695!:mime application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
28696!:ext	xlsx
28697>0		string		visio/		Microsoft Visio 2013+
28698!:mime application/vnd.ms-visio.drawing.main+xml
28699>0		string		AppManifest.xaml	Microsoft Silverlight Application
28700!:mime application/x-silverlight-app
28701
28702# start by checking for ZIP local file header signature
287030		string		PK\003\004
28704!:strength +10
28705# make sure the first file is correct
28706>0x1E		use		msooxml
28707>0x1E		default		x
28708>>0x1E		regex		\\[Content_Types\\]\\.xml|_rels/\\.rels|docProps|customXml
28709# skip to the second local file header
28710# since some documents include a 520-byte extra field following the file
28711# header, we need to scan for the next header
28712>>>(18.l+49)	search/6000	PK\003\004
28713# now skip to the *third* local file header; again, we need to scan due to a
28714# 520-byte extra field following the file header
28715>>>>&26		search/6000	PK\003\004
28716# and check the subdirectory name to determine which type of OOXML
28717# file we have.  Correct the mimetype with the registered ones:
28718# https://technet.microsoft.com/en-us/library/cc179224.aspx
28719>>>>>&26		use		msooxml
28720>>>>>&26		default		x
28721# OpenOffice/Libreoffice orders ZIP entry differently, so check the 4th file
28722>>>>>>&26	search/6000	PK\003\004
28723>>>>>>>&26	use		msooxml
28724# Some OOXML generators add an extra customXml directory. Check another file.
28725>>>>>>>&26	default		x
28726>>>>>>>>&26	search/6000	PK\003\004
28727>>>>>>>>>&26	use		msooxml
28728>>>>>>>>>&26	default		x		Microsoft OOXML
28729>>>>>>>&26	default		x		Microsoft OOXML
28730>>>>>&26	default		x		Microsoft OOXML
28731
28732#------------------------------------------------------------------------------
28733# $File: msvc,v 1.11 2022/01/17 17:17:30 christos Exp $
28734# msvc:  file(1) magic for msvc
28735# "H. Nanosecond" <aldomel@ix.netcom.com>
28736# Microsoft visual C
28737#
28738# I have version 1.0
28739
28740# .aps
287410	string	HWB\000\377\001\000\000\000	Microsoft Visual C .APS file
28742
28743# .ide
28744#too long 0	string	\102\157\162\154\141\156\144\040\103\053\053\040\120\162\157\152\145\143\164\040\106\151\154\145\012\000\032\000\002\000\262\000\272\276\372\316	MSVC .ide
287450	string	\102\157\162\154\141\156\144\040\103\053\053\040\120\162\157	MSVC .ide
28746
28747# .res
287480	string	\000\000\000\000\040\000\000\000\377	MSVC .res
287490	string	\377\003\000\377\001\000\020\020\350	MSVC .res
287500	string	\377\003\000\377\001\000\060\020\350	MSVC .res
28751
28752#.lib
28753# URL: 		https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B
28754#		http://fileformats.archiveteam.org/wiki/Microsoft_Library
28755#		http://fileformats.archiveteam.org/wiki/OMF
28756# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/l/lib-msvc.trid.xml
28757#		https://pierrelib.pagesperso-orange.fr/exec_formats/OMF_v1.1.pdf
28758# Update:	Joerg Jenderek
28759#0	string	\360\015\000\000	Microsoft Visual C library
28760#0	string	\360\075\000\000	Microsoft Visual C library
28761#0	string	\360\175\000\000	Microsoft Visual C library
28762# test for RecordType~LibraryHeaderRecord=0xF0 + RecordLength=???Dh + dictionary offset is multiple of 0x200
287630	ubelong&0xFF0f80ff	=0xF00d0000
28764# Microsoft Visual C library (strength=70) before MIDI SysEx messages (strength=50) handled by ./sysex
28765#!:strength +0
28766# test for valid 2nd RecordType~Translator Header Record=THEADR=80h or LHEADR=82h
28767>(1.s+3)	ubyte&0xFD	=0x80
28768>>0		use		omf-lib
28769#	display information about Microsoft Visual C/OMF library
287700	name			omf-lib
28771# RecordType~LibraryHeaderRecord=0xF0
28772#>0	byte			0xF0		Microsoft Visual C library
28773# the above description was used in file version 5.41
28774>0	byte			0xF0		Microsoft Visual C/OMF library
28775#>0	byte			0xF0		relocatable Object Module Format (OMF) libray
28776#!:mime	application/octet-stream
28777!:mime	application/x-omf-lib
28778!:ext	lib
28779# 1st record data length like 13=0Dh 29=1Dh 61=3Dh 125=7Dh 509=01FDh ... 32765=7FFDh
28780#>1	uleshort		x		\b, 1st record data length %u
28781#>1	uleshort		x		\b, 1st record data length %#x
28782# 2**4=16 <= RecordLength+3 = PageSize = 2**n {16 32 512 no examples 64 128 256 1024 2048 ...32768} <= 2**15=32768
28783>1	uleshort+3		x		\b, page size %u
28784# dictionary offset like: 400h 600h a00h c00h 1200h 1800h 2400h 5600h 12800h 19200h 28a00h
28785>3		ulelong		x		\b, at %#x dictionary
28786# dictionary block a 512 bytes; the first 37 bytes correspond to the 37 buckets
28787#>(3.l)	ubequad			x		(%#16.16llx...)
28788# dictionary size; length in 512-byte blocks; a prime number? like:
28789# 1 2 3 4 5 6 7 9 11 13 15 16 18 21 22 23 24 25 31 50 53 89 101 117 277
28790>7		uleshort	x		with %u block
28791# plurals s
28792>7		uleshort	>1		\bs
28793# If dictionary byte 38 (FFLAG) has the value 255, there is no space left
28794>(3.l+37)	ubyte		<0xFF		(FFLAG=%#x)
28795>(3.l+37)	ubyte		=0xFF		(FFLAG=full)
28796# dictionary entry; length byte of following symbol, the following text bytes of symbol, two bytes specifies the page number
28797# like: dbfntx1! DBFNTX.LIB zlibCompileFlags_ ZLIB.LIB atoi! mwlibc.lib
28798>(3.l+38)	pstring		x		1st entry %s
28799# like: 1 33 41 47 458 8783
28800>>&0		uleshort	x		in page %u
28801# library flags; 0 or 1, but WHAT IS 0x4d in MOUSE.LIB ?
28802>9	ubyte			>1		\b, flags %#x
28803>9	ubyte			=1		case sensitive
28804# In the library after header comes first object module with a Library Module Header Record (LHEADR=82h)
28805# but in examples Translator Header Record (THEADR=80h) which is handled identically
28806>(1.s+3)	ubyte		x		\b, 2nd record
28807>(1.s+3)	ubyte		!0x80		(type %#x)
28808#>(1.s+4)	uleshort	x		\b, 2nd record data length %u
28809# Module name often source name like "dos\crt0.asm" in mlibce.lib or "QB4UTIL.ASM" in QB4UTIL.LIB
28810# or "C:\Documents and Settings\Allan Campbell\My Documents\FDOSBoot\zlib\zutil.c" in ZLIB.LIB
28811# or title like "87INIT" in FP87.LIB or "ACOSASIN" in MATHC.LIB or "Copyright" in calc-bcc.lib
28812>(1.s+6)	pstring		x		"%s"
28813# 2nd record checksum
28814#>>&0		ubyte		x		checksum %#x
28815# 3rd RecordType: 96h~LNAMES 88h~COMENT
28816>>&1		ubyte		x		\b, 3rd record
28817>>&1		ubyte		!0x88
28818>>>&-1		ubyte		!0x96
28819# 3rd unusual record type
28820>>>>&-1		ubyte		x		(type %#x)
28821# 3rd record is a List of Names Record (LNAMES=96h)
28822>>&1		ubyte		=0x96		LNAMES
28823# LNAMES record length like: 2 15 19
28824#>>>&0			uleshort	x	\b, LNAMES record length %u
28825>>>&0			uleshort	>2
28826# 1st LNAME string length; null is valid; maximal 255
28827#>>>>&0			ubyte		x	1st LNAME length %u
28828>>>>&0			ubyte		=0
28829# 2nd LNAME length like: 4 7 8 17 31
28830#>>>>>&0			ubyte		x	2nd LNAME length %u
28831# name used for segment, class, group, overlay, etc like:
28832# CODE (mwlibc.lib) _TEXT32 (JMPPM32.LIB) _OVLCODE (WOVL.LIB)
28833>>>>>&0			pstring		x	%s
28834# 3rd LNAME length like: 4 5
28835#>>>>>>&0		ubyte		x	3rd LNAME length %u
28836# like: DATA (mwlibc.lib) CODE (JMPPM32.LIB) _TEXT (EMU87.LIB)
28837>>>>>>&0		pstring		x	%s
28838# maybe 4th LNAME length like: 4 6
28839>>>>>>>&0		ubyte		<44
28840# like: DATA (DEBUG.LIB) DGROUP (mwlibc.lib MOUSE.LIB)
28841>>>>>>>>&-1		pstring		x	%s
28842# 3rd record is a COMMENT (Including all comment class extensions)
28843>>&1		ubyte		=0x88		COMMENT
28844# comment record length like: 3 FLIB7M.LIB 1Bh 1Eh 23h 27h 2Bh 30h freetype-bcc.lib
28845#>>>&0		uleshort	x		\b, record length %#x
28846# real comment length = record length - 1 (comment type) - 1 (comment Class) - 1 (checksum) -1 (char count)
28847# like: 2 LIBFL.LIB 4 "UUID" 5 "dscap" 6 "int386" 7 "qb4util" 8 "AMSGEXIT" 16 REXX.LIB 20 27 35 44 freetype-bcc.lib
28848#>>>>&-2		uleshort-4	>0		\b, comment length %u
28849# check that record contain at least comment type (1 byte), comment class (1 byte), checksum (1 byte)
28850# probably always true
28851>>>&0		uleshort	>2
28852# comment type: 80h~NP~no purge bit 40h~NL~no list bit
28853#>>>>&0		ubyte		!0		Type %#x
28854>>>>&0		ubyte		&0x80		Preserved
28855# no example
28856>>>>&0		ubyte		&0x40		NoList
28857# comment class like: 0~Translator A0~OMF extensions A3~LIBMOD A1~New OMF extensions AA~UNKNOWN
28858>>>>&1		ubyte		x		class=%#x
28859# check that comment record contains at least real content
28860>>>>&-2		uleshort	>3
28861# Translator comment record (0); it may name the source language or translator
28862>>>>>&1		ubyte		=0		Translator
28863#>>>>>>&0		ubyte	x		Translator length %u
28864# like: "TC86 Borland Turbo C 2.01 " (GEMS.LIB) "TC86 Borland Turbo C++ 3.00" (CATDB.LIB)
28865>>>>>>&0		pstring	x		"%s"
28866# OMF extensions comment record (A0); first byte of commentary string identifies subtype
28867>>>>>&1		ubyte		=0xA0		OMF extensions
28868# A0 subtype like: 1~IMPDEF
28869>>>>>>&0		ubyte	!1		subtype %#x
28870# Import Definition Record (Comment Class A0, Subtype 01~IMPDEF)
28871>>>>>>&0		ubyte	1		IMPDEF
28872# ordinal flag; determines form of Entry Ident field. If nonzero (seems to be 1) Entry is ordinal
28873>>>>>>>&0		ubyte	!0		ordinal
28874# like: IMPORT.LIB DOSCALLS.LIB mlibw.lib mwinlibc.lib REXX.LIB
28875>>>>>>>>&-1		ubyte	>1		%u
28876# Internal Name in count, char string format; module name for the imported symbol
28877# like: 7 "REXXSAA" 9 11 13 14 15 16 20 21 26 "_Z10_clip_linePdS_S_S_dddd"
28878#>>>>>>>&1		ubyte	x		internal name length %u
28879# internal module name like: _DllGetVersion DllGetVersion BezierTerminationTest Copyright
28880>>>>>>>&1		pstring	x		%s
28881# module name in count, char string format; DLL name that supplies a matching export symbol
28882# like: jpeg62.dll (jpeg-bcc.lib) unrar3.dll (unrar-bcc.lib) REXX (REXX.LIB)
28883>>>>>>>>&0		pstring	x		exported by %s
28884# Entry Ident; 16-bit if ordinal flag != 0 or imported name in count, char string format if ordinal flag = 0
28885# like: \0 (calc-bcc.lib) DllGetVersion (libtiff-bcc.lib) UTF8ToHtml (libxml2-bcc.lib) xslAddCall (libxslt-bcc.lib)
28886#>>>>>>>>>&0		pstring	>\0		entry ident %s
28887# "New OMF" extensions comment (A1); indicate version of symbolic debug information
28888# like: LIBFL.LIB
28889>>>>>&1		ubyte		=0xA1		New OMF extensions
28890# symbolic debug information version n
28891>>>>>>&0		ubyte	x		n=%u
28892# symbolic debug information style like: HL~IBM PM Debugger style (LIBFL.LIB) DX~AIX style CV~Microsoft symbol and type style
28893>>>>>>>&0		string	HL		IBM style
28894>>>>>>>&0		string	DX		AIX style
28895>>>>>>>&0		string	CV		Microsoft style
28896# LIBMOD comment record (A3) used only by the librarian
28897# Microsoft extension added for LIB version 3.07 in macro assembler (MASM 5.0)
28898>>>>>&1		ubyte		=0xA3		LIBMOD
28899# The A3 LIBMOD record contains only the ASCII string of the module name in count char format
28900#>>>>>>&0		ubyte	x		LIBMOD length %u
28901# LIBMOD comment record module name without path and extension like:
28902# qb4util (QB4UTIL.LIB) affaldiv (libh.lib) crt0 (slibc.lib) clipper (DDDRAWS.LIB) dinpdev (DINPUTS.LIB) UUID (UUID.LIB)
28903>>>>>>&0		pstring	x		%s
28904# GRR: WHAT iS THAT? AA foo comment record
28905#>>>>>&1		ubyte		=0xAA		AA-comment
28906# like: OS220
28907#>>>>>>&0		string	x		what=%-5.5s
28908#
28909
28910#.pch
289110	string	DTJPCH0\000\022\103\006\200	Microsoft Visual C .pch
28912
28913# Summary: Symbol Table / Debug info used by Microsoft compilers
28914# URL: https://en.wikipedia.org/wiki/Program_database
28915# Reference: https://code.google.com/p/pdbparser/wiki/MSF_Format
28916# Update: Joerg Jenderek
28917# Note:	test only for Windows XP+SP3 x86 , 8.1 x64 arm and 10.1 x86
28918#	info does only applies partly for older files like msvbvm50.pdb about year 2001
289190	string	Microsoft\ C/C++\040
28920# "Microsoft Program DataBase" by TrID
28921>24	search/14	\r\n\x1A	MSVC program database
28922!:mime	application/x-ms-pdb
28923!:ext	pdb
28924# "MSF 7.00" "program database 2.00" for msvbvm50.pdb
28925>>16	regex	\([0-9.]+\)	ver %s
28926#>>>0x38	search/128123456	/LinkInfo	\b with linkinfo
28927# "MSF 7.00" variant
28928>>0x1e	leshort	0
28929# PageSize 400h 1000h
28930>>>0x20	lelong	x	\b, %d
28931# Page Count
28932>>>0x28	lelong	x	\b*%d bytes
28933# "program database 2.00"  variant
28934>>0x1e	leshort	!0
28935# PageSize 400h
28936>>>0x2c	lelong	x	\b, %d
28937# Page Count for msoo-dll.pdb 4379h
28938>>>0x32	leshort	x	\b*%d bytes
28939
28940# Reference: https://github.com/Microsoft/vstest/pull/856/commits/fdc7a9f074ca5a8dfeec83b1be9162bf0cf4000d
289410       string/c bsjb\001\000\001\000\000\000\000\000\f\000\000\000pdb\ v1.0     Microsoft Roslyn C# debugging symbols version 1.0
28942
28943#.sbr
289440	string	\000\002\000\007\000	MSVC .sbr
28945>5	string 	>\0	%s
28946
28947#.bsc
289480	string	\002\000\002\001	MSVC .bsc
28949
28950#.wsp
289510	string	1.00\ .0000.0000\000\003	MSVC .wsp version 1.0000.0000
28952# these seem to start with the version and contain menus
28953
28954#------------------------------------------------------------------------------
28955# msx:  file(1) magic for the MSX Home Computer
28956# v1.3
28957# Fabio R. Schmidlin <sd-snatcher@users.sourceforge.net>
28958
28959############## MSX Music file formats ##############
28960
28961# Gigamix MGSDRV music file
289620	string/b		MGS	MSX Gigamix MGSDRV3 music file,
28963>6	ubeshort	0x0D0A
28964>>3	byte		x	\bv%c
28965>>4	byte		x	\b.%c
28966>>5	byte		x	\b%c
28967>>8	string		>\0	\b, title: %s
28968
289691	string/b		mgs2\ 	MSX Gigamix MGSDRV2 music file
28970>6	uleshort	0x80
28971>>0x2E	uleshort	0
28972>>>0x30	string		>\0	\b, title: %s
28973
28974# KSS music file
289750	string/b		KSCC	KSS music file v1.03
28976>0xE	byte		0
28977>>0xF	byte&0x02	0	\b, soundchips: AY-3-8910, SCC(+)
28978>>0xF	byte&0x02	2	\b, soundchip(s): SN76489
28979>>>0xF	byte&0x04	4	stereo
28980>>0xF	byte&0x01	1	\b, YM2413
28981>>0xF	byte&0x08	8	\b, Y8950
28982
289830	string/b		KSSX	KSS music file v1.20
28984>0xE	byte&0xEF	0
28985>>0xF	byte&0x40	0x00	\b, 60Hz
28986>>0xF	byte&0x40	0x40	\b, 50Hz
28987>>0xF	byte&0x02	0	\b, soundchips: AY-3-8910, SCC(+)
28988>>0xF	byte&0x02	0x02	\b, soundchips: SN76489
28989>>>0xF	byte&0x04	0x04	stereo
28990>>0xF	byte&0x01	0x01	\b,
28991>>>0xF	byte&0x18	0x00	\bYM2413
28992>>>0xF	byte&0x18	0x08	\bYM2413, Y8950
28993>>>0xF	byte&0x18	0x18	\bYM2413+Y8950 pseudostereo
28994>>0xF	byte&0x18	0x10	\b, Majyutsushi DAC
28995
28996# Moonblaster for Moonsound
289970	string/b		MBMS
28998>4	byte		0x10	MSX Moonblaster for MoonSound music
28999
29000# Music Player K-kaz
290010	string/b		MPK	MSX Music Player K-kaz song
29002>6	ubeshort	0x0D0A
29003>>3	byte		x	v%c
29004>>4	byte		x	\b.%c
29005>>5	byte		x	\b%c
29006
29007# I don't know why these don't work
29008#0	search/0xFFFF	\r\n.FM9
29009#>0	search/0xFFFF	\r\n#FORMAT	MSX Music Player K-kaz source MML file
29010#0	search/0xFFFF	\r\nFM1\ \=
29011#>0	search/0xFFFF	\r\nPSG1\=
29012#>>0	search/0xFFFF	\r\nSCC1\=		MSX MuSiCa MML source file
29013
29014# OPX Music file
290150x35	beshort		0x0d0a
29016>0x7B	beshort		0x0d0a
29017>>0x7D	byte		0x1a
29018>>>0x87	uleshort	0		MSX OPX Music file
29019>>>>0x86	byte		0		v1.5
29020>>>>>0	string		>\32		\b, title: %s
29021>>>>0x86	byte		1		v2.4
29022>>>>>0	string		>\32		\b, title: %s
29023
29024# SCMD music file
290250x8B	string/b		SCMD
29026>0xCE	uleshort	0	MSX SCMD Music file
29027#>>-2	uleshort	0x6a71	; The file must end with this value. How to code this here?
29028>>0x8F	string		>\0		\b, title: %s
29029
290300	search/0xFFFF	\r\n@title
29031>&0	search/0xFFFF	\r\n@m=[	MSX SCMD source MML file
29032
29033
29034############## MSX image file formats ##############
29035
29036# MSX raw VRAM dump
290370	ubyte		0xFE
29038>1	uleshort	0
29039>>5	uleshort	0
29040>>>3	uleshort	0x37FF		MSX SC2/GRP raw image
29041>>>3	uleshort	0x6A00		MSX Graph Saurus SR5 raw image
29042>>>3	uleshort	>0x769E
29043>>>>3	uleshort	<0x8000		MSX GE5/GE6 raw image
29044>>>>>3	uleshort	0x7FFF		\b, with sprite patterns
29045>>>3	uleshort	0xD3FF		MSX screen 7-12 raw image
29046>>>3	uleshort	0xD400		MSX Graph Saurus SR7/SR8/SRS raw image
29047
29048# Graph Saurus compressed images
290490	ubyte		0xFD
29050>1	uleshort	0
29051>>5	uleshort	0
29052>>>3	uleshort	>0x013D		MSX Graph Saurus compressed image
29053
29054# MSX G9B image file
290550	string/b		G9B
29056>1	uleshort	11
29057>>3	uleshort	>10
29058>>>5	ubyte		>0		MSX G9B image, depth=%d
29059>>>>8	uleshort	x		\b, %dx
29060>>>>10	uleshort	x		\b%d
29061>>>>5	ubyte		<9
29062>>>>>6	ubyte		0
29063>>>>>>7	ubyte		x		\b, codec=%d RGB color palettes
29064>>>>>6	ubyte		64		\b, codec=RGB fixed color
29065>>>>>6	ubyte		128		\b, codec=YJK
29066>>>>>6	ubyte		192		\b, codec=YUV
29067>>>>5	ubyte		>8		codec=RGB fixed color
29068>>>>12	ubyte		0		\b, raw
29069>>>>12	ubyte		1		\b, bitbuster compression
29070
29071############## Other MSX file formats ##############
29072
29073# MSX internal ROMs
290740		ubeshort	0xF3C3
29075>2		uleshort	<0x4000
29076>>8		ubyte		0xC3
29077>>>9		uleshort	<0x4000
29078>>>>0x0B	ubeshort	0x00C3
29079>>>>>0x0D	uleshort	<0x4000
29080>>>>>>0x0F	ubeshort	0x00C3
29081>>>>>>>0x11	uleshort	<0x4000
29082>>>>>>>>0x13	ubeshort	0x00C3
29083>>>>>>>>>0x15	uleshort	<0x4000
29084>>>>>>>>>>0x50	ubyte		0xC3
29085>>>>>>>>>>>0x51	uleshort	<0x4000
29086>>>>>>>>>>>>(9.s)	ubyte	0xC3
29087>>>>>>>>>>>>>&0	uleshort	>0x4000
29088>>>>>>>>>>>>>>&0	ubyte	0xC3		MSX BIOS+BASIC
29089>>>>>>>>>>>>>>>0x002D	ubyte+1	<3		\b. version=MSX%d
29090>>>>>>>>>>>>>>>0x002D	ubyte	2		\b, version=MSX2+
29091>>>>>>>>>>>>>>>0x002D	ubyte	3		\b, version=MSX Turbo-R
29092>>>>>>>>>>>>>>>0x002D	ubyte	>3		\b, version=Unknown MSX %d version
29093>>>>>>>>>>>>>>>0x0006	ubyte	x		\b, VDP.DR=%#2x
29094>>>>>>>>>>>>>>>0x0007	ubyte	x		\b, VDP.DW=%#2x
29095>>>>>>>>>>>>>>>0x002B	ubyte&0xF	0		\b, charset=Japanese
29096>>>>>>>>>>>>>>>0x002B	ubyte&0xF	1		\b, charset=International
29097>>>>>>>>>>>>>>>0x002B	ubyte&0xF	2		\b, charset=Korean
29098>>>>>>>>>>>>>>>0x002B	ubyte&0xF	>2		\b, charset=Unknown id:%d
29099>>>>>>>>>>>>>>>0x002B	ubyte&0x70	0x00		\b, date format=Y-M-D
29100>>>>>>>>>>>>>>>0x002B	ubyte&0x70	0x10		\b, date format=M-D-Y
29101>>>>>>>>>>>>>>>0x002B	ubyte&0x70	0x20		\b, date format=D-M-Y
29102>>>>>>>>>>>>>>>0x002B	ubyte&0x80	0x00		\b, vfreq=60Hz
29103>>>>>>>>>>>>>>>0x002B	ubyte&0x80	0x80		\b, vfreq=50Hz
29104>>>>>>>>>>>>>>>0x002C	ubyte&0x0F	0		\b, keyboard=Japanese
29105>>>>>>>>>>>>>>>0x002C	ubyte&0x0F	1		\b, keyboard=International
29106>>>>>>>>>>>>>>>0x002C	ubyte&0x0F	2		\b, keyboard=French
29107>>>>>>>>>>>>>>>0x002C	ubyte&0x0F	3		\b, keyboard=UK
29108>>>>>>>>>>>>>>>0x002C	ubyte&0x0F	4		\b, keyboard=German
29109>>>>>>>>>>>>>>>0x002C	ubyte&0x0F	5		\b, keyboard=Unknown id:%d
29110>>>>>>>>>>>>>>>0x002C	ubyte&0x0F	6		\b, keyboard=Spanish
29111>>>>>>>>>>>>>>>0x002C	ubyte&0x0F	>6		\b, keyboard=Unknown id:%d
29112>>>>>>>>>>>>>>>0x002C	ubyte&0xF0	0x00		\b, basic=Japanese
29113>>>>>>>>>>>>>>>0x002C	ubyte&0xF0	0x10		\b, basic=International
29114>>>>>>>>>>>>>>>0x002C	ubyte&0xF0	>0x10		\b, basic=Unknown id:%d
29115>>>>>>>>>>>>>>>0x002E	ubyte&1		1		\b, built-in MIDI
29116
29117
291180		string/b		CD
29119>2		uleshort	>0x10
29120>>2		uleshort	<0x4000
29121>>>4		uleshort	<0x4000
29122>>>>6		uleshort	<0x4000
29123>>>>>8		ubyte		0xC3
29124>>>>>>9		uleshort	<0x4000
29125>>>>>>>0x10	ubyte		0xC3
29126>>>>>>>>0x11	uleshort	<0x4000
29127>>>>>>>>>0x14	ubyte		0xC3
29128>>>>>>>>>>0x15	uleshort	<0x4000		MSX2/2+/TR SubROM
29129
291300		string		\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
29131>0x5F0		ubequad		0x8282828244380000
29132>>0x150		ubyte		0x38
29133>>>0x170	string		\20\20\20
29134>>>>0x1E32	string		())
29135>>>>>0x2130	ubequad		0xA5A5594924231807
29136>>>>>0x2138	ubequad		0x4A4A3424488830C0	MSX Kanji Font
29137
29138
29139
29140# MSX extension ROMs
291410	string/b		AB
29142>2	uleshort	0x0010			MSX ROM
29143>>2	uleshort	x			\b, init=%#4x
29144>>4	uleshort	>0			\b, stahdl=%#4x
29145>>6	uleshort	>0			\b, devhdl=%#4x
29146>>8	uleshort	>0			\b, bas=%#4x
29147>2	uleshort	0x4010			MSX ROM
29148>>2	uleshort	x			\b, init=%#04x
29149>>4	uleshort	>0			\b, stahdl=%#04x
29150>>6	uleshort	>0			\b, devhdl=%#04x
29151>>8	uleshort	>0			\b, bas=%#04x
29152>2	uleshort	0x8010			MSX ROM
29153>>2	uleshort	x			\b, init=%#04x
29154>>4	uleshort	>0			\b, stahdl=%#04x
29155>>6	uleshort	>0			\b, devhdl=%#04x
29156>>8	uleshort	>0			\b, bas=%#04x
291570	string/b		AB\0\0
29158>6	uleshort	0
29159>>4	uleshort	>0x400F			MSX-BASIC extension ROM
29160>>>4	uleshort	>0			\b, stahdl=%#04x
29161>>>6	uleshort	>0			\b, devhdl=%#04x
29162>>>0x1C		string		OPLL			\b, MSX-Music
29163>>>>0x18	string		PAC2			\b (external)
29164>>>>0x18	string		APRL			\b (internal)
29165
291660	string/b		AB\0\0\0\0
29167>6	uleshort	>0x400F			MSX device BIOS
29168>>6	uleshort	>0			\b, devhdl=%#04x
29169
29170
291710	string/b		AB
29172#>2	string		5JSuperLAYDOCK		MSX Super Laydock ROM
29173#>3	string		@HYDLIDE3MSX		MSX Hydlide-3 ROM
29174#>3	string		@3\x80IA862		Golvellius MSX1 ROM
29175>2	uleshort	>15
29176>>2	uleshort	<0xC000
29177>>>8	string		\0\0\0\0\0\0\0\0
29178>>>>(2.s&0x3FFF)	uleshort	>0		MSX ROM
29179>>>>>0x10	string		YZ\0\0\0\0		Konami Game Master 2 MSX ROM
29180>>>>>0x10	string		CD			\b, Konami RC-
29181>>>>>>0x12	ubyte		x			\b%d
29182>>>>>>0x13	ubyte/16	x			\b%d
29183>>>>>>0x13	ubyte&0xF	x			\b%d
29184>>>>>0x10	string		EF			\b, Konami RC-
29185>>>>>>0x12	ubyte		x			\b%d
29186>>>>>>0x13	ubyte/16	x			\b%d
29187>>>>>>0x13	ubyte&0xF	x			\b%d
29188>>>>>2	uleshort	x			\b, init=%#04x
29189>>>>>4	uleshort	>0			\b, stahdl=%#04x
29190>>>>>6	uleshort	>0			\b, devhdl=%#04x
29191>>>>>8	uleshort	>0			\b, bas=%#04x
29192>>>2	uleshort	0
29193>>>>4	uleshort	0
29194>>>>>6	uleshort	0
29195>>>>>>8	uleshort	>0			MSX BASIC program in ROM, bas=%#04x
29196
291970x4000	string/b		AB
29198>0x4002	uleshort	>0x400F
29199>>0x400A	string		\0\0\0\0\0\0	MSX ROM with nonstandard page order
29200>>>0x4002	uleshort	x			\b, init=%#04x
29201>>>0x4004	uleshort	>0			\b, stahdl=%#04x
29202>>>0x4006	uleshort	>0			\b, devhdl=%#04x
29203>>>0x4008	uleshort	>0			\b, bas=%#04x
29204
292050x8000	string/b		AB
29206>0x8002	uleshort	>0x400F
29207>>0x800A	string		\0\0\0\0\0\0	MSX ROM with nonstandard page order
29208>>>0x8002	uleshort	x			\b, init=%#04x
29209>>>0x8004	uleshort	>0			\b, stahdl=%#04x
29210>>>0x8006	uleshort	>0			\b, devhdl=%#04x
29211>>>0x8008	uleshort	>0			\b, bas=%#04x
29212
29213
292140x3C000	string/b		AB
29215>0x3C008	string		\0\0\0\0\0\0\0\0	MSX MegaROM with nonstandard page order
29216>>0x3C002	uleshort	x			\b, init=%#04x
29217>>0x3C004	uleshort	>0			\b, stahdl=%#04x
29218>>0x3C006	uleshort	>0			\b, devhdl=%#04x
29219>>0x3C008	uleshort	>0			\b, bas=%#04x
29220
29221# MSX BIN file
29222#0	byte		0xFE
29223#>1	uleshort	>0x8000
29224#>>3	uleshort	>0x8004
29225#>>>5	uleshort	>0x8000			MSX BIN file
29226
29227# MSX-BASIC file
292280	byte		0xFF
29229>3	uleshort	0x000A
29230>>1	uleshort	>0x8000			MSX-BASIC program
29231
29232# MSX .CAS file
292330	string/b	\x1F\xA6\xDE\xBA\xCC\x13\x7D\x74	MSX cassette archive
29234
29235# Mega-Assembler file
292360	byte		0xFE
29237>1	uleshort	0x0001
29238>>5	uleshort	0xffff
29239>>>6	byte		0x0A		MSX Mega-Assembler source
29240
29241# Execrom Patchfile
292420	string		ExecROM\ patchfile\x1A	MSX ExecROM patchfile
29243>0x12	ubyte/16	x		v%d
29244>0x12	ubyte&0xF	x		\b.%d
29245>0x13	ubyte		x		\b, contains %d patches
29246
29247# Konami's King's Valley-2 custom stage (ELG file)
292484	uleshort	0x0900
29249>0xF	byte		1
29250>>0x14	byte		0
29251>>>0x1E	string		\040\040\040
29252>>>>0x23	byte	1
29253>>>>>0x25	byte	0
29254>>>>>>0x15	string	>\x30
29255>>>>>>>0x15	string	<\x5A		Konami King's Valley-2 custom stage, title: "%-8.8s"
29256>>>>>>>>0x1D	byte	<32	\b, theme: %d
29257
29258# Metal Gear 1 savegame
29259#0x4F	string	\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF
29260#>>0x60	string	\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF
29261#>>>0x7B	string	\0x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00	Metal Gear 1 savegame
29262
29263# ------------------------------------------------------------------------
29264# $File: mup,v 1.5 2017/03/17 21:35:28 christos Exp $
29265# mup: file(1) magic for Mup (Music Publisher) input file.
29266#
29267# From: Abel Cheung <abel (@) oaka.org>
29268#
29269# NOTE: This header is mainly proposed in the Arkkra mailing list,
29270# and is not a mandatory header because of old mup input file
29271# compatibility. Noteedit also use mup format, but is not forcing
29272# user to use any header as well.
29273#
292740		search/1	//!Mup		Mup music publication program input text
29275>6		string		-Arkkra		(Arkkra)
29276>>13		string		-
29277>>>16		string		.
29278>>>>14		string		x		\b, need V%.4s
29279>>>15		string		.
29280>>>>14		string		x		\b, need V%.3s
29281>6		string		-
29282>>9		string		.
29283>>>7		string		x		\b, need V%.4s
29284>>8		string		.
29285>>>7		string		x		\b, need V%.3s
29286#------------------------------------------------------------------------------
29287# $File: music,v 1.1 2011/11/25 03:28:17 christos Exp $
29288# music:  file (1) magic for music formats
29289
29290# BWW format used by Bagpipe Music Writer Gold by Robert MacNeil Musicworks
29291# and Bagpipe Writer by Doug Wickstrom
29292#
292930	string		Bagpipe		Bagpipe
29294>8	string		Reader		Reader
29295>>15	string		>\0		(version %.3s)
29296>8	string		Music\ Writer	Music Writer
29297>>20	string		:
29298>>>21	string		>\0		(version %.3s)
29299>>21	string		Gold		Gold
29300>>>25	string		:
29301>>>>26	string		>\0		(version %.3s)
29302
29303
29304#------------------------------------------------------------------------------
29305# nasa:	file(1) magic
29306
29307# From: Barry Carter <carter.barry@gmail.com>
293080	string	DAF/SPK				NASA SPICE file (binary format)
293090	string	DAFETF\ NAIF\ DAF\ ENCODED	NASA SPICE file (transfer format)
29310
29311#-----------------------------------------------------------------------------
29312# $File: natinst,v 1.6 2014/06/03 19:17:27 christos Exp $
29313# natinst:  file(1) magic for National Instruments Code Files
29314
29315#
29316# From <egamez@fcfm.buap.mx> Enrique Gamez-Flores
29317# version 1
29318# Many formats still missing, we use, for the moment LabVIEW
29319# We guess VXI format file. VISA, LabWindowsCVI, BridgeVIEW, etc, are missing
29320#
293210       string          RSRC            National Instruments,
29322# Check if it's a LabVIEW File
29323>8      string          LV              LabVIEW File,
29324# Check which kind of file it is
29325>>10    string          SB              Code Resource File, data
29326>>10    string          IN              Virtual Instrument Program, data
29327>>10    string          AR              VI Library, data
29328# This is for Menu Libraries
29329>8      string          LMNULBVW        Portable File Names, data
29330# This is for General Resources
29331>8      string          rsc             Resources File, data
29332# This is for VXI Package
293330       string          VMAP            National Instruments, VXI File, data
29334
29335#------------------------------------------------------------------------------
29336# $File: ncr,v 1.8 2014/04/30 21:41:02 christos Exp $
29337# ncr:  file(1) magic for NCR Tower objects
29338#
29339# contributed by
29340# Michael R. Wayne  ***  TMC & Associates  ***  INTERNET: wayne@ford-vax.arpa
29341# uucp: {philabs | pyramid} !fmsrl7!wayne   OR   wayne@fmsrl7.UUCP
29342#
293430	beshort		000610	Tower/XP rel 2 object
29344>12	   belong		>0	not stripped
29345>20	   beshort		0407	executable
29346>20	   beshort		0410	pure executable
29347>22	   beshort		>0	- version %d
293480	beshort		000615	Tower/XP rel 2 object
29349>12	   belong		>0	not stripped
29350>20	   beshort		0407	executable
29351>20	   beshort		0410	pure executable
29352>22	   beshort		>0	- version %d
293530	beshort		000620	Tower/XP rel 3 object
29354>12	   belong		>0	not stripped
29355>20	   beshort		0407	executable
29356>20	   beshort		0410	pure executable
29357>22	   beshort		>0	- version %d
293580	beshort		000625	Tower/XP rel 3 object
29359>12	   belong		>0	not stripped
29360>20	   beshort		0407	executable
29361>20	   beshort		0410	pure executable
29362>22	   beshort		>0	- version %d
293630	beshort		000630	Tower32/600/400 68020 object
29364>12	   belong		>0	not stripped
29365>20	   beshort		0407	executable
29366>20	   beshort		0410	pure executable
29367>22	   beshort		>0	- version %d
293680	beshort		000640	Tower32/800 68020
29369>18	   beshort		&020000	w/68881 object
29370>18	   beshort		&040000	compatible object
29371>18	   beshort		&060000	object
29372>20	   beshort		0407	executable
29373>20	   beshort		0413	pure executable
29374>12	   belong		>0	not stripped
29375>22	   beshort		>0	- version %d
293760	beshort		000645	Tower32/800 68010
29377>18	   beshort		&040000	compatible object
29378>18	   beshort		&060000 object
29379>20	   beshort		0407	executable
29380>20	   beshort		0413	pure executable
29381>12	   belong		>0	not stripped
29382>22	   beshort		>0	- version %d
29383
29384#------------------------------------------------------------------------------
29385# $File: netbsd,v 1.26 2019/01/01 03:11:23 christos Exp $
29386# netbsd:  file(1) magic for NetBSD objects
29387#
29388# All new-style magic numbers are in network byte order.
29389# The old-style magic numbers are indistinguishable from the same magic
29390# numbers used in other systems, and are handled, for all those systems,
29391# in aout.
29392#
29393
293940	name	netbsd-detail
29395>20	lelong	x		@%#x
29396>4	lelong	>0		\b+T=%d
29397>8	lelong	>0		\b+D=%d
29398>12	lelong	>0		\b+B=%d
29399>16	lelong	>0		\b+S=%d
29400>24	lelong	>0		\b+TR=%d
29401>28	lelong	>0		\b+TD=%d
29402
294030	name			netbsd-4096
29404>0	byte			&0x80
29405>>20	lelong			<4096		shared library
29406>>20	lelong			=4096		dynamically linked executable
29407>>20	lelong			>4096		dynamically linked executable
29408>0	byte			^0x80		executable
29409>16	lelong			>0		not stripped
29410
294110	name			netbsd-8192
29412>0	byte			&0x80
29413>>20	lelong			<8192		shared library
29414>>20	lelong			=8192		dynamically linked executable
29415>>20	lelong			>8192		dynamically linked executable
29416>0	byte			^0x80		executable
29417>16	lelong			>0		not stripped
29418>0	use			netbsd-detail
29419
294200	name			netbsd-normal
29421>0	byte			&0x80		dynamically linked executable
29422>0	byte			^0x80
29423>>0	byte			&0x40		position independent
29424>>20	lelong			!0		executable
29425>>20	lelong			=0		object file
29426>16	lelong			>0		not stripped
29427>0	use			netbsd-detail
29428
294290	name			netbsd-pure
29430>0	byte			&0x80		dynamically linked executable
29431>0	byte			^0x80		executable
29432>16	lelong			>0		not stripped
29433>0	use			netbsd-detail
29434
294350	name			netbsd-core
29436>12	string			>\0		from '%s'
29437>32	lelong			!0		(signal %d)
29438
294390	belong&0377777777	041400413	a.out NetBSD/i386 demand paged
29440>0	use			netbsd-4096
29441
294420	belong&0377777777	041400410	a.out NetBSD/i386 pure
29443>0	use			netbsd-pure
29444
294450	belong&0377777777	041400407	a.out NetBSD/i386
29446>0	use			netbsd-normal
29447
294480	belong&0377777777	041400507	a.out NetBSD/i386 core
29449>0	use			netbsd-core
29450
294510	belong&0377777777	041600413	a.out NetBSD/m68k demand paged
29452>0	use			\^netbsd-8192
29453
294540	belong&0377777777	041600410	a.out NetBSD/m68k pure
29455>0	use			\^netbsd-pure
29456
294570	belong&0377777777	041600407	a.out NetBSD/m68k
29458>0	use			\^netbsd-normal
29459
294600	belong&0377777777	041600507	a.out NetBSD/m68k core
29461>0	use			\^netbsd-core
29462
294630	belong&0377777777	042000413	a.out NetBSD/m68k4k demand paged
29464>0	use			\^netbsd-4096
29465
294660	belong&0377777777	042000410	a.out NetBSD/m68k4k pure
29467>0	use			\^netbsd-pure
29468
294690	belong&0377777777	042000407	a.out NetBSD/m68k4k
29470>0	use			\^netbsd-normal
29471
294720	belong&0377777777	042000507	a.out NetBSD/m68k4k core
29473>0	use			\^netbsd-core
29474
294750	belong&0377777777	042200413	a.out NetBSD/ns32532 demand paged
29476>0	use			netbsd-4096
29477
294780	belong&0377777777	042200410	a.out NetBSD/ns32532 pure
29479>0	use			netbsd-pure
29480
294810	belong&0377777777	042200407	a.out NetBSD/ns32532
29482>0	use			netbsd-normal
29483
294840	belong&0377777777	042200507	a.out NetBSD/ns32532 core
29485>0	use			netbsd-core
29486
294870	belong&0377777777	045200507	a.out NetBSD/powerpc core
29488>0	use			netbsd-core
29489
294900	belong&0377777777	042400413	a.out NetBSD/SPARC demand paged
29491>0	use			\^netbsd-8192
29492
294930	belong&0377777777	042400410	a.out NetBSD/SPARC pure
29494>0	use			\^netbsd-pure
29495
294960	belong&0377777777	042400407	a.out NetBSD/SPARC
29497>0	use			\^netbsd-normal
29498
294990	belong&0377777777	042400507	a.out NetBSD/SPARC core
29500>0	use			\^netbsd-core
29501
295020	belong&0377777777	042600413	a.out NetBSD/pmax demand paged
29503>0	use			netbsd-4096
29504
295050	belong&0377777777	042600410	a.out NetBSD/pmax pure
29506>0	use			\^netbsd-pure
29507
295080	belong&0377777777	042600407	a.out NetBSD/pmax
29509>0	use			netbsd-normal
29510
295110	belong&0377777777	042600507	a.out NetBSD/pmax core
29512>0	use			netbsd-core
29513
295140	belong&0377777777	043000413	a.out NetBSD/vax 1k demand paged
29515>0	use			netbsd-4096
29516
295170	belong&0377777777	043000410	a.out NetBSD/vax 1k pure
29518>0	use			netbsd-pure
29519
295200	belong&0377777777	043000407	a.out NetBSD/vax 1k
29521>0	use			netbsd-normal
29522
295230	belong&0377777777	043000507	a.out NetBSD/vax 1k core
29524>0	use			netbsd-core
29525
295260	belong&0377777777	045400413	a.out NetBSD/vax 4k demand paged
29527>0	use			netbsd-4096
29528
295290	belong&0377777777	045400410	a.out NetBSD/vax 4k pure
29530>0	use			netbsd-pure
29531
295320	belong&0377777777	045400407	a.out NetBSD/vax 4k
29533>0	use			netbsd-normal
29534
295350	belong&0377777777	045400507	a.out NetBSD/vax 4k core
29536>0	use			netbsd-core
29537
29538# NetBSD/alpha does not support (and has never supported) a.out objects,
29539# so no rules are provided for them.  NetBSD/alpha ELF objects are
29540# dealt with in "elf".
295410	lelong		0x00070185		ECOFF NetBSD/alpha binary
29542>10	leshort		0x0001			not stripped
29543>10	leshort		0x0000			stripped
295440	belong&0377777777	043200507	a.out NetBSD/alpha core
29545>12	string			>\0		from '%s'
29546>32	lelong			!0		(signal %d)
29547
295480	belong&0377777777	043400413	a.out NetBSD/mips demand paged
29549>0	use			\^netbsd-8192
29550
29551>16	belong			>0		not stripped
295520	belong&0377777777	043400410	a.out NetBSD/mips pure
29553>0	use			netbsd-pure
29554
295550	belong&0377777777	043400407	a.out NetBSD/mips
29556>0	use			netbsd-normal
29557
295580	belong&0377777777	043400507	a.out NetBSD/mips core
29559>0	use			netbsd-core
29560
295610	belong&0377777777	043600413	a.out NetBSD/arm32 demand paged
29562>0	use			netbsd-4096
29563
295640	belong&0377777777	043600410	a.out NetBSD/arm32 pure
29565>0	use			netbsd-pure
29566
295670	belong&0377777777	043600407	a.out NetBSD/arm32
29568>0	use			netbsd-normal
29569
29570# NetBSD/arm26 has always used ELF objects, but it shares a core file
29571# format with NetBSD/arm32.
295720	belong&0377777777	043600507	a.out NetBSD/arm core
29573>0	use			netbsd-core
29574
29575# Kernel core dump format
295760	belong&0x0000ffff 0x00008fca	NetBSD kernel core file
29577>0	belong&0x03ff0000 0x00000000	\b, Unknown
29578>0	belong&0x03ff0000 0x00010000	\b, sun 68010/68020
29579>0	belong&0x03ff0000 0x00020000	\b, sun 68020
29580>0	belong&0x03ff0000 0x00640000	\b, 386 PC
29581>0	belong&0x03ff0000 0x00860000	\b, i386 BSD
29582>0	belong&0x03ff0000 0x00870000	\b, m68k BSD (8K pages)
29583>0	belong&0x03ff0000 0x00880000	\b, m68k BSD (4K pages)
29584>0	belong&0x03ff0000 0x00890000	\b, ns32532 BSD
29585>0	belong&0x03ff0000 0x008a0000	\b, SPARC/32 BSD
29586>0	belong&0x03ff0000 0x008b0000	\b, pmax BSD
29587>0	belong&0x03ff0000 0x008c0000	\b, vax BSD (1K pages)
29588>0	belong&0x03ff0000 0x008d0000	\b, alpha BSD
29589>0	belong&0x03ff0000 0x008e0000	\b, mips BSD (Big Endian)
29590>0	belong&0x03ff0000 0x008f0000	\b, arm6 BSD
29591>0	belong&0x03ff0000 0x00900000	\b, m68k BSD (2K pages)
29592>0	belong&0x03ff0000 0x00910000	\b, sh3 BSD
29593>0	belong&0x03ff0000 0x00950000	\b, ppc BSD (Big Endian)
29594>0	belong&0x03ff0000 0x00960000	\b, vax BSD (4K pages)
29595>0	belong&0x03ff0000 0x00970000	\b, mips1 BSD
29596>0	belong&0x03ff0000 0x00980000	\b, mips2 BSD
29597>0	belong&0x03ff0000 0x00990000	\b, m88k BSD
29598>0	belong&0x03ff0000 0x00920000	\b, parisc BSD
29599>0	belong&0x03ff0000 0x009b0000	\b, sh5/64 BSD
29600>0	belong&0x03ff0000 0x009c0000	\b, SPARC/64 BSD
29601>0	belong&0x03ff0000 0x009d0000	\b, amd64 BSD
29602>0	belong&0x03ff0000 0x009e0000	\b, sh5/32 BSD
29603>0	belong&0x03ff0000 0x009f0000	\b, ia64 BSD
29604>0	belong&0x03ff0000 0x00b70000	\b, aarch64 BSD
29605>0	belong&0x03ff0000 0x00b80000	\b, or1k BSD
29606>0	belong&0x03ff0000 0x00b90000	\b, Risk-V BSD
29607>0	belong&0x03ff0000 0x00c80000	\b, hp200 BSD
29608>0	belong&0x03ff0000 0x012c0000	\b, hp300 BSD
29609>0	belong&0x03ff0000 0x020b0000	\b, hp800 HP-UX
29610>0	belong&0x03ff0000 0x020c0000	\b, hp200/hp300 HP-UX
29611>0	belong&0xfc000000 0x04000000	\b, CPU
29612>0	belong&0xfc000000 0x08000000	\b, DATA
29613>0	belong&0xfc000000 0x10000000	\b, STACK
29614>4	leshort	x			\b, (headersize = %d
29615>6	leshort	x			\b, segmentsize = %d
29616>8	lelong	x			\b, segments = %d)
29617
29618# little endian only for now.
296190	name		ktrace
29620>4	leshort		7
29621>>6	leshort		<3		NetBSD ktrace file version %d
29622>>>12	string		x		from %s
29623>>>56	string		x		\b, emulation %s
29624>>>8	lelong		<65536		\b, pid=%d
29625
2962656	string		netbsd
29627>0	use		ktrace
2962856	string		linux
29629>0	use		ktrace
2963056	string		sunos
29631>0	use		ktrace
2963256	string		hpux
29633>0	use		ktrace
29634
29635#------------------------------------------------------------------------------
29636# $File: netscape,v 1.8 2017/03/17 21:35:28 christos Exp $
29637# netscape:  file(1) magic for Netscape files
29638# "H. Nanosecond" <aldomel@ix.netcom.com>
29639# version 3 and 4 I think
29640#
29641
29642# Netscape Address book  .nab
296430	string \000\017\102\104\000\000\000\000\000\000\001\000\000\000\000\002\000\000\000\002\000\000\004\000 Netscape Address book
29644
29645# Netscape Communicator address book
296460   string   \000\017\102\111 Netscape Communicator address book
29647
29648# .snm Caches
296490	string		#\ Netscape\ folder\ cache	Netscape folder cache
296500	string	\000\036\204\220\000	Netscape folder cache
29651# .n2p
29652# Net 2 Phone
29653#0	string	123\130\071\066\061\071\071\071\060\070\061\060\061\063\060
296540	string	SX961999	Net2phone
29655
29656#
29657#This is files ending in .art, FIXME add more rules
296580	string	JG\004\016\0\0\0\0	AOL ART image
296590	string	JG\003\016\0\0\0\0	AOL ART image
29660
29661#------------------------------------------------------------------------------
29662# $File: netware,v 1.5 2020/09/04 16:30:51 christos Exp $
29663# netware:  file(1) magic for NetWare Loadable Modules (NLMs)
29664# From: Mads Martin Joergensen <mmj@suse.de>
29665# URL:		https://en.wikipedia.org/wiki/NetWare_Loadable_Module
29666
296670	string	NetWare\ Loadable\ Module	NetWare Loadable Module
29668#!:mime	application/octet-stream
29669!:ext	nlm
29670
29671
29672#------------------------------------------------------------------------------
29673# $File: news,v 1.6 2009/09/19 16:28:11 christos Exp $
29674# news:  file(1) magic for SunOS NeWS fonts (not "news" as in "netnews")
29675#
296760	string		StartFontMetrics	ASCII font metrics
296770	string		StartFont	ASCII font bits
296780	belong		0x137A2944	NeWS bitmap font
296790	belong		0x137A2947	NeWS font family
296800	belong		0x137A2950	scalable OpenFont binary
296810	belong		0x137A2951	encrypted scalable OpenFont binary
296828	belong		0x137A2B45	X11/NeWS bitmap font
296838	belong		0x137A2B48	X11/NeWS font family
29684
29685#------------------------------------------------------------------------------
29686# $File: nifty,v 1.1 2022/02/14 16:51:15 christos Exp $
29687# file(1) magic for the NIfTI file format
29688
29689# Type: NIfTI, Neuroimaging file format
29690# URL:  https://nifti.nimh.nih.gov/
29691# From: Yann Leprince <yann.leprince@cea.fr>, 2022
29692
29693344	string		n+1\0		NIfTI-1 neuroimaging data,
29694!:mime	image/x.nifti
29695!:ext	nii
29696>0	use		nifti1
29697344	string		ni1\0		NIfTI-1 neuroimaging data header,
29698!:mime	image/x.nifti
29699!:ext	hdr
29700>0	use		nifti1
29701
297024	string		n+2\0\r\n\032\n	NIfTI-2 neuroimaging data,
29703!:mime	image/x.nifti
29704!:ext	nii
29705>0	use		nifti2
297064	string		ni2\0\r\n\032\n	NIfTI-2 neuroimaging data header,
29707!:mime	image/x.nifti
29708!:ext	hdr
29709>0	use		nifti2
29710
29711# Main subroutine for NIfTI-1
297120	name		nifti1
29713>0	clear		x
29714>0	lelong		=348		little endian
29715>>70	use		nifti-datatype-le
29716>>112	lefloat	!0		with scaling
29717>>0	use		nifti1-dim-le
29718>>252	leshort	>0		\b, with qform
29719>>>252	use		xform-code-nifti1-le
29720>>254	leshort	>0		\b, with sform
29721>>>254	use		xform-code-nifti1-le
29722>>136	string		>\0		\b, description: %s
29723>0	belong		=348		big endian
29724>>70	use		\^nifti-datatype-le
29725>>112	befloat	!0		with scaling
29726>>0	use		\^nifti1-dim-le
29727>>252	beshort	>0		\b, with qform
29728>>>252	use		\^xform-code-nifti1-le
29729>>254	beshort	>0		\b, with sform
29730>>>254	use		\^xform-code-nifti1-le
29731>>136	string		>\0		\b, description: %s
29732>0	default	x
29733>>0	long		x		invalid sizeof_hdr=%d
29734
29735# Main subroutine for NIfTI-2
297360	name		nifti2
29737>0	clear		x
29738>0	lelong		=540		little endian
29739>>12	use		nifti-datatype-le
29740>>176	lefloat	!0		with scaling
29741>>0	use		nifti2-dim-le
29742>>344	lelong		>0		\b, with qform
29743>>>344	use		xform-code-nifti2-le
29744>>348	lelong		>0		\b, with sform
29745>>>348	use		xform-code-nifti2-le
29746>>240	string		>\0		\b, description: %s
29747>0	belong		=540		big endian
29748>>12	use		\^nifti-datatype-le
29749>>176	befloat	!0		with scaling
29750>>0	use		\^nifti2-dim-le
29751>>344	lelong		>0		\b, with qform
29752>>>344	use		\^xform-code-nifti2-le
29753>>348	lelong		>0		\b, with sform
29754>>>348	use		\^xform-code-nifti2-le
29755>>240	string		>\0		\b, description: %s
29756>0	default	x
29757>>0	long		x		invalid sizeof_hdr=%d
29758
29759
29760# Other subroutines for details of NIfTI files
29761
297620	name		nifti-datatype-le
29763>0	clear		x
29764>0	leshort	=1		\b, binary datatype
29765>0	leshort	=2		\b, uint8 datatype
29766>0	leshort	=4		\b, int16 datatype
29767>0	leshort	=8		\b, int32 datatype
29768>0	leshort	=16		\b, float32 datatype
29769>0	leshort	=32		\b, complex64 datatype
29770>0	leshort	=64		\b, float64 datatype
29771>0	leshort	=128		\b, RGB24 datatype
29772>0	leshort	=256		\b, int8 datatype
29773>0	leshort	=512		\b, uint16 datatype
29774>0	leshort	=768		\b, uint32 datatype
29775>0	leshort	=1024		\b, int64 datatype
29776>0	leshort	=1280		\b, uint64 datatype
29777>0	leshort	=1536		\b, float128 datatype
29778>0	leshort	=1792		\b, complex128 datatype
29779>0	leshort	=2048		\b, complex256 datatype
29780>0	leshort	=2304		\b, RGBA32 datatype
29781>0	default	x
29782>>0	leshort	x		\b, unknown datatype 0x%x
29783>>2	leshort	x		(%d bits/pixel)
29784
297850	name		nifti1-dim-le
29786>0	clear		x
29787>40	leshort	<0		\b, INVALID dim[0]=%d
29788>40	leshort	>7		\b, INVALID dim[0]=%d
29789>0	default	x
29790>>40	leshort	x		\b, %d-dimensional (size
29791>>42	leshort	x		%d
29792>>40	leshort	>1
29793>>>44	leshort	x		\bx%d
29794>>40	leshort	>2
29795>>>46	leshort	x		\bx%d
29796>>40	leshort	>3
29797>>>48	leshort	x		\bx%d
29798>>40	leshort	>4
29799>>>50	leshort	x		\bx%d
29800>>40	leshort	>5
29801>>>52	leshort	x		\bx%d
29802>>40	leshort	>6
29803>>>54	leshort	x		\bx%d
29804>>80	lefloat	x		\b, voxel size %f
29805>>40	leshort	>1
29806>>>84	lefloat	x		x %f
29807>>40	leshort	>2
29808>>>88	lefloat	x		x %f
29809>>123	use		nifti1-xyz-unit
29810>>40	leshort	>3
29811>>>92	lefloat	x		x %f
29812>>>123	use		nifti1-t-unit
29813>>40	leshort	x		\b)
29814
298150	name		nifti2-dim-le
29816>0	clear		x
29817>16	lequad		<0		\b, INVALID dim[0]=%lld
29818>16	lequad		>7		\b, INVALID dim[0]=%lld
29819>0	default	x
29820>>16	lequad		x		\b, %lld-dimensional (size
29821>>24	lequad		x		%lld
29822>>16	lequad		>1
29823>>>32	lequad		x		\bx%lld
29824>>16	lequad		>2
29825>>>40	lequad		x		\bx%lld
29826>>16	lequad		>3
29827>>>48	lequad		x		\bx%lld
29828>>16	lequad		>4
29829>>>56	lequad		x		\bx%lld
29830>>16	lequad		>5
29831>>>64	lequad		x		\bx%lld
29832>>16	lequad		>6
29833>>>72	lequad		x		\bx%lld,
29834>>112	ledouble	x		\b, voxel size %f
29835>>16	lequad		>1
29836>>>120	ledouble	x		x %f
29837>>16	lequad		>2
29838>>>128	ledouble	x		x %f
29839>>500	use		nifti2-xyz-unit
29840>>16	lequad		>3
29841>>>136	ledouble	x		x %f
29842>>>500	use		nifti2-t-unit
29843>>16	lequad		x		\b)
29844
298450	name		xform-code-nifti1-le
29846>0	leshort	=1		to scanner-based coordinates
29847>0	leshort	=2		to aligned coordinates
29848>0	leshort	=3		to Talairach coordinates
29849>0	leshort	=4		to MNI152 coordinates
29850>0	leshort	=5		to template coordinates
29851
298520	name		xform-code-nifti2-le
29853>0	lelong		=1		to scanner-based coordinates
29854>0	lelong		=2		to aligned coordinates
29855>0	lelong		=3		to Talairach coordinates
29856>0	lelong		=4		to MNI152 coordinates
29857>0	lelong		=5		to template coordinates
29858
298590	name		nifti1-xyz-unit
29860>0	byte		&0x01
29861>>0	byte		^0x02		m
29862>>0	byte		&0x02		micron
29863>0	byte		^0x01
29864>>0	byte		&0x02		mm
29865
298660	name		nifti1-t-unit
29867>0	byte		&0x08
29868>>0	byte		^0x10		s
29869>>0	byte		&0x10		ms
29870>0	byte		^0x08
29871>>0	byte		&0x10		microsecond
29872
298730	name		nifti2-xyz-unit
29874>0	lelong		&0x01
29875>>0	lelong		^0x02		m
29876>>0	lelong		&0x02		micron
29877>0	lelong		^0x01
29878>>0	lelong		&0x02		mm
29879
298800	name		nifti2-t-unit
29881>0	lelong		&0x08
29882>>0	lelong		^0x10		s
29883>>0	lelong		&0x10		ms
29884>0	lelong		^0x08
29885>>0	lelong		&0x10		microsecond
29886
29887#------------------------------------------------------------------------------
29888# $File: nim-lang,v 1.3 2021/07/06 12:34:06 christos Exp $
29889# nim-lang:  file(1) magic for nim
29890# URL:  https://nim-lang.org/
29891
298920	search/8192	import
29893>&0	search/64	os
29894>>&0	use		nim1
29895>&0	default		x
29896>>&0	search/64	osproc
29897>>>&0	use		nim1
29898>>&0	default		x
29899>>>&0	search/64	strutils
29900>>>>&0	use		nim1
29901
299020	name		nim1
29903>&0	search/8192	proc
29904>>&0	use		nim2
29905>&0	default		x
29906>>&0	search/8192	template
29907>>>&0	use		nim2
29908>>&0	default		x
29909>>>&0	search/8192	let
29910>>>>&0	use		nim2
29911
299120	name		nim2
29913>&0	search/8192	when	Nim source code
29914!:ext	nim
29915
29916#------------------------------------------------------------------------------
29917# $File: nitpicker,v 1.8 2019/04/19 00:42:27 christos Exp $
29918# nitpicker:  file(1) magic for Flowfiles.
29919# From: Christian Jachmann <C.Jachmann@gmx.net> https://www.nitpicker.de
299200	string	NPFF	NItpicker Flow File
29921>4	byte	x	V%d.
29922>5	byte	x	%d
29923>6	bedate	x	started: %s
29924>10	bedate	x	stopped: %s
29925>14	belong	x	Bytes: %u
29926>18	belong	x	Bytes1: %u
29927>22	belong	x	Flows: %u
29928>26	belong	x	Pkts: %u
29929
29930#------------------------------------------------------------------------------
29931# $File: numpy,v 1.1 2019/05/09 16:24:36 christos Exp $
29932# numpy: file(1) magic for NumPy array binary serialization format
29933# Reference: https://docs.scipy.org/doc/numpy/reference/generated/numpy.lib.format.html
299340	string		\x93NUMPY	NumPy array,
29935>6	ubyte		x		version %d
29936>7	ubyte		x		\b.%d,
29937>8	uleshort	x		header length %d
29938
29939#------------------------------------------------------------------------------
29940# $File: oasis,v 1.2 2014/06/03 19:17:27 christos Exp $
29941# OASIS
29942# Summary: OASIS stream file
29943# Long description: Open Artwork System Interchange Standard
29944# File extension: .oas
29945# Full name:	Ben Cowley (bcowley@broadcom.com)
29946#		Philip Dixon (pdixon@broadcom.com)
29947# Reference: http://www.wrcad.com/oasis/oasis-3626-042303-draft.pdf
29948#		(see page 3)
299490	string	%SEMI-OASIS\r\n		OASIS Stream file
29950
29951#------------------------------------------------------------------------------
29952# $File: ocaml,v 1.5 2010/09/20 18:55:20 rrt Exp $
29953# ocaml: file(1) magic for Objective Caml files.
299540	string	Caml1999	OCaml
29955>8	string	X		exec file
29956>8	string	I		interface file (.cmi)
29957>8	string	O		object file (.cmo)
29958>8	string	A		library file (.cma)
29959>8	string	Y		native object file (.cmx)
29960>8	string	Z		native library file (.cmxa)
29961>8	string	M		abstract syntax tree implementation file
29962>8	string	N		abstract syntax tree interface file
29963>9	string	>\0		(Version %3.3s)
29964
29965#------------------------------------------------------------------------------
29966# $File: octave,v 1.4 2009/09/19 16:28:11 christos Exp $
29967# octave binary data file(1) magic, from Dirk Eddelbuettel <edd@debian.org>
299680	string		Octave-1-L	Octave binary data (little endian)
299690	string		Octave-1-B	Octave binary data (big endian)
29970
29971#------------------------------------------------------------------------------
29972# $File: ole2compounddocs,v 1.19 2022/09/11 20:52:40 christos Exp $
29973# Microsoft OLE 2 Compound Documents : file(1) magic for Microsoft Structured
29974# storage (https://en.wikipedia.org/wiki/Compound_File_Binary_Format)
29975# Additional tests for OLE 2 Compound Documents should be under this recipe.
29976# reference:	https://www.openoffice.org/sc/compdocfileformat.pdf
29977
299780   string  \320\317\021\340\241\261\032\341
29979# https://digital-preservation.github.io/droid/
29980# skip droid skeleton like fmt-39-signature-id-128.doc by valid version
29981>0x1A	ushort		!0xABAB		OLE 2 Compound Document
29982#>0x1C	uleshort		x			\b, endnian %#4.4x
29983# big endian not tested
29984>>0x1C	ubeshort		=0xfffe			\b, big-endian
29985>>>546	string	jbjb			: Microsoft Word Document
29986!:mime	application/msword
29987!:apple	MSWDWDBN
29988!:ext	doc
29989# Byte Order 0xFFFE means little-endian found in real world applications
29990#>>0x1C	uleshort		=0xfffe			\b, little-endian
29991>>0x1C	uleshort		=0xfffe
29992# From:		Joerg Jenderek
29993# Major Version 3 or 4
29994>>>0x1A	uleshort		x			\b, v%u
29995# Minor Version 32h=50 3Bh=59 3Eh=62
29996>>>0x18	uleshort		x			\b.%u
29997# SecID of first sector of the directory stream is often 1 but high like 3144h
29998>>>48	ulelong			x			\b, SecID %#x
29999# Sector Shift Exponent in short-stream container stream: 6~64 bytes
30000>>>32	uleshort		!6			\b, exponent of short stream %u
30001# total number of sectors used for the FAT
30002>>>44	ulelong			>1			\b, %u FAT sectors
30003# SecID of first sector of the short-sector allocation table (Mini FAT)
30004# or -2 (End Of ChainSecID) if not extant
30005>>>60	ulelong			!0xffFFffFE		\b, Mini FAT start sector %#x
30006# total number of sectors used for the short-sector allocation table
30007>>>64	ulelong			!1			\b, %u Mini FAT sector
30008# plural s
30009>>>>64	ulelong			>1			\bs
30010# SecID of first sector of the master sector allocation table (DIFAT)
30011# or -2 (End Of Chain SecID) if no additional sectors used
30012>>>68	ulelong			!0xffFFffFE		\b, DIFAT start sector %#x
30013# total number of sectors used for the master sector allocation table (DIFAT)
30014>>>72	ulelong			>0			\b, %u DIFAT sectors
30015# First part of the master sector allocation table (DIFAT) containing 109 SecIDs
30016#>>>76 	ubequad			x			\b, DIFAT=%#16.16llx
30017#>>>84 	ubequad			x			\b%16.16llx...
30018# pointer to root entry only works with standard configuration for SecID ~< 800h
30019# Red-Carpet-presentation-1.0-1.sdd sg10.sdv 2000_GA_Annual_Review_Data.xls
30020# "ORLEN Factbook 2017.xls" XnView_metadata.doc
30021# "Barham, Lisa - Die Shopping-Prinzessinnen.doc" then not recognized
30022>>>48	ulelong			>0x800			too big for FILE_BYTES_MAX = 1 MiB
30023# Sector Shift Exponent 9~512 for major version 3 or C~4096 for major version 4
30024>>>0x1E	uleshort		0xc			\b, blocksize 4096
30025# jump to one block (4096 bytes per block) before root storage block
30026>>>>(48.l*4096)	ubyte	x
30027>>>>>&4095 	use		ole2-directory
30028#>>>0x1E	uleshort		9			\b, blocksize 512
30029>>>0x1E	uleshort		9
30030# jump to one block (512 bytes per block) before root storage block
30031# in 5.37 only true for offset ~< FILE_BYTES_MAX=7 MiB defined in ../../src/file.h
30032>>>>(48.l*512)	ubyte		x
30033>>>>>&511 	use		ole2-directory
30034# check directory entry structure and display types by GUID
300350	name			ole2-directory
30036# directory entry name like "Root Entry"
30037#>0 	lestring16	x 			\b, 1st %.10s
30038# type of the entry; 5~Root storage
30039#>66 	ubyte		x			\b, type %x
30040# node colour of the entry: 00H ~ Red 01H ~ Black
30041#>67 	ubyte		x			\b, color %x
30042# the DirIDs of the child nodes. Should both be -1 in the root storage entry
30043#>68 	bequad		!0xffffffffffffffff	\b, DirIDs %llx
30044# second directory entry name like VisioDocument Control000
30045#>128	lestring16	x \b, 2nd %.20s
30046# third directory entry like WordDocument
30047#>256	lestring16	x \b, 3rd %.20s
30048# forth
30049#>384	lestring16	x \b, 4th %.10s
30050# 5th
30051#>512	lestring16	x \b, 5th %.10s
30052# 6th
30053#>640	lestring16	x \b, 6th %.10s
30054# 7th
30055#>768	lestring16	x \b, 7th %.10s
30056#	https://wikileaks.org/ciav7p1/cms/page_13762814.html
30057#	https://m.blog.naver.com/superman4u/40047693679
30058#	https://misc.daniel-marschall.de/projects/guid_analysis/guid.txt
30059#	https://toolslick.com/conversion/data/guid
30060#>80 	ubequad		!0			\b, clsid %#16.16llx
30061#>>88 	ubequad		x			\b%16.16llx
30062# test for "Root Entry" inside directory by type 5 value
30063>66 	ubyte		5
30064# look for CLSID GUID 0
30065>>88 	ubequad		0x0
30066>>>80 	ubequad		0x0
30067# - Microstation V8 DGN files (www.bentley.com)
30068# URL:	https://en.wikipedia.org/wiki/MicroStation
30069#   Last update on 10/23/2006 by Lester Hightower
30070#   07/24/2019 by Joerg Jenderek
30071# Second directory entry name like Dgn~H Dgn~S
30072>>>>128 	lestring16	Dgn~			: Microstation V8 CAD
30073#!:mime	application/x-ole-storage
30074!:mime	application/x-bentley-dgn
30075# http://www.q-cad.com/files/samples_cad_files/1344468165.dgn
30076!:ext	dgn
30077#
30078# URL:	http://fileformats.archiveteam.org/wiki/WordPerfect
30079# Second directory entry name PerfectOffice_
30080>>>>128 	lestring16	PerfectOffice_		: WordPerfect 7-X3 presentations Master, Document or Graphic
30081!:mime	application/vnd.wordperfect
30082# https://www.macdisk.com/macsigen.php "WPC2" for Wordperfect 2 *.wpd
30083!:apple	????WPC7
30084!:ext	mst/wpd/wpg
30085#
30086# URL:	http://fileformats.archiveteam.org/wiki/Microsoft_Works_Word_Processor
30087# Second directory entry name MatOST_
30088>>>>128 	lestring16	MatOST			: Microsoft Works 3.0 document
30089!:mime	application/vnd.ms-works
30090!:apple	????AWWP
30091!:ext	wps
30092#
30093# URL:	http://fileformats.archiveteam.org/wiki/Microsoft_Works_Spreadsheet
30094# 3rd directory entry name WksSSWorkBook
30095>>>>256 	lestring16	WksSSWorkBook		: Microsoft Works 6-9 spreadsheet
30096!:mime	application/vnd.ms-works
30097!:apple	????AWSS
30098!:ext	xlr
30099#
30100# URL:	http://fileformats.archiveteam.org/wiki/XLS
30101# what is the difference to {00020820-0000-0000-c000-000000000046} ?
30102# Second directory entry name Workbook
30103>>>>128 	lestring16	Workbook
30104>>>>>256 	lestring16	!WksSSWorkBook		: Microsoft Excel 97-2003 worksheet 0 clsid
30105!:mime	application/vnd.ms-excel
30106# https://www.macdisk.com/macsigen.php	XLS5 for Excel 5
30107!:apple	????XLS9
30108!:ext	xls
30109#
30110# URL:	http://fileformats.archiveteam.org/wiki/PPT
30111# Second directory entry name Object1 Object12 Object35
30112>>>>128 	lestring16	Object			: Microsoft PowerPoint 4 presentation
30113!:mime	application/vnd.ms-powerpoint
30114# https://www.macdisk.com/macsigen.php
30115!:apple	????PPT3
30116!:ext	ppt
30117#
30118# URL:	https://www.msoutlook.info/question/164
30119# Second directory entry name __CollDataStm
30120>>>>128 	lestring16	__CollDataStm		: Microsoft Outlook Send Receive Settings
30121#!:mime	application/vnd.ms-outlook
30122!:mime	application/x-ms-srs
30123# %APPDATA%\Microsoft\Outlook\Outlook.srs
30124!:ext	srs
30125#
30126# URL:	https://www.file-extensions.org/cag-file-extension
30127# Second directory entry name Category
30128>>>>128 	lestring16	Category		: Microsoft Clip Art Gallery
30129#!:mime	application/x-ole-storage
30130!:mime	application/x-ms-cag
30131!:apple	MScgCGdb
30132!:ext	cag/
30133#
30134# URL:	https://www.filesuffix.com/de/extension/rra
30135# 3rd directory entry name StrIndex_StringTable
30136>>>>256 	lestring16	StrIndex_StringTable	: Windows temporarily installer
30137#!:mime	application/x-ole-storage
30138!:mime	application/x-ms-rra
30139!:ext	rra
30140#
30141# URL:	https://www.forensicswiki.org/wiki/Jump_Lists
30142# 3rd directory entry name DestList
30143>>>>256 	lestring16	DestList		: Windows jump list
30144#!:mime	application/x-ole-storage
30145!:mime	application/x-ms-jumplist
30146# %APPDATA%\Microsoft\Windows\Recent\AutomaticDestinations\*.automaticDestinations-ms
30147!:ext	automaticDestinations-ms
30148#
30149# URL:	https://en.wikipedia.org/wiki/Windows_thumbnail_cache
30150# Second directory entry name 256_
30151>>>>128 	lestring16	256_			: Windows thumbnail database 256
30152#!:mime	application/x-ole-storage
30153!:mime	application/x-ms-thumbnail
30154# Thumbs.db
30155!:ext	db
30156>>>>128 	lestring16	96_			: Windows thumbnail database 96
30157!:mime	application/x-ms-thumbnail
30158!:ext	db
30159# 3rd directory entry name Catalog_
30160>>>>256 	lestring16	Catalog			: Windows thumbnail database
30161!:mime	application/x-ms-thumbnail
30162!:ext	db
30163#
30164# URL:	https://support.microsoft.com/en-us/help/300887/how-to-use-system-information-msinfo32-command-line-tool-switches
30165# Note:	older Microsoft Systeminfo (MSInfo Configuration File of msinfo32); newer use xml based
30166# Second directory entry name Control000
30167>>>>128 	lestring16	Control000		: Microsoft old Systeminfo
30168#!:mime	application/x-ole-storage
30169!:mime	application/x-ms-info
30170!:ext	nfo
30171#
30172# From:		Joerg Jenderek
30173# URL:		https://en.wikipedia.org/wiki/Microsoft_Access
30174# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/m/mdz.trid.xml
30175#		http://fileformats.archiveteam.org/wiki/Microsoft_Compound_File
30176# Note:		only version foo tested and called "Microsoft Access Wizard template" by TrID
30177# Fourth directory entry name TemplateID
30178>>>>384 	lestring16	TemplateID		: Microsoft Access wizard template
30179# Second directory entry name like \005SummaryInformation and 3rd name like \005DocumentSummaryInformation
30180#!:mime	application/x-ole-storage
30181#!:mime	application/vnd.ms-office
30182#!:mime	application/vnd.ms-access
30183#!:mime	application/msaccess
30184!:mime	application/x-ms-mdz
30185# http://extension.nirsoft.net/mdz
30186!:ext	mdz
30187#
30188# URL:	http://fileformats.archiveteam.org/wiki/Corel_Print_House
30189# Second directory entry name Thumbnail
30190>>>>128 	lestring16	Thumbnail		: Corel PrintHouse image
30191#!:mime	application/x-ole-storage
30192!:mime	application/x-corel-cph
30193!:ext	cph
30194# 3rd directory entry name Thumbnail
30195>>>>256 	lestring16	Thumbnail		: Corel PrintHouse image
30196!:mime	application/x-corel-cph
30197!:ext	cph
30198# URL:	http://fileformats.archiveteam.org/wiki/Corel_Gallery
30199# Note:	format since Gallery 2; sometimes called Corel Multimedia Manager Album
30200# third directory entry name _INFO_
30201>>>>256 	lestring16	_INFO_			: Corel Gallery
30202# second directory entry name _ITEM_ or _DATA_
30203# later directory entry names: _ALBUM_ _THUMBNAIL_
30204#!:mime	application/x-ole-storage
30205!:mime	application/x-corel-gal
30206!:ext	gal
30207#
30208# From:		Joerg Jenderek
30209# URL:		https://archive.org/details/iPhoto-Plus-4
30210#		https://filext.com/file-extension/TPL
30211# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/t/tpl-ulead.trid.xml
30212# Note:		found in Template sub directory in program directory of software iPhoto Plus version 4
30213# second, third and fourth directory entry name like TplHeader TplMainImage TplPreview
30214>>>>128 	lestring16	TplHeader		: Ulead iPhoto Template
30215#!:mime	application/x-ole-storage
30216!:mime	image/x-ulead-tpl
30217# https://www.file-extensions.org/tpl-file-extension-ulead-photo-express-template
30218!:ext	tpl
30219#
30220# URL:	https://en.wikipedia.org/wiki/Hangul_(word_processor)
30221# Note:	"HWP Document File" signature found in FileHeader
30222# Second directory entry name FileHeader hint for Thinkfree Office document
30223>>>>128 	lestring16	FileHeader		: Hangul (Korean) 5.0 Word Processor File
30224#!:mime	application/haansofthwp
30225!:mime	application/x-hwp
30226# https://example-files.online-convert.com/document/hwp/example.hwp
30227!:ext	hwp
30228#
30229# URL:	https://ask.libreoffice.org/en/question/26303/creating-new-themes-for-the-gallery-not-functioning/
30230# Second directory entry name like dd2000 dd2001 dd2036 dd2060 dd2083
30231>>>>128 	lestring16	dd2			: StarOffice Gallery view
30232#!:mime	application/x-ole-storage
30233!:mime	application/x-star-sdv
30234!:ext	sdv
30235# URL:	https://en.wikipedia.org/wiki/SoftMaker_Office
30236# second directory entry name Current User
30237>>>>128 	lestring16	Current\ User		: SoftMaker
30238# third directory entry name SMNativeObjData
30239>>>>>256	lestring16	SMNativeObjData
30240# 5th directory entry name PowerPoint
30241>>>>>>512	lestring16	PowerPoint		PowerPoint presentation or template
30242!:mime	application/vnd.ms-powerpoint
30243!:ext	ppt/pps/pot
30244# 4th directory entry name PowerPoint
30245>>>>>384	lestring16	PowerPoint		Presentations or template
30246# http://extension.nirsoft.net/prv
30247!:mime	application/vnd.softmaker.presentations
30248!:ext	prd/prv
30249# third directory entry name like Current User
30250>>>>256 	lestring16	Current\ User		: SoftMaker
30251# 5th directory entry name PowerPoint
30252>>>>>512	lestring16	PowerPoint		Presentations or template
30253# http://extension.nirsoft.net/prd
30254!:mime	application/vnd.softmaker.presentations
30255!:ext	prd/prv
30256# 2nd directory entry name Pictures
30257>>>>>>128 	lestring16	Pictures		with pictures
30258#
30259# URL:		http://fileformats.archiveteam.org/wiki/PageMaker
30260# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/p
30261#		pagemaker-generic.trid.xml
30262#		pagemaker-pm6.trid.xml
30263#		pagemaker-pm65.trid.xml
30264#		pmd-pm7.trid.xml
30265# From:		Joerg Jenderek
30266# Note:		since version 6 embedd as stream with PageMaker name the "old" format handled by ./wordprocessors
30267#		verified by Michal Mutl Structured Storage Viewer `SSView.exe brochus.pt6`
30268# Second directory entry name PageMaker
30269>>>>128 	lestring16	PageMaker		:
30270# look for magic of "old" PageMaker like in 02TEMPLT.T65
30271>>>>>0	search/0xa900/s	\0\0\0\0\0\0\xff\x99
30272# GRR: jump to PageMaker stream and inspect it by sub routine PageMaker of ./wordprocessors failed with wrong version!
30273#>>>>>>&0	use		PageMaker
30274# THIS WORKS PARTLY!
30275>>>>>>&0	indirect	x
30276#	remaining null clsid
30277>>>>128 	default		x			: UNKNOWN
30278# second directory entry name like VisioDocument Control000
30279>>>>>128	lestring16	x with names %.20s
30280# third directory entry like WordDocument
30281>>>>>256	lestring16	x %.20s
30282# forth
30283>>>>>384	lestring16	x %.20s
30284!:mime	application/x-ole-storage
30285# according to file version 5.41 with -e soft option
30286#!:mime	application/CDFV2
30287#!:ext	???
30288#	look for known clsid GUID
30289# - Visio documents
30290# URL:	http://fileformats.archiveteam.org/wiki/Visio
30291#   Last update on 10/23/2006 by Lester Hightower, 07/20/2019 by Joerg Jenderek
30292>>88 	ubequad		0xc000000000000046	: Microsoft
30293>>>80 	ubequad		0x131a020000000000	Visio 2000-2002 Document, stencil or template
30294!:mime	application/vnd.visio
30295# VSD~Drawing VSS~Stencil VST~Template
30296!:ext	vsd/vss/vst
30297>>>80 	ubequad		0x141a020000000000	Visio 2003-2010 Document, stencil or template
30298!:mime	application/vnd.visio
30299!:ext	vsd/vss/vst
30300#
30301# URL:	http://fileformats.archiveteam.org/wiki/Windows_Installer
30302>>>80 	ubequad		0x84100c0000000000	Windows Installer Package
30303!:mime	application/x-msi
30304#!:mime	application/x-ms-win-installer
30305!:ext	msi
30306>>>80 	ubequad		0x86100c0000000000	Windows Installer Patch
30307# ??
30308!:mime	application/x-wine-extension-msp
30309#!:mime	application/x-ms-msp
30310!:ext	msp
30311#
30312# URL:	http://fileformats.archiveteam.org/wiki/DOC
30313>>>80 	ubequad		0x0009020000000000	Word 6-95 document or template
30314!:mime	application/msword
30315# for template MSWDW8TN
30316!:apple	MSWDWDBN
30317!:ext	doc/dot
30318>>>80 	ubequad		0x0609020000000000	Word 97-2003 document or template
30319!:mime	application/msword
30320!:apple	MSWDWDBN
30321# dot for template; no extension on Macintosh
30322!:ext	doc/dot/
30323#
30324# URL:	http://fileformats.archiveteam.org/wiki/Microsoft_Works_Word_Processor
30325>>>80 	ubequad		0x0213020000000000	Works 3-4 document or template
30326!:mime	application/vnd.ms-works
30327!:apple	????AWWP
30328# ps for template	https://filext.com/file-extension/PS	bps for backup
30329!:ext	wps/ps/bps
30330#
30331# URL:	http://fileformats.archiveteam.org/wiki/Microsoft_Works_Database
30332>>>80 	ubequad		0x0313020000000000	Works 3-4 database or template
30333!:mime	application/vnd.ms-works-db
30334# https://www.macdisk.com/macsigen.php
30335!:apple	????AWDB
30336# db for template www.file-extensions.org/db-file-extension-microsoft-works-data bdb for backup
30337!:ext	wdb/db/bdb
30338#
30339# URL:	https://en.wikipedia.org/wiki/Microsoft_Excel
30340>>>80 	ubequad		0x1008020000000000	Excel 5-95 worksheet, addin or template
30341!:mime	application/vnd.ms-excel
30342# https://www.macdisk.com/macsigen.php
30343!:apple	????XLS5
30344# worksheet/addin/template/no extension on Macintosh
30345!:ext	xls/xla/xlt/
30346#
30347>>>80 	ubequad		0x2008020000000000	Excel 97-2003
30348!:mime	application/vnd.ms-excel
30349# https://www.macdisk.com/macsigen.php	XLS5 for Excel 5
30350!:apple	????XLS9
30351# 3rd directory entry name
30352>>>>256 	lestring16	_VBA_PROJECT_CUR	addin
30353!:ext	xla/
30354# 4th directory entry name
30355>>>>384 	lestring16	_VBA_PROJECT_CUR	addin
30356!:ext	xla
30357#!:ext	xla/
30358>>>>256 	default		x			worksheet or template
30359!:ext	xls/xlt
30360#!:ext	xls/xlt/
30361#
30362# URL:	http://fileformats.archiveteam.org/wiki/OLE2
30363>>>80 	ubequad		0x0b0d020000000000	Outlook 97-2003 item
30364#>>>80 	ubequad		0x0b0d020000000000	Outlook 97-2003 Message
30365#!:mime	application/vnd.ms-outlook
30366!:mime	application/x-ms-msg
30367!:ext	msg
30368# URL:	https://wiki.fileformat.com/email/oft/
30369>>>80 	ubequad		0x46f0060000000000	Outlook 97-2003 item template
30370#!:mime	application/vnd.ms-outlook
30371!:mime	application/x-ms-oft
30372!:ext	oft
30373#
30374# URL:	http://fileformats.archiveteam.org/wiki/PPT
30375>>>80 	ubequad		0x5148040000000000	PowerPoint 4.0 presentation
30376!:mime	application/vnd.ms-powerpoint
30377# https://www.macdisk.com/macsigen.php
30378!:apple	????PPT3
30379!:ext	ppt
30380#??
30381# URL:	http://www.checkfilename.com/view-details/Microsoft-Works/RespageIndex/0/sTab/2/
30382>>88 	ubequad		0xa29a00aa004a1a72	: Microsoft
30383# URL:	http://fileformats.archiveteam.org/wiki/Microsoft_Works_Word_Processor
30384>>>80 	ubequad		0xc2dbcd28e20ace11	Works 4 document
30385!:mime	application/vnd.ms-works
30386!:apple	????AWWP
30387!:ext	wps
30388#
30389# URL:	http://fileformats.archiveteam.org/wiki/Microsoft_Works_Database
30390>>>80 	ubequad		0xc3dbcd28e20ace11	Works 4 database
30391!:mime	application/vnd.ms-works-db
30392!:apple	????AWDB
30393!:ext	wdb/bdb
30394#??
30395>>88 	ubequad		0xa40700c04fb932ba	: Microsoft
30396# URL:	http://fileformats.archiveteam.org/wiki/Microsoft_Works_Word_Processor
30397>>>80 	ubequad		0xb25aa40e0a9ed111	Works 5-6 document
30398!:mime	application/vnd.ms-works
30399!:apple	????AWWP
30400!:ext	wps
30401# From:		Joerg Jenderek
30402# URL:		https://en.wikipedia.org/wiki/Microsoft_Works
30403# Reference:	http://fileformats.archiveteam.org/wiki/Microsoft_Compound_File
30404# Note:		probably version 6 and 7
30405# organize pictures like JPFG images in streams __cf1 with names like
30406# 001.JPG, 002.JPG ... in streams __fname
30407>>88 	ubequad		0xa1c800c04f612452	: Microsoft
30408>>>80 	ubequad		0xc0c7266eb98cd311	Works portfolio
30409# 2nd directory entry name PfOrder, 3rd __LastID and 4th __SizeUsed
30410#!:mime	application/x-ole-storage
30411# https://www.iana.org/assignments/media-types/application/vnd.ms-works
30412!:mime	application/vnd.ms-works
30413# https://extension.nirsoft.net/wsb
30414# like: wsbsamp.wsb WORKS2003_CD:\MSWorks\Common\Sammlung.wsb
30415!:ext	wsb
30416#??
30417# URL:	http://fileformats.archiveteam.org/wiki/Microsoft_Publisher
30418>>88 	ubequad		0x00c0000000000046	: Microsoft
30419>>>80 	ubequad		0x0112020000000000	Publisher
30420!:mime	application/vnd.ms-publisher
30421!:ext	pub
30422#
30423# URL:	http://fileformats.archiveteam.org/wiki/PPT
30424#??
30425>>88 	ubequad		0xa90300aa00510ea3	: Microsoft
30426>>>80 	ubequad		0x70ae7bea3bfbcd11	PowerPoint 95 presentation
30427!:mime	application/vnd.ms-powerpoint
30428# https://www.macdisk.com/macsigen.php
30429!:apple	????PPT3
30430!:ext	ppt/pot
30431#??
30432>>88 	ubequad		0x86ea00aa00b929e8	: Microsoft
30433>>>80 	ubequad		0x108d81649b4fcf11	PowerPoint 97-2003 presentation or template
30434!:mime	application/vnd.ms-powerpoint
30435!:apple	????PPT3
30436# /autostart/template
30437!:ext	ppt/pps/pot
30438# From:		Joerg Jenderek
30439# URL:		https://www.file-extensions.org/ppa-file-extension
30440#		https://en.wikipedia.org/wiki/Microsoft_PowerPoint#cite_note-231
30441# Reference:	http://fileformats.archiveteam.org/wiki/Microsoft_Compound_File
30442>>88 	ubequad		0x871800aa0060263b	: Microsoft
30443# only version 8 (97) tested; PowerPoint 4.0 to 11.0 (2004) (Wikipedia); 97 to 2003 (file-extensions.org)
30444>>>80 	ubequad		0xf04672810a72cf11	PowerPoint Addin or Wizard
30445# second, third and fourth directory entry name like VBA PROJECT PROJECTwm
30446# http://extension.nirsoft.net/pwz
30447!:mime	application/vnd.ms-powerpoint
30448# like: BSHPPT97.PPA "AutoContent Wizard.pwz"
30449!:ext	ppa/pwz
30450#
30451# From:		Joerg Jenderek
30452# URL:		http://fileformats.archiveteam.org/wiki/AWD_(At_Work_Document)
30453# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/a/awd-fax.trid.xml
30454# Note:		called "Microsoft At Work Fax document" by TrID
30455>>88 	ubequad		0xb29400dd010f2bf9	: Microsoft
30456>>>80 	ubequad		0x801cb0023de01a10	At Work fax Document
30457#!:mime	application/x-ole-storage
30458!:mime	image/x-ms-awd
30459!:ext	awd
30460#
30461# URL:	https://en.wikipedia.org/wiki/Microsoft_Project
30462#??
30463>>88 	ubequad		0xbe1100c04fb6faf1	: Microsoft
30464>>>80 	ubequad		0x3a8fb774c8c8d111	Project
30465!:mime	application/vnd.ms-project
30466!:ext	mpp
30467# From:		Joerg Jenderek
30468# URL:		https://en.wikipedia.org/wiki/Microsoft_Office_shared_tools#Binder
30469# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/o/obd.trid.xml
30470#		http://fileformats.archiveteam.org/wiki/Microsoft_Compound_File
30471# Note:		only version 8 tested and called "Office Binder Document" by TrID and
30472#		"Microsoft Office Binder File for Windows" version 97-2000 by DROID fmt/240
30473>>88 	ubequad		0xb21c00aa004ba90b	: Microsoft
30474>>>80 	ubequad		0x0004855964661b10	Office Binder Document, Template or wizard
30475# second directory entry name like Binder
30476# https://www.file-extensions.org/obd-file-extension
30477#!:mime	application/vnd.ms-binder
30478!:mime	application/x-msbinder
30479# obt for template; obz for Microsoft Office Binder wizard
30480!:ext	obd/obt/obz
30481#
30482# URL:		http://fileformats.archiveteam.org/wiki/WordPerfect
30483# Reference:	http://fileformats.archiveteam.org/wiki/Microsoft_Compound_File
30484#		https://github.com/OneWingedShark/WordPerfect/
30485#		blob/master/doc/SDK_Help/FileFormats/WPFF_DocumentStructure.htm
30486# From:		Joerg Jenderek
30487# Note:		internal version x.2 or 2.2 like in embedded ole6-PerfectOffice_MAIN.wpd
30488# 3rd directory entry name PerfectOffice_OBJECT and 2nd PerfectOffice_MAIN,
30489# which contains WordPerfect document \xffWPC signature handled by ./wordprocessors
30490>>88 	ubequad		0x19370000929679cd	: WordPerfect 7
30491>>>80 	ubequad		0xff739851ad2d2002	Document
30492!:mime	application/vnd.wordperfect
30493#!:apple	????WPC?
30494# https://fossies.org/linux/wp2latex/test/ole6.wpd
30495!:ext	wpd
30496#>>>>0	search/0xc01/s	\xffWPC			\b, WPC SIGNATURE
30497# inspect embedded WordPerfect document by ./wordprocessors with 1 space at end
30498#>>>>>&0	indirect	x	\b; contains
30499# GRR: the above expression does not work correctly
30500#
30501# URL:	http://fileformats.archiveteam.org/wiki/SHW_(Corel)
30502#???
30503>>88 	ubequad		0x99ae04021c007002	: WordPerfect
30504>>>80 	ubequad		0x62fe2e4099191b10	7-X3 presentation
30505!:mime	application/x-corelpresentations
30506#!:mime	application/x-shw-viewer
30507#!:mime	image/x-presentations
30508!:ext	shw
30509#
30510# URL:	http://www.checkfilename.com/view-details/WordPerfect-Office-X3/RespageIndex/0/sTab/2/
30511>>>80 	ubequad		0x60fe2e4099191b10	9 Graphic
30512#!:mime	application/x-wpg
30513#!:mime	image/x-wordperfect-graphics
30514!:mime	image/x-wpg
30515# https://www.macdisk.com/macsigen.php "WPC2" for Wordperfect 2 *.wpd
30516!:apple	????WPC9
30517!:ext	wpg
30518#
30519# URL:	http://fileformats.archiveteam.org/wiki/StarOffice_binary_formats
30520>>88 	ubequad		0x996104021c007002	: StarOffice
30521>>>80 	ubequad		0x407e5cdc5cb31b10	StarWriter 3.0 document or template
30522# https://www.openoffice.org/framework/documentation/mimetypes/mimetypes.html
30523!:mime	application/x-starwriter
30524!:ext	sdw/vor
30525#
30526>>>80 	ubequad		0xa03f543fa6b61b10	StarCalc 3.0 spreadsheet or template
30527!:mime	application/x-starcalc
30528!:ext	sdc/vor
30529#
30530>>>80 	ubequad		0xe0aa10af6db31b10	StarDraw 3.0 drawing or template
30531!:mime	application/x-starimpress
30532#!:mime	application/x-stardraw
30533# sda ??
30534!:ext	sdd/sda/vor
30535#??
30536>>88 	ubequad		0x89cb008029e4b0b1	: StarOffice
30537>>>80 	ubequad		0x41d461633542d011	StarCalc 4.0 spreadsheet or template
30538!:mime	application/x-starcalc
30539!:ext	sdc/vor
30540#
30541>>>80 	ubequad		0x61b8a5c6d685d111	StarCalc 5.0 spreadsheet or template
30542!:mime	application/vnd.stardivision.cal
30543!:ext	sdc/vor
30544#
30545>>>80 	ubequad		0xc03c2d011642d011	StarImpress 4.0 presentation or template
30546!:mime	application/x-starimpress
30547!:ext	sdd/vor
30548#??
30549>>88 	ubequad		0xb12a04021c007002	: StarOffice
30550>>>80 	ubequad		0x600459d4fd351c10	StarMath 3.0
30551!:mime	application/x-starmath
30552!:ext	smf
30553#??
30554>>88 	ubequad		0x8e2c00001b4cc711	: StarOffice
30555>>>80 	ubequad		0xe0999cfb6d2c1c10	StarChart 3.0
30556!:mime	application/x-starchart
30557!:ext	sds
30558#??
30559>>88 	ubequad		0xa45e00a0249d57b1	: StarOffice
30560>>>80 	ubequad		0xb0e9048b0e42d011	StarWriter 4.0 document or template
30561!:mime	application/x-starwriter
30562!:ext	sdw/vor
30563#??
30564>>88 	ubequad		0x89ca008029e4b0b1	: StarOffice
30565>>>80 	ubequad		0xe1b7b3022542d011	StarMath 4.0
30566!:mime	application/x-starmath
30567!:ext	smf
30568#
30569>>>80 	ubequad		0xe0b7b3022542d011	StarChart 4.0
30570!:mime	application/x-starchart
30571!:ext	sds
30572#??
30573>>88 	ubequad		0xa53f00a0249d57b1	: StarOffice
30574>>>80 	ubequad		0x70c90a340de3d011	Master 4.0 document
30575!:mime	application/x-starwriter-global
30576!:ext	sgl
30577#??
30578>>88 	ubequad		0x89d0008029e4b0b1	: StarOffice
30579>>>80 	ubequad		0x40e6b5ffde85d111	StarMath 5.0
30580!:mime	application/vnd.stardivision.math
30581!:ext	smf
30582#
30583>>>80 	ubequad		0xa005892ebd85d111	StarDraw 5.0 drawing or template
30584!:mime	application/vnd.stardivision.draw
30585!:ext	sda/vor
30586#
30587>>>80 	ubequad		0x21725c56bc85d111	StarImpress 5.0 presentation or template
30588!:mime	application/vnd.stardivision.impress
30589# sda is used for what?
30590!:ext	sdd/vor/sda
30591#
30592>>>80 	ubequad		0x214388bfdd85d111	StarChart 5.0
30593!:mime	application/vnd.stardivision.chart
30594!:ext	sds
30595# ??
30596>>88 	ubequad		0xaab4006097da561a	: StarOffice
30597>>>80 	ubequad		0xd1f90cc2ae85d111	StarWriter 5.0 document or template
30598!:mime	application/vnd.stardivision.writer
30599!:ext	sdw/vor
30600#
30601>>>80 	ubequad		0xd3f90cc2ae85d111	Master 5.0 document
30602!:mime	application/vnd.stardivision.writer-global
30603!:ext	sgl
30604#??
30605# URL:	http://fileformats.archiveteam.org/wiki/FlashPix
30606>>88 	ubequad		0x855300aa00a1f95b	: Kodak
30607>>>80 	ubequad		0x0067615654c1ce11	FlashPIX Image
30608!:mime	image/vnd.fpx
30609!:apple	????FPix
30610!:ext	fpx
30611# URL:	https://en.wikipedia.org/wiki/SoftMaker_Office
30612>>88 	ubequad		0x95f600a0cc3cca14	: PlanMaker
30613>>>80 	ubequad		0x9174088a6452d411	document or template
30614!:mime	application/vnd.softmaker.planmaker
30615# pmv for template	https://www.file-extensions.org/pmv-file-extension
30616!:ext	pmd/pmv
30617# URL:		http://fileformats.archiveteam.org/wiki/MAX_(3ds_Max)
30618#		https://en.wikipedia.org/wiki/Autodesk_3ds_Max
30619# Reference:	http://fileformats.archiveteam.org/wiki/Microsoft_Compound_File
30620# Note:		called "3D Studio Max Scene" by TrID and "3DS Max" by DROID and
30621#		"3DSMax thumbnail" by XnView and verfied by `nconvert -info A380.max`
30622#		applies only to "newer" versions (about 2008-2020)
30623>>88 	ubequad		0x9fed04143144cc1e	: Autodesk
30624>>>80 	ubequad		0x7b8cdd1cc081a045	3ds Max
30625#!:mime	application/x-ole-storage
30626!:mime	model/x-autodesk-max
30627# like: https://static.free3d.com/models/dropbox/dropbox/sq/A380.7z/A380.max
30628!:ext	max
30629# also chr for character file according to DROID https://www.nationalarchives.gov.uk/PRONOM/fmt/978
30630#!:ext	max/chr
30631# remaining non null clsid
30632>>88 	default		x
30633# GRR: check again for non null clsid because wrong when called by indirect directive
30634>>>88 	ubequad		!0			: UNKNOWN
30635# https://reposcope.com/mimetype/application/x-ole-storage
30636!:mime	application/x-ole-storage
30637# according to file version 5.41 with -e soft option
30638#!:mime	application/CDFV2
30639#!:ext	???
30640>>>>80 	ubequad		!0			\b, clsid %#16.16llx
30641>>>>88 	ubequad		x			\b%16.16llx
30642
30643
30644#------------------------------------------------------------------------------
30645# $File: olf,v 1.4 2009/09/19 16:28:11 christos Exp $
30646# olf:  file(1) magic for OLF executables
30647#
30648# We have to check the byte order flag to see what byte order all the
30649# other stuff in the header is in.
30650#
30651# MIPS R3000 may also be for MIPS R2000.
30652# What're the correct byte orders for the nCUBE and the Fujitsu VPP500?
30653#
30654# Created by Erik Theisen <etheisen@openbsd.org>
30655# Based on elf from Daniel Quinlan <quinlan@yggdrasil.com>
306560	string		\177OLF		OLF
30657>4	byte		0		invalid class
30658>4	byte		1		32-bit
30659>4	byte		2		64-bit
30660>7	byte		0		invalid os
30661>7	byte		1		OpenBSD
30662>7	byte		2		NetBSD
30663>7	byte		3		FreeBSD
30664>7	byte		4		4.4BSD
30665>7	byte		5		Linux
30666>7	byte		6		SVR4
30667>7	byte		7		esix
30668>7	byte		8		Solaris
30669>7	byte		9		Irix
30670>7	byte		10		SCO
30671>7	byte		11		Dell
30672>7	byte		12		NCR
30673>5	byte		0		invalid byte order
30674>5	byte		1		LSB
30675>>16	leshort		0		no file type,
30676>>16	leshort		1		relocatable,
30677>>16	leshort		2		executable,
30678>>16	leshort		3		shared object,
30679# Core handling from Peter Tobias <tobias@server.et-inf.fho-emden.de>
30680# corrections by Christian 'Dr. Disk' Hechelmann <drdisk@ds9.au.s.shuttle.de>
30681>>16	leshort		4		core file
30682>>>(0x38+0xcc) string	>\0		of '%s'
30683>>>(0x38+0x10) lelong	>0		(signal %d),
30684>>16	leshort		&0xff00		processor-specific,
30685>>18	leshort		0		no machine,
30686>>18	leshort		1		AT&T WE32100 - invalid byte order,
30687>>18	leshort		2		SPARC - invalid byte order,
30688>>18	leshort		3		Intel 80386,
30689>>18	leshort		4		Motorola 68000 - invalid byte order,
30690>>18	leshort		5		Motorola 88000 - invalid byte order,
30691>>18	leshort		6		Intel 80486,
30692>>18	leshort		7		Intel 80860,
30693>>18	leshort		8		MIPS R3000_BE - invalid byte order,
30694>>18	leshort		9		Amdahl - invalid byte order,
30695>>18	leshort		10		MIPS R3000_LE,
30696>>18	leshort		11		RS6000 - invalid byte order,
30697>>18	leshort		15		PA-RISC - invalid byte order,
30698>>18	leshort		16		nCUBE,
30699>>18	leshort		17		VPP500,
30700>>18	leshort		18		SPARC32PLUS,
30701>>18	leshort		20		PowerPC,
30702>>18	leshort		0x9026		Alpha,
30703>>20	lelong		0		invalid version
30704>>20	lelong		1		version 1
30705>>36	lelong		1		MathCoPro/FPU/MAU Required
30706>8	string		>\0		(%s)
30707>5	byte		2		MSB
30708>>16	beshort		0		no file type,
30709>>16	beshort		1		relocatable,
30710>>16	beshort		2		executable,
30711>>16	beshort		3		shared object,
30712>>16	beshort		4		core file,
30713>>>(0x38+0xcc) string	>\0		of '%s'
30714>>>(0x38+0x10) belong	>0		(signal %d),
30715>>16	beshort		&0xff00		processor-specific,
30716>>18	beshort		0		no machine,
30717>>18	beshort		1		AT&T WE32100,
30718>>18	beshort		2		SPARC,
30719>>18	beshort		3		Intel 80386 - invalid byte order,
30720>>18	beshort		4		Motorola 68000,
30721>>18	beshort		5		Motorola 88000,
30722>>18	beshort		6		Intel 80486 - invalid byte order,
30723>>18	beshort		7		Intel 80860,
30724>>18	beshort		8		MIPS R3000_BE,
30725>>18	beshort		9		Amdahl,
30726>>18	beshort		10		MIPS R3000_LE - invalid byte order,
30727>>18	beshort		11		RS6000,
30728>>18	beshort		15		PA-RISC,
30729>>18	beshort		16		nCUBE,
30730>>18	beshort		17		VPP500,
30731>>18	beshort		18		SPARC32PLUS,
30732>>18	beshort		20		PowerPC or cisco 4500,
30733>>18	beshort		21		cisco 7500,
30734>>18	beshort		24		cisco SVIP,
30735>>18	beshort		25		cisco 7200,
30736>>18	beshort		36		cisco 12000,
30737>>18	beshort		0x9026		Alpha,
30738>>20	belong		0		invalid version
30739>>20	belong		1		version 1
30740>>36	belong		1		MathCoPro/FPU/MAU Required
30741
30742#------------------------------------------------------------------------------
30743# $File: openfst,v 1.1 2019/09/30 15:58:24 christos Exp $
30744# openfs:  file(1) magic for OpenFST (Weighted finite-state tranducer library)
30745
307460	long		0x7eb2fdd6	OpenFst binary FST data
30747>&0	pstring/l	x		\b, fst type: %s
30748>>&0	pstring/l	x		\b, arc type: %s
30749>>>&0	long		x		\b, version: %d
30750>>>>&20	quad		x		\b, num states: %lld
30751>>>>>&0	quad		>0		\b, num arcs: %lld
30752
307530	long    0x56515c	OpenFst binary FAR data, far type: stlist
30754>4	long 	x		\b, version: %d
30755
307560	long	0x7eb2f35c	OpenFst binary FAR data, far type: sttable
30757>4	long	x		\b, version: %d
30758
30759#------------------------------------------------------------
30760# $File: opentimestamps,v 1.1 2019/05/27 01:27:31 christos Exp $
30761# OpenTimestamps related magic entries
30762# https://opentimestamps.org/
30763# https://en.wikipedia.org/wiki/OpenTimestamps
30764# "Emanuele Cisbani" <emanuele.cisbani@gmail.com>
30765#------------------------------------------------------------
30766
30767# OpenTimestamps Proof .ots format.
30768# Magic is defined here:
30769# https://github.com/opentimestamps/python-opentimestamps/\
30770# blob/master/opentimestamps/core/timestamp.py#L273
30771
307720	string	\x00\x4f\x70\x65\x6e\x54\x69\x6d\x65\x73\x74\x61\x6d\x70\x73\x00 OpenTimestamps
30773>16	string	\x00\x50\x72\x6f\x6f\x66\x00\xbf\x89\xe2\xe8\x84\xe8\x92\x94\x01 Proof
30774
30775#------------------------------------------------------------------------------
30776# $File: oric,v 1.2 2022/04/25 17:28:20 christos Exp $
30777# Oric tape files
30778# From: Stefan A. Haubenthal <polluks@sdf.lonestar.org>
30779# References:
30780# http://fileformats.archiveteam.org/wiki/TAP_(Oric)
30781# http://fileformats.archiveteam.org/wiki/DSK_(Oric)
307820	string		\x16\x16\x16\x24	Oric tape,
30783>6	byte		=0x00			BASIC,
30784>6	byte		=0x80			memory block,
30785>7	byte		>0x00			autorun,
30786>13	string		x			"%.15s"
30787
307880	string		ORICDISK		Oric Image
307890	string		MFM_DISK		Oric Image
30790
30791#------------------------------------------------------------------------------
30792# $File: os2,v 1.14 2022/03/21 21:25:50 christos Exp $
30793# os2:  file(1) magic for OS/2 files
30794#
30795
30796# Provided 1998/08/22 by
30797# David Mediavilla <davidme.news@REMOVEIFNOTSPAMusa.net>
307981	search/100	InternetShortcut	MS Windows 95 Internet shortcut text
30799!:mime	application/x-mswinurl
30800!:ext	url
30801>17	search/100	URL= 			(URL=<
30802>>&0	string		x			\b%s>)
30803
30804# OS/2 URL objects
30805# Provided 1998/08/22 by
30806# David Mediavilla <davidme.news@REMOVEIFNOTSPAMusa.net>
30807#0	string	http:			OS/2 URL object text
30808#>5	string	>\			(WWW) <http:%s>
30809#0	string	mailto:			OS/2 URL object text
30810#>7	string	>\			(email) <%s>
30811#0	string	news:			OS/2 URL object text
30812#>5	string	>\			(Usenet) <%s>
30813#0	string	ftp:			OS/2 URL object text
30814#>4	string	>\			(FTP) <ftp:%s>
30815#0	string	file:			OS/2 URL object text
30816#>5	string	>\			(Local file) <%s>
30817
30818# >>>>> OS/2 INF/HLP <<<<<  (source: Daniel Dissett ddissett@netcom.com)
30819# URL:		http://fileformats.archiveteam.org/wiki/INF/HLP_(OS/2)
30820# Reference:	http://www.edm2.com/0308/inf.html
30821# Carl Hauser (chauser.parc@xerox.com) and
30822# Marcus Groeber (marcusg@ph-cip.uni-koeln.de)
30823# list the following header format in inf02a.doc:
30824#
30825#  int16 ID;           // ID magic word (5348h = "HS")
30826#  int8  unknown1;     // unknown purpose, could be third letter of ID
30827#  int8  flags;        // probably a flag word...
30828#                      //  bit 0: set if INF style file
30829#                      //  bit 4: set if HLP style file
30830#                      // patching this byte allows reading HLP files
30831#                      // using the VIEW command, while help files
30832#                      // seem to work with INF settings here as well.
30833#  int16 hdrsize;      // total size of header
30834#  int16 unknown2;     // unknown purpose
30835#
308360   string  HSP\x01\x9b\x00 OS/2 INF
30837!:mime	application/x-os2-inf
30838!:ext	inf
30839>107 string >0                      (%s)
308400   string  HSP\x10\x9b\x00     OS/2 HLP
30841!:mime	application/x-os2-hlp
30842!:ext	hlp
30843>107 string >0                      (%s)
30844
30845# From:		Joerg Jenderek
30846# URL:		http://fileformats.archiveteam.org/wiki/MSG_(OS/2)
30847# Reference:	https://github.com/OS2World/UTIL-SYSTEM-MKMSGF/blob/master/mkmsgf.h
30848# Note:		created by MKMSGF.EXE. Text source can be recreated by E_MSGF
30849#		example like OS001H.MSG
308500	string			\xffMKMSGF\0	OS/2 help message
30851!:mime	application/x-os2-msg
30852!:ext	msg
30853# identifier[3] like: DOS NET REX SYS ...
30854>8	string				x	'%.3s'
30855# msgnumber: number of messages
30856>11	uleshort			x	\b, %u messages
30857# firstmsgnumber; number of the first message like: some times 0 often 1 169 1000 3502
30858>13	uleshort      			>1	\b, 1st number %u
30859# offset16bit; 1~Index table has 16-bit offsets (files<64k) 0~Index table has 32-bit offsets
30860>15	ubyte				=0	\b, 32-bit
30861#>15	ubyte				=1	\b, 16-bit
30862# version; file version: 2~new 0~old
30863>16	uleshort      			!2	\b, version %u
30864# indextaboffset; offset of index table: 1F~after header 0~no index table for version 0?
30865>18	uleshort			>0
30866>>18		uleshort		!0x1f	\b, at %#x index
30867#	32-bit offset
30868>>15		ubyte			=0
30869# offset with message table
30870>>>(18.s)		ulelong		x	\b, at %#x
30871# 1st message
30872# http://www.os2museum.com/files/docs/os210ptk/os2-1.0-ptk-tools-1988.pdf
30873# message type: E~Error H~Help I~Information P~Prompt W~Warning ?
30874>>>>(&-4.l)		ubyte		x	%c-type
30875>>>>>&0			string		x	%s
30876#	16-bit offset
30877>>15		ubyte			=1
30878# msgnum; message number
30879>>>(18.s)		uleshort	x	\b, number %u
30880# msgindex; offset of message from begin of file
30881>>>(18.s+2)		uleshort	x	at %#x
30882# message type E H I P W ?
30883>>>>(&-2.s)		ubyte		x	%c-type
30884# skip newline carriage return
30885>>>>>&0			ubeshort	=0x0D0a
30886>>>>>>&0		string		x	%s
30887>>>>>&0			ubeshort	!0x0D0a
30888>>>>>>&-2		string		x	%s
30889#		for version 0 index table apparently at offset 1F
30890>16	uleshort      			0
30891>>15		ubyte			1
30892# 1st message 16-bit
30893>>>0x1F			uleshort	x	\b, at %#x
30894# message type: E~Error H~Help I~Information P~Prompt W~Warning ?
30895>>>>(0x1F.s)		ubyte		x	%c-type
30896>>>>>&0			string		x	%s
30897# 2nd message 16-bit
30898>>>0x21			uleshort	x	\b, at %#x
30899>>>>(0x21.s)		ubyte		x	%c-type
30900>>>>>&0			string		x	%s
30901# 3rd message 16-bit
30902>>>0x23			uleshort	x	\b, at %#x
30903>>>>(0x23.s)		ubyte		x	%c-type
30904>>>>>&0			string		x	%s
30905#		version 0 32-bit
30906>>15		ubyte			0
30907# 1st message 32-bit
30908>>>0x1f			ulelong		x	\b, at %#x
30909>>>>(0x1F.l)		ubyte		x	%c-type
30910>>>>>&0			string		x	%s
30911# 2nd message 32-bit
30912>>>0x23			ulelong		x	\b, at %#x
30913>>>>(0x23.l)		ubyte		x	%c-type
30914>>>>>&0			string		x	%s
30915# 3rd message 32-bit
30916>>>0x27			ulelong		x	\b, AT %#x
30917>>>>(0x27.l)		ubyte		x	 %c-type
30918>>>>>&0			string		x	%s
30919# countryinfo; offset of country info block: 0 for version 0
30920>20	uleshort			!0	\b, at %#x countryinfo
30921# nextcoutryinfo
30922>>22		uleshort		>0	\b, at %#x next
30923# reserved[5]; Must be 0
30924>>25	ulelong		!0		\b, RESERVED %#x
30925>>(20.s) use				os2-msg-info
30926#	display country info block of MKMSGF message file
309270	name		os2-msg-info
30928# bytesperchar; bytes per char: 1~SBCS 2~DBCS
30929>0	ubyte		>1		\b, %u bytes/char
30930# reserved; Not known
30931>1	uleshort	!0		\b, reserved %#x
30932# langfamilyID; language family ID like: 0~? 1~Arabic ... 7~German ... 9~English  ... 34~Slovene
30933>3	uleshort	>0		\b, language %u
30934# langversionID; like: 7_1~German 7_2~Swiss German 12_1~French 12_3~Canadian French
30935>>5	uleshort	x		\b_%u
30936# langfamilyID too high. This should not happen
30937>3	uleshort	>34		(invalid language)
30938# codepagesnumber; number of codepages like: 1 2 ... 16
30939>7	uleshort	x		\b, %u code page
30940# plural s
30941>7	uleshort	>1		\bs
30942# too many number of codepages. This should not happen
30943>7	uleshort	>16		(Too many)
30944# codepages[16]; codepages list like 437 850 ...
30945>7	uleshort	<17
30946# 1st code page
30947>>9	uleshort	>0		%u
30948# possible 2nd code page number
30949>>>7	uleshort	>1
30950>>>>11	uleshort	x		%u
30951# filename[260]; name of file like: dbaseos2.msg dde4c01e.msg os2ldr.mgr xdfh.msg ...
30952>41	string		x	 	\b, %s
30953
30954# OS/2 INI (this is a guess)
309550  string   \xff\xff\xff\xff\x14\0\0\0  OS/2 INI
30956!:mime	application/x-os2-ini
30957!:ext	ini
30958
30959# From:		Joerg Jenderek
30960# URL:		http://warpin.netlabs.org/
30961# Reference:    http://mark0.net/download/triddefs_xml.7z/defs/a/ark-wpi.trid.xml
30962# Note:		called by TrID "WarpIN Installer"
30963# probably magic at the beginning
309640	ubelong		=0x770402BE	WarpIN Installer
30965#>4	ubelong		=0x03000000
30966#!:mime	application/octet-stream
30967!:mime	application/x-os2-wpi
30968!:ext	wpi
30969# creator program name like: "reserved" or "WIC x.y.z"
30970>0x106	string		x		\b, created by %s
30971# name like: "reserved" or "OS/2 Netlabs"
30972>0x146	string		x		\b, '%s'
30973# name like: "N/A" "http://warpin.netlabs.org"
30974>0x186	string		x		\b, URL %s
30975
30976
30977#------------------------------------------------------------------------------
30978# $File: os400,v 1.5 2009/09/19 16:28:11 christos Exp $
30979# os400:  file(1) magic for IBM OS/400 files
30980#
30981# IBM OS/400 (i5/OS) Save file (SAVF) - gerardo.cacciari@gmail.com
30982# In spite of its quite variable format (due to internal memory page
30983# length differences between CISC and RISC versions of the OS) the
30984# SAVF structure hasn't suitable offsets to identify the catalog
30985# header in the first descriptor where there are some useful infos,
30986# so we must search in a somewhat large area for a particular string
30987# that represents the EBCDIC encoding of 'QSRDSSPC' (save/restore
30988# descriptor space) preceded by a two byte constant.
30989#
309901090	 search/7393	\x19\xDB\xD8\xE2\xD9\xC4\xE2\xE2\xD7\xC3 IBM OS/400 save file data
30991>&212	 byte		0x01			 \b, created with SAVOBJ
30992>&212	 byte		0x02			 \b, created with SAVLIB
30993>&212	 byte		0x07			 \b, created with SAVCFG
30994>&212	 byte		0x08			 \b, created with SAVSECDTA
30995>&212	 byte		0x0A			 \b, created with SAVSECDTA
30996>&212	 byte		0x0B			 \b, created with SAVDLO
30997>&212	 byte		0x0D			 \b, created with SAVLICPGM
30998>&212	 byte		0x11			 \b, created with SAVCHGOBJ
30999>&213	 byte		0x44			 \b, at least V5R4 to open
31000>&213	 byte		0x43			 \b, at least V5R3 to open
31001>&213	 byte		0x42			 \b, at least V5R2 to open
31002>&213	 byte		0x41			 \b, at least V5R1 to open
31003>&213	 byte		0x40			 \b, at least V4R5 to open
31004>&213	 byte		0x3F			 \b, at least V4R4 to open
31005>&213	 byte		0x3E			 \b, at least V4R3 to open
31006>&213	 byte		0x3C			 \b, at least V4R2 to open
31007>&213	 byte		0x3D			 \b, at least V4R1M4 to open
31008>&213	 byte		0x3B			 \b, at least V4R1 to open
31009>&213	 byte		0x3A			 \b, at least V3R7 to open
31010>&213	 byte		0x35			 \b, at least V3R6 to open
31011>&213	 byte		0x36			 \b, at least V3R2 to open
31012>&213	 byte		0x34			 \b, at least V3R1 to open
31013>&213	 byte		0x31			 \b, at least V3R0M5 to open
31014>&213	 byte		0x30			 \b, at least V2R3 to open
31015
31016#------------------------------------------------------------------------------
31017# $File: os9,v 1.8 2017/03/17 21:35:28 christos Exp $
31018#
31019# Copyright (c) 1996 Ignatios Souvatzis. All rights reserved.
31020#
31021# Redistribution and use in source and binary forms, with or without
31022# modification, are permitted provided that the following conditions
31023# are met:
31024# 1. Redistributions of source code must retain the above copyright
31025#    notice, this list of conditions and the following disclaimer.
31026# 2. Redistributions in binary form must reproduce the above copyright
31027#    notice, this list of conditions and the following disclaimer in the
31028#    documentation and/or other materials provided with the distribution.
31029#
31030# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
31031# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
31032# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
31033# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
31034# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31035# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
31036# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
31037# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
31038# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
31039# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31040#
31041#
31042#
31043# OS9/6809 module descriptions:
31044#
310450	beshort		0x87CD	OS9/6809 module:
31046#
31047>6	byte&0x0f	0x00	non-executable
31048>6	byte&0x0f	0x01	machine language
31049>6	byte&0x0f	0x02	BASIC I-code
31050>6	byte&0x0f	0x03	Pascal P-code
31051>6	byte&0x0f	0x04	C I-code
31052>6	byte&0x0f	0x05	COBOL I-code
31053>6	byte&0x0f	0x06	Fortran I-code
31054#
31055>6	byte&0xf0	0x10	program executable
31056>6	byte&0xf0	0x20	subroutine
31057>6	byte&0xf0	0x30	multi-module
31058>6	byte&0xf0	0x40	data module
31059#
31060>6	byte&0xf0	0xC0	system module
31061>6	byte&0xf0	0xD0	file manager
31062>6	byte&0xf0	0xE0	device driver
31063>6	byte&0xf0	0xF0	device descriptor
31064#
31065# OS9/m68k stuff (to be continued)
31066#
310670	beshort		0x4AFC	OS9/68K module:
31068#
31069# attr
31070>0x14	byte&0x80	0x80	re-entrant
31071>0x14	byte&0x40	0x40	ghost
31072>0x14	byte&0x20	0x20	system-state
31073#
31074# lang:
31075#
31076>0x13	byte		1	machine language
31077>0x13	byte		2	BASIC I-code
31078>0x13	byte		3	Pascal P-code
31079>0x13	byte		4	C I-code
31080>0x13	byte		5	COBOL I-code
31081>0x13	byte		6	Fortran I-code
31082#
31083#
31084# type:
31085#
31086>0x12	byte		1	program executable
31087>0x12	byte		2	subroutine
31088>0x12	byte		3	multi-module
31089>0x12	byte		4	data module
31090>0x12	byte		11	trap library
31091>0x12	byte		12	system module
31092>0x12	byte		13	file manager
31093>0x12	byte		14	device driver
31094>0x12	byte		15	device descriptor
31095
31096#------------------------------------------------------------------------------
31097# $File: osf1,v 1.7 2009/09/19 16:28:11 christos Exp $
31098#
31099# Mach magic number info
31100#
311010	long		0xefbe	OSF/Rose object
31102# I386 magic number info
31103#
311040	short		0565	i386 COFF object
31105
31106#------------------------------------------------------------------------------
31107# $File: palm,v 1.15 2021/12/16 21:50:06 christos Exp $
31108# palm:	 file(1) magic for PalmOS {.prc,.pdb}: applications, docfiles, and hacks
31109#
31110# Brian Lalor <blalor@hcirisc.cs.binghamton.edu>
31111
31112# These are weak, byte 59 is not guaranteed to be 0 and there are
31113# 8 character identifiers at byte 60, one I found for appl is BIGb.
31114# What are the possibilities and where is this documented?
31115
31116# The common header format for PalmOS .pdb/.prc files is
31117# {
31118#         char            name[ 32 ];
31119#         Word            attributes;
31120#         Word            version;
31121#         DWord           creationDate;
31122#         DWord           modificationDate;
31123#         DWord           lastBackupDate;
31124#         DWord           modificationNumber;
31125#         DWord           appInfoID;
31126#         DWord           sortInfoID;
31127#         char            type[4];
31128#         char            creator[4];
31129#         DWord           uniqueIDSeed;
31130#         RecordListType  recordList;
31131# };
31132#
31133# Datestamps are unsigned seconds since the MacOS epoch (Jan 1, 1904),
31134# or Unix/POSIX time + 2082844800.
31135
311360		name		aportisdoc
31137# date is supposed to be big-endian seconds since 1 Jan 1904, but many
31138# files contain the timestamp in little-endian or a completely
31139# nonsensical value...
31140#>36		bedate-2082844800	>0	\b, created %s
31141# compression: 1=uncomp, 2=orig, 0x4448=HuffDic
31142>(78.L)		beshort		=1		\b, uncompressed
31143# compressed
31144>(78.L)		beshort		>1
31145>>(78.L+4)	belong		x		\b, %d bytes uncompressed
31146
31147# appl
31148#60		string		appl		PalmOS application
31149#>0		string		>\0		"%s"
31150
31151# HACK
31152#60		string		HACK		HackMaster hack
31153#>0		string		>\0		"%s"
31154
31155# iSiloX e-book
3115660		string		SDocSilX	iSiloX E-book
31157>0		string		>\0		"%s"
31158
31159# Mobipocket (www.mobipocket.com), donated by Carl Witty
31160# expanded by Ralf Brown
3116160		string	 	BOOKMOBI	Mobipocket E-book
31162!:mime	application/x-mobipocket-ebook
31163# MobiPocket stores a full title, pointed at by the belong at offset
31164# 0x54 in its header at (78.L), with length given by the belong at
31165# offset 0x58.
31166# there's no guarantee that the title string is null-terminated, but
31167# we currently can't specify a variable-length string where the length
31168# field is not at the start of the string; in practice, the data
31169# following the string always seems to start with a zero byte
31170>(78.L)		belong		x
31171>>&(&0x50.L-4)	string		>\0		"%s"
31172>0		use		aportisdoc
31173>>(78.L+0x68)	belong		>0		\b, version %d
31174>>(78.L+0x1C)	belong		!0		\b, codepage %d
31175>>(78.L+0x0C)	beshort	 	>0		\b, encrypted (type %d)
31176
31177# AportisDoc/PalmDOC
3117860		string		TEXtREAd	AportisDoc/PalmDOC E-book
31179>0		string		>\0		"%s"
31180>0		use		aportisdoc
31181
31182# Variety of PalmOS document types
31183# Michael-John Turner <mj@debian.org>
31184# Thanks to Hasan Umit Ezerce <humit@tr-net.net.tr> for his DocType
3118560	string			BVokBDIC	BDicty PalmOS document
31186>0	string			>\0		"%s"
3118760	string			DB99DBOS	DB PalmOS document
31188>0	string			>\0		"%s"
3118960	string			vIMGView	FireViewer/ImageViewer PalmOS document
31190>0	string			>\0		"%s"
3119160	string			PmDBPmDB	HanDBase PalmOS document
31192>0	string			>\0		"%s"
3119360	string			InfoINDB	InfoView PalmOS document
31194>0	string			>\0		"%s"
3119560	string			ToGoToGo	iSilo PalmOS document
31196>0	string			>\0		"%s"
3119760	string			JfDbJBas	JFile PalmOS document
31198>0	string			>\0		"%s"
3119960	string			JfDbJFil	JFile Pro PalmOS document
31200>0	string			>\0		"%s"
3120160	string			DATALSdb	List PalmOS document
31202>0	string			>\0		"%s"
3120360	string			Mdb1Mdb1	MobileDB PalmOS document
31204>0	string			>\0		"%s"
3120560	string			PNRdPPrs	PeanutPress PalmOS document
31206>0	string			>\0		"%s"
3120760	string			DataPlkr	Plucker PalmOS document
31208>0	string			>\0		"%s"
3120960	string			DataSprd	QuickSheet PalmOS document
31210>0	string			>\0		"%s"
3121160	string			SM01SMem	SuperMemo PalmOS document
31212>0	string			>\0		"%s"
3121360	string			TEXtTlDc	TealDoc PalmOS document
31214>0	string			>\0		"%s"
3121560	string			InfoTlIf	TealInfo PalmOS document
31216>0	string			>\0		"%s"
3121760	string			DataTlMl	TealMeal PalmOS document
31218>0	string			>\0		"%s"
3121960	string			DataTlPt	TealPaint PalmOS document
31220>0	string			>\0		"%s"
3122160	string			dataTDBP	ThinkDB PalmOS document
31222>0	string			>\0		"%s"
3122360	string			TdatTide	Tides PalmOS document
31224>0	string			>\0		"%s"
3122560	string			ToRaTRPW	TomeRaider PalmOS document
31226>0	string			>\0		"%s"
31227
31228# A GutenPalm zTXT etext for use on Palm Pilots (http://gutenpalm.sf.net)
31229# For version 1.xx zTXTs, outputs version and numbers of bookmarks and
31230#   annotations.
31231# For other versions, just outputs version.
31232#
3123360		string		zTXT		A GutenPalm zTXT e-book
31234>0		string		>\0		"%s"
31235>(0x4E.L)	byte		0
31236>>(0x4E.L+1)	byte		x		(v0.%02d)
31237>(0x4E.L)	byte		1
31238>>(0x4E.L+1)	byte		x		(v1.%02d)
31239>>>(0x4E.L+10)	beshort		>0
31240>>>>(0x4E.L+10) beshort		<2		- 1 bookmark
31241>>>>(0x4E.L+10) beshort		>1		- %d bookmarks
31242>>>(0x4E.L+14)	beshort		>0
31243>>>>(0x4E.L+14) beshort		<2		- 1 annotation
31244>>>>(0x4E.L+14) beshort		>1		- %d annotations
31245>(0x4E.L)	byte		>1		(v%d.
31246>>(0x4E.L+1)	byte		x		%02d)
31247
31248# Palm OS .prc file types
3124960		string		libr
31250# flags, only bit 0 or bit 6
31251# https://en.wikipedia.org/wiki/PRC_%28Palm_OS%29
31252# https://web.mit.edu/tytso/www/pilot/prc-format.html
31253>0x20		beshort&0xffbe	0
31254>>0		string		>\0		Palm OS dynamic library data "%s"
3125560		string		ptch		Palm OS operating system patch data
31256>0		string		>\0		"%s"
31257
31258# Mobipocket (www.mobipocket.com), donated by Carl Witty
3125960	string			BOOKMOBI	Mobipocket E-book
31260>0	string			>\0		"%s"
31261
31262#------------------------------------------------------------------------------
31263# $File: parix,v 1.5 2020/03/08 22:18:32 christos Exp $
31264#
31265# Parix COFF executables
31266# From: Ignatios Souvatzis <ignatios@cs.uni-bonn.de>
31267#
312680	beshort&0xefff	0x8ACE	PARIX
31269>0	byte&0xf0	0x80	T800
31270>0	byte&0xf0	0x90	T9000
31271>19	byte&0x02	0x02	executable
31272>19	byte&0x02	0x00	object
31273>19	byte&0x0c	0x00	not stripped
31274#------------------------------------------------------------------------------
31275# $File: parrot,v 1.2 2019/04/19 00:42:27 christos Exp $
31276# parrot: file(1) magic for Parrot Virtual Machine
31277# URL:	https://www.lua.org/
31278# From: Lubomir Rintel <lkundrak@v3.sk>
31279
31280# Compiled Parrot byte code
312810	string	\376PBC\r\n\032\n	Parrot bytecode
31282>64	byte	x			%d.
31283>72	byte	x			\b%d,
31284>8	byte	>0			%d byte words,
31285>16	byte	0			little-endian,
31286>16	byte	1			big-endian,
31287>32	byte	0			IEEE-754 8 byte double floats,
31288>32	byte	1			x86 12 byte long double floats,
31289>32	byte	2			IEEE-754 16 byte long double floats,
31290>32	byte	3			MIPS 16 byte long double floats,
31291>32	byte	4			AIX 16 byte long double floats,
31292>32	byte	5			4-byte floats,
31293>40	byte	x			Parrot %d.
31294>48	byte	x			\b%d.
31295>56	byte	x			\b%d
31296#------------------------------------------------------------------------------
31297# $File: pascal,v 1.4 2022/07/30 16:53:06 christos Exp $
31298# pascal:  file(1) magic for Pascal source
31299#
313000	search/8192	(input,		Pascal source text
31301!:mime	text/x-pascal
31302#0	regex		\^program	Pascal source text
31303#!:mime	text/x-pascal
31304#0	regex           	\^record		Pascal source text
31305#!:mime	text/x-pascal
31306
31307# Free Pascal
313080	string	PPU	Pascal unit
31309>3	string	x	\b, version %s
31310
31311# From:		Joerg Jenderek
31312# URL:		https://en.wikipedia.org/wiki/Dan_Bricklin
313130	string/b	Type
31314# URL:		https://dl.winworldpc.com/Dan%20Bricklins%20Demo%20II%20Version%202%20Manual.7z
31315# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/d/dbd-v2.trid.xml
31316>4	string		D2		Dan Bricklin's Demo 2 demo
31317#!:mime	application/octet-stream
31318!:ext	dbd
31319# URL:		https://muhaz.org/turbo-pascal-download-details.html
31320# From:		Joerg Jenderek
31321# Note:		used by Turbo Pascal 5.5 TOUR.EXE
31322>4	string		T2		Turbo Pascal TOUR data
31323#!:mime	application/octet-stream
31324!:mime	application/x-borland-cbt
31325!:ext	cbt
31326# WHAT iS THAT?
31327#>4	string		\040P		Dan Bricklin's Demo 2 foo
31328#!:mime	application/octet-stream
31329# _PPRINT.SG2 _PASCII.SG2
31330#!:ext	sg2
31331# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/d/dbd-gen.trid.xml
31332>4	default		x		Dan Bricklin's Demo demo (generic)
31333#!:mime	application/octet-stream
31334!:ext	dbd
31335
31336#------------------------------------------------------------------------------
31337# $File: pbf,v 1.3 2019/04/19 00:42:27 christos Exp $
31338# file(1) magic(5) data for OpenStreetMap
31339
31340# OpenStreetMap Protocolbuffer Binary Format (.osm.pbf)
31341# https://wiki.openstreetmap.org/wiki/PBF_Format
31342# From: Markus Heidelberg <markus.heidelberg@web.de>
313430	belong&0xfffffff0	0
31344>4	beshort			0x0A09
31345>>6	string			OSMHeader	OpenStreetMap Protocolbuffer Binary Format
31346
31347#------------------------------------------------------------------------------
31348# $File: pbm,v 1.6 2009/09/19 16:28:11 christos Exp $
31349# pbm:  file(1) magic for Portable Bitmap files
31350#
31351# XXX - byte order?
31352#
313530	short	0x2a17	"compact bitmap" format (Poskanzer)
31354#------------------------------------------------------------------------------
31355# pc88:  file(1) magic for the NEC Home Computer
31356# v1.0
31357# Fabio R. Schmidlin <sd-snatcher@users.sourceforge.net>
31358
31359# PC88 2D disk image
313600x20		ulelong&0xFFFFFEFF	0x2A0
31361>0x10		string		\0\0\0\0\0\0\0\0\0\0
31362>>0x280		string		\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
31363>>>0x1A		ubyte&0xEF	0
31364>>>>0x1B	ubyte&0x8F	0
31365>>>>>0x1B	ubyte&70	<0x40
31366>>>>>>0x1C	ulelong	>0x21
31367>>>>>>>0		regex	[[:print:]]*	NEC PC-88 disk image, name=%s
31368>>>>>>>>0x1B	ubyte	0	\b, media=2D
31369>>>>>>>>0x1B	ubyte	0x10	\b, media=2DD
31370>>>>>>>>0x1B	ubyte	0x20	\b, media=2HD
31371>>>>>>>>0x1B	ubyte	0x30	\b, media=1D
31372>>>>>>>>0x1B	ubyte	0x40	\b, media=1DD
31373>>>>>>>>0x1A	ubyte	0x10	\b, write-protected
31374
31375
31376
31377
31378#------------------------------------------------------------------------------
31379# pc98:  file(1) magic for the MSX Home Computer
31380# v1.0
31381# Fabio R. Schmidlin <sd-snatcher@users.sourceforge.net>
31382
31383# Maki-chan v1 Graphic format
31384# The image resolution should be X=(44.L - 40.L) and Y=(46.L - 42.L), but I couldn't find a way to do so
31385# http://www.jisyo.com/viewer/faq/maki_tech.htm
313860	string/b		MAKI01 	Maki-chan v1.
31387>6	ubyte|0x20	x		\b%c image
31388>8	ubelong		>0x40404040	\b, system ID:
31389>>8	byte		x		%c
31390>>9	byte		x		\b%c
31391>>10	byte		x		\b%c
31392>>11	byte		x		\b%c
31393>44	ubeshort	x		\b, %dx
31394>46	ubeshort	x		\b%d
31395>38	ubeshort&2	0		\b, 16 paletted RGB colors
31396>38	ubeshort&2	2		\b, 8 fixed RGB colors
31397>38	ubeshort&1	1		\b, 2:1 dot aspect ratio
31398
31399# Maki-chan v2 Graphic format
31400# http://www.jisyo.com/viewer/faq/mag_tech.htm
31401# https://mooncore.eu/bunny/txt/makichan.htm
31402# http://metanest.jp/mag/mag.xhtml
314030	string/b		MAKI02\ \ 	Maki-chan v2 image,
31404>8	byte		x		system ID: %c
31405>9	byte		x		\b%c
31406>10	byte		x		\b%c
31407>11	byte		x		\b%c,
31408>13	search/0x200	\x1A
31409#Maki-chan video modes are a bit messy and seems to have been expanded over the years without too much planing:
31410#1) When offset1(ubeshort) !=0x0344:
31411# 1.1) And  offset3(ubyte).b7=0:
31412# - b0=pixel aspect ratio: 1=2:1   (note: this ignores that the machine's 1:1 pixel aspect ratio isn't really 1:1)
31413# - b1=number of colors: 0=16 colors, 1=8 colors
31414# - b2=Palette or fixed colors flag (called "analog" and "digital" in the doc): 0=Paletted, 1=Fixed colors encoded directly in the pixel data
31415# 1.2) And  offset3(ubyte).B7=1:
31416# - b0=256 paletted colors
31417# - b1=256 fixed colors using the MSX SCR8 palette
31418#2) When offset1(ubeshort) =0x0344:
31419# - 256x212 image with 19268 YJK colors. The usual resolution and color information fields from the file must be ignored
31420>>&1	ubeshort	0x0344		256x212, 19268 fixed YJK colors
31421>>&1	ubeshort	!0x0344
31422>>>&5	uleshort+1	x		%dx
31423>>>&7	uleshort+1	x		\b%d,
31424>>>&0	ubyte&0x86	0x00		16 paletted RGB colors
31425>>>&0	ubyte&0x86	0x02		8 paletted RGB colors
31426>>>&0	ubyte&0x86	0x04		16 fixed RGB colors
31427>>>&0	ubyte&0x86	0x06		8 fixed RGB colors
31428>>>&0	ubyte&0x81	0x80		256 paletted RGB colors
31429>>>&0	ubyte&0x81	0x81		256 fixed MSX-SCR8 colors
31430>>>&0	ubyte&0x01	1		\b, 2:1 dot aspect ratio
31431
31432# XLD4 (Q4) picture
3143311	string/b	MAJYO		XLD4(Q4) picture
31434
31435# Yanagisawa Pi picture
31436#0	string		Pi\x1A\0	Yanagisawa Pi picture
31437#>3	search/0x200	\x04
314380	string		Pi
31439>2	search/0x200	\x1A
31440>>&0	ubyte		0
31441>>>&3	ubyte		4		Yanagisawa Pi 16 color picture,
31442>>>&4	byte		x		system ID: %c
31443>>>&5	byte		x		\b%c
31444>>>&6	byte		x		\b%c
31445>>>&7	byte		x		\b%c,
31446>>>&10	ubeshort	x		%dx
31447>>>&12	ubeshort	x		\b%d
31448>>>&3	ubyte		8		Yanagisawa Pi 256 color picture
31449>>>&4	byte		x		system ID: %c
31450>>>&5	byte		x		\b%c
31451>>>&6	byte		x		\b%c
31452>>>&7	byte		x		\b%c,
31453>>>&10	ubeshort	x		%dx
31454>>>&12	ubeshort	x		\b%d
31455
31456#------------------------------------------------------------------------------
31457# $File: pci_ids,v 1.1 2022/04/02 14:47:42 christos Exp $
31458# pci.ids:  file(1) magic for PCI specific informations
31459#
31460
31461# Vendor identification (ID)		https://pci-ids.ucw.cz/v2.2/pci.ids
31462# show hexadecimal PCI vendor identification in human readable text form
314630	name	PCI-vendor
31464#			ID	vendor name
31465#>0	uleshort	=0x0f00	fOO
31466>0	uleshort	=0x1000	Broadcom
31467>0	uleshort	=0x1002	AMD/ATI
31468>0	uleshort	=0x1013	Cirrus Logic
31469>0	uleshort	=0x1014	IBM
31470>0	uleshort	=0x1022	AMD
31471>0	uleshort	=0x1050	Winbond
31472>0	uleshort	=0x105a	Promise
31473>0	uleshort	=0x1095	Silicon
31474>0	uleshort	=0x10EC	Realtek
31475>0	uleshort	=0x10de	NVIDIA
31476>0	uleshort	=0x1106	VIA
31477# Woodward McCoach, Inc.
31478>0	uleshort	=0x1231	Woodward
31479#
31480>0	uleshort	=0x1234	Bochs
31481>0	uleshort	=0x15ad	VMware
31482>0	uleshort	=0x1af4	Virtio
31483>0	uleshort	=0x1b36	QEMU
31484>0	uleshort	=0x1de1	Tekram
31485# maybe also Promise?
31486#>0	uleshort	=0x4289	Promise
31487#>0	uleshort	=0x66a1	FOO
31488>0	uleshort	=0x8086	Intel
31489>0	uleshort	=0x9004	Adaptec
31490# also Adaptec; but no example
31491>0	uleshort	=0x9005	Adaptec
31492# for unknown/missing manufactors
31493>0	default		x	UNKNOWN
31494>>0	uleshort		x	(%#4.4x)
31495
31496# https://blog.ladsai.com/pci-configuration-space-class-code.html
31497# Base class code			https://wiki.osdev.org/PCI
31498# show hexadecimal PCI class+sub+ProgIF identification in human readable text form
314990	name		PCI-class
31500#>0	ubyte		x	CLASS=%x
31501>0	ubyte		x
31502# Device was built prior definition of the class code field
31503>>0	ubyte		0x00	PRIOR
31504# Any device except for VGA-Compatible devices like: 2975BIOS.BIN Trm3x5.bin
31505# BUT also NVidia44.bin vgabios-stdvga-bin.rom
31506#>>>0	ubyte		0x00		NOT VGA
31507# VGA-Compatible Device; NO EXAMPLE found here!!
31508#>>>0	ubyte		0x01		VGA
31509# like 4243.bin
31510#>>>0	ubyte		0x04		SUB_CLASS_4
31511>>0	ubyte		0x01	storage controller
31512# device sub-type and its definition is dependent upon the base-type code
31513>>>1	ubyte		0x00		SCSI
31514>>>1	ubyte		0x01		IDE
31515>>>1	ubyte		0x02		Floppy
31516>>>1	ubyte		0x03		IPI
31517>>>0	ubyte		0x04		RAID
31518>>>1	ubyte		0x05		ATA
31519>>>1	ubyte		0x06		SATA
31520>>>1	ubyte		0x07		SAS
31521>>>1	ubyte		0x08		NVM
31522# 4650_sr5.bin "PROMISE" "FT TX4650 Ary X"
31523>>>1	ubyte		0x80		OTHER
31524>>0	ubyte		0x02	network controller
31525>>>1	ubyte		0x00		ethernet
31526>>>1	ubyte		0x01		token ring
31527>>>1	ubyte		0x02		FDDI
31528>>>1	ubyte		0x03		ATM
31529>>>1	ubyte		0x04		ISDN
31530>>>1	ubyte		0x05		WorldFip
31531# PICMG 2.14 Multi Computing
31532>>>1	ubyte		0x06		PICMG
31533>>>1	ubyte		0x80		OTHER
31534>>0	ubyte		0x03	display controller
31535>>0	ubyte		0x04	multimedia controller
31536>>0	ubyte		0x05	memory controller
31537>>0	ubyte		0x06	bridge device
31538# Simple Communication Controllers
31539>>0	ubyte		0x07	communication controller
31540# Base System Peripherals
31541>>0	ubyte		0x08	base peripheral
31542# Input Devices
31543>>0	ubyte		0x09	input device
31544# Docking Stations
31545>>0	ubyte		0x0A	docking station
31546>>0	ubyte		0x0B	processor
31547>>0	ubyte		0x0C	serial bus controller
31548>>0	ubyte		0x0D	wireless controller
31549# Intelligent I/O Controllers
31550>>0	ubyte		0x0E	I/O controller
31551# Satellite Communication Controllers
31552>>0	ubyte		0x0F	satellite controller
31553# Encryption/Decryption Controllers
31554>>0	ubyte		0x10	encryption controller
31555# Data Acquisition and Signal Processing Controllers
31556>>0	ubyte		0x11	signal controller
31557# Processing Accelerator
31558>>0	ubyte		0x12	processing accelerator
31559# Non-Essential Instrumentation
31560>>0	ubyte		0x13	non-essential
31561# reserved or unassigned
31562>>0	default		x
31563# device does not fit any defined class; Unassigned Class (Vendor specific)
31564>>>0		ubyte	0xFF		UNASSIGNED
31565# THIS SHOULD NOT HAPPEN! BUT CLASS=8f for Promise 4650_sr5.bin 8660_sr5.bin
31566>>>0		default	x		RESERVED
31567>>>>0 	ubyte	x		(%#x)
31568# Prog IF of PCI class code?
31569# defines the specific device programming interface
31570>2	ubyte		>0	\b, ProgIF=%u
31571
31572#------------------------------------------------------------------------------
31573# $File: pcjr,v 1.1 2021/01/09 15:09:58 christos Exp $
31574# pcjr:  file(1) magic for PCjr Cartridge image file format
31575# From: Francis Laniel <laniel_francis@privacyrequired.com>
315760	string	PCjr
31577>0x80	beshort	0x55aa	PCjr Cartridge image
31578>0x200	beshort	0x55aa	PCjr Cartridge image
31579
31580#------------------------------------------------------------------------------
31581# $File: pdf,v 1.16 2021/07/30 11:47:07 christos Exp $
31582# pdf:  file(1) magic for Portable Document Format
31583#
31584
315850	name	pdf
31586>8	search		/Count
31587>>&0	regex		[0-9]+		\b, %s pages
31588>8	search/512	/Filter/FlateDecode/	(zip deflate encoded)
31589
315900	string		%PDF-		PDF document
31591!:mime	application/pdf
31592!:strength +60
31593!:ext	pdf
31594>5	byte		x		\b, version %c
31595>7	byte		x		\b.%c
31596>0	use		pdf
31597
315980	string		\012%PDF-	PDF document
31599!:mime	application/pdf
31600!:strength +60
31601!:ext	pdf
31602>6	byte		x		\b, version %c
31603>8	byte		x		\b.%c
31604>0	use		pdf
31605
316060	string		\xef\xbb\xbf%PDF-	PDF document (UTF-8)
31607!:mime	application/pdf
31608!:strength +60
31609!:ext	pdf
31610>6	byte		x		\b, version %c
31611>8	byte		x		\b.%c
31612>0	use		pdf
31613
31614# From: Nick Schmalenberger <nick@schmalenberger.us>
31615# Forms Data Format
316160       string          %FDF-           FDF document
31617!:mime application/vnd.fdf
31618!:strength +60
31619!:ext	pdf
31620>5      byte            x               \b, version %c
31621>7      byte            x               \b.%c
31622
316230	search/256	%PDF-		PDF document
31624!:mime	application/pdf
31625!:strength +60
31626!:ext	pdf
31627>&0	byte		x		\b, version %c
31628>&2	byte		x		\b.%c
31629>0	use		pdf
31630
31631#------------------------------------------------------------------------------
31632# $File: pdp,v 1.11 2017/03/17 21:35:28 christos Exp $
31633# pdp:  file(1) magic for PDP-11 executable/object and APL workspace
31634#
316350	lelong		0101555		PDP-11 single precision APL workspace
316360	lelong		0101554		PDP-11 double precision APL workspace
31637#
31638# PDP-11 a.out
31639#
316400	leshort		0407		PDP-11 executable
31641>8	leshort		>0		not stripped
31642>15	byte		>0		- version %d
31643
31644# updated by Joerg Jenderek at Mar 2013
31645# GRR: line below too general as it catches also Windows precompiled setup information *.PNF
316460	leshort		0401
31647# skip *.PNF with WinDirPathOffset 58h
31648>68	ulelong		!0x00000058	PDP-11 UNIX/RT ldp
31649# skip *.PNF with high byte of InfVersionDatumCount zero
31650#>>15	byte		!0		PDP-11 UNIX/RT ldp
316510	leshort		0405		PDP-11 old overlay
31652
316530	leshort		0410		PDP-11 pure executable
31654>8	leshort		>0		not stripped
31655>15	byte		>0		- version %d
31656
316570	leshort		0411		PDP-11 separate I&D executable
31658>8	leshort		>0		not stripped
31659>15	byte		>0		- version %d
31660
316610	leshort		0437		PDP-11 kernel overlay
31662
31663# These last three are derived from 2.11BSD file(1)
316640	leshort		0413		PDP-11 demand-paged pure executable
31665>8	leshort		>0		not stripped
31666
316670	leshort		0430		PDP-11 overlaid pure executable
31668>8	leshort		>0		not stripped
31669
316700	leshort		0431		PDP-11 overlaid separate executable
31671>8	leshort		>0		not stripped
31672#------------------------------------------------------------------------------
31673# $File: perl,v 1.26 2017/02/21 18:34:55 christos Exp $
31674# perl:  file(1) magic for Larry Wall's perl language.
31675#
31676# The `eval' lines recognizes an outrageously clever hack.
31677# Keith Waclena <keith@cerberus.uchicago.edu>
31678# Send additions to <perl5-porters@perl.org>
316790	search/1024	eval\ "exec\ perl		Perl script text
31680!:mime	text/x-perl
316810	search/1024	eval\ "exec\ /bin/perl		Perl script text
31682!:mime	text/x-perl
316830	search/1024	eval\ "exec\ /usr/bin/perl	Perl script text
31684!:mime	text/x-perl
316850	search/1024	eval\ "exec\ /usr/local/bin/perl	Perl script text
31686!:mime	text/x-perl
316870	search/1024	eval\ 'exec\ perl		Perl script text
31688!:mime	text/x-perl
316890	search/1024	eval\ 'exec\ /bin/perl		Perl script text
31690!:mime	text/x-perl
316910	search/1024	eval\ 'exec\ /usr/bin/perl	Perl script text
31692!:mime	text/x-perl
316930	search/1024	eval\ 'exec\ /usr/local/bin/perl	Perl script text
31694!:mime	text/x-perl
316950	search/1024	eval\ '(exit\ $?0)'\ &&\ eval\ 'exec	Perl script text
31696!:mime	text/x-perl
316970	string	#!/usr/bin/env\ perl	Perl script text executable
31698!:mime	text/x-perl
316990	string	#!\ /usr/bin/env\ perl	Perl script text executable
31700!:mime	text/x-perl
317010	string	#!
31702>0	regex	\^#!.*/bin/perl([[:space:]].*)*$	Perl script text executable
31703!:mime	text/x-perl
31704
31705# by Dmitry V. Levin and Alexey Tourbin
31706# check the first line
317070	search/8192	package
31708>0	regex		\^package[\ \t]+[0-9A-Za-z_:]+\ *;	Perl5 module source text
31709!:strength + 40
31710# not 'p', check other lines
317110	search/8192	!p
31712>0	regex		\^package[\ \t]+[0-9A-Za-z_:]+\ *;
31713>>0	regex		\^1\ *;|\^(use|sub|my)\ .*[(;{=]	Perl5 module source text
31714!:strength + 75
31715
31716# Perl POD documents
31717# From: Tom Hukins <tom@eborcom.com>
317180	search/1024/W	\=pod\n		Perl POD document text
317190	search/1024/W	\n\=pod\n	Perl POD document text
317200	search/1024/W	\=head1\ 	Perl POD document text
317210	search/1024/W	\n\=head1\ 	Perl POD document text
317220	search/1024/W	\=head2\ 	Perl POD document text
317230	search/1024/W	\n\=head2\ 	Perl POD document text
317240	search/1024/W	\=encoding\ 	Perl POD document text
317250	search/1024/W	\n\=encoding\ 	Perl POD document text
31726
31727
31728# Perl Storable data files.
317290	string	perl-store	perl Storable (v0.6) data
31730>4	byte	>0	(net-order %d)
31731>>4	byte	&01	(network-ordered)
31732>>4	byte	=3	(major 1)
31733>>4	byte	=2	(major 1)
31734
317350	string	pst0	perl Storable (v0.7) data
31736>4	byte	>0
31737>>4	byte	&01	(network-ordered)
31738>>4	byte	=5	(major 2)
31739>>4	byte	=4	(major 2)
31740>>5	byte	>0	(minor %d)
31741
31742# This is Debian #742949 by Zefram <zefram@fysh.org>:
31743# -----------------------------------------------------------
31744# The Perl module Hash::SharedMem
31745# <https://metacpan.org/release/Hash-SharedMem> defines a file format
31746# for a key/value store.  Details of the file format are in the "DESIGN"
31747# file in the module distribution.  Magic:
317480	bequad	=0xa58afd185cbf5af7	Hash::SharedMem master file, big-endian
31749>8	bequad	<0x1000000
31750>>15	byte	>2	\b, line size 2^%d byte
31751>>14	byte	>2	\b, page size 2^%d byte
31752>>13	byte	&1
31753>>>13	byte	>1	\b, max fanout %d
317540	lequad	=0xa58afd185cbf5af7	Hash::SharedMem master file, little-endian
31755>8	lequad	<0x1000000
31756>>8	byte	>2	\b, line size 2^%d byte
31757>>9	byte	>2	\b, page size 2^%d byte
31758>>10	byte	&1
31759>>>10	byte	>1	\b, max fanout %d
317600	bequad	=0xc693dac5ed5e47c2	Hash::SharedMem data file, big-endian
31761>8	bequad	<0x1000000
31762>>15	byte	>2	\b, line size 2^%d byte
31763>>14	byte	>2	\b, page size 2^%d byte
31764>>13	byte	&1
31765>>>13	byte	>1	\b, max fanout %d
317660	lequad	=0xc693dac5ed5e47c2	Hash::SharedMem data file, little-endian
31767>8	lequad	<0x1000000
31768>>8	byte	>2	\b, line size 2^%d byte
31769>>9	byte	>2	\b, page size 2^%d byte
31770>>10	byte	&1
31771>>>10	byte	>1	\b, max fanout %d
31772
31773#------------------------------------------------------------------------------
31774# $File: pgf,v 1.3 2021/02/23 00:51:10 christos Exp $
31775# pgf: file(1) magic for Progressive Graphics File (PGF)
31776#
31777# <http://www.libpgf.org/uploads/media/PGF_Details_01.pdf>
31778# 2013 by Philipp Hahn <pmhahn debian org>
317790 string PGF Progressive Graphics image data,
31780!:mime image/x-pgf
31781>3	string	2	version %s,
31782>3	string	4	version %s,
31783>3	string	5	version %s,
31784>3	string	6	version %s,
31785#	PGFPreHeader
31786#>>4	lelong	x	header size %d,
31787#	PGFHeader
31788>>8	lelong	x	%d x
31789>>12	lelong	x	%d,
31790>>16	byte	x	%d levels,
31791>>17	byte	x	compression level %d,
31792>>18	byte	x	%d bpp,
31793>>19	byte	x	%d channels,
31794>>20	clear	x
31795>>20	byte	0	bitmap,
31796>>20	byte	1	gray scale,
31797>>20	byte	2	indexed color,
31798>>20	byte	3	RGB color,
31799>>20	byte	4	CMYK color,
31800>>20	byte	5	HSL color,
31801>>20	byte	6	HSB color,
31802>>20	byte	7	multi-channel,
31803>>20	byte	8	duo tone,
31804>>20	byte	9	LAB color,
31805>>20	byte	10	gray scale 16,
31806>>20	byte	11	RGB color 48,
31807>>20	byte	12	LAB color 48,
31808>>20	byte	13	CMYK color 64,
31809>>20	byte	14	deep multi-channel,
31810>>20	byte	15	duo tone 16,
31811>>20	byte	17	RGBA color,
31812>>20	byte	18	gray scale 32,
31813>>20	byte	19	RGB color 12,
31814>>20	byte	20	RGB color 16,
31815>>20	byte	255	unknown format,
31816>>20	default	x	format
31817>>>20	byte	x	\b %d,
31818>>21	byte	x	%d bpc
31819#	PGFPostHeader
31820#	Level-Sizes
31821#>>(4.l+4)	lelong x level 0 size: %d
31822#>>(4.l+8)	lelong x level 1 size: %d
31823#>>(4.l+12)	lelong x level 2 size: %d
31824
31825#------------------------------------------------------------------------------
31826# $File: pgp,v 1.25 2021/04/26 15:56:00 christos Exp $
31827# pgp:  file(1) magic for Pretty Good Privacy
31828
31829# Handling of binary PGP keys is in pgp-binary-keys.
31830# see https://lists.gnupg.org/pipermail/gnupg-devel/1999-September/016052.html
31831#
318320	beshort		0xa600			PGP encrypted data
31833#!:mime	application/pgp-encrypted
31834#0	string		-----BEGIN\040PGP	text/PGP armored data
31835!:mime	text/PGP # encoding: armored data
31836#>15	string	PUBLIC\040KEY\040BLOCK-	public key block
31837#>15	string	MESSAGE-		message
31838#>15	string	SIGNED\040MESSAGE-	signed message
31839#>15	string	PGP\040SIGNATURE-	signature
31840
31841# Update:	Joerg Jenderek
31842# URL:		http://en.wikipedia.org/wiki/Pretty_Good_Privacy
31843# Reference:	https://reposcope.com/mimetype/application/pgp-keys
318442	string	---BEGIN\040PGP\040PRIVATE\040KEY\040BLOCK-	PGP private key block
31845#!:mime	text/PGP
31846!:mime	application/pgp-keys
31847!:ext	asc
318482	string	---BEGIN\040PGP\040PUBLIC\040KEY\040BLOCK-	PGP public key block
31849!:mime	application/pgp-keys
31850!:ext	asc
31851>10	search/100	\n\n
31852>>&0	use		pgp
318530	string	-----BEGIN\040PGP\040MESSAGE-		PGP message
31854# https://reposcope.com/mimetype/application/pgp-encrypted
31855#!:mime	application/pgp
31856!:mime	application/pgp-encrypted
31857!:ext	asc
31858#!:ext	asc/pgp/gpg
31859>10	search/100	\n\n
31860>>&0	use		pgp
31861# Reference:	https://www.gnupg.org/gph/en/manual/x135.html
318620	string	-----BEGIN\040PGP\040SIGNED\040MESSAGE-	PGP signed message
31863#!:mime	text/plain
31864!:mime	text/PGP
31865#!:mime	application/pgp
31866!:ext	asc
318670	string	-----BEGIN\040PGP\040SIGNATURE-		PGP signature
31868# https://reposcope.com/mimetype/application/pgp-signature
31869!:mime	application/pgp-signature
31870!:ext	asc
31871>10	search/100	\n\n
31872>>&0	use		pgp
31873
31874# Decode the type of the packet based on it's base64 encoding.
31875# Idea from Mark Martinec
31876# The specification is in RFC 4880, section 4.2 and 4.3:
31877# https://tools.ietf.org/html/rfc4880#section-4.2
31878
318790	name		pgp
31880>0	byte		0x67		Reserved (old)
31881>0	byte		0x68		Public-Key Encrypted Session Key (old)
31882>0	byte		0x69		Signature (old)
31883>0	byte		0x6a		Symmetric-Key Encrypted Session Key (old)
31884>0	byte		0x6b		One-Pass Signature (old)
31885>0	byte		0x6c		Secret-Key (old)
31886>0	byte		0x6d		Public-Key (old)
31887>0	byte		0x6e		Secret-Subkey (old)
31888>0	byte		0x6f		Compressed Data (old)
31889>0	byte		0x70		Symmetrically Encrypted Data (old)
31890>0	byte		0x71		Marker (old)
31891>0	byte		0x72		Literal Data (old)
31892>0	byte		0x73		Trust (old)
31893>0	byte		0x74		User ID (old)
31894>0	byte		0x75		Public-Subkey (old)
31895>0	byte		0x76		Unused (old)
31896>0	byte		0x77
31897>>1	byte&0xc0	0x00		Reserved
31898>>1	byte&0xc0	0x40		Public-Key Encrypted Session Key
31899>>1	byte&0xc0	0x80		Signature
31900>>1	byte&0xc0	0xc0		Symmetric-Key Encrypted Session Key
31901>0	byte		0x78
31902>>1	byte&0xc0	0x00		One-Pass Signature
31903>>1	byte&0xc0	0x40		Secret-Key
31904>>1	byte&0xc0	0x80		Public-Key
31905>>1	byte&0xc0	0xc0		Secret-Subkey
31906>0	byte		0x79
31907>>1	byte&0xc0	0x00		Compressed Data
31908>>1	byte&0xc0	0x40		Symmetrically Encrypted Data
31909>>1	byte&0xc0	0x80		Marker
31910>>1	byte&0xc0	0xc0		Literal Data
31911>0	byte		0x7a
31912>>1	byte&0xc0	0x00		Trust
31913>>1	byte&0xc0	0x40		User ID
31914>>1	byte&0xc0	0x80		Public-Subkey
31915>>1	byte&0xc0	0xc0		Unused [z%x]
31916>0	byte		0x30
31917>>1	byte&0xc0	0x00		Unused [0%x]
31918>>1	byte&0xc0	0x40		User Attribute
31919>>1	byte&0xc0	0x80		Sym. Encrypted and Integrity Protected Data
31920>>1	byte&0xc0	0xc0		Modification Detection Code
31921
31922# magic signatures to detect PGP crypto material (from stef)
31923# detects and extracts metadata from:
31924#  - symmetric encrypted packet header
31925#  - RSA (e=65537) secret (sub-)keys
31926
31927# 1024b RSA encrypted data
31928
319290	string	\x84\x8c\x03		PGP RSA encrypted session key -
31930>3	belong	x			keyid: %08X
31931>7	belong	x			%08X
31932>11	byte	0x01			RSA (Encrypt or Sign) 1024b
31933>11	byte	0x02			RSA Encrypt-Only 1024b
31934>12	string	\x04\x00
31935>12	string	\x03\xff
31936>12	string	\x03\xfe
31937>12	string	\x03\xfd
31938>12	string	\x03\xfc
31939>12	string	\x03\xfb
31940>12	string	\x03\xfa
31941>12	string	\x03\xf9
31942>142	byte	0xd2			.
31943
31944# 2048b RSA encrypted data
31945
319460	string	\x85\x01\x0c\x03	PGP RSA encrypted session key -
31947>4	belong	x			keyid: %08X
31948>8	belong	x			%08X
31949>12	byte	0x01			RSA (Encrypt or Sign) 2048b
31950>12	byte	0x02			RSA Encrypt-Only 2048b
31951>13	string	\x08\x00
31952>13	string	\x07\xff
31953>13	string	\x07\xfe
31954>13	string	\x07\xfd
31955>13	string	\x07\xfc
31956>13	string	\x07\xfb
31957>13	string	\x07\xfa
31958>13	string	\x07\xf9
31959>271	byte	0xd2			.
31960
31961# 3072b RSA encrypted data
31962
319630	string	\x85\x01\x8c\x03	PGP RSA encrypted session key -
31964>4	belong	x			keyid: %08X
31965>8	belong	x			%08X
31966>12	byte	0x01			RSA (Encrypt or Sign) 3072b
31967>12	byte	0x02			RSA Encrypt-Only 3072b
31968>13	string	\x0c\x00
31969>13	string	\x0b\xff
31970>13	string	\x0b\xfe
31971>13	string	\x0b\xfd
31972>13	string	\x0b\xfc
31973>13	string	\x0b\xfb
31974>13	string	\x0b\xfa
31975>13	string	\x0b\xf9
31976>399	byte	0xd2			.
31977
31978# 4096b RSA encrypted data
31979
319800	string	\x85\x02\x0c\x03	PGP RSA encrypted session key -
31981>4	belong	x			keyid: %08X
31982>8	belong	x			%08X
31983>12	byte	0x01			RSA (Encrypt or Sign) 4096b
31984>12	byte	0x02			RSA Encrypt-Only 4096b
31985>13	string	\x10\x00
31986>13	string	\x0f\xff
31987>13	string	\x0f\xfe
31988>13	string	\x0f\xfd
31989>13	string	\x0f\xfc
31990>13	string	\x0f\xfb
31991>13	string	\x0f\xfa
31992>13	string	\x0f\xf9
31993>527	byte	0xd2			.
31994
31995# 8192b RSA encrypted data
31996
319970	string	\x85\x04\x0c\x03	PGP RSA encrypted session key -
31998>4	belong	x			keyid: %08X
31999>8	belong	x			%08X
32000>12	byte	0x01			RSA (Encrypt or Sign) 8192b
32001>12	byte	0x02			RSA Encrypt-Only 8192b
32002>13	string	\x20\x00
32003>13	string	\x1f\xff
32004>13	string	\x1f\xfe
32005>13	string	\x1f\xfd
32006>13	string	\x1f\xfc
32007>13	string	\x1f\xfb
32008>13	string	\x1f\xfa
32009>13	string	\x1f\xf9
32010>1039	byte	0xd2			.
32011
32012# 1024b Elgamal encrypted data
32013
320140	string	\x85\x01\x0e\x03	PGP Elgamal encrypted session key -
32015>4	belong	x			keyid: %08X
32016>8	belong	x			%08X
32017>12	byte	0x10			Elgamal Encrypt-Only 1024b.
32018>13	string	\x04\x00
32019>13	string	\x03\xff
32020>13	string	\x03\xfe
32021>13	string	\x03\xfd
32022>13	string	\x03\xfc
32023>13	string	\x03\xfb
32024>13	string	\x03\xfa
32025>13	string	\x03\xf9
32026
32027# 2048b Elgamal encrypted data
32028
320290	string	\x85\x02\x0e\x03	PGP Elgamal encrypted session key -
32030>4	belong	x			keyid: %08X
32031>8	belong	x			%08X
32032>12	byte	0x10			Elgamal Encrypt-Only 2048b.
32033>13	string	\x08\x00
32034>13	string	\x07\xff
32035>13	string	\x07\xfe
32036>13	string	\x07\xfd
32037>13	string	\x07\xfc
32038>13	string	\x07\xfb
32039>13	string	\x07\xfa
32040>13	string	\x07\xf9
32041
32042# 3072b Elgamal encrypted data
32043
320440	string	\x85\x03\x0e\x03	PGP Elgamal encrypted session key -
32045>4	belong	x			keyid: %08X
32046>8	belong	x			%08X
32047>12	byte	0x10			Elgamal Encrypt-Only 3072b.
32048>13	string	\x0c\x00
32049>13	string	\x0b\xff
32050>13	string	\x0b\xfe
32051>13	string	\x0b\xfd
32052>13	string	\x0b\xfc
32053>13	string	\x0b\xfb
32054>13	string	\x0b\xfa
32055>13	string	\x0b\xf9
32056
32057# crypto algo mapper
32058
320590	name	crypto
32060>0	byte	0x00			Plaintext or unencrypted data
32061>0	byte	0x01			IDEA
32062>0	byte	0x02			TripleDES
32063>0	byte	0x03			CAST5 (128 bit key)
32064>0	byte	0x04			Blowfish (128 bit key, 16 rounds)
32065>0	byte	0x07			AES with 128-bit key
32066>0	byte	0x08			AES with 192-bit key
32067>0	byte	0x09			AES with 256-bit key
32068>0	byte	0x0a			Twofish with 256-bit key
32069
32070# hash algo mapper
32071
320720	name	hash
32073>0	byte	0x01			MD5
32074>0	byte	0x02			SHA-1
32075>0	byte	0x03			RIPE-MD/160
32076>0	byte	0x08			SHA256
32077>0	byte	0x09			SHA384
32078>0	byte	0x0a			SHA512
32079>0	byte	0x0b			SHA224
32080
32081# display public key algorithms as human readable text
320820	name	key_algo
32083>0	byte	0x01			RSA (Encrypt or Sign)
32084# keep old look of version 5.28 without parentheses
32085>0	byte	0x02			RSA Encrypt-Only
32086>0	byte	0x03			RSA (Sign-Only)
32087>0	byte	16			ElGamal (Encrypt-Only)
32088>0	byte	17			DSA
32089>0	byte	18			Elliptic Curve
32090>0	byte	19			ECDSA
32091>0	byte	20			ElGamal (Encrypt or Sign)
32092>0	byte	21			Diffie-Hellman
32093>0	default	x
32094>>0	ubyte	<22			unknown (pub %d)
32095# this should never happen
32096>>0	ubyte	>21			invalid (%d)
32097
32098# pgp symmetric encrypted data
32099
321000	byte	0x8c			PGP symmetric key encrypted data -
32101>1	byte	0x0d
32102>1	byte	0x0c
32103>2	byte	0x04
32104>3	use	crypto
32105>4	byte	0x01			salted -
32106>>5	use	hash
32107>>14	byte	0xd2			.
32108>>14	byte	0xc9			.
32109>4	byte	0x03			salted & iterated -
32110>>5	use	hash
32111>>15	byte	0xd2			.
32112>>15	byte	0xc9			.
32113
32114# encrypted keymaterial needs s2k & can be checksummed/hashed
32115
321160	name	chkcrypto
32117>0	use	crypto
32118>1	byte	0x00			Simple S2K
32119>1	byte	0x01			Salted S2K
32120>1	byte	0x03			Salted&Iterated S2K
32121>2	use	hash
32122
32123# all PGP keys start with this prolog
32124# containing version, creation date, and purpose
32125
321260	name	keyprolog
32127>0	byte	0x04
32128>1	beldate	x			created on %s -
32129>5	byte	0x01			RSA (Encrypt or Sign)
32130>5	byte	0x02			RSA Encrypt-Only
32131
32132# end of secret keys known signature
32133# contains e=65537 and the prolog to
32134# the encrypted parameters
32135
321360	name	keyend
32137>0	string	\x00\x11\x01\x00\x01	e=65537
32138>5	use	crypto
32139>5	byte	0xff			checksummed
32140>>6	use	chkcrypto
32141>5	byte	0xfe			hashed
32142>>6	use	chkcrypto
32143
32144# PGP secret keys contain also the public parts
32145# these vary by bitsize of the key
32146
321470	name	x1024
32148>0	use	keyprolog
32149>6	string	\x03\xfe
32150>6	string	\x03\xff
32151>6	string	\x04\x00
32152>136	use	keyend
32153
321540	name	x2048
32155>0	use	keyprolog
32156>6	string	\x80\x00
32157>6	string	\x07\xfe
32158>6	string	\x07\xff
32159>264	use	keyend
32160
321610	name	x3072
32162>0	use	keyprolog
32163>6	string	\x0b\xfe
32164>6	string	\x0b\xff
32165>6	string	\x0c\x00
32166>392	use	keyend
32167
321680	name	x4096
32169>0	use	keyprolog
32170>6	string	\x10\x00
32171>6	string	\x0f\xfe
32172>6	string	\x0f\xff
32173>520	use	keyend
32174
32175# \x00|\x1f[\xfe\xff]).{1024})'
321760	name	x8192
32177>0	use	keyprolog
32178>6	string	\x20\x00
32179>6	string	\x1f\xfe
32180>6	string	\x1f\xff
32181>1032	use	keyend
32182
32183# depending on the size of the pkt
32184# we branch into the proper key size
32185# signatures defined as x{keysize}
32186
321870	name	pgpkey
32188>0	string	\x01\xd8	1024b
32189>>2	use	x1024
32190>0	string	\x01\xeb	1024b
32191>>2	use	x1024
32192>0	string	\x01\xfb	1024b
32193>>2	use	x1024
32194>0	string	\x01\xfd	1024b
32195>>2	use	x1024
32196>0	string	\x01\xf3	1024b
32197>>2	use	x1024
32198>0	string	\x01\xee	1024b
32199>>2	use	x1024
32200>0	string	\x01\xfe	1024b
32201>>2	use	x1024
32202>0	string	\x01\xf4	1024b
32203>>2	use	x1024
32204>0	string	\x02\x0d	1024b
32205>>2	use	x1024
32206>0	string	\x02\x03	1024b
32207>>2	use	x1024
32208>0	string	\x02\x05	1024b
32209>>2	use	x1024
32210>0	string	\x02\x15	1024b
32211>>2	use	x1024
32212>0	string	\x02\x00	1024b
32213>>2	use	x1024
32214>0	string	\x02\x10	1024b
32215>>2	use	x1024
32216>0	string	\x02\x04	1024b
32217>>2	use	x1024
32218>0	string	\x02\x06	1024b
32219>>2	use	x1024
32220>0	string	\x02\x16	1024b
32221>>2	use	x1024
32222>0	string	\x03\x98	2048b
32223>>2	use	x2048
32224>0	string	\x03\xab	2048b
32225>>2	use	x2048
32226>0	string	\x03\xbb	2048b
32227>>2	use	x2048
32228>0	string	\x03\xbd	2048b
32229>>2	use	x2048
32230>0	string	\x03\xcd	2048b
32231>>2	use	x2048
32232>0	string	\x03\xb3	2048b
32233>>2	use	x2048
32234>0	string	\x03\xc3	2048b
32235>>2	use	x2048
32236>0	string	\x03\xc5	2048b
32237>>2	use	x2048
32238>0	string	\x03\xd5	2048b
32239>>2	use	x2048
32240>0	string	\x03\xae	2048b
32241>>2	use	x2048
32242>0	string	\x03\xbe	2048b
32243>>2	use	x2048
32244>0	string	\x03\xc0	2048b
32245>>2	use	x2048
32246>0	string	\x03\xd0	2048b
32247>>2	use	x2048
32248>0	string	\x03\xb4	2048b
32249>>2	use	x2048
32250>0	string	\x03\xc4	2048b
32251>>2	use	x2048
32252>0	string	\x03\xc6	2048b
32253>>2	use	x2048
32254>0	string	\x03\xd6	2048b
32255>>2	use	x2048
32256>0	string	\x05X		3072b
32257>>2	use	x3072
32258>0	string	\x05k		3072b
32259>>2	use	x3072
32260>0	string	\x05{		3072b
32261>>2	use	x3072
32262>0	string	\x05}		3072b
32263>>2	use	x3072
32264>0	string	\x05\x8d	3072b
32265>>2	use	x3072
32266>0	string	\x05s		3072b
32267>>2	use	x3072
32268>0	string	\x05\x83	3072b
32269>>2	use	x3072
32270>0	string	\x05\x85	3072b
32271>>2	use	x3072
32272>0	string	\x05\x95	3072b
32273>>2	use	x3072
32274>0	string	\x05n		3072b
32275>>2	use	x3072
32276>0	string	\x05\x7e	3072b
32277>>2	use	x3072
32278>0	string	\x05\x80	3072b
32279>>2	use	x3072
32280>0	string	\x05\x90	3072b
32281>>2	use	x3072
32282>0	string	\x05t		3072b
32283>>2	use	x3072
32284>0	string	\x05\x84	3072b
32285>>2	use	x3072
32286>0	string	\x05\x86	3072b
32287>>2	use	x3072
32288>0	string	\x05\x96	3072b
32289>>2	use	x3072
32290>0	string	\x07[		4096b
32291>>2	use	x4096
32292>0	string	\x07\x18	4096b
32293>>2	use	x4096
32294>0	string	\x07+		4096b
32295>>2	use	x4096
32296>0	string	\x07;		4096b
32297>>2	use	x4096
32298>0	string	\x07=		4096b
32299>>2	use	x4096
32300>0	string	\x07M		4096b
32301>>2	use	x4096
32302>0	string	\x073		4096b
32303>>2	use	x4096
32304>0	string	\x07C		4096b
32305>>2	use	x4096
32306>0	string	\x07E		4096b
32307>>2	use	x4096
32308>0	string	\x07U		4096b
32309>>2	use	x4096
32310>0	string	\x07.		4096b
32311>>2	use	x4096
32312>0	string	\x07>		4096b
32313>>2	use	x4096
32314>0	string	\x07@		4096b
32315>>2	use	x4096
32316>0	string	\x07P		4096b
32317>>2	use	x4096
32318>0	string	\x074		4096b
32319>>2	use	x4096
32320>0	string	\x07D		4096b
32321>>2	use	x4096
32322>0	string	\x07F		4096b
32323>>2	use	x4096
32324>0	string	\x07V		4096b
32325>>2	use	x4096
32326>0	string	\x0e[		8192b
32327>>2	use	x8192
32328>0	string	\x0e\x18	8192b
32329>>2	use	x8192
32330>0	string	\x0e+		8192b
32331>>2	use	x8192
32332>0	string	\x0e;		8192b
32333>>2	use	x8192
32334>0	string	\x0e=		8192b
32335>>2	use	x8192
32336>0	string	\x0eM		8192b
32337>>2	use	x8192
32338>0	string	\x0e3		8192b
32339>>2	use	x8192
32340>0	string	\x0eC		8192b
32341>>2	use	x8192
32342>0	string	\x0eE		8192b
32343>>2	use	x8192
32344>0	string	\x0eU		8192b
32345>>2	use	x8192
32346>0	string	\x0e.		8192b
32347>>2	use	x8192
32348>0	string	\x0e>		8192b
32349>>2	use	x8192
32350>0	string	\x0e@		8192b
32351>>2	use	x8192
32352>0	string	\x0eP		8192b
32353>>2	use	x8192
32354>0	string	\x0e4		8192b
32355>>2	use	x8192
32356>0	string	\x0eD		8192b
32357>>2	use	x8192
32358>0	string	\x0eF		8192b
32359>>2	use	x8192
32360>0	string	\x0eV		8192b
32361>>2	use	x8192
32362
32363# PGP RSA (e=65537) secret (sub-)key header
32364
323650	byte	0x97			PGP Secret Sub-key -
32366>1	use	pgpkey
323670	byte	0x9d
32368# Update: Joerg Jenderek
32369# secret subkey packet (tag 7) with same structure as secret key packet (tag 5)
32370# skip Fetus.Sys16 CALIBUS.MAIN OrbFix.Sys16.Ex by looking for positive len
32371>1	ubeshort	>0
32372#>1	ubeshort	x		\b, body length %#x
32373# next packet type often 88h,89h~(tag 2)~Signature Packet
32374#>>(1.S+3)	ubyte	x		\b, next packet type %#x
32375# skip Dragon.SHR DEMO.INIT by looking for positive version
32376>>3	ubyte		>0
32377# skip BUISSON.13 GUITAR1 by looking for low version number
32378>>>3	ubyte		<5		PGP Secret Sub-key
32379# sub-key are normally part of secret key. So it does not occur as standalone file
32380#!:ext	bin
32381# version 2,3~old 4~new . Comment following line for version 5.28 look
32382>>>>3	ubyte		x		(v%d)
32383>>>>3	ubyte		x		-
32384# old versions 2 or 3 but no real example found
32385>>>>3	ubyte		<4
32386# 2 byte for key bits in version 5.28 look
32387>>>>>11		ubeshort	x	%db
32388>>>>>4		beldate		x	created on %s -
32389# old versions use 2 additional bytes after time stamp
32390#>>>>>8		ubeshort	x	%#x
32391# display key algorithm 1~RSA Encrypt|Sign - 21~Diffie-Hellman
32392>>>>>10	  	use		key_algo
32393>>>>>(11.S/8)	ubequad		x
32394# look after first key
32395>>>>>>&5	use		keyend
32396# new version
32397>>>>3	ubyte		>3
32398>>>>>9		ubeshort	x	%db
32399>>>>>4		beldate		x	created on %s -
32400# display key algorithm
32401>>>>>8		use		key_algo
32402>>>>>(9.S/8)	ubequad		x
32403# look after first key for something like s2k
32404>>>>>>&3	use		keyend
32405
32406#------------------------------------------------------------------------------
32407# $File: pgp-binary-keys,v 1.2 2021/04/26 15:56:00 christos Exp $
32408# pgp-binary-keys: This file handles pgp binary keys.
32409#
32410# An PGP certificate or message doesn't have a fixed header.  Instead,
32411# they are sequences of packets:
32412#
32413#   https://tools.ietf.org/html/rfc4880#section-4.3
32414#
32415# whose order conforms to a grammar:
32416#
32417#   https://tools.ietf.org/html/rfc4880#section-11
32418#
32419# Happily most packets have a few fields that are constrained, which
32420# allow us to fingerprint them with relatively high certainty.
32421#
32422# A PGP packet is described by a single byte: the so-called CTB.  The
32423# high-bit is always set.  If bit 6 is set, then it is a so-called
32424# new-style CTB; if bit 6 is clear, then it is a so-called old-style
32425# CTB.  Old-style CTBs have only four bits of type information; bits
32426# 1-0 are used to describe the length.  New-style CTBs have 6 bits of
32427# type information.
32428#
32429# Following the CTB is the packet's length in bytes.  If we blindly
32430# advance the file cursor by this amount past the end of the length
32431# information we come to the next packet.
32432#
32433# Data Structures
32434# ===============
32435#
32436# New Style CTB
32437# -------------
32438#
32439# https://tools.ietf.org/html/rfc4880#section-4.2.2
32440#
32441#   76543210
32442#   ||\----/
32443#   ||  tag
32444#   |always 1
32445#   always 1
32446#
32447#      Tag   bits 7 and 6 set
32448#       0       0xC0        -- Reserved - a packet tag MUST NOT have this value
32449#       1       0xC1        -- Public-Key Encrypted Session Key Packet
32450#       2       0xC2        -- Signature Packet
32451#       3       0xC3        -- Symmetric-Key Encrypted Session Key Packet
32452#       4       0xC4        -- One-Pass Signature Packet
32453#       5       0xC5        -- Secret-Key Packet
32454#       6       0xC6        -- Public-Key Packet
32455#       7       0xC7        -- Secret-Subkey Packet
32456#       8       0xC8        -- Compressed Data Packet
32457#       9       0xC9        -- Symmetrically Encrypted Data Packet
32458#       10      0xCA        -- Marker Packet
32459#       11      0xCB        -- Literal Data Packet
32460#       12      0xCC        -- Trust Packet
32461#       13      0xCD        -- User ID Packet
32462#       14      0xCE        -- Public-Subkey Packet
32463#       17      0xD1        -- User Attribute Packet
32464#       18      0xD2        -- Sym. Encrypted and Integrity Protected Data Packet
32465#       19      0xD3        -- Modification Detection Code Packet
32466#       60 to 63 -- Private or Experimental Values
32467#
32468# The CTB is followed by the length header, which is densely encoded:
32469#
32470#   if length[0] is:
32471#     0..191: one byte length (length[0])
32472#     192..223: two byte length ((length[0] - 192) * 256 + length[2] + 192
32473#     224..254: four byte length (big endian interpretation of length[1..5])
32474#     255: partial body encoding
32475#
32476# The partial body encoding is similar to HTTP's chunk encoding.  It
32477# is only allowed for container packets (SEIP, Compressed Data and
32478# Literal).
32479#
32480# Old Style CTB
32481# -------------
32482#
32483#  https://tools.ietf.org/html/rfc4880#section-4.2.1
32484#
32485# CTB:
32486#
32487#   76543210
32488#   ||\--/\/
32489#   ||  |  length encoding
32490#   ||  tag
32491#   |always 0
32492#   always 1
32493#
32494# Tag:
32495#
32496#      Tag   bit 7 set, bits 6, 1, 0 clear
32497#       0       0x80        -- Reserved - a packet tag MUST NOT have this value
32498#       1       0x84        -- Public-Key Encrypted Session Key Packet
32499#       2       0x88        -- Signature Packet
32500#       3       0x8C        -- Symmetric-Key Encrypted Session Key Packet
32501#       4       0x90        -- One-Pass Signature Packet
32502#       5       0x94        -- Secret-Key Packet
32503#       6       0x98        -- Public-Key Packet
32504#       7       0x9C        -- Secret-Subkey Packet
32505#       8       0xA0        -- Compressed Data Packet
32506#       9       0xA4        -- Symmetrically Encrypted Data Packet
32507#       10      0xA8        -- Marker Packet
32508#       11      0xAC        -- Literal Data Packet
32509#       12      0xB0        -- Trust Packet
32510#       13      0xB4        -- User ID Packet
32511#       14      0xB8        -- Public-Subkey Packet
32512#
32513# Length encoding:
32514#
32515#     Value
32516#       0      1 byte length (following byte is the length)
32517#       1      2 byte length (following two bytes are the length)
32518#       2      4 byte length (following four bytes are the length)
32519#       3      indeterminate length: natural end of packet, e.g., EOF
32520#
32521# An indeterminate length is only allowed for container packets
32522# (SEIP, Compressed Data and Literal).
32523#
32524# Certificates
32525# ------------
32526#
32527# We check the first three packets to determine if a sequence of
32528# OpenPGP packets is likely to be a certificate.  The grammar allows
32529# the following prefixes:
32530#
32531#   [Primary Key] [SIG] (EOF or another certificate)
32532#   [Primary Key] [SIG]            [User ID]        [SIG]...
32533#   [Primary Key] [SIG]            [User Attribute] [SIG]...
32534#   [Primary Key] [SIG]            [Subkey]         [SIG]...
32535#   [Primary Key] [User ID]        [SIG]...
32536#   [Primary Key] [User Attribute] [SIG]...
32537#   [Primary Key] [Subkey]         [SIG]...
32538#
32539# Any number of marker packets are also allowed between each packet,
32540# but they are not normally used and we don't currently check for
32541# them.
32542#
32543# The keys and subkeys may be public or private.
32544#
32545
32546# Key packets and signature packets are versioned.  There are two
32547# packet versions that we need to worry about in practice: v3 and v4.
32548# v4 packets were introduced in RFC 2440, which was published in 1998.
32549# It also deprecated v3 packets.  There are no actively used v3
32550# certificates (GnuPG removed the code to support them in November
32551# 2014).  But there are v3 keys lying around and it is useful to
32552# identify them.  The next version of OpenPGP will introduce v5 keys.
32553# The document has not yet been standardized so changes are still
32554# possible.  But, for our purposes, it appears that v5 data structures
32555# will be identical to v4 data structures modulo the version number.
32556#
32557#   https://tools.ietf.org/html/rfc2440
32558#   https://lists.gnupg.org/pipermail/gnupg-announce/2014q4/000358.html
32559#   https://www.ietf.org/id/draft-ietf-openpgp-rfc4880bis-09.html#name-key-material-packet
32560
32561
32562
32563
32564# The first packet has to be a public key or a secret key.
32565#
32566# New-Style Public Key
325670	ubyte			=0xC6	OpenPGP Public Key
32568>&0	use			primary_key_length_new
32569# New-Style Secret Key
325700	ubyte			=0xC5	OpenPGP Secret Key
32571>&0	use			primary_key_length_new
32572# Old-Style Public Key
325730	ubyte&0xFC		=0x98	OpenPGP Public Key
32574>&-1	use			primary_key_length_old
32575# Old-Style Secret Key
325760	ubyte&0xFC		=0x94	OpenPGP Secret Key
32577>&-1	use			primary_key_length_old
32578
32579# Parse the length, check the packet's body and finally advance to the
32580# next packet.
32581
32582# There are 4 different new-style length encodings, but the partial
32583# body encoding is only acceptable for the SEIP, Compressed Data, and
32584# Literal packets, which isn't valid for any packets in a certificate
32585# so we ignore it.
325860		name		primary_key_length_new
32587>&0		ubyte		<192
32588#>>&0		ubyte		x		(1 byte length encoding, %d bytes)
32589>>&0		use		pgp_binary_key_pk_check
32590>>>&(&-1.B)	use		sig_or_component_1
32591>&0		ubyte		>191
32592>>&-1		ubyte		<225
32593# offset = ((offset[0] - 192) << 8) + offset[1] + 192 (for the length header)
32594# raw - (192 * 256 - 192)
32595# = 48960
32596#>>>&0		ubeshort		x	(2 byte length encoding, %d bytes)
32597>>>&1		use		pgp_binary_key_pk_check
32598>>>>&(&-2.S-48960)	use	sig_or_component_1
32599>&0		ubyte		=255
32600#>>&0   	belong		x		(5 byte length encoding, %d bytes)
32601>>&4		use		pgp_binary_key_pk_check
32602>>>&(&-4.L)	use		sig_or_component_1
32603# Partial body encoding (only valid for container packets).
32604# >&0		ubyte	>224
32605# >>&0		ubyte		<255		partial body encoding
32606
32607# There are 4 different old-style length encodings, but the
32608# indeterminate length encoding is only acceptable for the SEIP,
32609# Compressed Data, and Literal packets, which isn't valid for any
32610# packets in a certificate.
326110		name		primary_key_length_old
32612#>&0		ubyte		x		(ctb: %x)
32613>&0		ubyte&0x3	=0
32614#>>&0    	ubyte		x		(1 byte length encoding, %d bytes)
32615>>&1		use		pgp_binary_key_pk_check
32616>>>&(&-1.B)	use		sig_or_component_1
32617>&0		ubyte&0x3	=1
32618#>>&0    	ubeshort	x		(2 byte length encoding, %d bytes)
32619>>&2		use		pgp_binary_key_pk_check
32620>>>&(&-2.S)	use		sig_or_component_1
32621>&0		ubyte&0x3	=2
32622#>>&0    	ubelong	x		(4 byte length encoding, %d bytes)
32623>>&4		use		pgp_binary_key_pk_check
32624>>>&(&-4.L)	use		sig_or_component_1
32625
32626# Check the Key.
32627#
32628# https://tools.ietf.org/html/rfc4880#section-5.5.2
326290		name		pgp_binary_key_pk_check
32630# Valid versions are: 2, 3, 4.  5 is proposed in RFC 4880bis.
32631# Anticipate a v6 / v7 format that like v5 is compatible with v4.
32632# key format in a decade or so :D.
32633>&0		ubyte		>1
32634>>&-1		ubyte		<8
32635>>>&-1		byte		x		Version %d
32636# Check that keys were created after 1990.
32637# (1990 - 1970) * 365.2524 * 24 * 60 * 60 = 631156147
32638>>>&0		bedate		>631156147      \b, Created %s
32639>>>>&-5		ubyte		>3
32640>>>>>&4		use		pgp_binary_key_algo
32641>>>>&-5		ubyte		<4
32642>>>>>&6		use		pgp_binary_key_algo
32643
32644# Print out the key's algorithm and the number of bits, if this is
32645# relevant (ECC keys are a fixed size).
326460		name		pgp_binary_key_algo
32647>0		clear		x
32648>&0		ubyte		=1	\b, RSA (Encrypt or Sign,
32649>>&0		ubeshort	x	\b %d bits)
32650>&0		ubyte		=2	\b, RSA (Encrypt,
32651>>&0		ubeshort	x	\b %d bits)
32652>&0		ubyte		=3	\b, RSA (Sign,
32653>>&0		ubeshort	x	\b %d bits)
32654>&0		ubyte		=16	\b, El Gamal (Encrypt,
32655>>&0		ubeshort	x	\b %d bits)
32656>&0		ubyte		=17	\b, DSA
32657>>&0		ubeshort	x	\b (%d bits)
32658>&0		ubyte		=18	\b, ECDH
32659>&0		ubyte		=19	\b, ECDSA
32660>&0		ubyte		=20	\b, El Gamal (Encrypt or Sign,
32661>>&0		ubeshort	x	\b %d bits)
32662>&0		ubyte		=22	\b, EdDSA
32663>&0		default         x
32664>>&0		ubyte		x	\b, Unknown Algorithm (%#x)
32665
32666# Match all possible second packets.
326670	name		sig_or_component_1
32668#>0	ubyte		x	(ctb: %x)
32669>&0	ubyte		=0xC2
32670>>0	ubyte		x	\b; Signature
32671>>&0	use		sig_or_component_1_length_new
32672>&0	ubyte		=0xCD
32673>>0	ubyte		x	\b; User ID
32674>>&0	use		sig_or_component_1_length_new
32675>&0	ubyte		=0xCE
32676>>0	ubyte		x	\b; Public Subkey
32677>>&0	use		sig_or_component_1_length_new
32678>&0	ubyte		=0xC7
32679>>0	ubyte		x	\b; Secret Subkey
32680>>&0	use		sig_or_component_1_length_new
32681>&0	ubyte		=0xD1
32682>>0	ubyte		x	\b; User Attribute
32683>>&0	use		sig_or_component_1_length_new
32684>&0	ubyte&0xFC	=0x88
32685>>0	ubyte		x	\b; Signature
32686>>&-1	use		sig_or_component_1_length_old
32687>&0	ubyte&0xFC	=0xB4
32688>>0	ubyte		x	\b; User ID
32689>>&-1	use		sig_or_component_1_length_old
32690>&0	ubyte&0xFC	=0xB8
32691>>0	ubyte		x	\b; Public Subkey
32692>>&-1	use		sig_or_component_1_length_old
32693>&0	ubyte&0xFC	=0x9C
32694>>0	ubyte		x	\b; Secret Subkey
32695>>&-1	use		sig_or_component_1_length_old
32696
32697# Copy of 'primary_key_length_new', but calls cert_packet_3.
326980		name		sig_or_component_1_length_new
32699>&0		ubyte		<192
32700#>>&0		ubyte		x		(1 byte new length encoding, %d bytes)
32701>>&(&-1.B)	use		cert_packet_3
32702>&0		ubyte		>191
32703>>&-1		ubyte		<225
32704# offset = ((offset[0] - 192) << 8) + offset[1] + 192 + 1 (for the length header)
32705# raw - (192 * 256 - 192 - 1)
32706# = 48959
32707#>>>&-1		ubeshort		x	(2 byte new length encoding, %d bytes)
32708>>>&(&-1.S-48959)	use	cert_packet_3
32709>&0		ubyte		=255
32710#>>&0   	belong		x		(5 byte new length encoding, %d bytes)
32711>>&(&-4.L)	use		cert_packet_3
32712# Partial body encoding (only valid for container packets).
32713# >&0		ubyte	>224
32714# >>&0		ubyte		<255		partial body encoding
32715
327160		name		sig_or_component_1_length_old
32717#>&0		ubyte		x		(ctb: %x)
32718>&0		ubyte&0x3	=0
32719#>>&0    	ubyte		x		(1 byte old length encoding, %d bytes)
32720>>&(&0.B+1)	use		cert_packet_3
32721>&0		ubyte&0x3	=1
32722#>>&0    	ubeshort	x		(2 byte old length encoding, %d bytes)
32723>>&(&0.S+2)	use		cert_packet_3
32724>&0		ubyte&0x3	=2
32725#>>&0    	ubelong	x		(4 byte old length encoding, %d bytes)
32726>>&(&0.L+4)	use		cert_packet_3
32727
32728# Copy of above.
327290	name		cert_packet_3
32730#>0	ubyte		x	(ctb: %x)
32731>&0	ubyte		=0xC2
32732>>0	ubyte		x	\b; Signature
32733>>&0	use		cert_packet_3_length_new
32734>&0	ubyte		=0xCD
32735>>0	ubyte		x	\b; User ID
32736>>&0	use		cert_packet_3_length_new
32737>&0	ubyte		=0xCE
32738>>0	ubyte		x	\b; Public Subkey
32739>>&0	use		cert_packet_3_length_new
32740>&0	ubyte		=0xC7
32741>>0	ubyte		x	\b; Secret Subkey
32742>>&0	use		cert_packet_3_length_new
32743>&0	ubyte		=0xD1
32744>>0	ubyte		x	\b; User Attribute
32745>>&0	use		cert_packet_3_length_new
32746>&0	ubyte&0xFC	=0x88
32747>>0	ubyte		x	\b; Signature
32748>>&-1	use		cert_packet_3_length_old
32749>&0	ubyte&0xFC	=0xB4
32750>>0	ubyte		x	\b; User ID
32751>>&-1	use		cert_packet_3_length_old
32752>&0	ubyte&0xFC	=0xB8
32753>>0	ubyte		x	\b; Public Subkey
32754>>&-1	use		cert_packet_3_length_old
32755>&0	ubyte&0xFC	=0x9C
32756>>0	ubyte		x	\b; Secret Subkey
32757>>&-1	use		cert_packet_3_length_old
32758
32759# Copy of above.
327600		name		cert_packet_3_length_new
32761>&0		ubyte		<192
32762#>>&0		ubyte		x		(1 byte new length encoding, %d bytes)
32763>>&(&-1.B)	use		pgp_binary_keys_end
32764>&0		ubyte		>191
32765>>&-1		ubyte		<225
32766# offset = ((offset[0] - 192) << 8) + offset[1] + 192 + 1 (for the length header)
32767# raw - (192 * 256 - 192 - 1)
32768# = 48959
32769#>>>&-1		ubeshort		x	(2 byte new length encoding, %d bytes)
32770>>>&(&-1.S-48959)	use	pgp_binary_keys_end
32771>&0		ubyte		=255
32772#>>&0   	belong		x		(5 byte new length encoding, %d bytes)
32773>>&(&-4.L)	use		pgp_binary_keys_end
32774
327750		name		cert_packet_3_length_old
32776#>&0		ubyte		x		(ctb: %x)
32777>&0		ubyte&0x3	=0
32778#>>&0    	ubyte		x		(1 byte old length encoding, %d bytes)
32779>>&(&0.B+1)	use		pgp_binary_keys_end
32780>&0		ubyte&0x3	=1
32781#>>&0    	ubeshort	x		(2 byte old length encoding, %d bytes)
32782>>&(&0.S+2)	use		pgp_binary_keys_end
32783>&0		ubyte&0x3	=2
32784#>>&0    	ubelong	x		(4 byte old length encoding, %d bytes)
32785>>&(&0.L+4)	use		pgp_binary_keys_end
32786
32787# We managed to parse the first three packets of the certificate.  Declare
32788# victory.
327890		name		pgp_binary_keys_end
32790>0		byte		x		\b; OpenPGP Certificate
32791!:mime		application/pgp-keys
32792!:ext		pgp/gpg/pkr/asd
32793
32794#------------------------------------------------------------------------------
32795# $File: pkgadd,v 1.6 2009/09/19 16:28:11 christos Exp $
32796# pkgadd:  file(1) magic for SysV R4 PKG Datastreams
32797#
327980       string          #\ PaCkAgE\ DaTaStReAm  pkg Datastream (SVR4)
32799!:mime	application/x-svr4-package
32800
32801#------------------------------------------------------------------------------
32802# $File: plan9,v 1.6 2021/07/30 12:25:13 christos Exp $
32803# plan9:  file(1) magic for AT&T Bell Labs' Plan 9 executables and object files
32804# From: "Stefan A. Haubenthal" <polluks@web.de>
32805#
328060	belong		0x00000107	Plan 9 executable, Motorola 68k
328070	belong		0x00000197	Plan 9 executable, AT&T Hobbit
328080	belong		0x000001EB	Plan 9 executable, Intel 386
328090	belong		0x00000247	Plan 9 executable, Intel 960
328100	belong		0x000002AB	Plan 9 executable, SPARC
328110	belong		0x00000407	Plan 9 executable, MIPS R3000
328120	belong		0x0000048B	Plan 9 executable, AT&T DSP 3210
328130	belong		0x00000517	Plan 9 executable, MIPS R4000 BE
328140	belong		0x000005AB	Plan 9 executable, AMD 29000
328150	belong		0x00000647	Plan 9 executable, ARM 7-something
328160	belong		0x000006EB	Plan 9 executable, PowerPC
328170	belong		0x00000797	Plan 9 executable, MIPS R4000 LE
328180	belong		0x0000084B	Plan 9 executable, DEC Alpha
32819
328200	belong		0x3A11013C	Plan 9 object file, MIPS R3000
328210	belong		0x430D013C	Plan 9 object file, AT&T Hobbit
328220	belong		0x4D013201	Plan 9 object file, Motorola 68k
328230	belong		0x7410013C	Plan 9 object file, SPARC
328240	belong		0x7E004501	Plan 9 object file, Intel 386
32825
32826#------------------------------------------------------------------------------
32827# $File: plus5,v 1.6 2009/09/19 16:28:11 christos Exp $
32828# plus5:  file(1) magic for Plus Five's UNIX MUMPS
32829#
32830# XXX - byte order?  Paging Hokey....
32831#
328320	short		0x259		mumps avl global
32833>2	byte		>0		(V%d)
32834>6	byte		>0		with %d byte name
32835>7	byte		>0		and %d byte data cells
328360	short		0x25a		mumps blt global
32837>2	byte		>0		(V%d)
32838>8	short		>0		- %d byte blocks
32839>15	byte		0x00		- P/D format
32840>15	byte		0x01		- P/K/D format
32841>15	byte		0x02		- K/D format
32842>15	byte		>0x02		- Bad Flags
32843
32844#------------------------------------------------------------------------------
32845# $File: pmem,v 1.4 2021/04/26 15:56:00 christos Exp $
32846# pmem: file(1) magic for Persistent Memory Development Kit pool files
32847#
328480	string		PMEM
32849>4	string		POOLSET		Persistent Memory Poolset file
32850>>11	search		REPLICA		with replica
32851>4	regex		LOG|BLK|OBJ	Persistent Memory Pool file, type: %s,
32852>>8	lelong		>0		version: %#x,
32853>>12	lelong		x		compat: %#x,
32854>>16	lelong		x		incompat: %#x,
32855>>20	lelong		x		ro_compat: %#x,
32856
32857
32858>>120	leqldate	x		crtime: %s,
32859>>128	lequad		x		alignment_desc: %#016llx,
32860
32861>>136	clear		x
32862>>136	byte		2		machine_class: 64-bit,
32863>>136	default		x		machine_class: unknown
32864>>>136	byte		x		(%#d),
32865
32866>>137	clear		x
32867>>137	byte		1		data: little-endian,
32868>>137	byte		2		data: big-endian,
32869>>137	default		x		data: unknown
32870>>>137	byte		x		(%#d),
32871
32872>>138	byte		!0		reserved[0]: %d,
32873>>139	byte		!0		reserved[1]: %d,
32874>>140	byte		!0		reserved[2]: %d,
32875>>141	byte		!0		reserved[3]: %d,
32876
32877>>142	clear		x
32878>>142	leshort		62		machine: x86_64
32879>>142	leshort		183		machine: aarch64
32880>>142	default		x		machine: unknown
32881>>>142	leshort		x		(%#d)
32882
32883>4	string		BLK
32884>>4096	lelong		x		\b, blk.bsize: %d
32885
32886>4	string		OBJ
32887>>4096	string		>0		\b, obj.layout: '%s'
32888>>4096	string		<0		\b, obj.layout: NULL
32889
32890#------------------------------------------------------------------------------
32891# $File: polyml,v 1.2 2019/04/19 00:42:27 christos Exp $
32892# polyml:  file(1) magic for PolyML
32893#
32894# PolyML
32895# MPEG, FLI, DL originally from vax@ccwf.cc.utexas.edu (VaX#n8)
32896# FLC, SGI, Apple originally from Daniel Quinlan (quinlan@yggdrasil.com)
32897
32898# [0]: https://www.polyml.org/
32899# [1]: https://github.com/polyml/polyml/blob/master/\
32900#	libpolyml/savestate.cpp#L146-L147
32901# [2]: https://github.com/polyml/polyml/blob/master/\
32902#	libpolyml/savestate.cpp#L1262-L1263
32903
32904# Type: Poly/ML saved data
32905# From: Matthew Fernandez <matthew.fernandez@gmail.com>
32906
329070	string	POLYSAVE	Poly/ML saved state
32908>8	long	x		version %u
32909
329100	string  POLYMODU	Poly/ML saved module
32911>8	long	x		version %u
32912
32913#------------------------------------------------------------------------------
32914# $File: printer,v 1.29 2019/04/19 00:42:27 christos Exp $
32915# printer:  file(1) magic for printer-formatted files
32916#
32917
32918# PostScript, updated by Daniel Quinlan (quinlan@yggdrasil.com)
329190	string		%!		PostScript document text
32920!:mime	application/postscript
32921!:apple	ASPSTEXT
32922>2	string		PS-Adobe-	conforming
32923>>11	string		>\0		DSC level %.3s
32924>>>15	string		EPS		\b, type %s
32925>>>15	string		Query		\b, type %s
32926>>>15	string		ExitServer	\b, type %s
32927>>>15   search/1000		%%LanguageLevel:\040
32928>>>>&0	string		>\0		\b, Level %s
32929# Some PCs have the annoying habit of adding a ^D as a document separator
329300	string		\004%!		PostScript document text
32931!:mime	application/postscript
32932!:apple	ASPSTEXT
32933>3	string		PS-Adobe-	conforming
32934>>12	string		>\0		DSC level %.3s
32935>>>16	string		EPS		\b, type %s
32936>>>16	string		Query		\b, type %s
32937>>>16	string		ExitServer	\b, type %s
32938>>>16   search/1000		%%LanguageLevel:\040
32939>>>>&0	string		>\0		\b, Level %s
329400	string		\033%-12345X%!PS	PostScript document
32941
32942# DOS EPS Binary File Header
32943# From: Ed Sznyter <ews@Black.Market.NET>
329440       belong          0xC5D0D3C6      DOS EPS Binary File
32945>4      long            >0              Postscript starts at byte %d
32946>>8     long            >0              length %d
32947>>>12   long            >0              Metafile starts at byte %d
32948>>>>16  long            >0              length %d
32949>>>20   long            >0              TIFF starts at byte %d
32950>>>>24  long            >0              length %d
32951
32952# Summary: Adobe's PostScript Printer Description File
32953# Extension: .ppd
32954# Reference: https://partners.adobe.com/public/developer/en/ps/5003.PPD_Spec_v4.3.pdf, Section 3.8
32955# Submitted by: Yves Arrouye <arrouye@marin.fdn.fr>
32956#
329570	string		*PPD-Adobe:\x20	PPD file
32958>&0	string		x		\b, version %s
32959
32960# HP Printer Job Language
329610	string		\033%-12345X@PJL	HP Printer Job Language data
32962# HP Printer Job Language
32963# The header found on Win95 HP plot files is the "Silliest Thing possible"
32964# (TM)
32965# Every driver puts the language at some random position, with random case
32966# (LANGUAGE and Language)
32967# For example the LaserJet 5L driver puts the "PJL ENTER LANGUAGE" in line 10
32968# From: Uwe Bonnes <bon@elektron.ikp.physik.th-darmstadt.de>
32969#
329700	string		\033%-12345X@PJL	HP Printer Job Language data
32971>&0	string		>\0			%s
32972>>&0	string		>\0			%s
32973>>>&0	string		>\0			%s
32974>>>>&0	string		>\0			%s
32975#>15	string		\ ENTER\ LANGUAGE\ =
32976#>31	string		PostScript		PostScript
32977
32978# From: Stefan Thurner <thurners@nicsys.de>
329790	string		\033%-12345X@PJL
32980>&0	search/10000	%!			PJL encapsulated PostScript document text
32981
32982# Rick Richardson <rickrich@gmail.com>
32983
32984# For Fuji-Xerox Printers - HBPL stands for Host Based Printer Language
32985# For Oki Data Printers - HIPERC
32986# For Konica Minolta Printers - LAVAFLOW
32987# For Samsung Printers - QPDL
32988# For HP Printers - ZJS stands for Zenographics ZJStream
329890	string		\033%-12345X@PJL	HP Printer Job Language data
32990>0	search/10000	@PJL\ ENTER\ LANGUAGE=HBPL	- HBPL
32991>0	search/10000	@PJL\ ENTER\ LANGUAGE=HIPERC	- Oki Data HIPERC
32992>0	search/10000	@PJL\ ENTER\ LANGUAGE=LAVAFLOW	- Konica Minolta LAVAFLOW
32993>0	search/10000	@PJL\ ENTER\ LANGUAGE=QPDL	- Samsung QPDL
32994>0	search/10000	@PJL\ ENTER\ LANGUAGE\ =\ QPDL	- Samsung QPDL
32995>0	search/10000	@PJL\ ENTER\ LANGUAGE=ZJS	- HP ZJS
32996
32997
32998# HP Printer Control Language, Daniel Quinlan (quinlan@yggdrasil.com)
329990	string		\033E\033	HP PCL printer data
33000>3	string		\&l0A		- default page size
33001>3	string		\&l1A		- US executive page size
33002>3	string		\&l2A		- US letter page size
33003>3	string		\&l3A		- US legal page size
33004>3	string		\&l26A		- A4 page size
33005>3	string		\&l80A		- Monarch envelope size
33006>3	string		\&l81A		- No. 10 envelope size
33007>3	string		\&l90A		- Intl. DL envelope size
33008>3	string		\&l91A		- Intl. C5 envelope size
33009>3	string		\&l100A		- Intl. B5 envelope size
33010>3	string		\&l-81A		- No. 10 envelope size (landscape)
33011>3	string		\&l-90A		- Intl. DL envelope size (landscape)
33012
33013# IMAGEN printer-ready files:
330140	string	@document(		Imagen printer
33015# this only works if "language xxx" is first item in Imagen header.
33016>10	string	language\ impress	(imPRESS data)
33017>10	string	language\ daisy		(daisywheel text)
33018>10	string	language\ diablo	(daisywheel text)
33019>10	string	language\ printer	(line printer emulation)
33020>10	string	language\ tektronix	(Tektronix 4014 emulation)
33021# Add any other languages that your Imagen uses - remember
33022# to keep the word `text' if the file is human-readable.
33023# [GRR 950115:  missing "postscript" or "ultrascript" (whatever it was called)]
33024#
33025# Now magic for IMAGEN font files...
330260	string		Rast		RST-format raster font data
33027>45	string		>0		face %s
33028# From Jukka Ukkonen
330290	string		\033[K\002\0\0\017\033(a\001\0\001\033(g	Canon Bubble Jet BJC formatted data
33030
33031# From <mike@flyn.org>
33032# These are the /etc/magic entries to decode data sent to an Epson printer.
330330       string          \x1B\x40\x1B\x28\x52\x08\x00\x00REMOTE1P        Epson Stylus Color 460 data
33034
33035
33036#------------------------------------------------------------------------------
33037# zenographics:  file(1) magic for Zenographics ZjStream printer data
33038# Rick Richardson <rickrich@gmail.com>
330390	string		JZJZ
33040>0x12	string		ZZ		Zenographics ZjStream printer data (big-endian)
330410	string		ZJZJ
33042>0x12	string		ZZ		Zenographics ZjStream printer data (little-endian)
33043
33044
33045#------------------------------------------------------------------------------
33046# Oak Technologies printer stream
33047# Rick Richardson <rickrich@gmail.com>
330480       string          OAK
33049>0x07	byte		0
33050>0x0b	byte		0	Oak Technologies printer stream
33051
33052# This would otherwise be recognized as PostScript - nick@debian.org
330530	string		%!VMF 		SunClock's Vector Map Format data
33054
33055#------------------------------------------------------------------------------
33056# HP LaserJet 1000 series downloadable firmware file
330570	string	\xbe\xefABCDEFGH	HP LaserJet 1000 series downloadable firmware
33058
33059# From: Paolo <oopla@users.sf.net>
33060# Epson ESC/Page, ESC/PageColor
330610	string	\x1b\x01@EJL	Epson ESC/Page language printer data
33062
33063#------------------------------------------------------------------------------
33064# $File: project,v 1.5 2017/03/17 21:35:28 christos Exp $
33065# project:  file(1) magic for Project management
33066#
33067# Magic strings for ftnchek project files. Alexander Mai
330680	string	FTNCHEK_\ P	project file for ftnchek
33069>10	string	1		version 2.7
33070>10	string	2		version 2.8 to 2.10
33071>10	string	3		version 2.11 or later
33072
33073#------------------------------------------------------------------------------
33074# $File: psdbms,v 1.8 2017/03/17 21:35:28 christos Exp $
33075# psdbms:  file(1) magic for psdatabase
33076#
33077# Update: Joerg Jenderek
33078# GRR: line below too general as it catches also some Panorama database *.pan ,
33079# AppleWorks word processor
330800	belong&0xff00ffff	0x56000000
33081# assume version starts with digit
33082>1	regex/s			=^[0-9]		ps database
33083>>1	string	>\0	version %s
33084# kernel name
33085>>4	string	>\0	from kernel %s
33086
33087#------------------------------------------------------------------------------
33088# $File: psl,v 1.3 2019/04/19 00:42:27 christos Exp $
33089# psl:  file(1) magic for Public Suffix List representations
33090# From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
33091# URL: https://publicsuffix.org
33092# see also: https://thread.gmane.org/gmane.network.dns.libpsl.bugs/162/focus=166
33093
330940	search/512	\n\n//\ ===BEGIN\ ICANN\ DOMAINS===\n\n Public Suffix List data
33095
330960	string	.DAFSA@PSL_
33097>15	string	\n	Public Suffix List data (optimized)
33098>>11	byte	>0x2f
33099>>>11	byte	<0x3a   (Version %c)
33100
33101#------------------------------------------------------------------------------
33102# $File: pulsar,v 1.5 2009/09/19 16:28:12 christos Exp $
33103# pulsar:  file(1) magic for Pulsar POP3 daemon binary files
33104#
33105# http://pulsar.sourceforge.net
33106# mailto:rok.papez@lugos.si
33107#
33108
331090	belong	0x1ee7f11e	Pulsar POP3 daemon mailbox cache file.
33110>4	ubelong	x		Version: %d.
33111>8	ubelong	x		\b%d
33112
33113
33114#------------------------------------------------------------------------------
33115# $File: puzzle,v 1.2 2021/10/07 15:40:40 christos Exp $
33116# wsdl: Magic for various puzzles
33117
33118# PUZ crossword puzzles from Alan De Smet
33119# Test files can be found at
33120# https://theworld.com/~wij/puzzles/wij-themed.html or using the
33121# "Universal" or "WS Journal" links on the right side of
33122# https://www.cruciverb.com/ .
33123
331242	string	ACROSS&DOWN	PUZ crossword puzzle
33125>0x2c	byte	x		%d x
33126>0x2d	byte	x		%d,
33127>0x2e	leshort	x		%d clues,
33128>0x1e	leshort	0x0000		plain text solution
33129>0x1e	leshort	!0x0000		scrambled solution
33130
33131#------------------------------------------------------------------------------
33132# $File: pwsafe,v 1.2 2019/04/19 00:42:27 christos Exp $
33133# pwsafe: file(1) magic for passwordsafe file
33134#
33135# Password Safe
33136# http://passwordsafe.sourceforge.net/
33137# file format specs
33138# https://passwordsafe.svn.sourceforge.net/viewvc/passwordsafe/trunk/pwsafe/pwsafe/docs/formatV3.txt
33139# V2 https://passwordsafe.svn.sourceforge.net/viewvc/passwordsafe/trunk/pwsafe/pwsafe/docs/formatV2.txt
33140# V1 https://passwordsafe.svn.sourceforge.net/viewvc/passwordsafe/trunk/pwsafe/pwsafe/docs/notes.txt
33141# V2 and V1 have no easy identifier that I can find
33142# .psafe3
331430	string	PWS3	Password Safe V3 database
33144
33145#------------------------------------------------------------------------------
33146# $File: pyramid,v 1.7 2009/09/19 16:28:12 christos Exp $
33147# pyramid:  file(1) magic for Pyramids
33148#
33149# XXX - byte order?
33150#
331510	long		0x50900107	Pyramid 90x family executable
331520	long		0x50900108	Pyramid 90x family pure executable
33153>16	long		>0		not stripped
331540	long		0x5090010b	Pyramid 90x family demand paged pure executable
33155>16	long		>0		not stripped
33156
33157#------------------------------------------------------------------------------
33158# $File: python,v 1.45 2022/07/24 23:59:37 christos Exp $
33159# python:  file(1) magic for python
33160#
33161# Outlook puts """ too for urgent messages
33162# From: David Necas <yeti@physics.muni.cz>
33163# often the module starts with a multiline string
331640	string/t	"""	Python script text executable
33165# MAGIC as specified in Python/import.c (1.0 to 3.7)
33166# and in Lib/importlib/_bootstrap_external.py (3.5+)
33167# two bytes of magic followed by "\r\n" in little endian order
331680	belong		0x02099900	python 1.0 byte-compiled
33169!:mime application/x-bytecode.python
331700	belong		0x03099900	python 1.1/1.2 byte-compiled
33171!:mime application/x-bytecode.python
331720	belong		0x892e0d0a	python 1.3 byte-compiled
33173!:mime application/x-bytecode.python
331740	belong		0x04170d0a	python 1.4 byte-compiled
33175!:mime application/x-bytecode.python
331760	belong		0x994e0d0a	python 1.5 byte-compiled
33177!:mime application/x-bytecode.python
331780	belong		0xfcc40d0a	python 1.6 byte-compiled
33179!:mime application/x-bytecode.python
331800	belong		0xfdc40d0a	python 1.6 byte-compiled
33181!:mime application/x-bytecode.python
331820	belong		0x87c60d0a	python 2.0 byte-compiled
33183!:mime application/x-bytecode.python
331840	belong		0x88c60d0a	python 2.0 byte-compiled
33185!:mime application/x-bytecode.python
331860	belong		0x2aeb0d0a	python 2.1 byte-compiled
33187!:mime application/x-bytecode.python
331880	belong		0x2beb0d0a	python 2.1 byte-compiled
33189!:mime application/x-bytecode.python
331900	belong		0x2ded0d0a	python 2.2 byte-compiled
33191!:mime application/x-bytecode.python
331920	belong		0x2eed0d0a	python 2.2 byte-compiled
33193!:mime application/x-bytecode.python
331940	belong		0x3bf20d0a	python 2.3 byte-compiled
33195!:mime application/x-bytecode.python
331960	belong		0x3cf20d0a	python 2.3 byte-compiled
33197!:mime application/x-bytecode.python
331980	belong		0x45f20d0a	python 2.3 byte-compiled
33199!:mime application/x-bytecode.python
332000	belong		0x59f20d0a	python 2.4 byte-compiled
33201!:mime application/x-bytecode.python
332020	belong		0x63f20d0a	python 2.4 byte-compiled
33203!:mime application/x-bytecode.python
332040	belong		0x6df20d0a	python 2.4 byte-compiled
33205!:mime application/x-bytecode.python
332060	belong		0x6ef20d0a	python 2.4 byte-compiled
33207!:mime application/x-bytecode.python
332080	belong		0x77f20d0a	python 2.5 byte-compiled
33209!:mime application/x-bytecode.python
332100	belong		0x81f20d0a	python 2.5 byte-compiled
33211!:mime application/x-bytecode.python
332120	belong		0x8bf20d0a	python 2.5 byte-compiled
33213!:mime application/x-bytecode.python
332140	belong		0x8cf20d0a	python 2.5 byte-compiled
33215!:mime application/x-bytecode.python
332160	belong		0x95f20d0a	python 2.5 byte-compiled
33217!:mime application/x-bytecode.python
332180	belong		0x9ff20d0a	python 2.5 byte-compiled
33219!:mime application/x-bytecode.python
332200	belong		0xa9f20d0a	python 2.5 byte-compiled
33221!:mime application/x-bytecode.python
332220	belong		0xb3f20d0a	python 2.5 byte-compiled
33223!:mime application/x-bytecode.python
332240	belong		0xb4f20d0a	python 2.5 byte-compiled
33225!:mime application/x-bytecode.python
332260	belong		0xc7f20d0a	python 2.6 byte-compiled
33227!:mime application/x-bytecode.python
332280	belong		0xd1f20d0a	python 2.6 byte-compiled
33229!:mime application/x-bytecode.python
332300	belong		0xd2f20d0a	python 2.6 byte-compiled
33231!:mime application/x-bytecode.python
332320	belong		0xdbf20d0a	python 2.7 byte-compiled
33233!:mime application/x-bytecode.python
332340	belong		0xe5f20d0a	python 2.7 byte-compiled
33235!:mime application/x-bytecode.python
332360	belong		0xeff20d0a	python 2.7 byte-compiled
33237!:mime application/x-bytecode.python
332380	belong		0xf9f20d0a	python 2.7 byte-compiled
33239!:mime application/x-bytecode.python
332400	belong		0x03f30d0a	python 2.7 byte-compiled
33241!:mime application/x-bytecode.python
332420	belong		0x04f30d0a	python 2.7 byte-compiled
33243!:mime application/x-bytecode.python
332440	belong		0x0af30d0a	PyPy2.7 byte-compiled
33245!:mime application/x-bytecode.python
332460	belong		0xb80b0d0a	python 3.0 byte-compiled
33247!:mime application/x-bytecode.python
332480	belong		0xc20b0d0a	python 3.0 byte-compiled
33249!:mime application/x-bytecode.python
332500	belong		0xcc0b0d0a	python 3.0 byte-compiled
33251!:mime application/x-bytecode.python
332520	belong		0xd60b0d0a	python 3.0 byte-compiled
33253!:mime application/x-bytecode.python
332540	belong		0xe00b0d0a	python 3.0 byte-compiled
33255!:mime application/x-bytecode.python
332560	belong		0xea0b0d0a	python 3.0 byte-compiled
33257!:mime application/x-bytecode.python
332580	belong		0xf40b0d0a	python 3.0 byte-compiled
33259!:mime application/x-bytecode.python
332600	belong		0xf50b0d0a	python 3.0 byte-compiled
33261!:mime application/x-bytecode.python
332620	belong		0xff0b0d0a	python 3.0 byte-compiled
33263!:mime application/x-bytecode.python
332640	belong		0x090c0d0a	python 3.0 byte-compiled
33265!:mime application/x-bytecode.python
332660	belong		0x130c0d0a	python 3.0 byte-compiled
33267!:mime application/x-bytecode.python
332680	belong		0x1d0c0d0a	python 3.0 byte-compiled
33269!:mime application/x-bytecode.python
332700	belong		0x1f0c0d0a	python 3.0 byte-compiled
33271!:mime application/x-bytecode.python
332720	belong		0x270c0d0a	python 3.0 byte-compiled
33273!:mime application/x-bytecode.python
332740	belong		0x3b0c0d0a	python 3.0 byte-compiled
33275!:mime application/x-bytecode.python
332760	belong		0x450c0d0a	python 3.1 byte-compiled
33277!:mime application/x-bytecode.python
332780	belong		0x4f0c0d0a	python 3.1 byte-compiled
33279!:mime application/x-bytecode.python
332800	belong		0x580c0d0a	python 3.2 byte-compiled
33281!:mime application/x-bytecode.python
332820	belong		0x620c0d0a	python 3.2 byte-compiled
33283!:mime application/x-bytecode.python
332840	belong		0x6c0c0d0a	python 3.2 byte-compiled
33285!:mime application/x-bytecode.python
332860	belong		0x760c0d0a	python 3.3 byte-compiled
33287!:mime application/x-bytecode.python
332880	belong		0x800c0d0a	python 3.3 byte-compiled
33289!:mime application/x-bytecode.python
332900	belong		0x8a0c0d0a	python 3.3 byte-compiled
33291!:mime application/x-bytecode.python
332920	belong		0x940c0d0a	python 3.3 byte-compiled
33293!:mime application/x-bytecode.python
332940	belong		0x9e0c0d0a	python 3.3 byte-compiled
33295!:mime application/x-bytecode.python
332960	belong		0xb20c0d0a	python 3.4 byte-compiled
33297!:mime application/x-bytecode.python
332980	belong		0xbc0c0d0a	python 3.4 byte-compiled
33299!:mime application/x-bytecode.python
333000	belong		0xc60c0d0a	python 3.4 byte-compiled
33301!:mime application/x-bytecode.python
333020	belong		0xd00c0d0a	python 3.4 byte-compiled
33303!:mime application/x-bytecode.python
333040	belong		0xda0c0d0a	python 3.4 byte-compiled
33305!:mime application/x-bytecode.python
333060	belong		0xe40c0d0a	python 3.4 byte-compiled
33307!:mime application/x-bytecode.python
333080	belong		0xee0c0d0a	python 3.4 byte-compiled
33309!:mime application/x-bytecode.python
333100	belong		0xf80c0d0a	python 3.5.1- byte-compiled
33311!:mime application/x-bytecode.python
333120	belong		0x020d0d0a	python 3.5.1- byte-compiled
33313!:mime application/x-bytecode.python
333140	belong		0x0c0d0d0a	python 3.5.1- byte-compiled
33315!:mime application/x-bytecode.python
333160	belong		0x160d0d0a	python 3.5.1- byte-compiled
33317!:mime application/x-bytecode.python
333180	belong		0x170d0d0a	python 3.5.2+ byte-compiled
33319!:mime application/x-bytecode.python
333200	belong		0x200d0d0a	python 3.6 byte-compiled
33321!:mime application/x-bytecode.python
333220	belong		0x210d0d0a	python 3.6 byte-compiled
33323!:mime application/x-bytecode.python
333240	belong		0x2a0d0d0a	python 3.6 byte-compiled
33325!:mime application/x-bytecode.python
333260	belong		0x2b0d0d0a	python 3.6 byte-compiled
33327!:mime application/x-bytecode.python
333280	belong		0x2c0d0d0a	python 3.6 byte-compiled
33329!:mime application/x-bytecode.python
333300	belong		0x2d0d0d0a	python 3.6 byte-compiled
33331!:mime application/x-bytecode.python
333320	belong		0x2f0d0d0a	python 3.6 byte-compiled
33333!:mime application/x-bytecode.python
333340	belong		0x300d0d0a	python 3.6 byte-compiled
33335!:mime application/x-bytecode.python
333360	belong		0x310d0d0a	python 3.6 byte-compiled
33337!:mime application/x-bytecode.python
333380	belong		0x320d0d0a	python 3.6 byte-compiled
33339!:mime application/x-bytecode.python
333400	belong		0x330d0d0a	python 3.6 byte-compiled
33341!:mime application/x-bytecode.python
333420	belong		0x3e0d0d0a	python 3.7 byte-compiled
33343!:mime application/x-bytecode.python
333440	belong		0x3f0d0d0a	python 3.7 byte-compiled
33345!:mime application/x-bytecode.python
33346
33347# magic 3392+ implements PEP 552: Deterministic pycs
333480	name		pyc-pep552
33349# the flag field determines how .pyc validity is checked
33350>4	ulelong&1	0		timestamp-based,
33351>>8	uledate		x		.py timestamp: %s UTC,
33352>>12	ulelong		x		.py size: %d bytes
33353>4	ulelong&1	!0		hash-based, check-source flag
33354>>4	ulelong&2	0		unset,
33355>>4	ulelong&2	!0		set,
33356>>8	ulequad		x		hash: 0x%llx
33357
33358# uleshort magic followed by \x0d\0xa
333592		string		\x0d\x0a
33360# extra check: only two bits of flag field are currently used
33361>4		ulelong		<0x4
33362# \x0d as part of magic should suffice till Python 3.14 (magic 3600)
33363>>1		ubyte		0x0d		Byte-compiled Python module for
33364!:mime application/x-bytecode.python
33365# now look at the magic number to determine the version
33366>>>0		uleshort	<3400		CPython 3.7,
33367>>>0		default		x
33368>>>>0		uleshort	<3420		CPython 3.8,
33369>>>>0		default		x
33370>>>>>0		uleshort	<3430		CPython 3.9,
33371>>>>>0		default		x
33372>>>>>>0		uleshort	<3450		CPython 3.10,
33373>>>>>>0		default		x
33374>>>>>>>0	uleshort	<3500		CPython 3.11,
33375>>>>>>>0	default		x		CPython 3.12 or newer,
33376>>>0		use		pyc-pep552
33377>>0		uleshort	240		Byte-compiled Python module for PyPy3.7,
33378!:mime application/x-bytecode.python
33379>>>0		use		pyc-pep552
33380>>0		uleshort	256		Byte-compiled Python module for PyPy3.8,
33381!:mime application/x-bytecode.python
33382>>>0		use		pyc-pep552
33383>>0		uleshort	336		Byte-compiled Python module for PyPy3.9,
33384!:mime application/x-bytecode.python
33385>>>0		use		pyc-pep552
33386
333870	search/1/w	#!\040/usr/bin/python	Python script text executable
33388!:strength + 15
33389!:mime text/x-script.python
333900	search/1/w	#!\040/usr/local/bin/python	Python script text executable
33391!:strength + 15
33392!:mime text/x-script.python
333930	search/10/w	#!\040/usr/bin/env\040python	Python script text executable
33394!:strength + 15
33395!:mime text/x-script.python
33396
33397
33398# from module.submodule import func1, func2
333990	search/8192	import
33400>0	regex		\^from[\040\t]+([A-Za-z0-9_]|\\.)+[\040\t]+import.*$	Python script text executable
33401!:strength + 15
33402!:mime text/x-script.python
33403
33404# def __init__ (self, ...):
334050	search/4096	def\ __init__
33406>&0	search/64 self	Python script text executable
33407!:strength + 15
33408!:mime text/x-script.python
33409
33410# if __name__ == "__main__":
334110 search/4096 if\ __name__
33412>&0 search/64 '__main__'	Python script text executable
33413>&0 search/64 "__main__"	Python script text executable
33414!:strength + 15
33415!:mime text/x-script.python
33416
33417# import module [as abrev]
334180	search/8192	import
33419>0	regex	\^import\ [_[:alpha:]]+\ as\ [[:alpha:]][[:space:]]*$ Python script text executable
33420!:mime text/x-script.python
33421
33422# comments
33423#0	search/4096	'''
33424#>&0	regex	.*'''$	Python script text executable
33425#!:mime text/x-script.python
33426
33427#0	search/4096	"""
33428#>&0	regex	.*"""$	Python script text executable
33429#!:mime text/x-script.python
33430
33431# try:
33432# except: or finally:
33433# block
334340	search/4096	try:
33435>&0	regex	\^[[:space:]]*except.*:$	Python script text executable
33436!:strength + 15
33437!:mime text/x-script.python
33438>&0	search/4096	finally:	Python script text executable
33439!:mime text/x-script.python
33440
33441# class name[(base classes,)]: [pass]
334420	search/8192	class
33443>0	regex	\^class\ [_[:alpha:]]+(\\(.*\\))?(\ )*:([\ \t]+pass)?$		Python script text executable
33444!:strength + 15
33445!:mime text/x-script.python
33446
33447# def name(*args, **kwargs):
334480	search/8192	def\
33449>0	regex	 \^[[:space:]]{0,50}def\ {1,50}[_a-zA-Z]{1,100}
33450>>&0	regex	 \\(([[:alpha:]*_,\ ]){0,255}\\):$ Python script text executable
33451!:strength + 15
33452!:mime text/x-script.python
33453
33454# https://numpy.org/devdocs/reference/generated/numpy.lib.format.html
334550	string	\223NUMPY		NumPy data file
33456!:mime  application/x-numpy-data
33457>6	byte	x			\b, version %d
33458>7	byte	x			\b.%d
33459#>8	leshort	x			\b, header length=%d
33460>10	string	x			\b, description %s
33461
33462#------------------------------------------------------------------------------
33463# $File: qt,v 1.3 2019/04/19 00:42:27 christos Exp $
33464# qt:  file(1) magic for Qt
33465
33466# https://doc.qt.io/qt-5/resources.html
334670	string		\<!DOCTYPE\040RCC\>	Qt Resource Collection file
33468
33469# https://qt.gitorious.org/qt/qtbase/source/\
33470# 5367fa356233da4c0f28172a8f817791525f5457:\
33471# src/tools/rcc/rcc.cpp#L840
334720	string		qres\0\0		Qt Binary Resource file
334730	search/1024	The\040Resource\040Compiler\040for\040Qt	Qt C-code resource file
33474
33475# https://qt.gitorious.org/qt/qtbase/source/\
33476# 5367fa356233da4c0f28172a8f817791525f5457:\
33477# src/corelib/kernel/qtranslator.cpp#L62
334780	string		\x3c\xb8\x64\x18\xca\xef\x9c\x95
33479>8	string		\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd	Qt Translation file
33480
33481#------------------------------------------------------------------------------
33482# $File: revision,v 1.11 2019/04/19 00:42:27 christos Exp $
33483# file(1) magic for revision control files
33484# From Hendrik Scholz <hendrik@scholz.net>
334850	string/t	/1\ :pserver:	cvs password text file
33486
33487# Conary changesets
33488# From: Jonathan Smith <smithj@rpath.com>
334890	belong	0xea3f81bb	Conary changeset data
33490
33491# Type: Git bundles (git-bundle)
33492# From: Josh Triplett <josh@freedesktop.org>
334930	string	#\ v2\ git\ bundle\n	Git bundle
33494
33495# Type: Git pack
33496# From: Adam Buchbinder <adam.buchbinder@gmail.com>
33497# Update: Joerg Jenderek
33498# URL: http://fileformats.archiveteam.org/wiki/Git
33499# reference: https://github.com/git/git/blob/master/Documentation/technical/pack-format.txt
33500# The actual magic is 'PACK', but that clashes with Doom/Quake packs. However,
33501# those have a little-endian offset immediately following the magic 'PACK',
33502# the first byte of which is never 0, while the first byte of the Git pack
33503# version, since it's a tiny number stored in big-endian format, is always 0.
335040	string	PACK
33505# GRR: line above is too general as it matches also PackDir archive ./acorn
33506# test for major version. Git 2017 accepts version number 2 or 3
33507>4	ubelong	<9
33508# Acorn PackDir with method 0 compression has root like ADFS::HardDisc4.$.AsylumSrc
33509# or SystemDevice::foobar
33510>>9	search/13 ::
33511# but in git binary
33512>>9	default	x	Git pack
33513!:mime	application/x-git
33514!:ext	pack
33515# 4 GB limit implies unsigned integer
33516>>>4	ubelong	x		\b, version %u
33517>>>8	ubelong	x		\b, %u objects
33518
33519# Type: Git pack index
33520# From: Adam Buchbinder <adam.buchbinder@gmail.com>
335210	string	\377tOc		Git pack index
33522>4	belong	=2		\b, version 2
33523
33524# Type: Git index file
33525# From: Frederic Briare <fbriere@fbriere.net>
335260	string	DIRC		Git index
33527>4	belong	>0		\b, version %d
33528>>8	belong	>0		\b, %d entries
33529
33530# Type:	Mercurial bundles
33531# From:	Seo Sanghyeon <tinuviel@sparcs.kaist.ac.kr>
335320	string	HG10		Mercurial bundle,
33533>4	string	UN		uncompressed
33534>4	string	BZ		bzip2 compressed
33535
33536# Type:	Subversion (SVN) dumps
33537# From:	Uwe Zeisberger <zeisberg@informatik.uni-freiburg.de>
335380	string	SVN-fs-dump-format-version:	Subversion dumpfile
33539>28	string	>\0				(version: %s)
33540
33541# Type:	Bazaar revision bundles and merge requests
33542# URL:	https://www.bazaar-vcs.org/
33543# From:	Jelmer Vernooij <jelmer@samba.org>
335440	string	#\ Bazaar\ revision\ bundle\ v Bazaar Bundle
335450	string	#\ Bazaar\ merge\ directive\ format Bazaar merge directive
33546
33547#------------------------------------------------------------------------------
33548# $File: riff,v 1.45 2022/07/24 23:47:49 christos Exp $
33549# riff:  file(1) magic for RIFF format
33550# See
33551#
33552#	https://www.seanet.com/users/matts/riffmci/riffmci.htm
33553#	http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/Docs/riffmci.pdf
33554#	https://www.iana.org/assignments/wave-avi-codec-registry/wave-avi-codec-registry.xml
33555#
33556
33557# audio format tag. Assume limits: max 1024 bit, 128 channels, 1 MHz
335580   name    riff-wave
33559>0	leshort		0x01		\b, Microsoft PCM
33560>>14	leshort		>0
33561>>>14	leshort		<1024	\b, %d bit
33562>0	leshort		0x02		\b, Microsoft ADPCM
33563>0	leshort		0x03		\b, IEEE Float
33564>0	leshort		0x04		\b, Compaq VSELP
33565>0	leshort		0x05		\b, IBM CVSD
33566>0	leshort		0x06		\b, ITU G.711 A-law
33567>0	leshort		0x07		\b, ITU G.711 mu-law
33568>0	leshort		0x08		\b, Microsoft DTS
33569>0	leshort		0x10		\b, OKI ADPCM
33570>0	leshort		0x11		\b, IMA ADPCM
33571>0	leshort		0x12		\b, MediaSpace ADPCM
33572>0	leshort		0x13		\b, Sierra ADPCM
33573>0	leshort		0x14		\b, ITU G.723 ADPCM (Yamaha)
33574>0	leshort		0x15		\b, DSP Solutions DIGISTD
33575>0	leshort		0x16		\b, DSP Solutions DIGIFIX
33576>0	leshort		0x17		\b, Dialogic OKI ADPCM
33577>0	leshort		0x18		\b, MediaVision ADPCM
33578>0	leshort		0x19		\b, HP CU
33579>0	leshort		0x20		\b, Yamaha ADPCM
33580>0	leshort		0x21		\b, Speech Compression SONARC
33581>0	leshort		0x22		\b, DSP Group True Speech
33582>0	leshort		0x23		\b, Echo Speech EchoSC1
33583>0	leshort		0x24		\b, AudioFile AF36
33584>0	leshort		0x25		\b, APTX
33585>0	leshort		0x26		\b, AudioFile AF10
33586>0	leshort		0x27		\b, Prosody 1612
33587>0	leshort		0x28		\b, LRC
33588>0	leshort		0x30		\b, Dolby AC2
33589>0	leshort		0x31		\b, GSM 6.10
33590>0	leshort		0x32		\b, MSN Audio
33591>0	leshort		0x33		\b, Antex ADPCME
33592>0	leshort		0x34		\b, Control Res VQLPC
33593>0	leshort		0x35		\b, Digireal
33594>0	leshort		0x36		\b, DigiADPCM
33595>0	leshort		0x37		\b, Control Res CR10
33596>0	leshort		0x38		\b, NMS VBXADPCM
33597>0	leshort		0x39		\b, Roland RDAC
33598>0	leshort		0x3A		\b, Echo Speech EchoSC3
33599>0	leshort		0x3B		\b, Rockwell ADPCM
33600>0	leshort		0x3C		\b, Rockwell Digitalk
33601>0	leshort		0x3D		\b, Xebec
33602>0	leshort		0x40		\b, ITU G.721 ADPCM
33603>0	leshort		0x41		\b, ITU G.728 CELP
33604>0	leshort		0x42		\b, MSG723
33605>0	leshort		0x50		\b, MPEG
33606>0	leshort		0x52		\b, RT24
33607>0	leshort		0x53		\b, PAC
33608>0	leshort		0x55		\b, MPEG Layer 3
33609>0	leshort		0x59		\b, Lucent G.723
33610>0	leshort		0x60		\b, Cirrus
33611>0	leshort		0x61		\b, ESPCM
33612>0	leshort		0x62		\b, Voxware
33613>0	leshort		0x63		\b, Canopus Atrac
33614>0	leshort		0x64		\b, ITU G.726 ADPCM
33615>0	leshort		0x65		\b, ITU G.722 ADPCM
33616>0	leshort		0x66		\b, DSAT
33617>0	leshort		0x67		\b, DSAT Display
33618>0	leshort		0x69		\b, Voxware Byte Aligned
33619>0	leshort		0x70		\b, Voxware AC8
33620>0	leshort		0x71		\b, Voxware AC10
33621>0	leshort		0x72		\b, Voxware AC16
33622>0	leshort		0x73		\b, Voxware AC20
33623>0	leshort		0x74		\b, Voxware MetaVoice
33624>0	leshort		0x75		\b, Voxware MetaSound
33625>0	leshort		0x76		\b, Voxware RT29HW
33626>0	leshort		0x77		\b, Voxware VR12
33627>0	leshort		0x78		\b, Voxware VR18
33628>0	leshort		0x79		\b, Voxware TQ40
33629>0	leshort		0x80		\b, Softsound
33630>0	leshort		0x81		\b, Voxware TQ60
33631>0	leshort		0x82		\b, MSRT24
33632>0	leshort		0x83		\b, ITU G.729A
33633>0	leshort		0x84		\b, MVI MV12
33634>0	leshort		0x85		\b, DF G.726
33635>0	leshort		0x86		\b, DF GSM610
33636>0	leshort		0x88		\b, ISIAudio
33637>0	leshort		0x89		\b, Onlive
33638>0	leshort		0x91		\b, SBC24
33639>0	leshort		0x92		\b, Dolby AC3 S/PDIF
33640>0	leshort		0x97		\b, ZyXEL ADPCM
33641>0	leshort		0x98		\b, Philips LPCBB
33642>0	leshort		0x99		\b, Packed
33643>0	leshort		0x100		\b, Rhetorex ADPCM
33644>0	leshort		0x101		\b, BeCubed Software IRAT
33645>0	leshort		0x111		\b, Vivo G.723
33646>0	leshort		0x112		\b, Vivo Siren
33647>0	leshort		0x123		\b, Digital G.723
33648>0	leshort		0x200		\b, Creative ADPCM
33649>0	leshort		0x202		\b, Creative FastSpeech8
33650>0	leshort		0x203		\b, Creative FastSpeech10
33651>0	leshort		0x220		\b, Quarterdeck
33652>0	leshort		0x300		\b, FM Towns Snd
33653>0	leshort		0x400		\b, BTV Digital
33654>0	leshort		0x680		\b, VME VMPCM
33655>0	leshort		0x1000		\b, OLIGSM
33656>0	leshort		0x1001		\b, OLIADPCM
33657>0	leshort		0x1002		\b, OLICELP
33658>0	leshort		0x1003		\b, OLISBC
33659>0	leshort		0x1004		\b, OLIOPR
33660>0	leshort		0x1100		\b, LH Codec
33661>0	leshort		0x1400		\b, Norris
33662>0	leshort		0x1401		\b, ISIAudio
33663>0	leshort		0x1500		\b, Soundspace Music Compression
33664>0	leshort		0x2000		\b, AC3 DVM
33665>0	leshort		0x2001		\b, DTS
33666>2	leshort		=1		\b, mono
33667>2	leshort		=2		\b, stereo
33668>2	leshort		>2
33669>>2	leshort		<128	\b, %d channels
33670>4	lelong		>0
33671>>4	lelong		<1000000	%d Hz
33672
33673# try to find "fmt "
336740   name    riff-walk
33675>0  string  fmt\x20
33676>>4 lelong  >15
33677>>>8 use    riff-wave
33678>0  string  LIST
33679>>&(4.l+4)  use riff-walk
33680>0  string  DISP
33681>>&(4.l+4)  use riff-walk
33682>0  string  bext
33683>>&(4.l+4)  use riff-walk
33684>0  string  Fake
33685>>&(4.l+4)  use riff-walk
33686>0  string  fact
33687>>&(4.l+4)  use riff-walk
33688>0  string  VP8
33689>>11		byte		0x9d
33690>>>12		byte		0x01
33691>>>>13		byte		0x2a	\b, VP8 encoding
33692>>>>>14		leshort&0x3fff	x	\b, %d
33693>>>>>16		leshort&0x3fff	x	\bx%d, Scaling:
33694>>>>>14		leshort&0xc000	0x0000	\b [none]
33695>>>>>14		leshort&0xc000	0x1000	\b [5/4]
33696>>>>>14		leshort&0xc000	0x2000	\b [5/3]
33697>>>>>14		leshort&0xc000	0x3000	\b [2]
33698>>>>>14		leshort&0xc000	0x0000	\bx[none]
33699>>>>>14		leshort&0xc000	0x1000	\bx[5/4]
33700>>>>>14		leshort&0xc000	0x2000	\bx[5/3]
33701>>>>>14		leshort&0xc000	0x3000	\bx[2]
33702>>>>>15		byte&0x80	=0x00	\b, YUV color
33703>>>>>15		byte&0x80	=0x80	\b, bad color specification
33704>>>>>15		byte&0x40	=0x40	\b, no clamping required
33705>>>>>15		byte&0x40	=0x00	\b, decoders should clamp
33706#>0  string  x		we got %s
33707#>>&(4.l+4)  use riff-walk
33708
33709# RecorderGear TR500 call recorder digits (BCD)
337100	name	tr500-call-recorder-digits
33711>0	byte&0xF0	0x00	\b0
33712>0	byte&0xF0	0x10	\b1
33713>0	byte&0xF0	0x20	\b2
33714>0	byte&0xF0	0x30	\b3
33715>0	byte&0xF0	0x40	\b4
33716>0	byte&0xF0	0x50	\b5
33717>0	byte&0xF0	0x60	\b6
33718>0	byte&0xF0	0x70	\b7
33719>0	byte&0xF0	0x80	\b8
33720>0	byte&0xF0	0x90	\b9
33721>0	byte&0xF0	0xb0	\b*
33722>0	byte&0xF0	0xc0	\b#
33723>0	byte&0x0F	0	\b0
33724>0	byte&0x0F	1	\b1
33725>0	byte&0x0F	2	\b2
33726>0	byte&0x0F	3	\b3
33727>0	byte&0x0F	4	\b4
33728>0	byte&0x0F	5	\b5
33729>0	byte&0x0F	6	\b6
33730>0	byte&0x0F	7	\b7
33731>0	byte&0x0F	8	\b8
33732>0	byte&0x0F	9	\b9
33733>0	byte&0x0F	0xb	\b*
33734>0	byte&0x0F	0xc	\b#
33735
33736# TR500 call recorder extended header
33737# From: David Korth <gerbilsoft@gerbilsoft.com>
33738# Contains dialed/incoming phone number and timestamp.
33739# TODO: Verify byte 15.
337400	name	tr500-call-recorder-header
33741>15	byte	2	(outgoing call:
33742>15	byte	4	(incoming call:
33743>1	byte	0xFF	\bno number
33744>1	byte	!0xFF
33745>>1	use	tr500-call-recorder-digits
33746>>2	byte	!0xFF
33747>>>2	use	tr500-call-recorder-digits
33748>>3	byte	!0xFF
33749>>>3	use	tr500-call-recorder-digits
33750>>4	byte	!0xFF
33751>>>4	use	tr500-call-recorder-digits
33752>>5	byte	!0xFF
33753>>>5	use	tr500-call-recorder-digits
33754>>6	byte	!0xFF
33755>>>6	use	tr500-call-recorder-digits
33756>>7	byte	!0xFF
33757>>>7	use	tr500-call-recorder-digits
33758>>8	byte	!0xFF
33759>>>8	use	tr500-call-recorder-digits
33760>9	byte	x	\b, 20%02x
33761>10	byte	x	\b/%02x
33762>11	byte	x	\b/%02x
33763>12	byte	x	%02x
33764>13	byte	x	\b:%02x
33765>14	byte	x	\b:%02x)
33766
33767# AVI section extended by Patrik Radman <patrik+file-magic@iki.fi>
33768#
337690	string		RIFF		RIFF (little-endian) data
33770# RIFF Palette format
33771# Update: Joerg Jenderek
33772# URL: https://en.wikipedia.org/wiki/Resource_Interchange_File_Format
33773# Reference: https://worms2d.info/Palette_file
33774# WAVE/AVI codec registry: https://www.iana.org/assignments/wave-avi-codec-registry/wave-avi-codec-registry.xml
33775>8	string		PAL\ 		\b, palette
33776!:mime	application/x-riff
33777# color palette by Microsoft Corporation
33778!:ext	pal
33779# file size =  chunk size + 8 in most cases
33780>>4	ulelong+8	x		\b, %u bytes
33781# Extended PAL Format
33782>>12	string		plth		\b, extended
33783# Simple PAL Format
33784>>12	string		data
33785# data chunk size = color entries * 4 + 4 + sometimes extra (4) appended bytes
33786>>>16	ulelong		x		\b, data size %u
33787# palVersion is always 0x0300
33788#>>>20	leshort		x		\b, version %#4.4x
33789# palNumEntries specifies the number of palette color entries
33790>>>22	uleshort	x		\b, %u entries
33791# after palPalEntry sized (number of color entries * 4 ) vector
33792>>>(22.s*4)	ubequad	x
33793# jump relative 22 ( 8 + 16) bytes forward points after end of file or to
33794# appended extra bytes like in http://safecolours.rigdenage.com/set(ms).zip/Protan(MS).pal
33795>>>>&16		ubelong	x		\b, extra bytes
33796>>>>>&-4	ubelong	>0		%#8.8x
33797# RIFF Device Independent Bitmap format
33798# URL: http://fileformats.archiveteam.org/wiki/RDIB
33799>8	string		RDIB		\b, device-independent bitmap
33800!:ext	rdi/dib
33801>>16	string		BM
33802>>>30	leshort		12		\b, OS/2 1.x format
33803>>>>34	leshort		x		\b, %d x
33804>>>>36	leshort		x		%d
33805>>>30	leshort		64		\b, OS/2 2.x format
33806>>>>34	leshort		x		\b, %d x
33807>>>>36	leshort		x		%d
33808>>>30	leshort		40		\b, Windows 3.x format
33809>>>>34	lelong		x		\b, %d x
33810>>>>38	lelong		x		%d x
33811>>>>44	leshort		x		%d
33812# RIFF MIDI format
33813# URL:	http://fileformats.archiveteam.org/wiki/RIFF_MIDI
33814>8	string		RMID		\b, MIDI
33815# http://extension.nirsoft.net/rmi
33816!:mime	audio/mid
33817#!:mime	audio/x-rmid
33818!:ext	rmi
33819# RIFF Multimedia Movie File format
33820# URL:	http://fileformats.archiveteam.org/wiki/RIFF_Multimedia_Movie
33821>8	string		RMMP		\b, multimedia movie
33822!:mime	video/x-mmm
33823!:ext	mmm
33824# RIFF wrapper for MP3
33825>8	string		RMP3		\b, MPEG Layer 3 audio
33826#!:mime	audio/x-rmp3
33827# Microsoft WAVE format (*.wav)
33828# URL:		http://fileformats.archiveteam.org/wiki/WAV
33829>8	string		WAVE		\b, WAVE audio
33830#!:mime	audio/vnd.wave
33831!:mime	audio/x-wav
33832# https://www.macdisk.com/macsigen.php
33833#!:apple	????WAVE
33834!:ext	wav/wave
33835>>12    string  >\0
33836>>>12   use     riff-walk
33837# TR500 call recorder extended header
33838>>16	ulelong		0x1E4
33839>>>20	leshort		0x11
33840>>>>256	byte		4
33841>>>>>256 use		tr500-call-recorder-header
33842# Update:	Joerg Jenderek
33843# lower case for Corel Draw version 8 Bidi
33844>8	string/c	cdr
33845# skip Corel CCX Clipart
33846>>8	string		!CDRXcont
33847# Corel Draw Picture
33848>>>0	use     corel-draw
33849# URL:		http://fileformats.archiveteam.org/wiki/CCX_(Corel)
33850# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/c/ccx-corel.trid.xml
33851>>8	string		=CDRXcont	\b, Corel Clipart
33852!:mime	application/x-corel-ccx
33853!:ext	ccx
33854# 3rd chunk data {Corel\040Binary\040Meta\040File}
33855#>>>20	string		x		\b, 3rd '%-s'
33856>>>4	ulelong+8	x		\b, %u bytes
33857# From:		Joerg Jenderek
33858# URL:		https://en.wikipedia.org/wiki/CorelDRAW
33859# Reference:	http://fileformats.archiveteam.org/wiki/CorelDRAW
33860# Picture templates created by newer software start with RIFF type CDT
33861>8	string		CDT
33862>>0	use		corel-draw
33863# Picture templates with version 4.4
33864>8	string		CDST
33865>>0	use		corel-draw
33866# pattern created by newer software start with RIFF type PAT
33867>8	string		PAT
33868>>0	use		corel-draw
33869# From:		Joerg Jenderek
33870# URL:		https://en.wikipedia.org/wiki/Corel_Designer
33871# Reference:	http://fileformats.archiveteam.org/wiki/Corel_Designer
33872>8	string		DES
33873>>8	string		!DESC
33874>>>0	use		corel-des
33875# Corel Draw templates with version 12.5 or Corel Designer illustration 12
33876>>8	string		=DESC
33877# MORE TESTS NEEDED HERE!
33878#>>>0	use		corel-des
33879#>>>0	use		corel-draw
33880>8	string		NUNDROOT	\b, Steinberg CuBase
33881# From:		Joerg Jenderek
33882# URL:		http://fileformats.archiveteam.org/wiki/MIDI_Instrument_Definition_File
33883# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/i/idf.trid.xml
33884#		ftp://curscott.servebeer.com/Download/Apps/_Microsoft/
33885#  		Visual%20Studio%206.0%20Professional%20MSDN/
33886#		SAMPLES/VC98/SDK/GRAPHICS/AUDIO/IDFEDIT/GLOBALS.H
33887# Note:		called "MIDI Instrument Definition File" by TrID
33888>8	string		IDF\ LIST	\b, MIDI Instrument Definition File
33889!:mime	audio/x-idf
33890!:ext	idf
33891# 3rd chunk size like: 254 284 286 670
33892#>>0x10	ulelong		x		\b, 3th SIZE %u
33893# for debugging purpose display next chunk like: MMAPhdr
33894#>>0x14	string		x		\b, 4th "%-8.8s"
33895#>>0x1C	ulelong		x		\b, 4th SIZE 0x%x
33896# probably MIDI instrument name like: "Universal-MIDI-Instrument" "instrument name" "General MIDI"
33897>>0x30	string		x		"%s"
33898# look for inst TAG
33899>>0x31	search/256	inst		by
33900# probably manufacture name like: "Unspecified Company" "NVidia Corporation"
33901>>>&0x24	string	x		"%s"
33902# AVI == Audio Video Interleave
33903# Reference:	http://fileformats.archiveteam.org/wiki/AVI
33904>8	string		AVI\040		\b, AVI
33905# https://reposcope.com/mimetype/video/x-msvideo
33906!:mime	video/x-msvideo
33907# https://www.iana.org/assignments/wave-avi-codec-registry/wave-avi-codec-registry.xml
33908#!:mime	video/vnd.avi
33909!:ext	avi/divx
33910>>12    string          LIST
33911>>>20   string          hdrlavih
33912>>>>&36 lelong          x               \b, %u x
33913>>>>&40 lelong          x               %u,
33914>>>>&4  lelong          >1000000        <1 fps,
33915>>>>&4  lelong          1000000         1.00 fps,
33916>>>>&4  lelong          500000          2.00 fps,
33917>>>>&4  lelong          333333          3.00 fps,
33918>>>>&4  lelong          250000          4.00 fps,
33919>>>>&4  lelong          200000          5.00 fps,
33920>>>>&4  lelong          166667          6.00 fps,
33921>>>>&4  lelong          142857          7.00 fps,
33922>>>>&4  lelong          125000          8.00 fps,
33923>>>>&4  lelong          111111          9.00 fps,
33924>>>>&4  lelong          100000          10.00 fps,
33925# ]9.9,10.1[
33926>>>>&4  lelong          <101010
33927>>>>>&-4        lelong  >99010
33928>>>>>>&-4       lelong  !100000         ~10 fps,
33929>>>>&4  lelong          83333           12.00 fps,
33930# ]11.9,12.1[
33931>>>>&4  lelong          <84034
33932>>>>>&-4        lelong  >82645
33933>>>>>>&-4       lelong  !83333          ~12 fps,
33934>>>>&4  lelong          66667           15.00 fps,
33935# ]14.9,15.1[
33936>>>>&4  lelong          <67114
33937>>>>>&-4        lelong  >66225
33938>>>>>>&-4       lelong  !66667          ~15 fps,
33939>>>>&4  lelong          50000           20.00 fps,
33940>>>>&4  lelong          41708           23.98 fps,
33941>>>>&4  lelong          41667           24.00 fps,
33942# ]23.9,24.1[
33943>>>>&4  lelong          <41841
33944>>>>>&-4        lelong  >41494
33945>>>>>>&-4       lelong  !41708
33946>>>>>>>&-4      lelong  !41667          ~24 fps,
33947>>>>&4  lelong          40000           25.00 fps,
33948# ]24.9,25.1[
33949>>>>&4  lelong          <40161
33950>>>>>&-4        lelong  >39841
33951>>>>>>&-4       lelong  !40000          ~25 fps,
33952>>>>&4  lelong          33367           29.97 fps,
33953>>>>&4  lelong          33333           30.00 fps,
33954# ]29.9,30.1[
33955>>>>&4  lelong          <33445
33956>>>>>&-4        lelong  >33223
33957>>>>>>&-4       lelong  !33367
33958>>>>>>>&-4      lelong  !33333          ~30 fps,
33959>>>>&4  lelong          <32224          >30 fps,
33960##>>>>&4  lelong          x               (%lu)
33961##>>>>&20 lelong          x               %lu frames,
33962# Note: The tests below assume that the AVI has 1 or 2 streams,
33963#       "vids" optionally followed by "auds".
33964#       (Should cover 99.9% of all AVIs.)
33965# assuming avih length = 56
33966>>>88   string  LIST
33967>>>>96  string  strlstrh
33968>>>>>108        string  vids    video:
33969>>>>>>&0        lelong  0               uncompressed
33970# skip past vids strh
33971>>>>>>(104.l+108)       string  strf
33972>>>>>>>(104.l+132)      lelong          1       RLE 8bpp
33973>>>>>>>(104.l+132)      string/c        anim    Intel RDX
33974>>>>>>>(104.l+132)      string/c        aur2    AuraVision Aura 2
33975>>>>>>>(104.l+132)      string/c        aura    AuraVision Aura
33976>>>>>>>(104.l+132)      string/c        bt20    Brooktree MediaStream
33977>>>>>>>(104.l+132)      string/c        btcv    Brooktree Composite Video
33978>>>>>>>(104.l+132)      string/c        cc12    Intel YUV12
33979>>>>>>>(104.l+132)      string/c        cdvc    Canopus DV
33980>>>>>>>(104.l+132)      string/c        cham    Winnov Caviara Cham
33981>>>>>>>(104.l+132)      string/c        cljr    Proprietary YUV 4 pixels
33982>>>>>>>(104.l+132)      string/c        cmyk    Common Data Format in Printing
33983>>>>>>>(104.l+132)      string/c        cpla    Weitek 4:2:0 YUV Planar
33984>>>>>>>(104.l+132)      string/c        cvid    Cinepak
33985>>>>>>>(104.l+132)      string/c        cwlt    Microsoft Color WLT DIB
33986>>>>>>>(104.l+132)      string/c        cyuv    Creative Labs YUV
33987>>>>>>>(104.l+132)      string/c        d261    H.261
33988>>>>>>>(104.l+132)      string/c        d263    H.263
33989>>>>>>>(104.l+132)      string/c        duck    TrueMotion 1.0
33990>>>>>>>(104.l+132)      string/c        dve2    DVE-2 Videoconferencing
33991>>>>>>>(104.l+132)      string/c        fljp    Field Encoded Motion JPEG
33992>>>>>>>(104.l+132)      string/c        fvf1    Fractal Video Frame
33993>>>>>>>(104.l+132)      string/c        gwlt    Microsoft Greyscale WLT DIB
33994>>>>>>>(104.l+132)      string/c        h260    H.260
33995>>>>>>>(104.l+132)      string/c        h261    H.261
33996>>>>>>>(104.l+132)      string/c        h262    H.262
33997>>>>>>>(104.l+132)      string/c        h263    H.263
33998>>>>>>>(104.l+132)      string/c        h264    H.264
33999>>>>>>>(104.l+132)      string/c        h265    H.265
34000>>>>>>>(104.l+132)      string/c        h266    H.266
34001>>>>>>>(104.l+132)      string/c        h267    H.267
34002>>>>>>>(104.l+132)      string/c        h268    H.268
34003>>>>>>>(104.l+132)      string/c        h269    H.269
34004>>>>>>>(104.l+132)      string/c        i263    Intel I.263
34005>>>>>>>(104.l+132)      string/c        i420    Intel Indeo 4
34006>>>>>>>(104.l+132)      string/c        ian     Intel RDX
34007>>>>>>>(104.l+132)      string/c        iclb    CellB Videoconferencing Codec
34008>>>>>>>(104.l+132)      string/c        ilvc    Intel Layered Video
34009>>>>>>>(104.l+132)      string/c        ilvr    ITU-T H.263+
34010>>>>>>>(104.l+132)      string/c        iraw    Intel YUV Uncompressed
34011>>>>>>>(104.l+132)      string/c        iv30    Intel Indeo 3
34012>>>>>>>(104.l+132)      string/c        iv31    Intel Indeo 3.1
34013>>>>>>>(104.l+132)      string/c        iv32    Intel Indeo 3.2
34014>>>>>>>(104.l+132)      string/c        iv33    Intel Indeo 3.3
34015>>>>>>>(104.l+132)      string/c        iv34    Intel Indeo 3.4
34016>>>>>>>(104.l+132)      string/c        iv35    Intel Indeo 3.5
34017>>>>>>>(104.l+132)      string/c        iv36    Intel Indeo 3.6
34018>>>>>>>(104.l+132)      string/c        iv37    Intel Indeo 3.7
34019>>>>>>>(104.l+132)      string/c        iv38    Intel Indeo 3.8
34020>>>>>>>(104.l+132)      string/c        iv39    Intel Indeo 3.9
34021>>>>>>>(104.l+132)      string/c        iv40    Intel Indeo 4.0
34022>>>>>>>(104.l+132)      string/c        iv41    Intel Indeo 4.1
34023>>>>>>>(104.l+132)      string/c        iv42    Intel Indeo 4.2
34024>>>>>>>(104.l+132)      string/c        iv43    Intel Indeo 4.3
34025>>>>>>>(104.l+132)      string/c        iv44    Intel Indeo 4.4
34026>>>>>>>(104.l+132)      string/c        iv45    Intel Indeo 4.5
34027>>>>>>>(104.l+132)      string/c        iv46    Intel Indeo 4.6
34028>>>>>>>(104.l+132)      string/c        iv47    Intel Indeo 4.7
34029>>>>>>>(104.l+132)      string/c        iv48    Intel Indeo 4.8
34030>>>>>>>(104.l+132)      string/c        iv49    Intel Indeo 4.9
34031>>>>>>>(104.l+132)      string/c        iv50    Intel Indeo 5.0
34032>>>>>>>(104.l+132)      string/c        mpeg    MPEG 1 Video Frame
34033>>>>>>>(104.l+132)      string/c        mjpg    Motion JPEG
34034>>>>>>>(104.l+132)      string/c        mp42    Microsoft MPEG-4 v2
34035>>>>>>>(104.l+132)      string/c        mp43    Microsoft MPEG-4 v3
34036>>>>>>>(104.l+132)      string/c        mrca    MR Codec
34037>>>>>>>(104.l+132)      string/c        mrle    Run Length Encoding
34038>>>>>>>(104.l+132)      string/c        msvc    Microsoft Video 1
34039>>>>>>>(104.l+132)      string/c        phmo    Photomotion
34040>>>>>>>(104.l+132)      string/c        qpeq    QPEG 1.1 Format Video
34041>>>>>>>(104.l+132)      string/c        rgbt    RGBT
34042>>>>>>>(104.l+132)      string/c        rle4    Run Length Encoded 4
34043>>>>>>>(104.l+132)      string/c        rle8    Run Length Encoded 8
34044>>>>>>>(104.l+132)      string/c        rt21    Intel Indeo 2.1
34045>>>>>>>(104.l+132)      string/c        rvx     Intel RDX
34046>>>>>>>(104.l+132)      string/c        sdcc    Sun Digital Camera Codec
34047>>>>>>>(104.l+132)      string/c        sfmc    Crystal Net SFM Codec
34048>>>>>>>(104.l+132)      string/c        smsc    SMSC
34049>>>>>>>(104.l+132)      string/c        smsd    SMSD
34050>>>>>>>(104.l+132)      string/c        splc    Splash Studios ACM Audio Codec
34051>>>>>>>(104.l+132)      string/c        sqz2    Microsoft VXtreme Video Codec
34052>>>>>>>(104.l+132)      string/c        sv10    Sorenson Video R1
34053>>>>>>>(104.l+132)      string/c        tlms    TeraLogic Motion Intraframe Codec A
34054>>>>>>>(104.l+132)      string/c        tlst    TeraLogic Motion Intraframe Codec B
34055>>>>>>>(104.l+132)      string/c        tm20    TrueMotion 2.0
34056>>>>>>>(104.l+132)      string/c        tmic    TeraLogic Motion Intraframe Codec 2
34057>>>>>>>(104.l+132)      string/c        tmot    TrueMotion Video Compression
34058>>>>>>>(104.l+132)      string/c        tr20    TrueMotion RT 2.0
34059>>>>>>>(104.l+132)      string/c        ulti    Ultimotion
34060>>>>>>>(104.l+132)      string/c        uyvy    UYVY 4:2:2 byte ordering
34061>>>>>>>(104.l+132)      string/c        v422    24-bit YUV 4:2:2 format
34062>>>>>>>(104.l+132)      string/c        v655    16-bit YUV 4:2:2 format
34063>>>>>>>(104.l+132)      string/c        vcr1    ATI VCR 1.0
34064>>>>>>>(104.l+132)      string/c        vcr2    ATI VCR 2.0
34065>>>>>>>(104.l+132)      string/c        vcr3    ATI VCR 3.0
34066>>>>>>>(104.l+132)      string/c        vcr4    ATI VCR 4.0
34067>>>>>>>(104.l+132)      string/c        vcr5    ATI VCR 5.0
34068>>>>>>>(104.l+132)      string/c        vcr6    ATI VCR 6.0
34069>>>>>>>(104.l+132)      string/c        vcr7    ATI VCR 7.0
34070>>>>>>>(104.l+132)      string/c        vcr8    ATI VCR 8.0
34071>>>>>>>(104.l+132)      string/c        vcr9    ATI VCR 9.0
34072>>>>>>>(104.l+132)      string/c        vdct    Video Maker Pro DIB
34073>>>>>>>(104.l+132)      string/c        vids    YUV 4:2:2 CCIR 601 for V422
34074>>>>>>>(104.l+132)      string/c        vivo    Vivo H.263
34075>>>>>>>(104.l+132)      string/c        vixl    VIXL
34076>>>>>>>(104.l+132)      string/c        vlv1    VLCAP.DRV
34077>>>>>>>(104.l+132)      string/c        wbvc    W9960
34078>>>>>>>(104.l+132)      string/c        x263    mmioFOURCC('X','2','6','3')
34079>>>>>>>(104.l+132)      string/c        xlv0    XL Video Decoder
34080>>>>>>>(104.l+132)      string/c        y211    YUV 2:1:1 Packed
34081>>>>>>>(104.l+132)      string/c        y411    YUV 4:1:1 Packed
34082>>>>>>>(104.l+132)      string/c        y41b    YUV 4:1:1 Planar
34083>>>>>>>(104.l+132)      string/c        y41p    PC1 4:1:1
34084>>>>>>>(104.l+132)      string/c        y41t    PC1 4:1:1 with transparency
34085>>>>>>>(104.l+132)      string/c        y42b    YUV 4:2:2 Planar
34086>>>>>>>(104.l+132)      string/c        y42t    PC1 4:2:2 with transparency
34087>>>>>>>(104.l+132)      string/c        yc12    Intel YUV12 Codec
34088>>>>>>>(104.l+132)      string/c        yuv8    Winnov Caviar YUV8
34089>>>>>>>(104.l+132)      string/c        yuv9    YUV9
34090>>>>>>>(104.l+132)      string/c        yuy2    YUY2 4:2:2 byte ordering packed
34091>>>>>>>(104.l+132)      string/c        yuyv    BI_YUYV, Canopus
34092>>>>>>>(104.l+132)      string/c        fmp4    FFMpeg MPEG-4
34093>>>>>>>(104.l+132)      string/c        div3    DivX 3
34094>>>>>>>>112             string/c        div3    Low-Motion
34095>>>>>>>>112             string/c        div4    Fast-Motion
34096>>>>>>>(104.l+132)      string/c        divx    DivX 4
34097>>>>>>>(104.l+132)      string/c        dx50    DivX 5
34098>>>>>>>(104.l+132)      string/c        xvid    XviD
34099>>>>>>>(104.l+132)	string/c	h264	H.264
34100>>>>>>>(104.l+132)      string/c        wmv3    Windows Media Video 9
34101>>>>>>>(104.l+132)      string/c        h264    X.264 or H.264
34102>>>>>>>(104.l+132)      lelong  0
34103##>>>>>>>(104.l+132)      string  x       (%.4s)
34104# skip past first (video) LIST
34105>>>>(92.l+96)   string  LIST
34106>>>>>(92.l+104) string  strlstrh
34107>>>>>>(92.l+116)        string          auds    \b, audio:
34108# auds strh length = 56:
34109>>>>>>>(92.l+172)       string          strf
34110>>>>>>>>(92.l+180)      leshort 0x0001  uncompressed PCM
34111>>>>>>>>(92.l+180)      leshort 0x0002  ADPCM
34112>>>>>>>>(92.l+180)      leshort 0x0006  aLaw
34113>>>>>>>>(92.l+180)      leshort 0x0007  uLaw
34114>>>>>>>>(92.l+180)      leshort 0x0050  MPEG-1 Layer 1 or 2
34115>>>>>>>>(92.l+180)      leshort 0x0055  MPEG-1 Layer 3
34116>>>>>>>>(92.l+180)      leshort 0x2000  Dolby AC3
34117>>>>>>>>(92.l+180)      leshort 0x0161  DivX
34118##>>>>>>>>(92.l+180)      leshort x       (%#.4x)
34119>>>>>>>>(92.l+182)      leshort 1       (mono,
34120>>>>>>>>(92.l+182)      leshort 2       (stereo,
34121>>>>>>>>(92.l+182)      leshort >2      (%d channels,
34122>>>>>>>>(92.l+184)      lelong  x       %d Hz)
34123# auds strh length = 64:
34124>>>>>>>(92.l+180)       string          strf
34125>>>>>>>>(92.l+188)      leshort 0x0001  uncompressed PCM
34126>>>>>>>>(92.l+188)      leshort 0x0002  ADPCM
34127>>>>>>>>(92.l+188)      leshort 0x0055  MPEG-1 Layer 3
34128>>>>>>>>(92.l+188)      leshort 0x2000  Dolby AC3
34129>>>>>>>>(92.l+188)      leshort 0x0161  DivX
34130##>>>>>>>>(92.l+188)      leshort x       (%#.4x)
34131>>>>>>>>(92.l+190)      leshort 1       (mono,
34132>>>>>>>>(92.l+190)      leshort 2       (stereo,
34133>>>>>>>>(92.l+190)      leshort >2      (%d channels,
34134>>>>>>>>(92.l+192)      lelong  x       %d Hz)
34135# From:		Joerg Jenderek
34136# URL:		http://fileformats.archiveteam.org/wiki/VDR_(VirtualDub)
34137# Reference:	http://sourceforge.net/projects/virtualdub/files/virtualdub-win/
34138#		1.10.4.35491/VirtualDub-1.10.4-src.7z/src/vdremote/Main.cpp
34139# VirtualDub link handler
34140>8	string		VDRM		\b, VirtualDub link
34141!:mime	video/x-vdr
34142!:ext	vdr
34143>>12	string		PATH		\b, PATH
34144# remote-path to video file
34145>>16	pstring/l	x		%s
34146# Animated Cursor format
34147# Update:	Joerg Jenderek
34148# URL:		http://fileformats.archiveteam.org/wiki/Windows_Animated_Cursor
34149# Reference:	https://www.gdgsoft.com/anituner/help/aniformat.htm
34150>8	string		ACON		\b, animated cursor
34151!:mime	application/x-navi-animation
34152# http://extension.nirsoft.net/ani
34153#!:mime	image/ani
34154!:ext	ani
34155# INAM tag followed by length of title
34156>>24	string		INAM
34157>>>28	pstring/l	x		"%s"
34158# IART tag followed by length of author
34159>>>(28.l+32)	ubelong	0x49415254
34160>>>>&0	pstring/l	x		%s
34161# SoundFont 2 <mpruett@sgi.com>
34162# URL:	http://fileformats.archiveteam.org/wiki/SoundFont_2.0
34163>8	string		sfbk		\b, SoundFont/Bank
34164!:mime	audio/x-sfbk
34165!:ext	sf2
34166# MPEG-1 wrapped in a RIFF, apparently
34167# URL:	http://file.fyicenter.com/17_Video_.DAT_File_Extension_for_VCD_Files.html
34168>8      string          CDXA            \b, wrapped MPEG-1 (CDXA)
34169!:mime	video/x-cdxa
34170!:ext	mpg/dat
34171# URL:	http://fileformats.archiveteam.org/wiki/4X_IMA_ADPCM
34172>8	string		4XMV		\b, 4X Movie file
34173!:mime	video/x-4xmv
34174!:ext	4xm/4xa
34175# AMV-type AVI file: https://wiki.multimedia.cx/index.php?title=AMV
34176>8	string		AMV\040		\b, AMV
34177# http://fileformats.archiveteam.org/wiki/MTV_Video_(.AMV)
34178!:mime	video/x-amv
34179!:ext	amv
34180#!:ext	amv/mtv
34181# URL:	http://fileformats.archiveteam.org/wiki/WebP
34182>8      string          WEBP            \b, Web/P image
34183!:mime	image/webp
34184!:ext	webp
34185>>12	use		riff-walk
34186# From:		Joerg Jenderek
34187# URL:		http://fileformats.archiveteam.org/wiki/RIFF_MIDS
34188>8      string          MIDS            \b, MIDI Stream
34189!:mime	audio/x-mids
34190!:ext	mds
34191# From:		Joerg Jenderek
34192# URL:		http://mark0.net/soft-trid-e.html
34193# Reference:	http://fileformats.archiveteam.org/wiki/Trd_(TRID)
34194>8      string          TRID            \b, TrID defs package
34195!:mime	application/x-trid-trd
34196!:ext	trd
34197# From:		Joerg Jenderek
34198# URL:		https://en.wikipedia.org/wiki/CorelDRAW
34199# Reference:	http://fileformats.archiveteam.org/wiki/CorelDRAW
34200# Note:		Since version 3 CorelDraw Pictures are RIFF based
34201# but data chunks remain proprietary.
34202# Since version 14 til 15 packed as "content/riffData.cdr" and
34203# since 16 "content/root.dat" in ZIP container
34204# TODO:		distinguish templates with version 12.5 from Designer illustration 12
34205#	display information of RIFF based Corel Draw pictures, templates and patterns
342060	name   	corel-draw
34207# display second chunk for debugging
34208#>8	string		x		\b, [8]=%.8s
34209>0	string		x		\b, Corel Draw
34210#!:mime	image/x-coreldraw
34211!:mime	application/vnd.corel-draw
34212# used by newer pictures templates
34213>>8	string		CDT
34214# used by templates with newer versions since 16
34215>>>12	string		=fver		Picture template (root.dat)
34216!:ext	dat
34217# used by templates with older versions with vrsn tag
34218>>>12	string		!fver
34219# used by templates with older versions 14-15
34220>>>>11	string		>E		Picture template (riffData.cdr)
34221!:ext	cdr
34222# used by templates with older versions 11-13
34223>>>>11	string		<F		Picture template
34224!:ext	cdt/cdrt
34225# used by older templates with version 4.4
34226>>8	string		CDST		Picture template
34227!:ext	cdt
34228# used by templates with version 12.5
34229>>8	string		DESC		Picture template
34230!:ext	cdt
34231# used by newer patterns with version 22
34232>>8	string		PAT		Pattern
34233!:ext	dat
34234# remaining older templates, patterns, drawings
34235>>8	default		x
34236# pattern with old version 4.y
34237>>>26	ulelong		=0x0000206C	Pattern
34238!:ext	pat
34239# pattern with newer versions
34240>>>26	ulelong		=0x00000D2C	Pattern
34241!:ext	pat
34242# remaining older templates or pictures
34243>>>26	default		x
34244# used by older versions 5 - 15
34245>>>>12	string		=vrsn
34246# 4th chunk size unequal 282Ch only found for CDR
34247>>>>>26	ulelong		!0x0000282c	Picture
34248!:ext	cdr
34249>>>>>26	default		x		Picture or template
34250!:ext	cdr/cdt
34251# used by newer versions since 16
34252>>>>12	string		=fver		Picture (root.dat)
34253!:ext	dat
34254# version marked by 1 ASCII char: space~3, ... , F~15,  ... , N~22, ... R~22 template
34255>11	string		x		\b, version
34256>11	string		>\040		'%-.1s'
34257>0	use		corel-version
34258>4	ulelong+8	x		\b, %u bytes
34259#
34260#	display numeric version of RIFF based Corel after 3rd RIFF tag
342610	name   	corel-version
34262# for debugging purpose; vrsn for short content; fver for 16 byte size
34263#>12	string		x		\b, TAG "%-4.4s"
34264# 1st data chunk length 2 implies short content version
34265>16	ulelong		2
34266# vrsn chunk short content interpreted by MajorVersion * 100 + MinorVersion
34267>>20	uleshort/100	x		%u
34268>>20	uleshort%100	>0		\b.%u
34269# for debugging purpose display next chunk like: DISP LIST
34270#>>22	string		x		\b, 4th "%-4.4s"
34271#>>26	ulelong		x		\b, 4th SIZE %#x
34272# for debugging purpose display 5th chunk like: LIST DISP ccmm osfp
34273#>>(26.l+30)	string	x		\b, 5th "%-4.4s"
34274# 1st data chunk length 10h implies 16 byte content with version info
34275>16	ulelong		0x10
34276>>34	ubyte		x		%u
34277>>>33	ubyte		>0		\b.%u
34278#	display information of RIFF based Corel Design formats
342790	name   	corel-des
34280# display second chunk for debugging
34281#>8	string		x		\b, [8]=%.8s
34282>12	string		x		\b, Corel DESIGNER
34283!:mime	image/x-corel-des
34284#!:mime	application/x-vnd.corel.designer.document
34285# used by Corel Designer with newer versions since 16
34286>12	string		=fver		graphics (root.dat)
34287!:ext	dat
34288# used by Corel Designer templates with older versions with vrsn tag
34289>12	string		!fver
34290# used by Corel Designer with versions 14-15
34291>>11	string		>D		graphics (riffData.cdr)
34292!:ext	cdr
34293# used by Corel Designer with versions 10-12
34294>>11	string		<E		graphics
34295!:ext	des
34296# version indicated by last ASCII char of second chunk tag
34297>11	string		x		\b, version '%-.1s'
34298# but vrsn short content is not always version indicator
34299# exceptions: 'A'~11.4 'B'~12 'C'~12.5
34300>11	string		>D
34301>>0	use		corel-version
34302# for debugging purpose display next chunk like: DISP LIST
34303#>>22	string		x		\b, 4th "%-4.4s"
34304#>>26	ulelong		x		\b, 4th SIZE %#x
34305# for debugging purpose display 5th chunk like: LIST osfp
34306#>>(26.l+30)	string	x		\b, 5th "%-4.4s"
34307>4	ulelong+8	x		\b, %u bytes
34308
34309#
34310# XXX - some of the below may only appear in little-endian form.
34311#
34312# Also "MV93" appears to be for one form of Macromedia Director
34313# files, and "GDMF" appears to be another multimedia format.
34314#
343150	string		RIFX		RIFF (big-endian) data
34316# RIFF Palette format
34317>8	string		PAL		\b, palette
34318>>16	beshort		x		\b, version %d
34319>>18	beshort		x		\b, %d entries
34320# RIFF Device Independent Bitmap format
34321>8	string		RDIB		\b, device-independent bitmap
34322>>16	string		BM
34323>>>30	beshort		12		\b, OS/2 1.x format
34324>>>>34	beshort		x		\b, %d x
34325>>>>36	beshort		x		%d
34326>>>30	beshort		64		\b, OS/2 2.x format
34327>>>>34	beshort		x		\b, %d x
34328>>>>36	beshort		x		%d
34329>>>30	beshort		40		\b, Windows 3.x format
34330>>>>34	belong		x		\b, %d x
34331>>>>38	belong		x		%d x
34332>>>>44	beshort		x		%d
34333# RIFF MIDI format
34334>8	string		RMID		\b, MIDI
34335# RIFF Multimedia Movie File format
34336>8	string		RMMP		\b, multimedia movie
34337# Microsoft WAVE format (*.wav)
34338>8	string		WAVE		\b, WAVE audio
34339>>20	leshort		1		\b, Microsoft PCM
34340>>>34	leshort		>0		\b, %d bit
34341>>22	beshort		=1		\b, mono
34342>>22	beshort		=2		\b, stereo
34343>>22	beshort		>2		\b, %d channels
34344>>24	belong		>0		%d Hz
34345# Corel Draw Picture big endian not tested by real examples
34346#>8	string		CDRA		\b, Corel Draw Picture
34347#>8	string		CDR6		\b, Corel Draw Picture, version 6
34348>8	string		CDR
34349>>0	use     \^corel-draw
34350
34351# AVI == Audio Video Interleave
34352>8	string		AVI\040		\b, AVI
34353# Animated Cursor format
34354>8	string		ACON		\b, animated cursor
34355# Notation Interchange File Format (big-endian only)
34356>8	string		NIFF		\b, Notation Interchange File Format
34357# SoundFont 2 <mpruett@sgi.com>
34358>8	string		sfbk		SoundFont/Bank
34359
34360#------------------------------------------------------------------------------
34361# Sony Wave64
34362# see http://www.vcs.de/fileadmin/user_upload/MBS/PDF/Whitepaper/Informations_about_Sony_Wave64.pdf
34363# 128 bit RIFF-GUID { 66666972-912E-11CF-A5D6-28DB04C10000 } in little-endian
343640	string	riff\x2E\x91\xCF\x11\xA5\xD6\x28\xDB\x04\xC1\x00\x00		Sony Wave64 RIFF data
34365# 128 bit + total file size (64 bits) so 24 bytes
34366# then WAVE-GUID { 65766177-ACF3-11D3-8CD1-00C04F8EDB8A }
34367>24	string		wave\xF3\xAC\xD3\x11\x8C\xD1\x00\xC0\x4F\x8E\xDB\x8A		\b, WAVE 64 audio
34368!:mime	audio/x-w64
34369# FMT-GUID { 20746D66-ACF3-11D3-8CD1-00C04F8EDB8A }
34370>>40	search/256	fmt\x20\xF3\xAC\xD3\x11\x8C\xD1\x00\xC0\x4F\x8E\xDB\x8A		\b
34371>>>&10	leshort		=1		\b, mono
34372>>>&10	leshort		=2		\b, stereo
34373>>>&10	leshort		>2		\b, %d channels
34374>>>&12	lelong		>0		%d Hz
34375
34376#------------------------------------------------------------------------------
34377# MBWF/RF64
34378# see EBU TECH 3306 https://tech.ebu.ch/docs/tech/tech3306-2009.pdf
343790	string	RF64\xff\xff\xff\xffWAVEds64		MBWF/RF64 audio
34380!:mime	audio/x-wav
34381>40	search/256	fmt\x20		\b
34382>>&6	leshort		=1		\b, mono
34383>>&6	leshort		=2		\b, stereo
34384>>&6	leshort		>2		\b, %d channels
34385>>&8	lelong		>0		%d Hz
34386#------------------------------------------------------------------------------
34387# $File: ringdove,v 1.1 2022/08/16 12:04:30 christos Exp $
34388# ringdove:  file(1) magic for RingdoveEDA data files
34389
34390# librnd and global
343910	regex/128l	ha:rnd-menu-v[0-9]+[\ \t\r\n]*[{]	librnd menu system (lihata)
343920	regex/128l	ha:rnd-menu-patch-v[0-9]+[\ \t\r\n]*[{]	librnd menu patch (lihata)
343930	regex/128l	ha:coraleda-project-v[0-9]+[\ \t\r\n]*[{]	CoralEDA/Ringdove project file (lihata)
343940	regex/128l	ha:ringdove-project-v[0-9]+[\ \t\r\n]*[{]	Ringdove project file (lihata)
34395
34396# pcb-rnd
343970	regex/128l	ha:pcb-rnd-board-v[0-9]+[\ \t\r\n]*[{]	pcb-rnd board file (lihata)
343980	regex/128l	li:pcb-rnd-subcircuit-v[0-9]+[\ \t\r\n]*[{]	pcb-rnd subcircuit/footprint file (lihata)
343990	regex/128l	ha:pcb-rnd-buffer-v[0-9]+[\ \t\r\n]*[{]	pcb-rnd paste buffer content (lihata)
344000	regex/128l	li:pcb-rnd-conf-v[0-9]+[\ \t\r\n]*[{]	pcb-rnd configuration (lihata)
344010	regex/128l	ha:pcb-rnd-drc-query-v[0-9]+[\ \t\r\n]*[{]	pcb-rnd drc query string (lihata)
344020	regex/128l	li:pcb-rnd-font-v[0-9]+[\ \t\r\n]*[{]	pcb-rnd vector font (lihata)
344030	regex/128l	ha:pcb-rnd-log-v[0-9]+[\ \t\r\n]*[{]	pcb-rnd message log dump (lihata)
344040	regex/128l	ha:pcb-rnd-padstack-v[0-9]+[\ \t\r\n]*[{]	pcb-rnd padstack (lihata)
344050	regex/128l	li:pcb-rnd-view-list-v[0-9]+[\ \t\r\n]*[{]	pcb-rnd view list (lihata)
344060	regex/128l	li:view-list-v[0-9]+[\ \t\r\n]*[{]	pcb-rnd view list (lihata)
344070	search	Netlist(Freeze)	pcb-rnd or gEDA/PCB netlist forward annotation action script
34408
34409# sch-rnd (cschem data model)
344100	regex/128l	li:cschem-buffer-v[0-9]+[\ \t\r\n]*[{]	sch-rnd/cschem buffer content (lihata)
344110	regex/128l	li:sch-rnd-conf-v[0-9]+[\ \t\r\n]*[{]	sch-rnd configuration (lihata)
344120	regex/128l	ha:std_devmap.v[0-9]+[\ \t\r\n]*[{]	sch-rnd devmap (device mapping; lihata)
344130	regex/128l	li:cschem-group-v[0-9]+[\ \t\r\n]*[{]	sch-rnd/cschem group or symbol (lihata)
344140	regex/128l	ha:cschem-sheet-v[0-9]+[\ \t\r\n]*[{]	sch-rnd/cschem schematic sheet (lihata)
34415
34416# tEDAx (modular format)
344170	regex/1l	tEDAx[\ \t\r\n]v	tEDAx (Trivial EDA eXchange)
34418>0	regex	begin\ symbol\ v	with schematic symbol
34419>0	regex	begin\ board\ v	with Printed Circuit Board
34420>0	regex	begin\ route_req\ v	with PCB routing request
34421>0	regex	begin\ route_res\ v	with PCB routing result
34422>0	regex	begin\ camv_layer\ v	with camv-rnd exported layer
34423>0	regex	begin\ netlist\ v	with netlist
34424>0	regex	begin\ backann\ v	with Ringdove EDA back annotation
34425>0	regex	begin\ footprint\ v	with PCB footprint
34426>0	regex	begin\ drc\ v	with PCB DRC script
34427>0	regex	begin\ drc_query_rule\ v	with pcb-rnd drc_query rules
34428>0	regex	begin\ drc_query_def\ v	with pcb-rnd drc_query value/config definitions
34429>0	regex	begin\ etest\ v	with PCB electric test
34430
34431
34432#------------------------------------------------------------------------------
34433# $File: rpi,v 1.3 2022/04/02 14:39:34 christos Exp $
34434# rpi:  file(1) magic for Raspberry Pi images
34435-44		lelong	0
34436>4		lelong	0
34437>>8		lelong	1
34438>>12		lelong	4
34439>>>16		string	283x
34440>>>>20		lelong	1
34441>>>>>24		lelong	4
34442>>>>>>28	string	DTOK
34443>>>>>>>32	lelong	44
34444>>>>>>>>36	lelong	4
34445>>>>>>>>>40	string	RPTL		Raspberry PI kernel image
34446
34447-56		lelong	0
34448>4		lelong	0
34449>>8		lelong	1
34450>>12		lelong	4
34451>>>16		string	283x
34452>>>>20		lelong	1
34453>>>>>24		lelong	4
34454>>>>>>28	string	DTOK
34455>>>>>>>32	lelong	1
34456>>>>>>>>36	lelong	4
34457>>>>>>>>>40	string	DDTK8
34458>>>>>>>>>>48	lelong	4
34459>>>>>>>>>>>52	string	RPTL		Raspberry PI kernel image
34460
34461# From: 	Joerg Jenderek
34462# URL:		https://www.raspberrypi.com/documentation/computers/raspberry-pi.html
34463#		#raspberry-pi-4-boot-eeprom
34464# Reference:	https://github.com/raspberrypi/rpi-eeprom/blob/master/rpi-eeprom-config
34465# Note:		start with same magic as for BIOS (ia32) ROM Extension handled by ./intel
34466# masked with MAGIC_MASK and then compared with MAGIC
344670	belong&0xFFffF00F	0x55aaF00F	Raspberry PI EEPROM
34468#!:mime	application/octet-stream
34469!:mime	application/x-raspberry-eeprom
34470# like: pieeprom-2020-09-03.bin
34471!:ext	bin
34472# a 32 bit offset to the next section like: 000184d4 000184c8 00018534 ... 0000bb84 0000bbd4 0000bbd4
34473>4	ubelong			x		\b, offset %8.8x
34474#>(4.L)	ubelong			x		NEXT=%8.8x
34475# self.length
34476>8	ubelong			!0		\b, length %x
34477# self.filename
34478>12	string			>0		\b, "%s"
34479# length is zero
34480>8	ubelong			=0
34481# if length is zero then 2nd section magic here can be zero; this means sections parsing done
34482>>8	ubelong			!0		\b, 2nd MAGIC=%8.8x
34483
34484#------------------------------------------------------------------------------
34485# $File: rpm,v 1.12 2013/01/11 16:45:23 christos Exp $
34486#
34487# RPM: file(1) magic for Red Hat Packages   Erik Troan (ewt@redhat.com)
34488#
344890	belong		0xedabeedb	RPM
34490!:mime	application/x-rpm
34491>4	byte		x		v%d
34492>5	byte		x		\b.%d
34493>6	beshort		1		src
34494>6	beshort		0		bin
34495>>8	beshort		1		i386/x86_64
34496>>8	beshort		2		Alpha/Sparc64
34497>>8	beshort		3		Sparc
34498>>8	beshort		4		MIPS
34499>>8	beshort		5		PowerPC
34500>>8	beshort		6		68000
34501>>8	beshort		7		SGI
34502>>8	beshort		8		RS6000
34503>>8	beshort		9		IA64
34504>>8	beshort		10		Sparc64
34505>>8	beshort		11		MIPSel
34506>>8	beshort		12		ARM
34507>>8	beshort		13		MiNT
34508>>8	beshort		14		S/390
34509>>8	beshort		15		S/390x
34510>>8	beshort		16		PowerPC64
34511>>8	beshort		17		SuperH
34512>>8	beshort		18		Xtensa
34513>>8	beshort		255		noarch
34514>>10	string		x		%s
34515
34516#delta RPM    Daniel Novotny (dnovotny@redhat.com)
345170	string		drpm		Delta RPM
34518!:mime  application/x-rpm
34519>12	string 	x	%s
34520>>8	beshort		11		MIPSel
34521>>8	beshort		12		ARM
34522>>8	beshort		13		MiNT
34523>>8	beshort		14		S/390
34524>>8	beshort		15		S/390x
34525>>8	beshort		16		PowerPC64
34526>>8	beshort		17		SuperH
34527>>8	beshort		18		Xtensa
34528>>10	string		x		%s
34529
34530#------------------------------------------------------------------------------
34531# $File: rpmsg,v 1.1 2019/04/19 00:40:47 christos Exp $
34532# rpmsg: file(1) magic for restricted-permission messages (or "rights-protected" messages)
34533# see https://en.wikipedia.org/wiki/Rpmsg
34534
345350	string	\x76\xe8\x04\x60\xc4\x11\xe3\x86	rpmsg Restricted Permission Message
34536
34537#------------------------------------------------------------------------------
34538# $File: rst,v 1.3 2020/04/27 01:50:36 christos Exp $
34539# rst: ReStructuredText http://docutils.sourceforge.net/rst.html
345400	search/256	\=\=
34541!:strength + 30
34542>&0	regex/256	\^[\=]+$
34543>>&0	search/512	:Author:	ReStructuredText file
34544>>&0	default		x
34545>>>&0	regex/512	\^\\.\\.[A-Za-z]	ReStructuredText file
34546!:ext	rst
34547
34548#------------------------------------------------------------------------------
34549# $File: rtf,v 1.9 2020/12/12 20:01:47 christos Exp $
34550# rtf:	file(1) magic for Rich Text Format (RTF)
34551#
34552# Duncan P. Simpson, D.P.Simpson@dcs.warwick.ac.uk
34553# Update:	Joerg Jenderek
34554# URL:		https://en.wikipedia.org/wiki/Rich_Text_Format
34555# Reference:	http://www.snake.net/software/RTF/RTF-Spec-1.7.rtf
34556#		http://www.kleinlercher.at/tools/Windows_Protocols/Word2007RTFSpec9.pdf
345570	string		{\\rtf
34558# skip DROID fmt-355-signature-id-522.rtf by looking for valid version
34559>5	ubyte		!0xAB
34560# skip also \ in DROID fmt-50-signature-id-158.rtf by looking for valid version
34561>>5	ubyte		!0x5C		Rich Text Format data
34562!:mime	text/rtf
34563!:apple	????RTF
34564!:ext	rtf
34565>>>0	use		rtf-info
34566#	display information like version, language and code page of RTF
345670	name		rtf-info
34568# 1 mostly, 2 for newer Pocket Word documents, space for test like fdo78502.rtf, { for some urtf
34569>5	ubyte		!0x7b		\b, version %c
34570# The word for character set must precede any text or most other control words
34571>6	string		\\mac		\b, Apple Macintosh
34572>6	string		\\pc
34573# control word \pca
34574>>9	ubyte		=0x61		\b, IBM PS/2, code page 850
34575>>9	ubyte		!0x61		\b, IBM PC, code page 437
34576# unknown character set or ANSI later after control words like
34577# \adeflang1025 \info \title \author \category \manager
34578# "Burow, Steffanie - Im Tal des Schneeleoparden.rtf"
34579#>6	search/105	\\ansi		\b, ANSI
34580>6	search/502	\\ansi		\b, ANSI
34581>6	default		x		\b, unknown character set
34582# look for explicit codepage keyword
34583# "Burow, Steffanie - Im Tal des Schneeleoparden.rtf"
34584#>5	search/110	\\ansicpg
34585>5	search/500	\\ansicpg
34586# skip unknown or buggy codepage string 0 like in fdo78502.rtf
34587>>&0	ubyte		!0x30		\b, code page
34588# codepage string: 437~United States IBM, ..., 1252~WesternEuropean, ..., 57011~Punjabi
34589>>>&-1		string	x		%-.3s
34590# skip space or \ and display possible 4th digit of code page string
34591>>>&2		ubyte	>0x2F
34592>>>>&-1		ubyte	<0x3A		\b%c
34593# possible 5th digit of code page string
34594>>>>>&0		ubyte	>0x2F
34595>>>>>>&-1	ubyte	<0x3A		\b%c
34596# look again at version byte to use default clause
34597>5	ubyte		x
34598# Default language ID for South Asian/Middle Eastern text
34599# language ID: 1025, ..., 1065~Persian, ..., 2057~English_UnitedKingdom, ..., 58380~French_NorthAfrica
34600# Readme-0.72-Persian.rtf
34601#>6	search/1	\\adeflang	\b, default middle east language ID
34602>>6	search/497	\\adeflang	\b, default middle east language ID
34603# https://docs.microsoft.com/en-us/openspecs/office_standards/ms-oe376/6c085406-a698-4e12-9d4d-c3b0ee3dbc4a
34604>>>&0	string		x		%.4s
34605# skip \ and NL and show possible 5th digit of language string
34606>>>&4	ubyte		>0x2F
34607>>>>&-1	ubyte		<0x3A		\b%c
34608# else look for default language to be used when the \plain control word is encountered
34609>>6	default		x
34610# "Burow, Steffanie - Im Tal des Schneeleoparden.rtf"
34611#>>>6	search/127	\\deflang
34612>>>6	search/505	\\deflang
34613>>>>&0	string		>0		\b, default language ID %-.4s
34614# possible 5th digit of language string
34615>>>>&4		ubyte	>0x2F
34616>>>>>&-1	ubyte	<0x3A		\b%c
34617
34618# Reference:	http://latex2rtf.sourceforge.net/rtfspec_63.html
34619# Note:		no real world example found
346200	string		{\\urtf		Rich Text Format unicoded data
34621!:mime	text/rtf
34622#!:apple	????RTF
34623!:ext	rtf
34624>1	use		rtf-info
34625
34626# URL:		https://en.wikipedia.org/wiki/Microsoft_Word
34627# Reference:	http://fileformats.archiveteam.org/wiki/Microsoft_Word
34628# Note:	called by TrID "Pocket Word document"
34629#	by PlanMaker "Pocket Word-Handheld PC" for pwd
34630#	by PlanMaker "Pocket Word-Pocket PC" for psw
346310	string		{\\pwd		Pocket Word document or template
34632# by SoftMaker Office	http://extension.nirsoft.net/pwd
34633#!:mime	application/msword
34634# https://reposcope.com/mimetype/application/x-pocket-word
34635!:mime	application/x-pocket-word
34636# PWD for Handheld PC variant and PSW for Pocket PC variant
34637# PWT for template
34638!:ext	pwd/psw/pwt
34639>0	use		rtf-info
34640
34641
34642#------------------------------------------------------------------------------
34643# $File: ruby,v 1.10 2019/07/21 09:40:17 christos Exp $
34644# ruby:  file(1) magic for Ruby scripting language
34645# URL:  https://www.ruby-lang.org/
34646# From: Reuben Thomas <rrt@sc3d.org>
34647
34648# Ruby scripts
346490	search/1/w	#!\ /usr/bin/ruby				Ruby script text executable
34650!:strength + 15
34651!:mime text/x-ruby
346520	search/1/w	#!\ /usr/local/bin/ruby	Ruby script text executable
34653!:strength + 15
34654!:mime text/x-ruby
346550	search/1	#!/usr/bin/env\ ruby				Ruby script text executable
34656!:strength + 15
34657!:mime text/x-ruby
346580	search/1	#!\ /usr/bin/env\ ruby			Ruby script text executable
34659!:strength + 15
34660!:mime text/x-ruby
34661
34662# What looks like ruby, but does not have a shebang
34663# (modules and such)
34664# From: Lubomir Rintel <lkundrak@v3.sk>
346650	search/8192	require
34666>0	regex		\^[[:space:]]*require[[:space:]]'[A-Za-z_/.]+'
34667>>0	regex		def\ [a-z]|\ do$
34668>>>&0	regex		\^[[:space:]]*end([[:space:]]+[;#].*)?$		Ruby script text
34669!:strength + 30
34670!:mime	text/x-ruby
346710	regex		\^[[:space:]]*(class|module)[[:space:]][A-Z]
34672>0	regex		(modul|includ)e\ [A-Z]|def\ [a-z]
34673>>&0	regex		\^[[:space:]]*end([[:space:]]+[;#].*)?$		Ruby script text
34674!:strength + 30
34675!:mime	text/x-ruby
34676# Classes with no modules or defs, beats simple ASCII
346770	regex		\^[[:space:]]*(class|module)[[:space:]][A-Z]
34678>&0	regex	\^[[:space:]]*end([[:space:]]+[;#if].*)?$		Ruby script text
34679!:strength + 10
34680!:mime	text/x-ruby
34681# Looks for function definition to balance python magic
34682# def name (args)
34683# end
346840	search/8192	def\
34685>0	regex		\^[[:space:]]*def\ [a-z]|def\ [[:alpha:]]+::[a-z]
34686>>&0	regex		\^[[:space:]]*end([[:space:]]+[;#].*)?$		Ruby script text
34687!:strength + 10
34688!:mime	text/x-ruby
34689
346900	search/8192	require
34691>0	regex		\^[[:space:]]*require[[:space:]]'[A-Za-z_/.]+'	Ruby script text
34692!:mime	text/x-ruby
346930	search/8192	include
34694>0 regex 	\^[[:space:]]*include\ ([A-Z]+[a-z]*(::))+	Ruby script text
34695!:mime	text/x-ruby
34696
34697#------------------------------------------------------------------------------
34698# $File: sc,v 1.6 2009/09/19 16:28:12 christos Exp $
34699# sc:  file(1) magic for "sc" spreadsheet
34700#
3470138	string		Spreadsheet	sc spreadsheet file
34702!:mime	application/x-sc
34703
34704#------------------------------------------------------------------------------
34705# $File: sccs,v 1.8 2020/06/20 21:32:52 christos Exp $
34706# sccs:  file(1) magic for SCCS archives
34707#
34708# SCCS v4 archive structure:
34709# \001h01207
34710# \001s 00276/00000/00000
34711# \001d D 1.1 87/09/23 08:09:20 ian 1 0
34712# \001c date and time created 87/09/23 08:09:20 by ian
34713# \001e
34714# \001u
34715# \001U
34716# ... etc.
34717# Now '\001h' happens to be the same as the 3B20's a.out magic number (0550).
34718# *Sigh*. And these both came from various parts of the USG.
34719# Maybe we should just switch everybody from SCCS to RCS!
34720# Further, you can't just say '\001h0', because the five-digit number
34721# is a checksum that could (presumably) have any leading digit,
34722# Fortunately we have regular expression matching:
347230	string		\001h
34724>2	regex		[0-9][0-9][0-9][0-9][0-9]$
34725>>8	string		\001s\040 		SCCS v4 archive data
34726>2	string		V6,sum=			SCCS v6 archive data
34727
34728#------------------------------------------------------------------------------
34729# $File: scientific,v 1.13 2019/04/19 00:42:27 christos Exp $
34730# scientific:  file(1) magic for scientific formats
34731#
34732# From: Joe Krahn <krahn@niehs.nih.gov>
34733
34734########################################################
34735# CCP4 data and plot files:
347360	string		MTZ\040		MTZ reflection file
34737
3473892	string		PLOT%%84	Plot84 plotting file
34739>52	byte		1		, Little-endian
34740>55	byte		1		, Big-endian
34741
34742########################################################
34743# Electron density MAP/MASK formats
34744
347450	string		EZD_MAP	NEWEZD Electron Density Map
34746109	string		MAP\040(  Old EZD Electron Density Map
34747
347480	string/c	:-)\040Origin	BRIX Electron Density Map
34749>170	string		>0	, Sigma:%.12s
34750#>4	string		>0	%.178s
34751#>4	addr		x	%.178s
34752
347537	string		18\040!NTITLE	XPLOR ASCII Electron Density Map
347549	string		\040!NTITLE\012\040REMARK	CNS ASCII electron density map
34755
34756208	string		MAP\040	CCP4 Electron Density Map
34757# Assumes same stamp for float and double (normal case)
34758>212	byte		17	\b, Big-endian
34759>212	byte		34	\b, VAX format
34760>212	byte		68	\b, Little-endian
34761>212	byte		85	\b, Convex native
34762
34763############################################################
34764# X-Ray Area Detector images
347650	string	R-AXIS4\ \ \ 	R-Axis Area Detector Image:
34766>796	lelong	<20		Little-endian, IP #%d,
34767>>768	lelong	>0		Size=%dx
34768>>772	lelong	>0		\b%d
34769>796	belong	<20		Big-endian, IP #%d,
34770>>768	belong	>0		Size=%dx
34771>>772	belong	>0		\b%d
34772
347730	string	RAXIS\ \ \ \ \ 	R-Axis Area Detector Image, Win32:
34774>796	lelong	<20		Little-endian, IP #%d,
34775>>768	lelong	>0		Size=%dx
34776>>772	lelong	>0		\b%d
34777>796	belong	<20		Big-endian, IP #%d,
34778>>768	belong	>0		Size=%dx
34779>>772	belong	>0		\b%d
34780
34781
347821028	string	MMX\000\000\000\000\000\000\000\000\000\000\000\000\000	MAR Area Detector Image,
34783>1072	ulong	>1		Compressed(%d),
34784>1100	ulong	>1		%d headers,
34785>1104	ulong	>0		%d x
34786>1108	ulong	>0		%d,
34787>1120	ulong	>0		%d bits/pixel
34788
34789# Type: GEDCOM genealogical (family history) data
34790# From: Giuseppe Bilotta
347910       search/1/c	0\ HEAD         GEDCOM genealogy text
34792>&0     search		1\ GEDC
34793>>&0    search		2\ VERS         version
34794>>>&1   string		>\0		%s
34795# From: Phil Endecott <phil05@chezphil.org>
347960	string	\000\060\000\040\000\110\000\105\000\101\000\104		GEDCOM data
347970	string	\060\000\040\000\110\000\105\000\101\000\104\000		GEDCOM data
347980	string	\376\377\000\060\000\040\000\110\000\105\000\101\000\104	GEDCOM data
347990	string	\377\376\060\000\040\000\110\000\105\000\101\000\104\000	GEDCOM data
34800
34801# PDB: Protein Data Bank files
34802# Adam Buchbinder <adam.buchbinder@gmail.com>
34803#
34804# https://www.wwpdb.org/documentation/format32/sect2.html
34805# https://www.ch.ic.ac.uk/chemime/
34806#
34807# The PDB file format is fixed-field, 80 columns. From the spec:
34808#
34809# COLS        DATA
34810#  1 -  6      "HEADER"
34811#  11 - 50     String(40)
34812#  51 - 59     Date
34813#  63 - 66     IDcode
34814#
34815# Thus, positions 7-10, 60-62 and 67-80 are spaces. The Date must be in the
34816# format DD-MMM-YY, e.g., 01-JAN-70, and the IDcode consists of numbers and
34817# uppercase letters. However, examples have been seen without the date string,
34818# e.g., the example on the chemime site.
348190	string	HEADER\ \ \ \040
34820>&0	regex/1l	\^.{40}
34821>>&0	regex/1l	[0-9]{2}-[A-Z]{3}-[0-9]{2}\ {3}
34822>>>&0	regex/1ls	[A-Z0-9]{4}.{14}$
34823>>>>&0	regex/1l	[A-Z0-9]{4}	Protein Data Bank data, ID Code %s
34824!:mime	chemical/x-pdb
34825>>>>0	regex/1l	[0-9]{2}-[A-Z]{3}-[0-9]{2}	\b, %s
34826
34827# Type:	GDSII Stream file
348280	belong	0x00060002	GDSII Stream file
34829>4	byte	0x00
34830>>5	byte	x		version %d.0
34831>4	byte	>0x00		version %d
34832>>5	byte	x		\b.%d
34833
34834# Type: LXT (interLaced eXtensible Trace)
34835# chrysn <chrysn@fsfe.org>
348360	beshort	0x0138	interLaced eXtensible Trace (LXT) file
34837>2	beshort	>0	(Version %u)
34838
34839#------------------------------------------------------------------------------
34840# $File: securitycerts,v 1.4 2009/09/19 16:28:12 christos Exp $
348410	search/1		-----BEGIN\ CERTIFICATE------	RFC1421 Security Certificate text
348420	search/1		-----BEGIN\ NEW\ CERTIFICATE	RFC1421 Security Certificate Signing Request text
348430	belong	0xedfeedfe	Sun 'jks' Java Keystore File data
34844
348450	string \0volume_key	volume_key escrow packet
34846# Type:	SE Linux policy modules *.pp reference policy
34847#	for Fedora 5 to 9, RHEL5, and Debian Etch and Lenny.
34848# URL:	https://doc.coker.com.au/computers/selinux-magic
34849# From:	Russell Coker <russell@coker.com.au>
34850
348510		lelong	0xf97cff8f	SE Linux modular policy
34852>4		lelong	x		version %d,
34853>8		lelong	x		%d sections,
34854>>(12.l)	lelong	0xf97cff8d
34855>>>(12.l+27)	lelong	x		mod version %d,
34856>>>(12.l+31)	lelong	0		Not MLS,
34857>>>(12.l+31)	lelong	1		MLS,
34858>>>(12.l+23)	lelong	2
34859>>>>(12.l+47)	string	>\0		module name %s
34860>>>(12.l+23)	lelong	1		base
34861
348621	string	policy_module(	SE Linux policy module source
348632	string	policy_module(	SE Linux policy module source
34864
348650	string	##\ <summary>	SE Linux policy interface source
34866
34867#0	search	gen_context(	SE Linux policy file contexts
34868
34869#0	search	gen_sens(	SE Linux policy MLS constraints source
34870
34871#------------------------------------------------------------------------------
34872# $File: sendmail,v 1.11 2019/04/19 00:42:27 christos Exp $
34873# sendmail:  file(1) magic for sendmail config files
34874#
34875# XXX - byte order?
34876#
34877# Update: Joerg Jenderek
34878# GRR: this test is too general as it catches also
34879# READ.ME.FIRST.AWP Sendmail frozen configuration
34880# - version ====|====|====|====|====|====|====|====|====|====|====|====|===
34881# Email_23_f217153422.ts Sendmail frozen configuration
34882# - version \330jK\354
348830	byte	046
34884# https://www.sendmail.com/sm/open_source/docs/older_release_notes/
34885# freezed configuration file (dbm format?) created from sendmal.cf with -bz
34886# by older sendmail. til version 8.6 support for frozen configuration files is removed
34887# valid version numbers look like "7.14.4" and should be similar to output of commands
34888# "sendmail -d0 -bt < /dev/null |grep -i Version" or "egrep '^DZ' /etc/sendmail.cf"
34889>16	regex/s	=^[0-78][0-9.]{4}	Sendmail frozen configuration
34890# normally only /etc/sendmail.fc or /var/adm/sendmail/sendmail.fc
34891!:ext fc
34892>>16	string	>\0			- version %s
348930	short	0x271c
34894# look for valid version number
34895>16	regex/s	=^[0-78][0-9.]{4}	Sendmail frozen configuration
34896!:ext fc
34897>>16	string	>\0			- version %s
34898
34899#------------------------------------------------------------------------------
34900# sendmail:  file(1) magic for sendmail m4(1) files
34901#
34902# From Hendrik Scholz <hendrik@scholz.net>
34903# i.e. files in /usr/share/sendmail/cf/
34904#
349050   string  divert(-1)\n    sendmail m4 text file
34906
34907
34908#------------------------------------------------------------------------------
34909# $File: sequent,v 1.14 2019/04/19 00:42:27 christos Exp $
34910# sequent:  file(1) magic for Sequent machines
34911#
34912# Sequent information updated by Don Dwiggins <atsun!dwiggins>.
34913# For Sequent's multiprocessor systems (incomplete).
349140	lelong	0x00ea        	BALANCE NS32000 .o
34915>16	lelong	>0		not stripped
34916>124	lelong	>0		version %d
349170	lelong	0x10ea        	BALANCE NS32000 executable (0 @ 0)
34918>16	lelong  >0            	not stripped
34919>124	lelong	>0		version %d
349200	lelong	0x20ea        	BALANCE NS32000 executable (invalid @ 0)
34921>16	lelong  >0            	not stripped
34922>124	lelong	>0		version %d
349230	lelong	0x30ea        	BALANCE NS32000 standalone executable
34924>16	lelong  >0          	not stripped
34925>124	lelong	>0		version %d
34926#
34927# Symmetry information added by Jason Merrill <jason@jarthur.claremont.edu>.
34928# Symmetry magic nums will not be reached if DOS COM comes before them;
34929# byte 0xeb is matched before these get a chance.
349300	leshort	0x12eb		SYMMETRY i386 .o
34931>16	lelong	>0		not stripped
34932>124	lelong	>0		version %d
349330	leshort	0x22eb		SYMMETRY i386 executable (0 @ 0)
34934>16	lelong	>0		not stripped
34935>124	lelong	>0		version %d
349360	leshort	0x32eb		SYMMETRY i386 executable (invalid @ 0)
34937>16	lelong	>0		not stripped
34938>124	lelong	>0		version %d
34939# https://en.wikipedia.org/wiki/Sequent_Computer_Systems
34940# below test line conflicts with MS-DOS 2.11 floppies and Acronis loader
34941#0	leshort	0x42eb		SYMMETRY i386 standalone executable
349420	leshort	0x42eb
34943# skip unlike negative version
34944>124	lelong	>-1
34945# assuming version 28867614 is very low probable
34946>>124	lelong	!28867614	SYMMETRY i386 standalone executable
34947>>>16	lelong	>0		not stripped
34948>>>124	lelong	>0		version %d
34949
34950#------------------------------------------------------------------------------
34951# $File: sereal,v 1.3 2015/02/05 19:14:45 christos Exp $
34952# sereal: file(1) magic the Sereal binary serialization format
34953#
34954# From: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
34955#
34956# See the specification of the format at
34957# https://github.com/Sereal/Sereal/blob/master/sereal_spec.pod#document-header-format
34958#
34959# I'd have liked to do the byte&0xF0 matching against 0, 1, 2 ... by
34960# doing (byte&0xF0)>>4 here, but unfortunately that's not
34961# supported. So when we print out a message about an unknown format
34962# we'll print out e.g. 0x30 instead of the more human-readable
34963# 0x30>>4.
34964#
34965# See https://github.com/Sereal/Sereal/commit/35372ae01d in the
34966# Sereal.git repository for test Sereal data.
349670	name		sereal
34968>4	byte&0x0F	x		(version %d,
34969>4	byte&0xF0	0x00		uncompressed)
34970>4	byte&0xF0	0x10		compressed with non-incremental Snappy)
34971>4	byte&0xF0	0x20		compressed with incremental Snappy)
34972>4	byte&0xF0	>0x20		unknown subformat, flag: %d>>4)
34973
349740	string/b	\=srl		Sereal data packet
34975!:mime application/sereal
34976>&0	use		sereal
349770	string/b	\=\xF3rl	Sereal data packet
34978!:mime application/sereal
34979>&0	use		sereal
349800	string/b	\=\xC3\xB3rl	Sereal data packet, UTF-8 encoded
34981!:mime application/sereal
34982>&0	use		sereal
34983
34984
34985#------------------------------------------------------------------------------
34986# $File: sgi,v 1.24 2021/09/13 13:23:53 christos Exp $
34987# sgi:  file(1) magic for Silicon Graphics operating systems and applications
34988#
34989# Executable images are handled either in aout (for old-style a.out
34990# files for 68K; they are indistinguishable from other big-endian 32-bit
34991# a.out files) or in mips (for MIPS ECOFF and Ucode files)
34992#
34993
34994# kbd file definitions
349950	string	kbd!map		kbd map file
34996>8	byte	>0		Ver %d:
34997>10	short	>0		with %d table(s)
34998
349990	beshort	0x8765		disk quotas file
35000
350010	beshort	0x0506		IRIS Showcase file
35002>2	byte	0x49		-
35003>3	byte	x		- version %d
350040	beshort	0x0226		IRIS Showcase template
35005>2	byte	0x63		-
35006>3	byte	x		- version %d
350070	belong	0x5343464d	IRIS Showcase file
35008>4	byte	x		- version %d
350090	belong	0x5443464d	IRIS Showcase template
35010>4	byte	x		- version %d
350110	belong	0xdeadbabe	IRIX Parallel Arena
35012>8	belong	>0		- version %d
35013
35014# core files
35015#
35016# 32bit core file
350170	belong	0xdeadadb0	IRIX core dump
35018>4	belong	1		of
35019>16	string	>\0		'%s'
35020# 64bit core file
350210	belong	0xdeadad40	IRIX 64-bit core dump
35022>4	belong	1		of
35023>16	string	>\0		'%s'
35024# N32bit core file
350250       belong	0xbabec0bb	IRIX N32 core dump
35026>4      belong	1               of
35027>16     string	>\0             '%s'
35028# New style crash dump file
350290	string	\x43\x72\x73\x68\x44\x75\x6d\x70	IRIX vmcore dump of
35030>36	string	>\0					'%s'
35031
35032# Trusted IRIX info
350330	string	SGIAUDIT	SGI Audit file
35034>8	byte	x		- version %d
35035>9	byte	x		\b.%d
35036#
350370	string	WNGZWZSC	Wingz compiled script
350380	string	WNGZWZSS	Wingz spreadsheet
350390	string	WNGZWZHP	Wingz help file
35040#
350410	string	#Inventor\040V	IRIS Inventor 1.0 file
350420	string	#Inventor\040V2	Open Inventor 2.0 file
35043# GLF is OpenGL stream encoding
350440	string	glfHeadMagic();		GLF_TEXT
350454	belong	0x7d000000		GLF_BINARY_LSB_FIRST
35046!:strength -30
350474	belong	0x0000007d		GLF_BINARY_MSB_FIRST
35048!:strength -30
35049# GLS is OpenGL stream encoding; GLS is the successor of GLF
350500	string	glsBeginGLS(		GLS_TEXT
350514	belong	0x10000000		GLS_BINARY_LSB_FIRST
35052!:strength -30
350534	belong	0x00000010		GLS_BINARY_MSB_FIRST
35054!:strength -30
35055
35056# Performance Co-Pilot file types
350570	string	PmNs				PCP compiled namespace (V.0)
350580	string	PmN				PCP compiled namespace
35059>3	string	>\0				(V.%1.1s)
350603	belong	0x84500526			PCP archive
35061>7	byte	x				(V.%d)
35062>20	belong	-2				temporal index
35063>20	belong	-1				metadata
35064>20	belong	0				log volume #0
35065>20	belong	>0				log volume #%d
35066>24	string	>\0				host: %s
350673	belong	0x28500526			PCP archive
35068>7	byte	x				(V.%d)
35069>24	belong	-2				temporal index
35070>24	belong	-1				metadata
35071>24	belong	0				log volume #0
35072>24	belong	>0				log volume #%d
35073>36	string	>\0				host: %s
350740	string	PCPFolio			PCP
35075>9	string	Version:			Archive Folio
35076>18	string	>\0				(V.%s)
350770	string	#pmchart			PCP pmchart view
35078>9	string	Version
35079>17	string	>\0				(V%-3.3s)
350800	string	#kmchart			PCP pmchart view
35081>9	string	Version
35082>17	string	>\0				(V.%s)
350830	string	pmview				PCP pmview config
35084>7	string	Version
35085>15	string	>\0				(V%-3.3s)
350860	string	#pmlogger			PCP pmlogger config
35087>10	string	Version
35088>18	string	>\0				(V%1.1s)
350890	string	#pmdahotproc			PCP pmdahotproc config
35090>13	string	Version
35091>21	string	>\0				(V%-3.3s)
350920	string	PcPh				PCP Help
35093>4	string	1				Index
35094>4	string	2				Text
35095>5	string	>\0				(V.%1.1s)
350960	string	#pmieconf-rules			PCP pmieconf rules
35097>16	string	>\0				(V.%1.1s)
350983	string	pmieconf-pmie			PCP pmie config
35099>17	string	>\0				(V.%1.1s)
351000	string	#pmlogconf-setup		PCP pmlogconf config
35101>17	string	>\0				(V.%1.1s)
351021	string	pmlogconf			PCP pmlogger config
35103>11	string	>\0				(V.%1.1s)
351040	string	MMV				PCP memory mapped values
35105>4	long	x				(V.%d)
35106
35107# SpeedShop data files
351080	lelong	0x13130303			SpeedShop data file
35109
35110# mdbm files
351110	lelong	0x01023962			mdbm file, version 0 (obsolete)
351120	string	mdbm				mdbm file,
35113>5	byte	x				version %d,
35114>6	byte	x				2^%d pages,
35115>7	byte	x				pagesize 2^%d,
35116>17	byte	x				hash %d,
35117>11	byte	x				dataformat %d
35118
35119# Alias Maya files
351200	string/t	//Maya\040ASCII	Alias Maya Ascii File,
35121>13	string	>\0	version %s
351228	string	MAYAFOR4	Alias Maya Binary File,
35123>32	string	>\0	version %s scene
351248	string	MayaFOR4	Alias Maya Binary File,
35125>32	string	>\0	version %s scene
351268	string	CIMG		Alias Maya Image File
351278	string	DEEP		Alias Maya Image File
35128
35129#------------------------------------------------------------------------------
35130# $File: sgml,v 1.46 2022/08/16 11:16:39 christos Exp $
35131# Type:	SVG Vectorial Graphics
35132# From:	Noel Torres <tecnico@ejerciciosresueltos.com>
351330	string/bt	\<?xml\ version=
35134>14	regex		['"\ \t]*[0-9.]+['"\ \t]*
35135>>19	search/4096	\<svg			SVG Scalable Vector Graphics image
35136!:strength +50
35137!:mime	image/svg+xml
35138!:ext   svg
35139>>19	search/4096	\<gnc-v2		GnuCash file
35140!:mime	application/x-gnucash
351410	string/bt	\<svg			SVG Scalable Vector Graphics image
35142!:mime	image/svg+xml
35143!:ext   svg
35144
35145# Sitemap file
351460	string/t		\<?xml\ version=
35147>14	regex		['"\ \t]*[0-9.]+['"\ \t]*
35148>>19	search/4096	\<urlset		XML Sitemap document text
35149!:mime	application/xml-sitemap
35150
35151# OpenStreetMap XML (.osm)
35152# https://wiki.openstreetmap.org/wiki/OSM_XML
35153# From: Markus Heidelberg <markus.heidelberg@web.de>
351540	string		\<?xml\ version=
35155>14	regex		['"\ \t]*[0-9.]+['"\ \t]*
35156>>19	search/4096	\<osm			OpenStreetMap XML data
35157
35158# xhtml
351590	string/t		\<?xml\ version="
35160>19	search/4096/cWbt	\<!doctype\ html	XHTML document text
35161>>15	string		>\0	(version %.3s)
35162!:mime	text/html
351630	string/t		\<?xml\ version='
35164>19	search/4096/cWbt	\<!doctype\ html	XHTML document text
35165>>15	string		>\0	(version %.3s)
35166!:mime	text/html
351670	string/t		\<?xml\ version="
35168>19	search/4096/cWbt	\<html	broken XHTML document text
35169>>15	string		>\0	(version %.3s)
35170!:mime	text/html
35171
35172#------------------------------------------------------------------------------
35173# sgml:  file(1) magic for Standard Generalized Markup Language
35174# HyperText Markup Language (HTML) is an SGML document type,
35175# from Daniel Quinlan (quinlan@yggdrasil.com)
35176# adapted to string extensions by Anthon van der Neut <anthon@mnt.org)
351770	search/4096/cWt	\<!doctype\ html	HTML document text
35178!:mime	text/html
35179!:strength + 5
35180
35181# SVG document
35182# https://www.w3.org/TR/SVG/single-page.html
351830	search/4096/cWbt	\<!doctype\ svg	SVG XML document
35184!:mime  image/svg+xml
35185!:strength + 15
35186
351870	search/4096/cwt	\<head\>		HTML document text
35188!:mime	text/html
35189!:strength + 15
351900	search/4096/cWt	\<head\ 		HTML document text
35191!:mime	text/html
35192!:strength + 15
351930	search/4096/cwt	\<title\>		HTML document text
35194!:mime	text/html
35195!:strength + 15
351960	search/4096/cWt	\<title\ 		HTML document text
35197!:mime	text/html
35198!:strength + 15
351990	search/4096/cwt	\<html\>		HTML document text
35200!:mime	text/html
35201!:strength + 15
352020	search/4096/cWt	\<html\ 		HTML document text
35203!:mime	text/html
35204!:strength + 15
352050	search/4096/cwt	\<script\> 		HTML document text
35206!:mime	text/html
35207!:strength + 15
352080	search/4096/cWt	\<script\ 		HTML document text
35209!:mime	text/html
35210!:strength + 15
352110	search/4096/cwt	\<style\> 		HTML document text
35212!:mime	text/html
35213!:strength + 15
352140	search/4096/cWt	\<style\  		HTML document text
35215!:mime	text/html
35216!:strength + 15
352170	search/4096/cwt	\<table\>		HTML document text
35218!:mime	text/html
35219!:strength + 15
352200	search/4096/cWt	\<table\ 		HTML document text
35221!:mime	text/html
35222!:strength + 15
35223
352240	search/4096/cwt	\<a\ href=		HTML document text
35225!:mime	text/html
35226!:strength + 15
35227
35228# Extensible markup language (XML), a subset of SGML
35229# from Marc Prud'hommeaux (marc@apocalypse.org)
352300	search/1/cwt	\<?xml			XML document text
35231!:mime	text/xml
35232!:strength + 15
352330	string/t		\<?xml\ version\ "	XML
35234!:mime	text/xml
35235!:strength + 15
352360	string/t		\<?xml\ version="	XML
35237!:mime	text/xml
35238!:strength + 15
35239>15	string/t	>\0			%.3s document text
35240>>23	search/1	\<xsl:stylesheet	(XSL stylesheet)
35241>>24	search/1	\<xsl:stylesheet	(XSL stylesheet)
352420	string/t	\<?xml\ version='	XML
35243!:mime	text/xml
35244!:strength + 15
35245>15	string/t	>\0			%.3s document text
35246>>23	search/1	\<xsl:stylesheet	(XSL stylesheet)
35247>>24	search/1	\<xsl:stylesheet	(XSL stylesheet)
352480	search/1/wt	\<?XML			broken XML document text
35249!:mime	text/xml
35250!:strength - 10
35251
35252
35253# SGML, mostly from rph@sq
352540	search/4096/cwt	\<!doctype		exported SGML document text
352550	search/4096/cwt	\<!subdoc		exported SGML subdocument text
352560	search/4096/cwt	\<!--			exported SGML document text
35257!:strength - 10
35258
35259# Web browser cookie files
35260# (Mozilla, Galeon, Netscape 4, Konqueror..)
35261# Ulf Harnhammar <ulfh@update.uu.se>
352620	search/1	#\ HTTP\ Cookie\ File	Web browser cookie text
352630	search/1	#\ Netscape\ HTTP\ Cookie\ File	Netscape cookie text
352640	search/1	#\ KDE\ Cookie\ File	Konqueror cookie text
35265
35266# XML-based format representing braille pages in a digital format.
35267#
35268# Specification:
35269# http://files.pef-format.org/specifications/pef-2008-1/pef-specification.html
35270#
35271# Simon Aittamaa <simon.aittamaa@gmail.com>
352720	string		\<?xml\ version=
35273>14	regex		['"\ \t]*[0-9.]+['"\ \t]*
35274>>19    search/4096	\<pef           Portable Embosser Format
35275!:mime  application/x-pef+xml
35276
35277# https://www.qgis.org/en/site/
352780	string		\<!DOCTYPE\040qgis	QGIS XML document
35279
35280#------------------------------------------------------------------------
35281# $File: sharc,v 1.8 2017/03/17 21:35:28 christos Exp $
35282# file(1) magic for sharc files
35283#
35284# SHARC DSP, MIDI SysEx and RiscOS filetype definitions added by
35285# FutureGroove Music (dsp@futuregroove.de)
35286
35287#------------------------------------------------------------------------
35288#0	string			Draw		RiscOS Drawfile
35289#0	string			PACK		RiscOS PackdDir archive
35290
35291#------------------------------------------------------------------------
35292# SHARC DSP stuff (based on the FGM SHARC DSP SDK)
35293
35294#0	string			=!		Assembler source
35295#0	string			Analog		ADi asm listing file
352960	string			.SYSTEM		SHARC architecture file
352970	string			.system		SHARC architecture file
35298
352990	leshort			0x521C		SHARC COFF binary
35300>2	leshort			>1		, %d sections
35301>>12	lelong			>0		, not stripped
35302
35303#------------------------------------------------------------------------------
35304# $File: sinclair,v 1.7 2021/04/27 20:35:51 christos Exp $
35305# sinclair:  file(1) sinclair QL
35306
35307# additions to /etc/magic by Thomas M. Ott (ThMO)
35308
35309# Sinclair QL floppy disk formats (ThMO)
353100	string	=QL5		QL disk dump data,
35311>3	string	=A		720 KB,
35312>3	string	=B		1.44 MB,
35313>3	string	=C		3.2 MB,
35314>4	string	>\0		label:%.10s
35315
35316# Sinclair QL OS dump (ThMO)
353170		belong	=0x30000
35318>49124		belong	<47104
35319>>49128		belong	<47104
35320>>>49132	belong	<47104
35321>>>>49136	belong	<47104	QL OS dump data,
35322>>>>>49148	string	>\0	type %.3s,
35323>>>>>49142	string	>\0	version %.4s
35324
35325# Sinclair QL firmware executables (ThMO)
353260	string	NqNqNq`\004	QL firmware executable (BCPL)
35327
35328# Sinclair QL libraries (was ThMO)
353290	beshort	0xFB01		QDOS object
35330>2	pstring	x		'%s'
35331
35332# Sinclair QL executables (was ThMO)
353334	belong	0x4AFB		QDOS executable
35334>9	pstring	x		'%s'
353356	beshort	0x4AFB		QDOS executable
35336>9	pstring	x		'%s'
35337
35338# Sinclair QL ROM (ThMO)
353390	belong	=0x4AFB0001	QL plugin-ROM data,
35340>9	pstring	=\0		un-named
35341>9	pstring	>\0		named: %s
35342# Type: SiSU Markup Language
35343# URL:  http://www.sisudoc.org/
35344# From: Ralph Amissah <ralph.amissah@gmail.com>
35345
353460	regex	\^%?[\ \t]*SiSU[\ \t]+insert	SiSU text insert
35347>5	regex	[0-9.]+				%s
35348
353490	regex	\^%[\ \t]+SiSU[\ \t]+master	SiSU text master
35350>5	regex	[0-9.]+				%s
35351
353520	regex	\^%?[\ \t]*SiSU[\ \t]+text	SiSU text
35353>5	regex	[0-9.]+				%s
35354
353550	regex	\^%?[\ \t]*SiSU[\ \t][0-9.]+	SiSU text
35356>5	regex	[0-9.]+				%s
35357
353580	regex	\^%*[\ \t]*sisu-[0-9.]+		SiSU text
35359>5	regex	[0-9.]+				%s
35360
35361#------------------------------------------------------------------------------
35362# $File: sketch,v 1.5 2017/03/17 21:35:28 christos Exp $
35363# Sketch Drawings: http://sketch.sourceforge.net/
35364# From: Edwin Mons <e@ik.nu>
353650	search/1	##Sketch	Sketch document text
35366
35367#-----------------------------------------------
35368# $File: smalltalk,v 1.5 2009/09/19 16:28:12 christos Exp $
35369# GNU Smalltalk image, starting at version 1.6.2
35370# From: catull_us@yahoo.com
35371#
353720	string	GSTIm\0\0	GNU SmallTalk
35373# little-endian
35374>7	byte&1	=0		LE image version
35375>>10	byte	x		%d.
35376>>9	byte	x		\b%d.
35377>>8	byte	x		\b%d
35378#>>12	lelong	x		, data: %ld
35379#>>16	lelong	x		, table: %ld
35380#>>20	lelong	x		, memory: %ld
35381# big-endian
35382>7	byte&1	=1		BE image version
35383>>8	byte	x		%d.
35384>>9	byte	x		\b%d.
35385>>10	byte	x		\b%d
35386#>>12	belong	x		, data: %ld
35387#>>16	belong	x		, table: %ld
35388#>>20	belong	x		, memory: %ld
35389
35390
35391
35392#------------------------------------------------------------------------------
35393# $File: smile,v 1.1 2011/08/17 17:37:18 christos Exp $
35394# smile:  file(1) magic for Smile serialization
35395#
35396# The Smile serialization format uses a 4-byte header:
35397#
35398#   Constant byte #0: 0x3A (ASCII ':')
35399#   Constant byte #1: 0x29 (ASCII ')')
35400#   Constant byte #2: 0x0A (ASCII linefeed, '\n')
35401#   Variable byte #3, consisting of bits:
35402#     Bits 4-7 (4 MSB): 4-bit version number
35403#     Bits 3: Reserved
35404#     Bit 2 (mask 0x04): Whether raw binary (unescaped 8-bit) values may be present in content
35405#     Bit 1 (mask 0x02): Whether shared String value checking was enabled during encoding, default false
35406#     Bit 0 (mask 0x01): Whether shared property name checking was enabled during encoding, default true
35407#
35408# Reference: http://wiki.fasterxml.com/SmileFormatSpec
35409# Created by: Pierre-Alexandre Meyer <pierre@mouraf.org>
35410
35411# Detection
354120	string		:)\n	Smile binary data
35413
35414# Versioning
35415>3	byte&0xF0	x		version %d:
35416
35417# Properties
35418>3	byte&0x04	0x04		binary raw,
35419>3	byte&0x04	0x00		binary encoded,
35420>3	byte&0x02	0x02		shared String values enabled,
35421>3	byte&0x02	0x00		shared String values disabled,
35422>3	byte&0x01	0x01		shared field names enabled
35423>3	byte&0x01	0x00		shared field names disabled
35424
35425
35426#------------------------------------------------------------------------------
35427# $File: sniffer,v 1.32 2022/07/30 16:46:56 christos Exp $
35428# sniffer:  file(1) magic for packet capture files
35429#
35430# From: guy@alum.mit.edu (Guy Harris)
35431#
35432
35433#
35434# Microsoft Network Monitor 1.x capture files.
35435#
354360	string		RTSS		NetMon capture file
35437>5	byte		x		- version %d
35438>4	byte		x		\b.%d
35439>6	leshort		0		(Unknown)
35440>6	leshort		1		(Ethernet)
35441>6	leshort		2		(Token Ring)
35442>6	leshort		3		(FDDI)
35443>6	leshort		4		(ATM)
35444>6	leshort		>4		(type %d)
35445
35446#
35447# Microsoft Network Monitor 2.x capture files.
35448#
354490	string		GMBU		NetMon capture file
35450>5	byte		x		- version %d
35451>4	byte		x		\b.%d
35452>6	leshort		0		(Unknown)
35453>6	leshort		1		(Ethernet)
35454>6	leshort		2		(Token Ring)
35455>6	leshort		3		(FDDI)
35456>6	leshort		4		(ATM)
35457>6	leshort		5		(IP-over-IEEE 1394)
35458>6	leshort		6		(802.11)
35459>6	leshort		7		(Raw IP)
35460>6	leshort		8		(Raw IP)
35461>6	leshort		9		(Raw IP)
35462>6	leshort		>9		(type %d)
35463
35464#
35465# Network General Sniffer capture files.
35466# Sorry, make that "Network Associates Sniffer capture files."
35467# Sorry, make that "Network General old DOS Sniffer capture files."
35468#
354690	string		TRSNIFF\040data\040\040\040\040\032	Sniffer capture file
35470>33	byte		2		(compressed)
35471>23	leshort		x		- version %d
35472>25	leshort		x		\b.%d
35473>32	byte		0		(Token Ring)
35474>32	byte		1		(Ethernet)
35475>32	byte		2		(ARCNET)
35476>32	byte		3		(StarLAN)
35477>32	byte		4		(PC Network broadband)
35478>32	byte		5		(LocalTalk)
35479>32	byte		6		(Znet)
35480>32	byte		7		(Internetwork Analyzer)
35481>32	byte		9		(FDDI)
35482>32	byte		10		(ATM)
35483
35484#
35485# Cinco Networks NetXRay capture files.
35486# Sorry, make that "Network General Sniffer Basic capture files."
35487# Sorry, make that "Network Associates Sniffer Basic capture files."
35488# Sorry, make that "Network Associates Sniffer Basic, and Windows
35489# Sniffer Pro", capture files."
35490# Sorry, make that "Network General Sniffer capture files."
35491# Sorry, make that "NetScout Sniffer capture files."
35492#
354930	string		XCP\0		NetXRay capture file
35494>4	string		>\0		- version %s
35495>44	leshort		0		(Ethernet)
35496>44	leshort		1		(Token Ring)
35497>44	leshort		2		(FDDI)
35498>44	leshort		3		(WAN)
35499>44	leshort		8		(ATM)
35500>44	leshort		9		(802.11)
35501
35502#
35503# "libpcap" capture files.
35504# https://www.tcpdump.org/manpages/pcap-savefile.5.html
35505# (We call them "tcpdump capture file(s)" for now, as "tcpdump" is
35506# the main program that uses that format, but there are other programs
35507# that use "libpcap", or that use the same capture file format.)
35508#
355090	name		pcap-be
35510>4	beshort		x		- version %d
35511>6	beshort		x		\b.%d
35512# clear that continuation level match
35513>20	clear		x
35514>20	belong&0x03FFFFFF		0		(No link-layer encapsulation
35515>20	belong&0x03FFFFFF		1		(Ethernet
35516>20	belong&0x03FFFFFF		2		(3Mb Ethernet
35517>20	belong&0x03FFFFFF		3		(AX.25
35518>20	belong&0x03FFFFFF		4		(ProNET
35519>20	belong&0x03FFFFFF		5		(CHAOS
35520>20	belong&0x03FFFFFF		6		(Token Ring
35521>20	belong&0x03FFFFFF		7		(BSD ARCNET
35522>20	belong&0x03FFFFFF		8		(SLIP
35523>20	belong&0x03FFFFFF		9		(PPP
35524>20	belong&0x03FFFFFF		10		(FDDI
35525>20	belong&0x03FFFFFF		11		(RFC 1483 ATM
35526>20	belong&0x03FFFFFF		12		(Raw IP
35527>20	belong&0x03FFFFFF		13		(BSD/OS SLIP
35528>20	belong&0x03FFFFFF		14		(BSD/OS PPP
35529>20	belong&0x03FFFFFF		19		(Linux ATM Classical IP
35530>20	belong&0x03FFFFFF		50		(PPP or Cisco HDLC
35531>20	belong&0x03FFFFFF		51		(PPP-over-Ethernet
35532>20	belong&0x03FFFFFF		99		(Symantec Enterprise Firewall
35533>20	belong&0x03FFFFFF		100		(RFC 1483 ATM
35534>20	belong&0x03FFFFFF		101		(Raw IP
35535>20	belong&0x03FFFFFF		102		(BSD/OS SLIP
35536>20	belong&0x03FFFFFF		103		(BSD/OS PPP
35537>20	belong&0x03FFFFFF		104		(BSD/OS Cisco HDLC
35538>20	belong&0x03FFFFFF		105		(802.11
35539>20	belong&0x03FFFFFF		106		(Linux Classical IP over ATM
35540>20	belong&0x03FFFFFF		107		(Frame Relay
35541>20	belong&0x03FFFFFF		108		(OpenBSD loopback
35542>20	belong&0x03FFFFFF		109		(OpenBSD IPsec encrypted
35543>20	belong&0x03FFFFFF		112		(Cisco HDLC
35544>20	belong&0x03FFFFFF		113		(Linux cooked v1
35545>20	belong&0x03FFFFFF		114		(LocalTalk
35546>20	belong&0x03FFFFFF		117		(OpenBSD PFLOG
35547>20	belong&0x03FFFFFF		119		(802.11 with Prism header
35548>20	belong&0x03FFFFFF		122		(RFC 2625 IP over Fibre Channel
35549>20	belong&0x03FFFFFF		123		(SunATM
35550>20	belong&0x03FFFFFF		127		(802.11 with radiotap header
35551>20	belong&0x03FFFFFF		129		(Linux ARCNET
35552>20	belong&0x03FFFFFF		130		(Juniper Multi-Link PPP
35553>20	belong&0x03FFFFFF		131		(Juniper Multi-Link Frame Relay
35554>20	belong&0x03FFFFFF		132		(Juniper Encryption Services PIC
35555>20	belong&0x03FFFFFF		133		(Juniper GGSN PIC
35556>20	belong&0x03FFFFFF		134		(Juniper FRF.16 Frame Relay
35557>20	belong&0x03FFFFFF		135		(Juniper ATM2 PIC
35558>20	belong&0x03FFFFFF		136		(Juniper Advanced Services PIC
35559>20	belong&0x03FFFFFF		137		(Juniper ATM1 PIC
35560>20	belong&0x03FFFFFF		138		(Apple IP over IEEE 1394
35561>20	belong&0x03FFFFFF		139		(SS7 MTP2 with pseudo-header
35562>20	belong&0x03FFFFFF		140		(SS7 MTP2
35563>20	belong&0x03FFFFFF		141		(SS7 MTP3
35564>20	belong&0x03FFFFFF		142		(SS7 SCCP
35565>20	belong&0x03FFFFFF		143		(DOCSIS
35566>20	belong&0x03FFFFFF		144		(Linux IrDA
35567>20	belong&0x03FFFFFF		147		(Private use 0
35568>20	belong&0x03FFFFFF		148		(Private use 1
35569>20	belong&0x03FFFFFF		149		(Private use 2
35570>20	belong&0x03FFFFFF		150		(Private use 3
35571>20	belong&0x03FFFFFF		151		(Private use 4
35572>20	belong&0x03FFFFFF		152		(Private use 5
35573>20	belong&0x03FFFFFF		153		(Private use 6
35574>20	belong&0x03FFFFFF		154		(Private use 7
35575>20	belong&0x03FFFFFF		155		(Private use 8
35576>20	belong&0x03FFFFFF		156		(Private use 9
35577>20	belong&0x03FFFFFF		157		(Private use 10
35578>20	belong&0x03FFFFFF		158		(Private use 11
35579>20	belong&0x03FFFFFF		159		(Private use 12
35580>20	belong&0x03FFFFFF		160		(Private use 13
35581>20	belong&0x03FFFFFF		161		(Private use 14
35582>20	belong&0x03FFFFFF		162		(Private use 15
35583>20	belong&0x03FFFFFF		163		(802.11 with AVS header
35584>20	belong&0x03FFFFFF		164		(Juniper Passive Monitor PIC
35585>20	belong&0x03FFFFFF		165		(BACnet MS/TP
35586>20	belong&0x03FFFFFF		166		(PPPD
35587>20	belong&0x03FFFFFF		167		(Juniper PPPoE
35588>20	belong&0x03FFFFFF		168		(Juniper PPPoE/ATM
35589>20	belong&0x03FFFFFF		169		(GPRS LLC
35590>20	belong&0x03FFFFFF		170		(GPF-T
35591>20	belong&0x03FFFFFF		171		(GPF-F
35592>20	belong&0x03FFFFFF		174		(Juniper PIC Peer
35593>20	belong&0x03FFFFFF		175		(Ethernet with Endace ERF header
35594>20	belong&0x03FFFFFF		176		(Packet-over-SONET with Endace ERF header
35595>20	belong&0x03FFFFFF		177		(Linux LAPD
35596>20	belong&0x03FFFFFF		178		(Juniper Ethernet
35597>20	belong&0x03FFFFFF		179		(Juniper PPP
35598>20	belong&0x03FFFFFF		180		(Juniper Frame Relay
35599>20	belong&0x03FFFFFF		181		(Juniper C-HDLC
35600>20	belong&0x03FFFFFF		182		(FRF.16 Frame Relay
35601>20	belong&0x03FFFFFF		183		(Juniper Voice PIC
35602>20	belong&0x03FFFFFF		184		(Arinc 429
35603>20	belong&0x03FFFFFF		185		(Arinc 653 Interpartition Communication
35604>20	belong&0x03FFFFFF		186		(USB with FreeBSD header
35605>20	belong&0x03FFFFFF		187		(Bluetooth HCI H4
35606>20	belong&0x03FFFFFF		188		(802.16 MAC Common Part Sublayer
35607>20	belong&0x03FFFFFF		189		(Linux USB
35608>20	belong&0x03FFFFFF		190		(Controller Area Network (CAN) v. 2.0B
35609>20	belong&0x03FFFFFF		191		(802.15.4 with Linux padding
35610>20	belong&0x03FFFFFF		192		(PPI
35611>20	belong&0x03FFFFFF		193		(802.16 MAC Common Part Sublayer plus radiotap header
35612>20	belong&0x03FFFFFF		194		(Juniper Integrated Service Module
35613>20	belong&0x03FFFFFF		195		(802.15.4 with FCS
35614>20	belong&0x03FFFFFF		196		(SITA
35615>20	belong&0x03FFFFFF		197		(Endace ERF
35616>20	belong&0x03FFFFFF		198		(Ethernet with u10 Networks pseudo-header
35617>20	belong&0x03FFFFFF		199		(IPMB
35618>20	belong&0x03FFFFFF		200		(Juniper Secure Tunnel
35619>20	belong&0x03FFFFFF		201		(Bluetooth HCI H4 with pseudo-header
35620>20	belong&0x03FFFFFF		202		(AX.25 with KISS header
35621>20	belong&0x03FFFFFF		203		(LAPD
35622>20	belong&0x03FFFFFF		204		(PPP with direction pseudo-header
35623>20	belong&0x03FFFFFF		205		(Cisco HDLC with direction pseudo-header
35624>20	belong&0x03FFFFFF		206		(Frame Relay with direction pseudo-header
35625>20	belong&0x03FFFFFF		209		(Linux IPMB
35626>20	belong&0x03FFFFFF		215		(802.15.4 with non-ASK PHY header
35627>20	belong&0x03FFFFFF		216		(Linux evdev events
35628>20	belong&0x03FFFFFF		219		(MPLS with label as link-layer header
35629>20	belong&0x03FFFFFF		220		(Memory-mapped Linux USB
35630>20	belong&0x03FFFFFF		221		(DECT
35631>20	belong&0x03FFFFFF		222		(AOS Space Data Link protocol
35632>20	belong&0x03FFFFFF		223		(Wireless HART
35633>20	belong&0x03FFFFFF		224		(Fibre Channel FC-2
35634>20	belong&0x03FFFFFF		225		(Fibre Channel FC-2 with frame delimiters
35635>20	belong&0x03FFFFFF		226		(Solaris IPNET
35636>20	belong&0x03FFFFFF		227		(SocketCAN
35637>20	belong&0x03FFFFFF		228		(Raw IPv4
35638>20	belong&0x03FFFFFF		229		(Raw IPv6
35639>20	belong&0x03FFFFFF		230		(802.15.4 without FCS
35640>20	belong&0x03FFFFFF		231		(D-Bus messages
35641>20	belong&0x03FFFFFF		232		(Juniper Virtual Server
35642>20	belong&0x03FFFFFF		233		(Juniper SRX E2E
35643>20	belong&0x03FFFFFF		234		(Juniper Fibre Channel
35644>20	belong&0x03FFFFFF		235		(DVB-CI
35645>20	belong&0x03FFFFFF		236		(MUX27010
35646>20	belong&0x03FFFFFF		237		(STANAG 5066 D_PDUs
35647>20	belong&0x03FFFFFF		238		(Juniper ATM CEMIC
35648>20	belong&0x03FFFFFF		239		(Linux netfilter log messages
35649>20	belong&0x03FFFFFF		240		(Hilscher netAnalyzer
35650>20	belong&0x03FFFFFF		241		(Hilscher netAnalyzer with delimiters
35651>20	belong&0x03FFFFFF		242		(IP-over-Infiniband
35652>20	belong&0x03FFFFFF		243		(MPEG-2 Transport Stream packets
35653>20	belong&0x03FFFFFF		244		(ng4t ng40
35654>20	belong&0x03FFFFFF		245		(NFC LLCP
35655>20	belong&0x03FFFFFF		246		(Packet filter state syncing
35656>20	belong&0x03FFFFFF		247		(InfiniBand
35657>20	belong&0x03FFFFFF		248		(SCTP
35658>20	belong&0x03FFFFFF		249		(USB with USBPcap header
35659>20	belong&0x03FFFFFF		250		(Schweitzer Engineering Laboratories RTAC packets
35660>20	belong&0x03FFFFFF		251		(Bluetooth Low Energy air interface
35661>20	belong&0x03FFFFFF		252		(Wireshark Upper PDU export
35662>20	belong&0x03FFFFFF		253		(Linux netlink
35663>20	belong&0x03FFFFFF		254		(Bluetooth Linux Monitor
35664>20	belong&0x03FFFFFF		255		(Bluetooth Basic Rate/Enhanced Data Rate baseband packets
35665>20	belong&0x03FFFFFF		256		(Bluetooth Low Energy air interface with pseudo-header
35666>20	belong&0x03FFFFFF		257		(PROFIBUS data link layer
35667>20	belong&0x03FFFFFF		258		(Apple DLT_PKTAP
35668>20	belong&0x03FFFFFF		259		(Ethernet with 802.3 Clause 65 EPON preamble
35669>20	belong&0x03FFFFFF		260		(IPMI trace packets
35670>20	belong&0x03FFFFFF		261		(Z-Wave RF profile R1 and R2 packets
35671>20	belong&0x03FFFFFF		262		(Z-Wave RF profile R3 packets
35672>20	belong&0x03FFFFFF		263		(WattStopper Digital Lighting Mngmt/Legrand Nitoo Open Proto
35673>20	belong&0x03FFFFFF		264		(ISO 14443 messages
35674>20	belong&0x03FFFFFF		265		(IEC 62106 Radio Data System groups
35675>20	belong&0x03FFFFFF		266		(USB with Darwin header
35676>20	belong&0x03FFFFFF		267		(OpenBSD DLT_OPENFLOW
35677>20	belong&0x03FFFFFF		268		(IBM SDLC frames
35678>20	belong&0x03FFFFFF		269		(TI LLN sniffer frames
35679>20	belong&0x03FFFFFF		271		(Linux vsock
35680>20	belong&0x03FFFFFF		272		(Nordic Semiconductor Bluetooth LE sniffer frames
35681>20	belong&0x03FFFFFF		273		(Excentis XRA-31 DOCSIS 3.1 RF sniffer frames
35682>20	belong&0x03FFFFFF		274		(802.3br mPackets
35683>20	belong&0x03FFFFFF		275		(DisplayPort AUX channel monitoring data
35684>20	belong&0x03FFFFFF		276		(Linux cooked v2
35685>20	belong&0x03FFFFFF		278		(OpenVizsla USB
35686>20	belong&0x03FFFFFF		279		(Elektrobit High Speed Capture and Replay (EBHSCR)
35687>20	belong&0x03FFFFFF		281		(Broadcom tag
35688>20	belong&0x03FFFFFF		282		(Broadcom tag (prepended)
35689>20	belong&0x03FFFFFF		283		(802.15.4 with TAP
35690>20	belong&0x03FFFFFF		284		(Marvell DSA
35691>20	belong&0x03FFFFFF		285		(Marvell EDSA
35692>20	belong&0x03FFFFFF		286		(ELEE lawful intercept
35693>20	belong&0x03FFFFFF		287		(Z-Wave serial
35694>20	belong&0x03FFFFFF		288		(USB 2.0
35695>20	belong&0x03FFFFFF		289		(ATSC ALP
35696>20	belong&0x03FFFFFF		290		(Event Tracing for Windows
35697>20	belong&0x03FFFFFF		291		(Hilscher netANALYZER NG pseudo-footer
35698>20	belong&0x03FFFFFF		292		(ZBOSS NCP protocol with pseudo-header
35699>20	belong&0x03FFFFFF		293		(Low-Speed USB 2.0/1.1/1.0
35700>20	belong&0x03FFFFFF		294		(Full-Speed USB 2.0/1.1/1.0
35701>20	belong&0x03FFFFFF		295		(High-Speed USB 2.0
35702# print default match
35703>20	default		x
35704>>20	belong		x		(linktype#%u
35705>16	belong		x		\b, capture length %u)
35706
35707# packets time stamps in seconds and microseconds.
357080	ubelong		0xa1b2c3d4	pcap capture file, microseconds ts (big-endian)
35709!:mime	application/vnd.tcpdump.pcap
35710>0	use	pcap-be
357110	ulelong		0xa1b2c3d4	pcap capture file, microsecond ts (little-endian)
35712!:mime	application/vnd.tcpdump.pcap
35713>0	use	\^pcap-be
35714
35715# packets time stamps in seconds and nanoseconds.
357160	ubelong		0xa1b23c4d	pcap capture file, nanosecond ts (big-endian)
35717!:mime	application/vnd.tcpdump.pcap
35718>0	use	pcap-be
357190	ulelong		0xa1b23c4d	pcap capture file, nanosecond ts (little-endian)
35720!:mime	application/vnd.tcpdump.pcap
35721>0	use	\^pcap-be
35722
35723#
35724# "libpcap"-with-Alexey-Kuznetsov's-patches capture files.
35725#
357260	ubelong		0xa1b2cd34	pcap capture file, microsecond ts, extensions (big-endian)
35727>0	use	pcap-be
357280	ulelong		0xa1b2cd34	pcap capture file, microsecond ts, extensions (little-endian)
35729>0	use	\^pcap-be
35730
35731#
35732# "pcapng" capture files.
35733# https://github.com/pcapng/pcapng
35734# Pcapng files can contain multiple sections. Printing the endianness,
35735# snaplen, or other information from the first SHB may be misleading.
35736#
357370	ubelong		0x0a0d0d0a
35738>8	ubelong		0x1a2b3c4d	pcapng capture file
35739>>12	beshort		x		- version %d
35740>>14	beshort		x		\b.%d
357410	ulelong		0x0a0d0d0a
35742>8	ulelong		0x1a2b3c4d	pcapng capture file
35743>>12	leshort		x		- version %d
35744>>14	leshort		x		\b.%d
35745
35746#
35747# AIX "iptrace" capture files.
35748#
357490	string		iptrace\0401.0	AIX iptrace capture file
357500	string		iptrace\0402.0	AIX iptrace capture file
35751
35752#
35753# Novell LANalyzer capture files.
35754#
357550	leshort		0x1001		Novell LANalyzer capture file
357560	leshort		0x1007		Novell LANalyzer capture file
35757
35758#
35759# HP-UX "nettl" capture files.
35760#
357610	string		\x54\x52\x00\x64\x00	HP/UX nettl capture file
35762
35763#
35764# RADCOM WAN/LAN Analyzer capture files.
35765#
357660	string		\x42\xd2\x00\x34\x12\x66\x22\x88	RADCOM WAN/LAN Analyzer capture file
35767
35768#
35769# NetStumbler log files.  Not really packets, per se, but about as
35770# close as you can get.  These are log files from NetStumbler, a
35771# Windows program, that scans for 802.11b networks.
35772#
357730	string		NetS		NetStumbler log file
35774>8	lelong		x		\b, %d stations found
35775
35776#
35777# *Peek tagged capture files.
35778#
357790	string		\177ver		EtherPeek/AiroPeek/OmniPeek capture file
35780
35781#
35782# Visual Networks traffic capture files.
35783#
357840	string		\x05VNF		Visual Networks traffic capture file
35785
35786#
35787# Network Instruments Observer capture files.
35788#
357890	string		ObserverPktBuffe	Network Instruments Observer capture file
35790
35791#
35792# Files from Accellent Group's 5View products.
35793#
35794# URL:		http://www.infovista.com
35795# Reference:	http://mark0.net/download/triddefs_xml.7z
35796#		defs/0/5vw.trid.xml
35797#		https://2.na.dl.wireshark.org/src/wireshark-3.6.2.tar.xz
35798#		wireshark-3.6.2/wiretap/5views.c
35799# Update:	Joerg Jenderek
35800# Note:		called "5View capture" by TrID and
35801#		"Wireshark capture file" on Windows or
35802#		"Packet Capture (Accellent/InfoVista 5view)" by shared MIME-info database
35803#		verified/falsified by `wireshark *.5vw`
358040	string		\xaa\xaa\xaa\xaa
35805# skip misidentified boot/x86_64/loader/kroete.dat on Suse LEAP DVD
35806# by check for valid record version
35807>8	ulelong		=0x00010000
35808>>0	use	5view-le
358090	name	5view-le
35810# t_5VW_Info_Header.Signature = CST_5VW_INFO_HEADER_KEY = 0xAAAAAAAAU
35811>0	ulelong		x			5View capture file
35812# https://reposcope.com/mimetype/application/x-5view
35813!:mime	application/x-5view
35814!:ext	5vw
35815# size of header in bytes (included signature and reserved fields); probably always 20h
35816>4	ulelong		!0x00000020		\b, header size %#x
35817# version of header record; apparently always CST_5VW_INFO_RECORD_VERSION=0x00010000U
35818>8	ulelong		!0x00010000		\b, record version %#x
35819# DataSize; total size of data without header like: 18h
35820>12	ulelong		x			\b, record size %#x
35821# filetype; type of the capture file like: 18001000h
35822>16	ulelong		x			\b, file type %#8.8x
35823# Reserved[3]; reserved for future use; apparently zero
35824>20	quad		!0			\b, Reserved %#llx
35825# look for record header key CST_5VW_RECORDS_HEADER_KEY of structure t_5VW_TimeStamped_Header
35826>0x20	search/0xB8/b	\xEE\xEE\x33\x33	\b; record
35827# HeaderSize; actual size of this header in bytes like: 32 24h
35828>>&0	uleshort	x			size %#x
35829# HeaderType; exact type of this header; probably always 0x4000
35830>>&2	uleshort	!0x4000			\b, header type %#x
35831# RecType; type of record like: 80000000h
35832>>&4	ulelong		x			\b, record type %#x
35833# RecSubType; subtype of record like: 0
35834>>&8	ulelong		!0			\b, subtype %#x
35835# RecSize; Size of one record like: 5Ch
35836>>&12	ulelong		x			\b, RecSize %#x
35837# RecNb; Number of records like: 1
35838>>&16	ulelong		>1			\b, %#x records
35839# Timestamp Utc
35840#>>&20	ulelong		x			\b, RAW TIME %#8.8x
35841>>&20	date		x			\b, Time-stamp %s
35842
35843#------------------------------------------------------------------------------
35844# $File: softquad,v 1.13 2009/09/19 16:28:12 christos Exp $
35845# softquad:  file(1) magic for SoftQuad Publishing Software
35846#
35847# Author/Editor and RulesBuilder
35848#
35849# XXX - byte order?
35850#
358510	string		\<!SQ\ DTD>	Compiled SGML rules file
35852>9	string		>\0		 Type %s
358530	string		\<!SQ\ A/E>	A/E SGML Document binary
35854>9	string		>\0		 Type %s
358550	string		\<!SQ\ STS>	A/E SGML binary styles file
35856>9	string		>\0		 Type %s
358570	short		0xc0de		Compiled PSI (v1) data
358580	short		0xc0da		Compiled PSI (v2) data
35859>3	string		>\0		(%s)
35860# Binary sqtroff font/desc files...
358610	short		0125252		SoftQuad DESC or font file binary
35862>2	short		>0		- version %d
35863# Bitmaps...
358640	search/1	SQ\ BITMAP1	SoftQuad Raster Format text
35865#0	string		SQ\ BITMAP2	SoftQuad Raster Format data
35866# sqtroff intermediate language (replacement for ditroff int. lang.)
358670	string		X\ 		SoftQuad troff Context intermediate
35868>2	string		495		for AT&T 495 laser printer
35869>2	string		hp		for Hewlett-Packard LaserJet
35870>2	string		impr		for IMAGEN imPRESS
35871>2	string		ps		for PostScript
35872
35873# From: Michael Piefel <piefel@debian.org>
35874# sqtroff intermediate language (replacement for ditroff int. lang.)
358750	string		X\ 495		SoftQuad troff Context intermediate for AT&T 495 laser printer
358760	string		X\ hp		SoftQuad troff Context intermediate for HP LaserJet
358770	string		X\ impr		SoftQuad troff Context intermediate for IMAGEN imPRESS
358780	string		X\ ps		SoftQuad troff Context intermediate for PostScript
35879
35880#------------------------------------------------------------------------------
35881# $File: sosi,v 1.2 2021/02/23 00:51:10 christos Exp $
35882# SOSI
35883# Summary: Systematic Organization of Spatial Information
35884# Long description: Norwegian text based map format
35885# File extension: .sos
35886# Full name:    Petter Reinholdtsen (pere@hungry.com)
35887# Reference: https://en.wikipedia.org/wiki/SOSI
35888#
35889# Example SOSI files available from
35890# https://trac.osgeo.org/gdal/ticket/3638
35891# https://nedlasting.geonorge.no/geonorge/Basisdata/N50Kartdata/SOSI/
35892# https://nedlasting.geonorge.no/geonorge/Samferdsel/Elveg/SOSI/
35893#
35894# Start with optional comments (from "!" to the next line end)
35895# followed by ".HODE" and end with "\n.SLUTT" followed by an optional
35896# separator (any number of " ", "\t", "\n" or "\r"), might have BOM at
35897# the start and following ".HODE" near the start there is "..OMR=C3=85DE"
35898# (either UTF-8, ISO-8859-1 or some 7 bit Norwegian charset based on
35899# ASCII) , "..TRANSPAR", "..TEGNSETT " followed by the charset and a
35900# separator, as well as "..SOSI-VERSJON " followed by the format
35901# version and a separator.
35902#
35903# FIXME figure out how to accept any of [space], [tab], [newline] and
35904# [carriage return] as separators, not only line end.
35905
35906# Not searching for full "OMR=C3=85DE" to match also for non-UTF-8
35907# character sets
359080	search	..OMR
35909>0	search	..TRANSPAR
35910>>0       search  .HODE           SOSI map data
35911>>>&0      search  ..SOSI-VERSJON
35912>>>>&1	string	x		\b, version %s
35913# FIXME could not figure out way to make a match for .SLUTT at the end required
35914#>-7      string  \n.SLUTT	slutt
35915#>-8      string  \n.SLUTT\n	slutt-nl
35916#>-9      string  \n.SLUTT\r\n	slutt-crnl2
35917!:mime text/vnd.sosi
35918!:ext sos
35919
35920#------------------------------------------------------------------------------
35921# $File: spec,v 1.4 2009/09/19 16:28:12 christos Exp $
35922# spec:  file(1) magic for SPEC raw results (*.raw, *.rsf)
35923#
35924# Cloyce D. Spradling <cloyce@headgear.org>
35925
359260	string	spec			SPEC
35927>4	string	.cpu			CPU
35928>>8	string	<:			\b%.4s
35929>>12	string	.			raw result text
35930
3593117	string	version=SPECjbb		SPECjbb
35932>32	string	<:			\b%.4s
35933>>37	string	<:			v%.4s raw result text
35934
359350	string	BEGIN\040SPECWEB	SPECweb
35936>13	string	<:			\b%.2s
35937>>15	string	_SSL			\b_SSL
35938>>>20	string	<:			v%.4s raw result text
35939>>16	string	<:			v%.4s raw result text
35940
35941#------------------------------------------------------------------------------
35942# $File: spectrum,v 1.9 2021/04/26 15:56:00 christos Exp $
35943# spectrum:  file(1) magic for Spectrum emulator files.
35944#
35945# John Elliott <jce@seasip.demon.co.uk>
35946
35947#
35948# Spectrum +3DOS header
35949#
359500       string          PLUS3DOS\032    Spectrum +3 data
35951>15     byte            0               - BASIC program
35952>15     byte            1               - number array
35953>15     byte            2               - character array
35954>15     byte            3               - memory block
35955>>16    belong          0x001B0040      (screen)
35956>15     byte            4               - Tasword document
35957>15     string          TAPEFILE        - ZXT tapefile
35958#
35959# Tape file. This assumes the .TAP starts with a Spectrum-format header,
35960# which nearly all will.
35961#
35962# Update: Sanity-check string contents to be printable.
35963#  -Adam Buchbinder <adam.buchbinder@gmail.com>
35964#
359650       string          \023\000\000
35966>4      string          >\0
35967>>4     string          <\177           Spectrum .TAP data "%-10.10s"
35968>>>3    byte            0               - BASIC program
35969>>>3    byte            1               - number array
35970>>>3    byte            2               - character array
35971>>>3    byte            3               - memory block
35972>>>>14  belong          0x001B0040      (screen)
35973
35974# The following three blocks are from pak21-spectrum@srcf.ucam.org
35975# TZX tape images
359760      string          ZXTape!\x1a     Spectrum .TZX data
35977>8     byte            x               version %d
35978>9     byte            x               \b.%d
35979
35980# RZX input recording files
359810      string          RZX!            Spectrum .RZX data
35982>4     byte            x               version %d
35983>5     byte            x               \b.%d
35984
35985# Floppy disk images
359860      string          MV\ -\ CPCEMU\ Disk-Fil Amstrad/Spectrum .DSK data
359870      string          MV\ -\ CPC\ format\ Dis Amstrad/Spectrum DU54 .DSK data
359880      string          EXTENDED\ CPC\ DSK\ Fil Amstrad/Spectrum Extended .DSK data
359890      string          SINCLAIR        Spectrum .SCL Betadisk image
35990
35991# Hard disk images
359920      string          RS-IDE\x1a      Spectrum .HDF hard disk image
35993>7     byte            x               \b, version %#02x
35994
35995# SZX snapshots (fuse and spectaculator)
35996# Martin M. S. Pedersen <martin@linux.com>
35997# http://www.spectaculator.com/docs/zx-state/header.shtml
35998#
359990      string		ZXST	       zx-state snapshot
36000>4     byte		x	       version %d
36001>5     byte		x	       \b.%d
36002>>6    byte		0	       16k ZX Spectrum
36003>>6    byte		1	       48k ZX Spectrum/ZX Spectrum+
36004>>6    byte		2	       ZX Spectrum 128
36005>>6    byte		3	       ZX Spectrum +2
36006>>6    byte		4	       ZX Spectrum +2A/+2B
36007>>6    byte		5	       ZX Spectrum +3
36008>>6    byte		6	       ZX Spectrum +3e
36009>>6    byte		7	       Pentagon 128
36010>>6    byte		8	       Timex Sinclair TC2048
36011>>6    byte		9	       Timex Sinclair TC2068
36012>>6    byte	       10	       Scorpion ZS-256
36013>>6    byte	       11	       ZX Spectrum SE
36014>>6    byte	       12	       Timex Sinclair TS2068
36015>>6    byte	       13	       Pentagon 512
36016>>6    byte	       14	       Pentagon 1024
36017>>6    byte	       15	       48k ZX Spectrum (NTSC)
36018>>6    byte	       16	       ZX Spectrum 12Ke
36019>>>7   byte		1	       (alternate timings)
36020
36021#------------------------------------------------------------------------------
36022# $File: sql,v 1.24 2022/07/17 15:32:48 christos Exp $
36023# sql:  file(1) magic for SQL files
36024#
36025# From: "Marty Leisner" <mleisner@eng.mc.xerox.com>
36026# Recognize some MySQL files.
36027# Elan Ruusamae <glen@delfi.ee>, added MariaDB signatures
36028# from https://bazaar.launchpad.net/~maria-captains/maria/5.5/view/head:/support-files/magic
36029#
360300	beshort			0xfe01		MySQL table definition file
36031>2	byte			x		Version %d
36032>3	byte			0		\b, type UNKNOWN
36033>3	byte			1		\b, type DIAM_ISAM
36034>3	byte			2		\b, type HASH
36035>3	byte			3		\b, type MISAM
36036>3	byte			4		\b, type PISAM
36037>3	byte			5		\b, type RMS_ISAM
36038>3	byte			6		\b, type HEAP
36039>3	byte			7		\b, type ISAM
36040>3	byte			8		\b, type MRG_ISAM
36041>3	byte			9		\b, type MYISAM
36042>3	byte			10		\b, type MRG_MYISAM
36043>3	byte			11		\b, type BERKELEY_DB
36044>3	byte			12		\b, type INNODB
36045>3	byte			13		\b, type GEMINI
36046>3	byte			14		\b, type NDBCLUSTER
36047>3	byte			15		\b, type EXAMPLE_DB
36048>3	byte			16		\b, type CSV_DB
36049>3	byte			17		\b, type FEDERATED_DB
36050>3	byte			18		\b, type BLACKHOLE_DB
36051>3	byte			19		\b, type PARTITION_DB
36052>3	byte			20		\b, type BINLOG
36053>3	byte			21		\b, type SOLID
36054>3	byte			22		\b, type PBXT
36055>3	byte			23		\b, type TABLE_FUNCTION
36056>3	byte			24		\b, type MEMCACHE
36057>3	byte			25		\b, type FALCON
36058>3	byte			26		\b, type MARIA
36059>3	byte			27		\b, type PERFORMANCE_SCHEMA
36060>3	byte			127		\b, type DEFAULT
36061>0x0033	ulong			x		\b, MySQL version %d
360620	belong&0xffffff00	0xfefe0500	MySQL ISAM index file
36063>3	byte			x		Version %d
360640	belong&0xffffff00	0xfefe0600	MySQL ISAM compressed data file
36065>3	byte			x		Version %d
360660	belong&0xffffff00	0xfefe0700	MySQL MyISAM index file
36067>3	byte			x		Version %d
36068>14	beshort			x		\b, %d key parts
36069>16	beshort			x		\b, %d unique key parts
36070>18	byte			x		\b, %d keys
36071>28	bequad			x		\b, %lld records
36072>36	bequad			x		\b, %lld deleted records
360730	belong&0xffffff00	0xfefe0800	MySQL MyISAM compressed data file
36074>3	byte			x		Version %d
360750	belong&0xffffff00	0xfefe0900	MySQL Maria index file
36076>3	byte			x		Version %d
360770	belong&0xffffff00	0xfefe0a00	MySQL Maria compressed data file
36078>3	byte			x		Version %d
360790	belong&0xffffff00	0xfefe0c00
36080>4	string			MACF		MySQL Maria control file
36081>>3	byte			x		Version %d
360820	string			\376bin	MySQL replication log,
36083>9	long			x		server id %d
36084>8	byte			1
36085>>13	long			69		\b, MySQL V3.2.3
36086>>>19	string			x		\b, server version %s
36087>>13	long			75		\b, MySQL V4.0.2-V4.1
36088>>>25	string			x		\b, server version %s
36089>8	byte			15		MySQL V5+,
36090>>25	string			x		server version %s
36091>4	string			MARIALOG	MySQL Maria transaction log file
36092>>3	byte			x		Version %d
36093
36094#------------------------------------------------------------------------------
36095# iRiver H Series database file
36096# From Ken Guest <ken@linux.ie>
36097# As observed from iRivNavi.iDB and unencoded firmware
36098#
360990   string		iRivDB	iRiver Database file
36100>11  string	>\0	Version %s
36101>39  string		iHP-100	[H Series]
36102
36103#------------------------------------------------------------------------------
36104# SQLite database files
36105# Ken Guest <ken@linux.ie>, Ty Sarna, Zack Weinberg
36106#
36107# Version 1 used GDBM internally; its files cannot be distinguished
36108# from other GDBM files.
36109#
36110# Version 2 used this format:
361110	string	**\ This\ file\ contains\ an\ SQLite  SQLite 2.x database
36112
36113# URL:		https://en.wikipedia.org/wiki/SQLite
36114# Reference:	https://www.sqlite.org/fileformat.html
36115# Update:	Joerg Jenderek
36116# Version 3 of SQLite allows applications to embed their own "user version"
36117# number in the database at offset 60.  Later, SQLite added an "application id"
36118# at offset 68 that is preferred over "user version" for indicating the
36119# associated application.
36120#
361210   string  SQLite\ format\ 3
36122# skip DROID fmt-729-signature-id-1053.sqlite by checking for valid page size
36123>16 ubeshort >0                 SQLite 3.x
36124# deprecated
36125#!:mime	application/x-sqlite3
36126!:mime	application/vnd.sqlite3
36127# seldom found extension sqlite3 like in SyncData.sqlite3
36128# db
36129# db3 like: AddrBook.db3 cgipcrvp.db3
36130# https://www.maplesoft.com/support/help/Maple/view.aspx?path=worksheet%2freference%2fhelpdatabase
36131# help is used for newer Maple help database
36132# SQLite database weewx.sdb used by weather software weewx
36133# https://www.weewx.com/docs/usersguide.htm
36134# Avira Antivir use extension "dbe" like in avevtdb.dbe, avguard_tchk.dbe
36135# Unfortunately extension sqlite also used for other databases starting with string
36136# "TTCONTAINER" like in tracks.sqlite contentconsumer.sqlite contentproducerrepository.sqlite
36137# and with string "ZV-zlib" in like extra.sqlite
36138>>68 belong !0x5CDE09EF	database
36139!:ext sqlite/sqlite3/db/db3/dbe/sdb/help
36140>>68 belong =0x5CDE09EF  database
36141# maple is used for Maple Workbook
36142!:ext maple
36143>>60 belong =0x5f4d544e  (Monotone source repository)
36144# if no known user version then check for Application IDs with default clause
36145>>60 belong !0x5f4d544e
36146# The "Application ID" set by PRAGMA application_id
36147>>>68 belong =0x0f055112 (Fossil checkout)
36148>>>68 belong =0x0f055113 (Fossil global configuration)
36149>>>68 belong =0x0f055111 (Fossil repository)
36150>>>68 belong =0x42654462 (Bentley Systems BeSQLite Database)
36151>>>68 belong =0x42654c6e (Bentley Systems Localization File)
36152>>>68 belong =0x47504b47 (OGC GeoPackage file)
36153#	https://www.sqlite.org/src/artifact?ci=trunk&filename=magic.txt
36154>>>68 belong =0x47503130 (OGC GeoPackage version 1.0 file)
36155>>>68 belong =0x45737269 (Esri Spatially-Enabled Database)
36156>>>68 belong =0x4d504258 (MBTiles tileset)
36157#	https://www.maplesoft.com/support/help/errors/view.aspx?path=Formats/Maple
36158>>>68 belong =0x5CDE09EF (Maple Workbook)
36159# unknown application ID
36160>>>68 default x
36161>>>>68 belong !0         \b, application id %u
36162# The "user version" as read and set by the user_version pragma like:
36163# 1 2 4 5 7 9 10 25 36 43 53 400 416 131073 131074 131075
36164>>60 belong !0          \b, user version %d
36165# SQLITE_VERSION_NUMBER like: 0 3008011 3016002 3007014 3017000 3022000 3028000 3031001
36166>>96 belong  x           \b, last written using SQLite version %d
36167# database page size in bytes; a power of two between 512 and 32768, or 1 for 65536
36168# like: 512 1024 often 4096 32768
36169>>16 ubeshort !4096      \b, page size %u
36170# File format write version. 1 for legacy; 2 for WAL; 0 for corruptDB.sqlite
36171>>18 ubyte   !1          \b, writer version %u
36172# File format read version. 1 for legacy; 2 for WAL; 4 for corruptDB.sqlite
36173>>19 ubyte   !1          \b, read version %u
36174# Bytes of unused "reserved" space at the end of each page. Usually 0
36175>>20 ubyte   !0          \b, unused bytes %u
36176# maximum embedded payload fraction. Must be 64; 1 for corruptDB.sqlite
36177>>21 ubyte   !64         \b, maximum payload %u
36178# Minimum embedded payload fraction. Must be 32; 1 for corruptDB.sqlite
36179>>22 ubyte   !32         \b, minimum payload %u
36180# Leaf payload fraction. Must be 32; 0 for corruptDB.sqlite
36181>>23 ubyte   !32         \b, leaf payload %u
36182# file change counter
36183>>24 ubelong x           \b, file counter %u
36184# Size of the database file in pages
36185>>28 ubelong x           \b, database pages %u
36186# page number of the first freelist trunk page like: 0 2 3 4 5 9
36187# 10 13 14 15 16 17 18 19 23 36 39 46 50 136 190 217 307 505 516 561 883 1659
36188>>32 ubelong !0          \b, 1st free page %u
36189# total number of freelist pages
36190>>36 ubelong !0          \b, free pages %u
36191# The schema cookie like: 2 3 4 6 7 9 A D E F 13 14 1C 25 2A 2F 33 44 4B 53 5A 5F 62 86 87 8F 91 A8
36192>>40 ubelong x           \b, cookie %#x
36193# the schema format number. Supported formats are 1 2 3 and often 4
36194# 3328 for corruptDB.sqlite and 0 for 512 byte storage.sqlite (TorBrowser Firefox Thunderbird)
36195>>44 ubelong x           \b, schema %u
36196# Suggested cache size  like: 0 2000
36197>>48 ubelong !0          \b, cache page size %u
36198# The page number of the largest root b-tree page when in auto-vacuum or incremental-vacuum modes, or zero otherwise.
36199>>52 ubelong !0          \b, largest root page %u
36200# The database text encoding; a value of 1 means UTF-8; 2 means UTF-16le; 3 means UTF-16be
36201#>>56 ubelong x           \b, encoding %u
36202>>56 ubelong x
36203>>>56 ubelong =1         \b, UTF-8
36204>>>56 ubelong =2         \b, UTF-16 little endian
36205>>>56 ubelong =3         \b, UTF-16 big endian
36206# 0 for corruptDB.sqlite and for storage.sqlite with database pages 1 (TorBrowser Firefox Thunderbird)
36207# https://mozilla.github.io/firefox-browser-architecture/text/0010-firefox-data-stores.html
36208>>>56 default x
36209>>>>56 ubelong x         \b, unknown %#x encoding
36210# True (non-zero) for incremental-vacuum mode; false (zero) otherwiseqy
36211>>64 ubelong !0           \b, vacuum mode %u
36212# Reserved for expansion. Must be zero
36213>>72 uquad !0             \b, reserved %#llx
36214# The version-valid-for number like:
36215# 1 2 3 4 C F 68h 95h 266h A99h 3DCDh B7CEh
36216>>92 ubelong x            \b, version-valid-for %u
36217
36218# SQLite Write-Ahead Log from SQLite version >= 3.7.0
36219# https://www.sqlite.org/fileformat.html#walformat
362200	belong&0xfffffffe	0x377f0682	SQLite Write-Ahead Log,
36221!:ext sqlite-wal/db-wal
36222>4	belong	x	version %d
36223
36224# SQLite Rollback Journal
36225# https://www.sqlite.org/fileformat.html#rollbackjournal
362260	string	\xd9\xd5\x05\xf9\x20\xa1\x63\xd7	SQLite Rollback Journal
36227
36228# Panasonic channel list database svl.bin or svl.db added by Joerg Jenderek
36229# https://github.com/PredatH0r/ChanSort
362300	string		PSDB\0			Panasonic channel list DataBase
36231!:ext db/bin
36232#!:mime	application/x-db-svl-panasonic
36233>126	string		SQLite\ format\ 3
36234#!:mime	application/x-panasonic-sqlite3
36235>>&-15	indirect	x			\b; contains
36236
36237# H2 Database from https://www.h2database.com/
362380	string		--\ H2\ 0.5/B\ --\ \n	H2 Database file
36239
36240# DuckDB database file from https://duckdb.org
362418	string	DUCK    DuckDB database file
36242>12	lequad	x	\b, version %lld
36243#>20	lequad	x	\b, flags %#llx
36244#>28	lequad	x	\b, flags %#llx
36245# Type:	OpenSSH key files
36246# From:	Nicolas Collignon <tsointsoin@gmail.com>
36247
362480	string	SSH\ PRIVATE\ KEY	OpenSSH RSA1 private key,
36249>28	string	>\0			version %s
362500	string	-----BEGIN\ OPENSSH\ PRIVATE\ KEY-----	OpenSSH private key
36251
362520	string	ssh-dss\ 		OpenSSH DSA public key
362530	string	ssh-rsa\ 		OpenSSH RSA public key
362540	string	ecdsa-sha2-nistp256	OpenSSH ECDSA public key
362550	string	ecdsa-sha2-nistp384	OpenSSH ECDSA public key
362560	string	ecdsa-sha2-nistp521	OpenSSH ECDSA public key
362570	string	ssh-ed25519		OpenSSH ED25519 public key
36258
362590	string	SSHKRL\n\0
36260>8	ubelong	1		OpenSSH key/certificate revocation list, format %u
36261>>12	ubequad	x		\b, version %llx
36262>>>20	beqdate	x		\b, generated %s
36263
36264# From:		Joerg Jenderek
36265# URL:		https://en.wikipedia.org/wiki/PuTTY
36266# Reference:	https://the.earth.li/~sgtatham/putty/latest/putty-0.73.tar.gz
36267#		/sshpubk.c
362680	string		PuTTY-User-Key-File-	PuTTY Private Key File
36269#!:mime	text/plain
36270# https://github.com/github/putty/blob/master/windows/installer.wxs
36271!:mime	application/x-putty-private-key
36272!:ext	ppk
36273# version 1 or 2
36274>20	string		x			\b, version %.1s
36275# name of the algorithm like: ssh-dss ssh-rsa ecdsa-sha2-nistp256 ssh-ed25519
36276>23	string		x			\b, algorithm %s
36277# next line says "Encryption: " plus an encryption type like aes256-cbc or none
36278>32	search/13	Encryption:\040		\b, Encryption
36279>>&0	string		x			%s
36280# next line says "Comment: " plus the comment string
36281>>>&0	search/3	Comment:\040
36282>>>>&0	string		x			"%s"
36283
36284
36285#------------------------------------------------------------------------------
36286# $File: ssl,v 1.5 2017/12/29 04:00:07 christos Exp $
36287# ssl:  file(1) magic for SSL file formats
36288
36289# Type: OpenSSL certificates/key files
36290# From: Nicolas Collignon <tsointsoin@gmail.com>
36291
362920	string	-----BEGIN\040CERTIFICATE-----	PEM certificate
362930	string	-----BEGIN\040CERTIFICATE\040REQ	PEM certificate request
362940	string	-----BEGIN\040RSA\040PRIVATE	PEM RSA private key
362950	string	-----BEGIN\040DSA\040PRIVATE	PEM DSA private key
362960	string	-----BEGIN\040EC\040PRIVATE	PEM EC private key
362970	string	-----BEGIN\040ECDSA\040PRIVATE	PEM ECDSA private key
36298
36299# From Luc Gommans
36300# OpenSSL enc file (recognized by a magic string preceding the password's salt)
363010	string	Salted__	openssl enc'd data with salted password
36302# Using the -a or -base64 option, OpenSSL will base64-encode the data.
363030	string U2FsdGVkX1	openssl enc'd data with salted password, base64 encoded
36304
36305#------------------------------------------------------------------------------
36306# $File: statistics,v 1.3 2022/03/24 15:48:58 christos Exp $
36307# statistics:  file(1) magic for statistics related software
36308#
36309
36310# From Remy Rampin
36311
36312# Stata is a statistical software tool that was created in 1985. While I
36313# don't personally use it, data files in its native (proprietary) format
36314# are common (.dta files).
36315#
36316# Because they are so common, especially in statistical and social
36317# sciences, Stata files and SPSS files can be opened by a lot of modern
36318# software, for example Python's pandas package provides built-in
36319# support for them (read_stata() and read_spss()).
36320#
36321# I noticed that the magic database includes an entry for SPSS files but
36322# not Stata files. Stata files for Stata 13 and newer (formats 117, 118,
36323# and 119) always begin with the string "<stata_dta><header>" as per
36324# https://www.stata.com/help.cgi?dta#definition
36325#
36326# The format version number always follows, for example:
36327#    <stata_dta><header><release>117</release>
36328#    <stata_dta><header><release>118</release>
36329#
36330# Therefore the following line would do the trick:
36331#    0       string  <stata_dta><header>     Stata Data File
36332#
36333# (I'm sure the version number could be captured as well but I did not
36334# manage this without a regex)
36335#
36336# Unfortunately the previous formats (created by Stata before 13, which
36337# was released 2013) are harder to recognize. Format 115 starts with the
36338# four bytes 0x73010100 or 0x73020100, format 114 with 0x72010100 or
36339# 0x72020100, format 113 with 0x71010101 or 0x71020101.
36340#
36341# For additional reference, the Library of Congress website has an entry
36342# for the Stata Data File Format 118:
36343# https://www.loc.gov/preservation/digital/formats/fdd/fdd000471.shtml
36344#
36345# Example of those files can be found on Zenodo:
36346# https://zenodo.org/search?page=1&size=20&q=&file_type=dta
363470	string	\<stata_dta\>\<header\>\<release\>	Stata Data File
36348>&0	regex	[0-9]+					(Release %s)
36349
36350#------------------------------------------------------------------------------
36351# $File: subtitle,v 1.2 2022/09/07 11:29:09 christos Exp $
36352# subtitle:  file(1) magic for subtitles files
36353
36354# EBU-STL
36355# https://tech.ebu.ch/docs/tech/tech3264.pdf
363563	string	STL		EBU-STL subtitles
36357>6	regex	=^[0-9][0-9]	\b, rate %s
36358>>8	string	.01		\b, v1
36359!:mime	application/x-ebu-stl
36360>>>16	regex	=^[^\ ]{0,32}	\b, title "%s"
36361>>>>224 regex	=^[0-9]{2}	\b, created %-.2s
36362>>>>>&0 regex	=^[0-9]{2}	\b-%-.2s
36363>>>>>>&0 regex	=^[0-9]{2}	\b-%-.2s
36364!:ext	stl
36365
36366# SubRip (srt) subtitles
363670	regex/20	=^1[\r\n]+0[01]:[0-9]{2}:[0-9]{2},[0-9]{3}\040-->	 SubRip
36368!:mime	application/x-subrip
36369!:ext	srt
36370
36371# WebVTT subtitles
36372# https://www.w3.org/TR/webvtt1/
363730	string/t	WEBVTT
36374>&0	regex/255	=[0-9]{2}:[0-9]{2}\\.[0-9]{3}\040-->	WebVTT subtitles
36375!:mime	text/vtt
36376!:ext	vtt
36377
36378# XML TTML subtitles
36379# https://www.w3.org/TR/ttml2/
363800	string/t	\<?xml
36381>20	search/400	\020xmlns=
36382>>&0 regex ['"]http://www.w3.org/ns/ttml    TTML subtitles
36383!:mime	application/ttml+xml
36384# Augment strength to beat plain XML
36385!:strength * 3
36386!:ext	ttml
36387
36388#------------------------------------------------------------------------------
36389# $File: sun,v 1.28 2019/04/19 00:42:27 christos Exp $
36390# sun:  file(1) magic for Sun machines
36391#
36392# Values for big-endian Sun (MC680x0, SPARC) binaries on pre-5.x
36393# releases.  (5.x uses ELF.)  Entries for executables without an
36394# architecture type, used before the 68020-based Sun-3's came out,
36395# are in aout, as they're indistinguishable from other big-endian
36396# 32-bit a.out files.
36397#
363980	belong&077777777	0600413		a.out SunOS SPARC demand paged
36399>0	byte		&0x80
36400>>20	belong		<4096		shared library
36401>>20	belong		=4096		dynamically linked executable
36402>>20	belong		>4096		dynamically linked executable
36403>0	byte		^0x80		executable
36404>16	belong		>0		not stripped
36405
364060	belong&077777777	0600410		a.out SunOS SPARC pure
36407>0	byte		&0x80		dynamically linked executable
36408>0	byte		^0x80		executable
36409>16	belong		>0		not stripped
36410
364110	belong&077777777	0600407		a.out SunOS SPARC
36412>0	byte		&0x80		dynamically linked executable
36413>0	byte		^0x80		executable
36414>16	belong		>0		not stripped
36415
364160	belong&077777777	0400413		a.out SunOS mc68020 demand paged
36417>0	byte		&0x80
36418>>20	belong		<4096		shared library
36419>>20	belong		=4096		dynamically linked executable
36420>>20	belong		>4096		dynamically linked executable
36421>0	byte		^0x80		executable
36422>16	belong		>0		not stripped
36423
364240	belong&077777777	0400410		a.out SunOS mc68020 pure
36425>0	byte		&0x80		dynamically linked executable
36426>0	byte		^0x80		executable
36427>16	belong		>0		not stripped
36428
364290	belong&077777777	0400407		a.out SunOS mc68020
36430>0	byte		&0x80		dynamically linked executable
36431>0	byte		^0x80		executable
36432>16	belong		>0		not stripped
36433
364340	belong&077777777	0200413		a.out SunOS mc68010 demand paged
36435>0	byte		&0x80
36436>>20	belong		<4096		shared library
36437>>20	belong		=4096		dynamically linked executable
36438>>20	belong		>4096		dynamically linked executable
36439>0	byte		^0x80		executable
36440>16	belong		>0		not stripped
36441
364420	belong&077777777	0200410		a.out SunOS mc68010 pure
36443>0	byte		&0x80		dynamically linked executable
36444>0	byte		^0x80		executable
36445>16	belong		>0		not stripped
36446
364470	belong&077777777	0200407		a.out SunOS mc68010
36448>0	byte		&0x80		dynamically linked executable
36449>0	byte		^0x80		executable
36450>16	belong		>0		not stripped
36451
36452#
36453# Core files.  "SPARC 4.x BCP" means "core file from a SunOS 4.x SPARC
36454# binary executed in compatibility mode under SunOS 5.x".
36455#
364560	belong		0x080456	SunOS core file
36457>4	belong		432		(SPARC)
36458>>132	string		>\0		from '%s'
36459>>116	belong		=3		(quit)
36460>>116	belong		=4		(illegal instruction)
36461>>116	belong		=5		(trace trap)
36462>>116	belong		=6		(abort)
36463>>116	belong		=7		(emulator trap)
36464>>116	belong		=8		(arithmetic exception)
36465>>116	belong		=9		(kill)
36466>>116	belong		=10		(bus error)
36467>>116	belong		=11		(segmentation violation)
36468>>116	belong		=12		(bad argument to system call)
36469>>116	belong		=29		(resource lost)
36470>>120	belong		x		(T=%dK,
36471>>124	belong		x		D=%dK,
36472>>128	belong		x		S=%dK)
36473>4	belong		826		(68K)
36474>>128	string		>\0		from '%s'
36475>4	belong		456		(SPARC 4.x BCP)
36476>>152	string		>\0		from '%s'
36477# Sun SunPC
364780	long		0xfa33c08e	SunPC 4.0 Hard Disk
364790	string		#SUNPC_CONFIG	SunPC 4.0 Properties Values
36480# Sun snoop (see RFC 1761, which describes the capture file format,
36481# RFC 3827, which describes some additional datalink types, and
36482# https://www.iana.org/assignments/snoop-datalink-types/snoop-datalink-types.xml,
36483# which is the IANA registry of Snoop datalink types)
36484#
364850	string		snoop		Snoop capture file
36486>8	belong		>0		- version %d
36487>12	belong		0		(IEEE 802.3)
36488>12	belong		1		(IEEE 802.4)
36489>12	belong		2		(IEEE 802.5)
36490>12	belong		3		(IEEE 802.6)
36491>12	belong		4		(Ethernet)
36492>12	belong		5		(HDLC)
36493>12	belong		6		(Character synchronous)
36494>12	belong		7		(IBM channel-to-channel adapter)
36495>12	belong		8		(FDDI)
36496>12	belong		9		(Other)
36497>12	belong		10		(type %d)
36498>12	belong		11		(type %d)
36499>12	belong		12		(type %d)
36500>12	belong		13		(type %d)
36501>12	belong		14		(type %d)
36502>12	belong		15		(type %d)
36503>12	belong		16		(Fibre Channel)
36504>12	belong		17		(ATM)
36505>12	belong		18		(ATM Classical IP)
36506>12	belong		19		(type %d)
36507>12	belong		20		(type %d)
36508>12	belong		21		(type %d)
36509>12	belong		22		(type %d)
36510>12	belong		23		(type %d)
36511>12	belong		24		(type %d)
36512>12	belong		25		(type %d)
36513>12	belong		26		(IP over Infiniband)
36514>12	belong		>26		(type %d)
36515
36516#---------------------------------------------------------------------------
36517# The following entries have been tested by Duncan Laurie <duncan@sun.com> (a
36518# lead Sun/Cobalt developer) who agrees that they are good and worthy of
36519# inclusion.
36520
36521# Boot ROM images for Sun/Cobalt Linux server appliances
365220       string  Cobalt\ Networks\ Inc.\nFirmware\ v     Paged COBALT boot rom
36523>38     string x        V%.4s
36524
36525# New format for Sun/Cobalt boot ROMs is annoying, it stores the version code
36526# at the very end where file(1) can't get it.
365270       string CRfs     COBALT boot rom data (Flat boot rom or file system)
36528
36529#------------------------------------------------------------------------------
36530# $File: sylk,v 1.1 2020/04/05 22:18:34 christos Exp $
36531# sylk:  file(1) magic for SYLK text files
36532
36533# From:	Joerg Jenderek
36534# URL:	https://en.wikipedia.org/wiki/SYmbolic_LinK_%28SYLK%29
36535#	http://fileformats.archiveteam.org/wiki/SYLK
36536# Note:	called by TrID "SYLK - SYmbolic LinK data",
36537#	by DROID "Microsoft Symbolic Link (SYLK) File"
36538#	by FreeDesktop.org "spreadsheet interchange document"
365390	string		ID;P
36540# skip short DROID x-fmt-106-signature-id-603.slk
36541>7	ubyte		>0		spreadsheet interchange document
36542# https://reposcope.com/mimetype/text/spreadsheet
36543#!:mime	text/spreadsheet
36544# https://reposcope.com/mimetype/application/x-sylk	by Gnumeric
36545!:mime	application/x-sylk
36546!:ext	slk/sylk
36547>>4	ubyte		>037		\b, created by
36548# Gnumeric, pmw~PlanMaker, CALCOOO32~LibreOffice OpenOffice, SCALC3~StarOffice
36549# MP~Multiplan, XL~Excel WXL~Excel Windows
36550>>>4	string		Gnumeric	Gnumeric
36551>>>4	string		pmw		PlanMaker
36552>>>4	string		CALCOOO32	Libre/OpenOffice Calc
36553>>>4	string		SCALC3		StarOffice Calc
36554>>>4	string		XL		Excel
36555# Excel, version probably running on Windows
36556>>>4	string		WXL		Excel
36557# not tested
36558>>>4	string		MP		Multiplan
36559# unknown spreadsheet software
36560>>>4	default		x
36561>>>>4	string		x		%s
36562
36563
36564
36565#------------------------------------------------------------------------------
36566# msx:  file(1) magic for the SymbOS operating system
36567# http://www.symbos.de
36568# Fabio R. Schmidlin <frs@pop.com.br>
36569
36570# SymbOS EXE file
365710x30	string		SymExe		SymbOS executable
36572>0x36	ubyte		x		v%c
36573>0x37	ubyte		x		\b.%c
36574>0xF	string		x		\b, name: %s
36575
36576# SymbOS DOX document
365770	string		INFOq\0		SymbOS DOX document
36578
36579# Symbos driver
365800	string		SMD1		SymbOS driver
36581>19	byte		x		\b, name: %c
36582>20	byte		x		\b%c
36583>21	byte		x		\b%c
36584>22	byte		x		\b%c
36585>23	byte		x		\b%c
36586>24	byte		x		\b%c
36587>25	byte		x		\b%c
36588>26	byte		x		\b%c
36589>27	byte		x		\b%c
36590>28	byte		x		\b%c
36591>29	byte		x		\b%c
36592>30	byte		x		\b%c
36593>31	byte		x		\b%c
36594
36595# Symbos video
365960	string		SymVid		SymbOS video
36597>6	ubyte		x		v%c
36598>7	ubyte		x		\b.%c
36599
36600# Soundtrakker 128 ST2 music
366010	byte		0
36602>0xC	string		\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x40\x00	Soundtrakker 128 ST2 music,
36603>>1	string		x		name: %s
36604
36605
36606
36607#------------------------------------------------------------------------
36608# $File: sysex,v 1.11 2022/01/17 17:16:51 christos Exp $
36609# sysex: file(1) magic for MIDI sysex files
36610#
36611# GRR: original 1 byte test at offset was too general as it catches also many FATs of DOS filesystems
36612# where real SYStem EXclusive messages at offset 1 are limited to seven bits
36613# https://en.wikipedia.org/wiki/MIDI
36614# test for StartSysEx byte and upper unsed bit of vendor ID
366150	ubeshort&0xFF80		0xF000
36616# MIDI System Exclusive (SysEx) messages (strength=50) after Microsoft Visual C library (strength=70)
36617#!:strength +0
36618# skip Microsoft Visual C library with page size 16 misidentifed as ADA and
36619# page size 32 misidentifed as Inventronics by looking for terminating End Of eXclusive byte (EOX)
36620>2		search/12	\xF7
36621>>0	use	midi-sysex
36622#	display information about MIDI System Exclusive (SysEx) messages
366230	name		midi-sysex
36624# https://fileinfo.com/extension/syx
36625>1	ubyte			x		MIDI audio System Exclusive (SysEx) message -
36626# Note: file (version 5.41) labeled the above entry as "SysEx File"
36627#!:mime	application/octet-stream
36628!:mime	audio/x-syx
36629# https://onsongapp.com/docs/features/formats/sysex
36630!:ext	syx/sysex
36631# https://www.midi.org/specifications-old/item/manufacturer-id-numbers
36632# https://raw.githubusercontent.com/insolace/MIDI-Sysex-MFG-IDs/master/Sysex%20ID%20Tables/MIDI%20Sysex%20MFG%20IDs.csv
36633# SysEx manufacturer ID; originally one byte, but now 0 is used as an escapement to reach the next two
36634# North American Group
36635#>1	byte			0x01		Sequential
36636>1	byte			0x01		Sequential Circuits
36637>1	byte			0x02		IDP
36638#>1	byte			0x03		OctavePlateau
36639>1	byte			0x03		Voyetra Turtle Beach
36640>1	byte			0x04		Moog
36641#>1	byte			0x05		Passport
36642>1	byte			0x05		Passport Designs
36643#>1	byte			0x06		Lexicon
36644>1	byte			0x06		Lexicon Inc.
36645>1	byte			0x07		Kurzweil/Future Retro
36646>>3	byte			0x77		777
36647>>4	byte			0x00		Bank
36648>>4	byte			0x01		Song
36649>>5	byte			0x0f		16
36650>>5	byte			0x0e		15
36651>>5	byte			0x0d		14
36652>>5	byte			0x0c		13
36653>>5	byte			0x0b		12
36654>>5	byte			0x0a		11
36655>>5	byte			0x09		10
36656>>5	byte			0x08		9
36657>>5	byte			0x07		8
36658>>5	byte			0x06		7
36659>>5	byte			0x05		6
36660>>5	byte			0x04		5
36661>>5	byte			0x03		4
36662>>5	byte			0x02		3
36663>>5	byte			0x01		2
36664>>5	byte			0x00		1
36665>>5	byte			0x10		(ALL)
36666>>2	byte			x			\b, Channel %d
36667>1	byte			0x08		Fender
36668#>1	byte			0x09		Gulbransen
36669>1	byte			0x09		MIDI9
36670#>1	byte			0x0a		AKG
36671>1	byte			0x0a		AKG Acoustics
36672>1	byte			0x0b		Voyce
36673>1	byte			0x0c		Waveframe
36674# not ADA programming language
36675#>1	byte			0x0d		ADA
36676>1	byte			0x0d		ADA Signal Processors Inc.
36677#>1	byte			0x0e		Garfield
36678>1	byte			0x0e		Garfield Electronics
36679>1	byte			0x0f		Ensoniq
36680>1	byte			0x10		Oberheim
36681>>2	byte			0x06		Matrix 6 series
36682>>3	byte			0x0A		Dump (All)
36683>>3	byte			0x01		Dump (Bank)
36684>>4 belong			0x0002040E		Matrix 1000
36685>>>11 byte			<2			User bank %d
36686>>>11 byte			>1			Preset bank %d
36687>1	byte			0x11		Apple
36688>1	byte			0x12		GreyMatter
36689>1	byte			0x14		PalmTree
36690>1	byte			0x15		JLCooper
36691>1	byte			0x16		Lowrey
36692>1	byte			0x17		AdamsSmith
36693>1	byte			0x18		E-mu
36694#>1	byte			0x19		Harmony
36695>1	byte			0x19		Harmony Systems
36696>1	byte			0x1a		ART
36697>1	byte			0x1b		Baldwin
36698>1	byte			0x1c		Eventide
36699>1	byte			0x1d		Inventronics
36700>1	byte			0x1f		Clarity
36701
36702# European Group
36703#>1	byte			0x21		SIEL
36704>1	byte			0x21		Proel Labs (SIEL)
36705>1	byte			0x22		Synthaxe
36706>1	byte			0x24		Hohner
36707>1	byte			0x25		Twister
36708#>1	byte			0x26		Solton
36709>1	byte			0x26		Ketron s.r.l.
36710>1	byte			0x27		Jellinghaus
36711>1	byte			0x28		Southworth
36712>1	byte			0x29		PPG
36713>1	byte			0x2a		JEN
36714#>1	byte			0x2b		SSL
36715>1	byte			0x2b		Solid State Logic Organ Systems
36716#>1	byte			0x2c		AudioVertrieb
36717>1	byte			0x2c		Audio Veritrieb-P. Struven
36718
36719>1	byte			0x2f		ELKA
36720>>3	byte			0x09		EK-44
36721
36722>1	byte			0x30		Dynacord
36723#>1	byte			0x31		Jomox
36724>1	byte			0x31		Viscount International Spa
36725>1	byte			0x33		Clavia
36726>1	byte			0x39		Soundcraft
36727# Some Waldorf info from http://Stromeko.Synth.net/Downloads#WaldorfDocs
36728>1	byte			0x3e		Waldorf
36729>>2	byte			0x00		microWave
36730>>2	byte			0x0E		microwave2 / XT
36731>>2	byte			0x0F		Q / Q+
36732>>3	byte			=0			(default id)
36733>>3 byte			>0			(
36734>>>3 byte			<0x7F		\bdevice %d)
36735>>>3 byte			=0x7F		\bbroadcast id)
36736>>3	byte			0x7f		Microwave I
36737>>>4	byte			0x00		SNDR (Sound Request)
36738>>>4	byte			0x10		SNDD (Sound Dump)
36739>>>4	byte			0x20		SNDP (Sound Parameter Change)
36740>>>4	byte			0x30		SNDQ (Sound Parameter Inquiry)
36741>>>4	byte			0x70		BOOT (Sound Reserved)
36742>>>4	byte			0x01		MULR (Multi Request)
36743>>>4	byte			0x11		MULD (Multi Dump)
36744>>>4	byte			0x21		MULP (Multi Parameter Change)
36745>>>4	byte			0x31		MULQ (Multi Parameter Inquiry)
36746>>>4	byte			0x71		OS (Multi Reserved)
36747>>>4	byte			0x02		DRMR (Drum Map Request)
36748>>>4	byte			0x12		DRMD (Drum Map Dump)
36749>>>4	byte			0x22		DRMP (Drum Map Parameter Change)
36750>>>4	byte			0x32		DRMQ (Drum Map Parameter Inquiry)
36751>>>4	byte			0x72		BIN (Drum Map Reserved)
36752>>>4	byte			0x03		PATR (Sequencer Pattern Request)
36753>>>4	byte			0x13		PATD (Sequencer Pattern Dump)
36754>>>4	byte			0x23		PATP (Sequencer Pattern Parameter Change)
36755>>>4	byte			0x33		PATQ (Sequencer Pattern Parameter Inquiry)
36756>>>4	byte			0x73		AFM (Sequencer Pattern Reserved)
36757>>>4	byte			0x04		GLBR (Global Parameter Request)
36758>>>4	byte			0x14		GLBD (Global Parameter Dump)
36759>>>4	byte			0x24		GLBP (Global Parameter Parameter Change)
36760>>>4	byte			0x34		GLBQ (Global Parameter Parameter Inquiry)
36761>>>4	byte			0x07		MODR (Mode Parameter Request)
36762>>>4	byte			0x17		MODD (Mode Parameter Dump)
36763>>>4	byte			0x27		MODP (Mode Parameter Parameter Change)
36764>>>4	byte			0x37		MODQ (Mode Parameter Parameter Inquiry)
36765>>2	byte			0x10		microQ
36766>>>4	byte			0x00		SNDR (Sound Request)
36767>>>4	byte			0x10		SNDD (Sound Dump)
36768>>>4	byte			0x20		SNDP (Sound Parameter Change)
36769>>>4	byte			0x30		SNDQ (Sound Parameter Inquiry)
36770>>>4	byte			0x70		(Sound Reserved)
36771>>>4	byte			0x01		MULR (Multi Request)
36772>>>4	byte			0x11		MULD (Multi Dump)
36773>>>4	byte			0x21		MULP (Multi Parameter Change)
36774>>>4	byte			0x31		MULQ (Multi Parameter Inquiry)
36775>>>4	byte			0x71		OS (Multi Reserved)
36776>>>4	byte			0x02		DRMR (Drum Map Request)
36777>>>4	byte			0x12		DRMD (Drum Map Dump)
36778>>>4	byte			0x22		DRMP (Drum Map Parameter Change)
36779>>>4	byte			0x32		DRMQ (Drum Map Parameter Inquiry)
36780>>>4	byte			0x72		BIN (Drum Map Reserved)
36781>>>4	byte			0x04		GLBR (Global Parameter Request)
36782>>>4	byte			0x14		GLBD (Global Parameter Dump)
36783>>>4	byte			0x24		GLBP (Global Parameter Parameter Change)
36784>>>4	byte			0x34		GLBQ (Global Parameter Parameter Inquiry)
36785>>2	byte			0x11		rackAttack
36786>>>4	byte			0x00		SNDR (Sound Parameter Request)
36787>>>4	byte			0x10		SNDD (Sound Parameter Dump)
36788>>>4	byte			0x20		SNDP (Sound Parameter Parameter Change)
36789>>>4	byte			0x30		SNDQ (Sound Parameter Parameter Inquiry)
36790>>>4	byte			0x01		PRGR (Program Parameter Request)
36791>>>4	byte			0x11		PRGD (Program Parameter Dump)
36792>>>4	byte			0x21		PRGP (Program Parameter Parameter Change)
36793>>>4	byte			0x31		PRGQ (Program Parameter Parameter Inquiry)
36794>>>4	byte			0x71		OS (Program Parameter Reserved)
36795>>>4	byte			0x03		PATR (Pattern Parameter Request)
36796>>>4	byte			0x13		PATD (Pattern Parameter Dump)
36797>>>4	byte			0x23		PATP (Pattern Parameter Parameter Change)
36798>>>4	byte			0x33		PATQ (Pattern Parameter Parameter Inquiry)
36799>>>4	byte			0x04		GLBR (Global Parameter Request)
36800>>>4	byte			0x14		GLBD (Global Parameter Dump)
36801>>>4	byte			0x24		GLBP (Global Parameter Parameter Change)
36802>>>4	byte			0x34		GLBQ (Global Parameter Parameter Inquiry)
36803>>>4	byte			0x05		EFXR (FX Parameter Request)
36804>>>4	byte			0x15		EFXD (FX Parameter Dump)
36805>>>4	byte			0x25		EFXP (FX Parameter Parameter Change)
36806>>>4	byte			0x35		EFXQ (FX Parameter Parameter Inquiry)
36807>>>4	byte			0x07		MODR (Mode Command Request)
36808>>>4	byte			0x17		MODD (Mode Command Dump)
36809>>>4	byte			0x27		MODP (Mode Command Parameter Change)
36810>>>4	byte			0x37		MODQ (Mode Command Parameter Inquiry)
36811>>2	byte			0x03		Wave
36812>>>4	byte			0x00		SBPR (Soundprogram)
36813>>>4	byte			0x01		SAPR (Performance)
36814>>>4	byte			0x02		SWAVE (Wave)
36815>>>4	byte			0x03		SWTBL (Wave control table)
36816>>>4	byte			0x04		SVT (Velocity Curve)
36817>>>4	byte			0x05		STT (Tuning Table)
36818>>>4	byte			0x06		SGLB (Global Parameters)
36819>>>4	byte			0x07		SARRMAP (Performance Program Change Map)
36820>>>4	byte			0x08		SBPRMAP (Sound Program Change Map)
36821>>>4	byte			0x09		SBPRPAR (Sound Parameter)
36822>>>4	byte			0x0A		SARRPAR (Performance Parameter)
36823>>>4	byte			0x0B		SINSPAR (Instrument/External Parameter)
36824>>>4	byte			0x0F		SBULK (Bulk Switch on/off)
36825
36826# Japanese Group
36827>1	byte			0x40		Kawai
36828>>3	byte			0x20		K1
36829>>3	byte			0x22		K4
36830
36831>1	byte			0x41		Roland
36832>>3	byte			0x14		D-50
36833>>3	byte			0x2b		U-220
36834>>3	byte			0x02		TR-707
36835
36836>1	byte			0x42		Korg
36837>>3	byte			0x19		M1
36838
36839>1	byte			0x43		Yamaha
36840>1	byte			0x44		Casio
36841>1	byte			0x46		Kamiya
36842>1	byte			0x47		Akai
36843#>1	byte			0x48		Victor
36844>1	byte			0x48		Victor Company of Japan. Ltd.
36845>1	byte			0x49		Mesosha
36846>1	byte			0x4b		Fujitsu
36847>1	byte			0x4c		Sony
36848>1	byte			0x4e		Teac
36849>1	byte			0x50		Matsushita
36850>1	byte			0x51		Fostex
36851#>1	byte			0x52		Zoom
36852>1	byte			0x52		Zoom Corporation
36853>1	byte			0x54		Matsushita
36854>1	byte			0x57		Acoustic tech. lab.
36855# https://www.midi.org/techspecs/manid.php
36856>1	belong&0xffffff00	0x00007400	Ta Horng
36857>1	belong&0xffffff00	0x00007500	e-Tek
36858>1	belong&0xffffff00	0x00007600	E-Voice
36859>1	belong&0xffffff00	0x00007700	Midisoft
36860>1	belong&0xffffff00	0x00007800	Q-Sound
36861>1	belong&0xffffff00	0x00007900	Westrex
36862>1	belong&0xffffff00	0x00007a00	Nvidia*
36863>1	belong&0xffffff00	0x00007b00	ESS
36864>1	belong&0xffffff00	0x00007c00	Mediatrix
36865>1	belong&0xffffff00	0x00007d00	Brooktree
36866>1	belong&0xffffff00	0x00007e00	Otari
36867>1	belong&0xffffff00	0x00007f00	Key Electronics
36868>1	belong&0xffffff00	0x00010000	Shure
36869>1	belong&0xffffff00	0x00010100	AuraSound
36870>1	belong&0xffffff00	0x00010200	Crystal
36871>1	belong&0xffffff00	0x00010300	Rockwell
36872>1	belong&0xffffff00	0x00010400	Silicon Graphics
36873>1	belong&0xffffff00	0x00010500	Midiman
36874>1	belong&0xffffff00	0x00010600	PreSonus
36875>1	belong&0xffffff00	0x00010800	Topaz
36876>1	belong&0xffffff00	0x00010900	Cast Lightning
36877>1	belong&0xffffff00	0x00010a00	Microsoft
36878>1	belong&0xffffff00	0x00010b00	Sonic Foundry
36879>1	belong&0xffffff00	0x00010c00	Line 6
36880>1	belong&0xffffff00	0x00010d00	Beatnik Inc.
36881>1	belong&0xffffff00	0x00010e00	Van Koerving
36882>1	belong&0xffffff00	0x00010f00	Altech Systems
36883>1	belong&0xffffff00	0x00011000	S & S Research
36884>1	belong&0xffffff00	0x00011100	VLSI Technology
36885>1	belong&0xffffff00	0x00011200	Chromatic
36886>1	belong&0xffffff00	0x00011300	Sapphire
36887>1	belong&0xffffff00	0x00011400	IDRC
36888>1	belong&0xffffff00	0x00011500	Justonic Tuning
36889>1	belong&0xffffff00	0x00011600	TorComp
36890>1	belong&0xffffff00	0x00011700	Newtek Inc.
36891>1	belong&0xffffff00	0x00011800	Sound Sculpture
36892>1	belong&0xffffff00	0x00011900	Walker Technical
36893>1	belong&0xffffff00	0x00011a00	Digital Harmony
36894>1	belong&0xffffff00	0x00011b00	InVision
36895>1	belong&0xffffff00	0x00011c00	T-Square
36896>1	belong&0xffffff00	0x00011d00	Nemesys
36897>1	belong&0xffffff00	0x00011e00	DBX
36898>1	belong&0xffffff00	0x00011f00	Syndyne
36899>1	belong&0xffffff00	0x00012000	Bitheadz
36900>1	belong&0xffffff00	0x00012100	Cakewalk
36901>1	belong&0xffffff00	0x00012200	Staccato
36902>1	belong&0xffffff00	0x00012300	National Semicon.
36903>1	belong&0xffffff00	0x00012400	Boom Theory
36904>1	belong&0xffffff00	0x00012500	Virtual DSP Corp
36905>1	belong&0xffffff00	0x00012600	Antares
36906>1	belong&0xffffff00	0x00012700	Angel Software
36907>1	belong&0xffffff00	0x00012800	St Louis Music
36908>1	belong&0xffffff00	0x00012900	Lyrrus dba G-VOX
36909>1	belong&0xffffff00	0x00012a00	Ashley Audio
36910>1	belong&0xffffff00	0x00012b00	Vari-Lite
36911>1	belong&0xffffff00	0x00012c00	Summit Audio
36912>1	belong&0xffffff00	0x00012d00	Aureal Semicon.
36913>1	belong&0xffffff00	0x00012e00	SeaSound
36914>1	belong&0xffffff00	0x00012f00	U.S. Robotics
36915>1	belong&0xffffff00	0x00013000	Aurisis
36916>1	belong&0xffffff00	0x00013100	Nearfield Multimedia
36917>1	belong&0xffffff00	0x00013200	FM7 Inc.
36918>1	belong&0xffffff00	0x00013300	Swivel Systems
36919>1	belong&0xffffff00	0x00013400	Hyperactive
36920>1	belong&0xffffff00	0x00013500	MidiLite
36921>1	belong&0xffffff00	0x00013600	Radical
36922>1	belong&0xffffff00	0x00013700	Roger Linn
36923>1	belong&0xffffff00	0x00013800	Helicon
36924>1	belong&0xffffff00	0x00013900	Event
36925>1	belong&0xffffff00	0x00013a00	Sonic Network
36926>1	belong&0xffffff00	0x00013b00	Realtime Music
36927>1	belong&0xffffff00	0x00013c00	Apogee Digital
36928
36929>1	belong&0xffffff00	0x00202b00	Medeli Electronics
36930>1	belong&0xffffff00	0x00202c00	Charlie Lab
36931>1	belong&0xffffff00	0x00202d00	Blue Chip Music
36932>1	belong&0xffffff00	0x00202e00	BEE OH Corp
36933>1	belong&0xffffff00	0x00202f00	LG Semicon America
36934>1	belong&0xffffff00	0x00203000	TESI
36935>1	belong&0xffffff00	0x00203100	EMAGIC
36936>1	belong&0xffffff00	0x00203200	Behringer
36937>1	belong&0xffffff00	0x00203300	Access Music
36938>1	belong&0xffffff00	0x00203400	Synoptic
36939>1	belong&0xffffff00	0x00203500	Hanmesoft Corp
36940>1	belong&0xffffff00	0x00203600	Terratec
36941>1	belong&0xffffff00	0x00203700	Proel SpA
36942>1	belong&0xffffff00	0x00203800	IBK MIDI
36943>1	belong&0xffffff00	0x00203900	IRCAM
36944>1	belong&0xffffff00	0x00203a00	Propellerhead Software
36945>1	belong&0xffffff00	0x00203b00	Red Sound Systems
36946>1	belong&0xffffff00	0x00203c00	Electron ESI AB
36947>1	belong&0xffffff00	0x00203d00	Sintefex Audio
36948>1	belong&0xffffff00	0x00203e00	Music and More
36949>1	belong&0xffffff00	0x00203f00	Amsaro
36950>1	belong&0xffffff00	0x00204000	CDS Advanced Technology
36951>1	belong&0xffffff00	0x00204100	Touched by Sound
36952>1	belong&0xffffff00	0x00204200	DSP Arts
36953>1	belong&0xffffff00	0x00204300	Phil Rees Music
36954>1	belong&0xffffff00	0x00204400	Stamer Musikanlagen GmbH
36955>1	belong&0xffffff00	0x00204500	Soundart
36956>1	belong&0xffffff00	0x00204600	C-Mexx Software
36957>1	belong&0xffffff00	0x00204700	Klavis Tech.
36958>1	belong&0xffffff00	0x00204800	Noteheads AB
36959
36960# Update:	Joerg Jenderek; January 2022
36961>1	byte			0x00		ID EXTENSIONS
36962>1	byte			0x13		Digidesign Inc.
36963>1	byte			0x1e		Key Concepts
36964>1	byte			0x20		Passac
36965>1	byte			0x23		Stepp
36966>1	byte			0x2d		Neve
36967>1	byte			0x2e		Soundtracs Ltd.
36968>1	byte			0x32		Drawmer
36969>1	byte			0x34		Audio Architecture
36970>1	byte			0x35		Generalmusic Corp SpA
36971>1	byte			0x36		Cheetah Marketing
36972>1	byte			0x37		C.T.M.
36973>1	byte			0x38		Simmons UK
36974>1	byte			0x3a		Steinberg
36975>1	byte			0x3b		Wersi GmbH
36976>1	byte			0x3c		AVAB Niethammer AB
36977>1	byte			0x3d		Digigram
36978>1	byte			0x3f		Quasimidi
36979#
36980>1	byte			0x40		Kawai Musical Instruments MFG. CO. Ltd
36981#>1	byte			0x45		foo
36982#>1	byte			0x4a		foo
36983#>1	byte			0x4d		foo
36984#>1	byte			0x4f		foo
36985#>1	byte			0x53		foo
36986>1	byte			0x55		Suzuki Musical Instruments MFG. Co. Ltd.
36987>1	byte			0x56		Fuji Sound Corporation Ltd.
36988#>1	byte			0x58		foo
36989>1	byte			0x59		Faith. Inc.
36990>1	byte			0x5a		Internet Corporation
36991#>1	byte			0x5b		foo
36992>1	byte			0x5c		Seekers Co. Ltd.
36993#>1	byte			0x5d		foo
36994#>1	byte			0x5e		foo
36995>1	byte			0x5f		SD Card Association
36996# Reserved for other uses for 60H to 7FH
36997# URL:		https://www.philscomputerlab.com/roland-midi-emulator-project-20.html
36998# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/s/syx--midiemu.trid.xml
36999# Note:         called by TrID "MIDI Emulator Project SysEx preset command"
37000>1	byte			0x66		MIDI Emulator
37001# https://electronicmusic.fandom.com/wiki/List_of_MIDI_Manufacturer_IDs
37002# Educational, prototyping, test, private use and experimentation
37003>1	byte			0x7D		PROTOTYPING
37004# universal non-real-time (sample dump, tuning table, etc.)
37005>1	byte			0x7E		UNIVERSAL
37006# universal real time (MIDI time code, MIDI Machine control, etc.)
37007>1	byte			0x7F		universal real time
37008# display information about End Of eXclusive byte (EOX=F7)
37009#>2	ubyte			0xF7		\b, at 2 EOX
37010#>3	ubyte			0xF7		\b, at 3 EOX
37011# https://tttapa.github.io/Control-Surface-doc/new-input/Doxygen/d2/d93/SysEx-Send-Receive_8ino-example.html
37012>4	ubyte			0xF7		\b, at 4 EOX
37013# http://www.1manband.nl/tutorials2/sysex.htm
37014>5	ubyte			0xF7		\b, at 5 EOX
37015# http://www.somascape.org/midi/tech/mfile.html#sysex
37016>6	ubyte			0xF7		\b, at 6 EOX
37017#
37018>7	ubyte			0xF7		\b, at 7 EOX
37019# https://webmidijs.org/forum/discussion/34/how-to-send-or-receive-system-exclusive-messages
37020>8	ubyte			0xF7		\b, at 8 EOX
37021#
37022>9	ubyte			0xF7		\b, at 9 EOX
37023# https://www.chd-el.cz/wp-content/uploads/845010_syxcom.pdf
37024>10	ubyte			0xF7		\b, at 10 EOX
37025# https://stackoverflow.com/questions/52906076/handling-midi-the-input-of-multiple-system-exclusive-messages-in-vb
37026>11	ubyte			0xF7		\b, at 11 EOX
37027# https://www.2writers.com/eddie/TutSysEx.htm
37028>12	ubyte			0xF7		\b, at 12 EOX
37029>13	ubyte			0xF7		\b, at 13 EOX
37030# http://www.chromakinetics.com/handsonic/rolSysEx.htm
37031>14	ubyte			0xF7		\b, at 14 EOX
37032#>15	ubyte			0xF7		\b, at 15 EOX
37033
370340	string			T707		Roland TR-707 Data
37035#------------------------------------------------------------------------------
37036# file:  file(1) magic for Tcl scripting language
37037# URL:  https://www.tcl.tk/
37038# From: gustaf neumann
37039
37040# Tcl scripts
370410	search/1/w	#!\ /usr/bin/tcl	Tcl script text executable
37042!:mime	text/x-tcl
370430	search/1/w	#!\ /usr/local/bin/tcl	Tcl script text executable
37044!:mime	text/x-tcl
370450	search/1	#!/usr/bin/env\ tcl	Tcl script text executable
37046!:mime	text/x-tcl
370470	search/1	#!\ /usr/bin/env\ tcl	Tcl script text executable
37048!:mime	text/x-tcl
370490	search/1/w	#!\ /usr/bin/wish	Tcl/Tk script text executable
37050!:mime	text/x-tcl
370510	search/1/w	#!\ /usr/local/bin/wish	Tcl/Tk script text executable
37052!:mime	text/x-tcl
370530	search/1	#!/usr/bin/env\ wish	Tcl/Tk script text executable
37054!:mime	text/x-tcl
370550	search/1	#!\ /usr/bin/env\ wish	Tcl/Tk script text executable
37056!:mime	text/x-tcl
37057
37058# check the first line
370590	search/1	package\ req
37060>0	regex		\^package[\ \t]+req	Tcl script
37061# not 'p', check other lines
370620	search/1	!p
37063>0	regex		\^package[\ \t]+req	Tcl script
37064
37065#------------------------------------------------------------------------------
37066# $File: teapot,v 1.4 2009/09/19 16:28:12 christos Exp $
37067# teapot:  file(1) magic for "teapot" spreadsheet
37068#
370690       string          #!teapot\012xdr      teapot work sheet (XDR format)
37070
37071#------------------------------------------------------------------------------
37072# $File: terminfo,v 1.12 2021/02/23 00:51:10 christos Exp $
37073# terminfo:  file(1) magic for terminfo
37074#
37075# URL: https://invisible-island.net/ncurses/man/term.5.html
37076# URL: https://invisible-island.net/ncurses/man/scr_dump.5.html
37077#
37078# Workaround for Targa image type by Joerg Jenderek
37079# GRR: line below too general as it catches also
37080# Targa image type 1 with 26 long identification field
37081# and HELP.DSK
370820	string		\032\001
37083# 5th character of terminal name list, but not Targa image pixel size (15 16 24 32)
37084>16	ubyte		>32
37085# namelist, if more than 1 separated by "|" like "st|stterm| simpleterm 0.4.1"
37086>>12	regex		\^[a-zA-Z0-9][a-zA-Z0-9.][^|]*	Compiled terminfo entry "%-s"
37087!:mime	application/x-terminfo
37088# no extension
37089#!:ext
37090#
37091#------------------------------------------------------------------------------
37092# The following was added for ncurses6 development:
37093#------------------------------------------------------------------------------
37094#
370950	string		\036\002
37096# imitate the legacy compiled-format, to get the entry-name printed
37097>16	ubyte		>32
37098# namelist, if more than 1 separated by "|" like "st|stterm| simpleterm 0. 4.1"
37099>>12	regex		\^[a-zA-Z0-9][a-zA-Z0-9.][^|]*	Compiled 32-bit terminfo entry "%-s"
37100!:mime	application/x-terminfo2
37101#
37102# While the compiled terminfo uses little-endian format regardless of
37103# platform, SystemV screen dumps do not.  They came later, and that detail was
37104# overlooked.
37105#
37106# AIX and HPUX use the SVr4 big-endian format
37107# Solaris uses the SVr3 formats (sparc and x86 differ endian-ness)
371080	beshort		0433 		SVr2 curses screen image, big-endian
371090	beshort		0434		SVr3 curses screen image, big-endian
371100	beshort		0435		SVr4 curses screen image, big-endian
37111#
371120	leshort		0433		SVr2 curses screen image, little-endian
371130	leshort		0434		SVr3 curses screen image, little-endian
371140	leshort		0435		SVr4 curses screen image, little-endian
37115#
37116# Rather than SVr4, Solaris "xcurses" writes this header:
371170	regex		\^MAX=[0-9]+,[0-9]+$
37118>1	regex		\^BEG=[0-9]+,[0-9]+$
37119>2	regex		\^SCROLL=[0-9]+,[0-9]+$
37120>3	regex		\^VMIN=[0-9]+$
37121>4	regex		\^VTIME=[0-9]+$
37122>5	regex		\^FLAGS=0x[[:xdigit:]]+$
37123>6	regex		\^FG=[0-9],[0-9]+$
37124>7	regex		\^BG=[0-9]+,[0-9]+,	Solaris xcurses screen image
37125#
37126# ncurses5 (and before) did not use a magic number, making screen dumps "data".
37127# ncurses6 (2015) uses this format, ignoring byte-order
371280	string	\210\210\210\210ncurses	ncurses6 screen image
37129#
37130# PDCurses added this in 2005
371310	string		PDC\001		PDCurses screen image
37132
37133#------------------------------------------------------------------------------
37134# $File: tex,v 1.21 2019/04/19 00:42:27 christos Exp $
37135# tex:  file(1) magic for TeX files
37136#
37137# XXX - needs byte-endian stuff (big-endian and little-endian DVI?)
37138#
37139# From <conklin@talisman.kaleida.com>
37140
37141# Although we may know the offset of certain text fields in TeX DVI
37142# and font files, we can't use them reliably because they are not
37143# zero terminated. [but we do anyway, christos]
371440	string		\367\002	TeX DVI file
37145!:mime	application/x-dvi
37146>16	string		>\0		(%s)
371470	string		\367\203	TeX generic font data
371480	string		\367\131	TeX packed font data
37149>3	string		>\0		(%s)
371500	string		\367\312	TeX virtual font data
371510	search/1	This\ is\ TeX,	TeX transcript text
371520	search/1	This\ is\ METAFONT,	METAFONT transcript text
37153
37154# There is no way to detect TeX Font Metric (*.tfm) files without
37155# breaking them apart and reading the data.  The following patterns
37156# match most *.tfm files generated by METAFONT or afm2tfm.
371572	string		\000\021	TeX font metric data
37158!:mime	application/x-tex-tfm
37159>33	string		>\0		(%s)
371602	string		\000\022	TeX font metric data
37161!:mime	application/x-tex-tfm
37162>33	string		>\0		(%s)
37163
37164# Texinfo and GNU Info, from Daniel Quinlan (quinlan@yggdrasil.com)
371650	search/1	\\input\ texinfo	Texinfo source text
37166!:mime	text/x-texinfo
371670	search/1	This\ is\ Info\ file	GNU Info text
37168!:mime	text/x-info
37169
37170# TeX documents, from Daniel Quinlan (quinlan@yggdrasil.com)
371710	search/4096	\\input		TeX document text
37172!:mime	text/x-tex
37173!:strength + 15
371740	search/4096	\\begin		LaTeX document text
37175!:mime	text/x-tex
37176!:strength + 15
371770	search/4096	\\section	LaTeX document text
37178!:mime	text/x-tex
37179!:strength + 18
371800	search/4096	\\setlength	LaTeX document text
37181!:mime	text/x-tex
37182!:strength + 15
371830	search/4096	\\documentstyle	LaTeX document text
37184!:mime	text/x-tex
37185!:strength + 18
371860	search/4096	\\chapter	LaTeX document text
37187!:mime	text/x-tex
37188!:strength + 18
371890	search/4096	\\documentclass	LaTeX 2e document text
37190!:mime	text/x-tex
37191!:strength + 15
371920	search/4096	\\relax		LaTeX auxiliary file
37193!:mime	text/x-tex
37194!:strength + 15
371950	search/4096	\\contentsline	LaTeX table of contents
37196!:mime	text/x-tex
37197!:strength + 15
371980	search/4096	%\ -*-latex-*-	LaTeX document text
37199!:mime	text/x-tex
37200
37201# Tex document, from Hendrik Scholz <hendrik@scholz.net>
372020   	search/1	\\ifx		TeX document text
37203
37204# Index and glossary files
372050	search/4096	\\indexentry	LaTeX raw index file
372060	search/4096	\\begin{theindex}	LaTeX sorted index
372070	search/4096	\\glossaryentry	LaTeX raw glossary
372080	search/4096	\\begin{theglossary}	LaTeX sorted glossary
372090	search/4096	This\ is\ makeindex	Makeindex log file
37210
37211# End of TeX
37212
37213#------------------------------------------------------------------------------
37214# file(1) magic for BibTex text files
37215# From Hendrik Scholz <hendrik@scholz.net>
37216
372170	search/1/c	@article{	BibTeX text file
372180	search/1/c	@book{		BibTeX text file
372190	search/1/c	@inbook{	BibTeX text file
372200	search/1/c	@incollection{	BibTeX text file
372210	search/1/c	@inproceedings{	BibTeX text file
372220	search/1/c	@manual{	BibTeX text file
372230	search/1/c	@misc{		BibTeX text file
372240	search/1/c	@preamble{	BibTeX text file
372250	search/1/c	@phdthesis{	BibTeX text file
372260	search/1/c	@techreport{	BibTeX text file
372270	search/1/c	@unpublished{	BibTeX text file
37228
3722973	search/1	%%%\ \ 		BibTeX-file{ BibTex text file (with full header)
37230
3723173	search/1	%%%\ \ @BibTeX-style-file{   BibTeX style text file (with full header)
37232
372330	search/1	%\ BibTeX\ standard\ bibliography\ 	BibTeX standard bibliography style text file
37234
372350	search/1	%\ BibTeX\ `	BibTeX custom bibliography style text file
37236
372370	search/1	@c\ @mapfile{	TeX font aliases text file
37238
372390	string		#LyX		LyX document text
37240
37241# ConTeXt documents
37242#	https://wiki.contextgarden.net/
372430	search/4096	\\setupcolors[		ConTeXt document text
37244!:strength + 15
372450	search/4096	\\definecolor[		ConTeXt document text
37246!:strength + 15
372470	search/4096	\\setupinteraction[	ConTeXt document text
37248!:strength + 15
372490	search/4096	\\useURL[		ConTeXt document text
37250!:strength + 15
372510	search/4096	\\setuppapersize[	ConTeXt document text
37252!:strength + 15
372530	search/4096	\\setuplayout[		ConTeXt document text
37254!:strength + 15
372550	search/4096	\\setupfooter[		ConTeXt document text
37256!:strength + 15
372570	search/4096	\\setupfootertexts[	ConTeXt document text
37258!:strength + 15
372590	search/4096	\\setuppagenumbering[	ConTeXt document text
37260!:strength + 15
372610	search/4096	\\setupbodyfont[	ConTeXt document text
37262!:strength + 15
372630	search/4096	\\setuphead[		ConTeXt document text
37264!:strength + 15
372650	search/4096	\\setupitemize[		ConTeXt document text
37266!:strength + 15
372670	search/4096	\\setupwhitespace[	ConTeXt document text
37268!:strength + 15
372690	search/4096	\\setupindenting[	ConTeXt document text
37270!:strength + 15
37271
37272#------------------------------------------------------------------------------
37273# $File: tgif,v 1.7 2010/09/20 19:03:46 rrt Exp $
37274# file(1) magic for tgif(1) files
37275# From Hendrik Scholz <hendrik@scholz.net>
372760	string	%TGIF\ 			Tgif file version
37277>6	string	x			%s
37278
37279#------------------------------------------------------------------------------
37280# $File: ti-8x,v 1.8 2020/02/12 22:13:01 christos Exp $
37281# ti-8x: file(1) magic for the TI-8x and TI-9x Graphing Calculators.
37282#
37283# From: Ryan McGuire (rmcguire@freenet.columbus.oh.us).
37284#
37285# Update: Romain Lievin (roms@lpg.ticalc.org).
37286#
37287# NOTE: This list is not complete.
37288# Files for the TI-80 and TI-81 are pretty rare. I'm not going to put the
37289# program/group magic numbers in here because I cannot find any.
372900		string		**TI80**	TI-80 Graphing Calculator File.
372910		string		**TI81**	TI-81 Graphing Calculator File.
37292#
37293# Magic Numbers for the TI-73
37294#
372950		string		**TI73**	TI-73 Graphing Calculator
37296>0x00003B	byte		0x00		(real number)
37297>0x00003B	byte		0x01		(list)
37298>0x00003B	byte		0x02		(matrix)
37299>0x00003B	byte		0x03		(equation)
37300>0x00003B	byte		0x04		(string)
37301>0x00003B	byte		0x05		(program)
37302>0x00003B	byte		0x06		(assembly program)
37303>0x00003B	byte		0x07		(picture)
37304>0x00003B	byte		0x08		(gdb)
37305>0x00003B	byte		0x0C		(complex number)
37306>0x00003B	byte		0x0F		(window settings)
37307>0x00003B	byte		0x10		(zoom)
37308>0x00003B	byte		0x11		(table setup)
37309>0x00003B	byte		0x13		(backup)
37310
37311# Magic Numbers for the TI-82
37312#
373130		string		**TI82**	TI-82 Graphing Calculator
37314>0x00003B	byte		0x00		(real)
37315>0x00003B	byte		0x01		(list)
37316>0x00003B	byte		0x02		(matrix)
37317>0x00003B	byte		0x03		(Y-variable)
37318>0x00003B	byte		0x05		(program)
37319>0x00003B	byte		0x06		(protected prgm)
37320>0x00003B	byte		0x07		(picture)
37321>0x00003B	byte		0x08		(gdb)
37322>0x00003B	byte		0x0B		(window settings)
37323>0x00003B	byte		0x0C		(window settings)
37324>0x00003B	byte		0x0D		(table setup)
37325>0x00003B	byte		0x0E		(screenshot)
37326>0x00003B	byte		0x0F		(backup)
37327#
37328# Magic Numbers for the TI-83
37329#
373300		string		**TI83**	TI-83 Graphing Calculator
37331>0x00003B	byte		0x00		(real)
37332>0x00003B	byte		0x01		(list)
37333>0x00003B	byte		0x02		(matrix)
37334>0x00003B	byte		0x03		(Y-variable)
37335>0x00003B	byte		0x04		(string)
37336>0x00003B	byte		0x05		(program)
37337>0x00003B	byte		0x06		(protected prgm)
37338>0x00003B	byte		0x07		(picture)
37339>0x00003B	byte		0x08		(gdb)
37340>0x00003B	byte		0x0B		(window settings)
37341>0x00003B	byte		0x0C		(window settings)
37342>0x00003B	byte		0x0D		(table setup)
37343>0x00003B	byte		0x0E		(screenshot)
37344>0x00003B	byte		0x13		(backup)
37345#
37346# Magic Numbers for the TI-83+
37347#
373480		string		**TI83F*	TI-83+ Graphing Calculator
37349>0x00003B	byte		0x00		(real number)
37350>0x00003B	byte		0x01		(list)
37351>0x00003B	byte		0x02		(matrix)
37352>0x00003B	byte		0x03		(equation)
37353>0x00003B	byte		0x04		(string)
37354>0x00003B	byte		0x05		(program)
37355>0x00003B	byte		0x06		(assembly program)
37356>0x00003B	byte		0x07		(picture)
37357>0x00003B	byte		0x08		(gdb)
37358>0x00003B	byte		0x0C		(complex number)
37359>0x00003B	byte		0x0F		(window settings)
37360>0x00003B	byte		0x10		(zoom)
37361>0x00003B	byte		0x11		(table setup)
37362>0x00003B	byte		0x13		(backup)
37363>0x00003B	byte		0x15		(application variable)
37364>0x00003B	byte		0x17		(group of variable)
37365
37366#
37367# Magic Numbers for the TI-85
37368#
373690		string		**TI85**	TI-85 Graphing Calculator
37370>0x00003B	byte		0x00		(real number)
37371>0x00003B	byte		0x01		(complex number)
37372>0x00003B	byte		0x02		(real vector)
37373>0x00003B	byte		0x03		(complex vector)
37374>0x00003B	byte		0x04		(real list)
37375>0x00003B	byte		0x05		(complex list)
37376>0x00003B	byte		0x06		(real matrix)
37377>0x00003B	byte		0x07		(complex matrix)
37378>0x00003B	byte		0x08		(real constant)
37379>0x00003B	byte		0x09		(complex constant)
37380>0x00003B	byte		0x0A		(equation)
37381>0x00003B	byte		0x0C		(string)
37382>0x00003B	byte		0x0D		(function GDB)
37383>0x00003B	byte		0x0E		(polar GDB)
37384>0x00003B	byte		0x0F		(parametric GDB)
37385>0x00003B	byte		0x10		(diffeq GDB)
37386>0x00003B	byte		0x11		(picture)
37387>0x00003B	byte		0x12		(program)
37388>0x00003B	byte		0x13		(range)
37389>0x00003B	byte		0x17		(window settings)
37390>0x00003B	byte		0x18		(window settings)
37391>0x00003B	byte		0x19		(window settings)
37392>0x00003B	byte		0x1A		(window settings)
37393>0x00003B	byte		0x1B		(zoom)
37394>0x00003B	byte		0x1D		(backup)
37395>0x00003B	byte		0x1E		(unknown)
37396>0x00003B	byte		0x2A		(equation)
37397>0x000032	string		ZS4		- ZShell Version 4 File.
37398>0x000032	string		ZS3		- ZShell Version 3 File.
37399#
37400# Magic Numbers for the TI-86
37401#
374020		string		**TI86**	TI-86 Graphing Calculator
37403>0x00003B	byte		0x00		(real number)
37404>0x00003B	byte		0x01		(complex number)
37405>0x00003B	byte		0x02		(real vector)
37406>0x00003B	byte		0x03		(complex vector)
37407>0x00003B	byte		0x04		(real list)
37408>0x00003B	byte		0x05		(complex list)
37409>0x00003B	byte		0x06		(real matrix)
37410>0x00003B	byte		0x07		(complex matrix)
37411>0x00003B	byte		0x08		(real constant)
37412>0x00003B	byte		0x09		(complex constant)
37413>0x00003B	byte		0x0A		(equation)
37414>0x00003B	byte		0x0C		(string)
37415>0x00003B	byte		0x0D		(function GDB)
37416>0x00003B	byte		0x0E		(polar GDB)
37417>0x00003B	byte		0x0F		(parametric GDB)
37418>0x00003B	byte		0x10		(diffeq GDB)
37419>0x00003B	byte		0x11		(picture)
37420>0x00003B	byte		0x12		(program)
37421>0x00003B	byte		0x13		(range)
37422>0x00003B	byte		0x17		(window settings)
37423>0x00003B	byte		0x18		(window settings)
37424>0x00003B	byte		0x19		(window settings)
37425>0x00003B	byte		0x1A		(window settings)
37426>0x00003B	byte		0x1B		(zoom)
37427>0x00003B	byte		0x1D		(backup)
37428>0x00003B	byte		0x1E		(unknown)
37429>0x00003B	byte		0x2A		(equation)
37430#
37431# Magic Numbers for the TI-89
37432#
374330		string		**TI89**	TI-89 Graphing Calculator
37434>0x000048	byte		0x00		(expression)
37435>0x000048	byte		0x04		(list)
37436>0x000048	byte		0x06		(matrix)
37437>0x000048	byte		0x0A		(data)
37438>0x000048	byte		0x0B		(text)
37439>0x000048	byte		0x0C		(string)
37440>0x000048	byte		0x0D		(graphic data base)
37441>0x000048	byte		0x0E		(figure)
37442>0x000048	byte		0x10		(picture)
37443>0x000048	byte		0x12		(program)
37444>0x000048	byte		0x13		(function)
37445>0x000048	byte		0x14		(macro)
37446>0x000048	byte		0x1C		(zipped)
37447>0x000048	byte		0x21		(assembler)
37448#
37449# Magic Numbers for the TI-92
37450#
374510		string		**TI92**	TI-92 Graphing Calculator
37452>0x000048	byte		0x00		(expression)
37453>0x000048	byte		0x04		(list)
37454>0x000048	byte		0x06		(matrix)
37455>0x000048	byte		0x0A		(data)
37456>0x000048	byte		0x0B		(text)
37457>0x000048	byte		0x0C		(string)
37458>0x000048	byte		0x0D		(graphic data base)
37459>0x000048	byte		0x0E		(figure)
37460>0x000048	byte		0x10		(picture)
37461>0x000048	byte		0x12		(program)
37462>0x000048	byte		0x13		(function)
37463>0x000048	byte		0x14		(macro)
37464>0x000048	byte		0x1D		(backup)
37465#
37466# Magic Numbers for the TI-92+/V200
37467#
374680		string		**TI92P*	TI-92+/V200 Graphing Calculator
37469>0x000048	byte		0x00		(expression)
37470>0x000048	byte		0x04		(list)
37471>0x000048	byte		0x06		(matrix)
37472>0x000048	byte		0x0A		(data)
37473>0x000048	byte		0x0B		(text)
37474>0x000048	byte		0x0C		(string)
37475>0x000048	byte		0x0D		(graphic data base)
37476>0x000048	byte		0x0E		(figure)
37477>0x000048	byte		0x10		(picture)
37478>0x000048	byte		0x12		(program)
37479>0x000048	byte		0x13		(function)
37480>0x000048	byte		0x14		(macro)
37481>0x000048	byte		0x1C		(zipped)
37482>0x000048	byte		0x21		(assembler)
37483#
37484# Magic Numbers for the TI-73/83+/89/92+/V200 FLASH upgrades
37485#
37486#0x0000016	string		Advanced	TI-XX Graphing Calculator (FLASH)
374870		string		**TIFL**	TI-XX Graphing Calculator (FLASH)
37488>8		byte		>0		- Revision %d
37489>>9 		byte		x		\b.%d,
37490>12		byte		>0		Revision date %02x
37491>>13		byte		x		\b/%02x
37492>>14		beshort		x		\b/%04x,
37493>17		string		>/0		name: '%s',
37494>48		byte		0x74		device: TI-73,
37495>48		byte		0x73		device: TI-83+,
37496>48		byte		0x98		device: TI-89,
37497>48		byte		0x88		device: TI-92+,
37498>49		byte		0x23		type: OS upgrade,
37499>49		byte		0x24		type: application,
37500>49		byte		0x25		type: certificate,
37501>49		byte		0x3e		type: license,
37502>74		lelong		>0		size: %d bytes
37503
37504# VTi & TiEmu skins (TI Graphing Calculators).
37505# From: Romain Lievin (roms@lpg.ticalc.org).
37506# Magic Numbers for the VTi skins
375070               string          VTI		Virtual TI skin
37508>3		string		v		- Version
37509>>4		byte		>0		\b %c
37510>>6		byte		x		\b.%c
37511# Magic Numbers for the TiEmu skins
375120		string		TiEmu		TiEmu skin
37513>6              string          v               - Version
37514>>7             byte            >0              \b %c
37515>>9             byte            x               \b.%c
37516>>10		byte		x		\b%c
37517
37518#------------------------------------------------------------------------------
37519# $File: timezone,v 1.13 2021/07/21 17:57:20 christos Exp $
37520# timezone:  file(1) magic for timezone data
37521#
37522# from Daniel Quinlan (quinlan@yggdrasil.com)
37523# this should work on Linux, SunOS, and maybe others
37524# Added new official magic number for recent versions of the Olson code
375250	name	timezone
37526>4	byte	0	\b, old version
37527>4	byte	>0	\b, version %c
37528>20	belong	0	\b, no gmt time flags
37529>20	belong	1	\b, 1 gmt time flag
37530>20	belong	>1	\b, %d gmt time flags
37531>24	belong	0	\b, no std time flags
37532>24	belong	1	\b, 1 std time flag
37533>24	belong	>1	\b, %d std time flags
37534>28	belong	0	\b, no leap seconds
37535>28	belong	1	\b, 1 leap second
37536>28	belong  >1	\b, %d leap seconds
37537>32	belong	0	\b, no transition times
37538>32	belong	1	\b, 1 transition time
37539>32	belong  >1	\b, %d transition times
37540>36	belong	0	\b, no local time types
37541>36	belong	1	\b, 1 local time type
37542>36	belong	>1	\b, %d local time types
37543>40	belong	0	\b, no abbreviation chars
37544>40	belong	1	\b, 1 abbreviation char
37545>40	belong	>1	\b, %d abbreviation chars
37546
375470	string	TZif	timezone data
37548>51	string	TZif	\b(slim)
37549>>51	use timezone
37550>51	default x	\b(fat)
37551>>0	use timezone
37552
375530	string	\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0	old timezone data
375540	string	\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0	old timezone data
375550	string  \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0	old timezone data
375560	string	\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\0	old timezone data
375570	string	\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0	old timezone data
375580	string	\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\0	old timezone data
37559
37560#------------------------------------------------------------------------------
37561# $File: tplink,v 1.7 2021/04/26 15:56:00 christos Exp $
37562# tplink: File magic for openwrt firmware files
37563
37564# URL: https://wiki.openwrt.org/doc/techref/header
37565# Reference: https://git.openwrt.org/?p=openwrt.git;a=blob;f=tools/firmware-utils/src/mktplinkfw.c
37566# From: Joerg Jenderek
37567# check for valid header version 1 or 2
375680		ulelong		<3
37569>0		ulelong		!0
37570# test for header padding with nulls
37571>>0x100		long		0
37572# skip Norton Commander Cleanup Utility NCCLEAN.INI by looking for valid vendor
37573>>>4		ubelong		>0x1F000000
37574# skip user.dbt by looking for positive hardware id
37575>>>>0x40	ubeshort	>0
37576>>>>>0		use		firmware-tplink
37577
375780		name		firmware-tplink
37579>0		ubyte		x		firmware
37580!:mime application/x-tplink-bin
37581!:ext	bin
37582# hardware id like 10430001 07410001 09410004 09410006
37583>0x40		ubeshort	x		%x
37584>0x42		ubeshort	x		v%x
37585# hardware revision like 1
37586>0x44		ubelong		!1		(revision %u)
37587# vendor_name[24] like OpenWrt or TP-LINK Technologies
37588>4		string		x		%.24s
37589# fw_version[36] like r49389 or ver. 1.0
37590>0x1c		string		x		%.36s
37591# header version 1 or 2
37592>0		ubyte		!1		V%X
37593# ver_hi.ver_mid.ver_lo
37594>0x98		long		!0		\b, version
37595>>0x98		ubeshort	x		%u
37596>>0x9A		ubeshort	x		\b.%u
37597>>0x9C		ubeshort	x		\b.%u
37598# region code 0~universal 1~US
37599>0x48		ubelong		x
37600#>>0x48		ubelong		0		(universal)
37601>>0x48		ubelong		1		(US)
37602>>0x48		ubelong		>1		(region %u)
37603# total length of the firmware. not always true
37604>0x7C		ubelong		x		\b, %u bytes or less
37605# unknown 1
37606>0x48		ubelong		!0		\b, UNKNOWN1 %#x
37607# md5sum1[16]
37608#>0x4c		ubequad		x		\b, MD5 %llx
37609#>>0x54		ubequad		x		\b%llx
37610# unknown 2
37611>0x5c		ubelong		!0		\b, UNKNOWN2 %#x
37612# md5sum2[16]
37613#>0x60		ubequad		!0		\b, 2nd MD5 %llx
37614#>>0x68		ubequad		x		\b%llx
37615# unknown 3
37616>0x70		ubelong		!0		\b, UNKNOWN3 %#x
37617# kernel load address
37618#>0x74		ubelong		x		\b, %#x load
37619# kernel entry point
37620#>0x78		ubelong		x		\b, %#x entry
37621# kernel data offset. 200h means direct after header
37622>0x80		ubelong		x		\b, at %#x
37623# kernel data length and 1 space
37624>0x84		ubelong		x		%u bytes
37625# look for kernel type (gzip compressed vmlinux.bin by ./compress)
37626>(0x80.L)	indirect	x
37627# root file system data offset
37628# WRONG in 5.35 with above indirect expression
37629>0x88		ubelong		x		\b, at %#x
37630# rootfs data length and 1 space
37631>0x8C		ubelong		x		%u bytes
37632# in 5.32 only true for offset ~< FILE_BYTES_MAX=9 MB defined in ../../src/file.h
37633>(0x88.L)	indirect	x
37634# 'qshs' for wr940nv1_en_3_13_7_up(111228).bin
37635#>(0x88.L)	string		x		\b, file system '%.4s'
37636#>(0x88.L)	ubequad		x		\b, file system %#llx
37637# bootloader data offset
37638>0x90		ubelong		!0		\b, at %#x
37639# bootloader data length only reasonable if bootloader offset not null
37640>>0x94		ubelong		!0		%u bytes
37641# pad[354] should be 354 null bytes.
37642#>0x9E		ubequad		!0		\b, padding %#llx
37643# But at 0x120 18 non null bytes in examples like
37644# wr940nv4_eu_3_16_9_up_boot(160620).bin
37645# wr940nv6_us_3_18_1_up_boot(171030).bin
37646#>0x120		ubequad		!0		\b, other padding %#llx
37647
37648#------------------------------------------------------------------------------
37649# $File: troff,v 1.13 2020/05/30 23:12:34 christos Exp $
37650# troff:  file(1) magic for *roff
37651#
37652# updated by Daniel Quinlan (quinlan@yggdrasil.com)
37653
37654# troff input
376550	search/1	.\\"		troff or preprocessor input text
37656!:mime	text/troff
376570	search/1	'\\"		troff or preprocessor input text
37658!:mime	text/troff
376590	search/1	'.\\"		troff or preprocessor input text
37660!:mime	text/troff
376610	search/1	\\"		troff or preprocessor input text
37662!:mime	text/troff
37663#0	search/1	'''		troff or preprocessor input text
37664#!:mime	text/troff
376650	regex/20l	\^\\.[A-Za-z][A-Za-z0-9][\ \t]	troff or preprocessor input text
37666!:mime	text/troff
376670	regex/20l	\^\\.[A-Za-z][A-Za-z0-9]$	troff or preprocessor input text
37668!:mime	text/troff
37669
37670# ditroff intermediate output text
376710	search/1	x\ T		ditroff output text
37672>4	search/1	cat		for the C/A/T phototypesetter
37673>4	search/1	ps		for PostScript
37674>4	search/1	dvi		for DVI
37675>4	search/1	ascii		for ASCII
37676>4	search/1	lj4		for LaserJet 4
37677>4	search/1	latin1		for ISO 8859-1 (Latin 1)
37678>4	search/1	X75		for xditview at 75dpi
37679>>7	search/1	-12		(12pt)
37680>4	search/1	X100		for xditview at 100dpi
37681>>8	search/1	-12		(12pt)
37682
37683# output data formats
376840	string		\100\357	very old (C/A/T) troff output data
37685
37686#------------------------------------------------------------------------------
37687# $File: tuxedo,v 1.4 2009/09/19 16:28:13 christos Exp $
37688# tuxedo:	file(1) magic for BEA TUXEDO data files
37689#
37690# from Ian Springer <ispringer@hotmail.com>
37691#
376920	string		\0\0\1\236\0\0\0\0\0\0\0\0\0\0\0\0	BEA TUXEDO DES mask data
37693
37694#------------------------------------------------------------------------------
37695# $File: typeset,v 1.8 2009/09/19 16:28:13 christos Exp $
37696# typeset:  file(1) magic for other typesetting
37697#
376980	string		Interpress/Xerox	Xerox InterPress data
37699>16	string		/			(version
37700>>17	string		>\0			%s)
37701
37702#------------------------------------------------------------------------------
37703# $File: uf2,v 1.3 2021/04/28 01:00:31 christos Exp $
37704# uf2:  file(1) magic for UF2 firmware image files
37705#
37706# https://github.com/microsoft/uf2
37707#
37708# Created by Blake Ramsdell <blaker@gmail.com>
37709
377100	string	UF2\n		UF2 firmware image
37711!:ext uf2
37712# This is for checking the other magic numbers, do we want to do that?
37713#>4	lelong	0x9E5D5157	howdy
37714#>>508	lelong	0x0AB16F30	doody
37715>8	lelong	&0x0001		\b, not main flash
37716>8	lelong	&0x1000		\b, file container
37717>8	lelong	&0x2000		\b, family
37718
37719# To update the UF2 family data, use this fine command
37720#
37721# families=`curl \
37722# https://raw.githubusercontent.com/microsoft/uf2/master/utils/uf2families.json \
37723# | jq -r '.[] | ">>28\tlelong\t\(.id)\t\(.description)"' | sort -n -k 3` && \
37724# perl -0777 -i -pe \
37725# "s/(### BEGIN UF2 FAMILIES\\n).*(\\n### END UF2 FAMILIES)/\$1$families\$2/s" \
37726# uf2
37727
37728### BEGIN UF2 FAMILIES
37729>>28	lelong	0x00ff6919	ST STM32L4xx
37730>>28	lelong	0x04240bdf	ST STM32L5xx
37731>>28	lelong	0x16573617	Microchip (Atmel) ATmega32
37732>>28	lelong	0x1851780a	Microchip (Atmel) SAML21
37733>>28	lelong	0x1b57745f	Nordic NRF52
37734>>28	lelong	0x1c5f21b0	ESP32
37735>>28	lelong	0x1e1f432d	ST STM32L1xx
37736>>28	lelong	0x202e3a91	ST STM32L0xx
37737>>28	lelong	0x21460ff0	ST STM32WLxx
37738>>28	lelong	0x2abc77ec	NXP LPC55xx
37739>>28	lelong	0x300f5633	ST STM32G0xx
37740>>28	lelong	0x31d228c6	GD32F350
37741>>28	lelong	0x4c71240a	ST STM32G4xx
37742>>28	lelong	0x4fb2d5bd	NXP i.MX RT10XX
37743>>28	lelong	0x53b80f00	ST STM32F7xx
37744>>28	lelong	0x55114460	Microchip (Atmel) SAMD51
37745>>28	lelong	0x57755a57	ST STM32F401
37746>>28	lelong	0x5a18069b	Cypress FX2
37747>>28	lelong	0x5d1a0a2e	ST STM32F2xx
37748>>28	lelong	0x5ee21072	ST STM32F103
37749>>28	lelong	0x647824b6	ST STM32F0xx
37750>>28	lelong	0x68ed2b88	Microchip (Atmel) SAMD21
37751>>28	lelong	0x6b846188	ST STM32F3xx
37752>>28	lelong	0x6d0922fa	ST STM32F407
37753>>28	lelong	0x6db66082	ST STM32H7xx
37754>>28	lelong	0x70d16653	ST STM32WBxx
37755>>28	lelong	0x7eab61ed	ESP8266
37756>>28	lelong	0x7f83e793	NXP KL32L2x
37757>>28	lelong	0x8fb060fe	ST STM32F407VG
37758>>28	lelong	0xada52840	Nordic NRF52840
37759>>28	lelong	0xbfdd4eee	ESP32-S2
37760>>28	lelong	0xc47e5767	ESP32-S3
37761>>28	lelong	0xd42ba06c	ESP32-C3
37762>>28	lelong	0xe48bff56	Raspberry Pi RP2040
37763### END UF2 FAMILIES
37764
37765>>28	default	x
37766>>>28	lelong	x		%#08x
37767>8	lelong&0x2000	0	\b, file size
37768>>28	lelong	x		%#08x
37769>8	lelong	&0x4000		\b, MD5 checksum present
37770>8	lelong	&0x8000		\b, extension tags present
37771>12	lelong	x 		\b, address %#08x
37772>24	lelong	x		\b, %u total blocks
37773
37774#------------------------------------------------------------------------------
37775# $File: unicode,v 1.7 2019/02/19 20:34:42 christos Exp $
37776# Unicode:  BOM prefixed text files - Adrian Havill <havill@turbolinux.co.jp>
37777# These types are recognised in file_ascmagic so these encodings can be
37778# treated by text patterns.  Missing types are already dealt with internally.
37779#
377800	string	+/v8			Unicode text, UTF-7
377810	string	+/v9			Unicode text, UTF-7
377820	string	+/v+			Unicode text, UTF-7
377830	string	+/v/			Unicode text, UTF-7
377840	string	\335\163\146\163	Unicode text, UTF-8-EBCDIC
377850	string	\000\000\376\377	Unicode text, UTF-32, big-endian
377860	string	\377\376\000\000	Unicode text, UTF-32, little-endian
377870	string	\016\376\377		Unicode text, SCSU (Standard Compression Scheme for Unicode)
37788
37789#------------------------------------------------------------------------------
37790# $File: unisig,v 1.1 2020/04/09 19:05:44 christos Exp $
37791# unisig:  file(1) magic for files carrying a uniform signature (Unisig)
37792# From: Lassi Kortela, John Cowan
37793# URL:	https://github.com/unisig
37794#
377950	string	\xDC\xDC\x0D\x0A\x1A\x0A\x00	Unisig:
37796>7	ubyte	=0				UUID
37797>>8	guid	x				%s
37798>7	ubyte	>0				URI
37799>>7	pstring x				%s
37800
37801#------------------------------------------------------------------------------
37802# $File: unknown,v 1.8 2013/01/09 22:37:24 christos Exp $
37803# unknown:  file(1) magic for unknown machines
37804#
37805# 0x107 is 0407, 0x108 is 0410, and 0x109 is 0411; those are all PDP-11
37806# (executable, pure, and split I&D, respectively), but the PDP-11 version
37807# doesn't have the "version %ld", which may be a bogus COFFism (I don't
37808# think there was ever COFF for the PDP-11).
37809#
37810# 0x10B is 0413; that's VAX demand-paged, but this is a short, not a
37811# long, as it would be on a VAX.  In any case, that could collide with
37812# VAX demand-paged files, as the magic number is little-endian on those
37813# binaries, so the first 16 bits of the file would contain 0x10B.
37814#
37815# Therefore, those entries are commented out.
37816#
37817# 0x10C is 0414 and 0x10E is 0416; those *are* unknown.
37818#
37819#0	short		0x107		unknown machine executable
37820#>8	short		>0		not stripped
37821#>15	byte		>0		- version %ld
37822#0	short		0x108		unknown pure executable
37823#>8	short		>0		not stripped
37824#>15	byte		>0		- version %ld
37825#0	short		0x109		PDP-11 separate I&D
37826#>8	short		>0		not stripped
37827#>15	byte		>0		- version %ld
37828#0	short		0x10b		unknown pure executable
37829#>8	short		>0		not stripped
37830#>15	byte		>0		- version %ld
378310	long		0x10c		unknown demand paged pure executable
37832>16	long		>0		not stripped
378330	long		0x10e		unknown readable demand paged pure executable
37834
37835#------------------------------------------------------------------------------
37836# $File: usd,v 1.2 2020/05/21 22:17:00 christos Exp $
37837#
37838# From Christian Schmidbauer
37839#
37840# https://github.com/PixarAnimationStudios/USD
37841
37842# USD crate file
37843# https://github.com/PixarAnimationStudios/USD/blob/ebac0a8b6703f4fa1c27115f1f013bb9819662f4/pxr/usd/usd/crateFile.h#L441-L450
378440	string		PXR-USDC	USD crate
37845>8	byte		x		\b, version %x.
37846>9	byte		x		\b%x.
37847>10	byte		x		\b%x
37848!:ext	usd
37849
37850# USD ASCII file
378510	string		#usda\040	USD ASCII
37852>6	string		x		\b, version %s
37853!:mime	text/plain
37854!:ext	usd
37855
37856#------------------------------------------------------------------------------
37857# $File: uterus,v 1.3 2014/04/30 21:41:02 christos Exp $
37858# file(1) magic for uterus files
37859# http://freecode.com/projects/uterus
37860#
378610	string		UTE+	uterus file
37862>4	string		v	\b, version
37863>5	byte		x	%c
37864>6	string		.	\b.
37865>7	byte		x	\b%c
37866>8	string		\<\>	\b, big-endian
37867>>16	belong		>0	\b, slut size %u
37868>8	string		\>\<	\b, litte-endian
37869>>16	lelong		>0	\b, slut size %u
37870>10	byte		&8	\b, compressed
37871
37872#------------------------------------------------------------------------------
37873# $File: uuencode,v 1.9 2021/11/13 17:48:10 christos Exp $
37874# uuencode:  file(1) magic for ASCII-encoded files
37875#
37876
37877# The first line of xxencoded files is identical to that in uuencoded files,
37878# but the first character in most subsequent lines is 'h' instead of 'M'.
37879# (xxencoding uses lowercase letters in place of most of uuencode's
37880# punctuation and survives BITNET gateways better.)
378810		regex/1024	\^begin\040[0-7]{3}\040
37882>&0		regex/256	[\012\015]+M[\040-\140]{60}[\012\015]+				uuencoded text
37883>&0		regex/256	[\012\015]+h[0-9A-Za-z\053\055]{60}[\012\015]+		xxencoded text
37884>&0		default		x													uuencoded or xxencoded text
37885>&0		string		>\0													\b, file name "%s"
37886
37887# btoa(1) is an alternative to uuencode that requires less space.
378880	search/1	xbtoa\ Begin	btoa'd text
37889
37890# ship(1) is another, much cooler alternative to uuencode.
37891# Greg Roelofs, newt@uchicago.edu
378920	search/1	$\012ship	ship'd binary text
37893
37894# bencode(8) is used to encode compressed news batches (Bnews/Cnews only?)
37895# Greg Roelofs, newt@uchicago.edu
378960	search/1	Decode\ the\ following\ with\ bdeco	bencoded News text
37897
37898# GRR: handle BASE64
37899
37900#------------------------------------------------------------------------------
37901# $File: vacuum-cleaner,v 1.1 2015/11/14 13:38:35 christos Exp $
37902# vacuum cleaner magic by Thomas M. Ott (ThMO)
37903#
37904# navigation map for LG robot vacuum cleaner models VR62xx, VR64xx, VR63xx
37905# file: MAPDATAyyyymmddhhmmss_xxxxxx_cc.blk
37906# -> yyyymmdd: year, month, day of cleaning
37907# -> hhmmss: hour, minute, second of cleaning
37908# -> xxxxxx: 6 digits
37909# -> cc: cleaning runs counter
37910# size: 136044 bytes
37911#
37912# struct maphdr {
37913#     int32_t  map_cnt;	     /*  0: single map */
37914#     int32_t  min_ceil;     /*  4: 100 mm == 10 cm == min. ceil */
37915#     int32_t  max_ceil;     /*  8: 10000 mm == 100 m == max. ceil */
37916#     int32_t  max_climb;    /* 12: 50 mm = 5 cm == max. height to climb */
37917#     int32_t  unknown;	     /* 16: 50000 ??? */
37918#     int32_t  cell_bytes;   /* 20: # of bytes for cells per block */
37919#     int32_t  block_max;    /* 24: 1000 == max. # of blocks */
37920#     int32_t  route_max;    /* 28: 1000 == max. # of routes */
37921#     int32_t  used_blocks;  /* 32: 5/45/33/... == # of block entries used! */
37922#     int32_t  cell_dim;     /* 36: 10 == cell dimension */
37923#     int32_t  clock_tick;   /* 40: 100 == clock ticks */
37924# #if	0
37925#     struct {		     /* 44: 1000 blocks for 10x10 cells */
37926#         int32_t  yoffset;
37927#         int32_t  xoffset;
37928#         int32_t  posxy;
37929#         int32_t  timecode;
37930#       }      blocks[ 1000];
37931#     char     cells[ 1000* 100]; /* 16044: 1000 10x10 cells */
37932#     int16_t  routes[ 1000* 10]; /* 116044: 1000 10-routes */
37933# #endif
37934#   };
37935
379360                lelong =1
37937>4               lelong =100
37938>>8              lelong =10000
37939>>>12            lelong =50
37940>>>>16           lelong =50000
37941>>>>>20          lelong =100
37942>>>>>>24         lelong =1000
37943>>>>>>>28        lelong =1000
37944>>>>>>>>36       lelong =10
37945>>>>>>>>>40      lelong =100
37946>>>>>>>>>>32     lelong x       LG robot VR6[234]xx %dm^2 navigation
37947>>>>>>>>>>136040 lelong =-1     reuse map data
37948>>>>>>>>>>136040 lelong =0      map data
37949>>>>>>>>>>136040 lelong >0      spurious map data
37950>>>>>>>>>>136040 lelong <-1     spurious map data
37951
37952
37953
37954#------------------------------------------------------------------------------
37955# $File: varied.out,v 1.23 2014/04/30 21:41:02 christos Exp $
37956# varied.out:  file(1) magic for various USG systems
37957#
37958#	Herewith many of the object file formats used by USG systems.
37959#	Most have been moved to files for a particular processor,
37960#	and deleted if they duplicate other entries.
37961#
379620	short		0610		Perkin-Elmer executable
37963# AMD 29K
379640	beshort		0572		amd 29k coff noprebar executable
379650	beshort		01572		amd 29k coff prebar executable
379660	beshort		0160007		amd 29k coff archive
37967# Cray
379686	beshort		0407		unicos (cray) executable
37969# Ultrix 4.3
37970596	string		\130\337\377\377	Ultrix core file
37971>600	string		>\0		from '%s'
37972# BeOS and MAcOS PEF executables
37973# From: hplus@zilker.net (Jon Watte)
379740	string		Joy!peffpwpc	header for PowerPC PEF executable
37975#
37976# ava assembler/linker Uros Platise <uros.platise@ijs.si>
379770       string          avaobj  AVR assembler object code
37978>7      string          >\0     version '%s'
37979# gnu gmon magic From: Eugen Dedu <dedu@ese-metz.fr>
379800	string		gmon		GNU prof performance data
37981>4	long		x		- version %d
37982# From: Dave Pearson <davep@davep.org>
37983# Harbour <URL:http://harbour-project.org/> HRB files.
379840	string		\xc0HRB		Harbour HRB file
37985>4	leshort		x		version %d
37986# Harbour HBV files
379870	string		\xc0HBV		Harbour variable dump file
37988>4	leshort		x		version %d
37989
37990# From: Alex Beregszaszi <alex@fsn.hu>
37991# 0	string		exec 		BugOS executable
37992# 0	string		pack		BugOS archive
37993
37994# From: Jason Spence <jspence@lightconsulting.com>
37995# Generated by the "examples" in STM's ST40 devkit, and derived code.
379960	lelong		0x13a9f17e	ST40 component image format
37997>4	string		>\0		\b, name '%s'
37998
37999#------------------------------------------------------------------------------
38000# $File: varied.script,v 1.13 2019/10/11 14:35:29 christos Exp $
38001# varied.script:  file(1) magic for various interpreter scripts
38002
380030	string/t		#!\ /			a
38004>3	string		>\0			%s script text executable
38005!:strength / 2
38006
380070	string/b		#!\ /			a
38008>3	string		>\0			%s script executable (binary data)
38009!:strength / 2
38010
380110	string/t		#!\t/			a
38012>3	string		>\0			%s script text executable
38013!:strength / 2
38014
380150	string/b		#!\t/			a
38016>3	string		>\0			%s script executable (binary data)
38017!:strength / 2
38018
380190	string/t		#!/			a
38020>2	string		>\0			%s script text executable
38021!:strength / 2
38022
380230	string/b		#!/			a
38024>2	string		>\0			%s script executable (binary data)
38025!:strength / 2
38026
380270	string/t		#!\ 			script text executable
38028>3	string		>\0			for %s
38029!:strength / 2
38030
380310	string/b		#!\ 			script executable
38032>3	string		>\0			for %s (binary data)
38033!:strength / 2
38034
38035# using env
380360	string/t	#!/usr/bin/env		a
38037>15	string/t	>\0			%s script text executable
38038!:strength / 10
38039
380400	string/b	#!/usr/bin/env		a
38041>15	string/b	>\0			%s script executable (binary data)
38042!:strength / 10
38043
380440	string/t	#!\ /usr/bin/env	a
38045>16	string/t	>\0			%s script text executable
38046!:strength / 10
38047
380480	string/b	#!\ /usr/bin/env	a
38049>16	string/b	>\0			%s script executable (binary data)
38050!:strength / 10
38051
38052# From: arno <arenevier@fdn.fr>
38053# mozilla xpconnect typelib
38054# see https://www.mozilla.org/scriptable/typelib_file.html
380550	string 		XPCOM\nTypeLib\r\n\032		XPConnect Typelib
38056>0x10  byte        x       version %d
38057>>0x11 byte        x      \b.%d
38058
38059#------------------------------------------------------------------------------
38060# $File: vax,v 1.10 2019/10/04 18:07:46 christos Exp $
38061# vax:  file(1) magic for VAX executable/object and APL workspace
38062#
380630	lelong		0101557		VAX single precision APL workspace
380640	lelong		0101556		VAX double precision APL workspace
38065
38066#
38067# VAX a.out (BSD; others collide with 386 and other 32-bit little-endian
38068# executables, and are handled in aout)
38069#
380700	lelong		0420		a.out VAX demand paged (first page unmapped) pure executable
38071>16	lelong		>0		not stripped
38072
38073#
38074# VAX COFF
38075#
38076# The `versions' were commented out, but have been un-commented out.
38077# (Was the problem just one of endianness?)
38078#
380790	leshort		0570
38080>2	uleshort	<100		VAX COFF executable, sections %d
38081>>4	ledate		x		\b, created %s
38082>>12	lelong		>0		\b, not stripped
38083>>22	leshort		>0		\b, version %d
38084
380850	leshort		0575
38086>2	uleshort	<100		VAX COFF pure executable, sections %d
38087>>4	ledate		x		\b, created %s
38088>>12	lelong		>0		\b, not stripped
38089>>22	leshort		>0		\b, version %d
38090
38091#------------------------------------------------------------------------------
38092# $File: vicar,v 1.4 2009/09/19 16:28:13 christos Exp $
38093# vicar:  file(1) magic for VICAR files.
38094#
38095# From: Ossama Othman <othman@astrosun.tn.cornell.edu
38096# VICAR is JPL's in-house spacecraft image processing program
38097# VICAR image
380980	string	LBLSIZE=	VICAR image data
38099>32	string	BYTE		\b, 8 bits  = VAX byte
38100>32	string	HALF		\b, 16 bits = VAX word     = Fortran INTEGER*2
38101>32	string	FULL		\b, 32 bits = VAX longword = Fortran INTEGER*4
38102>32	string	REAL		\b, 32 bits = VAX longword = Fortran REAL*4
38103>32	string	DOUB		\b, 64 bits = VAX quadword = Fortran REAL*8
38104>32	string	COMPLEX		\b, 64 bits = VAX quadword = Fortran COMPLEX*8
38105# VICAR label file
3810643	string	SFDU_LABEL	VICAR label file
38107
38108#------------------------------------------------------------------------------
38109# $File: virtual,v 1.17 2022/08/23 08:00:54 christos Exp $
38110# From: James Nobis <quel@quelrod.net>
38111# Microsoft hard disk images for:
38112# Virtual Server
38113# Virtual PC
38114# VirtualBox
38115# URL: http://fileformats.archiveteam.org/wiki/VHD_(Virtual_Hard_Disk)
38116# Reference: https://download.microsoft.com/download/f/f/e/ffef50a5-07dd-4cf8-aaa3-442c0673a029/
38117# Virtual%20Hard%20Disk%20Format%20Spec_10_18_06.doc
381180	string	conectix	Microsoft Disk Image, Virtual Server or Virtual PC
38119# alternative shorter names
38120#0	string	conectix	Microsoft Virtual Hard Disk image
38121#0	string	conectix	Microsoft Virtual HD image
38122!:mime	application/x-virtualbox-vhd
38123!:ext   vhd
38124# Features is a bit field used to indicate specific feature support
38125#>8	ubelong		!0x00000002	\b, Features %#x
38126# Reserved. This bit must always be set to 1.
38127#>8	ubelong		&0x00000002	\b, Reserved %#x
38128# File Format Version for the current specification 0x00010000
38129#>12	ubelong		!0x00010000	\b, Version %#8.8x
38130# Data Offset only found 0x200
38131#>16	ubequad		!0x200		\b, Data Offset %#llx
38132#>16	ubequad		x		\b, at %#llx
38133# Dynamic Disk Header cookie like cxsparse
38134#>(16.Q)	string		x		"%-.8s"
38135# This field contains a Unicode string (UTF-16) of the parent hard disk filename
38136#>(16.Q+64)	ubequad	x		\b, parent name %#llx
38137# Creator Application
38138# vpc~Microsoft Virtual PC, vs~Microsoft Virtual Server, vbox~VirtualBox, d2v~disk2vhd
38139>28	string		x		\b, Creator %-4.4s
38140# Creator Version: 0x00010000~Virtual Server 2004, 0x00050000~Virtual PC 2004
38141# holds the major/minor version of the application that created the image
38142>32	ubeshort	x		%x
38143>34	ubeshort	x		\b.%x
38144#>32	ubelong		x		\b, Version %#8.8x
38145# Creator Host OS: 0x5769326B~Windows (Wi2k), 0x4D616320~Macintosh (Mac)
38146>36	ubelong		x		(
38147>>36	ubelong		0x5769326B	\bW2k
38148>>36	ubelong		0x4D616320	\bMac
38149>>36	default		x		\b0x
38150>>>36	ubelong		x		\b%8.8x
38151# creation Time in seconds since 1 Jan 2000 UTC~946684800 sec. since Unix Epoch
38152>24	bedate+946684800	x	\b) %s
38153# Original Size
38154#>40	ubequad		x		\b, o.-Size %#llx
38155# Current Size is same as original size, but change when disk is expanded
38156#>48	ubequad		x		\b, Size %#llx
38157>48	ubequad		x		\b, %llu bytes
38158# Disk Geometry: cylinder, heads, and sectors/track for hard disk
38159#>56	ubeshort	x		\b, Cylinder %#x
38160>56	ubeshort	x		\b, CHS %u
38161# Heads
38162#>58	ubyte		x		\b, Heads %#x
38163>58	ubyte		x		\b/%u
38164# Sectors per track
38165#>59	ubyte		x		\b, Sectors %#x
38166>59	ubyte		x		\b/%u
38167# Disk Type: 3~Dynamic hard disk
38168>60	ubelong		!0x3		\b, type %#x
38169# Checksum
38170#>64	ubelong		x		\b, cksum %#x
38171# universally unique identifier (UUID) to associate a parent with its differencing image
38172#>68	ubequad		x		\b, id %#16.16llx
38173#>76	ubequad		x		\b-%16.16llx
38174# Saved State: 1~Saved State
38175>84	ubyte		!0		\b, State %#x
38176# Reserved 427 bytes with nils
38177#>85	ubequad	!0			\b, Reserved %#16.16llx
38178
38179# From: Joerg Jenderek
38180# URL: https://msdn.microsoft.com/en-us/library/mt740058.aspx
38181# Reference: https://winprotocoldoc.blob.core.windows.net/productionwindowsarchives/
38182# MS-VHDX/[MS-VHDX].pdf
38183# Note: extends the VHD format with new capabilities, such as a 16TB maximum size
38184# TODO:	find and display values like virtual size, disk size, cluster_size, etc
38185#	display id in GUID format
38186#
38187# VHDX_FILE_IDENTIFIER signature 0x656C696678646876
381880	string			vhdxfile
38189# VHDX_HEADER signature. 1 header is stored at offset 64KB and the other at 128KB
38190>0x10000	string		head		Microsoft Disk Image eXtended
38191#>0x20000	string			head	\b, 2nd header
38192#!:mime	application/x-virtualbox-vhdx
38193!:ext	vhdx
38194# Creator[256] like "QEMU v3.0.0", "Microsoft Windows 6.3.9600.18512"
38195>>8		lestring16		x	\b, by %.256s
38196# The Checksum field is a CRC-32C hash over the entire 4 KB structure
38197#>>0x10004	ulelong			x	\b, CRC %#x
38198# SequenceNumber
38199>>0x10008	ulequad			x	\b, sequence %#llx
38200# FileWriteGuid
38201#>>0x10010	ubequad			x	\b, file id %#llx
38202#>>>0x10018	ubequad			x	\b-%llx
38203# DataWriteGuid
38204#>>0x10020	ubequad			x	\b, data id %#llx
38205#>>>0x10028	ubequad			x	\b-%llx
38206# LogGuid. If this field is zero, then the log is empty or has no valid entries
38207>>0x10030	ubequad			>0	\b, log id %#llx
38208>>>0x10038	ubequad			x	\b-%llx
38209# LogVersion. If not 0 there is a log to replay
38210>>0x10040	uleshort		>0	\b, LogVersion %#x
38211# Version. This field must be set to 1
38212>>0x10042	uleshort		!1	\b, Version %#x
38213# LogLength must be multiples of 1 MB
38214>>0x10044	ulelong/1048576		>1	\b, LogLength %u MB
38215# LogOffset (normally 0x100000 when log direct after header); multiples of 1 MB
38216>>0x10048	ulequad			!0x100000 \b, LogOffset %#llx
38217# Log Entry Signature must be 0x65676F6C~loge
38218>>(0x10048.q)	ulelong			!0x65676F6C \b, NO Log Signature
38219>>(0x10048.q)	ulelong			=0x65676F6C	\b; LOG
38220# Log Entry Checksum
38221#>>>(0x10048.q+4)	ulelong		x	\b, Log CRC %#x
38222# Log Entry Length must be a multiple of 4 KB
38223>>>(0x10048.q+8)	ulelong/1024	>4	\b, EntryLength %u KB
38224# Log Entry Tail must be a multiple of 4 KB
38225#>>>(0x10048.q+12)	ulelong		x	\b, Tail %#x
38226# Log Entry SequenceNumber
38227#>>>(0x10048.q+16)	ulequad		x	\b, # %#llx
38228# Log Entry DescriptorCount may be zero. only 4 bytes in other docs instead 8
38229#>>>(0x10048.q+24)	ulelong		x	\b, DescriptorCount %#llx
38230# Log Entry Reserved must be set to 0
38231>>>(0x10048.q+28)	ulelong		!0	\b, Reserved %#x
38232# Log Entry LogGuid
38233#>>>(0x10048.q+32)	ubequad		x	\b, Log id %#llx
38234#>>>(0x10048.q+40)	ubequad		x	\b-%llx
38235# Log Entry FlushedFileOffset should VHDX size when entry is written.
38236#>>>(0x10048.q+48)	ulequad		x	\b, FlushedFileOffset %llu
38237# Log Entry LastFileOffset
38238#>>>(0x10048.q+56)	ulequad		x	\b, LastFileOffset %llu
38239# filling
38240#>>>(0x10048.q+64)	ulequad		>0	\b, filling %llx
38241# Reserved[4016]
38242#>>0x10050	ulequad			>0	\b, Reserved %#llx
38243# VHDX_REGION_TABLE_HEADER Signature 0x69676572~regi at offset 192 KB and 256 KB
38244>0x30000	ulelong			!0x69676572 \b, 1st region INVALID
38245>0x30000	ulelong			=0x69676572 \b; region
38246# region Checksum. CRC-32C hash over the entire 64-KB table
38247#>>0x30004	ulelong			x	\b, CRC %#x
38248# The EntryCount specifies number of valid entries; Found 2; This must be =< 2047.
38249>>0x30008	ulelong			x	\b, %u entries
38250# reserved must be zero
38251#>>0x3000C	ulelong			!0	\b, RESERVED %#x
38252# Region Table Entry starts with identifier for the object. often BAT id
38253>>0x30010	use			vhdx-id
38254# FileOffset
38255>>0x30020	ulequad		x		\b, at %#llx
38256# Length. Specifies the length of the object within the file
38257#>>0x30028	ulelong		x		\b, Length %#x
38258# 1 means region entry is required. if region not recognized, then REFUSE to load VHDX
38259>>0x3002C	ulelong		x		\b, Required %u
38260# 2nd region entry often metadata id
38261>>0x30030	use			vhdx-id
38262# 2nd entry FileOffset
38263>>0x30040	ulequad		x		\b, at %#llx
38264# 1 means region entry is required. if region not recognized, then REFUSE to load VHDX
38265>>0x3004C	ulelong		x		\b, Required %u
38266# 2nd region
38267>>0x40000	ulelong		!0x69676572	\b, 2nd region INVALID
38268# check in vhdx images for known id and show names instead hexadecimal
382690	name		vhdx-id
38270# https://www.windowstricks.in/online-windows-guid-converter
38271# 2DC27766-F623-4200-9D64-115E9BFD4A08		BAT GUID
38272# 6677C22D23F600429D64115E9BFD4A08		BAT ID
38273>0	ubequad		=0x6677C22D23F60042
38274>>8	ubequad		=0x9D64115E9BFD4A08	\b, id BAT
38275# no BAT id
38276>>8	default		x
38277>>>0	use		vhdx-id-hex
38278# 8B7CA206-4790-4B9A-B8FE-575F050F886E		Metadata region GUID
38279# 06A27C8B90479A4BB8FE575F050F886E		Metadata region ID
38280>0	ubequad		=0x06A27C8B90479A4B
38281>>8	ubequad		=0xB8FE575F050F886E	\b, id Metadata
38282# no Metadata id
38283>>8	default		x
38284>>>0	use		vhdx-id-hex
38285# 2FA54224-CD1B-4876-B211-5DBED83BF4B8		Virtual Disk Size GUID
38286# 2442A52F1BCD7648B2115DBED83BF4B8		Virtual Disk Size ID
38287# value "virtual size" can be verified by command `qemu-img info `
38288>0	ubequad		=0x2442A52F1BCD7648
38289>>8	ubequad		=0xB2115DBED83BF4B8	\b, id vsize
38290# no Virtual Disk Size ID
38291>>8	default		x
38292>>>0	use		vhdx-id-hex
38293# other ids
38294>0	default		x
38295>>0	use		vhdx-id-hex
38296# in vhdx images show id as hexadecimal
382970	name		vhdx-id-hex
38298>0	ubequad		x			\b, ID %#16.16llx
38299>8	ubequad		x			\b-%16.16llx
38300#
38301# libvirt
38302# From: Philipp Hahn <hahn@univention.de>
383030	string	LibvirtQemudSave	Libvirt QEMU Suspend Image
38304>0x10	lelong	x	\b, version %u
38305>0x14	lelong	x	\b, XML length %u
38306>0x18	lelong	1	\b, running
38307>0x1c	lelong	1	\b, compressed
38308
383090	string	LibvirtQemudPart	Libvirt QEMU partial Suspend Image
38310# From: Alex Beregszaszi <alex@fsn.hu>
383110	string/b	COWD		VMWare3
38312>4	byte	3		disk image
38313>>32	lelong	x		(%d/
38314>>36	lelong	x		\b%d/
38315>>40	lelong	x		\b%d)
38316>4	byte	2		undoable disk image
38317>>32	string	>\0		(%s)
38318
383190	string/b	VMDK		 VMware4 disk image
383200	string/b	KDMV		 VMware4 disk image
38321
38322#--------------------------------------------------------------------
38323# Qemu Emulator Images
38324# Lines written by Friedrich Schwittay (f.schwittay@yousable.de)
38325# Updated by Adam Buchbinder (adam.buchbinder@gmail.com)
38326# Made by reading sources, reading documentation, and doing trial and error
38327# on existing QCOW files
383280	string/b	QFI\xFB	QEMU QCOW Image
38329!:mime	application/x-qemu-disk
38330
38331# Uncomment the following line to display Magic (only used for debugging
38332# this magic number)
38333#>0	string/b	x	, Magic: %s
38334
38335# There are currently 2 Versions: "1" and "2".
38336# https://www.gnome.org/~markmc/qcow-image-format-version-1.html
38337>4	belong		x	(v%d)
38338
38339# Using the existence of the Backing File Offset to determine whether
38340# to read Backing File Information
38341>>12	belong	 >0	 \b, has backing file (
38342# Note that this isn't a null-terminated string; the length is actually
38343# (16.L). Assuming a null-terminated string happens to work usually, but it
38344# may spew junk until it reaches a \0 in some cases.
38345>>>(12.L)	 string >\0	\bpath %s
38346
38347# Modification time of the Backing File
38348# Really useful if you want to know if your backing
38349# file is still usable together with this image
38350>>>>20	bedate >0	\b, mtime %s)
38351>>>>20	default x	\b)
38352
38353# Size is stored in bytes in a big-endian u64.
38354>>24	bequad	x	 \b, %lld bytes
38355
38356# 1 for AES encryption, 0 for none.
38357>>36	belong	1	\b, AES-encrypted
38358
38359# https://www.gnome.org/~markmc/qcow-image-format.html
38360>4	belong	2	(v2)
38361# Using the existence of the Backing File Offset to determine whether
38362# to read Backing File Information
38363>>8	bequad  >0	 \b, has backing file
38364# Note that this isn't a null-terminated string; the length is actually
38365# (16.L). Assuming a null-terminated string happens to work usually, but it
38366# may spew junk until it reaches a \0 in some cases. Also, since there's no
38367# .Q modifier, we just use the bottom four bytes as an offset. Note that if
38368# the file is over 4G, and the backing file path is stored after the first 4G,
38369# the wrong filename will be printed. (This should be (8.Q), when that syntax
38370# is introduced.)
38371>>>(12.L)	 string >\0	(path %s)
38372>>24	bequad	x	\b, %lld bytes
38373>>32	belong	1	\b, AES-encrypted
38374
38375>4	belong	3	(v3)
38376# Using the existence of the Backing File Offset to determine whether
38377# to read Backing File Information
38378>>8	bequad  >0	 \b, has backing file
38379# Note that this isn't a null-terminated string; the length is actually
38380# (16.L). Assuming a null-terminated string happens to work usually, but it
38381# may spew junk until it reaches a \0 in some cases. Also, since there's no
38382# .Q modifier, we just use the bottom four bytes as an offset. Note that if
38383# the file is over 4G, and the backing file path is stored after the first 4G,
38384# the wrong filename will be printed. (This should be (8.Q), when that syntax
38385# is introduced.)
38386>>>(12.L)	 string >\0	(path %s)
38387>>24	bequad	x	\b, %lld bytes
38388>>32	belong	1	\b, AES-encrypted
38389
38390>4	default x	(unknown version)
38391
383920	string/b	QEVM		QEMU suspend to disk image
38393
38394# QEMU QED Image
38395# https://wiki.qemu.org/Features/QED/Specification
383960	string/b	QED\0		QEMU QED Image
38397
38398# VDI Image
38399# Sun xVM VirtualBox Disk Image
38400# From: Richard W.M. Jones <rich@annexia.org>
38401# VirtualBox Disk Image
384020x40	ulelong		0xbeda107f	VirtualBox Disk Image
38403>0x44	uleshort	>0		\b, major %u
38404>0x46	uleshort	>0		\b, minor %u
38405>0	string		>\0		(%s)
38406>368	lequad		x		 \b, %lld bytes
38407
384080	string/b	Bochs\ Virtual\ HD\ Image	Bochs disk image,
38409>32	string	x				type %s,
38410>48	string	x				subtype %s
38411
384120	lelong	0x02468ace			Bochs Sparse disk image
38413
38414
38415#------------------------------------------------------------------------------
38416# $File: virtutech,v 1.4 2009/09/19 16:28:13 christos Exp $
38417# Virtutech Compressed Random Access File Format
38418#
38419# From <gustav@virtutech.com>
384200      string          \211\277\036\203        Virtutech CRAFF
38421>4     belong          x               v%d
38422>20    belong          0               uncompressed
38423>20    belong          1               bzipp2ed
38424>20    belong          2               gzipped
38425>24    belong          0               not clean
38426
38427#------------------------------------------------------------------------------
38428# $File: visx,v 1.5 2009/09/19 16:28:13 christos Exp $
38429# visx:  file(1) magic for Visx format files
38430#
384310	short		0x5555		VISX image file
38432>2	byte		0		(zero)
38433>2	byte		1		(unsigned char)
38434>2	byte		2		(short integer)
38435>2	byte		3		(float 32)
38436>2	byte		4		(float 64)
38437>2	byte		5		(signed char)
38438>2	byte		6		(bit-plane)
38439>2	byte		7		(classes)
38440>2	byte		8		(statistics)
38441>2	byte		10		(ascii text)
38442>2	byte		15		(image segments)
38443>2	byte		100		(image set)
38444>2	byte		101		(unsigned char vector)
38445>2	byte		102		(short integer vector)
38446>2	byte		103		(float 32 vector)
38447>2	byte		104		(float 64 vector)
38448>2	byte		105		(signed char vector)
38449>2	byte		106		(bit plane vector)
38450>2	byte		121		(feature vector)
38451>2	byte		122		(feature vector library)
38452>2	byte		124		(chain code)
38453>2	byte		126		(bit vector)
38454>2	byte		130		(graph)
38455>2	byte		131		(adjacency graph)
38456>2	byte		132		(adjacency graph library)
38457>2	string		.VISIX		(ascii text)
38458
38459#------------------------------------------------------------------------------
38460# $File: vms,v 1.10 2017/03/17 21:35:28 christos Exp $
38461# vms:  file(1) magic for VMS executables (experimental)
38462#
38463# VMS .exe formats, both VAX and AXP (Greg Roelofs, newt@uchicago.edu)
38464
38465# GRR 950122:  I'm just guessing on these, based on inspection of the headers
38466# of three executables each for Alpha and VAX architectures.  The VAX files
38467# all had headers similar to this:
38468#
38469#   00000  b0 00 30 00 44 00 60 00  00 00 00 00 30 32 30 35  ..0.D.`.....0205
38470#   00010  01 01 00 00 ff ff ff ff  ff ff ff ff 00 00 00 00  ................
38471#
384720	string	\xb0\0\x30\0	VMS VAX executable
38473>44032	string	PK\003\004	\b, Info-ZIP SFX archive v5.12 w/decryption
38474#
38475# The AXP files all looked like this, except that the byte at offset 0x22
38476# was 06 in some of them and 07 in others:
38477#
38478#   00000  03 00 00 00 00 00 00 00  ec 02 00 00 10 01 00 00  ................
38479#   00010  68 00 00 00 98 00 00 00  b8 00 00 00 00 00 00 00  h...............
38480#   00020  00 00 07 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
38481#   00030  00 00 00 00 01 00 00 00  00 00 00 00 00 00 00 00  ................
38482#   00040  00 00 00 00 ff ff ff ff  ff ff ff ff 02 00 00 00  ................
38483#
38484# GRR this test is still too general as it catches example adressen.dbt
384850	belong	0x03000000
38486>8	ubelong	0xec020000	VMS Alpha executable
38487>>75264	string	PK\003\004	\b, Info-ZIP SFX archive v5.12 w/decryption
38488
38489#------------------------------------------------------------------------------
38490# $File: vmware,v 1.8 2017/03/17 21:35:28 christos Exp $
38491# VMware specific files (deducted from version 1.1 and log file entries)
38492# Anthon van der Neut (anthon@mnt.org)
384930	belong	0x4d52564e	VMware nvram
38494
38495#------------------------------------------------------------------------------
38496# $File: vorbis,v 1.26 2020/08/22 18:30:55 christos Exp $
38497# vorbis:  file(1) magic for Ogg/Vorbis files
38498#
38499# From Felix von Leitner <leitner@fefe.de>
38500# Extended by Beni Cherniavsky <cben@crosswinds.net>
38501# Further extended by Greg Wooledge <greg@wooledge.org>
38502#
38503# Most (everything but the number of channels and bitrate) is commented
38504# out with `##' as it's not interesting to the average user.  The most
38505# probable things advanced users would want to uncomment are probably
38506# the number of comments and the encoder version.
38507#
38508# FIXME: The first match has been made a search, so that it can skip
38509# over prepended ID3 tags. This will work for MIME type detection, but
38510# won't work for detecting other properties of the file (they all need
38511# to be made relative to the search). In any case, if the file has ID3
38512# tags, the ID3 information will be printed, not the Ogg information,
38513# so until that's fixed, this doesn't matter.
38514# FIXME[2]: Disable the above for now, since search assumes text mode.
38515#
38516# --- Ogg Framing ---
38517#0		search/1000	OggS		Ogg data
385180		string	OggS		Ogg data
38519>4		byte		!0		UNKNOWN REVISION %u
38520##>4		byte		0		revision 0
38521>4		byte		0
38522##>>14		lelong		x		(Serial %lX)
38523# non-Vorbis content: FLAC (Free Lossless Audio Codec, http://flac.sourceforge.net)
38524>>28		string		\x7fFLAC	\b, FLAC audio
38525# non-Vorbis content: Theora
38526!:mime		audio/ogg
38527>>28		string		\x80theora	\b, Theora video
38528!:mime		video/ogg
38529# non-Vorbis content: Kate
38530>>28		string		\x80kate\0\0\0\0	\b, Kate (Karaoke and Text)
38531!:mime		application/ogg
38532>>>37		ubyte		x		v%u
38533>>>38		ubyte		x		\b.%u,
38534>>>40		byte		0		utf8 encoding,
38535>>>40		byte		!0		unknown character encoding,
38536>>>60		string		>\0		language %s,
38537>>>60		string		\0		no language set,
38538>>>76		string		>\0		category %s
38539>>>76		string		\0		no category set
38540# non-Vorbis content: Skeleton
38541>>28		string		fishead\0	\b, Skeleton
38542!:mime		video/ogg
38543>>>36		leshort		x		v%u
38544>>>40		leshort		x		\b.%u
38545# non-Vorbis content: Speex
38546>>28		string		Speex\ \ \ 	\b, Speex audio
38547!:mime		audio/ogg
38548# non-Vorbis content: OGM
38549>>28		string		\x01video\0\0\0	\b, OGM video
38550!:mime		video/ogg
38551>>>37		string/c	div3		(DivX 3)
38552>>>37		string/c	divx		(DivX 4)
38553>>>37		string/c	dx50		(DivX 5)
38554>>>37		string/c	xvid		(XviD)
38555# --- First vorbis packet - general header ---
38556>>28		string		\x01vorbis	\b, Vorbis audio,
38557!:mime		audio/ogg
38558>>>35		lelong		!0		UNKNOWN VERSION %u,
38559##>>>35		lelong		0		version 0,
38560>>>35		lelong		0
38561>>>>39		ubyte		1		mono,
38562>>>>39		ubyte		2		stereo,
38563>>>>39		ubyte		>2		%u channels,
38564>>>>40		lelong		x		%u Hz
38565# Minimal, nominal and maximal bitrates specified when encoding
38566>>>>48		string		<\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff	\b,
38567# The above tests if at least one of these is specified:
38568>>>>>52		lelong		!-1
38569# Vorbis RC2 has a bug which puts -1000 in the min/max bitrate fields
38570# instead of -1.
38571# Vorbis 1.0 uses 0 instead of -1.
38572>>>>>>52	lelong		!0
38573>>>>>>>52	lelong		!-1000
38574>>>>>>>>52	lelong		x		<%u
38575>>>>>48		lelong		!-1
38576>>>>>>48	lelong		x		~%u
38577>>>>>44		lelong		!-1
38578>>>>>>44	lelong		!-1000
38579>>>>>>>44	lelong		!0
38580>>>>>>>>44	lelong		x		>%u
38581>>>>>48		string		<\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff	bps
38582# -- Second vorbis header packet - the comments
38583# A kludge to read the vendor string.  It's a counted string, not a
38584# zero-terminated one, so file(1) can't read it in a generic way.
38585# libVorbis is the only one existing currently, so I detect specifically
38586# it.  The interesting value is the cvs date (8 digits decimal).
38587# Post-RC1 Ogg files have the second header packet (and thus the version)
38588# in a different place, so we must use an indirect offset.
38589>>>(84.b+85)		string		\x03vorbis
38590>>>>(84.b+96)		string/c	Xiphophorus\ libVorbis\ I	\b, created by: Xiphophorus libVorbis I
38591>>>>>(84.b+120)		string		>00000000
38592# Map to beta version numbers:
38593>>>>>>(84.b+120)	string		<20000508	(<beta1, prepublic)
38594>>>>>>(84.b+120)	string		20000508	(1.0 beta 1 or beta 2)
38595>>>>>>(84.b+120)	string		>20000508
38596>>>>>>>(84.b+120)	string		<20001031	(beta2-3)
38597>>>>>>(84.b+120)	string		20001031	(1.0 beta 3)
38598>>>>>>(84.b+120)	string		>20001031
38599>>>>>>>(84.b+120)	string		<20010225	(beta3-4)
38600>>>>>>(84.b+120)	string		20010225	(1.0 beta 4)
38601>>>>>>(84.b+120)	string		>20010225
38602>>>>>>>(84.b+120)	string		<20010615	(beta4-RC1)
38603>>>>>>(84.b+120)	string		20010615	(1.0 RC1)
38604>>>>>>(84.b+120)	string		20010813	(1.0 RC2)
38605>>>>>>(84.b+120)	string		20010816	(RC2 - Garf tuned v1)
38606>>>>>>(84.b+120)	string		20011014	(RC2 - Garf tuned v2)
38607>>>>>>(84.b+120)	string		20011217	(1.0 RC3)
38608>>>>>>(84.b+120)	string		20011231	(1.0 RC3)
38609# Some pre-1.0 CVS snapshots still had "Xiphphorus"...
38610>>>>>>(84.b+120)	string		>20011231	(pre-1.0 CVS)
38611# For the 1.0 release, Xiphophorus is replaced by Xiph.Org
38612>>>>(84.b+96)		string/c	Xiph.Org\ libVorbis\ I	\b, created by: Xiph.Org libVorbis I
38613>>>>>(84.b+117)		string		>00000000
38614>>>>>>(84.b+117)	string		<20020717	(pre-1.0 CVS)
38615>>>>>>(84.b+117)	string		20020717	(1.0)
38616>>>>>>(84.b+117)	string		20030909	(1.0.1)
38617>>>>>>(84.b+117)	string		20040629	(1.1.0 RC1)
38618>>>>>>(84.b+117)	string		20050304	(1.1.2)
38619>>>>>>(84.b+117)	string		20070622	(1.2.0)
38620>>>>>>(84.b+117)	string		20090624	(1.2.2)
38621>>>>>>(84.b+117)	string		20090709	(1.2.3)
38622>>>>>>(84.b+117)	string		20100325	(1.3.1)
38623>>>>>>(84.b+117)	string		20101101	(1.3.2)
38624>>>>>>(84.b+117)	string		20120203	(1.3.3)
38625>>>>>>(84.b+117)	string		20140122	(1.3.4)
38626>>>>>>(84.b+117)	string		20150105	(1.3.5)
38627
38628# non-Vorbis content: Opus https://tools.ietf.org/html/rfc7845#section-5
38629>>28		string		OpusHead	\b, Opus audio,
38630!:mime		audio/ogg
38631>>>36		ubyte		>0x0F		UNKNOWN VERSION %u,
38632>>>36		ubyte&0x0F	!0		version 0.%u,
38633>>>>46		ubyte		>1
38634>>>>>46		ubyte		!255		unknown channel mapping family %u,
38635>>>>>37		ubyte		x		%u channels
38636>>>>46		ubyte		0
38637>>>>>37		ubyte		1		mono
38638>>>>>37		ubyte		2		stereo
38639>>>>46		ubyte		1
38640>>>>>37		ubyte		1		mono
38641>>>>>37		ubyte		2		stereo
38642>>>>>37		ubyte		3		linear surround
38643>>>>>37		ubyte		4		quadraphonic
38644>>>>>37		ubyte		5		5.0 surround
38645>>>>>37		ubyte		6		5.1 surround
38646>>>>>37		ubyte		7		6.1 surround
38647>>>>>37		ubyte		8		7.1 surround
38648>>>>40		lelong		!0		\b, %u Hz (Input Sample Rate)
38649#------------------------------------------------------------------------------
38650# $File: vxl,v 1.4 2009/09/19 16:28:13 christos Exp $
38651# VXL: file(1) magic for VXL binary IO data files
38652#
38653# from Ian Scott <scottim@sf.net>
38654#
38655# VXL is a collection of C++ libraries for Computer Vision.
38656# See the vsl chapter in the VXL Book for more info
38657# http://www.isbe.man.ac.uk/public_vxl_doc/books/vxl/book.html
38658# http:/vxl.sf.net
38659
386602	lelong	0x472b2c4e	VXL data file,
38661>0	leshort	>0		schema version no %d
38662
38663#------------------------------------------------------------------------------
38664# $File: warc,v 1.4 2019/04/19 00:42:27 christos Exp $
38665# warc:  file(1) magic for WARC files
38666
386670	string	WARC/	WARC Archive
38668>5	string	x	version %.4s
38669!:mime application/warc
38670
38671#------------------------------------------------------------------------------
38672# Arc File Format from Internet Archive
38673# see https://www.archive.org/web/researcher/ArcFileFormat.php
386740      string          filedesc://     Internet Archive File
38675!:mime application/x-ia-arc
38676>11    search/256      \x0A    \b
38677>>&0   ubyte   >0      \b version %c
38678
38679#------------------------------------------------------------------------------
38680# weak:  file(1) magic for very weak magic entries, disabled by default
38681#
38682# These entries are so weak that they might interfere identification of
38683# other formats. Example include:
38684# - Only identify for 1 or 2 bytes
38685# - Match against very wide range of values
38686# - Match against generic word in some spoken languages (e.g. English)
38687
38688# Summary: Computer Graphics Metafile
38689# Extension: .cgm
38690#0	beshort&0xffe0	0x0020		binary Computer Graphics Metafile
38691#0	beshort		0x3020		character Computer Graphics Metafile
38692
38693#0	string		=!!		Bennet Yee's "face" format
38694
38695#------------------------------------------------------------------------------
38696# $File: web,v 1.1 2020/05/17 19:14:28 christos Exp $
38697
38698# http://www.rdfhdt.org/
38699# From Christoph Biedl
38700# http://www.rdfhdt.org/hdt-internals/
38701# https://github.com/rdfhdt/hdt-cpp
38702
387030	string	$HDT\x01 HDT file (binary compressed indexed RDF triples) type 1
38704!:mime application/vnd.hdt
38705!:ext hdt
38706#------------------------------------------------------------------------------
38707# $File: webassembly,v 1.4 2022/08/16 11:16:39 christos Exp $
38708# webassembly:  file(1) magic for WebAssembly modules
38709#
38710# WebAssembly is a virtual architecture developed by a W3C Community
38711# Group at https://webassembly.org/. The file extension is .wasm, and
38712# the MIME type is application/wasm.
38713#
38714# https://webassembly.org/docs/binary-encoding/ is the main
38715# document describing the binary format.
38716# From: Pip Cet <pipcet@gmail.com> and Joel Martin
38717
387180	string	\0asm	WebAssembly (wasm) binary module
38719>4	lelong	=1	version %#x (MVP)
38720!:mime  application/wasm
38721!:ext   wasm
38722>4	lelong	>1	version %#x
38723
38724#------------------------------------------------------------------------------
38725# $File: windows,v 1.46 2022/07/02 17:46:09 christos Exp $
38726# windows:  file(1) magic for Microsoft Windows
38727#
38728# This file is mainly reserved for files where programs
38729# using them are run almost always on MS Windows 3.x or
38730# above, or files only used exclusively in Windows OS,
38731# where there is no better category to allocate for.
38732# For example, even though WinZIP almost run on Windows
38733# only, it is better to treat them as "archive" instead.
38734# For format usable in DOS, such as generic executable
38735# format, please specify under "msdos" file.
38736#
38737
38738
38739# Summary: Outlook Express DBX file
38740# Created by: Christophe Monniez
38741# Update:	Joerg Jenderek
38742# URL:		http://fileformats.archiveteam.org/wiki/Outlook_Express_Database
38743# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/d/dbx.trid.xml
38744#		https://sourceforge.net/projects/ol2mbox/files/LibDBX/
38745#		v1.0.4/libdbx_1.0.4.tar.gz/FILE-FORMAT
38746# Note:		called "Outlook Express Database" by TrID and DROID via PUID fmt/838 fmt/839
38747#		and partly verified by `undbx --verbosity 4 Posteingang.dbx`
387480	string	\xCF\xAD\x12\xFE
38749# skip DROID fmt-838-signature-id-1193.dbx fmt-839-signature-id-1194.dbx by check for valid file size
38750>0x7C	ulelong	>0			MS Outlook Express DBX file
38751#!:mime		application/octet-stream
38752#!:mime		application/vnd.ms-outlook
38753!:mime		application/x-ms-dbx
38754!:ext	dbx
38755>>4	byte	=0xC5			\b, message database
38756>>4	byte	=0xC6			\b, folder database
38757>>4	byte	=0xC7			\b, account information
38758>>4	byte	=0x30			\b, offline database
38759# version like: 5.2 5.5 (typical)
38760>>20	ulequad	!0x0000000500000005	\b, version
38761# major version
38762>>>24	ulelong	x			%u
38763# minor version
38764>>>20	ulelong	x			\b.%u
38765# CLSID: 6F74FDC5-E366-11d1-9A4E-00C04FA309D4~Message 6F74FDC6-E366-11D1-9A4E-00C04FA309D4~Folder
38766# 26FE9D30-1A8F-11D2-AABF-006097D474C4~offline
38767#>>4	guid	x			\b, CLSID %s
38768# file size; total size of file; sometimes real size a little bit higher
38769>>0x7C	ulelong	x			\b, ~ %u bytes
38770# highest Email ID; the next email will have a number one higher than this
38771>>0x5c	ulelong	x			\b, highest ID %#x
38772# item count; number of items stored in this DBX file
38773>>0xC4	ulelong	x			\b, %u item
38774# plural s
38775>>0xC4	ulelong	!1			\bs
38776# index pointer; file offset pointing to a page of Data Indexes
38777>>0xE4	ulelong	>0			\b, index pointer %#x
38778
38779# From:		Joerg Jenderek
38780# URL:		http://fileformats.archiveteam.org/wiki/Nickfile
38781#		https://www.nirsoft.net/utils/outlook_nk2_edit.html
38782# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/n/nk2.trid.xml
38783#		https://github.com/libyal/libnk2/blob/main/documentation
38784#		Nickfile%20(NK2)%20format.asciidoc
38785# Note:		called "Outlook Nickfile" by TrID & TestDisk and
38786#		"Outlook Nickname File" by Microsoft Outlook and
38787#		"Outlook AutoComplete File" by Nirsoft NK2Edit
38788#		partly verfied by NK2Edit Raw Text Edit Mode
387890	ubelong		0x0DF0ADBA	MS Outlook Nickfile
38790#!:mime		application/octet-stream
38791#!:mime		application/vnd.ms-outlook
38792!:mime		application/x-ms-nickfile
38793!:ext	nk2/dat/bak
38794# nick is used by "older" Outlook; dat is used by "newer" Outlook (probably 2010 - 2016); bak is used for backup
38795#!:ext	nick/nk2/dat/bak
38796# Unknown; probably a version indicator like: 0000000Ah 0000000Ch
38797>4	ulelong		x		\b, probably version %u
38798# Unknown2; probably a version indicator like: 1 0
38799>8	ulelong		x		\b.%u
38800# number of rows (nickname or alias items) in file
38801>12	ulelong		x		\b, %u items
38802# number of item entries/columns/properties value like: 17h
38803>16	ulelong		x		\b, %u entries
38804# value type/property tag: 001Fh~4 bytes for data size of UTF-16 LE string
38805>20	uleshort	x		\b, value type %#4.4x
38806# entry type/property identifier: 6001h~PR_DOTSTUFF_STATE/PR_NICK_NAME_W
38807>22	uleshort	x		\b, entry type %#4.4x
38808# Reserved like: 0013FD90h
38809#>24	ulelong		x		\b, reserved %#8.8x
38810# value data array/Irrelevant Union like: 0000000004E31A80h
38811#>28	ulequad		x		\b, data %#16.16llx
38812# UTF-16
38813>20	uleshort	=0x001F
38814# unicode string bytes like: 2Ch
38815>>36	ulelong		x		\b, %u bytes
38816# unicode string value PT_UNICODE like: janesmith@contoso.org
38817>>40	lestring16	x		"%s"
38818
38819# Summary: Windows crash dump
38820# Extension: .dmp
38821# Created by: Andreas Schuster (https://computer.forensikblog.de/)
38822# Reference (1): https://computer.forensikblog.de/en/2008/02/64bit_magic.html
38823# Modified by (1): Abel Cheung (Avoid match with first 4 bytes only)
388240	string		PAGE
38825>4	string		DUMP		MS Windows 32bit crash dump
38826>>0x05c	byte            0		\b, no PAE
38827>>0x05c	byte            1		\b, PAE
38828>>0xf88	lelong		1		\b, full dump
38829>>0xf88	lelong		2		\b, kernel dump
38830>>0xf88	lelong		3		\b, small dump
38831>>0x068	lelong		x		\b, %d pages
38832>4	string		DU64		MS Windows 64bit crash dump
38833>>0xf98	lelong		1		\b, full dump
38834>>0xf98	lelong		2		\b, kernel dump
38835>>0xf98	lelong		3		\b, small dump
38836>>0x090	lequad		x		\b, %lld pages
38837
38838
38839# Summary: Vista Event Log
38840# Extension: .evtx
38841# Created by: Andreas Schuster (https://computer.forensikblog.de/)
38842# Reference (1): https://computer.forensikblog.de/en/2007/05/some_magic.html
388430	string		ElfFile\0	MS Windows Vista Event Log
38844>0x2a	leshort		x		\b, %d chunks
38845>>0x10	lelong		x		\b (no. %d in use)
38846>0x18	lelong		>1		\b, next record no. %d
38847>0x18	lelong		=1		\b, empty
38848>0x78	lelong		&1		\b, DIRTY
38849>0x78	lelong		&2		\b, FULL
38850
38851# Summary: Windows System Deployment Image
38852# Created by: Joerg Jenderek
38853# URL: http://en.wikipedia.org/wiki/System_Deployment_Image
38854# Reference: http://skolk.livejournal.com/1320.html
388550	string			$SDI
38856>4	string			0001		System Deployment Image
38857!:mime	application/x-ms-sdi
38858#!:mime	application/octet-stream
38859# \Boot\boot.sdi
38860!:ext	sdi
38861# MDBtype: 0~Unspecified 1~RAM 2~ROM
38862>>8	ulequad			!0		\b, MDBtype %#llx
38863# BootCodeOffset
38864>>16	ulequad			!0		\b, BootCodeOffset %#llx
38865# BootCodeSize
38866>>24	ulequad			!0		\b, BootCodeSize %#llx
38867# VendorID
38868>>32	ulequad			!0		\b, VendorID %#llx
38869# DeviceID
38870>>40	ulequad			!0		\b, DeviceID %#llx
38871# DeviceModel
38872>>48	ulequad			!0		\b, DeviceModel %#llx
38873>>>56	ulequad			!0		\b%llx
38874# DeviceRole
38875>>64	ulequad			!0		\b, DeviceRole %#llx
38876# Reserved1; reserved fields and gaps between BLOBs are padded with \0
38877#>>72	ulequad			!0		\b, Reserved1 %#llx
38878# RuntimeGUID
38879>>80	ulequad			!0		\b, RuntimeGUID %#llx
38880>>>88	ulequad			!0		\b%llx
38881# RuntimeOEMrev
38882>>96	ulequad			!0		\b, RuntimeOEMrev %#llx
38883# Reserved2
38884#>>104	ulequad			!0		\b, Reserved2 %#llx
38885# BLOB alignment value in pages, as specified in sdimgr /pack: 1~4K 2~8k
38886>>112	ulequad			!0		\b, PageAlignment %llu
38887# Reserved3[48]
38888#>>120	ulequad			!0		\b, Reserved3 %#llx
38889# SDI checksum 39h
38890>>0x1f8	ulequad			x		\b, checksum %#llx
38891# BLOBtype[8] \0-padded: PART, WIM , BOOT, LOAD, DISK
38892>>0x400	string			>\0		\b, type %-3.8s
38893# 0~non-filesystem 7~NTFS 6~BIGFAT
38894>>>0x420	ulequad		!0		(%#llx)
38895# ATTRibutes
38896>>>0x408	ulequad		!0		%#llx attributes
38897# Offset
38898>>>0x410	ulequad		x		at %#llx
38899# print 1 space after size and then handles NTFS boot sector by ./filesystems
38900>>>0x418	ulequad		>0		%llu bytes
38901>>>>(0x410.l)	indirect	x
38902# 2nd BLOB: WIM
38903>>0x440		string		>\0		\b, type %-3.8s
38904>>>0x428	ulequad		!0		(%#llx)
38905# ATTRibutes
38906>>>0x448	ulequad		!0		%#llx attributes
38907# Offset
38908>>>0x450	ulequad		x		at %#llx
38909>>>0x458	ulequad		>0		%llu bytes
38910>>>>(0x450.l)	indirect	x
38911# 3rd BLOB
38912>>0x480		string		>\0		\b, type %-3.8s
38913
38914# Summary:	Windows boot status log BOOTSTAT.DAT
38915# From:		Joerg Jenderek
38916# Reference:	https://www.geoffchappell.com/notes/windows/boot/bsd.htm
38917# Note:		mainly refers to older Windows Vista, sometimes
38918#		BOOTSTAT.DAT only contains nulls or invalid data
38919# checking for valid version below 5
389200		ulelong		<5
38921# skip many ISO images by checking for valid 64 KiB file size
38922>8		ulelong		=0x00010000
38923>>0		use		bootstat-dat
38924# display information of BOOTSTAT.DAT
389250	name		bootstat-dat
38926>0		ulelong		x		Windows boot log
38927#!:mime	application/octet-stream
38928!:mime	application/x-ms-dat
38929# BOOTSTAT.DAT in BOOT subdirectory
38930!:ext	dat
38931# apparently a version number: 2 for older like Vista, 3, 4 Windows 10
38932>0		ulelong		>2		\b, version %u
38933# apparently the size of the header: often 10h in older Windows, 14h, 18h
38934>4		ulelong		!0x10		\b, header size %#x
38935#>4		ulelong		!0x10		\b, header size %u
38936# apparently the size of the file: always 0x00010000~64KiB
38937# the file is acceptable to BOOTMGR only if it is exactly 64 KiB
38938>8		ulelong		!0x00010000	\b, file size %#x
38939# size of valid data, in bytes: C8h 50h 172h 5D5Ch
38940>0xc		ulelong		x		\b, %#x valid bytes
38941# skip header and jump to first bootstat entry and display information
38942>(0x4.l-1)	ubyte		x
38943>>&0		use		bootstat-entry
38944# jump to first entry again because pointer are bad after "use"
38945>(0x4.l-1)	ubyte		x
38946# by 1st entry size jump to 2nd entry and display information
38947>>&(&0x18.l-1)	ubyte		x
38948>>>&0		use		bootstat-entry
38949# jump to possible 3rd boot entry and display information
38950# >(0x4.l-1)	ubyte		x
38951# >>&(&0x18.l-1)	ubyte		x
38952# >>>&(&0x18.l-1)	ubyte		x
38953# >>>>&0		use		bootstat-entry
38954#	display BOOTSTAT.DAT entry
389550	name		bootstat-entry
38956#>0x00		ubequad		x		\b, ENTRY %16.16llx
38957# size of entry, in bytes: 40h(init) 78h(launced) 9Ch
38958#>0x18		ulelong		x		\b; entry size %u
38959>0x18		ulelong		x		\b; entry size %#x
38960# time stamp, in seconds
38961>0x00		ulelong		x		\b, %#x seconds
38962# always zero, significance unknown
38963>0x04		ulelong		!0		\b, not null %u
38964# GUID of event source; but empty if event source is BOOTMGR
38965>0x08		ubequad		!0		\b, GUID %#16.16llx
38966>>0x10		ubequad		x		\b%16.16llx
38967# severity code: 1~informational 3~errors
38968>0x1C		ulelong		!1		\b, severity %#x
38969# apparently a version number: 2
38970>0x20		ulelong		!2		\b, version %u
38971# event identifier 1~log file initialised 11h~boot application launched
38972#>0x24		ulelong		x		\b, event %#x
38973>0x24		ulelong		!1
38974>>0x24		ulelong		!0x11		\b, event %#x
38975# entry data; size depends on event identifier
38976#>0x28		ubequad		x		\b, data %#16.16llx
38977>0x24		ulelong		=0x1		\b, Init
38978# always 0, significance unknown
38979>>0x34		uleshort	!0		\b, not null %u
38980# always 7, significance unknown
38981>>0x36		uleshort	!7		\b, not seven %u
38982# year
38983>>0x28		uleshort	x		%u
38984# month
38985>>0x2A		uleshort	x		\b-%u
38986# day
38987>>0x2C		uleshort	x		\b-%u
38988# hour
38989>>0x2E		uleshort	x		%u
38990# minute
38991>>0x30		uleshort	x		\b:%u
38992# second
38993>>0x32		uleshort	x		\b:%u
38994# boot application launched
38995>0x24		ulelong		=0x11		\b, launched
38996# type of start: 0 normally, 1 or 2 maybe in a recovery sequence
38997>>0x38		uleshort	!0		\b, type %u
38998# pathname of boot application, as null-terminated Unicode string; typically
38999# \Windows\system32\winload.exe \Windows\system32\winload.efi
39000>>0x3C		lestring16	x		%s
39001
39002# Summary:	Windows Error Report text files
39003# URL:		https://en.wikipedia.org/wiki/Windows_Error_Reporting
39004# Reference:	https://www.nirsoft.net/utils/app_crash_view.html
39005# Created by:	Joerg Jenderek
39006# Note:		in directories	%ProgramData%\Microsoft\Windows\WER\{ReportArchive,ReportQueue}
39007#				%LOCALAPPDATA%\Microsoft\Windows\WER\{ReportArchive,ReportQueue}
390080	lestring16	Version=
39009>22	lestring16	EventType	Windows Error Report
39010!:mime	text/plain
39011# Report.wer
39012!:ext	wer
39013
39014# Summary: Windows 3.1 group files
39015# Extension: .grp
39016# Created by: unknown
390170	string		\120\115\103\103	MS Windows 3.1 group files
39018
39019
39020# Summary: Old format help files
39021# URL: https://en.wikipedia.org/wiki/WinHelp
39022# Reference: https://www.oocities.org/mwinterhoff/helpfile.htm
39023# Update: Joerg Jenderek
39024# Created by: Dirk Jagdmann <doj@cubic.org>
39025#
39026# check and then display version and date inside MS Windows HeLP file fragment
390270	name				help-ver-date
39028# look for Magic of SYSTEMHEADER
39029>0	leshort		0x036C
39030# version Major		1 for right file fragment
39031>>4	leshort		1		Windows
39032# print non empty string above to avoid error message
39033# Warning: Current entry does not yet have a description for adding a MIME type
39034!:mime	application/winhelp
39035!:ext	hlp
39036# version Minor of help file format is hint for windows version
39037>>>2	leshort		0x0F		3.x
39038>>>2	leshort		0x15		3.0
39039>>>2	leshort		0x21		3.1
39040>>>2	leshort		0x27		x.y
39041>>>2	leshort		0x33		95
39042>>>2	default		x		y.z
39043>>>>2	leshort		x		%#x
39044# to complete message string like "MS Windows 3.x help file"
39045>>>2	leshort		x		help
39046# GenDate often older than file creation date
39047>>>6	ldate		x		\b, %s
39048#
39049# Magic for HeLP files
390500	lelong		0x00035f3f
39051# ./windows (version 5.25) labeled the entry as "MS Windows 3.x help file"
39052# file header magic 0x293B at DirectoryStart+9
39053>(4.l+9)	uleshort	0x293B		MS
39054# look for @VERSION	bmf.. like IBMAVW.ANN
39055>>0xD4		string	=\x62\x6D\x66\x01\x00	Windows help annotation
39056!:mime	application/x-winhelp
39057!:ext	ann
39058>>0xD4		string	!\x62\x6D\x66\x01\x00
39059# "GID Help index" by TrID
39060>>>(4.l+0x65)	string	=|Pete			Windows help Global Index
39061!:mime	application/x-winhelp
39062!:ext	gid
39063# HeLP Bookmark or
39064# "Windows HELP File" by TrID
39065>>>(4.l+0x65)		string		!|Pete
39066# maybe there exist a cleaner way to detect HeLP fragments
39067# brute search for Magic 0x036C with matching Major maximal 7 iterations
39068# discapp.hlp
39069>>>>16			search/0x49AF/s	\x6c\x03
39070>>>>>&0			use 		help-ver-date
39071>>>>>&4			leshort		!1
39072# putty.hlp
39073>>>>>>&0		search/0x69AF/s	\x6c\x03
39074>>>>>>>&0		use 		help-ver-date
39075>>>>>>>&4		leshort		!1
39076>>>>>>>>&0		search/0x49AF/s	\x6c\x03
39077>>>>>>>>>&0		use 		help-ver-date
39078>>>>>>>>>&4		leshort		!1
39079>>>>>>>>>>&0		search/0x49AF/s	\x6c\x03
39080>>>>>>>>>>>&0		use 		help-ver-date
39081>>>>>>>>>>>&4		leshort		!1
39082>>>>>>>>>>>>&0		search/0x49AF/s	\x6c\x03
39083>>>>>>>>>>>>>&0		use 		help-ver-date
39084>>>>>>>>>>>>>&4		leshort		!1
39085>>>>>>>>>>>>>>&0	search/0x49AF/s	\x6c\x03
39086>>>>>>>>>>>>>>>&0	use 		help-ver-date
39087>>>>>>>>>>>>>>>&4	leshort		!1
39088>>>>>>>>>>>>>>>>&0	search/0x49AF/s	\x6c\x03
39089# GCC.HLP is detected after 7 iterations
39090>>>>>>>>>>>>>>>>>&0	use 		help-ver-date
39091# this only happens if bigger hlp file is detected after used search iterations
39092>>>>>>>>>>>>>>>>>&4	leshort		!1		Windows y.z help
39093!:mime	application/winhelp
39094!:ext	hlp
39095# repeat search again or following default line does not work
39096>>>>16			search/0x49AF/s	\x6c\x03
39097# remaining files should be HeLP Bookmark WinHlp32.BMK (XP 32-bit) or WinHlp32 (Windows 8.1 64-bit)
39098>>>>16	default				x	Windows help Bookmark
39099!:mime	application/x-winhelp
39100!:ext	bmk
39101## FirstFreeBlock normally FFFFFFFFh 10h for *ANN
39102##>>8	lelong			x		\b, FirstFreeBlock %#8.8x
39103# EntireFileSize
39104>>12	lelong			x		\b, %d bytes
39105## ReservedSpace normally 042Fh AFh for *.ANN
39106#>>(4.l)	lelong		x		\b, ReservedSpace %#8.8x
39107## UsedSpace normally 0426h A6h for *.ANN
39108#>>(4.l+4)	lelong		x		\b, UsedSpace %#8.8x
39109## FileFlags normally 04...
39110#>>(4.l+5)	lelong		x		\b, FileFlags %#8.8x
39111## file header magic 0x293B
39112#>>(4.l+9)	uleshort	x		\b, file header magic %#4.4x
39113## file header Flags		0x0402
39114#>>(4.l+11)	uleshort	x		\b, file header Flags %#4.4x
39115## file header PageSize	0400h 80h for *.ANN
39116#>>(4.l+13)	uleshort	x		\b, PageSize %#4.4x
39117## Structure[16]		z4
39118#>>(4.l+15)	string		>\0		\b, Structure_"%-.16s"
39119## MustBeZero			0
39120#>>(4.l+31)	uleshort	x		\b, MustBeZero %#4.4x
39121## PageSplits
39122#>>(4.l+33)	uleshort	x		\b, PageSplits %#4.4x
39123## RootPage
39124#>>(4.l+35)	uleshort	x		\b, RootPage %#4.4x
39125## MustBeNegOne			0xffff
39126#>>(4.l+37)	uleshort	x		\b, MustBeNegOne %#4.4x
39127## TotalPages			1
39128#>>(4.l+39)	uleshort	x		\b, TotalPages %#4.4x
39129## NLevels			0x0001
39130#>>(4.l+41)	uleshort	x		\b, NLevels %#4.4x
39131## TotalBtreeEntries
39132#>>(4.l+43)	ulelong		x		\b, TotalBtreeEntries %#8.8x
39133## pages of the B+ tree
39134#>>(4.l+47)	ubequad		x		\b, PageStart %#16.16llx
39135
39136# start with colon or semicolon for comment line like Back2Life.cnt
391370		regex		\^(:|;)
39138# look for first keyword Base
39139>0		search/45	:Base
39140>>&0				use 		cnt-name
39141# only solution to search again from beginning , because relative offsets changes when use is called
39142>0		search/45	:Base
39143>0		default		x
39144# look for other keyword Title like in putty.cnt
39145>>0		search/45	:Title
39146>>>&0				use 		cnt-name
39147#
39148# display mime type and name of Windows help Content source
391490	name				cnt-name
39150# skip space at beginning
39151>0     string		\040
39152# name without extension and greater character or name with hlp extension
39153>>1	regex/c		\^([^\xd>]*|.*\\.hlp)	MS Windows help file Content, based "%s"
39154!:mime	text/plain
39155!:apple	????TEXT
39156!:ext	cnt
39157#
39158# Windows creates a full text search from hlp file, if the user clicks the "Find" tab and enables keyword indexing
391590	string		tfMR			MS Windows help Full Text Search index
39160!:mime application/x-winhelp-fts
39161!:ext	fts
39162>16	string		>\0			for "%s"
39163
39164# Summary: Hyper terminal
39165# Extension: .ht
39166# Created by: unknown
391670	string		HyperTerminal\040
39168>15	string		1.0\ --\ HyperTerminal\ data\ file	MS Windows HyperTerminal profile
39169
39170# https://ithreats.files.wordpress.com/2009/05/\040
39171# lnk_the_windows_shortcut_file_format.pdf
39172# Summary: Windows shortcut
39173# Extension: .lnk
39174# Created by: unknown
39175# 'L' + GUUID
391760	string		\114\0\0\0\001\024\002\0\0\0\0\0\300\0\0\0\0\0\0\106	MS Windows shortcut
39177!:mime	application/x-ms-shortcut
39178!:ext	lnk
39179>20	lelong&1	1	\b, Item id list present
39180>20	lelong&2	2	\b, Points to a file or directory
39181>20	lelong&4	4	\b, Has Description string
39182>20	lelong&8	8	\b, Has Relative path
39183>20	lelong&16	16	\b, Has Working directory
39184>20	lelong&32	32	\b, Has command line arguments
39185>20	lelong&64	64	\b, Icon
39186>>56	lelong		x	\b number=%d
39187>24	lelong&1	1	\b, Read-Only
39188>24	lelong&2	2	\b, Hidden
39189>24	lelong&4	4	\b, System
39190>24	lelong&8	8	\b, Volume Label
39191>24	lelong&16	16	\b, Directory
39192>24	lelong&32	32	\b, Archive
39193>24	lelong&64	64	\b, Encrypted
39194>24	lelong&128	128	\b, Normal
39195>24	lelong&256	256	\b, Temporary
39196>24	lelong&512	512	\b, Sparse
39197>24	lelong&1024	1024	\b, Reparse point
39198>24	lelong&2048	2048	\b, Compressed
39199>24	lelong&4096	4096	\b, Offline
39200>28	leqwdate	x	\b, ctime=%s
39201>36	leqwdate	x	\b, mtime=%s
39202>44	leqwdate	x	\b, atime=%s
39203>52	lelong		x	\b, length=%u, window=
39204>60	lelong&1	1	\bhide
39205>60	lelong&2	2	\bnormal
39206>60	lelong&4	4	\bshowminimized
39207>60	lelong&8	8	\bshowmaximized
39208>60	lelong&16	16	\bshownoactivate
39209>60	lelong&32	32	\bminimize
39210>60	lelong&64	64	\bshowminnoactive
39211>60	lelong&128	128	\bshowna
39212>60	lelong&256	256	\brestore
39213>60	lelong&512	512	\bshowdefault
39214#>20	lelong&1	0
39215#>>20	lelong&2	2
39216#>>>(72.l-64)	pstring/h	x	\b [%s]
39217#>20	lelong&1	1
39218#>>20	lelong&2	2
39219#>>>(72.s)	leshort	x
39220#>>>&75	pstring/h	x	\b [%s]
39221
39222# Summary: Outlook Personal Folders
39223# Created by: unknown
39224# Update:	Joerg Jenderek
39225# URL:		http://fileformats.archiveteam.org/wiki/Personal_Folder_File
39226#		https://en.wikipedia.org/wiki/Personal_Storage_Table
39227# Reference:	https://interoperability.blob.core.windows.net/files/MS-PST/%5bMS-PST%5d.pdf
39228#		http://mark0.net/download/triddefs_xml.7z/defs/p/pab.trid.xml
39229# dwMagic !BDN
392300	lelong		0x4E444221
39231# skip DROID x-fmt-75-signature-id-472.pab x-fmt-248-signature-id-260.pst x-fmt-249-signature-id-261.pst
39232# by check for existance of bPlatformCreate value
39233>14	ubyte	x		Microsoft Outlook
39234#!:mime		application/octet-stream
39235# NOT official registered !
39236!:mime		application/vnd.ms-outlook
39237# dwCRCPartial; 32-bit cyclic redundancy check (CRC) value of followin 471 bytes; zero for 64-bit
39238#>>4	ulelong		!0			\b, CRC %#x
39239# wMagicClient; AB (4142h) is used for PAB files; SM (534Dh) is used for PST files; SO (534Fh) is used for OST files
39240#>>8	leshort		x			\b, wMagicClient=%#x
39241# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/p/pab.trid.xml
39242# Note:		called "Microsoft Personal Address Book" by TrID and
39243#		"Microsoft Outlook Personal Address Book" by DROID via x-fmt/75
39244>>8	leshort		0x4142			Personal Address Book
39245#!:mime	application/x-ms-pab
39246!:ext	pab
39247# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/p/pst.trid.xml
39248#		http://mark0.net/download/triddefs_xml.7z/defs/p/pst-unicode.trid.xml
39249# Note:		called "Microsoft OutLook Personal Folder" by TrID and
39250#		by DROID via x-fmt/248 for ANSI and via x-fmt/249 for Unicode
39251#>>8	leshort		0x4D53			\b, PST~
39252# called "Microsoft Outlook email folder" in ./windows version 1.37 and older
39253>>8	leshort		0x4D53			Personal Storage
39254#!:mime	application/x-ms-pst
39255!:ext	pst
39256# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/o/ost.trid.xml
39257# Note:		called "Outlook Exchange Offline Storage" by TrID
39258>>8	leshort		0x4F53			Offline Storage
39259#!:mime	application/x-ms-ost
39260!:ext	ost
39261# wVer; file format version. 14 or 15 if the file is ANSI; > 21 or 23(=17h) if Unicode; 37 for written by Outlook with WIP
39262>>10	uleshort	x			(
39263# probably NO intermediate versions exist
39264>>10	leshort		<0x10			\b<=2002, ANSI,
39265>>10	leshort		>0x14			\b>=2003, Unicode,
39266>>10	uleshort	x			version %u)
39267# wVerClient; client file format version like: 19 22
39268#>>12	uleshort	x			\b, wVerClient=%u
39269# bPlatformCreate; This value MUST be set to 1 but also found 2
39270>>14	ubyte		>1			\b, bPlatformCreate=%u
39271# bPlatformAccess; This value MUST be set to 1 but also found 2
39272>>15	ubyte		>1			\b, bPlatformAccess=%u
39273# dwReserved1; SHOULD ignore and NOT modify this value; SHOULD initialize to zero
39274>>16	ulelong		!0			\b, dwReserved1=%#x
39275# dwReserved2; SHOULD ignore and NOT modify this value; SHOULD initialize to zero
39276>>20	ulelong		!0			\b, dwReserved2=%#x
39277# ANSI 32-bit variant Outlook 1997-2002
39278>>10	uleshort	<16
39279# bidNextB; next BlockID (ANSI 4 bytes)
39280#>>>24		ulelong	!0			\b, bidNextB=%#x
39281# bidNextP; Next available back BlockID pointer
39282#>>>28		ulelong	!0			\b, bidNextP=%#x
39283# dwUnique; value monotonically increased when modifying PST; so CRC is changing
39284>>>32		ulelong	!0			\b, dwUnique=%#x
39285# rgnid[128]; A fixed array of 32 NodeIDs, each corresponding to one of the 32 possible NID_TYPEs
39286#>>>36		ubequad	x			\b, rgnid=%#llx...
39287# dwReserved; Implementations SHOULD ignore this value and SHOULD NOT modify it; Initialized zero
39288>>>164		ulelong	!0			\b, dwReserved=%#x
39289# ibFileEof; the size of the PST file, in bytes (ANSI 4 bytes)
39290>>>168		ulelong	x			\b, %u bytes
39291# ibAMapLast; offset to the last AMap page
39292#>>>172		ulelong	x			\b, ibAMapLast=%#x
39293# bSentinel; MUST be set to 0x80
39294>>>460		ubyte	!0x80			\b, bSentinel=%#x
39295# bCryptMethod: 0~No encryption 1~encryption with permutation 2~encryption with cyclic 16~encryption with Windows Information Protection (WIP)
39296>>>461		ubyte	>0			\b, bCryptMethod=%u
39297# UNICODE 64-bit variant Outlook 2003-2007
39298>>10	uleshort >20
39299# bidUnused; Unused 8 bytes padding (Unicode only); sometimes like: 0x0000000100000004
39300>>>24		ulequad	!0x0000000100000004	\b, bidUnused=%#16.16llx
39301# dwUnique; value monotonically increased when modifying PST; so CRC is changing
39302>>>40		ulelong	!0			\b, dwUnique=%#x
39303# rgnid[] (128 bytes): A fixed array of 32 NIDs, each corresponding to one of the 32 possible
39304#>>>44		ubequad	x			\b, rgnid=%#llx...
39305# ibFileEof; the size of the PST file, in bytes (Unicode 8 bytes)
39306>>>184		ulequad	x			\b, %llu bytes
39307# bSentinel; MUST be set to 0x80
39308>>>512		ubyte	!0x80			\b, bSentinel=%#x
39309# bCryptMethod; Encryption type like: 0 1 2 16
39310>>>513		ubyte	>0			\b, bCryptMethod=%u
39311# dwCRC; 32-bit CRC of the of the previous 516 bytes
39312>>>524		ulelong		x		\b, CRC32 %#x
39313
39314
39315# Summary: Windows help cache
39316# Created by: unknown
393170	string		\164\146\115\122\012\000\000\000\001\000\000\000	MS Windows help cache
39318
39319
39320# Summary: IE cache file
39321# Created by: Christophe Monniez
393220	string	Client\ UrlCache\ MMF 	Internet Explorer cache file
39323>20	string	>\0			version %s
39324
39325
39326# Summary: Registry files
39327# Created by: unknown
39328# Modified by (1): Joerg Jenderek
393290	string		regf		MS Windows registry file, NT/2000 or above
393300	string		CREG		MS Windows 95/98/ME registry file
393310	string		SHCC3		MS Windows 3.1 registry file
39332
39333
39334# Summary: Windows Registry text
39335# URL: https://en.wikipedia.org/wiki/Windows_Registry#.REG_files
39336# Reference: http://fileformats.archiveteam.org/wiki/Windows_Registry
39337# Submitted by: Abel Cheung <abelcheung@gmail.com>
39338# Update: Joerg Jenderek
39339#		Windows 3-9X variant
393400	string		REGEDIT
39341# skip ASCII text like "REGEDITor.txt" but match
39342# L1WMAP.REG with only 1 CRNL or org.gnome.gnumeric.reg with 2 NL
39343>7	search/3	\n			Windows Registry text
39344!:mime	text/x-ms-regedit
39345!:ext	reg
39346#		Windows 9X variant
39347>>0	string		REGEDIT4		(Win95 or above)
39348#		Windows 2K ANSI variant
393490	string		Windows\ Registry\ Editor\
39350>&0	string		Version\ 5.00\r\n\r\n	Windows Registry text (Win2K or above)
39351!:mime	text/x-ms-regedit
39352!:ext	reg
39353#		Windows 2K UTF-16 variant
393542	lestring16	Windows\ Registry\ Editor\
39355>0x32	lestring16	Version\ 5.00\r\n\r\n	Windows Registry little-endian text (Win2K or above)
39356# relative offset not working
39357#>&0	lestring16	Version\ 5.00\r\n\r\n	Windows Registry little-endian text (Win2K or above)
39358!:mime	text/x-ms-regedit
39359!:ext	reg
39360#		WINE variant
39361# URL: https://en.wikipedia.org/wiki/Wine_(software)
39362# Reference: https://www.winehq.org/pipermail/wine-cvs/2005-October/018763.html
39363# Note:	WINE use text based registry (system.reg,user.reg,userdef.reg)
39364#	instead binary hiv structure like Windows
393650	string	WINE\ REGISTRY\ Version\ 	WINE registry text
39366# version 2
39367>&0	string	x				\b, version %s
39368!:mime	text/x-wine-extension-reg
39369!:ext	reg
39370
39371# Windows *.INF *.INI files updated by Joerg Jenderek at Apr 2013, Feb 2018
39372# empty ,comment , section
39373# PR/383: remove unicode BOM because it is not portable across regex impls
39374#0	regex/s		\\`(\\r\\n|;|[[])
39375# empty line CRLF
393760	ubeshort	0x0D0A
39377>0	use		ini-file
39378# comment line starting with semicolon
393790	string		;
39380# look for phrase of Windows policy ADMinistrative template (with starting remark)
39381# like: WINDOW_95_CD/TOOLS/RESKIT/netadmin/poledit/conf.adm
39382>1	search/3548	END\040CATEGORY
39383# ADM with remark (by adm-rem.trid.xml) already done by generic ASCII variant
39384# if no Windows policy ADMinistrative template then Windows INItialization
39385>1	default		x
39386>>0	use		ini-file
39387# section line starting with left bracket
393880	string		[
39389>0	use		ini-file
39390# check and then display Windows INItialization configuration
393910	name		ini-file
39392# look for left bracket in section line
39393>0	search/8192	[
39394# https://en.wikipedia.org/wiki/Autorun.inf
39395# https://msdn.microsoft.com/en-us/library/windows/desktop/cc144200.aspx
39396# space after right bracket
39397# or AutoRun.Amd64 for 64 bit systems
39398# or only NL separator
39399>>&0	regex/c		\^autorun
39400# but sometimes total commander directory tree file "treeinfo.wc" with lines like
39401# [AUTORUN]
39402# [boot]
39403>>>&0	string		=]\r\n[					Total commander directory treeinfo.wc
39404!:mime text/plain
39405!:ext	wc
39406# From: Pal Tamas <folti@balabit.hu>
39407# Autorun File
39408>>>&0	string		!]\r\n[					Microsoft Windows Autorun file
39409!:mime application/x-setupscript
39410!:ext	inf
39411# https://msdn.microsoft.com/en-us/library/windows/hardware/ff549520(v=vs.85).aspx
39412# version strings ASCII coded case-independent for Windows setup information script file
39413>>&0	regex/c		\^(version|strings)]				Windows setup INFormation
39414!:mime	application/x-setupscript
39415#!:mime application/x-wine-extension-inf
39416!:ext	inf
39417# NETCRC.INF OEMCPL.INF
39418>>&0	regex/c		\^(WinsockCRCList|OEMCPL)]			Windows setup INFormation
39419!:mime	application/x-setupscript
39420!:ext	inf
39421# http://www.winfaq.de/faq_html/Content/tip2500/onlinefaq.php?h=tip2653.htm
39422# https://msdn.microsoft.com/en-us/library/windows/desktop/cc144102.aspx
39423# .ShellClassInfo DeleteOnCopy LocalizedFileNames ASCII coded case-independent
39424>>&0	regex/1024c	\^(\\.ShellClassInfo|DeleteOnCopy|LocalizedFileNames)]	Windows desktop.ini
39425!:mime application/x-wine-extension-ini
39426#!:mime text/plain
39427# https://support.microsoft.com/kb/84709/
39428>>&0	regex/c		\^don't\ load]					Windows CONTROL.INI
39429!:mime application/x-wine-extension-ini
39430!:ext	ini
39431>>&0	regex/c		\^(ndishlp\\$|protman\\$|NETBEUI\\$)]		Windows PROTOCOL.INI
39432!:mime application/x-wine-extension-ini
39433!:ext	ini
39434# https://technet.microsoft.com/en-us/library/cc722567.aspx
39435# http://www.winfaq.de/faq_html/Content/tip0000/onlinefaq.php?h=tip0137.htm
39436>>&0	regex/c		\^(windows|Compatibility|embedding)]		Windows WIN.INI
39437!:mime application/x-wine-extension-ini
39438!:ext	ini
39439# https://en.wikipedia.org/wiki/SYSTEM.INI
39440>>&0	regex/c		\^(boot|386enh|drivers)]			Windows SYSTEM.INI
39441!:mime application/x-wine-extension-ini
39442!:ext	ini
39443# http://www.mdgx.com/newtip6.htm
39444>>&0	regex/c		\^SafeList]					Windows IOS.INI
39445!:mime application/x-wine-extension-ini
39446!:ext	ini
39447# https://en.wikipedia.org/wiki/NTLDR	Windows Boot Loader information
39448>>&0	regex/c		\^boot\x20loader]				Windows boot.ini
39449!:mime application/x-wine-extension-ini
39450!:ext	ini
39451# https://en.wikipedia.org/wiki/CONFIG.SYS
39452>>&0	regex/c		\^menu]						MS-DOS CONFIG.SYS
39453# @CONFIG.UI configuration file of previous DOS version saved by Caldera OPENDOS INSTALL.EXE
39454# CONFIG.PSS saved version of file CONFIG.SYS created by %WINDIR%\SYSTEM\MSCONFIG.EXE
39455# CONFIG.TSH renamed file CONFIG.SYS.BAT by %WINDIR%\SYSTEM\MSCONFIG.EXE
39456# dos and w40 used in dual booting scene
39457!:ext	sys/dos/w40
39458# https://support.microsoft.com/kb/118579/
39459>>&0	regex/c		\^Paths]\r\n					MS-DOS MSDOS.SYS
39460!:ext	sys/dos
39461# http://chmspec.nongnu.org/latest/INI.html#HHP
39462>>&0	regex/c		\^options]\r\n					Microsoft HTML Help Project
39463!:mime text/plain
39464!:ext	hhp
39465# From:		Joerg Jenderek
39466# URL:		https://documentation.basis.com/BASISHelp/WebHelp/b3odbc/ODBC_Driver/obdcdriv_character_translation.htm
39467# Reference:	https://www.garykessler.net/library/file_sigs.html
39468#		http://mark0.net/download/triddefs_xml.7z/defs/c/cpx.trid.xml
39469# Note:		stored in directory %WINDIR%\SysWOW64 or %WINDIR%\system
39470#		second word often Latin but sometimes Cyrillic like in 12510866.CPX
39471>>&0	regex/c		\^Windows\ (Latin|Cyrillic)			Windows codepage translator
39472#!:mime	text/plain
39473!:mime	text/x-ms-cpx
39474# like: 12510866.CPX
39475!:ext	cpx
39476# From:		Joerg Jenderek
39477# URL:		https://en.wikipedia.org/wiki/InstallShield
39478# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/l/lid-is.trid.xml
39479# Note:		contain also 3 keywords like: count Default key0
39480>>&0	regex/c		\^Languages]					InstallShield Language Identifier
39481#!:mime	text/plain
39482!:mime	text/x-installshield-lid
39483# like: SETUP.LID
39484!:ext	lid
39485# From:		Joerg Jenderek
39486# URL:		https://www.file-extensions.org/tag-file-extension
39487# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/t/taginfo.trid.xml
39488# Note:		contain also keywords like: Application Category Company Misc Version
39489>>&0	regex/c		\^TagInfo]					TagInfo
39490#!:mime	text/plain
39491#!:mime	text/prs.lines.tag
39492!:mime	text/x-ms-tag
39493# like: DATA.TAG
39494!:ext	tag
39495# unknown keyword after opening bracket
39496>>&0	default				x
39497#>>>&0	string/c			x	UNKNOWN [%s
39498# look for left bracket of second section
39499>>>&0	search/8192			[
39500# version Strings FileIdentification
39501>>>>&0	string/c			version				Windows setup INFormation
39502!:mime application/x-setupscript
39503!:ext	inf
39504# https://en.wikipedia.org/wiki/Initialization_file	Windows Initialization File or other
39505>>>>&0	default				x
39506>>>>>&0	ubyte				x
39507# characters, digits, underscore and white space followed by right bracket
39508# terminated by CR implies section line to skip BOOTLOG.TXT DETLOG.TXT
39509>>>>>>&-1	regex/T			\^([A-Za-z0-9_\(\)\ ]+)\]\r	Generic INItialization configuration [%-.40s
39510# NETDEF.INF multiarc.ini
39511#!:mime	application/x-setupscript
39512!:mime	application/x-wine-extension-ini
39513#!:mime	text/plain
39514!:ext	ini/inf
39515# UTF-16 BOM
395160	ubeshort		=0xFFFE
39517# look for phrase of Windows policy ADMinistrative template (UTF-16 by adm-uni.trid.xml)
39518# like: wuau.adm
39519>2	search/0x384A	E\0N\0D\0\040\0C\0A\0T\0E\0G\0O\0R\0Y\0
39520>>0	use		windows-adm
39521# if no Windows policy ADMinistrative template then Windows INFormation
39522>2	default		x
39523# UTF-16 BOM followed by CR~0D00 , comment~semicolon~3B00 , section~bracket~5B00
39524>>0	ubelong&0xFFff89FF	=0xFFFE0900
39525# look for left bracket in section line
39526>>>2	search/8192		[
39527# keyword without 1st letter which is maybe up-/down-case
39528>>>>&3	lestring16		ersion]			Windows setup INFormation
39529!:mime	application/x-setupscript
39530# like: hdaudio.inf iscsi.inf spaceport.inf tpm.inf usbhub3.inf UVncVirtualDisplay.inf
39531!:ext	inf
39532>>>>&3	lestring16		trings]			Windows setup INFormation
39533!:mime	application/x-setupscript
39534# like: arduino_gemma.inf iis.inf MSM8960.inf
39535!:ext	inf
39536>>>>&3	lestring16		ourceDisksNames]	Windows setup INFormation
39537!:mime	application/x-setupscript
39538# like: atiixpag.inf mdmnokia.inf netefe32.inf rdpbus.inf
39539!:ext	inf
39540# netnwcli.inf start with ;---[ NetNWCli.INX ]
39541>>>>&3	default			x
39542# look for NL followed by left bracket
39543>>>>>&0	search/8192		\x0A\x00\x5b
39544# like: defltwk.inf netvwifibus.inf WSDPrint.inf
39545>>>>>>&3 lestring16		ersion]			Windows setup INFormation
39546!:mime	application/x-setupscript
39547!:ext	inf
39548
39549# Summary:	Windows Policy ADMinistrative template
39550# From:		Joerg Jenderek
39551# URL:		https://en.wikipedia.org/wiki/Administrative_Template
39552# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/a/adm.trid.xml
39553# Note:		typically stored in directory like: %WINDIR%\system32\GroupPolicy\ADM
39554# worst case ASCII variant starting with remark line like: inetset.adm
395550	search/0x4E	CLASS\040
39556>&0	string		MACHINE
39557>>0	use		windows-adm
39558>&0	string		USER
39559>>0	use		windows-adm
39560# display information about Windows policy ADMinistrative template
395610	name		windows-adm	Windows Policy Administrative Template
39562!:mime	text/x-ms-adm
39563!:ext	adm
39564# UTF-16 BOM implies UTF-16 encoded ADM (by adm-uni.trid.xml)
39565>0	ubeshort		=0xFFFE
39566>>2	lestring16		x		\b, 1st line "%s"
39567# look for UTF-16 encoded CarriageReturn LineFeed
39568>>>2	search/0x3A		\r\0\n\0
39569>>>>&0	lestring16		x		\b, 2nd line "%s"
39570# no UTF-16 BOM implies "ASCII" encoded ADM (by adm.trid.xml)
39571>0	ubeshort		!0xFFFE
39572>>0		string		x		\b, 1st line "%s"
39573#>>>&0		ubequad		x		\b, 2ND %16.16llx
39574# 2nd line empty
39575>>>&2		beshort		=0x0D0A
39576>>>>&0		beshort		!0x0D0A		\b, 3th line
39577>>>>>&-2	string		x		"%s"
39578# 2nd line with content
39579>>>&2		beshort		!0x0D0A		\b, 2nd line
39580>>>>&-2		string		x		"%s"
39581
39582# Windows Precompiled INF files *.PNF added by Joerg Jenderek at Mar 2013 of _PNF_HEADER inf.h
39583# http://read.pudn.com/downloads3/sourcecode/windows/248345/win2k/private/windows/setup/setupapi/inf.h__.htm
39584# URL:		http://fileformats.archiveteam.org/wiki/INF_(Windows)
39585# Reference:	http://en.verysource.com/code/10350344_1/inf.h.html
39586# Note:		stored in %Windir%\Inf %Windir%\System32\DriverStore\FileRepository
39587# check for valid major and minor versions: 101h - 303h
395880		leshort&0xFcFc	=0x0000
39589# GRR: line above (strength 50) is too general as it catches also "PDP-11 UNIX/RT ldp" ./pdp
39590>0		leshort&0x0303	!0x0000
39591# test for valid InfStyles: 1 2
39592>>2		uleshort	>0
39593>>>2		uleshort	<3
39594# look for colon in WinDirPath after PNF header
39595#>>>>0x59	search/18	:
39596>>>>0	use	PreCompiledInf
395970	name	PreCompiledInf
39598>0		uleshort	x	Windows Precompiled iNF
39599!:mime	application/x-pnf
39600!:ext	pnf
39601# major version 1 for older Windows like XP and 3 since about Windows Vista
39602# 101h~98-XP; 301h~Windows Vista-7 ; 302h~Windows 10 14393; 303h~Windows 10 18362
39603>1		ubyte		x		\b, version %u
39604>0		ubyte		x		\b.%u
39605>0		uleshort	=0x0101		(Windows
39606>>4	ulelong&0x00000001	!0x00000001	98)
39607>>4	ulelong&0x00000001	=0x00000001	XP)
39608>0		uleshort	=0x0301		(Windows Vista-8.1)
39609>0		uleshort	=0x0302		(Windows 10 older)
39610>0		uleshort	=0x0303		(Windows 10)
39611# 1 ,2 (windows 98 SE)
39612>2		uleshort	!2		\b, InfStyle %u
39613#	PNF_FLAG_IS_UNICODE		0x00000001
39614#	PNF_FLAG_HAS_STRINGS		0x00000002
39615#	PNF_FLAG_SRCPATH_IS_URL		0x00000004
39616#	PNF_FLAG_HAS_VOLATILE_DIRIDS	0x00000008
39617#	PNF_FLAG_INF_VERIFIED		0x00000010
39618#	PNF_FLAG_INF_DIGITALLY_SIGNED	0x00000020
39619#	UNKNOWN8			0x00000080
39620#	UNKNOWN				0x00000100
39621#	UNKNOWN1			0x01000000
39622#	UNKNOWN2			0x02000000
39623>4	ulelong&0x03000180	>0		\b, flags
39624>>4	ulelong			x		%#x
39625>4	ulelong&0x00000001	0x00000001	\b, unicoded
39626>4	ulelong&0x00000002	0x00000002	\b, has strings
39627>4	ulelong&0x00000004	0x00000004	\b, src URL
39628>4	ulelong&0x00000008	0x00000008	\b, volatile dir ids
39629>4	ulelong&0x00000010	0x00000010	\b, verified
39630>4	ulelong&0x00000020	0x00000020	\b, digitally signed
39631# >4	ulelong&0x00000080	0x00000080	\b, UNKNOWN8
39632# >4	ulelong&0x00000100	0x00000100	\b, UNKNOWN
39633# >4	ulelong&0x01000000	0x01000000	\b, UNKNOWN1
39634# >4	ulelong&0x02000000	0x02000000	\b, UNKNOWN2
39635#>8		ulelong		x		\b, InfSubstValueListOffset %#x
39636# many 0, 1 lmouusb.PNF, 2 linkfx10.PNF , f webfdr16.PNF
39637# , 6 bth.PNF, 9 usbport.PNF, d netnwifi.PNF, 10h nettcpip.PNF
39638#>12		uleshort	x		\b, InfSubstValueCount %#x
39639# only < 9 found: 8 hcw85b64.PNF
39640#>14		uleshort	x		\b, InfVersionDatumCount %#x
39641# only found values lower 0x0000ffff ??
39642#>16		ulelong		x		\b, InfVersionDataSize %#x
39643# only found positive values lower 0x00ffFFff for InfVersionDataOffset
39644>20		ulelong		x		\b, at %#x
39645>4	ulelong&0x00000001	=0x00000001
39646# case independent: CatalogFile Class DriverVer layoutfile LayoutFile SetupClass signature Signature
39647>>(20.l)	lestring16	x		"%s"
39648>4	ulelong&0x00000001	!0x00000001
39649>>(20.l)	string		x		"%s"
39650# FILETIME is number of 100-nanosecond intervals since 1 January 1601
39651#>24		ulequad		x		\b, InfVersionLastWriteTime %16.16llx
39652#>24		foodate-0xbar	x		\b, InfVersionLastWriteTime %s
39653# for Windows 98, XP
39654>0		uleshort	<0x0102
39655# only found values lower 0x00ffFFff
39656# often 70 but also 78h for corelist.PNF
39657# >>32		ulelong		x		\b, StringTableBlockOffset %#x
39658# >>36		ulelong		x		\b, StringTableBlockSize %#x
39659# >>40		ulelong		x		\b, InfSectionCount %#x
39660# >>44		ulelong		x		\b, InfSectionBlockOffset %#x
39661# >>48		ulelong		x		\b, InfSectionBlockSize %#x
39662# >>52		ulelong		x		\b, InfLineBlockOffset %#x
39663# >>56		ulelong		x		\b, InfLineBlockSize %#x
39664# >>60		ulelong		x		\b, InfValueBlockOffset %#x
39665# >>64		ulelong		x		\b, InfValueBlockSize %#x
39666# WinDirPathOffset
39667# like 58h, which means direct after PNF header
39668#>>68		ulelong		x		\b, at %#x
39669>>68		ulelong		x
39670>>>4	ulelong&0x00000001	=0x00000001
39671#>>>>(68.l)	ubequad		=0x43003a005c005700
39672# normally unicoded C:\Windows
39673#>>>>>(68.l)	lestring16	x		\b, WinDirPath "%s"
39674>>>>(68.l)	ubequad		!0x43003a005c005700
39675>>>>>(68.l)	lestring16	x		\b, WinDirPath "%s"
39676>>>4	ulelong&0x00000001	!0x00000001
39677# normally ASCII C:\WINDOWS
39678#>>>>(68.l)	string		=C:\\WINDOWS	\b, WinDirPath "%s"
39679>>>>(68.l)	string		!C:\\WINDOWS
39680>>>>>(68.l)	string		x		\b, WinDirPath "%s"
39681# found OsLoaderPathOffset values often 0 , once 70h corelist.PNF, once 68h ASCII machine.PNF
39682>>>72		ulelong		>0		\b,
39683>>>>4	ulelong&0x00000001	=0x00000001
39684>>>>>(72.l)	lestring16	x		OsLoaderPath "%s"
39685>>>>4	ulelong&0x00000001	!0x00000001
39686# seldom C:\ instead empty
39687>>>>>(72.l)	string		x		OsLoaderPath "%s"
39688# 1fdh
39689#>>>76		uleshort	x		\b, StringTableHashBucketCount %#x
39690# only 407h found
39691>>>78		uleshort	!0x409		\b, LanguageID %x
39692#>>>78		uleshort	=0x409		\b, LanguageID %x
39693# InfSourcePathOffset often 0
39694>>>80		ulelong		>0		\b, at %#x
39695>>>>4	ulelong&0x00000001	=0x00000001
39696>>>>>(80.l)	lestring16	x		SourcePath "%s"
39697>>>>4	ulelong&0x00000001	!0x00000001
39698>>>>>(80.l)	string		>\0		SourcePath "%s"
39699# OriginalInfNameOffset often 0
39700>>>84		ulelong		>0		\b, at %#x
39701>>>>4	ulelong&0x00000001	=0x00000001
39702>>>>>(84.l)	lestring16	x		InfName "%s"
39703>>>>4	ulelong&0x00000001	!0x00000001
39704>>>>>(84.l)	string		>\0		InfName "%s"
39705
39706# for newer Windows like Vista, 7 , 8.1 , 10
39707>0		uleshort	>0x0101
39708>>80	ulelong			x		\b, at %#x WinDirPath
39709>>>4	ulelong&0x00000001	0x00000001
39710# normally unicoded C:\Windows
39711#>>>>(80.l)	ubequad		=0x43003a005c005700
39712#>>>>>(80.l)	lestring16	x		"%s"
39713>>>>(80.l)	ubequad		!0x43003a005c005700
39714>>>>>(80.l)	lestring16	x		"%s"
39715# language id: 0 407h~german 409h~English_US
39716>>90		uleshort	!0x409		\b, LanguageID %x
39717#>>90		uleshort	=0x409		\b, LanguageID %x
39718>>92	ulelong			>0		\b, at %#x
39719>>>4	ulelong&0x00000001	0x00000001
39720# language string like: de-DE en-US
39721>>>>(92.l)	lestring16	x		language %s
39722
39723# Summary: backup file created with utility like NTBACKUP.EXE shipped with Windows NT/2K/XP/2003
39724# Extension: .bkf
39725# Created by: Joerg Jenderek
39726# URL: https://en.wikipedia.org/wiki/NTBackup
39727# Reference: http://laytongraphics.com/mtf/MTF_100a.PDF
39728# Descriptor BloCK name of Microsoft Tape Format
397290	string			TAPE
39730# Format Logical Address is zero
39731>20	ulequad			0
39732# Reserved for MBC is zero
39733>>28	uleshort		0
39734# Control Block ID is zero
39735>>>36	ulelong			0
39736# BIT4-BIT15, BIT18-BIT31 of block attributes are unused
39737>>>>4	ulelong&0xFFfcFFe0	0		Windows NTbackup archive
39738#!:mime application/x-ntbackup
39739!:ext bkf
39740# OS ID
39741>>>>>10	ubyte			1		\b NetWare
39742>>>>>10	ubyte			13		\b NetWare SMS
39743>>>>>10	ubyte			14		\b NT
39744>>>>>10	ubyte			24		\b 3
39745>>>>>10	ubyte			25		\b OS/2
39746>>>>>10	ubyte			26		\b 95
39747>>>>>10	ubyte			27		\b Macintosh
39748>>>>>10	ubyte			28		\b UNIX
39749# OS Version (2)
39750#>>>>>11	ubyte			x		OS V=%x
39751# MTF_CONTINUATION	Media Sequence Number > 1
39752#>>>>>4	ulelong&0x00000001	!0		\b, continued
39753# MTF_COMPRESSION
39754>>>>>4	ulelong&0x00000004	!0		\b, compressed
39755# MTF_EOS_AT_EOM	End Of Medium was hit during end of set processing
39756>>>>>4	ulelong&0x00000008	!0		\b, End Of Medium hit
39757>>>>>4	ulelong&0x00020000	0
39758# MTF_SET_MAP_EXISTS	A Media Based Catalog Set Map may exist on tape
39759>>>>>>4	ulelong&0x00010000	!0		\b, with catalog
39760# MTF_FDD_ALLOWED	However File/Directory Detail can only exist if a Set Map is also present
39761>>>>>4	ulelong&0x00020000	!0		\b, with file catalog
39762# Offset To First Event 238h,240h,28Ch
39763#>>>>>8	uleshort		x		\b, event offset %4.4x
39764# Displayable Size (20e0230h 20e024ch 20e0224h)
39765#>>>>>8	ulequad			x		dis. size %16.16llx
39766# Media Family ID (455288C4h 4570BD1Ah 45708F2Fh 4570BBF5h)
39767#>>>>>52	ulelong			x		family ID %8.8x
39768# TAPE Attributes (3)
39769#>>>>>56	ulelong			x		TAPE %8.8x
39770# Media Sequence Number
39771>>>>>60	uleshort		>1		\b, sequence %u
39772# Password Encryption Algorithm (3)
39773>>>>>62	uleshort		>0		\b, %#x encrypted
39774# Soft Filemark Block Size * 512 (2)
39775#>>>>>64	uleshort		=2		\b, soft size %u*512
39776>>>>>64	uleshort		!2		\b, soft size %u*512
39777# Media Based Catalog Type (1,2)
39778#>>>>>66	uleshort		x		\b, catalog type %4.4x
39779# size of Media Name (66,68,6Eh)
39780>>>>>68	uleshort		>0
39781# offset of Media Name (5Eh)
39782>>>>>>70	uleshort	>0
39783# 0~, 1~ANSI, 2~UNICODE
39784>>>>>>>48	ubyte		1
39785# size terminated ansi coded string normally followed by "MTF Media Label"
39786>>>>>>>>(70.s)	string		>\0		\b, name: %s
39787>>>>>>>48	ubyte		2
39788# Not null, but size terminated unicoded string
39789>>>>>>>>(70.s)	lestring16	x		\b, name: %s
39790# size of Media Label (104h)
39791>>>>>72	uleshort		>0
39792# offset of Media Label (C4h,C6h,CCh)
39793>>>>>74		uleshort	>0
39794>>>>>>48	ubyte		1
39795#Tag|Version|Vendor|Vendor ID|Creation Time Stamp|Cartridge Label|Side|Media ID|Media Domain ID|Vendor Specific fields
39796>>>>>>>(74.s)	string		>\0		\b, label: %s
39797>>>>>>48	ubyte		2
39798>>>>>>>(74.s)	lestring16	x		\b, label: %s
39799# size of password name (0,1Ch)
39800#>>>>>76	uleshort		>0		\b, password size %4.4x
39801# Software Vendor ID (CBEh)
39802>>>>>86	uleshort		x		\b, software (%#x)
39803# size of Software Name (6Eh)
39804>>>>>80	uleshort		>0
39805# offset of Software Name (1C8h,1CAh,1D0h)
39806>>>>>>82	uleshort	>0
39807# 1~ANSI, 2~UNICODE
39808>>>>>>>48	ubyte		1
39809>>>>>>>>(82.s)	string		>\0		\b: %s
39810>>>>>>>48	ubyte		2
39811# size terminated unicoded coded string normally followed by "SPAD"
39812>>>>>>>>(82.s)	lestring16	x		\b: %s
39813# Format Logical Block Size (512,1024)
39814#>>>>>84	uleshort		=1024		\b, block size %u
39815>>>>>84	uleshort		!1024		\b, block size %u
39816# Media Date of MTF_DATE_TIME type with 5 bytes
39817#>>>>>>88	ubequad			x		DATE %16.16llx
39818# MTF Major Version (1)
39819#>>>>>>93	ubyte		x		\b, MFT version %x
39820#
39821
39822# URL: https://en.wikipedia.org/wiki/PaintShop_Pro
39823# Reference: https://www.cryer.co.uk/file-types/p/pal.htm
39824# Created by: Joerg Jenderek
39825# Note: there exist other color palette formats also with .pal extension
398260	string	JASC-PAL\r\n	PaintShop Pro color palette
39827#!:mime	text/plain
39828# PspPalette extension is used by newer (probably 8) PaintShopPro versions
39829!:ext	pal/PspPalette
39830# 2nd line contains palette file version. For example "0100"
39831>10	string	!0100		\b, version %.4s
39832# third line contains the number of colours: 16 256 ...
39833>16	string	x		\b, %.3s colors
39834
39835# URL: https://en.wikipedia.org/wiki/Innosetup
39836# Reference: https://github.com/jrsoftware/issrc/blob/master/Projects/Undo.pas
39837# Created by: Joerg Jenderek
39838# Note:	created by like "InnoSetup self-extracting archive" inside ./msdos
39839# TrID labeles the entry as "Inno Setup Uninstall Log"
39840#	TUninstallLogID
398410	string	Inno\ Setup\ Uninstall\ Log\ (b)	InnoSetup Log
39842!:mime	application/x-innosetup
39843# unins000.dat, unins001.dat, ...
39844!:ext	dat
39845# " 64-bit" variant
39846>0x1c	string		>\0				\b%.7s
39847# AppName[0x80] like "Minimal SYStem", ClamWin Free Antivirus , ...
39848>0xc0	string		x				%s
39849# AppId[0x80] is similar to AppName or
39850# GUID like {4BB0DCDC-BC24-49EC-8937-72956C33A470} start with left brace
39851>0x40	ubyte		0x7b
39852>>0x40	string		x				%-.38s
39853# do not know how this log version correlates to program version
39854>0x140	ulelong		x				\b, version %#x
39855# NumRecs
39856#>0x144	ulelong		x				\b, %#4.4x records
39857# EndOffset means files size
39858>0x148	ulelong		x				\b, %u bytes
39859# Flags 5 25h 35h
39860#>0x14c	ulelong		x				\b, flags %8.8x
39861# Reserved: array[0..26] of Longint
39862# the non Unicode HighestSupportedVersion may never become greater than or equal to 1000
39863>0x140	ulelong		<1000
39864# hostname
39865>>0x1d6	pstring		x				\b, %s
39866# user name
39867>>>&0	pstring		x				\b\%s
39868# directory like C:\Program Files (x86)\GnuWin32
39869>>>>&0	pstring		x				\b, "%s"
39870# version 1000 or higher implies unicode
39871>0x140	ulelong		>999
39872# hostname
39873>>0x1db	lestring16	x				\b, %-.9s
39874# utf string variant with prepending fe??ffFFff
39875>>0x1db	search/43	\xFF\xFF\xFF
39876# user name
39877>>>&0	lestring16	x				\b\%-.9s
39878>>>&0	search/43	\xFF\xFF\xFF
39879# directory like C:\Program Files\GIMP 2
39880>>>>&0	lestring16	x				\b, %-.42s
39881
39882# URL:      https://jrsoftware.org/ishelp/index.php?topic=setup_signeduninstaller
39883# Reference:https://github.com/jrsoftware/issrc/blob/main/Projects/Struct.pas
39884# From:     Joerg Jenderek
398850	string	Inno\ Setup\ Messages\ (
39886# null padded til 0x40 boundary
39887>0x38	quad		0				InnoSetup messages
39888!:mime	application/x-innosetup-msg
39889# unins000.msg, unins001.msg, ...
39890!:ext	msg
39891# version like 5.1.1 5.1.11 5.5.0 5.5.3 6.0.0
39892>>0x15	string		x				\b, version %.5s
39893# look for 6th char of version string or terminating right parentheses
39894>>>0x1a	ubyte		!0x29				\b%c
39895# NumMessages
39896>>0x40	ulelong		x				\b, %u messages
39897# TotalSize: Cardinal;
39898#>>0x44	ulelong		x				\b, TotalSize %u
39899# NotTotalSize: Cardinal;
39900#>>0x48	ulelong		x				\b, NotTotalSize %u
39901# CRCMessages: Longint;
39902#>>0x4C	ulelong		x				\b, CRC %#x
39903>>0x40	ulelong		x
39904# (u) after version means unicoded messages
39905>>>0x1c	search/2	(u)				(UTF-16),
39906>>>>0x50 lestring16	x				%s
39907# ASCII coded message
39908>>>0x1c	default		x				(ASCII),
39909>>>>0x50 string		x				%s
39910
39911# Windows Imaging (WIM) Image
39912# Update: Joerg Jenderek at Mar 2019, 2021
39913# URL: https://en.wikipedia.org/wiki/Windows_Imaging_Format
39914#      http://fileformats.archiveteam.org/wiki/Windows_Imaging_Format
39915# Reference: https://download.microsoft.com/download/f/e/f/
39916# fefdc36e-392d-4678-9e4e-771ffa2692ab/Windows%20Imaging%20File%20Format.rtf
39917# Note: verified by like `7z t boot.wim` `wiminfo install.esd --header`
399180	string		MSWIM\000\000\000
39919>0	use		wim-archive
39920# https://wimlib.net/man1/wimoptimize.html
399210	string		WLPWM\000\000\000
39922>0	use		wim-archive
399230	name		wim-archive
39924# _WIMHEADER_V1_PACKED ImageTag[8]
39925>0	string		x			Windows imaging
39926!:mime	application/x-ms-wim
39927# TO avoid in file version 5.36 error like
39928# Magdir/windows, 760: Warning: Current entry does not yet have a description
39929# file: could not find any valid magic files! (No error)
39930# split WIM
39931>16	ulelong		&0x00000008		(SWM
39932!:ext	swm
39933# usPartNumber; 1, unless the file was split into multiple parts
39934>>40	uleshort	x			\b %u
39935# usTotalParts; The total number of WIM file parts in a spanned set
39936>>42	uleshort	x			\b of %u) image
39937# non split WIM
39938>16	ulelong		^0x00000008
39939# https://wimlib.net/man1/wimmount.html
39940# solid WIMs; version 3584; usually contain LZMS-compressed and the .esd extension
39941>>12	ulelong		3584			(ESD) image
39942!:ext	esd
39943>>12	ulelong		!3584			(
39944# look for archive member RunTime.xml like in Microsoft.Windows.Cosa.Desktop.Client.ppkg
39945>>>156	search/68233/s		RunTime.xml	\bWindows provisioning package)
39946!:ext	ppkg
39947# if is is not a Windows provisioning package, then it is a WIM
39948>>>156	default			x		\bWIM) image
39949# second disk image part created by Microsoft's RecoveryDrive.exe has name Reconstruct.WIM2
39950!:ext	wim/wim2
39951>0	string/b	WLPWM\000\000\000	\b, wimlib pipable format
39952# cbSize size of the WIM header in bytes like 208
39953#>8	ulelong		x			\b, headersize %u
39954# dwVersion version of the WIM file 00010d00h~1.13 00000e00h~0.14
39955>14	uleshort	x			v%u
39956>13	ubyte		x			\b.%u
39957# dwImageCount; The number of images contained in the WIM file
39958>44	ulelong		>1			\b, %u images
39959# dwBootIndex
39960# 1-based index of the bootable image of the WIM, or 0 if no image is bootable
39961>0x78	ulelong		>0			\b, bootable no. %u
39962# dwFlags
39963#>16	ulelong		x			\b, flags %#8.8x
39964#define FLAG_HEADER_COMPRESSION		0x00000002
39965#define FLAG_HEADER_READONLY            0x00000004
39966#define FLAG_HEADER_SPANNED		0x00000008
39967#define FLAG_HEADER_RESOURCE_ONLY       0x00000010
39968#define FLAG_HEADER_METADATA_ONLY       0x00000020
39969#define FLAG_HEADER_WRITE_IN_PROGRESS   0x00000040
39970#define FLAG_HEADER_RP_FIX		0x00000080 reparse point fixup
39971#define FLAG_HEADER_COMPRESS_RESERVED   0x00010000
39972#define FLAG_HEADER_COMPRESS_XPRESS     0x00020000
39973#define FLAG_HEADER_COMPRESS_LZX	0x00040000
39974#define FLAG_HEADER_COMPRESS_LZMS	0x00080000
39975#define FLAG_HEADER_COMPRESS_XPRESS2    0x00100000 wimlib-1.13.0\include\wimlib\header.h
39976# XPRESS, with small chunk size
39977>16	ulelong		&0x00100000		\b, XPRESS2
39978>16	ulelong		&0x00080000		\b, LZMS
39979>16	ulelong		&0x00040000		\b, LZX
39980>16	ulelong		&0x00020000		\b, XPRESS
39981>16	ulelong		&0x00000002		compressed
39982>16	ulelong		&0x00000004		\b, read only
39983>16	ulelong		&0x00000010		\b, resource only
39984>16	ulelong		&0x00000020		\b, metadata only
39985>16	ulelong		&0x00000080		\b, reparse point fixup
39986#>16	ulelong		&0x00010000		\b, RESERVED
39987# dwCompressionSize; Uncompressed chunk size for resources or 0 if uncompressed
39988#>20	ulelong		>0			\b, chunk size %u bytes
39989# gWIMGuid
39990#>24	ubequad		x			\b, GUID %#16.16llx
39991#>>32	ubequad		x			\b%16.16llx
39992# rhOffsetTable; the location of the resource lookup table
39993# wim_reshdr_disk[24]= u8 size_in_wim[7] + u8 flags + le64 offset_in_wim + le64 uncompressed_size
39994#>48	ubequad		x			\b, rhOffsetTable %#16.16llx
39995# rhXmlData; the location of the XML data
39996#>0x50	ulelong		x			\b, at %#8.8x
39997# NOT WORKING \xff\xfe<\0W\0I\0M\0
39998#>(0x50.l)	ubequad	x			\b, xml=%16.16llx
39999# rhBootMetadata; the location of the metadata resource
40000#>0x60	ubequad		x			\b, rhBootMetadata %#16.16llx
40001# rhIntegrity; the location of integrity table used to verify files
40002#>0x7c	ubequad		x			\b, rhIntegrity %#16.16llx
40003# Unused[60]
40004#>148	ubequad		!0			\b,unused %#16.16llx
40005#
40006
40007# From:		Joerg Jenderek
40008# URL:		https://en.wikipedia.org/wiki/Windows_Easy_Transfer
40009# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/m/mig.trid.xml
40010# Note:		called "Windows Easy Transfer migration data" by TrID,
40011#		"Migration Store" or "EasyTransfer file" by Microsoft
400120		string		1giM	Windows Easy Transfer migration data
40013#!:mime		application/octet-stream
40014!:mime		application/x-ms-mig
40015!:ext		mig
40016>0x18		string		=MRTS	without password
40017# data offset with 1 space at end
40018>>0x1c		ulelong+0x38	x	\b, at %#x
40019# look for zlib compressed data by ./compress
40020>>(0x1c.l+0x38)	ubyte		x
40021>>>&-1	indirect	x
40022# in password protected examples MRTS comes some bytes further
40023>0x18		string		!MRTS	with password
40024# look for first MRTS tag
40025>0x18		search/29/b	MRTS
40026# probably first file name length like 178, ...
40027#>>&0		ulelong		x	\b, 1st length %u
40028# URL like File\C:\Users\nutzer\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\desktop.ini
40029>>&20		lestring16	x	\b, 1st %-s
40030
40031# Microsoft SYLK
40032# https://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK)
40033# https://outflank.nl/upload/sylksum.txt
400340	string	ID;P	Microsoft SYLK program
40035>4	string	>0	\b, created by %s
40036!:ext	slk/sylk
40037
40038# Summary:	Windows Performance Monitor Alert
40039# From:		Joerg Jenderek
40040# URL:		https://en.wikipedia.org/wiki/Performance_Monitor
40041# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/p/pma.trid.xml
40042# Note:		called "Windows Performance Monitor Alert" by TrID
400430	ubelong			=0xDC058340
40044>4	ubyte			=0		Windows Performance Monitor Alert
40045#!:mime		application/octet-stream
40046# https://www.thoughtco.com/mime-types-by-content-type-3469108
40047# https://filext.com/file-extension/PAM
40048!:mime		application/x-perfmon
40049#!:mime		application/x-ms-pma
40050!:ext		pma
40051# metric type like: "BrowserMetrics" "CrashpadMetrics" "SetupMetrics"
40052>>80	string			x		\b, "%s"
40053
40054# From:		Joerg Jenderek
40055# URL:		https://en.wikipedia.org/wiki/InstallShield
40056# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/i/ins.trid.xml
40057# Note:		contain also keywords like: BATCH_INSTALL ISVERSION LOGHANDLE SRCDIR SRCDISK WINDIR WINSYSDISK
400580	ubelong	0xB8C90C00	InstallShield Script
40059#!:mime	application/octet-stream
40060!:mime	application/x-installshield-ins
40061# like test.ins Setup.ins
40062!:ext	ins
40063# UNKNOWN like: 160034121de07e00 1600341260befe00 16003412e0783700
40064# 5000010021083f00 50000100b0335600 50000100cbfdf800 50000100dfbc4700
40065#>4	ubequad		x		\b, at 4 %#16.16llx
40066# copyright text like:	"Stirling Technologies, Inc.  (c) 1990-1994"
40067#			"InstallSHIELD Software Coporation  (c) 1990-1997"
40068>13	pstring/h	x		"%s"
40069# look for specific ASCII variable names
40070>1	search/0x121/s	SRCDIR	\b, variable names:
40071# 1st like: SRCDIR
40072>>&-4		leshort		x	#%u
40073>>&-2		pstring/h	x	%s
40074# 2nd like: SRCDISK
40075>>>&0		leshort		x	#%u
40076>>>&2		pstring/h	x	%s
40077# 3rd like: TARGETDISK
40078>>>>&0		leshort		x	#%u
40079>>>>&2		pstring/h	x	%s
40080# 4th like: TARGETDIR
40081#>>>>>&0		leshort		x	#%u
40082#>>>>>&2		pstring/h	x	%s
40083# 5th like: WINDIR
40084#>>>>>>&0	leshort		x	#%u
40085#>>>>>>&2	pstring/h	x	%s
40086# 6th like: WINDISK
40087#>>>>>>>&0	leshort		x	#%u
40088#>>>>>>>&2	pstring/h	x	%s
40089# 7th like: WINSYSDIR
40090#>>>>>>>>&0	leshort		x	#%u
40091#>>>>>>>>&2	pstring/h	x	%s
40092# ... LOGHANDLE
40093>0		ubelong		x	...
40094#
40095
40096#------------------------------------------------------------------------------
40097# $File: wireless,v 1.2 2009/09/19 16:28:13 christos Exp $
40098# wireless-regdb:        file(1) magic for CRDA wireless-regdb file format
40099#
401000	string	RGDB	CRDA wireless regulatory database file
40101>4	belong	19	(Version 1)
40102
40103#------------------------------------------------------------------------------
40104# $File: wordprocessors,v 1.31 2022/08/31 08:00:53 christos Exp $
40105# wordprocessors:  file(1) magic fo word processors.
40106#
40107####### PWP file format used on Smith Corona Personal Word Processors:
401082	string	\040\040\040\040\040\040\040\040\040\040\040ML4D\040'92	Smith Corona PWP
40109>24	byte	2	\b, single spaced
40110>24	byte	3	\b, 1.5 spaced
40111>24	byte	4	\b, double spaced
40112>25	byte	0x42	\b, letter
40113>25	byte	0x54	\b, legal
40114>26	byte	0x46	\b, A4
40115
40116# URL:	http://fileformats.archiveteam.org/wiki/Microsoft_Works_Word_Processor
40117# reference:	http://mark0.net/download/triddefs_xml.7z
40118#		/defs/w/wps-works-dos.trid.xml
40119# From:	Joerg Jenderek
40120# Note:	older non OLE 2 Compound based versions
401210	ubeshort	=0x01FE
40122>112	ubeshort	=0x0100		Microsoft Works 1-3 (DOS) or 2 (Windows) document
40123# title like THE GREAT KHAN GAME
40124>>0x100	string		x		%s
40125!:mime	application/vnd-ms-works
40126#!:mime	application/x-msworks
40127# https://www.macdisk.com/macsigen.php
40128!:apple	????AWWP
40129!:ext	wps
40130
40131# Corel/WordPerfect
40132# URL:		https://en.wikipedia.org/wiki/WordPerfect
40133# Reference:	https://github.com/OneWingedShark/WordPerfect/blob/master/doc/SDK_Help/FileFormats/WPFF_DocumentStructure.htm
40134#		http://mark0.net/download/triddefs_xml.7z/defs/w/wp-generic.trid.xml
401350	string	\xffWPC
40136# WordPerfect
40137>8	byte	1
40138# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/w/wpm-macro.trid.xml
40139# Note:		there exist other macro variants
40140>>9	byte	1	WordPerfect macro
40141#!:mime		application/octet-stream
40142!:mime		application/x-wordperfect-wpm
40143# like: ALTD.WPM ENDFOOT.WPM FOOTEND.WPM LABELS.WPM REVEALTX.WPM
40144!:ext		wpm
40145# Note:		used in WordPerfect 5.1; there exist other FIL variants
40146>>9	byte	2	WordPerfect help file
40147#!:mime		application/octet-stream
40148!:mime		application/x-wordperfect-help
40149# like: WPHELP.FIL
40150!:ext		fil
40151# pointer to document area like: 10h
40152>>>4		ulelong	!0x10	\b, at %#x document area
40153>>9	byte	3	WordPerfect keyboard file
40154#!:mime		application/octet-stream
40155!:mime		application/x-wordperfect-keyboard
40156!:ext		wpk
40157# no document area, so point to end of file; so this is file size like: 23381 2978 32835 3355 3775 919
40158>>>4		ulelong	x	\b, %u bytes
40159>>9	byte	4	WordPerfect VAX keyboard definition
40160#!:mime	application/octet-stream
40161!:mime	application/x-wordperfect-keyboard
40162#!:ext	foo
40163# URL:		http://fileformats.archiveteam.org/wiki/WordPerfect
40164# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/w/wpd-doc-gen.trid.xml
40165>>9	byte	10	WordPerfect document
40166# https://www.iana.org/assignments/media-types/application/vnd.wordperfect
40167!:mime		application/vnd.wordperfect
40168#!:apple		????WPC2
40169# TODO: distinguish different suffix
40170!:ext		wpd/wpt/wkb/icr/tut/sty/tst/crs
40171>>9	byte	11	WordPerfect dictionary
40172>>9	byte	12	WordPerfect thesaurus
40173>>9	byte	13	WordPerfect block
40174>>9	byte	14	WordPerfect rectangular block
40175>>9	byte	15	WordPerfect column block
40176>>9	byte	16	WordPerfect printer data
40177#!:mime		application/octet-stream
40178!:mime		application/x-wordperfect-prs
40179# like: STANDARD.PRS WORKBOOK.PRS
40180!:ext		prs
40181# like: "Standard Printer" "Workbook Printer"
40182>>>0x64		pstring/B	>A	"%s"
40183#>>9	byte	18	WordPerfect Prefix information file
40184# printer resource .ALL
40185>>9	byte	19	WordPerfect printer data
40186#!:mime		application/octet-stream
40187!:mime		application/x-wordperfect-all
40188!:ext		all
40189# display Resource
40190>>9	byte	20	WordPerfect driver resource data
40191#!:mime		application/octet-stream
40192!:mime		application/x-wordperfect-drs
40193# like: WPSMALL.DRS
40194!:ext		drs
40195# pointer to index area with string "smalldrs" like: 46h
40196>>>4		uleshort	!0x46	\b, at %#x index area
40197>>9	byte	21	WordPerfect Overlay file
40198#!:mime		application/octet-stream
40199!:mime		application/x-wordperfect-fil
40200# like: WP.FIL
40201!:ext		fil
40202# URL:		http://fileformats.archiveteam.org/wiki/WordPerfect_Graphics
40203# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-wpg.trid.xml
40204# Note:		called "WordPerfect Graphics bitmap" by TrID and
40205#		"WordPerfect Graphics Metafile" by DROID via x-fmt/395 fmt/1042
40206#		"WPG (Word Perfect Graphics)" by ImageMagick `identify -verbose BUTTRFLY.WPG`
40207>>9	byte	22	WordPerfect graphic image
40208# TODO: skip DROID x-fmt-395-signature-id-132.wpg by check for existing document area
40209#>>>4		ulelong	>15	WordPerfect_graphic_OK
40210#!:mime		application/octet-stream
40211# http://extension.nirsoft.net/wpg
40212!:mime		image/x-wordperfect-graphics
40213# https://reposcope.com/mimetype/application/x-wpg
40214#!:mime		application/x-wpg
40215# like: BUTTRFLY.WPG STAR-5.WPG input.wpg WORDPFCT.WPG
40216!:ext		wpg
40217# pointer to document area like: 10h 1Ah
40218>>>4		ulelong		!0x1A	\b, at %#x document area
40219>>9	byte	23	WordPerfect hyphenation code
40220>>9	byte	24	WordPerfect hyphenation data
40221>>9	byte	25	WordPerfect macro resource data
40222#!:mime		application/octet-stream
40223!:mime		application/x-wordperfect-mrs
40224# like: WP.MRS
40225!:ext		mrs
40226>>9	byte	27	WordPerfect hyphenation lex
40227>>9	byte	29	WordPerfect wordlist
40228>>9	byte	30	WordPerfect equation resource data
40229#!:mime		application/octet-stream
40230!:mime		application/x-wordperfect-qrs
40231# like: WQ.QRS wpDE.qrs wpen.qrs
40232!:ext		qrs
40233# jump to document area with some marker and equation
40234>>>(4.l)	ubyte	x
40235# equation like: "Fraction:  x OVER y"
40236>>>>&1		string	>A	(...%-.19s...)
40237# pointer to document area like: 17C4h
40238>>>4		ulelong	x	\b, at %#x document area
40239#>>9	byte	31	reserved
40240#>>9	byte	32	WordPerfect VAX .SET
40241>>9	byte	33	WordPerfect spell rules
40242>>9	byte	34	WordPerfect dictionary rules
40243#>>9	byte	35	reserved
40244# video resource device driver
40245# Note:		 filetype 26 for VRS and filetype 36 for WPD apparently is wrong
40246>>9	byte	36	WordPerfect Video Resource
40247#!:mime		application/octet-stream
40248!:mime		application/x-wordperfect-vrs
40249# like: STANDARD.VRS
40250!:ext		vrs
40251# like: "IBM CGA (& compatibles)"
40252>>>0x20		string	>A	"%.23s"
40253>>9	byte	39	WordPerfect spell rules (Microlytics)
40254#>>9	byte	40	reserved
40255>>9	byte	41	WordPerfect Install options
40256#!:mime		application/octet-stream
40257!:mime		application/x-wordperfect-ins
40258# like: WP51.INS
40259!:ext		ins
40260# probably default directory name like: "C:\WP51\"
40261>>>0x12		string	>A	"%.8s"
40262# maybe mouse driver for WP5.1
40263>>9	byte	42	WordPerfect Resource
40264#!:mime		application/octet-stream
40265!:mime		application/x-wordperfect-irs
40266# like: STANDARD.IRS
40267!:ext		irs
40268# like: "Mouse Driver (MOUSE.COM)"
40269>>>0x28		string	>A	"%.24s"
40270>>9	byte	43	WordPerfect settings file
40271# maybe Macintosh WP2.0 document
40272>>9	byte	44	WordPerfect 3.5 document
40273!:mime		application/vnd.wordperfect
40274!:apple		????WPD3
40275# like: WP3.wpd
40276!:ext		wpd
40277>>9	byte	45	WordPerfect 4.2 document
40278# External spell code module (WP5.1)
40279#>>9	byte	46	WordPerfect external spell
40280# external spell dictionary .LEX
40281#>>9	byte	47	WordPerfect external spell dictionary
40282# Macintosh SOFT graphics file (SOFT (Sequential Object Format)
40283#>>9	byte	48	WordPerfect SOFT graphics
40284#>>9	byte	49	reserved
40285#>>9	byte	50	reserved
40286# WPWin 5.1 Application Resource Library added for WPWin 5.1
40287#>>9	byte	51	WordPerfect application resource library
40288>>9	byte	69	WordPerfect dialog file
40289# From:		Joerg Jenderek
40290# Note:		found in sub directory WritingTools inside WordPerfect 2021 program directory
40291>>9	byte	70	WordPerfect Writing Tools
40292#!:mime	application/octet-stream
40293!:mime	application/x-wordperfect-cbt
40294# like: Wt13cbede.cbt Wt13cbeit.cbt Wt13cbefr.cbt WT21cbede.cbt Wt13cbeEN.CBD WT21cbeEN.CBD
40295!:ext	cbd/cbt
40296>>9	byte	76	WordPerfect button bar
40297>>9	default x
40298>>>9	byte	x	Corel WordPerfect: Unknown filetype %d
40299# Corel Shell
40300>8	byte	2
40301>>9	byte	1	Corel shell macro
40302>>9	byte	10	Corel shell definition
40303>>9	default x
40304>>>9	byte	x	Corel Shell: Unknown filetype %d
40305# Corel Notebook
40306>8	byte	3
40307>>9	byte	1	Corel Notebook macro
40308>>9	byte	2	Corel Notebook help file
40309>>9	byte	3	Corel Notebook keyboard file
40310>>9	byte	10	Corel Notebook definition
40311>>9	default	x
40312>>>9	byte	x	Corel Notebook: Unknown filetype %d
40313# Corel Calculator
40314>8	byte	4
40315>>9	byte	2	Corel Calculator help file
40316>>9	default	x
40317>>>9	byte	x	Corel Calculator: Unknown filetype %d
40318# Corel File Manager
40319>8	byte	5
40320>>9	default	x
40321>>>9	byte	x	Corel File Manager: Unknown filetype %d
40322# Corel Calendar
40323>8	byte	6
40324>>9	byte 	2	Corel Calendar help file
40325>>9	byte 	10	Corel Calendar data file
40326>>9	default	x
40327>>>9	byte	x	Corel Calendar: Unknown filetype %d
40328# Corel Program Editor/Ed Editor
40329>8	byte	7
40330>>9	byte	1	Corel Editor macro
40331>>9	byte	2	Corel Editor help file
40332>>9	byte	3	Corel Editor keyboard file
40333>>9	byte	25	Corel Editor macro resource file
40334>>9	default	x
40335>>>9	byte	x	Corel Program Editor/Ed Editor: Unknown filetype %d
40336# Corel Macro Editor
40337>8	byte	8
40338>>9	byte 	1	Corel Macro editor macro
40339>>9	byte 	2	Corel Macro editor help file
40340>>9	byte	3	Corel Macro editor keyboard file
40341>>9	default	x
40342>>>9	byte	x	Corel Macro Editor: Unknown filetype %d
40343# Corel Plan Perfect
40344>8	byte	9
40345>>9	default	x
40346>>>9	byte	x	Corel Plan Perfect: Unknown filetype %d
40347# Corel DataPerfect
40348>8	byte	10
40349# CHECK: Don't these belong into product 9?
40350>>9	byte	1	Corel PlanPerfect macro
40351>>9	byte	2	Corel PlanPerfect help file
40352>>9	byte	3	Corel PlanPerfect keyboard file
40353>>9	byte	10	Corel PlanPerfect worksheet
40354>>9	byte	15	Corel PlanPerfect printer definition
40355>>9	byte	18	Corel PlanPerfect graphic definition
40356>>9	byte	19	Corel PlanPerfect data
40357>>9	byte	20	Corel PlanPerfect temporary printer
40358>>9	byte	25	Corel PlanPerfect macro resource data
40359>>9	default	x
40360>>>9	byte	x	Corel DataPerfect: Unknown filetype %d
40361# Corel Mail
40362>8	byte	11
40363>>9	byte	2	Corel Mail help file
40364>>9	byte	5	Corel Mail distribution list
40365>>9	byte	10	Corel Mail out box
40366>>9	byte	11	Corel Mail in box
40367>>9	byte	20	Corel Mail users archived mailbox
40368>>9	byte	21	Corel Mail archived message database
40369>>9	byte	22	Corel Mail archived attachments
40370>>9	default	x
40371>>>9	byte	x	Corel Mail: Unknown filetype %d
40372# Corel Printer
40373>8	byte	12
40374>>9	byte	11	Corel Printer temporary file
40375>>9	default	x
40376>>>9	byte	x	Corel Printer: Unknown filetype %d
40377# Corel Scheduler
40378>8	byte	13
40379>>9	byte	2	Corel Scheduler help file
40380>>9	byte	10	Corel Scheduler in file
40381>>9	byte	11	Corel Scheduler out file
40382>>9	default	x
40383>>>9	byte	x	Corel Scheduler: Unknown filetype %d
40384# Corel WordPerfect Office
40385>8	byte	14
40386>>9	byte	10	Corel GroupWise settings file
40387>>9	byte	17	Corel GroupWise directory services
40388>>9	byte	43	Corel GroupWise settings file
40389>>9	default	x
40390>>>9	byte	x	Corel WordPerfect Office: Unknown filetype %d
40391# Corel DrawPerfect
40392>8	byte	15
40393>>9	default	x
40394>>>9	byte	x	Corel DrawPerfect: Unknown filetype %d
40395# Corel LetterPerfect
40396>8	byte	16
40397>>9	default	x
40398>>>9	byte	x	Corel LetterPerfect: Unknown filetype %d
40399# Corel Terminal
40400>8	byte	17
40401>>9	byte	10	Corel Terminal resource data
40402>>9	byte	11	Corel Terminal resource data
40403>>9	byte	43	Corel Terminal resource data
40404>>9	default	x
40405>>>9	byte	x	Corel Terminal: Unknown filetype %d
40406# Corel loadable file
40407>8	byte	18
40408>>9	byte	10	Corel loadable file
40409>>9	byte	11	Corel GUI loadable text
40410>>9	byte	12	Corel graphics resource data
40411>>9	byte	13	Corel printer settings file
40412>>9	byte	14	Corel port definition file
40413>>9	byte	15	Corel print queue parameters
40414>>9	byte	16	Corel compressed file
40415>>9	default	x
40416>>>9	byte	x	Corel loadable file: Unknown filetype %d
40417>>15	byte	0	\b, optimized for Intel
40418>>15	byte	1	\b, optimized for Non-Intel
40419# Network service
40420>8	byte	20
40421>>9	byte	10	Corel Network service msg file
40422>>9	byte	11	Corel Network service msg file
40423>>9	byte	12	Corel Async gateway login msg
40424>>9	byte	14	Corel GroupWise message file
40425>>9	default	x
40426>>>9	byte	x	Corel Network service: Unknown filetype %d
40427# GroupWise
40428>8	byte	31
40429>>9	byte	20	GroupWise admin domain database
40430>>9	byte	21	GroupWise admin host database
40431>>9	byte	23	GroupWise admin remote host database
40432>>9	byte	24	GroupWise admin ADS deferment data file
40433>>9	default	x
40434>>>9	byte	x	GroupWise: Unknown filetype %d
40435# Corel Writing Tools WT*.*
40436# From:		Joerg Jenderek
40437# URL:		https://support.corel.com/hc/en-us/articles/215876258-Writing-Tools-Spell-Check-Dictionary-does-not-work-in-WordPerfect-X5
40438#		http://wordperfect.helpmax.net/en/editing-and-formatting-documents/using-the-writing-tools/working-with-user-word-lists/
40439# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/u/uwl-wp.trid.xml
40440>8	byte	32
40441>>9	byte	10	Corel Writing Tools User Word List
40442#!:mime	application/octet-stream
40443!:mime	application/x-wordperfect-wordlist
40444# personal user word list UWL under user directory like: WTDE.UWL WTUS.UWL WT21DE.UWL WT21US.UWL WT13DE.UWL ...
40445# and "template" SAV/HWL variant under program directory like: wt13en.hwl Wt13de.sav Wt13it.sav wt13ru.sav WT21us.sav Wtcz.sav ...
40446!:ext	uwl/hwl/sav
40447# jump to document area with some marker and word list
40448>>>(4.l)	ubyte	x
40449# look for beginning of word list starting mostly with letter a as UTF-16 like: Wt13es.sav
40450# but not found in russian wt13ru.sav
40451>>>>&0	search/91/sb	a\0
40452# word list starting like: "acsesory\022accessory.\001\026acomodate\026accommodate4\001"
40453>>>>>&0		lestring16	x	(...%-.33s...)
40454# pointer to document area like: 200h
40455>>>4	ulelong	!0x200	\b, at %#x document area
40456# file size, not including pad characters at EOF
40457>>>0x14	uleshort x	\b, %u bytes
40458# IntelliTAG
40459>8	byte	33
40460>>9	byte	10	IntelliTAG (SGML) compiled DTD
40461>>9	default	x
40462>>>9	byte	x	IntelliTAG: Unknown filetype %d
40463# Summary:	Corel WordPerfect WritingTools advise part
40464# From:		Joerg Jenderek
40465# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/a/adv-wp.trid.xml
40466>8	byte	34
40467>>9	byte	11	Corel WordPerfect dictionary advise
40468#!:mime	application/octet-stream
40469!:mime	application/x-wordperfect-adv
40470#!:mime	application/vnd.wordperfect.adv
40471# like: WT21de.adv Wt13de.adv Wt13es.adv Wt13fr.adv wt13us.adv
40472!:ext	adv
40473# advise text part often start with tag like: 580A
40474#>>>(16.s)	ubequad	x	ADVISE PART %#llx
40475# part of advise text like: "This is too informal for most writing."
40476>>>(16.s+16)	string	x	(...%-.33s...)
40477# everything else
40478>8	default x
40479>>8	byte	x	Unknown Corel/Wordperfect product %d,
40480>>>9	byte	x	file type %d
40481>10	byte	0	\b, v5.
40482>10	byte	!0	\b, v%d.
40483>11	byte	x	\b%d
40484
40485# Hangul (Korean) Word Processor File
404860	string	HWP\ Document\ File	Hangul (Korean) Word Processor File 3.0
40487
40488# CosmicBook, from Benoit Rouits
404890       string  CSBK    Ted Neslson's CosmicBook hypertext file
40490
404912       string  EYWR    AmigaWriter file
40492
40493# chi:  file(1) magic for ChiWriter files
404940       string          \\1cw\          ChiWriter file
40495>5      string          >\0             version %s
404960       string          \\1cw           ChiWriter file
40497
40498# Quark Express from https://www.garykessler.net/library/file_sigs.html
404992	string	IIXPR3			Intel Quark Express Document (English)
405002	string	IIXPRa			Intel Quark Express Document (Korean)
405012	string	MMXPR3			Motorola Quark Express Document (English)
40502!:mime	application/x-quark-xpress-3
405032	string	MMXPRa			Motorola Quark Express Document (Korean)
40504
40505# From:		Joerg Jenderek
40506# URL:		http://fileformats.archiveteam.org/wiki/PageMaker
40507#		https://en.wikipedia.org/wiki/Adobe_PageMaker
40508# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/p
40509#		pm4-pagemaker.trid.xml
40510#		pm5-pagemaker.trid.xml
40511# Note:		since version 6 in 1995 called Adobe PageMaker and
40512#		embedded in Compound Document handled by ./ole2compounddocs
40513#		mainly tested little endian variant
405144	ubelong		=0x0000FF99
40515>0	use		PageMaker
40516# big endian variant
405174	ubelong		=0x000099FF
40518>0	use		\^PageMaker
40519#	display information of Aldus/Adobe PageMaker document/publication
405200	name		PageMaker
40521>110	uleshort	<0x0600			Aldus
40522>110	uleshort	>0x05FF			Adobe
40523>110	uleshort	x			PageMaker
40524# "MP" marker for newer version 4 and above according to TrID
40525#>108	string		x			\b, MARKER "%.2s"
40526# http://www.nationalarchives.gov.uk/pronom/fmt/876
40527!:mime		application/vnd.pagemaker
40528#!:mime		application/x-pagemaker
40529# different file name extensions are used depending on version
40530# older version like 3
40531>110	uleshort/256	=0			document
40532# https://www.macdisk.com/macsigen.php
40533!:apple	ALB3ALD3
40534# PT3 for template and no example for PageMaker document/publiction with PM3 extension
40535!:ext	pm3/pt3
40536>110	uleshort/256	=4			document
40537!:apple	ALD4ALB4
40538# no example for PT4 template
40539!:ext	pm4/pt4
40540>110	uleshort/256	=5			document
40541!:apple	ALD5ALB5
40542# no example for PT5 template
40543!:ext	pm5/pt5
40544>110	uleshort	=0x0600			document
40545!:apple	ALD6ALB6
40546# PT6 for template
40547!:ext	pm6/pt6
40548# HOWTO to distinguish version 7 from 6.5 ?
40549>110	uleshort	=0x0632			document
40550!:apple	AD65AB65
40551# no example for T65 template
40552!:ext	p65/t65/pmd/pmt
40553# version 7 with PMT extension for template
40554#!:ext	pmd/pmt
40555#!:apple	????PUBF
40556# endian marker FF 99 for little endian
40557>6	ubyte	=0xFF			\b, little-endian
40558>6	ubyte	=0x99			\b, big-endian
40559# newer numeric version like: 4 5 6 6.50
40560#>110	uleshort	x			\b, VERSION=%#x
40561>110	uleshort	>0x03FF
40562>>110	uleshort/256	x			\b, version %u
40563>>110	uleshort%256	>0			\b.%u
40564# older version like 3
40565>110	uleshort	<0x0400			\b, maybe version 3
40566
40567# adobe indesign (document, whatever...) from querkan
405680	belong	0x0606edf5		Adobe InDesign
40569>16	string	DOCUMENT		Document
40570
40571#------------------------------------------------------------------------------
40572# ichitaro456: file(1) magic for Just System Word Processor Ichitaro
40573#
40574# Contributor kenzo-:
40575# Reversed-engineered JS Ichitaro magic numbers
40576#
40577
405780	string		DOC
40579>43	byte		0x14	Just System Word Processor Ichitaro v4
40580!:mime	application/x-ichitaro4
40581>144	string	JDASH		application/x-ichitaro4
40582
405830	string		DOC
40584>43	byte		0x15	Just System Word Processor Ichitaro v5
40585!:mime	application/x-ichitaro5
40586
405870	string		DOC
40588>43	byte		0x16	Just System Word Processor Ichitaro v6
40589!:mime	application/x-ichitaro6
40590
40591# Type: Freemind mindmap documents
40592# From: Jamie Thompson <debian-bugs@jamie-thompson.co.uk>
405930	string/w	\<map\ version	Freemind document
40594!:mime	application/x-freemind
40595
40596# Type: Freeplane mindmap documents
40597# From: Felix Natter <fnatter@gmx.net>
405980       string/w        \<map\ version="freeplane  Freeplane document
40599!:mime  application/x-freeplane
40600
40601# Type:        Scribus
40602# From:        Werner Fink <werner@suse.de>
406030	string	\<SCRIBUSUTF8\ Version		Scribus Document
406040	string	\<SCRIBUSUTF8NEW\ Version	Scribus Document
40605!:mime	application/x-scribus
40606
40607# help files .hlp compiled from html and used by gfxboot added by Joerg Jenderek
40608# markups page=0x04,label=0x12, followed by strings like "opt" or "main" and title=0x14
406090	ulelong&0x8080FFFF	0x00001204	gfxboot compiled html help file
40610
40611# From:		Joerg Jenderek
40612# URL:		https://en.wikipedia.org/wiki/StarOffice
40613# Reference:	http://mark0.net/download/triddefs_xml.7z
40614#		/defs/t/thm-staroffice.trid.xml
40615# Note:		used in Star-, Open- and Libre-Office
40616# named as soffice.StarConfigFile.6 or OpenOffice.org configuration by others
406170		ubeshort	0x0400
40618# non nil gap
40619#>(2.s+8)	ubequad		x		\b, gap %#16.16llx
40620# test for null value in gap after theme name maybe unreliable
40621#>(2.s+9)	ubyte		0		\b, 0-byte
40622# look for keyword GALRESRV near the end
40623# "C:\Program Files (x86)\StarOffice6.0\share\gallery\sg27.thm" Navigation, 238 objects
40624#>0		search/8415	GALRESRV	\b, GALRESRV found
40625# "neues thema6.thm" MorePictures, 315 objects
40626#>0		search/19299	GALRESRV	\b, GALRESRV FOUND
40627#>2		uleshort	x		\b, name length %u
40628# skip file2147.chk by check for positive name length like for sg16.thm "3D"
40629>2		uleshort	>0
40630# skip dBase printer form T6.PRF with misidentified gallery
40631# name :\DBASE\IV\T6.txts by check for 1st object name or RESRV keyword
40632# https://www.clicketyclick.dk/databases/xbase/xbase/dbase_ex.zip
40633# template/t6/with_data/T6.PRF
40634# by first char of object name or RESRV part of keyword GALRESRV
40635>>(2.s+13)	ubyte		>0x1F		StarOffice Gallery theme
40636!:mime		application/x-stargallery-thm
40637# thm is also used for JPEG thumbnail images
40638!:ext		thm
40639# gallery name often 1 word like: 3D sounds Diagrams Flussdiagramme Fotos
40640# or like private://gallery/hidden/imgppt "Cisco - WAN - LAN"
40641>>>2		pstring/h	x		%s
40642# number of objects
40643>>>(2.s+4)	ulelong		x		\b, %u object
40644# plural s
40645>>>(2.s+4)	ulelong		!1		\bs
40646# if available then display first object name
40647>>>(2.s+4)	ulelong		>0
40648# partial file name, URL or internal name like "dd2*" of 1st object or RESRV
40649>>>>(2.s+11)	pstring/h	x		\b, 1st %s
40650
40651# From:	Joerg Jenderek
40652# URL:	http://fileformats.archiveteam.org/wiki/StarOffice_Gallery
40653# Note:	used in Star-, Open- and Libre-Office and found in directories like
40654#	%APPDATA%\Roaming\LibreOffice\4\user\gallery
40655#	$HOME/.config/libreoffice/4/user/gallery
406560	string		SGA3	StarOffice Gallery thumbnails
40657# Unknown like 0x04000?0001000142
40658#>4	ubequad		x	\b, UNKNOWN %#16.16llx
40659#!:mime	application/x-sdg
40660!:mime	application/x-stargallery-sdg
40661!:ext	sdg
40662# display image magic for debugging purpose like 'BM'
40663# looking like PC bitmap, Windows 3.x format with unknown compression
40664#>11	string		x	\b, image magic '%-.2s'
40665# inspect 1st GALLERY thumbnail magic by ./images with 1 space at end
40666#>11	indirect	x	\b; contains
40667
40668
40669#------------------------------------------------------------------------------
40670# $File: wsdl,v 1.6 2021/04/26 15:56:00 christos Exp $
40671# wsdl: PHP WSDL Cache, https://www.php.net/manual/en/book.soap.php
40672# Cache format extracted from source:
40673# https://svn.php.net/viewvc/php/php-src/trunk/ext/soap/php_sdl.c?revision=HEAD&view=markup
40674# Requires file >= 5.05
40675# By Elan Ruusamae <glen@delfi.ee>, Patryk Zawadzki <patrys@pld-linux.org>, 2010-2011
406760		string		wsdl		PHP WSDL cache,
40677>4		byte		x		version %#02x
40678>6		ledate		x		\b, created %s
40679
40680# uri
40681>10		lelong		<0x7fffffff
40682>>10		pstring/l	x		\b, uri: "%s"
40683
40684# source
40685>>>&0		lelong		<0x7fffffff
40686>>>>&-4		pstring/l	x		\b, source: "%s"
40687
40688# target_ns
40689>>>>>&0		lelong		<0x7fffffff
40690>>>>>>&-4	pstring/l	x		\b, target_ns: "%s"
40691#------------------------------------------------------------------------------
40692# x68000:  file(1) magic for the Sharp Home Computer
40693# v1.0
40694# Fabio R. Schmidlin <sd-snatcher@users.sourceforge.net>
40695
40696# Yanagisawa PIC picture
406970	string		PIC
40698>3	search/0x200	\x1A
40699>>&0	search/0x200	\x0
40700>>>&0	ubyte		0		Yanagisawa PIC image file,
40701>>>>&0	ubyte&15	0		model: X68000,
40702>>>>&0	ubyte&15	1		model: PC-88VA,
40703>>>>&0	ubyte&15	2		model: FM-TOWNS,
40704>>>>&0	ubyte&15	3		model: MAC,
40705>>>>&0	ubyte&15	15		model: Generic,
40706>>>>&3	ubeshort	x		%dx
40707>>>>&5	ubeshort	x		\b%d,
40708>>>>&1	ubeshort	4		colors: 16
40709>>>>&1	ubeshort	8		colors: 256
40710>>>>&1	ubeshort	12		colors: 4096
40711>>>>&1	ubeshort	15		colors: 32768
40712>>>>&1	ubeshort	16		colors: 65536
40713>>>>&1	ubeshort	>16		colors: %d-bit
40714
40715
40716
40717#------------------------------------------------------------------------------
40718# $File: xdelta,v 1.5 2011/08/08 09:01:05 christos Exp $
40719# file(1) magic(5) data for xdelta  Josh MacDonald <jmacd@CS.Berkeley.EDU>
40720#
407210	string	%XDELTA%	XDelta binary patch file 0.14
407220	string	%XDZ000%	XDelta binary patch file 0.18
407230	string	%XDZ001%	XDelta binary patch file 0.20
407240	string	%XDZ002%	XDelta binary patch file 1.0
407250	string	%XDZ003%	XDelta binary patch file 1.0.4
407260	string	%XDZ004%	XDelta binary patch file 1.1
40727
407280	string \xD6\xC3\xC4\x00	VCDIFF binary diff
40729
40730#------------------------------------------------------------------------------
40731# $File: xenix,v 1.14 2021/04/26 15:56:00 christos Exp $
40732# xenix:  file(1) magic for Microsoft Xenix
40733#
40734# "Middle model" stuff, and "Xenix 8086 relocatable or 80286 small
40735# model" lifted from "magic.xenix", with comment "derived empirically;
40736# treat as folklore until proven"
40737#
40738# "small model", "large model", "huge model" stuff lifted from XXX
40739#
40740# XXX - "x.out" collides with PDP-11 archives
40741#
407420	string		core		core file (Xenix)
40743# URL: http://www.polarhome.com/service/man/?qf=86rel&tf=2&of=Xenix
40744#      http://fileformats.archiveteam.org/wiki/OMF
40745# Reference: http://www.azillionmonkeys.com/qed/Omfg.pdf
40746# Update: Joerg Jenderek
40747# recordtype~TranslatorHEADerRecord
407480	byte		0x80
40749# GRR: line above is too general as it catches also Extensible storage engine DataBase,
40750# all lif files like forth.lif hpcc88.lif lex90b.lif ( See ./lif)
40751# and all compressed DEGAS low-res bitmaps like: MUNCHIE.PC1 PIDER1.PC1
40752# skip examples like GENA.SND Switch.Snd by looking for record length maximal 1024-3
40753>1	uleshort	<1022
40754# skip examples like GAME.PICTURE Strange.Pic by looking for positive record length
40755>>1	uleshort	>0
40756# skip examples like Xtable.Data FRACTAL.GEN SHR.VIEW by looking for positive string length
40757>>>3	ubyte		>0
40758# skip examples like OMBRE.6 with "UUUUUU" name by looking for valid high second record type
40759>>>>(1.s+3)	ubyte	>0x6D	8086 relocatable (Microsoft)
40760#!:mime	application/octet-stream
40761!:mime	application/x-object
40762!:ext	obj/o/a
40763# T-module name often source name like "hello.c" or "jmppm32.asm" in JMPPM32.OBJ or
40764# "kbhit" in KBHITS.OBJ or "CAUSEWAY_KERNAL" in CWAPI.OBJ
40765>>>>>3	pstring		x		\b, "%s"
40766# data length probably lower 256 according to TrID obj_omf.trid.xml
40767>>>>>1	uleshort	x		\b, 1st record data length %u
40768# checksum
40769#>>>>>(3.b+4)	ubyte	x		\b, checksum %#2.2x
40770# second recordtype: 96h~LNAMES 88h~COMENT 8CH~EXTDEF
40771>>>>>(1.s+3)	ubyte	x		\b, 2nd record type %#x
40772>>>>>(1.s+4)	uleshort x		\b, 2nd record data length %u
407730	leshort		0xff65		x.out
40774>2	string		__.SYMDEF	 randomized
40775>0	byte		x		archive
407760	leshort		0x206		Microsoft a.out
40777>8	leshort		1		Middle model
40778>0x1e	leshort		&0x10		overlay
40779>0x1e	leshort		&0x2		separate
40780>0x1e	leshort		&0x4		pure
40781>0x1e	leshort		&0x800		segmented
40782>0x1e	leshort		&0x400		standalone
40783>0x1e	leshort		&0x8		fixed-stack
40784>0x1c	byte		&0x80		byte-swapped
40785>0x1c	byte		&0x40		word-swapped
40786>0x10	lelong		>0		not-stripped
40787>0x1e	leshort		^0xc000		pre-SysV
40788>0x1e	leshort		&0x4000		V2.3
40789>0x1e	leshort		&0x8000		V3.0
40790>0x1c	byte		&0x4		86
40791>0x1c	byte		&0xb		186
40792>0x1c	byte		&0x9		286
40793>0x1c	byte		&0xa		386
40794>0x1f	byte		<0x040		small model
40795>0x1f	byte		=0x048		large model
40796>0x1f	byte		=0x049		huge model
40797>0x1e	leshort		&0x1		executable
40798>0x1e	leshort		^0x1		object file
40799>0x1e	leshort		&0x40		Large Text
40800>0x1e	leshort		&0x20		Large Data
40801>0x1e	leshort		&0x120		Huge Objects Enabled
40802>0x10	lelong		>0		not stripped
40803
408040	leshort		0x140		old Microsoft 8086 x.out
40805>0x3	byte		&0x4		separate
40806>0x3	byte		&0x2		pure
40807>0	byte		&0x1		executable
40808>0	byte		^0x1		relocatable
40809>0x14	lelong		>0		not stripped
40810
408110	lelong		0x206		b.out
40812>0x1e	leshort		&0x10		overlay
40813>0x1e	leshort		&0x2		separate
40814>0x1e	leshort		&0x4		pure
40815>0x1e	leshort		&0x800		segmented
40816>0x1e	leshort		&0x400		standalone
40817>0x1e	leshort		&0x1		executable
40818>0x1e	leshort		^0x1		object file
40819>0x1e	leshort		&0x4000		V2.3
40820>0x1e	leshort		&0x8000		V3.0
40821>0x1c	byte		&0x4		86
40822>0x1c	byte		&0xb		186
40823>0x1c	byte		&0x9		286
40824>0x1c	byte		&0x29		286
40825>0x1c	byte		&0xa		386
40826>0x1e	leshort		&0x4		Large Text
40827>0x1e	leshort		&0x2		Large Data
40828>0x1e	leshort		&0x102		Huge Objects Enabled
40829
408300	leshort		0x580		XENIX 8086 relocatable or 80286 small model
40831
40832#------------------------------------------------------------------------------
40833# $File: xilinx,v 1.9 2021/04/26 15:56:00 christos Exp $
40834# This is Aaron's attempt at a MAGIC file for Xilinx .bit files.
40835# Xilinx-Magic@RevRagnarok.com
40836# Got the info from FPGA-FAQ 0026
40837#
40838# Rewritten to use pstring/H instead of hardcoded lengths by O. Freyermuth,
40839# fixes at least reading of bitfiles from Spartan 2, 3, 6.
40840# http://www.fpga-faq.com/FAQ_Pages/0026_Tell_me_about_bit_files.htm
40841#
40842# First there is the sync header and its length
408430	beshort 0x0009
40844>2 	belong	=0x0ff00ff0
40845>>&0	belong  =0x0ff00ff0
40846>>>&0	byte    =0x00
40847>>>&1   beshort =0x0001
40848>>>&3	string	a	Xilinx BIT data
40849# Next is a Pascal-style string with the NCD name. We want to capture that.
40850>>>>&0	   pstring/H	x	- from %s
40851# And then 'b'
40852>>>>>&1    string b
40853# Then the model / part number:
40854>>>>>>&0   pstring/H    x       - for %s
40855# Then 'c'
40856>>>>>>>&1 string c
40857# Then the build-date
40858>>>>>>>>&0 pstring/H    x       - built %s
40859# Then 'd'
40860>>>>>>>>>&1   string d
40861# Then the build-time
40862>>>>>>>>>>&0  pstring/H x        \b(%s)
40863# Then 'e'
40864>>>>>>>>>>>&1  string e
40865# And length of data
40866>>>>>>>>>>>>&0 belong x          - data length %#x
40867
40868# Raw bitstream files
408690      long    0xffffffff
40870>&0    belong  0xaa995566      Xilinx RAW bitstream (.BIN)
40871
40872#------------------------------------------------------------------------------
40873# $File: xo65,v 1.5 2022/07/17 15:36:20 christos Exp $
40874# https://cc65.github.io/doc/sim65.html
40875# xo65 object files
40876# From: "Ullrich von Bassewitz" <uz@cc65.org>
40877#
408780	string		\x55\x7A\x6E\x61	xo65 object,
40879>4	leshort		x			version %d,
40880>6	leshort&0x0001 =0x0001			with debug info
40881>6	leshort&0x0001 =0x0000			no debug info
40882
40883# xo65 library files
408840	string		\x6E\x61\x55\x7A	xo65 library,
40885>4	leshort		x			version %d
40886
40887# o65 object files
408880	string		\x01\x00\x6F\x36\x35	o65
40889>6	leshort&0x1000	=0x0000			executable,
40890>6	leshort&0x1000	=0x1000			object,
40891>5	byte		x			version %d,
40892>6	leshort&0x8000	=0x8000			65816,
40893>6	leshort&0x8000	=0x0000			6502,
40894>6	leshort&0x2000	=0x2000			32 bit,
40895>6	leshort&0x2000	=0x0000			16 bit,
40896>6	leshort&0x4000	=0x4000			page reloc,
40897>6	leshort&0x4000	=0x0000			byte reloc,
40898>6	leshort&0x0003	=0x0000			alignment 1
40899>6	leshort&0x0003	=0x0001			alignment 2
40900>6	leshort&0x0003	=0x0002			alignment 4
40901>6	leshort&0x0003	=0x0003			alignment 256
40902
40903# sim65 executable files
409040	string		\x73\x69\x6d\x36\x35	sim65 executable,
40905>5	byte		x			version %d,
40906>6	leshort&0x0000	=0x0000			6502
40907>6	leshort&0x0001	=0x0001			65C02
40908
40909#------------------------------------------------------------------------------
40910# $File: xwindows,v 1.13 2022/03/24 15:48:58 christos Exp $
40911# xwindows:  file(1) magic for various X/Window system file formats.
40912
40913# Compiled X Keymap
40914# XKM (compiled X keymap) files (including version and byte ordering)
409151	string	mkx				Compiled XKB Keymap: lsb,
40916>0	byte	>0				version %d
40917>0	byte	=0				obsolete
409180	string	xkm				Compiled XKB Keymap: msb,
40919>3	byte	>0				version %d
40920>3	byte	=0				obsolete
40921
40922# xfsdump archive
409230	string	xFSdump0			xfsdump archive
40924>8	belong	x	(version %d)
40925
40926# Jaleo XFS files
409270	long	395726				Jaleo XFS file
40928>4	long	x				- version %d
40929>8	long	x				- [%d -
40930>20	long	x				\b%dx
40931>24	long	x				\b%dx
40932>28	long	1008				\bYUV422]
40933>28	long	1000				\bRGB24]
40934
40935# Xcursor data
40936# X11 mouse cursor format defined in libXcursor, see
40937# https://www.x.org/archive/X11R6.8.1/doc/Xcursor.3.html
40938# https://cgit.freedesktop.org/xorg/lib/libXcursor/tree/include/X11/Xcursor/Xcursor.h
409390	string		Xcur		Xcursor data
40940!:mime	image/x-xcursor
40941>10	leshort		x		version %d
40942>>8	leshort		x		\b.%d
40943
40944# X bitmap https://en.wikipedia.org/wiki/X_BitMap
409450	search/2048	#define\040
40946>&0	regex		[a-zA-Z0-9]+_width\040	xbm image
40947>>&0	regex		[0-9]+			(%sx
40948>>>&0	string		\n#define\040
40949>>>>&0	regex		[a-zA-Z0-9]+_height\040
40950>>>>>&0	regex		[0-9]+			\b%s)
40951
40952
40953#------------------------------------------------------------------------------
40954# $File: yara,v 1.4 2021/04/26 15:56:00 christos Exp $
40955# yara:  file(1) magic for https://virustotal.github.io/yara/
40956#
40957
409580	string	YARA
40959>4	lelong	>2047
40960>8	byte	<20	YARA 3.x compiled rule set
40961# version
40962>>8	clear	x
40963>>8	byte	6	created with version 3.3.0
40964>>8	byte	8	created with version 3.4.0
40965>>8	byte	11	created with version 3.5.0
40966>>8	default	x
40967>>>8	byte	x	development version %#02x
40968#------------------------------------------------------------------------------
40969# zfs:	file(1) magic for ZFS dumps
40970#
40971# From <rea-fbsd@codelabs.ru>
40972# ZFS dump header has the following structure (as per zfs_ioctl.h
40973# in FreeBSD with drr_type is set to DRR_BEGIN)
40974#
40975#   enum {
40976#	DRR_BEGIN, DRR_OBJECT, DRR_FREEOBJECTS,
40977#	DRR_WRITE, DRR_FREE, DRR_END,
40978#   } drr_type;
40979#   uint32_t drr_pad;
40980#   uint64_t drr_magic;
40981#   uint64_t drr_version;
40982#   uint64_t drr_creation_time;
40983#   dmu_objset_type_t drr_type;
40984#   uint32_t drr_pad;
40985#   uint64_t drr_toguid;
40986#   uint64_t drr_fromguid;
40987#   char drr_toname[MAXNAMELEN];
40988#
40989# Backup magic is 0x00000002f5bacbac (quad word)
40990# The drr_type is defined as
40991#   typedef enum dmu_objset_type {
40992#	  DMU_OST_NONE,
40993#	  DMU_OST_META,
40994#	  DMU_OST_ZFS,
40995#	  DMU_OST_ZVOL,
40996#	  DMU_OST_OTHER,		  /* For testing only! */
40997#	  DMU_OST_ANY,			  /* Be careful! */
40998#	  DMU_OST_NUMTYPES
40999#  } dmu_objset_type_t;
41000#
41001# Almost all uint64_t fields are printed as the 32-bit ones (with high
41002# 32 bits zeroed), because there is no simple way to print them as the
41003# full 64-bit values.
41004
41005# Big-endian values
410068	string	\000\000\000\002\365\272\313\254 ZFS snapshot (big-endian machine),
41007>20	belong	x	version %u,
41008>32	belong	0	type: NONE,
41009>32	belong	1	type: META,
41010>32	belong	2	type: ZFS,
41011>32	belong	3	type: ZVOL,
41012>32	belong	4	type: OTHER,
41013>32	belong	5	type: ANY,
41014>32	belong	>5	type: UNKNOWN (%u),
41015>40	byte	x	destination GUID: %02X
41016>41	byte	x	%02X
41017>42	byte	x	%02X
41018>43	byte	x	%02X
41019>44	byte	x	%02X
41020>45	byte	x	%02X
41021>46	byte	x	%02X
41022>47	byte	x	%02X,
41023>48	ulong	>0
41024>>52	ulong	>0
41025>>>48	byte	x	source GUID: %02X
41026>>>49	byte	x	%02X
41027>>>50	byte	x	%02X
41028>>>51	byte	x	%02X
41029>>>52	byte	x	%02X
41030>>>53	byte	x	%02X
41031>>>54	byte	x	%02X
41032>>>55	byte	x	%02X,
41033>56	string	>\0	name: '%s'
41034
41035# Little-endian values
410368	string	\254\313\272\365\002\000\000\000	ZFS snapshot (little-endian machine),
41037>16	lelong	x	version %u,
41038>32	lelong	0	type: NONE,
41039>32	lelong	1	type: META,
41040>32	lelong	2	type: ZFS,
41041>32	lelong	3	type: ZVOL,
41042>32	lelong	4	type: OTHER,
41043>32	lelong	5	type: ANY,
41044>32	lelong	>5	type: UNKNOWN (%u),
41045>47	byte	x	destination GUID: %02X
41046>46	byte	x	%02X
41047>45	byte	x	%02X
41048>44	byte	x	%02X
41049>43	byte	x	%02X
41050>42	byte	x	%02X
41051>41	byte	x	%02X
41052>40	byte	x	%02X,
41053>48	ulong	>0
41054>>52	ulong	>0
41055>>>55	byte	x	source GUID: %02X
41056>>>54	byte	x	%02X
41057>>>53	byte	x	%02X
41058>>>52	byte	x	%02X
41059>>>51	byte	x	%02X
41060>>>50	byte	x	%02X
41061>>>49	byte	x	%02X
41062>>>48	byte	x	%02X,
41063>56	string	>\0	name: '%s'
41064
41065#------------------------------------------------------------------------------
41066# $File: zilog,v 1.7 2009/09/19 16:28:13 christos Exp $
41067# zilog:  file(1) magic for Zilog Z8000.
41068#
41069# Was it big-endian or little-endian?  My Product Specification doesn't
41070# say.
41071#
410720	long		0xe807		object file (z8000 a.out)
410730	long		0xe808		pure object file (z8000 a.out)
410740	long		0xe809		separate object file (z8000 a.out)
410750	long		0xe805		overlay object file (z8000 a.out)
41076#------------------------------------------------------------------------------
41077# $File: zip,v 1.8 2021/10/24 15:53:56 christos Exp $
41078# zip:  file(1) magic for zip files; this is not use
41079# Note the version of magic in archive is currently stronger, this is
41080# just an example until negative offsets are supported better
41081# Note:	All fields unless otherwise noted are unsigned!
41082
41083# Zip Central Directory record
410840	name		zipcd
41085>0	string		PK\001\002	Zip archive data
41086!:mime	application/zip
41087# no "made by" in local file header with PK\3\4 magic
41088>>4	leshort		x		\b, made by
41089>>4	use		zipversion
41090>>4	use		ziphost
41091# inside ./archive 1.151 called "at least" zipversion "to extract"
41092>>6	leshort		x		\b, extract using at least
41093>>6	use		zipversion
41094# This is DOS date like: ledate 21:00:48 19 Dec 2001 != DOS 00:00 1 Jan 2010 ~ 0000213C
41095>>12	ulelong		x		\b, last modified
41096>>14	lemsdosdate	x		\b, last modified %s
41097>>12	lemsdostime	x		%s
41098# uncompressed size of 1st entry; FFffFFff means real value stored in ZIP64 record
41099>>24	ulelong		!0xFFffFFff	\b, uncompressed size %u
41100# inside ./archive 1.151 called "compression method="zipcompression
41101>>10	leshort		x		\b, method=
41102>>10	use		zipcompression
41103
41104# URL:		https://en.wikipedia.org/wiki/Zip_(file_format)
41105# reference:	https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT (Version: 6.3.9)
41106# Zip known compressions
411070	name		zipcompression
41108>0	leshort		0		\bstore
41109>0	leshort		1		\bShrinking
41110>0	leshort		6		\bImploding
41111>0	leshort		7		\bTokenizing
41112>0	leshort		8		\bdeflate
41113>0	leshort		9		\bdeflate64
41114>0	leshort		10		\bLibrary imploding
41115#>0	leshort		11 		\bReserved by PKWARE
41116>0	leshort		12		\bbzip2
41117#>0	leshort		13 		\bReserved by PKWARE
41118>0	leshort		14		\blzma
41119#>0	leshort		15 		\bReserved by PKWARE
41120>0	leshort		16		\bCMPSC (IBM z/OS)
41121#>0	leshort		17 		\bReserved by PKWARE
41122>0	leshort		18		\bIBM TERSE
41123>0	leshort		19		\bIBM LZ77 (z/Architecture)
41124>0	leshort		20		\bZstd (deprecated)
41125>0	leshort		93		\bZstd
41126>0	leshort		94		\bMP3
41127>0	leshort		95		\bxz
41128>0	leshort		96		\bJpeg
41129>0	leshort		97		\bWavPack
41130>0	leshort		98		\bPPMd
41131>0	leshort		99		\bAES Encrypted
41132>0	default		x
41133>>0	leshort		x		\b[%#x]
41134
41135# Zip known versions
411360	name		zipversion
41137# The lower byte indicates the ZIP version of this file. The value/10 indicates
41138# the major version number, and the value mod 10 is the minor version number.
41139>0	ubyte/10	x		v%u
41140>0	ubyte%10	x		\b.%u
41141# >0	leshort		0x09		v0.9
41142# >0	leshort		0x0a		v1.0
41143# >0	leshort		0x0b		v1.1
41144# >0	leshort		0x14		v2.0
41145# >0	leshort		0x15		v2.1
41146# >0	leshort		0x19		v2.5
41147# >0	leshort		0x1b		v2.7
41148# >0	leshort		0x2d		v4.5
41149# >0	leshort		0x2e		v4.6
41150# >0	leshort		0x32		v5.0
41151# >0	leshort		0x33		v5.1
41152# >0	leshort		0x34		v5.2
41153# >0	leshort		0x3d		v6.1
41154# >0	leshort		0x3e		v6.2
41155# >0	leshort		0x3f		v6.3
41156# >0	default		x
41157# >>0	leshort		x		v?[%#x]
41158
41159#	display compatible host system name of ZIP archive
411600	name		ziphost
41161# The upper byte indicates the compatibility of the file attribute information.
41162# If the file is compatible with MS-DOS (v 2.04g) then this value will be zero.
41163#>1	ubyte		0		DOS
41164>1	ubyte		1 		Amiga
41165>1	ubyte		2		OpenVMS
41166>1	ubyte		3		UNIX
41167>1	ubyte		4		VM/CMS
41168>1	ubyte		6		OS/2
41169>1	ubyte		7		Macintosh
41170>1	ubyte		11		MVS
41171>1	ubyte		13		Acorn Risc
41172>1	ubyte		16		BeOS
41173>1	ubyte		17		Tandem
41174# 9 untested
41175>1	ubyte		5		Atari ST
41176>1	ubyte		8		Z-System
41177>1	ubyte		9		CP/M
41178>1	ubyte		10		Windows NTFS
41179>1	ubyte		12		VSE
41180>1	ubyte		14		VFAT
41181>1	ubyte		15		alternate MVS
41182>1	ubyte		18		OS/400
41183>1	ubyte		19		OS X
41184# unused
41185#>1	ubyte		>19		unused %#x
41186
41187# Zip End Of Central Directory record
41188# GRR: wrong for ZIP with comment archive
41189-22	string		PK\005\006
41190#>4	uleshort	!0xFFff		\b, %u disks
41191#>6	uleshort	!0xFFff		\b, central directory disk %u
41192#>8	uleshort	!0xFFff		\b, %u central directories on this disk
41193#>10	uleshort	!0xFFff		\b, %u central directories
41194#>12	ulelong		!0xFFffFFff	\b, %u central directory bytes
41195# offset of central directory
41196#>16	ulelong		x		\b, central directory offset %#x
41197>(16.l)	use		zipcd
41198# archive comment length n
41199#>>20	uleshort	>0		\b, comment length %u
41200# archive comment
41201>>20	pstring/l	>0		\b, %s
41202
41203#------------------------------------------------------------------------------
41204# $File: zyxel,v 1.6 2009/09/19 16:28:13 christos Exp $
41205# zyxel:  file(1) magic for ZyXEL modems
41206#
41207# From <rob@pe1chl.ampr.org>
41208# These are the /etc/magic entries to decode datafiles as used for the
41209# ZyXEL U-1496E DATA/FAX/VOICE modems.  (This header conforms to a
41210# ZyXEL-defined standard)
41211
412120	string		ZyXEL\002	ZyXEL voice data
41213>10	byte		0		- CELP encoding
41214>10	byte&0x0B	1		- ADPCM2 encoding
41215>10	byte&0x0B	2		- ADPCM3 encoding
41216>10	byte&0x0B	3		- ADPCM4 encoding
41217>10	byte&0x0B	8		- New ADPCM3 encoding
41218>10	byte&0x04	4		with resync
41219