home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume36 / chiaro / part07 < prev    next >
Text File  |  1993-03-25  |  57KB  |  1,512 lines

  1. Newsgroups: comp.sources.misc
  2. From: jwbirdsa@picarefy.picarefy.com (James W. Birdsall)
  3. Subject: v36i077:  chiaro - Image Utilities, Part07/18
  4. Message-ID: <1993Mar25.181120.20340@sparky.imd.sterling.com>
  5. X-Md4-Signature: b28e4d2317f642a90b3124d9241609ab
  6. Date: Thu, 25 Mar 1993 18:11:20 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: jwbirdsa@picarefy.picarefy.com (James W. Birdsall)
  10. Posting-number: Volume 36, Issue 77
  11. Archive-name: chiaro/part07
  12. Environment: UNIX, Sun, DECstation, 3B1
  13.  
  14. #! /bin/sh
  15. # This is a shell archive.  Remove anything before this line, then feed it
  16. # into a shell via "sh file" or similar.  To overwrite existing files,
  17. # type "sh file -c".
  18. # Contents:  src/chils.man src/pbm.c templates/pcix.mk
  19. # Wrapped by kent@sparky on Thu Mar 25 11:20:03 1993
  20. PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin ; export PATH
  21. echo If this archive is complete, you will see the following message:
  22. echo '          "shar: End of archive 7 (of 18)."'
  23. if test -f 'src/chils.man' -a "${1}" != "-c" ; then 
  24.   echo shar: Will not clobber existing file \"'src/chils.man'\"
  25. else
  26.   echo shar: Extracting \"'src/chils.man'\" \(39840 characters\)
  27.   sed "s/^X//" >'src/chils.man' <<'END_OF_FILE'
  28. X
  29. X
  30. X
  31. XCHILS(1)                 USER COMMANDS                   CHILS(1)
  32. X
  33. X
  34. X
  35. XNAME
  36. X     chils - specialized ls for image files
  37. X
  38. XSYNOPSIS
  39. X     chils [ -v ][ -f ][ -h ][ -n ][ -w[n] ][ -tformat ][  -spat-
  40. X     tern ] [ target ] [ target... ]
  41. X
  42. XDESCRIPTION
  43. X     Chils is a specialized ls(1)-equivalent for image files.  It
  44. X     recognizes  a  variety  of image file formats and prints out
  45. X     the file name, file format, file size, and some  details  of
  46. X     image  size, colors, etc., depending on what information the
  47. X     format contains and how accessible it is.
  48. X
  49. XTARGETS
  50. X     A target is a filename or directory. Multiple targets may be
  51. X     specified  on  the command line. If a target is a directory,
  52. X     all files in that directory will be processed. If no targets
  53. X     are  specified on the command line, all files in the current
  54. X     directory will be processed.
  55. X
  56. X     If the format of a file is recognized,  various  information
  57. X     about  the file will be printed to the standard output. Oth-
  58. X     erwise, no output is generated for that file unless  the  -v
  59. X     option has been specified.
  60. X
  61. XOPTIONS
  62. X     Options may not be combined. In the case of the  -t  and  -s
  63. X     options,  there cannot be a space between the option and the
  64. X     argument to the option.
  65. X
  66. X     -v   Print a line for every file checked, whether the format
  67. X          was  recognized  or  not.  If  the  file format was not
  68. X          recognized, a message "ERROR: file filename is of  unk-
  69. X          nown format" is printed.
  70. X
  71. X     -f   Prints a list of the names of files of recognized  for-
  72. X          mats  (subject to selection criteria specified by other
  73. X          options) on the standard output, separated by newlines.
  74. X          The  -v  option  is  ignored  and  all  other output is
  75. X          suppressed. This output is intended for use as a  front
  76. X          end for gifstrip and other Chiaro suite programs.
  77. X
  78. X     -h   Prints a usage message.
  79. X
  80. X     -n   Chils normally  removes  the  path,  if  present,  from
  81. X          filenames when displaying, the better to fit everything
  82. X          on one line. This option causes chils to not remove the
  83. X          path, if present.
  84. X
  85. X     -w[n]
  86. X          Chils normally  determines  the  width  of  the  screen
  87. X
  88. X
  89. X
  90. XSun Release Last change: $Date: 1993/03/18 21:18:21 $           1
  91. X
  92. X
  93. X
  94. X
  95. X
  96. X
  97. XCHILS(1)                 USER COMMANDS                   CHILS(1)
  98. X
  99. X
  100. X
  101. X          automatically,  or  defaults the width to 80 columns if
  102. X          it cannot get a better answer.  This  option  overrides
  103. X          the  automatic  determination.  If a number is not sup-
  104. X          plied, the width is set to 80 columns. If a  number  is
  105. X          supplied,  the width is set to that value or 80, which-
  106. X          ever is greater.
  107. X
  108. X     -tformat
  109. X          Only files of the specified format will  be  processed.
  110. X          Multiple  -t options may be specified; files of all the
  111. X          specified types will be processed.  The  -v  option  is
  112. X          ignored. There must not be a space between the "-t" and
  113. X          the format identifier. The complete list of  recognized
  114. X          format identifiers is printed out in the usage message.
  115. X          Format identifiers are case insensitive.   At  present,
  116. X          the following format identifiers are recognized:
  117. X
  118. X               GIF87a         GIF87a files
  119. X               GIF89a         GIF89a files
  120. X               GIF            Any GIF file, either GIF87a or GIF89a
  121. X               IMG_1          GEM IMG version 1 files
  122. X               IMG            Any GEM IMG file
  123. X               JFIF101        JPEG File Interchange Format versions
  124. X                                 1.00 and 1.01
  125. X               JFIF           Any JFIF file
  126. X               SUNRAS         Sun raster files
  127. X               TARGA          TARGA files
  128. X               PBM_NORM       Portable BitMap files, ASCII format
  129. X               PBM_RAW        Portable BitMap files, raw format
  130. X               PBM            Any Portable BitMap file
  131. X               PGM_NORM       Portable GrayMap files, ASCII format
  132. X               PGM_RAW        Portable GrayMap files, raw format
  133. X               PGM            Any Portable GrayMap file
  134. X               PPM_NORM       Portable PixMap files, ASCII format
  135. X               PPM_RAW        Portable PixMap files, raw format
  136. X               PPM            Any Portable PixMap file
  137. X               XBM            X11 BitMap files
  138. X               WIN2BMP        MS-Windows 2.x bitmap files
  139. X               OS2BMP11       OS/2 1.1-1.3 bitmap files
  140. X               WIN3BMP        MS-Windows 3.x bitmap files
  141. X               OS2BMP20       OS/2 2.0 bitmap files
  142. X               BMP            Any BMP file.
  143. X               PCX_25         PCX version 2.5 files.
  144. X               PCX_28         PCX version 2.8 files without palettes.
  145. X               PCX_28P        PCX version 2.8 files with palettes.
  146. X               PCX_30         PCX version 3.0 files.
  147. X               PCX            Any PCX file.
  148. X
  149. X     -spattern
  150. X          Selects files according to a complicated Boolean search
  151. X          pattern, including search on file format, image height,
  152. X          image width, number of colors in the  image,  and  file
  153. X
  154. X
  155. X
  156. XSun Release Last change: $Date: 1993/03/18 21:18:21 $           2
  157. X
  158. X
  159. X
  160. X
  161. X
  162. X
  163. XCHILS(1)                 USER COMMANDS                   CHILS(1)
  164. X
  165. X
  166. X
  167. X          size.  Only  files which meet the specified search cri-
  168. X          teria are processed. Any -t and -v options are ignored.
  169. X          There  must  not  be  a  space between the "-s" and the
  170. X          search pattern, or within the search pattern.  If  more
  171. X          than  one  -s option is specified, only the last one on
  172. X          the command line will have effect. The  search  pattern
  173. X          may include the following operator characters:
  174. X
  175. X               ( )    ( )     parentheses for grouping
  176. X               =      =       equal
  177. X               >      }       greater than
  178. X               <      {       less than
  179. X               >=     }=      greater or equal
  180. X               <=     {=      less or equal
  181. X               &      +       logical AND
  182. X               |      ,       logical OR
  183. X
  184. X          Normally, the operators in the first column  should  be
  185. X          used.   If  chils  was  compiled  with  the DOS_COMSRCH
  186. X          option, then use the operators in  the  second  column.
  187. X          Since  most of the operators are also shell metacharac-
  188. X          ters, the search pattern should be quoted:
  189. X
  190. X               chils -s'(W>320)&(H>200)'
  191. X
  192. X          The operator characters work on the following elements:
  193. X
  194. X               H              image height
  195. X               W              image width
  196. X               C              image colors
  197. X               F              file size
  198. X               decimal numbers
  199. X               format identifiers as for -t
  200. X
  201. XCONFIGURATION
  202. X     Many image formats do not include signatures which  identify
  203. X     them uniquely.  The only way to identify these formats is by
  204. X     filename. Most formats have one or more extensions which are
  205. X     commonly used to identify that format. To accomodate as wide
  206. X     a variety of naming systems as possible, chils uses a confi-
  207. X     guration file which contains lists of formats and extensions
  208. X     which  identify  those  formats.  Extensions  may  also   be
  209. X     included  for those formats which have identification signa-
  210. X     tures (GIF and  SUNRAS),  to  avoid  false  recognition.  If
  211. X     extensions  for  these formats are included, only files with
  212. X     those extensions will be checked for the  signature;  other-
  213. X     wise all files will be checked.
  214. X
  215. X     The  configuration  file  must  be  named  chils.cfg.  Chils
  216. X     searches  for it first in the current directory. If there is
  217. X     no such file in the current directory, chils checks for  the
  218. X     existence  of an environment variable CHIHOME. If it exists,
  219. X
  220. X
  221. X
  222. XSun Release Last change: $Date: 1993/03/18 21:18:21 $           3
  223. X
  224. X
  225. X
  226. X
  227. X
  228. X
  229. XCHILS(1)                 USER COMMANDS                   CHILS(1)
  230. X
  231. X
  232. X
  233. X     it is assumed to contain the directory in which  the  confi-
  234. X     guration file resides. Finally, chils searches in the direc-
  235. X     tory containing the chils executable. This three-layer  sys-
  236. X     tem allows local configuration files which override the main
  237. X     configuration file, and allows the main  configuration  file
  238. X     to  be  anywhere,  not necessarily in the directory with the
  239. X     executable.  If the configuration file  does  not  exist,  a
  240. X     warning message is issued.  Formats for which chils needs an
  241. X     extension list, but which do not have an entry in the confi-
  242. X     guration file, will not be processed. The default configura-
  243. X     tion file supplied with the source code contains entries for
  244. X     all formats which chils can process.
  245. X
  246. X     Blank lines in chils.cfg are ignored.  Comments  begin  with
  247. X     '#'.  The  '#' must be the first non-whitespace character on
  248. X     the line, but it does not have to be in  the  first  column.
  249. X     Both  spaces and tabs are recognized as whitespace. Comments
  250. X     are terminated by the end of the line.
  251. X
  252. X     Each format entry consists of one line. The  syntax  of  the
  253. X     entry is:
  254. X
  255. X               format_name extension [[,] extension...]
  256. X
  257. X     The format name and extensions are case sensitive. The  line
  258. X     may  contain  leading whitespace before the format name. The
  259. X     format name must be separated from the first extension by at
  260. X     least one space or tab. There must be at least one extension
  261. X     on the line. Additional extensions may be separated by  com-
  262. X     mas and/or whitespace. The entry is terminated by the end of
  263. X     the line. Warnings are generated when  chils  encounters  an
  264. X     unrecognized  format  name, an entry with only a format name
  265. X     (no extension list), or a zero-length extension  (caused  by
  266. X     two commas in a row, for example).
  267. X
  268. X     Format identifiers recognized by CHILS are: GIF, IMG,  JFIF,
  269. X     SUNRAS, TARGA, PBM, PGM, PPM, XBM, BMP, and PCX.
  270. X
  271. XOUTPUT
  272. X     The output generated by chils varies according to the format
  273. X     of the image, but the meaning of some columns is constant.
  274. X
  275. X   GIF87A   -G   110871  381 x  480 @ 64    C~80                    ssb28c.gif
  276. X   GIF89A   -G-    2657  640 x  480 @ 16    C~1   ASnone          89aillus.gif
  277. X   GIF89A   -G-   62318  640 x  480 @ 16    C~40  AS49/64           grney5.gif
  278. X   IMG_1    -     62630  960 x  960 @ 2     C~54  AS 85/85  P1    example1.img
  279. X   JFIF101  -     18314  264 x  341, 3 @ 8  C~5   AS  1/  1           lat1.jpg
  280. X   JFIF101  -     44046  976 x  768, 1 @ 8  C~7   AS  1/  1          slf1n.jpg
  281. X   JFIF101  -     62139  597 x  480, 3 @ 8  C~8    72 x 72 dpi        jol1.jpg
  282. X   SUNRAS   CV     4435   80 x   50 @ 256   C~90   ML=768          encoded.im8
  283. X   SUNRAS   C-    32150  871 x  871 @ 2     C~33                  jupiterc.im1
  284. X   SUNRAS   SV     4800   80 x   50 @ 256   ML=768                standard.sun
  285. X
  286. X
  287. X
  288. XSun Release Last change: $Date: 1993/03/18 21:18:21 $           4
  289. X
  290. X
  291. X
  292. X
  293. X
  294. X
  295. XCHILS(1)                 USER COMMANDS                   CHILS(1)
  296. X
  297. X
  298. X
  299. X   SUNRAS   S-     1568   16 x   32, 24 bit                      stndrd24.im24
  300. X   TARGA    -UM-   4756   80 x   50 @ 246   T1  A0                   type1.tga
  301. X   TARGA    -UC-   1554   16 x   32, 24 bit T2  A0                   type2.tga
  302. X   TARGA    -UB-    186   24 x    7 @ 256   T3  A0                   type3.tga
  303. X   PBM_RAW  R        29   24 x    7 @ 2                           feep-raw.pbm
  304. X   PGM_RAW  R       180   24 x    7 @ 256   MaxVal = 255          feep-raw.pgm
  305. X   PPM_RAW  R        59    4 x    4, 24 bit MaxVal = 255          feep-raw.ppm
  306. X   PBM_NORM N       355   24 x    7 @ 2                               feep.pbm
  307. X   PGM_NORM N       519   24 x    7 @ 16    MaxVal =  15              feep.pgm
  308. X   PPM_NORM N       189    4 x    4 @ 4096  MaxVal =  15              feep.ppm
  309. X   XBM              182   24 x    7 @ 2     'feep'                    feep.xbm
  310. X   WIN3BMP  --     5078   80 x   50 @ 256                         256color.bmp
  311. X   WIN3BMP  --      630   32 x   32 @ 16                            argyle.bmp
  312. X   PCX_30   RC     4715   80 x   50 @ 256   C~114  CX 80,CY 50       color.pcx
  313. X   PCX_30   RC      191   24 x    7 @ 8     C~100  CX 24,CY  7    feepgray.pcx
  314. X   PCX_30   RC      152   24 x    7 @ 2     C~114  CX 24,CY  7    feepmono.pcx
  315. X
  316. X     The first column is always the format (see  the  list  under
  317. X     the  -t  option  above). The second column, if present, is a
  318. X     group of flags whose meaning varies according to  the  image
  319. X     (see  below).  The third column is the filesize. Next is the
  320. X     width and the height of the image (or a reasonable  approxi-
  321. X     mation) in pixels, then the number of colors in the image in
  322. X     a format which depends on the image. After that  is  miscel-
  323. X     laneous  format-dependent information; frequently a compres-
  324. X     sion ratio is given, indicated by "C~". The last  column  is
  325. X     always  the  filename. If the filename is too long to fit on
  326. X     the line, it is put on the line immediately following, right
  327. X     justified.
  328. X
  329. X  GIF87a
  330. X
  331. X   GIF87A   EG    53882  398 x  548 @ 16    C~49                      bar4.gif
  332. X   GIF87A   -G   110871  381 x  480 @ 64    C~80                    ssb28c.gif
  333. X   GIF87A   --    59392  320 x  240 @ ---   C~--                        tt.gif
  334. X
  335. X     The GIF87A format has two flags. The first is "E"  if  extra
  336. X     characters  are  detected  on the end of the file, or "-" if
  337. X     not. The second is "G" if the file contains a  global  color
  338. X     table, or "-" if not. Note that the "E" flag is only a quick
  339. X     and dirty check for extra characters on the end of the file.
  340. X     If the last character of the file is the GIF Terminator, "-"
  341. X     is displayed; if it is not, "E"  is  displayed.  This  check
  342. X     will  be  fooled if the file contains extra characters which
  343. X     happen to end with the GIF Terminator  character.   Gifstrip
  344. X     and  gifcheck  offer  reliable detection of extra characters
  345. X     (and, in the case of gifstrip, removal thereof).
  346. X
  347. X     The width and height displayed are for the  logical  screen,
  348. X     not  the  actual image. Typically the image or images in the
  349. X     file will be the same size as the logical screen,  but  this
  350. X     is  not  required.  Unfortunately,  it  is  not  possible to
  351. X
  352. X
  353. X
  354. XSun Release Last change: $Date: 1993/03/18 21:18:21 $           5
  355. X
  356. X
  357. X
  358. X
  359. X
  360. X
  361. XCHILS(1)                 USER COMMANDS                   CHILS(1)
  362. X
  363. X
  364. X
  365. X     extract the size of the actual image or images without pars-
  366. X     ing much of the file, which is beyond the scope of chils.
  367. X
  368. X     The number of colors shown is the size of the  global  color
  369. X     table,  or  "---"  if there is no global color table. Images
  370. X     typically do not use all the  colors  in  the  global  color
  371. X     table;  the  number  should be regarded as an upper limit on
  372. X     the colors in the actual image rather than the  actual  fig-
  373. X     ure.   Gifcheck  can  determine  the number of unique colors
  374. X     actually used.
  375. X
  376. X     The only format-dependent display is the compression  ratio.
  377. X     "--" is displayed if no global color table is present, since
  378. X     the calculation relies  on  the  size  of  that  table.  The
  379. X     compression ratio is calculated by multiplying the height by
  380. X     the width, then multiplying that result  by  the  number  of
  381. X     bits required to represent the colors in the image (based on
  382. X     the size of the global color table), and dividing  by  8  to
  383. X     obtain the number of bytes which the image data would occupy
  384. X     when uncompressed. Finally, the present file size is divided
  385. X     by  the computed uncompressed size, which yields the size of
  386. X     the compressed image as a  percentage  of  the  uncompressed
  387. X     size.  Note  that  the  value  displayed  may  be  radically
  388. X     incorrect if the file contains multiple images, if the  file
  389. X     contains  extension  blocks, if the image uses a local color
  390. X     table, if the image is smaller than the logical screen size,
  391. X     or if there are very many extra characters on the end of the
  392. X     file.
  393. X
  394. X  GIF89a
  395. X
  396. X   GIF89A   -G-    2657  640 x  480 @ 16    C~1   ASnone          89aillus.gif
  397. X   GIF89A   -G-   62318  640 x  480 @ 16    C~40  AS49/64           grney5.gif
  398. X
  399. X     The GIF89A format has three flags. The first is "E" if extra
  400. X     characters  are  detected  on the end of the file, or "-" if
  401. X     not. The second is "G" if the file contains a  global  color
  402. X     table,  or  "-" if not. The third is "S" if the global color
  403. X     table is sorted in order of decreasing importance, or "-" if
  404. X     not.  Note that the "E" flag is only a quick and dirty check
  405. X     for extra characters on the end of the  file.  If  the  last
  406. X     character  of  the  file  is  the  GIF  Terminator,  "-"  is
  407. X     displayed; if it is not, "E" is displayed. This  check  will
  408. X     be fooled if the file contains extra characters which happen
  409. X     to end with the  GIF  Terminator  character.   Gifstrip  and
  410. X     gifcheck  offer reliable detection of extra characters (and,
  411. X     in the case of gifstrip, removal thereof).
  412. X
  413. X     The width and height displayed are for the  logical  screen,
  414. X     not  the  actual image. Typically the image or images in the
  415. X     file will be the same size as the logical screen,  but  this
  416. X     is  not  required.  Unfortunately,  it  is  not  possible to
  417. X
  418. X
  419. X
  420. XSun Release Last change: $Date: 1993/03/18 21:18:21 $           6
  421. X
  422. X
  423. X
  424. X
  425. X
  426. X
  427. XCHILS(1)                 USER COMMANDS                   CHILS(1)
  428. X
  429. X
  430. X
  431. X     extract the size of the actual image or images without pars-
  432. X     ing much of the file, which is beyond the scope of chils.
  433. X
  434. X     The number of colors shown is the size of the  global  color
  435. X     table,  or  "---"  if there is no global color table. Images
  436. X     typically do not use all the  colors  in  the  global  color
  437. X     table;  the  number  should be regarded as an upper limit on
  438. X     the number of colors in the actual  image  rather  than  the
  439. X     actual  figure.  Gifcheck can determine the number of unique
  440. X     colors actually used.
  441. X
  442. X     Format-dependent displays for  GIF89a  are  the  compression
  443. X     ratio and aspect ratio, in that order.
  444. X
  445. X     If no global color table is present, "--" is  displayed  for
  446. X     the  compression  ratio, since the calculation relies on the
  447. X     size of that table. The compression ratio is  calculated  by
  448. X     multiplying  the  height by the width, then multiplying that
  449. X     result by the number  of  bits  required  to  represent  the
  450. X     colors  in  the image (based on the size of the global color
  451. X     table), and dividing by 8 to  obtain  the  number  of  bytes
  452. X     which   the  image  data  would  occupy  when  uncompressed.
  453. X     Finally, the present file size is divided  by  the  computed
  454. X     uncompressed  size,  which yields the size of the compressed
  455. X     image as a percentage of the uncompressed  size.  Note  that
  456. X     the  value  displayed may be radically incorrect if the file
  457. X     contains multiple images, if  the  file  contains  extension
  458. X     blocks,  if the image uses a local color table, if the image
  459. X     is smaller than the logical screen size,  or  if  there  are
  460. X     very many extra characters on the end of the file.
  461. X
  462. X     The aspect ratio is given in 64ths. If there  is  no  aspect
  463. X     ratio, "none" is displayed.
  464. X
  465. X  IMG_1
  466. X
  467. X   IMG_1    -     62630  960 x  960 @ 2     C~54  AS 85/85  P1    example1.img
  468. X
  469. X     Note that there are many file formats named "IMG", a  situa-
  470. X     tion  which is confusing at best.  Chils recognizes only the
  471. X     GEM IMG format.
  472. X
  473. X     The IMG_1 format has one flag. It is "L" if the  IMG  header
  474. X     is  extended  (to contain a palette, for example), or "-" if
  475. X     the header is of normal length.
  476. X
  477. X     The maximum number of colors in the file is calculated  from
  478. X     the  number  of bit planes; the actual number of colors used
  479. X     may be less than the number shown.
  480. X
  481. X     Format-dependent displays  for  IMG_1  are  the  compression
  482. X     ratio, aspect ratio, and pattern length, in that order.
  483. X
  484. X
  485. X
  486. XSun Release Last change: $Date: 1993/03/18 21:18:21 $           7
  487. X
  488. X
  489. X
  490. X
  491. X
  492. X
  493. XCHILS(1)                 USER COMMANDS                   CHILS(1)
  494. X
  495. X
  496. X
  497. X     The compression ratio is computed by multiplying the  height
  498. X     by  the width, then multiplying that result by the number of
  499. X     bit planes, and dividing by 8 to obtain the number of  bytes
  500. X     which   the  image  data  would  occupy  when  uncompressed.
  501. X     Finally, the present file size minus the  header  length  is
  502. X     divided  by the computed uncompressed size, which yields the
  503. X     size  of  the  compressed  image  as  a  percentage  of  the
  504. X     uncompressed size. The compression ratio is reasonably accu-
  505. X     rate. Since the header  length  is  known  accurately,  that
  506. X     number  is  subtracted from the filesize to get a more accu-
  507. X     rate compressed size. The compression  ratio  will  only  be
  508. X     incorrect  if  there  are  junk characters on the end of the
  509. X     file.
  510. X
  511. X     The  aspect  ratio  is  always  present.  The  numbers  also
  512. X     represent the width and height, respectively, of a pixel, in
  513. X     microns. 85 microns is approximately equivalent to 300  pix-
  514. X     els per inch.
  515. X
  516. X     The pattern length in pixels is used when decompressing  the
  517. X     image.
  518. X
  519. X  JFIF1.01
  520. X
  521. X   JFIF101  -     18314  264 x  341, 3 @ 8  C~5   AS  1/  1           lat1.jpg
  522. X   JFIF101  -     44046  976 x  768, 1 @ 8  C~7   AS  1/  1          slf1n.jpg
  523. X   JFIF101  -     62139  597 x  480, 3 @ 8  C~8    72 x 72 dpi        jol1.jpg
  524. X
  525. X     The JFIF 1.0 and 1.01 formats differ minimally; chils treats
  526. X     them as identical.
  527. X
  528. X     The JFIF101 format has one flag. It is "T"  if  a  thumbnail
  529. X     image is present in the file, or "-" if not.
  530. X
  531. X     The number of colors is expressed as  the  number  of  "com-
  532. X     ponents"  (usually  3  or  1) by the number of bits per com-
  533. X     ponent (usually 8). Images with three components  are  full-
  534. X     color, while images with one are, by convention, grayscale.
  535. X
  536. X     Format-dependent displays for JFIF101  are  the  compression
  537. X     ratio and aspect ratio or pixel density, in that order.
  538. X
  539. X     The compression ratio is computed by multiplying the  height
  540. X     by  the width, then multiplying that result by the number of
  541. X     components times the bits per component, and dividing  by  8
  542. X     to  obtain  the  number  of bytes which the image data would
  543. X     occupy when uncompressed. Finally, the present file size  is
  544. X     divided  by the computed uncompressed size, which yields the
  545. X     size  of  the  compressed  image  as  a  percentage  of  the
  546. X     uncompressed  size.  Note  that the image itself is actually
  547. X     compressed even more than shown, since the present file size
  548. X     includes  all  the  headers and other, non-image information
  549. X
  550. X
  551. X
  552. XSun Release Last change: $Date: 1993/03/18 21:18:21 $           8
  553. X
  554. X
  555. X
  556. X
  557. X
  558. X
  559. XCHILS(1)                 USER COMMANDS                   CHILS(1)
  560. X
  561. X
  562. X
  563. X     present in the file.
  564. X
  565. X     JFIF101 files contain either an aspect ratio or a pixel den-
  566. X     sity.  If  an  aspect ratio is present, it is expressed as a
  567. X     fraction.  If  pixel  density  is  present  instead,  it  is
  568. X     displayed  as the horizontal density by the vertical density
  569. X     followed by the units, which are either  "dpi"  (pixels/dots
  570. X     per inch) or "dpcm" (pixels/dots per centimeter).
  571. X
  572. X  SUNRAS
  573. X
  574. X   SUNRAS   CV     4435   80 x   50 @ 256   C~90   ML=768          encoded.im8
  575. X   SUNRAS   C-    32150  871 x  871 @ 2     C~33                  jupiterc.im1
  576. X   SUNRAS   SV     4800   80 x   50 @ 256   ML=768                standard.sun
  577. X   SUNRAS   S-     1568   16 x   32, 24 bit                      stndrd24.im24
  578. X
  579. X     Sun Raster files are a format developed by Sun  Microsystems
  580. X     for use on their workstations.
  581. X
  582. X     The SUNRAS format has two flags. The first is "O" for  'old'
  583. X     format files (left over from ancient versions of SunOS), "S"
  584. X     for standard files, "C" for compressed files, "R" for 24-bit
  585. X     files with reversed color-component order, "T" for "tiff <->
  586. X     standard rasterfile" (don't ask me), "I" for "iff (TAAC for-
  587. X     mat) <-> standard rasterfile" (again, don't ask me), and "E"
  588. X     for 'experimental' formats. The second flag is  "-"  if  the
  589. X     file  does  not  have  a colormap, "V" if the colormap is in
  590. X     'vector' format (all red components  grouped  together,  all
  591. X     green  components grouped together in the same order, etc.),
  592. X     or "R" if the colormap is in 'raw' format (usually RGB  tri-
  593. X     ples).
  594. X
  595. X     The number of colors is expressed either as a number  or  as
  596. X     the number of bits per pixel, depending on which fits in the
  597. X     available space. In the case of  a  plain  number,  not  all
  598. X     colors  may  be  used;  the  number should be regarded as an
  599. X     upper limit on the number of  colors  in  the  actual  image
  600. X     rather than the actual figure.
  601. X
  602. X     Format-dependent displays for  SUNRAS  are  the  compression
  603. X     ratio  (if a compressed format) and the length of the color-
  604. X     map in bytes (if a colormap is present), in that order.
  605. X
  606. X     The compression ratio is computed by multiplying the  height
  607. X     by  the width, then multiplying that result by the number of
  608. X     bits per pixel, and dividing by 8 to obtain  the  number  of
  609. X     bytes  which  the image data would occupy when uncompressed.
  610. X     Finally, the size of the compressed data (maintained in  the
  611. X     file  header)  is divided by the computed uncompressed size,
  612. X     which yields the size of the compressed image as  a  percen-
  613. X     tage  of  the  uncompressed  size.  The compression ratio is
  614. X     accurate unless the file is corrupted.
  615. X
  616. X
  617. X
  618. XSun Release Last change: $Date: 1993/03/18 21:18:21 $           9
  619. X
  620. X
  621. X
  622. X
  623. X
  624. X
  625. XCHILS(1)                 USER COMMANDS                   CHILS(1)
  626. X
  627. X
  628. X
  629. X     If a colormap is present, the length in bytes  is  displayed
  630. X     as "ML=nnn".
  631. X
  632. X  TARGA
  633. X
  634. X   TARGA    -UM-   4756   80 x   50 @ 246   T1  A0                   type1.tga
  635. X   TARGA    -UC-   1554   16 x   32, 24 bit T2  A0                   type2.tga
  636. X   TARGA    -UB-    186   24 x    7 @ 256   T3  A0                   type3.tga
  637. X
  638. X     The Targa format was developed by AT&T in  conjunction  with
  639. X     their TrueVision graphics hardware.
  640. X
  641. X     The TARGA format has four flags. The first  is  "-"  if  the
  642. X     file  contains an image or "N" if not. The second is "-" for
  643. X     no  image,  "U"  for  an  uncompressed  image,  "R"  for   a
  644. X     runlength-encoded image, or "C" for an LZW-compressed image.
  645. X     The third is "-" for no image, "M" for a colormapped  image,
  646. X     "B"  for  a  grayscale image, or "C" for a full-color image.
  647. X     The fourth flag indicates the scan-line  interleave  of  the
  648. X     image:  "-" for noninterleaved, "2" or "4" for two- or four-
  649. X     way interleaving, or "R" for a reserved value.
  650. X
  651. X     The number of colors is expressed either as a number  or  as
  652. X     the  number  of bits per pixel. If the image is colormapped,
  653. X     the length of the colormap is displayed. If the image is not
  654. X     colormapped  (either  grayscale  or  full-color),  either  a
  655. X     number or the number of bits is displayed depending on which
  656. X     fits  in the available space. In the case of a plain number,
  657. X     not all colors may be used; the number should be regarded as
  658. X     an  upper  limit on the number of colors in the actual image
  659. X     rather than the actual figure.
  660. X
  661. X     Format-dependent displays  for  TARGA  are  the  compression
  662. X     ratio (if a runlength-encoded or LZW-compressed format), the
  663. X     format type "Tn", the number of  attribute  bits  per  pixel
  664. X     "An",  "M"  if  an  unnecessary  colormap is included in the
  665. X     file, and "I" if the file has an ID field.
  666. X
  667. X     The compression ratio is computed by multiplying the  height
  668. X     by  the width, then multiplying that result by the number of
  669. X     bits per pixel, and dividing by 8 to obtain  the  number  of
  670. X     bytes  which  the image data would occupy when uncompressed.
  671. X     Finally, the present file size minus the header,  ID  field,
  672. X     and colormap lengths is divided by the computed uncompressed
  673. X     size, which yields the size of the  compressed  image  as  a
  674. X     percentage  of  the uncompressed size. The compression ratio
  675. X     should be accurate unless the file is corrupted or there are
  676. X     junk characters on the end of the file.
  677. X
  678. X  PBM, PGM, PPM, PBM_RAW, PGM_RAW, PPM_RAW
  679. X
  680. X   PBM_RAW  R        29   24 x    7 @ 2                           feep-raw.pbm
  681. X
  682. X
  683. X
  684. XSun Release Last change: $Date: 1993/03/18 21:18:21 $          10
  685. X
  686. X
  687. X
  688. X
  689. X
  690. X
  691. XCHILS(1)                 USER COMMANDS                   CHILS(1)
  692. X
  693. X
  694. X
  695. X   PGM_RAW  R       180   24 x    7 @ 256   MaxVal = 255          feep-raw.pgm
  696. X   PPM_RAW  R        59    4 x    4, 24 bit MaxVal = 255          feep-raw.ppm
  697. X   PBM_NORM N       355   24 x    7 @ 2                               feep.pbm
  698. X   PGM_NORM N       519   24 x    7 @ 16    MaxVal =  15              feep.pgm
  699. X   PPM_NORM N       189    4 x    4 @ 4096  MaxVal =  15              feep.ppm
  700. X
  701. X     These formats were developed by Jef Poskanzer for his  Port-
  702. X     able  Bitmap  (later Portable Bitmap Plus) package. The for-
  703. X     mats  were  designed  to  be  easily  transferable   between
  704. X     machines  and  easily  usable  on widely differing machines.
  705. X     There are three basic types, PBM (Portable BitMap, black and
  706. X     white  only),  PGM  (Portable  GrayMap,  grayscale), and PPM
  707. X     (Portable PixMap, full-color), each of which  comes  in  two
  708. X     varieties,  normal  (all  data is represented as ASCII text)
  709. X     and raw (the image data is stored as  packed  bytes.)  Chils
  710. X     handles all six permutations.
  711. X
  712. X     These formats have only one flag, which is  "R"  for  a  raw
  713. X     file and "N" for a normal file, and is redundant.
  714. X
  715. X     The number of colors is expressed either as a number  or  as
  716. X     the  number of bits per pixel. For PBM and PGM images, it is
  717. X     always a number (always 2 for PBM). For PPM  images,  it  is
  718. X     either  a  number  or  the number of bits depending on which
  719. X     fits in the available space. In the case of a plain  number,
  720. X     not all colors may be used; the number should be regarded as
  721. X     an upper limit on the number of colors in the  actual  image
  722. X     rather than the actual figure.
  723. X
  724. X     There are no format-dependent displays for PBM; PGM and  PPM
  725. X     display  the  maximum value that a pixel may take (usually a
  726. X     power of 2 minus 1).
  727. X
  728. X  XBM
  729. X
  730. X   XBM              182   24 x    7 @ 2     'feep'                    feep.xbm
  731. X
  732. X     The XBM (X BitMap) format is used by  the  X  Window  system
  733. X     developed  at  MIT.   The format is designed for easy incor-
  734. X     poration  into  C-language  programs   and   all   data   is
  735. X     represented as ASCII text.
  736. X
  737. X     The XBM format has no flags.
  738. X
  739. X     The number of colors is always 2, black and white.
  740. X
  741. X     Format-dependent displays for XBM are the name of the image,
  742. X     which is encoded into the file.
  743. X
  744. X  WIN2BMP
  745. X
  746. X   WIN2BMP  -       630   32 x   32 @ 16                              argh.bmp
  747. X
  748. X
  749. X
  750. XSun Release Last change: $Date: 1993/03/18 21:18:21 $          11
  751. X
  752. X
  753. X
  754. X
  755. X
  756. X
  757. XCHILS(1)                 USER COMMANDS                   CHILS(1)
  758. X
  759. X
  760. X
  761. X     The WIN2BMP format is an obsolete format used by  MS-Windows
  762. X     2.x.
  763. X
  764. X     The WIN2BMP format has one flag, which is "D" if the  bitmap
  765. X     resource is discardable or "-" if it is not.
  766. X
  767. X     The number of colors is expressed either as a number  or  as
  768. X     the number of bits per pixel, depending on which fits in the
  769. X     available space. In the case of  a  plain  number,  not  all
  770. X     colors  may  be  used;  the  number should be regarded as an
  771. X     upper limit on the number of  colors  in  the  actual  image
  772. X     rather than the actual figure.
  773. X
  774. X     There are no format-dependent displays for WIN2BMP.
  775. X
  776. X  OS2BMP11
  777. X
  778. X   OS2BMP11 -      5078   80 x   50 @ 256                         256color.bmp
  779. X
  780. X     The OS2BMP11 format is used by OS/2 1.1-1.3. The WIN3BMP and
  781. X     OS2BMP20 formats are loosely based on it.
  782. X
  783. X     The OS2BMP11 format has one flag, which is "E" if  the  file
  784. X     size  in  the header does not match the present file size or
  785. X     "-" if it does.
  786. X
  787. X     The number of colors is expressed either as a number  or  as
  788. X     the number of bits per pixel, depending on which fits in the
  789. X     available space. In the case of  a  plain  number,  not  all
  790. X     colors  may  be  used;  the  number should be regarded as an
  791. X     upper limit on the number of  colors  in  the  actual  image
  792. X     rather than the actual figure.
  793. X
  794. X     There are no format-dependent displays for OS2BMP11.
  795. X
  796. X  WIN3BMP
  797. X
  798. X   WIN3BMP  --     5078   80 x   50 @ 256                         256color.bmp
  799. X   WIN3BMP  --      630   32 x   32 @ 16                            argyle.bmp
  800. X
  801. X     The WIN3BMP format is used by MS-Windows 3.x. It is  loosely
  802. X     based  on  the  OS2BMP11  format  and the OS2BMP20 format is
  803. X     based on it.
  804. X
  805. X     The WIN3BMP format has two flags. The first one  is  "E"  if
  806. X     the  file size in the header does not match the present file
  807. X     size or "-" if it  does.  The  second  one  is  "-"  for  an
  808. X     uncompressed  file,  "4"  if 4-bit run-length compression is
  809. X     used, or "8" if 8-bit run-length compression is used.
  810. X
  811. X     The number of colors is expressed either as a number  or  as
  812. X     the number of bits per pixel, depending on which fits in the
  813. X
  814. X
  815. X
  816. XSun Release Last change: $Date: 1993/03/18 21:18:21 $          12
  817. X
  818. X
  819. X
  820. X
  821. X
  822. X
  823. XCHILS(1)                 USER COMMANDS                   CHILS(1)
  824. X
  825. X
  826. X
  827. X     available space. In the case of  a  plain  number,  not  all
  828. X     colors  may  be  used;  the  number should be regarded as an
  829. X     upper limit on the number of  colors  in  the  actual  image
  830. X     rather than the actual figure.
  831. X
  832. X     Format-dependent displays for WIN3BMP  are  the  compression
  833. X     ratio  (for  compressed  files), the horizontal and vertical
  834. X     resolution (if present) and the number of  important  colors
  835. X     (if  present  and different from the number of colors in the
  836. X     colormap) "Innn".
  837. X
  838. X     The compression ratio is computed by multiplying the  height
  839. X     by  the width, then multiplying that result by the number of
  840. X     bits per pixel, and dividing by 8 to obtain  the  number  of
  841. X     bytes  which  the image data would occupy when uncompressed.
  842. X     Finally, the size of the compressed data (maintained in  the
  843. X     file  header)  is divided by the computed uncompressed size,
  844. X     which yields the size of the compressed image as  a  percen-
  845. X     tage  of  the  uncompressed  size.  The compression ratio is
  846. X     accurate unless the file is corrupted.
  847. X
  848. X     The horizontal and vertical resolution  are  in  pixels  per
  849. X     meter, displayed as "Xnnn,Ynnn".
  850. X
  851. X  OS2BMP20
  852. X
  853. X   OS2BMP20 --R-   5078   80 x   50 @ 256                         256color.bmp
  854. X
  855. X     The OS2BMP20 format is used by OS/2 2.0. It is an  extension
  856. X     of the WIN3BMP format.
  857. X
  858. X     The OS2BMP20 format has four flags. The first one is "E"  if
  859. X     the  file size in the header does not match the present file
  860. X     size or "-" if it  does.  The  second  one  is  "-"  for  an
  861. X     uncompressed  file  or "C" for a compressed file.  The third
  862. X     one relates to the colormap format and should always be "R".
  863. X     The  fourth  one  is "H" if a halftoning algorithm is speci-
  864. X     fied, "-" otherwise.
  865. X
  866. X     The number of colors is expressed either as a number  or  as
  867. X     the number of bits per pixel, depending on which fits in the
  868. X     available space. In the case of  a  plain  number,  not  all
  869. X     colors  may  be  used;  the  number should be regarded as an
  870. X     upper limit on the number of  colors  in  the  actual  image
  871. X     rather than the actual figure.
  872. X
  873. X     Format-dependent displays for OS2BMP20 are  the  compression
  874. X     ratio  (for  compressed  files), the horizontal and vertical
  875. X     resolution (if present) and the number of  important  colors
  876. X     (if  present  and different from the number of colors in the
  877. X     colormap) "Innn".
  878. X
  879. X
  880. X
  881. X
  882. XSun Release Last change: $Date: 1993/03/18 21:18:21 $          13
  883. X
  884. X
  885. X
  886. X
  887. X
  888. X
  889. XCHILS(1)                 USER COMMANDS                   CHILS(1)
  890. X
  891. X
  892. X
  893. X     The compression ratio is computed by multiplying the  height
  894. X     by  the width, then multiplying that result by the number of
  895. X     bits per pixel, and dividing by 8 to obtain  the  number  of
  896. X     bytes  which  the image data would occupy when uncompressed.
  897. X     Finally, the size of the compressed data (maintained in  the
  898. X     file  header)  is divided by the computed uncompressed size,
  899. X     which yields the size of the compressed image as  a  percen-
  900. X     tage  of  the  uncompressed  size.  The compression ratio is
  901. X     accurate unless the file is corrupted.
  902. X
  903. X     The horizontal and  vertical  resolution  are  displayed  as
  904. X     "Xnnn,Ynnn  dp?",  where  '?' should always be 'm' (for dots
  905. X     per meter).
  906. X
  907. X  PCX
  908. X
  909. X   PCX_30   RC     4715   80 x   50 @ 256   C~114  CX 80,CY 50       color.pcx
  910. X   PCX_30   RC      191   24 x    7 @ 8     C~100  CX 24,CY  7    feepgray.pcx
  911. X   PCX_30   RC      152   24 x    7 @ 2     C~114  CX 24,CY  7    feepmono.pcx
  912. X
  913. X     The PCX format was created by the ZSoft Corporation.   Chils
  914. X     recognizes PCX_25 (version 2.5), PCX_28 (version 2.8 without
  915. X     palette), PCX_28P (version 2.8  with  palette),  and  PCX_30
  916. X     (version 3.0).
  917. X
  918. X     The PCX format has two flags. The first one should always be
  919. X     "R",  indicating  that  the  file is run-length encoded. The
  920. X     second one is "G" if the palette should  be  interpreted  as
  921. X     grayscale or "C" if it should be interpreted as color.
  922. X
  923. X     The number of colors is expressed either as a number  or  as
  924. X     the number of bits per pixel, depending on which fits in the
  925. X     available space. In the case of  a  plain  number,  not  all
  926. X     colors  may  be  used;  the  number should be regarded as an
  927. X     upper limit on the number of  colors  in  the  actual  image
  928. X     rather than the actual figure.
  929. X
  930. X     Format-dependent displays for PCX are the compression  ratio
  931. X     and the horizontal and vertical resolution of the file crea-
  932. X     tor, in that order.
  933. X
  934. X     The compression ratio is computed by multiplying the  height
  935. X     by  the width, then multiplying that result by the number of
  936. X     bits per pixel, and dividing by 8 to obtain  the  number  of
  937. X     bytes  which  the image data would occupy when uncompressed.
  938. X     Finally, the present file size minus the length of  the  PCX
  939. X     header  is  divided by the computed uncompressed size, which
  940. X     yields the size of the compressed image as a  percentage  of
  941. X     the uncompressed size. The compression ratio should be accu-
  942. X     rate unless the file has extra characters (such  as  a  256-
  943. X     color palette) on the end.
  944. X
  945. X
  946. X
  947. X
  948. XSun Release Last change: $Date: 1993/03/18 21:18:21 $          14
  949. X
  950. X
  951. X
  952. X
  953. X
  954. X
  955. XCHILS(1)                 USER COMMANDS                   CHILS(1)
  956. X
  957. X
  958. X
  959. X     The horizontal and  vertical  resolution  are  displayed  as
  960. X     "CXnnn,CYnnn".   Unfortunately,  it  is not clear what these
  961. X     values mean.
  962. X
  963. XCOPYRIGHT
  964. X     Chils is copyright 1993 by James  W.  Birdsall,  all  rights
  965. X     reserved.
  966. X
  967. X     The Graphics Interchange Format(c) is the Copyright property
  968. X     of  CompuServe  Incorporated. GIF(sm) is a Service Mark pro-
  969. X     perty of CompuServe Incorporated.
  970. X
  971. X     SunOS is a trademark of Sun Microsystems Inc.
  972. X
  973. X     Targa and TrueVision are probably trademarks of AT&T.
  974. X
  975. X     MS-Windows is probably a trademark of Microsoft.
  976. X
  977. X     OS/2 is a registered trademark of IBM.
  978. X
  979. X     Other terms in this document may be  trademarks  or  service
  980. X     marks  of or copyright by various corporations and organiza-
  981. X     tions.
  982. X
  983. XAUTHOR
  984. X     James W. Birdsall
  985. X        support@picarefy.com
  986. X        uunet!uw-coco!amc-gw!picarefy!support
  987. X        CompuServe: 71261,1731
  988. X        GEnie: J.BIRDSALL2
  989. X
  990. XFILES
  991. X     chils.cfg         Configuration file
  992. X
  993. XSEE ALSO
  994. X     gifstrip(1), gifcheck(1)
  995. X
  996. X
  997. X
  998. X
  999. X
  1000. X
  1001. X
  1002. X
  1003. X
  1004. X
  1005. X
  1006. X
  1007. X
  1008. X
  1009. X
  1010. X
  1011. X
  1012. X
  1013. X
  1014. XSun Release Last change: $Date: 1993/03/18 21:18:21 $          15
  1015. X
  1016. X
  1017. X
  1018. END_OF_FILE
  1019.   if test 39840 -ne `wc -c <'src/chils.man'`; then
  1020.     echo shar: \"'src/chils.man'\" unpacked with wrong size!
  1021.   fi
  1022.   # end of 'src/chils.man'
  1023. fi
  1024. if test -f 'src/pbm.c' -a "${1}" != "-c" ; then 
  1025.   echo shar: Will not clobber existing file \"'src/pbm.c'\"
  1026. else
  1027.   echo shar: Extracting \"'src/pbm.c'\" \(12731 characters\)
  1028.   sed "s/^X//" >'src/pbm.c' <<'END_OF_FILE'
  1029. X/***************************************************************************
  1030. X*   PBM.C                                                                  *
  1031. X*   MODULE:  PNM                                                           *
  1032. X*   OS:      UNIX                                                          *
  1033. X*                                                                          *
  1034. X*   Copyright (c) 1993 James W. Birdsall. All Rights Reserved.             *
  1035. X*                                                                          *
  1036. X*   $Id: pbm.c,v 1.1 1993/03/02 00:58:52 jwbirdsa Exp $
  1037. X*                                                                          *
  1038. X*   This file contains functions to process PBM format files.              *
  1039. X*   Functions:                                                             *
  1040. X*      pbm_verify    - checks filename to see if it is an PBM file         *
  1041. X*      pbm_getheader - extracts header data from PBM file                  *
  1042. X*                                                                          *
  1043. X*      pbm_errstring - converts error code into message                    *
  1044. X*                                                                          *
  1045. X***************************************************************************/
  1046. X
  1047. X#include "config.h"
  1048. X
  1049. X/*
  1050. X** system includes <>
  1051. X*/
  1052. X
  1053. X#include <stdio.h>
  1054. X#ifndef NO_STDLIB
  1055. X#include <stdlib.h>
  1056. X#endif
  1057. X#ifndef NO_STR_INC
  1058. X#ifdef STRING_PLURAL
  1059. X#include <strings.h>
  1060. X#else
  1061. X#include <string.h>
  1062. X#endif
  1063. X#endif
  1064. X
  1065. X
  1066. X/*
  1067. X** custom includes ""
  1068. X*/
  1069. X
  1070. X#include "depend.h"
  1071. X#include "formats.h"
  1072. X#include "token.h"
  1073. X#include "pnm.h"
  1074. X
  1075. X
  1076. X/*
  1077. X** local #defines
  1078. X*/
  1079. X
  1080. X/*
  1081. X** misc: copyright strings, version macros, etc.
  1082. X*/
  1083. X
  1084. X/*
  1085. X** typedefs
  1086. X*/
  1087. X
  1088. X/*
  1089. X** global variables
  1090. X*/
  1091. X
  1092. X/*
  1093. X** static globals
  1094. X*/
  1095. X
  1096. Xstatic char CONST rcsid[] = "$Id: pbm.c,v 1.1 1993/03/02 00:58:52 jwbirdsa Exp $";
  1097. X
  1098. X
  1099. X/*
  1100. X** function prototypes
  1101. X*/
  1102. X
  1103. X#ifdef NO_STDLIB
  1104. Xextern long atol();
  1105. X#endif
  1106. X
  1107. X#ifdef NO_STR_INC
  1108. Xextern char *strrchr();
  1109. Xextern int strcmp();
  1110. X#endif
  1111. X
  1112. X
  1113. X/*
  1114. X** functions
  1115. X*/
  1116. X
  1117. X
  1118. X/***************************************************************************
  1119. X*   FUNCTION:    pbm_verify                                                *
  1120. X*                                                                          *
  1121. X*   DESCRIPTION:                                                           *
  1122. X*                                                                          *
  1123. X*       Verifies that a file is an PBM file by checking filename against   *
  1124. X*       list of extensions. Reads PBM magic number from start of file.     *
  1125. X*                                                                          *
  1126. X*   ENTRY:                                                                 *
  1127. X*                                                                          *
  1128. X*       filename - name of file to be verified                             *
  1129. X*       version  - pointer to unsigned long in which format/version value  *
  1130. X*                  is returned                                             *
  1131. X*       exts     - array of string pointers, list of extensions for PBM    *
  1132. X*                  files                                                   *
  1133. X*                                                                          *
  1134. X*   EXIT:                                                                  *
  1135. X*                                                                          *
  1136. X*       Returns an error/status code.                                      *
  1137. X*                                                                          *
  1138. X*   CONSTRAINTS/SIDE EFFECTS:                                              *
  1139. X*                                                                          *
  1140. X***************************************************************************/
  1141. XULONG
  1142. X#ifdef __STDC__
  1143. Xpbm_verify(char *filename, ULONG *version, char **exts)
  1144. X#else
  1145. Xpbm_verify(filename, version, exts)
  1146. Xchar *filename;
  1147. XULONG *version;
  1148. Xchar **exts;
  1149. X#endif
  1150. X{
  1151. X    char *extptr;
  1152. X    int loop;
  1153. X    FILE *pbmfile;
  1154. X    int magic;
  1155. X    ULONG retval;
  1156. X
  1157. X    /* Search for '.' marking extension. */
  1158. X
  1159. X    extptr = strrchr(filename, '.');
  1160. X    if (NULL == extptr)
  1161. X    {
  1162. X        /* No extension, cannot classify. */
  1163. X
  1164. X        *version = PBM_NOT;
  1165. X        return 0;
  1166. X    }
  1167. X    extptr++;
  1168. X
  1169. X    /* Now we have the extension, check against list. */
  1170. X
  1171. X    for (loop = 0; exts[loop] != NULL; loop++)
  1172. X    {
  1173. X        /* Case-sensitive string compare. */
  1174. X
  1175. X        if (strcmp(extptr, exts[loop]) == 0)
  1176. X        {
  1177. X            /* Match, so break out of loop. */
  1178. X
  1179. X            break;
  1180. X        }
  1181. X    }
  1182. X
  1183. X    /* Check exit from loop. */
  1184. X
  1185. X    if (NULL == exts[loop])
  1186. X    {
  1187. X        /* No match, return. */
  1188. X
  1189. X        *version = PBM_NOT;
  1190. X        return 0;
  1191. X    }
  1192. X
  1193. X    /* Extension is valid for type PBM, so process accordingly. */
  1194. X
  1195. X    if ((pbmfile = fopen(filename, FOPEN_READ_BINARY)) == (FILE *) NULL)
  1196. X    {
  1197. X        return PBM_FILEERR_E;
  1198. X    }
  1199. X
  1200. X    /* Read magic number, first character. */
  1201. X
  1202. X    if ((magic = fgetc(pbmfile)) == EOF)
  1203. X    {
  1204. X        *version = PBM_NOT;
  1205. X        retval = (feof(pbmfile) ? ST_SUCCESS : PBM_FILEERR_E);
  1206. X        fclose(pbmfile);
  1207. X        return retval;
  1208. X    }
  1209. X    if (magic != PNM_MAGIC)
  1210. X    {
  1211. X        *version = PBM_NOT;
  1212. X        fclose(pbmfile);
  1213. X        return ST_SUCCESS;
  1214. X    }
  1215. X
  1216. X    /* Read magic number, second character. */
  1217. X
  1218. X    if ((magic = fgetc(pbmfile)) == EOF)
  1219. X    {
  1220. X        *version = PBM_NOT;
  1221. X        retval = (feof(pbmfile) ? ST_SUCCESS : PBM_FILEERR_E);
  1222. X        fclose(pbmfile);
  1223. X        return retval;
  1224. X    }
  1225. X    if ((magic != PBM_MAGIC_NORM) && (magic != PBM_MAGIC_RAW))
  1226. X    {
  1227. X        *version = PBM_NOT;
  1228. X        fclose(pbmfile);
  1229. X        return ST_SUCCESS;
  1230. X    }
  1231. X
  1232. X    /* Set version according to second character of magic number. */
  1233. X
  1234. X    *version = ((PBM_MAGIC_NORM == magic) ? PBM_NORM : PBM_RAW);
  1235. X
  1236. X    /* Close file. */
  1237. X
  1238. X    if (fclose(pbmfile))
  1239. X    {
  1240. X        return PBM_FILEERR_E;
  1241. X    }
  1242. X
  1243. X    /* Return OK. */
  1244. X
  1245. X    return 0;
  1246. X} /* end of pbm_verify() */
  1247. X
  1248. X
  1249. X/***************************************************************************
  1250. X*   FUNCTION:    pbm_getheader                                             *
  1251. X*                                                                          *
  1252. X*   DESCRIPTION:                                                           *
  1253. X*                                                                          *
  1254. X*       Assumes that file is an PBM file. Reads header from file, extracts *
  1255. X*       data into PBM_HDR structure.                                       *
  1256. X*                                                                          *
  1257. X*   ENTRY:                                                                 *
  1258. X*                                                                          *
  1259. X*       infile  - file to be processed                                     *
  1260. X*       results - pointer to PBM_HDR structure in which data from header   *
  1261. X*                 is returned                                              *
  1262. X*                                                                          *
  1263. X*   EXIT:                                                                  *
  1264. X*                                                                          *
  1265. X*       Returns an error/status code.                                      *
  1266. X*                                                                          *
  1267. X*   CONSTRAINTS/SIDE EFFECTS:                                              *
  1268. X*                                                                          *
  1269. X*       Leaves file pointing to beginning of image data.                   *
  1270. X*                                                                          *
  1271. X***************************************************************************/
  1272. XULONG
  1273. X#ifdef __STDC__
  1274. Xpbm_getheader(FILE *infile, PBM_HDR *results)
  1275. X#else
  1276. Xpbm_getheader(infile, results)
  1277. XFILE *infile;
  1278. XPBM_HDR *results;
  1279. X#endif
  1280. X{
  1281. X    char *token;
  1282. X    ULONG status;
  1283. X
  1284. X    /* Make sure we're at beginning of file. */
  1285. X
  1286. X    if (fseek(infile, 0L, SEEK_SET))
  1287. X    {
  1288. X        return PBM_FILEERR_E;
  1289. X    }
  1290. X
  1291. X    /* Get first token, should be magic number. */
  1292. X
  1293. X    if ((token = fm_token(infile)) == NULL)
  1294. X    {
  1295. X        return PBM_FILEERR_E;
  1296. X    }
  1297. X    if ((token[0] != PNM_MAGIC) ||
  1298. X        ((token[1] != PBM_MAGIC_NORM) && (token[1] != PBM_MAGIC_RAW)))
  1299. X    {
  1300. X        return PBM_NOTPBM_E;
  1301. X    }
  1302. X    results->version = ((PBM_MAGIC_NORM == token[1]) ? PBM_NORM : PBM_RAW);
  1303. X    free(token);
  1304. X
  1305. X    /* Search for next token that is not a comment. */
  1306. X
  1307. X    if ((token = fm_token(infile)) == NULL)
  1308. X    {
  1309. X        return PBM_FILEERR_E;
  1310. X    }
  1311. X    while ('#' == token[0])
  1312. X    {
  1313. X        free(token);
  1314. X        if ((status = fm_eol(infile)) != ST_SUCCESS)
  1315. X        {
  1316. X            return ((FM_EOF_W == status) ? PBM_UNEOF_E : PBM_FILEERR_E);
  1317. X        }
  1318. X        if ((token = fm_token(infile)) == NULL)
  1319. X        {
  1320. X            return PBM_FILEERR_E;
  1321. X        }
  1322. X    }
  1323. X
  1324. X    /* Got a token that is not a comment. Should be width of image. */
  1325. X
  1326. X    if ((results->imwid = (ULONG) atol(token)) == 0L)
  1327. X    {
  1328. X        /* Something is wrong. Shouldn't be zero width. */
  1329. X
  1330. X        free(token);
  1331. X        results->version = PBM_NOT;
  1332. X        return PBM_NOTPBM_E;
  1333. X    }
  1334. X    free(token);
  1335. X
  1336. X    /* Search for next token that is not a comment. */
  1337. X
  1338. X    if ((token = fm_token(infile)) == NULL)
  1339. X    {
  1340. X        return PBM_FILEERR_E;
  1341. X    }
  1342. X    while ('#' == token[0])
  1343. X    {
  1344. X        free(token);
  1345. X        if ((status = fm_eol(infile)) != ST_SUCCESS)
  1346. X        {
  1347. X            return ((FM_EOF_W == status) ? PBM_UNEOF_E : PBM_FILEERR_E);
  1348. X        }
  1349. X        if ((token = fm_token(infile)) == NULL)
  1350. X        {
  1351. X            return PBM_FILEERR_E;
  1352. X        }
  1353. X    }
  1354. X
  1355. X    /* Got a token that is not a comment. Should be height of image. */
  1356. X
  1357. X    if ((results->imhi = (ULONG) atol(token)) == 0L)
  1358. X    {
  1359. X        /* Something is wrong. Shouldn't be zero height. */
  1360. X
  1361. X        free(token);
  1362. X        results->version = PBM_NOT;
  1363. X        return PBM_NOTPBM_E;
  1364. X    }
  1365. X    free(token);
  1366. X
  1367. X    /*
  1368. X    ** Set file to point to start of data. Search for next token that 
  1369. X    ** is not a comment. 
  1370. X    */
  1371. X
  1372. X    if ((token = fm_token(infile)) == NULL)
  1373. X    {
  1374. X        return PBM_FILEERR_E;
  1375. X    }
  1376. X    while ('#' == token[0])
  1377. X    {
  1378. X        free(token);
  1379. X        if ((status = fm_eol(infile)) != ST_SUCCESS)
  1380. X        {
  1381. X            return ((FM_EOF_W == status) ? PBM_UNEOF_E : PBM_FILEERR_E);
  1382. X        }
  1383. X        if ((token = fm_token(infile)) == NULL)
  1384. X        {
  1385. X            return PBM_FILEERR_E;
  1386. X        }
  1387. X    }
  1388. X    free(token);
  1389. X
  1390. X    /* Return OK. */
  1391. X
  1392. X    return 0;
  1393. X} /* end of pbm_getheader() */
  1394. X
  1395. X
  1396. X/***************************************************************************
  1397. X*   FUNCTION: pbm_errstring                                                *
  1398. X*                                                                          *
  1399. X*   DESCRIPTION:                                                           *
  1400. X*                                                                          *
  1401. X*      Returns a string corresponding to an error code.                    *
  1402. X*                                                                          *
  1403. X*   ENTRY:                                                                 *
  1404. X*                                                                          *
  1405. X*      errcode - error code to be translated                               *
  1406. X*                                                                          *
  1407. X*   EXIT:                                                                  *
  1408. X*                                                                          *
  1409. X*      Returns a pointer to the appropriate string, or NULL if there is    *
  1410. X*      no appropriate string.                                              *
  1411. X*                                                                          *
  1412. X*   CONSTRAINTS/SIDE EFFECTS:                                              *
  1413. X*                                                                          *
  1414. X***************************************************************************/
  1415. Xchar *
  1416. X#ifdef __STDC__
  1417. Xpbm_errstring(ULONG errcode)
  1418. X#else
  1419. Xpbm_errstring(errcode)
  1420. XULONG errcode;
  1421. X#endif
  1422. X{
  1423. X    char *temp;
  1424. X
  1425. X    /* If error code not from this module, return NULL. */
  1426. X
  1427. X    if ((errcode & ST_MOD_MASK) != PBM_MODULE)
  1428. X    {
  1429. X        return NULL;
  1430. X    }
  1431. X
  1432. X    /* Process by code. */
  1433. X
  1434. X    switch (ERRSEV(errcode))
  1435. X    {
  1436. X        case ERRSEV(PBM_NOTPBM_E):
  1437. X            temp = "File is not a PBM format file.";
  1438. X            break;
  1439. X        case ERRSEV(PBM_FILEERR_E):
  1440. X            temp = "Error accessing file.";
  1441. X            break;
  1442. X        case ERRSEV(PBM_UNEOF_E):
  1443. X            temp = "Unexpected End of File";
  1444. X            break;
  1445. X
  1446. X        default:
  1447. X            temp = NULL;
  1448. X            break;
  1449. X    }
  1450. X
  1451. X    return temp;
  1452. X} /* end of pbm_errstring() */
  1453. X
  1454. END_OF_FILE
  1455.   if test 12731 -ne `wc -c <'src/pbm.c'`; then
  1456.     echo shar: \"'src/pbm.c'\" unpacked with wrong size!
  1457.   fi
  1458.   # end of 'src/pbm.c'
  1459. fi
  1460. if test -f 'templates/pcix.mk' -a "${1}" != "-c" ; then 
  1461.   echo shar: Will not clobber existing file \"'templates/pcix.mk'\"
  1462. else
  1463.   echo shar: Extracting \"'templates/pcix.mk'\" \(256 characters\)
  1464.   sed "s/^X//" >'templates/pcix.mk' <<'END_OF_FILE'
  1465. X#
  1466. X# Makefile template for PC/IX 1.0 and 1.1 using the stock compiler.
  1467. X#
  1468. X
  1469. XCC    = cc
  1470. XCFLAGS    = -O -c
  1471. XCINC    =
  1472. X
  1473. XLINK    = ld
  1474. XLFLAGS    = -i
  1475. XLOBJS    = /lib/crt0.o
  1476. XLLIBS    = -lc -ltermcap
  1477. X
  1478. XO    = o
  1479. XEXE    =
  1480. X
  1481. XLN    = ln
  1482. XCP    = cp
  1483. XRM    = rm -f
  1484. X
  1485. XPOST_CHILS    =
  1486. XPOST_GIFSTRIP    =
  1487. XPOST_GIFCHECK    =
  1488. X
  1489. END_OF_FILE
  1490.   if test 256 -ne `wc -c <'templates/pcix.mk'`; then
  1491.     echo shar: \"'templates/pcix.mk'\" unpacked with wrong size!
  1492.   fi
  1493.   # end of 'templates/pcix.mk'
  1494. fi
  1495. echo shar: End of archive 7 \(of 18\).
  1496. cp /dev/null ark7isdone
  1497. MISSING=""
  1498. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ; do
  1499.     if test ! -f ark${I}isdone ; then
  1500.     MISSING="${MISSING} ${I}"
  1501.     fi
  1502. done
  1503. if test "${MISSING}" = "" ; then
  1504.     echo You have unpacked all 18 archives.
  1505.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1506. else
  1507.     echo You still must unpack the following archives:
  1508.     echo "        " ${MISSING}
  1509. fi
  1510. exit 0
  1511. exit 0 # Just in case...
  1512.