[comp.sources.misc] v17i074: freeze - Freeze/Melt compression package, Patch01

leo@s514.ipmce.su (Leonid A. Broukhis) (03/29/91)

Submitted-by: Leonid A. Broukhis <leo@s514.ipmce.su>
Posting-number: Volume 17, Issue 74
Archive-name: freeze/patch01
Patch-To: freeze: Volume 17, Issue 67-68

Some bug fixes (endianness dependency), improvements:

freeze ... +numlist .... is now allowed. Numlist is 8 numbers
(as in /etc/default/freeze) seperated by commas, for example
freeze +0,1,1,1,4,10,27,18 ....

*** ../distribution/encode.c	Wed Mar 27 20:44:42 1991
--- encode.c	Wed Mar 27 16:18:27 1991
***************
*** 2,14 ****
  
  #include "lz.h"
  
- extern hash_t prev[];
- #ifdef __XENIX__
- extern u_short *next[];
- #else
- extern u_short next[];
- #endif
- 
  /*
   * freeze stdin to stdout
   */
--- 2,7 ----
*** ../distribution/freeze.1	Wed Mar 27 20:44:43 1991
--- freeze.1	Wed Mar 27 21:21:32 1991
***************
*** 93,104 ****
  .I melt
  (all files are unpacked and written to stdout).
  .PP
! Type is a token preceded by a '+', which defines the type
  of following files in the command string. An explicite definition
  of the file's type can give up to 2% of additional compression.
  The list of types is stored in file
  .IR /etc/default/freeze .
! Types may be abbreviated while not ambigious.
  .PP
  .I Freeze
  uses the Lempel-Ziv algorithm on the first pass and the dynamic
--- 93,108 ----
  .I melt
  (all files are unpacked and written to stdout).
  .PP
! .I Type
! is a token preceded by a '+', which defines the type
  of following files in the command string. An explicite definition
  of the file's type can give up to 2% of additional compression.
  The list of types is stored in file
  .IR /etc/default/freeze .
! Types may be abbreviated while not ambigious. You can also determine
! values for the static Huffman table by using a list of 8 numbers
! separated by commas instead of
! .I type.
  .PP
  .I Freeze
  uses the Lempel-Ziv algorithm on the first pass and the dynamic
***************
*** 146,159 ****
  .SH "SEE ALSO"
  compact(1), pack(1), compress(1)
  .SH "DIAGNOSTICS"
- Usage: freeze [-cdfvV] [file ...]
- .in +8
- Invalid options were specified on the command line.
- .in -8
  Unknown flag: 
  .I "\'x\';"
  .in +8
! Invalid flags were specified on the command line.
  .in -8
  .IR file :
  not in frozen format
--- 150,160 ----
  .SH "SEE ALSO"
  compact(1), pack(1), compress(1)
  .SH "DIAGNOSTICS"
  Unknown flag: 
  .I "\'x\';"
+ Usage: freeze [-cdfvV] [file|+type ...]
  .in +8
! Invalid options were specified on the command line.
  .in -8
  .IR file :
  not in frozen format
***************
*** 224,229 ****
--- 225,243 ----
  .in +8
  This message indicates a successful switching to
  position table for mentioned file type.
+ .in -8
+ "
+ .I xxx
+ " - no such file type
+ .in +8
+ or
+ .in -8
+ .I xxx
+ - a list of 8 numbers expected
+ .in +8
+ This message means the given file type does not exist or
+ the given string contains a comma, but is not a valid list
+ of values for static Huffman table.
  .in -8
  melt: corrupt input
  .in +8
*** ../distribution/freeze.c	Wed Mar 27 20:44:45 1991
--- freeze.c	Thu Mar 28 14:31:19 1991
***************
*** 1,6 ****
--- 1,7 ----
  #include "freeze.h"
  #include "lz.h"
  #include "huf.h"
+ #include "patchlevel.h"
  
  /*
   * Freeze - data freezing program
***************
*** 22,27 ****
--- 23,30 ----
   * Improved hash function (with tuning of hash-table)
   * Version 2.1: Noticeable speedup: Insert_Node and Get_Next_Match
   * are now separated.
+  * Version 2.2: Tunable static Huffman table for position information,
+  * this info may be given in the command string now.
   */
  
  #ifdef COMPAT
