home *** CD-ROM | disk | FTP | other *** search
- From mipos3!omepd!uoregon!hp-pcd!hplabs!hp-sdd!ucsdhub!sdcsvax!ucsd!ames!necntc!ncoast!allbery Tue Mar 8 19:24:37 PST 1988
- Article 323 of comp.sources.misc:
- Path: td2cad!mipos3!omepd!uoregon!hp-pcd!hplabs!hp-sdd!ucsdhub!sdcsvax!ucsd!ames!necntc!ncoast!allbery
- From: mikew@wyse1.wyse.com (Mike Wexler)
- Newsgroups: comp.sources.misc
- Subject: v02i070: sq - squeeze a dictionary
- Keywords: sq dictionary compress
- Message-ID: <7473@ncoast.UUCP>
- Date: 5 Mar 88 23:51:26 GMT
- Sender: allbery@ncoast.UUCP
- Reply-To: mikew@wyse1.wyse.com (Mike Wexler)
- Organization: Wyse Technology
- Lines: 206
- Approved: allbery@ncoast.UUCP
- Comp.sources.misc: Volume 2, Issue 70
- 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
-
-
-