[comp.sources.games] v01i025: fortune - quote for the day, Part01/16

games-request@tekred.UUCP (05/27/87)

Submitted by: arnold@apollo.UUCP
Comp.sources.games: Volume 1, Issue 25
Archive-name: fortune/Part01

	[This is the latest and most uptodate version of Ken Arnold/
	 Berkeley's fortune program and data base.  Thanks to Ken
	 Arnold for sending this to me.   -br]

#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 1 (of 16)."
# Contents:  MANIFEST READ_ME Makefile Notes fortune.6 fortune.c
#   obscene.sp.ok scene.sp.ok strfile.8 strfile.h Do_troff Rot13
#   Shar_split Troff.mac
# Wrapped by billr@tekred on Fri May 22 10:24:35 1987
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f MANIFEST -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"MANIFEST\"
else
echo shar: Extracting \"MANIFEST\" \(1713 characters\)
sed "s/^X//" >MANIFEST <<'END_OF_MANIFEST'
X   File Name		Archive #	Description
X-----------------------------------------------------------
X MANIFEST                  1	This shipping list
X READ_ME                   1	
X Makefile                  1	The Makefile
X Notes                     1	Rules for adding your own fortunes
X fortune.6                 1	The manual page
X fortune.c                 1	The main program
X obscene.sp.ok             1	
X scene.sp.ok               1	
X rnd.c                     2	random() for those that need it
X strfile.8                 1	
X strfile.c                 2	Create random access table of strings
X strfile.h                 1	
X unstr.c                   2	
X :trfix                    2	For sharing
X Do_troff                  1	
X Rot13                     1	Unrotate obscene fortunes
X Shar_split                1	For sharing
X Troff.mac                 1	
X Troff.sed                 2	
X obscene.r13.aa            3	Obscene fortunes - part 1 (rot13)
X obscene.r13.ab            4	Obscene fortunes - part 2 (rot13)
X scene.aa                  5	Non-obscene fortunes - part 1
X scene.ab                  6	Non-obscene fortunes - part 2
X scene.ac                  7	Non-obscene fortunes - part 3
X scene.ad                  8	Non-obscene fortunes - part 4
X scene.ae                  9	Non-obscene fortunes - part 5
X scene.af                 10	Non-obscene fortunes - part 6
X scene.ag                 11	Non-obscene fortunes - part 7
X scene.ah                 12	Non-obscene fortunes - part 8
X scene.ai                 13	Non-obscene fortunes - part 9
X scene.aj                 14	Non-obscene fortunes - part 10
X scene.ak                 15	Non-obscene fortunes - part 11
X scene.al                 16	Non-obscene fortunes - part 12
END_OF_MANIFEST
if test 1713 -ne `wc -c <MANIFEST`; then
    echo shar: \"MANIFEST\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f READ_ME -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"READ_ME\"
else
echo shar: Extracting \"READ_ME\" \(3459 characters\)
sed "s/^X//" >READ_ME <<'END_OF_READ_ME'
XThis is the Berkeley fortune database program.  To submit fortunes,
Xmail one of (only one of, please):
X
X	fortune@ucbvax.berkeley.edu
X	ucbvax!fortune
X	fortune@ucbvax.arpa
X
XFortunes are split into two parts -- non-offensive and potentially
Xoffensive.  The former are in the file "scene", and the latter in
X"obscene".  In the distribution, the file "obscene" is encrypted using
Xrot-13 encryption.  The program "Rot13" will undo this encryption.
XWhen unpacking the shell archive, you will be asked if you want this
Xdone automatically.  If you say anything which starts with a "y", it
Xwill be done.  If you say anything else you will be asked if you want
Xto keep them around at all.  If you do, they will be kept in the
Xencrypted form, and you will be told how to decrypt.  If you don't want
Xto keep it around, it will be removed from your system.  In either of
Xthese latter cases, the file "obscene" will contain a message to users
Xthat the potentially offensive fortunes are not on your system.
X
XThe file "Notes" contains notes about the formatting and contents of
Xthe fortune database.  If you want to add your own fortunes to the
Xdatabase
X
X		***************************************
X		* => PLEASE READ "Notes" CAREFULLY <= *
X		***************************************
X
XThe formatting stuff only keeps things looking nice, so we do recommend
Xthat you follow it, but the notes about splitting out the potentially
Xoffensive fortunes will keep you out of trouble if followed
Xsensitively.
X
XTo compile after extraction, you can just say "make".  "make install"
Xwill install the program and database.  "Makefile" uses "BINDIR" and
X"LIBDIR" for the directories, respectively.  "make clean" will clean
Xout unnecessary files.  If you change "LIBDIR", you must change
X"FORTFILE" (see below).
X
XThe "DEFS" variable in the Makefile is for preprocessor directives.
XUseful things to set here are:
X
X	NO_RANDOM	Don't have the BSD random() function, so use
X			the code in "rnd.c".
X	REGCMP		Use regcmp() function for regular expressions --
X			if this is not defined (and NO_REGEX is not
X			defined), the regular expression handler is
X			assumed to be regex().  regcmp() is the System
X			V version; regex() is used on 4BSD.  I don't
X			know what other systems will have -- consult
X			your manual.
X	NO_REGEX	No regular expression handler exists.
X
XThe "LIBS" variable is a separate library to look in for the regular
Xexpression routines.  On 4BSD systems, it is in the default library, so
Xit should be set to nothing.
X
XSo, generally speaking, for BSD systems,
X
X	DEFS=
X	LIBS=
X
Xand for System V systems,
X
X	DEFS=	-DREGCMP -DNO_RANDOM
X	LIBS=	-lPW
X
X
XThe "USER" variable is the user to which "fortune" will be set-uid, and
Xwhich will own the fortune database.  The fortune database is set to be
Xreadable only by the owner of the database to prevent random users from
Xprinting out the database, which has lots of non-ascii stuff at the
Xfront.  *This is a common error*, since it doesn't occur to everyone
Xthat the database wouldn't be human-readable.  This method was used
Xafter three people used up about half a box of line printer paper each
Xin a period of two days trying to print it out.  If you trust your
Xusers, you might care to undo this, but I wouldn't if I were you.
X"fortune" is carefully written so as not to be a security hole, but
XUSER should be not be set to "root" anyway.  On most systems it is
X"games" or "daemon".
X
X		Ken Arnold
X		arnold@ucbvax.berkeley.edu
X		ucbvax!arnold
END_OF_READ_ME
if test 3459 -ne `wc -c <READ_ME`; then
    echo shar: \"READ_ME\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f Makefile -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"Makefile\"
else
echo shar: Extracting \"Makefile\" \(3127 characters\)
sed "s/^X//" >Makefile <<'END_OF_Makefile'
X# $Header: Makefile,v 1.3 86/09/16 17:27:19 arnold Exp $
X#
X# Makefile for "fortune" program.  See READ_ME for details.
X#
XFORTUNES=	scene obscene
XCFILES=		fortune.c strfile.h strfile.c rnd.c unstr.c
XSOURCE=		$(CFILES) $(FORTUNES)
XTFILES=		Troff.mac Troff.sed Do_troff
XSFILES=		scene.sp.ok obscene.sp.ok
XMISC=		READ_ME fortune.6 strfile.8 Makefile Notes Rot13 Shar_split :trfix
XLIBDIR=		/usr/games/lib
XBINDIR=		/usr/games
XUSER=		daemon			# owner of fortune system
XDEFS=					# BSD systems
X#DEFS=		-DNO_RANDOM -DREGCMP	# System V systems
XCFLAGS=		-O $(DEFS)
XLIBS=					# BSD systems
X#LIBS=		-lPW			# System V systems
XSFLAGS=		-r
XARF=		fortune.ar
XTARF=		/dev/rmt8
XSHARF=		fort.shar
XSHARFLAGS=	-vmpX
XTDEV=
XTROFF=		psroff $(TDEV)
X
X.DEFAULT:
X	cat $<.?? > $<
X	rm -f $<.??
X	chmod -r $<
X
Xall: fortune strfile unstr fortunes.dat
X
Xfortune: fortune.o rnd.o
X	$(CC) $(CFLAGS) -o fortune fortune.o rnd.o $(LIBS)
X
Xstrfile: strfile.o rnd.o
X	$(CC) $(CFLAGS) -o strfile strfile.o rnd.o
X
Xunstr: unstr.o
X	$(CC) $(CFLAGS) -o unstr unstr.o
X
Xfortune.o strfile.o unstr.o: strfile.h
X
Xfortunes.dat: fortunes strfile
X	./strfile $(SFLAGS) fortunes
X
Xfortunes: $(FORTUNES)
X	cp scene fortunes
X	chmod u+w fortunes
X	echo "%-" >> fortunes
X	cat obscene >> fortunes
X
Xlint:
X	lint -hxb $(DEFS) fortune.c rnd.c 2>&1 > fortune.lint
X	lint -hxb $(DEFS) strfile.c rnd.c 2>&1 > strfile.lint
X	lint -hxb $(DEFS) unstr.c 2>&1 > unstr.lint
X
Xtags: $(CFILES)
X	ctags $(CFILES)
X
Xinstall: all install.data
X	cp fortune $(BINDIR)/
X	strip $(BINDIR)/fortune
X	chown $(USER) $(BINDIR)/fortune
X	chmod 4711 $(BINDIR)/fortune
X
Xinstall.data: fortunes.dat
X	mv fortunes.dat $(LIBDIR)/
X	chown $(USER) $(LIBDIR)/fortunes.dat
X	chmod 600 $(LIBDIR)/fortunes.dat
X
Xar:
X	rm -f $(ARF)
X	ar cqv $(ARF) $(MISC) $(CFILES) $(SFILES) $(TFILES) $(FORTUNES)
X
Xtar:
X	tar crvbf 20 $(TARF) $(ARF) $(MISC) $(CFILES) $(SFILES) $(TFILES) $(FORTUNES)
X
Xshar:
X	./Rot13 obscene > obscene.r13
X	-rm -f $(SHARF)* scene.?? obscene.r13.??
X	shar $(SHARFLAGS) $(MISC) $(SFILES) $(TFILES) > $(SHARF).01
X	shar $(SHARFLAGS) $(CFILES) > $(SHARF).02
X	./Shar_split obscene.r13 $(SHARF) 3 "$(SHARFLAGS)" "sed -f :trfix"
X	./Shar_split scene $(SHARF) 5 "$(SHARFLAGS)"
X
Xshar.clean:
X	-rm -f $(SHARF)* scene.?? obscene.r13 obscene.r13.?? .obscene.com
X
Xspell:	scene.sp obscene.sp
X
XSpell.hlist: scene.sp.ok obscene.sp.ok
X	cat scene.sp.ok obscene.sp.ok | spellin /usr/dict/hlista > Spell.hlist
X
Xscene.sp: Spell.hlist scene
X	spell -d Spell.hlist scene > scene.sp
X
Xobscene.sp: Spell.hlist obscene
X	spell -d Spell.hlist obscene > obscene.sp
X
Xdone_spell:
X	sort -u -o scene.sp.ok scene.sp.ok scene.sp
X	sort -u -o obscene.sp.ok obscene.sp.ok obscene.sp
X
Xtroff: troff.scene troff.obscene
X
Xtroff.scene:
X	./Do_troff scene $(TROFF)
X
Xtroff.obscene:
X	./Do_troff obscene $(TROFF)
X
Xclean: sort.clean shar.clean
X	rm -f fortune fortunes fortunes.dat fortunes.tar strfile unstr ? core *.o Spell.hlist *.sp
X
Xsort: sort.scene sort.obscene
X
Xsort.scene: strfile unstr
X	strfile -oi scene
X	mv scene Oscene
X	unstr -o scene
X
Xsort.obscene: strfile unstr
X	strfile -oi obscene
X	mv obscene Oobscene
X	unstr -o obscene
X
Xsort.clean:
X	rm -f Oscene Oobscene scene.dat obscene.dat
END_OF_Makefile
if test 3127 -ne `wc -c <Makefile`; then
    echo shar: \"Makefile\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f Notes -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"Notes\"
