This directory contains these utilities:
  - hxascdmp: takes a binary stream and converts it to hexadecimal ASCII
    which is sent to stdout. The incoming binary stream can either be
    from a file or, in the absence of a file name, from stdin. Similar to
    the Unix "od" command. By default, it decodes 16 bytes per line with
    an ASCII interpretation to the right of each line. See its
    hxascdmp(1) man page.
  - sg_chk_asc: utility decodes the SCSI additional sense code table
    found at http://www.t10.org/lists/asc-num.txt and checks it
    against the table found in sg_lib_data.c in the lib/ subdirectory.
    It is designed to keep the table in sg_lib_data.c in "sync" with the
    table at the t10.org web site.


By default, the Makefile only builds the hxascdmp utility. The 'Makefile'
file (i.e. with no suffix) builds for Linux; the 'Makefile.freebsd' file
builds for FreeBSD (e.g. 'make -f Makefile.freebsd'); the
'Makefile.solaris' file builds for Solaris; the 'Makefile.mingw' builds
in the Windows MinGW environment (e.g.  msys shell); and 'Makefile.cygwin'
builds in the Windows Cygwin environment.

To build sg_chk_asc the sg_lib.o and sg_lib_data.o files must be present
(i.e. compiled) in the lib/ subdirectory. One way to meet that requirement
is to execute './configure' in the main directory then 'cd lib ; make '.
Then return to this directory and do 'make sg_chk_asc'.


Douglas Gilbert
30th March 2010 
