


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