else
echo shar: Extracting \"Notes\" \(6974 characters\)
sed "s/^X//" >Notes <<'END_OF_Notes'
XWarning:
X	The fortunes contained in the fortune database have been
X	collected haphazardly from a cacophony of sources, in number so
X	huge it boggles the mind.  It is impossible to do any
X	meaningful quality control on attributions, or lack thereof, or
X	exactness of the quote.  Since this database is not used for
X	profit, and since entire works are not published, it falls
X	under fair use, as we understand it.  However, if any
X	half-assed idiot decides to make a profit off of this, they
X	will need to double check it all, and nobody not involved of
X	such an effort makes any warranty that anything in the database
X	bears any relation to the real world of literature, law, or
X	other bizzarrity.
X
XThis file describes the format for fortunes in the database.  This is
Xdone in detail to make it easier to keep track of things.  Any rule
Xgiven here may be broken to make a better joke.
X
X[All examples are indented by one tab stop -- KCRCA]
X
XNumbers should be given in parentheses, e.g.,
X
X	(1)	Everything depends.
X	(2)	Nothing is always.
X	(3)	Everything is sometimes.
X
XAttributions are two tab stops, followed by two hyphens, followed by a
Xspace, followed by the attribution, and are *not* preceded by blank
Xlines.  Book, journal, movie, and all other titles are in quotes, e.g.,
X
X	$100 invested at 7% interest for 100 years will become $100,000, at
X	which time it will be worth absolutely nothing.
X			-- Lazarus Long, "Time Enough for Love"
X
XAttributions which do not fit on one (72 char) line should be continued
Xon a line which lines up below the first text of the attribution, e.g.,
X
X			-- A very long attribution which might not fit on one
X			   line, "Ken Arnold's Stupid Sayings"
X
XSingle paragraph fortunes are in left justified (non-indented)
Xparagraphs unless they fall into another category listed below (see
Xexample above).  Longer fortunes should also be in left justified
Xparagraphs, but if this makes it too long, try indented paragraphs,
Xwith indentations of either one tab stop or 5 chars.  Indentations of
Xless than 5 are too hard to read.
X
XLaws have the title left justified and capitalized, followed by a
Xcolon, with all the text of the law itself indented one tab stop,
Xinitially capitalized, e.g.,
X
X	A Law of Computer Programming:
X		Make it possible for programmers to write in English and you
X		will find the programmers cannot write in English.
X
XLimericks are indented as follows, all lines capitalized:
X
X	A computer, to print out a fact,
X	Will divide, multiply, and subtract.
X		But this output can be
X		No more than debris,
X	If the input was short of exact.
X
XAccents precede the letter they are over, e.g., "`^He" for e with a
Xgrave accent.  Underlining is done on a word-by-word basis, with the
Xunderlines preceding the word, e.g., "__^H^Hhi ____^H^H^H^Hthere".
X
XNo fortune should run beyond 72 characters on a single line without
Xgood justification (er, no pun intended).  And no right margin
Xjustification, either.  Sorry.  For BSD people, there is a program
Xcalled "fmt" which can make this kind of formatting easier.
X
XDefinitions are given with the word or phrase left justified, followed
Xby the part of speech (if appropriate) and a colon.  The definition
Xstarts indented by one tab stop, with subsequent lines left justified,
Xe.g.,
X
X	Afternoon, n.:
X		That part of the day we spend worrying about how we wasted the
X	morning.
X
XQuotes are sometimes put around statements which are funnier or make
Xmore sense if they are understood as being spoken, rather than written,
Xcommunication, e.g.,
X
X	"All my friends and I are crazy.  That's the only thing that keeps us
X	sane."
X
XEllipses are always surrounded by spaces, except when next to
Xpunctuation, and are three dots long.
X
X	"... all the modern inconveniences ..."
X			-- Mark Twain
X
XHuman initials always have spaces after the periods, e.g, "P. T.
XBarnum", not "P.T. Barnum".  However, "P.T.A.", not "P. T. A.".
X
XAll fortunes should be attributed, but if and only if they are original
Xwith somebody.  Many people have said things that are folk sayings
X(i.e., are common among the folk (i.e., us common slobs)).  There is
Xnothing wrong with this, of course, but such statements should not be
Xattributed to individuals who did not invent them.
X
XHoroscopes should have the sign indented by one tab stop, followed by
Xthe dates of the sign, with the text left justified below it, e.g.,
X
X		AQUARIUS (Jan 20 - Feb 18)
X	You have an inventive mind and are inclined to be progressive.  You lie
X	a great deal.  On the other hand, you are inclined to be careless and
X	impractical, causing you to make the same mistakes over and over
X	again.  People think you are stupid.
X
XSingle quotes should not be used except as quotes within quotes.  Not
Xeven single quotes masquerading as double quotes are to be used, e.g.,
Xdon't say ``hi there'' or `hi there' or 'hi there', but "hi there".
XHowever, you *can* say "I said, `hi there'".
X
XA long poem or song can be ordered as follows in order to make it fit
Xon a screen (fortunes should be 19 lines or less if at all possible)
X(numbers here are stanza numbers):
X
X	11111111111111111111
X	11111111111111111111
X	11111111111111111111			22222222222222222222
X	11111111111111111111			22222222222222222222
X						22222222222222222222
X	33333333333333333333			22222222222222222222
X	33333333333333333333
X	33333333333333333333			44444444444444444444
X	33333333333333333333			44444444444444444444
X						44444444444444444444
X						44444444444444444444
X
XFortunes are split into potentially offensive and not potentially
Xoffensive, into the files "obscene" and "scene", respectively.
XAnything which would not make it onto network prime time programming
Xshould *not* go into "scene".  Also, anything which would only get on
Xif some discredited kind of guy said it should *not* go in scene.
XFortunes containing "shit", "fuck", "cock" (not the male version of a
Xchicken, obviously, but the slang for penis), "cunt", "pussy", and such
Xlike are "obscene".  Political opinions are supposed to be in
X"obscene", too.  Anything which assumes as a world view blatantly
Xracist, mysogynist, or homophobic ideas should not be in either, since
Xthey are not really funny unless *you* are racist, mysogynist, or
Xhomophobic.
X
XThe point of this is that people have should have a reasonable
Xexpectation that, should they just run "fortune", they will not be
Xoffended.  We know that some people take offense at anything, but
Xnormal people do have opinions, too, and have a right not to have their
Xsensibilities offended by a program which is supposed to be
Xentertaining.  People who run "fortune -o" or "fortune -a" are saying,
Xin effect, that they are willing to have their sensibilities tweaked.
XHowever, they should not have their personal worth seriously (i.e., not
Xin jest) assaulted.  Jokes which depend for their humor on racist,
Xmysogynist (sexist), or homophobic stereotypes *do* seriously assault
Xindividual personal worth, and in an general entertainment medium we
Xshould be able to get by without it.
END_OF_Notes
if test 6974 -ne `wc -c <Notes`; then
    echo shar: \"Notes\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f fortune.6 -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"fortune.6\"
