mark@cogent.UUCP (Captain Neptune) (01/25/89)
As per requests from some net folks, my function key maintainance program follows. It's pretty handy, lets you keep a whole library of function key definitions. I hope the cross posting into comp.sys.hp doesn't upset too many folks, my mailer never has worked, and I just don't know how to get mail to the moderator of comp.sources.misc, and this seemed the best way to get this package to people with HP terminals :-) It was a judgement call on my part, if I must be flamed for it, then so be it. I am currently in the midst of a job change, so the addresses listed inside the source file will probably not be accurate! I don't know yet what my forwarding addresses (work & home), so for now, if you have any problems, ask for me over the net. (some folks won't like that...sorry...) -------------------------- cut here -------------------------------------- #! /bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #! /bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create: # Makefile # README # TODO # fnkey.1 # fnkey.c # samples # This archive created: Tue Jan 24 14:53:12 1989 export PATH; PATH=/bin:/usr/bin:$PATH echo shar: "extracting 'Makefile'" '(608 characters)' if test -f 'Makefile' then echo shar: "will not over-write existing file 'Makefile'" else sed 's/^X//' << \SHAR_EOF > 'Makefile' XCFLAGS= -O XCC= cc XDESTDIR=/usr/local/bin XLIBDIR=/usr/local/lib XMANDIR=/usr/local/man/man1 X Xall: fnkey X Xfnkey: fnkey.o X $(CC) $(CFLAGS) fnkey.o -o fnkey X Xinstall: X strip fnkey X cp fnkey $(DESTDIR) X cp fnkey.1 $(MANDIR) X -mkdir $(LIBDIR) $(LIBDIR)/fnkey X -chmod +x $(LIBDIR) $(LIBDIR)/fnkey X Xsample: X -mkdir $HOME/.fnkey X -chmod +x $HOME/.fnkey X -cp samples/* $HOME/.fnkey X fnkey X @echo "\n\t\t***************************************\n\t\t** Warning: these samples need to be **\n\t\t** edited to suit your own needs ! ! **\n\t\t***************************************\n" X Xclean: X -rm -f fnkey *.o a.out core X SHAR_EOF if test 608 -ne "`wc -c < 'Makefile'`" then echo shar: "error transmitting 'Makefile'" '(should have been 608 characters)' fi fi echo shar: "extracting 'README'" '(3236 characters)' if test -f 'README' then echo shar: "will not over-write existing file 'README'" else sed 's/^X//' << \SHAR_EOF > 'README' XHello. X XThis is a very early version of "fnkey", a program which allows Xyou to maintain function key settings in text files. It is device Xdependant in that it works only on the HP 2392a terminal and Xthose terminals that are compatible in the way they program their Xfunction keys. Zentec makes a clone of this terminal and "fnkey" Xshould work on it as well. X X"Fnkey" actually loads your specified labels and commands into Xthe programmable function keys on your terminal. The function key Xconfigurations are held in "description files". Description files Xcan be put in a central place (created automatically when you Xinstall "fnkey"), where all users can use them. Also, individual Xusers can add description files of their own, either augmenting Xor overriding the main set of description files. Read the manual Xpage for more details. X XCurrently, "fnkey" requires that your current terminal driver be Xeither "hp2392" or "ansi-d" (a terminfo driver for using HP X2392a's in ANSI mode). X XNote: the "ansi-d" driver is included here as a freebie, since it Xis pertinent to the discussion; if any of you are sick and tired Xof the awful escape sequences in HP mode, try ANSI mode with this Xdriver. It might be helpful to you. X XI am willing to do some maintenance of the program, including the Xrelease of future versions with improvements/fixes that you Xsuggest to me. Please email your feedback, diffs of patches, etc. Xto this mail path: X X...hplabs!hpda!motcsd!greek!mark X X----------------------------------------------------------------- XKnown bugs/limitations: X X1. For each newline that is programmed into a function key, X"fnkey" leaks a newline to the screen, causing unsightly Xscrolling. It is probably HP's fault and not mine, but I am open Xto suggestions on how to supress the scrolling. X X2. "Fnkey" does not use terminfo entries. If it did, the hardware Xdependancy might be largely overcome. I don't know, however, if Xterminfo has enough smarts for this, however. It can handle Xfunction keys that emit a fixed escape sequence, but a sequence Xto load a programmable function key? Hmmm... X X3. Some programs will not see all the characters that you program Xyour function key to send (since they have a short delay then Xflush the input buffer, etc...). An example of this is in the X"rn" news reader when you try to type "cy" (the catchup command Xplus "yes" verification). You can program a function key to Xoutput "cy", but "rn" will not see the letter "y". Again, not Xreally the fault of "fnkey" or the function keys, but I'm open to Xideas on how to get around it nonetheless. X X----------------------------------------------------------------- XTo compile and install: X XLook over the declarations in "Makefile", in case you want the Xexecutable, manual page, or whatever, to reside in a different Xplace. X Xmake - compiles the program X Xmake install - installs it (you must be root or super-user) X Xmake sample - loads sample "fnkey" description files into X "$HOME/.fnkey" for you to try out and tailor X to your own needs X Xmake clean - cleans up junk X X----------------------------------------------------------------- XGood luck, keep me informed on how it goes. SHAR_EOF if test 3236 -ne "`wc -c < 'README'`" then echo shar: "error transmitting 'README'" '(should have been 3236 characters)' fi fi echo shar: "extracting 'TODO'" '(96 characters)' if test -f 'TODO' then echo shar: "will not over-write existing file 'TODO'" else sed 's/^X//' << \SHAR_EOF > 'TODO' XThings to do: X X- add ctype.h for some OS's that can't find toupper() X- add hp150 to driver list SHAR_EOF if test 96 -ne "`wc -c < 'TODO'`" then echo shar: "error transmitting 'TODO'" '(should have been 96 characters)' fi fi echo shar: "extracting 'fnkey.1'" '(6745 characters)' if test -f 'fnkey.1' then echo shar: "will not over-write existing file 'fnkey.1'" else sed 's/^X//' << \SHAR_EOF > 'fnkey.1' X.TH Local "MSJ 7/16/87" X.SH NAME Xfnkey \- A user-defined function-key manager for \fIHP 2392a\fR terminals X(and clones) X.SH SYNOPSIS X.B fnkey X[ -q ] [ \fIfk_file\fR ] X.SH DESCRIPTION X.B Fnkey Xis a program which allows you to program function keys conveniently Xon \fIHP 2392a\fR terminals and any terminals which have compatible Xescape sequences. Details about how the function keys should be Xprogrammed are stored in a user-defined definition file X.I fk_file Xin the format described below. The definition file is read by X.B fnkey Xand the definitions are inserted into the terminals function key Xmemory automatically. If no definition file is specified, X.B fnkey Xuses the '\fIfn_default\fR' as the name of the definition file to Xread. Also, if '\fB\-\fR' is given as the definition file, then Xstandard input is read instead. When the optional '\fB\-q\fR' Xargument is included, X.B fnkey Xruns quietly, supressing error messages. X.PP X.B Fnkey Xlooks in the following places to find the definition file that has Xbeen specified, and in this order: X.nf X X - in the directory $FNKEY, if the environment variable X $FNKEY exists and if the directory exists X X - in the directory $H, if the environment variable X $H exists and if the directory exists X X - in the directory $H/.fnkey, if the environment X variable $H exists and if the directory exists X X - in the directory $HOME, if the environment variable X $HOME exists and if the directory exists X X - in the directory $HOME/.fnkey, if the environment X variable $HOME exists and if the directory exists X X - in the directory /usr/local/lib/fnkey, if it exists X X.fi XUpon finding a directory where the description file exists and is Xreadable, the search is ended and that file is used. X.SH "DESCRIPTION FILE FORMAT" XThe description file contains one or more lines, each of which defines Xone function key. Each line consists of four mandatory fields and an Xoptional fifth field, all of which are delimited by colons ('\fB:\fR'). XColons can not be a part of any field. X.PP XThe first field is a single numeric digit ranging from 1 to 8, Xspecifying the number of the function key. X.PP XThe second and third fields specify the contents of the upper and lower, Xrespectively, rows of the screen label for the specified function key. XThese fields should be padded with whatever leading spaces are desired, Xand their lengths must not exceed 8. The second field can be a '\fB*\fR', Xwhich causes the function key to be disabled. Either field can be null, Xwhich will appear on the screen as blank. X.PP XThe fourth field specifies the actual string which is to be output by the Xspecified function key. This field has no size limit (within reason) and Xcan include both leading and trailing spaces. If you wish for a carriage Xreturn to be automatically entered after the string (e.g. for a command Xwhich is to be executed in the shell), then a carriage return must be Ximbedded in this field (as shown in the next section). X.PP XA typical definition file might look like this: X.nf X X1:Get keys:for Tape:fnkey tape\\n X2:Read the:time:clock\\n:this is just a shell script X3:Who's on::who\\n X6:* X7:Check my:Process':ps -f\\n X8:Other:Process':ps -ef\\n X X.fi XIn the above example, the first function key would execute X.B fnkey Xin order to load function key definitions used for handling magnetic Xtapes. This pseudo-recursive use of X.B fnkey Xallows you to set up entire 'menus' of function keys. The second Xfunction key executes a shell script called 'clock'. The third function Xkey executes the 'who' command. Since there are no entries for function Xkeys 4 and 5, they will be unaffected and remain as they were. The sixth Xfunction key will be disabled and output merely a carriage return. The Xlast two function keys will execute the 'ps' command with various options. X XThe definition of function key 2 includes a comment field. All fourth Xfields have '\fB\\n\fR' at the end in order to assure that a carriage Xreturn is issued. There will, of course, be times when a carriage return Xis not preferred. An example would be this line: X.nf X X1:Delete:the line:dd X X.fi Xwhich would cause function key 1 to issue the 'delete line' command while Xediting with 'vi'. X.SH "IMBEDDED CHARACTERS" XIn the second, third and fourth fields of the description file, special Xcharacters can be imbedded by using '\fB^\fR' to imply control characters Xand '\fB\\\fR' to imply other special escape codes. For example: X.nf X X ^X - this would be interpreted as 'control-X' X X.fi XAny alphabetic character may follow the '\fB^\fR' in order to signify a Xcontrol character. This can be used, for example, to enter a 'control-D' Xinto the fourth field, for a 'logoff' function key: X.nf X X8:Log off:system:^D X X.fi XThe following uses of '\fB\\\fR' are supported: X.nf X X \\n - newline X X \\r - carriage return X X \\b - bell (^G) X X \\E - escape X X.fi XAny other characters placed after an '\fB\\\fR' will be interpreted Xliterally ('\fB\\\\\fR' would allow an '\fB\\\fR' to be a part of the Xfield, '\fB\\^\fR' would allow '\fB^\fR' to be a part of the field, etc). X.SH RETURN CODES XAn exit code of zero is returned if X.B fnkey Xruns uneventfully (even if some lines in the definition file are Xrejected), and an exit code of one is returned if a hard error Xoccurs such as not finding a file or having an inadequate terminal Xtype. X.SH WARNINGS X.B Fnkey Xwill complain if your terminal is not capable of having it's function keys Xset or if the escape sequences of your terminal are not \fIHP 2392a\fR Xcompatible. The environment variable \fI$TERM\fR is checked to determine Xthis. X.PP XSome key sequences can be programmed into a function key, but will fail Xto work due to an application discarding part of what was sent. X.B Fnkey Xcannot help this. X.SH BUGS XIn keeping with HP's policy of making their terminals braindamaged, the Xescape sequence to program function keys leaks carriage returns to the Xscreen. Thus, each occurance of a newline ('\fB\\n\fR') in a fourth field Xwill cause the cursor to drop down one line and possibly scroll. If you Ximbed this command in any screen-oriented programs, beware. You will Xprobably have to home the cursor, execute the X.B fnkey Xcommand, then reposition the cursor to wherever you had intended it to Xbe all this time. X.PP XThis program is device dependant. I will not adapt it to other Xterminals except for cases of my own personal preference. If you want Xit on a different terminal, then you must hack it yourself. Using X.I terminfo Xfor portability would be nice, but I don't know if it is capable of this Xstuff. X.PP XDon't include any '\fB^\S\fR' characters in the definition file (or Xstandard input). It will probably hang your terminal. X.SH AUTHOR XMark Steven Jeghers, Motorola Computer Division, July 1987 SHAR_EOF if test 6745 -ne "`wc -c < 'fnkey.1'`" then echo shar: "error transmitting 'fnkey.1'" '(should have been 6745 characters)' fi fi echo shar: "extracting 'fnkey.c'" '(5987 characters)' if test -f 'fnkey.c' then echo shar: "will not over-write existing file 'fnkey.c'" else sed 's/^X//' << \SHAR_EOF > 'fnkey.c' X/**************************************************************** X * fnkey.c - a program to maintain function key definitions X * X * Author: Mark Steven Jeghers X * X * SCCS Version: @(#)fnkey.c 1.2 X * X * Last Modified: 08/21/87 14:51:34 X * Last Retrieved: 03/20/88 12:51:40 X * X * The author of "fnkey" grants permission to use and X * redistribute this program as long as these three conditions X * are met: X * X * 1. The program is not sold for profit, distributed for X * personal gain, or given to anyone else (unless it is X * given with ABSOLUTELY no strings attached and at NO X * expense to the recipient). X * X * 2. The contents of this box (title, version numbers, author X * info and terms of permissions) are left intact at the top X * of this program. X * X * 3. No other person takes credit for authorship of this program. X * X **************************************************************** X * X * Author's whereabouts: (last known whereabouts, at any rate...) X * X * Business Address: Home Address: X * ------------------------- ---------------------- X * Cogent Software Solutions Mark Jeghers X * 221 Tuxedo Ct. #F 2014 W. Willow X * Stockton CA 95204 Stockton CA 95203 X * (209) 467-0276 (209) 465-0391 X * X ****************************************************************/ X X#include <ctype.h> /* only needed on some systems to include toupper(), */ X /* it can be commented out if compile problems arise */ X#include <fcntl.h> X#include <stdio.h> X#include <string.h> X Xint quiet = 0; Xchar record[256]; X Xstatic char *TERM[] = { /* list of $TERM values we can deal with */ X "hp2392", X "hp150", X "ansi-d", X "*end*" /* <--- end of the list */ X }; X Xmain(argc, argv) Xint argc; Xchar *argv[]; X{ X int i, fd, args, file_ok = 0, termok = 0; X X FILE *strm; X char fk_num[2]; X X for (i=0; strcmp(TERM[i], "*end*") != 0; i++) X if ((strcmp(TERM[i], getenv("TERM"))) == 0) X termok = 1; X X for (args = 1; args <= argc-1; args++) { X if (strcmp(argv[args], "-") == 0) { /* hook stdin to fd */ X fd = dup(0); X close(0); X file_ok = 1; X } else if (strcmp(argv[args], "-q") == 0) { /* quiet mode */ X quiet = 1; X } else { /* open normal file */ X fd = find_open(argv[1]); X file_ok = 1; X } X } X X if (termok != 1) { X if (quiet == 0) X fprintf(stderr, "%s: Inadequate terminal type '%s'\n", argv[0], getenv("TERM")); X exit(1); X } X X if (file_ok == 0) { /* open default file if needed */ X fd = find_open("fn_default"); X } X X if (fd == -1) { X if (quiet == 0) X fprintf(stderr, "%s: Cannot open any source file\n", argv[0]); X exit(1); X } X strm = fdopen(fd, "r"); X X all_keys_off(); X X while (fgets(record, 256, strm) != NULL) { X if (strlen(record) > 1) { X parse(record, fk_num); X if ((atoi(fk_num) > 0) && (atoi(fk_num) < 9)) X process_key(fk_num); X else X complain(argv[0], fk_num); X } X } X X all_keys_on(); X X fclose(strm); X close(fd); X X exit(0); X} /* end of main */ X Xprocess_key(k_num) Xchar *k_num; X{ X char Label1[9], Label2[9], Command[99]; X X parse(record, Label1); X if (strcmp(Label1, "*") != 0) { X process_string(Label1); X pad(Label1, 8); X parse(record, Label2); X process_string(Label2); X pad(Label2, 8); X parse(record, Command); X process_string(Command); X } else { X strcpy(Label1, " "); X strcpy(Label2, " "); X strcpy(Command, "\n"); X } X output_fkey(k_num, Label1, Label2, Command); X} X Xoutput_fkey(k_num, L1, L2, Cmd) Xchar *k_num, *L1, *L2, *Cmd; X{ X int i, j; X char string[199], tmp[99]; X X strcpy(string, "\033&f"); X sprintf(tmp, "%dk", atoi(k_num)); X strcat(string, tmp); X strcat(string, "16d"); X sprintf(tmp, "%d\L", strlen(Cmd)); X strcat(string, tmp); X strcat(string, L1); X strcat(string, L2); X strcat(string, Cmd); X i = 0; X do { X if (string[i] == '%') { X for (j=strlen(string)+1; j != i; j--) X string[j] = string[j-1]; X i++; X } X i++; X } while (i < strlen(string)); X printf(string); X} X Xall_keys_on() X{ X printf("\033&jB"); X} X Xall_keys_off() X{ X printf("\033&j@"); X} X Xcomplain(pgname, k) Xchar *pgname, *k; X{ X if (quiet == 0) X fprintf(stderr, "%s: Invalid entry for key '%s'\n", pgname, k); X} X Xpad(str, len) Xchar *str; Xint len; X{ X while (strlen(str) < len) X strcat(str, " "); X} X Xprocess_string(str) Xchar *str; X{ X int i, j; X char escape(), control(); X X for (i=0; i<strlen(str); i++) { X switch(str[i]) { X case '\\': X str[i] = escape(str[i+1]); X for (j=i+1; j<strlen(str); j++) X str[j] = str[j+1]; X str[strlen(str)] = '\0'; X break; X case '^': X str[i] = control(str[i+1]); X for (j=i+1; j<strlen(str); j++) X str[j] = str[j+1]; X str[strlen(str)] = '\0'; X break; X } X } X} X Xchar escape(c) Xchar c; X{ X switch(c) { X case 'n': X return('\012'); X case 'r': X return('\015'); X case 'b': X return('\007'); X case 'E': X return('\033'); X } X return(c); X} X Xchar control(c) Xchar c; X{ X c = toupper(c); X return(c - 'A' + 1); X} X Xparse(rec, str) Xchar *rec, *str; X{ X int i = 0, j, k; X char *ptr1 = rec, *ptr2 = rec; X X while ((ptr1[0] != ':') && (ptr1[0] != '\012') && (ptr1[0] != '\0')) X ptr1++; X while (ptr2 != ptr1) { X str[i] = ptr2[0]; X ptr2++; X i++; X } X str[i] = '\0'; X k = strlen(rec); /* get it now because it will change!! */ X for (j=0; j != k-i; j++) X rec[j] = rec[j+i+1]; X} X Xfind_open(file) Xchar *file; X{ X int fd; X X if (getenv("FNKEY") != NULL) { X if ((fd = chk_path(getenv("FNKEY"), file)) != -1) X return(fd); X } X if (getenv("H") != NULL) { X if ((fd = chk_path(getenv("H"), file)) != -1) X return(fd); X if ((fd = chk_path(strcat(getenv("H"), "/.fnkey"), file)) != -1) X return(fd); X } X if (getenv("HOME") != NULL) { X if ((fd = chk_path(getenv("HOME"), file)) != -1) X return(fd); X if ((fd = chk_path(strcat(getenv("HOME"), "/.fnkey"), file)) != -1) X return(fd); X } X if ((fd = chk_path("/usr/local/lib/fnkey", file)) != -1) X return(fd); X X return(-1); X} X Xchk_path(dir, file) Xchar *dir, *file; X{ X int fd; X char path[99]; X X strcpy(path, dir); X strcat(path, "/"); X strcat(path, file); X if (access(path, 4) == 0) { X return(fd = open(path, O_RDONLY)); X } else { X return(-1); X } X} SHAR_EOF if test 5987 -ne "`wc -c < 'fnkey.c'`" then echo shar: "error transmitting 'fnkey.c'" '(should have been 5987 characters)' fi fi if test ! -d 'samples' then echo shar: "creating directory 'samples'" mkdir 'samples' fi echo shar: "entering directory 'samples'" cd 'samples' echo shar: "extracting 'dial'" '(274 characters)' if test -f 'dial' then echo shar: "will not over-write existing file 'dial'" else sed 's/^X//' << \SHAR_EOF > 'dial' X1:Hook to: Modem:cu -s2400 -m -lcul0p1\n X2: Manual: Dial:cu -s2400 X3: Call: Jersey:cu nj\n: often used X4: Call: Argo:cu argo\n: often used X5: Call:Stockton:cu stkn\n: seldom used X6: Call:Winston:cu ws\n: seldom used X7:Back to:top set:fnkey\n X8: Logoff:or Exit:exit\n SHAR_EOF if test 274 -ne "`wc -c < 'dial'`" then echo shar: "error transmitting 'dial'" '(should have been 274 characters)' fi fi echo shar: "extracting 'fn_default'" '(236 characters)' if test -f 'fn_default' then echo shar: "will not over-write existing file 'fn_default'" else sed 's/^X//' << \SHAR_EOF > 'fn_default' X1: Go to:main set:fnkey main\n X2: Go to:UUCP set:fnkey uucp\n X3: Go to:dial set:fnkey dial\n X4: Go to:news set:fnkey news\n X5: Go to:unix set:fnkey unix\n X6: Go to: fun set:fnkey fun\n X7: Read:the Mail:mailx\n X8: Logoff:or Exit:exit\n SHAR_EOF if test 236 -ne "`wc -c < 'fn_default'`" then echo shar: "error transmitting 'fn_default'" '(should have been 236 characters)' fi fi echo shar: "extracting 'fun'" '(184 characters)' if test -f 'fun' then echo shar: "will not over-write existing file 'fun'" else sed 's/^X//' << \SHAR_EOF > 'fun' X1: Read a:fortune:fortune\n X2: Read a:Headline:spew\n X3: Play: Chess:chess\n X4: Play:Othello:othello\n X5: Play:Advnture:adv\n X6:* X7:Back to:top set:fnkey\n X8: Logoff:or Exit:exit\n SHAR_EOF if test 184 -ne "`wc -c < 'fun'`" then echo shar: "error transmitting 'fun'" '(should have been 184 characters)' fi fi echo shar: "extracting 'main'" '(262 characters)' if test -f 'main' then echo shar: "will not over-write existing file 'main'" else sed 's/^X//' << \SHAR_EOF > 'main' X1: Do a: uusnap:uusnap\n X2: Do a: uulog:uulog | tail\n X3: Call: Jersey:cu nj\n: often used X4: Call: Argo:cu argo\n: often used X5: Call:Stockton:cu stkn\n: seldom used X6: Call:Winston:cu ws\n: seldom used X7:Back to:top set:fnkey\n X8: Logoff:or Exit:exit\n SHAR_EOF if test 262 -ne "`wc -c < 'main'`" then echo shar: "error transmitting 'main'" '(should have been 262 characters)' fi fi echo shar: "extracting 'news'" '(297 characters)' if test -f 'news' then echo shar: "will not over-write existing file 'news'" else sed 's/^X//' << \SHAR_EOF > 'news' X1:Post new:article:!Pnews\n X2: Post:Followup:F:followup command in 'rn' X3:Reply by: Mail:R:reply command in 'rn' X4:Catch up:articles:c:catch-up command in 'rn' X5: Browse :articles:=:browse command in 'rn' X6: Quit: this:q:quit command in 'rn' X7:Back to:top set:fnkey\n X8: Logoff:or Exit:exit\n SHAR_EOF if test 297 -ne "`wc -c < 'news'`" then echo shar: "error transmitting 'news'" '(should have been 297 characters)' fi fi echo shar: "extracting 'tape'" '(357 characters)' if test -f 'tape' then echo shar: "will not over-write existing file 'tape'" else sed 's/^X//' << \SHAR_EOF > 'tape' X1:Read the: Tape:tape.read\n:a tape-reading script X2:Save out:my area:tape.save -u mark\n:a tape-saving script X3:|pipe to:tapesave: | tape.save\n:same as 2, but via pipeline X4:|pipe to:raw tape: | dd of=/dev/rmt/0m obs=5120\n X5:read in:raw tape:dd if=/dev/rmt/0m ibs=5120 X6:Back to:unix set:fnkey unix\n X7:Back to:top set:fnkey\n X8: Logoff:or Exit:exit\n SHAR_EOF if test 357 -ne "`wc -c < 'tape'`" then echo shar: "error transmitting 'tape'" '(should have been 357 characters)' fi fi echo shar: "extracting 'unix'" '(182 characters)' if test -f 'unix' then echo shar: "will not over-write existing file 'unix'" else sed 's/^X//' << \SHAR_EOF > 'unix' X1: Go to:Tape set:fnkey tape\n X2:Read the: time:date\n X3: Who is: on?:who\n X4: Disk: space?:df\n X5:Check my:Process':ps -f\n X6: Check:Process':ps -ef\n X7:Back to:top set:fnkey\n SHAR_EOF if test 182 -ne "`wc -c < 'unix'`" then echo shar: "error transmitting 'unix'" '(should have been 182 characters)' fi fi echo shar: "extracting 'uucp'" '(274 characters)' if test -f 'uucp' then echo shar: "will not over-write existing file 'uucp'" else sed 's/^X//' << \SHAR_EOF > 'uucp' X1: Do a: uusnap:uusnap\n X2: Do a: uulog:uulog | tail\n X3: Poll: Jersey:uupoll nj\n:often used X4: Poll: Argo:uupoll argo\n:often used X5: Poll:Stockton:uupoll stkn\n:seldom used X6: Poll:Winston:uupoll ws\n:seldom used X7:Back to:top set:fnkey\n X8: Logoff:or Exit:exit\n SHAR_EOF if test 274 -ne "`wc -c < 'uucp'`" then echo shar: "error transmitting 'uucp'" '(should have been 274 characters)' fi fi echo shar: "done with directory 'samples'" cd .. exit 0 # End of shell archive -- Mark Steven Jeghers "No reward for resistance, Cogent Software Solutions no assistance, ...pacbell!cogent!mark no applause..." ...uunet!lll-winken!cogent!mark Neil Peart