***************
*** 30,36 ****
  uchar magic_header[] = { "\037\237" };      /* 1F 9F = freeze 1.X + 1 */
  #endif
  
! static char ident[] = "@(#) freeze.c 2.1 Alpha 3/21/91 leo@s514.ipmce.su";
  
  #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 3/27/91 leo@s514.ipmce.su\n";
  
  #define ARGVAL() (*++(*argv) || (--argc && *++argv))
  
***************
*** 684,690 ****
  
  version()
  {
! 	fprintf(stderr, "%s\n", ident);
  	fprintf(stderr, "Options: ");
  #ifdef DEBUG
  	fprintf(stderr, "DEBUG, ");
--- 687,693 ----
  
  version()
  {
! 	fprintf(stderr, ident, PATCHLEVEL);
  	fprintf(stderr, "Options: ");
  #ifdef DEBUG
  	fprintf(stderr, "DEBUG, ");
***************
*** 717,748 ****
  {
  	extern char * defread();
  	register char *s = defread(type), *t;
! 	static short v[8];
! 	int i;
  	if(!s) {
! 		if(!quiet)
! 			fprintf(stderr, "\"%s\" - no such file type\n", type);
! 		exit(1);
! 	}
! 
! 	if(!(t = rindex(s, '='))) {
! 		if(!quiet)
! 			fprintf(stderr, "\"%s\" - invalid entry\n", type);
! 		exit(1);
  	}
! 	t++;
! 	if(sscanf(t, "%d %d %d %d %d %d %d %d",
! 		v, v+1, v+2, v+3, v+4, v+5, v+6, v+7) != 8) {
  		if(!quiet)
! 			fprintf(stderr, "\"%s\" - invalid entry\n", type);
  		exit(1);
  	}
  	for(i = 0; i < 8; i++)
  		Table[i+1] = v[i];
  	if(!quiet) {
! 		t = s;
! 		while(*s != '=' && *s != ' ' && *s != '\t') s++;
! 		*s = '\0';
  		fprintf(stderr, "Using \"%s%s\" type\n", type, t);
  	}
  }
--- 720,761 ----
  {
  	extern char * defread();
  	register char *s = defread(type), *t;
! 	static int v[8];
! 	int i, is_list = 0;
  	if(!s) {
! 	/* try to consider 'type' as a list of values: n1,n2, ... */
! 		if(rindex(type, ','))
! 			is_list = 1;
! 		else {
! 			if (!quiet)
! 				fprintf(stderr, "\"%s\" - no such file type\n", type);
! 			exit(1);
! 		}
! 		if(sscanf(type, "%d,%d,%d,%d,%d,%d,%d,%d",
! 			v, v+1, v+2, v+3, v+4, v+5, v+6, v+7) != 8) {
! 			if (!quiet)
! 				fprintf(stderr,
! 					"%s - a list of 8 numbers expected\n", type);
! 			exit(1);
! 		}
  	}
! 	if(!is_list && (!(t = rindex(s, '=')) ||
! 		sscanf(++t, "%d %d %d %d %d %d %d %d",
! 		v, v+1, v+2, v+3, v+4, v+5, v+6, v+7) != 8)) {
  		if(!quiet)
! 			fprintf(stderr,
! 				"\"%s\" - invalid entry\n", type);
  		exit(1);
  	}
  	for(i = 0; i < 8; i++)
  		Table[i+1] = v[i];
  	if(!quiet) {
! 		if(!is_list) {
! 			t = s;
! 			while(*s != '=' && *s != ' ' && *s != '\t') s++;
! 			*s = '\0';
! 		} else
! 			t = "";
  		fprintf(stderr, "Using \"%s%s\" type\n", type, t);
  	}
  }
*** ../distribution/freeze.h	Wed Mar 27 20:45:03 1991
--- freeze.h	Wed Mar 27 15:03:06 1991
***************
*** 1,12 ****
  
  #include <stdio.h>
  
- /* for GCC */
- 
  #ifdef SUN4
  #include <sys/stdtypes.h>
  #else
    typedef int mode_t; /* for GCC */
  # ifndef getc
  #   define getc(p)         (--(p)->_cnt < 0 ? _filbuf(p) : (int) *(p)->_ptr++)
  # endif
--- 1,12 ----
  
  #include <stdio.h>
  
  #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
***************
*** 13,20 ****
--- 13,22 ----
  # ifndef putc
  #   define putc(x, p)      (--(p)->_cnt < 0 ? _flsbuf((unsigned char) (x), (p)) : (int) (*(p)->_ptr++ = (unsigned char) (x)))
  # endif
+ #ifndef BSD4_2
    typedef unsigned short u_short;
  #endif
+ #endif
  
  /* end (for GCC) */
  
***************
*** 96,103 ****
  
  extern int exit_stat;
  
- extern short new_flg;
- 
  #ifdef DEBUG
  extern short debug;
  extern short verbose;
--- 98,103 ----
***************
*** 113,119 ****
  	     GetByte(), GetNBits();
  
  #ifdef COMPAT
! extern short DecodeCOld(), DecodePOld();
  #endif
  
  #if defined(BSD42) && !defined(BSD4_2)
--- 113,119 ----
  	     GetByte(), GetNBits();
  
  #ifdef COMPAT
! extern short DecodeCOld(), DecodePOld(), new_flg;
  #endif
  
  #if defined(BSD42) && !defined(BSD4_2)
*** ../distribution/lz.c	Wed Mar 27 20:45:04 1991
--- lz.c	Wed Mar 27 15:03:06 1991
***************
*** 7,14 ****
  /*									*/
  /*----------------------------------------------------------------------*/
  
- #define NIL		N	/* term of tree */
- 
  uchar    text_buf[N + _F - 1];
  u_short   match_position, match_length;
  
--- 7,12 ----
***************
*** 18,35 ****
  */
  
  hash_t             prev[N + 1];
  #ifndef __XENIX__
! u_short            next[array_size];
  #else
  #if parts == 2
  u_short next0[32768], next1[8193];
! #elif parts == 3
  u_short next0[32768], next1[32768], next2[8193];
! #elif parts == 5
  u_short next0[32768], next1[32768], next2[32768], next3[32768], next4[8193];
! #else
  u_short next0[32768], next1[32768], next2[32768], next3[32768], next4[32768],
  	next5[32768], next6[32768], next7[32768], next8[8193];
  #endif
  
  u_short *next[parts] = {
--- 16,42 ----
  */
  
  hash_t             prev[N + 1];
+ 
  #ifndef __XENIX__
! u_short
! #ifdef __TURBOC__
! 	huge
! #endif
! 		next[array_size];
  #else
  #if parts == 2
  u_short next0[32768], next1[8193];
! #else
! #	if parts == 3
  u_short next0[32768], next1[32768], next2[8193];
! #	else
! #		if parts == 5
  u_short next0[32768], next1[32768], next2[32768], next3[32768], next4[8193];
! #		else
  u_short next0[32768], next1[32768], next2[32768], next3[32768], next4[32768],
  	next5[32768], next6[32768], next7[32768], next8[8193];
+ #		endif
+ #	endif
  #endif
  
  u_short *next[parts] = {
***************
*** 46,52 ****
  #endif
  };
  #endif
- 
  
  #ifdef GATHER_STAT
  long node_steps, node_matches;
--- 53,58 ----
*** ../distribution/lz.h	Wed Mar 27 20:45:04 1991
--- lz.h	Thu Mar 28 14:11:37 1991
***************
*** 32,42 ****
--- 32,64 ----
  
  #define array_size      (N + 1 + (1 << BITS))
  
+ extern hash_t prev[];
+ 
  #ifndef __XENIX__
  #define nextof(i)       next[i]
+ extern u_short
+ #ifdef __TURBOC__
+ 		huge
+ #endif
+ 			next[];
  #else
  #define parts (array_size/32768 + 1)
  #define nextof(i)       next[(i) >> 15][(i) & 0x7fff]
+ #if parts == 2
+ extern u_short next0[], next1[];
+ #else
+ #	if parts == 3
+ extern u_short next0[], next1[], next2[];
+ #	else
+ #		if parts == 5
+ extern u_short next0[], next1[], next2[], next3[], next4[];
+ #		else
+ extern u_short next0[], next1[], next2[], next3[], next4[],
+ 	next5[], next6[], next7[], next8[];
+ #		endif
+ #	endif
+ #endif
+ extern u_short *next[];
  #endif
  
  /* To eliminate function-call overhead */
*** ../distribution/makefile	Wed Mar 27 20:45:05 1991
--- makefile	Thu Mar 28 16:27:15 1991
***************
*** 1,4 ****
--- 1,5 ----
  DEST          = /usr/local/bin
+ MANDEST       = /usr/local/man/cat1
  EXTHDRS	      =
  HDRS          = freeze.h\
  		lz.h\
***************
*** 25,30 ****
--- 26,35 ----
  
  PROGRAM       = freeze
  
+ CATMAN        = freeze.man
+ 
+ MAN           = freeze.1
+ 
  SRCS          = bitio.c\
  		debug.c\
  		decode.c\
***************
*** 34,40 ****
  		huf.c\
  		lz.c
  
! all:            $(PROGRAM) statist freeze.man
  
  lint:           $(SRCS)
  		lint $(LINTFLAGS) $(SRCS) $(LIBS)
--- 39,45 ----
  		huf.c\
  		lz.c
  
! all:            $(PROGRAM) statist $(CATMAN)
  
  lint:           $(SRCS)
  		lint $(LINTFLAGS) $(SRCS) $(LIBS)
***************
*** 47,59 ****
  
  clean:;         rm -f *.o *.b .,* core a.out $(PROGRAM) statist
  
! install:	$(PROGRAM)
  		install -s -c $(PROGRAM) $(DEST)
! 		ln -f $(DEST)/freeze $(DEST)/melt
! 		ln -f $(DEST)/freeze $(DEST)/fcat
  
! freeze.man:     freeze.1
! 		nroff -man < freeze.1 > freeze.man
  
  ###
  bitio.o: freeze.h huf.h
--- 52,72 ----
  
  clean:;         rm -f *.o *.b .,* core a.out $(PROGRAM) statist
  
! install:        $(DEST)/$(PROGRAM) $(MANDEST)/$(MAN)
! 
! $(DEST)/$(PROGRAM): $(PROGRAM)
  		install -s -c $(PROGRAM) $(DEST)
! 		ln -f $(DEST)/$(PROGRAM) $(DEST)/melt
! 		ln -f $(DEST)/$(PROGRAM) $(DEST)/fcat
! 
! $(MANDEST)/$(MAN): $(CATMAN)
! 		cp $(CATMAN) $(MANDEST)/$(MAN)
! 		chmod +r $(MANDEST)/$(MAN)
! 		ln -f $(MANDEST)/$(MAN) $(MANDEST)/melt.1
! 		ln -f $(MANDEST)/$(MAN) $(MANDEST)/fcat.1
  
! $(CATMAN):      $(MAN)
! 		nroff -man < $(MAN) > $(CATMAN)
  
  ###
  bitio.o: freeze.h huf.h
***************
*** 62,65 ****
  encode.o: freeze.h lz.h
  freeze.o: freeze.h lz.h huf.h
  huf.o: freeze.h huf.h
! lz.o: freeze.h
--- 75,78 ----
  encode.o: freeze.h lz.h
  freeze.o: freeze.h lz.h huf.h
  huf.o: freeze.h huf.h
! lz.o: freeze.h lz.h
*** ../distribution/patchlevel.h	Thu Mar 28 14:36:11 1991
--- patchlevel.h	Thu Mar 28 14:29:31 1991
***************
*** 0 ****
--- 1 ----
+ #define PATCHLEVEL 1
*** ../distribution/statist.c	Wed Mar 27 20:44:46 1991
--- statist.c	Thu Mar 28 13:54:48 1991
***************
*** 16,22 ****
  hash_t  prev[N + 1];
  
  #ifndef __XENIX__
! u_short            next[array_size];
  #else
  #if parts == 2
  u_short next0[32768], next1[8193];
--- 16,26 ----
  hash_t  prev[N + 1];
  
  #ifndef __XENIX__
! u_short
! #ifdef __TURBOC__
! 	huge
! #endif
! 		next[array_size];
  #else
  #if parts == 2
  u_short next0[32768], next1[8193];
-- 
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@s514.ipmce.su) | {Licet omnia qualibet dicas}


exit 0 # Just in case...
-- 
Kent Landfield                   INTERNET: kent@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@uunet.uu.net.