else
echo shar: Extracting \"fortune.6\" \(1569 characters\)
sed "s/^X//" >fortune.6 <<'END_OF_fortune.6'
X.\" Copyright (c) 1980 Regents of the University of California.
X.\" All rights reserved.  The Berkeley software License Agreement
X.\" specifies the terms and conditions for redistribution.
X.\"
X.\"	@(#)fortune.6	6.1 (Berkeley) 5/20/85
X.\"
X.\" $Header: fortune.6,v 1.2 87/05/08 11:07:11 arnold Exp $
X.TH FORTUNE 6 "31 Apr, 1987"
X.UC 4
X.SH NAME
Xfortune \- print a random, hopefully interesting, adage
X.SH SYNOPSIS
X.B /usr/games/fortune
X[
X.B \-
X] [
X.B \-wslaoi
X]
X[
X.B \-m
X.I pattern
X]
X[ file ]
X.SH DESCRIPTION
XWhen
X.I fortune
Xis run with no arguments
Xit prints out a random epigram. The flags mean:
X.PP
X.TP 5
X.B \-w
XWait before termination
Xfor an amount of time calculated from the number of characters in the message.
XThis is useful if it is executed as part of the logout procedure
Xto guarantee that the message can be read before the screen is cleared.
X.TP 5
X.B \-s
XShort apothegms only.
X.TP 5
X.B \-l
XLong dictums only.
X.TP
X.B \-o
XChoose from an alternate list of aphorisms,
Xoften used for potentially offensive ones.
X.TP
X.B \-a
XChoose from either list of maxims.
X.TP
X.B \-m
XPrint out all fortunes which match the regular expression
X.I pattern .
XSee
X.BR regex (3)
Xor
X.BR regcmp (3)
Xfor description of patterns.
X.TP
X.B \-i
XIgnore case for
X.B \-m
Xpatterns.
X.PP
XThe user may specify a file of sayings.
XThis file must be created by strfile(8),
Xand be given by the user as
X.I file.
XOnly one such file may be named;
Xif more are,
X.I fortune
Xuses the last one specified.
X.SH FILES
X/usr/games/lib/fortunes.dat
X.SH AUTHOR
XKen Arnold
X.SH "SEE ALSO"
Xregex(3), regcmp(3), strfile(8)
END_OF_fortune.6
if test 1569 -ne `wc -c <fortune.6`; then
    echo shar: \"fortune.6\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f fortune.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"fortune.c\"
else
echo shar: Extracting \"fortune.c\" \(8966 characters\)
sed "s/^X//" >fortune.c <<'END_OF_fortune.c'
X/* $Header: fortune.c,v 1.18 87/05/08 13:26:02 arnold Exp $ */
X
X# include	<sys/types.h>
X# include	<stdio.h>
X# include	<sys/file.h>
X# include	<sys/stat.h>
X# include	"strfile.h"
X
X#ifndef NO_REGEX
X# include	<ctype.h>
X#endif
X
X# define	TRUE	1
X# define	FALSE	0
X# define	bool	short
X
X# define	MINW	6		/* minimum wait if desired */
X# define	CPERS	20		/* # of chars for each sec */
X# define	SLEN	160		/* # of chars in short fortune */
X
X# define	FORTFILE	"/usr/games/lib/fortunes.dat"
X
Xbool	Wflag		= FALSE;	/* wait desired after fortune */
Xbool	Sflag		= FALSE;	/* short fortune desired */
Xbool	Lflag		= FALSE;	/* long fortune desired */
Xbool	Oflag		= FALSE;	/* offensive fortunes only */
Xbool	Aflag		= FALSE;	/* any fortune allowed */
X#ifndef NO_REGEX
Xbool	Mflag		= FALSE;	/* dump fortunes matching a pattern */
X#endif
X
Xchar	*Fortfile	= FORTFILE,	/* fortune database */
X	*Usage[]	= {
X# ifdef	NO_REGEX
X       "usage:  fortune [ - ] [ -wsloa ] [ file ]",
X# else
X       "usage:  fortune [ - ] [ -wsloai ] [ -m pattern ] [ file ]",
X# endif
X       "	- - give this summary of usage",
X       "	w - have program wait after printing message in order",
X       "	    to give time to read",
X       "	s - short fortunes only",
X       "	l - long fortunes only",
X       "	o - offensive fortunes only",
X       "	a - any fortune, regular or offensive",
X# ifndef NO_REGEX
X       "	m - print fortunes which match a pattern",
X       "	i - ignore case in matching patterns",
X# endif
X       "		Mail suggested fortunes to \"fortune@ucbvax.berkeley.edu\"",
X	NULL
X	};
X
Xoff_t	Seekpts[2];			/* seek pointers to fortunes */
X
XFILE	*Inf;				/* input file */
X
XSTRFILE	Tbl;				/* input table */
X
Xchar	*malloc();
X
X#ifndef NO_REGEX
Xchar	*conv_pat();
X#endif
X
X#ifndef NO_REGEX
X#ifdef REGCMP
X# define	RE_COMP(p)	(Re_pat = regcmp(p, NULL))
X# define	BAD_COMP(f)	((f) == NULL)
X# define	RE_EXEC(p)	regex(Re_pat, (p))
X
Xchar	*Re_pat;
X
Xchar	*regcmp(), *regex();
X#else
X# define	RE_COMP(p)	(p = re_comp(p))
X# define	BAD_COMP(f)	((f) != NULL)
X# define	RE_EXEC(p)	re_exec(p)
X
Xchar	*re_comp(), *re_exec();
X#endif
X#endif
X
Xtime_t	time();
X
Xmain(ac, av)
Xint	ac;
Xchar	*av[];
X{
X	register char	c;
X	register int	nchar = 0;
X
X	getargs(ac, av);
X	if ((Inf = fopen(Fortfile, "r+")) == NULL) {
X		perror(Fortfile);
X		exit(-1);
X	}
X	if (fread((char *) &Tbl, sizeof Tbl, 1, Inf) != 1) {	/* NOSTRICT */
X		fprintf(stderr, "fortune file is truncated\n");
X		exit(-1);
X	}
X	if (Tbl.str_longlen <= SLEN && Lflag) {
X		fprintf(stderr, "Sorry, no long strings in this file\n");
X		exit(0);
X	}
X	if (Tbl.str_shortlen > SLEN && Sflag) {
X		fprintf(stderr, "Sorry, no short strings in this file\n");
X		exit(0);
X	}
X
X	/*
X	 * initialize the pointer to the first -o fortune if need be.
X	 */
X	if (Tbl.str_delims[2] == 0)
X		Tbl.str_delims[2] = Tbl.str_delims[0];
X
X#ifndef NO_REGEX
X	if (Mflag) {
X		find_matches();
X		/* NOTREACHED */
X	}
X#endif
X
X	do {
X		getfort();
X	} while ((Sflag && !is_short()) || (Lflag && !is_long()));
X
X	(void) fseek(Inf, Seekpts[0], 0);
X	while (c = getc(Inf)) {
X		nchar++;
X		putchar(c);
X	}
X	(void) fflush(stdout);
X	(void) fseek(Inf, 0L, 0);
X#ifdef	LOCK_EX
X	/*
X	 * if we can, we exclusive lock, but since it isn't very
X	 * important, we just punt if we don't have easy locking
X	 * available.
X	 */
X	(void) flock(fileno(Inf), LOCK_EX);
X#endif	LOCK_EX
X	if (fwrite((char *) &Tbl, 1, sizeof Tbl, Inf) != sizeof Tbl)
X		fprintf(stderr, "can't update fortune data file\n");
X#ifdef	LOCK_EX
X	(void) flock(fileno(Inf), LOCK_UN);
X#endif	LOCK_EX
X	if (Wflag)
X		sleep((unsigned int) max((int) nchar / CPERS, MINW));
X	exit(0);
X}
X
X/*
X * is_short:
X *	Return TRUE if fortune is "short".
X */
Xis_short()
X{
X	register int	nchar;
X
X	if (!(Tbl.str_flags & (STR_RANDOM | STR_ORDERED)))
X		return (Seekpts[1] - Seekpts[0] <= SLEN);
X	(void) fseek(Inf, Seekpts[0], 0);
X	nchar = 0;
X	while (getc(Inf))
X		nchar++;
X	return (nchar <= SLEN);
X}
X
X/*
X * is_long:
X *	Return TRUE if fortune is "long".
X */
Xis_long()
X{
X	register int	nchar;
X
X	if (!(Tbl.str_flags & (STR_RANDOM | STR_ORDERED)))
X		return (Seekpts[1] - Seekpts[0] > SLEN);
X	(void) fseek(Inf, Seekpts[0], 0);
X	nchar = 0;
X	while (getc(Inf))
X		nchar++;
X	return (nchar > SLEN);
X}
X
X/*
X *	This routine evaluates the arguments on the command line
X */
Xgetargs(ac, av)
Xregister int	ac;
Xregister char	*av[];
X{
X	register int	i;
X	register char	*sp;
X	register int	j;
X	register short	bad;
X	register int	ignore_case;
X# ifndef NO_REGEX
X	register char	*pat;
X# endif
X
X	ignore_case = FALSE;
X	bad = 0;
X	pat = NULL;
X	for (i = 1; i < ac; i++)  {
X		if (av[i][0] != '-') {
X			(void) setuid(getuid());
X			(void) setgid(getgid());
X			Fortfile = av[i];
X		}
X		else if (av[i][1] == '\0') {
X			j = 0;
X			while (Usage[j] != NULL)
X				puts(Usage[j++]);
X			exit(0);
X			/* NOTREACHED */
X		}
X		else
X			for (sp = &av[i][1]; *sp != '\0'; sp++)
X				switch (*sp) {
X				  case 'w':	/* give time to read */
X					Wflag++;
X					break;
X				  case 's':	/* short ones only */
X					Sflag++;
X					Lflag = 0;
X					break;
X				  case 'l':	/* long ones only */
X					Lflag++;
X					Sflag = 0;
X					break;
X				  case 'o':	/* offensive ones only */
X					Oflag++;
X					break;
X				  case 'a':	/* any fortune */
X					Aflag++;
X					/*
X					 * initialize the random number
X					 * generator; throw away the first
X					 * few numbers to avoid any non-
X					 * randomness in startup
X					 */
X					srnd(time((time_t *) NULL) + getpid());
X					for (j = 0; j < 20; j++)
X						(void) rnd(100);
X					break;
X				  case 'm':	/* dump out the fortunes */
X# ifdef	NO_REGEX
X				  case 'i':
X					fprintf(stderr,
X						"can't match fortunes on this system (Sorry)\n");
X					bad++;
X# else
X					Mflag++;
X					if (sp[1]) {
X						pat = ++sp;
X						while (*sp)
X							sp++;
X					}
X					else if (i + 1 < ac)
X						pat = av[++i];
X					else {
X						fprintf(stderr,
X							"must give pattern\n");
X						bad++;
X						break;
X					}
X					break;
X				  case 'i':
X					ignore_case++;
X					break;
X# endif	NO_REGEX
X				  default:
X					fprintf(stderr, "unknown flag: '%c'\n",
X						*sp);
X					bad++;
X					break;
X				}
X	}
X
X# ifndef NO_REGEX
X	if (pat != NULL) {
X		if (ignore_case)
X			pat = conv_pat(pat);
X		if (BAD_COMP(RE_COMP(pat))) {
X#ifndef REGCMP
X			fprintf(stderr, "%s\n", pat);
X#else
X			fprintf(stderr, "bad pattern: %s\n", pat);
X#endif
X			bad++;
X		}
X	}
X# endif	NO_REGEX
X
X	if (bad) {
X		printf("use \"%s -\" to get usage\n", av[0]);
X		exit(-1);
X	}
X}
X
X/*
X * getfort:
X *	Get the fortune data file's seek pointer for the next fortune.
X */
Xgetfort()
X{
X	register int	fortune;
X
X	/*
X	 * Make sure all values are in range.
X	 */
X
X	if (Tbl.str_delims[1] >= Tbl.str_delims[0])
X		Tbl.str_delims[1] %= Tbl.str_delims[0];
X	if (Tbl.str_delims[2] >= Tbl.str_numstr) {
X		Tbl.str_delims[2] -= Tbl.str_delims[0];
X		Tbl.str_delims[2] %= Tbl.str_numstr - Tbl.str_delims[0];
X		Tbl.str_delims[2] += Tbl.str_delims[0];
X	}
X
X	if (Aflag) {
X		if (rnd((int) Tbl.str_numstr) < Tbl.str_delims[0])
X			fortune = Tbl.str_delims[1]++;
X		else
X			fortune = Tbl.str_delims[2]++;
X	}
X	else if (Oflag)
X		fortune = Tbl.str_delims[2]++;
X	else
X		fortune = Tbl.str_delims[1]++;
X
X	(void) fseek(Inf, (off_t) (sizeof Seekpts[0]) * fortune + sizeof Tbl,
X		     0);
X	if (fread((char *) Seekpts, (sizeof Seekpts[0]), 2, Inf) < 2) {
X		fprintf(stderr, "fortune data file corrupted\n");
X		exit(-2);
X	}
X}
X
Xmax(i, j)
Xregister int	i, j;
X{
X	return (i >= j ? i : j);
X}
X
X#ifndef	NO_REGEX
X/*
X * conv_pat:
X *	Convert the pattern to an ignore-case equivalent.
X */
Xchar *
Xconv_pat(orig)
Xregister char	*orig;
X{
X	register char	*sp;
X	register int	cnt;
X	register char	*new;
X
X	cnt = 1;	/* allow for '\0' */
X	for (sp = orig; *sp != '\0'; sp++)
X		if (isalpha(*sp))
X			cnt += 4;
X		else
X			cnt++;
X	if ((new = malloc(cnt)) == NULL) {
X		fprintf(stderr, "pattern too long for ignoring case\n");
X		exit(1);
X	}
X
X	for (sp = new; *orig != '\0'; orig++) {
X		if (islower(*orig)) {
X			*sp++ = '[';
X			*sp++ = *orig;
X			*sp++ = toupper(*orig);
X			*sp++ = ']';
X		}
X		else if (isupper(*orig)) {
X			*sp++ = '[';
X			*sp++ = *orig;
X			*sp++ = tolower(*orig);
X			*sp++ = ']';
X		}
X		else
X			*sp++ = *orig;
X	}
X	*sp = '\0';
X	return new;
X}
X
X/*
X * find_matches:
X *	Find all the fortunes which match the pattern we've been given.
X */
Xfind_matches()
X{
X	register char		*sp;
X	register char		*fortune;
X	register int		found_one;
X	register int		i;
X	register int		start, end;
X
X	if (Oflag || Aflag)
X		end = Tbl.str_numstr;
X	else
X		end = Tbl.str_delims[0];
X	if (Oflag) {
X		start = Tbl.str_delims[0];
X		(void) fseek(Inf, Tbl.str_dpos[0], 0);
X	}
X	else {
X		start = 0;
X		(void) fseek(Inf,
X			     (off_t) (sizeof Tbl +
X				      sizeof Seekpts[0] * (Tbl.str_numstr + 1)),
X			     0);
X	}
X
X	if ((fortune = malloc(Tbl.str_longlen + 1)) == NULL) {
X		perror("malloc");
X		exit(1);
X	}
X	found_one = FALSE;
X	for (i = start; i < end; i++) {
X		sp = fortune;
X		while ((*sp++ = getc(Inf)) != '\0')
X			continue;
X		if (RE_EXEC(fortune)) {
X			if (found_one)
X				printf("%%%%\n");
X			(void) fwrite(fortune, 1, sp - fortune, stdout);
X			found_one = TRUE;
X		}
X	}
X	if (found_one)
X		exit(0);
X	else
X		exit(1);
X	/* NOTREACHED */
X}
X# endif	NO_REGEX
END_OF_fortune.c
if test 8966 -ne `wc -c <fortune.c`; then
    echo shar: \"fortune.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f obscene.sp.ok -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"obscene.sp.ok\"
