home *** CD-ROM | disk | FTP | other *** search
- /* derived from: zoofilt.c 1.8 88/01/30 23:47:05 */
-
- #ifndef LINT
- static char sccsid[]="@(#) $Id: zoofilt.c,v 1.5 91/07/09 01:54:15 dhesi Exp $";
- #endif
-
- /*
- (C) Copyright 1988 Rahul Dhesi -- All rights reserved
- (C) Copyright 1991 Rahul Dhesi -- All rights reserved
-
- Filter mode -- compress or decompress standard input and write
- to standard output.
- */
-
- #include "options.h"
-
- #ifdef FILTER
-
- #include "zooio.h"
- #include "errors.i"
- #include "zoofns.h"
-
- /* action */
- #define COMPRESS 0
- #define UNCOMPRESS 1
-
- #define FTAG ((unsigned int) 0x5a32) /* magic number */
-
- extern unsigned int crccode;
-
- int rdint PARMS((unsigned int *)); /* read an unsigned int */
- int wrint PARMS((unsigned int)); /* write an unsigned int */
-
- /* global variable used to pass two bytes (CRC value) back from lzd to here */
- unsigned int filt_lzd_word;
-
- void zoofilt (option)
- char *option;
- {
- int choice; /* what to do -- [de]compress */
- unsigned int filetag; /* tag stored in input */
- int stat1, stat2, stat3; /* status codes */
- int use_lzh = 1; /* use lzh instead OIS*/
- extern lzc(), lzh_encode(); /* possible encoders */
- extern lzd(), lzh_decode(); /* and decoders */
-
- while (*++option) {
- switch (*option) {
- case 'c': choice = COMPRESS; break;
- case 'u': choice = UNCOMPRESS; break;
- case 'H': use_lzh = 0; break; /*OIS*/
- case 'h': use_lzh = 1; break; /*OIS*/
- default:
- prterror ('f', inv_option, *option); /* fatal error -- abort */
- }
- }
-
- crccode = 0; /* needed whether compressing or uncompressing */
-
- switch (choice) {
- case COMPRESS:
- stat1 = wrint (FTAG);
- stat2 = (use_lzh ? lzh_encode : lzc) (STDIN, STDOUT);
- stat3 = wrint (crccode);
- if (stat1 == 0 && stat2 == 0 && stat3 == 0)
- zooexit (0);
- else {
- fprintf (stderr, "Zoo: FATAL: Compression error.\n");
- zooexit (1);
- }
- break;
- case UNCOMPRESS:
- stat1 = rdint (&filetag);
- if (stat1 != 0 || filetag != FTAG)
- zooexit (1);
- stat2 = (use_lzh ? lzh_decode : lzd) (STDIN, STDOUT);
- if (stat2 == 0 && filt_lzd_word == crccode)
- zooexit (0);
- else {
- fprintf (stderr, "Zoo: FATAL: Uncompression error.\n");
- zooexit (1);
- }
- break;
- }
- } /* zoofilt */
-
- #endif /* FILTER */
-