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