v19i087: freeze - Freeze/Melt compression package, Patch02
Leonid A. Broukhis
leo at s514.ipmce.su
Sat May 18 06:11:19 AEST 1991
Submitted-by: Leonid A. Broukhis <leo at s514.ipmce.su>
Posting-number: Volume 19, Issue 87
Archive-name: freeze/patch02
Patch-To: freeze: Volume 17, Issue 67-68
*** ../distribution/bitio.c Wed Mar 27 19:44:42 1991
--- bitio.c Mon May 6 21:52:47 1991
***************
*** 76,82 ****
register u_short b = putbuf;
b |= c >> len;
if ((len += l) >= 8) {
! if (putchar ((int)(b >> 8)) == EOF) writeerr();
if ((len -= 8) >= 8) {
putchar ((int)b);
bytes_out += 2;
--- 76,82 ----
register u_short b = putbuf;
b |= c >> len;
if ((len += l) >= 8) {
! putchar ((int)(b >> 8));
if ((len -= 8) >= 8) {
putchar ((int)b);
bytes_out += 2;
***************
*** 87,92 ****
--- 87,94 ----
bytes_out++;
}
}
+ if (ferror(stdout))
+ writeerr();
putbuf = b;
putlen = len;
}
*** ../distribution/decode.c Wed Mar 27 19:45:02 1991
--- decode.c Mon May 13 15:23:12 1991
***************
*** 52,58 ****
}
if (!quiet && (in_count > indicator_count)) {
! fprintf(stderr, "%5dK\b\b\b\b\b\b", in_count / 1024);
fflush (stderr);
indicator_count += indicator_threshold;
indicator_threshold += 1024;
--- 52,60 ----
}
if (!quiet && (in_count > indicator_count)) {
! if (ferror(stdout))
! writeerr();
! fprintf(stderr, "%5ldK\b\b\b\b\b\b", in_count / 1024);
fflush (stderr);
indicator_count += indicator_threshold;
indicator_threshold += 1024;
*** ../distribution/encode.c Mon May 13 15:12:04 1991
--- encode.c Sun May 12 14:15:03 1991
***************
*** 113,119 ****
in_count += i;
if ((in_count > indicator_count) && !quiet) {
! fprintf(stderr, "%5dK\b\b\b\b\b\b", in_count / 1024);
fflush (stderr);
indicator_count += indicator_threshold;
indicator_threshold += 1024;
--- 113,119 ----
in_count += i;
if ((in_count > indicator_count) && !quiet) {
! fprintf(stderr, "%5ldK\b\b\b\b\b\b", in_count / 1024);
fflush (stderr);
indicator_count += indicator_threshold;
indicator_threshold += 1024;
*** ../distribution/freeze.c Mon May 13 15:12:07 1991
--- freeze.c Mon May 13 15:15:31 1991
***************
*** 33,39 ****
uchar magic_header[] = { "\037\237" }; /* 1F 9F = freeze 1.X + 1 */
#endif
! static char ident[] = "@(#) freeze.c 2.2.%d Alpha 3/27/91 leo at s514.ipmce.su\n";
#define ARGVAL() (*++(*argv) || (--argc && *++argv))
--- 33,39 ----
uchar magic_header[] = { "\037\237" }; /* 1F 9F = freeze 1.X + 1 */
#endif
! static char ident[] = "@(#) freeze.c 2.2.%d Alpha 5/13/91 leo at s514.ipmce.su\n";
#define ARGVAL() (*++(*argv) || (--argc && *++argv))
***************
*** 43,49 ****
#ifdef DEBUG
# ifdef MSDOS
! fprintf(stderr,"Usage: freeze [-cdDfivV] [file | +type ...]\n");
# else
fprintf(stderr,"Usage: freeze [-cdDfvV] [file | +type ...]\n");
# endif /* MSDOS */
--- 43,49 ----
#ifdef DEBUG
# ifdef MSDOS
! fprintf(stderr,"Usage: freeze [-cdDfitvV] [file | +type ...]\n");
# else
fprintf(stderr,"Usage: freeze [-cdDfvV] [file | +type ...]\n");
# endif /* MSDOS */
***************
*** 51,57 ****
#else
# ifdef MSDOS
! fprintf(stderr,"Usage: freeze [-cdfivV] [file | +type ...]\n");
# else
fprintf(stderr,"Usage: freeze [-cdfvV] [file | +type ...]\n");
# endif /* MSDOS */
--- 51,57 ----
#else
# ifdef MSDOS
! fprintf(stderr,"Usage: freeze [-cdfitvV] [file | +type ...]\n");
# else
fprintf(stderr,"Usage: freeze [-cdfvV] [file | +type ...]\n");
# endif /* MSDOS */
***************
*** 71,81 ****
char ofname [100];
#ifdef MSDOS
! # define PATH_SEP '\\'
! short image = 2; /* 1 <=> image (binary) mode; 2 <=> text mode */
#else
char deffile[] = "/etc/default/freeze";
- # define PATH_SEP '/'
#endif
#ifdef DEBUG
--- 71,85 ----
char ofname [100];
#ifdef MSDOS
! char *last_sep(); /* last slash, backslash, or colon */
! # ifdef BIN_DEFAULT
! short image = O_BINARY;
! # else
! short image = O_TEXT;
! # endif
#else
+ # define last_sep(s) rindex((s), '/') /* Unix always uses slashes */
char deffile[] = "/etc/default/freeze";
#endif
#ifdef DEBUG
***************
*** 116,122 ****
* conversion between UNIX text representation (LF line
* termination) in frozen form and MS-DOS text
* representation (CR-LF line termination) in melted
! * form. Useful with non-text files.
*
* -v: Write freezing statistics
*
--- 120,133 ----
* conversion between UNIX text representation (LF line
* termination) in frozen form and MS-DOS text
* representation (CR-LF line termination) in melted
! * form. Useful with non-text files. Default if
! * BIN_DEFAULT specified.
! *
! * -b: Binary mode. Synonym for -i. MS-DOS only.
! *
! * -t: Text mode (defined only under MS-DOS). Treat file
! * as text (CR-LF and ^Z special) in melted form. Default
! * unless BIN_DEFAULT specified.
*
* -v: Write freezing statistics
*
***************
*** 185,191 ****
filelist = fileptr = (char **)(malloc(argc * sizeof(*argv)));
*filelist = NULL;
! if((cp = rindex(argv[0], PATH_SEP)) != 0) {
cp++;
} else {
cp = argv[0];
--- 196,202 ----
filelist = fileptr = (char **)(malloc(argc * sizeof(*argv)));
*filelist = NULL;
! if((cp = last_sep(argv[0])) != 0) {
cp++;
} else {
cp = argv[0];
***************
*** 192,198 ****
}
#ifdef MSDOS
! if(strcmp(cp, "MELT.EXE") == 0) {
#else
if(strcmp(cp, "melt") == 0) {
#endif
--- 203,210 ----
}
#ifdef MSDOS
! /* use case-insensitive match: parent may not be command.com */
! if(stricmp(cp, "melt.exe") == 0) {
#else
if(strcmp(cp, "melt") == 0) {
#endif
***************
*** 200,206 ****
do_melt = 1;
#ifdef MSDOS
! } else if(strcmp(cp, "FCAT.EXE") == 0) {
#else
} else if(strcmp(cp, "fcat") == 0) {
#endif
--- 212,219 ----
do_melt = 1;
#ifdef MSDOS
! /* use case-insensitive match: parent may not be command.com */
! } else if(stricmp(cp, "fcat.exe") == 0) {
#else
} else if(strcmp(cp, "fcat") == 0) {
#endif
***************
*** 253,260 ****
break;
#ifdef MSDOS
case 'i':
! image = 1;
break;
#endif
case 'v':
--- 266,278 ----
break;
#ifdef MSDOS
case 'i':
! case 'b':
! image = O_BINARY; /* binary (aka image) mode */
break;
+
+ case 't': /* text mode */
+ image = O_TEXT;
+ break;
#endif
case 'v':
***************
*** 384,390 ****
/* Open input file for freezing */
#ifdef MSDOS
! if ((freopen(*fileptr, image == 2 ? "rt" : "rb", stdin))
== NULL)
#else
if ((freopen(*fileptr, "r", stdin)) == NULL)
--- 402,408 ----
/* Open input file for freezing */
#ifdef MSDOS
! if ((freopen(*fileptr, image == O_TEXT ? "rt" : "rb", stdin))
== NULL)
#else
if ((freopen(*fileptr, "r", stdin)) == NULL)
***************
*** 397,403 ****
/* Generate output filename */
strcpy(ofname, *fileptr);
#ifndef BSD4_2 /* Short filenames */
! if ((cp = rindex(ofname, PATH_SEP)) != NULL) cp++;
else cp = ofname;
# ifdef MSDOS
if (topipe == 0 && (sufp = rindex(cp, '.')) != NULL &&
--- 415,421 ----
/* Generate output filename */
strcpy(ofname, *fileptr);
#ifndef BSD4_2 /* Short filenames */
! if ((cp = last_sep(ofname)) != NULL) cp++;
else cp = ofname;
# ifdef MSDOS
if (topipe == 0 && (sufp = rindex(cp, '.')) != NULL &&
***************
*** 457,463 ****
if (do_melt == 0 || debug == 0) {
#endif
#ifdef MSDOS
! if (freopen(ofname, do_melt && image == 2 ? "wt" : "wb",
stdout) == NULL)
#else
if (freopen(ofname, "w", stdout) == NULL)
--- 475,481 ----
if (do_melt == 0 || debug == 0) {
#endif
#ifdef MSDOS
! if (freopen(ofname, do_melt && image == O_TEXT ? "wt" : "wb",
stdout) == NULL)
#else
if (freopen(ofname, "w", stdout) == NULL)
***************
*** 474,479 ****
--- 492,506 ----
indicator_count = 1024;
}
}
+ else { /* output is to stdout */
+ #ifdef MSDOS
+ /* freeze output always binary; melt output
+ is binary if image == O_BINARY
+ */
+ if (do_melt == 0 || image == O_BINARY)
+ setmode(fileno(stdout), O_BINARY);
+ #endif
+ }
/* Actually do the freezing/melting */
if (do_melt == 0)
freeze();
***************
*** 493,498 ****
--- 520,531 ----
Pipe:
topipe = 1;
if (do_melt == 0) {
+ #ifdef MSDOS
+ /* freeze output always binary */
+ /* freeze input controlled by -i -t -b switches */
+ setmode(fileno(stdout), O_BINARY);
+ setmode(fileno(stdin), image);
+ #endif
#ifdef COMPAT
new_flg = 1;
#endif
***************
*** 500,505 ****
--- 533,544 ----
if(!quiet)
putc('\n', stderr);
} else {
+ #ifdef MSDOS
+ /* melt input always binary */
+ /* melt output to stdout binary if so requested */
+ setmode(fileno(stdin), O_BINARY);
+ setmode(fileno(stdout), image);
+ #endif
/* Check the magic number */
if ((getchar() != magic_header[0])
#ifdef COMPAT
***************
*** 566,573 ****
writeerr()
{
! perror ( ofname );
! unlink ( ofname );
exit ( 1 );
}
--- 605,614 ----
writeerr()
{
! if (!topipe) {
! perror ( ofname );
! unlink ( ofname );
! }
exit ( 1 );
}
***************
*** 713,718 ****
--- 754,763 ----
Table[5], Table[6], Table[7], Table[8]);
fprintf(stderr, "HUFFMAN: %ld (max frequency)\n", (long)MAX_FREQ);
fprintf(stderr, "HASH: %d bits\n", BITS);
+ #ifdef MSDOS
+ fprintf(stderr, "Default melted mode: %s\n",
+ image == O_BINARY ? "binary" : "text");
+ #endif
exit(0);
}
***************
*** 759,761 ****
--- 804,826 ----
fprintf(stderr, "Using \"%s%s\" type\n", type, t);
}
}
+
+ #ifdef MSDOS
+ /* MSDOS typically has ':' and '\\' separators, but some command
+ processors (and the int 21h function handler) support '/' too.
+ Find the last of these.
+ */
+ char *
+ last_sep(s)
+ register char *s;
+ {
+ register char *c;
+
+ char *p;
+ for (p = NULL; *s; s++)
+ if (*s == '/' || *s == '\\' || *s == ':')
+ p = s;
+ return(p);
+ }
+
+ #endif /* MSDOS */
*** ../distribution/freeze.h Mon May 13 15:12:08 1991
--- freeze.h Sun Mar 31 12:25:52 1991
***************
*** 4,12 ****
#ifdef SUN4
#include <sys/stdtypes.h>
#else
- #if !defined(ultrix) && defined(__GNUC__)
- typedef int mode_t; /* for GCC */
- #endif
# ifndef getc
# define getc(p) (--(p)->_cnt < 0 ? _filbuf(p) : (int) *(p)->_ptr++)
# endif
--- 4,9 ----
***************
*** 36,41 ****
--- 33,39 ----
#ifdef MSDOS
#include <stdlib.h>
+ #include <fcntl.h>
#endif
typedef unsigned char uchar;
*** ../distribution/huf.c Wed Mar 27 19:44:46 1991
--- huf.c Mon May 13 13:23:35 1991
***************
*** 221,226 ****
--- 221,228 ----
if (putlen) {
putchar((int)(putbuf >> 8));
bytes_out++;
+ if (ferror(stdout))
+ writeerr();
}
}
***************
*** 400,410 ****
putchar((int)(i & 0xFF));
putchar((int)((i >> 8) & 0x7F));
putchar((int)(Table[6] & 0x3F));
}
read_header() {
short i, j;
! i = getchar() | (getchar() << 8);
Table[1] = i & 1; i >>= 1;
Table[2] = i & 3; i >>= 2;
Table[3] = i & 7; i >>= 3;
--- 402,415 ----
putchar((int)(i & 0xFF));
putchar((int)((i >> 8) & 0x7F));
putchar((int)(Table[6] & 0x3F));
+ if (ferror(stdout))
+ writeerr();
}
read_header() {
short i, j;
! i = getchar() & 0xFF;
! i |= (getchar() & 0xFF) << 8;
Table[1] = i & 1; i >>= 1;
Table[2] = i & 3; i >>= 2;
Table[3] = i & 7; i >>= 3;
*** ../distribution/lz.h Mon May 13 15:12:10 1991
--- lz.h Sun May 12 14:15:03 1991
***************
*** 49,55 ****
#else
# if parts == 3
extern u_short next0[], next1[], next2[];
! # else
# if parts == 5
extern u_short next0[], next1[], next2[], next3[], next4[];
# else
--- 49,55 ----
#else
# if parts == 3
extern u_short next0[], next1[], next2[];
! # else
# if parts == 5
extern u_short next0[], next1[], next2[], next3[], next4[];
# else
***************
*** 71,77 ****
#define InsertNode(r)\
{\
! register hash_t p, first_son;\
register uchar *key;\
key = &text_buf[r];\
p = N + 1 + (key[0] & MASK0) |\
--- 71,77 ----
#define InsertNode(r)\
{\
! register hash_t p; register u_short first_son;\
register uchar *key;\
key = &text_buf[r];\
p = N + 1 + (key[0] & MASK0) |\
*** ../distribution/makefile Mon May 13 15:12:10 1991
--- makefile Fri May 10 19:40:42 1991
***************
*** 9,17 ****
CC = gcc
! CFLAGS = -DBITS=18 -O -DCOMPAT #-DBSD42 -DSUN4
! LINTFLAGS = -DBITS=15 -DCOMPAT -DDEBUG -DGATHER_STAT
MAKEFILE = makefile
--- 9,17 ----
CC = gcc
! CFLAGS = -DBITS=18 -O -DCOMPAT -fstrength-reduce #-DBSD42 -DSUN4
! LINTFLAGS = -DBITS=15 -DCOMPAT -DDEBUG -DGATHER_STAT -x
MAKEFILE = makefile
*** ../distribution/patchlevel.h Mon May 13 15:12:11 1991
--- patchlevel.h Fri Mar 29 12:18:11 1991
***************
*** 1 ****
! #define PATCHLEVEL 1
--- 1 ----
! #define PATCHLEVEL 2
--
Leonid A. Broukhis | 89-1-95 Liberty St. | "BROUKHIS" is Hebrew for
7+095 494.6241 (h) | Moscow 123481 USSR | "BENEDICTAE"
7+095 132.9475 (o) | (leo at s514.ipmce.su) | {Licet omnia qualibet dicas}
exit 0 # Just in case...
--
Kent Landfield INTERNET: kent at sparky.IMD.Sterling.COM
Sterling Software, IMD UUCP: uunet!sparky!kent
Phone: (402) 291-8300 FAX: (402) 291-4362
Please send comp.sources.misc-related mail to kent at uunet.uu.net.
More information about the Comp.sources.misc
mailing list