else
echo shar: Extracting \"obscene.sp.ok\" \(2281 characters\)
sed "s/^X//" >obscene.sp.ok <<'END_OF_obscene.sp.ok'
XACLU's
XAire
XAlzheimer's
Xamnesia
XAndropov
XAngina
XAnsel
Xapoplexy
XArtz
Xasshole
Xassholes
Xbasewoman
XBegorrah
XBenchley
Xbible
XBierce
Xbleed'n
XBlore
XBogart
Xboobs
XBoraxo
XBormann
Xbras
Xbrutish
Xbuffaloes
XBULLSHIT
Xbullshit
Xbungee
Xbusiasm
XByrn
XCallay
XCalooh
Xcarnivorous
XCaspar
XCastlereagh
Xcastration
Xcatgut
Xcervical
XCheerios
Xchromosome
XCianci
XClair
XCoito
Xcoitus
Xcommie
XComo
XCondoms
Xcontaineth
XCosell's
XCOUNTERFACTUAL
XCounterfactual
Xcounterfactual
Xcountess
Xcreole
XCrisco
XCrotels
Xcubits
XCunnilingus
Xcunnilingus
Xcunt
Xdah
XDalmatians
XDammit
XDarjeeling
Xdeb
Xdefendin
XDeferrals
XDegen
Xdem
XDEMO
XDiddley
Xdong
Xdoric
Xdumbfounded
Xdunno
XDurcan
Xekil
XelihW
Xenchillada
Xergo
XErmintrude's
Xeschatological
XEwald
Xexcrement
Xeyeing
XFagin
XFaire
XFalwell
XFarmier
Xfarting
Xfeces
XFeiffer
Xferkin
Xfetcheth
XFie
Xfiesty
Xfindeth
Xflunkers
XFornication
Xforsight
Xfrat
Xfreakout
XFredrick's
XFriants
XFroats
XFuck
Xfuck
Xfucked
XFUCKING
Xfucking
XFumets
XGalbraith
Xgalumphing
Xgangrenous
XGeis
Xgenital
XGimme
Xgimme
Xgirlfriend
Xgniyl
Xgoin
Xgonna
XGoy's
XGraffiti
XGraffito
Xgrandee
XGREAAAAAAT
XGreenway
XGroucho
XGuardsmen
XHaggis
Xhansome
XHeathcote
XHefner
Xhexahedronical
XHitchhiker's
Xhusbandryman
Xiht
Xintestinal
Xjeered
Xjerkin
XJewry
XJr.'s
Xkaloo
XKasha
Xkasha
XKQED
XKrazy
XKRON
Xlassie
Xleapy
Xlecherous
XLeGuin
XLehrer
Xlesbian
XLibbers
XLiddy
Xlimerick
XLyth
Xmah
Xmaidenhead
XMairowitz
Xmali
XMama
XMannis
XMartina
Xmasturbate
XMasturbation
Xmasturbation
XMcAmeter
XMencken
XMethadone
Xmethedrine
XMilo
XMilpitas
Xminiskirt
Xmod
Xmongers
Xmotherfucker
Xmotherfuckers
Xmousetrap
XMOVs
Xmunchies
XNader
XNaiman
XNavratilova
Xne'er
XNope
XNuke
Xole
XOzy
XPDP
XPenis
Xpenis
Xpentameter
Xpere
XPerelman
Xpeyote
XPh.D
XPloughwright
Xpoena
Xpox
XPrine
Xprovideth
XPurmal's
XPUSHJ
XPutrid
XQueensboro
Xqui
Xrabbinical
Xrabelaisian
Xracquet
XRandel
XRaygun
XReaganomics
XRen
Xrhumba
XRinaldi
XRosten
XSahl
Xsaideth
XSchlafly
Xschlemiel
XSeldes
Xshalt
Xshit
Xshithead's
XShits
Xshits
Xshowgirls
Xsissies
XSittin
Xsleaze
XSMOORPLAY
XSMUCK
XSMURFS
Xsoit
Xspake
Xsphincter
Xspikey
XSpraints
XStamboul
XStickin
Xstrewed
XSuckin
Xsuckin
Xsucky
Xsuh
XSusiasm
XTijuana
XTocata
XTomlin
Xtonsillectomy
Xtooties
XToynbee
Xtrashcan
Xtruckloads
XTsk
XTwas
XTwinkie
XTwinkies
XTwiss
XUFOs
Xulcerous
XUUOs
XValby
XVasser
Xveni
Xvici
XVidal
XVidi
XVisme
XWaggying
XWellesleysnatch
XWerderobe
XWhat'll
Xwhimsy
XWiggam
XWilde
XWildebeest
Xwildebeest
XWimley
Xyamalchas
XYbarra
Xylbatrofmoc
Xyogurt
XYoric
XYuletide
XZappa
Xzits
XZukav
END_OF_obscene.sp.ok
if test 2281 -ne `wc -c <obscene.sp.ok`; then
    echo shar: \"obscene.sp.ok\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f scene.sp.ok -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"scene.sp.ok\"
