[comp.sources.misc] v08i001: A HELP facility for Unix

allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc) (08/20/89)

Posting-number: Volume 8, Issue 1
Submitted-by: nelson@uncecs.edu (jim nelson)
Archive-name: help.jn

Here is a little Help-facility somewhat like some other operating
systems provide.  It's sorta crude at the moment, but it works well.
It runs under BSD, Xenix, and SysV, although I still don't know quite
how to do "my own pager" under Xenix or SysV.  If this has been done
before in the recent past, don't post, just trash.  However, I kinda
like it, and we (I) plan to spring it on our freshmen due to arrive in
a couple of weeks.
---------------- cut here -----------------
#! /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 1)."
# Contents:  C-mistakes.txt MANIFEST Makefile README ac.txt af.txt
#   ap.txt apropos.txt bye.txt cat.txt cbreak.c cc.txt cd.txt
#   compilers.txt copy.txt cp.txt csh.txt dir.txt ed.txt edit.txt
#   exit.txt files files.txt files/a.out.txt files/binaries
#   files/binaries.txt files/binaries/a.out.txt
#   files/binaries/executables.txt files/filenames.txt files/pwd.txt
#   files/sources.txt fortran.txt games.txt guru guru.1 guru.txt
#   help.c help.txt igors igors.1 igors.txt kindex.c languages.txt
#   learn.txt less.txt listfd.c listit.c logoff.txt logout.txt
#   mail.txt man.txt manual.txt mv.txt mymode.c news.txt nocbreak.c
#   off.txt pascal.txt passwd.txt phone.txt pwd.txt quit.txt
#   rename.txt stat.c talk.txt terminal.txt test.txt ulgrp vi.txt
# Wrapped by nelson@uncw on Fri Aug 11 19:08:51 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'C-mistakes.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'C-mistakes.txt'\"
else
echo shar: Extracting \"'C-mistakes.txt'\" \(3196 characters\)
sed "s/^X//" >'C-mistakes.txt' <<'END_OF_FILE'
X
XA few of Dr. Doom's list of C-gotchas, condensed considerably from the
Xoriginals:
X
X1.  EOF is an int, not a char; "getchar()", despite its
Xcharacter-sounding name, RETURNS AN INT!  In fact, all functions in the
XC language return either an int or a double; it is not possible to
Xwrite a function which returns a char.  Besides, the compiler generates
Xcode which takes the same amount of space for (scalar) chars and ints.
XSo: there is NEVER any reason to say, for example: "char c;".  You
Xshould ALWAYS declare c to be an int, especially when it receives the
Xreturn value from getchar, which is then compared to EOF.
X
XExamples:
X
X	/* this is WRONG (WRONG!, WRONG!, WRONG! ...*/
X	char c;
X	while(  (c=getchar()) != EOF){ ... }
X
X	/* this is RIGHT */
X	int c;
X	while(  (c=getchar()) != EOF){ ... }
X
X----------------------------------------------------
X
X2.  Beware the distinction between "=" and "==".  The single-
Xequal-sign (we'll call it SE) causes the things on the two sides of it
Xto BECOME equal; the resultant value is then whatever value was
Xoriginally on the right-hand-side of the SE operator.  The double-equal
Xsign (DE) first tests the two sides to see if they are equal; the
Xresulting value of the DE operator is zero if they are not equal, and
Xone if they are equal.  No other results are possible.  
X
XExamples:
X
X	/* this is (probably) WRONG */
X	int i,j;
X	if(i=j){ ... }  /*will execute if j is nonzero */
X
X	/* this is (probably) RIGHT */
X	int i,j;
X	if(i==j){ ... } /*will execute if i is equal to j */
X
X----------------------------------------------------
X
X3.  Even experienced programmers sometimes forget the "&"s which
Xare required on the arguments to scanf.  All arguments after the
Xfirst must have "&" in front of it.
X
XExamples:
X	/* WRONG ... guaranteed to dump core */
X	int i;
X	scanf("%d",i);
X
X	/* RIGHT */
X	int i;
X	scanf("%d",&i);
X
X	/* for advanced students only: */
X	int j, *i = &j;
X	scanf("%d",i);
X	printf("%d %d\n",i,j); /* what does it print? */
X
X----------------------------------------------------
X
X4.  Beware the extraneous semicolon.
X
X	/* (probably) WRONG */
X	for(i=0; i<10; i++);
X		printf("%d\n",i);
X
X	/* (probably) RIGHT */
X	for(i=0; i<10; i++)
X		printf("%d\n",i);
X
X----------------------------------------------------
X
X5.  Again, even experienced programmers sometimes (Hi, Chris!)
Xget bit by the "dangling else" bug:
X
X	if(i==5)
X		k=7;
X		if (line==27) d = 39;
X	else
X		d = 41;
X
Xand variations too numerous to show here.  The "else" goes with the
Xnearest preceding "if" (well, actually, the nearest preceding
X"if" that doesn't already have an "else" associated with it).  
XThe compiler does not know indentation.
X
X----------------------------------------------------
X
X6.  Scanf() from the terminal can produce some perplexing results
Xuntil you learn about "the terminating newline", and what scanf
Xconsiders to be whitespace for %d, %s, and %c formats.  Primarily
Xtry to remember that for a "%d" format, scanf IGNORES leading
Xwhitespace, and PUTS BACK the whitespace which caused the termination
Xof a "%d" scan.  Moral of the story: "do not mix %c and %s formats
Xwith %d or %f formats, nor mix scanf with getchar, unless you are
Xvery careful AND know what you're doing."
END_OF_FILE
if test 3196 -ne `wc -c <'C-mistakes.txt'`; then
    echo shar: \"'C-mistakes.txt'\" unpacked with wrong size!
fi
# end of 'C-mistakes.txt'
fi
if test -f 'MANIFEST' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'MANIFEST'\"
else
echo shar: Extracting \"'MANIFEST'\" \(2258 characters\)
sed "s/^X//" >'MANIFEST' <<'END_OF_FILE'
X   File Name		Archive #	Description
X-----------------------------------------------------------
X C-mistakes.txt             1	
X MANIFEST                   1	This shipping list
X Makefile                   1	
X README                     1	
X ac.txt                     1	
X af.txt                     1	
X ap.txt                     1	
X apropos.txt                1	
X bye.txt                    1	
X cat.txt                    1	
X cbreak.c                   1	
X cc.txt                     1	
X cd.txt                     1	
X compilers.txt              1	
X copy.txt                   1	
X cp.txt                     1	
X csh.txt                    1	
X dir.txt                    1	
X ed.txt                     1	
X edit.txt                   1	
X exit.txt                   1	
X files                      1	
X files.txt                  1	
X files/a.out.txt            1	
X files/binaries             1	
X files/binaries.txt         1	
X files/binaries/a.out.txt   1	
X files/binaries/executables.txt  1	
X files/filenames.txt        1	
X files/pwd.txt              1	
X files/sources.txt          1	
X fortran.txt                1	
X games.txt                  1	
X guru                       1	
X guru.1                     1	
X guru.txt                   1	
X help.c                     1	
X help.txt                   1	
X igors                      1	
X igors.1                    1	
X igors.txt                  1	
X kindex.c                   1	
X languages.txt              1	
X learn.txt                  1	
X less.txt                   1	
X listfd.c                   1	
X listit.c                   1	
X logoff.txt                 1	
X logout.txt                 1	
X mail.txt                   1	
X man.txt                    1	
X manual.txt                 1	
X mv.txt                     1	
X mymode.c                   1	
X news.txt                   1	
X nocbreak.c                 1	
X off.txt                    1	
X pascal.txt                 1	
X passwd.txt                 1	
X phone.txt                  1	
X pwd.txt                    1	
X quit.txt                   1	
X rename.txt                 1	
X stat.c                     1	
X talk.txt                   1	
X terminal.txt               1	
X test.txt                   1	
X ulgrp                      1	
X vi.txt                     1	
END_OF_FILE
if test 2258 -ne `wc -c <'MANIFEST'`; then
    echo shar: \"'MANIFEST'\" unpacked with wrong size!
fi
# end of 'MANIFEST'
fi
if test -f 'Makefile' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'Makefile'\"
else
echo shar: Extracting \"'Makefile'\" \(1399 characters\)
sed "s/^X//" >'Makefile' <<'END_OF_FILE'
X#Makefile for "help"
X
X#for Sequent parallel make:
XP=&
X
X#Define OLDDIR if you do not have opendir(), readdir(), etc.,
X# and your directories are of the 16-byte, 14-character-name variety.
X#Define SYSV if you must :-).
X#Note that SYSV and OLDDIR are not necessarily related;
X# at least one version of Xenix that I know of requires both,
X# and at least one version of SysV has the new directory stuff.
XCFLAGS=#-O #-DSYSV #-DOLDDIR
X#CC=gcc
X
X
X#directory where the "*.txt" files should live (most people would
X# use /usr/lib/help, but it really doesn't matter).
XLIB=/usr/lib/help
X#the full pathname of the executable (in everyone's path (?)).
XEXE=/usr/local/bin/help
X
XSRC= help.c mymode.c listfd.c kindex.c listit.c cbreak.c nocbreak.c
XBIN= help.o mymode.o listfd.o kindex.o listit.o cbreak.o nocbreak.o
Xhelpx: $(P) $(BIN)
X	$(CC) -o helpx $(BIN)
Xinstall: helpx
X	strip helpx
X	mv helpx $(EXE)
X	-mkdir $(LIB)
X	-mkdir $(LIB)/files
X	-mkdir $(LIB)/files/binaries
X	-cp ./*.txt $(LIB)
X	-cp ./files/*.txt $(LIB)/files
X	-cp ./files/binaries/*.txt $(LIB)/files/binaries
X	-cp *.1 /usr/man/man1
X
Xlint: $(SRC)
X	lint $(CFLAGS) -DLIBDIR=\"$(LIB)\" -cpbh $(SRC) 
X	lint -cpbh stat.c
Xshar:
X	makekit -m README Makefile $(SRC) *.txt stat.c \
X	files files/*.txt \
X	files/binaries files/binaries/*.txt \
X	guru.1 igors.1 guru igors ulgrp
Xhelp.o: help.c
X	$(CC) -c $(CFLAGS) -DLIBDIR=\"$(LIB)\" help.c
Xclean:
X	/bin/rm -f *.o helpx
END_OF_FILE
if test 1399 -ne `wc -c <'Makefile'`; then
    echo shar: \"'Makefile'\" unpacked with wrong size!
fi
# end of 'Makefile'
fi
if test -f 'README' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'README'\"
else
echo shar: Extracting \"'README'\" \(2264 characters\)
sed "s/^X//" >'README' <<'END_OF_FILE'
X
XA cheap/simple/quick/dirty HELP facility for Unix.
X
XThe maintainer need only add ".txt" files with the proper name
Xin the proper place in order to add help-blurbs.  It has hierarchial
X"Further help on ..." implemented by the hierarchial file structure
Xof the directory in which the help-files live. Also, the man-pages
Xare available from within the facility, without dropping back
Xto the shell level.
X
XTwo compile-time options: SYSV and OLDDIR, in the CFLAGS= line 
Xof the Makefile.
X
XTo make:  look at the first thirty or so lines of Makefile.
XThen make.  Then make install.
X
XIt has been tested and works on:
X1)  Sequent Dynix 3.0.14 (BSD4.2 knockoff), and
X2)  SysV on an AT&T 6386 box (SysV version unknown, but it 
X    did have the new-directory goodies), and
X3)  Xenix on a Tandy box.  Mostly SysV, but without the directory
X    goodies.
X
XBut one note of warning:  I've included my "Sequent with cc" versions
Xof cbreak() and nocbreak().  They most likely will not work for you.
XThey don't even work for me even using the gcc compiler.  This is
Xbecause of some weird property of the cc preprocessor dealing with
XTIOCGETP and TIOCSETP macros.  The header files make sendmail.cf look
Xlike a McGuffey's Reader.  If you want to save your users a few
Xkeystrokes at the --more-- prompt, figure out how to do it on YOUR
Xsystem.  Try crmode(), etc., with the curses/termcap/termlib libraries,
Xif you have them.  I wash my hands of the whole thing.  The "eat
Xuntil newline" nocbreak() I send seems to work ok, but not pleasing.
X
XYou may have to become root if you want to install the executable in
Xeverybody's path; otherwise no big deal.  The data files can live
Xanywhere you decide to put them.  
X
XN.B.: I'm sure this has been done somewhere, sometime, many times
Xbefore, and can be had on some DECUS tape or USENIX tape or can be
Xftp'ed from xx.xx.xx.xx, etc., but what the heck, here it is, trash it
Xif it's worthless, the price is right!  I wrote it because I didn't
Xhave access to said sources, etc., and besides, it was fun.  Public
XDomain.  jhn -- 11 Aug 89.
X -- 
XJim Nelson,UNC-Wilmington,Mathematical Sciences Dept,
X919-395-3300 nelson@uncw.uucp or nelson@ecsvax.uncecs.edu or
Xnelson@ecsvax.bitnet or {...,mcnc}!ecsvax!nelson 
Xor {...,mcnc}!ecsvax!uncw!nelson
END_OF_FILE
if test 2264 -ne `wc -c <'README'`; then
    echo shar: \"'README'\" unpacked with wrong size!
fi
# end of 'README'
fi
if test -f 'ac.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'ac.txt'\"
else
echo shar: Extracting \"'ac.txt'\" \(518 characters\)
sed "s/^X//" >'ac.txt' <<'END_OF_FILE'
XThe three programs "ap", "ac", and "af", are somewhat reminiscent
Xof PC compilers, in that they will compile, edit, compile, edit,
Xcompile, edit, ... ad nauseam, without ever dropping you back to
Xthe shell.  They also (and here is their usefulness) merge your
Xerror messages back into your source file, let you fix your
Xsource, and then remove the messages, all by black magic!  Authored
Xby Dr. Doom in response to the the "draw a little hand with a finger
Xpointing to the mistake" syndrome of some popular computers.
END_OF_FILE
if test 518 -ne `wc -c <'ac.txt'`; then
    echo shar: \"'ac.txt'\" unpacked with wrong size!
fi
# end of 'ac.txt'
fi
if test -f 'af.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'af.txt'\"
else
echo shar: Extracting \"'af.txt'\" \(518 characters\)
sed "s/^X//" >'af.txt' <<'END_OF_FILE'
XThe three programs "ap", "ac", and "af", are somewhat reminiscent
Xof PC compilers, in that they will compile, edit, compile, edit,
Xcompile, edit, ... ad nauseam, without ever dropping you back to
Xthe shell.  They also (and here is their usefulness) merge your
Xerror messages back into your source file, let you fix your
Xsource, and then remove the messages, all by black magic!  Authored
Xby Dr. Doom in response to the the "draw a little hand with a finger
Xpointing to the mistake" syndrome of some popular computers.
END_OF_FILE
if test 518 -ne `wc -c <'af.txt'`; then
    echo shar: \"'af.txt'\" unpacked with wrong size!
fi
# end of 'af.txt'
fi
if test -f 'ap.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'ap.txt'\"
else
echo shar: Extracting \"'ap.txt'\" \(518 characters\)
sed "s/^X//" >'ap.txt' <<'END_OF_FILE'
XThe three programs "ap", "ac", and "af", are somewhat reminiscent
Xof PC compilers, in that they will compile, edit, compile, edit,
Xcompile, edit, ... ad nauseam, without ever dropping you back to
Xthe shell.  They also (and here is their usefulness) merge your
Xerror messages back into your source file, let you fix your
Xsource, and then remove the messages, all by black magic!  Authored
Xby Dr. Doom in response to the the "draw a little hand with a finger
Xpointing to the mistake" syndrome of some popular computers.
END_OF_FILE
if test 518 -ne `wc -c <'ap.txt'`; then
    echo shar: \"'ap.txt'\" unpacked with wrong size!
fi
# end of 'ap.txt'
fi
if test -f 'apropos.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'apropos.txt'\"
else
echo shar: Extracting \"'apropos.txt'\" \(151 characters\)
sed "s/^X//" >'apropos.txt' <<'END_OF_FILE'
XApropos will search the title lines of the manual pages looking
Xfor a keyword.  It will then tell you those commands which are
Xfound.  See also "man".
END_OF_FILE
if test 151 -ne `wc -c <'apropos.txt'`; then
    echo shar: \"'apropos.txt'\" unpacked with wrong size!
fi
# end of 'apropos.txt'
fi
if test -f 'bye.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'bye.txt'\"
else
echo shar: Extracting \"'bye.txt'\" \(273 characters\)
sed "s/^X//" >'bye.txt' <<'END_OF_FILE'
XYou log off the Unix machines by typing control-d at the
Xcommand line prompt.  (To type control-d, you HOLD DOWN the
X"control" key WHILE typing "d"; this is not a two-stroke
Xsequence -- it's a one-keystroke sequence made by holding
Xdown the first while typing the second).
END_OF_FILE
if test 273 -ne `wc -c <'bye.txt'`; then
    echo shar: \"'bye.txt'\" unpacked with wrong size!
fi
# end of 'bye.txt'
fi
if test -f 'cat.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'cat.txt'\"
else
echo shar: Extracting \"'cat.txt'\" \(212 characters\)
sed "s/^X//" >'cat.txt' <<'END_OF_FILE'
XThe program to "concatenate" multiple files is called "cat".
XUsage:
X$ cat file1 file2 file3 ... > outputfile
X
XBe careful that "outputfile" is not the same as any of the other
Xfiles.  If it is, it will be LOST!!
X
END_OF_FILE
if test 212 -ne `wc -c <'cat.txt'`; then
    echo shar: \"'cat.txt'\" unpacked with wrong size!
fi
# end of 'cat.txt'
fi
if test -f 'cbreak.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'cbreak.c'\"
else
echo shar: Extracting \"'cbreak.c'\" \(490 characters\)
sed "s/^X//" >'cbreak.c' <<'END_OF_FILE'
X#ifdef sequent
X#include <stdio.h>
X#include <sgtty.h>
X
Xcbreak()
X{
X	int i;
X	extern int errno;
X	struct sgttyb ttystatus;
X	char *a;
X	/* it is seemingly impossible to get lint to shut
X	up about this: */
X	a= &ttystatus.sg_ispeed;
X	errno=0;
X	i=ioctl(0,TIOCGETP,a);
X	if(i<0)
X	{int me;me=errno;fprintf(stderr,"errno %d\n",me);exit(3);}
X
X#define F	ttystatus.sg_flags
X	F |= CBREAK;
X	i=ioctl(0,TIOCSETP,a);
X	if(i<0)
X	{int me;me=errno;fprintf(stderr,"errno %d\n",me);exit(4);}
X}
X#else
Xcbreak(){}
X#endif
END_OF_FILE
if test 490 -ne `wc -c <'cbreak.c'`; then
    echo shar: \"'cbreak.c'\" unpacked with wrong size!
fi
# end of 'cbreak.c'
fi
if test -f 'cc.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'cc.txt'\"
else
echo shar: Extracting \"'cc.txt'\" \(155 characters\)
sed "s/^X//" >'cc.txt' <<'END_OF_FILE'
XThe command to compile a C-language program is
X$ cc filename.c
XThe resulting executable will be left in "a.out" in your directory.
XTo run it, type
X$ a.out
END_OF_FILE
if test 155 -ne `wc -c <'cc.txt'`; then
    echo shar: \"'cc.txt'\" unpacked with wrong size!
fi
# end of 'cc.txt'
fi
if test -f 'cd.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'cd.txt'\"
else
echo shar: Extracting \"'cd.txt'\" \(269 characters\)
sed "s/^X//" >'cd.txt' <<'END_OF_FILE'
X"cd" means "change directory".  That is, change to that directory
Xso that it becomes the default directory.  Usage example:
X% cd /usr2/nelson
Xcauses all further commands which refer to the default directory
Xto look in /usr2/nelson first.  To return home, just say
X% cd
END_OF_FILE
if test 269 -ne `wc -c <'cd.txt'`; then
    echo shar: \"'cd.txt'\" unpacked with wrong size!
fi
# end of 'cd.txt'
fi
if test -f 'compilers.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'compilers.txt'\"
else
echo shar: Extracting \"'compilers.txt'\" \(283 characters\)
sed "s/^X//" >'compilers.txt' <<'END_OF_FILE'
XThere are three officially supported languages on this machine:
XFORTRAN, C, and Pascal.  Ada is on loan from Sequent, and may
Xbe returned at any time.  Awk and Perl may be considered by some
Xto be languages.  We do not have BASIC, nor are we ever likely to.
XC++ may be coming later.
END_OF_FILE
if test 283 -ne `wc -c <'compilers.txt'`; then
    echo shar: \"'compilers.txt'\" unpacked with wrong size!
fi
# end of 'compilers.txt'
fi
if test -f 'copy.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'copy.txt'\"
else
echo shar: Extracting \"'copy.txt'\" \(81 characters\)
sed "s/^X//" >'copy.txt' <<'END_OF_FILE'
XCopying is done by the "cp" command, which has the following usage:
X$ cp from to
END_OF_FILE
if test 81 -ne `wc -c <'copy.txt'`; then
    echo shar: \"'copy.txt'\" unpacked with wrong size!
fi
# end of 'copy.txt'
fi
if test -f 'cp.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'cp.txt'\"
else
echo shar: Extracting \"'cp.txt'\" \(81 characters\)
sed "s/^X//" >'cp.txt' <<'END_OF_FILE'
XCopying is done by the "cp" command, which has the following usage:
X$ cp from to
END_OF_FILE
if test 81 -ne `wc -c <'cp.txt'`; then
    echo shar: \"'cp.txt'\" unpacked with wrong size!
fi
# end of 'cp.txt'
fi
if test -f 'csh.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'csh.txt'\"
else
echo shar: Extracting \"'csh.txt'\" \(187 characters\)
sed "s/^X//" >'csh.txt' <<'END_OF_FILE'
XCsh is the command-line interpreter.  It is to Unix what DCL is
X(feebly) to VMS.  It has history and command-line substitution
Xfeatures.  Consult a Guru for neato tricks to try with csh.
END_OF_FILE
if test 187 -ne `wc -c <'csh.txt'`; then
    echo shar: \"'csh.txt'\" unpacked with wrong size!
fi
# end of 'csh.txt'
fi
if test -f 'dir.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'dir.txt'\"
else
echo shar: Extracting \"'dir.txt'\" \(107 characters\)
sed "s/^X//" >'dir.txt' <<'END_OF_FILE'
XTo list the files in your directory, use one of:
X% l
Xor
X% ll
Xor
X% ls
X(try them all to see the difference).
END_OF_FILE
if test 107 -ne `wc -c <'dir.txt'`; then
    echo shar: \"'dir.txt'\" unpacked with wrong size!
fi
# end of 'dir.txt'
fi
if test -f 'ed.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'ed.txt'\"
else
echo shar: Extracting \"'ed.txt'\" \(110 characters\)
sed "s/^X//" >'ed.txt' <<'END_OF_FILE'
X"ed" is the old, old, line-oriented editor.  Vi is the
Xpreferred editor.  Select vi at the next help prompt.
X
END_OF_FILE
if test 110 -ne `wc -c <'ed.txt'`; then
    echo shar: \"'ed.txt'\" unpacked with wrong size!
fi
# end of 'ed.txt'
fi
if test -f 'edit.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'edit.txt'\"
else
echo shar: Extracting \"'edit.txt'\" \(85 characters\)
sed "s/^X//" >'edit.txt' <<'END_OF_FILE'
XThe editor on the Unix machines is called "vi".  For more help
Xask for help on "vi".
END_OF_FILE
if test 85 -ne `wc -c <'edit.txt'`; then
    echo shar: \"'edit.txt'\" unpacked with wrong size!
fi
# end of 'edit.txt'
fi
if test -f 'exit.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'exit.txt'\"
else
echo shar: Extracting \"'exit.txt'\" \(0 characters\)
sed "s/^X//" >'exit.txt' <<'END_OF_FILE'
END_OF_FILE
if test 0 -ne `wc -c <'exit.txt'`; then
    echo shar: \"'exit.txt'\" unpacked with wrong size!
fi
# end of 'exit.txt'
fi
if test ! -d 'files' ; then
    echo shar: Creating directory \"'files'\"
    mkdir 'files'
fi
if test -f 'files.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'files.txt'\"
else
echo shar: Extracting \"'files.txt'\" \(244 characters\)
sed "s/^X//" >'files.txt' <<'END_OF_FILE'
XFiles are stored in a hierarchial manner, beginning with / as the
Xroot of the filesystem.  The major subdivisions are /usr, /usr1,
X/usr2, and /usr3.  Your directory is probably something like
X/usr3/myname or something similar.
X
XSee also "pwd".
END_OF_FILE
if test 244 -ne `wc -c <'files.txt'`; then
    echo shar: \"'files.txt'\" unpacked with wrong size!
fi
# end of 'files.txt'
fi
if test -f 'files/a.out.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'files/a.out.txt'\"
else
echo shar: Extracting \"'files/a.out.txt'\" \(154 characters\)
sed "s/^X//" >'files/a.out.txt' <<'END_OF_FILE'
X"a.out" is the resultant executable file created by "cc",
X"pascal", or "fortran".  (Its name is a historical accident --
Xconsult a Guru for explanation.)
END_OF_FILE
if test 154 -ne `wc -c <'files/a.out.txt'`; then
    echo shar: \"'files/a.out.txt'\" unpacked with wrong size!
fi
# end of 'files/a.out.txt'
fi
if test ! -d 'files/binaries' ; then
    echo shar: Creating directory \"'files/binaries'\"
    mkdir 'files/binaries'
fi
if test -f 'files/binaries.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'files/binaries.txt'\"
else
echo shar: Extracting \"'files/binaries.txt'\" \(149 characters\)
sed "s/^X//" >'files/binaries.txt' <<'END_OF_FILE'
XBinary files typically are named ".o" files.  They are not normally
Xleft lying around in your directory, except by certain programs,
Xsuch as "make."
END_OF_FILE
if test 149 -ne `wc -c <'files/binaries.txt'`; then
    echo shar: \"'files/binaries.txt'\" unpacked with wrong size!
fi
# end of 'files/binaries.txt'
fi
if test -f 'files/binaries/a.out.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'files/binaries/a.out.txt'\"
else
echo shar: Extracting \"'files/binaries/a.out.txt'\" \(74 characters\)
sed "s/^X//" >'files/binaries/a.out.txt' <<'END_OF_FILE'
XExecutable files are by default named "a.out" and left in your
Xdirectory.
END_OF_FILE
if test 74 -ne `wc -c <'files/binaries/a.out.txt'`; then
    echo shar: \"'files/binaries/a.out.txt'\" unpacked with wrong size!
fi
# end of 'files/binaries/a.out.txt'
fi
if test -f 'files/binaries/executables.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'files/binaries/executables.txt'\"
else
echo shar: Extracting \"'files/binaries/executables.txt'\" \(74 characters\)
sed "s/^X//" >'files/binaries/executables.txt' <<'END_OF_FILE'
XExecutable files are by default named "a.out" and left in your
Xdirectory.
END_OF_FILE
if test 74 -ne `wc -c <'files/binaries/executables.txt'`; then
    echo shar: \"'files/binaries/executables.txt'\" unpacked with wrong size!
fi
# end of 'files/binaries/executables.txt'
fi
if test -f 'files/filenames.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'files/filenames.txt'\"
else
echo shar: Extracting \"'files/filenames.txt'\" \(532 characters\)
sed "s/^X//" >'files/filenames.txt' <<'END_OF_FILE'
XFilenames in Unix may be composed of any characters, even non-
Xprinting characters (although not so useful).  However, conventionally,
Xfilenames have an "extension" composed of the period and a descriptive
Xcharacter or characters.  For example, C-language programs must
Xbe named a name whose last two characters are ".c".  Note that this
Xis not really an "extension"; it's just that the last two characters
Xof the filename are "." and "c".  Pascal programs may be named
Xending in ".pas" or ".p" .  Fortran programs must end in ".f"
END_OF_FILE
if test 532 -ne `wc -c <'files/filenames.txt'`; then
    echo shar: \"'files/filenames.txt'\" unpacked with wrong size!
fi
# end of 'files/filenames.txt'
fi
if test -f 'files/pwd.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'files/pwd.txt'\"
else
echo shar: Extracting \"'files/pwd.txt'\" \(132 characters\)
sed "s/^X//" >'files/pwd.txt' <<'END_OF_FILE'
XPwd tells you what directory is your current directory
X("p"rint "w"orking "d"irectory).  This is how you
X"find out where you are".
X
END_OF_FILE
if test 132 -ne `wc -c <'files/pwd.txt'`; then
    echo shar: \"'files/pwd.txt'\" unpacked with wrong size!
fi
# end of 'files/pwd.txt'
fi
if test -f 'files/sources.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'files/sources.txt'\"
else
echo shar: Extracting \"'files/sources.txt'\" \(640 characters\)
sed "s/^X//" >'files/sources.txt' <<'END_OF_FILE'
XSource files are usually created by typing them into the computer
Xusing an editor, such as "vi".
XSource files in the Pascal language must end with ".p" or ".pas".
XSource files in the C language must end with ".c".
XSource files in the FORTRAN language must end with ".f".
XNote that these are not "extensions" (Unix has no concept of
X"extensions").  They simply are the last few characters of
Xthe filename.  Filenames may be up to 255 characters long (not
Xrecommended) and may consist of any characters, although you'll
Xhave trouble with the shell if you stick, for example, "&" or
X"*" in any of your filenames; "." and "-" are fine, though.
END_OF_FILE
if test 640 -ne `wc -c <'files/sources.txt'`; then
    echo shar: \"'files/sources.txt'\" unpacked with wrong size!
fi
# end of 'files/sources.txt'
fi
if test -f 'fortran.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'fortran.txt'\"
else
echo shar: Extracting \"'fortran.txt'\" \(107 characters\)
sed "s/^X//" >'fortran.txt' <<'END_OF_FILE'
XThe fortran compiler is invoked by
X$ fortran filename.f
XThe executable is named "a.out" in your directory.
END_OF_FILE
if test 107 -ne `wc -c <'fortran.txt'`; then
    echo shar: \"'fortran.txt'\" unpacked with wrong size!
fi
# end of 'fortran.txt'
fi
if test -f 'games.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'games.txt'\"
else
echo shar: Extracting \"'games.txt'\" \(316 characters\)
sed "s/^X//" >'games.txt' <<'END_OF_FILE'
XWe have OODLES and OODLES of games (well, those that can be
Xplayed on 24 line X 80 column terminals).  We got chess,
Xbackgammon, hack, rogue, greed, and lots more.  To see
Xwhat games you can play, type
X% l /usr/games
X
XUsually, if it is an executable game, its name will end in *,
Xso to play it, just type its name.
X
END_OF_FILE
if test 316 -ne `wc -c <'games.txt'`; then
    echo shar: \"'games.txt'\" unpacked with wrong size!
fi
# end of 'games.txt'
fi
if test -f 'guru' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'guru'\"
else
echo shar: Extracting \"'guru'\" \(23 characters\)
sed "s/^X//" >'guru' <<'END_OF_FILE'
Xulgrp 0 | grep -v root
END_OF_FILE
if test 23 -ne `wc -c <'guru'`; then
    echo shar: \"'guru'\" unpacked with wrong size!
fi
chmod +x 'guru'
# end of 'guru'
fi
if test -f 'guru.1' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'guru.1'\"
else
echo shar: Extracting \"'guru.1'\" \(229 characters\)
sed "s/^X//" >'guru.1' <<'END_OF_FILE'
X.TH GURU 1 Local
X.UC 4
X.SH NAME
Xguru \-  Gurus list
X.SH SYNOPSIS
X.B guru
X.SH DESCRIPTION
XLooks in /etc/passwd for users with group id's of "root".
X.SH AUTHOR
XJ. Nelson, UNCW, 5 Jul 89
X.SH BUGS
XAlso reports Igors along with Guru.
END_OF_FILE
if test 229 -ne `wc -c <'guru.1'`; then
    echo shar: \"'guru.1'\" unpacked with wrong size!
fi
# end of 'guru.1'
fi
if test -f 'guru.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'guru.txt'\"
else
echo shar: Extracting \"'guru.txt'\" \(180 characters\)
sed "s/^X//" >'guru.txt' <<'END_OF_FILE'
XGurus are those professors and students who have transcended
Xmere worldly OS and C-hacking and have achieved a higher plane.
XFor a current list, consult a Guru.
X
XSee also "igors".
END_OF_FILE
if test 180 -ne `wc -c <'guru.txt'`; then
    echo shar: \"'guru.txt'\" unpacked with wrong size!
fi
# end of 'guru.txt'
fi
if test -f 'help.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'help.c'\"
else
echo shar: Extracting \"'help.c'\" \(1512 characters\)
sed "s/^X//" >'help.c' <<'END_OF_FILE'
X#include <sys/types.h>
X#include <sys/dir.h>
X#include <stdio.h>
X#include <string.h>
Xchar *zork[300];
Xmain(argc,argv)
Xchar **argv;
X{
X	int arcnt,level,k;
X	char line[133],fnd[133];
X	k=chdir(LIBDIR);
X	if(k<0)exit(1);
X	level=0;
X	arcnt=1;
X	for(;;){
X		if(arcnt>=argc)		{
X			puts("");
X			if(level)printf("Further ");
X			puts(
X			"Help is available for the following topics:");
X			if(listfd(1)<0)exit(1);
X			printf("\nHelp on what topic? ");
X			gets(line);
X		}
X		else{	
X			printf("%s:\n",argv[arcnt]);
X			if(listfd(0)<0)exit(1);
X			strcpy(line,argv[arcnt]);
X			arcnt++;
X		}
X		if(strlen(line)>0){
X			k=completion(line,zork); 
X			freezork(zork);
X			if(!k)continue;
X			if(!strcmp(line,"q") || 
X			    !strcmp(line,"quit") || 
X			    !strcmp(line,"exit"))exit(0);
X			if(line[0]=='!'){
X				strcpy(fnd,"man ");
X				strcat(fnd,&line[1]);
X				system(fnd);
X				continue;
X			}
X		}
X		if((k=strlen(line))==0 && level==0)exit(1);
X		if(k==0){
X			level--;
X			chdir("..");
X			continue;
X		}
X		strcpy(fnd,line);
X		strcat(line,".txt");
X		if(mymode(line)){
X			if(listit(line)<0)exit(1);
X		}
X		if(mymode(fnd)&040000){
X			/*			printf("\nFurther ");*/
X			chdir(fnd);
X			level++;
X		}
X	}
X}
Xfreezork(p)
Xchar **p;
X{
X	while(*p){
X		free(*p);
X		*p = (char *)0;
X		p++;
X	}
X}
Xcompletion(line,p)
Xchar *line;
Xchar **p;
X{
X	int i,j,count=0;
X	char *q;
X	q=line;
X	if(*q=='!')q++;
X	for(i=0;p[i];i++)if(kindex(p[i],q)==0){
X		if(strcmp(p[i],q)==0)return 1;
X		count++;
X		j=i;
X	}
X	if(count!=1){
X		printf("ambiguous\n");
X		return 0;
X	}
X	strcpy(q,p[j]);
X	return 1;
X
X}
X
END_OF_FILE
if test 1512 -ne `wc -c <'help.c'`; then
    echo shar: \"'help.c'\" unpacked with wrong size!
fi
# end of 'help.c'
fi
if test -f 'help.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'help.txt'\"
else
echo shar: Extracting \"'help.txt'\" \(284 characters\)
sed "s/^X//" >'help.txt' <<'END_OF_FILE'
XYou are using the help command right now.  To move down to sub-
Xtopics, select the sub-topic; to move back up to the parent topic,
Xjust type <return>.  To get the man-page for a topic, type
X!topic (that is, for example, to get the man-page for "cp"),
Xtype !cp at the "topic?" prompt.
END_OF_FILE
if test 284 -ne `wc -c <'help.txt'`; then
    echo shar: \"'help.txt'\" unpacked with wrong size!
fi
# end of 'help.txt'
fi
if test -f 'igors' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'igors'\"
else
echo shar: Extracting \"'igors'\" \(23 characters\)
sed "s/^X//" >'igors' <<'END_OF_FILE'
Xulgrp 0 | grep -v root
END_OF_FILE
if test 23 -ne `wc -c <'igors'`; then
    echo shar: \"'igors'\" unpacked with wrong size!
fi
chmod +x 'igors'
# end of 'igors'
fi
if test -f 'igors.1' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'igors.1'\"
else
echo shar: Extracting \"'igors.1'\" \(383 characters\)
sed "s/^X//" >'igors.1' <<'END_OF_FILE'
X.TH IGORS 1 Local
X.UC 4
X.SH NAME
Xigors \- apprentice Gurus list
X.SH SYNOPSIS
X.B igors
X.SH DESCRIPTION
XLooks in /etc/passwd for users with group id's of "root".
X.SH AUTHOR
XJ. Nelson, UNCW, 5 Jul 89
X.SH BUGS
XAlso reports Gurus along with Igors. Igors are those who can
Xbe considered Gurus on some subjects but not others. Gurus
Xwill admit to no such limitation, rightly or wrongly ...
END_OF_FILE
if test 383 -ne `wc -c <'igors.1'`; then
    echo shar: \"'igors.1'\" unpacked with wrong size!
fi
# end of 'igors.1'
fi
if test -f 'igors.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'igors.txt'\"
else
echo shar: Extracting \"'igors.txt'\" \(156 characters\)
sed "s/^X//" >'igors.txt' <<'END_OF_FILE'
XThe "igors" are those students who classify as Gurus or
Xsemi-Gurus (as in "Igor! Fetch me a brain!).  For a current
Xlist, consult a Guru.
X
XSee also "guru".
END_OF_FILE
if test 156 -ne `wc -c <'igors.txt'`; then
    echo shar: \"'igors.txt'\" unpacked with wrong size!
fi
# end of 'igors.txt'
fi
if test -f 'kindex.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'kindex.c'\"
else
echo shar: Extracting \"'kindex.c'\" \(427 characters\)
sed "s/^X//" >'kindex.c' <<'END_OF_FILE'
Xkindex(s,t) 
Xchar s[],t[];
X{
X	int c,i,j,k;
X	c=s[0];
X	if(c==0){return -1;
X/*		i=puts("in kindex ... dummy, s[0] is zero");j=i;*/
X/*		puts(t);*/
X/*		if(i==j)exit(1);*/
X		}
X	c=t[0];
X	if(c==0){return -1;
X/*	i=puts("in kindex ... dummy, t[0] is zero");j=i;*/
X/*		puts(s);*/
X/*		if(j==i)exit(1);*/
X		}
X	for(i=0;s[i] !='\0'; i++){
X		for(j=i,k=0;t[k] !='\0' && s[j]==t[k];j++,k++)
X				;
X		if(t[k]=='\0')return (i);
X	}
X		return(-1);
X} 
END_OF_FILE
if test 427 -ne `wc -c <'kindex.c'`; then
    echo shar: \"'kindex.c'\" unpacked with wrong size!
fi
# end of 'kindex.c'
fi
if test -f 'languages.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'languages.txt'\"
else
echo shar: Extracting \"'languages.txt'\" \(283 characters\)
sed "s/^X//" >'languages.txt' <<'END_OF_FILE'
XThere are three officially supported languages on this machine:
XFORTRAN, C, and Pascal.  Ada is on loan from Sequent, and may
Xbe returned at any time.  Awk and Perl may be considered by some
Xto be languages.  We do not have BASIC, nor are we ever likely to.
XC++ may be coming later.
END_OF_FILE
if test 283 -ne `wc -c <'languages.txt'`; then
    echo shar: \"'languages.txt'\" unpacked with wrong size!
fi
# end of 'languages.txt'
fi
if test -f 'learn.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'learn.txt'\"
else
echo shar: Extracting \"'learn.txt'\" \(158 characters\)
sed "s/^X//" >'learn.txt' <<'END_OF_FILE'
XThe "learn" program is (designed to be) self-explanatory.  It has
Xa number of courses to learn about files, C, and so forth.  Type
X% learn
Xand go from there.
END_OF_FILE
if test 158 -ne `wc -c <'learn.txt'`; then
    echo shar: \"'learn.txt'\" unpacked with wrong size!
fi
# end of 'learn.txt'
fi
if test -f 'less.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'less.txt'\"
else
echo shar: Extracting \"'less.txt'\" \(251 characters\)
sed "s/^X//" >'less.txt' <<'END_OF_FILE'
X"less" is a nice program which copies text to the terminal a screenful
Xat a time, then awaits a command.  <space> goes on to the next
Xscreenful; "b" goes back one screenful; "G" goes to the end of
Xthe input file, etc.  For more info see the man-page.
END_OF_FILE
if test 251 -ne `wc -c <'less.txt'`; then
    echo shar: \"'less.txt'\" unpacked with wrong size!
fi
# end of 'less.txt'
fi
if test -f 'listfd.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'listfd.c'\"
else
echo shar: Extracting \"'listfd.c'\" \(3730 characters\)
sed "s/^X//" >'listfd.c' <<'END_OF_FILE'
X#ifndef OLDDIR
X#include <sys/types.h>
X#include <stdio.h>
X#include <sys/stat.h>
X#include <string.h>
X#ifdef SYSV
X#include <dirent.h>
X#endif
X#include <sys/dir.h>
Xlistfd(yesprint)
X/* list files only of type "file" in the current directory */
X/* the "yesprint" thing is a horrible kludge, added to correct
X a horrible kludge when the filename-completion was added ...
X ad nauseam */
X{
X	DIR *dirp;
X	char line[233],fnmine[833];
X	int k;
X#ifdef SYSV
X	struct dirent dir, *p, *readdir();
X#else
X	struct direct dir, *p, *readdir();
X#endif
X	char *fn, *fgets();
X	extern char *zork[300];
X	int i;
X	char *malloc();
X
X
X	p= &dir;
X	dirp=opendir(".");
X	if(dirp==NULL){
X		return(-1);
X	}
X	line[0]=0;
X	i=0;
X	zork[i]=(char * )0;
X	while(p=readdir(dirp)) 
X	{
X		fn=p->d_name;
X		/*		fprintf(stderr,"fn=%x,p=%x,p->d_name=%x, *fn=%c\n",*/
X		/*		fn,p,p->d_name,*fn);*/
X		/*		{int i;for(i=0;i<5;i++)fprintf(stderr,"%o ",fn[i]);}*/
X		if(*fn=='.')continue;
X		if(mymode(fn)&040000) /*it's a dir*/continue;
X		if((k=kindex(fn,".txt"))<0)continue;
X		(void)strcpy(fnmine,fn);
X		fnmine[k]=0;
X		/*		puts(fnmine);*/
X		zork[i]=malloc((unsigned)strlen(fnmine)+1);
X		if(!zork[i])exit(1);
X		(void)strcpy(zork[i],fnmine);
X		/*		puts(zork[i]);*/
X		i++;
X		zork[i]=(char * )0;
X	}
X	closedir(dirp);
X	/*	puts(line);*/
X	mydumbsort(zork);
X	line[0]=0;
X	for(i=0;zork[i];i++)
X	{
X		int jim;
X		strcat(line,zork[i]);
X/*		free(zork[i]);*/
X		strcat(line," ");
X		jim=strlen(line);
X		if(jim>65){
X			if(yesprint)puts(line);
X			line[0]=0;
X		}
X		jim=strlen(line);
X		while(  (jim%9) ){
X			strcat(line," "); 
X			jim++;
X		}
X		if(jim>65){
X			if(yesprint)puts(line);
X			line[0]=0;
X		}
X		/*	if((i%5)==4){*/
X		/**/
X		/*			puts(line);*/
X		/*			line[0]=0;*/
X		/*		}*/
X
X	}
X	if(yesprint)puts(line);
X	return 1;	
X}
Xmydumbsort(p)
Xchar **p;
X{
X	/*dumb bubble sort of pointers*/
X	int i,j,n;
X	char *t;
X	if(p[0]==(char*)0)return; /*no elements*/
X	if(p[1]==(char*)0)return; /* one element*/
X	for(i=0;p[i];i++)   ;
X	n=i;
X	for(i=0;i<n-1;i++)
X		for(j=i+1;j<n;j++)
X			/*			if(*p[i]< *p[j]){*/
X			if(strcmp(p[i],p[j])>0){
X				t=p[i];
X				p[i]=p[j];
X				p[j]=t;
X
X			}
X
X}
X#else
X/* this is an entire replacement for listfd() for old-
Xstyle 14-character name, 2-byte inode no. style directories */
Xlistfd(yesprint)
X/* list files only of type "file" in the current directory */
X{
X	char line[233],fnmine[833];
X	int k;
X	char *fn, *fgets();
X	extern char *zork[300];
X	int i,fd;
X	char *malloc();
X	char mumble[17];
X
X
X	fd=open(".",0);
X
X	if(fd<0){
X		return(-1);
X	}
X	line[0]=0;
X	i=0;
X	zork[i]=(char * )0;
X	while( read(fd,mumble,16)==16) 
X	{
X		if(mumble[0]==0&&mumble[1]==0)continue;/*zeroed inode no.*/
X		fn= mumble+2;/*filename*/
X		mumble[16]=0;/*make sure null terminated*/
X		if(*fn=='.')continue;/*skip all dot files*/
X		if(mymode(fn)&040000) /*it's a dir*/continue;
X		if((k=kindex(fn,".txt"))<0)continue;
X		(void)strcpy(fnmine,fn);
X		fnmine[k]=0;
X		zork[i]=malloc((unsigned)strlen(fnmine)+1);
X		if(!zork[i])exit(1);
X		(void)strcpy(zork[i],fnmine);
X		i++;
X		zork[i]=(char * )0;
X	}/*end while*/
X	i=close(fd);
X	if(i<0)exit(7);
X	mydumbsort(zork);
X	line[0]=0;
X	for(i=0;zork[i];i++)
X	{
X		int jim;
X		strcat(line,zork[i]);
X/*		free(zork[i]);*/
X		strcat(line," ");
X		jim=strlen(line);
X		if(jim>65){
X			if(yesprint)puts(line);
X			line[0]=0;
X		}
X		jim=strlen(line);
X		while(  (jim%9) ){
X			strcat(line," "); 
X			jim++;
X		}
X		if(jim>65){
X			if(yesprint)puts(line);
X			line[0]=0;
X		}
X
X	}
X	if(yesprint)puts(line);
X	return 1;	
X}
Xmydumbsort(p)
Xchar **p;
X{
X	/*dumb bubble sort of pointers*/
X	int i,j,n;
X	char *t;
X	if(p[0]==(char*)0)return; /*no elements*/
X	if(p[1]==(char*)0)return; /* one element*/
X	for(i=0;p[i];i++)   ;
X	n=i;
X	for(i=0;i<n-1;i++)
X		for(j=i+1;j<n;j++)
X			if(strcmp(p[i],p[j])>0){
X				t=p[i];
X				p[i]=p[j];
X				p[j]=t;
X
X			}
X
X}
X#endif
END_OF_FILE
if test 3730 -ne `wc -c <'listfd.c'`; then
    echo shar: \"'listfd.c'\" unpacked with wrong size!
fi
# end of 'listfd.c'
fi
if test -f 'listit.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'listit.c'\"
else
echo shar: Extracting \"'listit.c'\" \(454 characters\)
sed "s/^X//" >'listit.c' <<'END_OF_FILE'
X#include <stdio.h>
Xlistit(fn)
Xchar *fn;
X{
X	int i;
X	char line[153];
X	FILE *fp;
X	fp=fopen(fn,"r");
X	if(fp==(FILE *)0)return(-1);
X	puts("");
X	i=0;
X	while(fgets(line,132,fp)==line)
X	{
X		i++;
X		if(  (i%21)==0 ){
X			int c;
X			printf("---more---");
X			fflush(stdout);
X			cbreak();
X			c=getchar();
X			nocbreak();
X/*			puts("");*/
X			printf("\r           \r");
X			if(c=='q')goto out;
X
X		}
X		printf("%s",line);
X	}
Xout:
X	if(fp)if(fclose(fp)<0)exit(1);
X	return 0;
X}
END_OF_FILE
if test 454 -ne `wc -c <'listit.c'`; then
    echo shar: \"'listit.c'\" unpacked with wrong size!
fi
# end of 'listit.c'
fi
if test -f 'logoff.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'logoff.txt'\"
else
echo shar: Extracting \"'logoff.txt'\" \(273 characters\)
sed "s/^X//" >'logoff.txt' <<'END_OF_FILE'
XYou log off the Unix machines by typing control-d at the
Xcommand line prompt.  (To type control-d, you HOLD DOWN the
X"control" key WHILE typing "d"; this is not a two-stroke
Xsequence -- it's a one-keystroke sequence made by holding
Xdown the first while typing the second).
END_OF_FILE
if test 273 -ne `wc -c <'logoff.txt'`; then
    echo shar: \"'logoff.txt'\" unpacked with wrong size!
fi
# end of 'logoff.txt'
fi
if test -f 'logout.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'logout.txt'\"
else
echo shar: Extracting \"'logout.txt'\" \(273 characters\)
sed "s/^X//" >'logout.txt' <<'END_OF_FILE'
XYou log off the Unix machines by typing control-d at the
Xcommand line prompt.  (To type control-d, you HOLD DOWN the
X"control" key WHILE typing "d"; this is not a two-stroke
Xsequence -- it's a one-keystroke sequence made by holding
Xdown the first while typing the second).
END_OF_FILE
if test 273 -ne `wc -c <'logout.txt'`; then
    echo shar: \"'logout.txt'\" unpacked with wrong size!
fi
# end of 'logout.txt'
fi
if test -f 'mail.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'mail.txt'\"
else
echo shar: Extracting \"'mail.txt'\" \(420 characters\)
sed "s/^X//" >'mail.txt' <<'END_OF_FILE'
XMail is just that: mail a message to another user.  Mail will
Xboth send and receive mail.  Be advised, however, that mail
Xis NOT private.  It's more like a message-passing bulletin
Xboard.  Do not mail secret things.  Mail is most often used
Xby professors to mail assignments, etc., to classes.  Mail
Xalso can be used to send messages anywhere in the world.
XConsult a Guru for permission/how-to on this powerful feature.
END_OF_FILE
if test 420 -ne `wc -c <'mail.txt'`; then
    echo shar: \"'mail.txt'\" unpacked with wrong size!
fi
# end of 'mail.txt'
fi
if test -f 'man.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'man.txt'\"
else
echo shar: Extracting \"'man.txt'\" \(555 characters\)
sed "s/^X//" >'man.txt' <<'END_OF_FILE'
XUnix boxes which have sufficient disk storage (Hi, Doug!) keep
Xthe manual on disk.  Unix traditionally has what are called "the
Xman-pages".  Most programs have a one-page manual entry, although
Xin later years, some programs have come with fifty-page entries.
XTo get a manual page for a particular program, use
X$ man programname
X
XSee also "apropos".
X
XYou can get the manual page from within help by typing
X!subject when help asks for a topic (well, dummy, you
Xdon't actually type "subject"; you replace it with what
Xyou want the man page for ... hmmmph!).
END_OF_FILE
if test 555 -ne `wc -c <'man.txt'`; then
    echo shar: \"'man.txt'\" unpacked with wrong size!
fi
# end of 'man.txt'
fi
if test -f 'manual.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'manual.txt'\"
else
echo shar: Extracting \"'manual.txt'\" \(555 characters\)
sed "s/^X//" >'manual.txt' <<'END_OF_FILE'
XUnix boxes which have sufficient disk storage (Hi, Doug!) keep
Xthe manual on disk.  Unix traditionally has what are called "the
Xman-pages".  Most programs have a one-page manual entry, although
Xin later years, some programs have come with fifty-page entries.
XTo get a manual page for a particular program, use
X$ man programname
X
XSee also "apropos".
X
XYou can get the manual page from within help by typing
X!subject when help asks for a topic (well, dummy, you
Xdon't actually type "subject"; you replace it with what
Xyou want the man page for ... hmmmph!).
END_OF_FILE
if test 555 -ne `wc -c <'manual.txt'`; then
    echo shar: \"'manual.txt'\" unpacked with wrong size!
fi
# end of 'manual.txt'
fi
if test -f 'mv.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'mv.txt'\"
else
echo shar: Extracting \"'mv.txt'\" \(218 characters\)
sed "s/^X//" >'mv.txt' <<'END_OF_FILE'
XRename is accomplished by use of the "mv" command.  Don't ask
Xwhy the command is named "mv" instead of "rename", it just is.
XUsage:
X$ mv from to
Xeffectively renames "from" to be "to".
XIt does a copy and then a delete.
END_OF_FILE
if test 218 -ne `wc -c <'mv.txt'`; then
    echo shar: \"'mv.txt'\" unpacked with wrong size!
fi
# end of 'mv.txt'
fi
if test -f 'mymode.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'mymode.c'\"
else
echo shar: Extracting \"'mymode.c'\" \(335 characters\)
sed "s/^X//" >'mymode.c' <<'END_OF_FILE'
X#include <stdio.h>
X#include <sys/types.h>
X#include <sys/stat.h>
X
Xmymode(p)
Xchar *p;
X{
X
X	struct stat buf;
X	struct stat *pb = &buf;
X#ifndef SYSV
X	if(lstat(p,pb)== -1)
X#else
X	if(stat(p,pb)== -1)
X#endif
X	{
X/*		fprintf(stderr,"lstat: %s not found\n",p);*/
X		return 0;
X	}
X/*	fprintf(stderr,"mode=%o\n",pb->st_mode);*/
X	return pb->st_mode;
X}
END_OF_FILE
if test 335 -ne `wc -c <'mymode.c'`; then
    echo shar: \"'mymode.c'\" unpacked with wrong size!
fi
# end of 'mymode.c'
fi
if test -f 'news.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'news.txt'\"
else
echo shar: Extracting \"'news.txt'\" \(526 characters\)
sed "s/^X//" >'news.txt' <<'END_OF_FILE'
XThe "news" refers to the posted articles in a network usually referred
Xto as "usenet".  These articles are arranged into a hierarchy of
Xsubjects, topics, etc., and come from all over the world.  UNCW
Xreceives the "news" from a big vax up in the Triangle every morning
Xbeginning at at 0249.  To read the news, you may use any one of several
X"news-reader" programs.  The two most popular seem to be "rn" and
X"nn".  I recommend "nn" for the beginner, as it is less formidable to
Xget started.  Just type 
X% nn 
Xand go from there.
END_OF_FILE
if test 526 -ne `wc -c <'news.txt'`; then
    echo shar: \"'news.txt'\" unpacked with wrong size!
fi
# end of 'news.txt'
fi
if test -f 'nocbreak.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'nocbreak.c'\"
else
echo shar: Extracting \"'nocbreak.c'\" \(308 characters\)
sed "s/^X//" >'nocbreak.c' <<'END_OF_FILE'
X#ifdef sequent
X#include <sgtty.h>
X
Xnocbreak()
X{
X	int i;
X	struct sgttyb ttystatus;
X	char *a;
X	a= &ttystatus.sg_ispeed;
X	i=ioctl(0,TIOCGETP,a);
X	if(i<0)exit(5);
X
X#define F	ttystatus.sg_flags
X	F ^= CBREAK;
X	i=ioctl(0,TIOCSETP,a);
X	if(i<0)exit(6);
X}
X#else
Xnocbreak(){
X	while(getchar()!='\n') /*null*/ ;
X}
X#endif
END_OF_FILE
if test 308 -ne `wc -c <'nocbreak.c'`; then
    echo shar: \"'nocbreak.c'\" unpacked with wrong size!
fi
# end of 'nocbreak.c'
fi
if test -f 'off.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'off.txt'\"
else
echo shar: Extracting \"'off.txt'\" \(273 characters\)
sed "s/^X//" >'off.txt' <<'END_OF_FILE'
XYou log off the Unix machines by typing control-d at the
Xcommand line prompt.  (To type control-d, you HOLD DOWN the
X"control" key WHILE typing "d"; this is not a two-stroke
Xsequence -- it's a one-keystroke sequence made by holding
Xdown the first while typing the second).
END_OF_FILE
if test 273 -ne `wc -c <'off.txt'`; then
    echo shar: \"'off.txt'\" unpacked with wrong size!
fi
# end of 'off.txt'
fi
if test -f 'pascal.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'pascal.txt'\"
else
echo shar: Extracting \"'pascal.txt'\" \(121 characters\)
sed "s/^X//" >'pascal.txt' <<'END_OF_FILE'
XThe pascal compiler is invoked by
X$ pascal filename.p
XThe executable is named "a.out" in your directory.
X
XSee also "ap".
END_OF_FILE
if test 121 -ne `wc -c <'pascal.txt'`; then
    echo shar: \"'pascal.txt'\" unpacked with wrong size!
fi
# end of 'pascal.txt'
fi
if test -f 'passwd.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'passwd.txt'\"
else
echo shar: Extracting \"'passwd.txt'\" \(93 characters\)
sed "s/^X//" >'passwd.txt' <<'END_OF_FILE'
XThe command to change your password is
X$ passwd
XNote the spelling: "passwd", not "password".
END_OF_FILE
if test 93 -ne `wc -c <'passwd.txt'`; then
    echo shar: \"'passwd.txt'\" unpacked with wrong size!
fi
# end of 'passwd.txt'
fi
if test -f 'phone.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'phone.txt'\"
else
echo shar: Extracting \"'phone.txt'\" \(273 characters\)
sed "s/^X//" >'phone.txt' <<'END_OF_FILE'
XYou can talk or phone another logged in user just by typing
X% phone joeblow
XYour target talkee should respond with
X% phone whoeveryouare
XNote that your target talkee may be refusing phone calls,
Xif he/she has executed the 'mesg n' command.
X
XPhone and talk are synonymous.
X
END_OF_FILE
if test 273 -ne `wc -c <'phone.txt'`; then
    echo shar: \"'phone.txt'\" unpacked with wrong size!
fi
# end of 'phone.txt'
fi
if test -f 'pwd.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'pwd.txt'\"
else
echo shar: Extracting \"'pwd.txt'\" \(132 characters\)
sed "s/^X//" >'pwd.txt' <<'END_OF_FILE'
XPwd tells you what directory is your current directory
X("p"rint "w"orking "d"irectory).  This is how you
X"find out where you are".
X
END_OF_FILE
if test 132 -ne `wc -c <'pwd.txt'`; then
    echo shar: \"'pwd.txt'\" unpacked with wrong size!
fi
# end of 'pwd.txt'
fi
if test -f 'quit.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'quit.txt'\"
else
echo shar: Extracting \"'quit.txt'\" \(0 characters\)
sed "s/^X//" >'quit.txt' <<'END_OF_FILE'
END_OF_FILE
if test 0 -ne `wc -c <'quit.txt'`; then
    echo shar: \"'quit.txt'\" unpacked with wrong size!
fi
# end of 'quit.txt'
fi
if test -f 'rename.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'rename.txt'\"
else
echo shar: Extracting \"'rename.txt'\" \(218 characters\)
sed "s/^X//" >'rename.txt' <<'END_OF_FILE'
XRename is accomplished by use of the "mv" command.  Don't ask
Xwhy the command is named "mv" instead of "rename", it just is.
XUsage:
X$ mv from to
Xeffectively renames "from" to be "to".
XIt does a copy and then a delete.
END_OF_FILE
if test 218 -ne `wc -c <'rename.txt'`; then
    echo shar: \"'rename.txt'\" unpacked with wrong size!
fi
# end of 'rename.txt'
fi
if test -f 'stat.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'stat.c'\"
else
echo shar: Extracting \"'stat.c'\" \(1479 characters\)
sed "s/^X//" >'stat.c' <<'END_OF_FILE'
X#include <stdio.h>
X#include <sys/types.h>
X#include <sys/stat.h>
X
Xmain(argc,argv)
Xint argc;
Xchar *argv[];
X{
X
X	int laststat=1,i=1;
X	char *name;
X	struct stat buf;
X	struct stat *pb = &buf;
X	if(argc<=1)
X	{
X		printf("requires an argument\n");
X		exit(1);
X	}
X	for(i=1;i<argc;i++)
X	{
X		name = argv[i];
X		if(lstat(name,pb)== -1)
X			printf("lstat: %s not found, i=%d\n",name,i);
X		else
X		{ 
X			printstat(pb,name);
X			if((pb->st_mode&S_IFLNK)==S_IFLNK)
X			{
X				char realname[257]; int i,jhn;
X				for(i=0;i<257;i++)realname[i]='\0';
X				readlink(name,realname,257);
X				printf( 
X				"---symbolic link, here's what it points to:---\n");
X				laststat=0;/*for exiting with 0 status (true)*/
X				jhn=stat(name,pb);
X				if(jhn==0)
X				printstat(pb,realname);
X				else {printf("\"%s\" not found--this could be a real problem!!\n",realname);exit(1);}
X			}
X			else
X				laststat=1; /*for exiting with false status*/
X		}
X	}
X	exit(laststat);
X}
Xprintstat(pb,name)
Xstruct stat *pb;
Xchar *name;
X{
X	char *ptime, *ctime();
X	printf("%s: ---------\n",name);
X	printf("file-mode=%o(oct)   inode=%d   st_dev=%x(hex)   #links=%d\n",
X	pb->st_mode,
X	pb->st_ino, 
X	pb->st_dev,
X	pb->st_nlink);
X	printf("owner=%d   group=%d   filesize=%d bytes\n",
X	pb->st_uid,pb->st_gid,pb->st_size);
X	ptime=ctime(&(pb->st_atime));
X	printf("data last accessed       %s",ptime);
X	ptime=ctime(&(pb->st_mtime));
X	printf("data last modified       %s",ptime);
X	ptime=ctime(&(pb->st_ctime));
X	printf("file status last changed %s",ptime);
X}
END_OF_FILE
if test 1479 -ne `wc -c <'stat.c'`; then
    echo shar: \"'stat.c'\" unpacked with wrong size!
fi
# end of 'stat.c'
fi
if test -f 'talk.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'talk.txt'\"
else
echo shar: Extracting \"'talk.txt'\" \(273 characters\)
sed "s/^X//" >'talk.txt' <<'END_OF_FILE'
XYou can talk or phone another logged in user just by typing
X% phone joeblow
XYour target talkee should respond with
X% phone whoeveryouare
XNote that your target talkee may be refusing phone calls,
Xif he/she has executed the 'mesg n' command.
X
XPhone and talk are synonymous.
X
END_OF_FILE
if test 273 -ne `wc -c <'talk.txt'`; then
    echo shar: \"'talk.txt'\" unpacked with wrong size!
fi
# end of 'talk.txt'
fi
if test -f 'terminal.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'terminal.txt'\"
else
echo shar: Extracting \"'terminal.txt'\" \(533 characters\)
sed "s/^X//" >'terminal.txt' <<'END_OF_FILE'
XYour terminal can be any one known to this system (last count about
X391 different kinds), but you must make it known to the system
Xwhat kind you are using.  The command to do that (if your login
Xsequence doesn't offer you your terminal type) is:
X% setenv TERM <whatever>
X
XYou can see all 391 different names we support by typing:
X% terminals
X
XIn general, the adds viewpoints (black face and keyboard housing) are
Xtype "av", and the vt200 series (white with ugly green stencilling on
Xthe sides) can be safely be thought to be vt100s.
END_OF_FILE
if test 533 -ne `wc -c <'terminal.txt'`; then
    echo shar: \"'terminal.txt'\" unpacked with wrong size!
fi
# end of 'terminal.txt'
fi
if test -f 'test.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'test.txt'\"
else
echo shar: Extracting \"'test.txt'\" \(298 characters\)
sed "s/^X//" >'test.txt' <<'END_OF_FILE'
XTest is useful for testing the existence of files (from within
Xshell scripts).  Be careful not to name your "test" programs
X"test", because you won't be running your test, you'll be
Xrunning the system's program called "test".
XFor example:
X% cc -o test test.c
X% test
Xdoesn't work the way you think.
END_OF_FILE
if test 298 -ne `wc -c <'test.txt'`; then
    echo shar: \"'test.txt'\" unpacked with wrong size!
fi
# end of 'test.txt'
fi
if test -f 'ulgrp' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'ulgrp'\"
else
echo shar: Extracting \"'ulgrp'\" \(263 characters\)
sed "s/^X//" >'ulgrp' <<'END_OF_FILE'
X#!/bin/sh
Xcase $1 in
X	"")
X	awk -F:  '{printf "%10s %4d %4d %-15s %-19s %-18s\n",$1,$3,$4,$6,$5,$2}' /etc/passwd|
Xsort +2n 
X;;
X	*) awk -F: '$4=='$1' {print}' /etc/passwd |
X  awk -F: '{printf "%10s %4d %4d %-15s %-19s\n",$1,$3,$4,$6,$5}' |
Xsort +0 -1 -b  
X
X;;
Xesac
END_OF_FILE
if test 263 -ne `wc -c <'ulgrp'`; then
    echo shar: \"'ulgrp'\" unpacked with wrong size!
fi
chmod +x 'ulgrp'
# end of 'ulgrp'
fi
if test -f 'vi.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'vi.txt'\"
else
echo shar: Extracting \"'vi.txt'\" \(2347 characters\)
sed "s/^X//" >'vi.txt' <<'END_OF_FILE'
XVi is the "visual" editor for the UNIX machines.  It differs
Xfrom the VAX/VMS editor in that vi is a "moded" editor: you
Xare either in COMMAND MODE or you are in INPUT MODE.  In 
XCOMMAND MODE, each keystroke is assumed to be a command; in
XINPUT MODE, each keystroke is put into the file unless it is
Xbackspace (the funny "X" key inside the diamond on vt220s) or
XESCAPE.  ESCAPE terminates the INPUT MODE, and puts you back to
XCOMMAND MODE.  If you don't know what mode you're in, hit
XESCAPE until your terminal beeps.  Then you are in COMMAND MODE.
X
XIn COMMAND MODE, the most useful commands are:
Xi<string>ESC -- goes into INPUT MODE until you hit ESCAPE
Xa<string>ESC -- like "i", but APPENDS (after instead of before)
Xx -- deletes (x's out) one character
Xdw -- delete word (up to next blank)
Xdd -- delete whole line
Xo -- open a line up after the current line and go to INPUT MODE
Xr -- replace the char under the cursor with one next character
XA -- append to end of line (good for putting in forgotten semicolons)
X0 -- NOTE: zero, not "oh" -- go to beginning of this line
X$ -- go to end of this line
XG -- go to last line in file
X:1 -- go to first line in file
X^d -- that's control-d  -- page down
X^b -- (control-b) page backward
X/<string> -- (do not type the < or >) search for <string>
Xn -- search for next occurrence of previous string
XZZ -- save edited version of file and exit
X:wq -- same as ZZ
Xh -- cursor left
Xj -- cursor down
Xk -- cursor up
Xl -- cursor right
X
X	 NOTE: the arrow keys may work (sometimes, on some, but not
X	 all, terminals), but once you get in the habit of using hjkl,
X	 you'll like it! -- you don't have to pick up your right hand
X	 and move it over to the arrows!!  Get used to it!!
X
XIn INPUT MODE, a few keys have special meaning:
XBACKSPACE -- (the funny "X" key on vt220s) -- erase the last character
X	 you just typed.  This is not the same as "x" in COMMAND MODE.
XESCAPE -- terminate INPUT MODE, putting you back to COMMAND MODE
X^d -- undo an auto-indent that just happened
XNOTE: THE ARROW KEYS ARE INOPERATIVE IN INPUT MODE AND MAY YIELD
XSTRANGE RESULTS.  STAY AWAY FROM THE ARROW KEYS!	
X
XYou can get several flavors of tutorials on the use of "vi"; there
Xare a "short" and a "long" help-file which can be dumped to your
Xscreen by typing
X% helpvi
Xand there is, of course, the "learn" tutorial package, as in
X% learn
X
X
END_OF_FILE
if test 2347 -ne `wc -c <'vi.txt'`; then
    echo shar: \"'vi.txt'\" unpacked with wrong size!
fi
# end of 'vi.txt'
fi
echo shar: End of archive 1 \(of 1\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have the archive.
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0
-- 
Jim Nelson,UNC-Wilmington,Mathematical Sciences Dept, 919-395-3300
nelson@uncw.uucp or nelson@ecsvax.uncecs.edu or nelson@ecsvax.bitnet
or {...,mcnc}!ecsvax!nelson or {...,mcnc}!ecsvax!uncw!nelson