summaryrefslogtreecommitdiff
path: root/magic/Magdir
diff options
context:
space:
mode:
Diffstat (limited to 'magic/Magdir')
-rw-r--r--magic/Magdir/acorn10
-rw-r--r--magic/Magdir/aes29
-rw-r--r--magic/Magdir/algol6842
-rw-r--r--magic/Magdir/amigaos147
-rw-r--r--magic/Magdir/android33
-rw-r--r--magic/Magdir/animation163
-rw-r--r--magic/Magdir/apple10
-rw-r--r--magic/Magdir/archive207
-rw-r--r--magic/Magdir/arm41
-rw-r--r--magic/Magdir/asf6
-rw-r--r--magic/Magdir/audio64
-rw-r--r--magic/Magdir/avm33
-rw-r--r--magic/Magdir/biosig2
-rw-r--r--magic/Magdir/blit6
-rw-r--r--magic/Magdir/bm10
-rw-r--r--magic/Magdir/bsi7
-rw-r--r--magic/Magdir/bytecode30
-rw-r--r--magic/Magdir/c-lang7
-rw-r--r--magic/Magdir/c6413
-rw-r--r--magic/Magdir/cad109
-rw-r--r--magic/Magdir/cafebabe61
-rw-r--r--magic/Magdir/citrus6
-rw-r--r--magic/Magdir/clipper6
-rw-r--r--magic/Magdir/coff78
-rw-r--r--magic/Magdir/commands98
-rw-r--r--magic/Magdir/compress9
-rw-r--r--magic/Magdir/console62
-rw-r--r--magic/Magdir/coverage4
-rw-r--r--magic/Magdir/crypto5
-rw-r--r--magic/Magdir/database212
-rw-r--r--magic/Magdir/der7
-rw-r--r--magic/Magdir/diff15
-rw-r--r--magic/Magdir/digital3
-rw-r--r--magic/Magdir/editors6
-rw-r--r--magic/Magdir/elf48
-rw-r--r--magic/Magdir/espressif4
-rw-r--r--magic/Magdir/filesystems297
-rw-r--r--magic/Magdir/fonts33
-rw-r--r--magic/Magdir/forth46
-rw-r--r--magic/Magdir/fsav12
-rw-r--r--magic/Magdir/games215
-rw-r--r--magic/Magdir/git8
-rw-r--r--magic/Magdir/gnome6
-rw-r--r--magic/Magdir/gnu42
-rw-r--r--magic/Magdir/gpt4
-rw-r--r--magic/Magdir/gpu10
-rw-r--r--magic/Magdir/guile13
-rw-r--r--magic/Magdir/hitachi-sh6
-rw-r--r--magic/Magdir/human68k4
-rw-r--r--magic/Magdir/ibm3706
-rw-r--r--magic/Magdir/ibm60004
-rw-r--r--magic/Magdir/icc26
-rw-r--r--magic/Magdir/iff10
-rw-r--r--magic/Magdir/images736
-rw-r--r--magic/Magdir/intel6
-rw-r--r--magic/Magdir/jpeg25
-rw-r--r--magic/Magdir/lammps64
-rw-r--r--magic/Magdir/lif45
-rw-r--r--magic/Magdir/linux79
-rw-r--r--magic/Magdir/lisp5
-rw-r--r--magic/Magdir/locoscript12
-rw-r--r--magic/Magdir/lua11
-rw-r--r--magic/Magdir/mach140
-rw-r--r--magic/Magdir/macintosh18
-rw-r--r--magic/Magdir/mail.news11
-rw-r--r--magic/Magdir/map112
-rw-r--r--magic/Magdir/maple58
-rw-r--r--magic/Magdir/mathematica95
-rw-r--r--magic/Magdir/measure7
-rw-r--r--magic/Magdir/misctools35
-rw-r--r--magic/Magdir/modem4
-rw-r--r--magic/Magdir/motorola4
-rw-r--r--magic/Magdir/mozilla6
-rw-r--r--magic/Magdir/msdos313
-rw-r--r--magic/Magdir/msooxml23
-rw-r--r--magic/Magdir/msx68
-rw-r--r--magic/Magdir/neko12
-rw-r--r--magic/Magdir/netware6
-rw-r--r--magic/Magdir/nim-lang29
-rw-r--r--magic/Magdir/ole2compounddocs71
-rw-r--r--magic/Magdir/os2137
-rw-r--r--magic/Magdir/pcjr8
-rw-r--r--magic/Magdir/pdf11
-rw-r--r--magic/Magdir/pgf6
-rw-r--r--magic/Magdir/pgp59
-rw-r--r--magic/Magdir/pgp-binary-keys388
-rw-r--r--magic/Magdir/plan911
-rw-r--r--magic/Magdir/pmem18
-rw-r--r--magic/Magdir/puzzle17
-rw-r--r--magic/Magdir/python208
-rw-r--r--magic/Magdir/riff364
-rw-r--r--magic/Magdir/rtf4
-rw-r--r--magic/Magdir/sccs12
-rw-r--r--magic/Magdir/sgi20
-rw-r--r--magic/Magdir/sgml4
-rw-r--r--magic/Magdir/sinclair4
-rw-r--r--magic/Magdir/sniffer8
-rw-r--r--magic/Magdir/sosi4
-rw-r--r--magic/Magdir/spectrum4
-rw-r--r--magic/Magdir/sql110
-rw-r--r--magic/Magdir/statistics45
-rw-r--r--magic/Magdir/terminfo4
-rw-r--r--magic/Magdir/timezone22
-rw-r--r--magic/Magdir/tplink26
-rw-r--r--magic/Magdir/uf272
-rw-r--r--magic/Magdir/virtual84
-rw-r--r--magic/Magdir/vorbis8
-rw-r--r--magic/Magdir/windows213
-rw-r--r--magic/Magdir/wordprocessors31
-rw-r--r--magic/Magdir/wsdl4
-rw-r--r--magic/Magdir/xenix26
-rw-r--r--magic/Magdir/xilinx4
-rw-r--r--magic/Magdir/xwindows10
-rw-r--r--magic/Magdir/yara4
-rw-r--r--magic/Magdir/zfs4
-rw-r--r--magic/Magdir/zip14
116 files changed, 4912 insertions, 1386 deletions
diff --git a/magic/Magdir/acorn b/magic/Magdir/acorn
index 4aa34551a74b..37a4ed79e56e 100644
--- a/magic/Magdir/acorn
+++ b/magic/Magdir/acorn
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: acorn,v 1.7 2019/04/19 00:42:27 christos Exp $
+# $File: acorn,v 1.8 2021/04/26 15:56:00 christos Exp $
# acorn: file(1) magic for files found on Acorn systems
#
@@ -90,13 +90,13 @@
# null terminated root directory object like IDEFS::IDE-4.$.Apps.GRAPHICS.!XFMPdemo
>>>9 string x \b, root "%s"
# load address 0xFFFtttdd, ttt is the object filetype and dddddddddd is time
->>>>&1 ulelong x \b, load address 0x%x
+>>>>&1 ulelong x \b, load address %#x
# execution address 0xdddddddd dddddddddd is 40 bit unsigned centiseconds since 1.1.1900 UTC
->>>>&5 ulelong x \b, exec address 0x%x
+>>>>&5 ulelong x \b, exec address %#x
# attributes (bits: 0~owner read,1~owner write,3~no delete,4~public read,5~public write)
->>>>&9 ulelong x \b, attributes 0x%x
+>>>>&9 ulelong x \b, attributes %#x
# number of entries in this directory. for root dir 0
-#>>>&13 ulelong x \b, entries 0x%x
+#>>>&13 ulelong x \b, entries %#x
# the entries start here with object name
>>>>&17 string x \b, 1st object "%s"
diff --git a/magic/Magdir/aes b/magic/Magdir/aes
new file mode 100644
index 000000000000..e5e1edcb1350
--- /dev/null
+++ b/magic/Magdir/aes
@@ -0,0 +1,29 @@
+
+#------------------------------------------------------------------------------
+# $File: aes,v 1.1 2020/08/18 21:20:22 christos Exp $
+#
+# aes: magic file for AES encrypted files
+
+# Summary: AES Crypt Encrypted Data File
+# From: Joerg Jenderek
+# URL: https://en.wikipedia.org/wiki/Advanced_Encryption_Standard
+# Reference: https://www.aescrypt.com/aes_file_format.html
+0 string AES
+>3 ubyte <3 AES encrypted data, version %u
+#!:mime application/aes
+!:mime application/x-aes-encrypted
+!:ext aes
+# For Version 2 the encrypted file can have text tags
+>>3 ubyte =2
+# length of an extension identifier and contents like: 0 24 33 38
+#>>5 ubeshort x \b, tag length %u
+#>>5 pstring/H x '%s'
+# standard extension tags like CREATED_BY
+>>>7 string CREATED_BY \b, created by
+# software product, manufacturer like "SharpAESCrypt v1.3.3.0" "aescrypt (Windows GUI) 3.10" ...
+>>>>&1 string x "%s"
+# TODO: more other tags
+# tag CREATED_DATE like YYYY-MM-DD
+# tag CREATED_TIME like HH:MM:SS
+#
+
diff --git a/magic/Magdir/algol68 b/magic/Magdir/algol68
index 3675b840e3b6..77016778ad78 100644
--- a/magic/Magdir/algol68
+++ b/magic/Magdir/algol68
@@ -1,19 +1,41 @@
#------------------------------------------------------------------------------
-# $File: algol68,v 1.3 2018/10/19 01:04:21 christos Exp $
+# $File: algol68,v 1.4 2021/08/15 06:00:55 christos Exp $
# algol68: file(1) magic for Algol 68 source
#
-0 search/8192 (input, Algol 68 source text
-!:mime text/x-Algol68
-0 regex/1024 \^PROC Algol 68 source text
-!:mime text/x-Algol68
-0 regex/1024 \bMODE[\t\ ] Algol 68 source text
-!:mime text/x-Algol68
-0 regex/1024 \bREF[\t\ ] Algol 68 source text
-!:mime text/x-Algol68
-0 regex/1024 \bFLEX[\t\ ]\*\\[ Algol 68 source text
+# URL: https://en.wikipedia.org/wiki/ALGOL_68
+# Reference: http://www.softwarepreservation.org/projects/ALGOL/report/Algol68_revised_report-AB.pdf
+# Update: Joerg Jenderek
+0 search/8192 (input,
+>0 use algol_68
+# graph_2d.a68
+0 regex/4006 \^PROC
+#>&-4 string x \b, dBase or Algol "%s"
+# most xBase scripts *.prg with PROCEDURE like: Areacode BarCount Def_mens Vendors
+#>&-4 string =PROCEDURE \b, dBase PROCEDURE
+# skip xBase program scripts *.prg with PROCEDURE keyword
+# keyword proc probably followed by white space used to specify algol procedures
+>&-4 string !PROCEDURE
+>>0 use algol_68
+0 regex/1024 \bMODE[\t\ ]
+>0 use algol_68
+0 regex/1024 \bMODE[\t\ ]
+>0 use algol_68
+0 regex/1024 \bREF[\t\ ]
+>0 use algol_68
+0 regex/1024 \bFLEX[\t\ ]\*\\[
+>0 use algol_68
+
+# display information like mime type and file name extension of Algol 68 source text
+0 name algol_68 Algol 68 source text
!:mime text/x-Algol68
+# https://file-extension.net/seeker/file_extension_a68
+!:ext a68
+#!:ext a68/alg
+
#0 regex [\t\ ]OD Algol 68 source text
+#>0 use algol_68
#!:mime text/x-Algol68
#0 regex [\t\ ]FI Algol 68 source text
+#>0 use algol_68
#!:mime text/x-Algol68
diff --git a/magic/Magdir/amigaos b/magic/Magdir/amigaos
index e719921ef39f..fdd947fdf7f5 100644
--- a/magic/Magdir/amigaos
+++ b/magic/Magdir/amigaos
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: amigaos,v 1.17 2018/10/16 18:57:19 christos Exp $
+# $File: amigaos,v 1.20 2021/09/20 00:42:19 christos Exp $
# amigaos: file(1) magic for AmigaOS binary formats:
#
@@ -40,7 +40,62 @@
#26 string V.2 Brian Postma's Soundmon Module sound file v2
# The following are from: "Stefan A. Haubenthal" <polluks@web.de>
-0 beshort 0x0f00 AmigaOS bitmap font
+# Update: Joerg Jenderek
+# URL: http://fileformats.archiveteam.org/wiki/Amiga_bitmap_font
+# Reference: http://mark0.net/download/triddefs_xml.7z/defs/f/font-amiga.trid.xml
+# https://wiki.amigaos.net/wiki/Graphics_Library_and_Text
+# fch_FileID=FCH_ID=0x0f00
+0 beshort 0x0f00
+# skip some AVM powerline firmware images by check for positive number of font elements
+# https://download.avm.de/fritzpowerline/fritzpowerline-1000e-t/other/fritz.os/fritz.powerline_1000ET_01_05.image
+>2 ubeshort >0 AmigaOS bitmap font
+#!:mime application/octet-stream
+!:mime font/x-amiga-font
+!:ext font
+# struct FontContents fch_FC; 1st fc_FileName [MAXFONTPATH=256]; ~ filename "/" fc_YSize
+# like: topazb/6 suits/8 Excel/9e emerald/17 Franklin/23 DIAMONDS/60.8C
+>>4 string x "%.256s"
+# fc_YSize ~number after slash in fc_FileName; like: 6 7 8 9 11 12 16 17 21 23 45 60
+>>260 beshort x \b, fc_YSize %u
+# fch_NumEntries; number of FontContents elements like:
+# 1 (often) 2 3 (IconCondensed.font tempfont.font) 4 (Franklin.font) 6 (mcoop.font)
+>>2 ubeshort >1 \b, %u elements
+#>>2 beshort x \b, %u element
+# plural s
+#>>2 beshort !1 \bs
+# like: 6 7 8 9 11 12 16 17 21 23 45 60
+#>>262 beshort x \b, FLAGS_STYLE
+>>2 beshort >1 \b, 2nd
+# 2nd fc_FileName like: Franklin/36
+>>>264 string x "%.256s"
+>>2 beshort >2 \b, 3rd
+# 3rd fc_FileName like: Franklin/18
+>>>524 string x "%.256s"
+# URL: http://fileformats.archiveteam.org/wiki/Amiga_bitmap_font
+# Reference: https://wiki.amigaos.net/wiki/Graphics_Library_and_Text
+# http://mark0.net/download/triddefs_xml.7z/defs/f/font-amiga-var2.trid.xml
+# Note: called by TrID "Amiga bitmap Font (var.2)"
+# fch_FileID=TFCH_ID=0x0f02
+0 beshort 0x0f02
+# skip possible misidentified foo by check for positive number of font elements
+>2 ubeshort >0 AmigaOS bitmap font (TFCH)
+#!:mime application/octet-stream
+!:mime font/x-amiga-font
+!:ext font
+# struct TFontContents fch_TFC[]; 1st tfc_FileName [254]; ~ filename "/" fc_YSize
+# like: Abbey/45 XScript/75 XTriumvirate/45
+>>4 string x "%.254s"
+# tfc_TagCount; including the TAG_END tag like: 4
+>>258 ubeshort x \b, tfc_TagCount %u
+# tfc_YSize ~number after slash in tfc_FileName; like: 45 75
+>>260 beshort x \b, tfc_YSize %u
+# tfc_Style; tfc_Flags like: 8022h 8222h
+#>>262 ubeshort x \b, FLAGS_STYLE %#x
+# fch_NumEntries; number of FontContents elements like: 1 (abbey.font) 2 (xscript.font xtriumvirate.font)
+>>2 ubeshort >1 \b, %u elements
+>>2 beshort >1 \b, 2nd
+# 2nd tfc_FileName like: XScript/45 XTriumvirate/30
+>>>264 string x "%.254s"
0 beshort 0x0f03 AmigaOS outline font
0 belong 0x80001001 AmigaOS outline tag
0 string ##\ version catalog translation
@@ -49,15 +104,91 @@
0 string/c @database AmigaGuide file
# Amiga disk types
+# display information like volume name of root block on Amiga (floppy) disk
+0 name adf-rootblock
+# block primary type = T_HEADER (value 2)
+>0x000 ubelong !2 \b, type %u
+# header_key; unused in rootblock (value 0)
+>0x004 ubelong !0 \b, header_key %u
+# high_seq; unused (value 0)
+>0x008 ubelong !0 \b, high_seq %u
+# ht_size; hash table size; 0x48 for flopies
+>0x00c ubelong !0x48 \b, hash table size %#x
+# bm_flag; bitmap flag, -1 means VALID
+>0x138 belong !-1 \b, bitmap flag %#x
+# bm_ext; first bitmap extension block (Hard disks only)
+>0x1A0 ubelong !0 \b, bitmap extension block %#x
+# name_len; volume name length; diskname[30]; volume name
+>0x1B0 pstring >\0 \b, "%s"
+# first directory cache block for FFS; otherwise 0
+>0x1F8 ubelong !0 \b, directory cache block %#x
+# block secondary type = ST_ROOT (value 1)
+>0x1FC ubelong !1 \b, sec_type %#x
#
0 string RDSK Rigid Disk Block
>160 string x on %.24s
-0 string DOS\0 Amiga DOS disk
-0 string DOS\1 Amiga FFS disk
-0 string DOS\2 Amiga Inter DOS disk
-0 string DOS\3 Amiga Inter FFS disk
-0 string DOS\4 Amiga Fastdir DOS disk
-0 string DOS\5 Amiga Fastdir FFS disk
+# URL: http://fileformats.archiveteam.org/wiki/ADF_(Amiga)
+# https://en.wikipedia.org/wiki/Amiga_Fast_File_System
+# Reference: http://lclevy.free.fr/adflib/adf_info.html
+# Update: Joerg Jenderek
+# Note: created by ADFOpus.exe
+# and verified by `unadf -l TURBO_SILVER_SV.ADF`
+0 string DOS
+# skip DOS Client Message Files like IPXODI.MSG DOSRQSTR.MSG
+>3 ubyte <8 Amiga
+# https://reposcope.com/mimetype/application/x-amiga-disk-format
+!:mime application/x-amiga-disk-format
+!:ext adf
+>>3 ubyte 0 DOS disk
+>>3 ubyte 1 FFS disk
+>>3 ubyte 2 Inter DOS disk
+>>3 ubyte 3 Inter FFS disk
+# For Fastdir mode the international mode is also enabled,
+>>3 ubyte 4 Fastdir DOS disk
+>>3 ubyte 5 Fastdir FFS dis
+# called by TrID "Amiga Disk image File (OFS+INTL+DIRC)"
+>>3 ubyte 6 Inter Fastdir DOS disk
+# called by TrID "Amiga Disk image File (FFS+INTL+DIRC)"
+>>3 ubyte 7 Inter Fastdir FFS disk
+# but according to Wikipedia variants with long name support
+#>>3 ubyte 6 long name DOS disk
+#>>3 ubyte 7 long name FFS disk
+# DOES NOT only work! Partly for file size ~< FILE_BYTES_MAX=1 MiB defined in ../../src/file.h
+#>>-0 offset x \b, %lld bytes
+# Correct file size, but next lines are NOT executed
+#>>-0 offset 901120 (DD 880 KiB floppy)
+# 880 KiB Double Density floppy disk by characteristic hash table size 0x48 and T_HEADER=2
+>>0x6E00C ubelong 0x48
+>>>0x6E000 ubelong 2 (DD 880 KiB)
+# 1760 KiB High Density floppy disk (1802240 bytes) by characteristic hash table size 0x48
+>>0xDC00C ubelong 0x48
+>>>0xDC000 ubelong 2 (HD 1760 KiB)
+# Chksum; special block checksum like: 0 0x44ccf4c0 0x51f32cac 0xe33d0e7d ...
+#>>4 ubelong x \b, CRC %#x
+# Rootblock: 0 880 (often for DD and HD) 1146049280 (IMAGINE_1_0_DISK_01.ADF TURBO_SILVER_SV.ADF)
+>>8 ubelong >0 \b, probably root block %d
+# bootblock code
+>>12 quad !0 \b, bootable
+# assembler instructions: lea exp(pc),a1; moveq 25h,d0; jsr -552(a6)
+>>>12 ubequad =0x43fa003e70254eae AmigaDOS 3.0
+>>>12 default x
+>>>>12 ubequad !0x43fa003e70254eae %#llx..
+# 880 KiB Double Density floppy disk (901120 bytes)
+>>0x6E00C ubelong 0x48
+>>>0x6E000 ubelong 2
+>>>>0x6E000 use adf-rootblock
+# 1760 KiB High Density floppy disk (1802240 bytes)
+>>0xDC00C ubelong 0x48
+>>>0xDC000 ubelong 2
+>>>>0xDC000 use adf-rootblock
+# 1 MiB hard disc by test for T_HEADER=2 and header_key=0=high_seq
+>>0x80000 ubelong 2
+>>>0x80004 quad 0
+>>>>0x80000 use adf-rootblock
+# 2 MiB hard disc; only works if in ../../src/file.h FILE_BYTES_MAX is raised to 2 MiB
+#>>0x100000 ubelong x 2 MiB TEST
+#>>0x100000 ubelong 2 \b, 2 MiB hard disc rootblock
+#>>>0x100000 use adf-rootblock
0 string KICK Kickstart disk
# From: Alex Beregszaszi <alex@fsn.hu>
diff --git a/magic/Magdir/android b/magic/Magdir/android
index 1265d95925a7..63296d0ecfc5 100644
--- a/magic/Magdir/android
+++ b/magic/Magdir/android
@@ -1,6 +1,6 @@
#------------------------------------------------------------
-# $File: android,v 1.16 2019/11/15 21:03:14 christos Exp $
+# $File: android,v 1.19 2021/04/26 15:56:00 christos Exp $
# Various android related magic entries
#------------------------------------------------------------
@@ -24,11 +24,11 @@
>>1028 lelong 0 \b (boot)
>>1028 lelong 1 \b (recovery)
>8 lelong >0 \b, kernel
->>12 lelong >0 \b (0x%x)
+>>12 lelong >0 \b (%#x)
>16 lelong >0 \b, ramdisk
->>20 lelong >0 \b (0x%x)
+>>20 lelong >0 \b (%#x)
>24 lelong >0 \b, second stage
->>28 lelong >0 \b (0x%x)
+>>28 lelong >0 \b (%#x)
>36 lelong >0 \b, page size: %d
>38 string >0 \b, name: %s
>64 string >0 \b, cmdline (%s)
@@ -64,7 +64,7 @@
# look for backup content after line with encryption info
#>>19 search/7 \n
# data part after header for not encrypted Android Backup
-#>>>&0 ubequad x \b, content 0x%16.16llx...
+#>>>&0 ubequad x \b, content %#16.16llx...
# look for zlib compressed by ./compress after message with 1 space at end
#>>>&0 indirect x \b; contains
# look for tar archive block by ./archive for package name manifest
@@ -155,9 +155,9 @@
# flags
>>>0x0C ulelong&0x00000002 2 \b+RW
# partition ID:
-# 0~IPL,MOVINAND,GANG;1~PIT,GPT;2~HIDDEN;3~SBL,HIDDEN;4~SBL2,HIDDEN;5~BOOT;6~KENREl,RECOVER,misc;7~RECOVER
+# 0~IPL,MOVINAND,GANG;1~PIT,GPT;2~HIDDEN;3~SBL,HIDDEN;4~SBL2,HIDDEN;5~BOOT;6~kernel,RECOVER,misc;7~RECOVER
# ;11~MODEM;20~efs;21~PARAM;22~FACTORY,SYSTEM;23~DBDATAFS,USERDATA;24~CACHE;80~BOOTLOADER;81~TZSW
->>>0x08 ulelong x (0x%x)
+>>>0x08 ulelong x (%#x)
# filename
>>>0x44 string >\0 "%-.64s"
#>>>0x18 ulelong >0
@@ -188,3 +188,22 @@
0 lelong 0xd0b5b1c4 Android cryptfs footer
>4 leshort x \b, version: %d
>6 leshort x \b.%d
+
+# Android Vdex format
+# From https://android.googlesource.com/\
+# platform/art/+/master/runtime/vdex_file.h
+0 string vdex Android vdex file,
+>4 string >000 verifier deps version: %s,
+>8 string >000 dex section version: %s,
+>12 lelong >0 number of dex files: %d,
+>16 lelong >0 verifier deps size: %d
+
+# Android Vdex format, dexfile is currently being updated
+# by android system
+# From https://android.googlesource.com/\
+# platform/art/+/master/dex2oat/dex2oat.cc
+0 string wdex Android vdex file, being processed by dex2oat,
+>4 string >000 verifier deps version: %s,
+>8 string >000 dex section version: %s,
+>12 lelong >0 number of dex files: %d,
+>16 lelong >0 verifier deps size: %d
diff --git a/magic/Magdir/animation b/magic/Magdir/animation
index 470fdb6f3a6e..d59497d8005a 100644
--- a/magic/Magdir/animation
+++ b/magic/Magdir/animation
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: animation,v 1.77 2020/04/26 15:23:43 christos Exp $
+# $File: animation,v 1.87 2021/08/24 09:25:11 christos Exp $
# animation: file(1) magic for animation/movie formats
#
# animation formats
@@ -32,7 +32,10 @@
!:mime application/x-quicktime-player
4 string/W jP JPEG 2000 image
!:mime image/jp2
+
+#### MP4 ####
# https://www.ftyps.com/ with local additions
+# https://cconcolato.github.io/mp4ra/filetype.html
4 string ftyp ISO Media
# https://aeroquartet.com/wordpress/2016/03/05/3-xavc-s/
>8 string XAVC \b, MPEG v4 system, Sony XAVC Codec
@@ -53,11 +56,21 @@
>>11 byte 0x63 \b C.S0050-0-B V1.0
>8 string 3ge \b, MPEG v4 system, 3GPP
!:mime video/3gpp
->>11 byte 6 \b, Release 6 MBMS Extended Presentations
->>11 byte 7 \b, Release 7 MBMS Extended Presentations
+>>11 byte 6 \b, Release %d MBMS Extended Presentations
+>>11 byte 7 \b, Release %d MBMS Extended Presentations
+>>11 byte 9 \b, Release %d MBMS Extended Presentations
+>8 string 3gf \b, MPEG v4 system, 3GPP
+>>11 byte 9 \b, Release %d File-delivery profile
>8 string 3gg \b, MPEG v4 system, 3GPP
!:mime video/3gpp
->>11 byte 6 \b, Release 6 General Profile
+>>11 byte 6 \b, Release %d General Profile
+>>11 byte 9 \b, Release %d General Profile
+>8 string 3gh \b, MPEG v4 system, 3GPP
+!:mime video/3gpp
+>>11 byte 9 \b, Release %d Adaptive Streaming Profile
+>8 string 3gm \b, MPEG v4 system, 3GPP
+!:mime video/3gpp
+>>11 byte 9 \b, Release %d Media Segment Profile
>8 string 3gp \b, MPEG v4 system, 3GPP
!:mime video/3gpp
>>11 byte 1 \b, Release %d (non existent)
@@ -67,16 +80,49 @@
>>11 byte 5 \b, Release %d
>>11 byte 6 \b, Release %d
>>11 byte 7 \b, Release %d Streaming Servers
+>8 string 3gr \b, MPEG v4 system, 3GPP
+!:mime video/3gpp
+>>11 byte 6 \b, Release %d Progressive Download Profile
+>>11 byte 9 \b, Release %d Progressive Download Profile
>8 string 3gs \b, MPEG v4 system, 3GPP
!:mime video/3gpp
+>>11 byte 6 \b, Release %d Streaming Servers
>>11 byte 7 \b, Release %d Streaming Servers
+>>11 byte 9 \b, Release %d Streaming Servers
+>8 string 3gt \b, MPEG v4 system, 3GPP
+!:mime video/3gpp
+>>11 byte 8 \b, Release %d Media Stream Recording Profile
+>>11 byte 9 \b, Release %d Media Stream Recording Profile
+>8 string ARRI \b, MPEG v4 system, ARRI Digital Camera
+!:mime video/mp4
>8 string avc1 \b, MPEG v4 system, 3GPP JVT AVC [ISO 14496-12:2005]
!:mime video/mp4
+>8 string bbxm \b, Blinkbox Master File: H.264 video/16-bit LE LPCM audio
+!:mime video/mp4
>8 string/W qt \b, Apple QuickTime movie
!:mime video/quicktime
>8 string CAEP \b, Canon Digital Camera
>8 string caqv \b, Casio Digital Camera
>8 string CDes \b, Convergent Design
+>8 string caaa \b, CMAF Media Profile - AAC Adaptive Audio
+>8 string caac \b, CMAF Media Profile - AAC Core
+>8 string caqv \b, Casio Digital Camera Casio
+>8 string ccea \b, CMAF Supplemental Data - CEA-608/708
+>8 string ccff \b, Common container file format
+>8 string cfhd \b, CMAF Media Profile - AVC HD
+>8 string cfsd \b, CMAF Media Profile - AVC SD
+>8 string chd1 \b, CMAF Media Profile - HEVC HDR10
+>8 string chdf \b, CMAF Media Profile - AVC HDHF
+>8 string chhd \b, CMAF Media Profile - HEVC HHD8
+>8 string chh1 \b, CMAF Media Profile - HEVC HHD10
+>8 string clg1 \b, CMAF Media Profile - HEVC HLG10
+>8 string cmfc \b, CMAF Track Format
+>8 string cmff \b, CMAF Fragment Format
+>8 string cmfl \b, CMAF Chunk Format
+>8 string cmfs \b, CMAF Segment Format
+>8 string cud1 \b, CMAF Media Profile - HEVC UHD10
+>8 string cud8 \b, CMAF Media Profile - HEVC UHD8
+>8 string cwvt \b, CMAF Media Profile - WebVTT
>8 string da0a \b, DMB MAF w/ MPEG Layer II aud, MOT slides, DLS, JPG/PNG/MNG
>8 string da0b \b, DMB MAF, ext DA0A, with 3GPP timed text, DID, TVA, REL, IPMP
>8 string da1a \b, DMB MAF audio with ER-BSAC audio, JPG/PNG/MNG images
@@ -87,6 +133,12 @@
>8 string da3b \b, DMB MAF, ext da3a w/ BIFS, 3GPP, DID, TVA, REL, IPMP
>8 string dash \b, MPEG v4 system, Dynamic Adaptive Streaming over HTTP
!:mime video/mp4
+>8 string dby1 \b, MP4 files with Dolby content
+>8 string dsms \b, Media Segment DASH conformant
+>8 string dts1 \b, MP4 track file with audio codecs dtsc dtsh or dtse
+>8 string dts2 \b, MP4 track file with audio codec dtsx
+>8 string dts3 \b, MP4 track file with audio codec dtsy
+>8 string dxo$20 \b, DxO ONE camera
>8 string dmb1 \b, DMB MAF supporting all the components defined in the spec
>8 string dmpf \b, Digital Media Project
>8 string drc1 \b, Dirac (wavelet compression), encap in ISO base media (MP4)
@@ -99,6 +151,7 @@
>8 string dvr1 \b, DVB (.DVB) over RTP
!:mime video/vnd.dvb.file
>8 string dvt1 \b, DVB (.DVB) over MPEG-2 Transport Stream
+>8 string emsg \b, Event message box present
!:mime video/vnd.dvb.file
>8 string F4V \b, Video for Adobe Flash Player 9+ (.F4V)
!:mime video/mp4
@@ -108,12 +161,22 @@
!:mime audio/mp4
>8 string F4B \b, Audio Book for Adobe Flash Player 9+ (.F4B)
!:mime audio/mp4
+>8 string ifrm \b, Apple iFrame Specification, Version 8.1 Jan 2013
+>8 string im1i \b, CMAF Media Profile - IMSC1 Image
+>8 string im1t \b, CMAF Media Profile - IMSC1 Text
>8 string isc2 \b, ISMACryp 2.0 Encrypted File
# ?/enc-isoff-generic
->8 string iso2 \b, MP4 Base Media v2 [ISO 14496-12:2005]
+>8 string iso \b, MP4 Base Media
!:mime video/mp4
->8 string isom \b, MP4 Base Media v1 [IS0 14496-12:2003]
+>>11 string m v1 [ISO 14496-12:2003]
+>>11 string 2 v2 [ISO 14496-12:2005]
+>>11 string 4 v4
+>>11 string 5 v5
+>>11 string 6 v6
+>8 string isml \b, MP4 Base Media v2 [ISO 14496-12:2005]
!:mime video/mp4
+>8 string J2P0 \b, JPEG2000 Profile 0
+>8 string J2P1 \b, JPEG2000 Profile 1
>8 string/W jp2 \b, JPEG 2000
!:mime image/jp2
>8 string JP2 \b, JPEG 2000 Image (.JP2) [ISO 15444-1 ?]
@@ -121,10 +184,13 @@
>8 string JP20 \b, Unknown, from GPAC samples (prob non-existent)
>8 string jpm \b, JPEG 2000 Compound Image (.JPM) [ISO 15444-6]
!:mime image/jpm
+>8 string jpsi \b, The JPSearch data interchange format
>8 string jpx \b, JPEG 2000 w/ extensions (.JPX) [ISO 15444-2]
!:mime image/jpx
>8 string KDDI \b, 3GPP2 EZmovie for KDDI 3G cellphones
!:mime video/3gpp2
+>8 string LCAG \b, Leica digital camera
+>8 string lmsg \b, Last Media Segment indicator for ISO base media file format.
>8 string M4A \b, Apple iTunes ALAC/AAC-LC (.M4A) Audio
!:mime audio/x-m4a
>8 string M4B \b, Apple iTunes ALAC/AAC-LC (.M4B) Audio Book
@@ -140,6 +206,8 @@
>8 string mj2s \b, Motion JPEG 2000 [ISO 15444-3] Simple Profile
!:mime video/mj2
>8 string mjp2 \b, Motion JPEG 2000 [ISO 15444-3] General Profile
+>8 string MFSM \b, Media File for Samsung video Metadata
+>8 string MGSV \b, Sony Home and Mobile Multimedia Platform (HMMP)
!:mime video/mj2
>8 string mmp4 \b, MPEG-4/3GPP Mobile Profile (.MP4 / .3GP) (for NTT)
!:mime video/mp4
@@ -153,13 +221,16 @@
>8 string mp71 \b, MP4 w/ MPEG-7 Metadata [per ISO 14496-12]
>8 string mp7t \b, MPEG v4 system, MPEG v7 XML
>8 string mp7b \b, MPEG v4 system, MPEG v7 binary XML
+>8 string mpuf \b, Compliance with the MMT Processing Unit format
+>8 string msdh \b, Media Segment conforming to ISO base media file format.
+>8 string msix \b, Media Segment conforming to ISO base media file format.
>8 string mmp4 \b, MPEG v4 system, 3GPP Mobile
!:mime video/mp4
>8 string MPPI \b, Photo Player, MAF [ISO/IEC 23000-3]
>8 string mqt \b, Sony / Mobile QuickTime (.MQV) US Pat 7,477,830
!:mime video/quicktime
>8 string MSNV \b, MPEG-4 (.MP4) for SonyPSP
-!:mime video/mp4
+!:mime audio/mp4
>8 string NDAS \b, MP4 v2 [ISO 14496-14] Nero Digital AAC Audio
!:mime audio/mp4
>8 string NDSC \b, MPEG-4 (.MP4) Nero Cinema Profile
@@ -181,11 +252,14 @@
>8 string NDXP \b, H.264/MPEG-4 AVC (.MP4) Nero Portable Profile
!:mime video/mp4
>8 string NDXS \b, H.264/MPEG-4 AVC (.MP4) Nero Standard Profile
+>8 string niko \b, Nikon Digital Camera
!:mime video/mp4
>8 string odcf \b, OMA DCF DRM Format 2.0 (OMA-TS-DRM-DCF-V2_0-20060303-A)
>8 string opf2 \b, OMA PDCF DRM Format 2.1 (OMA-TS-DRM-DCF-V2_1-20070724-C)
>8 string opx2 \b, OMA PDCF DRM + XBS ext (OMA-TS-DRM_XBS-V1_0-20070529-C)
>8 string pana \b, Panasonic Digital Camera
+>8 string piff \b, Protected Interoperable File Format
+>8 string pnvi ]b, Panasonic Video Intercom
>8 string qt \b, Apple QuickTime (.MOV/QT)
!:mime video/quicktime
# HEIF image format
@@ -217,11 +291,24 @@
!:mime image/heif-sequence
>8 string avcs \b, HEIF Image Sequence AVC
!:mime image/heif-sequence
-
+# AVIF image format
+# see https://aomediacodec.github.io/av1-avif/
+>8 string avif \b, AVIF Image
+!:mime image/avif
+>8 string avis \b, AVIF Image Sequence
+!:mime image/avif
+>8 string risx \b, Representation Index Segment for MPEG-2 TS Segments
>8 string ROSS \b, Ross Video
>8 string sdv \b, SD Memory Card Video
>8 string ssc1 \b, Samsung stereo, single stream (patent pending)
>8 string ssc2 \b, Samsung stereo, dual stream (patent pending)
+>8 string SEAU \b, Sony Home and Mobile Multimedia Platform (HMMP)
+>8 string SEBK \b, Sony Home and Mobile Multimedia Platform (HMMP)
+>8 string senv \b, Video contents Sony Entertainment Network
+>8 string sims \b, Media Segment for Sub-Indexed Media Segment format
+>8 string sisx \b, Single Index Segment forindex MPEG-2 TS
+>8 string ssss \b, Subsegment Index Segment used to index MPEG-2 Segments
+>8 string uvvu \b, UltraViolet file brand for DECE Common Format
# MPEG sequences
# Scans for all common MPEG header start codes
@@ -234,6 +321,9 @@
0 belong&0xFFFFFF00 0x00000100
>3 byte 0xBA MPEG sequence
!:mime video/mpeg
+# http://fileformats.archiveteam.org/wiki/Enhanced_VOB
+# https://reposcope.com/mimetype/video/mpeg
+!:ext vob/evo/mpg/mpeg
>>4 byte &0x40 \b, v2, program multiplex
>>4 byte ^0x40 \b, v1, system multiplex
>3 byte 0xBB MPEG sequence, v1/2, multiplex (missing pack header)
@@ -877,21 +967,6 @@
# ABC (alembic.io 3d models)
0 string 0gawa ABC 3d model
-# VRML (Virtual Reality Modelling Language)
-0 string/w #VRML\ V1.0\ ascii VRML 1 file
-!:mime model/vrml
-0 string/w #VRML\ V2.0\ utf8 ISO/IEC 14772 VRML 97 file
-!:mime model/vrml
-
-# X3D (Extensible 3D) [https://www.web3d.org/specifications/x3d-3.0.dtd]
-# From Michel Briand <michelbriand@free.fr>
-# mimetype from https://www.iana.org/assignments/media-types/model/x3d+xml
-# Example https://www.web3d.org/x3d/content/examples/Basic/course/CreateX3DFromStringRandomSpheres.x3d
-0 string/w \<?xml\ version=
-!:strength + 5
->20 search/1000/w \<!DOCTYPE\ X3D X3D (Extensible 3D) model xml text
-!:mime model/x3d+xml
-
#---------------------------------------------------------------------------
# HVQM4: compressed movie format designed by Hudson for Nintendo GameCube
# From Mark Sheppard <msheppard@climax.co.uk>, 2002-10-03
@@ -905,12 +980,22 @@
>0x42 ubeshort 0 no audio
>0x42 ubeshort >0 %dHz audio
-# From: "Stefan A. Haubenthal" <polluks@web.de>
+# From: Stefan A. Haubenthal <polluks@sdf.lonestar.org>
+# Update: Joerg Jenderek
+# URL: https://en.wikipedia.org/wiki/VOB
0 string DVDVIDEO-VTS Video title set,
+!:mime video/x-ifo
+!:ext ifo/bup
>0x21 byte x v%x
0 string DVDVIDEO-VMG Video manager,
+!:mime video/x-ifo
+!:ext ifo/bup
>0x21 byte x v%x
+# From: Stefan A. Haubenthal <polluks@sdf.lonestar.org>
+0 string xMovieSetter MovieSetter movie
+0 string xSceneEditor MovieSetter movie
+
# From: Behan Webster <behanw@websterwood.com>
# NuppelVideo used by Mythtv (*.nuv)
# Note: there are two identical stanzas here differing only in the
@@ -1069,3 +1154,33 @@
# From: David Korth <gerbilsoft@gerbilsoft.com>
0 string CRID
>32 string @UTF Scaleform video
+
+# http://www.jerrysguide.com/tips/demystify-tvs-file-format.html
+0 string TVS\015\012
+>&0 string Version\040 TeamViewer Session File
+>>&0 string x \b, version %s
+
+# SER file format - simple uncompressed video format for astronomical use
+# Initially developed by Lucam Recorder,
+# as of 2021 maintained by Heiko Wilkens, Grischa Hahn
+# Typical extensions: .SER
+# http://www.grischa-hahn.homepage.t-online.de/astro/ser/SER%20Doc%20V3b.pdf
+0 string LUCAM-RECORDER SER video sequence
+!:ext ser
+>18 lelong 0 \b, bayer: mono
+>18 lelong 8 \b, bayer: RGGB
+>18 lelong 9 \b, bayer: GRBG
+>18 lelong 10 \b, bayer: GBRG
+>18 lelong 11 \b, bayer: BGGR
+>18 lelong 16 \b, bayer: CYYM
+>18 lelong 17 \b, bayer: YCMY
+>18 lelong 18 \b, bayer: YMCY
+>18 lelong 19 \b, bayer: MYYC
+>18 lelong 100 \b, bayer: RGB
+>18 lelong 101 \b, bayer: BGR
+>22 lelong 0 \b, big-endian
+>22 lelong 1 \b, little-endian
+>26 lelong x \b, width: %d
+>30 lelong x \b, height: %d
+>34 lelong x \b, %d bit
+>38 lelong x \b, frames: %d
diff --git a/magic/Magdir/apple b/magic/Magdir/apple
index e0617454cd95..4b249bf8a327 100644
--- a/magic/Magdir/apple
+++ b/magic/Magdir/apple
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: apple,v 1.44 2019/10/18 15:21:02 christos Exp $
+# $File: apple,v 1.45 2021/04/26 15:56:00 christos Exp $
# apple: file(1) magic for Apple file formats
#
0 search/1/t FiLeStArTfIlEsTaRt binscii (apple ][) text
@@ -180,7 +180,7 @@
# minimum version needed to read this files. SFMinVers (0 , 30~3.0 )
>>>183 ubyte 30 3.0
>>>183 ubyte !30
->>>>183 ubyte !0 0x%x
+>>>>183 ubyte !0 %#x
# usual tabstop start sequence "=====<"
>>>5 string x \b, tabstop ruler "%6.6s"
# tabstop ruler
@@ -299,7 +299,7 @@
# object is the first object (true for CoreFoundation implementation).
# From: David Remahl <dremahl@apple.com>
0 string bplist
->6 byte x \bCoreFoundation binary property list data, version 0x%c
+>6 byte x \bCoreFoundation binary property list data, version %#c
>>7 byte x \b%c
>6 string 00 \b
>>8 byte&0xF0 0x00 \b
@@ -358,7 +358,7 @@
0 belong 0xfade0c02 Mac OS X Code Directory
>8 belong x version %x
->12 belong >0 flags 0x%x
+>12 belong >0 flags %#x
>4 belong x - %d bytes
0 belong 0xfade0cc0 Mac OS X Detached Code Signature (non-executable)
@@ -438,7 +438,7 @@
# descSize driver size in blocks
>>4 ubeshort x \b, size %u
# descType driver system type 1 701h F8FFh FFFFh
->>6 ubeshort x \b, type 0x%x
+>>6 ubeshort x \b, type %#x
# URL: https://en.wikipedia.org/wiki/Apple_Partition_Map
# Reference: https://opensource.apple.com/source/IOStorageFamily/IOStorageFamily-116/IOApplePartitionScheme.h
diff --git a/magic/Magdir/archive b/magic/Magdir/archive
index 99798b030399..d4fd3c920d36 100644
--- a/magic/Magdir/archive
+++ b/magic/Magdir/archive
@@ -1,5 +1,5 @@
#------------------------------------------------------------------------------
-# $File: archive,v 1.138 2020/06/07 23:29:26 christos Exp $
+# $File: archive,v 1.151 2021/08/16 10:19:56 christos Exp $
# archive: file(1) magic for archive formats (see also "msdos" for self-
# extracting compressed archives)
#
@@ -168,8 +168,11 @@
0 short 0143561 byte-swapped cpio archive
!:mime application/x-cpio # encoding: swapped
0 string 070707 ASCII cpio archive (pre-SVR4 or odc)
+!:mime application/x-cpio
0 string 070701 ASCII cpio archive (SVR4 with no CRC)
+!:mime application/x-cpio
0 string 070702 ASCII cpio archive (SVR4 with CRC)
+!:mime application/x-cpio
#
# Various archive formats used by various versions of the "ar"
@@ -240,7 +243,7 @@
!:ext deb/udeb/ipk
# This should not happen
>14 default x Unknown Debian package
-# NL terminated version; for most Debian cases this is 2.0 or 2.1 for splitted
+# NL terminated version; for most Debian cases this is 2.0 or 2.1 for split
>68 string >\0 (format %s)
#>68 string !2.0\n
#>>68 string x (format %.3s)
@@ -261,7 +264,7 @@
>>>>>>>&-1 ubyte !0x2f
# display 4th character of file name extension like a of lzma
>>>>>>>>&-1 ubyte x \b%c
-# splitted debian package case
+# split debian package case
>68 string =2.1\n
# dpkg-1.18.25/dpkg-split/info.c
# NL terminated ASCII package name like ckermit
@@ -447,36 +450,116 @@
# look for first keyword of Panorama database *.pan
>12 search/261 DESIGN
# skip keyword with low entropy
->12 default x TTComp archive, binary, 4K dictionary
-# (version 5.25) labeled the above entry as "TTComp archive data"
+>12 default x
+# skip DOS 2.0 backup id file, sequence 6 with many nils like BACKUPID_xx6.@@@ handled by ./msdos
+>>8 quad !0
+>>>0 use ttcomp
+# variant ASCII, 4K dictionary (strength=48=50-2). With strength=49 wrong order! WHY?
+0 string \1\6
+# TODO:
+# skip VAX-order 68k Blit mpx/mux executable (strength=50) handled by ./blit
+!:strength -2
+>0 use ttcomp
+0 string \0\5
+# skip some DOS 2.0 backup id file, sequence 5 with many nils like BACKUPID_075.@@@ handled by ./msdos
+>8 quad !0
+>>0 use ttcomp
+0 string \1\5
+# TODO:
+# variant ASCII, 2K dictionary (strength=48=50-2). With strength=49 wrong order! WHY?
+# skip ctab data (strength=50) handled by ./ibm6000
+# skip locale data table (strength=50) handled by ./digital
+!:strength -2
+>0 use ttcomp
+0 string \0\4
+# skip many Maple help database *.hdb with version tag handled by ./maple
+>1028 string !version
+# skip veclib maple.hdb by looking for Mable keyword
+>>4 search/1091 Maple\040
+#>4 search/34090 Maple\040
+>>4 default x
+# skip DOS 2.0-3.2 backed up sequence 4 with many nils like LOTUS5.RAR handled by ./msdos
+# skip xBASE Compound Index file *.CDX with many nils
+>>>0x54 quad !0
+>>>>0 use ttcomp
+0 string \1\4
+# TODO:
+# skip Commodore PET BASIC 4.0 program *.prg
+# variant ASCII, 1K dictionary (strength=48=50-2). With strength=49 wrong order! WHY?
+# skip shared library (strength=50) handled by ./ibm6000
+!:strength -2
+>0 use ttcomp
+# display information of TTComp archive
+0 name ttcomp
+# (version 5.25) labeled the entry as "TTComp archive data"
+>0 ubyte x TTComp archive data
+!:mime application/x-compress-ttcomp
+# PBACKSCR.PI1
+!:ext $xe/$ts/pi1/__d
+# compression type: 0~binary compression 1~ASCII compression
+>0 ubyte 0 \b, binary
+>0 ubyte 1 \b, ASCII
+# size of the dictionary: 4~1024 bytes 5~2048 bytes 6~4096 bytes
+>1 ubyte 4 \b, 1K
+>1 ubyte 5 \b, 2K
+>1 ubyte 6 \b, 4K
+>1 ubyte x dictionary
+# https://mark0.net/forum/index.php?topic=848
+# last 3 bytes probably have only 8 possible bit sequences
+# xxxxxxxx 0000000x 11111111 ____FFh
+# xxxxxxxx 10000000 01111111 __807Fh
+# 0xxxxxxx 11000000 00111111 __C03Fh
+# 00xxxxxx 11100000 00011111 __E01Fh
+# 000xxxxx 11110000 00001111 __F00Fh
+# 0000xxxx 11111000 00000111 __F807h
+# 00000xxx 11111100 00000011 __FC03h
+# 000000xx 11111110 00000001 __FE01h
+# but for quickgif.__d 0A7DD4h
+#>-3 ubyte x \b, last 3 bytes 0x%2.2x
+#>-2 ubeshort x \b%4.4x
# From: Joerg Jenderek
# URL: https://wiki.68kmla.org/DiskCopy_4.2_format_specification
# reference: http://nulib.com/library/FTN.e00005.htm
0x52 ubeshort 0x0100
-# test for disk size equal or above 400k
->0x40 ubelong >409599 Apple DiskCopy 4.2 image
+# test for disk image size equal or above 400k
+>0x40 ubelong >409599
+# test also for disk image size equal or below 1440k to skip
+# windows7en.mbr UNICODE.DAT
+>>0x40 ubelong <1474561
+# To skip Flags$StringJoiner.class with size 00106A61h test also for only 4 disk image sizes
+# 00064000 for 400k GCR disks
+# 000c8000 for 800k GCR disks
+# 000b4000 for 720k MFM disks
+# 00168000 for 1440k MFM disks
+>>>0x40 ubelong&0xffE03fFF 0
+>>>>0 use dc42-floppy
+# display information of Apple DiskCopy 4.2 floppy image
+0 name dc42-floppy
+# image pascal name padded with NULs like Microsoft Mail
+>00 pstring/B x Apple DiskCopy 4.2 image %s
#!:mime application/octet-stream
+!:mime application/x-dc42-floppy-image
!:apple dCpydImg
!:ext image/dc42
-# image pascal name padded with NULs like Microsoft Mail
->>00 pstring/B x %s
# data size in bytes like 409600
->>0x40 ubelong x \b, %u bytes
+>0x40 ubelong x \b, %u bytes
+# for debugging purpose size in hexadecimal
+#>0x40 ubelong x (%#8.8x)
# tag size in bytes
->>0x44 ubelong >0 \b, 0x%x tag size
+>0x44 ubelong >0 \b, %#x tag size
# data checksum
-#>>0x48 ubelong x \b, 0x%x checksum
+#>0x48 ubelong x \b, %#x checksum
# tag checksum
-#>>0x4c ubelong x \b, 0x%x tag checksum
+#>0x4c ubelong x \b, %#x tag checksum
# disk encoding
->>0x50 ubyte 0 \b, GCR CLV ssdd (400k)
->>0x50 ubyte 1 \b, GCR CLV dsdd (800k)
->>0x50 ubyte 2 \b, MFM CAV dsdd (720k)
->>0x50 ubyte 3 \b, MFM CAV dshd (1440k)
->>0x50 ubyte >3 \b, 0x%x encoding
+>0x50 ubyte 0 \b, GCR CLV ssdd (400k)
+>0x50 ubyte 1 \b, GCR CLV dsdd (800k)
+>0x50 ubyte 2 \b, MFM CAV dsdd (720k)
+>0x50 ubyte 3 \b, MFM CAV dshd (1440k)
+>0x50 ubyte >3 \b, %#x encoding
# format byte
->>0x51 ubyte x \b, 0x%x format
-#>>0x54 ubequad x \b, data 0x%16.16llx
+>0x51 ubyte x \b, %#x format
+#>0x54 ubequad x \b, data %#16.16llx
# ESP, could this conflict with Easy Software Products' (e.g.ESP ghostscript) documentation?
0 string ESP ESP archive data
# ZPack
@@ -509,11 +592,11 @@
# compression method (0-4)
>>8 uleshort x \b, %u method
# offset of compressed data
->>10 uleshort x \b, 0x%x offset
+>>10 uleshort x \b, %#x offset
#>>(10.s) uleshort x
#>>>&-6 string x \b, TEST extension %-.3s
# header flags to mark header extensions
->>12 uleshort >0 \b, 0x%x flags
+>>12 uleshort >0 \b, %#x flags
# 4 bytes: decompressed length of file
>>12 uleshort &0x01
>>>14 ulelong x \b, original size: %u bytes
@@ -603,6 +686,21 @@
!:ext ??$
>>8 ulelong >0 \b, original size: %u bytes
+# Summary: FTCOMP compressed archive
+# From: Joerg Jenderek
+# URL: http://fileformats.archiveteam.org/wiki/FTCOMP
+# Reference: http://mark0.net/download/triddefs_xml.7z/defs/a/ark-ftcomp.trid.xml
+# Note: called by TrID "FTCOMP compressed archive"
+# extracted by `unpack seahelp.hl_`
+24 string/b FTCOMP FTCOMP compressed archive
+#!:mime application/octet-stream
+!:mime application/x-compress-ftcomp
+!:ext ??_/??@/dll/drv/pk2/
+# probably A596FDFF magic at the beginning
+>0 ubelong !0xA596FDFF \b, at beginning %#x
+# probably original file name with directory like: \OS2\unpack.exe \SYSTEM\8514.DRV MAHJONGG.EXE
+>41 string x "%s"
+
# MP3 (archiver, not lossy audio compression)
0 string MP3\x1a MP3-Archiver archive data
# ZET
@@ -816,7 +914,7 @@
!:ext dz
>>2 byte x \b, version %i
>>3 byte x \b.%i
->>4 ulelong x \b, offset 0x%x
+>>4 ulelong x \b, offset %#x
>>8 ulelong x \b, %u files
# ZZip archiver (.zz)
0 string ZZ\ \0\0 ZZip archive data
@@ -923,7 +1021,7 @@
>>>>>>3 regex \^lh[456] LHa (2.x) archive data
>>>>>>>2 string -lh5 \b
# https://en.wikipedia.org/wiki/BIOS
-# Some mainboard BIOS like Award use LHa compression. So archives with unusal extension are found like
+# Some mainboard BIOS like Award use LHa compression. So archives with unusual extension are found like
# bios.rom , kd7_v14.bin, 1010.004, ...
!:ext lha/lzh/rom/bin
# missing -lh?- variants (Joe Jared)
@@ -950,21 +1048,21 @@
# compressed data size != compressed file size
#>7 ulelong x \b, data size %d
# attribute: 0x2~?? 0x10~symlink|target 0x20~normal
-#>19 ubyte x \b, 19_0x%x
+#>19 ubyte x \b, 19_%#x
# level identifier 0 1 2 3
#>20 ubyte x \b, level %d
# time stamp
-#>15 ubelong x DATE 0x%8.8x
+#>15 ubelong x DATE %#8.8x
# OS ID for level 1
>20 ubyte 1
# 0x20 types find for *.rom files
->>(21.b+24) ubyte <0x21 \b, 0x%x OS
+>>(21.b+24) ubyte <0x21 \b, %#x OS
# ascii type like M for MSDOS
>>(21.b+24) ubyte >0x20 \b, '%c' OS
# OS ID for level 2
>20 ubyte 2
-#>>23 ubyte x \b, OS ID 0x%x
->>23 ubyte <0x21 \b, 0x%x OS
+#>>23 ubyte x \b, OS ID %#x
+>>23 ubyte <0x21 \b, %#x OS
>>23 ubyte >0x20 \b, '%c' OS
# filename only for level 0 and 1
>20 ubyte <2
@@ -1319,8 +1417,9 @@
>>>>38 search/64 .app/ iOS App
!:mime application/x-ios-app
->30 search/100/b application/epub+zip EPUB document
-!:mime application/epub+zip
+# Dup, see above.
+#>30 search/100/b application/epub+zip EPUB document
+#!:mime application/epub+zip
# Generic zip archives (Greg Roelofs, c/o zip-bugs@wkuvx1.wku.edu)
# Next line excludes specialized formats:
@@ -1331,6 +1430,8 @@
>>>>4 beshort x \b, at least
>>>>4 use zipversion
>>>>4 beshort x to extract
+>>>>8 beshort x \b, compression method=
+>>>>8 use zipcompression
>>>>0x161 string WINZIP \b, WinZIP self-extracting
# StarView Metafile
@@ -1472,8 +1573,17 @@
>>0x2A string >\0 : %s
# DR-DOS 7.03 Packed File *.??_
-0 string Packed\ File\ Personal NetWare Packed File
->12 string x \b, was "%.12s"
+# Reference: http://www.antonis.de/dos/dos-tuts/mpdostip/html/nwdostip.htm
+# Note: unpacked by PNUNPACK.EXE
+0 string Packed\ File\
+# by looking for Control-Z skip ASCII text starting with Packed File
+>0x18 ubyte 0x1a Personal NetWare Packed File
+!:mime application/x-novell-compress
+!:ext ??_
+>>12 string x \b, was "%.12s"
+# 1 or 2
+#>>0x19 ubyte x \b, at 0x19 %u
+>>0x1b ulelong x with %u bytes
# EET archive
# From: Tilman Sauerbeck <tilman@code-monkey.de>
@@ -1548,7 +1658,7 @@
>24 belong 2 MD5 checksum
>24 belong 3 SHA-256 checksum
>24 belong 4 SHA-512 checksum
->24 belong >4 unknown 0x%x checksum
+>24 belong >4 unknown %#x checksum
#>24 belong >4 checksum
# For no compression jump 0 bytes
>24 belong 0
@@ -1556,7 +1666,7 @@
# jump more bytes forward by header size
>>>&(4.S) ubyte x
# jump more bytes forward by compressed table of contents size
-#>>>>&(8.Q) ubequad x \b, heap data 0x%llx
+#>>>>&(8.Q) ubequad x \b, heap data %#llx
>>>>&(8.Q) ubyte x
# look for data by ./compress after message with 1 space at end
>>>>>&-3 indirect x \b, contains
@@ -1628,7 +1738,7 @@
# *.GHS or *.[0-9] with cns program option
>2 ubyte&0x08 0x08 \b, split file
# part of split index interesting for *.ghs
->>4 ubyte x id=0x%x
+>>4 ubyte x id=%#x
# compression tag minus one equals numeric compression command line switch z[1-9]
>3 ubyte 0 \b, no compression
>3 ubyte 2 \b, fast compression (Z1)
@@ -1676,9 +1786,9 @@
!:mime application/x-acronis-tib
!:ext tib
# 01000000
-#>20 ubelong x \b, at 20 0x%x
+#>20 ubelong x \b, at 20 %#x
# 20000000
-#>28 ubelong x \b, at 28 0x%x
+#>28 ubelong x \b, at 28 %#x
# strings like "Generic- SD/MMC 1.00" "Unknown Disk" "Msft Virtual Disk 1.0"
# ???
# strings like "\Device\0000011e" "\Device\0000015a"
@@ -1719,3 +1829,24 @@
# path[CXBTFFile[MaximumPathLength=256]
>>9 string x \b, 1st %s
+# ALZIP archive
+# by Hyungjun Park <hyungjun.park@worksmobile.com>, Hajin Jang <hajin_jang@worksmobile.com>
+# http://kippler.com/win/unalz/
+# https://salsa.debian.org/l10n-korean-team/unalz
+0 string ALZ\001 ALZ archive data
+!:ext alz
+
+# https://cf-aldn.altools.co.kr/setup/EGG_Specification.zip
+0 string EGGA EGG archive data,
+!:ext egg
+>5 byte x version %u
+>4 byte x \b.%u
+>>0x0E ulelong =0x08E28222
+>>0x0E ulelong =0x24F5A262 \b, split
+>>0x0E ulelong =0x24E5A060 \b, solid
+>>0x0E default x \b, unknown
+
+# PAQ9A archive
+# URL: http://mattmahoney.net/dc/#paq9a
+# Note: Line 1186 of paq9a.cpp gives the magic bytes
+0 string pQ9\001 PAQ9A archive
diff --git a/magic/Magdir/arm b/magic/Magdir/arm
new file mode 100644
index 000000000000..b40f213cbfb4
--- /dev/null
+++ b/magic/Magdir/arm
@@ -0,0 +1,41 @@
+#------------------------------------------------------------------------------
+# $File: arm,v 1.2 2021/07/14 17:40:31 christos Exp $
+# arm: file(1) magic for ARM COFF
+#
+# https://docs.microsoft.com/en-us/windows/win32/debug/pe-format
+
+# Aarch64
+0 leshort 0xaa64
+# test for unused flag bits in f_flags
+>18 uleshort&0x8E80 0
+# use little endian variant of subroutine to
+# display name+variables+flags for common object formatted files
+>>0 use display-coff
+!:strength -10
+
+# ARM
+0 leshort 0x01c0
+# test for unused flag bits in f_flags
+>18 uleshort&0x8E80 0
+# use little endian variant of subroutine to
+# display name+variables+flags for common object formatted files
+>>0 use display-coff
+!:strength -10
+
+# ARM Thumb
+0 leshort 0x01c2
+# test for unused flag bits in f_flags
+>18 uleshort&0x8E80 0
+# use little endian variant of subroutine to
+# display name+variables+flags for common object formatted files
+>>0 use display-coff
+!:strength -10
+
+# ARMv7 Thumb
+0 leshort 0x01c4
+# test for unused flag bits in f_flags
+>18 uleshort&0x8E80 0
+# use little endian variant of subroutine to
+# display name+variables+flags for common object formatted files
+>>0 use display-coff
+!:strength -10
diff --git a/magic/Magdir/asf b/magic/Magdir/asf
index c97f5498f53e..faae6a8aa9cf 100644
--- a/magic/Magdir/asf
+++ b/magic/Magdir/asf
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: asf,v 1.1 2019/12/26 02:07:53 christos Exp $
+# $File: asf,v 1.2 2021/04/26 15:56:00 christos Exp $
# asf: file(1) magic for Microsoft Advanced Systems Format (ASF) files
# http://www.staroceans.org/e-book/ASF_Specification.pdf
@@ -23,7 +23,7 @@
#>>56 lequad x Time Offset %lld
#>>64 lelong x Type-Specicic Data Length %d
#>>68 lelong x Error Correction Data Length %d
-#>>72 leshort x Flags 0x%x
+#>>72 leshort x Flags %#x
#>>74 lelong x Reserved %x
# ASF_Audio_Media
>>24 guid F8699E40-5B4D-11CF-A8FD-00805F5C442B \b, Audio Media (
@@ -40,7 +40,7 @@
#>>>85 leshort x \b, Format Data Size %x
>>>93 lelong x \b, Image Width %d
>>>97 lelong x \b, Image Height %d
-#>>>101 leshort x \b, Reserved 0x%x
+#>>>101 leshort x \b, Reserved %#x
>>>103 leshort x \b, Bits Per Pixel Count %d
#>>>105 lelong x \b, Compression ID %d
#>>>109 lelong x \b, Image Size %d
diff --git a/magic/Magdir/audio b/magic/Magdir/audio
index 448f000a38bc..c85c2952336f 100644
--- a/magic/Magdir/audio
+++ b/magic/Magdir/audio
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: audio,v 1.118 2019/11/19 05:30:07 christos Exp $
+# $File: audio,v 1.121 2021/04/26 15:56:00 christos Exp $
# audio: file(1) magic for sound formats (see also "iff")
#
# Jan Nicolai Langfeldt (janl@ifi.uio.no), Dan Quinlan (quinlan@yggdrasil.com),
@@ -445,7 +445,7 @@
>0 string >\0 Composer: "%s"
0 string AMF AMF Module
>4 string >\0 Title: "%s"
-0 string MODINFO1 Open Cubic Player Module Inforation MDZ
+0 string MODINFO1 Open Cubic Player Module Information MDZ
0 string Extended\40Instrument: Fast Tracker II Instrument
# From: Takeshi Hamasaki <hma@syd.odn.ne.jp>
@@ -716,36 +716,36 @@
>>8 ubyte&0x0F >0 \b%d
#Get soundchips
>>8 ubyte x \b, soundchip(s)=
->>0x0C ulelong >0 SN76489,
->>0x10 ulelong >0 YM2413,
->>0x2C ulelong >0 YM2612,
->>0x30 ulelong >0 YM2151,
+>>0x0C ulelong >0 SN76489 (PSG),
+>>0x10 ulelong >0 YM2413 (OPLL),
+>>0x2C ulelong >0 YM2612 (OPN2),
+>>0x30 ulelong >0 YM2151 (OPM),
>>0x38 ulelong >0 Sega PCM,
>>0x34 ulelong >0xC
->>>0x40 ulelong >0 RF5C68,
+>>>0x40 ulelong >0 RF5C68 (PCM),
>>0x34 ulelong >0x10
->>>0x44 ulelong >0 YM2203,
+>>>0x44 ulelong >0 YM2203 (OPN),
>>0x34 ulelong >0x14
->>>0x48 ulelong >0 YM2608,
+>>>0x48 ulelong >0 YM2608 (OPNA),
>>0x34 ulelong >0x18
->>>0x4C lelong >0 YM2610,
->>>0x4C lelong <0 YM2610B,
+>>>0x4C lelong >0 YM2610 (OPNB),
+>>>0x4C lelong <0 YM2610B (OPNB+2FM),
>>0x34 ulelong >0x1C
->>>0x50 ulelong >0 YM3812,
+>>>0x50 ulelong >0 YM3812 (OPL2),
>>0x34 ulelong >0x20
->>>0x54 ulelong >0 YM3526,
+>>>0x54 ulelong >0 YM3526 (OPL),
>>0x34 ulelong >0x24
->>>0x58 ulelong >0 Y8950,
+>>>0x58 ulelong >0 Y8950 (MSX-Audio),
>>0x34 ulelong >0x28
->>>0x5C ulelong >0 YMF262,
+>>>0x5C ulelong >0 YMF262 (OPL3),
>>0x34 ulelong >0x2C
->>>0x60 ulelong >0 YMF278B,
+>>>0x60 ulelong >0 YMF278B (OPL4),
>>0x34 ulelong >0x30
->>>0x64 ulelong >0 YMF271,
+>>>0x64 ulelong >0 YMF271 (OPX),
>>0x34 ulelong >0x34
->>>0x68 ulelong >0 YMZ280B,
+>>>0x68 ulelong >0 YMZ280B (PCMD8),
>>0x34 ulelong >0x38
->>>0x6C ulelong >0 RF5C164,
+>>>0x6C ulelong >0 RF5C164 (PCM),
>>0x34 ulelong >0x3C
>>>0x70 ulelong >0 PWM,
>>0x34 ulelong >0x40
@@ -767,11 +767,11 @@
>>0x34 ulelong >0x54
>>>0x88 ulelong >0 MultiPCM,
>>0x34 ulelong >0x58
->>>0x8C ulelong >0 uPD7759,
+>>>0x8C ulelong >0 uPD7759 (ADPCM Speech),
>>0x34 ulelong >0x5C
->>>0x90 ulelong >0 OKIM6258,
+>>>0x90 ulelong >0 OKIM6258 (ADPCM Speech),
>>0x34 ulelong >0x64
->>>0x98 ulelong >0 OKIM6295,
+>>>0x98 ulelong >0 OKIM6295 (ADPCM),
>>0x34 ulelong >0x68
>>>0x9C ulelong >0 K051649,
>>0x34 ulelong >0x6C
@@ -796,10 +796,10 @@
>>0x34 ulelong >0x94
>>>0xC8 ulelong >0 SAA1099,
>>0x34 ulelong >0x98
->>>0xCC ulelong >0 ES5503,
+>>>0xCC ulelong >0 ES5503 (DOC),
>>0x34 ulelong >0x9C
->>>0xD0 lelong >0 ES5505,
->>>0xD0 lelong <0 ES5506,
+>>>0xD0 lelong >0 ES5505 (OTIS),
+>>>0xD0 lelong <0 ES5506 (OTTO),
>>0x34 ulelong >0xA4
>>>0xD8 ulelong >0 X1-010,
>>0x34 ulelong >0xA8
@@ -847,16 +847,16 @@
>>18 ubyte x \b, language ID %d
# structure for phrases/sentences?
# number of voice sample in the 1st phrase?
-#>>19 uleshort x \b, 0x%x samples
-#>>>21 uleshort >0 \b, at 0x%4.4x
-#>>>(21.s) ubequad x 0x%llx
+#>>19 uleshort x \b, %#x samples
+#>>>21 uleshort >0 \b, at %#4.4x
+#>>>(21.s) ubequad x %#llx
# 2nd phrase?
-#>>23 uleshort x \b, 0x%x samples
-#>>>25 uleshort >0 \b, at 0x%4.4x
-#>>>(25.s) ubequad x 0x%llx
+#>>23 uleshort x \b, %#x samples
+#>>>25 uleshort >0 \b, at %#4.4x
+#>>>(25.s) ubequad x %#llx
# pointer to 1st audio WAV sample
>>16 uleshort >0
->>>(16.s) ulelong >0 \b, at 0x%x
+>>>(16.s) ulelong >0 \b, at %#x
# WAV length
# 1 space char after "bytes" to get phrase "bytes RIFF"
>>>>(16.s+4) ulelong >0 %u bytes
diff --git a/magic/Magdir/avm b/magic/Magdir/avm
new file mode 100644
index 000000000000..86e96d110e30
--- /dev/null
+++ b/magic/Magdir/avm
@@ -0,0 +1,33 @@
+
+#------------------------------------------------------------------------------
+# $File: avm,v 1.1 2020/08/28 20:37:58 christos Exp $
+# avm: file(1) magic for avm files; this is not use
+
+# Summary: FRITZ!Box router configuration backup
+# From: Joerg Jenderek
+# URL: https://en.wikipedia.org/wiki/Fritz!Box
+# Reference: http://www.mengelke.de/Projekte/FritzBoxTools2
+# Note: only tested with models 4040 and 6490 Cable (lgi)
+0 string ****\ FRITZ!Box\ FRITZ!Box configuration backup
+#!:mime text/plain
+!:mime application/x-avm-export
+!:ext export
+# router model name like "4040" , "6490 Cable (lgi)" followed by " CONFIGURATION EXPORT"
+>15 string x of %-.4s
+# on 2nd line hashed password
+#>41 search/54 Password= \b, password
+# on 3rd line firmware version like: 141.06.24 141.06.50 141.07.10 ... 155.06.83
+>41 search/172 FirmwareVersion= \b, firmware version
+>>&0 string x %s
+# on 5th line oem like: avme lgi
+>41 search/285 OEM= \b, oem
+>>&0 string x %s
+# on 7th line language like: de en
+>41 search/305 Language= \b, language
+>>&0 string x %s
+# on 10th line cfg file name like: /var/tmp.cfg
+>41 search/349 tmp.cfg
+# on 11th line date inside c-comment like: Thu Jun 4 22:25:19 2015
+>>&4 string x \b, %s
+#
+
diff --git a/magic/Magdir/biosig b/magic/Magdir/biosig
index e490f6cc7eff..7d41713f24a5 100644
--- a/magic/Magdir/biosig
+++ b/magic/Magdir/biosig
@@ -19,7 +19,7 @@
0 string ATES\x20MEDICA\x20SOFT.\x20EEG\x20for\x20Windows Biosig/ATES MEDICA SOFT. EEG for Windows
!:mime biosig/ates
#
-0 string ATF\x09 Biosig/Axon Text fomrat
+0 string ATF\x09 Biosig/Axon Text format
!:mime biosig/atf
#
0 string ADU1 Biosig/Axona file format
diff --git a/magic/Magdir/blit b/magic/Magdir/blit
index d5b687fce60b..5ce787070683 100644
--- a/magic/Magdir/blit
+++ b/magic/Magdir/blit
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: blit,v 1.8 2009/09/19 16:28:08 christos Exp $
+# $File: blit,v 1.9 2021/07/03 14:01:46 christos Exp $
# blit: file(1) magic for 68K Blit stuff as seen from 680x0 machine
#
# Note that this 0407 conflicts with several other a.out formats...
@@ -14,7 +14,11 @@
0 short 03401 VAX-order 68K Blit (standalone) executable
0 long 0406 68k Blit mpx/mux executable
0 short 0406 VAX-order2 68k Blit mpx/mux executable
+# GRR: line below is too general as it matches also TTComp archive, ASCII, 4K handled by ./archive
0 short 03001 VAX-order 68k Blit mpx/mux executable
+# TODO:
+# skip TTComp archive, ASCII, 4K by looking for executable keyword like main
+#>0 search/5536 main\0 VAX-order 68k Blit mpx/mux executable
# Need more values for WE32 DMD executables.
# Note that 0520 is the same as COFF
#0 short 0520 tty630 layers executable
diff --git a/magic/Magdir/bm b/magic/Magdir/bm
new file mode 100644
index 000000000000..a9a1d5bb3f42
--- /dev/null
+++ b/magic/Magdir/bm
@@ -0,0 +1,10 @@
+
+#------------------------------------------------------------------------------
+# $File: bm,v 1.2 2021/03/14 16:56:51 christos Exp $
+# bm: file(1) magic for "Birtual Machine", cf. https://github.com/tsoding/bm
+
+0 string bm\001\244 Birtual Machine
+>4 leshort x \b, version %d
+>6 lelong x \b, program size %u
+>14 lelong x \b, memory size %u
+>22 lelong x \b, memory capacity %u
diff --git a/magic/Magdir/bsi b/magic/Magdir/bsi
index 20a17d9c2d0d..87e0fec76e85 100644
--- a/magic/Magdir/bsi
+++ b/magic/Magdir/bsi
@@ -2,8 +2,9 @@
# Office for Information Security (Bundesamt fuer Sicherheit in der
# Informationstechnik).
-# Extension: .xia
-0 string XIA1 Chiasmus encrypted data
+# https://www.bsi.bund.de/EN/Topics/OtherTopics/Chiasmus/Chiasmus_node.html
+0 string XIA1\r Chiasmus Encrypted data
+!:ext xia
-# Extension: .xis
0 string XIS Chiasmus key
+!:ext xis
diff --git a/magic/Magdir/bytecode b/magic/Magdir/bytecode
new file mode 100644
index 000000000000..501cd9d4415f
--- /dev/null
+++ b/magic/Magdir/bytecode
@@ -0,0 +1,30 @@
+
+#------------------------------------------------------------
+# $File: bytecode,v 1.2 2021/06/30 11:57:32 christos Exp $
+# magic for various bytecodes
+
+# From: Mikhail Gusarov <dottedmag@dottedmag.net>
+# NekoVM (https://nekovm.org/) bytecode
+0 string NEKO NekoVM bytecode
+>4 lelong x (%d global symbols,
+>8 lelong x %d global fields,
+>12 lelong x %d bytecode ops)
+!:mime application/x-nekovm-bytecode
+
+# https://www.iana.org/assignments/media-types/application/vnd.resilient.logic
+# From: Benedikt Muessig <benedikt@resilient-group.de>
+0 belong 0x07524c4d Resilient Logic bytecode
+!:mime application/vnd.resilient.logic
+>4 byte/16 x \b, version %d
+>4 byte&0x0f x \b.%d
+
+# Guile file magic from <dalepsmith@gmail.com>
+# https://www.gnu.org/s/guile/
+# https://git.savannah.gnu.org/gitweb/?p=guile.git;f=libguile/_scm.h;hb=HEAD#l250
+
+0 string GOOF---- Guile Object
+>8 string LE \b, little endian
+>8 string BE \b, big endian
+>11 string 4 \b, 32bit
+>11 string 8 \b, 64bit
+>13 regex .\.. \b, bytecode v%s
diff --git a/magic/Magdir/c-lang b/magic/Magdir/c-lang
index 9356e82ed9e2..6500d37822c1 100644
--- a/magic/Magdir/c-lang
+++ b/magic/Magdir/c-lang
@@ -1,5 +1,5 @@
#------------------------------------------------------------------------------
-# $File: c-lang,v 1.28 2019/11/15 21:03:14 christos Exp $
+# $File: c-lang,v 1.30 2021/08/16 10:17:05 christos Exp $
# c-lang: file(1) magic for C and related languages programs
#
# The strength is to beat standard HTML
@@ -49,7 +49,10 @@
>0 regex \^union[[:space:]]+ C source text
!:mime text/x-c
0 search/8192 main(
->&0 regex \\)[[:space:]]*\\{ C source text
+>&0 search/64 String Java source text
+!:mime text/x-java
+>&0 default x
+>>&0 regex \\)[[:space:]]*\\{ C source text
!:mime text/x-c
# C++
diff --git a/magic/Magdir/c64 b/magic/Magdir/c64
index ff4e93309e6e..52a4e22d99e9 100644
--- a/magic/Magdir/c64
+++ b/magic/Magdir/c64
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: c64,v 1.7 2017/11/15 12:19:06 christos Exp $
+# $File: c64,v 1.9 2021/04/26 15:56:00 christos Exp $
# c64: file(1) magic for various commodore 64 related files
#
# From: Dirk Jagdmann <doj@cubic.org>
@@ -28,17 +28,17 @@
0 belong 0xFF424CFF WRAptor packer (c64)
0 string C64S\x20tape\x20file T64 tape Image
->32 leshort x Version:0x%x
+>32 leshort x Version:%#x
>36 leshort !0 Entries:%i
>40 string x Name:%.24s
0 string C64\x20tape\x20image\x20file\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0 T64 tape Image
->32 leshort x Version:0x%x
+>32 leshort x Version:%#x
>36 leshort !0 Entries:%i
>40 string x Name:%.24s
0 string C64S\x20tape\x20image\x20file\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0 T64 tape Image
->32 leshort x Version:0x%x
+>32 leshort x Version:%#x
>36 leshort !0 Entries:%i
>40 string x Name:%.24s
@@ -56,3 +56,8 @@
>68 string >\0 \b (C) %s
>100 byte >0 \b, %u subsong(s)
+# CBM BASIC (cc65 compiled)
+0 leshort 0x0801
+>2 leshort 0x080b
+>6 string \x9e CBM BASIC
+>7 string >\0 \b, SYS %s
diff --git a/magic/Magdir/cad b/magic/Magdir/cad
index 3d07b422fc18..530f72f31e95 100644
--- a/magic/Magdir/cad
+++ b/magic/Magdir/cad
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: cad,v 1.23 2020/05/30 23:58:07 christos Exp $
+# $File: cad,v 1.28 2021/04/26 15:56:00 christos Exp $
# autocad: file(1) magic for cad files
#
@@ -32,8 +32,8 @@
#>0 ubyte &0x40 \b, reserved
# type of element 9~TCB 8~Digitizer setup 5~Group Data Elements
#>1 ubyte&0x7F x \b, type %u
-# words to follow in element: 17H~CEL libray 2FEh~DGN 9FEh,DFEh~CIT
-#>2 uleshort x \b, words 0x%4.4x to follow
+# words to follow in element: 17H~CEL library 2FEh~DGN 9FEh,DFEh~CIT
+#>2 uleshort x \b, words %#4.4x to follow
# test for 3 reserved 0 bytes in CIT or "conversion" in ViewInfo structure (DGN CEL)
#>508 ubelong x \b, RESERVED %8.8x
>508 ubelong&0xFFffFF00 =0
@@ -58,7 +58,7 @@
>>>>1120 string x \b, units %-.2s
# 2 chars for name of master unit like IN in ML SU tn th TH HU mm "\0 "\040 \0\0
>>>>1122 string >\0 %-.2s
-#>>>>1120 ubelong x \b, units 0x%8.8x
+#>>>>1120 ubelong x \b, units %#8.8x
# element range low,high x y z like xlow=0 08010000h 01080000h
#>>>>4 ubelong !0 \b, xlow %8.8x
#>>>>8 ubelong !0 \b, ylow %8.8x
@@ -67,7 +67,7 @@
#>>>>20 ubelong !0 \b, yhigh %8.8x
#>>>>24 ubelong !0 \b, zhigh %8.8x
# graphic group number; all other elements in that group have same non-0 number
-#>>>>28 leshort x \b, grphgrp 0x%4.4x
+#>>>>28 leshort x \b, grphgrp %#4.4x
# words to optional attribute linkage
#>>>>30 ubyte x \b, attindx \%o
#>>>>31 ubyte x \b\%o
@@ -91,11 +91,11 @@
# >>30 string \372\106 DGNFile
# >>30 string \376\103 DGNFile
# elements properties indicator
-#>>>>32 uleshort !0 \b, properties 0x%4.4x
+#>>>>32 uleshort !0 \b, properties %#4.4x
# class 0~Primary
-#>>>>>32 uleshort&0x000F !0 \b, class 0x%4.4x
+#>>>>>32 uleshort&0x000F !0 \b, class %#4.4x
# Symbology
-#>>>>>34 uleshort x \b, Symbology 0x%4.4x
+#>>>>>34 uleshort x \b, Symbology %#4.4x
# test for 2nd element type 1~library cell header
>>&1 ubyte&0x7F 1
# test for 1st element with level 8 and type 5 for cell library
@@ -151,13 +151,13 @@
>194 ubyte &0x04 horizontal
>194 ubyte ^0x04 vertical
# ScannableFlag; Scanline indexing method used
-#>195 ubyte !0 \b, ScannableFlag 0x%x
+#>195 ubyte !0 \b, ScannableFlag %#x
# RotationAngle; Rotation angle of raster data
-#>196 ubequad !0 \b, RotationAngle 0x%llx
+#>196 ubequad !0 \b, RotationAngle %#llx
# SkewAngle; Skew angle of raster data
#>204 ubequad !0 \b, SkewAngle %llx
# DataTypeModifier; Additional raster data format info
-#>212 uleshort !0 \b, DataTypeModifier 0x%4.4x
+#>212 uleshort !0 \b, DataTypeModifier %#4.4x
# DesignFile[66]; Name of the design file
>214 string >\0 \b, DesignFile %-.66s
# DatabaseFile[66]; Name of the database file
@@ -167,9 +167,9 @@
# FileDescription[80]; Text description of file and contents
>412 string >\0 \b, FileDescription %-.80s
# MinValue
-#>492 ubequad !0 \b, MinValue 0x%llx
+#>492 ubequad !0 \b, MinValue %#llx
# MaxValue
-#>500 ubequad !0 \b, MaxValue 0x%llx
+#>500 ubequad !0 \b, MaxValue %#llx
# Reserved[3]; Unused (always 0)
#>508 ubelong&0xFFffFF00 x \b, RESERVED %8.8x
# GridFileVersion; Grid File Version like 2 3
@@ -213,9 +213,11 @@
# AutoCAD DWG versions R12/R13/R14 (www.autodesk.com)
0 string AC1012 DWG AutoDesk AutoCAD Release 13
!:mime image/vnd.dwg
+0 string AC1013 DWG AutoDesk AutoCAD Release 13c3
+!:mime image/vnd.dwg
0 string AC1014 DWG AutoDesk AutoCAD Release 14
!:mime image/vnd.dwg
-0 string AC1015 DWG AutoDesk AutoCAD 2000/2002
+0 string AC1015 DWG AutoDesk AutoCAD 2000
!:mime image/vnd.dwg
# A new version of AutoCAD DWG
@@ -233,7 +235,9 @@
!:mime image/vnd.dwg
# From GNU LibreDWG
-0 string AC1032 DWG AutoDesk AutoCAD 2018/2019
+0 string AC1032 DWG AutoDesk AutoCAD 2018/2019/2020
+!:mime image/vnd.dwg
+0 string AC1035 DWG AutoDesk AutoCAD 2021
!:mime image/vnd.dwg
# KOMPAS 2D drawing from ASCON
@@ -309,11 +313,15 @@
>>>>&1 search/8192 AC1006 \b, R10
>>>>&1 search/8192 AC1009 \b, R11/R12
>>>>&1 search/8192 AC1012 \b, R13
+>>>>&1 search/8192 AC1013 \b, R13c3
>>>>&1 search/8192 AC1014 \b, R14
>>>>&1 search/8192 AC1015 \b, version 2000
>>>>&1 search/8192 AC1018 \b, version 2004
>>>>&1 search/8192 AC1021 \b, version 2007
>>>>&1 search/8192 AC1024 \b, version 2010
+>>>>&1 search/8192 AC1027 \b, version 2013
+>>>>&1 search/8192 AC1032 \b, version 2018
+>>>>&1 search/8192 AC1035 \b, version 2021
# The Sketchup 3D model format https://www.sketchup.com/
0 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
@@ -322,3 +330,74 @@
4 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
!:strength +40
+
+# glTF (GL Transmission Format) - by the Khronos Group
+# Reference: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#glb-file-format-specification
+0 string glTF glTF binary model
+>4 ulelong x \b, version %d
+>8 ulelong x \b, length %d bytes
+!:mime model/gltf-binary
+!:ext glb
+
+# FBX (FilmBoX) - by Kaydara/Autodesk
+# Reference: https://code.blender.org/2013/08/fbx-binary-file-format-specification
+0 string Kaydara\ FBX\ Binary\ \ \0 Kaydara FBX model,
+>&2 ulelong x version %d
+!:ext fbx
+
+# PLY (Polygon File Format/Stanford Triangle Format) - by Greg Turk
+# Reference: https://web.archive.org/web/20161204152348/http://www.dcs.ed.ac.uk/teaching/cs4/www/graphics/Web/ply.html
+0 string ply\n PLY model,
+!:ext ply
+>4 string format\ ascii\ ASCII,
+>>&0 regex/6 [0-9.]+ version %s
+>4 string format\ binary binary,
+>>&0 string _little_endian\ little endian,
+>>>&0 regex/6 [0-9.]+ version %s
+>>&0 string _big_endian\ big endian,
+>>>&0 regex/6 [0-9.]+ version %s
+
+# VRML (Virtual Reality Modeling Language) - by the Web3D Consortium
+# From: Michel Briand <michelbriand@free.fr>
+# Reference: https://www.web3d.org/standards
+0 string/w #VRML\ V1.0\ ascii VRML 1 file
+!:mime model/vrml
+!:ext wrl
+0 string/w #VRML\ V2.0\ utf8 ISO/IEC 14772 VRML 97 file
+!:mime model/vrml
+!:ext wrl
+# X3D, VRML encoded
+0 string #X3D X3D (Extensible 3D) model, VRML format
+>4 string V
+>>5 regex/6 [0-9.]+ \b, version %s
+!:mime model/x3d+vrml
+!:ext x3dv
+
+## XML-based 3D CAD Formats
+# From: Michel Briand <michelbriand@free.fr>, Oliver Galvin <odg@riseup.net>
+0 string/w \<?xml\ version=
+!:strength + 5
+# X3D (Extensible 3D)
+# Schema: https://www.web3d.org/specifications/x3d-3.2.dtd
+# MIME Type: https://www.iana.org/assignments/media-types/model/x3d+xml
+# Example: https://www.web3d.org/x3d/content/examples/Basic/course/CreateX3DFromStringRandomSpheres.x3d
+>20 search/1000/w \<!DOCTYPE\ X3D X3D (Extensible 3D) model, XML document
+!:mime model/x3d+xml
+!:ext x3d
+# COLLADA (COLLAborative Design Activity) - by the Khronos Group
+# Schema: http://www.collada.org/2005/11/COLLADASchema
+# Reference: https://www.khronos.org/collada
+>20 search/1000/w \<COLLADA COLLADA model, XML document
+!:mime model/vnd.collada+xml
+!:ext dae
+# 3MF (3D Manufacturing Format) - by the 3MF Consortium
+# Schema: http://schemas.microsoft.com/3dmanufacturing/core/2015/02
+# Reference: https://3mf.io/specification
+>20 search/1000/w xmlns="http://schemas.microsoft.com/3dmanufacturing 3MF (3D Manufacturing Format) model, XML document
+!:mime model/3mf
+!:ext 3mf
+# AMF (Additive Manufacturing File)
+# Reference: https://www.astm.org/Standards/ISOASTM52915.htm
+>20 search/1000/w \<amf AMF (Additive Manufacturing Format) model, XML document
+!:mime application/x-amf
+!:ext amf
diff --git a/magic/Magdir/cafebabe b/magic/Magdir/cafebabe
index 18dd1a27a39f..8cc0902b4cd5 100644
--- a/magic/Magdir/cafebabe
+++ b/magic/Magdir/cafebabe
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: cafebabe,v 1.24 2018/10/01 23:33:15 christos Exp $
+# $File: cafebabe,v 1.27 2021/04/26 15:56:00 christos Exp $
# Cafe Babes unite!
#
# Since Java bytecode and Mach-O universal binaries have the same magic number,
@@ -15,12 +15,20 @@
# might add another one or two as time goes by...
#
### JAVA START ###
+# Reference: http://en.wikipedia.org/wiki/Java_class_file
+# Update: Joerg Jenderek
0 belong 0xcafebabe
->4 belong >30 compiled Java class data,
+>4 ubelong >30 compiled Java class data,
!:mime application/x-java-applet
->>6 beshort x version %d.
->>4 beshort x \b%d
+#!:mime application/java-byte-code
+!:ext class
+>>6 ubeshort x version %d.
+>>4 ubeshort x \b%d
+# for debugging purpose version as hexadecimal to compare with Mach-O universal binary
+#>>4 ubelong x (%#8.8x)
# Which is which?
+# https://docs.oracle.com/javase/specs/jvms/se6/html/ClassFile.doc.html
+#>>4 belong 0x002b (Java 0.?)
#>>4 belong 0x032d (Java 1.0)
#>>4 belong 0x032d (Java 1.1)
>>4 belong 0x002e (Java 1.2)
@@ -30,6 +38,16 @@
>>4 belong 0x0032 (Java 1.6)
>>4 belong 0x0033 (Java 1.7)
>>4 belong 0x0034 (Java 1.8)
+>>4 belong 0x0035 (Java SE 9)
+>>4 belong 0x0036 (Java SE 10)
+>>4 belong 0x0037 (Java SE 11)
+>>4 belong 0x0038 (Java SE 12)
+>>4 belong 0x0039 (Java SE 13)
+>>4 belong 0x003A (Java SE 14)
+# pool count unequal zero
+#>>8 beshort x \b, pool count %#x
+# pool table
+#>>10 ubequad x \b, pool %#16.16llx...
0 belong 0xcafed00d JAR compressed with pack200,
>5 byte x version %d.
@@ -44,29 +62,40 @@
### JAVA END ###
### MACH-O START ###
+# URL: https://en.wikipedia.org/wiki/Mach-O
0 name mach-o \b [
+# for debugging purpose CPU type as hexadecimal
+#>0 ubequad x CPU=%16.16llx
+# display CPU type as string like: i386 x86_64 ... armv7 armv7k ...
>0 use mach-o-cpu \b
+# for debugging purpose print offset to 1st mach_header like:
+# 1000h 4000h seldom 2d000h 88000h 5b000h 10e000 h
+#>8 ubelong x at %#x offset
>(8.L) indirect x \b:
>0 belong x \b]
+# Reference: https://opensource.apple.com/source/cctools/cctools-949.0.1/
+# include/mach-o/fat.h
+# include/mach/machine.h
0 belong 0xcafebabe
>4 belong 1 Mach-O universal binary with 1 architecture:
!:mime application/x-mach-binary
>>8 use mach-o \b
->4 belong >1
->>4 belong <20 Mach-O universal binary with %d architectures:
+# nfat_arch; number of CPU architectures; highest is 18 for CPU_TYPE_POWERPC in 2020
+>4 ubelong >1
+>>4 ubelong <20 Mach-O universal binary with %d architectures:
!:mime application/x-mach-binary
>>>8 use mach-o \b
->>4 belong >1
->>>28 use mach-o \b
->>4 belong >2
->>>48 use mach-o \b
->>4 belong >3
->>>68 use mach-o \b
->>4 belong >4
->>>88 use mach-o \b
->>4 belong >5
->>>108 use mach-o \b
+>>>4 ubelong >1
+>>>>28 use mach-o \b
+>>>4 ubelong >2
+>>>>48 use mach-o \b
+>>>4 ubelong >3
+>>>>68 use mach-o \b
+>>>4 ubelong >4
+>>>>88 use mach-o \b
+>>>4 ubelong >5
+>>>>108 use mach-o \b
### MACH-O END ###
diff --git a/magic/Magdir/citrus b/magic/Magdir/citrus
index ff2471ea75ac..1801a55fa650 100644
--- a/magic/Magdir/citrus
+++ b/magic/Magdir/citrus
@@ -1,8 +1,12 @@
#------------------------------------------------------------------------------
-# $File: citrus,v 1.4 2009/09/19 16:28:08 christos Exp $
+# $File: citrus,v 1.5 2021/01/04 19:48:31 christos Exp $
# citrus locale declaration
#
0 string RuneCT Citrus locale declaration for LC_CTYPE
+0 string CtrsME Citrus locale declaration for LC_MESSAGES
+0 string CtrsMO Citrus locale declaration for LC_MONETARY
+0 string CtrsNU Citrus locale declaration for LC_NUMERIC
+0 string CtrsTI Citrus locale declaration for LC_TIME
diff --git a/magic/Magdir/clipper b/magic/Magdir/clipper
index 2768b3af501d..484caeb89eac 100644
--- a/magic/Magdir/clipper
+++ b/magic/Magdir/clipper
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: clipper,v 1.8 2017/03/17 21:35:28 christos Exp $
+# $File: clipper,v 1.9 2020/12/15 23:57:27 christos Exp $
# clipper: file(1) magic for Intergraph (formerly Fairchild) Clipper.
#
# XXX - what byte order does the Clipper use?
@@ -61,5 +61,5 @@
>54 byte 2 -Cssw
>54 byte 3 -Cspw
>54 byte 4 -Cscb
-4 string pipe CLIPPER instruction trace
-4 string prof CLIPPER instruction profile
+#4 string pipe CLIPPER instruction trace
+#4 string prof CLIPPER instruction profile
diff --git a/magic/Magdir/coff b/magic/Magdir/coff
index 31b47e7aff42..535187c2ce9e 100644
--- a/magic/Magdir/coff
+++ b/magic/Magdir/coff
@@ -1,11 +1,11 @@
#------------------------------------------------------------------------------
-# $File: coff,v 1.3 2018/08/01 10:34:03 christos Exp $
+# $File: coff,v 1.6 2021/04/26 15:56:00 christos Exp $
# coff: file(1) magic for Common Object Files not specific to known cpu types or manufactures
#
# COFF
#
-# by Joerg Jenderek at Oct 2015
+# by Joerg Jenderek at Oct 2015, Feb 2021
# https://en.wikipedia.org/wiki/COFF
# https://de.wikipedia.org/wiki/Common_Object_File_Format
# http://www.delorie.com/djgpp/doc/coff/filhdr.html
@@ -16,62 +16,78 @@
0 name display-coff
# test for unused flag bits (0x8000,0x0800,0x0400,0x0200,x0080) in f_flags
>18 uleshort&0x8E80 0
->>0 clear x
+# skip DOCTOR.DAILY READER.NDA REDBOX.ROOT by looking for positive number of sections
+>>2 uleshort >0
+# skip ega80woa.fnt svgafix.fnt HP3FNTS1.DAT HP3FNTS2.DAT INTRO.ACT LEARN.PIF by looking for low number of sections
+>>>2 uleshort <4207
+>>>>0 clear x
# f_magic - magic number
# DJGPP, 80386 COFF executable, MS Windows COFF Intel 80386 object file (./intel)
->>0 uleshort 0x014C Intel 80386
+>>>>0 uleshort 0x014C Intel 80386
# Hitachi SH big-endian COFF (./hitachi-sh)
->>0 uleshort 0x0500 Hitachi SH big-endian
+>>>>0 uleshort 0x0500 Hitachi SH big-endian
# Hitachi SH little-endian COFF (./hitachi-sh)
->>0 uleshort 0x0550 Hitachi SH little-endian
+>>>>0 uleshort 0x0550 Hitachi SH little-endian
# executable (RISC System/6000 V3.1) or obj module (./ibm6000)
-#>>0 uleshort 0x01DF
+#>>>>0 uleshort 0x01DF
# MS Windows COFF Intel Itanium, AMD64
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms680313(v=vs.85).aspx
->>0 uleshort 0x0200 Intel ia64
->>0 uleshort 0x8664 Intel amd64
+>>>>0 uleshort 0x0200 Intel ia64
+>>>>0 uleshort 0x8664 Intel amd64
+# ARM COFF (./arm)
+>>>>0 uleshort 0xaa64 Aarch64
+>>>>0 uleshort 0x01c0 ARM
+>>>>0 uleshort 0x01c2 ARM Thumb
+>>>>0 uleshort 0x01c4 ARMv7 Thumb
# TODO for other COFFs
-#>>0 uleshort 0xABCD COFF_TEMPLATE
->>0 default x
->>>0 uleshort x type 0x%04x
->>0 uleshort x COFF
+#>>>>0 uleshort 0xABCD COFF_TEMPLATE
+>>>>0 default x
+>>>>>0 uleshort x type %#04x
+>>>>0 uleshort x COFF
# F_EXEC flag bit
->>18 leshort ^0x0002 object file
-#!:mime application/x-coff
-#!:ext cof/o/obj/lib
->>18 leshort &0x0002 executable
+>>>>18 leshort ^0x0002 object file
+!:mime application/x-coff
+!:ext o/obj/lib
+# no cof sample found
+#!:ext cof/o/obj/lib
+>>>>18 leshort &0x0002 executable
#!:mime application/x-coffexec
# F_RELFLG flag bit,static object
->>18 leshort &0x0001 \b, no relocation info
+>>>>18 leshort &0x0001 \b, no relocation info
# F_LNNO flag bit
->>18 leshort &0x0004 \b, no line number info
+>>>>18 leshort &0x0004 \b, no line number info
# F_LSYMS flag bit
->>18 leshort &0x0008 \b, stripped
->>18 leshort ^0x0008 \b, not stripped
+>>>>18 leshort &0x0008 \b, stripped
+>>>>18 leshort ^0x0008 \b, not stripped
# flags in other COFF versions
#0x0010 F_FDPR_PROF
#0x0020 F_FDPR_OPTI
#0x0040 F_DSA
# F_AR32WR flag bit
-#>>>18 leshort &0x0100 \b, 32 bit little endian
+#>>>>18 leshort &0x0100 \b, 32 bit little endian
#0x1000 F_DYNLOAD
#0x2000 F_SHROBJ
#0x4000 F_LOADONLY
-# f_nscns - number of sections
->>2 uleshort <2 \b, %d section
->>2 uleshort >1 \b, %d sections
-# f_timdat - file time & date stamp only for little endian
-#>>4 date x \b, %s
+# 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
+>>>>2 uleshort <2 \b, %u section
+>>>>2 uleshort >1 \b, %u sections
# f_symptr - symbol table pointer, only for not stripped
->>8 ulelong >0 \b, symbol offset=0x%x
+# like: 0 0x7c 0xf4 0x104 0x182 0x1c2 0x1c6 0x468 0x948 0x416e 0x149a6 0x1c9d8 0x23a68 0x35120 0x7afa0
+>>>>8 ulelong >0 \b, symbol offset=%#x
# f_nsyms - number of symbols, only for not stripped
->>12 ulelong >0 \b, %d symbols
-# f_opthdr - optional header size
->>16 uleshort >0 \b, optional header size %d
+# like: 0 2 7 9 10 11 20 35 41 63 71 80 105 146 153 158 170 208 294 572 831 1546
+>>>>12 ulelong >0 \b, %d symbols
+# f_opthdr - optional header size. An object file should have a value of 0
+>>>>16 uleshort >0 \b, optional header size %u
+# f_timdat - file time & date stamp only for little endian
+>>>>4 ledate >0 \b, created %s
# at offset 20 can be optional header, extra bytes FILHSZ-20 because
# do not rely on sizeof(FILHDR) to give the correct size for header.
# or first section header
# additional variables for other COFF files
+>>>>16 uleshort =0
+# first section name s_name[8] like: .text .data .debug$S .drectve .testseg
+>>>>>20 string x \b, 1st section name "%.8s"
# >20 beshort 0407 (impure)
# >20 beshort 0410 (pure)
# >20 beshort 0413 (demand paged)
diff --git a/magic/Magdir/commands b/magic/Magdir/commands
index 10f8d2b20baa..705a72861ac0 100644
--- a/magic/Magdir/commands
+++ b/magic/Magdir/commands
@@ -1,112 +1,132 @@
#------------------------------------------------------------------------------
-# $File: commands,v 1.63 2020/06/06 15:36:30 christos Exp $
+# $File: commands,v 1.66 2021/07/03 13:50:29 christos Exp $
# commands: file(1) magic for various shells and interpreters
#
#0 string/w : shell archive or script for antique kernel text
-0 string/wt #!\ /bin/sh POSIX shell script text executable
+0 string/fwt #!\ /bin/sh POSIX shell script text executable
!:mime text/x-shellscript
-0 string/wb #!\ /bin/sh POSIX shell script executable (binary data)
+0 string/fwb #!\ /bin/sh POSIX shell script executable (binary data)
!:mime text/x-shellscript
-0 string/wt #!\ /bin/csh C shell script text executable
+0 string/fwt #!\ /bin/csh C shell script text executable
!:mime text/x-shellscript
# korn shell magic, sent by George Wu, gwu@clyde.att.com
-0 string/wt #!\ /bin/ksh Korn shell script text executable
+0 string/fwt #!\ /bin/ksh Korn shell script text executable
!:mime text/x-shellscript
-0 string/wb #!\ /bin/ksh Korn shell script executable (binary data)
+0 string/fwb #!\ /bin/ksh Korn shell script executable (binary data)
!:mime text/x-shellscript
-0 string/wt #!\ /bin/tcsh Tenex C shell script text executable
+0 string/fwt #!\ /bin/tcsh Tenex C shell script text executable
!:mime text/x-shellscript
-0 string/wt #!\ /usr/bin/tcsh Tenex C shell script text executable
+0 string/fwt #!\ /usr/bin/tcsh Tenex C shell script text executable
!:mime text/x-shellscript
-0 string/wt #!\ /usr/local/tcsh Tenex C shell script text executable
+0 string/fwt #!\ /usr/local/tcsh Tenex C shell script text executable
!:mime text/x-shellscript
-0 string/wt #!\ /usr/local/bin/tcsh Tenex C shell script text executable
+0 string/fwt #!\ /usr/local/bin/tcsh Tenex C shell script text executable
!:mime text/x-shellscript
#
# zsh/ash/ae/nawk/gawk magic from cameron@cs.unsw.oz.au (Cameron Simpson)
-0 string/wt #!\ /bin/zsh Paul Falstad's zsh script text executable
+0 string/fwt #!\ /bin/zsh Paul Falstad's zsh script text executable
!:mime text/x-shellscript
-0 string/wt #!\ /usr/bin/zsh Paul Falstad's zsh script text executable
+0 string/fwt #!\ /usr/bin/zsh Paul Falstad's zsh script text executable
!:mime text/x-shellscript
-0 string/wt #!\ /usr/local/bin/zsh Paul Falstad's zsh script text executable
+0 string/fwt #!\ /usr/local/bin/zsh Paul Falstad's zsh script text executable
!:mime text/x-shellscript
0 search/1 #!/usr/bin/env\ zsh Paul Falstad's zsh script text executable
!:mime text/x-shellscript
-0 string/wt #!\ /usr/local/bin/ash Neil Brown's ash script text executable
+0 string/fwt #!\ /bin/ash Neil Brown's ash script text executable
!:mime text/x-shellscript
-0 string/wt #!\ /usr/local/bin/ae Neil Brown's ae script text executable
+0 string/fwt #!\ /usr/bin/ash Neil Brown's ash script text executable
!:mime text/x-shellscript
-0 string/wt #!\ /bin/nawk new awk script text executable
+0 string/fwt #!\ /usr/local/bin/ash Neil Brown's ash script text executable
+!:mime text/x-shellscript
+0 string/fwt #!\ /usr/local/bin/ae Neil Brown's ae script text executable
+!:mime text/x-shellscript
+0 string/fwt #!\ /bin/nawk new awk script text executable
!:mime text/x-nawk
-0 string/wt #!\ /usr/bin/nawk new awk script text executable
+0 string/fwt #!\ /usr/bin/nawk new awk script text executable
!:mime text/x-nawk
-0 string/wt #!\ /usr/local/bin/nawk new awk script text executable
+0 string/fwt #!\ /usr/local/bin/nawk new awk script text executable
!:mime text/x-nawk
-0 string/wt #!\ /bin/gawk GNU awk script text executable
+0 string/fwt #!\ /bin/gawk GNU awk script text executable
!:mime text/x-gawk
0 string/wt #!\ /usr/bin/gawk GNU awk script text executable
!:mime text/x-gawk
-0 string/wt #!\ /usr/local/bin/gawk GNU awk script text executable
+0 string/fwt #!\ /usr/local/bin/gawk GNU awk script text executable
!:mime text/x-gawk
#
-0 string/wt #!\ /bin/awk awk script text executable
+0 string/fwt #!\ /bin/awk awk script text executable
!:mime text/x-awk
-0 string/wt #!\ /usr/bin/awk awk script text executable
+0 string/fwt #!\ /usr/bin/awk awk script text executable
!:mime text/x-awk
0 regex/4096 =^[\040\t\f\r\n]{0,100}BEGIN[\040\t\f\r\n]{0,100}[{] awk or perl script text
# AT&T Bell Labs' Plan 9 shell
-0 string/wt #!\ /bin/rc Plan 9 rc shell script text executable
+0 string/fwt #!\ /bin/rc Plan 9 rc shell script text executable
# bash shell magic, from Peter Tobias (tobias@server.et-inf.fho-emden.de)
-0 string/wt #!\ /bin/bash Bourne-Again shell script text executable
+0 string/fwt #!\ /bin/bash Bourne-Again shell script text executable
!:mime text/x-shellscript
-0 string/wb #!\ /bin/bash Bourne-Again shell script executable (binary data)
+0 string/fwb #!\ /bin/bash Bourne-Again shell script executable (binary data)
!:mime text/x-shellscript
-0 string/wt #!\ /usr/bin/bash Bourne-Again shell script text executable
+0 string/fwt #!\ /usr/bin/bash Bourne-Again shell script text executable
!:mime text/x-shellscript
-0 string/wb #!\ /usr/bin/bash Bourne-Again shell script executable (binary data)
+0 string/fwb #!\ /usr/bin/bash Bourne-Again shell script executable (binary data)
!:mime text/x-shellscript
-0 string/wt #!\ /usr/local/bash Bourne-Again shell script text executable
+0 string/fwt #!\ /usr/local/bash Bourne-Again shell script text executable
!:mime text/x-shellscript
-0 string/wb #!\ /usr/local/bash Bourne-Again shell script executable (binary data)
+0 string/fwb #!\ /usr/local/bash Bourne-Again shell script executable (binary data)
!:mime text/x-shellscript
-0 string/wt #!\ /usr/local/bin/bash Bourne-Again shell script text executable
+0 string/fwt #!\ /usr/local/bin/bash Bourne-Again shell script text executable
!:mime text/x-shellscript
-0 string/wb #!\ /usr/local/bin/bash Bourne-Again shell script executable (binary data)
+0 string/fwb #!\ /usr/local/bin/bash Bourne-Again shell script executable (binary data)
!:mime text/x-shellscript
-0 string/wt #!\ /usr/bin/env\ bash Bourne-Again shell script text executable
+0 string/fwt #!\ /usr/bin/env\ bash Bourne-Again shell script text executable
!:mime text/x-shellscript
# Fish shell magic
# From: Benjamin Lowry <ben@ben.gmbh>
-0 string/wt #!\ /usr/local/bin/fish fish shell script text executable
+0 string/fwt #!\ /usr/local/bin/fish fish shell script text executable
!:mime text/x-shellscript
-0 string/wt #!\ /usr/bin/fish fish shell script text executable
+0 string/fwt #!\ /usr/bin/fish fish shell script text executable
!:mime text/x-shellscript
-0 string/wt #!\ /usr/bin/env\ fish fish shell script text executable
+0 string/fwt #!\ /usr/bin/env\ fish fish shell script text executable
!:mime text/x-shellscript
+0 string/wt #!\ a
+>&-1 string x %s script text executable
-0 search/1/wt #!\ /usr/bin/tclsh Tcl/Tk script text executable
+0 search/1/fwt #!\ /usr/bin/tclsh Tcl/Tk script text executable
!:mime text/x-tcl
-0 search/1/wt #!\ /usr/bin/texlua LuaTex script text executable
+0 search/1/fwt #!\ /usr/bin/texlua LuaTex script text executable
!:mime text/x-luatex
-0 search/1/wt #!\ /usr/bin/luatex LuaTex script text executable
+0 search/1/fwt #!\ /usr/bin/luatex LuaTex script text executable
!:mime text/x-luatex
-0 search/1/wt #!\ /usr/bin/stap Systemtap script text executable
+0 search/1/fwt #!\ /usr/bin/stap Systemtap script text executable
!:mime text/x-systemtap
+# From: Kylie McClain <kylie@somas.is>
+# Type: execline scripts
+# URL: https://skarnet.org/software/execline/
+0 string/fwt #!\ /command/execlineb execline script text executable
+!:mime text/x-execline
+0 string/fwt #!\ /bin/execlineb execline script text executable
+!:mime text/x-execline
+0 string/fwt #!\ /usr/bin/execlineb execline script text executable
+!:mime text/x-execline
+0 string/fwt #!\ /usr/bin/env\ execlineb execline script text executable
+!:mime text/x-execline
+0 string #!
+>0 regex \^#!.*/bin/execlineb([[:space:]].*)*$ execline script text executable
+!:mime text/x-execline
# PHP scripts
# Ulf Harnhammar <ulfh@update.uu.se>
diff --git a/magic/Magdir/compress b/magic/Magdir/compress
index a364a88039e7..8c368db58cd6 100644
--- a/magic/Magdir/compress
+++ b/magic/Magdir/compress
@@ -1,5 +1,5 @@
#------------------------------------------------------------------------------
-# $File: compress,v 1.79 2020/05/30 23:53:04 christos Exp $
+# $File: compress,v 1.82 2021/06/30 08:11:29 christos Exp $
# compress: file(1) magic for pure-compression formats (no archives)
#
# compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, etc.
@@ -264,14 +264,19 @@
>>5 lequad !0xffffffffffffffff non-streamed, size %lld
# http://tukaani.org/xz/xz-file-format.txt
-0 ustring \xFD7zXZ\x00 XZ compressed data
+0 ustring \xFD7zXZ\x00 XZ compressed data, checksum
!:strength * 2
!:mime application/x-xz
+>7 byte&0xf 0x0 NONE
+>7 byte&0xf 0x1 CRC32
+>7 byte&0xf 0x4 CRC64
+>7 byte&0xf 0xa SHA-256
# https://github.com/ckolivas/lrzip/blob/master/doc/magic.header.txt
0 string LRZI LRZIP compressed data
>4 byte x - version %d
>5 byte x \b.%d
+>22 byte 1 \b, encrypted
!:mime application/x-lrzip
# https://fastcompression.blogspot.fi/2013/04/lz4-streaming-format-final.html
diff --git a/magic/Magdir/console b/magic/Magdir/console
index 022054dfea44..d31932d5834c 100644
--- a/magic/Magdir/console
+++ b/magic/Magdir/console
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: console,v 1.55 2020/04/19 17:30:55 christos Exp $
+# $File: console,v 1.63 2021/04/26 15:56:00 christos Exp $
# Console game magic
# Toby Deshane <hac@shoelace.digivill.net>
@@ -125,6 +125,7 @@
>0x14c byte x (Rev.%02u)
# Machine type. (SGB, CGB, SGB+CGB)
+# Old licensee code 0x33 is required for SGB, but not CGB.
>0x14b byte 0x33
>>0x146 byte 0x03
>>>0x143 byte&0x80 0x80 [SGB+CGB]
@@ -133,6 +134,8 @@
>>>0x143 byte&0xC0 0x80 [CGB]
>>>0x143 byte&0xC0 0xC0 [CGB ONLY]
>0x14b byte !0x33
+>>0x143 byte&0xC0 0x80 [CGB]
+>>0x143 byte&0xC0 0xC0 [CGB ONLY]
# Mapper.
>0x147 byte 0x00 [ROM ONLY]
@@ -178,7 +181,7 @@
# RAM size.
>0x149 byte 1 \b, RAM: 16Kbit
>0x149 byte 2 \b, RAM: 64Kbit
->0x149 byte 3 \b, RAM: 128Kbit
+>0x149 byte 3 \b, RAM: 256Kbit
>0x149 byte 4 \b, RAM: 1Mbit
>0x149 byte 5 \b, RAM: 512Kbit
@@ -486,17 +489,17 @@
#------------------------------------------------------------------------------
# Sony Playstation executables (Adam Sjoegren <asjo@diku.dk>) :
0 string PS-X\ EXE Sony Playstation executable
->16 lelong x PC=0x%08x,
->20 lelong !0 GP=0x%08x,
->24 lelong !0 .text=[0x%08x,
->>28 lelong x \b0x%x],
->32 lelong !0 .data=[0x%08x,
->>36 lelong x \b0x%x],
->40 lelong !0 .bss=[0x%08x,
->>44 lelong x \b0x%x],
->48 lelong !0 Stack=0x%08x,
+>16 lelong x PC=%#08x,
+>20 lelong !0 GP=%#08x,
+>24 lelong !0 .text=[%#08x,
+>>28 lelong x \b%#x],
+>32 lelong !0 .data=[%#08x,
+>>36 lelong x \b%#x],
+>40 lelong !0 .bss=[%#08x,
+>>44 lelong x \b%#x],
+>48 lelong !0 Stack=%#08x,
>48 lelong =0 No Stack!,
->52 lelong !0 StackSize=0x%x,
+>52 lelong !0 StackSize=%#x,
#>76 string >\0 (%s)
# Area:
>113 string x (%s)
@@ -768,7 +771,7 @@
>>>>0x40 leshort !0
>>>>>0x40 lestring16 x \b, metadata: "%s"
>>0x17 byte &0x40 \b, ROM:
->>>(0x18.l-26) lelong x CRC32 0x%08x
+>>>(0x18.l-26) lelong x CRC32 %#08x
>>>(0x18.l-23) string x "%s"
# Type: scummVM savegame files
@@ -1003,6 +1006,11 @@
# Reference: https://3dbrew.org/wiki/3DSX_Format
0 string 3DSX Nintendo 3DS Homebrew Application (3DSX)
+# Type: Nintendo 3DS Banner Model Data.
+# From: David Korth <gerbilsoft@gerbilsoft.com>
+# Reference: https://3dbrew.org/wiki/CBMD
+0 string CBMD\0\0\0\0 Nintendo 3DS Banner Model Data
+
#------------------------------------------------------------------------------
# a7800: file(1) magic for the Atari 7800 raw ROM format.
# From: David Korth <gerbilsoft@gerbilsoft.com>
@@ -1101,3 +1109,31 @@
>0x2C byte >0x20 Nintendo Badge Arcade badge set:
>>0x2C string x "%.48s"
>>0x24 ulelong x \b, set ID: %u
+
+#------------------------------------------------------------------------------
+# sufami: file(1) magic for Sufami Turbo ROM images.
+# From: David Korth <gerbilsoft@gerbilsoft.com>
+# References:
+# - https://problemkaputt.de/fullsnes.htm#snescartsufamiturbominicartridgeadaptor
+0 string BANDAI\ SFC-ADX
+>0x10 string !SFC-ADX\ BACKUP Sufami Turbo ROM image:
+>>0x10 string/T x "%.14s"
+>>0x30 byte x \b, ID %02X
+>>0x31 byte x \b%02X
+>>0x32 byte x \b%02X
+>>0x33 ubyte >0 \b, series index %u
+>>0x34 ubyte 0 [SlowROM]
+>>0x34 ubyte 1 [FastROM]
+>>0x35 ubyte 1 [SRAM]
+>>0x35 ubyte 3 [Special]
+
+# Type: Nintendo GameCube/Wii disc image (RVZ format)
+0 string RVZ\001 Nintendo
+>0x48 belong 1 GameCube
+!:mime application/x-gamecube-rom
+>0x48 belong 2 Wii
+!:mime application/x-wii-rom
+>0x48 default x GameCube/Wii
+>0x48 belong x disc image (RVZ format):
+>>0x58 use nintendo-gcn-disc-common
+
diff --git a/magic/Magdir/coverage b/magic/Magdir/coverage
index 69eab704933c..9f2c3dc91be9 100644
--- a/magic/Magdir/coverage
+++ b/magic/Magdir/coverage
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: coverage,v 1.2 2019/04/19 00:42:27 christos Exp $
+# $File: coverage,v 1.3 2021/02/23 00:51:10 christos Exp $
# xoverage: file(1) magic for test coverage data
# File formats used to store test coverage data
@@ -55,7 +55,7 @@
# Coverage reports generated by gcov
-# i.e. source code annoted with coverage information
+# i.e. source code annotated with coverage information
0 string \x20\x20\x20\x20\x20\x20\x20\x20-:\x20\x20\x20\ 0:Source:
>&0 search/128 \x20\x20\x20\x20\x20\x20\x20\x20-:\x20\x20\x20\ 0:Graph:
>>&0 search/128 \x20\x20\x20\x20\x20\x20\x20\x20-:\x20\x20\x20\ 0:Data: GCOV coverage report
diff --git a/magic/Magdir/crypto b/magic/Magdir/crypto
new file mode 100644
index 000000000000..72a90ace2829
--- /dev/null
+++ b/magic/Magdir/crypto
@@ -0,0 +1,5 @@
+
+#------------------------------------------------------------------------------
+# $File: crypto,v 1.2 2021/03/27 20:15:53 christos Exp $
+# crypto: file(1) magic for crypto formats
+#
diff --git a/magic/Magdir/database b/magic/Magdir/database
index a8a788effa8d..7f93f8e2da96 100644
--- a/magic/Magdir/database
+++ b/magic/Magdir/database
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: database,v 1.59 2020/03/25 01:49:58 christos Exp $
+# $File: database,v 1.63 2021/10/04 00:44:30 christos Exp $
# database: file(1) magic for various databases
#
# extracted from header/code files by Graeme Wilford (eep2gw@ee.surrey.ac.uk)
@@ -181,7 +181,10 @@
#!:mime application/x-dbase
>>>>>>>>>>>>0 use xbase-type
# database file
->>>>>>>>>>>>0 ubyte x \b DBF
+>>>>>>>>>>>>28 ubyte&0x04 =0 \b DBF
+!:ext dbf
+>>>>>>>>>>>>28 ubyte&0x04 =4 \b DataBaseContainer
+!:ext dbc
>>>>>>>>>>>>4 lelong 0 \b, no records
>>>>>>>>>>>>4 lelong >0 \b, %d record
# plural s appended
@@ -193,13 +196,14 @@
>>>>>>>>>>>>1 ubyte x \b, update-date
>>>>>>>>>>>>1 use xbase-date
# https://msdn.microsoft.com/de-de/library/cc483186(v=vs.71).aspx
-#>>>>>>>>>>>>29 ubyte =0 \b, codepage ID=0x%x
+#>>>>>>>>>>>>29 ubyte =0 \b, codepage ID=%#x
# 2~cp850 , 3~cp1252 , 0x1b~?? ; what code page is 0x1b ?
->>>>>>>>>>>>29 ubyte >0 \b, codepage ID=0x%x
+>>>>>>>>>>>>29 ubyte >0 \b, codepage ID=%#x
#>>>>>>>>>>>>28 ubyte&0x01 0 \b, no index file
+# MDX or CDX index
>>>>>>>>>>>>28 ubyte&0x01 1 \b, with index file .MDX
>>>>>>>>>>>>28 ubyte&0x02 2 \b, with memo .FPT
->>>>>>>>>>>>28 ubyte&0x04 4 \b, DataBaseContainer
+#>>>>>>>>>>>>28 ubyte&0x04 4 \b, DataBaseContainer
# 1st record offset + 1 = header size
>>>>>>>>>>>>8 uleshort >0
>>>>>>>>>>>>(8.s+1) ubyte >0
@@ -241,72 +245,111 @@
# 1 < version
>0 ubyte >1
>>0 ubyte 0x02 FoxBase
+!:mime application/x-dbf
+# like: ACCESS.DBF USER.DBF dbase3date.dbf mitarbei.dbf produkte.dbf umlaut-test-v2.dbf
# FoxBase+/dBaseIII+, no memo
>>0 ubyte 0x03 FoxBase+/dBase III
!:mime application/x-dbf
+# like: 92DATA.DBF MSCATLOG.DBF SYLLABI2.DBF SYLLABUS.DBF T4.DBF Teleadr.dbf us_city.dbf
# dBASE IV no memo file
>>0 ubyte 0x04 dBase IV
!:mime application/x-dbf
+# like: Quattro-test11.dbf umlaut-test-v4.dbf
# dBASE V no memo file
>>0 ubyte 0x05 dBase V
!:mime application/x-dbf
+# like: dbase4double.dbf Quattro-test2.dbf umlaut-test7.dbf
+!:ext dbf
+# probably Apollo Database Server 9.7? xBase (0x6)
+>>0 ubyte 0x06 Apollo
+!:mime application/x-dbf
+# like: ALIAS.DBF CRYPT.DBF PROCS.DBF USERS.DBF
+# https://docs.microsoft.com/en-us/previous-versions/visualstudio/foxpro/st4a0s68(v=vs.80)
+>>0 ubyte 0x2F FoxBase+/Dbase III plus, no memo
+!:mime application/x-dbf
+# no example
>>0 ubyte 0x30 Visual FoxPro
!:mime application/x-dbf
+# like: 26FRX.DBF 30DBC.DBF 30DBCPRO.DBF BEHINDSC.DBF USER_LEV.DBF
+# Microsoft Visual FoxPro Database Container File like: FOXPRO-DB-TEST.DBC TESTDATA.DBC TASTRADE.DBC
>>0 ubyte 0x31 Visual FoxPro, autoincrement
!:mime application/x-dbf
+# like: AI_Table.DBF dbase_31.dbf w_cityFoxpro.dbf
# Visual FoxPro, with field type Varchar or Varbinary
>>0 ubyte 0x32 Visual FoxPro, with field type Varchar
!:mime application/x-dbf
+# like: dbase_32.dbf
# dBASE IV SQL, no memo;dbv memo var size (Flagship)
>>0 ubyte 0x43 dBase IV, with SQL table
!:mime application/x-dbf
-# https://msdn.microsoft.com/en-US/library/st4a0s68(v=vs.80).aspx
-#>>0 ubyte 0x62 dBase IV, with SQL table
+# like: ASSEMBLY.DBF INVENTRY.DBF STAFF.DBF
+# https://docs.microsoft.com/en-us/previous-versions/visualstudio/foxpro/st4a0s68(v=vs.80)
+>>0 ubyte 0x62 dBase IV, with SQL table
#!:mime application/x-dbf
+# no example
# dBASE IV, with memo!!
>>0 ubyte 0x7b dBase IV, with memo
!:mime application/x-dbf
-# https://msdn.microsoft.com/en-US/library/st4a0s68(v=vs.80).aspx
-#>>0 ubyte 0x82 dBase IV, with SQL system
+# like: test3memo.DBF dbase5.DBF
+# https://docs.microsoft.com/en-us/previous-versions/visualstudio/foxpro/st4a0s68(v=vs.80)
+>>0 ubyte 0x82 dBase IV, with SQL system
#!:mime application/x-dbf
+# no example
# FoxBase+/dBaseIII+ with memo .DBT!
>>0 ubyte 0x83 FoxBase+/dBase III, with memo .DBT
!:mime application/x-dbf
+# like: T2.DBF t3.DBF biblio.dbf dbase_83.dbf dbase3dbt0_4.dbf fsadress.dbf stop.dbf
# VISUAL OBJECTS (first 1.0 versions) for the Dbase III files (NTX clipper driver); memo file
>>0 ubyte 0x87 VISUAL OBJECTS, with memo file
!:mime application/x-dbf
-# https://msdn.microsoft.com/en-US/library/st4a0s68(v=vs.80).aspx
-#>>0 ubyte 0x8A FoxBase+/dBase III, with memo .DBT
+# like: ACCESS.DBF dbase3date.dbf dbase3float.dbf holdings.dbf mitarbei.dbf
+# https://docs.microsoft.com/en-us/previous-versions/visualstudio/foxpro/st4a0s68(v=vs.80)
+>>0 ubyte 0x8A FoxBase+/dBase III, with memo .DBT
#!:mime application/x-dbf
+# no example
# dBASE IV with memo!
>>0 ubyte 0x8B dBase IV, with memo .DBT
!:mime application/x-dbf
+# like: animals.dbf archive.dbf callin.dbf dbase_8b.dbf phnebook.dbf t6.dbf
# dBase IV with SQL Table,no memo?
>>0 ubyte 0x8E dBase IV, with SQL table
!:mime application/x-dbf
+# like: dbase5.DBF test3memo.DBF test-memo.DBF
# .dbv and .dbt memo (Flagship)?
>>0 ubyte 0xB3 Flagship
-# https://msdn.microsoft.com/en-US/library/st4a0s68(v=vs.80).aspx
-#>>0 ubyte 0xCA dBase IV with memo .DBT
+!:mime application/x-dbf
+# no example
+# https://docs.microsoft.com/en-us/previous-versions/visualstudio/foxpro/st4a0s68(v=vs.80)
+>>0 ubyte 0xCA dBase IV with memo .DBT
#!:mime application/x-dbf
+# no example
# dBASE IV with SQL table, with memo .DBT
>>0 ubyte 0xCB dBase IV with SQL table, with memo .DBT
!:mime application/x-dbf
+# like: dbase5.DBF test3memo.DBF test-memo.DBF
# HiPer-Six format;Clipper SIX, with SMT memo file
>>0 ubyte 0xE5 Clipper SIX with memo
!:mime application/x-dbf
-# https://msdn.microsoft.com/en-US/library/st4a0s68(v=vs.80).aspx
-#>>0 ubyte 0xF4 dBase IV, with SQL table, with memo
+# like: dbase5.DBF test3memo.DBF test-memo.DBF testClipper.dbf DATA.DBF
+# https://docs.microsoft.com/en-us/previous-versions/visualstudio/foxpro/st4a0s68(v=vs.80)
+>>0 ubyte 0xF4 dBase IV, with SQL table, with memo
#!:mime application/x-dbf
+# no example
>>0 ubyte 0xF5 FoxPro with memo
!:mime application/x-dbf
-# https://msdn.microsoft.com/en-US/library/st4a0s68(v=vs.80).aspx
+# like: CUSTOMER.DBF FOXUSER1.DBF Invoice.DBF NG.DBF OBJSAMP.DBF dbase_f5.dbf kunde.dbf
+# probably Apollo Database Server 9.7 with SQL and memo mask? xBase (0xF6)
+>>0 ubyte 0xF6 Apollo, with SQL table with memo
+!:mime application/x-dbf
+# like: SCRIPTS.DBF
+# https://docs.microsoft.com/en-us/previous-versions/visualstudio/foxpro/st4a0s68(v=vs.80)
#>>0 ubyte 0xFA FoxPro 2.x, with memo
#!:mime application/x-dbf
+# no example
# unknown version (should not happen)
>>0 default x xBase
!:mime application/x-dbf
->>>0 ubyte x (0x%x)
+>>>0 ubyte x (%#x)
# flags in version byte
# DBT flag (with dBASE III memo .DBT)!!
# >>0 ubyte&0x80 >0 DBT_FLAG=%x
@@ -393,7 +436,7 @@
# Number of next available block for appending data
#>0 lelong =0 \b, next free block index %u
>0 lelong !0 \b, next free block index %u
-# no positiv block length
+# no positive block length
#>20 uleshort =0 \b, block length %u
>20 uleshort !0 \b, block length %u
# dBase III memo field terminated by \032\032
@@ -404,7 +447,7 @@
>0 lelong x dBase IV DBT
!:mime application/x-dbt
!:ext dbt
-# 8 character shorted main name of coresponding dBASE IV DBF file
+# 8 character shorted main name of corresponding dBASE IV DBF file
>8 ubelong >0x20000000
# skip unusual like for angest.dbt
>>20 uleshort >0
@@ -455,10 +498,131 @@
>>516 belong >0 \b, field length %d
>>>520 string >\0 \b, 1st item "%s"
+# Summary: DBASE Compound Index file *.CDX and FoxPro index *.IDX
+# From: Joerg Jenderek
+# URL: https://www.clicketyclick.dk/databases/xbase/format/cdx.html
+# https://www.clicketyclick.dk/databases/xbase/format/idx.html
+# https://www.clicketyclick.dk/databases/xbase/format/idx_comp.html
+# Reference: https://mark0.net/download/triddefs_xml.7z/defs/s/sybase-ianywhere-cdx.trid.xml
+# https://mark0.net/download/triddefs_xml.7z/defs/c/cdx-vfp7.trid.xml
+# like: kunde.cdx
+0 ulelong 0x1C00
+>0 use xbase-index
+# like: SYLLABI2.CDX SYLLABUS.CDX
+0 ulelong 0x0800
+>0 use xbase-index
+# often in xBase index pointer to root node 400h
+0 ulelong 0x0400
+# skip most Maple help database *.hdb with version tag handled by ./maple
+>1028 string !version
+# skip Maple help database hsum.hdb checking for valid reserved area
+>>492 quad =0
+# skip remaining Maple help database *.hdb by checking key length
+#>>>12 uleshort !0x000F KEY_LENGTHVALID
+>>>0 use xbase-index
+# display information about dBase/FoxPro index
+0 name xbase-index
+>0 ulelong x xBase
+!:mime application/x-dbase-index
+>14 ubyte &0x40 compound index
+# DCX for FoxPro database index like: TESTDATA.DCX
+!:ext cdx/dcx
+>14 ubyte ^0x40 index
+# only 1 example like: TEST.IDX
+!:ext idx
+# pointer to root node like: 1C00h 800h often 400h
+>0 ulelong !0x400 \b, root pointer %#x
+# Pointer to free node list: often 0 but -1 if not present
+>4 ulelong !0 \b, free node pointer %#x
+# MAYBE number of pages in file (Foxbase, FoxPro 1.x) or
+# http://www.foxpert.com/foxpro/knowlbits/files/knowlbits_200708_1.HTM
+# Whenever Visual FoxPro updates the index file it increments this reserved field
+# Reserved for internal use like: 02000000h 03000000h 460c0000h 780f0000h 89000000h 9fdc0100h often 0
+>8 ulelong !0 \b, reserved counter %#x
+# length of key like: mostly 000Ah 0028h (TEST.IDX)
+>12 uleshort !0x000A \b, key length %#x
+# index options like: 24h E0h E8h
+# 1~a unique index 8~index has FOR clause 32~compact index format 64~compound index header
+# 16~Bit vector (SoftC) 128~Structure index (FoxPro)
+>14 ubyte x \b, index options (%#x
+>14 ubyte &0x01 \b, unique
+>14 ubyte &0x08 \b, has FOR clause
+>14 ubyte &0x10 \b, bit vector (SoftC)
+>14 ubyte &0x20 \b, compact format
+#>14 ubyte &0x40 \b, compound header
+>14 ubyte &0x80 \b, structure
+>14 ubyte x \b)
+# WHAT EXACTLY IS THAT? index signature like: 0 (sybase-ianywhere-cdx.trid.xml) 1 (cdx-vfp7.trid.xml)
+>15 ubyte !0 \b, index signature %u
+# reserved area (0-bytes) til about 500, but not for uncompressed Index files *.idx
+>16 quad !0 \b, at 16 reserved %#llx
+>492 quad !0 \b, at 492 reserved %#llx
+# for IDX variant
+#>14 ubyte ^0x40 IDX
+# for CDX variant
+>14 ubyte &0x40
+# Ascending or descending: 0~ascending 1~descending
+>>502 uleshort x \b, sort order %u
+# Total expression length (FoxPro 2) like: 0 1
+>>504 uleshort !0 \b, expression length %u
+# FOR expression pool length like: 1
+>>506 uleshort !1 \b, FOR expression pool length %#x
+# reserved for internal use like: 0
+>>508 uleshort !0 \b, at 0x508 reserved %#x
+# Key expression pool length like: 1
+>>510 uleshort !1 \b, key expression pool length %#x
+# 512 - 1023 Key & FOR expression pool (uncompiled)
+>>512 quad !0 \b, key expression pool %#llx
+#>>520 quad !0 \b, key expression pool %#llx
+
+# Summary: dBASE IV Printer Form *.PRF
+# From: Joerg Jenderek
+# URL: https://en.wikipedia.org/wiki/.dbf#Other_file_types_found_in_dBASE
+# Reference: https://mark0.net/download/triddefs_xml.7z/defs/p/prf-dbase.trid.xml
+0 ubeshort 0x0400
+# skip some Xbase Index files *.ndx and Infocom (Z-machine 4) *.z4 handled by ./adventure
+# by looking for valid printer driver name extension
+>0x58 search/8 .PR2
+>>0 use xbase-prf
+# display information of dbase print form like printer driver *.PR2
+0 name xbase-prf dBase Printer Form
+!:mime application/x-dbase-prf
+!:ext prf
+# MAYBE version? like: 4~DBASE IV
+#>0 ubyte x \b, version %u
+# MAYBE flag like: 1~with output file name 0~not
+#>2 ubyte !0 \b, flag %u
+# optional printer text output file name like E:\DBASE\IV\T6.txt
+>3 string >\0 \b, output file %s
+# probably padding with nils til 0x53
+#>0x48 uquad !0 \b, at 0x48 padding %#llx
+# dBASE IV printer driver name like: Generic.PR2 ASCII.PR2
+>0x56 string >\0 \b, using printer driver %s
+# 2 is probably last character of previous dBASE printer driver name
+#>0x60 ubyte !0x32 \b, at 0x60 %#x
+# probably padding with nils til 0xa8
+#>0x61 uquad !0 \b, at 0x61 padding %#llx
+# unknown 0x03020300 0x03020100 at 0xa8
+>0xa8 ubelong x \b, at 0xa8 unknown %#8.8x
+# probably padding with nils til 0x2aa
+#>0x2a0 uquad !0 \b, at 0x2a0 padding %#llx
+# unknown 0x100ff7f01000001 at 0x2AB
+>0x2ab ubequad !0x100ff7f01000001 \b, at 0x2ab unknown %#llx
+# unknown 0x0042 at 0x2b3
+>0x2b3 ubeshort !0x0042 \b, at 0x2b3 unknown %#4.4x
+# unknown last 4 bytes at 0x2b6 like: 0 0x23
+>0x2b6 ubelong !0 \b, at 0x2b6 unknown %#8.8x
+
# TODO:
# DBASE index file *.NDX
-# DBASE Compound Index file *.CDX
-# dBASE IV Printer Driver *.PRF
+# dBASE compiled Format *.FMO
+# FoxPro Database memo file *.DCT
+# FoxPro Forms Memo *.SCT
+# FoxPro Generated Menu Program *.MPR
+# FoxPro Report *.FRX
+# FoxPro Report Memo *.FRT
+# Foxpro Generated Screen Program *.SPR
+# Foxpro memo *.PJT
## End of XBase database stuff
# MS Access database
@@ -485,9 +649,9 @@
>>12 ulelong 1 STreaMing
!:ext stm
# format_version 620h
->>8 uleshort x \b, version 0x%x
->>10 uleshort >0 revision 0x%4.4x
->>0 ubelong x \b, checksum 0x%8.8x
+>>8 uleshort x \b, version %#x
+>>10 uleshort >0 revision %#4.4x
+>>0 ubelong x \b, checksum %#8.8x
# Page size 4096 8192 32768
>>236 ulequad x \b, page size %lld
# database_state
diff --git a/magic/Magdir/der b/magic/Magdir/der
index 82cf70345bcb..d8a21cd57ef7 100644
--- a/magic/Magdir/der
+++ b/magic/Magdir/der
@@ -1,5 +1,5 @@
#------------------------------------------------------------------------------
-# $File: der,v 1.3 2020/02/16 20:45:21 christos Exp $
+# $File: der,v 1.4 2021/03/14 17:12:04 christos Exp $
# der: file(1) magic for DER encoded files
#
@@ -117,8 +117,9 @@
0 der seq
>&0 der seq
->>&0 der eoc Certificate
->>>&0 der int1=02 \b, Version=3
+>>&0 der eoc
+>>>&0 der int1=02 Certificate, Version=3
+>>>&0 der int1=x Certificate, Version=%s
>>&0 der int9=x \b, Serial=%s
>>&0 der seq
>>>&0 der obj_id9=2a864886f70d01010b
diff --git a/magic/Magdir/diff b/magic/Magdir/diff
index cd530d345e32..a6124e3f703b 100644
--- a/magic/Magdir/diff
+++ b/magic/Magdir/diff
@@ -1,11 +1,12 @@
#------------------------------------------------------------------------------
-# $File: diff,v 1.16 2017/03/17 22:20:22 christos Exp $
+# $File: diff,v 1.17 2020/08/22 18:16:58 christos Exp $
# diff: file(1) magic for diff(1) output
#
0 search/1 diff\040 diff output text
!:mime text/x-diff
-0 search/1 ***\040 diff output text
+0 search/1 ***\040
+>&0 search/1024 \n---\040 context diff output text
!:mime text/x-diff
0 search/1 Only\040in\040 diff output text
!:mime text/x-diff
@@ -16,15 +17,15 @@
!:mime text/x-diff
# bsdiff: file(1) magic for bsdiff(1) output
-0 string/b BSDIFF40 bsdiff(1) patch file
+0 string/b BSDIFF40 bsdiff(1) patch file
# unified diff
0 search/4096 ---\040
->&0 search/1024 \n
->>&0 search/1 +++\040
->>>&0 search/1024 \n
->>>>&0 search/1 @@ unified diff output text
+>&0 search/1024 \n
+>>&0 search/1 +++\040
+>>>&0 search/1024 \n
+>>>>&0 search/1 @@ unified diff output text
!:mime text/x-diff
!:strength + 90
diff --git a/magic/Magdir/digital b/magic/Magdir/digital
index f66e0bc55917..b2753b989859 100644
--- a/magic/Magdir/digital
+++ b/magic/Magdir/digital
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: digital,v 1.11 2013/01/11 16:45:23 christos Exp $
+# $File: digital,v 1.12 2021/07/03 14:01:46 christos Exp $
# Digital UNIX - Info
#
0 string =!<arch>\n________64E Alpha archive
@@ -53,6 +53,7 @@
#
# Locale data tables (MIPS and Alpha).
#
+# GRR: line below is too general as it matches also TTComp archive, ASCII, 2K handled by ./archive
0 short 0x0501 locale data table
>6 short 0x24 for MIPS
>6 short 0x40 for Alpha
diff --git a/magic/Magdir/editors b/magic/Magdir/editors
index 78f3a84056e6..48eaa116e3b3 100644
--- a/magic/Magdir/editors
+++ b/magic/Magdir/editors
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: editors,v 1.11 2017/03/17 21:35:28 christos Exp $
+# $File: editors,v 1.12 2020/10/11 20:28:07 christos Exp $
# T602 editor documents
# by David Necas <yeti@physics.muni.cz>
0 string @CT\ T602 document data,
@@ -11,7 +11,11 @@
# Vi IMproved Encrypted file
# by David Necas <yeti@physics.muni.cz>
+# updated by Osman Surkatty
0 string VimCrypt~ Vim encrypted file data
+>9 string 01! with zip cryptmethod
+>9 string 02! with blowfish cryptmethod
+>9 string 03! with blowfish2 cryptmethod
0 name vimnanoswap
>67 byte 0
diff --git a/magic/Magdir/elf b/magic/Magdir/elf
index f5e1af9a25bc..93abdc380db9 100644
--- a/magic/Magdir/elf
+++ b/magic/Magdir/elf
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: elf,v 1.80 2020/02/12 22:17:33 christos Exp $
+# $File: elf,v 1.87 2021/05/25 15:19:51 christos Exp $
# elf: file(1) magic for ELF executables
#
# We have to check the byte order flag to see what byte order all the
@@ -43,6 +43,14 @@
>2 leshort 0x0214 2.0
>0 leshort &0x0008 (LP64)
+0 name elf-riscv
+>0 lelong&0x00000001 0x00000001 RVC,
+>0 lelong&0x00000008 0x00000008 RVE,
+>0 lelong&0x00000006 0x00000000 soft-float ABI,
+>0 lelong&0x00000006 0x00000002 single-float ABI,
+>0 lelong&0x00000006 0x00000004 double-float ABI,
+>0 lelong&0x00000006 0x00000006 quad-float ABI,
+
0 name elf-le
>16 leshort 0 no file type,
!:mime application/octet-stream
@@ -62,7 +70,12 @@
# Core file detection is not reliable.
#>>>(0x38+0xcc) string >\0 of '%s'
#>>>(0x38+0x10) lelong >0 (signal %d),
->16 leshort &0xff00 processor-specific,
+>16 leshort &0xff00
+>>18 leshort !8 processor-specific,
+>>18 leshort 8
+>>>16 leshort 0xFF80 PlayStation 2 IOP module,
+!:mime application/x-sharedlib
+>>>16 leshort !0xFF80 processor-specific,
>18 clear x
>18 leshort 0 no machine,
>18 leshort 1 AT&T WE32100,
@@ -111,6 +124,9 @@
>18 leshort 19 Intel 80960,
>18 leshort 20 PowerPC or cisco 4500,
>18 leshort 21 64-bit PowerPC or cisco 7500,
+>>48 lelong 0 Unspecified or Power ELF V1 ABI,
+>>48 lelong 1 Power ELF V1 ABI,
+>>48 lelong 2 OpenPOWER ELF V2 ABI,
>18 leshort 22 IBM S/390,
>18 leshort 23 Cell SPU,
>18 leshort 24 cisco SVIP,
@@ -179,7 +195,7 @@
>18 leshort 90 Matsushita MN10200,
>18 leshort 91 picoJava,
>18 leshort 92 OpenRISC,
->18 leshort 93 ARC Cores Tangent-A5,
+>18 leshort 93 Synopsys ARCompact ARC700 cores,
>18 leshort 94 Tensilica Xtensa,
>18 leshort 95 Alphamosaic VideoCore,
>18 leshort 96 Thompson Multimedia,
@@ -218,6 +234,7 @@
>18 leshort 140 TI TMS320C6000 DSP family,
>18 leshort 141 TI TMS320C2000 DSP family,
>18 leshort 142 TI TMS320C55x DSP family,
+>18 leshort 144 TI Programmable Realtime Unit
>18 leshort 160 STMicroelectronics 64bit VLIW DSP,
>18 leshort 161 Cypress M8C,
>18 leshort 162 Renesas R32C series,
@@ -248,6 +265,7 @@
>18 leshort 189 Xilinx MicroBlaze 32-bit RISC,
>18 leshort 190 NVIDIA CUDA architecture,
>18 leshort 191 Tilera TILE-Gx,
+>18 leshort 195 Synopsys ARCv2/HS3x/HS4x cores,
>18 leshort 197 Renesas RL78 family,
>18 leshort 199 Renesas 78K0R,
>18 leshort 200 Freescale 56800EX,
@@ -265,8 +283,28 @@
>18 leshort 217 iCelero CoolEngine,
>18 leshort 218 Nanoradio Optimized RISC,
>18 leshort 243 UCB RISC-V,
+# only for 32-bit
+>>4 byte 1
+>>>36 use elf-riscv
+# only for 64-bit
+>>4 byte 2
+>>>48 use elf-riscv
+>18 leshort 244 Lanai 32-bit processor,
+>18 leshort 245 CEVA Processor Architecture Family,
+>18 leshort 246 CEVA X2 Processor Family,
>18 leshort 247 eBPF,
->18 leshort 251 NEC VE,
+>18 leshort 248 Graphcore Intelligent Processing Unit,
+>18 leshort 249 Imagination Technologies,
+>18 leshort 250 Netronome Flow Processor,
+>18 leshort 251 NEC Vector Engine,
+>18 leshort 252 C-SKY processor family,
+>18 leshort 253 Synopsys ARCv3 64-bit ISA/HS6x cores,
+>18 leshort 254 MOS Technology MCS 6502 processor,
+>18 leshort 255 Synopsys ARCv3 32-bit,
+>18 leshort 256 Kalray VLIW core of the MPPA family,
+>18 leshort 257 WDC 65816/65C816,
+>18 leshort 258 LoongArch,
+>18 leshort 259 ChipON KungFu32,
>18 leshort 0x1057 AVR (unofficial),
>18 leshort 0x1059 MSP430 (unofficial),
>18 leshort 0x1223 Adapteva Epiphany (unofficial),
@@ -296,7 +334,7 @@
>18 leshort 0xfebb NIOS (unofficial),
>18 leshort 0xfeed Moxie (unofficial),
>18 default x
->>18 leshort x *unknown arch 0x%x*
+>>18 leshort x *unknown arch %#x*
>20 lelong 0 invalid version
>20 lelong 1 version 1
diff --git a/magic/Magdir/espressif b/magic/Magdir/espressif
index 7a8616a1a48c..a97c09301fd1 100644
--- a/magic/Magdir/espressif
+++ b/magic/Magdir/espressif
@@ -1,5 +1,5 @@
-# $File: espressif,v 1.2 2019/11/15 21:03:14 christos Exp $
+# $File: espressif,v 1.3 2021/04/26 15:56:00 christos Exp $
# configuration dump of Tasmota firmware for ESP8266 based devices by Espressif
# URL: https://github.com/arendst/Sonoff-Tasmota/
# Reference: https://codeload.github.com/arendst/Sonoff-Tasmota/zip/release-6.2/
@@ -17,7 +17,7 @@
>>10 ubyte^0x64 x \b.%u
>>9 ubyte^0x63 x \b.%u
>>8 ubyte^0x62 x \b.%u
-#>8 ubelong x (0x%x)
+#>8 ubelong x (%#x)
# hostname[33] XORed
>>0x165 ubyte^0x1BF x \b, hostname %c
>>0x166 ubyte^0x1C0 >037 \b%c
diff --git a/magic/Magdir/filesystems b/magic/Magdir/filesystems
index 7b95a4f9c72f..283f9c4ac9b6 100644
--- a/magic/Magdir/filesystems
+++ b/magic/Magdir/filesystems
@@ -1,5 +1,5 @@
#------------------------------------------------------------------------------
-# $File: filesystems,v 1.133 2020/05/17 19:32:00 christos Exp $
+# $File: filesystems,v 1.145 2021/09/07 18:57:50 christos Exp $
# filesystems: file(1) magic for different filesystems
#
0 name partid
@@ -220,7 +220,7 @@
>>>>>>18 string =_ \b.
>>>>>>>19 string x \b%-.1s
>>>22 ubyte 0
->>>>21 ubyte x \b, from drive 0x%x
+>>>>21 ubyte x \b, from drive %#x
>>>22 ubyte >0
>>>>21 string x \b, from drive %s
>>>535 search/17 \x55\xAA
@@ -261,6 +261,18 @@
# for sector sizes with 512 or more Bytes
>0x1FE leshort 0xAA55 DOS/MBR boot sector
+# ExFAT
+3 string/w =EXFAT
+>0x1FE leshort 0xAA55
+>>0x6E ubyte 1
+>>>0x6F ubyte 0x80
+>>>0 ubyte 0xEB DOS/MBR boot sector,
+>>>0x69 ubyte x ExFAT Filesystem version %d.
+>>>0x68 ubyte x \b%d
+>>>0x6d ubyte x \b, (1<<%d) sectors per cluster
+>>>0x48 ulequad x \b, sectors %lld
+>>>0x64 ulelong x \b, serial number %#x
+
# keep old DOS/MBR boot sector as dummy for mbr and bootloader displaying
# only for sector sizes with 512 or more Bytes
0x1FE leshort 0xAA55 DOS/MBR boot sector
@@ -296,7 +308,7 @@
>>>>>(0x49.b) string Tabela\ de\ parti\207ao\ inv\240lida portuguese
>>>>>(0x49.b) string Tabla\ de\ partici\242n\ no\ v\240lida spanish
>>>>>(0x49.b) string Tavola\ delle\ partizioni\ non\ valida italian
->>>>>0x49 ubyte >0 at offset 0x%x
+>>>>>0x49 ubyte >0 at offset %#x
>>>>>>(0x49.b) string >\0 "%s"
# "Error loading operating system" nn=0xa3 for english version
# "Fehler beim Laden des Betriebssystems" nn=0xa7 for german version
@@ -304,7 +316,7 @@
# "Erro na inicializa\207ao do sistema operacional" nn=0xa7 for portuguese Brazilian version
# "Error al cargar sistema operativo" nn=0xa8 for spanish version
# "Errore durante il caricamento del sistema operativo" nn=0xae for italian version
->>>>>0x74 ubyte >0 at offset 0x%x
+>>>>>0x74 ubyte >0 at offset %#x
>>>>>>(0x74.b) string >\0 "%s"
# "Missing operating system" nn=0xc2 for english version
# "Betriebssystem fehlt" nn=0xcd for german version
@@ -312,7 +324,7 @@
# "Sistema operacional nao encontrado" nn=0xd4 for portuguese Brazilian version
# "Falta sistema operativo" nn=0xca for spanish version
# "Sistema operativo mancante" nn=0xe2 for italian version
->>>>>0x79 ubyte >0 at offset 0x%x
+>>>>>0x79 ubyte >0 at offset %#x
>>>>>>(0x79.b) string >\0 "%s"
# Microsoft Windows 95B to XP (https://thestarman.pcministry.com/asm/mbr/95BMEMBR.htm)
# assembler instructions: push ax;pop es;push ax;pop ds;cld;mov si,7c1b
@@ -327,7 +339,7 @@
>>>>(0x3C.b+0x0FF) string Ung\201ltige\ Partitionstabelle german
>>>>(0x3C.b+0x0FF) string Table\ de\ partition\ erron\202e french
>>>>(0x3C.b+0x0FF) string \215\245\257\340\240\242\250\253\354\255\240\357\ \342\240\241\253\250\346\240 russian
->>>>0x3C ubyte x at offset 0x%x+0xFF
+>>>>0x3C ubyte x at offset %#x+0xFF
>>>>(0x3C.b+0x0FF) string >\0 "%s"
# "Error loading operating system" nn=0x127 for english version
# "Fehler beim Laden des Betriebssystems" nn=0x12b for german version
@@ -400,12 +412,12 @@
>>>>(0x1b7.b+0x100) string >\0 "%s"
# https://thestarman.pcministry.com/asm/mbr/Win2kmbr.htm#DiskSigs
# https://en.wikipedia.org/wiki/MBR_disk_signature#ID
->>0x1b8 ulelong >0 \b, disk signature 0x%-.4x
+>>0x1b8 ulelong >0 \b, disk signature %#-.4x
# driveID/timestamp for Win 95B,98,98SE and ME. See https://thestarman.pcministry.com/asm/mbr/mystery.htm
>>0xDA uleshort 0
>>>0xDC ulelong >0 \b, created
# physical drive number (0x80-0xFF) when the Windows wrote that byte to the drive
->>>>0xDC ubyte x with driveID 0x%x
+>>>>0xDC ubyte x with driveID %#x
# hours, minutes and seconds
>>>>0xDf ubyte x at %x
>>>>0xDe ubyte x \b:%x
@@ -452,13 +464,13 @@
>>>397 search/4 Booting\040
>>>>408 search/4 HD1/\0 \b, Ranish MBR (
>>>>>416 string Writing\ changes... \b2.37
->>>>>>438 ubyte x \b,0x%x dots
+>>>>>>438 ubyte x \b,%#x dots
>>>>>>440 ubyte >0 \b,virus check
>>>>>>441 ubyte >0 \b,partition %c
#2.38,2.42,2.44
>>>>>416 string !Writing\ changes... \b
>>>>>>418 ubyte 1 \bvirus check,
->>>>>>419 ubyte x \b0x%x seconds
+>>>>>>419 ubyte x \b%#x seconds
>>>>>>420 ubyte&0x0F >0 \b,partition
>>>>>>>420 ubyte&0x0F <5 \b %x
>>>>>>>420 ubyte&0x0F 0Xf \b ask
@@ -491,25 +503,25 @@
# updated by Joerg Jenderek at Oct 2008
# variables according to grub-0.97/stage1/stage1.S or
# https://www.gnu.org/software/grub/manual/grub.html#Embedded-data
-# usual values are marked with comments to get only informations of strange GRUB loaders
+# usual values are marked with comments to get only information of strange GRUB loaders
>342 search/60 \0Geom\0
#>0 ulelong x %x=0x009048EB , 0x2a9048EB 0
>>0x41 ubyte <2
>>>0x3E ubyte >2 \b; GRand Unified Bootloader
# 0x3 for 0.5.95,0.93,0.94,0.96 0x4 for 1.90
->>>>0x3E ubyte x \b, stage1 version 0x%x
+>>>>0x3E ubyte x \b, stage1 version %#x
#If it is 0xFF, use a drive passed by BIOS
->>>>0x40 ubyte <0xFF \b, boot drive 0x%x
+>>>>0x40 ubyte <0xFF \b, boot drive %#x
# in most case 0,1,0x2e for GRUB 0.5.95
->>>>0x41 ubyte >0 \b, LBA flag 0x%x
->>>>0x42 uleshort <0x8000 \b, stage2 address 0x%x
-#>>>>0x42 uleshort =0x8000 \b, stage2 address 0x%x (usual)
->>>>0x42 uleshort >0x8000 \b, stage2 address 0x%x
-#>>>>0x44 ulelong =1 \b, 1st sector stage2 0x%x (default)
->>>>0x44 ulelong >1 \b, 1st sector stage2 0x%x
->>>>0x48 uleshort <0x800 \b, stage2 segment 0x%x
-#>>>>0x48 uleshort =0x800 \b, stage2 segment 0x%x (usual)
->>>>0x48 uleshort >0x800 \b, stage2 segment 0x%x
+>>>>0x41 ubyte >0 \b, LBA flag %#x
+>>>>0x42 uleshort <0x8000 \b, stage2 address %#x
+#>>>>0x42 uleshort =0x8000 \b, stage2 address %#x (usual)
+>>>>0x42 uleshort >0x8000 \b, stage2 address %#x
+#>>>>0x44 ulelong =1 \b, 1st sector stage2 %#x (default)
+>>>>0x44 ulelong >1 \b, 1st sector stage2 %#x
+>>>>0x48 uleshort <0x800 \b, stage2 segment %#x
+#>>>>0x48 uleshort =0x800 \b, stage2 segment %#x (usual)
+>>>>0x48 uleshort >0x800 \b, stage2 segment %#x
>>>>402 string Geom\0Hard\ Disk\0Read\0\ Error\0
>>>>>394 string stage1 \b, GRUB version 0.5.95
>>>>382 string Geom\0Hard\ Disk\0Read\0\ Error\0
@@ -533,7 +545,7 @@
# mbr partition table entries updated by Joerg Jenderek at Sep 2013
# skip Norton Utilities disc image data
>3 string !IHISK
-# skip Linux style boot sector starting with assember instructions mov 0x7c0,ax;
+# skip Linux style boot sector starting with assembler instructions mov 0x7c0,ax;
>>0 belong !0xb8c0078e
# not Linux kernel
>>>514 string !HdrS
@@ -548,7 +560,7 @@
>>>>>0 ubelong&0xFD000000 !0xE9000000
# skip FSInfosector
>>>>>>0 string !RRaA
-# skip 3rd sector of MS x86 bootloader with assember instructions cli;MOVZX EAX,BYTE PTR [BP+10];MOV ECX,
+# skip 3rd sector of MS x86 bootloader with assembler instructions cli;MOVZX EAX,BYTE PTR [BP+10];MOV ECX,
# https://thestarman.pcministry.com/asm/mbr/MSWIN41.htm
>>>>>>>0 ubequad !0xfa660fb64610668b
# skip 13rd sector of MS x86 bootloader
@@ -1114,9 +1126,9 @@
>>48 leshort 0xAA55 2
>>32 leshort 0xAA55 3
>>16 leshort 0xAA55 4
->>4 ubyte x : ID=0x%x
+>>4 ubyte x : ID=%#x
>>0 ubyte&0x80 0x80 \b, active
->>0 ubyte >0x80 0x%x
+>>0 ubyte >0x80 %#x
>>1 ubyte x \b, start-CHS (
>>1 use partition-chs
>>5 ubyte x \b), end-CHS (
@@ -1214,7 +1226,7 @@
# ERRorTeXT
>>181 search/166 Error\ \0\r\n NetBSD mbr
# NT Drive Serial Number https://thestarman.pcministry.com/asm/mbr/Win2kmbr.htm#DS
->>>0x1B8 ubelong >0 \b,Serial 0x%-.8x
+>>>0x1B8 ubelong >0 \b,Serial %#-.8x
# BOOTSEL definitions contains assembler instructions: int 0x13;pop dx;push dx;push dx
>>>0xbb search/71 \xcd\x13\x5a\x52\x52 \b,bootselector
# BOOT_EXTENDED definitions contains assembler instructions:
@@ -1265,38 +1277,38 @@
# variant used by testdisk of https://www.cgsecurity.org/wiki/Menu_MBRCode
>>>(0x1BC.s+8) ubyte&2 2 \b,TestDisk
#0x1~1,..,0x8~4,0x10~F,0x80~A enabled
-#>>>(0x1BC.s+10) ubyte x \b,flags 0x%x
+#>>>(0x1BC.s+10) ubyte x \b,flags %#x
#0x0~1,0x1~2,...,0x3~4,0x4~F,0x7~D default boot
-#>>>(0x1BC.s+11) ubyte x \b,cfg_def 0x%x
+#>>>(0x1BC.s+11) ubyte x \b,cfg_def %#x
# for older versions
>>>(0x1BC.s+9) ubyte <2
#>>>>(0x1BC.s+12) ubyte 18 \b,%hhu/18 seconds
>>>>(0x1BC.s+12) ubyte !18 \b,%u/18 seconds
# floppy A: or B:
->>>>(0x1BC.s+13) ubyte <2 \b,floppy 0x%x
+>>>>(0x1BC.s+13) ubyte <2 \b,floppy %#x
>>>>(0x1BC.s+13) ubyte >1
# 1st hard disc
-#>>>>>(0x1BC.s+13) ubyte 0x80 \b,drive 0x%x
+#>>>>>(0x1BC.s+13) ubyte 0x80 \b,drive %#x
# not 1st hard disc
->>>>>(0x1BC.s+13) ubyte !0x80 \b,drive 0x%x
+>>>>>(0x1BC.s+13) ubyte !0x80 \b,drive %#x
# for version >= 2 maximal timeout can be 65534
>>>(0x1BC.s+9) ubyte >1
#>>>>(0x1BC.s+12) uleshort 18 \b,%u/18 seconds
>>>>(0x1BC.s+12) uleshort !18 \b,%u/18 seconds
# floppy A: or B:
->>>>(0x1BC.s+14) ubyte <2 \b,floppy 0x%x
+>>>>(0x1BC.s+14) ubyte <2 \b,floppy %#x
>>>>(0x1BC.s+14) ubyte >1
# 1st hard disc
-#>>>>>(0x1BC.s+14) ubyte 0x80 \b,drive 0x%x
+#>>>>>(0x1BC.s+14) ubyte 0x80 \b,drive %#x
# not 1st hard disc
->>>>>(0x1BC.s+14) ubyte !0x80 \b,drive 0x%x
+>>>>>(0x1BC.s+14) ubyte !0x80 \b,drive %#x
>>>0 ubyte x \b)
# added by Joerg Jenderek
# In the second sector (+0x200) are variables according to grub-0.97/stage2/asm.S or
# grub-1.94/kern/i386/pc/startup.S
# https://www.gnu.org/software/grub/manual/grub.html#Embedded-data
-# usual values are marked with comments to get only informations of strange GRUB loaders
+# usual values are marked with comments to get only information of strange GRUB loaders
0x200 uleshort 0x70EA
# found only version 3.{1,2}
>0x206 ubeshort >0x0300
@@ -1318,9 +1330,9 @@
# GRUB 0.5.95 unofficial
>>>>0x20C ulelong&0x2E300000 0x2E300000
# 0=stage2 1=ffs 2=e2fs 3=fat 4=minix 5=reiserfs
->>>>>0x20C ubyte x \b, identifier 0x%x
-#>>>>>0x20D ubyte =0 \b, LBA flag 0x%x (default)
->>>>>0x20D ubyte >0 \b, LBA flag 0x%x
+>>>>>0x20C ubyte x \b, identifier %#x
+#>>>>>0x20D ubyte =0 \b, LBA flag %#x (default)
+>>>>>0x20D ubyte >0 \b, LBA flag %#x
# GRUB version as string
>>>>>0x20E string >\0 \b, GRUB version %-s
# for stage1_5 is 0xffffffff + config_file "/boot/grub/stage2" default
@@ -1335,10 +1347,10 @@
# for 1.94 contains kernel image size
# for 0.93,0.94,0.96,0.97
# 0=stage2 1=ffs 2=e2fs 3=fat 4=minix 5=reiserfs 6=vstafs 7=jfs 8=xfs 9=iso9660 a=ufs2
->>>>>0x210 ubyte x \b, identifier 0x%x
+>>>>>0x210 ubyte x \b, identifier %#x
# The flag for LBA forcing is in most cases 0
-#>>>>>0x211 ubyte =0 \b, LBA flag 0x%x (default)
->>>>>0x211 ubyte >0 \b, LBA flag 0x%x
+#>>>>>0x211 ubyte =0 \b, LBA flag %#x (default)
+>>>>>0x211 ubyte >0 \b, LBA flag %#x
# GRUB version as string
>>>>>0x212 string >\0 \b, GRUB version %-s
# for stage1_5 is 0xffffffff + config_file "/boot/grub/stage2" default
@@ -1358,16 +1370,16 @@
0 ulelong&0x804000E9 0x000000E9
!:strength +60
# mtools-3.9.8/msdos.h
-# usual values are marked with comments to get only informations of strange FAT systems
+# usual values are marked with comments to get only information of strange FAT systems
# valid sectorsize must be a power of 2 from 32 to 32768
>11 uleshort&0x001f 0
>>11 uleshort <32769
>>>11 uleshort >31
>>>>21 ubyte&0xf0 0xF0
>>>>>0 ubyte 0xEB DOS/MBR boot sector
->>>>>>1 ubyte x \b, code offset 0x%x+2
+>>>>>>1 ubyte x \b, code offset %#x+2
>>>>>0 ubyte 0xE9
->>>>>>1 uleshort x \b, code offset 0x%x+3
+>>>>>>1 uleshort x \b, code offset %#x+3
>>>>>3 string >\0 \b, OEM-ID "%-.8s"
#http://mirror.href.com/thestarman/asm/debug/debug2.htm#IHC
>>>>>>8 string IHC \b cached by Windows 9M
@@ -1392,9 +1404,9 @@
#>>>>>17 uleshort =0 \b, root entries %hu=0 (usual Fat32)
>>>>>19 uleshort >0 \b, sectors %u (volumes <=32 MB)
#>>>>>19 uleshort =0 \b, sectors %hu=0 (usual Fat32)
->>>>>21 ubyte >0xF0 \b, Media descriptor 0x%x
-#>>>>>21 ubyte =0xF0 \b, Media descriptor 0x%x (usual floppy)
->>>>>21 ubyte <0xF0 \b, Media descriptor 0x%x
+>>>>>21 ubyte >0xF0 \b, Media descriptor %#x
+#>>>>>21 ubyte =0xF0 \b, Media descriptor %#x (usual floppy)
+>>>>>21 ubyte <0xF0 \b, Media descriptor %#x
>>>>>22 uleshort >0 \b, sectors/FAT %u
#>>>>>22 uleshort =0 \b, sectors/FAT %hu=0 (usual Fat32)
>>>>>24 uleshort x \b, sectors/track %u
@@ -1413,18 +1425,18 @@
#>>>>>>>32 ulelong =0 \b, sectors %u (volumes > 32 MB)
# FAT<32 bit specific
>>>>>>>82 string/c !fat32
-#>>>>>>>>36 ubyte 0x80 \b, physical drive 0x%x=0x80 (usual harddisk)
-#>>>>>>>>36 ubyte 0 \b, physical drive 0x%x=0 (usual floppy)
+#>>>>>>>>36 ubyte 0x80 \b, physical drive %#x=0x80 (usual harddisk)
+#>>>>>>>>36 ubyte 0 \b, physical drive %#x=0 (usual floppy)
>>>>>>>>36 ubyte !0x80
->>>>>>>>>36 ubyte !0 \b, physical drive 0x%x
+>>>>>>>>>36 ubyte !0 \b, physical drive %#x
# VGA-copy CRC or
# in Windows NT bit 0 is a dirty flag to request chkdsk at boot time. bit 1 requests surface scan too
->>>>>>>>37 ubyte >0 \b, reserved 0x%x
-#>>>>>>>>37 ubyte =0 \b, reserved 0x%x
-# extended boot signatur value is 0x80 for NTFS, 0x28 or 0x29 for others
->>>>>>>>38 ubyte !0x29 \b, dos < 4.0 BootSector (0x%x)
+>>>>>>>>37 ubyte >0 \b, reserved %#x
+#>>>>>>>>37 ubyte =0 \b, reserved %#x
+# extended boot signature value is 0x80 for NTFS, 0x28 or 0x29 for others
+>>>>>>>>38 ubyte !0x29 \b, dos < 4.0 BootSector (%#x)
>>>>>>>>38 ubyte&0xFE =0x28
->>>>>>>>>39 ulelong x \b, serial number 0x%x
+>>>>>>>>>39 ulelong x \b, serial number %#x
>>>>>>>>38 ubyte =0x29
>>>>>>>>>43 string <NO\ NAME \b, label: "%11.11s"
>>>>>>>>>43 string >NO\ NAME \b, label: "%11.11s"
@@ -1466,7 +1478,7 @@
>>>>>82 string/c fat32 \b, FAT (32 bit)
>>>>>>36 ulelong x \b, sectors/FAT %u
# https://technet.microsoft.com/en-us/library/cc977221.aspx
->>>>>>40 uleshort >0 \b, extension flags 0x%x
+>>>>>>40 uleshort >0 \b, extension flags %#x
#>>>>>>40 uleshort =0 \b, extension flags %hu
>>>>>>42 uleshort >0 \b, fsVersion %u
#>>>>>>42 uleshort =0 \b, fsVersion %u (usual)
@@ -1483,19 +1495,19 @@
>>>>>>50 default x
>>>>>>>50 uleshort x \b, Backup boot sector %u
# corrected by Joerg Jenderek at Feb 2011 according to https://thestarman.pcministry.com/asm/mbr/MSWIN41.htm#FSINFO
->>>>>>52 ulelong >0 \b, reserved1 0x%x
->>>>>>56 ulelong >0 \b, reserved2 0x%x
->>>>>>60 ulelong >0 \b, reserved3 0x%x
+>>>>>>52 ulelong >0 \b, reserved1 %#x
+>>>>>>56 ulelong >0 \b, reserved2 %#x
+>>>>>>60 ulelong >0 \b, reserved3 %#x
# same structure as FAT1X
-#>>>>>>64 ubyte =0x80 \b, physical drive 0x%x=80 (usual harddisk)
-#>>>>>>64 ubyte =0 \b, physical drive 0x%x=0 (usual floppy)
+#>>>>>>64 ubyte =0x80 \b, physical drive %#x=80 (usual harddisk)
+#>>>>>>64 ubyte =0 \b, physical drive %#x=0 (usual floppy)
>>>>>>64 ubyte !0x80
->>>>>>>64 ubyte >0 \b, physical drive 0x%x
+>>>>>>>64 ubyte >0 \b, physical drive %#x
# in Windows NT bit 0 is a dirty flag to request chkdsk at boot time. bit 1 requests surface scan too
->>>>>>65 ubyte >0 \b, reserved 0x%x
->>>>>>66 ubyte !0x29 \b, dos < 4.0 BootSector (0x%x)
+>>>>>>65 ubyte >0 \b, reserved %#x
+>>>>>>66 ubyte !0x29 \b, dos < 4.0 BootSector (%#x)
>>>>>>66 ubyte =0x29
->>>>>>>67 ulelong x \b, serial number 0x%x
+>>>>>>>67 ulelong x \b, serial number %#x
>>>>>>>71 string <NO\ NAME \b, label: "%11.11s"
>>>>>>>71 string >NO\ NAME \b, label: "%11.11s"
>>>>>>>71 string =NO\ NAME \b, unlabeled
@@ -1518,10 +1530,10 @@
>>>>>>>19 uleshort =0
# 0 sectors/FAT
# dos < 4.0 BootSector value found is 0x80
-#38 ubyte =0x80 \b, dos < 4.0 BootSector (0x%x)
+#38 ubyte =0x80 \b, dos < 4.0 BootSector (%#x)
>>>>>>>>22 uleshort =0 \b; NTFS
>>>>>>>>>24 uleshort >0 \b, sectors/track %u
->>>>>>>>>36 ulelong !0x800080 \b, physical drive 0x%x
+>>>>>>>>>36 ulelong !0x800080 \b, physical drive %#x
>>>>>>>>>40 ulequad >0 \b, sectors %lld
>>>>>>>>>48 ulequad >0 \b, $MFT start cluster %lld
>>>>>>>>>56 ulequad >0 \b, $MFTMirror start cluster %lld
@@ -1537,8 +1549,8 @@
#>>>>>>>>>>68 ulelong >127 \b, bytes/index block 2^(256-%d)
>>>>>>>>>>68 ubyte >127 \b, bytes/index block 2^(-1*%i)
>>>>>>>>>72 ulequad x \b, serial number 0%llx
->>>>>>>>>80 ulelong >0 \b, checksum 0x%x
-#>>>>>>>>>80 ulelong =0 \b, checksum 0x%x=0 (usual)
+>>>>>>>>>80 ulelong >0 \b, checksum %#x
+#>>>>>>>>>80 ulelong =0 \b, checksum %#x=0 (usual)
# unicode loadername size jump
>>>>>>>>>(0x200.s*2) ubyte x
# in next sector loadername terminated by unicode CTRL-D and $
@@ -1705,7 +1717,13 @@
>0x94 lelong x (of %d),
>0x50 string x name %s,
>0x98 ulelong x version %u,
->0xa0 ulelong x flags 0x%x
+>0xa0 ulelong x flags %#x
+
+0 ulequad 0x48414d3205172011 HAMMER2 filesystem (little-endian),
+>0x3b byte x volume %d,
+>0x28 ulequad/1073741824 x size %lluGB,
+>0x30 ulelong x version %u,
+>0x34 ulelong x flags %#x
# ext2/ext3 filesystems - Andreas Dilger <adilger@dilger.ca>
# ext4 filesystem - Eric Sandeen <sandeen@sandeen.net>
@@ -1727,12 +1745,12 @@
>>>0x464 lelong >0x0000007 ext4 filesystem data
# else large INCOMPAT?
>>0x460 lelong >0x000003f ext4 filesystem data
->0x468 belong x \b, UUID=%08x
->0x46c beshort x \b-%04x
->0x46e beshort x \b-%04x
->0x470 beshort x \b-%04x
->0x472 belong x \b-%08x
->0x476 beshort x \b%04x
+>0x468 ubelong x \b, UUID=%08x
+>0x46c ubeshort x \b-%04x
+>0x46e ubeshort x \b-%04x
+>0x470 ubeshort x \b-%04x
+>0x472 ubelong x \b-%08x
+>0x476 ubeshort x \b%04x
>0x478 string >0 \b, volume name "%s"
# General flags for any ext* fs
>0x460 lelong &0x0000004 (needs journal recovery)
@@ -1755,12 +1773,12 @@
# f2fs filesystem - Tuomas Tynkkynen <tuomas.tynkkynen@iki.fi>
0x400 lelong 0xF2F52010 F2FS filesystem
->0x46c belong x \b, UUID=%08x
->0x470 beshort x \b-%04x
->0x472 beshort x \b-%04x
->0x474 beshort x \b-%04x
->0x476 belong x \b-%08x
->0x47a beshort x \b%04x
+>0x46c ubelong x \b, UUID=%08x
+>0x470 ubeshort x \b-%04x
+>0x472 ubeshort x \b-%04x
+>0x474 ubeshort x \b-%04x
+>0x476 ubelong x \b-%08x
+>0x47a ubeshort x \b%04x
>0x147c lestring16 x \b, volume name "%s"
# Minix filesystems - Juan Cespedes <cespedes@debian.org>
@@ -1925,7 +1943,7 @@
#>>>0x60E ubequad 0
#>>>>0x600 ubequad !0
#!:mime application/x-ima
-#>>512 ubyte x \b, Media descriptor 0x%x
+#>>512 ubyte x \b, Media descriptor %#x
# without x86 jump instruction
#>>0 ulelong&0x804000E9 !0x000000E9
# assembler instructions: CLI;MOV SP,1E7;MOV AX;07c0;MOV
@@ -1935,7 +1953,7 @@
#>>0 ulelong&0x804000E9 =0x000000E9
# only x86 short jump instruction found
#>>>0 ubyte =0xEB
-#>>>>1 ubyte x \b, code offset 0x%x+2
+#>>>>1 ubyte x \b, code offset %#x+2
# https://thestarman.pcministry.com/DOS/ibm100/Boot.htm
# assembler instructions: CLI;MOV AX,CS;MOV DS,AX;MOV DX,0
#>>>>(1.b+2) ubequad 0xfa8cc88ed8ba0000 \b, PC-DOS 1.0 bootloader
@@ -1975,16 +1993,19 @@
>>38917 string 1 (version 1.0)
>>38917 string 2 (version 1.5)
>>38917 string 3 (version 2.0)
->>38917 byte >0x33 (unknown version, ID 0x%X)
->>38917 byte <0x31 (unknown version, ID 0x%X)
+>>38917 byte >0x33 (unknown version, ID %#X)
+>>38917 byte <0x31 (unknown version, ID %#X)
# The next line is not necessary because the MBR staff is done looking for boot signature
>0x1FE leshort 0xAA55 (DOS/MBR boot sector)
# "application id" which appears to be used as a volume label
->32808 string/T >\0 '%s'
+>32808 string/T >\0 '%.32s'
>34816 string \000CD001\001EL\ TORITO\ SPECIFICATION (bootable)
37633 string CD001 ISO 9660 CD-ROM filesystem data (raw 2352 byte sectors)
!:mime application/x-iso9660-image
32777 string CDROM High Sierra CD-ROM filesystem data
+# "application id" which appears to be used as a volume label
+>32816 string/T >\0 '%.32s'
+
# CDROM Filesystems
# https://en.wikipedia.org/wiki/ISO_9660
@@ -2031,7 +2052,7 @@
>8 lelong &1 version #2
>8 lelong &2 sorted_dirs
>8 lelong &4 hole_support
->32 lelong x CRC 0x%x,
+>32 lelong x CRC %#x,
>36 lelong x edition %u,
>40 lelong x %u blocks,
>44 lelong x %u files
@@ -2041,7 +2062,7 @@
>8 belong &1 version #2
>8 belong &2 sorted_dirs
>8 belong &4 hole_support
->32 belong x CRC 0x%x,
+>32 belong x CRC %#x,
>36 belong x edition %u,
>40 belong x %u blocks,
>44 belong x %u files
@@ -2134,10 +2155,10 @@
>31 byte 3 (lzma),
>12 belong x %d bytes,
>8 bedate x %s,
->16 belong x Load Address: 0x%08X,
->20 belong x Entry Point: 0x%08X,
->4 belong x Header CRC: 0x%08X,
->24 belong x Data CRC: 0x%08X
+>16 belong x Load Address: %#08X,
+>20 belong x Entry Point: %#08X,
+>4 belong x Header CRC: %#08X,
+>24 belong x Data CRC: %#08X
# JFFS2 file system
0 leshort 0x1984 Linux old jffs2 filesystem data little endian
@@ -2281,20 +2302,20 @@
>>0x10060 string >\0 lockproto %s)
# Russell Coker <russell@coker.com.au>
-0x10040 string _BHRfS_M BTRFS Filesystem
->0x1012b string >\0 label "%s",
->0x10090 lelong x sectorsize %d,
->0x10094 lelong x nodesize %d,
->0x10098 lelong x leafsize %d,
->0x10020 belong x UUID=%08x-
->0x10024 beshort x \b%04x-
->0x10026 beshort x \b%04x-
->0x10028 beshort x \b%04x-
->0x1002a beshort x \b%04x
->0x1002c belong x \b%08x,
->0x10078 lequad x %lld/
->0x10070 lequad x \b%lld bytes used,
->0x10088 lequad x %lld devices
+0x10040 string _BHRfS_M BTRFS Filesystem
+>0x1012b string >\0 label "%s",
+>0x10090 lelong x sectorsize %d,
+>0x10094 lelong x nodesize %d,
+>0x10098 lelong x leafsize %d,
+>0x10020 ubelong x UUID=%08x-
+>0x10024 ubeshort x \b%04x-
+>0x10026 ubeshort x \b%04x-
+>0x10028 ubeshort x \b%04x-
+>0x1002a ubeshort x \b%04x
+>0x1002c ubelong x \b%08x,
+>0x10078 lequad x %lld/
+>0x10070 lequad x \b%lld bytes used,
+>0x10088 lequad x %lld devices
# dvdisaster's .ecc
# From: "Nelson A. de Oliveira" <naoliv@gmail.com>
@@ -2363,11 +2384,11 @@
>40 lelong x \b number of files %u,
>44 lelong x \b blocks available for writing %d,
>48 lelong x \b inodes in cache %d,
->52 lelong x \b inode file disk address 0x%x,
+>52 lelong x \b inode file disk address %#x,
>56 lelong x \b inode file inode number %u,
->60 lelong x \b address of last segment written 0x%x,
->64 lelong x \b address of next segment to write 0x%x,
->68 lelong x \b address of current segment written 0x%x
+>60 lelong x \b address of last segment written %#x,
+>64 lelong x \b address of next segment to write %#x,
+>68 lelong x \b address of current segment written %#x
0 string td\000 floppy image data (TeleDisk, compressed)
0 string TD\000 floppy image data (TeleDisk)
@@ -2399,7 +2420,7 @@
>0x16 leshort 0 UBIfs image
>0x08 lequad x \b, sequence number %llu
>0x10 leshort x \b, length %u
->0x04 lelong x \b, CRC 0x%08x
+>0x04 lelong x \b, CRC %#08x
0 lelong 0x23494255
>0x04 leshort <2
@@ -2433,3 +2454,53 @@
>0x400 pstring x serial: %s
#>0x500 pstring x unknown: %s
!:ext imgc
+
+# http://martin.hinner.info/fs/bfs/bfs-structure.html
+0 lelong 0x1BADFACE SCO UnixWare BFS filesystem
+
+# https://arstechnica.com/information-technology/2018/07/the-beos-filesystem/
+32 lelong 0x42465331 BE/OS BFS1 filesystem
+>36 lelong x \b, byte order %d
+>40 lelong x \b, block size %d
+>44 lelong x \b, block shift %d
+>48 lequad x \b, total blocks %lld
+>56 lequad x \b, used blocks %lld
+
+
+0 name next
+>0 lelong x \b, size %d
+>4 string x \b, label %s
+
+# https://opensource.apple.com/source/IOStorageFamily/IOStorageFamily-44.3\
+# /IONeXTPartitionScheme.h
+0 string NeXT NeXT version 1 disklabel
+>12 use next
+0 string dlV1 NeXT version 2 disklabel
+>12 use next
+0 string dlV2 NeXT version 3 disklabel
+>12 use next
+
+# bcachefs
+# From: Thomas Weißschuh <thomas@t-8ch.de>
+
+0 name bcachefs-uuid
+>0 ubelong x \b%08x
+>4 ubeshort x \b-%04x
+>6 ubeshort x \b-%04x
+>8 ubeshort x \b-%04x
+>10 ubelong x \b-%08x
+>14 ubeshort x \b%04x
+
+0x1018 string \xc6\x85\x73\xf6\x4e\x1a\x45\xca\x82\x65\xf5\x7f\x48\xba\x6d\x81 bcachefs
+>0x1068 lequad 8 \b, UUID=
+>>0x1038 use bcachefs-uuid
+>>0x1048 string >0 \b, label "%.32s"
+>>0x1010 uleshort x \b, version %u
+>>0x1012 uleshort x \b, min version %u
+>>0x107a byte x \b, device %d
+# assumes the first field is the members field
+>>0x12f4 ulelong 0x01 \b/UUID=
+>>>0x12f0 default x
+>>>&(0x107a.b*56) use bcachefs-uuid
+>>0x107b byte x \b, %d devices
+>>0x1090 byte ^0x02 \b (unclean)
diff --git a/magic/Magdir/fonts b/magic/Magdir/fonts
index b0b40083a5d7..c53822271e05 100644
--- a/magic/Magdir/fonts
+++ b/magic/Magdir/fonts
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: fonts,v 1.43 2019/07/16 11:11:31 christos Exp $
+# $File: fonts,v 1.46 2021/04/26 15:56:00 christos Exp $
# fonts: file(1) magic for font data
#
0 search/1 FONT ASCII vfont text
@@ -11,6 +11,7 @@
0 string %!PS-AdobeFont-1. PostScript Type 1 font text
>20 string >\0 (%s)
6 string %!PS-AdobeFont-1. PostScript Type 1 font program data
+>26 string >\0 (%s)
0 string %!FontType1 PostScript Type 1 font program data
6 string %!FontType1 PostScript Type 1 font program data
0 string %!PS-Adobe-3.0\ Resource-Font PostScript Type 1 font text
@@ -123,7 +124,15 @@
>10 leshort x \b%d
>40 string x %s
# Misc. DOS VGA fonts, from Albert Cahalan (acahalan@cs.uml.edu)
+# Update: Joerg Jenderek
+# URL: http://fileformats.archiveteam.org/wiki/CPI
+# Reference: http://www.delorie.com/djgpp/doc/rbinter/it/58/17.html
0 belong 0xff464f4e DOS code page font data collection
+!:mime font/x-dos-cpi
+!:ext cpi
+0 string \x7fDRFONT DR-DOS code page font data collection
+!:mime font/x-drdos-cpi
+!:ext cpi
7 belong 0x00454741 DOS code page font data
7 belong 0x00564944 DOS code page font data (from Linux?)
4098 string DOSFONT DOSFONT2 encrypted font data
@@ -158,7 +167,7 @@
# face size in points 3-72 SLSS03CG.FNT H1CELT72.FNT
>2 uleshort x %u
# face ID (must be unique)
->0 uleshort x \b, ID 0x%4.4x
+>0 uleshort x \b, ID %#4.4x
# lowest character index in face (4 but usually 32 for disk-loaded fonts)
#>36 uleshort !32 \b, unusual character index %u
# width of the widest character like 0 8 10 12 16 24 32
@@ -168,21 +177,21 @@
# thickening size in pixel like 0 1 2 3 4 5 6 7 8
#>58 uleshort x \b, %u thick
# lightening mask to eliminate pixels, usually 5555h
->62 uleshort !0x5555 \b, lightening mask 0x%x
+>62 uleshort !0x5555 \b, lightening mask %#x
# skewing mask to determine when to perform additional rotation when skewing, usually 5555h
->64 uleshort !0x5555 \b, skewing mask 0x%x
+>64 uleshort !0x5555 \b, skewing mask %#x
# offset to optional horizontal offset table 0 58h~88 5eh 252h
-#>68 ulelong x \b, 0x%x horizontal table offset
+#>68 ulelong x \b, %#x horizontal table offset
# offset of character offset table 54h for many *.GFT 55h 58h 5Eh 120h 1D4h 202h 220h
-#>72 ulelong x \b, 0x%x coffset
+#>72 ulelong x \b, %#x coffset
# offset to font data like 116h 118h 158 20Ah 20Eh
->76 ulelong x \b, 0x%x foffset
+>76 ulelong x \b, %#x foffset
# form width in bytes like 58 67 156 190 227 317 345
#>80 uleshort x \b, %u fwidth
# form height in bytes like 4 8 11 17 26 56 70 90 120 146 150
#>82 uleshort x \b, %u fheight
# pointer to the next font like 0 10000h 20000h 30000h 40000h 60000h 80000h E0000h D0000h
-#>84 ulelong x \b, 0x%x noffset
+#>84 ulelong x \b, %#x noffset
# downloadable fonts for browser (prints type) anthon@mnt.org
# https://tools.ietf.org/html/rfc3073
@@ -221,7 +230,7 @@
# tag names consist of up to four characters padded with spaces at end like
# BASE DSIG OS/2 Zapf acnt glyf cvt vmtx xref ...
>>12 regex/4l \^[A-Za-z][A-Za-z][A-Za-z/][A-Za-z2\ ]
-#>>>0 ubelong x \b, sfnt version 0x%x
+#>>>0 ubelong x \b, sfnt version %#x
>>>0 ubelong !0x4f54544f TrueType
!:mime font/sfnt
!:apple ????tfil
@@ -253,7 +262,7 @@
#>>>>&8 ubelong >0x0100bd27 BIGGEST OFFSET
>>&8 ubelong >0x00100000
# offset of name table
->>>&-4 ubelong x \b, name offset 0x%x
+>>>&-4 ubelong x \b, name offset %#x
# GRR: pointer to name table only works if offset ~< FILE_BYTES_MAX = 100000h defined in src\file.h
>>&8 ubelong <0x00100000
>>>&-16 ubelong x
@@ -284,7 +293,7 @@
>>>>>&-2 ubeshort 1 \b, Macintosh
>>>>>&-2 ubeshort 3 \b, Microsoft
# languageID (0~english Macintosh, 0409h~english Microsoft, ...)
->>>>>&2 ubeshort >0 \b, language 0x%x
+>>>>>&2 ubeshort >0 \b, language %#x
# name identifiers
# often 0~copyright, 1~font, 2~font subfamily, 5~version, 13~license, 19~sample, ...
>>>>>&4 ubeshort >0 \b, type %d string
@@ -339,7 +348,7 @@
# 0x44454947 = 'DSIG'
>>>&4 belong 0x44534947 \b, digitally signed
# offset to 1st font
->>12 ubelong x \b, at 0x%x
+>>12 ubelong x \b, at %#x
# point to 1st font that starts with sfnt version
>>(12.L) use sfnt-font
diff --git a/magic/Magdir/forth b/magic/Magdir/forth
index cfbcef55482b..34c918152aec 100644
--- a/magic/Magdir/forth
+++ b/magic/Magdir/forth
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: forth,v 1.1 2019/06/06 19:14:20 christos Exp $
+# $File: forth,v 1.4 2021/04/26 15:56:00 christos Exp $
# forth: file(1) magic for various Forth environments
# From: Lubomir Rintel <lkundrak@v3.sk>
#
@@ -16,16 +16,18 @@
0 regex \^:[[:space:]].*[[:space:]]\\(([[:space:]].*)?\ --\ (.*[[:space:]])?\\)[[:space:]].*[[:space:]];$ FORTH program
!:mime text/x-forth
-# Various dictionary images used by OpenFirware FORTH environent
+# Various dictionary images used by OpenFirware FORTH environment
0 lelong 0xe1a00000
->8 lelong 0xe1a00000 ARM OpenFirmware FORTH Dictionary,
->>24 lelong x Text length: %d bytes,
->>28 lelong x Data length: %d bytes,
->>32 lelong x Text Relocation Table length: %d bytes,
->>36 lelong x Data Relocation Table length: %d bytes,
->>40 lelong x Entry Point: 0x%08X,
->>44 lelong x BSS length: %d bytes
+>8 lelong 0xe1a00000
+# skip raspberry pi kernel image kernel7.img by checking for positive text length
+>>24 lelong >0 ARM OpenFirmware FORTH Dictionary,
+>>>24 lelong x Text length: %d bytes,
+>>>28 lelong x Data length: %d bytes,
+>>>32 lelong x Text Relocation Table length: %d bytes,
+>>>36 lelong x Data Relocation Table length: %d bytes,
+>>>40 lelong x Entry Point: %#08X,
+>>>44 lelong x BSS length: %d bytes
0 string MP
>28 lelong 1 x86 OpenFirmware FORTH Dictionary,
@@ -35,18 +37,18 @@
>>8 leshort x Header length: %d paragraphs,
>>10 leshort x Data Size: %d
>>12 leshort x - %d 4K pages,
->>14 lelong x Initial Stack Pointer: 0x%08X,
->>20 lelong x Entry Point: 0x%08X,
+>>14 lelong x Initial Stack Pointer: %#08X,
+>>20 lelong x Entry Point: %#08X,
>>24 lelong x First Relocation Item: %d,
>>26 lelong x Overlay Number: %d,
->>18 leshort x Checksum: 0x%08X
+>>18 leshort x Checksum: %#08X
0 belong 0x48000020 PowerPC OpenFirmware FORTH Dictionary,
>4 belong x Text length: %d bytes,
>8 belong x Data length: %d bytes,
>12 belong x BSS length: %d bytes,
>16 belong x Symbol Table length: %d bytes,
->20 belong x Entry Point: 0x%08X,
+>20 belong x Entry Point: %#08X,
>24 belong x Text Relocation Table length: %d bytes,
>28 belong x Data Relocation Table length: %d bytes
@@ -55,7 +57,7 @@
>8 lelong x Data length: %d bytes,
>12 lelong x BSS length: %d bytes,
>16 lelong x Symbol Table length: %d bytes,
->20 lelong x Entry Point: 0x%08X,
+>20 lelong x Entry Point: %#08X,
>24 lelong x Text Relocation Table length: %d bytes,
>28 lelong x Data Relocation Table length: %d bytes
@@ -64,17 +66,17 @@
# Weak.
#0 short 0x5820 cForth 16-bit Dictionary,
-#>2 short x Serial: 0x%08X,
-#>4 short x Dictionary Start: 0x%08X,
+#>2 short x Serial: %#08X,
+#>4 short x Dictionary Start: %#08X,
#>6 short x Dictionary Size: %d bytes,
-#>8 short x User Area Start: 0x%08X,
+#>8 short x User Area Start: %#08X,
#>10 short x User Area Size: %d bytes,
-#>12 short x Entry Point: 0x%08X
+#>12 short x Entry Point: %#08X
0 long 0x581120 cForth 32-bit Dictionary,
->4 long x Serial: 0x%08X,
->8 long x Dictionary Start: 0x%08X,
+>4 long x Serial: %#08X,
+>8 long x Dictionary Start: %#08X,
>12 long x Dictionary Size: %d bytes,
->16 long x User Area Start: 0x%08X,
+>16 long x User Area Start: %#08X,
>20 long x User Area Size: %d bytes,
->24 long x Entry Point: 0x%08X
+>24 long x Entry Point: %#08X
diff --git a/magic/Magdir/fsav b/magic/Magdir/fsav
index 7ea094144e70..5c1d6e23dcfd 100644
--- a/magic/Magdir/fsav
+++ b/magic/Magdir/fsav
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: fsav,v 1.19 2019/04/19 00:42:27 christos Exp $
+# $File: fsav,v 1.22 2021/04/26 15:56:00 christos Exp $
# fsav: file(1) magic for datafellows fsav virus definition files
# Anthon van der Neut (anthon@mnt.org)
@@ -35,7 +35,7 @@
#>>>3 ubyte 0x1
#>>>>4 ubyte 0x0e
#>>>>>13 ubyte >0 fsav virus signatures
-#>>>>>>11 ubyte x size 0x%02x
+#>>>>>>11 ubyte x size %#02x
#>>>>>>12 ubyte x \b%02x
#>>>>>>13 ubyte x \b%02x bytes
@@ -59,7 +59,7 @@
# file: could not find any valid magic files! (No error)
>>10 default x (with buildtime)
#>>10 default x
-# clamtmp is used for temporily database like update process
+# clamtmp is used for temporarily database like update process
# for pure tar database only cld extension found
!:ext cld/cvd/clamtmp/cud
>511 default x file
@@ -86,16 +86,16 @@
#>>>>>>>>>&1 regex \^[^:]{1,10} \b, %s
>>>>>>>>>&1 regex \^[^:]{1,10}
# padding with spaces
-#>>>>>>>>>>&1 ubequad x \b, padding 0x%16.16llx
+#>>>>>>>>>>&1 ubequad x \b, padding %#16.16llx
>510 ubyte =0x20
# inspect real database content
-#>>512 ubeshort x \b, database MAGIC 0x%x
+#>>512 ubeshort x \b, database MAGIC %#x
# ./archive handle pure tar archives
>>1012 quad =0 \b, with
>>>512 use tar-file
# not pure tar
>>1012 quad !0
-# one space at the end of text and then handles gziped archives by ./compress
+# one space at the end of text and then handles gzipped archives by ./compress
>>>512 string \037\213 \b, with
>>>>512 indirect x
diff --git a/magic/Magdir/games b/magic/Magdir/games
index 21e5328c5c94..65af681bad00 100644
--- a/magic/Magdir/games
+++ b/magic/Magdir/games
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: games,v 1.20 2020/02/01 16:32:33 christos Exp $
+# $File: games,v 1.24 2021/04/26 15:56:00 christos Exp $
# games: file(1) for games
# Fabio Bonelli <fabiobonelli@libero.it>
@@ -53,11 +53,11 @@
# dividing this by entry size (64) gives number of files
>>>8 ulelong/64 x \b, %u files
# offset to the beginning of the file table
->>>4 ulelong x \b, offset 0x%x
+>>>4 ulelong x \b, offset %#x
# 1st file entry
>>>(4.l) use pak-entry
# 2nd file entry
-#>>>4 ulelong+64 x \b, offset 0x%x
+#>>>4 ulelong+64 x \b, offset %#x
#>>>(4.l+64) use pak-entry
#
# display file table entry of Quake PAK archive
@@ -65,7 +65,7 @@
# normally entry start after header which implies offset 12 or higher
>56 ulelong >11
# the offset from the beginning of pak to beginning of this entry file contents
->>56 ulelong x at 0x%x
+>>56 ulelong x at %#x
# the size of file for this entry
>>60 ulelong x %u bytes
# 56 byte null-terminated entry name string includes path like maps/e1m1.bsp
@@ -276,7 +276,7 @@
# Summary: NetImmerse game engine file
# Extension .nif
# Created by: Abel Cheung <abelcheung@gmail.com>
-0 string NetImmerse\ File\ Format,\ Versio
+0 string NetImmerse\ File\ Format,\ Version
>&0 string n\ NetImmerse game engine file
>>&0 regex [0-9a-z.]+ \b, version %s
@@ -313,3 +313,208 @@
>>12 regex [0-9a-z.]+ saved by game version %s
0 string CIV6 Sid Meier's Civilization VI saved game
+
+# https://syzygy-tables.info/
+# From Michel Van den Bergh
+0 string \327f\f\245 Syzygy DTZ tablebase
+!:mime application/syzygy
+0 string q\350#] Syzygy WDL tablebase
+!:mime application/syzygy
+
+##############################################################################
+# Grand Theft Auto (GTA) file formats.
+#
+# Summary:
+# Includes GTA-specific formats used in all games from 1997 to present. Games
+# and formats were created by Rockstar North, formerly DMA Design. Magic tests
+# were written based on a combination of official and community documentation.
+#
+# Created by: Oliver Galvin <odg@riseup.net>
+#
+# References:
+# * Classic GTA documentation and research:
+# <https://gitlab.com/classic-gta/gta-data>
+# * Official RenderWare documentation available from EA:
+# <https://github.com/electronicarts/RenderWare3Docs>
+# * Lots of community research in the GTAMods wiki:
+# <https://gtamods.com/wiki>
+
+# GTA 2D-Era data - 'Classic' top down games (1/L/2)
+
+## GTA text
+
+0 string \xbf\xf8\xbd\x49\x62\xbe GTA1 in-game text (FXT),
+0 string GBL GTA2 in-game text (GXT),
+>3 string E English,
+>>4 uleshort x version %d
+>3 string F French,
+>>4 uleshort x version %d
+>3 string G German,
+>>4 uleshort x version %d
+>3 string I Italian,
+>>4 uleshort x version %d
+>3 string S Spanish,
+>>4 uleshort x version %d
+>3 string J Japanese,
+>>4 uleshort x version %d
+
+## GTA maps
+
+0 ulelong 331 GTA1 map layout (CMP),
+>4 byte 1 Level 1
+>4 byte 2 Level 2
+>4 byte 3 Level 3
+0 string GBMP GTA2/GBH map layout (GMP),
+>4 uleshort x version %d
+0 string/t [MapFiles] GTA2 multiplayer map metadata (MMP)
+0 string/t MainOrBonus\ =\ MAIN GTA2 single player map listing (test1.seq)
+
+## GTA 2D sprites and textures
+
+0 ulelong 290 GTA1 style data (GRX), 8 bit editor graphics
+0 ulelong 325 GTA1 style data (GRY), 8 bit in-game graphics
+0 ulelong 336 GTA1 style data (G24), 24 bit in-game graphics
+0 string GBST GTA2/GBH style data (STY), in-game graphics,
+>4 uleshort x version %d
+
+## GTA audio index
+
+0 ulelong 0
+>4 ulelong <0x40000
+>>8 ulelong >4500
+>>>8 ulelong <45000 GTA audio index data (SDT)
+
+## GTA scripts
+
+0 ulelong 0x00080000
+>4 uleshort 0x0024 GTA2 binary main script (SCR)
+
+0 uleshort 0x063c GTA2 binary mission script (SCR), Residential area (ste)
+0 uleshort 0x055b GTA2 binary mission script (SCR), Downtown area (wil)
+0 uleshort 0x0469 GTA2 binary mission script (SCR), Industrial area (bil)
+
+0 string v9.6\0\0 GTA2 replay file (REP),
+>8 regex/30c [a-z0-9:\ ]+\0\0 created on %s
+
+# GTA 3D-Era (III/VC/SA/LCS/VCS) - used by the RenderWare engine by Criterion Games
+
+## GTA 3D models and textures - RenderWare binary streams
+
+8 ulelong 0x00000310 RenderWare data, v3.1.0.0, used in GTA III on PS2,
+>0 ulelong 0x00000016 texture archive (TXD)
+>0 ulelong 0x00000010 3D models (DFF)
+8 ulelong 0x0401ffff RenderWare data, v3.1.0.1, used in GTA III on PC/PS2,
+>0 ulelong 0x00000016 texture archive (TXD)
+>0 ulelong 0x00000010 3D models (DFF)
+8 ulelong 0x0800ffff RenderWare data, v3.2.0.0, used in GTA III on PC,
+>0 ulelong 0x00000016 texture archive (TXD)
+>0 ulelong 0x00000010 3D models (DFF)
+8 ulelong 0x0c00ffff RenderWare data, v3.3.0.0,
+>0 ulelong 0x00000016 texture archive (TXD)
+>0 ulelong 0x00000010 3D models (DFF)
+8 ulelong 0x0c02ffff RenderWare data, v3.3.0.2, used in GTA III PC and GTA VC PS2,
+>0 ulelong 0x00000016 texture archive (TXD)
+>0 ulelong 0x00000010 3D models (DFF)
+8 ulelong 0x1000ffff RenderWare data, v3.4.0.0,
+>0 ulelong 0x00000016 texture archive (TXD)
+>0 ulelong 0x00000010 3D models (DFF)
+8 ulelong 0x1003ffff RenderWare data, v3.4.0.3, used in GTA VC PC,
+>0 ulelong 0x00000016 texture archive (TXD)
+>0 ulelong 0x00000010 3D models (DFF)
+8 ulelong 0x1005ffff RenderWare data, v3.4.0.5, used in GTA III/VC on Android,
+>0 ulelong 0x00000016 texture archive (TXD)
+>0 ulelong 0x00000010 3D models (DFF)
+8 ulelong 0x1400ffff RenderWare data, v3.5.0.0, used in GTA III/VC on Xbox,
+>0 ulelong 0x00000016 texture archive (TXD)
+>0 ulelong 0x00000010 3D models (DFF)
+8 ulelong 0x1803ffff RenderWare data, v3.6.0.3, used in GTA SA,
+>0 ulelong 0x00000016 texture archive (TXD)
+>0 ulelong 0x00000010 3D models (DFF)
+
+0 string COL RenderWare collision data (COL),
+>3 string L version 1, used in GTA III/VC/SA
+>3 string 2 version 2, used in GTA SA
+>3 string 3 version 3, used in GTA SA
+>3 string 4 version 4, used in GTA SA
+
+## GTA items and animations
+
+0 string/c #\ ipl\ generated\ from\ max\ file GTA Item Placement data (IPL), used in GTA III/VC
+0 string/b bnry GTA Item Placement data (IPL), used in GTA SA/IV,
+>4 ulelong x %d items
+
+0 string ANP GTA animation data (IFP),
+>3 string K version 1, used in GTA III/VC
+>3 string 3 version 2, used in GTA SA
+
+0 string GtaSA29 GTA Replay data (REP), used in GTA SA
+
+## GTA text
+
+0 string TKEY GTA in-game text (GXT), version 2, used in GTA III
+0 string TABL GTA in-game text (GXT), version 3, used in GTA VC/LS/VCS
+
+## GTA scripts
+
+0 string \x02\x00\x01 GTA script (SCM), used in GTA III/VC/SA
+
+## GTA archives
+
+0 string VER2 GTA archive (IMG), version 2, used in GTA SA,
+>4 ulelong x %d items
+
+# GTA HD-Era (IV/V) - used by the Rockstar Advanced Game Engine (RAGE)
+
+## GTA models and textures - RAGE resources
+# Note: GTA IV formats not yet documented - WAD, WBD, WBN, WHM, WPL
+
+0 ulelong 0x00695254 GTA Drawable data (WDR), model and weapon data, used in GTA IV
+0 ulelong 0x00695238 GTA Windows Frag Type (WFT), vehicle models, used in GTA IV
+0 ulelong 0x006953A4 GTA Ped and LOD models (WDD), used in GTA IV
+0 ulelong 0x00695384 GTA Windows Texture Dictionary (WTD), used in GTA IV
+
+## GTA text
+
+4 string TABL GTA in-game text (GXT),
+>0 uleshort x version %d, used in GTA SA/IV
+0 string 2GXT GTA in-game text (GXT2), used in GTA V
+
+## GTA scripts
+
+0 ulelong 0x0d524353 GTA script (SCO), unencrypted, used in GTA IV,
+>4 ulelong x %d code bytes,
+>>8 ulelong x %d static variables,
+>>>12 ulelong x %d global variables
+0 ulelong 0x0e726373 GTA script (SCO), encrypted, used in GTA IV
+>4 ulelong x %d code bytes,
+>>8 ulelong x %d static variables,
+>>>12 ulelong x %d global variables
+
+## GTA archives
+
+0 ulelong 0xa94e2a52 GTA archive (IMG),
+>4 ulelong x version %d, used in GTA IV,
+>>8 ulelong x %d items
+
+0 uleshort 0x5250 RAGE Package Format (RPF),
+>2 uleshort 0x4630 version 0, used in Rockstar Table Tennis,
+>>4 ulelong x %d bytes,
+>>>8 ulelong x %d entries
+>2 uleshort 0x4632 version 2, used in GTA IV,
+>>4 ulelong x %d bytes,
+>>>8 ulelong x %d entries
+>2 uleshort 0x4633 version 3, used in GTA IV Audio & Midnight Club: LA,
+>>4 ulelong x %d bytes,
+>>>8 ulelong x %d entries
+>2 uleshort 0x4634 version 4, used in Max Payne 3,
+>>4 ulelong x %d bytes,
+>>>8 ulelong x %d entries
+>2 uleshort 0x4636 version 6, used in RDR,
+>>4 ulelong x %d bytes,
+>>>8 ulelong x %d entries
+>2 uleshort 0x4637 version 7, used in GTA V,
+>>4 ulelong x %d bytes,
+>>>8 ulelong x %d entries
+>2 uleshort 0x4638 version 8, used in RDR 2,
+>>4 ulelong x %d bytes,
+>>>8 ulelong x %d entries
diff --git a/magic/Magdir/git b/magic/Magdir/git
index 4087fcd8de4b..67eab32a663a 100644
--- a/magic/Magdir/git
+++ b/magic/Magdir/git
@@ -1,13 +1,13 @@
#------------------------------------------------------------------------------
-# $File: git,v 1.1 2019/10/04 18:46:29 christos Exp $
+# $File: git,v 1.2 2020/08/09 16:57:15 christos Exp $
# git: file(1) magic for Git objects
0 string blob\040
->5 regex [0-9]+ Git blob %s
+>5 regex [0-9a-f]+ Git blob %s
0 string tree\040
->5 regex [0-9]+ Git tree %s
+>5 regex [0-9a-f]+ Git tree %s
0 string commit\040
->7 regex [0-9]+ Git commit %s
+>7 regex [0-9a-f]+ Git commit %s
diff --git a/magic/Magdir/gnome b/magic/Magdir/gnome
index 2905340c7e06..7a45d1d586ef 100644
--- a/magic/Magdir/gnome
+++ b/magic/Magdir/gnome
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: gnome,v 1.6 2019/04/19 00:42:27 christos Exp $
+# $File: gnome,v 1.7 2020/06/23 16:17:08 christos Exp $
# GNOME related files
# Contributed by Josh Triplett
@@ -55,5 +55,5 @@
0 string GOBJ\nMETADATA\r\n\032 G-IR binary database
>16 byte x \b, v%d
>17 byte x \b.%d
->20 leshort x \b, %d entries
->22 leshort x \b/%d local
+>20 short x \b, %d entries
+>22 short x \b/%d local
diff --git a/magic/Magdir/gnu b/magic/Magdir/gnu
index 29f0b05e1c08..761d657c4e84 100644
--- a/magic/Magdir/gnu
+++ b/magic/Magdir/gnu
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: gnu,v 1.22 2020/04/09 19:11:58 christos Exp $
+# $File: gnu,v 1.24 2021/04/26 15:56:00 christos Exp $
# gnu: file(1) magic for various GNU tools
#
# GNU nlsutils message catalog file format
@@ -33,48 +33,48 @@
# size of hashing table
#>20 ulelong x \b, %u hash
#>20 ulelong >1 \bes
-#>24 ulelong x at 0x%x
-# for revsion x.0 offset of table with originals is 1Ch if directly after header
+#>24 ulelong x at %#x
+# for revision x.0 offset of table with originals is 1Ch if directly after header
>4 ulelong&0x0000FFff =0
->>12 ulelong !0x1C \b, at 0x%x string table
+>>12 ulelong !0x1C \b, at %#x string table
# but for x.1 table offset i found is 30h. That means directly after bigger header
>4 ulelong&0x0000FFff >0
->>12 ulelong !0x30 \b, at 0x%x string table
+>>12 ulelong !0x30 \b, at %#x string table
# The following variables are only used in .mo files with minor revision >= 1
# number of system dependent segments
#>>28 ulelong x \b, %u segment
#>>28 ulelong >1 \bs
# offset of table describing system dependent segments
-#>>32 ulelong x at 0x%x
+#>>32 ulelong x at %#x
# number of system dependent strings pairs
>>36 ulelong x \b, %u sysdep message
>>36 ulelong >1 \bs
# offset of table with start offsets of original sysdep strings
-#>>40 ulelong x \b, at 0x%x sysdep strings
+#>>40 ulelong x \b, at %#x sysdep strings
# offset of table with start offsets of translated sysdep strings
-#>>44 ulelong x \b, at 0x%x sysdep translations
-# >>(44.l) ulelong x 0x%x chars
-# >>>&0 ulelong x at 0x%x
+#>>44 ulelong x \b, at %#x sysdep translations
+# >>(44.l) ulelong x %#x chars
+# >>>&0 ulelong x at %#x
# >>>>(&-4) string x "%s"
# string table after big header
-#>>48 ubequad x \b, string table 0x%llx
+#>>48 ubequad x \b, string table %#llx
#
# 0th string length seems to be always 0
#>(12.l) ulelong x \b, %u chars
-#>>&0 ulelong x at 0x%x
-# if 1st string length positiv inspect offset and string
+#>>&0 ulelong x at %#x
+# if 1st string length positive inspect offset and string
#>(12.l+8) ulelong >0 \b, %u chars
-#>>&0 ulelong x at 0x%x
-# if 2nd string length positiv inspect offset and string
+#>>&0 ulelong x at %#x
+# if 2nd string length positive inspect offset and string
# >(12.l+16) ulelong >0 \b, %u chars
-# >>&0 ulelong x at 0x%x
+# >>&0 ulelong x at %#x
# skip newline byte
#>>>(&-4) ubyte =0x0A
#>>>>&0 string x "%s"
#>>>(&-4) ubyte !0x0A
#>>>>&-1 string x '%s'
# offset of table with translation strings
-#>16 ulelong x \b, at 0x%x translation table
+#>16 ulelong x \b, at %#x translation table
# check translation 0 length and offset
>(16.l) ulelong >0
>>&0 ulelong x
@@ -100,11 +100,11 @@
# TODO: for big endian use same code as for little endian
#>0 use \^gettext-object
# DEBUG code
-#>16 ubelong x \b, at 0x%x translation table
-#>(16.L) ubelong x 0x%x chars
-#>>&0 ubelong x at 0x%x
+#>16 ubelong x \b, at %#x translation table
+#>(16.L) ubelong x %#x chars
+#>>&0 ubelong x at %#x
# unexpected value HERE!
-#>>>(&-4) ubequad x 0x%llx
+#>>>(&-4) ubequad x %#llx
#
>4 beshort x revision %d.
>6 beshort >0 \b%d,
diff --git a/magic/Magdir/gpt b/magic/Magdir/gpt
index 76a223c3a030..c2fd51c0dcb6 100644
--- a/magic/Magdir/gpt
+++ b/magic/Magdir/gpt
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: gpt,v 1.4 2017/03/17 21:35:28 christos Exp $
+# $File: gpt,v 1.5 2020/12/12 20:01:47 christos Exp $
#
# GPT Partition table patterns.
# Author: Rogier Goossens (goossens.rogier@gmail.com)
@@ -12,7 +12,7 @@
# This is kept separate, so that MBR partitions are not reported as well.
# (use -k if you do want them as well)
-# First, detect the MBR partiton table
+# First, detect the MBR partition table
# If more than one GPT protective MBR partition exists, don't print anything
# (the other MBR detection code will then just print the MBR partition table)
0x1FE leshort 0xAA55
diff --git a/magic/Magdir/gpu b/magic/Magdir/gpu
index 62e30d0f7a25..36d712443ba0 100644
--- a/magic/Magdir/gpu
+++ b/magic/Magdir/gpu
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: gpu,v 1.2 2017/03/23 22:11:53 christos Exp $
+# $File: gpu,v 1.3 2021/04/26 15:56:00 christos Exp $
# gpu: file(1) magic for GPU input files
# Standard Portable Intermediate Representation (SPIR)
@@ -8,12 +8,12 @@
# Typical file extension: .spv
0 belong 0x07230203 Khronos SPIR-V binary, big-endian
->4 belong x \b, version 0x%08x
->8 belong x \b, generator 0x%08x
+>4 belong x \b, version %#08x
+>8 belong x \b, generator %#08x
0 lelong 0x07230203 Khronos SPIR-V binary, little-endian
->4 lelong x \b, version 0x%08x
->8 lelong x \b, generator 0x%08x
+>4 lelong x \b, version %#08x
+>8 lelong x \b, generator %#08x
# Vulkan Trace file
# Documentation:
diff --git a/magic/Magdir/guile b/magic/Magdir/guile
deleted file mode 100644
index 99f837133c7c..000000000000
--- a/magic/Magdir/guile
+++ /dev/null
@@ -1,13 +0,0 @@
-
-#------------------------------------------------------------------------------
-# $File: guile,v 1.2 2019/04/19 00:42:27 christos Exp $
-# Guile file magic from <dalepsmith@gmail.com>
-# https://www.gnu.org/s/guile/
-# https://git.savannah.gnu.org/gitweb/?p=guile.git;f=libguile/_scm.h;hb=HEAD#l250
-
-0 string GOOF---- Guile Object
->8 string LE \b, little endian
->8 string BE \b, big endian
->11 string 4 \b, 32bit
->11 string 8 \b, 64bit
->13 regex .\.. \b, bytecode v%s
diff --git a/magic/Magdir/hitachi-sh b/magic/Magdir/hitachi-sh
index 18d83844515f..f64489f7fcf6 100644
--- a/magic/Magdir/hitachi-sh
+++ b/magic/Magdir/hitachi-sh
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: hitachi-sh,v 1.9 2018/08/21 12:48:41 christos Exp $
+# $File: hitachi-sh,v 1.10 2020/12/12 20:01:47 christos Exp $
# hitach-sh: file(1) magic for Hitachi Super-H
#
# Super-H COFF
@@ -16,7 +16,7 @@
# test for unused flag bits (0x8000,0x0800,0x0400,0x0200,x0080) in f_flags
>18 ubeshort&0x8E80 0
# use big endian variant of subroutine to display name+variables+flags
-# for common object formated files
+# for common object formatted files
>>0 use \^display-coff
!:strength -10
@@ -24,7 +24,7 @@
# test for unused flag bits in f_flags
>18 uleshort&0x8E80 0
# use little endian variant of subroutine to
-# display name+variables+flags for common object formated files
+# display name+variables+flags for common object formatted files
>>0 use display-coff
!:strength -10
diff --git a/magic/Magdir/human68k b/magic/Magdir/human68k
index b3d66ce5d089..707c74098b88 100644
--- a/magic/Magdir/human68k
+++ b/magic/Magdir/human68k
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: human68k,v 1.5 2009/09/19 16:28:09 christos Exp $
+# $File: human68k,v 1.6 2021/04/26 15:56:00 christos Exp $
# human68k: file(1) magic for Human68k (X680x0 DOS) binary formats
# Magic too short!
#0 string HU Human68k
@@ -12,7 +12,7 @@
#>(8.L+66) string #HUPAIR hupair
#>0 string HU X executable
#>(8.L+74) string #LIBCV1 - linked PD LIBC ver 1
-#>4 belong >0 - base address 0x%x
+#>4 belong >0 - base address %#x
#>28 belong >0 not stripped
#>32 belong >0 with debug information
#0 beshort 0x601a Human68k Z executable
diff --git a/magic/Magdir/ibm370 b/magic/Magdir/ibm370
index a49b28f5db80..dc976f8705ea 100644
--- a/magic/Magdir/ibm370
+++ b/magic/Magdir/ibm370
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: ibm370,v 1.10 2017/03/17 21:35:28 christos Exp $
+# $File: ibm370,v 1.11 2021/03/14 16:51:45 christos Exp $
# ibm370: file(1) magic for IBM 370 and compatibles.
#
# "ibm370" said that 0x15d == 0535 was "ibm 370 pure executable".
@@ -46,3 +46,7 @@
0 beshort 0535 SVR2 executable (USS/370)
>12 belong >0 not stripped
>24 belong >0 - version %d
+
+# NETDATA (https://en.wikipedia.org/wiki/NETDATA)
+# -\INMR01 In EBCDIC
+0 string \x60\xe0\xc9\xd5\xd4\xd9\xf0\xf1 IBM NETDATA file
diff --git a/magic/Magdir/ibm6000 b/magic/Magdir/ibm6000
index 2112e71652d3..724b64d3a5eb 100644
--- a/magic/Magdir/ibm6000
+++ b/magic/Magdir/ibm6000
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: ibm6000,v 1.14 2019/03/07 17:21:54 christos Exp $
+# $File: ibm6000,v 1.15 2021/07/03 14:01:46 christos Exp $
# ibm6000: file(1) magic for RS/6000 and the RT PC.
#
0 beshort 0x01df executable (RISC System/6000 V3.1) or obj module
@@ -10,7 +10,9 @@
#>2 byte 0x50 pure
#>28 belong >0 not stripped
#>6 beshort >0 - version %ld
+# GRR: line below is too general as it matches also TTComp archive, ASCII, 1K handled by ./archive
0 beshort 0x0104 shared library
+# GRR: line below is too general as it matches also TTComp archive, ASCII, 2K handled by ./archive
0 beshort 0x0105 ctab data
0 beshort 0xfe04 structured file
0 string 0xabcdef AIX message catalog
diff --git a/magic/Magdir/icc b/magic/Magdir/icc
index a8b57864bf0d..15fd76b8d512 100644
--- a/magic/Magdir/icc
+++ b/magic/Magdir/icc
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: icc,v 1.6 2019/11/15 21:03:14 christos Exp $
+# $File: icc,v 1.7 2021/04/26 15:56:00 christos Exp $
# icc: file(1) magic for International Color Consortium file formats
#
@@ -123,9 +123,9 @@
# seconds <= 59
>>>>>34 ubeshort x \b:%.2u
# vendor specific flags like 2 in HPCLJ5.ICM
->>>44 ubeshort >0 \b, 0x%x vendor flags
+>>>44 ubeshort >0 \b, %#x vendor flags
# profile flags bits 0-2 of least 16 used by ICC
-#>>>44 ubelong >0 \b, 0x%x flags
+#>>>44 ubelong >0 \b, %#x flags
# icEmbeddedProfileTrue
>>>44 ubelong &1 \b, embedded
# icEmbeddedProfileFalse
@@ -138,9 +138,9 @@
#>>>44 ubelong ^4 \b, no MCS
# vendor specific device attributes 1~srgb.icc
# E000D00h~CNB7QEDA.ICM C000A00h~CNB5FCAA.ICM 01040401h~CNB25PE3.ICM
->>>56 ubelong >0 \b, 0x%x vendor attribute
+>>>56 ubelong >0 \b, %#x vendor attribute
# ICC device attributes bits 0-7 used
-#>>>60 ubelong x \b, 0x%x attribute
+#>>>60 ubelong x \b, %#x attribute
# http://www.color.org/icc34.h
>>>60 ubelong &0x01 \b, transparent
#>>>60 ubelong ^0x01 \b, reflective
@@ -159,7 +159,7 @@
>>>60 ubelong &0x80 \b, self-luminous
#>>>60 ubelong ^0x80 \b, non-self-luminous
# rendering intent 0-3 but 7AEA5027h in EE051__1.ICM 6CB1BCh in EE061__1.ICM
->>>64 ubelong >3 \b, 0x%x rendering intent
+>>>64 ubelong >3 \b, %#x rendering intent
#>>>64 ubelong =0 \b, perceptual
>>>64 ubelong =1 \b, relative colorimetric
>>>64 ubelong =2 \b, saturation
@@ -168,16 +168,16 @@
>>>71 ubequad !0xd6000100000000d3 \b, PCS
# usually X~0.9642*65536=63189.8112~63190=F6D5h ; but also found
# often F6D6 in gt5000r.icm, F6B8 in kodakce.icm, F6CA in RSWOP.icm
->>>>68 ubelong !0x0000f6d5 X=0x%x
+>>>>68 ubelong !0x0000f6d5 X=%#x
# usually Y=1.0~00010000h but Y=0 in brmsl07f.icm
->>>>72 ubelong !0x00010000 Y=0x%x
+>>>>72 ubelong !0x00010000 Y=%#x
# usually Z~0.8249*65536=54060.6464~54061=D32Dh ; but also found
# D2F7 in hp1200c.icm, often D32C in A925A.icm, D309 in RSWOP.icm , D2F8 in kodak_dc.icm
->>>>76 ubelong !0x0000d32d Z=0x%x
+>>>>76 ubelong !0x0000d32d Z=%#x
# Profile ID. MD5 fingerprinting method as defined in Internet RFC 1321.
->>>84 ubequad >0 \b, 0x%llx MD5
+>>>84 ubequad >0 \b, %#llx MD5
# reserved in older versions should be zero but also found CDCDCDCDCDCDCDCD
-#>>100 ubequad x \b 0x%llx reserved
+#>>100 ubequad x \b %#llx reserved
# tag table
# 6 <= tags count <= 43
#>>>128 ubelong >43 \b, %u tags
@@ -191,8 +191,8 @@
>>>>132 default x \b, no copyright tag
# 1st tag
#>>>132 string x \b, 1st tag %.4s
-#>>>136 ubelong x 0x%x offset
-#>>>140 ubelong x 0x%x len
+#>>>136 ubelong x %#x offset
+#>>>140 ubelong x %#x len
# 2nd tag,...
# look also for profileDescriptionTag "desc"
>>>132 search/508 desc
diff --git a/magic/Magdir/iff b/magic/Magdir/iff
index 9437dd68e129..8da0350dbfac 100644
--- a/magic/Magdir/iff
+++ b/magic/Magdir/iff
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: iff,v 1.14 2015/09/07 10:03:21 christos Exp $
+# $File: iff,v 1.17 2021/02/23 01:07:32 christos Exp $
# iff: file(1) magic for Interchange File Format (see also "audio" & "images")
#
# Daniel Quinlan (quinlan@yggdrasil.com) -- IFF was designed by Electronic
@@ -41,8 +41,10 @@
>8 string ANIM \b, ANIM animation
>8 string YAFA \b, YAFA animation
>8 string SSA\ \b, SSA super smooth animation
+>8 string FANT \b, Fantavision animation
>8 string ACBM \b, ACBM continuous image
>8 string FAXX \b, FAXX fax image
+>8 string STFX \b, ST-Fax image
# other formats
>8 string FTXT \b, FTXT formatted text
>8 string CTLG \b, CTLG message catalog
@@ -51,7 +53,11 @@
>8 string PTCH \b, PTCH binary patch
>8 string AMFF \b, AMFF AmigaMetaFile format
>8 string WZRD \b, WZRD StormWIZARD resource
->8 string DOC\ \b, DOC desktop publishing document
+>8 string DOC\040 \b, DOC desktop publishing document
+>8 string SWRT \b, SWRT Final Copy/Writer document
+>8 string WORD \b, ProWrite document
+>8 string WTXT \b, WTXT Wordworth document
+>8 string WOWO \b, WOWO Wordworth document
>8 string WVQA \b, Westwood Studios VQA Multimedia,
>>24 leshort x %d video frames,
>>26 leshort x %d x
diff --git a/magic/Magdir/images b/magic/Magdir/images
index e6ebc5a030f2..6ce087255570 100644
--- a/magic/Magdir/images
+++ b/magic/Magdir/images
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: images,v 1.181 2020/05/30 23:49:03 christos Exp $
+# $File: images,v 1.205 2021/10/18 13:56:29 christos Exp $
# images: file(1) magic for image formats (see also "iff", and "c-lang" for
# XPM bitmaps)
#
@@ -30,24 +30,29 @@
# Conflict with MPEG sequences.
!:strength -40
# Prevent conflicts with CRI ADX.
->(2.S-2) belong !0x28632943
+#>(2.S-2) belong !0x28632943
+# above line does not work for rgb32_top_left_rle.tga
+# skip some MPEG sequence *.vob and some CRI ADX audio with improbable interleave bits
+>17 ubyte&0xC0 !0xC0
# skip more garbage like *.iso by looking for positive image type
>>2 ubyte >0
# skip some compiled terminfo like xterm+tmux by looking for image type less equal 33
>>>2 ubyte <34
+# skip some MPEG sequence *.vob HV001T01.EVO winnicki.mpg with unacceptable alpha channel depth 11
+>>>>17 ubyte&0x0F !11
# skip arches.3200 , Finder.Root , Slp.1 by looking for low pixel depth 1 8 15 16 24 32
->>>>16 ubyte 1
->>>>>0 use tga-image
->>>>16 ubyte 8
->>>>>0 use tga-image
->>>>16 ubyte 15
->>>>>0 use tga-image
->>>>16 ubyte 16
->>>>>0 use tga-image
->>>>16 ubyte 24
->>>>>0 use tga-image
->>>>16 ubyte 32
->>>>>0 use tga-image
+>>>>>16 ubyte 1
+>>>>>>0 use tga-image
+>>>>>16 ubyte 8
+>>>>>>0 use tga-image
+>>>>>16 ubyte 15
+>>>>>>0 use tga-image
+>>>>>16 ubyte 16
+>>>>>>0 use tga-image
+>>>>>16 ubyte 24
+>>>>>>0 use tga-image
+>>>>>16 ubyte 32
+>>>>>>0 use tga-image
# display tga bitmap image information
0 name tga-image
>2 ubyte <34 Targa image data
@@ -88,6 +93,7 @@
# Y origin of image. 0 normal; positive for top
>10 uleshort >0 +%d
# Image descriptor: bits 3-0 give the alpha channel depth, bits 5-4 give direction
+# alpha depth like: 1 8
>17 ubyte&0x0F >0 - %d-bit alpha
# bits 5-4 give direction. normal bottom left
>17 ubyte &0x20 - top
@@ -146,7 +152,7 @@
# VersionLetter
>>>>>&42 ubyte >0x20 \b%c
# KeyColor
->>>>&468 ulelong >0 - keycolor 0x%8.8x
+>>>>&468 ulelong >0 - keycolor %#8.8x
# Denominator of Pixel ratio. 0~no pixel aspect
>>>>&474 uleshort >0
# Numerator
@@ -158,36 +164,47 @@
>>>>>&-4 uleshort >0 - gamma %d
>>>>>&-2 uleshort x \b/%d
# ColorOffset
-#>>>>&480 ulelong x - col offset 0x%8.8x
+#>>>>&480 ulelong x - col offset %#8.8x
# StampOffset
-#>>>>&484 ulelong x - stamp offset 0x%8.8x
+#>>>>&484 ulelong x - stamp offset %#8.8x
# ScanOffset
-#>>>>&488 ulelong x - scan offset 0x%8.8x
+#>>>>&488 ulelong x - scan offset %#8.8x
# AttributesType
-#>>>>&492 ubyte x - Attributes 0x%x
+#>>>>&492 ubyte x - Attributes %#x
## EndOfTGA
# PBMPLUS images
+# URL: https://en.wikipedia.org/wiki/Netpbm
# The next byte following the magic is always whitespace.
-# strength is changed to try these patterns before "x86 boot sector"
+# adding 65 to strength so that Netpbm images comes before "x86 boot sector" or
+# "DOS/MBR boot sector" identified by ./filesystems
0 name netpbm
>3 regex/s =[0-9]{1,50}\ [0-9]{1,50} Netpbm image data
>>&0 regex =[0-9]{1,50} \b, size = %s x
>>>&0 regex =[0-9]{1,50} \b %s
0 search/1 P1
->0 regex/4 P1[\040\t\f\r\n]
->>0 use netpbm
->>0 string x \b, bitmap
+# test for whitespace after 2 byte magic
+>2 regex/2 [\040\t\f\r\n]
+# skip DROID x-fmt-164-signature-id-583.pbm with ten 0 digits
+>>3 string !000000000
+>>>0 use netpbm
+>>>0 string x \b, bitmap
!:strength + 65
!:mime image/x-portable-bitmap
+!:ext pbm
+# check for character # starting a comment line
+>>>3 ubyte =0x23
+>>>>4 string x %s
0 search/1 P2
>0 regex/4 P2[\040\t\f\r\n]
>>0 use netpbm
>>0 string x \b, greymap
!:strength + 65
-!:mime image/x-portable-greymap
+# american spelling gray
+!:mime image/x-portable-graymap
+!:ext pgm
0 search/1 P3
>0 regex/4 P3[\040\t\f\r\n]
@@ -195,6 +212,7 @@
>>0 string x \b, pixmap
!:strength + 65
!:mime image/x-portable-pixmap
+!:ext ppm
0 string P4
>0 regex/4 P4[\040\t\f\r\n]
@@ -202,6 +220,7 @@
>>0 string x \b, rawbits, bitmap
!:strength + 65
!:mime image/x-portable-bitmap
+!:ext pbm
0 string P5
>0 regex/4 P5[\040\t\f\r\n]
@@ -209,6 +228,7 @@
>>0 string x \b, rawbits, greymap
!:strength + 65
!:mime image/x-portable-greymap
+!:ext pgm
0 string P6
>0 regex/4 P6[\040\t\f\r\n]
@@ -216,9 +236,24 @@
>>0 string x \b, rawbits, pixmap
!:strength + 65
!:mime image/x-portable-pixmap
+!:ext ppm/pnm
-0 string P7 Netpbm PAM image file
-!:mime image/x-portable-pixmap
+# URL: https://en.wikipedia.org/wiki/Netpbm#PAM_graphics_format
+# Reference: http://fileformats.archiveteam.org/wiki/Portable_Arbitrary_Map
+# Update: Joerg Jenderek
+0 string P7
+# skip DROID fmt-405-signature-id-589.pam by looking for character like New Line
+>2 ubyte !0xAB
+#>2 ubyte =0x0A
+>>3 search/256/b WIDTH Netpbm PAM image file, size =
+!:mime image/x-portable-arbitrarymap
+!:ext pam
+!:strength + 65
+>>>&1 string x %s
+>>>3 search/256/b HEIGHT x
+>>>>&1 string x %s
+# at offset 2 a New Line character (0xA) should appear
+>>>2 ubyte !0x0A \b, %#x at offset 2 instead new line
# From: bryanh@giraffe-data.com (Bryan Henderson)
0 string \117\072 Solitaire Image Recorder format
@@ -256,16 +291,32 @@
>10 byte x \b, version %d.
>11 byte x \b%d
+# Fujifilm RAF RAW image files with embedded JPEG data and compressed
+# or uncompressed CFA RAW data. Byte order: Big Endian.
+# URL: https://libopenraw.freedesktop.org/formats/raf/
+# Useful info from http://fileformats.archiveteam.org/wiki/Fujifilm_RAF.
+# File extension: RAF
+# Works for both the FinePix S2 Pro and the X-T3. Anybody have some more Fuji
+# raw samples available?
+# -- David Dyer-Bennet <dd-b@dd-b.net> 9-Sep-2021
+0 string FUJIFILMCCD-RAW Fujifilm RAF raw image data
+!:mime image/x-fuji-raf
+!:ext raf
+>0x10 string x \b, format version %4.4s
+>0x1C string x \b, camera %s
+
# Tag Image File Format, from Daniel Quinlan (quinlan@yggdrasil.com)
# The second word of TIFF files is the TIFF version number, 42, which has
# never changed. The TIFF specification recommends testing for it.
0 string MM\x00\x2a TIFF image data, big-endian
!:strength +70
!:mime image/tiff
+!:ext tif,tiff
>(4.L) use \^tiff_ifd
0 string II\x2a\x00 TIFF image data, little-endian
!:mime image/tiff
!:strength +70
+!:ext tif,tiff
>(4.l) use tiff_ifd
0 name tiff_ifd
@@ -312,7 +363,7 @@
>>>8 leshort 0x8798 \bJPEG2000
>>>8 leshort 0x8799 \bNikon NEF Compressed
>>>8 default x
->>>>8 leshort x \b(unknown 0x%x)
+>>>>8 leshort x \b(unknown %#x)
>>>12 use tiff_entry
>0 leshort 0x106 \b, PhotometricIntepretation=
>>8 clear x
@@ -325,7 +376,7 @@
>>8 leshort 6 \bYCbCr
>>8 leshort 8 \bCIELab
>>8 default x
->>>8 leshort x \b(unknown=0x%x)
+>>>8 leshort x \b(unknown=%#x)
>>12 use tiff_entry
# FillOrder
>0 leshort 0x10a
@@ -410,7 +461,7 @@
>0 leshort 0x8825 \b, GPS-Data
>>12 use tiff_entry
-#>0 leshort x \b, unknown=0x%x
+#>0 leshort x \b, unknown=%#x
#>>12 use tiff_entry
0 string MM\x00\x2b Big TIFF image data, big-endian
@@ -478,6 +529,7 @@
!:strength +80
!:mime image/gif
!:apple 8BIMGIFf
+!:ext gif
>4 string 7a \b, version 8%s,
>4 string 9a \b, version 8%s,
>6 leshort >0 %d x
@@ -506,7 +558,7 @@
# http://www.nationalarchives.gov.uk/pronom/fmt/930
0 search/256/bc id=imagemagick
# skip bad ASCII text by following new line~0x0A or space~0x20 character
-#>&0 ubyte x \b, next character 0x%x
+#>&0 ubyte x \b, next character %#x
# called by TriD ImageMagick Machine independent File Format bitmap
>&0 ubyte&0xD5 0 MIFF image data
# https://reposcope.com/mimetype/image/miff
@@ -580,18 +632,31 @@
0 string Sfff structured fax file
# From: Joerg Jenderek <joerg.jen.der.ek@gmx.net>
-# most files with the extension .EPA and some with .BMP
+# URL: http://fileformats.archiveteam.org/wiki/Award_BIOS_logo
+# Note: verified by XnView command `nconvert -fullinfo *.EPA`
0 string \x11\x06 Award BIOS Logo, 136 x 84
!:mime image/x-award-bioslogo
+!:ext epa
0 string \x11\x09 Award BIOS Logo, 136 x 126
!:mime image/x-award-bioslogo
+!:ext epa
+# https://telparia.com/fileFormatSamples/image/epa/IO.EPA
+# Note: by bitmap-awbm-v1x1009.trid.xml called "Award BIOS logo bitmap (128x126) (v1)"
+# verified by RECOIL `recoil2png -o tmp.png IO.EPA; file tmp.png`
+0 string \x10\x09 Award BIOS Logo, 128 x 126
+!:mime image/x-award-bioslogo
+!:ext epa
#0 string \x07\x1f BIOS Logo corrupted?
# http://www.blackfiveservices.co.uk/awbmtools.shtml
# http://biosgfx.narod.ru/v3/
# http://biosgfx.narod.ru/abr-2/
0 string AWBM
->4 leshort <1981 Award BIOS bitmap
-!:mime image/x-award-bmp
+# Note: by bitmap-awbm.trid.xml called "Award BIOS logo bitmap (v2)"
+>4 leshort <1981 Award BIOS Logo, version 2
+#>4 leshort <1981 Award BIOS bitmap
+!:mime image/x-award-bioslogo2
+#!:mime image/x-award-bmp
+!:ext epa/bmp
# image width is a multiple of 4
>>4 leshort&0x0003 0
>>>4 leshort x \b, %d
@@ -615,7 +680,7 @@
0 leshort 40
# skip bad samples like GAME by looking for valid number of color planes
>12 uleshort 1 Device independent bitmap graphic
-!:mime image/bmp
+!:mime image/x-ms-bmp
!:apple ????BMPp
!:ext dib
>>4 lelong x \b, %d x
@@ -635,12 +700,104 @@
#>>32 ulelong >0 \b, %u colors
# number of important colors used, or 0 when every color is important
>>36 ulelong >0 \b, %u important colors
+# From: Joerg Jenderek
+# URL: http://fileformats.archiveteam.org/wiki/VBM_(VDC_BitMap)
+# Reference: http://csbruce.com/cbm/postings/csc19950906-1.txt
+# http://mark0.net/download/triddefs_xml.7z
+# defs/b/bitmap-vbm.trid.xml
+# defs/b/bitmap-vbm-v3.trid.xml
+# Note: called "VDC BitMap" by TrID
+# verified by RECOIL `recoil2png -o tmp.png coke_can.vbm; file tmp.png`
+# begin with a signature of 'B' 'M' 0xCB, followed by a version byte 2 or 3
+# Similar to the unrelated Windows BMP format
+# check for VDC bitmap and then display image dimension and version
+0 name bitmap-vbm
+>2 ubyte 0xCB VDC bitmap
+!:mime image/x-commodore-vbm
+# http://recoil.sourceforge.net/formats.html
+!:ext bm/vbm
+# the VBM format version number: 2 or 3
+>>3 ubyte x \b, version %u
+# width of the image in Hi/Lo format
+>>4 ubeshort x \b, %u
+# height of the image
+>>6 ubeshort x x %u
+# version 3 images have the following additional header information
+>>3 ubyte =3
+# data-encoding type: 0~uncompressed 1~RLE-compressed
+>>>8 ubyte 0 \b, uncompressed
+>>>8 ubyte 1 \b, RLE-compressed
+# byte code for general RLE repetitions
+#>>>9 ubyte x \b, RLE repetition code 0x%x
+# reserved := 0
+#>>>14 short >0 \b, reserved 0x%x
+# length of comment text; 0~no comment text
+#>>>16 ubeshort >0 \b, comment length %u
+>>>16 pstring/H >0 \b, comment "%s"
+#
0 string BM
->14 leshort 12 PC bitmap, OS/2 1.x format
-!:mime image/x-ms-bmp
+# check for magic and version 2 of VDC bitmap or BMP with cbSize=715=CB02
+>2 beshort 0xCB02
+>>6 short =0
+>>>0 use bitmap-bmp
+# VDC bitmap height or maybe a few OS/2 BMP with nonzero "hotspot coordinates"
+>>6 short !0
+>>>0 use bitmap-vbm
+# check for magic and version 3 of VDC bitmap or BMP with cbSize=971=CB03
+>2 beshort 0xCB03
+# check for reserved value (=0) of VDC bitmap
+>>14 short =0
+>>>0 use bitmap-vbm
+# BMP with cbSize=????03CBh and dib header size != 0
+>>14 short !0
+>>>0 use bitmap-bmp
+# cbSize is size of header or file size of Windows BMP bitmap
+>2 default x
+>>0 use bitmap-bmp
+0 name bitmap-bmp
+>14 lelong 12 PC bitmap, OS/2 1.x format
+!:mime image/bmp
+!:ext bmp
>>18 leshort x \b, %d x
>>20 leshort x %d
->14 leshort 64 PC bitmap, OS/2 2.x format
+# number of color planes (must be 1)
+#>>22 leshort !1 \b, %u color planes
+# number of bits per pixel (color depth); found 4 8
+>>24 leshort x x %d
+# x, y coordinates of the hotspot
+>>6 uleshort >0 \b, hotspot %ux
+>>>8 uleshort x \b%u
+# cbSize; size of file or header like 1Ah 228C8h
+>>2 ulelong x \b, cbSize %u
+#>>2 ulelong x \b, cbSize 0x%8.8x
+# offBits; offset to bitmap data like:
+>>10 ulelong x \b, bits offset %u
+# http://fileformats.archiveteam.org/wiki/BMP#OS.2F2_BMP_2.0 no examples found
+>14 ulelong 48 PC bitmap, OS/2 2.x format (DIB header size=48)
+>14 ulelong 24 PC bitmap, OS/2 2.x format (DIB header size=24)
+# http://entropymine.com/jason/bmpsuite/bmpsuite/q/pal8os2v2-16.bmp
+# Note: by bitmap-bmp-v2o.trid.xml called "Windows Bitmap (v2o)"
+>14 ulelong 16 PC bitmap, OS/2 2.x format (DIB header size=16)
+!:mime image/bmp
+!:apple ????BMPp
+!:ext bmp
+# image width and height fields are unsigned integers for OS/2
+>>18 ulelong x \b, %u x
+>>22 ulelong x %u
+# number of bits per pixel (color depth); found 8
+>>28 uleshort >1 x %u
+# x, y coordinates of the hotspot
+>>6 uleshort >0 \b, hotspot %ux
+>>>8 uleshort x \b%u
+# number of color planes (must be 1)
+#>>26 uleshort >1 \b, %u color planes
+# cbSize; size of file like: 241E
+>>2 ulelong x \b, cbSize %u
+#>>2 ulelong x \b, cbSize 0x%x
+# offBits; offset to bitmap data like: 41E
+>>10 ulelong x \b, bits offset %u
+#>>10 ulelong x \b, bits offset 0x%x
+>14 lelong 64 PC bitmap, OS/2 2.x format
!:mime image/bmp
!:apple ????BMPp
!:ext bmp
@@ -655,30 +812,53 @@
>>26 uleshort >1 \b, %u color planes
# cbSize; size of file or headers
>>2 ulelong x \b, cbSize %u
-#>>2 ulelong x \b, cbSize 0x%x
+# BMP with cbSize 000002CBh=715 or 000003CBh=971 maybe misinterpreted as VDC bitmap
+#>>2 ulelong x \b, cbSize %#x
# offBits; offset to bitmap data like 56h 5Eh 8Eh 43Eh
>>10 ulelong x \b, bits offset %u
-#>>10 ulelong x \b, bits offset 0x%x
-#>>(10.l) ubequad !0 \b, bits 0x%16.16llx
+#>>10 ulelong x \b, bits offset %#x
+#>>(10.l) ubequad !0 \b, bits %#16.16llx
# BITMAPV2INFOHEADER adds RGB bit masks
->14 leshort 52 PC bitmap, Adobe Photoshop
+>14 lelong 52 PC bitmap, Adobe Photoshop
!:mime image/bmp
!:apple ????BMPp
!:ext bmp
>>18 lelong x \b, %d x
>>22 lelong x %d x
+# number of bits per pixel (color depth); found 16 32
>>28 leshort x %d
+# x, y coordinates of the hotspot; should be zero for Windows variant
+>>6 uleshort >0 \b, hotspot %ux
+>>>8 uleshort x \b%u
+# cbSize; size of file like: 14A 7F42
+>>2 ulelong x \b, cbSize %u
+#>>2 ulelong x \b, cbSize 0x%x
+# offBits; offset to bitmap data like: 42h
+>>10 ulelong x \b, bits offset %u
+#>>10 ulelong x \b, bits offset 0x%x
# BITMAPV3INFOHEADER adds alpha channel bit mask
->14 leshort 56 PC bitmap, Adobe Photoshop with alpha channel mask
+>14 lelong 56 PC bitmap, Adobe Photoshop with alpha channel mask
!:mime image/bmp
!:apple ????BMPp
!:ext bmp
>>18 lelong x \b, %d x
>>22 lelong x %d x
+# number of bits per pixel (color depth); found 16 32
>>28 leshort x %d
->14 leshort 40
+# x, y coordinates of the hotspot; should be zero for Windows variant
+>>6 uleshort >0 \b, hotspot %ux
+>>>8 uleshort x \b%u
+# cbSize; size of file like: 4E 7F46 131DE 14046h
+>>2 ulelong x \b, cbSize %u
+#>>2 ulelong x \b, cbSize 0x%x
+# offBits; offset to bitmap data like: 46h
+>>10 ulelong x \b, bits offset %u
+#>>10 ulelong x \b, bits offset 0x%x
+>14 lelong 40
# jump 4 bytes before end of file/header to skip fmt-116-signature-id-118.dib
->>(2.l-4) ulong x PC bitmap, Windows 3.x format
+# broken for large bitmaps
+#>>(2.l-4) ulong x PC bitmap, Windows 3.x format
+>>14 lelong 40 PC bitmap, Windows 3.x format
!:mime image/bmp
!:apple ????BMPp
>>>18 lelong x \b, %d x
@@ -690,7 +870,16 @@
# compression method 2~RLE 4-bit/pixel implies also extension rle
>>>>30 ulelong 2 x
!:ext bmp/rle
->>>>30 default x x
+# not RLE compressed and not 320x400 dimension
+>>>>30 default x
+# "small" dimensions like: 14x15 15x16 16x14 16x16 32x32
+# https://en.wikipedia.org/wiki/Favicon
+>>>>>18 ulequad&0xffFFffC0ffFFffC0 =0 x
+# https://www.politi-kdigital.de/favicon.ico
+# http://forum.rpc1.org/favicon.ico
+!:ext bmp/ico
+# "big" dimensions > 63
+>>>>>18 default x x
!:ext bmp
# number of bits per pixel (color depth); found 1 2 4 8 16 24 32
>>>28 leshort x %d
@@ -713,26 +902,45 @@
>>>50 ulelong >0 \b, %u important colors
# cbSize; often size of file
>>>2 ulelong x \b, cbSize %u
-#>>>2 ulelong x \b, cbSize 0x%x
+#>>>2 ulelong x \b, cbSize %#x
# offBits; offset to bitmap data like 36h 76h BEh 236h 406h 436h 4E6h
>>>10 ulelong x \b, bits offset %u
-#>>>10 ulelong x \b, bits offset 0x%x
-#>>>(10.l) ubequad !0 \b, bits 0x%16.16llxd
->14 leshort 124 PC bitmap, Windows 98/2000 and newer format
-!:mime image/x-ms-bmp
->>18 lelong x \b, %d x
->>22 lelong x %d x
->>28 leshort x %d
->14 leshort 108 PC bitmap, Windows 95/NT4 and newer format
-!:mime image/x-ms-bmp
+#>>>10 ulelong x \b, bits offset %#x
+#>>>(10.l) ubequad !0 \b, bits %#16.16llxd
+>14 lelong 124 PC bitmap, Windows 98/2000 and newer format
+!:mime image/bmp
+!:ext bmp
>>18 lelong x \b, %d x
>>22 lelong x %d x
+# color planes; must be 1
+#>>>26 uleshort >1 \b, %u color planes
+# 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)
>>28 leshort x %d
->14 leshort 128 PC bitmap, Windows NT/2000 format
-!:mime image/x-ms-bmp
+# x, y coordinates of the hotspot; should be zero for Windows variant
+>>6 leshort >0 \b, hotspot %ux
+>>>8 leshort x \b%u
+# cbSize; size of file like: 8E AA 48A 999 247A 4F02 7F8A 3F88E B216E 1D4C8A 100008A
+>>2 ulelong x \b, cbSize %u
+#>>2 ulelong x \b, cbSize 0x%x
+# offBits; offset to bitmap data like: 8A 47A ABABABAB (fmt-119-signature-id-121.bmp)
+>>10 ulelong x \b, bits offset %u
+#>>10 ulelong x \b, bits offset 0x%x
+>14 lelong 108 PC bitmap, Windows 95/NT4 and newer format
+!:mime image/bmp
+!:ext bmp
>>18 lelong x \b, %d x
>>22 lelong x %d x
+# number of bits per pixel (color depth); found 8 24 32
>>28 leshort x %d
+# x, y coordinates of the hotspot; should be zero for Windows variant
+>>6 leshort >0 \b, hotspot %ux
+>>>8 leshort x \b%u
+# cbSize; size of file like: 82 8A 9A 9F86 1E07A 3007A 88B7A C007A
+>>2 ulelong x \b, cbSize %u
+#>>2 ulelong x \b, cbSize 0x%x
+# offBits; offset to bitmap data like: 7A 7E 46A
+>>10 ulelong x \b, bits offset %u
+#>>10 ulelong x \b, bits offset 0x%x
# Update: Joerg Jenderek
# URL: http://fileformats.archiveteam.org/wiki/OS/2_Icon
# Reference: http://www.fileformat.info
@@ -752,7 +960,7 @@
>>8 uleshort x \b%u
# offBits; offset in bytes to the beginning of the bit-map pel data like 20h
>>10 ulelong x \b, bits offset %u
-#>>(10.l) ubequad x \b, bits 0x%16.16llx
+#>>(10.l) ubequad x \b, bits %#16.16llx
#0 string PI PC pointer image data
#0 string CI PC color icon data
0 string CI
@@ -790,16 +998,24 @@
#>>2 ulelong x \b, cbSize %x
# offBits; offset to bitmap data (pixel array) like E4h 3Ah 66h 6Ah 33Ah 4A4h
>>10 ulelong x \b, bits offset %u
-#>>10 ulelong x \b, bits offset 0x%x
-#>>(10.l) ubequad !0 \b, bits 0x%16.16llx
+#>>10 ulelong x \b, bits offset %#x
+#>>(10.l) ubequad !0 \b, bits %#16.16llx
# dib header size: 12~Ch~OS/2 1.x 64~40h~OS/2 2.x
#>>14 ulelong x \b, dib header size %u
#0 string CP PC color pointer image data
# URL: http://fileformats.archiveteam.org/wiki/OS/2_Pointer
# Reference: http://www.fileformat.info/format/os2bmp/egff.htm
0 string CP
+# skip many Corel Photo-Paint image "CPT9FILE" by checking for positive bits offset
+>10 ulelong >0
# skip CPU-Z Report by checking for valid dib header sizes 12 or 64
->14 ulelong <65 OS/2
+>>14 ulelong =12
+>>>0 use os2-ptr
+>>14 ulelong =64
+>>>0 use os2-ptr
+# display information of OS/2 pointer bitmaps
+0 name os2-ptr
+>14 ulelong x OS/2
# http://extension.nirsoft.net/PTR
!:mime image/x-ibm-pointer
!:ext ptr
@@ -831,8 +1047,8 @@
#>>2 ulelong x \b, cbSize %x
# offBits; offset to bitmap data (pixel array) like 6Ah A4h E4h 4A4h
>>10 ulelong x \b, bits offset %u
-#>>10 ulelong x \b, bits offset 0x%x
-#>>(10.l) ubequad !0 \b, bits 0x%16.16llx
+#>>10 ulelong x \b, bits offset %#x
+#>>(10.l) ubequad !0 \b, bits %#16.16llx
# dib header size: 12~Ch~OS/2 1.x 64~40h~OS/2 2.x
#>>14 ulelong x \b, dib header size %u
# Conflicts with other entries [BABYL]
@@ -846,11 +1062,11 @@
#!:apple ????BMPf
# cbSize; size of header like 28h 5Ch
>>2 ulelong x \b, cbSize %u
-#>>2 ulelong x \b, cbSize 0x%x
+#>>2 ulelong x \b, cbSize %#x
# offNext; offset to data like 0 48h F2h 4Eh 64h C6h D2h D6h DAh E6h EAh 348h
>>6 ulelong >0 \b, data offset %u
-#>>6 ulelong >0 \b, data offset 0x%x
-#>>(6.l) ubequad !0 \b, data 0x%16.16llx
+#>>6 ulelong >0 \b, data offset %#x
+#>>(6.l) ubequad !0 \b, data %#16.16llx
# dimensions of the intended device like 640 x 480 for VGA or 1024 x 768
>>10 uleshort >0 \b, display %u
>>>12 uleshort >0 x %u
@@ -1025,6 +1241,22 @@
# https://www.atarimax.com/jindroush.atari.org/afmtatr.html
0 leshort 0x0296 Atari ATR image
+# From: Joerg Jenderek
+# URL: http://fileformats.archiveteam.org/wiki/ImageLab/PrintTechnic
+# Reference: http://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-b_w.trid.xml
+# Note: called "ImageLab bitmap" by TrID
+# verfied by XnView `nconvert -fullinfo "MAEDCHEN.B&W"`
+0 string B&W256 ImageLab bitmap
+!:mime image/x-ilab
+# https://www.xnview.com/de/image_formats/
+# GRR: add char & inside parse_ext in ../../src/apprentice.c to avoid in file version 5.40 error like:
+# Magdir\images, 1090: Warning: EXTENSION type ` b_w/b&w' has bad char '&'
+!:ext b_w/b&w
+# Width
+>6 ubeshort x \b, %u
+# Height
+>8 ubeshort x x %u
+
# XXX:
# This is bad magic 0x5249 == 'RI' conflicts with RIFF and other
# magic.
@@ -1082,30 +1314,63 @@
# Adobe Photoshop
# From: Asbjoern Sloth Toennesen <asbjorn@lila.io>
-0 string 8BPS Adobe Photoshop Image
+# URL: http://fileformats.archiveteam.org/wiki/PSD
+# Reference: https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/
+# Note: verfied by XnView `nconvert -fullinfo *.psd *.psb *.pdd`
+# and ImageMagick `identify -verbose *.pdd`
+0 string 8BPS
+# skip DROID x-fmt-92-signature-id-277.psd by checking valid width
+>18 belong >0 Adobe Photoshop
!:mime image/vnd.adobe.photoshop
->4 beshort 2 (PSB)
->18 belong x \b, %d x
->14 belong x %d,
->24 beshort 0 bitmap
->24 beshort 1 grayscale
->>12 beshort 2 with alpha
->24 beshort 2 indexed
->24 beshort 3 RGB
->>12 beshort 4 \bA
->24 beshort 4 CMYK
->>12 beshort 5 \bA
->24 beshort 7 multichannel
->24 beshort 8 duotone
->24 beshort 9 lab
->12 beshort > 1
->>12 beshort x \b, %dx
->12 beshort 1 \b,
->22 beshort x %d-bit channel
->12 beshort > 1 \bs
+!:apple ????8BPS
+# version: always equal to 1, but 2 for PSB
+>>4 beshort 1
+# URL: http://fileformats.archiveteam.org/wiki/PhotoDeluxe
+# EXTRAS/PHOTOS/DEMOPIX/ORIGINAL.PDD
+>>>34 search/0xC0d7 PHUT Image (PhotoDeluxe)
+!:ext pdd
+>>>34 default x Image
+!:ext psd
+# URL: http://fileformats.archiveteam.org/wiki/PSB
+>>4 beshort 2 Image (PSB)
+!:ext psb
+# width in pixels: 1-30000 1-300000 for PSB
+>>18 belong x \b, %d x
+>>14 belong x %d,
+# The color mode; 0~Bitmap 1~Grayscale 2~Indexed 3~RGB 4~CMYK 7~Multichannel 9~Duotone 9~Lab
+>>24 beshort 0 bitmap
+>>24 beshort 1 grayscale
+# the number of channels; range is 1 to 56
+>>>12 beshort 2 with alpha
+>>24 beshort 2 indexed
+>>24 beshort 3 RGB
+>>>12 beshort 4 \bA
+>>24 beshort 4 CMYK
+>>>12 beshort 5 \bA
+>>24 beshort 7 multichannel
+>>24 beshort 8 duotone
+>>24 beshort 9 lab
+>>12 beshort > 1
+>>>12 beshort x \b, %dx
+>>12 beshort 1 \b,
+>>22 beshort x %d-bit channel
+>>12 beshort > 1 \bs
+# 6 reserved bytes; must be zero, but spaces inside ImageMagick input.psd
+# https://download.imagemagick.org/ImageMagick/download/ImageMagick-7.0.11-11.zip
+# ImageMagick-7.0.11-11\PerlMagick\t\input.psd
+>>6 bequad&0xFFffFFffFFff0000 !0 \b, at offset 6
+>>>6 belong x 0x%8.8x
+>>>6 beshort x \b%4.4x
# XV thumbnail indicator (ThMO)
+# URL: https://en.wikipedia.org/wiki/Xv_(software)
+# Reference: http://fileformats.archiveteam.org/wiki/XV_thumbnail
+# Update: Joerg Jenderek
0 string P7\ 332 XV thumbnail image data
+#0 string P7\ 332 XV "thumbnail file" (icon) data
+!:mime image/x-xv-thumbnail
+# thumbnail .xvpic/foo.bar for graphic foo.bar
+!:ext p7/gif/tif/xpm/jpg
# NITF is defined by United States MIL-STD-2500A
0 string NITF National Imagery Transmission Format
@@ -1211,10 +1476,6 @@
0 string Paint\ Shop\ Pro\ Image\ File Paint Shop Pro Image File
-# "thumbnail file" (icon)
-# descended from "xv", but in use by other applications as well (Wolfram Kleff)
-0 string P7\ 332 XV "thumbnail file" (icon) data
-
# taken from fkiss: (<yav@mte.biglobe.ne.jp> ?)
0 string KiSS KISS/GS
>4 byte 16 color
@@ -1273,7 +1534,22 @@
# DCX is multi-page PCX, using a simple header of up to 1024
# offsets for the respective PCX components.
# From: Joerg Wunsch <joerg_wunsch@uriah.heep.sax.de>
-0 lelong 987654321 DCX multi-page PCX image data
+# Update: Joerg Jenderek
+# URL: http://fileformats.archiveteam.org/wiki/DCX
+0 lelong 987654321 DCX multi-page
+# http://www.nationalarchives.gov.uk/pronom/x-fmt/348
+!:mime image/x-dcx
+!:ext dcx
+# The first file offset usually starts at file offset 0x1004
+# print 1 space after 0x100? offset and then handles PCX images by ./images
+>4 lelong x \b, at %#x
+>(4.l) indirect x
+# possible 2nd PCX image
+#>8 lelong !0 \b, at %#x
+#>>(8.l) indirect x
+# possible 3rd PCX image
+#>12 lelong !0 \b, at %#x
+#>>(12.l) indirect x
# Simon Walton <simonw@matteworld.com>
# Kodak Cineon format for scanned negatives
@@ -1383,36 +1659,72 @@
>768 beshort 7 bottom to top/right to left
# From: Tom Hilinski <tom.hilinski@comcast.net>
-# https://www.unidata.ucar.edu/packages/netcdf/
+# https://www.unidata.ucar.edu/software/netcdf/
0 string CDF\001 NetCDF Data Format data
# 64-bit offset netcdf Classic https://www.unidata.ucar.edu/software/netcdf/docs/file_format_specifications
0 string CDF\002 NetCDF Data Format data (64-bit offset)
-#-----------------------------------------------------------------------
+# From: Michael Liu
+# https://en.wikipedia.org/wiki/Common_Data_Format
+0 belong 0xCDF30001 Common Data Format (Version 3 or later) data
+!:mime application/x-cdf
+
+0 belong 0xCDF26002 Common Data Format (Version 2.6 or 2.7) data
+!:mime application/x-cdf
+
+0 belong 0x0000FFFF Common Data Format (Version 2.5 or earlier) data
+!:mime application/x-cdf
+
# Hierarchical Data Format, used to facilitate scientific data exchange
# specifications at http://hdf.ncsa.uiuc.edu/
+# URL: http://fileformats.archiveteam.org/wiki/HDF
+# https://en.wikipedia.org/wiki/Hierarchical_Data_Format
+# Reference: https://portal.hdfgroup.org/download/attachments/52627880/HDF5_File_Format_Specification_Version-3.0.pdf
0 belong 0x0e031301 Hierarchical Data Format (version 4) data
!:mime application/x-hdf
+!:ext hdf/hdf4/h4
0 string \211HDF\r\n\032\n Hierarchical Data Format (version 5) data
-!:mime application/x-hdf
-512 string \211HDF\r\n\032\n Hierarchical Data Format (version 5) with 512 bytes user block
-!:mime application/x-hdf
+#!:mime application/x-hdf
+!:mime application/x-hdf5
+!:ext h5/hdf5/hdf/he5
+512 string \211HDF\r\n\032\n
+# skip Matlab v5 mat-file testhdf5_7.4_GLNX86.mat handled by ./mathematica
+>0 string !MATLAB Hierarchical Data Format (version 5) with 512 bytes user block
+#!:mime application/x-hdf
+!:mime application/x-hdf5
+!:ext h5/hdf5/hdf/he5
1024 string \211HDF\r\n\032\n Hierarchical Data Format (version 5) with 1k user block
-!:mime application/x-hdf
+#!:mime application/x-hdf
+!:mime application/x-hdf5
+!:ext h5/hdf5/hdf/he5
2048 string \211HDF\r\n\032\n Hierarchical Data Format (version 5) with 2k user block
-!:mime application/x-hdf
+#!:mime application/x-hdf
+!:mime application/x-hdf5
+!:ext h5/hdf5/hdf/he5
4096 string \211HDF\r\n\032\n Hierarchical Data Format (version 5) with 4k user block
-!:mime application/x-hdf
-
+#!:mime application/x-hdf
+!:mime application/x-hdf5
+!:ext h5/hdf5/hdf/he5
# From: Tobias Burnus <burnus@net-b.de>
# Xara (for a while: Corel Xara) is a graphic package, see
# http://www.xara.com/ for Windows and as GPL application for Linux
0 string XARA\243\243 Xara graphics file
+# From: Joerg Jenderek
+# URL: http://fileformats.archiveteam.org/wiki/Corel_Gallery
+# Reference: http://mark0.net/download/triddefs_xml.7z/defs/b/bmf-corel.trid.xml
+# Note: called "Corel Binary Material Format" by TrID and
+# "Corel Flow" by XnView
+0 string @CorelBMF\n\rCorel\040Corporation Corel GALLERY Clipart
+!:mime image/x-corel-bmf
+!:ext bmf
+
# https://www.cartesianinc.com/Tech/
+# Reference: http://fileformats.archiveteam.org/wiki/Cartesian_Perceptual_Compression
0 string CPC\262 Cartesian Perceptual Compression image
!:mime image/x-cpi
+!:ext cpi/cpc
# From Albert Cahalan <acahalan@gmail.com>
# puredigital used it for the CVS disposable camcorder
@@ -1600,7 +1912,7 @@
>>101 beshort&0xf0 0x60 \bNCOMPONENT
>>101 beshort&0xf0 0x70 \bRGB
>>101 beshort&0xf0 0x80 \bRGBE
->>101 beshort&0xf0 >0x80 \b(reserved 0x%x)
+>>101 beshort&0xf0 >0x80 \b(reserved %#x)
# From: Johan van der Knijff <johan.vanderknijff@kb.nl>
#
@@ -1624,25 +1936,75 @@
>>8 string x \b, "%4.4s" type
# TIM images
-0 lelong 0x00000010 TIM image,
->4 lelong 0x8 4-Bit,
->4 lelong 0x9 8-Bit,
->4 lelong 0x2 15-Bit,
->4 lelong 0x3 24-Bit,
->4 lelong &8
->>(8.l+12) leshort x Pixel at (%d,
->>(8.l+14) leshort x \b%d)
->>(8.l+16) leshort x Size=%dx
->>(8.l+18) leshort x \b%d,
->>4 lelong 0x8 16 CLUT Entries at
->>4 lelong 0x9 256 CLUT Entries at
->>12 leshort x (%d,
->>14 leshort x \b%d)
->4 lelong ^8
->>12 leshort x Pixel at (%d,
->>14 leshort x \b%d)
->>16 leshort x Size=%dx
->>18 leshort x \b%d
+# URL: http://fileformats.archiveteam.org/wiki/TIM_(PlayStation_graphics)
+# Reference: https://mrclick.zophar.net/TilEd/download/timgfx.txt
+# Update: Joerg Jenderek
+# Note: called as "PSX TIM *bpp bitmap" by bitmap-tim-*.trid.xml
+# verified as "TIM PSX" by XnView `nconvert -fullinfo *.tim` and
+# by RECOIL `recoil2png -o TMP.PNG input.tim; file TMP.PNG` and often
+# as "PSX TIM" by ImageMagick version 7.1.0-10 command `identify *.tim`
+# here signed integers are used but according to Kaitai unsigned
+0 lelong 0x00000010
+# 32 Flag bits *cttt; c~CLUT flag t~type 000~4BPP 001~8BPP 010~16BPP 011~24BPP 100~Mixed
+#>4 lelong x FLAGS=%#x
+# 12+Size of CLUT (2Ch for 4BPP; 20Ch 40Ch 60Ch 80Ch C0Ch for 8BPP) or
+# +image data size (800Ch 2000Ch 2580C for 16BPP) (02000003h for dBase memo test.dbt)
+#>8 lelong x \b, 12+CLUT or data size=%#8.8x
+# CLUT or data size remainder is 12 (Ch), but 03 for dBase memo test.dbt
+#>8 ubyte&0x0F =0x0C \b, SIZE REMAINDER IS 12
+# skip dBase III memo test.dbt with invalid flags 22D10189h
+>4 lelong&0xffFFffF0 =0 Sony PlayStation PSX image,
+# file (version 5.40) labeled the above entry as "TIM image"
+!:mime image/x-sony-tim
+!:ext tim
+#>>4 lelong&0x00000007 x \b, BPP~%u
+# 4BPP and 8BPP examples exist with CLUT or without CLUT
+>>4 lelong&0x07 0x0 4-Bit,
+>>4 lelong&0x07 0x1 8-Bit,
+# 16BPP and 24BPP examples have no CLUT
+>>4 lelong 0x2 15-Bit,
+>>4 lelong 0x3 24-Bit,
+# no example
+>>4 lelong&0x07 0x4 Mixed-Bit,
+# CLUT flag set
+>>4 lelong &8
+# 12 + size of CLUT like: 1000Ch 800Ch 400Ch 40Ch and 2FEh (KAGE.TIM)
+#>>>(8.l+8) lelong x \b, 12+CLUT SIZE=%#8.8x
+>>>(8.l+12) leshort x Pixel at (%d,
+>>>(8.l+14) leshort x \b%d) Size=
+# image width (to get actual width multiply by 4 for 4BPP and by 2 for 8BPP)
+>>>>4 lelong 0x8
+>>>>>(8.l+16) leshort*4 x \b%d
+>>>>4 lelong 0x9
+>>>>>(8.l+16) leshort*2 x \b%d
+# image height like: 32 64 128 144 160 208 256
+>>>(8.l+18) leshort x \bx%d,
+>>>4 lelong 0x8 16 CLUT Entries at
+>>>4 lelong 0x9 256 CLUT Entries at
+>>>12 leshort x (%d,
+>>>14 leshort x \b%d)
+# no Color LookUp Table (CLUT)
+>>4 lelong ^8
+# image orgin X Y
+>>>12 leshort x Pixel at (%d,
+>>>14 leshort x \b%d) Size=
+# real image width = multiply by 4 (4BPP) 2 (8BPP) 1 (16BPP) 2/3 (24BPP)
+>>>>4 lelong 0x0
+>>>>>16 leshort*4 x \b%d
+>>>>4 lelong 0x1
+>>>>>16 leshort*2 x \b%d
+>>>>4 lelong 0x2
+>>>>>16 leshort x \b%d
+>>>>4 lelong 0x3
+# GRR: NOT working
+#>>>>>16 leshort*2/3 x \b%d
+>>>>>16 leshort x \b2/3*%d
+# mixed format width not explained!
+>>>>4 lelong 0x4
+>>>>>16 leshort x \b%d
+# image height like: 64 240 256
+>>>18 leshort x \bx%d
+# TIM image data
# MDEC streams
0 lelong 0x80010160 MDEC video stream,
@@ -1984,8 +2346,9 @@
# Supercompression enum.
0 name khronos-ktx2-supercompression
->0 lelong 1 Basis Universal
+>0 lelong 1 BasisLZ
>0 lelong 2 Zstandard
+>0 lelong 3 ZLIB
# Vulkan format identifier.
# NOTE: Formats prohibited from KTX2 are commented out.
@@ -2567,3 +2930,134 @@
>4 byte 0 Apple QuickTake 150 Raw Image
>4 byte >0 Apple QuickTake 200 Raw Image
>0 use quicktake
+
+# From: Joerg Jenderek
+# URL: http://fileformats.archiveteam.org/wiki/Corel_Photo-Paint_image
+# Reference: http://blog.argasinski.eu/wp-content/uploads/2011/08/cpt-specification-0.01.pdf
+0 string CPT
+>4 string FILE Corel Photo-Paint image, version
+# version like 7, 9 or 8
+>>3 ubyte x %c,
+!:mime image/x-corel-cpt
+!:ext cpt
+# if blocks_array_offset available jump blockNumber*8 bytes
+>>0x34 ulelong >0
+>>>(0x28.l*8) ubyte x
+# jump additional stored blocks_array_offset bytes forward to object block
+>>>>&(0x34.l-1) ulelong x %u
+# object height in pixels
+>>>>>&0 ulelong x x %u
+# if no blocks_array_offset available jump blockNumber*8 bytes
+>>0x34 ulelong =0
+>>>(0x28.l*8) ubyte x
+# jump additional 0x13C bytes forward to object block
+>>>>&0x13B ulelong x %u
+>>>>>&0 ulelong x x %u
+# image color model used
+>>0x8 ulelong x
+>>>0x8 ulelong 0x1 RGB 24 bits
+>>>0x8 ulelong 0x3 CMYK 24 bits
+>>>0x8 ulelong 0x5 greyscale 8 bits
+>>>0x8 ulelong 0x6 black and white 1 bit
+>>>0x8 ulelong 0xA RGB 8 bits
+# palette_length number of colors * 3 in case of 8-bit RGB paletted image
+# 0 otherwise. Allowed values: 0 or [1..256] * 3
+#>>0xC ulelong >0 \b, palette length %u
+>>>>0xC ulelong/3 <256 \b, %u colors
+>>>0x8 ulelong 0xB LAB
+>>>0x8 ulelong 0xC RGB 48 bits
+>>>0x8 ulelong 0xE greyscale 16 bits
+# this should not happen
+>>>0x8 default x color model
+>>>>0x8 ulelong x %#x
+# bit 1 in CPT file flags: UCS-2 file comment present
+>>0x31 ubyte &0x02
+# look for comment marker
+>>>0x100 search/0xc9d \4\2\0\0
+# UCS-2 file comment
+>>>>&0 lestring16 x "%s"
+# if no UCS-2 is present show ANSI file comment[112] if available
+>>0x31 ubyte&0x02 =0
+>>>0x3C string >\0 "%-.112s"
+# reserved seems to be always 0
+#>>0x10 ulelong >0 \b, reserved1 %u
+# horizontal real dpi = dpi_h * 25.4 / 10**6
+>>0x18 ulelong x \b, %u micro dots/mm
+# image vertical DPI in CPT DPI unit
+#>>0x1C ulelong x \b, %u micro dots/mm
+# reserved seems to be always 0
+#>>0x20 ulelong >0 \b, reserved2 %u
+#>>0x24 ulelong >0 \b, reserved3 %u
+# blocks_count; number of CPT_Block blocks. Allowed values: > 0
+>>0x28 ulelong x \b, %u block
+# plural s
+>>0x28 ulelong !1 \bs
+# CPT file flags
+# lower byte of CPT file flags: 0x94~CPT9FILE 0x01~often CPT7FILE 0x8C~CPT8FILE
+#>>0x30 ubyte x \b, lower flags %#x
+# upper byte of CPT file flags:
+#>>0x31 ubyte >0 \b, upper flags %#x
+# bit 2 in CPT file flags: unknown
+#>>0x31 ubyte &0x04 \b, with UNKNOWN
+# bits 3-7 in CPT file flags: unknown, seem to be often 0
+# show unusual flag combinations
+>>0x31 ubyte&0xFC >0
+>>>0x30 uleshort x \b, flags %#4.4x
+# reserved seems to be always 0
+#>>0x32 uleshort >0 \b, reserved4 %#x
+# blocks_array_offset is always 0 for CPT7 and CPT8 files created by PP7-PP8
+# typical values like: 13Ch 154h 43Ch 4F0h DA8h
+>>0x34 ulelong x \b, array offset %#x
+# reserved seems to be often 0
+>>0x38 ulelong >0 \b, reserved5 %#x
+# possible next master block
+#>>0x100 ubequad !0 \b, next block=%#llx...
+# bit 0: ICC profile block present
+>>0x31 ubyte &0x01 \b, with ICC profile
+# check for characteristic string acsp of color profile for DEBUGGING
+#>>>0x178 string x icc=%.4s
+# display ICC/ICM color profile by ./icc
+#>>>0x154 use color-profile
+
+# Type: Crunch compressed texture.
+# From: David Korth <gerbilsoft@gerbilsoft.com>
+# References:
+# - https://github.com/BinomialLLC/crunch/blob/44c8402e24441c7524ca364941fd224ab3b971e9/inc/crn_decomp.h#L267
+0 ubelong 0x4878004A Crunch compressed texture:
+>0x0C ubeshort x %u x
+>0x0E ubeshort x %u
+>0x12 ubyte 0 \b, DXT1
+>0x12 ubyte 1 \b, DXT3
+>0x12 ubyte 2 \b, DXT5
+>0x12 ubyte 3 \b, DXT5 CCxY
+>0x12 ubyte 4 \b, DXT5 xGxR
+>0x12 ubyte 5 \b, DXT5 xGBR
+>0x12 ubyte 6 \b, DXT5 AGBR
+>0x12 ubyte 7 \b, DXn XY
+>0x12 ubyte 8 \b, DXn YX
+>0x12 ubyte 9 \b, DXT5 Alpha
+>0x12 ubyte 10 \b, ETC1
+>0x10 ubyte >1 \b, %u images
+>0x11 ubyte >1 \b, %u faces
+# TODO: Flags at 0x13? (ubeshort)
+
+# Type: BasisLZ compressed texture.
+# From: David Korth <gerbilsoft@gerbilsoft.com>
+# References:
+# - https://github.com/BinomialLLC/basis_universal/blob/master/spec/basis_spec.txt
+0 uleshort 0x4273
+>0x04 uleshort 0x4D BasisLZ
+>>0x02 uleshort x v%x compressed texture:
+>>0x14 ubyte 0 ETC1S
+>>0x14 ubyte 1 UASTC 4x4
+>>0x0E ulelong&0xFFFFFF >1 \b, %u slices
+>>0x11 ulelong&0xFFFFFF >1 \b, %u images
+>>0x15 uleshort&0x02 2 \b, Y-flipped
+
+# MIME registration: https://www.iana.org/assignments/media-types/model/e57
+# Sample files: http://www.libe57.org/data.html
+# Reference implementation: http://www.libe57.org/
+# https://www.ri.cmu.edu/pub_files/2011/1/2011-huber-e57-v3.pdf
+0 string ASTM-E57 ASTM E57 three-dimensional model
+!:mime model/e57
+!:ext e57
diff --git a/magic/Magdir/intel b/magic/Magdir/intel
index ba25d983411a..531dd6548ddb 100644
--- a/magic/Magdir/intel
+++ b/magic/Magdir/intel
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: intel,v 1.18 2020/04/18 16:19:03 christos Exp $
+# $File: intel,v 1.20 2021/04/26 15:56:00 christos Exp $
# intel: file(1) magic for x86 Unix
#
# Various flavors of x86 UNIX executable/object (other than Xenix, which
@@ -37,7 +37,7 @@
# ./intel (version 5.25) label labeled the next entry as "80386 COFF executable"
# SGI labeled the next entry as "iAPX 386 executable" --Dan Quinlan
0 leshort =0514
-# use subroutine to display name+flags+variables for common object formated files
+# use subroutine to display name+flags+variables for common object formatted files
>0 use display-coff
#>12 lelong >0 not stripped
# no hint found, that at offset 22 is version
@@ -118,7 +118,7 @@
# length, in bytes, of the entire DSDT (including the header)
>>4 ulelong x \b, %u bytes
# entire table must sum to zero
-#>>9 ubyte x \b, checksum 0x%x
+#>>9 ubyte x \b, checksum %#x
# vendor ID for the ASL Compiler like: INTL MSFT ...
>>28 string >\0 \b, created by %.4s
# revision number of the ASL Compiler like: 20051117 20140724 20190703 20200110 ...
diff --git a/magic/Magdir/jpeg b/magic/Magdir/jpeg
index 52c9ad36203e..522f8d34f07a 100644
--- a/magic/Magdir/jpeg
+++ b/magic/Magdir/jpeg
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: jpeg,v 1.32 2018/10/01 18:58:29 christos Exp $
+# $File: jpeg,v 1.36 2021/08/28 12:30:52 christos Exp $
# JPEG images
# SunOS 5.5.1 had
#
@@ -9,11 +9,19 @@
#
# both of which turn into "JPEG image data" here.
#
-0 beshort 0xffd8 JPEG image data
+0 belong 0xffd8fff7 JPEG-LS image data
+!:mime image/jls
+!:ext jls
+>0 use jpeg
+
+0 belong&0xffffff00 0xffd8ff00 JPEG image data
!:mime image/jpeg
!:apple 8BIMJPEG
!:strength *3
!:ext jpeg/jpg/jpe/jfif
+>0 use jpeg
+
+0 name jpeg
>6 string JFIF \b, JFIF standard
# The following added by Erik Rossen <rossen@freesurf.ch> 1999-09-06
# in a vain attempt to add image size reporting for JFIF. Note that these
@@ -91,7 +99,7 @@
>>0 beshort&0xFFE0 !0xFFE0
>>>(2.S+2) use jpeg_segment
-#>0 beshort x unknown 0x%x
+#>0 beshort x unknown %#x
#>>(2.S+2) use jpeg_segment
# HSI is Handmade Software's proprietary JPEG encoding scheme
@@ -124,3 +132,14 @@
>>4 lelong%2 0 JPEG-XR
!:mime image/jxr
!:ext jxr
+
+# JPEG XL
+# From: Ian Tester
+0 string \xff\x0a JPEG XL codestream
+!:mime image/jxl
+!:ext jxl
+
+# JPEG XL (transcoded JPEG file)
+0 string \x00\x00\x00\x0cJXL\x20\x0d\x0a\x87\x0a JPEG XL container
+!:mime image/jxl
+!:ext jxl
diff --git a/magic/Magdir/lammps b/magic/Magdir/lammps
new file mode 100644
index 000000000000..5424383db80f
--- /dev/null
+++ b/magic/Magdir/lammps
@@ -0,0 +1,64 @@
+#------------------------------------------------------------------------------
+# $File: lammps,v 1.1 2021/03/14 16:24:18 christos Exp $
+#
+
+# Magic file patterns for use with file(1) for the
+# LAMMPS molecular dynamics simulation software.
+# https://lammps.sandia.gov
+#
+# Updated: 2021-03-14 by akohlmey@gmail.com
+
+# Binary restart file for the LAMMPS MD code
+0 string LammpS\ RestartT LAMMPS binary restart file
+>0x14 long x (rev %d),
+>>0x20 string x Version %s,
+>>>0x10 lelong 0x0001 Little Endian
+>>>0x10 lelong 0x1000 Big Endian
+
+# Atom style binary dump file for the LAMMPS MD code
+# written on a little endian machine
+0 lequad -8
+>0x08 string DUMPATOM LAMMPS atom style binary dump
+>>0x14 long x (rev %d),
+>>>0x10 lelong 0x0001 Little Endian,
+>>>>0x18 lequad x First time step: %lld
+
+# written on a big endian machine
+0 bequad -8
+>0x08 string DUMPATOM LAMMPS atom style binary dump
+>>0x14 belong x (rev %d),
+>>>0x10 lelong 0x1000 Big Endian,
+>>>>0x18 bequad x First time step: %lld
+
+# Atom style binary dump file for the LAMMPS MD code
+# written on a little endian machine
+0 lequad -10
+>0x08 string DUMPCUSTOM LAMMPS custom style binary dump
+>>0x16 lelong x (rev %d),
+>>>0x12 lelong 0x0001 Little Endian,
+>>>>0x1a lequad x First time step: %lld
+
+# written on a big endian machine
+0 bequad -10
+>0x08 string DUMPCUSTOM LAMMPS custom style binary dump
+>>0x16 belong x (rev %d),
+>>>0x12 lelong 0x1000 Big Endian,
+>>>>0x1a bequad x First time step: %lld
+
+# LAMMPS log file
+0 string LAMMPS\ ( LAMMPS log file
+>8 regex/16 [0-9]+\ [A-Za-z]+\ [0-9]+ written by version %s
+
+# Data file written either by LAMMPS, msi2lmp or VMD/TopoTools
+0 string LAMMPS\ data\ file LAMMPS data file
+>0x12 string CGCMM\ style written by TopoTools
+>0x12 string msi2lmp written by msi2lmp
+>0x11 string via\ write_data written by LAMMPS
+
+# LAMMPS data file written by OVITO
+0 string #\ LAMMPS\ data\ file LAMMPS data file
+>0x13 string written\ by\ OVITO written by OVITO
+
+# LAMMPS text mode dump file
+0 string ITEM:\ TIMESTEP LAMMPS text mode dump,
+>15 regex/16 [0-9]+ First time step: %s
diff --git a/magic/Magdir/lif b/magic/Magdir/lif
index a7a0a8abe776..89d7a8611624 100644
--- a/magic/Magdir/lif
+++ b/magic/Magdir/lif
@@ -1,8 +1,49 @@
#------------------------------------------------------------------------------
-# $File: lif,v 1.8 2009/09/19 16:28:10 christos Exp $
+# $File: lif,v 1.10 2021/04/26 15:56:00 christos Exp $
# lif: file(1) magic for lif
#
# (Daniel Quinlan <quinlan@yggdrasil.com>)
#
-0 beshort 0x8000 lif file
+# Modified by: Joerg Jenderek
+# URL: https://www.hp9845.net/9845/projects/hpdir/
+# https://github.com/bug400/lifutils
+# Reference: https://www.hp9845.net/9845/downloads/manuals/LIF_excerpt_64941-90906_flpRef_Jan84.pdf
+# Note: called by TrID "HP Logical Interchange Format disk image"
+0 beshort 0x8000
+# GRR: line above is too general as it catches also compressed DEGAS low-res bitmap *.pc1
+# skip many compressed DEGAS low-res bitmap *.pc1 by test for unused bytes
+>14 beshort =0
+# skip MUNCHIE.PC1 BOARD.PC1 ENEMIES.PC1 by test for low version number
+>>20 ubeshort <0x0100
+# skip DEGAS MUNCHIE.PC1 BOARD.PC1 ENEMIES.PC1 by test for ASCII like volume name
+#>>>2 ubelong >0x2020201F
+>>>0 use lif-file
+0 name lif-file
+# LIF ID
+>0 beshort x lif file
+!:mime application/x-lif-disk
+# lif used by Tony Duell LIF utilities; enhanced version by Joachim Siebold use also dat; hpi used by hpdir
+!:ext lif/hpi/dat
+# volume label; A-Z 0-9 _ ; default are 6 spaces
+>2 string x "%.6s"
+# version number; 0 for systems without extensions or 1 for model 64000
+>20 ubeshort x \b, version %u
+# LIF identifier; 010000 for system 3000
+>12 beshort !0x1000 \b, LIF identifier %#x
+# directory start address in units like: 2
+>8 ubelong x \b, directory
+>8 ubelong !2 start address %u
+# length of directory like: 2 4 7 10 12 14 (for model 64000) 16 18 20 24 30 50 57 77 80
+>16 ubelong x length %u
+# level 1 extensions
+>20 beshort =0
+>>24 ubequad !0 \b, for extensions %#llx...
+>20 beshort >0
+>>24 ubequad !0 \b, extensions %#llx...
+# word 21-126 reserved for extensions and future use; set to nil
+>42 ubequad !0 \b, RESERVED %#llx
+# lif first file name for standard directory; 0xffff... means uninitialized
+>8 ubelong 2
+>>512 string <\xff\xff \b, 1st file %-.10s
+
diff --git a/magic/Magdir/linux b/magic/Magdir/linux
index e7d0a15607e2..f5216087f0cf 100644
--- a/magic/Magdir/linux
+++ b/magic/Magdir/linux
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: linux,v 1.72 2020/06/07 21:56:13 christos Exp $
+# $File: linux,v 1.79 2021/04/26 15:56:00 christos Exp $
# linux: file(1) magic for Linux files
#
# Values for Linux/i386 binaries, from Daniel Quinlan <quinlan@yggdrasil.com>
@@ -83,20 +83,20 @@
# format v1, supported since 1998
0 name linux-swap
->0x400 lelong 1 little endian, version %u,
->>0x404 lelong x size %u pages,
->>0x408 lelong x %u bad pages,
->0x400 belong 1 big endian, version %u,
->>0x404 belong x size %u pages,
->>0x408 belong x %u bad pages,
->0x41c string \0 no label,
->0x41c string >\0 LABEL=%s,
->0x40c belong x UUID=%08x
->0x410 beshort x \b-%04x
->0x412 beshort x \b-%04x
->0x414 beshort x \b-%04x
->0x416 belong x \b-%08x
->0x41a beshort x \b%04x
+>0x400 lelong 1 little endian, version %u,
+>>0x404 lelong x size %u pages,
+>>0x408 lelong x %u bad pages,
+>0x400 belong 1 big endian, version %u,
+>>0x404 belong x size %u pages,
+>>0x408 belong x %u bad pages,
+>0x41c string \0 no label,
+>0x41c string >\0 LABEL=%s,
+>0x40c ubelong x UUID=%08x
+>0x410 ubeshort x \b-%04x
+>0x412 ubeshort x \b-%04x
+>0x414 ubeshort x \b-%04x
+>0x416 ubelong x \b-%08x
+>0x41a ubeshort x \b%04x
0xff6 string SWAPSPACE2 Linux swap file, 4k page size,
>0 use linux-swap
@@ -154,8 +154,8 @@
>>>>(526.s+0x200) string >\0 version %s,
>>498 leshort 1 RO-rootFS,
>>498 leshort 0 RW-rootFS,
->>508 leshort >0 root_dev 0x%X,
->>502 leshort >0 swap_dev 0x%X,
+>>508 leshort >0 root_dev %#X,
+>>502 leshort >0 swap_dev %#X,
>>504 leshort >0 RAMdisksize %u KB,
>>506 leshort 0xFFFF Normal VGA
>>506 leshort 0xFFFE Extended VGA
@@ -191,8 +191,8 @@
>497 leshort !0 x86 kernel
>>504 leshort >0 RAMdisksize=%u KB
->>502 leshort >0 swap=0x%X
->>508 leshort >0 root=0x%X
+>>502 leshort >0 swap=%#X
+>>508 leshort >0 root=%#X
>>>498 leshort 1 \b-ro
>>>498 leshort 0 \b-rw
>>506 leshort 0xFFFF vga=normal
@@ -239,14 +239,14 @@
# From: Kevin Cernekee <cernekee@gmail.com>
# Update: Joerg Jenderek
0x24 lelong 0x016f2818 Linux kernel ARM boot executable zImage
-# There are three posible situations: LE, BE with LE bootloader and pure BE.
+# There are three possible situations: LE, BE with LE bootloader and pure BE.
# In order to aid telling these apart a new endian flag was added. In order
# to support kernels before the flag and BE with LE bootloader was added we'll
# do a negative check against the BE variant of the flag when we see a LE magic.
>0x30 belong !0x04030201 (little-endian)
->0x30 belong 0x04030201 (big-endian)
# raspian "kernel7.img", Vu+ Ultimo4K "kernel_auto.bin"
!:ext img/bin
+>0x30 belong 0x04030201 (big-endian)
0x24 belong 0x016f2818 Linux kernel ARM boot executable zImage (big-endian)
############################################################################
@@ -438,17 +438,16 @@
# Documentation/devicetree/booting-without-of.txt
# From Christoph Biedl
0 belong 0xd00dfeed
-# structure and strings must be within blob
+# structure must be within blob, strings are omitted to handle devicetrees > 1M
>&(8.L) byte x
->>&(12.L) byte x
->>>20 belong >1 Device Tree Blob version %d
->>>>4 belong x \b, size=%d
->>>>20 belong >1
->>>>>28 belong x \b, boot CPU=%d
->>>>20 belong >2
->>>>>32 belong x \b, string block size=%d
->>>>20 belong >16
->>>>>36 belong x \b, DT structure block size=%d
+>>20 belong >1 Device Tree Blob version %d
+>>>4 belong x \b, size=%d
+>>>20 belong >1
+>>>>28 belong x \b, boot CPU=%d
+>>>20 belong >2
+>>>>32 belong x \b, string block size=%d
+>>>20 belong >16
+>>>>36 belong x \b, DT structure block size=%d
# glibc locale archive as defined in glibc locale/locarchive.h
0 lelong 0xde020109 locale archive
@@ -518,3 +517,21 @@
0 search/1024 /dts-v1/ Device Tree File (v1)
# beat c code
!:strength +14
+
+
+# e2fsck undo file
+# David Gilman <davidgilman1@gmail.com>
+0 string E2UNDO02 e2fsck undo file, version 2
+>44 lelong x \b, undo file is
+>>44 lelong&1 0 not finished
+>>44 lelong&1 1 finished
+>48 lelong x \b, undo file features:
+>>48 lelong&1 0 lacks filesystem offset
+>>48 lelong&1 1 has filesystem offset
+>>>64 lequad x at %#llx
+
+# ansible vault (does not really belong here)
+0 string $ANSIBLE_VAULT; Ansible Vault
+>&0 regex [0-9]*\.[0-9]* \b, version %s
+>>&0 string ;
+>>>&0 regex [A-Z0-9]* \b, encryption %s
diff --git a/magic/Magdir/lisp b/magic/Magdir/lisp
index d32cc101a90a..c854fb7c74be 100644
--- a/magic/Magdir/lisp
+++ b/magic/Magdir/lisp
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: lisp,v 1.26 2019/04/19 00:42:27 christos Exp $
+# $File: lisp,v 1.27 2020/08/14 19:23:39 christos Exp $
# lisp: file(1) magic for lisp programs
#
# various lisp types, from Daniel Quinlan (quinlan@yggdrasil.com)
@@ -60,6 +60,9 @@
!:apple EMAxTEXT
!:ext elc
+# Files produced by GNU/Emacs pdumper
+0 string DUMPEDGNUEMACS GNU/Emacs pdumper image
+
# Files produced by CLISP Common Lisp From: Bruno Haible <haible@ilog.fr>
0 string (SYSTEM::VERSION\040' CLISP byte-compiled Lisp program (pre 2004-03-27)
0 string (|SYSTEM|::|VERSION|\040' CLISP byte-compiled Lisp program text
diff --git a/magic/Magdir/locoscript b/magic/Magdir/locoscript
new file mode 100644
index 000000000000..87771ccdf9e6
--- /dev/null
+++ b/magic/Magdir/locoscript
@@ -0,0 +1,12 @@
+
+#------------------------------------------------------------------------------
+# $File: locoscript,v 1.1 2021/01/03 20:56:25 christos Exp $
+# locoscript: file(1) magic for LocoScript documents and related files
+#
+# See http://fileformats.archiveteam.org/wiki/LocoScript
+0 string JOY\x01\x01 LocoScript 1 document
+0 string JOY\x01\x02 LocoScript 2 document
+0 string JOY\x01\x04 LocoScript 3 document
+0 string JOY\x01\x06 LocoScript 4 document
+0 string DOC\x01\x01 LocoScript PC document
+0 string DOC\x01\x03 LocoScript Professional document
diff --git a/magic/Magdir/lua b/magic/Magdir/lua
index 0e47c2f9122a..ab17374534de 100644
--- a/magic/Magdir/lua
+++ b/magic/Magdir/lua
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: lua,v 1.7 2019/04/19 00:42:27 christos Exp $
+# $File: lua,v 1.8 2020/10/08 23:23:56 christos Exp $
# lua: file(1) magic for Lua scripting language
# URL: https://www.lua.org/
# From: Reuben Thomas <rrt@sc3d.org>, Seo Sanghyeon <tinuviel@sparcs.kaist.ac.kr>
@@ -17,6 +17,15 @@
# Lua bytecode
0 string \033Lua Lua bytecode,
+# 2.4 uses 0x23 as its version byte because it shares the format
+# with 2.3 (which was never released publicly).
+>4 byte 0x23 version 2.4
+>4 byte 0x25 version 2.5/3.0
+>4 byte 0x31 version 3.1
+>4 byte 0x32 version 3.2
+>4 byte 0x40 version 4.0
>4 byte 0x50 version 5.0
>4 byte 0x51 version 5.1
>4 byte 0x52 version 5.2
+>4 byte 0x53 version 5.3
+>4 byte 0x54 version 5.4
diff --git a/magic/Magdir/mach b/magic/Magdir/mach
index c1bec073480f..7eb98ff34e39 100644
--- a/magic/Magdir/mach
+++ b/magic/Magdir/mach
@@ -1,6 +1,6 @@
#------------------------------------------------------------
-# $File: mach,v 1.23 2015/10/15 21:51:22 christos Exp $
+# $File: mach,v 1.29 2021/04/26 15:56:00 christos Exp $
# Mach has two magic numbers, 0xcafebabe and 0xfeedface.
# Unfortunately the first, cafebabe, is shared with
# Java ByteCode, so they are both handled in the file "cafebabe".
@@ -11,8 +11,11 @@
# it's also separate from the "64-bit libraries" bit in the
# upper 8 bits of the CPU subtype
+# Reference: https://opensource.apple.com/source/cctools/cctools-949.0.1/
+# include/mach-o/loader.h
+# display CPU type as string like: i386 x86_64 ... armv7 armv7k ...
0 name mach-o-cpu
->0 belong&0x01000000 0
+>0 belong&0xff000000 0
#
# 32-bit ABIs.
#
@@ -51,37 +54,37 @@
>>>>4 belong&0x00fffff0 0x30 pentium_2_m3
>>>>4 belong&0x00fffff0 0x40 pentium_2_m0x40
>>>>4 belong&0x00fffff0 0x50 pentium_2_m5
->>>>4 belong&0x00fffff0 >0x50 pentium_2_m0x%x
+>>>>4 belong&0x00fffff0 >0x50 pentium_2_m%#x
>>>4 belong&0x0000000f 7 celeron
->>>>4 belong&0x00fffff0 0x00 \b_m0x%x
->>>>4 belong&0x00fffff0 0x10 \b_m0x%x
->>>>4 belong&0x00fffff0 0x20 \b_m0x%x
->>>>4 belong&0x00fffff0 0x30 \b_m0x%x
->>>>4 belong&0x00fffff0 0x40 \b_m0x%x
->>>>4 belong&0x00fffff0 0x50 \b_m0x%x
+>>>>4 belong&0x00fffff0 0x00 \b_m%#x
+>>>>4 belong&0x00fffff0 0x10 \b_m%#x
+>>>>4 belong&0x00fffff0 0x20 \b_m%#x
+>>>>4 belong&0x00fffff0 0x30 \b_m%#x
+>>>>4 belong&0x00fffff0 0x40 \b_m%#x
+>>>>4 belong&0x00fffff0 0x50 \b_m%#x
>>>>4 belong&0x00fffff0 0x60
>>>>4 belong&0x00fffff0 0x70 \b_mobile
->>>>4 belong&0x00fffff0 >0x70 \b_m0x%x
+>>>>4 belong&0x00fffff0 >0x70 \b_m%#x
>>>4 belong&0x0000000f 8 pentium_3
>>>>4 belong&0x00fffff0 0x00
>>>>4 belong&0x00fffff0 0x10 \b_m
>>>>4 belong&0x00fffff0 0x20 \b_xeon
->>>>4 belong&0x00fffff0 >0x20 \b_m0x%x
+>>>>4 belong&0x00fffff0 >0x20 \b_m%#x
>>>4 belong&0x0000000f 9 pentiumM
>>>>4 belong&0x00fffff0 0x00
->>>>4 belong&0x00fffff0 >0x00 \b_m0x%x
+>>>>4 belong&0x00fffff0 >0x00 \b_m%#x
>>>4 belong&0x0000000f 10 pentium_4
>>>>4 belong&0x00fffff0 0x00
>>>>4 belong&0x00fffff0 0x10 \b_m
->>>>4 belong&0x00fffff0 >0x10 \b_m0x%x
+>>>>4 belong&0x00fffff0 >0x10 \b_m%#x
>>>4 belong&0x0000000f 11 itanium
>>>>4 belong&0x00fffff0 0x00
>>>>4 belong&0x00fffff0 0x10 \b_2
->>>>4 belong&0x00fffff0 >0x10 \b_m0x%x
+>>>>4 belong&0x00fffff0 >0x10 \b_m%#x
>>>4 belong&0x0000000f 12 xeon
>>>>4 belong&0x00fffff0 0x00
>>>>4 belong&0x00fffff0 0x10 \b_mp
->>>>4 belong&0x00fffff0 >0x10 \b_m0x%x
+>>>>4 belong&0x00fffff0 >0x10 \b_m%#x
>>>4 belong&0x0000000f >12 ia32 family=%d
>>>>4 belong&0x00fffff0 0x00
>>>>4 belong&0x00fffff0 >0x00 model=%x
@@ -139,13 +142,13 @@
>>>4 belong&0x00ffffff 6 \b_604
>>>4 belong&0x00ffffff 7 \b_604e
>>>4 belong&0x00ffffff 8 \b_620
->>>4 belong&0x00ffffff 9 \b_650
+>>>4 belong&0x00ffffff 9 \b_750
>>>4 belong&0x00ffffff 10 \b_7400
>>>4 belong&0x00ffffff 11 \b_7450
>>>4 belong&0x00ffffff 100 \b_970
>>>4 belong&0x00ffffff >100 subarchitecture=%d
>>0 belong&0x00ffffff >18 architecture=%d
->0 belong&0x01000000 0x01000000
+>0 belong&0xff000000 0x01000000
#
# 64-bit ABIs.
#
@@ -171,6 +174,15 @@
>>0 belong&0x00ffffff 12 arm64
>>>4 belong&0x00ffffff 0
>>>4 belong&0x00ffffff 1 \bv8
+>>>4 belong&0x00ffffff 2 \be
+>>>>7 ubyte&0xff >0 (caps:
+>>>>7 ubyte&0xff <0x80 %#02x
+>>>>7 ubyte&0xc0 0x80 PAC
+>>>>>7 ubyte&0x3f x \b%02d
+>>>>7 ubyte&0xc0 0xc0 PAK
+>>>>>7 ubyte&0x3f x \b%02d
+>>>>7 ubyte&0xff x \b)
+>>>4 belong&0x00ffffff >2 subarchitecture=%d
>>0 belong&0x00ffffff 13 64-bit architecture=%d
>>0 belong&0x00ffffff 14 64-bit architecture=%d
>>0 belong&0x00ffffff 15 64-bit architecture=%d
@@ -192,51 +204,91 @@
>>>4 belong&0x00ffffff 100 \b_970
>>>4 belong&0x00ffffff >100 subarchitecture=%d
>>0 belong&0x00ffffff >18 64-bit architecture=%d
-
+>0 belong&0xff000000 0x02000000
+#
+# 64_32-bit ABIs.
+#
+>>0 belong&0x00ffffff 0 64_32-bit architecture=%d
+>>0 belong&0x00ffffff 1 64_32-bit architecture=%d
+>>0 belong&0x00ffffff 2 64_32-bit architecture=%d
+>>0 belong&0x00ffffff 3 64_32-bit architecture=%d
+>>0 belong&0x00ffffff 4 64_32-bit architecture=%d
+>>0 belong&0x00ffffff 5 64_32-bit architecture=%d
+>>0 belong&0x00ffffff 6 64_32-bit architecture=%d
+>>0 belong&0x00ffffff 7 64_32-bit architecture=%d
+>>0 belong&0x00ffffff 8 64_32-bit architecture=%d
+>>0 belong&0x00ffffff 9 64_32-bit architecture=%d
+>>0 belong&0x00ffffff 10 64_32-bit architecture=%d
+>>0 belong&0x00ffffff 11 64_32-bit architecture=%d
+>>0 belong&0x00ffffff 12 64_32-bit arm
+>>>4 belong&0x00ffffff 0
+>>>4 belong&0x00ffffff 1 \bv8
+>>>4 belong&0x00ffffff >1 subarchitecture=%d
+>>0 belong&0x00ffffff 13 64_32-bit architecture=%d
+>>0 belong&0x00ffffff 14 64_32-bit architecture=%d
+>>0 belong&0x00ffffff 15 64_32-bit architecture=%d
+>>0 belong&0x00ffffff 16 64_32-bit architecture=%d
+>>0 belong&0x00ffffff 17 64_32-bit architecture=%d
+>>0 belong&0x00ffffff 18 64_32-bit architecture=%d
+>>0 belong&0x00ffffff >18 64_32-bit architecture=%d
0 name mach-o-be
>0 byte 0xcf 64-bit
>4 use mach-o-cpu
>12 belong 1 object
+# GRR: Does not work for Mach-O with 2 architectures; instead display oo
+#!:ext o
+!:ext o/
>12 belong 2 executable
+# the executables normally have no file extension like perl,
+# but exceptions like perl5.18 perl5.16
+!:ext 16/18/
>12 belong 3 fixed virtual memory shared library
>12 belong 4 core
>12 belong 5 preload executable
>12 belong 6 dynamically linked shared library
+# GRR: Does not work for Mach-O with 2 architectures; instead display dylibdylib
+#!:ext dylib
+!:ext dylib/
>12 belong 7 dynamic linker
>12 belong 8 bundle
+# normally name extension bundle; but exceptions like: AMDil_r700.dylib
+!:ext bundle/dylib/
>12 belong 9 dynamically linked shared library stub
>12 belong 10 dSYM companion file
>12 belong 11 kext bundle
>12 belong >11
>>12 belong x filetype=%d
>24 belong >0 \b, flags:<
->>24 belong &0x0000001 \bNOUNDEFS
->>24 belong &0x0000002 \b|INCRLINK
->>24 belong &0x0000004 \b|DYLDLINK
->>24 belong &0x0000008 \b|BINDATLOAD
->>24 belong &0x0000010 \b|PREBOUND
->>24 belong &0x0000020 \b|SPLIT_SEGS
->>24 belong &0x0000040 \b|LAZY_INIT
->>24 belong &0x0000080 \b|TWOLEVEL
->>24 belong &0x0000100 \b|FORCE_FLAT
->>24 belong &0x0000200 \b|NOMULTIDEFS
->>24 belong &0x0000400 \b|NOFIXPREBINDING
->>24 belong &0x0000800 \b|PREBINDABLE
->>24 belong &0x0001000 \b|ALLMODSBOUND
->>24 belong &0x0002000 \b|SUBSECTIONS_VIA_SYMBOLS
->>24 belong &0x0004000 \b|CANONICAL
->>24 belong &0x0008000 \b|WEAK_DEFINES
->>24 belong &0x0010000 \b|BINDS_TO_WEAK
->>24 belong &0x0020000 \b|ALLOW_STACK_EXECUTION
->>24 belong &0x0040000 \b|ROOT_SAFE
->>24 belong &0x0080000 \b|SETUID_SAFE
->>24 belong &0x0100000 \b|NO_REEXPORTED_DYLIBS
->>24 belong &0x0200000 \b|PIE
->>24 belong &0x0400000 \b|DEAD_STRIPPABLE_DYLIB
->>24 belong &0x0800000 \b|HAS_TLV_DESCRIPTORS
->>24 belong &0x1000000 \b|NO_HEAP_EXECUTION
->>24 belong &0x2000000 \b|APP_EXTENSION_SAFE
+>>24 belong &0x00000001 \bNOUNDEFS
+>>24 belong &0x00000002 \b|INCRLINK
+>>24 belong &0x00000004 \b|DYLDLINK
+>>24 belong &0x00000008 \b|BINDATLOAD
+>>24 belong &0x00000010 \b|PREBOUND
+>>24 belong &0x00000020 \b|SPLIT_SEGS
+>>24 belong &0x00000040 \b|LAZY_INIT
+>>24 belong &0x00000080 \b|TWOLEVEL
+>>24 belong &0x00000100 \b|FORCE_FLAT
+>>24 belong &0x00000200 \b|NOMULTIDEFS
+>>24 belong &0x00000400 \b|NOFIXPREBINDING
+>>24 belong &0x00000800 \b|PREBINDABLE
+>>24 belong &0x00001000 \b|ALLMODSBOUND
+>>24 belong &0x00002000 \b|SUBSECTIONS_VIA_SYMBOLS
+>>24 belong &0x00004000 \b|CANONICAL
+>>24 belong &0x00008000 \b|WEAK_DEFINES
+>>24 belong &0x00010000 \b|BINDS_TO_WEAK
+>>24 belong &0x00020000 \b|ALLOW_STACK_EXECUTION
+>>24 belong &0x00040000 \b|ROOT_SAFE
+>>24 belong &0x00080000 \b|SETUID_SAFE
+>>24 belong &0x00100000 \b|NO_REEXPORTED_DYLIBS
+>>24 belong &0x00200000 \b|PIE
+>>24 belong &0x00400000 \b|DEAD_STRIPPABLE_DYLIB
+>>24 belong &0x00800000 \b|HAS_TLV_DESCRIPTORS
+>>24 belong &0x01000000 \b|NO_HEAP_EXECUTION
+>>24 belong &0x02000000 \b|APP_EXTENSION_SAFE
+>>24 belong &0x04000000 \b|NLIST_OUTOFSYNC_WITH_DYLDINFO
+>>24 belong &0x08000000 \b|SIM_SUPPORT
+>>24 belong &0x80000000 \b|DYLIB_IN_CACHE
>>24 belong x \b>
#
diff --git a/magic/Magdir/macintosh b/magic/Magdir/macintosh
index 218a844dbefd..905e4d6e1500 100644
--- a/magic/Magdir/macintosh
+++ b/magic/Magdir/macintosh
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: macintosh,v 1.30 2019/12/14 20:40:26 christos Exp $
+# $File: macintosh,v 1.32 2021/04/26 15:56:00 christos Exp $
# macintosh description
#
# BinHex is the Macintosh ASCII-encoded file format (see also "apple")
@@ -17,7 +17,7 @@
0 search/2652/b (This\ file\
>&0 use binhex
0 name binhex
-# keep splitted search string format similar like in version 5.37
+# keep split search string format similar like in version 5.37
>0 string must\ be\ converted\ with\ BinHex\ BinHex binary text, version
# http://www.macdisk.com/binhexen.php3
!:apple BNHQTEXT
@@ -141,7 +141,7 @@
!:ext bin/macbin
# THIS SHOULD NEVER HAPPEN! Maybe another file type is misidetified as MacBinary
#>1 ubyte >63 \b, name length %u too BIG!
-#>122 ubeshort x \b, version 0x%x
+#>122 ubeshort x \b, version %#x
# Finder flags if not 0
# >73 byte !0 \b, flags 0x
# >73 byte =0
@@ -164,21 +164,21 @@
# 77 beshort # horiz posn in window
#>77 beshort !0 \b, h.pos %u
# 79 beshort # window or folder ID
->79 ubeshort !0 \b, ID 0x%x
+>79 ubeshort !0 \b, ID %#x
# protected flag
->81 byte !0 \b, protected 0x%x
+>81 byte !0 \b, protected %#x
# length of comment after resource
>99 ubeshort !0 \b, comment length %u
# char. code of file name
->106 ubyte !0 \b, char. code 0x%x
+>106 ubyte !0 \b, char. code %#x
# still more Finder flags
->107 ubyte !0 \b, more flags 0x%x
+>107 ubyte !0 \b, more flags %#x
# length of total files when unpacked only used when pack and unpack on the fly
>116 ubelong !0 \b, total length %u
# 120 beshort # length of add'l header
>120 ubeshort !0 \b, 2nd header length %u
# 124 beshort # checksum
-#>124 ubeshort !0 \b, CRC 0x%x
+#>124 ubeshort !0 \b, CRC %#x
# creation date in seconds since MacOS epoch start. So 1 Jan 1970 ~ 7C25B080
>91 beldate-0x7C25B080 x \b, %s
# THIS SHOULD NEVER HAPPEN! Maybe another file type is misidetified or time overflow
@@ -204,7 +204,7 @@
# Afterwards resource fork if length of resource segment not zero
>87 ubelong !0
# calculate resource fork offset
->>83 ubelong+128 x \b, at 0x%x
+>>83 ubelong+128 x \b, at %#x
# length of resource segment
>>87 ubelong !0 %u bytes
>>(83.S+128) ubequad x resource
diff --git a/magic/Magdir/mail.news b/magic/Magdir/mail.news
index 006fe923a860..074cfb191456 100644
--- a/magic/Magdir/mail.news
+++ b/magic/Magdir/mail.news
@@ -1,5 +1,5 @@
#------------------------------------------------------------------------------
-# $File: mail.news,v 1.25 2019/06/21 20:06:05 christos Exp $
+# $File: mail.news,v 1.28 2021/09/11 19:20:15 christos Exp $
# mail.news: file(1) magic for mail and news
#
# Unfortunately, saved netnews also has From line added in some news software.
@@ -24,6 +24,8 @@
!:mime message/news
0 string/t From: news or mail text
!:mime message/rfc822
+0 string/t Date: news or mail text
+!:mime message/rfc822
0 string/t Article saved news text
!:mime message/news
# Reference: http://quimby.gnus.org/notes/BABYL
@@ -75,3 +77,10 @@
>12 belong =1 version 1, big-endian
>12 lelong =1 version 1, little-endian
>12 belong x version %d, network-endian
+
+# Dovecot mail server, version 2.2 and later.
+# Dovecot mailing list: dovecot@dovecot.org
+# File format spec: https://wiki.dovecot.org/Design/Dcrypt/#File_format
+# From: Stephen Gildea
+0 string CRYPTED\003\007 Dovecot encrypted message
+>9 byte x \b, dcrypt version %d
diff --git a/magic/Magdir/map b/magic/Magdir/map
index 460746bab227..2e8d0797d319 100644
--- a/magic/Magdir/map
+++ b/magic/Magdir/map
@@ -1,7 +1,7 @@
#------------------------------------------------------------------------------
-# $File: map,v 1.8 2019/12/01 22:46:23 christos Exp $
+# $File: map,v 1.9 2021/04/26 15:56:00 christos Exp $
# map: file(1) magic for Map data
#
@@ -40,7 +40,7 @@
>0 ubyte x Garmin
!:mime application/x-garmin-map
# If non-zero, every byte of the entire .img file is to be XORed with this value
->0 ubyte !0 \b, 0x%x XORed
+>0 ubyte !0 \b, %#x XORed
# goto block before FAT
>(0x40.b*512) ubyte x
# 1st fat name "DLLINFO TXT" only found for vpm
@@ -54,7 +54,7 @@
>>&512 string !DLLINFO\ TXT map
!:ext img
# 9 zeros
->1 ubelong !0 \b, zeroes 0x%x
+>1 ubelong !0 \b, zeroes %#x
# Map's version major
>8 ubyte x v%u
# Map's version minor
@@ -72,12 +72,12 @@
# Update month (0-11)
>0xA ubyte x \b-%.2u
# All zeroes
->0xc uleshort !0 \b, zeroes 0x%x
+>0xc uleshort !0 \b, zeroes %#x
# Mapsource flag, 1 - file created by Mapsource, 0 - Garmin map visible in Basecamp and Homeport
-#>0xE ubyte !0 \b, Mapsource flag 0x%x
+#>0xE ubyte !0 \b, Mapsource flag %#x
>0xE ubyte 1 \b, Mapsource
# Checksum, sum of all bytes modulo 256 should be 0
-#>0xF ubyte x \b, Checksum 0x%x
+#>0xF ubyte x \b, Checksum %#x
# Signature: DSKIMG 0x00 or DSDIMG 0x00 for demo map
>0x10 string !DSKIMG \b, signature "%.7s"
>0x39 use garmin-date
@@ -99,20 +99,20 @@
# MBR signature
>0x1FE leshort !0xAA55 \b, invalid MBR
# 512 zeros
->0x200 uquad !0 \b, zeroes 0x%llx
+>0x200 uquad !0 \b, zeroes %#llx
# First sub-file offset (absolute); sometimes NO/UNKNOWN sub file!
->0x40C ulelong >0 \b, at 0x%x
+>0x40C ulelong >0 \b, at %#x
# sub-file Header length
-#>>(0x40C.l) uleshort x \b, header len 0x%x
+#>>(0x40C.l) uleshort x \b, header len %#x
>>(0x40C.l) uleshort x %u bytes
# sub-file Type[10] like "GARMIN RGN" "GARMIN TRE", "GARMIN TYP", etc.
>>(0x40C.l+2) ubyte >0x1F
>>>(0x40C.l+2) ubyte <0xFF
>>>>(0x40C.l+2) string x "%.10s"
# 0x00 for most maps, 0x80 for locked maps (City Nav, City Select, etc.)
->>>>(0x40C.l+13) ubyte >0 \b, locked 0x%x
+>>>>(0x40C.l+13) ubyte >0 \b, locked %#x
# Block sequence numbers like 0000 0100 0200 ... FFFF
-# >0x420 ubequad >0 \b, seq. 0x%16.16llx
+# >0x420 ubequad >0 \b, seq. %#16.16llx
# >>0x428 ubequad >0 \b%16.16llx
# >>>0x430 ubequad >0 \b%16.16llx
# >>>>0x438 ubequad >0 \b%16.16llx
@@ -147,12 +147,12 @@
# ... xth FAT block
#
# 314 zeros but not in vpm and also gmaptz.img
->0x84 uquad !0 \b, at 0x84 0x%llx
+>0x84 uquad !0 \b, at 0x84 %#llx
# display FileAllocationTable block entry in garmin map
0 name garmin-fat
>0 ubyte x \b;
# sub file part; 0x0003 seems to be garbage
->0x10 uleshort !0 next 0x%4.4x
+>0x10 uleshort !0 next %#4.4x
>0x10 uleshort =0
# fat flag 0~dummy block 1~true sub file
>>0 ubyte !1 flag %u
@@ -164,7 +164,7 @@
# size of sub file
>>>0xC ulelong x \b, %u bytes
# 32-bit block sequence numbers
-#>>>0x20 ubequad x \b, seq. 0x%16.16llx
+#>>>0x20 ubequad x \b, seq. %#16.16llx
# display date stored inside Garmin maps like yyyy-mm-dd h:mm:ss
0 name garmin-date
@@ -207,38 +207,38 @@
!:mime application/x-garmin-nod
!:ext nod
>>>0x0E use garmin-date
-#>>>0x15 ulelong x \b, at 0x%x
-#>>>0x19 ulelong x 0x%x bytes NOD1
-#>>>0x25 ulelong x \b, at 0x%x
-#>>>0x29 ulelong x 0x%x bytes NOD2
-#>>>0x31 ulelong x \b, at 0x%x
-#>>>0x35 ulelong x 0x%x bytes NOD3
+#>>>0x15 ulelong x \b, at %#x
+#>>>0x19 ulelong x %#x bytes NOD1
+#>>>0x25 ulelong x \b, at %#x
+#>>>0x29 ulelong x %#x bytes NOD2
+#>>>0x31 ulelong x \b, at %#x
+#>>>0x35 ulelong x %#x bytes NOD3
# URL: http://www.pinns.co.uk/osm/net.html
# routable highways (length, direction, allowed speed,house address information)
>>9 string NET highways
!:mime application/x-garmin-net
!:ext net
-#>>>0x15 ulelong x \b, at 0x%x
-#>>>0x19 ulelong x 0x%x bytes NET1
+#>>>0x15 ulelong x \b, at %#x
+#>>>0x19 ulelong x %#x bytes NET1
#>>>0x22 ulelong >0
-#>>>>0x1E ulelong x \b, at 0x%x
-#>>>>0x22 ulelong x 0x%x bytes NET2
+#>>>>0x1E ulelong x \b, at %#x
+#>>>>0x22 ulelong x %#x bytes NET2
#>>>0x2B ulelong >0
-#>>>>0x27 ulelong x \b, at 0x%x
-#>>>>0x2B ulelong x 0x%x bytes NET3
+#>>>>0x27 ulelong x \b, at %#x
+#>>>>0x2B ulelong x %#x bytes NET3
# URL: https://wiki.openstreetmap.org/wiki/OSM_Map_On_Garmin/LBL_Subfile_Format
>>9 string LBL labels
!:mime application/x-garmin-lbl
!:ext lbl
>>>(0.s) string x %s
# Label coding type 6h 9h and ah
->>>0x1E ubyte x \b, coding type 0x%x
-#>>>0x15 ulelong x \b, at 0x%x
-#>>>0x19 ulelong x 0x%x bytes LBL1
-#>>>0x1F ulelong x \b, at 0x%x
-#>>>0x23 ulelong x 0x%x bytes LBL2
-#>>>0x2D ulelong x \b, at 0x%x
-#>>>0x31 ulelong x 0x%x bytes LBL3
+>>>0x1E ubyte x \b, coding type %#x
+#>>>0x15 ulelong x \b, at %#x
+#>>>0x19 ulelong x %#x bytes LBL1
+#>>>0x1F ulelong x \b, at %#x
+#>>>0x23 ulelong x %#x bytes LBL2
+#>>>0x2D ulelong x \b, at %#x
+#>>>0x31 ulelong x %#x bytes LBL3
# URL: https://wiki.openstreetmap.org/wiki/OSM_Map_On_Garmin/SRT_Subfile_Format
# A lookup table of the chars in the map's codepage, and their collating sequence
>>9 string SRT sort table
@@ -256,16 +256,16 @@
# or http://www.openstreetmap.org/
>>>>&1 string x %s
>>>0x0E use garmin-date
-#>>>0x21 ulelong x \b, at 0x%x
-#>>>0x25 ulelong x 0x%x bytes TRE1
-#>>>0x29 ulelong x \b, at 0x%x
-#>>>0x2D ulelong x 0x%x bytes TRE2
-#>>>0x31 ulelong x \b, at 0x%x
-#>>>0x35 ulelong x 0x%x bytes TRE3
+#>>>0x21 ulelong x \b, at %#x
+#>>>0x25 ulelong x %#x bytes TRE1
+#>>>0x29 ulelong x \b, at %#x
+#>>>0x2D ulelong x %#x bytes TRE2
+#>>>0x31 ulelong x \b, at %#x
+#>>>0x35 ulelong x %#x bytes TRE3
# Copyright record size
#>>>0x39 uleshort x \b, copyright record size %u
# Map ID
->>>0x74 ulelong x \b, ID 0x%x
+>>>0x74 ulelong x \b, ID %#x
# URL: https://www.gpspower.net/garmin-tutorials/353310-basecamp-installing-free-desktop-map.html
# For road traffic information service (RDS/TMS/TMC). Commonly seen in City Navigator maps
>>9 string TRF traffic,
@@ -285,11 +285,11 @@
# character set 1252 65001~UTF8
>>>0x15 uleshort x \b, code page %u
# POIs
-#>>>0x17 ulelong x \b, at 0x%x
-#>>>0x1B ulelong x 0x%x bytes TYP1
+#>>>0x17 ulelong x \b, at %#x
+#>>>0x1B ulelong x %#x bytes TYP1
# extra pois
-#>>>0x5B ulelong x \b, at 0x%x
-#>>>0x5F ulelong x 0x%x bytes TYP8
+#>>>0x5B ulelong x \b, at %#x
+#>>>0x5F ulelong x %#x bytes TYP8
# URL: https://wiki.openstreetmap.org/wiki/OSM_Map_On_Garmin/RGN_Subfile_Format
# http://www.pinns.co.uk/osm/RGN.html
# region data used by the Garmin software
@@ -297,24 +297,24 @@
!:mime application/x-garmin-rgn
!:ext rgn
# POIs,Indexed POIs,Polylines or Polygons or first map level
-#>>>0x15 ulelong x \b, at 0x%x
-#>>>0x19 ulelong x 0x%x bytes RGN1
+#>>>0x15 ulelong x \b, at %#x
+#>>>0x19 ulelong x %#x bytes RGN1
# polygons with extended types
#>>>0x21 ulelong >0
-#>>>>0x1D ulelong x \b, at 0x%x
-#>>>>0x21 ulelong x 0x%x bytes RGN2
+#>>>>0x1D ulelong x \b, at %#x
+#>>>>0x21 ulelong x %#x bytes RGN2
# polylines with extended types
#>>>0x3D ulelong >0
-#>>>>0x39 ulelong x \b, at 0x%x
-#>>>>0x3D ulelong x 0x%x bytes RGN3
+#>>>>0x39 ulelong x \b, at %#x
+#>>>>0x3D ulelong x %#x bytes RGN3
# extended POIs
#>>>0x59 ulelong >0
-#>>>>0x55 ulelong x \b, at 0x%x
-#>>>>0x59 ulelong x 0x%x bytes RGN3
+#>>>>0x55 ulelong x \b, at %#x
+#>>>>0x59 ulelong x %#x bytes RGN3
#>>9 default x unknown map type
# Header length; GMP:31h 35h 3Dh,MDR:11Eh 238h 2C4h 310h,NOD:3Fh 7Fh,NET:64h,
# LBL:2A9h,SRT:1Dh 25h 27h,TRE:CFh 135h,TRF:5Ah,TYP:5Bh 6Eh 7Ch AEh,RGN:7Dh
->>0 uleshort x \b, header length 0x%x
+>>0 uleshort x \b, header length %#x
# URL: https://www.memotech.franken.de/FileFormats/
# Reference: https://www.memotech.franken.de/FileFormats/Garmin_RGN_Format.pdf
@@ -357,7 +357,7 @@
# display information of Garmin RGN record
0 name garmin-entry
# record length: 2 for Data, for Application often 1Bh sometimes 1Dh, "big" for Region
-#>0 ulelong x \b, length 0x%x
+#>0 ulelong x \b, length %#x
# data record (ID='D') with version content like 0064h~1.0
>4 ubyte =0x44
>>5 uleshort !0x0064 \b; Data
@@ -382,11 +382,11 @@
# delay in ms: like 0, 500
>>7 ulelong !0 \b, %u ms
# region size (is record length - 10)
-#>>11 ulelong x \b, length 0x%x
+#>>11 ulelong x \b, length %#x
# region content like:
# "KpGr"~recursiv embedded,"GARMIN BITMAP"~Garmin Bitmap *.srf, "PK"~ZIP archive
#>>15 string x \b, content "%s"
->>15 ubequad x \b, content 0x%llx...
+>>15 ubequad x \b, content %#llx...
# This does NOT WORK!
#>>15 indirect x \b; contains
>4 default x \b; other
diff --git a/magic/Magdir/maple b/magic/Magdir/maple
index 44ab2842b604..80cf9f29a114 100644
--- a/magic/Magdir/maple
+++ b/magic/Magdir/maple
@@ -1,20 +1,72 @@
#------------------------------------------------------------------------------
-# $File: maple,v 1.8 2017/03/17 21:35:28 christos Exp $
+# $File: maple,v 1.10 2021/08/30 13:31:25 christos Exp $
# maple: file(1) magic for maple files
# "H. Nanosecond" <aldomel@ix.netcom.com>
# Maple V release 4, a multi-purpose math program
#
# maple library .lib
-0 string \000MVR4\nI MapleVr4 library
+# URL: https://en.wikipedia.org/wiki/Maple_(software)
+# Reference: http://mark0.net/download/triddefs_xml.7z/defs/l/lib-maple-v-r4.trid.xml
+# Update: Joerg Jenderek
+0 string \000MVR4\nI Maple Vr4 library
+#!:mime application/octet-stream
+!:mime application/x-maple-lib
+!:ext lib
+
+# URL: https://en.wikipedia.org/wiki/Maple_(software)
+# Reference: http://mark0.net/download/triddefs_xml.7z/defs/l/lib-maple-v-r5.trid.xml
+# From: Joerg Jenderek
+0 string \000MVR5\n Maple Vr5 library
+#!:mime application/octet-stream
+!:mime application/x-maple-lib
+!:ext lib
+
+# From: Joerg Jenderek
+0x400 string M7R0\nI Maple Vr7 library
+#!:mime application/octet-stream
+!:mime application/x-maple-lib
+!:ext lib
+# null terminated library name like: C:\Maple12/Cliffordlib\maple.lib ../Maplets/Tutors.lib
+>5 string x %s
+# probably library name padding with nil or points (0x2E)
+#>0xF8 uquad x \b, PADDING 0x%16.16llx
+# null terminated strings like: Exterior Clifford FunctionArithmetics
+# like: 1 20 40
+>0x115 ulelong x \b, %u string
+# plural s
+>0x115 ulelong >1 \bs
+>0x119 string x 1st '%s'
+# probably second name section padding with nil or points (0x2E)
+#>0x3F0 uquad x \b, 2nd PADDING 0x%16.16llx
+# line feed separated ASCII string with maximal 79 length
+#>0x407 string x \b, section "%s"
+>0x454 ubyte !0x0a \b, at 0x454 0x%x
# .ind
# no magic for these :-(
# they are compiled indexes for maple files
# .hdb
-0 string \000\004\000\000 Maple help database
+# Update: Joerg Jenderek
+# URL: https://www.maplesoft.com/support/help/maple/view.aspx?path=Formats/HDB
+# Reference: http://mark0.net/download/triddefs_xml.7z/defs/h/hdb-maple.trid.xml
+# Note: This format was replaced in Maple 18 by the Maple Help format (*.help)
+0 string \000\004\000\000
+# skip xBASE Compound Index file *.CDX by looking for version
+>1028 string version Maple help database
+# length of string version
+#>>1024 ulelong !7 \b, at 0x400 unexpected %u
+#!:mime application/octet-stream
+!:mime application/x-maple-hdb
+!:ext hdb
+>1028 default x
+# skip more xBASE Compound Index file *.CDX by looking for keyword Maple
+# like hsum.hdb
+>>4 search/0xCC41 Maple Maple help database
+!:mime application/x-maple-hdb
+!:ext hdb
# .mhp
# this has the form <PACKAGE=name>
diff --git a/magic/Magdir/mathematica b/magic/Magdir/mathematica
index e76957eea43a..77903b5fe8c3 100644
--- a/magic/Magdir/mathematica
+++ b/magic/Magdir/mathematica
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: mathematica,v 1.9 2017/03/17 21:35:28 christos Exp $
+# $File: mathematica,v 1.13 2021/07/14 09:06:24 christos Exp $
# mathematica: file(1) magic for mathematica files
# "H. Nanosecond" <aldomel@ix.netcom.com>
# Mathematica a multi-purpose math program
@@ -13,7 +13,7 @@
!:ext mb
# .ma
-# multiple possibilites:
+# multiple possibilities:
0 string (*^\n\n::[\011frontEndVersion\ =\ Mathematica notebook
#>41 string >\0 %s
@@ -24,7 +24,7 @@
#0 string (*^\n\n::[\011Information Mathematica notebook version 2.x
#>675 string >\0 %s #doesn't work well
-# there may be 'cr' instread of 'nl' in some does this matter?
+# there may be 'cr' instead of 'nl' in some does this matter?
# generic:
0 string (*^\r\r::[\011 Mathematica notebook version 2.x
@@ -73,9 +73,90 @@
#########################
# MatLab v5
-0 string MATLAB Matlab v5 mat-file
+# URL: http://fileformats.archiveteam.org/wiki/MAT
+# Reference: https://www.mathworks.com/help/pdf_doc/matlab/matfile_format.pdf
+# first 116 bytes of header contain text in human-readable form
+0 string MATLAB Matlab v
+#>11 string/T x \b, at 11 "%.105s"
+#!:mime application/octet-stream
+!:mime application/x-matlab-data
+!:ext mat
+# https://de.mathworks.com/help/matlab/import_export/mat-file-versions.html
+# level of the MAT-file like: 5.0 7.0 or maybe 7.3
+#>7 string x LEVEL "%.3s"
+>7 ubyte =0x35 \b5 mat-file
+>7 ubyte !0x35
+>>7 string x \b%.3s mat-file
>126 short 0x494d (big endian)
->>124 beshort x version 0x%04x
+>>124 beshort x version %#04x
>126 short 0x4d49 (little endian)
->>124 leshort x version 0x%04x
-
+# 0x0100 for level 5.0 and 0x0200 for level 7.0
+>>124 leshort x version %#04x
+# test again so that default clause works
+>126 short x
+# created by MATLAB include Platform sometimes without leading comma (0x2C) or missing
+# like: GLNX86 PCWIN PCWIN64 SOL2 Windows\0407 nt posix
+>>20 search/2 Platform:\040 \b, platform
+>>>&0 string x %-0.2s
+>>>&2 ubyte !0x2C \b%c
+>>>>&0 ubyte !0x2C \b%c
+>>>>>&0 ubyte !0x2C \b%c
+>>>>>>&0 ubyte !0x2C \b%c
+>>>>>>>&0 ubyte !0x2C \b%c
+>>>>>>>>&0 ubyte !0x2C \b%c
+>>>>>>>>>&0 ubyte !0x2C \b%c
+# examples without Platform tag like one_by_zero_char.mat
+>>20 default x
+>>>11 string x "%s"
+# created by MATLAB include time like: Fri Feb 20 15:26:59 2009
+>34 search/9/c created\040on:\040 \b, created
+>>&0 string x %-.24s
+# MatLab v4
+# From: Joerg Jenderek
+# check for valid imaginary flag of Matlab matrix version 4
+13 ushort 0
+# check for valid ASCII matrix name
+>20 ubyte >0x1F
+# skip some CD-ROM filesystem like test-hfs.iso by looking for valid big endian type flag
+>>0 ubelong&0xFFffFF00 0x00000300
+>>>0 use matlab4
+# no example for 8-bit and 16-bit integers matrix
+>>0 ubelong&0xFFffFF00 0x00000400
+>>>0 use matlab4
+>>0 ulelong x
+# skip big endian variant by looking for valid low lttle endian type flag
+>>0 ulelong <53
+>>>0 use \^matlab4
+# display information of Matlab v4 mat-file
+0 name matlab4 Matlab v4 mat-file
+#!:mime application/octet-stream
+!:mime application/x-matlab-data
+!:ext mat
+# 20-byte header with 5 long integers that contains information describing certain attributes of the Matrix
+# type flag decimal MOPT; maximal 4052=FD4h; maximal 52=34h for little endian
+#>0 ubelong x \b, type flag %u
+#>0 ubelong x (%#x)
+# M: 0~little endian 1~Big Endian 2~VAX D-float 3~VAX G-float 4~Cray
+#>0 ubelong/1000 x \b, M=%u
+>0 ubelong/1000 0 (little endian)
+>0 ubelong/1000 1 (big endian)
+>0 ubelong/1000 2 (VAX D-float)
+>0 ubelong/1000 3 (VAX G-float)
+>0 ubelong/1000 4 (Cray)
+# namlen; the length of the matrix name
+#>16 ubelong x \b, name length %u
+# nul terminated matrix name like: fit_params testmatrix testsparsecomplex teststringarray
+#>20 string x \b, MATRIX NAME="%s"
+>16 pstring/L x %s
+# T indicates the matrix type: 0~numeric 1~text 2~sparse
+#>0 ubelong%10 x \b, T=%u
+>0 ubelong%10 0 \b, numeric
+>0 ubelong%10 1 \b, text
+>0 ubelong%10 2 \b, sparse
+# mrows; number of rows in the matrix like: 1 3 8
+>4 ubelong x \b, rows %u
+# ncols; number of columns in the matrix like: 1 3 4 5 9 43
+>8 ubelong x \b, columns %u
+# imagf; imaginary flag; 1~matrix has an imaginary part 0~only real data
+>12 ubelong !0 \b, imaginary
+# real; Real part of the matrix consists of mrows * ncols numbers
diff --git a/magic/Magdir/measure b/magic/Magdir/measure
index c99cac841125..42e7186484c8 100644
--- a/magic/Magdir/measure
+++ b/magic/Magdir/measure
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: measure,v 1.2 2018/06/23 16:13:15 christos Exp $
+# $File: measure,v 1.3 2021/03/25 17:30:10 christos Exp $
# measure: file(1) magic for measurement data
# DIY-Thermocam raw data
@@ -37,3 +37,8 @@
>>9600 default x (Lepton 2.x),
>>>9600 use diy-thermocam-parser
+# Becker & Hickl Photon Counting (PMS) data file
+# format documentation: https://www.becker-hickl.com/wp-content/uploads/2018/11/opm-pms400-v01.pdf (page 57)
+(0x02.l) string *IDENTIFICATION Becker & Hickl PMS Data File
+>0x12 short x (%d data blocks)
+!:ext sdt
diff --git a/magic/Magdir/misctools b/magic/Magdir/misctools
index cef1da5f4e5f..4292e2b0401a 100644
--- a/magic/Magdir/misctools
+++ b/magic/Magdir/misctools
@@ -1,22 +1,37 @@
#-----------------------------------------------------------------------------
-# $File: misctools,v 1.18 2019/04/19 00:42:27 christos Exp $
+# $File: misctools,v 1.20 2021/05/25 15:13:55 christos Exp $
# misctools: file(1) magic for miscellaneous UNIX tools.
#
0 search/1 %%!! X-Post-It-Note text
0 string/c BEGIN:VCALENDAR vCalendar calendar file
!:mime text/calendar
-# updated by Joerg Jenderek at Apr 2015
-# Extension: .vcf
+# updated by Joerg Jenderek at Apr 2015, May 2021
# https://en.wikipedia.org/wiki/VCard
-0 string/c BEGIN:VCARD vCard visiting card
+# URL: http://fileformats.archiveteam.org/wiki/VCard
+# https://datatracker.ietf.org/doc/html/rfc6350
+# the value is case-insensitive
+0 string/c begin:vcard
+# skip DROID fmt-395-signature-id-634.vcf
+>13 string !VERSION:END vCard visiting card
# deprecated
#!:mime text/x-vcard
!:mime text/vcard
+!:apple ????vCrd
+!:ext vcf/vcard
# VERSION must come right after BEGIN for 3.0 or 4.0 except in 2.1 , where it can be anywhere
->12 search/14000/c VERSION:
+# Joerg_Jenderek_67.vcf
+>>12 search/0x113b4/c version:
# VERSION 2.1 , 3.0 or 4.0
->>&0 string x \b, version %-.3s
+>>>&0 string x \b, version %-.3s
+>>>&0 string !2.1
+>>>>13 string !VERSION: \b, 2nd line does not start with VERSION:
+# downcase violates RFC 6350, but some "bad" software produce such vcards
+>>0 string !BEGIN \b, not up case
+# http://ftp.mozilla.org/pub/thunderbird/candidates/
+# 78.10.1-candidates/build1/source/thunderbird-78.10.1.source.tar.xz
+# thunderbird-78.10.1/comm/mailnews/import/test/unit/resources/basic_vcard_addressbook.vcf
+>>11 beshort !0x0D0A \b, lines not separated by CRLF
# Summary: Libtool library file
# Extension: .la
@@ -41,18 +56,18 @@
!:ext dmp/mdmp
# The high-order word is an internal value that is implementation specific.
# The low-order word is MINIDUMP_VERSION 0xA793
->4 ulelong&0x0000FFFF !0xA793 \b, version 0x%4.4x
+>4 ulelong&0x0000FFFF !0xA793 \b, version %#4.4x
# NumberOfStreams 8,9,10,13
>8 ulelong x \b, %d streams
# StreamDirectoryRva 0x20
->12 ulelong !0x20 \b, 0x%8.8x RVA
+>12 ulelong !0x20 \b, %#8.8x RVA
# CheckSum 0
->16 ulelong !0 \b, CheckSum 0x%8.8x
+>16 ulelong !0 \b, CheckSum %#8.8x
# Reserved or TimeDateStamp
>20 ledate x \b, %s
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms680519%28v=vs.85%29.aspx
# Flags MINIDUMP_TYPE enumeration type 0 0x121 0x800
->24 ulelong x \b, 0x%x type
+>24 ulelong x \b, %#x type
# >24 ulelong >0 \b; include
# >>24 ulelong &0x00000001 \b data sections,
# >>24 ulelong &0x00000020 \b list of unloaded modules,
diff --git a/magic/Magdir/modem b/magic/Magdir/modem
index c7a53ee436fe..6eb21136e462 100644
--- a/magic/Magdir/modem
+++ b/magic/Magdir/modem
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: modem,v 1.9 2019/04/19 00:42:27 christos Exp $
+# $File: modem,v 1.10 2021/04/26 15:56:00 christos Exp $
# modem: file(1) magic for modem programs
#
# From: Florian La Roche <florian@knorke.saar.de>
@@ -59,7 +59,7 @@
#
0 string RMD1 raw modem data
>4 string >\0 (%s /
->20 short >0 compression type 0x%04x)
+>20 short >0 compression type %#04x)
#
# portable voice format 1
diff --git a/magic/Magdir/motorola b/magic/Magdir/motorola
index e19a9075621f..af93720f2968 100644
--- a/magic/Magdir/motorola
+++ b/magic/Magdir/motorola
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: motorola,v 1.11 2014/04/30 21:41:02 christos Exp $
+# $File: motorola,v 1.12 2021/04/26 15:56:00 christos Exp $
# motorola: file(1) magic for Motorola 68K and 88K binaries
#
# 68K
@@ -60,7 +60,7 @@
>22 belong &0x01 fastload flag,
>22 belong &0x02 may be loaded to alternate RAM,
>22 belong &0x04 malloc may be from alternate RAM,
->22 belong x flags: 0x%X,
+>22 belong x flags: %#X,
>26 beshort 0 no relocation tab
>26 beshort !0 + relocation tab
>30 string SFX [Self-Extracting LZH SFX archive]
diff --git a/magic/Magdir/mozilla b/magic/Magdir/mozilla
index bc6b6a66b91e..32f3bb7e9c46 100644
--- a/magic/Magdir/mozilla
+++ b/magic/Magdir/mozilla
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: mozilla,v 1.10 2019/04/19 00:42:27 christos Exp $
+# $File: mozilla,v 1.12 2021/04/26 15:56:00 christos Exp $
# mozilla: file(1) magic for Mozilla XUL fastload files
# (XUL.mfasl and XPC.mfasl)
# URL: https://www.mozilla.org/
@@ -14,7 +14,7 @@
# Reference: https://github.com/avih/dejsonlz4/archive/master.zip/
# dejsonlz4-master\src\dejsonlz4.c
# Note: mostly JSON compressed with a non-standard LZ4 header
-# can be unpacked by dejsonlz4 but not lz4 programm.
+# can be unpacked by dejsonlz4 but not lz4 program.
0 string mozLz40\0 Mozilla lz4 compressed data
!:mime application/x-lz4+json
# mozlz4 extension seems to be used for search/store, while jsonlz4 for bookmarks
@@ -22,7 +22,7 @@
# decomp_size
>8 ulelong x \b, originally %u bytes
# lz4 data
-#>12 ubequad x \b, lz4 data 0x%16.16llx
+#>12 ubequad x \b, lz4 data %#16.16llx
# From: Joerg Jenderek
# URL: https://en.wikipedia.org/wiki/Firefox_4
diff --git a/magic/Magdir/msdos b/magic/Magdir/msdos
index 7ddbb30fbbe0..c586210218bf 100644
--- a/magic/Magdir/msdos
+++ b/magic/Magdir/msdos
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: msdos,v 1.137 2020/03/20 17:20:19 christos Exp $
+# $File: msdos,v 1.152 2021/10/12 18:26:10 christos Exp $
# msdos: file(1) magic for MS-DOS files
#
@@ -47,7 +47,7 @@
# Tests for various EXE types.
#
-# Many of the compressed formats were extraced from IDARC 1.23 source code.
+# Many of the compressed formats were extracted from IDARC 1.23 source code.
#
0 string/b MZ
# All non-DOS EXE extensions have the relocation table more than 0x40 bytes into the file.
@@ -55,7 +55,9 @@
!:mime application/x-dosexec
# Windows and later versions of DOS will allow .EXEs to be named with a .COM
# extension, mostly for compatibility's sake.
-!:ext exe/com
+# URL: https://en.wikipedia.org/wiki/Personal_NetWare#VLM
+# Reference: https://mark0.net/download/triddefs_xml.7z/defs/e/exe-vlm-msg.trid.xml
+!:ext exe/com/vlm
# These traditional tests usually work but not always. When test quality support is
# implemented these can be turned on.
#>>0x18 leshort 0x1c (Borland compiler)
@@ -68,7 +70,7 @@
>>(0x3c.l+24) leshort 0x020b \b32+ executable
>>(0x3c.l+24) leshort 0x0107 ROM image
>>(0x3c.l+24) default x Unknown PE signature
->>>&0 leshort x 0x%x
+>>>&0 leshort x %#x
>>(0x3c.l+22) leshort&0x2000 >0 (DLL)
>>(0x3c.l+92) leshort 1
# Native PEs include ntoskrnl.exe, hal.dll, smss.exe, autochk.exe, and all the
@@ -107,7 +109,7 @@
>>(0x3c.l+92) leshort 14 (XBOX)
>>(0x3c.l+92) leshort 15 (Windows boot application)
>>(0x3c.l+92) default x (Unknown subsystem
->>>&0 leshort x 0x%x)
+>>>&0 leshort x %#x)
>>(0x3c.l+4) leshort 0x14c Intel 80386
>>(0x3c.l+4) leshort 0x166 MIPS R4000
>>(0x3c.l+4) leshort 0x168 MIPS R10000
@@ -139,7 +141,7 @@
>>(0x3c.l+4) leshort 0xaa64 Aarch64
>>(0x3c.l+4) leshort 0xc0ee MSIL
>>(0x3c.l+4) default x Unknown processor type
->>>&0 leshort x 0x%x
+>>>&0 leshort x %#x
>>(0x3c.l+22) leshort&0x0200 >0 (stripped to external PDB)
>>(0x3c.l+22) leshort&0x1000 >0 system file
>>(0x3c.l+24) leshort 0x010b
@@ -289,7 +291,7 @@
>>>&1 string x for DOS, Win or OS/2, emx %s
>>&(&0x42.l-3) byte x
>>>&0x26 string UPX \b, UPX compressed
-# and yet another guess: small .text, and after large .data is unusal, could be 32lite
+# and yet another guess: small .text, and after large .data is unusual, could be 32lite
>>&0x2c search/0xa0 .text
>>>&0x0b lelong <0x2000
>>>>&0 lelong >0x6000 \b, 32lite compressed
@@ -362,12 +364,93 @@
>>49824 leshort =1 \b, 1 file
>>49824 leshort >1 \b, %u files
+# Summary: OS/2 LX Library and device driver (no DOS stub)
+# From: Joerg Jenderek
+# URL: http://en.wikipedia.org/wiki/EXE
+# Reference: http://www.textfiles.com/programming/FORMATS/lxexe.txt
+# https://github.com/open-watcom/open-watcom-v2/blob/master/bld/watcom/h/exeflat.h
+# Note: by dll-os2-no-dos-stub.trid.xml called "OS/2 Dynamic Link Library (no DOS stub)"
+# TODO: unify with DOS stub variant (MZ magic)
+0 string/b LX
+>2 ushort =0
+>>0 use lx-executable
+# no examples found for big endian variant
+>2 ushort =0x0101
+>>0 use \^lx-executable
+0 name lx-executable
+# similar looking like variant with MS-DOS stub (MZ magic): "MS-DOS executable, LX"
+#>0x00 uleshort x executable,
+# signature OSF_FLAT_LX_SIGNATURE~0x584C~LX OSF_FLAT_SIGNATURE~0x454C~LE
+>0x00 uleshort =0x584c LX
+>0x00 uleshort =0x454C LE
+>0x00 uleshort x executable
+#!:mime application/x-msdownload
+!:mime application/x-lx-executable
+# byte order: 00h~little-endian non-zero=1~big-endian
+#>0x02 ubyte =0 (little-endian)
+>0x02 ubyte !0 (big-endian)
+# FOR DEBUGGING!
+# word order: 00h~little-endian non-zero=1~big-endian
+#>0x03 ubyte =0 \b, little-endian word order
+#>0x03 ubyte !0 \b, big-endian word order
+# 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
+#>0x08 uleshort x \b, CPU %u
+# os_type; target operating system like: 0~unknown 1~OS/2 2~Windows 3~DOS 4.x 4~Windows 386
+#>0x0A leshort x \b, OS %u
+# flags; module type flags
+#>0x10 ulelong x \b, FLAGS %#8.8x
+# 00000002h ~Reserved for system use
+#>0x10 ulelong &0x00000002 \b, 2h reserved
+# OSF_INIT_INSTANCE=00000004h ~Per-Process Library Initialization; setting this bit for EXE file is invalid
+#>0x10 ulelong &0x00000004 \b, per-process library Initialization
+# OSF_INTERNAL_FIXUPS_DONE=00000010h ~Internal fixups for the module have been applied
+#>0x10 ulelong &0x00000010 \b, int. fixup
+# OSF_EXTERNAL_FIXUPS_DONE=00000020h ~External fixups for the module have been applied
+#>0x10 ulelong &0x00000020 \b, ext. fixup
+# OSF_NOT_PM_COMPATIBLE=00000100h ~Incompatible with PM windowing
+#>0x10 ulelong&0x00000100 =0x00000100 \b, incompatible with PM windowing
+# OSF_PM_COMPATIBLE=00000200h ~Compatible with PM windowing
+#>0x10 ulelong&0x00000200 =0x00000200 \b, compatible with PM windowing
+# bit 17; device driver
+#>0x10 ulelong&0x00020000 >0 \b, device driver
+# Per-process Library Termination; setting this bit for EXE file is invalid
+#>0x10 ulelong&0x40000000 =0x40000000 \b, per-process library termination
+>0x0a leshort 1 for OS/2
+# no example found
+>0x0a leshort 3 for DOS
+# http://www.ctyme.com/intr/rb-2939.htm#Table1610
+# library by module type mask 00038000h (bits 15-17);
+# 0h ~exectable Program module
+>0x10 ulelong&0x00038000 =0x00000000 (program)
+#!:ext exe
+# OSF_IS_DLL=8000h ~Library module (DLL)
+>0x10 ulelong&0x00038000 >0x00000000
+# OSF_PHYS_DEVICE=00020000h ~device driver
+>>0x10 ulelong&0x00020000 >0 (device driver)
+!:ext sys
+# if not device driver it is library (DLL)
+>>0x10 ulelong&0x00020000 =0 (library)
+!:ext dll
+# bits 8-10; OSF_PM_APP=300h in flags ~Uses PM windowing API; either it is GUI or console
+>0x10 ulelong&0x00000300 =0x00000300 (GUI)
+>0x10 ulelong&0x00000300 !0x00000300 (console)
+# CPU type
+>0x08 uleshort 1 i80286
+# all inspected examples
+>0x08 uleshort 2 i80386
+>0x08 uleshort 3 i80486
+>0x08 uleshort 4 i80586
+# 21h Intel "N11" or compatible
+# 40h MIPS Mark I ( R2000, R3000) or compatible
+# 41h MIPS Mark II ( R6000 ) or compatible
+# 42h MIPS Mark III ( R4000 ) or compatible
+
# added by Joerg Jenderek of https://www.freedos.org/software/?prog=kc
# and https://www.freedos.org/software/?prog=kpdos
# for FreeDOS files like KEYBOARD.SYS, KEYBRD2.SYS, KEYBRD3.SYS, *.KBD
0 string/b KCF FreeDOS KEYBoard Layout collection
# only version=0x100 found
->3 uleshort x \b, version 0x%x
+>3 uleshort x \b, version %#x
# length of string containing author,info and special characters
>6 ubyte >0
#>>6 pstring x \b, name=%s
@@ -378,42 +461,54 @@
# for FreeDOS *.KL files
0 string/b KLF FreeDOS KEYBoard Layout file
# only version=0x100 or 0x101 found
->3 uleshort x \b, version 0x%x
+>3 uleshort x \b, version %#x
# stringlength
>5 ubyte >0
>>8 string x \b, name=%-.2s
0 string \xffKEYB\ \ \ \0\0\0\0
>12 string \0\0\0\0`\004\360 MS-DOS KEYBoard Layout file
-# DOS device driver updated by Joerg Jenderek at May 2011,Mar 2017
+# DOS device driver updated by Joerg Jenderek at May 2011,Mar 2017,Aug 2020
+# URL: http://fileformats.archiveteam.org/wiki/DOS_device_driver
+# Reference: http://www.delorie.com/djgpp/doc/rbinter/it/46/16.html
# https://amaus.net/static/S100/IBM/software/DOS/DOS%20techref/CHAPTER.009
0 ulequad&0x07a0ffffffff 0xffffffff
->0 use msdos-driver
+# skip OS/2 INI ./os2
+>4 ubelong !0x14000000
+>>0 use msdos-driver
0 name msdos-driver DOS executable (
#!:mime application/octet-stream
!:mime application/x-dosdriver
# also found FreeDOS print driver SPOOL.DEV and disc compression driver STACLOAD.BIN
-!:ext sys/dev/bin
->40 search/7 UPX! \bUPX compressed
+# and IBM Token-Ring adapter IBMTOK.DOS. Why and when DOS instead SYS is used?
+# PROTMAN.DOS ELNKPL.DOS
+!:ext sys/dev/bin/dos
+# 1 space char after "UPX compressed" to get phrase like "UPX compressed character device"
+>40 search/7 UPX! \bUPX compressed
# DOS device driver attributes
>4 uleshort&0x8000 0x0000 \bblock device driver
# character device
>4 uleshort&0x8000 0x8000 \b
->>4 uleshort&0x0008 0x0008 \bclock
+# 1 space char after "clock" to get phrase like "clock character device driver CLOCK$"
+>>4 uleshort&0x0008 0x0008 \bclock
# fast video output by int 29h
->>4 uleshort&0x0010 0x0010 \bfast
+# 1 space char after "fast" to get phrase like "fast standard input/output character device driver"
+>>4 uleshort&0x0010 0x0010 \bfast
# standard input/output device
->>4 uleshort&0x0003 >0 \bstandard
+# 1 space char after "standard" to get phrase like "standard input/output character device driver"
+>>4 uleshort&0x0003 >0 \bstandard
>>>4 uleshort&0x0001 0x0001 \binput
>>>4 uleshort&0x0003 0x0003 \b/
->>>4 uleshort&0x0002 0x0002 \boutput
+# 1 space char after "output" to get phrase like "input/output character device driver"
+>>>4 uleshort&0x0002 0x0002 \boutput
>>4 uleshort&0x8000 0x8000 \bcharacter device driver
>0 ubyte x
# upx compressed device driver has garbage instead of real in name field of header
>>40 search/7 UPX!
>>40 default x
# leading/trailing nulls, zeros or non ASCII characters in 8-byte name field at offset 10 are skipped
->>>12 ubyte >0x2E \b
+# 1 space char before device driver name to get phrase like "device driver PROTMAN$"
+>>>12 ubyte >0x2E \b
>>>>10 ubyte >0x20
>>>>>10 ubyte !0x2E
>>>>>>10 ubyte !0x2A \b%c
@@ -456,6 +551,7 @@
>4 uleshort&0x8000 0x0000
>>4 uleshort&0x4842 >0 \bsupport
>0 ubyte x \b)
+>0 ulelong !0xffffffff with pointer %#x
# DOS driver cmd640x.sys has 0x12 instead of 0xffffffff for pointer field to next device header
0 ulequad 0x0513c00000000012
>0 use msdos-driver
@@ -464,6 +560,7 @@
>0 use msdos-driver
0 ulequad 0x007f00000000ffff
>0 use msdos-driver
+# https://www.uwe-sieber.de/files/cfg_echo.zip
0 ulequad 0x001600000000ffff
>0 use msdos-driver
# DOS drivers LS120.SYS, MKELS120.SYS use reserved bits of attribute field
@@ -471,6 +568,12 @@
>0 use msdos-driver
0 ulequad 0x07bd08c2ffffffff
>0 use msdos-driver
+# 3Com EtherLink 3C501 CID\SERVER\IBMLS\IBM500D1\DLSNETDR.ZIP\ELNK.DOS
+0 ulequad 0x027ac0c0ffffffff
+>0 use msdos-driver
+# IBM Streamer CID\SERVER\IBMLS\IBM500D1\DLSNETDR.ZIP\IBMMPC.DOS
+0 ulequad 0x00228880ffffffff
+>0 use msdos-driver
# updated by Joerg Jenderek
# GRR: line below too general as it catches also
@@ -558,35 +661,48 @@
# syslinux version (4.x)
# "COM executable (COM32R)" or "Syslinux COM32 module" by TrID
>>>1 lelong 0x21CD4CFe \b, relocatable)
-# remaining are DOS COM executables starting with assembler instruction MOV
-# like FreeDOS BANNER*.COM FINDDISK.COM GIF2RAW.COM WINCHK.COM
-# MS-DOS SYS.COM RESTART.COM
-# SYSLINUX.COM (version 1.40 - 2.13)
-# GFXBOOT.COM (version 3.75)
-# COPYBS.COM POWEROFF.COM INT18.COM
+# Hajin Jang <hajin_jang@worksmobile.com>:
+# Disable simplest COM signature to prevent false positive on some EUC-KR text files.
+## remaining are DOS COM executables starting with assembler instruction MOV
+## like FreeDOS BANNER*.COM FINDDISK.COM GIF2RAW.COM WINCHK.COM
+## MS-DOS SYS.COM RESTART.COM
+## SYSLINUX.COM (version 1.40 - 2.13)
+## GFXBOOT.COM (version 3.75)
+## COPYBS.COM POWEROFF.COM INT18.COM
>>1 default x COM executable for DOS
!:mime application/x-dosexec
-#!:mime application/x-ms-dos-executable
-#!:mime application/x-msdos-program
+##!:mime application/x-ms-dos-executable
+##!:mime application/x-msdos-program
!:ext com
+# URL: https://en.wikipedia.org/wiki/UPX
+# Reference: https://github.com/upx/upx/archive/v3.96.zip/upx-3.96/
+# src/stub/src/i086-dos16.com.S
+# Update: Joerg Jenderek
+# assembler instructions: cmp sp, offset sp_limit
0 string/b \x81\xfc
+#>2 uleshort x \b, sp_limit=%#x
+# assembler instructions: jump above +2; int 0x20; mov cx, offset bytes_to_copy
>4 string \x77\x02\xcd\x20\xb9
->>36 string UPX! FREE-DOS executable (COM), UPX compressed
+#>9 uleshort x \b, [bytes_to_copy]=%#x
+# at different offsets assembler instructions: push di; jump decomp_start_n2b
+>0x1e search/3 \x57\xe9
+#>>&0 uleshort x \b, decomp_start_n2b=%#x
+# src/stub/src/include/header.S; UPX_MAGIC_LE32
+>>&2 string UPX! FREE-DOS executable (COM), UPX
!:mime application/x-dosexec
+# UPX compressed *.CPI; See ./fonts
+>>>&21 string =FONT compressed DOS code page font
+!:ext cpx
+>>>&21 string !FONT compressed
!:ext com
+# compressed size?
+#>>>&14 uleshort+152 x \b, %u bytes
+# uncompressed len
+>>>&12 uleshort x \b, uncompressed %u bytes
252 string Must\ have\ DOS\ version DR-DOS executable (COM)
!:mime application/x-dosexec
!:ext com
-# added by Joerg Jenderek at Oct 2008
-# GRR search is not working
-#34 search/2 UPX! FREE-DOS executable (COM), UPX compressed
-34 string UPX! FREE-DOS executable (COM), UPX compressed
-!:mime application/x-dosexec
-!:ext com
-35 string UPX! FREE-DOS executable (COM), UPX compressed
-!:mime application/x-dosexec
-!:ext com
# GRR search is not working
#2 search/28 \xcd\x21 COM executable for MS-DOS
#WHICHFAT.cOM
@@ -616,7 +732,11 @@
!:mime application/x-dosexec
!:ext com
#HELP.COm EDIT.coM
-18 string \xcd\x21 COM executable for MS-DOS
+18 string \xcd\x21
+# not printable before it?
+>17 byte >32
+>>17 byte <126
+>>17 default x COM executable for MS-DOS
!:mime application/x-dosexec
!:ext com
#NWRPLTRM.COm
@@ -687,7 +807,7 @@
# reserved; must be zero
#>>6 ulelong !0 \b, reserved %u
# block pointer to the block containing optional file manager information
-#>>0x1C uleshort x \b, at 0x%x info block
+#>>0x1C uleshort x \b, at %#x info block
# jump to File manager information block
>>(0x1C.s*128) uleshort x
# test for valid information start; maybe also 0012h
@@ -717,7 +837,7 @@
# number of blocks used in the file; seems to be 0 for Word 4.0 and Write 3.0
>>0x6A uleshort >0 \b, %u blocks
# bit field for corrected text areas
-#>>0x6C uleshort x \b, 0x%x bit field
+#>>0x6C uleshort x \b, %#x bit field
# text of document; some times start with 4 non printable characters like CR LF
>>128 ubyte x \b,
>>>128 ubyte >0x1F
@@ -821,7 +941,7 @@
>>>>6 uleshort !0x0004 formatting data
!:ext fXX
# main revision number
->>>>4 uleshort x \b, revision 0x%x
+>>>>4 uleshort x \b, revision %#x
>>>6 uleshort =0x0004 \b, cell range
# active cellcoord range (start row, page,column ; end row, page, column)
# start values normally 0~1st sheet A1
@@ -835,9 +955,9 @@
>>>>12 uleshort x \b%d,
>>>>15 ubyte x \b%d
# Lotus Multi Byte Character Set (1~cp850,2~cp851,...,16~japan,...,31~??)
->>>>20 ubyte >1 \b, character set 0x%x
+>>>>20 ubyte >1 \b, character set %#x
# flags
->>>>21 ubyte x \b, flags 0x%x
+>>>>21 ubyte x \b, flags %#x
>>>6 uleshort !0x0004
# record type (FONTNAME=00AEh)
>>>>30 search/29 \0\xAE
@@ -855,7 +975,7 @@
!:strength -1
# skip Windows cursors with image height <256 and keep Lotus with low opcode 0001-0083h
>7 ubyte 0
-# skip Windows cursors with image width 256 and keep Lotus with positiv opcode
+# skip Windows cursors with image width 256 and keep Lotus with positive opcode
>>6 ubyte >0 Lotus
# !:mime application/x-123
!:mime application/vnd.lotus-1-2-3
@@ -911,10 +1031,10 @@
# (version 5.26) labeled the entry as "Lotus 1-2-3"
>>>4 default x unknown worksheet or configuration
!:ext cnf
->>>>4 uleshort x \b, revision 0x%x
+>>>>4 uleshort x \b, revision %#x
# 2nd record for most worksheets describes cells range
>>>6 use lotus-cells
-# 3nd record for most japan worksheets describes cells range
+# 3rd record for most japan worksheets describes cells range
>>>(8.s+10) use lotus-cells
# check and then display Lotus worksheet cells range
0 name lotus-cells
@@ -1037,7 +1157,7 @@
#>3 ubyte x \b, reserved %x
#>8 ulelong x \b, image size %d
# offset of PNG or DIB image
-#>12 ulelong x \b, offset 0x%x
+#>12 ulelong x \b, offset %#x
# PNG header (\x89PNG)
>(12.l) ubelong =0x89504e47
# 1 space char after "with" to get phrase "with PNG image" by magic in ./images
@@ -1166,6 +1286,9 @@
0 string NG\0\001
# only value 0x100 found at offset 2
>2 ulelong 0x00000100 Norton Guide
+!:mime application/x-norton-guide
+# often like NORTON.NG but some times like NC.HLP
+!:ext ng/hlp
# Title[40]
>>8 string >\0 "%-.40s"
#>>6 uleshort x \b, MenuCount=%u
@@ -1173,6 +1296,66 @@
>>48 string >\0 \b, %-.66s
>>114 string >\0 %-.66s
+# URL: https://en.wikipedia.org/wiki/Norton_Commander
+# Reference: http://mark0.net/download/triddefs_xml.7z/defs/m/msg-nc-eng.trid.xml
+# From: Joerg Jenderek
+# Note: Message file is used by executable with same main name.
+# Only tested with version 5.50 (english) and 2.01 (Windows)
+0 string Abort
+# \0 or i
+#>5 ubyte x %x
+# skip ASCII Abort text by looking for error message like in NCVIEW.MSG
+>6 search/7089 Non-DOS\ disk Norton Commander module message
+!:mime application/x-norton-msg
+!:ext msg
+
+# URL: http://www.antonis.de/dos/dos-tuts/mpdostip/html/nwdostip.htm
+# Reference: https://mark0.net/download/triddefs_xml.7z/defs/m/msg-netware-dos.trid.xml
+# From: Joerg Jenderek
+0 string DOS\ Client\ Message\ File: Novell DOS client message
+#!:mime application/octet-stream
+#!:mime application/x-novell-msg
+!:ext msg
+# look for second letter instead space character
+>26 ubyte >0x20
+# digit 1 or often main or program name like: IPXODI.COM TASKID pnwtrap DOSRqstr
+>>25 ubyte !0x20 %c
+>>>26 ubyte !0x20 \b%c
+>>>>27 ubyte !0x20 \b%c
+>>>>>28 ubyte !0x20 \b%c
+>>>>>>29 ubyte !0x20 \b%c
+>>>>>>>30 ubyte !0x20 \b%c
+>>>>>>>>31 ubyte !0x20 \b%c
+>>>>>>>>>32 ubyte !0x20 \b%c
+>>>>>>>>>>33 ubyte !0x20 \b%c
+>>>>>>>>>>>34 ubyte !0x20 \b%c
+>>>>>>>>>>>>35 ubyte !0x20 \b%c
+>>>>>>>>>>>>>36 ubyte !0x20 \b%c
+# followed by string like: 0 v.10 V1.20
+#
+# followed by ,\040Tran
+>28 search/14 ,\040Tran
+# probably translated version string like: 0 v1.00
+>>&0 string x \b, tran version %s
+# followed by Ctrl-J Ctrl-Z
+>>>&0 ubyte !0xa \b, terminated by %#2.2x
+>>>>&0 ubyte x \b%2.2x
+# Ctrl-Z
+>0x65 ubyte !0x1A \b, at 0x65 %#x
+# one
+>0x66 ubyte !0x01 \b, at 0x66 %#x
+# URL: https://en.wikipedia.org/wiki/NetWare
+# Reference: http://mark0.net/download/triddefs_xml.7z/defs/d/dat-novell-msg.trid.xml
+# ftp://ftp.iitb.ac.in/LDP/en/NLM-HOWTO/NLM-HOWTO-single.html
+# From: Joerg Jenderek
+0 string Novell\ Message\ Librarian\ Data\ File Novell message librarian data
+#>35 string Version\ 1.00
+#>49 string COPYRIGHT\ (c)\ 1985\ by\ Novell,\ Inc.
+#>83 string \ \ All\ Rights\ Reserved
+#!:mime application/octet-stream
+#!:mime application/x-novell-msg
+!:ext msg
+#!:ext msg/dat
# 4DOS help (.HLP) files added by Joerg Jenderek from source TPHELP.PAS
# of https://www.4dos.info/
# pointer,HelpID[8]=4DHnnnmm
@@ -1234,7 +1417,7 @@
# member Macromedia Flash data *.swf implies IncrediMail skin like in im2.ims
>>0x2c search/211/c .swf\0 skin
!:ext ims
-# member anim.im3 implies IncrediMail animation like in letter_fold.ima
+# member anim.im3 implies IncrediMail animation like in letter_fold.ima
>>0x2c search/92/c anim.im3\0 animation
!:ext ima
# other IncrediMail cab archive
@@ -1270,7 +1453,7 @@
!:mime application/vnd.ms-cab-compressed
!:ext msu
>>>&-1 default x
-# look at point charcter of 1st archive member name for file name extension
+# look at point character of 1st archive member name for file name extension
>>>>&-1 search/255 .
# http://www.pptfaq.com/FAQ00164_What_is_a_PPZ_file-.htm
# PPZ were created using Pack & Go feature of PowerPoint versions 97 - 2002
@@ -1329,7 +1512,7 @@
#>4 belong !0 \b, reserved1 %x
#>12 belong !0 \b, reserved2 %x
# offset of the first CFFILE entry coffFiles: minimal 2Ch
->16 ulelong x \b, at 0x%x
+>16 ulelong x \b, at %#x
>(16.l) use cab-file
# at least also 2nd member
>28 uleshort >1
@@ -1339,12 +1522,12 @@
>>>>&0 use cab-file
#>20 belong !0 \b, reserved %x
# Cabinet file format version. Currently, versionMajor = 1 and versionMinor = 3
->24 ubeshort !0x0301 \b version 0x%x
+>24 ubeshort !0x0301 \b version %#x
# number of CFFOLDER entries
>26 uleshort >1 \b, %u cffolders
# cabinet file option indicators 1~PREVIOUS, 2~NEXT, 4~reserved fields
# only found for flags 0 1 2 3 4 not 7
->30 uleshort >0 \b, flags 0x%x
+>30 uleshort >0 \b, flags %#x
# Cabinet files have a 16-bit cabinet setID field that is designed for application use.
# default is zero, however, the -i option of cabarc can be used to set this field
>32 uleshort >0 \b, ID %u
@@ -1395,30 +1578,30 @@
# display folder structure CFFOLDER information like compression of cabinet
0 name cab-folder
# offset of the CFDATA block in this folder
-#>0 ulelong x \b, coffCabStart 0x%x
+#>0 ulelong x \b, coffCabStart %#x
# number of CFDATA blocks in folder
>4 uleshort x \b, %u datablock
# plural s
>4 uleshort >1 \bs
# compression typeCompress: 0~None 1~MSZIP 0x1503~LZX:21 0x1003~LZX:16 0x0f03~LZX:15
->6 uleshort x \b, 0x%x compression
+>6 uleshort x \b, %#x compression
# optional per-folder reserved area
-#>8 ubequad x \b, abReserve 0x%llx
+#>8 ubequad x \b, abReserve %#llx
# display member structure CFFILE information like member name of cabinet
0 name cab-file
-# cbFile is uncompressed size of file in bytes
+# cbFile is uncompressed size of file in bytes
#>0 ulelong x \b, cbFile %u
# uoffFolderStart is uncompressed offset of file in folder
-#>4 ulelong >0 \b, uoffFolderStart 0x%x
+#>4 ulelong >0 \b, uoffFolderStart %#x
# iFolder is index into the CFFOLDER area. 0 indicates first folder in cabinet
# define ifoldCONTINUED_FROM_PREV (0xFFFD)
# define ifoldCONTINUED_TO_NEXT (0xFFFE)
# define ifoldCONTINUED_PREV_AND_NEXT (0xFFFF)
->8 uleshort >0 \b, iFolder 0x%x
+>8 uleshort >0 \b, iFolder %#x
# date stamp for file
-#>10 uleshort x \b, date 0x%x
+#>10 uleshort x \b, date %#x
# time stamp for file
-#>12 uleshort x \b, time 0x%x
+#>12 uleshort x \b, time %#x
# attribs is attribute flags for file
# define _A_RDONLY (0x01) file is read-only
# define _A_HIDDEN (0x02) file is hidden
@@ -1428,7 +1611,7 @@
# define _A_EXEC (0x40) run after extraction
# define _A_NAME_IS_UTF (0x80) szName[] contains UTF
# define UNKNOWN (0x0100) undocumented or accident
-#>14 uleshort x \b, attribs 0x%x
+#>14 uleshort x \b, attribs %#x
>14 uleshort >0 +
>>14 uleshort &0x0001 \bR
>>14 uleshort &0x0002 \bH
@@ -1471,7 +1654,7 @@
# for further information.
0 ulelong 1
>40 string \ EMF Windows Enhanced Metafile (EMF) image data
->>44 ulelong x version 0x%x
+>>44 ulelong x version %#x
0 string/b \224\246\056 Microsoft Word Document
@@ -1516,7 +1699,8 @@
0 string Jetsam0 Mallard BASIC Jetsam index data
# DOS backup 2.0 to 3.2
-
+# URL: http://fileformats.archiveteam.org/wiki/BACKUP_(MS-DOS)
+# Reference: http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/dos/restore/brtecdoc.htm
# backupid.@@@
# plausibility check for date
@@ -1526,6 +1710,7 @@
# actually 121 nul bytes
>>>0x7 string \0\0\0\0\0\0\0\0
>>>>0x1 ubyte x DOS 2.0 backup id file, sequence %d
+#!:mime application/octet-stream
!:ext @@@
>>>>0x0 ubyte 0xff \b, last disk
@@ -1548,7 +1733,7 @@
# but sometimes garbage according to Ralf Quint. So can not be used as test
#>0x54 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
# first char of full file name is DOS (5Ch) or UNIX (2Fh) path separator
-# only DOS variant found. UNIX variant according to V32SLASH.TXT in archive PD0315.EXE
+# only DOS variant found. UNIX variant according to V32SLASH.TXT in archive PD0315.EXE
>>>>>5 ubyte&0x8C 0x0C
# ./msdos (version 5.30) labeled the entry as
# "DOS 2.0 backed up file %s, split file, sequence %d" or
@@ -1559,7 +1744,9 @@
>>>>>>>1 uleshort x sequence %d of
# full file name with path but without drive letter and colon stored from 0x05 til 0x52
>>>>>>0x5 string x file %s
+#!:mime application/octet-stream
# backup name is original filename
+#!:ext doc/exe/rar/zip
#!:ext *
# magic/Magdir/msdos, 1169: Warning: EXTENSION type ` *' has bad char '*'
# file: line 1169: Bad magic entry ' *'
diff --git a/magic/Magdir/msooxml b/magic/Magdir/msooxml
index 620d5e132f04..06f244fa132c 100644
--- a/magic/Magdir/msooxml
+++ b/magic/Magdir/msooxml
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: msooxml,v 1.13 2019/11/27 13:12:55 christos Exp $
+# $File: msooxml,v 1.16 2021/08/16 10:06:55 christos Exp $
# msooxml: file(1) magic for Microsoft Office XML
# From: Ralf Brown <ralf.brown@gmail.com>
@@ -19,29 +19,32 @@
!:mime application/vnd.openxmlformats-officedocument.presentationml.presentation
>0 string xl/ Microsoft Excel 2007+
!:mime application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
-0 string visio/ Microsoft Visio 2013+
+>0 string visio/ Microsoft Visio 2013+
!:mime application/vnd.ms-visio.drawing.main+xml
+>0 string AppManifest.xaml Microsoft Silverlight Application
+!:mime application/x-silverlight-app
# start by checking for ZIP local file header signature
0 string PK\003\004
!:strength +10
# make sure the first file is correct
>0x1E use msooxml
->0x1E regex \\[Content_Types\\]\\.xml|_rels/\\.rels|docProps
+>0x1E default x
+>>0x1E regex \\[Content_Types\\]\\.xml|_rels/\\.rels|docProps
# skip to the second local file header
# since some documents include a 520-byte extra field following the file
# header, we need to scan for the next header
->>(18.l+49) search/6000 PK\003\004
+>>>(18.l+49) search/6000 PK\003\004
# now skip to the *third* local file header; again, we need to scan due to a
# 520-byte extra field following the file header
->>>&26 search/6000 PK\003\004
+>>>>&26 search/6000 PK\003\004
# and check the subdirectory name to determine which type of OOXML
# file we have. Correct the mimetype with the registered ones:
# https://technet.microsoft.com/en-us/library/cc179224.aspx
->>>>&26 use msooxml
->>>>&26 default x
+>>>>>&26 use msooxml
+>>>>>&26 default x
# OpenOffice/Libreoffice orders ZIP entry differently, so check the 4th file
->>>>>&26 search/6000 PK\003\004
->>>>>>&26 use msooxml
->>>>>>&26 default x Microsoft OOXML
+>>>>>>&26 search/6000 PK\003\004
+>>>>>>>&26 use msooxml
+>>>>>>>&26 default x Microsoft OOXML
>>>>>&26 default x Microsoft OOXML
diff --git a/magic/Magdir/msx b/magic/Magdir/msx
index 69df6416fe7c..60e16569e24f 100644
--- a/magic/Magdir/msx
+++ b/magic/Magdir/msx
@@ -138,8 +138,8 @@
>>>>>>>>>>>>>>>0x002D ubyte 2 \b, version=MSX2+
>>>>>>>>>>>>>>>0x002D ubyte 3 \b, version=MSX Turbo-R
>>>>>>>>>>>>>>>0x002D ubyte >3 \b, version=Unknown MSX %d version
->>>>>>>>>>>>>>>0x0006 ubyte x \b, VDP.DR=0x%2x
->>>>>>>>>>>>>>>0x0007 ubyte x \b, VDP.DW=0x%2x
+>>>>>>>>>>>>>>>0x0006 ubyte x \b, VDP.DR=%#2x
+>>>>>>>>>>>>>>>0x0007 ubyte x \b, VDP.DW=%#2x
>>>>>>>>>>>>>>>0x002B ubyte&0xF 0 \b, charset=Japanese
>>>>>>>>>>>>>>>0x002B ubyte&0xF 1 \b, charset=International
>>>>>>>>>>>>>>>0x002B ubyte&0xF 2 \b, charset=Korean
@@ -188,32 +188,32 @@
# MSX extension ROMs
0 string/b AB
>2 uleshort 0x0010 MSX ROM
->>2 uleshort x \b, init=0x%4x
->>4 uleshort >0 \b, stahdl=0x%4x
->>6 uleshort >0 \b, devhdl=0x%4x
->>8 uleshort >0 \b, bas=0x%4x
+>>2 uleshort x \b, init=%#4x
+>>4 uleshort >0 \b, stahdl=%#4x
+>>6 uleshort >0 \b, devhdl=%#4x
+>>8 uleshort >0 \b, bas=%#4x
>2 uleshort 0x4010 MSX ROM
->>2 uleshort x \b, init=0x%04x
->>4 uleshort >0 \b, stahdl=0x%04x
->>6 uleshort >0 \b, devhdl=0x%04x
->>8 uleshort >0 \b, bas=0x%04x
+>>2 uleshort x \b, init=%#04x
+>>4 uleshort >0 \b, stahdl=%#04x
+>>6 uleshort >0 \b, devhdl=%#04x
+>>8 uleshort >0 \b, bas=%#04x
>2 uleshort 0x8010 MSX ROM
->>2 uleshort x \b, init=0x%04x
->>4 uleshort >0 \b, stahdl=0x%04x
->>6 uleshort >0 \b, devhdl=0x%04x
->>8 uleshort >0 \b, bas=0x%04x
+>>2 uleshort x \b, init=%#04x
+>>4 uleshort >0 \b, stahdl=%#04x
+>>6 uleshort >0 \b, devhdl=%#04x
+>>8 uleshort >0 \b, bas=%#04x
0 string/b AB\0\0
>6 uleshort 0
>>4 uleshort >0x400F MSX-BASIC extension ROM
->>>4 uleshort >0 \b, stahdl=0x%04x
->>>6 uleshort >0 \b, devhdl=0x%04x
+>>>4 uleshort >0 \b, stahdl=%#04x
+>>>6 uleshort >0 \b, devhdl=%#04x
>>>0x1C string OPLL \b, MSX-Music
>>>>0x18 string PAC2 \b (external)
>>>>0x18 string APRL \b (internal)
0 string/b AB\0\0\0\0
>6 uleshort >0x400F MSX device BIOS
->>6 uleshort >0 \b, devhdl=0x%04x
+>>6 uleshort >0 \b, devhdl=%#04x
0 string/b AB
@@ -233,38 +233,38 @@
>>>>>>0x12 ubyte x \b%d
>>>>>>0x13 ubyte/16 x \b%d
>>>>>>0x13 ubyte&0xF x \b%d
->>>>>2 uleshort x \b, init=0x%04x
->>>>>4 uleshort >0 \b, stahdl=0x%04x
->>>>>6 uleshort >0 \b, devhdl=0x%04x
->>>>>8 uleshort >0 \b, bas=0x%04x
+>>>>>2 uleshort x \b, init=%#04x
+>>>>>4 uleshort >0 \b, stahdl=%#04x
+>>>>>6 uleshort >0 \b, devhdl=%#04x
+>>>>>8 uleshort >0 \b, bas=%#04x
>>>2 uleshort 0
>>>>4 uleshort 0
>>>>>6 uleshort 0
->>>>>>8 uleshort >0 MSX BASIC program in ROM, bas=0x%04x
+>>>>>>8 uleshort >0 MSX BASIC program in ROM, bas=%#04x
0x4000 string/b AB
>0x4002 uleshort >0x400F
>>0x400A string \0\0\0\0\0\0 MSX ROM with nonstandard page order
->>>0x4002 uleshort x \b, init=0x%04x
->>>0x4004 uleshort >0 \b, stahdl=0x%04x
->>>0x4006 uleshort >0 \b, devhdl=0x%04x
->>>0x4008 uleshort >0 \b, bas=0x%04x
+>>>0x4002 uleshort x \b, init=%#04x
+>>>0x4004 uleshort >0 \b, stahdl=%#04x
+>>>0x4006 uleshort >0 \b, devhdl=%#04x
+>>>0x4008 uleshort >0 \b, bas=%#04x
0x8000 string/b AB
>0x8002 uleshort >0x400F
>>0x800A string \0\0\0\0\0\0 MSX ROM with nonstandard page order
->>>0x8002 uleshort x \b, init=0x%04x
->>>0x8004 uleshort >0 \b, stahdl=0x%04x
->>>0x8006 uleshort >0 \b, devhdl=0x%04x
->>>0x8008 uleshort >0 \b, bas=0x%04x
+>>>0x8002 uleshort x \b, init=%#04x
+>>>0x8004 uleshort >0 \b, stahdl=%#04x
+>>>0x8006 uleshort >0 \b, devhdl=%#04x
+>>>0x8008 uleshort >0 \b, bas=%#04x
0x3C000 string/b AB
>0x3C008 string \0\0\0\0\0\0\0\0 MSX MegaROM with nonstandard page order
->>0x3C002 uleshort x \b, init=0x%04x
->>0x3C004 uleshort >0 \b, stahdl=0x%04x
->>0x3C006 uleshort >0 \b, devhdl=0x%04x
->>0x3C008 uleshort >0 \b, bas=0x%04x
+>>0x3C002 uleshort x \b, init=%#04x
+>>0x3C004 uleshort >0 \b, stahdl=%#04x
+>>0x3C006 uleshort >0 \b, devhdl=%#04x
+>>0x3C008 uleshort >0 \b, bas=%#04x
# MSX BIN file
#0 byte 0xFE
diff --git a/magic/Magdir/neko b/magic/Magdir/neko
deleted file mode 100644
index 6bedc22a5a38..000000000000
--- a/magic/Magdir/neko
+++ /dev/null
@@ -1,12 +0,0 @@
-
-#------------------------------------------------------------
-# $File: neko,v 1.2 2019/04/19 00:42:27 christos Exp $
-
-# From: Mikhail Gusarov <dottedmag@dottedmag.net>
-# NekoVM (https://nekovm.org/) bytecode
-0 string NEKO NekoVM bytecode
->4 lelong x (%d global symbols,
->8 lelong x %d global fields,
->12 lelong x %d bytecode ops)
-!:mime application/x-nekovm-bytecode
-
diff --git a/magic/Magdir/netware b/magic/Magdir/netware
index c3f57e83819a..089a243644df 100644
--- a/magic/Magdir/netware
+++ b/magic/Magdir/netware
@@ -1,7 +1,11 @@
#------------------------------------------------------------------------------
-# $File: netware,v 1.4 2009/09/19 16:28:11 christos Exp $
+# $File: netware,v 1.5 2020/09/04 16:30:51 christos Exp $
# netware: file(1) magic for NetWare Loadable Modules (NLMs)
# From: Mads Martin Joergensen <mmj@suse.de>
+# URL: https://en.wikipedia.org/wiki/NetWare_Loadable_Module
0 string NetWare\ Loadable\ Module NetWare Loadable Module
+#!:mime application/octet-stream
+!:ext nlm
+
diff --git a/magic/Magdir/nim-lang b/magic/Magdir/nim-lang
new file mode 100644
index 000000000000..bc2cf987c7d3
--- /dev/null
+++ b/magic/Magdir/nim-lang
@@ -0,0 +1,29 @@
+
+#------------------------------------------------------------------------------
+# $File: nim-lang,v 1.3 2021/07/06 12:34:06 christos Exp $
+# nim-lang: file(1) magic for nim
+# URL: https://nim-lang.org/
+
+0 search/8192 import
+>&0 search/64 os
+>>&0 use nim1
+>&0 default x
+>>&0 search/64 osproc
+>>>&0 use nim1
+>>&0 default x
+>>>&0 search/64 strutils
+>>>>&0 use nim1
+
+0 name nim1
+>&0 search/8192 proc
+>>&0 use nim2
+>&0 default x
+>>&0 search/8192 template
+>>>&0 use nim2
+>>&0 default x
+>>>&0 search/8192 let
+>>>>&0 use nim2
+
+0 name nim2
+>&0 search/8192 when Nim source code
+!:ext nim
diff --git a/magic/Magdir/ole2compounddocs b/magic/Magdir/ole2compounddocs
index 7b16a5fa8aea..a5e60a821b5e 100644
--- a/magic/Magdir/ole2compounddocs
+++ b/magic/Magdir/ole2compounddocs
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: ole2compounddocs,v 1.8 2020/03/28 23:10:30 christos Exp $
+# $File: ole2compounddocs,v 1.12 2021/09/04 16:00:38 christos Exp $
# Microsoft OLE 2 Compound Documents : file(1) magic for Microsoft Structured
# storage (https://en.wikipedia.org/wiki/Compound_File_Binary_Format)
# Additional tests for OLE 2 Compound Documents should be under this recipe.
@@ -10,7 +10,7 @@
# https://digital-preservation.github.io/droid/
# skip droid skeleton like fmt-39-signature-id-128.doc by valid version
>0x1A ushort !0xABAB OLE 2 Compound Document
-#>0x1C uleshort x \b, endnian 0x%4.4x
+#>0x1C uleshort x \b, endnian %#4.4x
# big endian not tested
>>0x1C ubeshort =0xfffe \b, big-endian
>>>546 string jbjb : Microsoft Word Document
@@ -26,25 +26,25 @@
# Minor Version 32h=50 3Bh=59 3Eh=62
>>>0x18 uleshort x \b.%u
# SecID of first sector of the directory stream is often 1 but high like 3144h
->>>48 ulelong x \b, SecID 0x%x
+>>>48 ulelong x \b, SecID %#x
# Sector Shift Exponent in short-stream container stream: 6~64 bytes
>>>32 uleshort !6 \b, exponent of short stream %u
# total number of sectors used for the FAT
>>>44 ulelong >1 \b, %u FAT sectors
# SecID of first sector of the short-sector allocation table (Mini FAT)
# or -2 (End Of ChainSecID) if not extant
->>>60 ulelong !0xffFFffFE \b, Mini FAT start sector 0x%x
+>>>60 ulelong !0xffFFffFE \b, Mini FAT start sector %#x
# total number of sectors used for the short-sector allocation table
>>>64 ulelong !1 \b, %u Mini FAT sector
# plural s
>>>>64 ulelong >1 \bs
# SecID of first sector of the master sector allocation table (DIFAT)
# or -2 (End Of Chain SecID) if no additional sectors used
->>>68 ulelong !0xffFFffFE \b, DIFAT start sector 0x%x
+>>>68 ulelong !0xffFFffFE \b, DIFAT start sector %#x
# total number of sectors used for the master sector allocation table (DIFAT)
>>>72 ulelong >0 \b, %u DIFAT sectors
# First part of the master sector allocation table (DIFAT) containing 109 SecIDs
-#>>>76 ubequad x \b, DIFAT=0x%16.16llx
+#>>>76 ubequad x \b, DIFAT=%#16.16llx
#>>>84 ubequad x \b%16.16llx...
# pointer to root entry only works with standard configuration for SecID ~< 800h
# Red-Carpet-presentation-1.0-1.sdd sg10.sdv 2000_GA_Annual_Review_Data.xls
@@ -87,8 +87,8 @@
# https://wikileaks.org/ciav7p1/cms/page_13762814.html
# https://m.blog.naver.com/superman4u/40047693679
# https://misc.daniel-marschall.de/projects/guid_analysis/guid.txt
-# http://www.windowstricks.in/online-windows-guid-converter
-#>80 ubequad !0 \b, clsid 0x%16.16llx
+# https://toolslick.com/conversion/data/guid
+#>80 ubequad !0 \b, clsid %#16.16llx
#>>88 ubequad x \b%16.16llx
# test for "Root Entry" inside directory by type 5 value
>66 ubyte 5
@@ -210,6 +210,15 @@
>>>>256 lestring16 Thumbnail : Corel PrintHouse image
!:mime application/x-corel-cph
!:ext cph
+# URL: http://fileformats.archiveteam.org/wiki/Corel_Gallery
+# Note: format since Gallery 2; sometimes called Corel Multimedia Manager Album
+# third directory entry name _INFO_
+>>>>256 lestring16 _INFO_ : Corel Gallery
+# second directory entry name _ITEM_ or _DATA_
+# later directory entry names: _ALBUM_ _THUMBNAIL_
+#!:mime application/x-ole-storage
+!:mime application/x-corel-gal
+!:ext gal
#
# URL: https://en.wikipedia.org/wiki/Hangul_(word_processor)
# Note: "HWP Document File" signature found in FileHeader
@@ -231,7 +240,7 @@
>>>>128 lestring16 Current\ User : SoftMaker
# third directory entry name SMNativeObjData
>>>>>256 lestring16 SMNativeObjData
-# 5th directory entry nane PowerPoint
+# 5th directory entry name PowerPoint
>>>>>>512 lestring16 PowerPoint PowerPoint presentation or template
!:mime application/vnd.ms-powerpoint
!:ext ppt/pps/pot
@@ -251,6 +260,12 @@
>>>>>>128 lestring16 Pictures with pictures
# remaining null clsid
>>>>128 default x : UNKNOWN
+# second directory entry name like VisioDocument Control000
+>>>>>128 lestring16 x with names %.20s
+# third directory entry like WordDocument
+>>>>>256 lestring16 x %.20s
+# forth
+>>>>>384 lestring16 x %.20s
!:mime application/x-ole-storage
# look for known clsid GUID
# - Visio documents
@@ -315,7 +330,7 @@
!:mime application/vnd.ms-excel
# https://www.macdisk.com/macsigen.php XLS5 for Excel 5
!:apple ????XLS9
-# 3nd directory entry name
+# 3rd directory entry name
>>>>256 lestring16 _VBA_PROJECT_CUR addin
!:ext xla/
# 4th directory entry name
@@ -365,6 +380,21 @@
!:mime application/vnd.ms-works
!:apple ????AWWP
!:ext wps
+# From: Joerg Jenderek
+# URL: https://en.wikipedia.org/wiki/Microsoft_Works
+# Reference: http://fileformats.archiveteam.org/wiki/Microsoft_Compound_File
+# Note: probably version 6 and 7
+# organize pictures like JPFG images in streams __cf1 with names like
+# 001.JPG, 002.JPG ... in streams __fname
+>>88 ubequad 0xa1c800c04f612452 : Microsoft
+>>>80 ubequad 0xc0c7266eb98cd311 Works portfolio
+# 2nd directory entry name PfOrder, 3rd __LastID and 4th __SizeUsed
+#!:mime application/x-ole-storage
+# https://www.iana.org/assignments/media-types/application/vnd.ms-works
+!:mime application/vnd.ms-works
+# https://extension.nirsoft.net/wsb
+# like: wsbsamp.wsb WORKS2003_CD:\MSWorks\Common\Sammlung.wsb
+!:ext wsb
#??
# URL: http://fileformats.archiveteam.org/wiki/Microsoft_Publisher
>>88 ubequad 0x00c0000000000046 : Microsoft
@@ -395,6 +425,25 @@
!:mime application/vnd.ms-project
!:ext mpp
#
+# URL: http://fileformats.archiveteam.org/wiki/WordPerfect
+# Reference: http://fileformats.archiveteam.org/wiki/Microsoft_Compound_File
+# https://github.com/OneWingedShark/WordPerfect/
+# blob/master/doc/SDK_Help/FileFormats/WPFF_DocumentStructure.htm
+# From: Joerg Jenderek
+# Note: internal version x.2 or 2.2 like in embedded ole6-PerfectOffice_MAIN.wpd
+# 3rd directory entry name PerfectOffice_OBJECT and 2nd PerfectOffice_MAIN,
+# which contains WordPerfect document \xffWPC signature handled by ./wordprocessors
+>>88 ubequad 0x19370000929679cd : WordPerfect 7
+>>>80 ubequad 0xff739851ad2d2002 Document
+!:mime application/vnd.wordperfect
+#!:apple ????WPC?
+# https://fossies.org/linux/wp2latex/test/ole6.wpd
+!:ext wpd
+#>>>>0 search/0xc01/s \xffWPC \b, WPC SIGNATURE
+# inspect embedded WordPerfect document by ./wordprocessors with 1 space at end
+#>>>>>&0 indirect x \b; contains
+# GRR: the above expression does not work correctly
+#
# URL: http://fileformats.archiveteam.org/wiki/SHW_(Corel)
#???
>>88 ubequad 0x99ae04021c007002 : WordPerfect
@@ -514,6 +563,6 @@
# remaining non null clsid
>>88 default x : UNKNOWN
!:mime application/x-ole-storage
->>>80 ubequad !0 \b, clsid 0x%16.16llx
+>>>80 ubequad !0 \b, clsid %#16.16llx
>>>88 ubequad x \b%16.16llx
diff --git a/magic/Magdir/os2 b/magic/Magdir/os2
index ace69cb34b23..02f27fa6b075 100644
--- a/magic/Magdir/os2
+++ b/magic/Magdir/os2
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: os2,v 1.10 2017/03/17 21:35:28 christos Exp $
+# $File: os2,v 1.13 2021/04/26 15:56:00 christos Exp $
# os2: file(1) magic for OS/2 files
#
@@ -25,6 +25,8 @@
#>5 string >\ (Local file) <%s>
# >>>>> OS/2 INF/HLP <<<<< (source: Daniel Dissett ddissett@netcom.com)
+# URL: http://fileformats.archiveteam.org/wiki/INF/HLP_(OS/2)
+# Reference: http://www.edm2.com/0308/inf.html
# Carl Hauser (chauser.parc@xerox.com) and
# Marcus Groeber (marcusg@ph-cip.uni-koeln.de)
# list the following header format in inf02a.doc:
@@ -41,9 +43,142 @@
# int16 unknown2; // unknown purpose
#
0 string HSP\x01\x9b\x00 OS/2 INF
+!:mime application/x-os2-inf
+!:ext inf
>107 string >0 (%s)
0 string HSP\x10\x9b\x00 OS/2 HLP
+!:mime application/x-os2-hlp
+!:ext hlp
>107 string >0 (%s)
+# From: Joerg Jenderek
+# URL: http://fileformats.archiveteam.org/wiki/MSG_(OS/2)
+# Reference: https://github.com/OS2World/UTIL-SYSTEM-MKMSGF/blob/master/mkmsgf.h
+# Note: created by MKMSGF.EXE. Text source can be recreated by E_MSGF
+# example like OS001H.MSG
+0 string \xffMKMSGF\0 OS/2 help message
+!:mime application/x-os2-msg
+!:ext msg
+# identifier[3] like: DOS NET REX SYS ...
+>8 string x '%.3s'
+# msgnumber: number of messages
+>11 uleshort x \b, %u messages
+# firstmsgnumber; number of the first message like: some times 0 often 1 169 1000 3502
+>13 uleshort >1 \b, 1st number %u
+# offset16bit; 1~Index table has 16-bit offsets (files<64k) 0~Index table has 32-bit offsets
+>15 ubyte =0 \b, 32-bit
+#>15 ubyte =1 \b, 16-bit
+# version; file version: 2~new 0~old
+>16 uleshort !2 \b, version %u
+# indextaboffset; offset of index table: 1F~after header 0~no index table for version 0?
+>18 uleshort >0
+>>18 uleshort !0x1f \b, at %#x index
+# 32-bit offset
+>>15 ubyte =0
+# offset with message table
+>>>(18.s) ulelong x \b, at %#x
+# 1st message
+# http://www.os2museum.com/files/docs/os210ptk/os2-1.0-ptk-tools-1988.pdf
+# message type: E~Error H~Help I~Information P~Prompt W~Warning ?
+>>>>(&-4.l) ubyte x %c-type
+>>>>>&0 string x %s
+# 16-bit offset
+>>15 ubyte =1
+# msgnum; message number
+>>>(18.s) uleshort x \b, number %u
+# msgindex; offset of message from begin of file
+>>>(18.s+2) uleshort x at %#x
+# message type E H I P W ?
+>>>>(&-2.s) ubyte x %c-type
+# skip newline carriage return
+>>>>>&0 ubeshort =0x0D0a
+>>>>>>&0 string x %s
+>>>>>&0 ubeshort !0x0D0a
+>>>>>>&-2 string x %s
+# for version 0 index table apparently at offset 1F
+>16 uleshort 0
+>>15 ubyte 1
+# 1st message 16-bit
+>>>0x1F uleshort x \b, at %#x
+# message type: E~Error H~Help I~Information P~Prompt W~Warning ?
+>>>>(0x1F.s) ubyte x %c-type
+>>>>>&0 string x %s
+# 2nd message 16-bit
+>>>0x21 uleshort x \b, at %#x
+>>>>(0x21.s) ubyte x %c-type
+>>>>>&0 string x %s
+# 3rd message 16-bit
+>>>0x23 uleshort x \b, at %#x
+>>>>(0x23.s) ubyte x %c-type
+>>>>>&0 string x %s
+# version 0 32-bit
+>>15 ubyte 0
+# 1st message 32-bit
+>>>0x1f ulelong x \b, at %#x
+>>>>(0x1F.l) ubyte x %c-type
+>>>>>&0 string x %s
+# 2nd message 32-bit
+>>>0x23 ulelong x \b, at %#x
+>>>>(0x23.l) ubyte x %c-type
+>>>>>&0 string x %s
+# 3rd message 32-bit
+>>>0x27 ulelong x \b, AT %#x
+>>>>(0x27.l) ubyte x %c-type
+>>>>>&0 string x %s
+# countryinfo; offset of country info block: 0 for version 0
+>20 uleshort !0 \b, at %#x countryinfo
+# nextcoutryinfo
+>>22 uleshort >0 \b, at %#x next
+# reserved[5]; Must be 0
+>>25 ulelong !0 \b, RESERVED %#x
+>>(20.s) use os2-msg-info
+# display country info block of MKMSGF message file
+0 name os2-msg-info
+# bytesperchar; bytes per char: 1~SBCS 2~DBCS
+>0 ubyte >1 \b, %u bytes/char
+# reserved; Not known
+>1 uleshort !0 \b, reserved %#x
+# langfamilyID; language family ID like: 0~? 1~Arabic ... 7~German ... 9~English ... 34~Slovene
+>3 uleshort >0 \b, language %u
+# langversionID; like: 7_1~German 7_2~Swiss German 12_1~French 12_3~Canadian French
+>>5 uleshort x \b_%u
+# langfamilyID too high. This should not happen
+>3 uleshort >34 (invalid language)
+# codepagesnumber; number of codepages like: 1 2 ... 16
+>7 uleshort x \b, %u code page
+# plural s
+>7 uleshort >1 \bs
+# too many number of codepages. This should not happen
+>7 uleshort >16 (Too many)
+# codepages[16]; codepages list like 437 850 ...
+>7 uleshort <17
+# 1st code page
+>>9 uleshort >0 %u
+# possible 2nd code page number
+>>>7 uleshort >1
+>>>>11 uleshort x %u
+# filename[260]; name of file like: dbaseos2.msg dde4c01e.msg os2ldr.mgr xdfh.msg ...
+>41 string x \b, %s
+
# OS/2 INI (this is a guess)
0 string \xff\xff\xff\xff\x14\0\0\0 OS/2 INI
+!:mime application/x-os2-ini
+!:ext ini
+
+# From: Joerg Jenderek
+# URL: http://warpin.netlabs.org/
+# Reference: http://mark0.net/download/triddefs_xml.7z/defs/a/ark-wpi.trid.xml
+# Note: called by TrID "WarpIN Installer"
+# probably magic at the beginning
+0 ubelong =0x770402BE WarpIN Installer
+#>4 ubelong =0x03000000
+#!:mime application/octet-stream
+!:mime application/x-os2-wpi
+!:ext wpi
+# creator program name like: "reserved" or "WIC x.y.z"
+>0x106 string x \b, created by %s
+# name like: "reserved" or "OS/2 Netlabs"
+>0x146 string x \b, '%s'
+# name like: "N/A" "http://warpin.netlabs.org"
+>0x186 string x \b, URL %s
+
diff --git a/magic/Magdir/pcjr b/magic/Magdir/pcjr
new file mode 100644
index 000000000000..c3ab7a25fdf4
--- /dev/null
+++ b/magic/Magdir/pcjr
@@ -0,0 +1,8 @@
+
+#------------------------------------------------------------------------------
+# $File: pcjr,v 1.1 2021/01/09 15:09:58 christos Exp $
+# pcjr: file(1) magic for PCjr Cartridge image file format
+# From: Francis Laniel <laniel_francis@privacyrequired.com>
+0 string PCjr
+>0x80 beshort 0x55aa PCjr Cartridge image
+>0x200 beshort 0x55aa PCjr Cartridge image
diff --git a/magic/Magdir/pdf b/magic/Magdir/pdf
index e386f454a593..38de3cff9b9f 100644
--- a/magic/Magdir/pdf
+++ b/magic/Magdir/pdf
@@ -1,15 +1,18 @@
#------------------------------------------------------------------------------
-# $File: pdf,v 1.12 2020/01/30 01:48:44 christos Exp $
+# $File: pdf,v 1.16 2021/07/30 11:47:07 christos Exp $
# pdf: file(1) magic for Portable Document Format
#
0 name pdf
->8 search/512 /Filter/FlateDecode/ (password protected)
+>8 search /Count
+>>&0 regex [0-9]+ \b, %s pages
+>8 search/512 /Filter/FlateDecode/ (zip deflate encoded)
0 string %PDF- PDF document
!:mime application/pdf
!:strength +60
+!:ext pdf
>5 byte x \b, version %c
>7 byte x \b.%c
>0 use pdf
@@ -17,6 +20,7 @@
0 string \012%PDF- PDF document
!:mime application/pdf
!:strength +60
+!:ext pdf
>6 byte x \b, version %c
>8 byte x \b.%c
>0 use pdf
@@ -24,6 +28,7 @@
0 string \xef\xbb\xbf%PDF- PDF document (UTF-8)
!:mime application/pdf
!:strength +60
+!:ext pdf
>6 byte x \b, version %c
>8 byte x \b.%c
>0 use pdf
@@ -33,12 +38,14 @@
0 string %FDF- FDF document
!:mime application/vnd.fdf
!:strength +60
+!:ext pdf
>5 byte x \b, version %c
>7 byte x \b.%c
0 search/256 %PDF- PDF document
!:mime application/pdf
!:strength +60
+!:ext pdf
>&0 byte x \b, version %c
>&2 byte x \b.%c
>0 use pdf
diff --git a/magic/Magdir/pgf b/magic/Magdir/pgf
index b5a251efdf38..8318ce133804 100644
--- a/magic/Magdir/pgf
+++ b/magic/Magdir/pgf
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: pgf,v 1.2 2017/03/17 21:35:28 christos Exp $
+# $File: pgf,v 1.3 2021/02/23 00:51:10 christos Exp $
# pgf: file(1) magic for Progressive Graphics File (PGF)
#
# <http://www.libpgf.org/uploads/media/PGF_Details_01.pdf>
@@ -25,7 +25,7 @@
>>20 byte 1 gray scale,
>>20 byte 2 indexed color,
>>20 byte 3 RGB color,
->>20 byte 4 CYMK color,
+>>20 byte 4 CMYK color,
>>20 byte 5 HSL color,
>>20 byte 6 HSB color,
>>20 byte 7 multi-channel,
@@ -34,7 +34,7 @@
>>20 byte 10 gray scale 16,
>>20 byte 11 RGB color 48,
>>20 byte 12 LAB color 48,
->>20 byte 13 CYMK color 64,
+>>20 byte 13 CMYK color 64,
>>20 byte 14 deep multi-channel,
>>20 byte 15 duo tone 16,
>>20 byte 17 RGBA color,
diff --git a/magic/Magdir/pgp b/magic/Magdir/pgp
index 069c82eb8bef..d81883868b41 100644
--- a/magic/Magdir/pgp
+++ b/magic/Magdir/pgp
@@ -1,54 +1,11 @@
#------------------------------------------------------------------------------
-# $File: pgp,v 1.21 2020/03/20 17:11:05 christos Exp $
+# $File: pgp,v 1.25 2021/04/26 15:56:00 christos Exp $
# pgp: file(1) magic for Pretty Good Privacy
+
+# Handling of binary PGP keys is in pgp-binary-keys.
# see https://lists.gnupg.org/pipermail/gnupg-devel/1999-September/016052.html
#
-# Update: Joerg Jenderek
-# Note: verified by `gpg -v --debug 0x02 --list-packets < PUBRING263_10.PGP`
-#0 byte 0x99 MAYBE PGP 0x99
-0 byte 0x99
-# 99h~10;0110;01~2=old packet type;tag 6=Public-Key Packet;1=two-octet length
-# A two-octet body header encodes packet lengths of 192~00C0h - 8383~20BFh
-#>1 ubeshort x \b, body length 0x%.4x
-# skip Basic.Image Beauty.320 Pic.Icons by looking for low version number
-#>3 ubyte x \b, V=%u
-#>3 ubyte <5 VERSION OK
->3 ubyte <5
-# next packet type often b4h~(tag 13)~User ID Packet, b0h~(tag 12)~Trust packet
-#>>(1.S+3) ubyte x \b, next packet type 0x%x
-# skip 9900-v4.bin 9902-v4.bin by looking for valid second packet type (bit 7=1)
-#>>(1.S+3) ubyte >0x7F TYPE OK,
->>(1.S+3) ubyte >0x7F
-# old versions 2,3 implies Pretty Good Privacy
->>>3 ubyte <4 PGP key public ring (v%u)
-!:mime application/pgp-keys
-!:ext pgp/ASD
->>>>4 beldate x created %s
-# days that this key is valid. If this number is zero, then it does not expire
->>>>8 ubeshort >0 \b, %u days valid
->>>>8 ubeshort =0 \b, not expire
-# display key algorithm 1~RSA (Encrypt or Sign)
->>>>10 use key_algo
-# Multiprecision Integers (MPI) size
->>>>11 ubeshort x %u bits
-# MPI
->>>>13 ubequad x MPI=0x%16.16llx...
-# new version implies Pretty Good Privacy (PGP) >= 5.0 or Gnu Privacy Guard (GPG)
->>>3 ubyte >3 PGP/GPG key public ring (v%u)
-!:mime application/pgp-keys
-!:ext pgp/gpg/pkr/asd
->>>>4 beldate x created %s
-# display key algorithm 17~DSA
->>>>8 use key_algo
-# Multiprecision Integers (MPI) size
->>>>9 ubeshort x %u bits
->>>>11 ubequad x MPI=0x%16.16llx...
-
-0 beshort 0x9501 PGP key security ring
-!:mime application/x-pgp-keyring
-0 beshort 0x9500 PGP key security ring
-!:mime application/x-pgp-keyring
0 beshort 0xa600 PGP encrypted data
#!:mime application/pgp-encrypted
#0 string -----BEGIN\040PGP text/PGP armored data
@@ -404,7 +361,7 @@
# we branch into the proper key size
# signatures defined as x{keysize}
->0 name pgpkey
+0 name pgpkey
>0 string \x01\xd8 1024b
>>2 use x1024
>0 string \x01\xeb 1024b
@@ -582,8 +539,6 @@
# PGP RSA (e=65537) secret (sub-)key header
-0 byte 0x95 PGP Secret Key -
->1 use pgpkey
0 byte 0x97 PGP Secret Sub-key -
>1 use pgpkey
0 byte 0x9d
@@ -591,9 +546,9 @@
# secret subkey packet (tag 7) with same structure as secret key packet (tag 5)
# skip Fetus.Sys16 CALIBUS.MAIN OrbFix.Sys16.Ex by looking for positive len
>1 ubeshort >0
-#>1 ubeshort x \b, body length 0x%x
+#>1 ubeshort x \b, body length %#x
# next packet type often 88h,89h~(tag 2)~Signature Packet
-#>>(1.S+3) ubyte x \b, next packet type 0x%x
+#>>(1.S+3) ubyte x \b, next packet type %#x
# skip Dragon.SHR DEMO.INIT by looking for positive version
>>3 ubyte >0
# skip BUISSON.13 GUITAR1 by looking for low version number
@@ -609,7 +564,7 @@
>>>>>11 ubeshort x %db
>>>>>4 beldate x created on %s -
# old versions use 2 additional bytes after time stamp
-#>>>>>8 ubeshort x 0x%x
+#>>>>>8 ubeshort x %#x
# display key algorithm 1~RSA Encrypt|Sign - 21~Diffie-Hellman
>>>>>10 use key_algo
>>>>>(11.S/8) ubequad x
diff --git a/magic/Magdir/pgp-binary-keys b/magic/Magdir/pgp-binary-keys
new file mode 100644
index 000000000000..1ce76d907b07
--- /dev/null
+++ b/magic/Magdir/pgp-binary-keys
@@ -0,0 +1,388 @@
+
+#------------------------------------------------------------------------------
+# $File: pgp-binary-keys,v 1.2 2021/04/26 15:56:00 christos Exp $
+# pgp-binary-keys: This file handles pgp binary keys.
+#
+# An PGP certificate or message doesn't have a fixed header. Instead,
+# they are sequences of packets:
+#
+# https://tools.ietf.org/html/rfc4880#section-4.3
+#
+# whose order conforms to a grammar:
+#
+# https://tools.ietf.org/html/rfc4880#section-11
+#
+# Happily most packets have a few fields that are constrained, which
+# allow us to fingerprint them with relatively high certainty.
+#
+# A PGP packet is described by a single byte: the so-called CTB. The
+# high-bit is always set. If bit 6 is set, then it is a so-called
+# new-style CTB; if bit 6 is clear, then it is a so-called old-style
+# CTB. Old-style CTBs have only four bits of type information; bits
+# 1-0 are used to describe the length. New-style CTBs have 6 bits of
+# type information.
+#
+# Following the CTB is the packet's length in bytes. If we blindly
+# advance the file cursor by this amount past the end of the length
+# information we come to the next packet.
+#
+# Data Structures
+# ===============
+#
+# New Style CTB
+# -------------
+#
+# https://tools.ietf.org/html/rfc4880#section-4.2.2
+#
+# 76543210
+# ||\----/
+# || tag
+# |always 1
+# always 1
+#
+# Tag bits 7 and 6 set
+# 0 0xC0 -- Reserved - a packet tag MUST NOT have this value
+# 1 0xC1 -- Public-Key Encrypted Session Key Packet
+# 2 0xC2 -- Signature Packet
+# 3 0xC3 -- Symmetric-Key Encrypted Session Key Packet
+# 4 0xC4 -- One-Pass Signature Packet
+# 5 0xC5 -- Secret-Key Packet
+# 6 0xC6 -- Public-Key Packet
+# 7 0xC7 -- Secret-Subkey Packet
+# 8 0xC8 -- Compressed Data Packet
+# 9 0xC9 -- Symmetrically Encrypted Data Packet
+# 10 0xCA -- Marker Packet
+# 11 0xCB -- Literal Data Packet
+# 12 0xCC -- Trust Packet
+# 13 0xCD -- User ID Packet
+# 14 0xCE -- Public-Subkey Packet
+# 17 0xD1 -- User Attribute Packet
+# 18 0xD2 -- Sym. Encrypted and Integrity Protected Data Packet
+# 19 0xD3 -- Modification Detection Code Packet
+# 60 to 63 -- Private or Experimental Values
+#
+# The CTB is followed by the length header, which is densely encoded:
+#
+# if length[0] is:
+# 0..191: one byte length (length[0])
+# 192..223: two byte length ((length[0] - 192) * 256 + length[2] + 192
+# 224..254: four byte length (big endian interpretation of length[1..5])
+# 255: partial body encoding
+#
+# The partial body encoding is similar to HTTP's chunk encoding. It
+# is only allowed for container packets (SEIP, Compressed Data and
+# Literal).
+#
+# Old Style CTB
+# -------------
+#
+# https://tools.ietf.org/html/rfc4880#section-4.2.1
+#
+# CTB:
+#
+# 76543210
+# ||\--/\/
+# || | length encoding
+# || tag
+# |always 0
+# always 1
+#
+# Tag:
+#
+# Tag bit 7 set, bits 6, 1, 0 clear
+# 0 0x80 -- Reserved - a packet tag MUST NOT have this value
+# 1 0x84 -- Public-Key Encrypted Session Key Packet
+# 2 0x88 -- Signature Packet
+# 3 0x8C -- Symmetric-Key Encrypted Session Key Packet
+# 4 0x90 -- One-Pass Signature Packet
+# 5 0x94 -- Secret-Key Packet
+# 6 0x98 -- Public-Key Packet
+# 7 0x9C -- Secret-Subkey Packet
+# 8 0xA0 -- Compressed Data Packet
+# 9 0xA4 -- Symmetrically Encrypted Data Packet
+# 10 0xA8 -- Marker Packet
+# 11 0xAC -- Literal Data Packet
+# 12 0xB0 -- Trust Packet
+# 13 0xB4 -- User ID Packet
+# 14 0xB8 -- Public-Subkey Packet
+#
+# Length encoding:
+#
+# Value
+# 0 1 byte length (following byte is the length)
+# 1 2 byte length (following two bytes are the length)
+# 2 4 byte length (following four bytes are the length)
+# 3 indeterminate length: natural end of packet, e.g., EOF
+#
+# An indeterminate length is only allowed for container packets
+# (SEIP, Compressed Data and Literal).
+#
+# Certificates
+# ------------
+#
+# We check the first three packets to determine if a sequence of
+# OpenPGP packets is likely to be a certificate. The grammar allows
+# the following prefixes:
+#
+# [Primary Key] [SIG] (EOF or another certificate)
+# [Primary Key] [SIG] [User ID] [SIG]...
+# [Primary Key] [SIG] [User Attribute] [SIG]...
+# [Primary Key] [SIG] [Subkey] [SIG]...
+# [Primary Key] [User ID] [SIG]...
+# [Primary Key] [User Attribute] [SIG]...
+# [Primary Key] [Subkey] [SIG]...
+#
+# Any number of marker packets are also allowed between each packet,
+# but they are not normally used and we don't currently check for
+# them.
+#
+# The keys and subkeys may be public or private.
+#
+
+# Key packets and signature packets are versioned. There are two
+# packet versions that we need to worry about in practice: v3 and v4.
+# v4 packets were introduced in RFC 2440, which was published in 1998.
+# It also deprecated v3 packets. There are no actively used v3
+# certificates (GnuPG removed the code to support them in November
+# 2014). But there are v3 keys lying around and it is useful to
+# identify them. The next version of OpenPGP will introduce v5 keys.
+# The document has not yet been standardized so changes are still
+# possible. But, for our purposes, it appears that v5 data structures
+# will be identical to v4 data structures modulo the version number.
+#
+# https://tools.ietf.org/html/rfc2440
+# https://lists.gnupg.org/pipermail/gnupg-announce/2014q4/000358.html
+# https://www.ietf.org/id/draft-ietf-openpgp-rfc4880bis-09.html#name-key-material-packet
+
+
+
+
+# The first packet has to be a public key or a secret key.
+#
+# New-Style Public Key
+0 ubyte =0xC6 OpenPGP Public Key
+>&0 use primary_key_length_new
+# New-Style Secret Key
+0 ubyte =0xC5 OpenPGP Secret Key
+>&0 use primary_key_length_new
+# Old-Style Public Key
+0 ubyte&0xFC =0x98 OpenPGP Public Key
+>&-1 use primary_key_length_old
+# Old-Style Secret Key
+0 ubyte&0xFC =0x94 OpenPGP Secret Key
+>&-1 use primary_key_length_old
+
+# Parse the length, check the packet's body and finally advance to the
+# next packet.
+
+# There are 4 different new-style length encodings, but the partial
+# body encoding is only acceptable for the SEIP, Compressed Data, and
+# Literal packets, which isn't valid for any packets in a certificate
+# so we ignore it.
+0 name primary_key_length_new
+>&0 ubyte <192
+#>>&0 ubyte x (1 byte length encoding, %d bytes)
+>>&0 use pgp_binary_key_pk_check
+>>>&(&-1.B) use sig_or_component_1
+>&0 ubyte >191
+>>&-1 ubyte <225
+# offset = ((offset[0] - 192) << 8) + offset[1] + 192 (for the length header)
+# raw - (192 * 256 - 192)
+# = 48960
+#>>>&0 ubeshort x (2 byte length encoding, %d bytes)
+>>>&1 use pgp_binary_key_pk_check
+>>>>&(&-2.S-48960) use sig_or_component_1
+>&0 ubyte =255
+#>>&0 belong x (5 byte length encoding, %d bytes)
+>>&4 use pgp_binary_key_pk_check
+>>>&(&-4.L) use sig_or_component_1
+# Partial body encoding (only valid for container packets).
+# >&0 ubyte >224
+# >>&0 ubyte <255 partial body encoding
+
+# There are 4 different old-style length encodings, but the
+# indeterminate length encoding is only acceptable for the SEIP,
+# Compressed Data, and Literal packets, which isn't valid for any
+# packets in a certificate.
+0 name primary_key_length_old
+#>&0 ubyte x (ctb: %x)
+>&0 ubyte&0x3 =0
+#>>&0 ubyte x (1 byte length encoding, %d bytes)
+>>&1 use pgp_binary_key_pk_check
+>>>&(&-1.B) use sig_or_component_1
+>&0 ubyte&0x3 =1
+#>>&0 ubeshort x (2 byte length encoding, %d bytes)
+>>&2 use pgp_binary_key_pk_check
+>>>&(&-2.S) use sig_or_component_1
+>&0 ubyte&0x3 =2
+#>>&0 ubelong x (4 byte length encoding, %d bytes)
+>>&4 use pgp_binary_key_pk_check
+>>>&(&-4.L) use sig_or_component_1
+
+# Check the Key.
+#
+# https://tools.ietf.org/html/rfc4880#section-5.5.2
+0 name pgp_binary_key_pk_check
+# Valid versions are: 2, 3, 4. 5 is proposed in RFC 4880bis.
+# Anticipate a v6 / v7 format that like v5 is compatible with v4.
+# key format in a decade or so :D.
+>&0 ubyte >1
+>>&-1 ubyte <8
+>>>&-1 byte x Version %d
+# Check that keys were created after 1990.
+# (1990 - 1970) * 365.2524 * 24 * 60 * 60 = 631156147
+>>>&0 bedate >631156147 \b, Created %s
+>>>>&-5 ubyte >3
+>>>>>&4 use pgp_binary_key_algo
+>>>>&-5 ubyte <4
+>>>>>&6 use pgp_binary_key_algo
+
+# Print out the key's algorithm and the number of bits, if this is
+# relevant (ECC keys are a fixed size).
+0 name pgp_binary_key_algo
+>0 clear x
+>&0 ubyte =1 \b, RSA (Encrypt or Sign,
+>>&0 ubeshort x \b %d bits)
+>&0 ubyte =2 \b, RSA (Encrypt,
+>>&0 ubeshort x \b %d bits)
+>&0 ubyte =3 \b, RSA (Sign,
+>>&0 ubeshort x \b %d bits)
+>&0 ubyte =16 \b, El Gamal (Encrypt,
+>>&0 ubeshort x \b %d bits)
+>&0 ubyte =17 \b, DSA
+>>&0 ubeshort x \b (%d bits)
+>&0 ubyte =18 \b, ECDH
+>&0 ubyte =19 \b, ECDSA
+>&0 ubyte =20 \b, El Gamal (Encrypt or Sign,
+>>&0 ubeshort x \b %d bits)
+>&0 ubyte =22 \b, EdDSA
+>&0 default x
+>>&0 ubyte x \b, Unknown Algorithm (%#x)
+
+# Match all possible second packets.
+0 name sig_or_component_1
+#>0 ubyte x (ctb: %x)
+>&0 ubyte =0xC2
+>>0 ubyte x \b; Signature
+>>&0 use sig_or_component_1_length_new
+>&0 ubyte =0xCD
+>>0 ubyte x \b; User ID
+>>&0 use sig_or_component_1_length_new
+>&0 ubyte =0xCE
+>>0 ubyte x \b; Public Subkey
+>>&0 use sig_or_component_1_length_new
+>&0 ubyte =0xC7
+>>0 ubyte x \b; Secret Subkey
+>>&0 use sig_or_component_1_length_new
+>&0 ubyte =0xD1
+>>0 ubyte x \b; User Attribute
+>>&0 use sig_or_component_1_length_new
+>&0 ubyte&0xFC =0x88
+>>0 ubyte x \b; Signature
+>>&-1 use sig_or_component_1_length_old
+>&0 ubyte&0xFC =0xB4
+>>0 ubyte x \b; User ID
+>>&-1 use sig_or_component_1_length_old
+>&0 ubyte&0xFC =0xB8
+>>0 ubyte x \b; Public Subkey
+>>&-1 use sig_or_component_1_length_old
+>&0 ubyte&0xFC =0x9C
+>>0 ubyte x \b; Secret Subkey
+>>&-1 use sig_or_component_1_length_old
+
+# Copy of 'primary_key_length_new', but calls cert_packet_3.
+0 name sig_or_component_1_length_new
+>&0 ubyte <192
+#>>&0 ubyte x (1 byte new length encoding, %d bytes)
+>>&(&-1.B) use cert_packet_3
+>&0 ubyte >191
+>>&-1 ubyte <225
+# offset = ((offset[0] - 192) << 8) + offset[1] + 192 + 1 (for the length header)
+# raw - (192 * 256 - 192 - 1)
+# = 48959
+#>>>&-1 ubeshort x (2 byte new length encoding, %d bytes)
+>>>&(&-1.S-48959) use cert_packet_3
+>&0 ubyte =255
+#>>&0 belong x (5 byte new length encoding, %d bytes)
+>>&(&-4.L) use cert_packet_3
+# Partial body encoding (only valid for container packets).
+# >&0 ubyte >224
+# >>&0 ubyte <255 partial body encoding
+
+0 name sig_or_component_1_length_old
+#>&0 ubyte x (ctb: %x)
+>&0 ubyte&0x3 =0
+#>>&0 ubyte x (1 byte old length encoding, %d bytes)
+>>&(&0.B+1) use cert_packet_3
+>&0 ubyte&0x3 =1
+#>>&0 ubeshort x (2 byte old length encoding, %d bytes)
+>>&(&0.S+2) use cert_packet_3
+>&0 ubyte&0x3 =2
+#>>&0 ubelong x (4 byte old length encoding, %d bytes)
+>>&(&0.L+4) use cert_packet_3
+
+# Copy of above.
+0 name cert_packet_3
+#>0 ubyte x (ctb: %x)
+>&0 ubyte =0xC2
+>>0 ubyte x \b; Signature
+>>&0 use cert_packet_3_length_new
+>&0 ubyte =0xCD
+>>0 ubyte x \b; User ID
+>>&0 use cert_packet_3_length_new
+>&0 ubyte =0xCE
+>>0 ubyte x \b; Public Subkey
+>>&0 use cert_packet_3_length_new
+>&0 ubyte =0xC7
+>>0 ubyte x \b; Secret Subkey
+>>&0 use cert_packet_3_length_new
+>&0 ubyte =0xD1
+>>0 ubyte x \b; User Attribute
+>>&0 use cert_packet_3_length_new
+>&0 ubyte&0xFC =0x88
+>>0 ubyte x \b; Signature
+>>&-1 use cert_packet_3_length_old
+>&0 ubyte&0xFC =0xB4
+>>0 ubyte x \b; User ID
+>>&-1 use cert_packet_3_length_old
+>&0 ubyte&0xFC =0xB8
+>>0 ubyte x \b; Public Subkey
+>>&-1 use cert_packet_3_length_old
+>&0 ubyte&0xFC =0x9C
+>>0 ubyte x \b; Secret Subkey
+>>&-1 use cert_packet_3_length_old
+
+# Copy of above.
+0 name cert_packet_3_length_new
+>&0 ubyte <192
+#>>&0 ubyte x (1 byte new length encoding, %d bytes)
+>>&(&-1.B) use pgp_binary_keys_end
+>&0 ubyte >191
+>>&-1 ubyte <225
+# offset = ((offset[0] - 192) << 8) + offset[1] + 192 + 1 (for the length header)
+# raw - (192 * 256 - 192 - 1)
+# = 48959
+#>>>&-1 ubeshort x (2 byte new length encoding, %d bytes)
+>>>&(&-1.S-48959) use pgp_binary_keys_end
+>&0 ubyte =255
+#>>&0 belong x (5 byte new length encoding, %d bytes)
+>>&(&-4.L) use pgp_binary_keys_end
+
+0 name cert_packet_3_length_old
+#>&0 ubyte x (ctb: %x)
+>&0 ubyte&0x3 =0
+#>>&0 ubyte x (1 byte old length encoding, %d bytes)
+>>&(&0.B+1) use pgp_binary_keys_end
+>&0 ubyte&0x3 =1
+#>>&0 ubeshort x (2 byte old length encoding, %d bytes)
+>>&(&0.S+2) use pgp_binary_keys_end
+>&0 ubyte&0x3 =2
+#>>&0 ubelong x (4 byte old length encoding, %d bytes)
+>>&(&0.L+4) use pgp_binary_keys_end
+
+# We managed to parse the first three packets of the certificate. Declare
+# victory.
+0 name pgp_binary_keys_end
+>0 byte x \b; OpenPGP Certificate
+!:mime application/pgp-keys
+!:ext pgp/gpg/pkr/asd
diff --git a/magic/Magdir/plan9 b/magic/Magdir/plan9
index da5eb66650ac..db068479c2d7 100644
--- a/magic/Magdir/plan9
+++ b/magic/Magdir/plan9
@@ -1,10 +1,11 @@
#------------------------------------------------------------------------------
-# $File: plan9,v 1.5 2009/09/19 16:28:11 christos Exp $
-# plan9: file(1) magic for AT&T Bell Labs' Plan 9 executables
+# $File: plan9,v 1.6 2021/07/30 12:25:13 christos Exp $
+# plan9: file(1) magic for AT&T Bell Labs' Plan 9 executables and object files
# From: "Stefan A. Haubenthal" <polluks@web.de>
#
0 belong 0x00000107 Plan 9 executable, Motorola 68k
+0 belong 0x00000197 Plan 9 executable, AT&T Hobbit
0 belong 0x000001EB Plan 9 executable, Intel 386
0 belong 0x00000247 Plan 9 executable, Intel 960
0 belong 0x000002AB Plan 9 executable, SPARC
@@ -16,3 +17,9 @@
0 belong 0x000006EB Plan 9 executable, PowerPC
0 belong 0x00000797 Plan 9 executable, MIPS R4000 LE
0 belong 0x0000084B Plan 9 executable, DEC Alpha
+
+0 belong 0x3A11013C Plan 9 object file, MIPS R3000
+0 belong 0x430D013C Plan 9 object file, AT&T Hobbit
+0 belong 0x4D013201 Plan 9 object file, Motorola 68k
+0 belong 0x7410013C Plan 9 object file, SPARC
+0 belong 0x7E004501 Plan 9 object file, Intel 386
diff --git a/magic/Magdir/pmem b/magic/Magdir/pmem
index 4c36275ea96f..c0ead7316b2c 100644
--- a/magic/Magdir/pmem
+++ b/magic/Magdir/pmem
@@ -1,31 +1,31 @@
#------------------------------------------------------------------------------
-# $File: pmem,v 1.3 2019/06/13 11:45:44 christos Exp $
+# $File: pmem,v 1.4 2021/04/26 15:56:00 christos Exp $
# pmem: file(1) magic for Persistent Memory Development Kit pool files
#
0 string PMEM
>4 string POOLSET Persistent Memory Poolset file
>>11 search REPLICA with replica
>4 regex LOG|BLK|OBJ Persistent Memory Pool file, type: %s,
->>8 lelong >0 version: 0x%x,
->>12 lelong x compat: 0x%x,
->>16 lelong x incompat: 0x%x,
->>20 lelong x ro_compat: 0x%x,
+>>8 lelong >0 version: %#x,
+>>12 lelong x compat: %#x,
+>>16 lelong x incompat: %#x,
+>>20 lelong x ro_compat: %#x,
>>120 leqldate x crtime: %s,
->>128 lequad x alignment_desc: 0x%016llx,
+>>128 lequad x alignment_desc: %#016llx,
>>136 clear x
>>136 byte 2 machine_class: 64-bit,
>>136 default x machine_class: unknown
->>>136 byte x (0x%d),
+>>>136 byte x (%#d),
>>137 clear x
>>137 byte 1 data: little-endian,
>>137 byte 2 data: big-endian,
>>137 default x data: unknown
->>>137 byte x (0x%d),
+>>>137 byte x (%#d),
>>138 byte !0 reserved[0]: %d,
>>139 byte !0 reserved[1]: %d,
@@ -36,7 +36,7 @@
>>142 leshort 62 machine: x86_64
>>142 leshort 183 machine: aarch64
>>142 default x machine: unknown
->>>142 leshort x (0x%d)
+>>>142 leshort x (%#d)
>4 string BLK
>>4096 lelong x \b, blk.bsize: %d
diff --git a/magic/Magdir/puzzle b/magic/Magdir/puzzle
new file mode 100644
index 000000000000..ac983f32b8e6
--- /dev/null
+++ b/magic/Magdir/puzzle
@@ -0,0 +1,17 @@
+
+#------------------------------------------------------------------------------
+# $File: puzzle,v 1.2 2021/10/07 15:40:40 christos Exp $
+# wsdl: Magic for various puzzles
+
+# PUZ crossword puzzles from Alan De Smet
+# Test files can be found at
+# https://theworld.com/~wij/puzzles/wij-themed.html or using the
+# "Universal" or "WS Journal" links on the right side of
+# https://www.cruciverb.com/ .
+
+2 string ACROSS&DOWN PUZ crossword puzzle
+>0x2c byte x %d x
+>0x2d byte x %d,
+>0x2e leshort x %d clues,
+>0x1e leshort 0x0000 plain text solution
+>0x1e leshort !0x0000 scrambled solution
diff --git a/magic/Magdir/python b/magic/Magdir/python
index 9d306c062529..80a59959bea2 100644
--- a/magic/Magdir/python
+++ b/magic/Magdir/python
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: python,v 1.42 2020/06/04 00:22:50 christos Exp $
+# $File: python,v 1.43 2021/05/25 15:12:03 christos Exp $
# python: file(1) magic for python
#
# Outlook puts """ too for urgent messages
@@ -10,211 +10,211 @@
# MAGIC as specified in Python/import.c (1.0 to 3.7)
# two bytes of magic followed by "\r\n" in little endian order
0 belong 0x02099900 python 1.0 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x03099900 python 1.1/1.2 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x892e0d0a python 1.3 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x04170d0a python 1.4 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x994e0d0a python 1.5 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xfcc40d0a python 1.6 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xfdc40d0a python 1.6 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x87c60d0a python 2.0 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x88c60d0a python 2.0 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x2aeb0d0a python 2.1 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x2beb0d0a python 2.1 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x2ded0d0a python 2.2 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x2eed0d0a python 2.2 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x3bf20d0a python 2.3 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x3cf20d0a python 2.3 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x45f20d0a python 2.3 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x59f20d0a python 2.4 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x63f20d0a python 2.4 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x6df20d0a python 2.4 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x6ef20d0a python 2.4 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x77f20d0a python 2.5 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x81f20d0a python 2.5 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x8bf20d0a python 2.5 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x8cf20d0a python 2.5 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x95f20d0a python 2.5 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x9ff20d0a python 2.5 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xa9f20d0a python 2.5 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xb3f20d0a python 2.5 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xb4f20d0a python 2.5 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xc7f20d0a python 2.6 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xd1f20d0a python 2.6 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xd2f20d0a python 2.6 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xdbf20d0a python 2.7 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xe5f20d0a python 2.7 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xeff20d0a python 2.7 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xf9f20d0a python 2.7 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x03f30d0a python 2.7 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x04f30d0a python 2.7 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xb80b0d0a python 3.0 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xc20b0d0a python 3.0 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xcc0b0d0a python 3.0 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xd60b0d0a python 3.0 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xe00b0d0a python 3.0 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xea0b0d0a python 3.0 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xf40b0d0a python 3.0 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xf50b0d0a python 3.0 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xff0b0d0a python 3.0 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x090c0d0a python 3.0 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x130c0d0a python 3.0 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x1d0c0d0a python 3.0 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x1f0c0d0a python 3.0 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x270c0d0a python 3.0 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x3b0c0d0a python 3.0 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x450c0d0a python 3.1 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x4f0c0d0a python 3.1 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x580c0d0a python 3.2 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x620c0d0a python 3.2 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x6c0c0d0a python 3.2 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x760c0d0a python 3.3 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x800c0d0a python 3.3 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x8a0c0d0a python 3.3 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x940c0d0a python 3.3 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x9e0c0d0a python 3.3 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xb20c0d0a python 3.4 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xbc0c0d0a python 3.4 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xc60c0d0a python 3.4 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xd00c0d0a python 3.4 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xda0c0d0a python 3.4 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xe40c0d0a python 3.4 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xee0c0d0a python 3.4 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0xf80c0d0a python 3.5.1- byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x020d0d0a python 3.5.1- byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x0c0d0d0a python 3.5.1- byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x160d0d0a python 3.5.1- byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x170d0d0a python 3.5.2+ byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x200d0d0a python 3.6 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x210d0d0a python 3.6 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x2a0d0d0a python 3.6 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x2b0d0d0a python 3.6 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x2c0d0d0a python 3.6 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x2d0d0d0a python 3.6 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x2f0d0d0a python 3.6 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x300d0d0a python 3.6 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x310d0d0a python 3.6 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x320d0d0a python 3.6 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x330d0d0a python 3.6 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x3e0d0d0a python 3.7 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x3f0d0d0a python 3.7 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x400d0d0a python 3.7 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x410d0d0a python 3.7 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x420d0d0a python 3.7 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x480d0d0a python 3.8 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x490d0d0a python 3.8 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x520d0d0a python 3.8 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x530d0d0a python 3.8 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x540d0d0a python 3.8 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x550d0d0a python 3.8 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x5c0d0d0a python 3.9 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x5d0d0d0a python 3.9 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x5e0d0d0a python 3.9 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x5f0d0d0a python 3.9 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x600d0d0a python 3.9 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 belong 0x610d0d0a python 3.9 byte-compiled
-!:mime text/x-bytecode.python
+!:mime application/x-bytecode.python
0 search/1/w #!\040/usr/bin/python Python script text executable
!:strength + 15
diff --git a/magic/Magdir/riff b/magic/Magdir/riff
index 33d31fe75a74..39a5acbe23b9 100644
--- a/magic/Magdir/riff
+++ b/magic/Magdir/riff
@@ -1,28 +1,122 @@
#------------------------------------------------------------------------------
-# $File: riff,v 1.35 2020/06/05 17:15:03 christos Exp $
+# $File: riff,v 1.43 2021/04/26 15:56:00 christos Exp $
# riff: file(1) magic for RIFF format
# See
#
# https://www.seanet.com/users/matts/riffmci/riffmci.htm
# http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/Docs/riffmci.pdf
+# https://www.iana.org/assignments/wave-avi-codec-registry/wave-avi-codec-registry.xml
#
# audio format tag. Assume limits: max 1024 bit, 128 channels, 1 MHz
0 name riff-wave
->0 leshort 1 \b, Microsoft PCM
+>0 leshort 0x01 \b, Microsoft PCM
>>14 leshort >0
>>>14 leshort <1024 \b, %d bit
->0 leshort 2 \b, Microsoft ADPCM
->0 leshort 6 \b, ITU G.711 A-law
->0 leshort 7 \b, ITU G.711 mu-law
->0 leshort 8 \b, Microsoft DTS
->0 leshort 17 \b, IMA ADPCM
->0 leshort 20 \b, ITU G.723 ADPCM (Yamaha)
->0 leshort 49 \b, GSM 6.10
->0 leshort 64 \b, ITU G.721 ADPCM
->0 leshort 80 \b, MPEG
->0 leshort 85 \b, MPEG Layer 3
+>0 leshort 0x02 \b, Microsoft ADPCM
+>0 leshort 0x03 \b, IEEE Float
+>0 leshort 0x04 \b, Compaq VSELP
+>0 leshort 0x05 \b, IBM CVSD
+>0 leshort 0x06 \b, ITU G.711 A-law
+>0 leshort 0x07 \b, ITU G.711 mu-law
+>0 leshort 0x08 \b, Microsoft DTS
+>0 leshort 0x10 \b, OKI ADPCM
+>0 leshort 0x11 \b, IMA ADPCM
+>0 leshort 0x12 \b, MediaSpace ADPCM
+>0 leshort 0x13 \b, Sierra ADPCM
+>0 leshort 0x14 \b, ITU G.723 ADPCM (Yamaha)
+>0 leshort 0x15 \b, DSP Solutions DIGISTD
+>0 leshort 0x16 \b, DSP Solutions DIGIFIX
+>0 leshort 0x17 \b, Dialogic OKI ADPCM
+>0 leshort 0x18 \b, MediaVision ADPCM
+>0 leshort 0x19 \b, HP CU
+>0 leshort 0x20 \b, Yamaha ADPCM
+>0 leshort 0x21 \b, Speech Compression SONARC
+>0 leshort 0x22 \b, DSP Group True Speech
+>0 leshort 0x23 \b, Echo Speech EchoSC1
+>0 leshort 0x24 \b, AudioFile AF36
+>0 leshort 0x25 \b, APTX
+>0 leshort 0x26 \b, AudioFile AF10
+>0 leshort 0x27 \b, Prosody 1612
+>0 leshort 0x28 \b, LRC
+>0 leshort 0x30 \b, Dolby AC2
+>0 leshort 0x31 \b, GSM 6.10
+>0 leshort 0x32 \b, MSN Audio
+>0 leshort 0x33 \b, Antex ADPCME
+>0 leshort 0x34 \b, Control Res VQLPC
+>0 leshort 0x35 \b, Digireal
+>0 leshort 0x36 \b, DigiADPCM
+>0 leshort 0x37 \b, Control Res CR10
+>0 leshort 0x38 \b, NMS VBXADPCM
+>0 leshort 0x39 \b, Roland RDAC
+>0 leshort 0x3A \b, Echo Speech EchoSC3
+>0 leshort 0x3B \b, Rockwell ADPCM
+>0 leshort 0x3C \b, Rockwell Digitalk
+>0 leshort 0x3D \b, Xebec
+>0 leshort 0x40 \b, ITU G.721 ADPCM
+>0 leshort 0x41 \b, ITU G.728 CELP
+>0 leshort 0x42 \b, MSG723
+>0 leshort 0x50 \b, MPEG
+>0 leshort 0x52 \b, RT24
+>0 leshort 0x53 \b, PAC
+>0 leshort 0x55 \b, MPEG Layer 3
+>0 leshort 0x59 \b, Lucent G.723
+>0 leshort 0x60 \b, Cirrus
+>0 leshort 0x61 \b, ESPCM
+>0 leshort 0x62 \b, Voxware
+>0 leshort 0x63 \b, Canopus Atrac
+>0 leshort 0x64 \b, ITU G.726 ADPCM
+>0 leshort 0x65 \b, ITU G.722 ADPCM
+>0 leshort 0x66 \b, DSAT
+>0 leshort 0x67 \b, DSAT Display
+>0 leshort 0x69 \b, Voxware Byte Aligned
+>0 leshort 0x70 \b, Voxware AC8
+>0 leshort 0x71 \b, Voxware AC10
+>0 leshort 0x72 \b, Voxware AC16
+>0 leshort 0x73 \b, Voxware AC20
+>0 leshort 0x74 \b, Voxware MetaVoice
+>0 leshort 0x75 \b, Voxware MetaSound
+>0 leshort 0x76 \b, Voxware RT29HW
+>0 leshort 0x77 \b, Voxware VR12
+>0 leshort 0x78 \b, Voxware VR18
+>0 leshort 0x79 \b, Voxware TQ40
+>0 leshort 0x80 \b, Softsound
+>0 leshort 0x81 \b, Voxware TQ60
+>0 leshort 0x82 \b, MSRT24
+>0 leshort 0x83 \b, ITU G.729A
+>0 leshort 0x84 \b, MVI MV12
+>0 leshort 0x85 \b, DF G.726
+>0 leshort 0x86 \b, DF GSM610
+>0 leshort 0x88 \b, ISIAudio
+>0 leshort 0x89 \b, Onlive
+>0 leshort 0x91 \b, SBC24
+>0 leshort 0x92 \b, Dolby AC3 S/PDIF
+>0 leshort 0x97 \b, ZyXEL ADPCM
+>0 leshort 0x98 \b, Philips LPCBB
+>0 leshort 0x99 \b, Packed
+>0 leshort 0x100 \b, Rhetorex ADPCM
+>0 leshort 0x101 \b, BeCubed Software IRAT
+>0 leshort 0x111 \b, Vivo G.723
+>0 leshort 0x112 \b, Vivo Siren
+>0 leshort 0x123 \b, Digital G.723
+>0 leshort 0x200 \b, Creative ADPCM
+>0 leshort 0x202 \b, Creative FastSpeech8
+>0 leshort 0x203 \b, Creative FastSpeech10
+>0 leshort 0x220 \b, Quarterdeck
+>0 leshort 0x300 \b, FM Towns Snd
+>0 leshort 0x400 \b, BTV Digital
+>0 leshort 0x680 \b, VME VMPCM
+>0 leshort 0x1000 \b, OLIGSM
+>0 leshort 0x1001 \b, OLIADPCM
+>0 leshort 0x1002 \b, OLICELP
+>0 leshort 0x1003 \b, OLISBC
+>0 leshort 0x1004 \b, OLIOPR
+>0 leshort 0x1100 \b, LH Codec
+>0 leshort 0x1400 \b, Norris
+>0 leshort 0x1401 \b, ISIAudio
+>0 leshort 0x1500 \b, Soundspace Music Compression
+>0 leshort 0x2000 \b, AC3 DVM
>0 leshort 0x2001 \b, DTS
>2 leshort =1 \b, mono
>2 leshort =2 \b, stereo
@@ -34,7 +128,7 @@
# try to find "fmt "
0 name riff-walk
>0 string fmt\x20
->>4 lelong <0x80
+>>4 lelong >15
>>>8 use riff-wave
>0 string LIST
>>&(4.l+4) use riff-walk
@@ -74,6 +168,7 @@
# Update: Joerg Jenderek
# URL: https://en.wikipedia.org/wiki/Resource_Interchange_File_Format
# Reference: https://worms2d.info/Palette_file
+# WAVE/AVI codec registry: https://www.iana.org/assignments/wave-avi-codec-registry/wave-avi-codec-registry.xml
>8 string PAL\ \b, palette
!:mime application/x-riff
# color palette by Microsoft Corporation
@@ -87,7 +182,7 @@
# data chunk size = color entries * 4 + 4 + sometimes extra (4) appended bytes
>>>16 ulelong x \b, data size %u
# palVersion is always 0x0300
-#>>>20 leshort x \b, version 0x%4.4x
+#>>>20 leshort x \b, version %#4.4x
# palNumEntries specifies the number of palette color entries
>>>22 uleshort x \b, %u entries
# after palPalEntry sized (number of color entries * 4 ) vector
@@ -95,9 +190,11 @@
# jump relative 22 ( 8 + 16) bytes forward points after end of file or to
# appended extra bytes like in http://safecolours.rigdenage.com/set(ms).zip/Protan(MS).pal
>>>>&16 ubelong x \b, extra bytes
->>>>>&-4 ubelong >0 0x%8.8x
+>>>>>&-4 ubelong >0 %#8.8x
# RIFF Device Independent Bitmap format
+# URL: http://fileformats.archiveteam.org/wiki/RDIB
>8 string RDIB \b, device-independent bitmap
+!:ext rdi/dib
>>16 string BM
>>>30 leshort 12 \b, OS/2 1.x format
>>>>34 leshort x \b, %d x
@@ -110,14 +207,28 @@
>>>>38 lelong x %d x
>>>>44 leshort x %d
# RIFF MIDI format
+# URL: http://fileformats.archiveteam.org/wiki/RIFF_MIDI
>8 string RMID \b, MIDI
+# http://extension.nirsoft.net/rmi
+!:mime audio/mid
+#!:mime audio/x-rmid
+!:ext rmi
# RIFF Multimedia Movie File format
+# URL: http://fileformats.archiveteam.org/wiki/RIFF_Multimedia_Movie
>8 string RMMP \b, multimedia movie
+!:mime video/x-mmm
+!:ext mmm
# RIFF wrapper for MP3
>8 string RMP3 \b, MPEG Layer 3 audio
+#!:mime audio/x-rmp3
# Microsoft WAVE format (*.wav)
+# URL: http://fileformats.archiveteam.org/wiki/WAV
>8 string WAVE \b, WAVE audio
+#!:mime audio/vnd.wave
!:mime audio/x-wav
+# https://www.macdisk.com/macsigen.php
+#!:apple ????WAVE
+!:ext wav/wave
>>12 string >\0
>>>12 use riff-walk
# Update: Joerg Jenderek
@@ -147,10 +258,26 @@
# pattern created by newer software start with RIFF type PAT
>8 string PAT
>>0 use corel-draw
+# From: Joerg Jenderek
+# URL: https://en.wikipedia.org/wiki/Corel_Designer
+# Reference: http://fileformats.archiveteam.org/wiki/Corel_Designer
+>8 string DES
+>>8 string !DESC
+>>>0 use corel-des
+# Corel Draw templates with version 12.5 or Corel Designer illustration 12
+>>8 string =DESC
+# MORE TESTS NEEDED HERE!
+#>>>0 use corel-des
+#>>>0 use corel-draw
>8 string NUNDROOT \b, Steinberg CuBase
# AVI == Audio Video Interleave
+# Reference: http://fileformats.archiveteam.org/wiki/AVI
>8 string AVI\040 \b, AVI
+# https://reposcope.com/mimetype/video/x-msvideo
!:mime video/x-msvideo
+# https://www.iana.org/assignments/wave-avi-codec-registry/wave-avi-codec-registry.xml
+#!:mime video/vnd.avi
+!:ext avi/divx
>>12 string LIST
>>>20 string hdrlavih
>>>>&36 lelong x \b, %u x
@@ -214,15 +341,126 @@
# skip past vids strh
>>>>>>(104.l+108) string strf
>>>>>>>(104.l+132) lelong 1 RLE 8bpp
+>>>>>>>(104.l+132) string/c anim Intel RDX
+>>>>>>>(104.l+132) string/c aur2 AuraVision Aura 2
+>>>>>>>(104.l+132) string/c aura AuraVision Aura
+>>>>>>>(104.l+132) string/c bt20 Brooktree MediaStream
+>>>>>>>(104.l+132) string/c btcv Brooktree Composite Video
+>>>>>>>(104.l+132) string/c cc12 Intel YUV12
+>>>>>>>(104.l+132) string/c cdvc Canopus DV
+>>>>>>>(104.l+132) string/c cham Winnov Caviara Cham
+>>>>>>>(104.l+132) string/c cljr Proprietary YUV 4 pixels
+>>>>>>>(104.l+132) string/c cmyk Common Data Format in Printing
+>>>>>>>(104.l+132) string/c cpla Weitek 4:2:0 YUV Planar
>>>>>>>(104.l+132) string/c cvid Cinepak
+>>>>>>>(104.l+132) string/c cwlt Microsoft Color WLT DIB
+>>>>>>>(104.l+132) string/c cyuv Creative Labs YUV
+>>>>>>>(104.l+132) string/c d261 H.261
+>>>>>>>(104.l+132) string/c d263 H.263
+>>>>>>>(104.l+132) string/c duck TrueMotion 1.0
+>>>>>>>(104.l+132) string/c dve2 DVE-2 Videoconferencing
+>>>>>>>(104.l+132) string/c fljp Field Encoded Motion JPEG
+>>>>>>>(104.l+132) string/c fvf1 Fractal Video Frame
+>>>>>>>(104.l+132) string/c gwlt Microsoft Greyscale WLT DIB
+>>>>>>>(104.l+132) string/c h260 H.260
+>>>>>>>(104.l+132) string/c h261 H.261
+>>>>>>>(104.l+132) string/c h262 H.262
+>>>>>>>(104.l+132) string/c h263 H.263
+>>>>>>>(104.l+132) string/c h264 H.264
+>>>>>>>(104.l+132) string/c h265 H.265
+>>>>>>>(104.l+132) string/c h266 H.266
+>>>>>>>(104.l+132) string/c h267 H.267
+>>>>>>>(104.l+132) string/c h268 H.268
+>>>>>>>(104.l+132) string/c h269 H.269
>>>>>>>(104.l+132) string/c i263 Intel I.263
->>>>>>>(104.l+132) string/c iv32 Indeo 3.2
->>>>>>>(104.l+132) string/c iv41 Indeo 4.1
->>>>>>>(104.l+132) string/c iv50 Indeo 5.0
+>>>>>>>(104.l+132) string/c i420 Intel Indeo 4
+>>>>>>>(104.l+132) string/c ian Intel RDX
+>>>>>>>(104.l+132) string/c iclb CellB Videoconferencing Codec
+>>>>>>>(104.l+132) string/c ilvc Intel Layered Video
+>>>>>>>(104.l+132) string/c ilvr ITU-T H.263+
+>>>>>>>(104.l+132) string/c iraw Intel YUV Uncompressed
+>>>>>>>(104.l+132) string/c iv30 Intel Indeo 3
+>>>>>>>(104.l+132) string/c iv31 Intel Indeo 3.1
+>>>>>>>(104.l+132) string/c iv32 Intel Indeo 3.2
+>>>>>>>(104.l+132) string/c iv33 Intel Indeo 3.3
+>>>>>>>(104.l+132) string/c iv34 Intel Indeo 3.4
+>>>>>>>(104.l+132) string/c iv35 Intel Indeo 3.5
+>>>>>>>(104.l+132) string/c iv36 Intel Indeo 3.6
+>>>>>>>(104.l+132) string/c iv37 Intel Indeo 3.7
+>>>>>>>(104.l+132) string/c iv38 Intel Indeo 3.8
+>>>>>>>(104.l+132) string/c iv39 Intel Indeo 3.9
+>>>>>>>(104.l+132) string/c iv40 Intel Indeo 4.0
+>>>>>>>(104.l+132) string/c iv41 Intel Indeo 4.1
+>>>>>>>(104.l+132) string/c iv42 Intel Indeo 4.2
+>>>>>>>(104.l+132) string/c iv43 Intel Indeo 4.3
+>>>>>>>(104.l+132) string/c iv44 Intel Indeo 4.4
+>>>>>>>(104.l+132) string/c iv45 Intel Indeo 4.5
+>>>>>>>(104.l+132) string/c iv46 Intel Indeo 4.6
+>>>>>>>(104.l+132) string/c iv47 Intel Indeo 4.7
+>>>>>>>(104.l+132) string/c iv48 Intel Indeo 4.8
+>>>>>>>(104.l+132) string/c iv49 Intel Indeo 4.9
+>>>>>>>(104.l+132) string/c iv50 Intel Indeo 5.0
+>>>>>>>(104.l+132) string/c mpeg MPEG 1 Video Frame
+>>>>>>>(104.l+132) string/c mjpg Motion JPEG
>>>>>>>(104.l+132) string/c mp42 Microsoft MPEG-4 v2
>>>>>>>(104.l+132) string/c mp43 Microsoft MPEG-4 v3
+>>>>>>>(104.l+132) string/c mrca MR Codec
+>>>>>>>(104.l+132) string/c mrle Run Length Encoding
+>>>>>>>(104.l+132) string/c msvc Microsoft Video 1
+>>>>>>>(104.l+132) string/c phmo Photomotion
+>>>>>>>(104.l+132) string/c qpeq QPEG 1.1 Format Video
+>>>>>>>(104.l+132) string/c rgbt RGBT
+>>>>>>>(104.l+132) string/c rle4 Run Length Encoded 4
+>>>>>>>(104.l+132) string/c rle8 Run Length Encoded 8
+>>>>>>>(104.l+132) string/c rt21 Intel Indeo 2.1
+>>>>>>>(104.l+132) string/c rvx Intel RDX
+>>>>>>>(104.l+132) string/c sdcc Sun Digital Camera Codec
+>>>>>>>(104.l+132) string/c sfmc Crystal Net SFM Codec
+>>>>>>>(104.l+132) string/c smsc SMSC
+>>>>>>>(104.l+132) string/c smsd SMSD
+>>>>>>>(104.l+132) string/c splc Splash Studios ACM Audio Codec
+>>>>>>>(104.l+132) string/c sqz2 Microsoft VXtreme Video Codec
+>>>>>>>(104.l+132) string/c sv10 Sorenson Video R1
+>>>>>>>(104.l+132) string/c tlms TeraLogic Motion Intraframe Codec A
+>>>>>>>(104.l+132) string/c tlst TeraLogic Motion Intraframe Codec B
+>>>>>>>(104.l+132) string/c tm20 TrueMotion 2.0
+>>>>>>>(104.l+132) string/c tmic TeraLogic Motion Intraframe Codec 2
+>>>>>>>(104.l+132) string/c tmot TrueMotion Video Compression
+>>>>>>>(104.l+132) string/c tr20 TrueMotion RT 2.0
+>>>>>>>(104.l+132) string/c ulti Ultimotion
+>>>>>>>(104.l+132) string/c uyvy UYVY 4:2:2 byte ordering
+>>>>>>>(104.l+132) string/c v422 24-bit YUV 4:2:2 format
+>>>>>>>(104.l+132) string/c v655 16-bit YUV 4:2:2 format
+>>>>>>>(104.l+132) string/c vcr1 ATI VCR 1.0
+>>>>>>>(104.l+132) string/c vcr2 ATI VCR 2.0
+>>>>>>>(104.l+132) string/c vcr3 ATI VCR 3.0
+>>>>>>>(104.l+132) string/c vcr4 ATI VCR 4.0
+>>>>>>>(104.l+132) string/c vcr5 ATI VCR 5.0
+>>>>>>>(104.l+132) string/c vcr6 ATI VCR 6.0
+>>>>>>>(104.l+132) string/c vcr7 ATI VCR 7.0
+>>>>>>>(104.l+132) string/c vcr8 ATI VCR 8.0
+>>>>>>>(104.l+132) string/c vcr9 ATI VCR 9.0
+>>>>>>>(104.l+132) string/c vdct Video Maker Pro DIB
+>>>>>>>(104.l+132) string/c vids YUV 4:2:2 CCIR 601 for V422
+>>>>>>>(104.l+132) string/c vivo Vivo H.263
+>>>>>>>(104.l+132) string/c vixl VIXL
+>>>>>>>(104.l+132) string/c vlv1 VLCAP.DRV
+>>>>>>>(104.l+132) string/c wbvc W9960
+>>>>>>>(104.l+132) string/c x263 mmioFOURCC('X','2','6','3')
+>>>>>>>(104.l+132) string/c xlv0 XL Video Decoder
+>>>>>>>(104.l+132) string/c y211 YUV 2:1:1 Packed
+>>>>>>>(104.l+132) string/c y411 YUV 4:1:1 Packed
+>>>>>>>(104.l+132) string/c y41b YUV 4:1:1 Planar
+>>>>>>>(104.l+132) string/c y41p PC1 4:1:1
+>>>>>>>(104.l+132) string/c y41t PC1 4:1:1 with transparency
+>>>>>>>(104.l+132) string/c y42b YUV 4:2:2 Planar
+>>>>>>>(104.l+132) string/c y42t PC1 4:2:2 with transparency
+>>>>>>>(104.l+132) string/c yc12 Intel YUV12 Codec
+>>>>>>>(104.l+132) string/c yuv8 Winnov Caviar YUV8
+>>>>>>>(104.l+132) string/c yuv9 YUV9
+>>>>>>>(104.l+132) string/c yuy2 YUY2 4:2:2 byte ordering packed
+>>>>>>>(104.l+132) string/c yuyv BI_YUYV, Canopus
>>>>>>>(104.l+132) string/c fmp4 FFMpeg MPEG-4
->>>>>>>(104.l+132) string/c mjpg Motion JPEG
>>>>>>>(104.l+132) string/c div3 DivX 3
>>>>>>>>112 string/c div3 Low-Motion
>>>>>>>>112 string/c div4 Fast-Motion
@@ -248,7 +486,7 @@
>>>>>>>>(92.l+180) leshort 0x0055 MPEG-1 Layer 3
>>>>>>>>(92.l+180) leshort 0x2000 Dolby AC3
>>>>>>>>(92.l+180) leshort 0x0161 DivX
-##>>>>>>>>(92.l+180) leshort x (0x%.4x)
+##>>>>>>>>(92.l+180) leshort x (%#.4x)
>>>>>>>>(92.l+182) leshort 1 (mono,
>>>>>>>>(92.l+182) leshort 2 (stereo,
>>>>>>>>(92.l+182) leshort >2 (%d channels,
@@ -260,24 +498,74 @@
>>>>>>>>(92.l+188) leshort 0x0055 MPEG-1 Layer 3
>>>>>>>>(92.l+188) leshort 0x2000 Dolby AC3
>>>>>>>>(92.l+188) leshort 0x0161 DivX
-##>>>>>>>>(92.l+188) leshort x (0x%.4x)
+##>>>>>>>>(92.l+188) leshort x (%#.4x)
>>>>>>>>(92.l+190) leshort 1 (mono,
>>>>>>>>(92.l+190) leshort 2 (stereo,
>>>>>>>>(92.l+190) leshort >2 (%d channels,
>>>>>>>>(92.l+192) lelong x %d Hz)
+# From: Joerg Jenderek
+# URL: http://fileformats.archiveteam.org/wiki/VDR_(VirtualDub)
+# Reference: http://sourceforge.net/projects/virtualdub/files/virtualdub-win/
+# 1.10.4.35491/VirtualDub-1.10.4-src.7z/src/vdremote/Main.cpp
+# VirtualDub link handler
+>8 string VDRM \b, VirtualDub link
+!:mime video/x-vdr
+!:ext vdr
+>>12 string PATH \b, PATH
+# remote-path to video file
+>>16 pstring/l x %s
# Animated Cursor format
+# Update: Joerg Jenderek
+# URL: http://fileformats.archiveteam.org/wiki/Windows_Animated_Cursor
+# Reference: https://www.gdgsoft.com/anituner/help/aniformat.htm
>8 string ACON \b, animated cursor
+!:mime application/x-navi-animation
+# http://extension.nirsoft.net/ani
+#!:mime image/ani
+!:ext ani
+# INAM tag followed by length of title
+>>24 string INAM
+>>>28 pstring/l x "%s"
+# IART tag followed by length of author
+>>>(28.l+32) ubelong 0x49415254
+>>>>&0 pstring/l x %s
# SoundFont 2 <mpruett@sgi.com>
->8 string sfbk SoundFont/Bank
+# URL: http://fileformats.archiveteam.org/wiki/SoundFont_2.0
+>8 string sfbk \b, SoundFont/Bank
+!:mime audio/x-sfbk
+!:ext sf2
# MPEG-1 wrapped in a RIFF, apparently
+# URL: http://file.fyicenter.com/17_Video_.DAT_File_Extension_for_VCD_Files.html
>8 string CDXA \b, wrapped MPEG-1 (CDXA)
+!:mime video/x-cdxa
+!:ext mpg/dat
+# URL: http://fileformats.archiveteam.org/wiki/4X_IMA_ADPCM
>8 string 4XMV \b, 4X Movie file
+!:mime video/x-4xmv
+!:ext 4xm/4xa
# AMV-type AVI file: https://wiki.multimedia.cx/index.php?title=AMV
>8 string AMV\040 \b, AMV
+# http://fileformats.archiveteam.org/wiki/MTV_Video_(.AMV)
+!:mime video/x-amv
+!:ext amv
+#!:ext amv/mtv
+# URL: http://fileformats.archiveteam.org/wiki/WebP
>8 string WEBP \b, Web/P image
!:mime image/webp
+!:ext webp
>>12 use riff-walk
# From: Joerg Jenderek
+# URL: http://fileformats.archiveteam.org/wiki/RIFF_MIDS
+>8 string MIDS \b, MIDI Stream
+!:mime audio/x-mids
+!:ext mds
+# From: Joerg Jenderek
+# URL: http://mark0.net/soft-trid-e.html
+# Reference: http://fileformats.archiveteam.org/wiki/Trd_(TRID)
+>8 string TRID \b, TrID defs package
+!:mime application/x-trid-trd
+!:ext trd
+# From: Joerg Jenderek
# URL: https://en.wikipedia.org/wiki/CorelDRAW
# Reference: http://fileformats.archiveteam.org/wiki/CorelDRAW
# Note: Since version 3 CorelDraw Pictures are RIFF based
@@ -351,13 +639,43 @@
>>20 uleshort%100 >0 \b.%u
# for debugging purpose display next chunk like: DISP LIST
#>>22 string x \b, 4th "%-4.4s"
-#>>26 ulelong x \b, 4th SIZE 0x%x
+#>>26 ulelong x \b, 4th SIZE %#x
# for debugging purpose display 5th chunk like: LIST DISP ccmm osfp
#>>(26.l+30) string x \b, 5th "%-4.4s"
# 1st data chunk length 10h implies 16 byte content with version info
>16 ulelong 0x10
>>34 ubyte x %u
>>>33 ubyte >0 \b.%u
+# display information of RIFF based Corel Design formats
+0 name corel-des
+# display second chunk for debugging
+#>8 string x \b, [8]=%.8s
+>12 string x \b, Corel DESIGNER
+!:mime image/x-corel-des
+#!:mime application/x-vnd.corel.designer.document
+# used by Corel Designer with newer versions since 16
+>12 string =fver graphics (root.dat)
+!:ext dat
+# used by Corel Designer templates with older versions with vrsn tag
+>12 string !fver
+# used by Corel Designer with versions 14-15
+>>11 string >D graphics (riffData.cdr)
+!:ext cdr
+# used by Corel Designer with versions 10-12
+>>11 string <E graphics
+!:ext des
+# version indicated by last ASCII char of second chunk tag
+>11 string x \b, version '%-.1s'
+# but vrsn short content is not always version indicator
+# exceptions: 'A'~11.4 'B'~12 'C'~12.5
+>11 string >D
+>>0 use corel-version
+# for debugging purpose display next chunk like: DISP LIST
+#>>22 string x \b, 4th "%-4.4s"
+#>>26 ulelong x \b, 4th SIZE %#x
+# for debugging purpose display 5th chunk like: LIST osfp
+#>>(26.l+30) string x \b, 5th "%-4.4s"
+>4 ulelong+8 x \b, %u bytes
#
# XXX - some of the below may only appear in little-endian form.
#
diff --git a/magic/Magdir/rtf b/magic/Magdir/rtf
index c2e1f273bb02..48a1f28af467 100644
--- a/magic/Magdir/rtf
+++ b/magic/Magdir/rtf
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: rtf,v 1.8 2020/05/17 19:28:49 christos Exp $
+# $File: rtf,v 1.9 2020/12/12 20:01:47 christos Exp $
# rtf: file(1) magic for Rich Text Format (RTF)
#
# Duncan P. Simpson, D.P.Simpson@dcs.warwick.ac.uk
@@ -33,7 +33,7 @@
#>6 search/105 \\ansi \b, ANSI
>6 search/502 \\ansi \b, ANSI
>6 default x \b, unknown character set
-# look for explict codepage keyword
+# look for explicit codepage keyword
# "Burow, Steffanie - Im Tal des Schneeleoparden.rtf"
#>5 search/110 \\ansicpg
>5 search/500 \\ansicpg
diff --git a/magic/Magdir/sccs b/magic/Magdir/sccs
index 4717948fdbfc..04e7929921fd 100644
--- a/magic/Magdir/sccs
+++ b/magic/Magdir/sccs
@@ -1,9 +1,9 @@
#------------------------------------------------------------------------------
-# $File: sccs,v 1.7 2017/03/17 21:35:28 christos Exp $
+# $File: sccs,v 1.8 2020/06/20 21:32:52 christos Exp $
# sccs: file(1) magic for SCCS archives
#
-# SCCS archive structure:
+# SCCS v4 archive structure:
# \001h01207
# \001s 00276/00000/00000
# \001d D 1.1 87/09/23 08:09:20 ian 1 0
@@ -17,6 +17,8 @@
# Maybe we should just switch everybody from SCCS to RCS!
# Further, you can't just say '\001h0', because the five-digit number
# is a checksum that could (presumably) have any leading digit,
-# and we don't have regular expression matching yet.
-# Hence the following official kludge:
-8 string \001s\ SCCS archive data
+# Fortunately we have regular expression matching:
+0 string \001h
+>2 regex [0-9][0-9][0-9][0-9][0-9]$
+>>8 string \001s\040 SCCS v4 archive data
+>2 string V6,sum= SCCS v6 archive data
diff --git a/magic/Magdir/sgi b/magic/Magdir/sgi
index 951920477392..fe532e00106d 100644
--- a/magic/Magdir/sgi
+++ b/magic/Magdir/sgi
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: sgi,v 1.23 2018/05/29 02:26:56 christos Exp $
+# $File: sgi,v 1.24 2021/09/13 13:23:53 christos Exp $
# sgi: file(1) magic for Silicon Graphics operating systems and applications
#
# Executable images are handled either in aout (for old-style a.out
@@ -74,25 +74,27 @@
0 string PmNs PCP compiled namespace (V.0)
0 string PmN PCP compiled namespace
>3 string >\0 (V.%1.1s)
-#3 lelong 0x84500526 PCP archive
3 belong 0x84500526 PCP archive
>7 byte x (V.%d)
-#>20 lelong -2 temporal index
-#>20 lelong -1 metadata
-#>20 lelong 0 log volume #0
-#>20 lelong >0 log volume #%d
>20 belong -2 temporal index
>20 belong -1 metadata
>20 belong 0 log volume #0
>20 belong >0 log volume #%d
>24 string >\0 host: %s
+3 belong 0x28500526 PCP archive
+>7 byte x (V.%d)
+>24 belong -2 temporal index
+>24 belong -1 metadata
+>24 belong 0 log volume #0
+>24 belong >0 log volume #%d
+>36 string >\0 host: %s
0 string PCPFolio PCP
>9 string Version: Archive Folio
>18 string >\0 (V.%s)
0 string #pmchart PCP pmchart view
>9 string Version
>17 string >\0 (V%-3.3s)
-0 string #kmchart PCP kmchart view
+0 string #kmchart PCP pmchart view
>9 string Version
>17 string >\0 (V.%s)
0 string pmview PCP pmview config
@@ -112,6 +114,10 @@
>16 string >\0 (V.%1.1s)
3 string pmieconf-pmie PCP pmie config
>17 string >\0 (V.%1.1s)
+0 string #pmlogconf-setup PCP pmlogconf config
+>17 string >\0 (V.%1.1s)
+1 string pmlogconf PCP pmlogger config
+>11 string >\0 (V.%1.1s)
0 string MMV PCP memory mapped values
>4 long x (V.%d)
diff --git a/magic/Magdir/sgml b/magic/Magdir/sgml
index 74ab855b927e..a1c0484ce4dd 100644
--- a/magic/Magdir/sgml
+++ b/magic/Magdir/sgml
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: sgml,v 1.41 2020/06/07 18:16:43 christos Exp $
+# $File: sgml,v 1.42 2020/12/12 20:01:47 christos Exp $
# Type: SVG Vectorial Graphics
# From: Noel Torres <tecnico@ejerciciosresueltos.com>
0 string \<?xml\ version=
@@ -43,7 +43,7 @@
# sgml: file(1) magic for Standard Generalized Markup Language
# HyperText Markup Language (HTML) is an SGML document type,
# from Daniel Quinlan (quinlan@yggdrasil.com)
-# adapted to string extenstions by Anthon van der Neut <anthon@mnt.org)
+# adapted to string extensions by Anthon van der Neut <anthon@mnt.org)
0 search/4096/cWt \<!doctype\ html HTML document text
!:mime text/html
!:strength + 5
diff --git a/magic/Magdir/sinclair b/magic/Magdir/sinclair
index 60088924f4a4..608d779d7b55 100644
--- a/magic/Magdir/sinclair
+++ b/magic/Magdir/sinclair
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: sinclair,v 1.6 2015/11/14 13:38:35 christos Exp $
+# $File: sinclair,v 1.7 2021/04/27 20:35:51 christos Exp $
# sinclair: file(1) sinclair QL
# additions to /etc/magic by Thomas M. Ott (ThMO)
@@ -31,6 +31,8 @@
# Sinclair QL executables (was ThMO)
4 belong 0x4AFB QDOS executable
>9 pstring x '%s'
+6 beshort 0x4AFB QDOS executable
+>9 pstring x '%s'
# Sinclair QL ROM (ThMO)
0 belong =0x4AFB0001 QL plugin-ROM data,
diff --git a/magic/Magdir/sniffer b/magic/Magdir/sniffer
index 25f5b83e3bbc..816ecb907a3e 100644
--- a/magic/Magdir/sniffer
+++ b/magic/Magdir/sniffer
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: sniffer,v 1.28 2020/03/13 16:47:29 christos Exp $
+# $File: sniffer,v 1.30 2021/07/03 13:51:56 christos Exp $
# sniffer: file(1) magic for packet capture files
#
# From: guy@alum.mit.edu (Guy Harris)
@@ -262,8 +262,14 @@
>20 belong&0x03FFFFFF 279 (Elektrobit High Speed Capture and Replay (EBHSCR)
>20 belong&0x03FFFFFF 281 (Broadcom tag
>20 belong&0x03FFFFFF 282 (Broadcom tag (prepended)
+>20 belong&0x03FFFFFF 283 (802.15.4 with TAP
>20 belong&0x03FFFFFF 284 (Marvell DSA
>20 belong&0x03FFFFFF 285 (Marvell EDSA
+>20 belong&0x03FFFFFF 286 (ELEE lawful intercept
+>20 belong&0x03FFFFFF 287 (Z-Wave serial
+>20 belong&0x03FFFFFF 288 (USB 2.0
+>20 belong&0x03FFFFFF 289 (ATSC ALP
+>20 belong&0x03FFFFFF 290 (Event Tracing for Windows
# print default match
>20 default x
>>20 belong x (linktype#%u
diff --git a/magic/Magdir/sosi b/magic/Magdir/sosi
index cfac5a3e2730..88ecc512badb 100644
--- a/magic/Magdir/sosi
+++ b/magic/Magdir/sosi
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: sosi,v 1.1 2019/05/20 17:25:09 christos Exp $
+# $File: sosi,v 1.2 2021/02/23 00:51:10 christos Exp $
# SOSI
# Summary: Systematic Organization of Spatial Information
# Long description: Norwegian text based map format
@@ -23,7 +23,7 @@
# version and a separator.
#
# FIXME figure out how to accept any of [space], [tab], [newline] and
-# [carrige return] as separators, not only line end.
+# [carriage return] as separators, not only line end.
# Not searching for full "OMR=C3=85DE" to match also for non-UTF-8
# character sets
diff --git a/magic/Magdir/spectrum b/magic/Magdir/spectrum
index e8304d7b8cdf..f295979ac48d 100644
--- a/magic/Magdir/spectrum
+++ b/magic/Magdir/spectrum
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: spectrum,v 1.8 2017/09/11 23:51:12 christos Exp $
+# $File: spectrum,v 1.9 2021/04/26 15:56:00 christos Exp $
# spectrum: file(1) magic for Spectrum emulator files.
#
# John Elliott <jce@seasip.demon.co.uk>
@@ -51,7 +51,7 @@
# Hard disk images
0 string RS-IDE\x1a Spectrum .HDF hard disk image
->7 byte x \b, version 0x%02x
+>7 byte x \b, version %#02x
# SZX snapshots (fuse and spectaculator)
# Martin M. S. Pedersen <martin@linux.com>
diff --git a/magic/Magdir/sql b/magic/Magdir/sql
index 28d89e63bf48..5f4629f4b4bf 100644
--- a/magic/Magdir/sql
+++ b/magic/Magdir/sql
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: sql,v 1.22 2019/04/19 00:42:27 christos Exp $
+# $File: sql,v 1.23 2021/07/30 14:53:38 christos Exp $
# sql: file(1) magic for SQL files
#
# From: "Marty Leisner" <mleisner@eng.mc.xerox.com>
@@ -91,32 +91,110 @@
# Version 2 used this format:
0 string **\ This\ file\ contains\ an\ SQLite SQLite 2.x database
+# URL: https://en.wikipedia.org/wiki/SQLite
+# Reference: https://www.sqlite.org/fileformat.html
+# Update: Joerg Jenderek
# Version 3 of SQLite allows applications to embed their own "user version"
# number in the database at offset 60. Later, SQLite added an "application id"
# at offset 68 that is preferred over "user version" for indicating the
# associated application.
#
-0 string SQLite\ format\ 3 SQLite 3.x database
-!:mime application/x-sqlite3
+0 string SQLite\ format\ 3
+# skip DROID fmt-729-signature-id-1053.sqlite by checking for valid page size
+>16 ubeshort >0 SQLite 3.x
+# deprecated
+#!:mime application/x-sqlite3
+!:mime application/vnd.sqlite3
# seldom found extension sqlite3 like in SyncData.sqlite3
# db
+# db3 like: AddrBook.db3 cgipcrvp.db3
+# https://www.maplesoft.com/support/help/Maple/view.aspx?path=worksheet%2freference%2fhelpdatabase
+# help is used for newer Maple help database
+# SQLite database weewx.sdb used by weather software weewx
+# https://www.weewx.com/docs/usersguide.htm
# Avira Antivir use extension "dbe" like in avevtdb.dbe, avguard_tchk.dbe
# Unfortunately extension sqlite also used for other databases starting with string
# "TTCONTAINER" like in tracks.sqlite contentconsumer.sqlite contentproducerrepository.sqlite
# and with string "ZV-zlib" in like extra.sqlite
-!:ext sqlite/sqlite3/db/dbe
->60 belong =0x5f4d544e (Monotone source repository)
->68 belong =0x0f055112 (Fossil checkout)
->68 belong =0x0f055113 (Fossil global configuration)
->68 belong =0x0f055111 (Fossil repository)
->68 belong =0x42654462 (Bentley Systems BeSQLite Database)
->68 belong =0x42654c6e (Bentley Systems Localization File)
->68 belong =0x47504b47 (OGC GeoPackage file)
->68 default x
->>68 belong !0 \b, application id %u
->>60 belong !0 \b, user version %d
->96 belong x \b, last written using SQLite version %d
-
+>>68 belong !0x5CDE09EF database
+!:ext sqlite/sqlite3/db/db3/dbe/sdb/help
+>>68 belong =0x5CDE09EF database
+# maple is used for Maple Workbook
+!:ext maple
+>>60 belong =0x5f4d544e (Monotone source repository)
+# if no known user version then check for Application IDs with default clause
+>>60 belong !0x5f4d544e
+# The "Application ID" set by PRAGMA application_id
+>>>68 belong =0x0f055112 (Fossil checkout)
+>>>68 belong =0x0f055113 (Fossil global configuration)
+>>>68 belong =0x0f055111 (Fossil repository)
+>>>68 belong =0x42654462 (Bentley Systems BeSQLite Database)
+>>>68 belong =0x42654c6e (Bentley Systems Localization File)
+>>>68 belong =0x47504b47 (OGC GeoPackage file)
+# https://www.sqlite.org/src/artifact?ci=trunk&filename=magic.txt
+>>>68 belong =0x47503130 (OGC GeoPackage version 1.0 file)
+>>>68 belong =0x45737269 (Esri Spatially-Enabled Database)
+>>>68 belong =0x4d504258 (MBTiles tileset)
+# https://www.maplesoft.com/support/help/errors/view.aspx?path=Formats/Maple
+>>>68 belong =0x5CDE09EF (Maple Workbook)
+# unknown application ID
+>>>68 default x
+>>>>68 belong !0 \b, application id %u
+# The "user version" as read and set by the user_version pragma like:
+# 1 2 4 5 7 9 10 25 36 43 53 400 416 131073 131074 131075
+>>60 belong !0 \b, user version %d
+# SQLITE_VERSION_NUMBER like: 0 3008011 3016002 3007014 3017000 3022000 3028000 3031001
+>>96 belong x \b, last written using SQLite version %d
+# database page size in bytes; a power of two between 512 and 32768, or 1 for 65536
+# like: 512 1024 often 4096 32768
+>>16 ubeshort !4096 \b, page size %u
+# File format write version. 1 for legacy; 2 for WAL; 0 for corruptDB.sqlite
+>>18 ubyte !1 \b, writer version %u
+# File format read version. 1 for legacy; 2 for WAL; 4 for corruptDB.sqlite
+>>19 ubyte !1 \b, read version %u
+# Bytes of unused "reserved" space at the end of each page. Usually 0
+>>20 ubyte !0 \b, unused bytes %u
+# maximum embedded payload fraction. Must be 64; 1 for corruptDB.sqlite
+>>21 ubyte !64 \b, maximum payload %u
+# Minimum embedded payload fraction. Must be 32; 1 for corruptDB.sqlite
+>>22 ubyte !32 \b, minimum payload %u
+# Leaf payload fraction. Must be 32; 0 for corruptDB.sqlite
+>>23 ubyte !32 \b, leaf payload %u
+# file change counter
+>>24 ubelong x \b, file counter %u
+# Size of the database file in pages
+>>28 ubelong x \b, database pages %u
+# page number of the first freelist trunk page like: 0 2 3 4 5 9
+# 10 13 14 15 16 17 18 19 23 36 39 46 50 136 190 217 307 505 516 561 883 1659
+>>32 ubelong !0 \b, 1st free page %u
+# total number of freelist pages
+>>36 ubelong !0 \b, free pages %u
+# 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
+>>40 ubelong x \b, cookie %#x
+# the schema format number. Supported formats are 1 2 3 and often 4
+# 3328 for corruptDB.sqlite and 0 for 512 byte storage.sqlite (TorBrowser Firefox Thunderbird)
+>>44 ubelong x \b, schema %u
+# Suggested cache size like: 0 2000
+>>48 ubelong !0 \b, cache page size %u
+# The page number of the largest root b-tree page when in auto-vacuum or incremental-vacuum modes, or zero otherwise.
+>>52 ubelong !0 \b, largest root page %u
+# The database text encoding; a value of 1 means UTF-8; 2 means UTF-16le; 3 means UTF-16be
+#>>56 ubelong x \b, encoding %u
+>>56 ubelong x
+>>>56 ubelong =1 \b, UTF-8
+>>>56 ubelong =2 \b, UTF-16 little endian
+>>>56 ubelong =3 \b, UTF-16 big endian
+# 0 for corruptDB.sqlite and for storage.sqlite with database pages 1 (TorBrowser Firefox Thunderbird)
+# https://mozilla.github.io/firefox-browser-architecture/text/0010-firefox-data-stores.html
+>>>56 default x
+>>>>56 ubelong x \b, unknown %#x encoding
+# True (non-zero) for incremental-vacuum mode; false (zero) otherwiseqy
+>>64 ubelong !0 \b, vacuum mode %u
+# Reserved for expansion. Must be zero
+>>72 uquad !0 \b, reserved %#llx
+# The version-valid-for number like:
+# 1 2 3 4 C F 68h 95h 266h A99h 3DCDh B7CEh
+>>92 ubelong x \b, version-valid-for %u
# SQLite Write-Ahead Log from SQLite version >= 3.7.0
# https://www.sqlite.org/fileformat.html#walformat
diff --git a/magic/Magdir/statistics b/magic/Magdir/statistics
new file mode 100644
index 000000000000..0ceb82cd272f
--- /dev/null
+++ b/magic/Magdir/statistics
@@ -0,0 +1,45 @@
+
+#------------------------------------------------------------------------------
+# $File: statistics,v 1.2 2020/10/08 17:51:53 christos Exp $
+# statistics: file(1) magic for statistics related software
+#
+
+# From Remy Rampin
+
+# Stata is a statistical software tool that was created in 1985. While I
+# don't personally use it, data files in its native (proprietary) format
+# are common (.dta files).
+#
+# Because they are so common, especially in statistical and social
+# sciences, Stata files and SPSS files can be opened by a lot of modern
+# software, for example Python's pandas package provides built-in
+# support for them (read_stata() and read_spss()).
+#
+# I noticed that the magic database includes an entry for SPSS files but
+# not Stata files. Stata files for Stata 13 and newer (formats 117, 118,
+# and 119) always begin with the string "<stata_dta><header>" as per
+# https://www.stata.com/help.cgi?dta#definition
+#
+# The format version number always follows, for example:
+# <stata_dta><header><release>117</release>
+# <stata_dta><header><release>118</release>
+#
+# Therefore the following line would do the trick:
+# 0 string <stata_dta><header> Stata Data File
+#
+# (I'm sure the version number could be captured as well but I did not
+# manage this without a regex)
+#
+# Unfortunately the previous formats (created by Stata before 13, which
+# was released 2013) are harder to recognize. Format 115 starts with the
+# four bytes 0x73010100 or 0x73020100, format 114 with 0x72010100 or
+# 0x72020100, format 113 with 0x71010101 or 0x71020101.
+#
+# For additional reference, the Library of Congress website has an entry
+# for the Stata Data File Format 118:
+# https://www.loc.gov/preservation/digital/formats/fdd/fdd000471.shtml
+#
+# Example of those files can be found on Zenodo:
+# https://zenodo.org/search?page=1&size=20&q=&file_type=dta
+0 string \<stata_dta\>\<header\>\<release\> Stata Data File
+>&0 regex [0-9]* (Release %s)
diff --git a/magic/Magdir/terminfo b/magic/Magdir/terminfo
index fc3bf7458ecd..1b036935b6e0 100644
--- a/magic/Magdir/terminfo
+++ b/magic/Magdir/terminfo
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: terminfo,v 1.11 2019/04/19 00:42:27 christos Exp $
+# $File: terminfo,v 1.12 2021/02/23 00:51:10 christos Exp $
# terminfo: file(1) magic for terminfo
#
# URL: https://invisible-island.net/ncurses/man/term.5.html
@@ -30,7 +30,7 @@
>>12 regex \^[a-zA-Z0-9][a-zA-Z0-9.][^|]* Compiled 32-bit terminfo entry "%-s"
!:mime application/x-terminfo2
#
-# While the compiled terminfo uses little-endian format irregardless of
+# While the compiled terminfo uses little-endian format regardless of
# platform, SystemV screen dumps do not. They came later, and that detail was
# overlooked.
#
diff --git a/magic/Magdir/timezone b/magic/Magdir/timezone
index 9381a0cdd3f9..84e908166769 100644
--- a/magic/Magdir/timezone
+++ b/magic/Magdir/timezone
@@ -1,19 +1,19 @@
#------------------------------------------------------------------------------
-# $File: timezone,v 1.11 2009/09/19 16:28:12 christos Exp $
+# $File: timezone,v 1.13 2021/07/21 17:57:20 christos Exp $
# timezone: file(1) magic for timezone data
#
# from Daniel Quinlan (quinlan@yggdrasil.com)
# this should work on Linux, SunOS, and maybe others
# Added new official magic number for recent versions of the Olson code
-0 string TZif timezone data
+0 name timezone
>4 byte 0 \b, old version
>4 byte >0 \b, version %c
>20 belong 0 \b, no gmt time flags
>20 belong 1 \b, 1 gmt time flag
>20 belong >1 \b, %d gmt time flags
>24 belong 0 \b, no std time flags
->20 belong 1 \b, 1 std time flag
+>24 belong 1 \b, 1 std time flag
>24 belong >1 \b, %d std time flags
>28 belong 0 \b, no leap seconds
>28 belong 1 \b, 1 leap second
@@ -21,9 +21,19 @@
>32 belong 0 \b, no transition times
>32 belong 1 \b, 1 transition time
>32 belong >1 \b, %d transition times
->36 belong 0 \b, no abbreviation chars
->36 belong 1 \b, 1 abbreviation char
->36 belong >1 \b, %d abbreviation chars
+>36 belong 0 \b, no local time types
+>36 belong 1 \b, 1 local time type
+>36 belong >1 \b, %d local time types
+>40 belong 0 \b, no abbreviation chars
+>40 belong 1 \b, 1 abbreviation char
+>40 belong >1 \b, %d abbreviation chars
+
+0 string TZif timezone data
+>51 string TZif \b(slim)
+>>51 use timezone
+>51 default x \b(fat)
+>>0 use timezone
+
0 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
0 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
0 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
diff --git a/magic/Magdir/tplink b/magic/Magdir/tplink
index fcd105dede00..971f428103ba 100644
--- a/magic/Magdir/tplink
+++ b/magic/Magdir/tplink
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: tplink,v 1.5 2020/03/28 23:14:26 christos Exp $
+# $File: tplink,v 1.7 2021/04/26 15:56:00 christos Exp $
# tplink: File magic for openwrt firmware files
# URL: https://wiki.openwrt.org/doc/techref/header
@@ -45,44 +45,44 @@
# total length of the firmware. not always true
>0x7C ubelong x \b, %u bytes or less
# unknown 1
->0x48 ubelong !0 \b, UNKNOWN1 0x%x
+>0x48 ubelong !0 \b, UNKNOWN1 %#x
# md5sum1[16]
#>0x4c ubequad x \b, MD5 %llx
#>>0x54 ubequad x \b%llx
# unknown 2
->0x5c ubelong !0 \b, UNKNOWN2 0x%x
+>0x5c ubelong !0 \b, UNKNOWN2 %#x
# md5sum2[16]
#>0x60 ubequad !0 \b, 2nd MD5 %llx
#>>0x68 ubequad x \b%llx
# unknown 3
->0x70 ubelong !0 \b, UNKNOWN3 0x%x
+>0x70 ubelong !0 \b, UNKNOWN3 %#x
# kernel load address
-#>0x74 ubelong x \b, 0x%x load
+#>0x74 ubelong x \b, %#x load
# kernel entry point
-#>0x78 ubelong x \b, 0x%x entry
+#>0x78 ubelong x \b, %#x entry
# kernel data offset. 200h means direct after header
->0x80 ubelong x \b, at 0x%x
+>0x80 ubelong x \b, at %#x
# kernel data length and 1 space
>0x84 ubelong x %u bytes
# look for kernel type (gzip compressed vmlinux.bin by ./compress)
>(0x80.L) indirect x
# root file system data offset
# WRONG in 5.35 with above indirect expression
->0x88 ubelong x \b, at 0x%x
+>0x88 ubelong x \b, at %#x
# rootfs data length and 1 space
>0x8C ubelong x %u bytes
# in 5.32 only true for offset ~< FILE_BYTES_MAX=9 MB defined in ../../src/file.h
>(0x88.L) indirect x
# 'qshs' for wr940nv1_en_3_13_7_up(111228).bin
#>(0x88.L) string x \b, file system '%.4s'
-#>(0x88.L) ubequad x \b, file system 0x%llx
+#>(0x88.L) ubequad x \b, file system %#llx
# bootloader data offset
->0x90 ubelong !0 \b, at 0x%x
-# bootloader data length only resonable if bootloader offset not null
+>0x90 ubelong !0 \b, at %#x
+# bootloader data length only reasonable if bootloader offset not null
>>0x94 ubelong !0 %u bytes
# pad[354] should be 354 null bytes.
-#>0x9E ubequad !0 \b, padding 0x%llx
+#>0x9E ubequad !0 \b, padding %#llx
# But at 0x120 18 non null bytes in examples like
# wr940nv4_eu_3_16_9_up_boot(160620).bin
# wr940nv6_us_3_18_1_up_boot(171030).bin
-#>0x120 ubequad !0 \b, other padding 0x%llx
+#>0x120 ubequad !0 \b, other padding %#llx
diff --git a/magic/Magdir/uf2 b/magic/Magdir/uf2
new file mode 100644
index 000000000000..49a86d7640c1
--- /dev/null
+++ b/magic/Magdir/uf2
@@ -0,0 +1,72 @@
+
+#------------------------------------------------------------------------------
+# $File: uf2,v 1.3 2021/04/28 01:00:31 christos Exp $
+# uf2: file(1) magic for UF2 firmware image files
+#
+# https://github.com/microsoft/uf2
+#
+# Created by Blake Ramsdell <blaker@gmail.com>
+
+0 string UF2\n UF2 firmware image
+!:ext uf2
+# This is for checking the other magic numbers, do we want to do that?
+#>4 lelong 0x9E5D5157 howdy
+#>>508 lelong 0x0AB16F30 doody
+>8 lelong &0x0001 \b, not main flash
+>8 lelong &0x1000 \b, file container
+>8 lelong &0x2000 \b, family
+
+# To update the UF2 family data, use this fine command
+#
+# families=`curl \
+# https://raw.githubusercontent.com/microsoft/uf2/master/utils/uf2families.json \
+# | jq -r '.[] | ">>28\tlelong\t\(.id)\t\(.description)"' | sort -n -k 3` && \
+# perl -0777 -i -pe \
+# "s/(### BEGIN UF2 FAMILIES\\n).*(\\n### END UF2 FAMILIES)/\$1$families\$2/s" \
+# uf2
+
+### BEGIN UF2 FAMILIES
+>>28 lelong 0x00ff6919 ST STM32L4xx
+>>28 lelong 0x04240bdf ST STM32L5xx
+>>28 lelong 0x16573617 Microchip (Atmel) ATmega32
+>>28 lelong 0x1851780a Microchip (Atmel) SAML21
+>>28 lelong 0x1b57745f Nordic NRF52
+>>28 lelong 0x1c5f21b0 ESP32
+>>28 lelong 0x1e1f432d ST STM32L1xx
+>>28 lelong 0x202e3a91 ST STM32L0xx
+>>28 lelong 0x21460ff0 ST STM32WLxx
+>>28 lelong 0x2abc77ec NXP LPC55xx
+>>28 lelong 0x300f5633 ST STM32G0xx
+>>28 lelong 0x31d228c6 GD32F350
+>>28 lelong 0x4c71240a ST STM32G4xx
+>>28 lelong 0x4fb2d5bd NXP i.MX RT10XX
+>>28 lelong 0x53b80f00 ST STM32F7xx
+>>28 lelong 0x55114460 Microchip (Atmel) SAMD51
+>>28 lelong 0x57755a57 ST STM32F401
+>>28 lelong 0x5a18069b Cypress FX2
+>>28 lelong 0x5d1a0a2e ST STM32F2xx
+>>28 lelong 0x5ee21072 ST STM32F103
+>>28 lelong 0x647824b6 ST STM32F0xx
+>>28 lelong 0x68ed2b88 Microchip (Atmel) SAMD21
+>>28 lelong 0x6b846188 ST STM32F3xx
+>>28 lelong 0x6d0922fa ST STM32F407
+>>28 lelong 0x6db66082 ST STM32H7xx
+>>28 lelong 0x70d16653 ST STM32WBxx
+>>28 lelong 0x7eab61ed ESP8266
+>>28 lelong 0x7f83e793 NXP KL32L2x
+>>28 lelong 0x8fb060fe ST STM32F407VG
+>>28 lelong 0xada52840 Nordic NRF52840
+>>28 lelong 0xbfdd4eee ESP32-S2
+>>28 lelong 0xc47e5767 ESP32-S3
+>>28 lelong 0xd42ba06c ESP32-C3
+>>28 lelong 0xe48bff56 Raspberry Pi RP2040
+### END UF2 FAMILIES
+
+>>28 default x
+>>>28 lelong x %#08x
+>8 lelong&0x2000 0 \b, file size
+>>28 lelong x %#08x
+>8 lelong &0x4000 \b, MD5 checksum present
+>8 lelong &0x8000 \b, extension tags present
+>12 lelong x \b, address %#08x
+>24 lelong x \b, %u total blocks
diff --git a/magic/Magdir/virtual b/magic/Magdir/virtual
index e947ee33d29c..86fe9fcd36d0 100644
--- a/magic/Magdir/virtual
+++ b/magic/Magdir/virtual
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: virtual,v 1.12 2020/02/15 01:20:15 christos Exp $
+# $File: virtual,v 1.14 2021/04/26 15:56:00 christos Exp $
# From: James Nobis <quel@quelrod.net>
# Microsoft hard disk images for:
# Virtual Server
@@ -9,25 +9,25 @@
# URL: http://fileformats.archiveteam.org/wiki/VHD_(Virtual_Hard_Disk)
# Reference: https://download.microsoft.com/download/f/f/e/ffef50a5-07dd-4cf8-aaa3-442c0673a029/
# Virtual%20Hard%20Disk%20Format%20Spec_10_18_06.doc
-0 string conectix Microsoft Disk Image, Virtual Server or Virtual PC
+0 string connectix Microsoft Disk Image, Virtual Server or Virtual PC
# alternative shorter names
-#0 string conectix Microsoft Virtual Hard Disk image
-#0 string conectix Microsoft Virtual HD image
+#0 string connectix Microsoft Virtual Hard Disk image
+#0 string connectix Microsoft Virtual HD image
!:mime application/x-virtualbox-vhd
!:ext vhd
# Features is a bit field used to indicate specific feature support
-#>8 ubelong !0x00000002 \b, Features 0x%x
+#>8 ubelong !0x00000002 \b, Features %#x
# Reserved. This bit must always be set to 1.
-#>8 ubelong &0x00000002 \b, Reserved 0x%x
+#>8 ubelong &0x00000002 \b, Reserved %#x
# File Format Version for the current specification 0x00010000
-#>12 ubelong !0x00010000 \b, Version 0x%8.8x
+#>12 ubelong !0x00010000 \b, Version %#8.8x
# Data Offset only found 0x200
-#>16 ubequad !0x200 \b, Data Offset 0x%llx
-#>16 ubequad x \b, at 0x%llx
+#>16 ubequad !0x200 \b, Data Offset %#llx
+#>16 ubequad x \b, at %#llx
# Dynamic Disk Header cookie like cxsparse
#>(16.Q) string x "%-.8s"
# This field contains a Unicode string (UTF-16) of the parent hard disk filename
-#>(16.Q+64) ubequad x \b, parent name 0x%llx
+#>(16.Q+64) ubequad x \b, parent name %#llx
# Creator Application
# vpc~Microsoft Virtual PC, vs~Microsoft Virtual Server, vbox~VirtualBox, d2v~disk2vhd
>28 string x \b, Creator %-4.4s
@@ -35,7 +35,7 @@
# holds the major/minor version of the application that created the image
>32 ubeshort x %x
>34 ubeshort x \b.%x
-#>32 ubelong x \b, Version 0x%8.8x
+#>32 ubelong x \b, Version %#8.8x
# Creator Host OS: 0x5769326B~Windows (Wi2k), 0x4D616320~Macintosh (Mac)
>36 ubelong x (
>>36 ubelong 0x5769326B \bW2k
@@ -45,30 +45,30 @@
# creation Time in seconds since 1 Jan 2000 UTC~946684800 sec. since Unix Epoch
>24 bedate+946684800 x \b) %s
# Original Size
-#>40 ubequad x \b, o.-Size 0x%llx
+#>40 ubequad x \b, o.-Size %#llx
# Current Size is same as original size, but change when disk is expanded
-#>48 ubequad x \b, Size 0x%llx
+#>48 ubequad x \b, Size %#llx
>48 ubequad x \b, %llu bytes
# Disk Geometry: cylinder, heads, and sectors/track for hard disk
-#>56 ubeshort x \b, Cylinder 0x%x
+#>56 ubeshort x \b, Cylinder %#x
>56 ubeshort x \b, CHS %u
# Heads
-#>58 ubyte x \b, Heads 0x%x
+#>58 ubyte x \b, Heads %#x
>58 ubyte x \b/%u
# Sectors per track
-#>59 ubyte x \b, Sectors 0x%x
+#>59 ubyte x \b, Sectors %#x
>59 ubyte x \b/%u
# Disk Type: 3~Dynamic hard disk
->60 ubelong !0x3 \b, type 0x%x
+>60 ubelong !0x3 \b, type %#x
# Checksum
-#>64 ubelong x \b, cksum 0x%x
+#>64 ubelong x \b, cksum %#x
# universally unique identifier (UUID) to associate a parent with its differencing image
-#>68 ubequad x \b, id 0x%16.16llx
+#>68 ubequad x \b, id %#16.16llx
#>76 ubequad x \b-%16.16llx
# Saved State: 1~Saved State
->84 ubyte !0 \b, State 0x%x
+>84 ubyte !0 \b, State %#x
# Reserved 427 bytes with nils
-#>85 ubequad !0 \b, Reserved 0x%16.16llx
+#>85 ubequad !0 \b, Reserved %#16.16llx
# From: Joerg Jenderek
# URL: https://msdn.microsoft.com/en-us/library/mt740058.aspx
@@ -88,43 +88,43 @@
# Creator[256] like "QEMU v3.0.0", "Microsoft Windows 6.3.9600.18512"
>>8 lestring16 x \b, by %.256s
# The Checksum field is a CRC-32C hash over the entire 4 KB structure
-#>>0x10004 ulelong x \b, CRC 0x%x
+#>>0x10004 ulelong x \b, CRC %#x
# SequenceNumber
->>0x10008 ulequad x \b, sequence 0x%llx
+>>0x10008 ulequad x \b, sequence %#llx
# FileWriteGuid
-#>>0x10010 ubequad x \b, file id 0x%llx
+#>>0x10010 ubequad x \b, file id %#llx
#>>>0x10018 ubequad x \b-%llx
# DataWriteGuid
-#>>0x10020 ubequad x \b, data id 0x%llx
+#>>0x10020 ubequad x \b, data id %#llx
#>>>0x10028 ubequad x \b-%llx
# LogGuid. If this field is zero, then the log is empty or has no valid entries
->>0x10030 ubequad >0 \b, log id 0x%llx
+>>0x10030 ubequad >0 \b, log id %#llx
>>>0x10038 ubequad x \b-%llx
# LogVersion. If not 0 there is a log to replay
->>0x10040 uleshort >0 \b, LogVersion 0x%x
+>>0x10040 uleshort >0 \b, LogVersion %#x
# Version. This field must be set to 1
->>0x10042 uleshort !1 \b, Version 0x%x
+>>0x10042 uleshort !1 \b, Version %#x
# LogLength must be multiples of 1 MB
>>0x10044 ulelong/1048576 >1 \b, LogLength %u MB
# LogOffset (normally 0x100000 when log direct after header); multiples of 1 MB
->>0x10048 ulequad !0x100000 \b, LogOffset 0x%llx
+>>0x10048 ulequad !0x100000 \b, LogOffset %#llx
# Log Entry Signature must be 0x65676F6C~loge
>>(0x10048.q) ulelong !0x65676F6C \b, NO Log Signature
>>(0x10048.q) ulelong =0x65676F6C \b; LOG
# Log Entry Checksum
-#>>>(0x10048.q+4) ulelong x \b, Log CRC 0x%x
+#>>>(0x10048.q+4) ulelong x \b, Log CRC %#x
# Log Entry Length must be a multiple of 4 KB
>>>(0x10048.q+8) ulelong/1024 >4 \b, EntryLength %u KB
# Log Entry Tail must be a multiple of 4 KB
-#>>>(0x10048.q+12) ulelong x \b, Tail 0x%x
+#>>>(0x10048.q+12) ulelong x \b, Tail %#x
# Log Entry SequenceNumber
-#>>>(0x10048.q+16) ulequad x \b, # 0x%llx
+#>>>(0x10048.q+16) ulequad x \b, # %#llx
# Log Entry DescriptorCount may be zero. only 4 bytes in other docs instead 8
-#>>>(0x10048.q+24) ulelong x \b, DescriptorCount 0x%llx
+#>>>(0x10048.q+24) ulelong x \b, DescriptorCount %#llx
# Log Entry Reserved must be set to 0
->>>(0x10048.q+28) ulelong !0 \b, Reserved 0x%x
+>>>(0x10048.q+28) ulelong !0 \b, Reserved %#x
# Log Entry LogGuid
-#>>>(0x10048.q+32) ubequad x \b, Log id 0x%llx
+#>>>(0x10048.q+32) ubequad x \b, Log id %#llx
#>>>(0x10048.q+40) ubequad x \b-%llx
# Log Entry FlushedFileOffset should VHDX size when entry is written.
#>>>(0x10048.q+48) ulequad x \b, FlushedFileOffset %llu
@@ -133,28 +133,28 @@
# filling
#>>>(0x10048.q+64) ulequad >0 \b, filling %llx
# Reserved[4016]
-#>>0x10050 ulequad >0 \b, Reserved 0x%llx
+#>>0x10050 ulequad >0 \b, Reserved %#llx
# VHDX_REGION_TABLE_HEADER Signature 0x69676572~regi at offset 192 KB and 256 KB
>0x30000 ulelong !0x69676572 \b, 1st region INVALID
>0x30000 ulelong =0x69676572 \b; region
# region Checksum. CRC-32C hash over the entire 64-KB table
-#>>0x30004 ulelong x \b, CRC 0x%x
+#>>0x30004 ulelong x \b, CRC %#x
# The EntryCount specifies number of valid entries; Found 2; This must be =< 2047.
>>0x30008 ulelong x \b, %u entries
# reserved must be zero
-#>>0x3000C ulelong !0 \b, RESERVED 0x%x
+#>>0x3000C ulelong !0 \b, RESERVED %#x
# Region Table Entry starts with identifier for the object. often BAT id
>>0x30010 use vhdx-id
# FileOffset
->>0x30020 ulequad x \b, at 0x%llx
+>>0x30020 ulequad x \b, at %#llx
# Length. Specifies the length of the object within the file
-#>>0x30028 ulelong x \b, Length 0x%x
+#>>0x30028 ulelong x \b, Length %#x
# 1 means region entry is required. if region not recognized, then REFUSE to load VHDX
>>0x3002C ulelong x \b, Required %u
# 2nd region entry often metadata id
>>0x30030 use vhdx-id
# 2nd entry FileOffset
->>0x30040 ulequad x \b, at 0x%llx
+>>0x30040 ulequad x \b, at %#llx
# 1 means region entry is required. if region not recognized, then REFUSE to load VHDX
>>0x3004C ulelong x \b, Required %u
# 2nd region
@@ -189,7 +189,7 @@
>>0 use vhdx-id-hex
# in vhdx images show id as hexadecimal
0 name vhdx-id-hex
->0 ubequad x \b, ID 0x%16.16llx
+>0 ubequad x \b, ID %#16.16llx
>8 ubequad x \b-%16.16llx
#
# libvirt
diff --git a/magic/Magdir/vorbis b/magic/Magdir/vorbis
index b4a8f33abdb4..49e75cb2d2e5 100644
--- a/magic/Magdir/vorbis
+++ b/magic/Magdir/vorbis
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: vorbis,v 1.24 2018/03/14 04:38:44 christos Exp $
+# $File: vorbis,v 1.26 2020/08/22 18:30:55 christos Exp $
# vorbis: file(1) magic for Ogg/Vorbis files
#
# From Felix von Leitner <leitner@fefe.de>
@@ -132,11 +132,11 @@
>>>>>>(84.b+117) string 20140122 (1.3.4)
>>>>>>(84.b+117) string 20150105 (1.3.5)
-# non-Vorbis content: Opus https://tools.ietf.org/html/draft-ietf-codec-oggopus-06#section-5
+# non-Vorbis content: Opus https://tools.ietf.org/html/rfc7845#section-5
>>28 string OpusHead \b, Opus audio,
!:mime audio/ogg
>>>36 ubyte >0x0F UNKNOWN VERSION %u,
->>>36 ubyte &0x0F version 0.%d
+>>>36 ubyte&0x0F !0 version 0.%u,
>>>>46 ubyte >1
>>>>>46 ubyte !255 unknown channel mapping family %u,
>>>>>37 ubyte x %u channels
@@ -152,4 +152,4 @@
>>>>>37 ubyte 6 5.1 surround
>>>>>37 ubyte 7 6.1 surround
>>>>>37 ubyte 8 7.1 surround
->>>>40 lelong !0 \b, %u Hz
+>>>>40 lelong !0 \b, %u Hz (Input Sample Rate) \ No newline at end of file
diff --git a/magic/Magdir/windows b/magic/Magdir/windows
index 8a7923fc1c73..4ec0af3e32d6 100644
--- a/magic/Magdir/windows
+++ b/magic/Magdir/windows
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: windows,v 1.31 2020/03/15 16:44:37 christos Exp $
+# $File: windows,v 1.37 2021/04/26 15:56:00 christos Exp $
# windows: file(1) magic for Microsoft Windows
#
# This file is mainly reserved for files where programs
@@ -67,53 +67,53 @@
# \Boot\boot.sdi
!:ext sdi
# MDBtype: 0~Unspecified 1~RAM 2~ROM
->>8 ulequad !0 \b, MDBtype 0x%llx
+>>8 ulequad !0 \b, MDBtype %#llx
# BootCodeOffset
->>16 ulequad !0 \b, BootCodeOffset 0x%llx
+>>16 ulequad !0 \b, BootCodeOffset %#llx
# BootCodeSize
->>24 ulequad !0 \b, BootCodeSize 0x%llx
+>>24 ulequad !0 \b, BootCodeSize %#llx
# VendorID
->>32 ulequad !0 \b, VendorID 0x%llx
+>>32 ulequad !0 \b, VendorID %#llx
# DeviceID
->>40 ulequad !0 \b, DeviceID 0x%llx
+>>40 ulequad !0 \b, DeviceID %#llx
# DeviceModel
->>48 ulequad !0 \b, DeviceModel 0x%llx
+>>48 ulequad !0 \b, DeviceModel %#llx
>>>56 ulequad !0 \b%llx
# DeviceRole
->>64 ulequad !0 \b, DeviceRole 0x%llx
+>>64 ulequad !0 \b, DeviceRole %#llx
# Reserved1; reserved fields and gaps between BLOBs are padded with \0
-#>>72 ulequad !0 \b, Reserved1 0x%llx
+#>>72 ulequad !0 \b, Reserved1 %#llx
# RuntimeGUID
->>80 ulequad !0 \b, RuntimeGUID 0x%llx
+>>80 ulequad !0 \b, RuntimeGUID %#llx
>>>88 ulequad !0 \b%llx
# RuntimeOEMrev
->>96 ulequad !0 \b, RuntimeOEMrev 0x%llx
+>>96 ulequad !0 \b, RuntimeOEMrev %#llx
# Reserved2
-#>>104 ulequad !0 \b, Reserved2 0x%llx
+#>>104 ulequad !0 \b, Reserved2 %#llx
# BLOB alignment value in pages, as specified in sdimgr /pack: 1~4K 2~8k
>>112 ulequad !0 \b, PageAlignment %llu
# Reserved3[48]
-#>>120 ulequad !0 \b, Reserved3 0x%llx
+#>>120 ulequad !0 \b, Reserved3 %#llx
# SDI checksum 39h
->>0x1f8 ulequad x \b, checksum 0x%llx
+>>0x1f8 ulequad x \b, checksum %#llx
# BLOBtype[8] \0-padded: PART, WIM , BOOT, LOAD, DISK
>>0x400 string >\0 \b, type %-3.8s
# 0~non-filesystem 7~NTFS 6~BIGFAT
->>>0x420 ulequad !0 (0x%llx)
+>>>0x420 ulequad !0 (%#llx)
# ATTRibutes
->>>0x408 ulequad !0 0x%llx attributes
+>>>0x408 ulequad !0 %#llx attributes
# Offset
->>>0x410 ulequad x at 0x%llx
+>>>0x410 ulequad x at %#llx
# print 1 space after size and then handles NTFS boot sector by ./filesystems
>>>0x418 ulequad >0 %llu bytes
>>>>(0x410.l) indirect x
# 2nd BLOB: WIM
>>0x440 string >\0 \b, type %-3.8s
->>>0x428 ulequad !0 (0x%llx)
+>>>0x428 ulequad !0 (%#llx)
# ATTRibutes
->>>0x448 ulequad !0 0x%llx attributes
+>>>0x448 ulequad !0 %#llx attributes
# Offset
->>>0x450 ulequad x at 0x%llx
+>>>0x450 ulequad x at %#llx
>>>0x458 ulequad >0 %llu bytes
>>>>(0x450.l) indirect x
# 3rd BLOB
@@ -139,13 +139,13 @@
# apparently a version number: 2 for older like Vista, 3, 4 Windows 10
>0 ulelong >2 \b, version %u
# apparently the size of the header: often 10h in older Windows, 14h, 18h
->4 ulelong !0x10 \b, header size 0x%x
+>4 ulelong !0x10 \b, header size %#x
#>4 ulelong !0x10 \b, header size %u
# apparently the size of the file: always 0x00010000~64KiB
# the file is acceptable to BOOTMGR only if it is exactly 64 KiB
->8 ulelong !0x00010000 \b, file size 0x%x
+>8 ulelong !0x00010000 \b, file size %#x
# size of valid data, in bytes: C8h 50h 172h 5D5Ch
->0xc ulelong x \b, 0x%x valid bytes
+>0xc ulelong x \b, %#x valid bytes
# skip header and jump to first bootstat entry and display information
>(0x4.l-1) ubyte x
>>&0 use bootstat-entry
@@ -164,24 +164,24 @@
#>0x00 ubequad x \b, ENTRY %16.16llx
# size of entry, in bytes: 40h(init) 78h(launced) 9Ch
#>0x18 ulelong x \b; entry size %u
->0x18 ulelong x \b; entry size 0x%x
+>0x18 ulelong x \b; entry size %#x
# time stamp, in seconds
->0x00 ulelong x \b, 0x%x seconds
+>0x00 ulelong x \b, %#x seconds
# always zero, significance unknown
>0x04 ulelong !0 \b, not null %u
# GUID of event source; but empty if event source is BOOTMGR
->0x08 ubequad !0 \b, GUID 0x%16.16llx
+>0x08 ubequad !0 \b, GUID %#16.16llx
>>0x10 ubequad x \b%16.16llx
# severity code: 1~informational 3~errors
->0x1C ulelong !1 \b, severity 0x%x
+>0x1C ulelong !1 \b, severity %#x
# apparently a version number: 2
>0x20 ulelong !2 \b, version %u
# event identifier 1~log file initialised 11h~boot application launched
-#>0x24 ulelong x \b, event 0x%x
+#>0x24 ulelong x \b, event %#x
>0x24 ulelong !1
->>0x24 ulelong !0x11 \b, event 0x%x
+>>0x24 ulelong !0x11 \b, event %#x
# entry data; size depends on event identifier
-#>0x28 ubequad x \b, data 0x%16.16llx
+#>0x28 ubequad x \b, data %#16.16llx
>0x24 ulelong =0x1 \b, Init
# always 0, significance unknown
>>0x34 uleshort !0 \b, not null %u
@@ -248,7 +248,7 @@
>>>2 leshort 0x27 x.y
>>>2 leshort 0x33 95
>>>2 default x y.z
->>>>2 leshort x 0x%x
+>>>>2 leshort x %#x
# to complete message string like "MS Windows 3.x help file"
>>>2 leshort x help
# GenDate often older than file creation date
@@ -307,39 +307,39 @@
!:mime application/x-winhelp
!:ext bmk
## FirstFreeBlock normally FFFFFFFFh 10h for *ANN
-##>>8 lelong x \b, FirstFreeBlock 0x%8.8x
+##>>8 lelong x \b, FirstFreeBlock %#8.8x
# EntireFileSize
>>12 lelong x \b, %d bytes
## ReservedSpace normally 042Fh AFh for *.ANN
-#>>(4.l) lelong x \b, ReservedSpace 0x%8.8x
+#>>(4.l) lelong x \b, ReservedSpace %#8.8x
## UsedSpace normally 0426h A6h for *.ANN
-#>>(4.l+4) lelong x \b, UsedSpace 0x%8.8x
+#>>(4.l+4) lelong x \b, UsedSpace %#8.8x
## FileFlags normally 04...
-#>>(4.l+5) lelong x \b, FileFlags 0x%8.8x
+#>>(4.l+5) lelong x \b, FileFlags %#8.8x
## file header magic 0x293B
-#>>(4.l+9) uleshort x \b, file header magic 0x%4.4x
+#>>(4.l+9) uleshort x \b, file header magic %#4.4x
## file header Flags 0x0402
-#>>(4.l+11) uleshort x \b, file header Flags 0x%4.4x
+#>>(4.l+11) uleshort x \b, file header Flags %#4.4x
## file header PageSize 0400h 80h for *.ANN
-#>>(4.l+13) uleshort x \b, PageSize 0x%4.4x
+#>>(4.l+13) uleshort x \b, PageSize %#4.4x
## Structure[16] z4
#>>(4.l+15) string >\0 \b, Structure_"%-.16s"
## MustBeZero 0
-#>>(4.l+31) uleshort x \b, MustBeZero 0x%4.4x
+#>>(4.l+31) uleshort x \b, MustBeZero %#4.4x
## PageSplits
-#>>(4.l+33) uleshort x \b, PageSplits 0x%4.4x
+#>>(4.l+33) uleshort x \b, PageSplits %#4.4x
## RootPage
-#>>(4.l+35) uleshort x \b, RootPage 0x%4.4x
+#>>(4.l+35) uleshort x \b, RootPage %#4.4x
## MustBeNegOne 0xffff
-#>>(4.l+37) uleshort x \b, MustBeNegOne 0x%4.4x
+#>>(4.l+37) uleshort x \b, MustBeNegOne %#4.4x
## TotalPages 1
-#>>(4.l+39) uleshort x \b, TotalPages 0x%4.4x
+#>>(4.l+39) uleshort x \b, TotalPages %#4.4x
## NLevels 0x0001
-#>>(4.l+41) uleshort x \b, NLevels 0x%4.4x
+#>>(4.l+41) uleshort x \b, NLevels %#4.4x
## TotalBtreeEntries
-#>>(4.l+43) ulelong x \b, TotalBtreeEntries 0x%8.8x
+#>>(4.l+43) ulelong x \b, TotalBtreeEntries %#8.8x
## pages of the B+ tree
-#>>(4.l+47) ubequad x \b, PageStart 0x%16.16llx
+#>>(4.l+47) ubequad x \b, PageStart %#16.16llx
# start with colon or semicolon for comment line like Back2Life.cnt
0 regex \^(:|;)
@@ -576,6 +576,13 @@
>>&0 regex/c \^(options)]\r\n Microsoft HTML Help Project
!:mime text/plain
!:ext hhp
+# From: Joerg Jenderek
+# URL: https://documentation.basis.com/BASISHelp/WebHelp/b3odbc/obdcdriv_character_translation.htm
+# Reference: https://www.garykessler.net/library/file_sigs.html
+# Note: stored in directory %WINDIR%\SysWOW64 or %WINDIR%\system
+>>&0 regex/c \^(Windows\ Latin) Windows codepage translator
+!:mime text/plain
+!:ext cpx
# unknown keyword after opening bracket
>>&0 default x
#>>>&0 string/c x UNKNOWN [%s
@@ -590,7 +597,7 @@
>>>>>&0 ubyte x
# characters, digits, underscore and white space followed by right bracket
# terminated by CR implies section line to skip BOOTLOG.TXT DETLOG.TXT
->>>>>>&-1 regex \^([A-Za-z0-9_\(\)\ ]+)\]\r Generic INItialization configuration [%-.40s
+>>>>>>&-1 regex/T \^([A-Za-z0-9_\(\)\ ]+)\]\r Generic INItialization configuration [%-.40s
# NETDEF.INF multiarc.ini
#!:mime application/x-setupscript
!:mime application/x-wine-extension-ini
@@ -660,7 +667,7 @@
# UNKNOWN1 0x01000000
# UNKNOWN2 0x02000000
>4 ulelong&0x03000180 >0 \b, flags
->>4 ulelong x 0x%x
+>>4 ulelong x %#x
>4 ulelong&0x00000001 0x00000001 \b, unicoded
>4 ulelong&0x00000002 0x00000002 \b, has strings
>4 ulelong&0x00000004 0x00000004 \b, src URL
@@ -671,16 +678,16 @@
# >4 ulelong&0x00000100 0x00000100 \b, UNKNOWN
# >4 ulelong&0x01000000 0x01000000 \b, UNKNOWN1
# >4 ulelong&0x02000000 0x02000000 \b, UNKNOWN2
-#>8 ulelong x \b, InfSubstValueListOffset 0x%x
+#>8 ulelong x \b, InfSubstValueListOffset %#x
# many 0, 1 lmouusb.PNF, 2 linkfx10.PNF , f webfdr16.PNF
# , 6 bth.PNF, 9 usbport.PNF, d netnwifi.PNF, 10h nettcpip.PNF
-#>12 uleshort x \b, InfSubstValueCount 0x%x
+#>12 uleshort x \b, InfSubstValueCount %#x
# only < 9 found: 8 hcw85b64.PNF
-#>14 uleshort x \b, InfVersionDatumCount 0x%x
+#>14 uleshort x \b, InfVersionDatumCount %#x
# only found values lower 0x0000ffff ??
-#>16 ulelong x \b, InfVersionDataSize 0x%x
+#>16 ulelong x \b, InfVersionDataSize %#x
# only found positive values lower 0x00ffFFff for InfVersionDataOffset
->20 ulelong x \b, at 0x%x
+>20 ulelong x \b, at %#x
>4 ulelong&0x00000001 =0x00000001
# case independent: CatalogFile Class DriverVer layoutfile LayoutFile SetupClass signature Signature
>>(20.l) lestring16 x "%s"
@@ -693,18 +700,18 @@
>0 uleshort <0x0102
# only found values lower 0x00ffFFff
# often 70 but also 78h for corelist.PNF
-# >>32 ulelong x \b, StringTableBlockOffset 0x%x
-# >>36 ulelong x \b, StringTableBlockSize 0x%x
-# >>40 ulelong x \b, InfSectionCount 0x%x
-# >>44 ulelong x \b, InfSectionBlockOffset 0x%x
-# >>48 ulelong x \b, InfSectionBlockSize 0x%x
-# >>52 ulelong x \b, InfLineBlockOffset 0x%x
-# >>56 ulelong x \b, InfLineBlockSize 0x%x
-# >>60 ulelong x \b, InfValueBlockOffset 0x%x
-# >>64 ulelong x \b, InfValueBlockSize 0x%x
+# >>32 ulelong x \b, StringTableBlockOffset %#x
+# >>36 ulelong x \b, StringTableBlockSize %#x
+# >>40 ulelong x \b, InfSectionCount %#x
+# >>44 ulelong x \b, InfSectionBlockOffset %#x
+# >>48 ulelong x \b, InfSectionBlockSize %#x
+# >>52 ulelong x \b, InfLineBlockOffset %#x
+# >>56 ulelong x \b, InfLineBlockSize %#x
+# >>60 ulelong x \b, InfValueBlockOffset %#x
+# >>64 ulelong x \b, InfValueBlockSize %#x
# WinDirPathOffset
# like 58h, which means direct after PNF header
-#>>68 ulelong x \b, at 0x%x
+#>>68 ulelong x \b, at %#x
>>68 ulelong x
>>>4 ulelong&0x00000001 =0x00000001
#>>>>(68.l) ubequad =0x43003a005c005700
@@ -725,18 +732,18 @@
# seldom C:\ instead empty
>>>>>(72.l) string x OsLoaderPath "%s"
# 1fdh
-#>>>76 uleshort x \b, StringTableHashBucketCount 0x%x
+#>>>76 uleshort x \b, StringTableHashBucketCount %#x
# only 407h found
>>>78 uleshort !0x409 \b, LanguageID %x
#>>>78 uleshort =0x409 \b, LanguageID %x
# InfSourcePathOffset often 0
->>>80 ulelong >0 \b, at 0x%x
+>>>80 ulelong >0 \b, at %#x
>>>>4 ulelong&0x00000001 =0x00000001
>>>>>(80.l) lestring16 x SourcePath "%s"
>>>>4 ulelong&0x00000001 !0x00000001
>>>>>(80.l) string >\0 SourcePath "%s"
# OriginalInfNameOffset often 0
->>>84 ulelong >0 \b, at 0x%x
+>>>84 ulelong >0 \b, at %#x
>>>>4 ulelong&0x00000001 =0x00000001
>>>>>(84.l) lestring16 x InfName "%s"
>>>>4 ulelong&0x00000001 !0x00000001
@@ -744,7 +751,7 @@
# for newer Windows like Vista, 7 , 8.1 , 10
>0 uleshort >0x0101
->>80 ulelong x \b, at 0x%x WinDirPath
+>>80 ulelong x \b, at %#x WinDirPath
>>>4 ulelong&0x00000001 0x00000001
# normally unicoded C:\Windows
#>>>>(80.l) ubequad =0x43003a005c005700
@@ -754,7 +761,7 @@
# language id: 0 407h~german 409h~English_US
>>90 uleshort !0x409 \b, LanguageID %x
#>>90 uleshort =0x409 \b, LanguageID %x
->>92 ulelong >0 \b, at 0x%x
+>>92 ulelong >0 \b, at %#x
>>>4 ulelong&0x00000001 0x00000001
# language string like: de-DE en-US
>>>>(92.l) lestring16 x language %s
@@ -809,7 +816,7 @@
# Media Sequence Number
>>>>>60 uleshort >1 \b, sequence %u
# Password Encryption Algorithm (3)
->>>>>62 uleshort >0 \b, 0x%x encrypted
+>>>>>62 uleshort >0 \b, %#x encrypted
# Soft Filemark Block Size * 512 (2)
#>>>>>64 uleshort =2 \b, soft size %u*512
>>>>>64 uleshort !2 \b, soft size %u*512
@@ -838,7 +845,7 @@
# size of password name (0,1Ch)
#>>>>>76 uleshort >0 \b, password size %4.4x
# Software Vendor ID (CBEh)
->>>>>86 uleshort x \b, software (0x%x)
+>>>>>86 uleshort x \b, software (%#x)
# size of Software Name (6Eh)
>>>>>80 uleshort >0
# offset of Software Name (1C8h,1CAh,1D0h)
@@ -890,9 +897,9 @@
>0x40 ubyte 0x7b
>>0x40 string x %-.38s
# do not know how this log version correlates to program version
->0x140 ulelong x \b, version 0x%x
+>0x140 ulelong x \b, version %#x
# NumRecs
-#>0x144 ulelong x \b, 0x%4.4x records
+#>0x144 ulelong x \b, %#4.4x records
# EndOffset means files size
>0x148 ulelong x \b, %u bytes
# Flags 5 25h 35h
@@ -918,9 +925,39 @@
# directory like C:\Program Files\GIMP 2
>>>>&0 lestring16 x \b, %-.42s
+# URL: https://jrsoftware.org/ishelp/index.php?topic=setup_signeduninstaller
+# Reference:https://github.com/jrsoftware/issrc/blob/main/Projects/Struct.pas
+# From: Joerg Jenderek
+0 string Inno\ Setup\ Messages\ (
+# null padded til 0x40 boundary
+>0x38 quad 0 InnoSetup messages
+!:mime application/x-innosetup-msg
+# unins000.msg, unins001.msg, ...
+!:ext msg
+# version like 5.1.1 5.1.11 5.5.0 5.5.3 6.0.0
+>>0x15 string x \b, version %.5s
+# look for 6th char of version string or terminating right parentheses
+>>>0x1a ubyte !0x29 \b%c
+# NumMessages
+>>0x40 ulelong x \b, %u messages
+# TotalSize: Cardinal;
+#>>0x44 ulelong x \b, TotalSize %u
+# NotTotalSize: Cardinal;
+#>>0x48 ulelong x \b, NotTotalSize %u
+# CRCMessages: Longint;
+#>>0x4C ulelong x \b, CRC %#x
+>>0x40 ulelong x
+# (u) after version means unicoded messages
+>>>0x1c search/2 (u) (UTF-16),
+>>>>0x50 lestring16 x %s
+# ASCII coded message
+>>>0x1c default x (ASCII),
+>>>>0x50 string x %s
+
# Windows Imaging (WIM) Image
-# Update: Joerg Jenderek at Mar 2019
+# Update: Joerg Jenderek at Mar 2019, 2021
# URL: https://en.wikipedia.org/wiki/Windows_Imaging_Format
+# http://fileformats.archiveteam.org/wiki/Windows_Imaging_Format
# Reference: https://download.microsoft.com/download/f/e/f/
# fefdc36e-392d-4678-9e4e-771ffa2692ab/Windows%20Imaging%20File%20Format.rtf
# Note: verified by like `7z t boot.wim` `wiminfo install.esd --header`
@@ -936,21 +973,27 @@
# TO avoid in file version 5.36 error like
# Magdir/windows, 760: Warning: Current entry does not yet have a description
# file: could not find any valid magic files! (No error)
-# splitted WIM
+# split WIM
>16 ulelong &0x00000008 (SWM
!:ext swm
# usPartNumber; 1, unless the file was split into multiple parts
>>40 uleshort x \b %u
# usTotalParts; The total number of WIM file parts in a spanned set
>>42 uleshort x \b of %u) image
-# non splitted WIM
+# non split WIM
>16 ulelong ^0x00000008
# https://wimlib.net/man1/wimmount.html
# solid WIMs; version 3584; usually contain LZMS-compressed and the .esd extension
>>12 ulelong 3584 (ESD) image
!:ext esd
->>12 ulelong !3584 (WIM) image
-!:ext wim
+>>12 ulelong !3584 (
+# look for archive member RunTime.xml like in Microsoft.Windows.Cosa.Desktop.Client.ppkg
+>>>156 search/68233/s RunTime.xml \bWindows provisioning package)
+!:ext ppkg
+# if is is not a Windows provisioning package, then it is a WIM
+>>>156 default x \bWIM) image
+# second disk image part created by Microsoft's RecoveryDrive.exe has name Reconstruct.WIM2
+!:ext wim/wim2
>0 string/b WLPWM\000\000\000 \b, wimlib pipable format
# cbSize size of the WIM header in bytes like 208
#>8 ulelong x \b, headersize %u
@@ -963,7 +1006,7 @@
# 1-based index of the bootable image of the WIM, or 0 if no image is bootable
>0x78 ulelong >0 \b, bootable no. %u
# dwFlags
-#>16 ulelong x \b, flags 0x%8.8x
+#>16 ulelong x \b, flags %#8.8x
#define FLAG_HEADER_COMPRESSION 0x00000002
#define FLAG_HEADER_READONLY 0x00000004
#define FLAG_HEADER_SPANNED 0x00000008
@@ -990,21 +1033,21 @@
# dwCompressionSize; Uncompressed chunk size for resources or 0 if uncompressed
#>20 ulelong >0 \b, chunk size %u bytes
# gWIMGuid
-#>24 ubequad x \b, GUID 0x%16.16llx
+#>24 ubequad x \b, GUID %#16.16llx
#>>32 ubequad x \b%16.16llx
# rhOffsetTable; the location of the resource lookup table
# wim_reshdr_disk[24]= u8 size_in_wim[7] + u8 flags + le64 offset_in_wim + le64 uncompressed_size
-#>48 ubequad x \b, rhOffsetTable 0x%16.16llx
+#>48 ubequad x \b, rhOffsetTable %#16.16llx
# rhXmlData; the location of the XML data
-#>0x50 ulelong x \b, at 0x%8.8x
+#>0x50 ulelong x \b, at %#8.8x
# NOT WORKING \xff\xfe<\0W\0I\0M\0
#>(0x50.l) ubequad x \b, xml=%16.16llx
# rhBootMetadata; the location of the metadata resource
-#>0x60 ubequad x \b, rhBootMetadata 0x%16.16llx
+#>0x60 ubequad x \b, rhBootMetadata %#16.16llx
# rhIntegrity; the location of integrity table used to verify files
-#>0x7c ubequad x \b, rhIntegrity 0x%16.16llx
+#>0x7c ubequad x \b, rhIntegrity %#16.16llx
# Unused[60]
-#>148 ubequad !0 \b,unused 0x%16.16llx
+#>148 ubequad !0 \b,unused %#16.16llx
#
# From: Joerg Jenderek
@@ -1018,7 +1061,7 @@
!:ext mig
>0x18 string =MRTS without password
# data offset with 1 space at end
->>0x1c ulelong+0x38 x \b, at 0x%x
+>>0x1c ulelong+0x38 x \b, at %#x
# look for zlib compressed data by ./compress
>>(0x1c.l+0x38) ubyte x
>>>&-1 indirect x
diff --git a/magic/Magdir/wordprocessors b/magic/Magdir/wordprocessors
index 7f3c4e8a429e..297addfb114c 100644
--- a/magic/Magdir/wordprocessors
+++ b/magic/Magdir/wordprocessors
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: wordprocessors,v 1.24 2020/05/22 19:28:47 christos Exp $
+# $File: wordprocessors,v 1.26 2021/08/21 12:45:34 christos Exp $
# wordprocessors: file(1) magic fo word processors.
#
####### PWP file format used on Smith Corona Personal Word Processors:
@@ -275,10 +275,13 @@
# From: Joerg Jenderek
# URL: https://en.wikipedia.org/wiki/StarOffice
+# Reference: http://mark0.net/download/triddefs_xml.7z
+# /defs/t/thm-staroffice.trid.xml
# Note: used in Star-, Open- and Libre-Office
# named as soffice.StarConfigFile.6 or OpenOffice.org configuration by others
0 ubeshort 0x0400
-#>(2.s+8) ubequad x \b, gap 0x%16.16llx
+# non nil gap
+#>(2.s+8) ubequad x \b, gap %#16.16llx
# test for null value in gap after theme name maybe unreliable
#>(2.s+9) ubyte 0 \b, 0-byte
# look for keyword GALRESRV near the end
@@ -288,19 +291,27 @@
#>0 search/19299 GALRESRV \b, GALRESRV FOUND
#>2 uleshort x \b, name length %u
# skip file2147.chk by check for positive name length like for sg16.thm "3D"
->2 uleshort >0 StarOffice Gallery theme
+>2 uleshort >0
+# skip dBase printer form T6.PRF with misidentified gallery
+# name :\DBASE\IV\T6.txts by check for 1st object name or RESRV keyword
+# https://www.clicketyclick.dk/databases/xbase/xbase/dbase_ex.zip
+# template/t6/with_data/T6.PRF
+# by first char of object name or RESRV part of keyword GALRESRV
+>>(2.s+13) ubyte >0x1F StarOffice Gallery theme
!:mime application/x-stargallery-thm
+# thm is also used for JPEG thumbnail images
!:ext thm
-# gallery name
->>2 pstring/h x %s
+# gallery name often 1 word like: 3D sounds Diagrams Flussdiagramme Fotos
+# or like private://gallery/hidden/imgppt "Cisco - WAN - LAN"
+>>>2 pstring/h x %s
# number of objects
->>(2.s+4) ulelong x \b, %u object
+>>>(2.s+4) ulelong x \b, %u object
# plural s
->>(2.s+4) ulelong !1 \bs
+>>>(2.s+4) ulelong !1 \bs
# if available then display first object name
->>(2.s+4) ulelong >0
+>>>(2.s+4) ulelong >0
# partial file name, URL or internal name like "dd2*" of 1st object or RESRV
->>>(2.s+11) pstring/h x \b, 1st %s
+>>>>(2.s+11) pstring/h x \b, 1st %s
# From: Joerg Jenderek
# URL: http://fileformats.archiveteam.org/wiki/StarOffice_Gallery
@@ -309,7 +320,7 @@
# $HOME/.config/libreoffice/4/user/gallery
0 string SGA3 StarOffice Gallery thumbnails
# Unknown like 0x04000?0001000142
-#>4 ubequad x \b, UNKNOWN 0x%16.16llx
+#>4 ubequad x \b, UNKNOWN %#16.16llx
#!:mime application/x-sdg
!:mime application/x-stargallery-sdg
!:ext sdg
diff --git a/magic/Magdir/wsdl b/magic/Magdir/wsdl
index 35edafc2f535..1c9e60aaa29d 100644
--- a/magic/Magdir/wsdl
+++ b/magic/Magdir/wsdl
@@ -1,13 +1,13 @@
#------------------------------------------------------------------------------
-# $File: wsdl,v 1.5 2019/04/19 00:42:27 christos Exp $
+# $File: wsdl,v 1.6 2021/04/26 15:56:00 christos Exp $
# wsdl: PHP WSDL Cache, https://www.php.net/manual/en/book.soap.php
# Cache format extracted from source:
# https://svn.php.net/viewvc/php/php-src/trunk/ext/soap/php_sdl.c?revision=HEAD&view=markup
# Requires file >= 5.05
# By Elan Ruusamae <glen@delfi.ee>, Patryk Zawadzki <patrys@pld-linux.org>, 2010-2011
0 string wsdl PHP WSDL cache,
->4 byte x version 0x%02x
+>4 byte x version %#02x
>6 ledate x \b, created %s
# uri
diff --git a/magic/Magdir/xenix b/magic/Magdir/xenix
index fb83faa876ed..01d894ca9d98 100644
--- a/magic/Magdir/xenix
+++ b/magic/Magdir/xenix
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: xenix,v 1.11 2017/03/17 21:35:28 christos Exp $
+# $File: xenix,v 1.14 2021/04/26 15:56:00 christos Exp $
# xenix: file(1) magic for Microsoft Xenix
#
# "Middle model" stuff, and "Xenix 8086 relocatable or 80286 small
@@ -13,25 +13,35 @@
#
0 string core core file (Xenix)
# URL: http://www.polarhome.com/service/man/?qf=86rel&tf=2&of=Xenix
+# http://fileformats.archiveteam.org/wiki/OMF
# Reference: http://www.azillionmonkeys.com/qed/Omfg.pdf
# Update: Joerg Jenderek
# recordtype~TranslatorHEADerRecord
0 byte 0x80
-# GRR: line above is too general as it catches also Extensible storage engine DataBase
+# GRR: line above is too general as it catches also Extensible storage engine DataBase,
+# all lif files like forth.lif hpcc88.lif lex90b.lif ( See ./lif)
+# and all compressed DEGAS low-res bitmaps like: MUNCHIE.PC1 PIDER1.PC1
# skip examples like GENA.SND Switch.Snd by looking for record length maximal 1024-3
>1 uleshort <1022
-# skip examples like GAME.PICTURE Strange.Pic by looking for positiv record length
+# skip examples like GAME.PICTURE Strange.Pic by looking for positive record length
>>1 uleshort >0
-# skip examples like Xtable.Data FRACTAL.GEN SHR.VIEW by looking for positiv string length
+# skip examples like Xtable.Data FRACTAL.GEN SHR.VIEW by looking for positive string length
>>>3 ubyte >0
-# skip examples like OMBRE.6 with "UUUUUU" by looking for filename like "hello.c"
->>>>4 regex [a-zA-Z_/]{1,8}[.] 8086 relocatable (Microsoft)
+# skip examples like OMBRE.6 with "UUUUUU" name by looking for valid high second record type
+>>>>(1.s+3) ubyte >0x6D 8086 relocatable (Microsoft)
#!:mime application/octet-stream
!:mime application/x-object
-!:ext o/a
+!:ext obj/o/a
+# T-module name often source name like "hello.c" or "jmppm32.asm" in JMPPM32.OBJ or
+# "kbhit" in KBHITS.OBJ or "CAUSEWAY_KERNAL" in CWAPI.OBJ
>>>>>3 pstring x \b, "%s"
+# data length probably lower 256 according to TrID obj_omf.trid.xml
+>>>>>1 uleshort x \b, 1st record data length %u
# checksum
-#>>>>>(3.b+4) ubyte x \b, checksum 0x%2.2x
+#>>>>>(3.b+4) ubyte x \b, checksum %#2.2x
+# second recordtype: 96h~LNAMES 88h~COMENT 8CH~EXTDEF
+>>>>>(1.s+3) ubyte x \b, 2nd record type %#x
+>>>>>(1.s+4) uleshort x \b, 2nd record data length %u
0 leshort 0xff65 x.out
>2 string __.SYMDEF randomized
>0 byte x archive
diff --git a/magic/Magdir/xilinx b/magic/Magdir/xilinx
index a5219778d390..b5443cbfd278 100644
--- a/magic/Magdir/xilinx
+++ b/magic/Magdir/xilinx
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: xilinx,v 1.8 2017/03/17 21:35:28 christos Exp $
+# $File: xilinx,v 1.9 2021/04/26 15:56:00 christos Exp $
# This is Aaron's attempt at a MAGIC file for Xilinx .bit files.
# Xilinx-Magic@RevRagnarok.com
# Got the info from FPGA-FAQ 0026
@@ -33,7 +33,7 @@
# Then 'e'
>>>>>>>>>>>&1 string e
# And length of data
->>>>>>>>>>>>&0 belong x - data length 0x%x
+>>>>>>>>>>>>&0 belong x - data length %#x
# Raw bitstream files
0 long 0xffffffff
diff --git a/magic/Magdir/xwindows b/magic/Magdir/xwindows
index 7118cadd05ef..37ed8744c5b8 100644
--- a/magic/Magdir/xwindows
+++ b/magic/Magdir/xwindows
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: xwindows,v 1.11 2019/04/19 00:42:27 christos Exp $
+# $File: xwindows,v 1.12 2021/08/24 08:31:10 christos Exp $
# xwindows: file(1) magic for various X/Window system file formats.
# Compiled X Keymap
@@ -33,3 +33,11 @@
!:mime image/x-xcursor
>10 leshort x version %d
>>8 leshort x \b.%d
+
+# X bitmap https://en.wikipedia.org/wiki/X_BitMap
+0 search/2048 #define\040
+>&0 regex [a-zA-Z0-9]+_width\040 xbm image
+>>&0 regex [0-9]* (%sx
+>>>&0 string \n#define\040
+>>>>&0 regex [a-zA-Z0-9]+_height\040
+>>>>>&0 regex [0-9]* \b%s)
diff --git a/magic/Magdir/yara b/magic/Magdir/yara
index e581c433a56a..6156cc63bc3d 100644
--- a/magic/Magdir/yara
+++ b/magic/Magdir/yara
@@ -1,7 +1,7 @@
#------------------------------------------------------------------------------
-# $File: yara,v 1.3 2019/04/19 00:42:27 christos Exp $
+# $File: yara,v 1.4 2021/04/26 15:56:00 christos Exp $
# yara: file(1) magic for https://virustotal.github.io/yara/
#
@@ -14,4 +14,4 @@
>>8 byte 8 created with version 3.4.0
>>8 byte 11 created with version 3.5.0
>>8 default x
->>>8 byte x development version 0x%02x
+>>>8 byte x development version %#02x
diff --git a/magic/Magdir/zfs b/magic/Magdir/zfs
index 77675ed7196f..5cb0fdd180be 100644
--- a/magic/Magdir/zfs
+++ b/magic/Magdir/zfs
@@ -36,7 +36,7 @@
# full 64-bit values.
# Big-endian values
-8 string \000\000\000\002\365\272\313\254 ZFS shapshot (big-endian machine),
+8 string \000\000\000\002\365\272\313\254 ZFS snapshot (big-endian machine),
>20 belong x version %u,
>32 belong 0 type: NONE,
>32 belong 1 type: META,
@@ -66,7 +66,7 @@
>56 string >\0 name: '%s'
# Little-endian values
-8 string \254\313\272\365\002\000\000\000 ZFS shapshot (little-endian machine),
+8 string \254\313\272\365\002\000\000\000 ZFS snapshot (little-endian machine),
>16 lelong x version %u,
>32 lelong 0 type: NONE,
>32 lelong 1 type: META,
diff --git a/magic/Magdir/zip b/magic/Magdir/zip
index cea7ceaac074..d70434db0f29 100644
--- a/magic/Magdir/zip
+++ b/magic/Magdir/zip
@@ -1,5 +1,5 @@
#------------------------------------------------------------------------------
-# $File: zip,v 1.4 2020/03/03 13:46:52 christos Exp $
+# $File: zip,v 1.7 2021/04/26 15:56:00 christos Exp $
# zip: file(1) magic for zip files; this is not use
# Note the version of magic in archive is currently stronger, this is
# just an example until negative offsets are supported better
@@ -7,6 +7,7 @@
# Zip Central Directory record
0 name zipcd
>0 string PK\001\002 Zip archive data
+!:mime application/zip
>>4 leshort x \b, made by
>>4 use zipversion
>>4 use ziphost
@@ -18,7 +19,7 @@
>>10 use zipcompression
# URL: https://en.wikipedia.org/wiki/Zip_(file_format)
-# reference: https://pkware.cachefly.net/webdocs/APPNOTE/APPNOTE-6.3.6.TXT
+# reference: https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT (Version: 6.3.9)
# Zip known compressions
0 name zipcompression
>0 leshort 0 \bstore
@@ -33,11 +34,12 @@
#>0 leshort 13 \bReserved by PKWARE
>0 leshort 14 \blzma
#>0 leshort 15 \bReserved by PKWARE
->0 leshort 16 \bCMPSC Compression
+>0 leshort 16 \bCMPSC (IBM z/OS)
#>0 leshort 17 \bReserved by PKWARE
>0 leshort 18 \bIBM TERSE
->0 leshort 19 \bIBM LZ77
-# https://support.winzip.com/hc/en-us/articles/115012122828-Compression-method-used-for-this-file-is-94
+>0 leshort 19 \bIBM LZ77 (z/Architecture)
+>0 leshort 20 \bZstd (deprecated)
+>0 leshort 93 \bZstd
>0 leshort 94 \bMP3
>0 leshort 95 \bxz
>0 leshort 96 \bJpeg
@@ -97,7 +99,7 @@
>1 ubyte 18 OS/400
>1 ubyte 19 OS X
# unused
-#>1 ubyte >19 unused 0x%x
+#>1 ubyte >19 unused %#x
# Zip End Of Central Directory record
-22 string PK\005\006