else
echo shar: Extracting \"scene.sp.ok\" \(15876 characters\)
sed "s/^X//" >scene.sp.ok <<'END_OF_scene.sp.ok'
XAAAAAAAAAaaaaaaaaaaaaaaaccccccccckkkkkk
XACHTUNG
XACLU's
XALU
XANRS
XARCHDUKE
XASHes
XATN
XAbbie
XAdamite
XAde
XAdlai
XAdmas
XAdolf
XAelius
XAesop
XAha
XAhrimanes
XAlbran
XAldous
XAleliunas
XAli
XAllan
XAlo
XAlito
XAlvy
XAmana
XAmerigo
XAmica
XAmityville
XAmnesia
XAmp
XAmrom
XAnatol
XAndroids
XAnkh
XAnoint
XAntonym
XApocryphia
XApplebome
XApr
XAquadextrous
XAquarians
XArdis
XArlo
XArpa
XAshleigh
XAsimov
XAspasia
XAspin
XAssateague
XAssoc
XAsterix
XAtlee
XAuden
XAudobon
XAvogardo
XBARFUCIOUS
XBASICs
XBEANSTACK
XBLAH
XBLEAH
XBLETCHEROUS
XBLOTTO
XBOOGA
XBULLWINKLE
XBUTTHEADS
XBYOB
XBaba
XBacall
XBachtrian
XBagbiter
XBagdikian's
XBai
XBaines
XBanach
XBanectomy
XBarach's
XBarbie
XBarf
XBargewater
XBaruch's
XBasie's
XBathquake
XBatman
XBaumol
XBax
XBeagle
XBeal
XBeatty
XBeckett
XBeckmann
XBegathon
XBegatting
XBegone
XBehan
XBeifeld's
XBelloc
XBenares
XBenchley
XBerke
XBernighan
XBertold
XBertolt
XBierce
XBiff
XBillericay
XBionic
XBizoos
XBlaise
XBlish
XBlore
XBlore's
XBlount
XBluestone
XBodenheim
XBok
XBokonon
XBolub's
XBombeck's
XBoob's
XBoola
XBoothe
XBoren's
XBorge
XBoynton
XBramah
XBrandwein
XBrecht
XBrickman
XBrith
XBroido
XBrontosaurus
XBrunner
XBrutus
XBryne's
XBuckminster
XBucky
XBucy's
XBullwinkle
XBumstead
XBurggoven
XBusmanship
XCABERNET
XCChheecckk
XCHARDONNAY
XCONGRAM
XCONtractor
XCPU
XCPU's
XCPUs
XCTA
XCVP
XCaen
XCahn's
XCaissons
XCalio's
XCamillo
XCamptown
XCapt
XCarmel
XCarotene
XCarotene's
XCarperpetuation
XCarrol
XCary
XCasablanca
XCaspar
XCat:man
XCavour
XCelibacy
XCentauri
XCerebron
XCerebus
XChanning
XCharnock's
XChateaubriand
XChatterley's
XCheatham
XCheckuary
XCheez
XChem
XChesterson
XChevins
XChichester
XChism's
XChisolm's
XChloroplast's
XChok
XChung's
XChurchy
XCianci
XCiardi
XCinemuck
XClaghorn
XClair
XClapton
XClarkson
XCleyre
XClopton
XCogito
XCointment
XCollis
XColton
XColvard's
XCommie
XComputerdom
XConnell
XConnellan
XConstipation
XContrariwise
XCorky
XCory
XCosmo
XCrabgrass
XCray
XCreemy
XCripps
XCroll
XCroll's
XCuomo
XCurchill
XCuticle
XCyberiad
XCybernetic
XDAC
XDAMMIT
XDAV
XDCL
XDCS
XDECzilla
XDELI
XDETERIORATA
XDEVO
XDFA
XDINGELL
XDOODAH
XDabba
XDaft
XDagobah
XDagwood
XDalglish
XDamian
XDanforth
XDarrow
XDarryl
XDarth
XDas
XDavisson
XDeVries
XDeVries's
XDecot
XDefactualization
XDeloria
XDeteriorata
XDevo
XDiamondback
XDiddly
XDijkstra
XDingell
XDirksen
XDisco
XDisraeli
XDobb's
XDoc
XDolph
XDonatus
XDoo
XDoonesbury
XDrabek
XDrescher
XDristan
XDropt
XDucharme's
XDuckie
XDum
XDunne
XDurant
XDykstra
XDyson
XEAROM
XELECTROCUTION
XENIACs
XEagleson
XEagleson's
XEbenezum
XEbert
XEckstein
XEdman
XEdpress
XEggnog
XEhrman's
XElbert
XElectrocution
XEllery
XElliot
XElroy
XElven
XElvis
XElvish
XEmmons
XEmu
XEnm
XEnnui
XEpperson's
XErogenous
XErtz
XEsser
XEuell
XEustace
XExupery
XFROB
XFROBBOTZIM
XFROBBOZ
XFROBNITZ
XFROBNODULE
XFROBNULE
XFROBULE
XFROTZ
XFWWAAAAAAPPPP
XFafhrd
XFainali
XFakir
XFalkland
XFandal
XFarrow
XFatherland
XFeiffer
XFeiner
XFemme
XFenelon
XFerm
XFidel
XFiebig
XFiedler
XFillmore
XFinagle
XFinagle's
XFinagling
XFiresign
XFirth
XFlagg
XFlannagan's
XFlaubert
XFlinstone
XFlon's
XFlugg's
XFlummery
XFoghorn
XFollen
XForbiddie
XForssman
XFortue
XFosdick
XFoxx
XFran
XFrancois
XFrayn
XFriedrich
XFrisbee
XFrisbeetarianism
XFrito
XFrobnicate
XFrobnitz
XFrobnitzem
XFrodo
XFroot
XFruitcakes
XFuch's
XFudd
XFudd's
XFuoss
XFurbling
XFurst
XFylstra
XGO.SYSIN
XGOBLIN
XGRAMmer
XGUGUs
XGUISEPPE
XGUMM
XGUMMed
XGalbraith
XGalilei
XGalileo
XGalvani
XGalvani's
XGamekeeping
XGandalf
XGandhi
XGastly
XGaultier
XGauvreay
XGeis
XGenderplex
XGerat
XGerrold's
XGhandi
XGhostbusters
XGiddens
XGigo
XGilda
XGilpkerio
XGimlet
XGimmie
XGlaser
XGnagloot
XGodel's
XGodot
XGodzilla
XGoestheveezl
XGolda
XGoldenstern's
XGoldwyn
XGondoliers
XGoodbye
XGoodgulf
XGopete
XGorbachev
XGorden
XGorey
XGotlieb
XGoto
XGotta
XGoulden
XGoy's
XGrabel's
XGraffiti
XGraffito
XGreenstein
XGregorian
XGrelb's
XGries
XGrishman
XGroucho
XGuardsman
XGuiseppe
XGumps
XGurmlish
XHED
XHEE
XHOAX
XHOB'LIN
XHOOTCH
XHackensack
XHadassah
XHaeckel
XHahahahahahahahaha
XHaig
XHain't
XHaleleuia
XHanukka
XHara
XHarary
XHarbride
XHarlequin
XHarpoon
XHarrisberger's
XHarrold
XHartke
XHavelock
XHawkeye
XHawkwind
XHegel
XHeineken
XHeinlein
XHellman
XHenny
XHenrick
XHenrik
XHerford
XHiggeldy
XHilaire
XHillary's
XHinckley
XHipcrime
XHippogriff
XHitchhiker's
XHlade's
XHoare
XHoare's
XHoban
XHoffenstein
XHofstadter
XHofstadter's
XHolton
XHomespun
XHoppe
XHorngren's
XHousman
XHuntingdon
XHurewitz's
XID's
XII.a
XIacocca
XIan
XIbson
XIear
XIears
XIgnatowski
XIgnisecond
XIles
XIles's
XIngliy
XIngmar
XInlaws
XIrsin
XIsaak
XIsiah
XIso
XIssac
XIssawi
XIssawi's
XIst
XItalo
XIum
XJELL
XJFK
XJackals
XJacquin's
XJael
XJaka
XJarry
XJaspar
XJawaharlal
XJehan
XJell
XJenerally
XJenkinson's
XJenks
XJenning's
XJonathon
XJone's
XJonesboro
XJordache
XJosh
XJuliana
XJun
XJung
XJustin
XKLUDGE
XKOBOLDS
XKPH
XKabotschniks
XKan
XKandel
XKari
XKasner
XKasspe
XKauffmann
XKaul
XKeate
XKehlog
XKeir
XKellen
XKempson
XKenobi
XKerwin
XKesey
XKiernan
XKinkler's
XKistomerces
XKitman
XKitzenger
XKleptomaniac
XKlone
XKnebel
XKnuth
XKool
XKorda
XKrispies
XKrogt
XKulawiec
XLAFITE
XLIBRA
XLITHP
XLSD
XLaRouchefoucauld
XLackland's
XLactomangulation
XLadybug
XLaetrile
XLafferty
XLampson
XLandburgher
XLangsam's
XLankhmar
XLankhmar's
XLapham
XLapwarmer
XLardner
XLarkinson's
XLassie
XLaverne
XLazlo's
XLeGuin
XLebowitz
XLeedom
XLehrer
XLeibe
XLeiber
XLeibowitz
XLeibowitz's
XLeith
XLem
XLenore
XLes
XLettvin
XLevant
XLeverett
XLibra
XLichty
XLieberman's
XLiebling
XLiebowitz
XLilla
XLinkletter
XLippmann
XLiza
XLogg's
XLogicians
XLongworth
XLookit
XLovin
XLowery's
XLtd
XLubarsky's
XLuce
XLudcke
XLuddites
XLuigi
XLumsden
XLuten
XLyndon
XLysistrata
XMANCHA
XMDL
XMERCUTIO
XMHz
XMOS
XMSCP
XMYSTERIANS
XMabbitt
XMacDowell
XMacNelley
XMacNiece
XMacaroons
XMacy's
XMadelyn
XMagee
XMagnocartic
XMahatma
XMai
XMalek's
XMammel
XManhandling
XMankiewicz
XMarley
XMarshalltown
XMaryel
XMaslow
XMathis
XMaud
XMaugham
XMaxey
XMaxson
XMcCloctnik
XMcEvoy
XMcLuhan
XMcNulty
XMedawar
XMeese
XMeir
XMelott
XMem'ry
XMencken
XMencken's
XMengot
XMensa
XMerrick
XMeskimen's
XMeta
XMetz
XMewling
XMeyrowitz
XMia
XMichener
XMikado
XMiksch's
XMilkbone
XMillay
XMillihelen
XMillions
XMillman
XMilpitas
XMinas
XMinnelli
XMitgong
XMoby
XMohandas
XMollison's
XMom
XMongo
XMontagu
XMophobia
XMoping
XMordor
XMorganstern
XMorrisey
XMosher's
XMudgeeraba
XMudhead
XMuhammad
XMuppet
XMurdoch
XMustgo
XMyung
XNEWSFLASH
XNYT
XNader
XNaeser's
XNaiman
XNapolean
XNarnia
XNasrudin
XNatasha
XNate
XNather
XNeantical
XNeizant
XNeo
XNerd
XNesbitt
XNevil
XNewlan's
XNgdanga
XNicklaus
XNicol
XNiels
XNikita
XNiklaus
XNingauble
XNoelie
XNome
XNora's
XNovocain
XNutley
XOMNIVERSAL
XOR'd
XOUTCONERR
XObi
XOgborn
XOlivier
XOmar
XOmnibiblious
XOnan
XOntopsychological
XOntopsychology
XOpe
XOphelia
XOrac
XOrben
XOrson
XOzman's
XPDGERS
XPDP
XPDQ
XPOWDERMILK
XPRL
XPROCESSORs
XPaar
XPadlipsky
XPaley
XPandanga
XPardo's
XParnas
XParnell
XParrafin
XPatageometry
XPecor's
XPedaeration
XPegler
XPensacoola
XPenzance
XPereant
XPerlis
XPetr
XPharaoh
XPhilbin
XPhilogyny
XPhooey
XPicninnies
XPiggeldy
XPilgermann
XPirsig
XPlaese
XPlatypus
XPluribus
XPocatello
XPodunk
XPohl's
XPoincair
XPolanski
XPorcus
XPostpetroleum
XPoul
XPresley
XPreudhomme's
XProchnow
XPrue
XPsblurtex
XPublilius
XPumpernickel
XPutluck
XPynchon
XQWERT
XQWERTYUIOP
XQuidquid
XQuigley's
XQuincey
XQuincunx
XQuinton
XQuux
XQvid
XRAMs
XRFD
XROMs
XRPG
XRXS
XRadner
XRaisa
XRaisinets
XRansford
XRaskin
XReba
XRedd
XRegan
XReggie
XReisner's
XRelaxen
XRen
XRenner
XRenning's
XRichardian
XRichie
XRigby
XRilke
XRobb
XRobespierre
XRoche
XRochefoucauld
XRoddick
XRogerians
XRoguelet's
XRoguies
XRolex
XRomas
XRooney
XRosten
XRotherham
XRouchefoucauld
XRoumania
XRoxbury
XRoyko
XRubenstein
XRubik's
XRudin's
XRuffed
XRukn
XRupert
XRussel
XRusson
XSARTRE
XSCCS
XSIGPLAN
XSLOBOL
XSafford
XSafire's
XSagan
XSagittarians
XSalome
XSalvor
XSantoro
XSappho
XSargon
XSartre
XSauron
XSayre
XSchapiro's
XSchickel
XSchickele
XSchlattwhapper
XSchmivalry
XSchmonsequences
XSchnuffel
XSchrodinger's
XSchryer
XSchure
XSchwambach
XSchwiggle
XSchwine
XScrubb
XSeager
XSeeger
XSeldon
XSeleznick's
XSep
XSeptober
XSerendipity
XSerling
XSerocki's
XSevenoaks
XShalt
XShamus
XSheil
XShel
XSherany
XShmoedipus
XShoaff
XShoales
XShuman
XSigismund
XSilurian
XSilverstein
XSimard
XSixtus
XSjoberg
XSkyler
XSlinkies
XSlurm
XSmit
XSmollet
XSmurfies
XSnacktrek
XSniglets
XSnowman
XSnowmass
XSocio
XSodd's
XSorhed
XSoupCon
XSox
XSpam
XSpeer's
XSpirtle
XSpisani
XSpock
XSta
XStallman
XStanislaw
XSteelypips
XSteinbach's
XSteinem
XStoffel
XStoppard
XStormtroopers
XStretchy
XStult's
XSuden
XSulu
XSumeria
XSummatra
XSunward
XSupercalifragilisticexpialidocius
XSvevo
XSwaller
XSwinburne
XSwipple's
XSyrus
XTAA
XTLC
XTSO
XTabby
XTaber
XTaber's
XTai
XTanenbaum
XTannenbaum
XTarradiddles
XTeddywookie
XTerence
XTertullian
XTeruillian
XThames
XTheatre
XThieu
XThom
XThoul't
XThreepio
XThroop
XThurber
XThyself
XTierra
XTikkanen
XTitas
XTobias
XTock
XTomlin
XTonka
XTouche
XToup
XToven
XTricia
XTroney
XTrotsky
XTrudeau
XTruscott
XTsu
XTue
XTurgenev
XTurnaucka's
XTussman's
XTut's
XTwas
XTweedledee
XTweedledum
XTwodor
XTwodor's
XUDA50
XUFO's
XURK
XUTCS
XUbi
XUna
XUnd
XUrey
XVAX
XVAX's
XVAXen
XVAXs
XVCR
XVCR's
XVIDEOCASSETTE
XVLSI
XVMS
XVODKA
XVSOP
XVYARZERZOMANIMORORSEZASSEZANSERAREORSES
XVannevar
XVate
XVax
XVeeck
XVelilind's
XVeni
XVenn
XVespucci
XVespuccia
XVic
XVidal
XVidi
XVila
XVinchy
XVinci
XVirt
XVittorini
XVocab
XVogon
XVolkswagon
XVoltarine
XVonada
XVonnegut
XVonnegut's
XVries
XVroomfondel
XVulgate
XWHATEVERSAROUND
XWOMBAT
XWORLD's
XWXRT
XWaben
XWald
XWalinsky
XWalla
XWarhol
XWat
XWatford
XWeil
XWeiler's
XWeiner's
XWeisert
XWernher
XWestbrook
XWestbury
XWestheimer's
XWestmoreland
XWethern's
XWhaddya
XWhipsnade
XWiker's
XWilde
XWinchell
XWinie
XWinsor
XWir
XWirrten
XWirth
XWithington
XWombat's
XXIIdigitation
XXINU
XXercies
XYEH
XYabba
XYellowstone
XYessir
XYinkel
XYoda
XYoda's
XYorba
XYoric
XYoungman
XYuletide
XYutang
XZIPPY
XZORAC
XZanuck
XZappa
XZarathud
XZarathustra
XZelkowitz
XZeno's
XZern
XZilla
XZippy
XZonker
XZorkmids
XZorro
XZow
XZwanzig
XZwart
XZymurgy's
Xaafte
Xabhors
Xabsorbin
Xabsurdum
Xacacia
Xaccurancy
Xaccursed
Xaccusator
Xacne
Xacupuncture
Xadhoc
Xadj
Xadv
Xairbags
Xalimentary
Xalkafluence
Xalleygaroo
Xalrighty
Xaltum
Xamnesia
Xanal
Xanat
Xanchorman
Xane
Xanimalculous
Xanomali
Xanxivs
Xanytime
Xapauling
Xappelations
Xapprox
Xarabic
Xarias
Xarse
Xary
Xasparaginylalanylthreonylleucylarginylalanylphenylalanylalanylalanylglycylva
Xaspartylleucylleucylarginylglutaminylisoleucylalanylseryltyrosylglycylarginyl
Xastrology
Xath
Xatrium
Xatttempt
Xause
Xausgraben
Xavoirdupois
Xawai
Xbac
Xbacklit
Xbagbiting
Xbagel
Xbahz
Xbai
Xbamboozled
Xbanquette
Xbarf
Xbayonetted
Xbazingas
Xbedecked
Xbedpans
Xbefriends
Xbequeathin
Xbertillion
Xbethumped
Xbibles
Xbingo
Xbisexual
Xblackguard
Xblinkenlights
Xblockhead
Xblound
Xblowenfusen
Xbogosity
Xbonehead
Xbonked
Xboola
Xbossy
Xbounteous
Xbowlin
Xboyfriend
Xbra
Xbrilgue
Xbrilig
Xbrussels
Xbucky
Xburgled
Xburneth
Xcaliente
Xcalor
Xcapillarized
Xcarabineri
Xcarbolized
Xcardio
Xcastrating
Xchemotherapy
Xcheval
Xchezlogs
Xchildproof
Xchromosome
Xchronodimensional
Xchroots
Xclaus
Xcmptr
Xcnt
Xcockamamie
Xcogito
Xcolloq
Xcongresspersons
Xconks
Xcopacetic
Xcorkenpoppen
Xcorpuscle
Xcpu
Xcpu's
Xcrabgrass
Xcrapshoot
Xcriminology
Xcroquet
Xcrossoffs
Xcrossword
Xcrowbar
Xcrunchy
Xcrustaceans
Xcrusty
Xcummings
Xcuriae
Xcuticle
Xcybernetic
Xdamnfoolproof
Xdandruff
Xdans
Xdarkish
Xdarkroom
Xdas
Xdataspec
Xdduupplleexx
Xdefamed
Xdefuse
Xdemagogism
Xdemigodic
Xdemo
Xdeppart
Xder
Xdermis
Xdestitution
Xdev
Xdextrose
Xdiddie
Xdinette
Xdisco
Xdiscotheques
Xdishes
Xdishrags
Xdishwashing
Xdixerunt
Xdoderez
Xdoggerel
Xdoggy
Xdoloop
Xdost
Xdoth
Xdotty
Xdrivel
Xdrop't
Xdummkopfen
Xdumpster
Xdunkt
Xecamier
Xeggnog
Xein
Xenobled
Xenui
Xergo
Xerogeny
Xest
Xetus
Xev'ry
Xexhalation
Xextemporanea
Xextracurricular
Xeyestalks
Xfainali
Xfallaron
Xfella
Xfertsneet
Xfiggy
Xfiks
Xfix'd
Xfixin's
Xflang
Xflatfoot
Xfloss
Xfoghorns
Xfolkloric
Xfoo
Xforcaster
Xfornia
Xfornication
Xforsooth
Xfractal
Xfreezin
Xfrillant
Xfrob
Xfrob'nitsm
Xfrobbing
Xfrolicked
Xfruh
Xfruitcake
Xfruitcakes
Xfrumious
Xfunhouse
Xgalore
Xgamekeeper
Xganz
Xgarnishment
Xgefingerpoken
Xgenocide
Xgesteckt
Xgewerken
Xgharsley
Xgiftlist
Xgimble
Xgimmick
Xgirlfriend
Xgleekzorp
Xgleknow
Xglowworm
Xglycylalanylaspartylalanylleucylglutamylleucylglycylisoleucylprolyphenylalanyl
Xglycyltyrosylthreonyltyrosylleucylleucylserylarginylalanylglycylvalylthreonyl
Xgobbets
Xgonna
Xgoodbye
Xgoto
Xgougebosquex
Xgoyim
Xgoyish
Xgoyisha
Xgraffito
Xgrok
Xgrouse
Xgry
Xguave
Xguttersnipe
Xgylcylalanylglutamylasparaginylarginyalanylalanylleucylprolylleucylaspartagi
Xgyre
Xgyrent
Xhaben
Xhain't
Xhairstyles
Xhammmer
Xhandcraftsmanship
Xhandwaving
Xhanky
Xharmonium
Xheadgear
Xhectare
Xheinous
Xhermit
Xhev
Xhexagram
Xhighbrow
Xhippogriff
Xhonorific
Xhonour
Xhoo
Xhooved
Xhorgrave
Xhormonal
Xhors
Xhotshot
Xhouseplant
Xhousewares
Xhullabaloo
Xhyper
Xibi
Xicepacks
Xideogram
Xiear
Xiers
Xifthen
Xihn
Xihuxw
Ximpo
Xincivility
Xincomprehensive
Xincorrige
Xinfiniteloop
Xinkahol
Xinprectoo
Xinputdir
Xinquit
Xinrushing
Xinsa
Xinterferon
Xironmongery
Xitn
Xius
Xjast
Xjeered
Xjudex
Xjukebox
Xkar
Xkarat
Xkarma
Xkase
Xkeepen
Xkiloliks
Xkitsch
Xklows
Xkludge
Xkludgy
Xklutz
Xknock'd
Xkoan
Xkohirnt
Xkonsonant
Xkonsonants
Xkontinue
Xkudn't
Xkwirt
Xladybug
Xlampshades
Xlank
Xlanylglycylalanylisoleucylserylglycylserylalanylisoleucylvalyllysylisoleucyli
Xlatine
Xlawnmower
Xlerts
Xles
Xletez
Xleucylphenylalanylisoleucylcysteinylprolylprolylaspartylalanylaspartylaspartyl
Xlexicographer
Xlibricilleux
Xliegt
Xlightbulb
Xlimerick
Xlin
Xlinguini
Xlithtth
Xlobotomy
Xlocutions
Xlogick
Xlogout
Xlogy
Xlogzerneg
Xlojikl
Xlurketh
Xlyaspartylglutaminylvalyllysylalanylalanylisoleucylaspartylalanylglycylalanyla
Xlysdexia
Xlythreonylprolyalanylglutaminylcysteinylphenylalanylglutamylmethionylleucyala
Xma'am
Xmagtape
Xmaindz
Xmainframe
Xmal
Xmargarita
Xmasochist
Xmasturbation
Xmausers
Xmegs
Xmeik
Xmeltdown
Xmemoraboble
Xmemori
Xmemorizin
Xmeowing
Xmerinos
Xmeta
Xmethionylglutaminylarginyltyrosylglutamylserylluecylphenyialanylalanylglutamin
Xmethionyllysylalanylalanylthreonylarginylserine
Xmidterm
Xmillion
Xmillions
Xmimsy
Xmin
Xminx
Xmit
Xmittengrabben
Xmizk
Xmobocracy
Xmodifaiing
Xmohmen
Xmoldy
Xmome
Xmousetraps
Xmusculus
Xmyxbl
Xnah
Xnanocentury
Xnanohenry
Xnaugahyde
Xnell
Xnet.fat
Xnet.flame
Xnet.jobs
Xnet.news
Xnet.that
Xnet.this
Xnicht
Xnightie
Xnog
Xnogiftlist
Xnohow
Xnostra
Xnth
Xnunnery
Xnylasparaginyllysylglycylisoleucylaspartylglutamylphenylalanyltyrosylalanylglu
Xnylaspartylvalylprolylvalylglutaminylglutamylserylalanylprolyphenylalanylargi
Xnylglutaminylalanylalanylleucylarginylhistidylasparaginylvalylalanylprolyiso
Xnylhistidylleucylvalylalanyllysylleucylysylglutamyltyrosylasparaginylalanylala
Xnylleucylisoleucylarginylglutaminyllysylhistidylprolythreonylisoleucylprolyli
Xnylprolylprolylleucylglutaminylglycylphenylalanylglycylisoleucylserylalanylpro
Xobits
Xobius
Xobnegleich
Xobscurantist
Xokay
Xol;lkld;f;g;dd;po
Xoln
Xomelette
Xomerade
Xomnibiblious
Xomnivorous
Xompzidaize
Xoodsou
Xorxogrefkl
Xould
Xoutcumbents
Xoutgrabe
Xoutta
Xoves
Xpadanga
Xpallbearer
Xpanky
Xpantaloons
Xpaperboy
Xparoxysmally
Xpenis
Xpense
Xperfum'd
Xphenylalanylyalylthreonylleucylglycylaspartylprolylglycylisoleucylglutamylglu
Xphilogyny
Xpl.n
Xplanaria
Xplatypus
XpleH
Xpointy
Xpoiuyt
Xpoly
Xpolytetien
Xpolytheism
Xpoo
Xpopcorn
Xporrf
Xposibl
Xposthole
Xpotty
Xpoz
Xppo
Xprawns
Xpre
Xprepoceros
Xpretzel
Xprgrmmng
Xpriestess
Xprimordial
Xproceedeth
Xproletarian
Xpropounded
Xprotheththing
Xprotien
Xprotoplasmal
Xpulitzer
Xpur
Xpushy
Xqotc
Xqui
Xquia
Xquiche
Xquop
Xqwert
Xqwertyuiop
XrKe9
Xraed
Xraineth
Xraisiny
Xrandchar
Xrapturous
Xraspy
Xrath
Xraths
Xreich
Xreplased
Xreplasing
Xrhinoceri
Xridandant
Xriform
Xrigadoon
Xrimeining
Xrind
Xriplais
Xrispektivli
Xrisqu
Xrosewater
Xrubbernecken
Xruntime
Xsam
Xsamurai
Xsamuri
Xsanta
Xsavour
Xsawhorse
Xschlichte
Xschnappen
Xscullery
Xsei
Xserylaspartylprolylleucylalanylaspartylglycylprolylthreonylisoleucylglutaminyl
Xshalt
Xshamus
Xshinnied
Xshlafen
Xshorn
Xsightie
Xsightseeren
Xsiouxeyesighed
Xsizeof
Xskyhigh
Xsligo
Xsnarley
Xsnowman
Xsoit
Xsoleucylglutamylglutaminylhistidylasparaginylisoleucylglutamylprolyglutamylly
Xsoleucylglyclleucylleucylmethionyltyrosylalanylasparaginylleucylvalylphenylala
Xsomebody'd
Xsont
Xspacewar
Xspank
Xspel
Xspeling
Xspitzensparken
Xspl
Xspringenwerk
Xsqurooneg
Xsswwiittcchh
Xstalagmites
Xstarfield
Xstatecraft
Xsteamrolling
Xsteeplechase
Xstogies
Xsubsittute
Xsuet
Xsurly
Xsvm
Xswang
Xsweeteners
Xswitchover
Xsylmethionylleucylalanylalanylleucyllysylvalylphenylalanylvalyglutaminylproly
Xsynagog
Xsynthetase
Xsyscalls
Xtachyon
Xtaketh
Xtaminylcysteinylglutamyllysylvalylglycylvalylaspartylserylvalylleucylvalylala
Xtaminylserylleucyllysylisoleucylaspartylthreonylleucylisoleucylglutamylalanyl
Xtannogallate
Xtapioca
Xtarot
Xtbsp
Xteddy
Xteepers
Xtelematic
Xtelepath
Xtequila
Xtheivish
Xthi
Xthinkle
Xthou'lt
Xthru
Xths
Xthyself
Xtinhorn
Xtites
Xtoehold
Xtollway
Xtommyo
Xtornpee
Xtouch'd
Xtrampoline
Xtrans
Xtreacle
Xtripoline
Xtruncheons
Xtryptophan
Xtsetse
Xtsp
Xtuit
Xtuits
Xtuppenny
Xtween
Xtwixt
Xtyg
Xtyrranize
Xukelele
Xumsige
Xunbegot
Xund
Xuns
Xunvoist
Xuretheral
Xurgin's
Xust
Xvalium
Xvaricose
Xvatch
Xvelcro
Xverreckt
Xvichyssoise
Xviditur
Xvoist
Xvol
Xvowlz
Xwatchout
Xweatherman
Xweenies
Xweirdo
Xwench
Xwerld
Xwhaledreck
Xwhilst
Xwhodo
Xwhomped
Xwimmelten
Xwimp
Xwombat
Xwonse
Xwoodburning
Xworkingman
Xwrth
Xwrung
Xwud
Xxanthic
Xxen
Xxrewawt
Xxsz
Xylleucyllysylglutamylarginyllysylglutamylglycylalanylphenylalanylvalylprolyl
Xyou'se
Xyyoouurr
Xzayda
Xzephyr's
END_OF_scene.sp.ok
if test 15876 -ne `wc -c <scene.sp.ok`; then
    echo shar: \"scene.sp.ok\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f strfile.8 -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"strfile.8\"
