mikew@wyse1.wyse.com (Mike Wexler) (03/06/88)
Submitted-By: "Mike Wexler" <mikew@wyse1.wyse.com> Archive-Name: sq Comp.sources.misc: Volume 2, Issue 70 Submitted-By: "Mike Wexler" <mikew@wyse1.wyse.com> Archive-Name: sq [A couple programs that sat around until I had time to fix 'em up. ++bsa] The following program compresses dictionaries. It works in combination with compress and sort. You should have both of these for optimal use. I have included a simple demo. Have fun... #--------------------------------CUT HERE------------------------------------- #! /bin/sh # # This is a shell archive. Save this into a file, edit it # and delete all lines above this comment. Then give this # file to sh by executing the command "sh file". The files # will be extracted into the current directory owned by # you with default permissions. # # The files contained herein are: # # -rw-r--r-- 1 allbery System 449 Mar 5 18:43 Makefile # -rw-r--r-- 1 allbery System 451 Mar 5 18:43 Makefile.orig # -rw-r--r-- 1 allbery System 546 Mar 5 18:43 sq.c # -rw-r--r-- 1 allbery System 606 Mar 5 18:43 sq.l # -rw-r--r-- 1 allbery System 468 Mar 5 18:43 unsq.c # echo 'x - Makefile' if test -f Makefile; then echo 'shar: not overwriting Makefile'; else sed 's/^X//' << '________This_Is_The_END________' > Makefile XCFLAGS=-O XBINDIR=/usr/new XMANDIR=/usr/man/manl XDICT=/usr/dict/words Xall: sq unsq Xsq: sq.c X $(CC) $(CFLAGS) -o sq sq.c Xunsq: unsq.c X $(CC) $(CFLAGS) -o unsq unsq.c Xinstall: X cp sq unsq $(BINDIR) X cp sq.l $(MANDIR) Xshar: X shar sq.l sq.c unsq.c Makefile > sq.shar Xdemo: X sort $(DICT) | sq | compress > dict.sq.Z X compress < $(DICT) > dict.Z X ls -l $(DICT) dict.Z dict.sq.Z X compress -d < dict.sq.Z | unsq | sort -df > dict.copy X diff $(DICT) dict.copy ________This_Is_The_END________ if test `wc -c < Makefile` -ne 449; then echo 'shar: Makefile was damaged during transit (should have been 449 bytes)' fi fi ; : end of overwriting check echo 'x - Makefile.orig' if test -f Makefile.orig; then echo 'shar: not overwriting Makefile.orig'; else sed 's/^X//' << '________This_Is_The_END________' > Makefile.orig XCFLAGS=-O XBINDIR=/usr/local/bin XMANDIR=/usr/man/manl XDICT=/usr/dict/words Xall: sq unsq Xsq: sq.c X $(CC) $(CFLAGS) -o sq sq.c Xunsq: unsq.c X $(CC) $(CFLAGS) -o unsq unsq.c Xinstall: X cp sq unsq $BINDIR X cp sq.l $MANDIR Xshar: X shar sq.l sq.c unsq.c Makefile > sq.shar Xdemo: X sort $(DICT) | sq | compress > dict.sq.Z X compress < $(DICT) > dict.Z X ls -l $(DICT) dict.Z dict.sq.Z X compress -d < dict.sq.Z | unsq | sort -df > dict.copy X diff $(DICT) dict.copy ________This_Is_The_END________ if test `wc -c < Makefile.orig` -ne 451; then echo 'shar: Makefile.orig was damaged during transit (should have been 451 bytes)' fi fi ; : end of overwriting check echo 'x - sq.c' if test -f sq.c; then echo 'shar: not overwriting sq.c'; else sed 's/^X//' << '________This_Is_The_END________' > sq.c X#include <stdio.h> X Xmain() X{ X char word[257]; X static char prev[257]=""; X char outword[258]; X X while (gets(word)!=NULL) { X trunc(word,prev); X } Xexit(0); X} X Xtrunc(word,prev) Xchar *word; Xchar *prev; X{ X unsigned char same_count; X char *wordp; X char *prevp; X X wordp=word; X prevp=prev; X for (same_count=0;*wordp==*prevp++;++wordp,++same_count); X if (same_count>255) { X fprintf(stderr,"same count exceeded 255 characters, aborted"); X exit(1); X } X fwrite(&same_count,1,1,stdout); X puts(wordp); X strcpy(prev,word); X return; X} X ________This_Is_The_END________ if test `wc -c < sq.c` -ne 546; then echo 'shar: sq.c was damaged during transit (should have been 546 bytes)' fi fi ; : end of overwriting check echo 'x - sq.l' if test -f sq.l; then echo 'shar: not overwriting sq.l'; else sed 's/^X//' << '________This_Is_The_END________' > sq.l X.TH SQ 1 LOCAL X.\" $Header: unshar.man,v 1.1 87/02/27 13:45:34 rs Exp $ X.SH NAME Xsq \- squeeze a sorted word list Xunsq \- unsqueeze a sorted word list X.SH SYNOPSIS X.B sq X< infile > outfile X.PP X.B unsq X< infile > outfile X.SH DESCRIPTION X.I sq Xcompresses a sorted list of words(a dictionary). XFor example: X.RS Xsort /usr/dict/words | sq | compress > words.sq.Z X.RE Xwill compress dict by about a factor of 4. X.PP X.I unsq Xuncompress the output of X.I sq. XFor example: X.RS Xcompress -d < words.sq.Z | unsq | sort -f -o words X.RE Xwill uncompress a dictionary compressed with X.I sq. X.SH SEE ALSO Xcompress(1), sort. ________This_Is_The_END________ if test `wc -c < sq.l` -ne 606; then echo 'shar: sq.l was damaged during transit (should have been 606 bytes)' fi fi ; : end of overwriting check echo 'x - unsq.c' if test -f unsq.c; then echo 'shar: not overwriting unsq.c'; else sed 's/^X//' << '________This_Is_The_END________' > unsq.c X#include <stdio.h> X Xmain() X{ X char word[257]; X static char prev[257]=""; X unsigned char count; X char outword[258]; X X while (!expand(word,prev)) { X puts(word); X } Xexit(0); X} X Xexpand(word,prev) Xchar *word; Xchar *prev; X{ X unsigned char same_count; X char *wordp; X char *prevp; X X fread(&same_count,1,1,stdin); X prevp=prev; X wordp=word; X while (same_count--) X *wordp++=(*prevp++); X if (gets(wordp)==NULL) return(1); X strcpy(prev,word); X return(0); X} X ________This_Is_The_END________ if test `wc -c < unsq.c` -ne 468; then echo 'shar: unsq.c was damaged during transit (should have been 468 bytes)' fi fi ; : end of overwriting check exit 0