home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
vol_300
/
379_01
/
zoo210s.zoo
/
zoofilt.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-07-12
|
2KB
|
87 lines
/* 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 = 0; /* use lzh instead */
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 = 1; break;
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 */