else
echo shar: Extracting \"strfile.8\" \(4056 characters\)
sed "s/^X//" >strfile.8 <<'END_OF_strfile.8'
X.\" Copyright (c) 1980 Regents of the University of California.
X.\" All rights reserved.  The Berkeley software License Agreement
X.\" specifies the terms and conditions for redistribution.
X.ie t \{\
X.	ds lq ``
X.	ds rq ''
X.\}
X.el \{\
X.	ds lq "
X.	ds rq "
X.\}
X.TH STRFILE 8 "31 Apr, 1987"
X.UC 4
X.SH NAME
Xstrfile, unstr \- create a random access file for storing strings
X.SH SYNOPSIS
X.B strfile
X[
X.B \-
X] [
X.B \-svc\fIC\fP
X] [
X.B \-oir
X]
Xsourcefile
X[ datafile ]
X.sp
X.B unstr
X[
X.B \-o
X]
Xdatafile[.dat] [ outfile ]
X.SH DESCRIPTION
X.I strfile
Xis designed to take a file which contains a set of strings
Xand create a data file which contains those strings,
Xalong with a seek pointer table
Xto the beginning of each.
XThis allows random access of the strings.
X.PP
XThe source file contains strings
Xseparated by lines starting with \*(lq%%\*(rq or \*(lq%\-\*(rq
XAnything following these starting characters on the line
Xwill be ignored,
Xso comments can be placed on these lines.
XA \*(lq%%\*(rq simply separates strings;
Xa \*(lq%\-\*(rq separates not only strings but sections.
XA file can have up to four sections,
X.I i.e. ,
Xup to three delimiters.
XThis can be used in a program-defined way.
X.PP
XThe data file,
Xif not specified on the command line,
Xis named
X.IB sourcefile .out ,
Xand contains a header,
Xwhich describes the contents of the data file,
Xthe seek pointers to the beginning of each string,
Xand the strings themselves,
Xterminated by null bytes.
X.PP
XThe format of the header is:
X.sp
X.nf
X.ta
X.ta 8n +\w'unsigned long\ \ 'u +\w'str_delims[MAXDELIMS];\ 'u
X# define	MAXDELIMS	3
X
X# define	STR_RANDOM	0x1
X# define	STR_ORDERED	0x2
X
Xtypedef struct {
X	unsigned long	str_numstr;	/* # of strings in the file */
X	unsigned long	str_longlen;	/* length of longest string */
X	unsigned long	str_shortlen;	/* length of shortest string */
X	long	str_delims[MAXDELIMS];	/* delimiter markings */
X	off_t	str_dpos[MAXDELIMS];	/* delimiter positions */
X	short	str_flags;	/* bit field for flags */
X} STRFILE;
X.ev
X.fi
X.PP
XThe values in
X.B str_delims
Xare the indices of the first string
Xwhich follow each \*(lq%\-\*(rq in the file.
XThe field
X.B str_flags
Xfill have the bit
X.SM STR_RANDOM
Xset if the
X.B \-r
Xflag was specified,
Xor
X.SM STR_ORDERED
Xif the
X.B \-o
Xflag was specified.
X.PP
XThe options are:
X.TP
X.B \-
XGive a usage summary.
X.TP
X.B \-s
XRun silently;
Xdon't give the summary of data at the end.
X.TP
X.B \-v
XVerbose (default).
X.TP
X.B \-o
XOrder the strings in alphabetical order.
XThe strings will be stored in the same order in the data file
Xas they were in the source,
Xbut the seek pointer table will be sorted in alphabetical order
Xof the strings the point to.
XAny
X.I initial
Xnon-alphanumeric characters are ignored.
XThis sets the
X.SM STR_ORDERED
Xbit in the
X.B str_flags
Xfield of the header.
X.TP
X.B \-i
XIgnore case when ordering.
X.TP
X.B \-r
XRandomize the order of the seek pointers in the table.
XThe strings will be stored in the same order in the data file
Xas they were in the source,
Xbut the seek pointer table will be randomized.
XThis sets the
X.SM STR_RANDOM
Xbit in the
X.B str_flags
Xfield of the header.
X.TP
X.BI \-c C
XChange the delimiting character from \*(lq%\*(rq to
X.RI \\*(lq C \\*(rq,
Xmaking the delimiting lines start with
X.RI \\*(lq CC \\*(rq
Xor
X.RI \\*(lq C \-\\*(rq.
X.PP
XThe purpose of
X.I unstr
Xis to undo the work of
X.I strfile .
XIt primarily exists as an emergency backup
Xin case you accidentally delete your source file,
Xbut still have your data file around.
XIt reads data files and creates a corresponding output file.
XIf you don't want \*(lq%\*(rq as your delimiting character,
Xyou can use the
X.BI \-c C
Xoption to change it.
X.PP
X.I unstr
Xwill normally print out the strings
Xin the order they are in the data file.
XIf you give it the
X.B \-o
Xoption,
Xit will print them out in the header order,
Xwhich could be different if the file was
Xrandomized or ordered when created.
XUsing this,
Xyou can created sorted versions of your input file
Xby using
X.B \-o
Xwhen you run
X.IR strfile , 
Xand then using
X.B "unstr \-o"
Xto dump them out in the table order.
X.SH "SEE ALSO"
Xfortune(6)
END_OF_strfile.8
if test 4056 -ne `wc -c <strfile.8`; then
    echo shar: \"strfile.8\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f strfile.h -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"strfile.h\"
else
echo shar: Extracting \"strfile.h\" \(627 characters\)
sed "s/^X//" >strfile.h <<'END_OF_strfile.h'
X/* @(#)strfile.h	1.2 (Berkeley) 5/14/81 */
X# ifndef	__STRFILE__
X
X# define	__STRFILE__
X
X# include	<sys/types.h>
X
X# define	MAXDELIMS	3
X
X/*
X * bits for flag field
X */
X
X# define	STR_RANDOM	0x1
X# define	STR_ORDERED	0x2
X
Xtypedef struct {		/* information table */
X	unsigned long	str_numstr;		/* # of strings in the file */
X	unsigned long	str_longlen;		/* length of longest string */
X	unsigned long	str_shortlen;		/* length of shortest string */
X	long		str_delims[MAXDELIMS];	/* delimiter markings */
X	off_t		str_dpos[MAXDELIMS];	/* delimiter positions */
X	short		str_flags;		/* bit field for flags */
X} STRFILE;
X
X# endif		__STRFILE__
END_OF_strfile.h
if test 627 -ne `wc -c <strfile.h`; then
    echo shar: \"strfile.h\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f Do_troff -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"Do_troff\"
else
echo shar: Extracting \"Do_troff\" \(106 characters\)
sed "s/^X//" >Do_troff <<'END_OF_Do_troff'
X#!/bin/csh -f
Xset file=$1
Xshift
X( echo ".ds Se $file" ; cat Troff.mac ; sed -f Troff.sed $file ) | $* -me
END_OF_Do_troff
if test 106 -ne `wc -c <Do_troff`; then
    echo shar: \"Do_troff\" unpacked with wrong size!
fi
chmod +x Do_troff
# end of overwriting check
fi
if test -f Rot13 -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"Rot13\"
else
echo shar: Extracting \"Rot13\" \(137 characters\)
sed "s/^X//" >Rot13 <<'END_OF_Rot13'
X#!/bin/sh
Xif test "`echo HI | tr A-Z a-z`" = "hi"
Xthen
X	tr n-za-mN-ZA-M a-zA-Z < $1
Xelse
X	tr "[n-z][a-m][N-Z][A-M]" "[a-z][A-Z]" < $1
Xfi
END_OF_Rot13
if test 137 -ne `wc -c <Rot13`; then
    echo shar: \"Rot13\" unpacked with wrong size!
fi
chmod +x Rot13
# end of overwriting check
fi
if test -f Shar_split -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"Shar_split\"
else
echo shar: Extracting \"Shar_split\" \(584 characters\)
sed "s/^X//" >Shar_split <<'END_OF_Shar_split'
X#!/bin/csh -f
X@ maxsize=50000
Xset ls=(`ls -l $1`)
X@ numfiles = ($ls[4] + ($maxsize - 1)) / $maxsize
Xecho "	# think we need $numfiles files"
Xset wc=(`wc $1`)
X@ splitsize = ($wc[1] + ($numfiles - 1)) / $numfiles
Xecho "	split -$splitsize $1 $1."
Xsplit -$splitsize $1 $1.
X@ i = $3
Xset l=($1.??)
Xif ($#l != $numfiles) echo "	# actually made $#l files"
Xforeach f ($l)
X	if ($i < 10) then
X		set outf=$2.0$i
X	else
X		set outf=$2.$i
X	endif
X	if ("$5" == "") then
X		echo "	shar $4 $f > $outf"
X		shar $4 $f > $outf
X	else
X		echo "	shar $4 $f | $5 > $outf"
X		shar $4 $f | $5 > $outf
X	endif
X@	i++
Xend
END_OF_Shar_split
if test 584 -ne `wc -c <Shar_split`; then
    echo shar: \"Shar_split\" unpacked with wrong size!
fi
chmod +x Shar_split
# end of overwriting check
fi
if test -f Troff.mac -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"Troff.mac\"
else
echo shar: Extracting \"Troff.mac\" \(290 characters\)
sed "s/^X//" >Troff.mac <<'END_OF_Troff.mac'
X.nr tp 8
X.nr hm 3v
X.nr fm 2v
X.nr tm 5v
X.nr bm 4v
X.cs R
X.sc
X.sz 6
X.ll +10n
X.lt \n(.l
X.de $h
X.tl 'Fortune Database'\\*(Se'\*(td'
X..
X.de $f
X.tl ''- % -''
X..
X.2c
X.nf
X.ta
X.ta 8n 16n 24n 32n 40n 48n 56n 64n 72n 80n
X.de %%
X.sp .3
X.ce
X\(sq\|\(sq\|\(sq\|\(sq\|\(sq\|\(sq\|\(sq\|\(sq\|\(sq
X.sp .2
X..
END_OF_Troff.mac
if test 290 -ne `wc -c <Troff.mac`; then
    echo shar: \"Troff.mac\" unpacked with wrong size!
fi
# end of overwriting check
fi
echo shar: End of archive 1 \(of 16\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 16 archives.
    rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0