]> granicus.if.org Git - file/commitdiff
Fix lharc magic (Joerg Jenderek)
authorChristos Zoulas <christos@zoulas.com>
Fri, 20 Nov 2015 17:05:42 +0000 (17:05 +0000)
committerChristos Zoulas <christos@zoulas.com>
Fri, 20 Nov 2015 17:05:42 +0000 (17:05 +0000)
magic/Magdir/archive

index 05f728cb7591a48e78355ccb8de24ad4eea7b138..be587a957437836f7efa3e238a5ddf8dd5f17792 100644 (file)
@@ -1,5 +1,5 @@
 #------------------------------------------------------------------------------
-# $File: archive,v 1.96 2015/10/10 15:36:32 christos Exp $
+# $File: archive,v 1.97 2015/10/10 15:37:44 christos Exp $
 # archive:  file(1) magic for archive formats (see also "msdos" for self-
 #           extracting compressed archives)
 #
 >>0x36 string          >\0                     fstype %.8s
 
 # LHARC/LHA archiver (Greg Roelofs, newt@uchicago.edu)
-2      string          -lh0-           LHarc 1.x/ARX archive data [lh0]
-!:mime application/x-lharc
-2      string          -lh1-           LHarc 1.x/ARX archive data [lh1]
-!:mime application/x-lharc
-2      string          -lz4-           LHarc 1.x archive data [lz4]
-!:mime application/x-lharc
-2      string          -lz5-           LHarc 1.x archive data [lz5]
-!:mime application/x-lharc
+# Update: Joerg Jenderek 
+# URL: https://en.wikipedia.org/wiki/LHA_(file_format)
+# Reference: http://web.archive.org/web/20021005080911/http://www.osirusoft.com/joejared/lzhformat.html
+#
+#      check and display information of lharc (LHa,PMarc) file
+0      name                            lharc-file
+# check 1st character of method id like -lz4- -lh5- or -pm2-
+>2     string          -
+# check 5th character of method id
+>>6    string          -               
+# check header level 0 1 2 3
+>>>20  ubyte           <4              
+# check 2nd, 3th and 4th character of method id
+>>>>3  regex           \^(lh[0-9a-ex]|lz[s2-8]|pm[012]|pc1)            \b 
+!:mime application/x-lzh-compressed
+# creator type "LHA "
+!:apple        ????LHA 
+# display archive type name like "LHa/LZS archive data" or "LArc archive"
+>>>>>2 string          -lz             \b 
+!:ext  lzs
+# already known  -lzs- -lz4- -lz5- with old names
+>>>>>>2        string  -lzs            LHa/LZS archive data
+>>>>>>3        regex   \^lz[45]        LHarc 1.x archive data
+# missing -lz?- with wikipedia names
+>>>>>>3        regex   \^lz[2378]      LArc archive
+# display archive type name like "LHa (2.x) archive data"
+>>>>>2 string          -lh             \b 
+# already known -lh0- -lh1- -lh2- -lh3-  -lh4- -lh5- -lh6- -lh7- -lhd- variants with old names
+>>>>>>3        regex           \^lh[01]        LHarc 1.x/ARX archive data
+# LHice archiver use ".ICE" as name extension instead usual one ".lzh"
+# FOOBAR archiver use ".foo" as name extension instead usual one
+# "Florain Orjanov's and Olga Bachetska's ARchiver" not found at the moment
+>>>>>>>2       string  -lh1            \b 
+!:ext lha/lzh/ice
+>>>>>>3        regex           \^lh[23d]       LHa 2.x? archive data
+>>>>>>3        regex           \^lh[7]         LHa (2.x)/LHark archive data
+>>>>>>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
+# bios.rom , kd7_v14.bin, 1010.004, ...
+!:ext lha/lzh/rom/bin
+# missing -lh?- variants (Joe Jared)
+>>>>>>3        regex           \^lh[89a-ce]    LHa (Joe Jared) archive
+# UNLHA32 2.67a
+>>>>>>2        string          -lhx            LHa (UNLHA32) archive
+# lha archives with standard file name extensions ".lha" ".lzh"
+>>>>>>3        regex           !\^(lh1|lh5)    \b 
+!:ext lha/lzh
+# this should not happen if all -lh variants are described
+>>>>>>2        default         x               LHa (unknown) archive
+#!:ext lha
+# PMarc
+>>>>>3 regex           \^pm[012]       PMarc archive data
+!:ext pma
+# append method id without leading and trailing minus character
+>>>>>3 string          x               [%3.3s]
+>>>>>>0        use     lharc-header
+#
+#      check and display information of lharc header
+0      name                            lharc-header
+# header size 0x4 , 0x1b-0x61
+>0     ubyte           x               
+# 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
+# level identifier 0 1 2 3
+#>20   ubyte           x               \b, level %d
+# time stamp
+#>15           ubelong x               DATE 0x%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
+# 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           >0x20           \b, '%c' OS
+# filename only for level 0 and 1
+>20    ubyte           <2              
+# length of filename
+>>21           ubyte   >0              \b, with
+# filename
+>>>21          pstring x               "%s"
+#
+#2     string          -lh0-           LHarc 1.x/ARX archive data [lh0]
+#!:mime        application/x-lharc
+2      string          -lh0-           
+>0     use     lharc-file
+#2     string          -lh1-           LHarc 1.x/ARX archive data [lh1]
+#!:mime        application/x-lharc
+2      string          -lh1-           
+>0     use     lharc-file
+# NEW -lz2- ... -lz8-
+2      string          -lz2-           
+>0     use     lharc-file
+2      string          -lz3-           
+>0     use     lharc-file
+2      string          -lz4-           
+>0     use     lharc-file
+2      string          -lz5-           
+>0     use     lharc-file
+2      string          -lz7-           
+>0     use     lharc-file
+2      string          -lz8-           
+>0     use     lharc-file
 #      [never seen any but the last; -lh4- reported in comp.compression:]
