home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / misc / volume36 / chiaro / part08 < prev    next >
Encoding:
Text File  |  1993-03-24  |  55.6 KB  |  1,544 lines

  1. Newsgroups: comp.sources.misc
  2. From: jwbirdsa@picarefy.picarefy.com (James W. Birdsall)
  3. Subject: v36i078:  chiaro - Image Utilities, Part08/18
  4. Message-ID: <1993Mar25.181145.20419@sparky.imd.sterling.com>
  5. X-Md4-Signature: 91f2cc2dddbfa9acd4fc0d4253e17425
  6. Date: Thu, 25 Mar 1993 18:11:45 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 78
  11. Archive-name: chiaro/part08
  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/BUGS src/colors.c src/gifcheck.man
  19. # Wrapped by kent@sparky on Thu Mar 25 11:20:04 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 8 (of 18)."'
  23. if test -f 'src/BUGS' -a "${1}" != "-c" ; then 
  24.   echo shar: Will not clobber existing file \"'src/BUGS'\"
  25. else
  26.   echo shar: Extracting \"'src/BUGS'\" \(384 characters\)
  27.   sed "s/^X//" >'src/BUGS' <<'END_OF_FILE'
  28. XCHILS
  29. X
  30. XGIFSTRIP
  31. X
  32. XGIFCHECK
  33. X 1.0 patchlevel 0:
  34. X
  35. X   * On small-memory systems, gifcheck sometimes cannot allocate memory
  36. X     for decompression buffers when processing a directory target. It works
  37. X     fine if you use wildcards -- "foodir/*" instead of "foodir". Looks
  38. X     like a weird memory fragmentation problems, since it usually gets
  39. X     through a couple files OK before choking.
  40. END_OF_FILE
  41.   if test 384 -ne `wc -c <'src/BUGS'`; then
  42.     echo shar: \"'src/BUGS'\" unpacked with wrong size!
  43.   fi
  44.   # end of 'src/BUGS'
  45. fi
  46. if test -f 'src/colors.c' -a "${1}" != "-c" ; then 
  47.   echo shar: Will not clobber existing file \"'src/colors.c'\"
  48. else
  49.   echo shar: Extracting \"'src/colors.c'\" \(13516 characters\)
  50.   sed "s/^X//" >'src/colors.c' <<'END_OF_FILE'
  51. X/***************************************************************************
  52. X*   COLORS.C                                                               *
  53. X*   MODULE:  -                                                             *
  54. X*   OS:      UNIX                                                          *
  55. X*                                                                          *
  56. X*   Copyright (c) 1993 James W. Birdsall. All Rights Reserved.             *
  57. X*                                                                          *
  58. X*   The Graphics Interchange Format(c) is the Copyright property of        *
  59. X*   CompuServe Incorporated. GIF(sm) is a Service Mark property of         *
  60. X*   CompuServe Incorporated.                                               *
  61. X*                                                                          *
  62. X*   GIF and "Graphic Interchange Format" are trademarks (tm) of            *
  63. X*   CompuServe, Inc., an H&R Block company.                                *
  64. X*                                                                          *
  65. X*   $Id: colors.c,v 1.2 1993/02/10 02:02:14 jwbirdsa Exp $
  66. X*                                                                          *
  67. X***************************************************************************/
  68. X
  69. X#include "config.h"
  70. X
  71. X/*
  72. X** system includes <>
  73. X*/
  74. X
  75. X#include <stdio.h>
  76. X#ifndef NO_MALLOCHDR
  77. X#include <malloc.h>
  78. X#endif
  79. X
  80. X
  81. X/*
  82. X** custom includes ""
  83. X*/
  84. X
  85. X#include "depend.h"
  86. X
  87. X#include "formats.h"
  88. X#include "colors.h"
  89. X
  90. X
  91. X/*
  92. X** local #defines
  93. X*/
  94. X
  95. X#define MAXTABLES            10
  96. X
  97. X#define VALIDATE_HANDLE(h)   if (((h) < 0) || ((h) >= MAXTABLES) || \
  98. X                                 (((HASHHAN *) NULL) == hanlist[handle])) \
  99. X                                 return -1;
  100. X
  101. X/*
  102. X** misc: copyright strings, version macros, etc.
  103. X*/
  104. X
  105. Xstatic char CONST rcsid[] = "$Id: colors.c,v 1.2 1993/02/10 02:02:14 jwbirdsa Exp $";
  106. X
  107. X
  108. X/*
  109. X** typedefs
  110. X*/
  111. X
  112. Xtypedef struct {
  113. X    HASHIT *list[HASHSIZE];
  114. X    long uniques;
  115. X    long entries;
  116. X} HASHHAN;
  117. X
  118. X
  119. X/*
  120. X** global variables
  121. X*/
  122. X
  123. X/*
  124. X** static globals
  125. X*/
  126. X
  127. Xstatic HASHHAN *hanlist[MAXTABLES] = {  NULL, NULL, NULL, NULL, NULL,
  128. X                                        NULL, NULL, NULL, NULL, NULL };
  129. X
  130. X
  131. X/*
  132. X** function prototypes
  133. X*/
  134. X
  135. X/*
  136. X** functions
  137. X*/
  138. X
  139. X/***************************************************************************
  140. X*   FUNCTION: COL_OPEN                                                     *
  141. X*                                                                          *
  142. X*   DESCRIPTION:                                                           *
  143. X*                                                                          *
  144. X*       Opens a color hash table and returns its handle.                   *
  145. X*                                                                          *
  146. X*   ENTRY:                                                                 *
  147. X*                                                                          *
  148. X*       Void.                                                              *
  149. X*                                                                          *
  150. X*   EXIT:                                                                  *
  151. X*                                                                          *
  152. X*       Returns handle on success, -1 on error.                            *
  153. X*                                                                          *
  154. X*   CONSTRAINTS/SIDE EFFECTS:                                              *
  155. X*                                                                          *
  156. X*       No more than MAXTABLES handles can be open at once, subject to     *
  157. X*       memory availability.                                               *
  158. X*                                                                          *
  159. X***************************************************************************/
  160. Xint 
  161. Xcol_open()
  162. X{
  163. X    int hanind;
  164. X    int loop;
  165. X
  166. X    /* Any handles free? */
  167. X
  168. X    for (hanind = 0; hanind < MAXTABLES; hanind++)
  169. X    {
  170. X        /* If free break out of loop. */
  171. X
  172. X        if (((HASHHAN *) NULL) == hanlist[hanind])
  173. X        {
  174. X            break;
  175. X        }
  176. X    }
  177. X    if (MAXTABLES == hanind)
  178. X    {
  179. X        /* No handles free, return error. */
  180. X
  181. X        return -1;
  182. X    }
  183. X
  184. X    /* Try to allocate memory. */
  185. X
  186. X    hanlist[hanind] = (HASHHAN *) calloc(1, sizeof(HASHHAN));
  187. X    if (((HASHHAN *) NULL) == hanlist[hanind])
  188. X    {
  189. X        /* Can't allocate a handle structure. */
  190. X
  191. X        return -1;
  192. X    }
  193. X
  194. X    /* Initialize handle structure. */
  195. X
  196. X    for (loop = 0; loop < HASHSIZE; loop++)
  197. X    {
  198. X        hanlist[hanind]->list[loop] = (HASHIT *) NULL;
  199. X    }
  200. X    hanlist[hanind]->uniques = 0;
  201. X    hanlist[hanind]->entries = 0;
  202. X
  203. X    /* Return the allocated handle. */
  204. X
  205. X    return hanind;
  206. X} /* end of col_open() */
  207. X
  208. X
  209. X/***************************************************************************
  210. X*   FUNCTION: COL_ENTER                                                    *
  211. X*                                                                          *
  212. X*   DESCRIPTION:                                                           *
  213. X*                                                                          *
  214. X*       Enters a color in the color hash table referenced by handle.       *
  215. X*                                                                          *
  216. X*   ENTRY:                                                                 *
  217. X*                                                                          *
  218. X*       handle - handle of table in which to enter color                   *
  219. X*       newcol - color to be entered in table                              *
  220. X*                                                                          *
  221. X*   EXIT:                                                                  *
  222. X*                                                                          *
  223. X*       Returns 0 on success, -1 on error.                                 *
  224. X*                                                                          *
  225. X*   CONSTRAINTS/SIDE EFFECTS:                                              *
  226. X*                                                                          *
  227. X***************************************************************************/
  228. Xint 
  229. X#ifdef __STDC__
  230. Xcol_enter(int handle, RGB_TRIPLET *newcol)
  231. X#else
  232. Xcol_enter(handle, newcol)
  233. Xint handle;
  234. XRGB_TRIPLET *newcol;
  235. X#endif
  236. X{
  237. X    int hashval;
  238. X    HASHIT *searcher;
  239. X
  240. X    VALIDATE_HANDLE(handle);
  241. X
  242. X    /* Update entries value. */
  243. X
  244. X    hanlist[handle]->entries++;
  245. X
  246. X    /* Compute hash value. */
  247. X
  248. X    hashval = (newcol->red + newcol->green + newcol->blue) % HASHSIZE;
  249. X
  250. X    /* Search hash list. */
  251. X
  252. X    for (searcher = hanlist[handle]->list[hashval]; searcher != (HASHIT *) NULL;
  253. X         searcher = searcher->next)
  254. X    {
  255. X        /* If color matches, break out of loop. */
  256. X
  257. X        if ((searcher->c.red == newcol->red) &&
  258. X            (searcher->c.green == newcol->green) &&
  259. X            (searcher->c.blue == newcol->blue))
  260. X        {
  261. X            break;
  262. X        }
  263. X    }
  264. X
  265. X    /* Is new or old? */
  266. X
  267. X    if (((HASHIT *) NULL) == searcher)
  268. X    {
  269. X        /* Got a new one. */
  270. X
  271. X        hanlist[handle]->uniques++;
  272. X
  273. X        /* Allocate a structure for it. */
  274. X
  275. X        if ((searcher = (HASHIT *) calloc(1, sizeof(HASHIT))) == 
  276. X            (HASHIT *) NULL)
  277. X        {
  278. X            return -1;
  279. X        }
  280. X
  281. X        /* Initialize the structure. */
  282. X
  283. X        searcher->c.red = newcol->red;
  284. X        searcher->c.green = newcol->green;
  285. X        searcher->c.blue = newcol->blue;
  286. X        searcher->instances = 1;
  287. X
  288. X        /* Put structure in hash table. */
  289. X
  290. X        searcher->next = hanlist[handle]->list[hashval];
  291. X        hanlist[handle]->list[hashval] = searcher;
  292. X    }
  293. X    else
  294. X    {
  295. X        /* Already in table, update variables. */
  296. X
  297. X        searcher->instances++;
  298. X    }
  299. X
  300. X    /* Return OK. */
  301. X
  302. X    return 0;
  303. X} /* end of col_enter() */
  304. X
  305. X
  306. X/***************************************************************************
  307. X*   FUNCTION: COL_GETSTAT                                                  *
  308. X*                                                                          *
  309. X*   DESCRIPTION:                                                           *
  310. X*                                                                          *
  311. X*       Returns statistics on the color hash table referenced by handle.   *
  312. X*                                                                          *
  313. X*   ENTRY:                                                                 *
  314. X*                                                                          *
  315. X*       handle  - handle of table                                          *
  316. X*       uniques - pointer to long to return number of unique colors        *
  317. X*       entries - pointer to long to return total number of colors entered *
  318. X*                 in table                                                 *
  319. X*                                                                          *
  320. X*   EXIT:                                                                  *
  321. X*                                                                          *
  322. X*       Returns 0 on success, -1 on error.                                 *
  323. X*                                                                          *
  324. X*   CONSTRAINTS/SIDE EFFECTS:                                              *
  325. X*                                                                          *
  326. X***************************************************************************/
  327. Xint 
  328. X#ifdef __STDC__
  329. Xcol_getstat(int handle, long *uniques, long *entries)
  330. X#else
  331. Xcol_getstat(handle, uniques, entries)
  332. Xint handle;
  333. Xlong *uniques;
  334. Xlong *entries;
  335. X#endif
  336. X{
  337. X    VALIDATE_HANDLE(handle);
  338. X
  339. X    *uniques = hanlist[handle]->uniques;
  340. X    *entries = hanlist[handle]->entries;
  341. X
  342. X    return 0;
  343. X} /* end of col_getstat() */
  344. X
  345. X
  346. X/***************************************************************************
  347. X*   FUNCTION: COL_CLOSE                                                    *
  348. X*                                                                          *
  349. X*   DESCRIPTION:                                                           *
  350. X*                                                                          *
  351. X*       Closes a color hash table, releasing memory etc. If retlist is not *
  352. X*       NULL, contents of table are returned as a linked list.             *
  353. X*                                                                          *
  354. X*   ENTRY:                                                                 *
  355. X*                                                                          *
  356. X*       handle  - handle of table to be closed                             *
  357. X*       retlist - pointer to pointer in which pointer to head of linked    *
  358. X*                 list is returned.                                        *
  359. X*                                                                          *
  360. X*   EXIT:                                                                  *
  361. X*                                                                          *
  362. X*       Returns 0 on success, -1 on error.                                 *
  363. X*                                                                          *
  364. X*   CONSTRAINTS/SIDE EFFECTS:                                              *
  365. X*                                                                          *
  366. X***************************************************************************/
  367. Xint 
  368. X#ifdef __STDC__
  369. Xcol_close(int handle, HASHIT **retlist)
  370. X#else
  371. Xcol_close(handle, retlist)
  372. Xint handle;
  373. XHASHIT **retlist;
  374. X#endif
  375. X{
  376. X    int loop;
  377. X    HASHIT *searcher, *scout;
  378. X
  379. X    VALIDATE_HANDLE(handle);
  380. X
  381. X    /* Are we returning list or not? */
  382. X
  383. X    if (((HASHIT **) NULL) == retlist)
  384. X    {
  385. X        /* Not, so just free stuff. */
  386. X
  387. X        for (loop = 0; loop < HASHSIZE; loop++)
  388. X        {
  389. X            searcher = hanlist[handle]->list[loop];
  390. X            while (searcher != (HASHIT *) NULL)
  391. X            {
  392. X                scout = searcher->next;
  393. X                free(searcher);
  394. X                searcher = scout;
  395. X            }
  396. X        }
  397. X        free(hanlist[handle]);
  398. X
  399. X        /* Reset table entry. */
  400. X
  401. X        hanlist[handle] = (HASHHAN *) NULL;
  402. X    }
  403. X    else
  404. X    {
  405. X        /* Returning list, so weave multiple lists into one and return. */
  406. X
  407. X        /* Are there any entries? */
  408. X
  409. X        if (MKLONG(0) == hanlist[handle]->entries)
  410. X        {
  411. X            *retlist = (HASHIT *) NULL;
  412. X        }
  413. X        else
  414. X        {
  415. X            /* Find first non-null entry. */
  416. X
  417. X            for (loop = 0; loop < HASHSIZE; loop++)
  418. X            {
  419. X                if (((HASHIT *) NULL) == hanlist[handle]->list[loop])
  420. X                {
  421. X                    continue;
  422. X                }
  423. X            }
  424. X            *retlist = hanlist[handle]->list[loop];
  425. X            searcher = *retlist;
  426. X            while (searcher->next != (HASHIT *) NULL)
  427. X            {
  428. X                searcher = searcher->next;
  429. X            }
  430. X            for (; loop < HASHSIZE; loop++)
  431. X            {
  432. X                if (((HASHIT *) NULL) == hanlist[handle]->list[loop])
  433. X                {
  434. X                    continue;
  435. X                }
  436. X                searcher->next = hanlist[handle]->list[loop];
  437. X                while (searcher->next != (HASHIT *) NULL)
  438. X                {
  439. X                    searcher = searcher->next;
  440. X                }
  441. X            }
  442. X        }
  443. X
  444. X        /* Clean up rest. */
  445. X
  446. X        free(hanlist[handle]);
  447. X        hanlist[handle] = (HASHHAN *) NULL;
  448. X    }
  449. X
  450. X    /* Return OK. */
  451. X    return 0;
  452. X} /* end of col_close() */
  453. X
  454. END_OF_FILE
  455.   if test 13516 -ne `wc -c <'src/colors.c'`; then
  456.     echo shar: \"'src/colors.c'\" unpacked with wrong size!
  457.   fi
  458.   # end of 'src/colors.c'
  459. fi
  460. if test -f 'src/gifcheck.man' -a "${1}" != "-c" ; then 
  461.   echo shar: Will not clobber existing file \"'src/gifcheck.man'\"
  462. else
  463.   echo shar: Extracting \"'src/gifcheck.man'\" \(38943 characters\)
  464.   sed "s/^X//" >'src/gifcheck.man' <<'END_OF_FILE'
  465. X
  466. X
  467. X
  468. XGIFCHECK(1)              USER COMMANDS                GIFCHECK(1)
  469. X
  470. X
  471. X
  472. XNAME
  473. X     gifcheck - GIF file analysis and verification
  474. X
  475. XSYNOPSIS
  476. X     gifcheck [ -v ][ -H ][ -c ][ -dn ][ -en ][ -b ][ -r ][ -- ][
  477. X     -l ][ -f ][ -h ] target [ target... ]
  478. X
  479. XDESCRIPTION
  480. X     Gifcheck performs  complete  analysis  and  verification  of
  481. X     GIF-format  images and displays the information it finds. It
  482. X     can also be used in shell scripts to determine  whether  GIF
  483. X     files  are  valid, and if they need to be passed through the
  484. X     gifstrip program to remove excess characters.
  485. X
  486. XTARGETS
  487. X     A target is a filename or directory. Multiple targets may be
  488. X     specified  on  the command line. If a target is a directory,
  489. X     all files in that directory will be processed. If no targets
  490. X     are  specified  on the command line, a usage message will be
  491. X     printed.
  492. X
  493. XOPTIONS
  494. X     Options may not be combined. In the case of the -dn and  -en
  495. X     options,  there cannot be a space between the option and the
  496. X     argument to the option.
  497. X
  498. X     -v   Output is in a more verbose format. No additional  data
  499. X          is displayed.
  500. X
  501. X     -H   Plain  Text  Extensions  and  Comment  Extensions   are
  502. X          displayed in hex dump format instead of as text.
  503. X
  504. X     -c   All color tables in the file are dumped as decimal  RGB
  505. X          triplets of the form RRR/GGG/BBB.
  506. X
  507. X     -dn  Sets display warning level (see DIAGNOSTICS  below  for
  508. X          an explanation of the types):
  509. X
  510. X               -d0             display anomalies and violations
  511. X               -d1 (default)   display anomalies, violations,
  512. X                                and fascinatings
  513. X               -d2             display all (anomalies, violations,
  514. X                                fascinatings, nitpicks)
  515. X
  516. X     -en  Set exit warning level, at which processing of an image
  517. X          is  stopped  and  gifcheck skips to the next image (see
  518. X          DIAGNOSTICS below for an explanation of the types):
  519. X
  520. X               -e0             skip on anomalies only
  521. X               -e1 (default)   skip on anomalies and violations
  522. X               -e2             skip on anomalies, violations,
  523. X                                and fascinatings
  524. X
  525. X
  526. X
  527. XSun Release Last change: $Date: 1993/03/13 02:58:49 $           1
  528. X
  529. X
  530. X
  531. X
  532. X
  533. X
  534. XGIFCHECK(1)              USER COMMANDS                GIFCHECK(1)
  535. X
  536. X
  537. X
  538. X     -b   Operate in batch mode. All output is  suppressed.  This
  539. X          option  should  be  first  on the command line or other
  540. X          options may  generate  output  before  this  option  is
  541. X          found.  When in batch mode, gifcheck adjusts its status
  542. X          return to reflect the results of processing. The status
  543. X          may be:
  544. X
  545. X               0     the file is GIF format and did not need
  546. X                      stripping
  547. X               1     file is not GIF format
  548. X               2     an unexpected EOF was encountered
  549. X                      (usually indicates a corrupt file)
  550. X               3     any other error
  551. X               4     file is GIF format and needs stripping
  552. X               5     file is GIF format and needs to be
  553. X                      stripped with the -m option
  554. X
  555. X          Note that the status reflects the result  of  only  the
  556. X          last file processed.  Therefore, in batch mode only one
  557. X          file should be specified on the command line.
  558. X
  559. X     -r   Redirects error messages to stderr.
  560. X
  561. X     --   Read targets from stdin. The list of targets must  have
  562. X          only one target per line. Targets which are directories
  563. X          will be expanded as usual, but wildcards  will  not  be
  564. X          expanded.  Targets on the command line will be ignored.
  565. X          For use with the -f option of chils.
  566. X
  567. X     -l   Disables check for excess characters at  the  beginning
  568. X          of the file. By default, gifcheck will search through a
  569. X          file looking for the GIF signature if the file does not
  570. X          begin  with  that  signature.  This option will disable
  571. X          that search.
  572. X
  573. X     -f   Disables image decompression. This can be a  slow  pro-
  574. X          cess for large files.  However, an image cannot be com-
  575. X          pletely verified if it is not  decompressed,  and  some
  576. X          information  can  only be obtained by decompressing the
  577. X          image data.
  578. X
  579. X     -p   If gifcheck was compiled with the  PROGRESS_IND  option
  580. X          enabled,  it will by default print a progress indicator
  581. X          when decompressing an image. This option turns off  the
  582. X          progress  indicator. Note that this option is not valid
  583. X          if gifcheck was  not  complied  with  the  PROGRESS_IND
  584. X          option  enabled.  Check  the  help  (-h) to see if this
  585. X          option is listed and hence valid.
  586. X
  587. X     -h   Prints a usage message. No files are processed and  all
  588. X          other options are ignored.
  589. X
  590. X
  591. X
  592. X
  593. XSun Release Last change: $Date: 1993/03/13 02:58:49 $           2
  594. X
  595. X
  596. X
  597. X
  598. X
  599. X
  600. XGIFCHECK(1)              USER COMMANDS                GIFCHECK(1)
  601. X
  602. X
  603. X
  604. XOUTPUT
  605. X     Gifcheck recognizes eight different types of blocks within a
  606. X     GIF  file: file headers, images, and five types of extension
  607. X     block: generic extensions, Graphic Control Extensions, Plain
  608. X     Text  Extensions, Comment Extensions, and Application Exten-
  609. X     sions (the last four are found only in GIF89a-format files).
  610. X
  611. X     Data from each type of block is output in a  different  for-
  612. X     mat,  which may change according to the settings of the out-
  613. X     put format  options.  The  various  displays  are  explained
  614. X     below.
  615. X
  616. X  FILE HEADER
  617. X     The default file header display, with no options, looks like
  618. X     this:
  619. X
  620. X        Processing junk2/devil.gif...
  621. X        FILE junk2/devil.gif   GIF87a      11209 bytes
  622. X           logical screen:    640 x   480
  623. X           8 bits per color available on source
  624. X        GLOBAL COLOR TABLE:
  625. X           6 bits (64 colors)   bg index 0 (000/000/000)
  626. X           59 unique colors.
  627. X
  628. X     The first line gives the  filename,  in  case  an  error  is
  629. X     encountered   immediately.   The  second  line  repeats  the
  630. X     filename and displays the format  and  filesize.  The  third
  631. X     line  gives  the  size,  in pixels, of the logical screen on
  632. X     which all images in the file will be displayed.  The  fourth
  633. X     line displays how many bits per color (R,G,B) were available
  634. X     on the machine on which the file was created. This value  is
  635. X     frequently set incorrectly and may generally be ignored.
  636. X
  637. X     The global color table, if  present,  has  a  subsection  to
  638. X     itself.  The sixth line indicates how large the global color
  639. X     table is. It also displays the background  color  index  and
  640. X     the  RGB  value corresponding to that index. While the back-
  641. X     ground color index is  actually  part  of  the  file  header
  642. X     proper,  it  is  meaningless  unless a global color table is
  643. X     present, so it is displayed in the global color  table  sec-
  644. X     tion.  If  the file is a GIF89a-format image, this line also
  645. X     indicates whether the global color table is sorted. Finally,
  646. X     the  seventh  line  indicates  how  many  unique  colors are
  647. X     present in the global color table.
  648. X
  649. X     If no global color table is present, a line stating this  is
  650. X     displayed instead.
  651. X
  652. X     If the -v option is in effect, the file header display looks
  653. X     like this:
  654. X
  655. X
  656. X
  657. X
  658. X
  659. XSun Release Last change: $Date: 1993/03/13 02:58:49 $           3
  660. X
  661. X
  662. X
  663. X
  664. X
  665. X
  666. XGIFCHECK(1)              USER COMMANDS                GIFCHECK(1)
  667. X
  668. X
  669. X
  670. X        Processing junk2/devil.gif...
  671. X        FILE junk2/devil.gif is GIF version GIF87a:
  672. X           file size (bytes):    11209
  673. X           logical screen size (pixels, width x height):   640 x   480
  674. X           8 bits per color available on source
  675. X           This file has a global color table.
  676. X        GLOBAL COLOR TABLE:
  677. X           6 bits per index for a table size of 64
  678. X           background index 0, RGB value 000/000/000
  679. X           59 unique colors.
  680. X
  681. X     The data displayed is the same, but more explanatory text is
  682. X     included.
  683. X
  684. X     If the -c option is in effect, the file header display looks
  685. X     like this:
  686. X
  687. X        Processing junk2/devil.gif...
  688. X        FILE junk2/devil.gif   GIF87a      11209 bytes
  689. X           logical screen:    640 x   480
  690. X           8 bits per color available on source
  691. X        GLOBAL COLOR TABLE:
  692. X           6 bits (64 colors)   bg index 0 (000/000/000)
  693. X           59 unique colors.
  694. X           000/000/000   255/197/197   255/156/156   255/189/189   255/131/131
  695. X           255/180/180   255/148/148   255/205/205   041/000/000   255/123/123
  696. X           255/172/172   255/074/074   082/000/000   255/057/057   255/090/090
  697. X           255/115/115   008/000/000   049/000/000   255/164/164   024/000/000
  698. X           131/000/000   255/049/049   074/000/000   255/082/082   123/000/000
  699. X           255/139/139   065/000/000   148/000/000   255/041/041   016/000/000
  700. X           255/016/016   230/024/024   255/032/032   115/000/000   164/000/000
  701. X           057/000/000   255/106/106   106/000/000   156/000/000   255/008/008
  702. X           032/000/000   255/065/065   139/000/000   180/000/000   255/024/024
  703. X           098/000/000   090/000/000   238/000/000   189/000/000   230/000/000
  704. X           213/000/000   172/000/000   205/000/000   197/000/000   246/000/000
  705. X           222/000/000   230/016/016   255/000/000   255/098/098   000/000/000
  706. X           000/000/000   000/000/000   000/000/000   000/000/000
  707. X
  708. X     The standard or verbose display is followed by a listing, in
  709. X     decimal,  of  the  raw  RGB values found in the global color
  710. X     map.
  711. X
  712. X  IMAGE
  713. X     The default image display, with no options, looks like this:
  714. X
  715. X        IMAGE 1:
  716. X           size   640 x   480   corner     0,     0   sequentially
  717. X           This image uses the global color table (no local color table).
  718. X           IMAGE DATA FOR IMAGE 1:
  719. X           code size 6 bits
  720. X           Reached end of codes in block 42
  721. X           totals: 7906 codes packed into 10948 bytes in 43 blocks
  722. X
  723. X
  724. X
  725. XSun Release Last change: $Date: 1993/03/13 02:58:49 $           4
  726. X
  727. X
  728. X
  729. X
  730. X
  731. X
  732. XGIFCHECK(1)              USER COMMANDS                GIFCHECK(1)
  733. X
  734. X
  735. X
  736. X                307200 pixels extracted
  737. X                code table cleared 2 times
  738. X                compressed data is 4% of the size of uncompressed image
  739. X                59 colors referenced (59 unique)
  740. X
  741. X     Each image in the file is numbered by gifcheck starting at 1
  742. X     and  has a section to itself. The first line gives the image
  743. X     number. The second line indicates the size,  in  pixels,  of
  744. X     the  image;  the  location,  in  pixels,  of  the upper left
  745. X     corner, and how  the  image  is  stored  ("sequentially"  or
  746. X     "interlaced").
  747. X
  748. X     The third line indicates whether  there  is  a  local  color
  749. X     table,  and whether the image uses the global or local color
  750. X     table. If there is a local color table, the  third  line  is
  751. X     followed  by  a  color  table display similar to the one for
  752. X     global color tables, including a dump of the raw RGB  values
  753. X     if  the  -c  color dump option is in effect. Very few images
  754. X     have local color tables.
  755. X
  756. X     Image data is stored compressed, and the compressed data  is
  757. X     further  broken  up  into  blocks  (which  are  numbered  by
  758. X     gifcheck starting at  0).   The  fifth  line  indicates  the
  759. X     minimum  code  size  for the image. The sixth line indicates
  760. X     the block in which the  end-of-information  (EOI)  code  was
  761. X     encountered.  The seventh line indicates the number of codes
  762. X     extracted, the number of bytes which those  codes  occupied,
  763. X     and  how  many  blocks  those  bytes  were divided into. The
  764. X     eighth line indicates how many pixels  were  generated  when
  765. X     the  codes  were  decompressed, and the ninth line indicates
  766. X     how many times the table-clear code was encountered.
  767. X
  768. X     The tenth line indicates the size of the compressed data  as
  769. X     a percentage of the size of the uncompressed image. The size
  770. X     of the compressed data is the size of  the  data  only,  not
  771. X     including  block  headers,  image headers, or any other non-
  772. X     image data, so the compression ratio is accurate.  The  size
  773. X     of  the  uncompressed image is calculated by multiplying the
  774. X     height and the width to get the total number  of  pixels  in
  775. X     the  image,  then multiplying by the number of bits required
  776. X     to represent the global or local color table,  depending  on
  777. X     which  one  is used by the image. Finally, the eleventh line
  778. X     indicates how many colors were referenced by the image data,
  779. X     and how many of the colors referenced are unique.
  780. X
  781. X     If the -v option is in effect, the image display looks  like
  782. X     this:
  783. X
  784. X        IMAGE 1:
  785. X           image size (pixels, width x height):   640 x   480
  786. X           image upper left corner (column, row):     0,     0
  787. X           image is stored sequentially
  788. X
  789. X
  790. X
  791. XSun Release Last change: $Date: 1993/03/13 02:58:49 $           5
  792. X
  793. X
  794. X
  795. X
  796. X
  797. X
  798. XGIFCHECK(1)              USER COMMANDS                GIFCHECK(1)
  799. X
  800. X
  801. X
  802. X           This image uses the global color table (no local color table).
  803. X           IMAGE DATA FOR IMAGE 1:
  804. X           code size 6 bits
  805. X           Reached end of codes in block 42
  806. X           totals: 7906 codes packed into 10948 bytes in 43 blocks
  807. X                307200 pixels extracted
  808. X                code table cleared 2 times
  809. X                compressed data is 4% of the size of uncompressed image
  810. X                59 colors referenced (59 unique)
  811. X
  812. X     The data displayed is the same, but more explanatory text is
  813. X     included.
  814. X
  815. X     If the -f option is in effect, the image display looks  like
  816. X     this:
  817. X
  818. X        IMAGE 1:
  819. X           size   640 x   480   corner     0,     0   sequentially
  820. X           This image uses the global color table (no local color table).
  821. X           IMAGE DATA FOR IMAGE 1:
  822. X           code size 6 bits
  823. X           totals: 10948 bytes in 43 blocks
  824. X                compressed data is 4% of the size of uncompressed image
  825. X
  826. X     Since the compressed image data is  not  decompressed  under
  827. X     this option, less information is available.
  828. X
  829. X  GENERIC EXTENSIONS
  830. X     If the format is GIF87a, or the format  is  GIF89a  but  the
  831. X     type  identifier is not one of the four dedicated types, the
  832. X     "generic extension" format is used. It looks like this:
  833. X
  834. X        GENERIC EXTENSION BLOCK 1:
  835. X           extension block type 255
  836. X           BLOCK 0 (11 bytes):
  837. X        G 47    I 49    F 46    L 4C    I 49    T 54    E 45      20
  838. X          20      20      20
  839. X           BLOCK 1 (6 bytes):
  840. X          01    ) 29    p 70      0E      02      00
  841. X           totals: 17 bytes of data in 2 blocks
  842. X
  843. X     Generic  extension  blocks  are  numbered  sequentially   by
  844. X     gifcheck  starting at 1. The first line indicates that it is
  845. X     a generic extension block and gives the sequence number. The
  846. X     second  line shows the type identifier value. The next lines
  847. X     display the data in hex dump format (generic extensions  are
  848. X     always  displayed in hex dump format, regardless of the set-
  849. X     ting of the -H option). Each data block is numbered  sequen-
  850. X     tially  by  gifcheck  starting  at 0. A line giving the data
  851. X     block number and the number of bytes in the block is  shown.
  852. X     Then  the  data  bytes  themselves  are displayed, eight per
  853. X     line. If the byte is a printable character, the character is
  854. X
  855. X
  856. X
  857. XSun Release Last change: $Date: 1993/03/13 02:58:49 $           6
  858. X
  859. X
  860. X
  861. X
  862. X
  863. X
  864. XGIFCHECK(1)              USER COMMANDS                GIFCHECK(1)
  865. X
  866. X
  867. X
  868. X     printed,  followed by the hex value of the byte; otherwise a
  869. X     space is printed, followed by  the  hex  value.  Finally,  a
  870. X     totals  line is printed, indicating the total number of data
  871. X     bytes and the total number of data blocks.
  872. X
  873. X     The -v option has no effect on generic extension displays.
  874. X
  875. X  GRAPHIC CONTROL EXTENSION
  876. X     Graphic Control Extensions (GCEs)  are  one  of  the  GIF89a
  877. X     dedicated   extension  types.  When  encountered,  they  are
  878. X     displayed like this:
  879. X
  880. X        GRAPHIC CONTROL EXTENSION BLOCK 1:
  881. X           Disposal method: 0 (none)
  882. X           User input is not expected
  883. X           Transparency enabled (index 3)
  884. X           No delay time specified
  885. X
  886. X     GCEs are numbered sequentially (by gifcheck). The first line
  887. X     indicates  that  it  is a GCE and gives the sequence number.
  888. X     The second line shows the disposal method (which applies  to
  889. X     the next graphic -- i.e. image or Plain Text Extension -- in
  890. X     the file). This can be: "none", "leave in  place",  "restore
  891. X     to background", or "restore to previous".
  892. X
  893. X     The third line indicates  whether  user  input  is  expected
  894. X     before  the  next graphic will be displayed. The fourth line
  895. X     indicates whether a transparency color  index  (which  indi-
  896. X     cates  that  pixels  of  the  given color should be rendered
  897. X     "transparent" -- i.e., not drawn) has been specified, and if
  898. X     so,  what the transparency index is. The last line indicates
  899. X     whether a delay time  (delay  before  the  next  graphic  is
  900. X     displayed)  has  been  specified,  and  if so what the delay
  901. X     value is.
  902. X
  903. X     The -v option has no effect on GCE displays.
  904. X
  905. X  PLAIN TEXT EXTENSION
  906. X     Plain Text Extensions (PTEs) are one of the GIF89a dedicated
  907. X     extension  types.  When encountered, they are displayed like
  908. X     this:
  909. X
  910. X        PLAIN TEXT EXTENSION BLOCK 1:
  911. X           char cell   8 x  28, grid  96( 12) x  28(  1) at     0,   112
  912. X           Foreground color index 0 (RGB 016/016/014)
  913. X           Background color index 3 (RGB 113/110/232)
  914. X           START TEXT (12 characters):
  915. X         Cass Berry
  916. X           END TEXT.
  917. X
  918. X     PTEs are numbered sequentially by gifcheck  starting  at  1.
  919. X     The  first  line  indicates  that  it is a PTE and gives the
  920. X
  921. X
  922. X
  923. XSun Release Last change: $Date: 1993/03/13 02:58:49 $           7
  924. X
  925. X
  926. X
  927. X
  928. X
  929. X
  930. XGIFCHECK(1)              USER COMMANDS                GIFCHECK(1)
  931. X
  932. X
  933. X
  934. X     sequence number. The second line  shows:  the  size  of  the
  935. X     character  cell,  in pixels; the size of the character grid,
  936. X     in pixels and cells (cells in parentheses); and the location
  937. X     of  the  upper left corner of the grid. The third line shows
  938. X     the index and RGB values of the foreground text  color,  and
  939. X     the fourth line shows the same for the background color.
  940. X
  941. X     The fifth line indicates the start of the text, and how many
  942. X     characters  of  text are present. It is followed by the text
  943. X     itself, which is in turn followed by an "END  TEXT."  marker
  944. X     on the next line.
  945. X
  946. X     If the -v option is in effect, PTEs are displayed like this:
  947. X
  948. X        PLAIN TEXT EXTENSION BLOCK 1:
  949. X           Character cell grid upper left corner (column, row):     0,   112
  950. X           Character cell size (pixels, width x height):   8 x  28
  951. X           Character grid size (pixels, width x height):  96 x  28
  952. X           Character grid size (chars, width x height):  12 x   1
  953. X           Foreground color index 0 (RGB 016/016/014)
  954. X           Background color index 3 (RGB 113/110/232)
  955. X           START TEXT (12 characters):
  956. X         Cass Berry
  957. X           END TEXT.
  958. X
  959. X     The same information is displayed, but more explanatory text
  960. X     is included.
  961. X
  962. X     If the -H option is in effect, the text is displayed in  hex
  963. X     dump format, like this:
  964. X
  965. X        PLAIN TEXT EXTENSION BLOCK 1:
  966. X           char cell   8 x  28, grid  96( 12) x  28(  1) at     0,   112
  967. X           Foreground color index 0 (RGB 016/016/014)
  968. X           Background color index 3 (RGB 113/110/232)
  969. X           START TEXT (12 characters):
  970. X           LINE 1:
  971. X          20    C 43    a 61    s 73    s 73      20    B 42    e 65
  972. X        r 72    r 72    y 79      20
  973. X           END TEXT.
  974. X
  975. X     Instead of simply displaying the  text,  each  character  is
  976. X     displayed individually, followed by its hex value.
  977. X
  978. X  COMMENT EXTENSION
  979. X     Comment Extensions are one of the GIF89a dedicated extension
  980. X     types.  When encountered, they are displayed like this:
  981. X
  982. X        COMMENT EXTENSION BLOCK 1:
  983. X           START TEXT (161 characters):
  984. X        +-------------------------------------------------+
  985. X        | Multi-image GIF89a created with CompuMake Tools |
  986. X
  987. X
  988. X
  989. XSun Release Last change: $Date: 1993/03/13 02:58:49 $           8
  990. X
  991. X
  992. X
  993. X
  994. X
  995. X
  996. XGIFCHECK(1)              USER COMMANDS                GIFCHECK(1)
  997. X
  998. X
  999. X
  1000. X        +-------------------------------------------------+
  1001. X
  1002. X           END TEXT.
  1003. X           0 unprintable characters.
  1004. X
  1005. X     Comment Extensions are  numbered  sequentially  by  gifcheck
  1006. X     starting at 1. The first line indicates that it is a Comment
  1007. X     Extension and gives the sequence  number.  The  second  line
  1008. X     indicates  the  start of the text and how many characters of
  1009. X     text are present. It is followed by the text  itself,  which
  1010. X     is  in  turn  followed  by an "END TEXT." marker on the next
  1011. X     line. The last line indicates how many  unprintable  charac-
  1012. X     ters were found in the text.
  1013. X
  1014. X     The -v option has no effect on Comment Extension displays.
  1015. X
  1016. X     If the -H option is in effect, the text is displayed in  hex
  1017. X     dump format, like this:
  1018. X
  1019. X        COMMENT EXTENSION BLOCK 1:
  1020. X           START TEXT (161 characters):
  1021. X        + 2B    - 2D    - 2D    - 2D    - 2D    - 2D    - 2D    - 2D
  1022. X        - 2D    - 2D    - 2D    - 2D    - 2D    - 2D    - 2D    - 2D
  1023. X        - 2D    - 2D    - 2D    - 2D    - 2D    - 2D    - 2D    - 2D
  1024. X        - 2D    - 2D    - 2D    - 2D    - 2D    - 2D    - 2D    - 2D
  1025. X        - 2D    - 2D    - 2D    - 2D    - 2D    - 2D    - 2D    - 2D
  1026. X        - 2D    - 2D    - 2D    - 2D    - 2D    - 2D    - 2D    - 2D
  1027. X        - 2D    - 2D    + 2B      0D      0A    | 7C      20    M 4D
  1028. X        u 75    l 6C    t 74    i 69    - 2D    i 69    m 6D    a 61
  1029. X        g 67    e 65      20    G 47    I 49    F 46    8 38    9 39
  1030. X        a 61      20    c 63    r 72    e 65    a 61    t 74    e 65
  1031. X        d 64      20    w 77    i 69    t 74    h 68      20    C 43
  1032. X        o 6F    m 6D    p 70    u 75    M 4D    a 61    k 6B    e 65
  1033. X          20    T 54    o 6F    o 6F    l 6C    s 73      20    | 7C
  1034. X          0D      0A    + 2B    - 2D    - 2D    - 2D    - 2D    - 2D
  1035. X        - 2D    - 2D    - 2D    - 2D    - 2D    - 2D    - 2D    - 2D
  1036. X        - 2D    - 2D    - 2D    - 2D    - 2D    - 2D    - 2D    - 2D
  1037. X        - 2D    - 2D    - 2D    - 2D    - 2D    - 2D    - 2D    - 2D
  1038. X        - 2D    - 2D    - 2D    - 2D    - 2D    - 2D    - 2D    - 2D
  1039. X        - 2D    - 2D    - 2D    - 2D    - 2D    - 2D    - 2D    - 2D
  1040. X        - 2D    - 2D    - 2D    - 2D    + 2B      0D      0A      0D
  1041. X          0A
  1042. X           END TEXT.
  1043. X           0 unprintable characters.
  1044. X
  1045. X     Instead of simply displaying the  text,  each  character  is
  1046. X     displayed individually, followed by its hex value.
  1047. X
  1048. X  APPLICATION EXTENSION
  1049. X     Application Extensions  are  one  of  the  GIF89a  dedicated
  1050. X     extension  types.  When encountered, they are displayed like
  1051. X     this:
  1052. X
  1053. X
  1054. X
  1055. XSun Release Last change: $Date: 1993/03/13 02:58:49 $           9
  1056. X
  1057. X
  1058. X
  1059. X
  1060. X
  1061. X
  1062. XGIFCHECK(1)              USER COMMANDS                GIFCHECK(1)
  1063. X
  1064. X
  1065. X
  1066. X        APPLICATION EXTENSION BLOCK 1:
  1067. X           application identifier:
  1068. X        f 66    r 72    a 61    c 63    t 74    i 69    n 6E    t 74
  1069. X           application authentication code:
  1070. X        0 30    0 30    1 31
  1071. X           246 bytes of application data.
  1072. X        F 46    r 72    a 61    c 63    t 74    a 61    l 6C      00
  1073. X          96      00      07      00      00      00      00    h 68
  1074. X          D8      FB      0C    @ 40      00      00      00      20
  1075. X          0B      FF      0C    @ 40      00      00      00      00
  1076. X          00      E9    I 49    ? 3F      00      00      00      00
  1077. X          F0    = 3D      89    ? 3F      00      00      00      00
  1078. X          00      00      00      00      00      00      00      00
  1079. X          00      00      00      00      00      00      00      00
  1080. X          00      00      00      00      1B      00      80      02
  1081. X          E0      01      00      01      04      00      00      00
  1082. X          00      00      00      00      00      00      00      00
  1083. X          00      00      00      00      00      00      00      00
  1084. X          00      00      00      00      00      00      FF      FF
  1085. X          01      00      01      00      00      00      00      00
  1086. X          00      00      00      00      00      00      00      00
  1087. X          00      00      00      00      E7      03      00      00
  1088. X        Z 5A      00      09      01      00      00    x 78      00
  1089. X          8C      00    ( 28      00      00      00      02      00
  1090. X        n 6E      00      00      00      00      00      01      00
  1091. X          FF      FF      01      00      00      00      14      00
  1092. X          00      00      00      00      04      00      00      00
  1093. X          00      00      04      00    P 50      00    d 64      00
  1094. X          00      00      00      00      00      00      FF      FF
  1095. X          00      00      00    h 68      D8      FB      0C    @ 40
  1096. X          00      00      00      00      00      E9    I 49    ? 3F
  1097. X        g 67      00      04      00      06      01      00      00
  1098. X          00      00      00      00      00      00      D8      A7
  1099. X          00      00      00      06      02      03      00      00
  1100. X          00      00      00      00      00      00      00      00
  1101. X          00      00      00      00      00      00      00      00
  1102. X          01      00      00      00      00      00
  1103. X
  1104. X     Application Extensions are numbered sequentially by gifcheck
  1105. X     starting at 1. The first line indicates that it is an Appli-
  1106. X     cation Extension and gives the sequence number.  The  second
  1107. X     line introduces the eight-byte application identifier and is
  1108. X     followed on the third line  by  the  application  identifier
  1109. X     itself,  in  hex dump format. The fourth line introduces the
  1110. X     three-byte application authentication code and  is  followed
  1111. X     on  the  fifth  line  by the application authentication code
  1112. X     itself, in hex dump format.  The sixth  line  indicates  how
  1113. X     many  bytes of application data are present, and is followed
  1114. X     by the application data itself in hex dump format. All  data
  1115. X     in  Application  Extensions  is always displayed in hex dump
  1116. X     format, regardless of the setting of the -H option.
  1117. X
  1118. X
  1119. X
  1120. X
  1121. XSun Release Last change: $Date: 1993/03/13 02:58:49 $          10
  1122. X
  1123. X
  1124. X
  1125. X
  1126. X
  1127. X
  1128. XGIFCHECK(1)              USER COMMANDS                GIFCHECK(1)
  1129. X
  1130. X
  1131. X
  1132. X     The  -v  option  has  no  effect  on  Application  Extension
  1133. X     displays.
  1134. X
  1135. X  TERMINATOR
  1136. X     When the  GIF  terminator  block  is  encountered,  gifcheck
  1137. X     prints this line:
  1138. X
  1139. X        GIF TERMINATOR
  1140. X
  1141. XDIAGNOSTICS
  1142. X     Gifcheck can produce a variety of diagnostic messages.  Some
  1143. X     indicate  problems within the GIF file. Others indicate mal-
  1144. X     functions of gifcheck or the  computer.  Messages  beginning
  1145. X     with  "ANOMALY",  "VIOLATION",  "FASCINATING", and "NITPICK"
  1146. X     indicate problems within the GIF file.   Messages  beginning
  1147. X     "FATAL  ERROR", "ERROR", or "WARNING" indicate malfunctions.
  1148. X     Messages beginning "STRIP" indicate that the file should  be
  1149. X     processed  by  the gifstrip program to remove excess charac-
  1150. X     ters.
  1151. X
  1152. X  ANOMALIES
  1153. X     Anomalies are radical violations of the  GIF  specification.
  1154. X     Anomalies  may  be caused by massive corruption of the file,
  1155. X     to the extent that gifcheck cannot determine how to  proceed
  1156. X     with  processing  of  the file, or by individual values that
  1157. X     make no sense. In either case, an image with anomalies  will
  1158. X     probably  be  rejected  by  most  GIF viewers. Anomalies are
  1159. X     always displayed and always cause gifcheck to  skip  immedi-
  1160. X     ately to the next file to be processed.
  1161. X
  1162. X     The various anomalies that gifcheck can detect are explained
  1163. X     below.
  1164. X
  1165. X     ANOMALY: end of data reached before end of codes
  1166. X          gifcheck reached the  end  of  the  packed  image  data
  1167. X          without  encountering an End-of-Information code, which
  1168. X          signals the end of the image.
  1169. X
  1170. X     ANOMALY: decompression error in block xxx at offset yyy
  1171. X          gifcheck found a bad code in  the  packed  image  data.
  1172. X          This  indicates  that  the file has been corrupted, and
  1173. X          most likely the rest of the file is trash.
  1174. X
  1175. X     ANOMALY: foreground color index  off  end  of  global  color
  1176. X              table
  1177. X          The color index  specified  for  the  foreground  in  a
  1178. X          GIF89a Plain Text Extension is invalid (PTEs always use
  1179. X          the global color table).
  1180. X
  1181. X     ANOMALY: background color index  off  end  of  global  color
  1182. X              table
  1183. X
  1184. X
  1185. X
  1186. X
  1187. XSun Release Last change: $Date: 1993/03/13 02:58:49 $          11
  1188. X
  1189. X
  1190. X
  1191. X
  1192. X
  1193. X
  1194. XGIFCHECK(1)              USER COMMANDS                GIFCHECK(1)
  1195. X
  1196. X
  1197. X
  1198. X          The color index  specified  for  the  background  in  a
  1199. X          GIF89a Plain Text Extension is invalid (PTEs always use
  1200. X          the global color table).
  1201. X
  1202. X     ANOMALY: an undefined disposal method (x) is given
  1203. X          The value in the disposal method of a  Graphic  Control
  1204. X          Extension is undefined.
  1205. X
  1206. X     ANOMALY: a ... cannot follow a ...
  1207. X          Where "..." is a block type. The  GIF89a  specification
  1208. X          includes  a  grammar  which  indicates  which  types of
  1209. X          blocks can follow which other types of blocks  (in  the
  1210. X          simpler  GIF87a specification, there was no need). This
  1211. X          grammar has been violated.
  1212. X
  1213. X  VIOLATIONS
  1214. X     Violations are major violations of  the  GIF  specification.
  1215. X     Violations  may  be  caused  by corruption of the file or by
  1216. X     individual values that make no sense.  In  either  case,  an
  1217. X     image  with  violations  may be rejected by some viewers and
  1218. X     displayed with difficulty by others. Violations  are  always
  1219. X     displayed, and by default cause gifcheck to skip immediately
  1220. X     to the next file to be processed.
  1221. X
  1222. X     The  various  violations  that  gifcheck  can   detect   are
  1223. X     explained below.
  1224. X
  1225. X     VIOLATION: image does not fit on logical screen
  1226. X          Either the size of the image given in the image  header
  1227. X          is  greater  in one or both dimensions than the size of
  1228. X          the logical screen given in the  file  header,  or  the
  1229. X          position  of the image given in the image header causes
  1230. X          parts of the image to extend beyond the  boundaries  of
  1231. X          the logical screen.
  1232. X
  1233. X     VIOLATION: bad transparency index (x)
  1234. X          If processing a Plain Text  Extension,  indicates  that
  1235. X          the   transparency  index  specified  by  a  preceeding
  1236. X          Graphic Control Extension is off the end of the  global
  1237. X          color  table  (PTEs always use the global color table).
  1238. X          If processing an image, indicates that the transparency
  1239. X          index  is  off  the  end  of either the global or local
  1240. X          color table, depending on which one the image uses.
  1241. X
  1242. X     VIOLATION: character grid does not fit on logical screen
  1243. X          Either the size of the  character  grid  given  in  the
  1244. X          Plain  Text  Extension is greater in one or both dimen-
  1245. X          sions than the size of the logical screen given in  the
  1246. X          file  header,  or  the  position  of the character grid
  1247. X          causes parts of it to extend beyond the  boundaries  of
  1248. X          the logical screen.
  1249. X
  1250. X
  1251. X
  1252. X
  1253. XSun Release Last change: $Date: 1993/03/13 02:58:49 $          12
  1254. X
  1255. X
  1256. X
  1257. X
  1258. X
  1259. X
  1260. XGIFCHECK(1)              USER COMMANDS                GIFCHECK(1)
  1261. X
  1262. X
  1263. X
  1264. X     VIOLATION: text is too long to fit into character grid
  1265. X          The text given in the  Plain  Text  Extension  contains
  1266. X          more  characters  than there are character cells in the
  1267. X          character grid.
  1268. X
  1269. X     VIOLATION: xxx garbage characters found between blocks
  1270. X          There should be no garbage characters  between  blocks.
  1271. X          While  this  can  theoretically  be solved by using the
  1272. X          gifstrip program, it probably indicates that  the  file
  1273. X          has been corrupted.
  1274. X
  1275. X  FASCINATINGS
  1276. X     Fascinatings are not always violations of the GIF specifica-
  1277. X     tion.    Fascinatings  are  unusual  conditions  which  most
  1278. X     viewers can cope with, but are still worthy  of  note.  Fas-
  1279. X     cinatings  are  displayed  by default, and by default do NOT
  1280. X     cause gifcheck to skip.
  1281. X
  1282. X     The  various  fascinatings  that  gifcheck  can  detect  are
  1283. X     explained below.
  1284. X
  1285. X     FASCINATING: this file does not contain a global color table
  1286. X          The GIF specification allows for files  without  global
  1287. X          color tables; they are to be displayed using the global
  1288. X          color table from a previous file, or  a  default  table
  1289. X          chosen  by the viewer if no previous global color table
  1290. X          is available. Files without  global  color  tables  are
  1291. X          extremely rare. This message is displayed when an image
  1292. X          which uses the global color table is encountered  in  a
  1293. X          file which has none.
  1294. X
  1295. X     FASCINATING: xxx extra blocks on end of image
  1296. X          The packed image data continued for one or more  blocks
  1297. X          after  the  block in which the End-of-Information (EOI)
  1298. X          code was found. While this condition is suspicious, the
  1299. X          data  before  the EOI decompressed correctly (otherwise
  1300. X          an ANOMALY would have occurred), so there's no concrete
  1301. X          evidence that the image is bad.
  1302. X
  1303. X     FASCINATING: too few pixels extracted (xxx lines found,  yyy
  1304. X                  pixels missing)
  1305. X          When the End-of-Information code was  encountered,  too
  1306. X          few  pixels  had been extracted to fill the image (e.g,
  1307. X          for a 320 by 200 image, which should have  64,000  pix-
  1308. X          els, only 63,999 were extracted). Typically only one or
  1309. X          two are missing. Viewers seem to cope with this  condi-
  1310. X          tion OK.
  1311. X
  1312. X     FASCINATING: too many pixels extracted (xxx extra)
  1313. X          When the End-of-Information code was encountered,  more
  1314. X          pixels  than  necessary had been extracted (e.g., for a
  1315. X          320 by 200 image,  which  should  have  64,000  pixels,
  1316. X
  1317. X
  1318. X
  1319. XSun Release Last change: $Date: 1993/03/13 02:58:49 $          13
  1320. X
  1321. X
  1322. X
  1323. X
  1324. X
  1325. X
  1326. XGIFCHECK(1)              USER COMMANDS                GIFCHECK(1)
  1327. X
  1328. X
  1329. X
  1330. X          64,001  were  extracted).  Typically  only  one  or two
  1331. X          extras are present. Viewers seem to cope with this con-
  1332. X          dition OK.
  1333. X
  1334. X     FASCINATING: code table never cleared
  1335. X          While this is technically OK, it is  recommended  prac-
  1336. X          tice to clear the decompression code table (via a clear
  1337. X          code in the compressed image data) immediately  at  the
  1338. X          beginning  of  the  image.  If the code table was never
  1339. X          cleared, this initial clear never occurred.
  1340. X
  1341. X     FASCINATING: this file has no Global  Color  Table  (GCT  is
  1342. X                  used by PTE)
  1343. X          The GIF specification allows for files  without  global
  1344. X          color tables; they are to be displayed using the global
  1345. X          color table from a previous file, or  a  default  table
  1346. X          chosen  by the viewer if no previous global color table
  1347. X          is available. Files without  global  color  tables  are
  1348. X          extremely  rare. This message is displayed when a Plain
  1349. X          Text Extension (PTEs always use the global color table)
  1350. X          is  encountered  in  a  file  which has no global color
  1351. X          table.
  1352. X
  1353. X     FASCINATING: transparency index does not match either  fore-
  1354. X                  ground or background
  1355. X          This message is displayed when processing a Plain  Text
  1356. X          Extension  and  the  transparency  index specified by a
  1357. X          preceeding Graphic Control  Extension  does  not  match
  1358. X          either  the  foreground or the background color indices
  1359. X          of the PTE. This renders the transparency  index  mean-
  1360. X          ingless,  since  it  only  applies  to the next graphic
  1361. X          (image or PTE) following the GCE.  Nothing  is  techni-
  1362. X          cally wrong, but it's weird.
  1363. X
  1364. X  NITPICKS
  1365. X     Nitpicks are minor technical violations of the GIF  specifi-
  1366. X     cation.   Some  are  very  common, and they should not cause
  1367. X     problems when viewing the file. Nitpicks are by default  NOT
  1368. X     displayed, and never cause gifcheck to skip.
  1369. X
  1370. X     The various nitpicks that gifcheck can detect are  explained
  1371. X     below.   Most  of these messages are self-explanatory, so no
  1372. X     detailed explanation is given.
  1373. X
  1374. X     NITPICK: byte 6 of the logical screen descriptor should be 0
  1375. X              for GIF87A
  1376. X
  1377. X     NITPICK: bit 3, byte 4 of logical screen  descriptor  should
  1378. X              be 0 for GIF87A
  1379. X
  1380. X     NITPICK: bits 3 and 4, byte 9 of image descriptor should  be
  1381. X              0
  1382. X
  1383. X
  1384. X
  1385. XSun Release Last change: $Date: 1993/03/13 02:58:49 $          14
  1386. X
  1387. X
  1388. X
  1389. X
  1390. X
  1391. X
  1392. XGIFCHECK(1)              USER COMMANDS                GIFCHECK(1)
  1393. X
  1394. X
  1395. X
  1396. X     NITPICK: bit 5, byte 9 of image descriptor should be  0  for
  1397. X              GIF87A
  1398. X
  1399. X     NITPICK: bits 5-7,  byte  1  of  graphic  control  extension
  1400. X              should be 0
  1401. X
  1402. X     NITPICK: local color table size is nonzero
  1403. X          The image does not have a local color  table,  but  the
  1404. X          local color table size is nonzero.
  1405. X
  1406. X     NITPICK: character grid not an integral number of  character
  1407. X              cells wide
  1408. X          The horizontal size of the character grid  in  a  Plain
  1409. X          Text  Extension is not evenly divisible by the horizon-
  1410. X          tal size of a character cell.
  1411. X
  1412. X     NITPICK: character grid not an integral number of  character
  1413. X              cells high
  1414. X          The vertical size of the character grid in a Plain Text
  1415. X          Extension  is not evenly divisible by the vertical size
  1416. X          of a character cell.
  1417. X
  1418. X     NITPICK: xxx unprintable characters in text
  1419. X          Plain Text Extensions are supposed to contain only  "7-
  1420. X          bit printable ASCII characters".
  1421. X
  1422. X  MISCELLANEOUS
  1423. X     Gifcheck can also produce  messages  beginning  with  "FATAL
  1424. X     ERROR",  "ERROR",  "WARNING",  and  "STRIP". The first three
  1425. X     indicate malfunctions of gifcheck or the computer, and typi-
  1426. X     cally cause gifcheck to exit immediately. Messages beginning
  1427. X     with "STRIP" indicate that the file should be  processed  by
  1428. X     the  gifstrip  program  to remove excess characters, and are
  1429. X     simply for the user's information. Processing of the file is
  1430. X     not affected.
  1431. X
  1432. XCOPYRIGHT
  1433. X     Gifcheck is copyright 1993 by James W. Birdsall, all  rights
  1434. X     reserved.
  1435. X
  1436. X     The Graphics Interchange Format(c) is the Copyright property
  1437. X     of  CompuServe  Incorporated. GIF(sm) is a Service Mark pro-
  1438. X     perty of CompuServe Incorporated.
  1439. X
  1440. XAUTHOR
  1441. X     James W. Birdsall
  1442. X        support@picarefy.com
  1443. X        uunet!uw-coco!amc-gw!picarefy!support
  1444. X        CompuServe: 71261,1731
  1445. X        GEnie: J.BIRDSALL2
  1446. X
  1447. X
  1448. X
  1449. X
  1450. X
  1451. XSun Release Last change: $Date: 1993/03/13 02:58:49 $          15
  1452. X
  1453. X
  1454. X
  1455. X
  1456. X
  1457. X
  1458. XGIFCHECK(1)              USER COMMANDS                GIFCHECK(1)
  1459. X
  1460. X
  1461. X
  1462. XSEE ALSO
  1463. X     chils(1), gifstrip(1)
  1464. X
  1465. X
  1466. X
  1467. X
  1468. X
  1469. X
  1470. X
  1471. X
  1472. X
  1473. X
  1474. X
  1475. X
  1476. X
  1477. X
  1478. X
  1479. X
  1480. X
  1481. X
  1482. X
  1483. X
  1484. X
  1485. X
  1486. X
  1487. X
  1488. X
  1489. X
  1490. X
  1491. X
  1492. X
  1493. X
  1494. X
  1495. X
  1496. X
  1497. X
  1498. X
  1499. X
  1500. X
  1501. X
  1502. X
  1503. X
  1504. X
  1505. X
  1506. X
  1507. X
  1508. X
  1509. X
  1510. X
  1511. X
  1512. X
  1513. X
  1514. X
  1515. X
  1516. X
  1517. XSun Release Last change: $Date: 1993/03/13 02:58:49 $          16
  1518. X
  1519. X
  1520. X
  1521. END_OF_FILE
  1522.   if test 38943 -ne `wc -c <'src/gifcheck.man'`; then
  1523.     echo shar: \"'src/gifcheck.man'\" unpacked with wrong size!
  1524.   fi
  1525.   # end of 'src/gifcheck.man'
  1526. fi
  1527. echo shar: End of archive 8 \(of 18\).
  1528. cp /dev/null ark8isdone
  1529. MISSING=""
  1530. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ; do
  1531.     if test ! -f ark${I}isdone ; then
  1532.     MISSING="${MISSING} ${I}"
  1533.     fi
  1534. done
  1535. if test "${MISSING}" = "" ; then
  1536.     echo You have unpacked all 18 archives.
  1537.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1538. else
  1539.     echo You still must unpack the following archives:
  1540.     echo "        " ${MISSING}
  1541. fi
  1542. exit 0
  1543. exit 0 # Just in case...
  1544.