home *** CD-ROM | disk | FTP | other *** search
- From: wht@n4hgf.atl.ga.us (Warren Tucker)
- Newsgroups: comp.sources.misc
- Subject: v42i129: ecu - ECU Asynchronous Communications v3.30, Part31/37
- Date: 25 May 1994 14:59:36 -0500
- Organization: Sterling Software
- Sender: kent@sparky.sterling.com
- Approved: kent@sparky.sterling.com
- Message-ID: <2s0an8$9ui@sparky.sterling.com>
- X-Md4-Signature: 96f2f14eacffd0d7857b01825ae66118
-
- Submitted-by: wht@n4hgf.atl.ga.us (Warren Tucker)
- Posting-number: Volume 42, Issue 129
- Archive-name: ecu/part31
- Environment: SCO,SCOXENIX,MOTOROLA,HP-UX,LINUX,NetBSD,SUNOS,SYSVR4,SOLARIS2
- Supersedes: ecu: Volume 32, Issue 36-75
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then feed it
- # into a shell via "sh file" or similar. To overwrite existing files,
- # type "sh file -c".
- # Contents: ecu330/doc/_hdb.txt ecu330/doc/proc.txt
- # ecu330/ecufinsert.c ecu330/ecuicmhelp.c ecu330/eculock.c
- # ecu330/fasiintf.c ecu330/mapkey/keys.usa.ecu
- # Wrapped by kent@sparky on Mon May 23 13:41:03 1994
- PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin:$PATH ; export PATH
- echo If this archive is complete, you will see the following message:
- echo ' "shar: End of archive 31 (of 37)."'
- if test -f 'ecu330/doc/_hdb.txt' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'ecu330/doc/_hdb.txt'\"
- else
- echo shar: Extracting \"'ecu330/doc/_hdb.txt'\" \(7542 characters\)
- sed "s/^X//" >'ecu330/doc/_hdb.txt' <<'END_OF_FILE'
- X.*s 1 "HoneyDanBer UUCP Interface"
- X
- X.*s 2 "Control Files"
- X
- XThis section describes how ecu uses verious HDB UUCP control
- Xfiles found in the UUCP library directory (e.g., /usr/lib/uucp on
- XSCO and ISC or /etc/uucp on SunOS and SVR4).
- X
- X.*s 3 "Devices"
- X
- XECU reads this file to determine what tty devices are available
- Xfor outgoing calls. The fourth field must contain a baud rate or
- Xrange of baud rates acceptable for the line. The fifth field of
- Xeach entry must contain either the full pathname of an (SCO)
- Xmodem dialer program (with leading slash) or the name of an entry
- Xin the HDB Dialers file (no leading slash). For more
- Xinformation, consult the UUCP documentation for your system and
- Xsee "Dialers" and "Choosing a Dialout Line" below.
- X
- X.*s 3 "Dialers"
- X
- X.B Dialers
- Xentries may be specified in the Devices entry.
- XECU provides Dialers support that is largely compatible
- Xwith most System V HDB uucico programs. Refer to
- Xyour system's UUCP documentation for general
- Xusage instructions. Refer to the procedure command
- X.B expresp
- Xfor a precise list of escape sequences supported by ECU.
- X
- X.*s 3 "Sysfiles"
- X
- XSysfiles support is not yet provided. The Devices and
- XDialers files must have their default names.
- X
- X.*s 3 "Systems"
- X
- XNo use is made of the
- X.B Systems
- Xfile at this time. ECU provides the
- Xequivalent function with its dialing directory.
- X
- X.*s 2 "Choosing a Dialout Line"
- X
- XWhen using the interactive
- X.B dial
- Xcommand, or when dialing from the initial menu,
- Xif a logical or system name is specified, the directory
- Xentry is fetched and examined. If the tty field specifies
- Xa value other than "Any", the specific line requested is
- Xopened, if available, and dialing commences.
- XIf the specified line is not available, the dial attempt
- Xfails.
- X
- XIf "Any" is found in the dialing directory entry tty field, then
- XECU finds an available Devices line which matches the baud rate
- Xspecified in the entry.
- X
- XOther special tty field entries allow regular expression or
- Xliteral matching of Devices types. See the description of the dialing
- Xdirectory for more details.
- X
- XA line is selected only if its class begins with the three
- Xcharacters "ACU." UUCP will only select a line whose Devices
- Xentry class matches the active Systems entry class (usually
- X"ACU"), so usually you may make a modem accessible to ECU, but not
- Xto UUCP, by setting it's class to ACUECU.
- X
- XOn systems employing ecuungetty, if a line being considered for
- Xselection is found to be a line enabled for login, but
- Xcurrently idle, the ecuungetty interface, described below,
- Xis used to acquire the line for outgoing use.
- X
- XThe DCD watcher (see the interactive and procedure commands
- X.B dcdwatch )
- Xdepends upon the tty driver to return zero
- Xon a read when DCD is low when the termio flag CLOCAL is reset.
- XThe tty driver must ignore DCD if CLOCAL is set.
- XIf your system offers a "modem" and "direct" choice (by choice
- Xof filename), you probably need to use the "modem" choice for
- Xthis to work properly. However, the choice depends upon
- Xthe needs of the underlying driver you are using.
- XFor instance, if you are using FAS in a shared modem application,
- Xyour getty should use the "modem" choice and ECU should
- Xuse the "direct" choice. Some experimentation may be required.
- X
- XOne of the symptoms of an incorrect line choice is ECU hangs,
- Xline errors such as EIO and EBUSY. These problems may
- Xbe caused by other problems, but incorrect line choice is
- Xthe most frequent cause.
- X
- X
- X.*s 2 "SCO Tty Naming"
- X
- XOn SCO,
- XTTY devices must be named in the style of:
- X.DS I
- X/dev/tty#N
- X ^^
- X ||
- X |`------ uppercase letter for modem control
- X | lowercase for non-modem control
- X `--------digit (1-4)
- X.DE
- X
- XIf you are using FAS or other third-party driver, you may
- Xuse ECU with ports not normally named in the /dev/tty#N
- Xstyle in one of two ways under UNIX and one way under XENIX:
- X
- X.DS I
- X1. Under XENIX or UNIX, create a link to the port
- X with a compatible name:
- X
- X ln /dev/ttyF00 /dev/tty1a
- X ln /dev/ttyFM00 /dev/tty1A
- X
- X2. Under UNIX, add additional lines to the
- X /etc/conf/node.d file and rebuild the kernel
- X environment (this is the recommended approach
- X for UNIX):
- X
- Xfas ttyF00 c 48
- Xfas tty1a c 48
- Xfas ttyF01 c 49
- Xfas tty1b c 49
- Xfas ttyFM00 c 208
- Xfas tty1A c 208
- Xfas ttyFM01 c 209
- Xfas tty1B c 209
- X.DE
- X
- XNote the device numbers are examples only. Consult the driver
- Xdocumentation for proper choices.
- X
- XIf you cannot live within this restriction, search for the #define
- XSCO_TTY_NAMING in ecu.h (that depends on SCO's M_SYSV) and disable it.
- X
- X.*s 2 "Ecuungetty (Getty Interface)"
- X
- XThis section applies to the SCO version of the program. It
- Xmay also apply to others in part. Specifically, as of this
- Xwriting, this section does not apply to the SunOS version
- Xdue to the differences in utmp arrangement. In some versions,
- Xthe mechanism may execute and do no harm, yet essentially be a no-op.
- X
- XWhen an idle dialin (enabled) line is chosen for dialout,
- XECU makes use of
- X.B ecuungetty
- X(in the ecu library directory, normally /usr/local/lib/ecu)
- Xto signal the line's getty to release the line (via SIGUSR1).
- X.B Ecuungetty
- Xis again employed to signal the getty to reacquire the
- Xline when outgoing communication is complete (via SIGUSR2).
- X
- XEcuungetty is a privileged program, which must be owned by root
- Xand have the setuid-on-execute bit set. An encrypted id is passed
- Xby ecu to ecuungetty to validate requests and to prevent abuse of
- Xecuungetty by crackers, malcontents and other twentieth-century
- Xphenomena.
- X
- X.*s 2 "SCO Dialer Programs"
- X
- XThe concept of a dialer program (an executable binary
- Xas opposed to a Dialers entry) is an SCO enhancement and
- Xis unlikely to be of benefit to users of other versions (too bad!).
- XECU will support dialer programs under any version, but other
- Xusers of the Devices file (read "your vendor-supplied uucico")
- Xwill most likely barf on non-SCO systems.
- X
- XIf the
- X.B Devices
- Xfile can be found in /usr/lib/uucp,
- Xand a valid entry for the attached line can be found,
- XECU will use the Dialers script or dialer program specified in the
- X.B Devices
- Xentry.
- X
- X.*s 2 "Gendial Dialer Package"
- X
- XSample SCO-style modem dialer program sources may be found
- Xin the gendial/ subdirectory of the distribution.
- XSome of them, particularly dialgHA24 and dialgT2500, are very
- Xrobust and succeed where other programs may fail. They retry
- Xmodem initialization and reset/hangup commands .
- X
- XThe code is divided into one general module and several modem-
- Xand DCE-specific modules. A program is built by combining
- Xthe gendial.o with the appropriate dceFOO.o module to produce
- Xa dialgFOO executable.
- X
- XTo write a dialer for a modem not already in the gendial package,
- Xcopy template.c to dceMYMODEM.c and edit it to contain the
- Xnecessary variable assignments and initialization, dialing and hangup
- Xcode. The existing dce*.c modules provide examples.
- XEdit the gendial/Make.src file to add rule lines for your program.
- X(Do not modify Makefile alone
- Xsince a "Configure" will overwrite Makefile.)
- X
- X.DS L
- XdialgMYMODEM: gendial.o dceMYMODEM.o
- X $(CC) $(LDFLAGS) gendial.o dceMYMODEM.o $(LIBS) -o $@
- X.DE
- X
- XTo be "correct," you should run the Configure procedure
- Xin the main ecu directory to make a new Makefile,
- Xbut this has the unfortunate side effect of rebuilding all
- Xof the Makefiles which are built from Make.src files.
- XIf this happens, the next make will rebuild all of the
- Xobjects.
- X
- XIn this case, it is "OK" to cheat and copy the new Make.src lines to
- XMakefile. A later Configure will not cause loss of the new lines.
- END_OF_FILE
- if test 7542 -ne `wc -c <'ecu330/doc/_hdb.txt'`; then
- echo shar: \"'ecu330/doc/_hdb.txt'\" unpacked with wrong size!
- fi
- # end of 'ecu330/doc/_hdb.txt'
- fi
- if test -f 'ecu330/doc/proc.txt' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'ecu330/doc/proc.txt'\"
- else
- echo shar: Extracting \"'ecu330/doc/proc.txt'\" \(9382 characters\)
- sed "s/^X//" >'ecu330/doc/proc.txt' <<'END_OF_FILE'
- X
- X.de *s
- X.H "\\$1" "\\$2" \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
- X.br
- X..
- X.po 4
- X.ll 7.2i
- X.ls 1
- X.nh
- X.tp
- X.sp 2i
- X.ft B
- X.ce 10
- XECU
- X
- X(Extended Call Utility)
- X.ce 0
- X.sp 1i
- X.ce 100
- XResearch and Engineering
- XAsynchronous Communications Package
- Xfor SCO UNIX 3.2 and XENIX System V,
- XHP-UX, Motorola Delta SVR32 and SVR41, Linux,
- XNetBSD, SunOS 4.1, Solaris 2.x,
- XISC 386/ix, ISC System V Release 4,
- Xand ESIX System V Release 4
- X.ce 0
- X.ft P
- X.sp 2i
- X.lp
- X.ce 1
- XWarren H. Tucker, III <wht@n4hgf.atl.ga.us>
- X.sp 1i
- X.ce 100
- XProcedure Language
- XRevision 3.30
- X\n(mo/\n(dy/\n(yr
- X.ce 0
- X.sp 1i
- X.ls 1
- XNOTE: Many sections of the manual are likely to be obsolete at any given
- Xtime until the writer get lots of free time. Much of it was written when
- Xthe program was supported only on SCO XENIX and UNIX.
- X
- X.PH "'ECU Procedure Language''%'"
- X.PF "'wht@n4hgf.atl.ga.us''\n(mo/\n(dy/\n(yr'"
- X.nr si 2n
- X.nr Cl 9
- X.nr Ej 1
- X.nr U 1
- X.SA 0
- X.ul
- X.bp 2
- X
- X.*s 1 Introduction
- X
- XProcedures are "programs" or "scripts" written in an addled but
- Xadequate language which ECU executes upon demand.
- XThe documentation refers to procedures as files on the disk
- Xor as in-memory copies under execution.
- X
- XAn "initial procedure" may be executed when ECU starts up (see
- Xthe description of the -p command line switch). Certain special
- Xprocedures are executed automatically as described below in the
- Xsection "Special Procedures."
- X
- XThe procedures themselves are source files consisting of
- Xthe procedure "name" with an extension of ".ep".
- XWhen executing a procedure by name,
- X.DS I
- Xdo name interactive
- X-or-
- Xdo 'name' from inside a procedure
- X.DE
- Xis sufficient if the procedure is in the current directory,
- Xthe user's ~/.ecu directory or in the ECU library
- Xsubdirectory "ep" (normally /usr/local/lib/ecu/ep).
- XProcedure files
- Xare searched for in the above order, so you may have
- Xa system default in the lib directory, a user default
- Xin the ~/.ecu directory and a specific version in the current
- Xdirectory all by the same name.
- X
- XYou may execute a procedure by specifying it's full pathname
- X(minus the .ep extension). For example:
- X.DS I
- Xdo /tmp/doit interactive invocation of /tmp/doit.ep
- X-or-
- Xdo '/tmp/doit' from inside a procedure
- X.DE
- X
- XMany example procedures, some quite useful, some not so,
- Xare found in the models subdirectory of the release.
- XThere are also many fragments
- Xused as examples throughout the following sections.
- X
- X.*s 1 "Line Syntax (Labels, Commands and Comments)"
- XLines in a procedure
- Xconsist of an optional label, followed by optional commands and
- Xarguments. Anything on a line after an octothorpe (#) outside
- Xof quote marks is ignored (read "# is the comment character").
- X
- X.DS L
- XExample:
- X----------------------------------------------------------------------
- X# example procedure
- X echo 'Hello. Please tell me your name.'
- X $s0 = %cgets # read string from console into string variable $s0
- X ifs $s0 == 'foo' goto label
- X echo 'Hello there, '+$s0
- X return
- X
- Xlabel echo 'You must be kidding.'
- X----------------------------------------------------------------------
- X.DE
- X
- XLabels must begin in column one.
- XA label may appear on a line by itself or with a comment
- Xappended. A common mistake I make (from writing too much C) is
- Xto append a colon to a label declaration; this does not work unless
- Xyou also "goto label:".
- XLabels are not allowed inside braces
- X(inside of compound statements); you may get away with it sometimes
- Xbecause the procedure language processor is written for speed, not
- Xpolitical correctness.
- X
- XCommands must have white space before them and
- Xwhite space before each argument.
- X
- X.so _p_param.txt
- X
- X.so _p_ifunc.txt
- X
- X.so _p_sfunc.txt
- X
- X.so _p_cmd.txt
- X
- X.*s 1 "Special Procedures"
- X
- XECU provides for special "hook" procedures to be executed
- Xat certain times. Their use is encouraged, but you must
- Xtake precautions not to excecute any unreasoable commands
- Xin them, for the are rather "raw" hooks and it is easily possible
- Xto confuse ECU by performing illogical operations in them.
- XJudicious use can, however, be quite productive.
- X
- XThey are searched for in the same manner
- Xas any other procedure, so you can have a
- Xcustomised version of them in a working directory and a default
- Xin your ~/.ecu subdirectory. No error is reported if they are not found.
- X
- X.*s 2 "_rc.ep"
- X
- XAfer ECU is initialized, but before it presents the setup
- Xscreen or executes a -p initial procedure,
- Xprocedure '_rc' is executed with no arguments.
- X(It is named in the tradition of /etc/rc, .mailrc, etc..)
- XThis procedure can be used to customize the ecu environment
- Xprior to beginning the usual operation. This is not a place
- Xto do any dialing or long-lived operations, nor is it possible to
- Xbypass the setup screen: for this, use the -p initial procedure.
- X
- XThe %getenv() function may be useful in here (Am I running on an
- Xxterm? Do I want to change the prompt string from
- Xthe default environment variable $ECUPROMPT?).
- X
- XProcedure commands likely to be of interest here:
- X.DS I
- X autorz
- X* baud
- X color
- X dcdwatch
- X* duplex
- X prompt
- X rtscts
- X* setline
- X.DE
- X
- XCommands marked with an asterisk affect the initial (default)
- Xvalues presented on the setup screen.
- X
- XIf _rc.ep returns a non-zero status or fails (due to syntax or
- Xother error), ecu terminates immediately.
- X
- X.*s 2 "_connect.ep"
- X
- XThis procedure is executed after every connection success
- Xafter the CONNECT message ("result code") is printed.
- XIt is passed one argument, the "result code" string
- Xgenerated by the dialer function (e.g., "CONNECT 19200").
- X
- XYou may use %rname and other functions and features to customize
- Xthis function based on the particular system just reached. Note
- Xthat integer variable $i0 and string variable $s0 set zero prior
- Xto executing the function. This function may modify the behavior
- Xof coorperating dialer functions by setting the value of numbered
- Xstring or integer variables. In particular, the dialer function
- Xwill inherit the values of $i0 and $s0 when this special function
- Xterminates.
- X.B
- XBe careful of what you do in here since MANY ecu procedure commands
- Xaffect $i0 and $s0 as a side effect of their operation.
- X.R
- XEven if you know what you do in _connect.ep does not modify $i0
- Xor $s0, use of the preservation technique shown in the example
- Xbelow may save you headaches if you add to the function in the
- Xfuture (long after you have forgotten this pedantic admonition).
- X
- XIf this procedure fails (abnormal procedure termination
- Xor non-zero return code), ECU hangs up on the line and proceeds
- Xas if the connection failed.
- X
- X.DS L
- XExample:
- X#+------------------------------------------------------------------
- X# _connect.ep - post-CONNECT special "hook" procedure
- X#-------------------------------------------------------------------
- X#+:EDITS:
- X#:05-04-1994-04:38-wht@n4hgf-ECU release 3.30
- X#:09-10-1992-13:58-wht@n4hgf-ECU release 3.20
- X#:08-22-1992-15:38-wht@n4hgf-ECU release 3.20 BETA
- X#:07-13-1991-14:47-wht@n4hgf-creation
- X
- X $iv0_save = $i0 # it is a VERY good idea to save the dialer
- X $sv0_save = $s0 # function return status
- X # since gobs of functions and commands modify $i0
- X # and/or $s0 as a side effect of their operation
- X
- X $s30 = '_connect '+%rname+' ('+%argv(1)+')'
- X echo $s30 # this still will also live to be visible by
- X # the dialer function
- X
- X ifi %baud > 2400
- X {
- X xon off # turn XON/XOFF off first, then ...
- X rtscts on # turn on RTS/CTS
- X }
- X else
- X {
- X rtscts off # turn off RTS/CTS, then ...
- X xon on # turn XON/XOFF on
- X }
- X
- X $i0 = $iv0_save # restore dialer return status
- X $s0 = $sv0_save
- X.DE
- X
- X.*s 2 "_connfail.ep"
- X
- XThis procedure is executed after every connection failure after
- Xthe failure message ("result code") is printed. It is passed two
- Xarguments, the logical system name (the dial directory
- Xentry name or the phone number)
- Xand the "result code" string generated by the dialer
- Xfunction (e.g., "BUSY"). The function is called after $i0 has
- Xbeen set to 1 and $s0 has been set to the result code. This
- Xfunction may modify the behavior of coorperating dialer functions
- Xby setting the value of numbered string or integer variables. In
- Xparticular, the dialer function will inherit the values of $i0
- Xand $s0 when this special function terminates.
- X.B
- XBe careful of what you do in here since MANY ecu procedure commands
- Xaffect $i0 and/or $s0 as a side effect of their operation.
- X.R
- XSee _connect.ep above for further screams and moans.
- X
- X]If you get very involved with using this procedure, you'll sooner
- Xor later run into some undocumented $so values. You'll have to
- Xtake a look at ecuDCE.c and hdbintf.c
- Xfor an authoritative reference, but perhaps
- Xyou can get along by knowing that result codes with an exclamation point
- Xas their first character are generated by ECU.
- X
- XECU ignores any failure (abnormal procedure termination
- Xor non-zero return code) resulting from the execution of this procedure.
- X
- X.*s 2 "_hangup.ep"
- X
- XThis procedure is executed after every connection termination.
- XIt is passed one argument, a string representation
- Xof the number of seconds you were connected.
- XYou may use %rname and other functions and features
- Xto customize this function based on the particular system
- Xjust reached. ECU ignores any error
- Xreturned by the procedure.
- XECU ignores any failure (abnormal procedure termination
- Xor non-zero return code) resulting from the execution of this procedure.
- X
- X.br
- X.nr si 0n
- X.af % i
- X.ls 1
- X.TC 1 1 3
- END_OF_FILE
- if test 9382 -ne `wc -c <'ecu330/doc/proc.txt'`; then
- echo shar: \"'ecu330/doc/proc.txt'\" unpacked with wrong size!
- fi
- # end of 'ecu330/doc/proc.txt'
- fi
- if test -f 'ecu330/ecufinsert.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'ecu330/ecufinsert.c'\"
- else
- echo shar: Extracting \"'ecu330/ecufinsert.c'\" \(7453 characters\)
- sed "s/^X//" >'ecu330/ecufinsert.c' <<'END_OF_FILE'
- X#define USE_XON_XOFF
- X/*+-------------------------------------------------------------------------
- X ecufinsert.c -- insert file onto comm line
- X wht@n4hgf.atl.ga.us
- X
- X Defined functions:
- X expand_filename(fname,maxlen)
- X file_insert_clear_xoff()
- X file_insert_to_line(narg,arg)
- X
- X--------------------------------------------------------------------------*/
- X/*+:EDITS:*/
- X/*:05-04-1994-04:38-wht@n4hgf-ECU release 3.30 */
- X/*:09-10-1992-13:58-wht@n4hgf-ECU release 3.20 */
- X/*:08-22-1992-15:38-wht@n4hgf-ECU release 3.20 BETA */
- X/*:07-25-1991-12:55-wht@n4hgf-ECU release 3.10 */
- X/*:07-17-1991-07:04-wht@n4hgf-avoid SCO UNIX nap bug */
- X/*:07-14-1991-18:18-wht@n4hgf-new ttygets functions */
- X/*:04-27-1991-01:24-wht@n4hgf-expand_filename was NFG */
- X/*:03-30-1991-12:40-wht@n4hgf-redi!donovan found q does not restart receiver */
- X/*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */
- X
- X#include "ecu.h"
- X#include "ecukey.h"
- X#include "ecutty.h"
- X
- Xextern char kbdintr; /* current input INTR */
- Xextern ulong colors_current;
- Xextern ulong colors_alert;
- Xextern ulong colors_errors;
- X
- X/*+-------------------------------------------------------------------------
- X expand_filename(fname) - convert fnames with shell chars
- X
- Xreturn 0 if no shell characters found
- X -1 if shell expansion match found
- X 1 if shell expansion found
- X--------------------------------------------------------------------------*/
- Xint
- Xexpand_filename(fname, maxlen)
- Xchar *fname;
- Xint maxlen;
- X{
- X char *expcmd;
- X
- X if (!find_shell_chars(fname))
- X return (0);
- X
- X if (expand_wildcard_list(fname, &expcmd))
- X {
- X fputs("\r\n", se);
- X fputs(expcmd, se);
- X fputs("\r\n", se);
- X return (-1);
- X }
- X strncpy(fname, expcmd, maxlen);
- X fname[maxlen - 1] = 0;
- X if (strchr(expcmd, ' '))
- X {
- X fputs("\r\nToo many files:\r\n", se);
- X fputs(expcmd, se);
- X fputs("\r\n", se);
- X free(expcmd);
- X return (-1);
- X }
- X strncpy(fname, expcmd, maxlen - 1);
- X *(fname + maxlen - 1) = 0;
- X free(expcmd);
- X return (0);
- X
- X} /* end of expand_filename */
- X
- X/*+-------------------------------------------------------------------------
- X file_insert_clear_xoff()
- X--------------------------------------------------------------------------*/
- Xvoid
- Xfile_insert_clear_xoff()
- X{
- X#ifdef USE_XON_XOFF
- X#ifdef SAY_CLEARED_XOFF
- X ulong colors_at_entry = colors_current;
- X
- X setcolor(colors_alert);
- X fputs("--> local XOFF cleared\r", se);
- X setcolor(colors_at_entry);
- X#endif
- X lclear_xmtr_xoff();
- X#endif
- X} /* end of file_insert_clear_xoff */
- X
- X/*+-------------------------------------------------------------------------
- X file_insert_to_line(narg,arg)
- X--------------------------------------------------------------------------*/
- Xfile_insert_to_line(narg, arg)
- Xint narg;
- Xchar **arg;
- X{
- X int itmp;
- X register rchar;
- X int old_ttymode = get_ttymode();
- X long total_chars = 0L;
- X long total_lines = 0L;
- X ulong colors_at_entry = colors_current;
- X long timeout_msecs;
- X FILE *fp;
- X char file_string[256];
- X char s256[256];
- X char xmit_mode;
- X uchar delim;
- X
- X#ifdef USE_XON_XOFF
- X int ixon;
- X int ixoff;
- X
- X#endif
- X char *make_char_graphic();
- X
- X sigint = 0;
- X
- X if (narg > 1)
- X {
- X strncpy(s256, arg[1], sizeof(s256));
- X s256[sizeof(s256) - 1] = 0;
- X }
- X else
- X {
- X ff(se, "\r\n--> File to insert on comm line: ");
- X ttygets(s256, sizeof(s256), TG_CRLF, &delim, (int *)0);
- X if ((delim == ESC) || !strlen(s256))
- X {
- X ff(se, " --> transmission aborted\r\n");
- X return (0);
- X }
- X }
- X if ((itmp = expand_filename(s256, sizeof(s256))) < 0)
- X return (-1);
- X else if (itmp)
- X ff(se, "\r\n--> wild card match: %s", s256);
- X
- X if ((fp = fopen(s256, "r")) == (FILE *) 0)
- X {
- X ff(se, "\r\n--> ");
- X pperror(s256); /* print error if we get one */
- X return (-1);
- X }
- X
- X if (narg > 1)
- X ff(se, "\r\n");
- X
- X if (narg > 2)
- X xmit_mode = *arg[2];
- X else
- X {
- X ASK_OPTION:
- X ff(se, "(S)ingle line at a time\r\n");
- X ff(se, "(E)cho pacing\r\n");
- X ff(se, "(F)ull speed transmission\r\n");
- X ff(se, "(P)aced transmission (20 msec/char)\r\n");
- X ff(se, "(Q)uit (or ESC) press a key: ");
- X xmit_mode = ttygetc(0) & 0x7F;
- X if (xmit_mode > 0x20)
- X fputs(make_char_graphic(xmit_mode, 0), se);
- X fputs("\r\n", se);
- X }
- X
- X kill_rcvr_process(SIGUSR1);
- X
- X switch (xmit_mode = to_lower(xmit_mode))
- X {
- X case 's':
- X setcolor(colors_alert);
- X fputs("--> press SPACE to continue or ESC/'s' to stop\r\n", se);
- X setcolor(colors_at_entry);
- X break;
- X
- X case 'e':
- X /* fall through */
- X
- X case 'f':
- X case 'p':
- X setcolor(colors_alert);
- X ff(se, "--> press %s to abort\r\n", make_char_graphic(kbdintr, 0));
- X setcolor(colors_at_entry);
- X ttymode(2);
- X break;
- X
- X case 'q':
- X case ESC:
- X goto INSERT_DONE2;
- X
- X default:
- X ring_bell();
- X fputs("\r\n", se);
- X goto ASK_OPTION;
- X }
- X
- X#ifdef USE_XON_XOFF
- X lget_xon_xoff(&ixon, &ixoff); /* get current line xon/xoff status */
- X lxon_xoff(IXON); /* set it for us */
- X#endif
- X
- X while (fgets(file_string, sizeof(file_string), fp))
- X {
- X int xmit_len = strlen(file_string);
- X int xmit_cr = xmit_len && (file_string[xmit_len - 1] == NL);
- X
- X if (xmit_cr)
- X {
- X xmit_len--;
- X file_string[xmit_len] = 0;
- X }
- X total_chars += xmit_len;
- X total_lines++;
- X
- X/* some destinations, like BBS msg entry, take a blank line to mean
- Xend of message, so do not send completely blank lines */
- X if (!xmit_len && xmit_cr)
- X {
- X lputc(' ');
- X xmit_len = 1;
- X }
- X else if (xmit_mode == 'p')
- X {
- X register char *cptr = file_string;
- X
- X while (*cptr)
- X {
- X lputc(*cptr++);
- X Nap(20L);
- X while (rdchk(shm->Liofd))
- X {
- X rchar = lgetc_xmtr();
- X process_xmtr_rcvd_char((char)rchar, 1);
- X }
- X }
- X }
- X else
- X lputs(file_string);
- X if (xmit_cr)
- X {
- X if (xmit_mode == 'p')
- X Nap(20L);
- X lputc('\r');
- X xmit_len++;
- X }
- X
- X if (sigint)
- X break;
- X
- X switch (xmit_mode)
- X {
- X case 's':
- X while (1)
- X {
- X if (ttyrdchk())
- X break;
- X rchar = lgetc_timeout(5 * 1000L);
- X if (rchar < 0)
- X file_insert_clear_xoff();
- X else
- X process_xmtr_rcvd_char((char)rchar, 1);
- X if (rchar == 0x0A)
- X break;
- X }
- X rchar = to_lower(ttygetc(1));
- X if ((rchar == 's') || (rchar == ESC))
- X goto INSERT_DONE;
- X break;
- X
- X case 'e':
- X timeout_msecs = 5 * 1000L;
- X while (1)
- X {
- X if (sigint)
- X break;
- X rchar = lgetc_timeout(timeout_msecs);
- X if (rchar < 0)
- X {
- X if (!xmit_len)
- X break;
- X file_insert_clear_xoff();
- X timeout_msecs = 1 * 1000L;
- X }
- X else
- X {
- X process_xmtr_rcvd_char((char)rchar, 1);
- X timeout_msecs = 100L;
- X if (xmit_len)
- X xmit_len--;
- X }
- X if (rchar == 0x0A)
- X break;
- X }
- X break;
- X
- X case 'f':
- X case 'p':
- X while (rdchk(shm->Liofd))
- X {
- X rchar = lgetc_xmtr();
- X process_xmtr_rcvd_char((char)rchar, 1);
- X }
- X break;
- X }
- X if (sigint)
- X break;
- X }
- X
- X INSERT_DONE:
- X
- X if (sigint)
- X {
- X sigint = 0;
- X setcolor(colors_error);
- X ff(se, "--> Interrupted\r\n");
- X setcolor(colors_at_entry);
- X }
- X
- X INSERT_DONE2:
- X
- X fclose(fp);
- X
- X ttymode(old_ttymode); /* restore old console mode */
- X sigint = 0; /* reset SIGINT flag */
- X
- X while (((rchar = lgetc_timeout(200L)) >= 0) && !sigint)
- X process_xmtr_rcvd_char((char)rchar, 1);
- X
- X setcolor(colors_success);
- X ff(se, "\r\n--> done ... sent %ld lines, %ld characters\r\n",
- X total_lines, total_chars);
- X setcolor(colors_at_entry);
- X lclear_xmtr_xoff();
- X#ifdef USE_XON_XOFF
- X lxon_xoff(ixon | ixoff); /* restore old line xon/xoff status */
- X#endif
- X start_rcvr_process(1);
- X return (0);
- X
- X} /* end of file_insert_to_line */
- X
- X/* vi: set tabstop=4 shiftwidth=4: */
- X/* end of ecufinsert.c */
- END_OF_FILE
- if test 7453 -ne `wc -c <'ecu330/ecufinsert.c'`; then
- echo shar: \"'ecu330/ecufinsert.c'\" unpacked with wrong size!
- fi
- # end of 'ecu330/ecufinsert.c'
- fi
- if test -f 'ecu330/ecuicmhelp.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'ecu330/ecuicmhelp.c'\"
- else
- echo shar: Extracting \"'ecu330/ecuicmhelp.c'\" \(9756 characters\)
- sed "s/^X//" >'ecu330/ecuicmhelp.c' <<'END_OF_FILE'
- X/*+-------------------------------------------------------------------------
- X ecuicmhelp.c -- help for interactive commands
- X wht@n4hgf.atl.ga.us
- X
- X Defined functions:
- X help_category_menu()
- X help_choose_cmd()
- X help_cmd_line_setup(prompt)
- X help_display_on_stderr(cmd)
- X help_interactively()
- X help_right_column()
- X help_search_pcmds(cmd)
- X help_show_category(category)
- X icmd_help(narg,arg)
- X
- X Whenever the literary German dives into a sentence, that is the
- X last you are going to see of him until he emerges on the other
- X side of his Atlantic with his verb in his mouth. -- Mark Twain
- X
- X--------------------------------------------------------------------------*/
- X/*+:EDITS:*/
- X/*:05-04-1994-04:38-wht@n4hgf-ECU release 3.30 */
- X/*:09-10-1992-13:58-wht@n4hgf-ECU release 3.20 */
- X/*:08-22-1992-15:38-wht@n4hgf-ECU release 3.20 BETA */
- X/*:01-11-1992-16:01-wht@n4hgf-bug in help + F1 reverts to cat menu */
- X/*:08-25-1991-14:39-wht@n4hgf-SVR4 port thanks to aega84!lh */
- X/*:08-01-1991-03:52-wht@n4hgf-when editing string, set cursor to end */
- X/*:07-25-1991-12:56-wht@n4hgf-ECU release 3.10 */
- X/*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */
- X
- X#include "ecucurses.h"
- X#define OMIT_TERMIO_REFERENCES
- X#define STDIO_H_INCLUDED
- X#include "ecu.h"
- X#define NEED_P_CMD
- X#include "ecucmd.h"
- X#include "ecukey.h"
- X#include "ecuxkey.h"
- X#include "pc_scr.h"
- X
- X#define PDAT "ecuhelp.data"
- X
- Xvoid help_right_column();
- X
- Xstatic long start_pos[TOKEN_QUAN];
- Xstatic int start_pos_has_been_read = 0;
- Xstatic char ecuhelpdata_name[256] = "";
- Xstatic FILE *fpdat; /* help data file */
- Xstatic int right_column = 0; /* right column for help_interactively */
- Xstatic int longest_cmd = 0;
- Xstatic int longest_descr = 0;
- X
- X/*+-------------------------------------------------------------------------
- X help_search_pcmds(cmd)
- X--------------------------------------------------------------------------*/
- XP_CMD *
- Xhelp_search_pcmds(cmd)
- Xregister char *cmd;
- X{
- X register P_CMD *cmd_list = icmd_cmds;
- X
- X while (cmd_list->token != -1)
- X {
- X if (minunique(cmd_list->cmd, cmd, cmd_list->min_ch))
- X break;
- X cmd_list++;
- X }
- X if (cmd_list->token == -1)
- X return ((P_CMD *) 0);
- X else
- X return (cmd_list);
- X
- X} /* end of help_search_pcmds */
- X
- X/*+-------------------------------------------------------------------------
- X help_display_on_stderr(cmd)
- X--------------------------------------------------------------------------*/
- Xvoid
- Xhelp_display_on_stderr(cmd)
- Xchar *cmd;
- X{
- X register itmp;
- X P_CMD *pcmd;
- X char buf[128];
- X
- X if (!(pcmd = help_search_pcmds(cmd)))
- X {
- X ff(se, "'%s' is not a valid command\r\n", cmd);
- X return;
- X }
- X
- X if (!start_pos[pcmd->token])
- X {
- X ff(se, "no help available for '%s'\r\n", cmd);
- X return;
- X }
- X
- X fseek(fpdat, start_pos[pcmd->token], 0);
- X ff(se, "\r\n");
- X while (fgets(buf, sizeof(buf), fpdat))
- X {
- X itmp = strlen(buf);
- X buf[--itmp] = 0;
- X if (itmp == 0)
- X break;
- X ff(se, "%s\r\n", buf);
- X }
- X
- X} /* end of help_display_on_stderr */
- X
- X/*+-------------------------------------------------------------------------
- X help_right_column()
- X--------------------------------------------------------------------------*/
- Xvoid
- Xhelp_right_column()
- X{
- X register itmp;
- X register P_CMD *pcmd = icmd_cmds;
- X
- X if (right_column) /* already bee thru here? */
- X return; /* ... seems so */
- X
- X while (pcmd->token != -1)
- X {
- X if (!*pcmd->descr)
- X {
- X pcmd++;
- X continue;
- X }
- X itmp = strlen(pcmd->cmd);
- X if (itmp > longest_cmd)
- X longest_cmd = itmp;
- X itmp = strlen(pcmd->descr);
- X if (itmp > longest_descr)
- X longest_descr = itmp;
- X pcmd++;
- X }
- X right_column = 1 + longest_cmd + 2 + longest_descr + 3;
- X
- X} /* end of help_right_column */
- X
- X/*+-------------------------------------------------------------------------
- X help_cmd_line_setup(prompt)
- X--------------------------------------------------------------------------*/
- Xvoid
- Xhelp_cmd_line_setup(prompt)
- Xchar *prompt;
- X{
- X register icol;
- X int y;
- X int x;
- X
- X touchwin(stdscr);
- X wmove(stdscr, LINES - 1, 0);
- X wstandout(stdscr);
- X waddstr(stdscr, prompt);
- X getyx(stdscr, y, x);
- X for (icol = x; icol < COLS - 1; icol++)
- X waddch(stdscr, ' ');
- X wmove(stdscr, y, x);
- X wstandend(stdscr);
- X wrefresh(stdscr);
- X} /* end of help_cmd_line_setup */
- X
- X/*+-------------------------------------------------------------------------
- X help_choose_cmd() - choose command from category
- X--------------------------------------------------------------------------*/
- Xchar *
- Xhelp_choose_cmd()
- X{
- X register y;
- X register x;
- X static char cmd[15];
- X uchar delim = 0;
- X int wgpos = -1;
- X int edit = 0;
- X
- X help_cmd_line_setup(
- X "Enter command name (F1 for category menu, ESC to exit): ");
- X getyx(stdscr, y, x);
- X wstandout(stdscr);
- X while ((delim != ESC) && (delim != XF1) && (delim != NL))
- X {
- X wingets(stdscr, y, x, cmd, sizeof(cmd) - 1, &delim, edit, &wgpos);
- X edit = 1;
- X }
- X wstandend(stdscr);
- X if (delim == XF1)
- X return ("");
- X else if ((delim == ESC) || (!cmd[0]))
- X return ((char *)0);
- X else
- X return (cmd);
- X
- X} /* end of help_choose_cmd */
- X
- X/*+-------------------------------------------------------------------------
- X help_category_menu() - get user command category choice
- X--------------------------------------------------------------------------*/
- Xint
- Xhelp_category_menu()
- X{
- X register itmp;
- X int y;
- X int x;
- X char **cpptr;
- X static char keylist[] =
- X {'g', 'c', 't', 'p', ESC, 0};
- X static char *list[] =
- X {
- X "g - general commands",
- X "c - communications-related commands",
- X "t - transfer-related commands",
- X "p - procedure-related commands",
- X "Esc - exit help",
- X (char *)0
- X };
- X
- X tcap_clear_screen();
- X wclear(stdscr);
- X wmove(stdscr, 0, 0);
- X wstandout(stdscr);
- X waddstr(stdscr, "-- Interactive Command Help Menu ");
- X getyx(stdscr, y, x);
- X for (itmp = x; itmp < COLS - 1; itmp++)
- X waddch(stdscr, '-');
- X wstandend(stdscr);
- X
- X itmp = 2;
- X cpptr = list;
- X while (*cpptr)
- X {
- X wmove(stdscr, itmp++, 4);
- X waddstr(stdscr, *cpptr++);
- X }
- X wmove(stdscr, 9, 4);
- X waddstr(stdscr, "---- choose a category -------");
- X return (winget_single(stdscr, "", keylist));
- X
- X} /* end of help_category_menu */
- X
- X/*+-------------------------------------------------------------------------
- X help_show_category(category) - display category and let user choose
- X--------------------------------------------------------------------------*/
- Xint
- Xhelp_show_category(category)
- Xint category;
- X{
- X register itmp;
- X register P_CMD *pcmd;
- X register y = 1;
- X register x = 0;
- X short cmdclass = 0;
- X char s80[80];
- X char *class_descr = "?";
- X
- X switch (category)
- X {
- X case 'g':
- X cmdclass = ccG;
- X class_descr = "General";
- X break;
- X case 'c':
- X cmdclass = ccC;
- X class_descr = "Communications";
- X break;
- X case 't':
- X cmdclass = ccT;
- X class_descr = "File Transfer";
- X break;
- X case 'p':
- X cmdclass = ccP;
- X class_descr = "Procedure Related";
- X break;
- X }
- X
- X tcap_clear_screen();
- X wclear(stdscr);
- X wmove(stdscr, 0, 0);
- X wstandout(stdscr);
- X waddstr(stdscr, "-- ");
- X waddstr(stdscr, class_descr);
- X waddstr(stdscr, " Commands ");
- X getyx(stdscr, y, x);
- X for (itmp = x; itmp < COLS - 1; itmp++)
- X waddch(stdscr, '-');
- X wstandend(stdscr);
- X
- X pcmd = icmd_cmds;
- X y = 2;
- X x = 0;
- X wmove(stdscr, y, x);
- X while (pcmd->token != -1)
- X {
- X if (!*pcmd->descr || (pcmd->cmdclass != cmdclass))
- X {
- X pcmd++;
- X continue;
- X }
- X wmove(stdscr, y, x);
- X strcpy(s80, pcmd->cmd);
- X pad_zstr_to_len(s80, longest_cmd + 2);
- X for (itmp = 0; itmp < pcmd->min_ch; itmp++)
- X s80[itmp] = to_upper(s80[itmp]);
- X waddstr(stdscr, s80);
- X
- X strcpy(s80, pcmd->descr);
- X if (!x)
- X pad_zstr_to_len(s80, longest_descr + 1);
- X waddstr(stdscr, s80);
- X
- X if (!x)
- X {
- X#if defined(SVR4)
- X wvline(stdscr, sVR & 0x00ff, 1);
- X#else
- X waddch(stdscr, sVR);
- X#endif
- X }
- X y++;
- X if (y >= LINES - 3)
- X {
- X y = 2;
- X x = right_column;
- X }
- X pcmd++;
- X }
- X wmove(stdscr, LINES - 2, 0);
- X wstandout(stdscr);
- X waddstr(stdscr,
- X "Capitalized portion of listed command sufficient for command recognition");
- X getyx(stdscr, y, x);
- X for (itmp = x; itmp < COLS - 1; itmp++)
- X waddch(stdscr, ' ');
- X wstandend(stdscr);
- X return (0);
- X
- X} /* end of help_show_category */
- X
- X/*+-------------------------------------------------------------------------
- X help_interactively()
- Xcommands with null descriptions are "undocumented"
- X--------------------------------------------------------------------------*/
- Xvoid
- Xhelp_interactively()
- X{
- X register char *cptr;
- X int restart_rcvr = need_rcvr_restart();
- X char category;
- X
- X kill_rcvr_process(SIGUSR1);
- X
- X windows_start();
- X help_right_column();
- X
- X DISPLAY_MENU:
- X if ((category = help_category_menu()) != ESC)
- X {
- X help_show_category(category);
- X while (cptr = help_choose_cmd())
- X {
- X if (!*cptr)
- X goto DISPLAY_MENU;
- X wmove(stdscr, LINES - 1, 0);
- X wclrtoeol(stdscr);
- X wrefresh(stdscr);
- X help_display_on_stderr(cptr);
- X ff(se, "\r\npress return: ");
- X ttygetc(1);
- X help_show_category(category);
- X }
- X }
- X wrefresh(stdscr);
- X windows_end(1);
- X redisplay_rcvr_screen();
- X if (restart_rcvr)
- X start_rcvr_process(0);
- X
- X} /* end of help_interactively */
- X
- X/*+-------------------------------------------------------------------------
- X icmd_help(narg,arg)
- X--------------------------------------------------------------------------*/
- Xvoid
- Xicmd_help(narg, arg)
- Xint narg;
- Xchar **arg;
- X{
- X register char *cptr;
- X char *getenv();
- X
- X ff(se, "\r\n");
- X if (!ecuhelpdata_name[0])
- X {
- X if (!(cptr = getenv("ECUHELP")))
- X sprintf(ecuhelpdata_name, "%s/%s", ECULIBDIR, PDAT);
- X else
- X strcpy(ecuhelpdata_name, cptr);
- X }
- X
- X if (!(fpdat = fopen(ecuhelpdata_name, "r")))
- X {
- X pperror(ecuhelpdata_name);
- X return;
- X }
- X
- X if (!start_pos_has_been_read)
- X {
- X fread((char *)start_pos, sizeof(long), TOKEN_QUAN, fpdat);
- X
- X start_pos_has_been_read = 1;
- X }
- X
- X if (narg > 1)
- X help_display_on_stderr(arg[1]);
- X else
- X help_interactively();
- X
- X fclose(fpdat);
- X} /* end of icmd_help */
- X
- X/* vi: set tabstop=4 shiftwidth=4: */
- END_OF_FILE
- if test 9756 -ne `wc -c <'ecu330/ecuicmhelp.c'`; then
- echo shar: \"'ecu330/ecuicmhelp.c'\" unpacked with wrong size!
- fi
- # end of 'ecu330/ecuicmhelp.c'
- fi
- if test -f 'ecu330/eculock.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'ecu330/eculock.c'\"
- else
- echo shar: Extracting \"'ecu330/eculock.c'\" \(5306 characters\)
- sed "s/^X//" >'ecu330/eculock.c' <<'END_OF_FILE'
- X/*+-----------------------------------------------------------------------
- X eculock.c -- ECU lock file management (creation)
- X wht@n4hgf.atl.ga.us
- X
- X Defined functions:
- X create_lock_file(name)
- X lock_tty(line)
- X unlock_tty(line)
- X
- X This module provides the functions for creating lock files.
- X A companion module, ecuLCK.c, has functions for testing lock files.
- X This module is included by ECU alone. It uses ecuLCK.c functions.
- X------------------------------------------------------------------------*/
- X/*+:EDITS:*/
- X/*:05-04-1994-04:38-wht@n4hgf-ECU release 3.30 */
- X/*:01-25-1994-17:36-wht@n4hgf-better name USE_DECIMAL_PIDS->CFG_BinaryUucpPids */
- X/*:12-18-1993-18:12-wht@n4hgf-use CFG_BinaryUucpPids in place of HONEYDANBER */
- X/*:11-14-1993-12:33-wht@n4hgf-HP-UX port by Carl Wuebker at HP */
- X/*:05-29-1993-21:17-wht@n4hgf-better debug */
- X/*:09-10-1992-13:58-wht@n4hgf-ECU release 3.20 */
- X/*:08-22-1992-15:38-wht@n4hgf-ECU release 3.20 BETA */
- X/*:07-19-1992-22:09-wht@n4hgf-rename check_utmp to reserve_line and move it */
- X/*:07-19-1992-21:54-wht@n4hgf-lock_tty does not effect ungetty_get anymore */
- X/*:08-25-1991-14:39-wht@n4hgf-SVR4 port thanks to aega84!lh */
- X/*:08-10-1991-17:39-wht@n4hgf-US_WEGOTIT handling */
- X/*:08-09-1991-11:07-wht@n4hgf-configurable lock directory */
- X/*:07-25-1991-12:56-wht@n4hgf-ECU release 3.10 */
- X/*:10-16-1990-20:43-wht@n4hgf-add SHARE_DEBUG */
- X/*:09-19-1990-19:36-wht@n4hgf-ecu_log_event now gets pid for log from caller */
- X/*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */
- X
- X#include "ecu.h"
- X
- Xextern int errno;
- Xextern char ungetty_ttyname[];
- X
- X/*+-------------------------------------------------------------------------
- X create_lock_file(name)
- X--------------------------------------------------------------------------*/
- Xint
- Xcreate_lock_file(name)
- Xchar *name;
- X{
- X register fd;
- X int rtn_val = -2; /* flag if not explicitly set below */
- X int pid = getpid();
- X char LTMP_fname[64];
- X
- X#if !defined(CFG_BinaryUucpPids)
- X char s32[32];
- X
- X#endif
- X
- X errno = 0;
- X sprintf(LTMP_fname, "%s/LTMP.%05d", lock_dir_name, pid);
- X if ((fd = creat(LTMP_fname, 0444)) < 0)
- X {
- X if (errno == EACCES)
- X {
- X strcpy(lopen_err_str, "lock error - try chmod 0777 ");
- X strcat(lopen_err_str, lock_dir_name);
- X }
- X unlink(LTMP_fname);
- X rtn_val = -1;
- X goto RETURN_STATUS;
- X }
- X
- X#if defined(CFG_BinaryUucpPids)
- X write(fd, (char *)&pid, sizeof(int));
- X
- X#else
- X sprintf(s32, "%10d\n", getpid());
- X write(fd, s32, 11);
- X#endif
- X
- X chmod(LTMP_fname, 0444); /* some programs seem to think writable lock
- X * file is game for killing */
- X close(fd);
- X
- X /*
- X * this is the real lock ... if this link does not succeed, then the
- X * file already exists; if the link suceeds, we have locked the device
- X * with no chance of a race
- X */
- X errno = 0;
- X rtn_val = link(LTMP_fname, name);
- X unlink(LTMP_fname);
- X chmod(name, 0444);
- X
- X RETURN_STATUS:
- X
- X#if defined(LOCK_DEBUG)
- X {
- X char s512[512];
- X char *cptr;
- X
- X if (cptr = strrchr(name, '/'))
- X cptr++;
- X else
- X cptr = name;
- X sprintf(s512, "CREATE %s %s (%s)", cptr,
- X (rtn_val) ? "FAIL" : "SUCCEED",
- X (rtn_val) ? errno_text(errno) : "No error");
- X ecu_log_event(getpid(), s512);
- X }
- X#endif
- X
- X return (rtn_val);
- X
- X} /* end of create_lock_file */
- X
- X/*+-------------------------------------------------------------------------
- X lock_tty(line) - create lock files for tty line in 'line'
- X
- Xreturn LINST_OK (0) if locked else LINST_... error
- X--------------------------------------------------------------------------*/
- Xenum linst
- Xlock_tty(line)
- Xchar *line;
- X{
- X enum linst linst = LINST_OK;
- X char name[256];
- X
- X name[0] = 0;
- X errno = 0;
- X
- X if (linst = make_lock_name(line, name))
- X goto FUNC_RETURN;
- X
- X#if defined(LOCK_DEBUG)
- X {
- X char s512[512];
- X char *cptr = strrchr(name, '/');
- X
- X if (cptr)
- X cptr++;
- X else
- X cptr = name;
- X sprintf(s512, "LOCK TTY REQUEST %s %s %s %s", line, name,
- X (linst) ? LINST_text(linst) : "",
- X (linst) ? errno_text(errno) : "");
- X ecu_log_event(getpid(), s512);
- X }
- X#endif
- X
- X if (create_lock_file(name))
- X {
- X if (linst = is_active_lock(name))
- X {
- X if (linst == LINST_WEGOTIT)
- X {
- X linst = LINST_OK;
- X goto FUNC_RETURN;
- X }
- X ungetty_return_line(line, "lock_tty 1");
- X errno = EACCES; /* for termecu() */
- X goto FUNC_RETURN;
- X }
- X if (create_lock_file(name))
- X {
- X ungetty_return_line(line, "lock_tty 2");
- X errno = EACCES; /* for termecu() */
- X {
- X linst = LINST_LCKERR;
- X goto FUNC_RETURN;
- X }
- X }
- X }
- X
- X FUNC_RETURN:
- X
- X#if defined(LOCK_DEBUG)
- X {
- X char s512[512];
- X char *cptr = strrchr(name, '/');
- X
- X if (cptr)
- X cptr++;
- X else
- X cptr = name;
- X sprintf(s512, "LOCK TTY RESULT %s %s (%s)", cptr,
- X (linst) ? LINST_text(linst) : "SUCCESS",
- X (linst) ? errno_text(errno) : "No error");
- X ecu_log_event(getpid(), s512);
- X }
- X#endif
- X
- X return (linst);
- X
- X} /* end of lock_tty */
- X
- X/*+-----------------------------------------------------------------------
- X void unlock_tty(line)
- X------------------------------------------------------------------------*/
- Xvoid
- Xunlock_tty(line)
- Xchar *line;
- X{
- X char lockname[512];
- X
- X if (make_lock_name(line, lockname))
- X {
- X ff(se, "unlock_tty cannot build lock file for %s\r\n", line);
- X termecu(TERMECU_LOGIC_ERROR);
- X }
- X
- X ungetty_return_line(line, "unlock_tty");
- X unlink(lockname);
- X
- X} /* end of unlock_tty */
- X
- X/* end of eculock.c */
- X/* vi: set tabstop=4 shiftwidth=4: */
- END_OF_FILE
- if test 5306 -ne `wc -c <'ecu330/eculock.c'`; then
- echo shar: \"'ecu330/eculock.c'\" unpacked with wrong size!
- fi
- # end of 'ecu330/eculock.c'
- fi
- if test -f 'ecu330/fasiintf.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'ecu330/fasiintf.c'\"
- else
- echo shar: Extracting \"'ecu330/fasiintf.c'\" \(9772 characters\)
- sed "s/^X//" >'ecu330/fasiintf.c' <<'END_OF_FILE'
- X/*+-------------------------------------------------------------------------
- X fasiintf.c - FAS/i interface
- X wht@n4hgf.atl.ga.us
- X
- X Defined functions:
- X display_fasi(fip)
- X fasi_breaks_detected()
- X fasi_line_errors()
- X fasi_msr()
- X fasi_rings_detected()
- X icmd_fasi(narg,arg)
- X ier_text(ier)
- X lcr_text(lcr)
- X mcr_text(mcr)
- X msr_text(msr)
- X pcmd_fasi(param)
- X
- X--------------------------------------------------------------------------*/
- X/*+:EDITS:*/
- X/*:05-04-1994-04:39-wht@n4hgf-ECU release 3.30 */
- X/*:09-10-1992-13:59-wht@n4hgf-ECU release 3.20 */
- X/*:08-22-1992-15:38-wht@n4hgf-ECU release 3.20 BETA */
- X/*:07-25-1991-12:57-wht@n4hgf-ECU release 3.10 */
- X/*:04-29-1991-18:52-wht@n4hgf-FAS/i 2.08.0 official release */
- X/*:12-24-1990-00:51-wht-creation */
- X
- X#include "ecu.h"
- X
- X#if defined(FASI)
- X#include "ecuerror.h"
- X#include "esd.h"
- X#if defined(NULL)
- X#undef NULL
- X#endif
- X#include <local/fas.h>
- X
- Xextern int proc_trace;
- X
- X/*+-------------------------------------------------------------------------
- X msr_text(msr)
- X--------------------------------------------------------------------------*/
- Xchar *
- Xmsr_text(msr)
- Xuchar msr;
- X{
- X static char txt[50];
- X
- X txt[0] = '*';
- X txt[1] = 0;
- X if (!msr)
- X {
- X strcat(txt, "NULL*");
- X return (txt);
- X }
- X if (msr & MS_CTS_DELTA)
- X strcat(txt, "dCTS*");
- X if (msr & MS_DSR_DELTA)
- X strcat(txt, "dDSR*");
- X if (msr & MS_RING_TEDGE)
- X strcat(txt, "dRI*");
- X if (msr & MS_DCD_DELTA)
- X strcat(txt, "dDCD*");
- X if (msr & MS_CTS_PRESENT)
- X strcat(txt, "CTS*");
- X if (msr & MS_DSR_PRESENT)
- X strcat(txt, "DSR*");
- X if (msr & MS_RING_PRESENT)
- X strcat(txt, "RING*");
- X if (msr & MS_DCD_PRESENT)
- X strcat(txt, "DCD*");
- X return (txt);
- X
- X} /* end of msr_text */
- X
- X/*+-------------------------------------------------------------------------
- X mcr_text(mcr)
- X--------------------------------------------------------------------------*/
- Xchar *
- Xmcr_text(mcr)
- Xuchar mcr;
- X{
- X static char txt[32];
- X
- X txt[0] = '*';
- X txt[1] = 0;
- X if (!mcr)
- X {
- X strcat(txt, "NULL*");
- X return (txt);
- X }
- X if (mcr & MC_SET_DTR)
- X strcat(txt, "DTR*");
- X if (mcr & MC_SET_RTS)
- X strcat(txt, "RTS*");
- X if (mcr & MC_SET_OUT1)
- X strcat(txt, "OUT1*");
- X if (mcr & MC_SET_OUT2)
- X strcat(txt, "OUT2*");
- X if (mcr & MC_SET_LOOPBACK)
- X strcat(txt, "LOOPBACK*");
- X return (txt);
- X
- X} /* end of mcr_text */
- X
- X/*+-------------------------------------------------------------------------
- X lcr_text(lcr)
- X--------------------------------------------------------------------------*/
- Xchar *
- Xlcr_text(lcr)
- Xuchar lcr;
- X{
- X static char txt[64];
- X
- X sprintf(txt, "*%ddb*", (lcr & LC_WORDLEN_MASK) + 5);
- X strcat(txt, (lcr & LC_STOPBITS_LONG) ? "2" : "1");
- X strcat(txt, "sb*");
- X if (lcr & LC_ENABLE_PARITY)
- X {
- X strcat(txt, "PARITY*");
- X if (lcr & LC_STICK_PARITY)
- X strcat(txt, (lcr & LC_EVEN_PARITY) ? "MARK*" : "SPACE*");
- X else
- X strcat(txt, (lcr & LC_EVEN_PARITY) ? "EVEN*" : "ODD*");
- X }
- X else
- X strcat(txt, "NOPAR*");
- X if (lcr & LC_SET_BREAK_LEVEL)
- X strcat(txt, "SETBREAK*");
- X if (lcr & LC_ENABLE_DIVISOR)
- X strcat(txt, "ENABDIV*");
- X return (txt);
- X
- X} /* end of lcr_text */
- X
- X/*+-------------------------------------------------------------------------
- X ier_text(ier)
- X--------------------------------------------------------------------------*/
- Xchar *
- Xier_text(ier)
- Xuchar ier;
- X{
- X static char txt[32];
- X
- X txt[0] = '*';
- X txt[1] = 0;
- X if (!ier)
- X {
- X strcat(txt, "NULL*");
- X return (txt);
- X }
- X if (ier & IE_RECV_DATA_AVAILABLE)
- X strcat(txt, "RDAV*");
- X if (ier & IE_XMIT_HOLDING_BUFFER_EMPTY)
- X strcat(txt, "TBMT*");
- X if (ier & IE_LINE_STATUS)
- X strcat(txt, "LS*");
- X if (ier & IE_MODEM_STATUS)
- X strcat(txt, "MS*");
- X return (txt);
- X
- X} /* end of ier_text */
- X
- X/*+-------------------------------------------------------------------------
- X display_fasi(fip)
- X--------------------------------------------------------------------------*/
- Xvoid
- Xdisplay_fasi(fip)
- Xstruct fas_info *fip;
- X{
- X
- X pprintf("base address: %04x irq=%u ", fip->port_0.addr, fip->vec);
- X pputs("device is ");
- X if (fip->device_flags.s & DF_DEVICE_IS_NS16550A)
- X pputs("16550\n");
- X else if (fip->device_flags.s & DF_DEVICE_IS_I82510)
- X pputs("82510\n");
- X else
- X pputs("16450\n");
- X pprintf("MSR=%s ", msr_text(fip->msr));
- X pprintf("MCR=%s\n", mcr_text(fip->mcr));
- X pprintf("LCR=%s ", lcr_text(fip->lcr));
- X pprintf("IER=%s\n", ier_text(fip->ier));
- X pprintf("recv ring cnt=%u ", fip->recv_ring_cnt);
- X pprintf("xmit ring cnt=%u ", fip->xmit_ring_cnt);
- X pprintf("xmit fifo size=%u\n", fip->xmit_fifo_size);
- X pprintf("characters received =%12lu\n", fip->characters_received);
- X pprintf("characters transmitted =%12lu\n", fip->characters_transmitted);
- X pprintf("modem status events =%12lu\n", fip->modem_status_events);
- X pprintf("overrun errors=%lu ", fip->overrun_errors);
- X pprintf("framing errors=%lu ", fip->framing_errors);
- X pprintf("parity errors=%lu\n", fip->parity_errors);
- X pprintf("rings detected=%lu ", fip->rings_detected);
- X pprintf("breaks detected=%lu\n", fip->breaks_detected);
- X pprintf("xmtr flow off XON/XOFF=%lu RTS/CTS=%lu\n",
- X fip->xmtr_sw_flow_count, fip->xmtr_hw_flow_count);
- X pprintf("rcvr flow off XON/XOFF=%lu RTS/CTS=%lu\n",
- X fip->rcvr_sw_flow_count, fip->rcvr_hw_flow_count);
- X
- X} /* end of display_fasi */
- X
- X/*+-------------------------------------------------------------------------
- X fasi_msr() - return modem status register contents
- X--------------------------------------------------------------------------*/
- Xuchar
- Xfasi_msr()
- X{
- X ulong ltmp = 0;
- X
- X return ((uchar) ioctl(shm->Liofd, FASIC_MCR, (char *)<mp));
- X return (ltmp);
- X} /* end of fasi_msr */
- X
- X/*+-------------------------------------------------------------------------
- X fasi_line_errors() - return UART error count
- X--------------------------------------------------------------------------*/
- Xulong
- Xfasi_line_errors()
- X{
- X struct fas_info finfo, *fip = &finfo;
- X
- X memset((char *)fip, 0, sizeof(*fip));
- X
- X if ((ioctl(shm->Liofd, FASIC_SIP, (char *)fip)) < 0)
- X return (0);
- X return (fip->parity_errors + fip->framing_errors + fip->overrun_errors);
- X
- X} /* end of fasi_line_errors */
- X
- X/*+-------------------------------------------------------------------------
- X fasi_rings_detected() - return number of RI trailing edges
- X--------------------------------------------------------------------------*/
- Xulong
- Xfasi_rings_detected()
- X{
- X struct fas_info finfo, *fip = &finfo;
- X
- X memset((char *)fip, 0, sizeof(*fip));
- X
- X if ((ioctl(shm->Liofd, FASIC_SIP, (char *)fip)) < 0)
- X return (0);
- X return (fip->rings_detected);
- X
- X} /* end of fasi_rings_detected */
- X
- X/*+-------------------------------------------------------------------------
- X fasi_breaks_detected() - return number of BREAKs detected
- X--------------------------------------------------------------------------*/
- Xulong
- Xfasi_breaks_detected()
- X{
- X struct fas_info finfo, *fip = &finfo;
- X
- X memset((char *)fip, 0, sizeof(*fip));
- X
- X if ((ioctl(shm->Liofd, FASIC_SIP, (char *)fip)) < 0)
- X return (0);
- X return (fip->breaks_detected);
- X
- X} /* end of fasi_breaks_detected */
- X
- X/*+-------------------------------------------------------------------------
- X pcmd_fasi(param)
- Xfasi [-switches] <str-cmd>>
- X
- Xwhere <str-cmd> is 'd[isplay]'
- X or 'r[eset]'
- X
- Xfasi 'd'
- Xfasi 'r'
- X--------------------------------------------------------------------------*/
- Xint
- Xpcmd_fasi(param)
- XESD *param;
- X{
- X int erc;
- X char switches[8];
- X ESD *tesd = (ESD *) 0;
- X struct fas_info finfo, *fip = &finfo;
- X char ident_str[128];
- X
- X memset((char *)fip, 0, sizeof(*fip));
- X
- X get_switches(param, switches, sizeof(switches));
- X if (!(tesd = esdalloc(64)))
- X return (eNoMemory);
- X if (!(erc = gstr(param, tesd, 1)))
- X {
- X skip_cmd_break(tesd);
- X switch (to_lower(*(tesd->pb + tesd->index)))
- X {
- X case 'd': /* display */
- X if ((ioctl(shm->Liofd, FASIC_SIP, (char *)fip)) < 0)
- X {
- X pperror("ioctl FASIC_SIP");
- X erc = eFATAL_ALREADY;
- X }
- X else
- X display_fasi(fip);
- X if ((ioctl(shm->Liofd, FASIC_DVR_IDENT, ident_str)) < 0)
- X {
- X pperror("ioctl FASIC_DVR_IDENT");
- X erc = eFATAL_ALREADY;
- X }
- X else
- X pprintf("driver: '%s'\n", ident_str);
- X if ((ioctl(shm->Liofd, FASIC_SPACE_IDENT, ident_str)) < 0)
- X {
- X pperror("ioctl FASIC_SPACE_IDENT");
- X erc = eFATAL_ALREADY;
- X }
- X else
- X pprintf("space.c: '%s'\n", ident_str);
- X break;
- X
- X case 'r': /* reset */
- X if ((ioctl(shm->Liofd, FASIC_RESET_STAT, (char *)0)) < 0)
- X {
- X pperror("ioctl FASIC_RESET_STAT");
- X erc = eFATAL_ALREADY;
- X }
- X else if (proc_trace)
- X pputs("statistics reset\n");
- X break;
- X
- X default:
- X pputs("invalid subcommand '");
- X pputs(tesd->pb);
- X pputs("'\n");
- X erc = eFATAL_ALREADY;
- X break;
- X }
- X }
- X
- X if (tesd)
- X esdfree(tesd);
- X return (erc);
- X
- X} /* end of pcmd_fasi */
- X
- X/*+-------------------------------------------------------------------------
- X icmd_fasi(narg,arg)
- X--------------------------------------------------------------------------*/
- Xvoid
- Xicmd_fasi(narg, arg)
- Xint narg;
- Xchar **arg;
- X{
- X struct fas_info finfo, *fip = &finfo;
- X char ident_str[128];
- X
- X memset((char *)fip, 0, sizeof(*fip));
- X
- X if ((narg > 1) && (to_lower(*arg[1]) == 'r'))
- X {
- X if ((ioctl(shm->Liofd, FASIC_RESET_STAT, (char *)0)) < 0)
- X {
- X pperror(" ioctl FASIC_RESET_STAT");
- X return;
- X }
- X ff(se, " fasi statistics reset\r\n");
- X }
- X else
- X {
- X if ((ioctl(shm->Liofd, FASIC_SIP, (char *)fip)) < 0)
- X {
- X pperror(" ioctl FASIC_SIP");
- X return;
- X }
- X ff(se, "\r\n");
- X display_fasi(fip);
- X if ((ioctl(shm->Liofd, FASIC_DVR_IDENT, ident_str)) < 0)
- X pperror("ioctl FASIC_DVR_IDENT");
- X else
- X pprintf("driver: '%s'\n", ident_str);
- X if ((ioctl(shm->Liofd, FASIC_SPACE_IDENT, ident_str)) < 0)
- X pperror("ioctl FASIC_SPACE_IDENT");
- X else
- X pprintf("space.c: '%s'\n", ident_str);
- X }
- X
- X} /* end of icmd_fasi */
- X
- X#endif /* FASI */
- X
- X/* vi: set tabstop=4 shiftwidth=4: */
- X/* end of fasiintf.c */
- END_OF_FILE
- if test 9772 -ne `wc -c <'ecu330/fasiintf.c'`; then
- echo shar: \"'ecu330/fasiintf.c'\" unpacked with wrong size!
- fi
- # end of 'ecu330/fasiintf.c'
- fi
- if test -f 'ecu330/mapkey/keys.usa.ecu' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'ecu330/mapkey/keys.usa.ecu'\"
- else
- echo shar: Extracting \"'ecu330/mapkey/keys.usa.ecu'\" \(10032 characters\)
- sed "s/^X//" >'ecu330/mapkey/keys.usa.ecu' <<'END_OF_FILE'
- X#+----------------------------------------------------------------------------
- X# keys.usa.ecu
- X# SCO keys file for ECU alt-[a-z] support
- X#-----------------------------------------------------------------------------
- X#+:EDITS:
- X#:05-04-1994-04:39-wht@n4hgf-ECU release 3.30
- X#:09-10-1992-13:59-wht@n4hgf-ECU release 3.20
- X#:08-22-1992-15:39-wht@n4hgf-ECU release 3.20 BETA
- X#:05-02-1991-01:57-wht@n4hgf-alt-[a-z] range moved from 0x80-0x99 to 0xe0-0xf9
- X
- X# scan cntrl alt alt cntrl lock
- X# code base shift cntrl shift alt shift cntrl shift state
- X 0 nop nop nop nop nop nop nop nop O
- X 1 esc esc esc esc esc esc esc esc O
- X 2 '1' '!' nop nop '1' '!' nop nop O
- X 3 '2' '@' nul nul '2' '@' nul nul O
- X 4 '3' '#' nop nop '3' '#' nop nop O
- X 5 '4' '$' nop nop '4' '$' nop nop O
- X 6 '5' '%' nop nop '5' '%' nop nop O
- X 7 '6' '^' rs rs '6' '^' rs rs O
- X 8 '7' '&' nop nop '7' '&' nop nop O
- X 9 '8' '*' nop nop '8' '*' nop nop O
- X 10 '9' '(' nop nop '9' '(' nop nop O
- X 11 '0' ')' nop nop '0' ')' nop nop O
- X 12 '-' '_' ns ns '-' '_' ns ns O
- X 13 '=' '+' nop nop '=' '+' nop nop O
- X 14 bs bs del del bs bs del del O
- X 15 ht btab nop nop ht btab nop nop O
- X 16 'q' 'Q' dc1 dc1 0xf1 'Q' dc1 dc1 C
- X 17 'w' 'W' etb etb 0xf7 'W' etb etb C
- X 18 'e' 'E' enq enq 0xe5 'E' enq enq C
- X 19 'r' 'R' dc2 dc2 0xf2 'R' dc2 dc2 C
- X 20 't' 'T' dc4 dc4 0xf4 'T' dc4 dc4 C
- X 21 'y' 'Y' em em 0xf9 'Y' em em C
- X 22 'u' 'U' nak nak 0xf5 'U' nak nak C
- X 23 'i' 'I' ht ht 0xe9 'I' ht ht C
- X 24 'o' 'O' si si 0xef 'O' si si C
- X 25 'p' 'P' dle dle 0xf0 'P' dle dle C
- X 26 '[' '{' esc esc '[' '{' esc esc O
- X 27 ']' '}' gs gs ']' '}' gs gs O
- X 28 cr cr nl nl cr cr nl nl O
- X 29 lctrl lctrl lctrl lctrl lctrl lctrl lctrl lctrl O
- X 30 'a' 'A' soh soh 0xe1 'A' soh soh C
- X 31 's' 'S' dc3 dc3 0xf3 'S' dc3 dc3 C
- X 32 'd' 'D' eot eot 0xe4 'D' eot eot C
- X 33 'f' 'F' ack ack 0xe6 'F' ack ack C
- X 34 'g' 'G' bel bel 0xe7 'G' bel bel C
- X 35 'h' 'H' bs bs 0xe8 'H' bs bs C
- X 36 'j' 'J' nl nl 0xea 'J' nl nl C
- X 37 'k' 'K' vt vt 0xeb 'K' vt vt C
- X 38 'l' 'L' np np 0xec 'L' np np C
- X 39 ';' ':' nop nop ';' ':' nop nop O
- X 40 '\'' '"' nop nop '\'' '"' nop nop O
- X 41 '`' '~' nop nop '`' '~' nop nop O
- X 42 lshift lshift lshift lshift lshift lshift lshift lshift O
- X 43 '\\' '|' fs fs '\\' '|' fs fs O
- X 44 'z' 'Z' sub sub 0xfa 'Z' sub sub C
- X 45 'x' 'X' can can 0xf8 'X' can can C
- X 46 'c' 'C' etx etx 0xe3 'C' etx etx C
- X 47 'v' 'V' syn syn 0xf6 'V' syn syn C
- X 48 'b' 'B' stx stx 0xe2 'B' stx stx C
- X 49 'n' 'N' so so 0xee 'N' so so C
- X 50 'm' 'M' cr cr 0xed 'M' cr cr C
- X 51 ',' '<' nop nop ',' '<' nop nop O
- X 52 '.' '>' nop nop '.' '>' nop nop O
- X 53 '/' '?' nop nop '/' '?' nop nop O
- X 54 rshift rshift rshift rshift rshift rshift rshift rshift O
- X 55 '*' '*' nscr nscr '*' '*' nscr nscr O
- X 56 lalt lalt lalt lalt lalt lalt lalt lalt O
- X 57 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' O
- X 58 clock clock clock clock clock clock clock clock O
- X 59 fkey1 fkey13 fkey25 fkey37 scr1 scr11 scr1 scr11 O
- X 60 fkey2 fkey14 fkey26 fkey38 scr2 scr12 scr2 scr12 O
- X 61 fkey3 fkey15 fkey27 fkey39 scr3 scr13 scr3 scr13 O
- X 62 fkey4 fkey16 fkey28 fkey40 scr4 scr14 scr4 scr14 O
- X 63 fkey5 fkey17 fkey29 fkey41 scr5 scr15 scr5 scr15 O
- X 64 fkey6 fkey18 fkey30 fkey42 scr6 scr16 scr6 scr16 O
- X 65 fkey7 fkey19 fkey31 fkey43 scr7 scr7 scr7 scr7 O
- X 66 fkey8 fkey20 fkey32 fkey44 scr8 scr8 scr8 scr8 O
- X 67 fkey9 fkey21 fkey33 fkey45 scr9 scr9 scr9 scr9 O
- X 68 fkey10 fkey22 fkey34 fkey46 scr10 scr10 scr10 scr10 O
- X 69 nlock nlock dc3 dc3 nlock nlock dc3 dc3 O
- X 70 slock slock del del slock slock del del O
- X 71 fkey49 '7' '7' '7' '7' '7' '7' '7' N
- X 72 fkey50 '8' '8' '8' '8' '8' '8' '8' N
- X 73 fkey51 '9' '9' '9' '9' '9' '9' '9' N
- X 74 fkey52 '-' '-' '-' '-' '-' '-' '-' N
- X 75 fkey53 '4' '4' '4' '4' '4' '4' '4' N
- X 76 fkey54 '5' '5' '5' '5' '5' '5' '5' N
- X 77 fkey55 '6' '6' '6' '6' '6' '6' '6' N
- X 78 fkey56 '+' '+' '+' '+' '+' '+' '+' N
- X 79 fkey57 '1' '1' '1' '1' '1' '1' '1' N
- X 80 fkey58 '2' '2' '2' '2' '2' '2' '2' N
- X 81 fkey59 '3' '3' '3' '3' '3' '3' '3' N
- X 82 fkey60 '0' '0' '0' '0' '0' '0' '0' N
- X 83 del '.' del del del del del del N
- X 84 0x1f 0x1f 0x1f 0x1f 0x1f 0x1f 0x1f 0x1f O
- X 85 nop nop nop nop nop nop nop nop O
- X 86 nop nop nop nop nop nop nop nop O
- X 87 fkey11 fkey23 fkey35 fkey47 scr11 scr11 scr11 scr11 O
- X 88 fkey12 fkey24 fkey36 fkey48 scr12 scr12 scr12 scr12 O
- X 89 nop nop nop nop nop nop nop nop O
- X 90 nop nop nop nop nop nop nop nop O
- X 91 nop nop nop nop nop nop nop nop O
- X 92 nop nop nop nop nop nop nop nop O
- X 93 nop nop nop nop nop nop nop nop O
- X 94 nop nop nop nop nop nop nop nop O
- X 95 nop nop nop nop nop nop nop nop O
- X 96 fkey50 fkey50 fkey50 fkey50 fkey50 fkey50 fkey50 fkey50 O
- X 97 fkey53 fkey53 fkey53 fkey53 fkey53 fkey53 fkey53 fkey53 O
- X 98 fkey58 fkey58 fkey58 fkey58 fkey58 fkey58 fkey58 fkey58 O
- X 99 fkey55 fkey55 fkey55 fkey55 fkey55 fkey55 fkey55 fkey55 O
- X 100 fkey49 fkey49 fkey49 fkey49 fkey49 fkey49 fkey49 fkey49 O
- X 102 fkey57 fkey57 fkey57 fkey57 fkey57 fkey57 fkey57 fkey57 O
- X 103 fkey59 fkey59 fkey59 fkey59 fkey59 fkey59 fkey59 fkey59 O
- X 104 fkey60 fkey60 fkey60 fkey60 fkey60 fkey60 fkey60 fkey60 O
- X 105 del del del del del del del del N
- X 106 fkey54 fkey54 fkey54 fkey54 fkey54 fkey54 fkey54 fkey54 O
- X 107 nop nop nop nop nop nop nop nop O
- X 108 nop nop nop nop nop nop nop nop O
- X 109 nop nop nop nop nop nop nop nop O
- X 110 nop nop nop nop nop nop nop nop O
- X 111 fkey51 fkey51 fkey51 fkey51 fkey51 fkey51 fkey51 fkey51 O
- X 111 nop nop nop nop nop nop nop nop O
- X 112 nop nop nop nop nop nop nop nop O
- X 113 nop nop nop nop nop nop nop nop O
- X 114 nop nop nop nop nop nop nop nop O
- X 116 nop nop nop nop nop nop nop nop O
- X 117 nop nop nop nop nop nop nop nop O
- X 118 nop nop nop nop nop nop nop nop O
- X 119 nop nop nop nop nop nop nop nop O
- X 120 nop nop nop nop nop nop nop nop O
- X 121 nop nop nop nop nop nop nop nop O
- X 122 nop nop nop nop nop nop nop nop O
- X 123 nop nop nop nop nop nop nop nop O
- X 124 nop nop nop nop nop nop nop nop O
- X 125 nop nop nop nop nop nop nop nop O
- X 126 nop nop nop nop nop nop nop nop O
- X 127 nop nop nop nop nop nop nop nop O
- X 128 rctrl rctrl rctrl rctrl rctrl rctrl rctrl rctrl O
- X 129 ralt ralt ralt ralt ralt ralt ralt ralt O
- X 130 fkey60 fkey60 fkey60 fkey60 fkey60 fkey60 fkey60 fkey60 O
- X 131 del del del del del del del del N
- X 132 fkey49 fkey49 fkey49 fkey49 fkey49 fkey49 fkey49 fkey49 O
- X 133 fkey57 fkey57 fkey57 fkey57 fkey57 fkey57 fkey57 fkey57 O
- X 134 fkey51 fkey51 fkey51 fkey51 fkey51 fkey51 fkey51 fkey51 O
- X 135 fkey59 fkey59 fkey59 fkey59 fkey59 fkey59 fkey59 fkey59 O
- X 136 fkey55 fkey55 fkey55 fkey55 fkey55 fkey55 fkey55 fkey55 O
- X 137 fkey53 fkey53 fkey53 fkey53 fkey53 fkey53 fkey53 fkey53 O
- X 138 fkey50 fkey50 fkey50 fkey50 fkey50 fkey50 fkey50 fkey50 O
- X 139 fkey58 fkey58 fkey58 fkey58 fkey58 fkey58 fkey58 fkey58 O
- X 140 '/' nop nop nop '/' nop nop nop O
- X 141 cr cr nl nl cr cr nl nl O
- END_OF_FILE
- if test 10032 -ne `wc -c <'ecu330/mapkey/keys.usa.ecu'`; then
- echo shar: \"'ecu330/mapkey/keys.usa.ecu'\" unpacked with wrong size!
- fi
- # end of 'ecu330/mapkey/keys.usa.ecu'
- fi
- echo shar: End of archive 31 \(of 37\).
- cp /dev/null ark31isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 37 archives.
- rm -f ark[1-9]isdone ark[1-9][0-9]isdone
- else
- echo You still must unpack the following archives:
- echo " " ${MISSING}
- fi
- exit 0
- exit 0 # Just in case...
-