-2      string          -lzs-           LHa/LZS archive data [lzs]
-!:mime application/x-lha
-2      string          -lh\40-         LHa 2.x? archive data [lh ]
-!:mime application/x-lha
-2      string          -lhd-           LHa 2.x? archive data [lhd]
-!:mime application/x-lha
-2      string          -lh2-           LHa 2.x? archive data [lh2]
-!:mime application/x-lha
-2      string          -lh3-           LHa 2.x? archive data [lh3]
-!:mime application/x-lha
-2      string          -lh4-           LHa (2.x) archive data [lh4]
-!:mime application/x-lha
-2      string          -lh5-           LHa (2.x) archive data [lh5]
-!:mime application/x-lha
-2      string          -lh6-           LHa (2.x) archive data [lh6]
-!:mime application/x-lha
-2      string          -lh7-           LHa (2.x)/LHark archive data [lh7]
-!:mime application/x-lha
->20    byte            x               - header level %d
+#2     string          -lzs-           LHa/LZS archive data [lzs]
+2      string          -lzs-           
+>0     use     lharc-file
+# According to wikipedia and others such a version does not exist
+#2     string          -lh\40-         LHa 2.x? archive data [lh ]
+#2     string          -lhd-           LHa 2.x? archive data [lhd]
+2      string          -lhd-           
+>0     use     lharc-file
+#2     string          -lh2-           LHa 2.x? archive data [lh2]
+2      string          -lh2-           
+>0     use     lharc-file
+#2     string          -lh3-           LHa 2.x? archive data [lh3]
+2      string          -lh3-           
+>0     use     lharc-file
+#2     string          -lh4-           LHa (2.x) archive data [lh4]
+2      string          -lh4-           
+>0     use     lharc-file
+#2     string          -lh5-           LHa (2.x) archive data [lh5]
+2      string          -lh5-           
+>0     use     lharc-file
+#2     string          -lh6-           LHa (2.x) archive data [lh6]
+2      string          -lh6-           
+>0     use     lharc-file
+#2     string          -lh7-           LHa (2.x)/LHark archive data [lh7]
+2      string          -lh7-           
+# !:mime       application/x-lha
+# >20  byte            x               - header level %d
+>0     use     lharc-file
+# NEW -lh8- ... -lhe- , -lhx-
+2      string          -lh8-           
+>0     use     lharc-file
+2      string          -lh9-           
+>0     use     lharc-file
+2      string          -lha-           
+>0     use     lharc-file
+2      string          -lhb-           
+>0     use     lharc-file
+2      string          -lhc-           
+>0     use     lharc-file
+2      string          -lhe-           
+>0     use     lharc-file
+2      string          -lhx-           
+>0     use     lharc-file
 # taken from idarc [JW]
 2   string      -lZ         PUT archive data
-2   string      -lz         LZS archive data
+# already done by LHarc magics
+# this should never happen if all sub types of LZS archive are identified 
+#2   string      -lz         LZS archive data
 2   string      -sw1-       Swag archive data
 
 0      name            rar-file-header
 0       string  \0\ \ \ \ \ \ \ \ \ \ \ \0\0    LBR archive data
 #
 # PMA (CP/M derivative of LHA)
+# Update: Joerg Jenderek 
+# URL: https://en.wikipedia.org/wiki/LHA_(file_format)
 #
-2       string          -pm0-           PMarc archive data [pm0]
-2       string          -pm1-           PMarc archive data [pm1]
-2       string          -pm2-           PMarc archive data [pm2]
+#2       string          -pm0-           PMarc archive data [pm0]
+2      string          -pm0-           
+>0     use     lharc-file
+#2       string          -pm1-           PMarc archive data [pm1]
+2      string          -pm1-           
+>0     use     lharc-file
+#2       string          -pm2-           PMarc archive data [pm2]
+2      string          -pm2-           
+>0     use     lharc-file
 2       string          -pms-           PMarc SFX archive (CP/M, DOS)
+#!:mime        application/x-foobar-exec
+!:ext com
 5       string          -pc1-           PopCom compressed executable (CP/M)
+#!:mime        application/x-
+#!:ext com
 
 # From Rafael Laboissiere <rafael@laboissiere.net>
 # The Project Revision Control System (see