[File] [PATCH] of Magdir/frame for FrameMaker MIF

Jörg Jenderek joerg.jen.der.ek at gmx.net
Sat Nov 23 22:20:49 UTC 2019

Hash: SHA1


some days ago i had to handle some ImageMagick bitmaps which have
sometimes filename extension mif. When searching on my systems for
non ImageMagick bitmaps with same file name extension i found a few
FrameMaker MIF documents. When running file command version
5.37 on such samples and similar test examples i get an unexpected
output like:

bookTOC.framemif:  FrameMaker MIF (ASCII) file (3.0)
example2.mif:      FrameMaker MIF (ASCII) file
example4.mif:      FrameMaker MIF (ASCII) file
fm-a5mif.mif:      FrameMaker MIF (ASCII) file (4.0)
SomeChartPack.mif: FrameMaker MIF (ASCII) file

Furthermore with -i option only out dated application/x-mif is shown
and with --extension only ??? is displayed.

Some information about Maker Interchange Format (MIF) can be found
on file formats archive team web site. So i add this URL by comment
line like:
 # URL: fileformats.archiveteam.org/wiki/Maker_Interchange_Format
On that site a link to ADOBE FRAMEMAKER MIF REFERENCE is listed. So
i add this as reference by comment line like:
 # Reference: help.adobe.com/en_US/framemaker/mifreference/mifref.pdf

The identification happens by line
 0	string		\<MIFFile	FrameMaker MIF (ASCII) file
Afterward show instead mime type application/x-mif the IANA
registered type by line:
 !:mime	application/vnd.mif
Most FrameMaker Interchange Format documents have file name
extension mif, but i also found an example with name
bookTOC.framemif. So file name extension is displayed by line
 !:ext	mif/framemif

According to reference afterwards the version number of the MIF
language is stored as string after first keyword, terminated by a
greater sign.
In current frame file it is looking for known version, and then
show this version inside parenthesis by lines like:
 >9	string		4.0		 (4.0)
 >9	string		3.0		 (3.0)
 >9	string		2.0		 (2.0)
 >9	string		1.0		 (1.x)
I do not understand why this way is choosen and why version string
is not directly shown. Furthermore by current method for MIF documents
like SomeChartPack.mif which are newer than version 4 no version
information is shown.
Unfortunatly the reference does not mention how the version string
looks like. According to current magic it probably looks like x.y,
but in reference examples the 4 digit year string 2015 is used.
Newest Frammaker version is 2019. So maybe there this years
appears. So show first 3 character of version string. If it is not
followed by greater sign print next character of version string by
 >9	string		x		(%.3s
 >12	ubyte		=0x3e		\b)
 >12	ubyte		!0x3e		\b%c)
According to reference after MIFFile statement comes a comment
starting with number sign #. This comment shows the name and
version number of the program that generated the file. So show this
information by lines:
 >13	search/3	#
 >>&0	string		x		"%s"

After applying the above mentioned modifications by patch
file-5.37-frame-mif.diff then i get a more describing output like:

bookTOC.framemif:  FrameMaker MIF (ASCII) file (3.00)
	" Generated by FrameMaker 3.0.1"
example2.mif:      FrameMaker MIF (ASCII) file (8.00)
example4.mif:      FrameMaker MIF (ASCII) file (2015)
	" The only required statement"
fm-a5mif.mif:      FrameMaker MIF (ASCII) file (4.00)
	" Generated by FrameMaker 4.02P2b"
SomeChartPack.mif: FrameMaker MIF (ASCII) file (2015)
	" Generated by SomeChartPack 1.4;
	identifies this# as a MIF file."
test-2.0.mif:      FrameMaker MIF (ASCII) file (2.0)
	" this is only a test"

I hope my diff file can be applied in a future version of
file utility.

The wrong mime error and incomplete version information seems to
appear also for other FrameMaker files. Maybe i will do this in a
future session.

With best wishes
Jörg Jenderek
- --
Jörg Jenderek

Comment: Using GnuPG with Thunderbird - https://www.enigmail.net/

-------------- next part --------------
--- file-5.37/magic/Magdir/frame.old	2019-02-22 12:06:34 +0000
+++ file-5.37/magic/Magdir/frame	2019-11-23 20:48:48 +0000
@@ -20,8 +20,20 @@
 >14	byte		x		  %c)
+# URL:		http://fileformats.archiveteam.org/wiki/Maker_Interchange_Format
+# Reference:	https://help.adobe.com/en_US/framemaker/mifreference/mifref.pdf
+# Update:	Joerg Jenderek 2019 Nov
 0	string		\<MIFFile	FrameMaker MIF (ASCII) file
-!:mime	application/x-mif
->9	string		4.0		 (4.0)
->9	string		3.0		 (3.0)
->9	string		2.0		 (2.0)
->9	string		1.0		 (1.x)
+# https://www.iana.org/assignments/media-types/application/vnd.mif
+!:mime	application/vnd.mif
+# mif most but also find bookTOC.framemif
+!:ext	mif/framemif
+# followed by space~20h
+#>8	ubyte		0x20		\b, space before version
+# 3 characters of version number of the MIF language like 1.0, 2.0 ... 2015 ...
+>9	string		x		(%.3s
+# if not greater sign then display 4th character of version
+>12	ubyte		=0x3e		\b)
+>12	ubyte		!0x3e		\b%c)
+# comment starting with # shows the name+version number of generating program
+>13	search/3	#
+>>&0	string		x		"%s"
 0	search/1	\<MakerDictionary	FrameMaker Dictionary text
-------------- next part --------------
A non-text attachment was scrubbed...
Name: file-5.37-frame-mif.diff.sig
Type: application/octet-stream
Size: 95 bytes
Desc: not available
URL: <https://mailman.astron.com/pipermail/file/attachments/20191123/19f0fb6d/attachment.obj>

More information about the File mailing list