xref: /dflybsd-src/contrib/file/magic/Magdir/mathematica (revision 614728ca5ae8ce18ba7b320c92e6acb210aedf6e)
1f72f8299SJan Lentfer
2327e51cbSPeter Avalos#------------------------------------------------------------------------------
3*614728caSSascha Wildner# $File: mathematica,v 1.13 2021/07/14 09:06:24 christos Exp $
4327e51cbSPeter Avalos# mathematica:  file(1) magic for mathematica files
5327e51cbSPeter Avalos# "H. Nanosecond" <aldomel@ix.netcom.com>
6327e51cbSPeter Avalos# Mathematica a multi-purpose math program
7327e51cbSPeter Avalos# versions 2.2 and 3.0
8327e51cbSPeter Avalos
9327e51cbSPeter Avalos#mathematica .mb
10327e51cbSPeter Avalos0	string	\064\024\012\000\035\000\000\000	Mathematica version 2 notebook
11c30bd091SSascha Wildner!:ext mb
12327e51cbSPeter Avalos0	string	\064\024\011\000\035\000\000\000	Mathematica version 2 notebook
13c30bd091SSascha Wildner!:ext mb
14327e51cbSPeter Avalos
15327e51cbSPeter Avalos# .ma
16970935fdSSascha Wildner# multiple possibilities:
17327e51cbSPeter Avalos
18327e51cbSPeter Avalos0	string	(*^\n\n::[\011frontEndVersion\ =\ 	Mathematica notebook
19327e51cbSPeter Avalos#>41	string	>\0	%s
20c30bd091SSascha Wildner!:ext mb
21327e51cbSPeter Avalos
22327e51cbSPeter Avalos#0	string	(*^\n\n::[\011palette	Mathematica notebook version 2.x
23327e51cbSPeter Avalos
24327e51cbSPeter Avalos#0	string	(*^\n\n::[\011Information	Mathematica notebook version 2.x
25327e51cbSPeter Avalos#>675	string	>\0	%s #doesn't work well
26327e51cbSPeter Avalos
27970935fdSSascha Wildner# there may be 'cr' instead of 'nl' in some does this matter?
28327e51cbSPeter Avalos
29327e51cbSPeter Avalos# generic:
30327e51cbSPeter Avalos0	string	(*^\r\r::[\011	Mathematica notebook version 2.x
31c30bd091SSascha Wildner!:ext mb
32327e51cbSPeter Avalos0	string	(*^\r\n\r\n::[\011	Mathematica notebook version 2.x
33c30bd091SSascha Wildner!:ext mb
34327e51cbSPeter Avalos0	string	(*^\015			Mathematica notebook version 2.x
35c30bd091SSascha Wildner!:ext mb
36327e51cbSPeter Avalos0	string	(*^\n\r\n\r::[\011	Mathematica notebook version 2.x
37c30bd091SSascha Wildner!:ext mb
38327e51cbSPeter Avalos0	string	(*^\r::[\011	Mathematica notebook version 2.x
39c30bd091SSascha Wildner!:ext mb
40327e51cbSPeter Avalos0	string	(*^\r\n::[\011	Mathematica notebook version 2.x
41c30bd091SSascha Wildner!:ext mb
42327e51cbSPeter Avalos0	string	(*^\n\n::[\011	Mathematica notebook version 2.x
43c30bd091SSascha Wildner!:ext mb
44327e51cbSPeter Avalos0	string	(*^\n::[\011	Mathematica notebook version 2.x
45c30bd091SSascha Wildner!:ext mb
46327e51cbSPeter Avalos
47327e51cbSPeter Avalos
48327e51cbSPeter Avalos# Mathematica .mx files
49327e51cbSPeter Avalos
50327e51cbSPeter Avalos#0	string	(*This\ is\ a\ Mathematica\ binary\ dump\ file.\ It\ can\ be\ loaded\ with\ Get.*)	Mathematica binary file
51327e51cbSPeter Avalos0	string	(*This\ is\ a\ Mathematica\ binary\ 	Mathematica binary file
52327e51cbSPeter Avalos#>71	string \000\010\010\010\010\000\000\000\000\000\000\010\100\010\000\000\000
53327e51cbSPeter Avalos# >71... is optional
54327e51cbSPeter Avalos>88	string	>\0	from %s
55327e51cbSPeter Avalos
56327e51cbSPeter Avalos
57327e51cbSPeter Avalos# Mathematica files PBF:
58327e51cbSPeter Avalos# 115 115 101 120 102 106 000 001 000 000 000 203 000 001 000
59327e51cbSPeter Avalos0	string	MMAPBF\000\001\000\000\000\203\000\001\000	Mathematica PBF (fonts I think)
60327e51cbSPeter Avalos
61327e51cbSPeter Avalos# .ml files  These are menu resources I think
62327e51cbSPeter Avalos# these start with "[0-9][0-9][0-9]\ A~[0-9][0-9][0-9]\
63327e51cbSPeter Avalos# how to put that into a magic rule?
64327e51cbSPeter Avalos4	string	\ A~	MAthematica .ml file
65327e51cbSPeter Avalos
66327e51cbSPeter Avalos# .nb files
67327e51cbSPeter Avalos#too long 0	string	(***********************************************************************\n\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Mathematica-Compatible Notebook	Mathematica 3.0 notebook
68327e51cbSPeter Avalos0	string	(***********************	Mathematica 3.0 notebook
69327e51cbSPeter Avalos
70327e51cbSPeter Avalos# other (* matches it is a comment start in these langs
7179343712SPeter Avalos# GRR: Too weak; also matches other languages e.g. ML
7279343712SPeter Avalos#0	string	(*	Mathematica, or Pascal, Modula-2 or 3 code text
73327e51cbSPeter Avalos
74327e51cbSPeter Avalos#########################
75327e51cbSPeter Avalos# MatLab v5
76*614728caSSascha Wildner# URL:		http://fileformats.archiveteam.org/wiki/MAT
77*614728caSSascha Wildner# Reference:	https://www.mathworks.com/help/pdf_doc/matlab/matfile_format.pdf
78*614728caSSascha Wildner# first 116 bytes of header contain text in human-readable form
79*614728caSSascha Wildner0       string  MATLAB  Matlab v
80*614728caSSascha Wildner#>11	string/T	x	\b, at 11 "%.105s"
81*614728caSSascha Wildner#!:mime	application/octet-stream
82*614728caSSascha Wildner!:mime	application/x-matlab-data
83*614728caSSascha Wildner!:ext	mat
84*614728caSSascha Wildner#	https://de.mathworks.com/help/matlab/import_export/mat-file-versions.html
85*614728caSSascha Wildner# level of the MAT-file like: 5.0 7.0 or maybe 7.3
86*614728caSSascha Wildner#>7	string	x	LEVEL "%.3s"
87*614728caSSascha Wildner>7	ubyte	=0x35	\b5 mat-file
88*614728caSSascha Wildner>7	ubyte	!0x35
89*614728caSSascha Wildner>>7	string	x	\b%.3s mat-file
90327e51cbSPeter Avalos>126    short   0x494d  (big endian)
91*614728caSSascha Wildner>>124   beshort x       version %#04x
92327e51cbSPeter Avalos>126    short   0x4d49  (little endian)
93*614728caSSascha Wildner# 0x0100 for level 5.0 and 0x0200 for level 7.0
94*614728caSSascha Wildner>>124   leshort x       version %#04x
95*614728caSSascha Wildner# test again so that default clause works
96*614728caSSascha Wildner>126	short	x
97*614728caSSascha Wildner# created by MATLAB include Platform sometimes without leading comma (0x2C) or missing
98*614728caSSascha Wildner# like: GLNX86 PCWIN PCWIN64 SOL2 Windows\0407 nt posix
99*614728caSSascha Wildner>>20	search/2	Platform:\040	\b, platform
100*614728caSSascha Wildner>>>&0	string		x		%-0.2s
101*614728caSSascha Wildner>>>&2		ubyte	!0x2C		\b%c
102*614728caSSascha Wildner>>>>&0		ubyte	!0x2C		\b%c
103*614728caSSascha Wildner>>>>>&0		ubyte	!0x2C		\b%c
104*614728caSSascha Wildner>>>>>>&0	ubyte	!0x2C		\b%c
105*614728caSSascha Wildner>>>>>>>&0	ubyte	!0x2C		\b%c
106*614728caSSascha Wildner>>>>>>>>&0	ubyte	!0x2C		\b%c
107*614728caSSascha Wildner>>>>>>>>>&0	ubyte	!0x2C		\b%c
108*614728caSSascha Wildner# examples without Platform tag like one_by_zero_char.mat
109*614728caSSascha Wildner>>20	default		x
110*614728caSSascha Wildner>>>11	string		x	"%s"
111*614728caSSascha Wildner# created by MATLAB include time like: Fri Feb 20 15:26:59 2009
112*614728caSSascha Wildner>34	search/9/c	created\040on:\040	\b, created
113*614728caSSascha Wildner>>&0	string	x		%-.24s
114*614728caSSascha Wildner#	MatLab v4
115*614728caSSascha Wildner# From:	Joerg Jenderek
116*614728caSSascha Wildner# check for valid imaginary flag of Matlab matrix version 4
117*614728caSSascha Wildner13	ushort	0
118*614728caSSascha Wildner# check for valid ASCII matrix name
119*614728caSSascha Wildner>20	ubyte	>0x1F
120*614728caSSascha Wildner# skip some CD-ROM filesystem like test-hfs.iso by looking for valid big endian type flag
121*614728caSSascha Wildner>>0	ubelong&0xFFffFF00	0x00000300
122*614728caSSascha Wildner>>>0	use	matlab4
123*614728caSSascha Wildner# no example for 8-bit and 16-bit integers matrix
124*614728caSSascha Wildner>>0	ubelong&0xFFffFF00	0x00000400
125*614728caSSascha Wildner>>>0	use	matlab4
126*614728caSSascha Wildner>>0	ulelong		x
127*614728caSSascha Wildner# skip big endian variant by looking for valid low lttle endian type flag
128*614728caSSascha Wildner>>0	ulelong		<53
129*614728caSSascha Wildner>>>0	use	\^matlab4
130*614728caSSascha Wildner#	display information of Matlab v4 mat-file
131*614728caSSascha Wildner0	name	matlab4		Matlab v4 mat-file
132*614728caSSascha Wildner#!:mime	application/octet-stream
133*614728caSSascha Wildner!:mime	application/x-matlab-data
134*614728caSSascha Wildner!:ext	mat
135*614728caSSascha Wildner# 20-byte header with 5 long integers that contains information describing certain attributes of the Matrix
136*614728caSSascha Wildner# type flag decimal MOPT; maximal 4052=FD4h; maximal 52=34h for little endian
137*614728caSSascha Wildner#>0	ubelong		x	\b, type flag %u
138*614728caSSascha Wildner#>0	ubelong		x	(%#x)
139*614728caSSascha Wildner# M: 0~little endian 1~Big Endian 2~VAX D-float 3~VAX G-float 4~Cray
140*614728caSSascha Wildner#>0	ubelong/1000	x	\b, M=%u
141*614728caSSascha Wildner>0	ubelong/1000	0	(little endian)
142*614728caSSascha Wildner>0	ubelong/1000	1	(big endian)
143*614728caSSascha Wildner>0	ubelong/1000	2	(VAX D-float)
144*614728caSSascha Wildner>0	ubelong/1000	3	(VAX G-float)
145*614728caSSascha Wildner>0	ubelong/1000	4	(Cray)
146*614728caSSascha Wildner# namlen; the length of the matrix name
147*614728caSSascha Wildner#>16	ubelong		x	\b, name length %u
148*614728caSSascha Wildner# nul terminated matrix name like: fit_params testmatrix testsparsecomplex teststringarray
149*614728caSSascha Wildner#>20	string		x	\b, MATRIX NAME="%s"
150*614728caSSascha Wildner>16	pstring/L	x	%s
151*614728caSSascha Wildner# T indicates the matrix type: 0~numeric 1~text 2~sparse
152*614728caSSascha Wildner#>0	ubelong%10	x	\b, T=%u
153*614728caSSascha Wildner>0	ubelong%10	0	\b, numeric
154*614728caSSascha Wildner>0	ubelong%10	1	\b, text
155*614728caSSascha Wildner>0	ubelong%10	2	\b, sparse
156*614728caSSascha Wildner# mrows; number of rows in the matrix like: 1 3 8
157*614728caSSascha Wildner>4	ubelong		x	\b, rows %u
158*614728caSSascha Wildner# ncols; number of columns in the matrix like: 1 3 4 5 9 43
159*614728caSSascha Wildner>8	ubelong		x	\b, columns %u
160*614728caSSascha Wildner# imagf; imaginary flag; 1~matrix has an imaginary part 0~only real data
161*614728caSSascha Wildner>12	ubelong		!0	\b, imaginary
162*614728caSSascha Wildner# real; Real part of the matrix consists of mrows * ncols numbers
163