


MAGIC(FILES)					 MAGIC(FILES)


NNAAMMEE
       magic - file command's magic number file

DDEESSCCRRIIPPTTIIOONN
       The  _f_i_l_e(1)  command identifies the type of a file using,
       among other tests, a test for whether the file begins with
       a  certain  _m_a_g_i_c  _n_u_m_b_e_r.   The file //eettcc//mmaaggiicc specifies
       what magic numbers are to be tested for, what  message  to
       print  if  a  particular	magic number is found, and addi-
       tional information to extract from the file.

       Each line of the file specifies a test to be performed.	A
       test  compares the data starting at a particular offset in
       the file with a 1-byte, 2-byte, or 4-byte numeric value or
       a  string.   If	the  test succeeds, a message is printed.
       The line consists of the following fields:

       offset	A number specifying the offset,	in  bytes,  into
		the file of the data which is to be tested.

       type	The  type of the data to be tested.  The possible
		values are:

		byte	A one-byte value.

		short	A two-byte value (on most systems).

		long	A four-byte value (on most systems).

		string	A string of bytes.

       test	The value to be compared with the value from  the
		file.	If  the	type  is  numeric, this value is
		specified in C form; if it is  a  string,  it  is
		specified  as  a  C string with the usual escapes
		permitted (e.g. \n for new-line).

		Numeric values may be  preceded	by  a	character
		indicating the operation to be performed.  It may
		be ==, to specify that the  value  from	the  file
		must  equal  the  specified  value, <<, to specify
		that the value from the file must  be  less  than
		the specified value, >>, to specify that the value
		from the file must be greater than the	specified
		value,	or  &&, to specify that the value is to be
		AND'ed with the numeric value before any  compar-
		isons  are done.  Numeric values are specified in
		C form; e.g.  1133 is decimal, 001133  is  octal,  and
		00xx1133  is  hexadecimal.	to specify that any value
		will match.  If the character is omitted,  it  is
		assumed to be ==.

		For  string values, the byte string from the file
		must  match  the  specified  byte  string.    The



			  Public Domain				1





MAGIC(FILES)					 MAGIC(FILES)


		operators  =,  < and > (but not &) can be applied
		to strings.  The length used for matching is that
		of the string argument in the magic file.

       message	The  message to be printed if the comparison suc-
		ceeds.	If the string contains a _p_r_i_n_t_f(3S)  for-
		mat  specification, the value from the file (with
		any specified masking performed) is printed using
		the message as the format string.

       Some  file formats contain additional information which is
       to be printed along with the  file  type.   A  line  which
       begins with the character >> indicates additional tests and
       messages to be printed.	If the test on the line preceding
       the  first  line with a >> succeeds, the tests specified in
       all the subsequent lines beginning with >>  are  performed,
       and  the	messages printed if the tests succeed.	The next
       line which does not begin with a >> terminates this.

BBUUGGSS
       The formats _l_o_n_g and _s_h_o_r_t are  system-dependant;  perhaps
       they  should  be	specified  as a number of bytes (2B, 4B,
       etc), since the files being recognized typically come from
       a system on which the lengths are invariant.

       There  should be more than one level of subtests, with the
       level possibly indicated by the number of >> at the  begin-
       ning of the line.

SSEEEE AALLSSOO
       _f_i_l_e(1) - the command that reads this file.


























			  Public Domain				2


