[alt.sources] ecu - SCO XENIX V/{2,3}86 Extended CU part 40/47

wht@tridom.uucp (Warren Tucker) (10/12/89)

---- Cut Here and unpack ----
#!/bin/sh
# this is part 40 of a multipart archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file doc/_p_sfunc.txt continued
#
CurArch=40
if test ! -r s2_seq_.tmp
then echo "Please unpack part 1 first!"
     exit 1; fi
( read Scheck
  if test "$Scheck" != $CurArch
  then echo "Please unpack part $Scheck next!"
       exit 1;
  else exit 0; fi
) < s2_seq_.tmp || exit 1
echo "x - Continuing file doc/_p_sfunc.txt"
sed 's/^X//' << 'SHAR_EOF' >> doc/_p_sfunc.txt
XIf no connection exists, the function returns null.
X
X.*s 3 "%time"
X
Xusage: %time
X
XThis function returns the current time in the form 'hh:mm'.
X
X.*s 3 "%times"
X
Xusage: %times
X
XThis function returns the current time in the form 'hh:mm:ss'.
X
X.*s 3 "%tty"
X
Xusage: %tty
X
XThis function returns the console tty name in the form "/dev/ttynn".
X
SHAR_EOF
echo "File doc/_p_sfunc.txt is complete"
chmod 0644 doc/_p_sfunc.txt || echo "restore of doc/_p_sfunc.txt fails"
echo "x - extracting doc/_proc.txt (Text)"
sed 's/^X//' << 'SHAR_EOF' > doc/_proc.txt &&
X.*s 1 "Procedure Language"
X
XSample procedures are shown in the companion document 'samplproc.man'.
X
X
X.so _p_param.txt
X
X.so _p_cmd.txt
X
X.so _p_ifunc.txt
X
X.so _p_sfunc.txt
X
SHAR_EOF
chmod 0644 doc/_proc.txt || echo "restore of doc/_proc.txt fails"
echo "x - extracting doc/_startup.txt (Text)"
sed 's/^X//' << 'SHAR_EOF' > doc/_startup.txt &&
X.*s 1 "Starting the Program"
X
X.*s 2 "Simple Startup - Initial Setup Menu"
X
XECU may be started in a number of ways through use of
Xcommand line switches, but the easiest is to enter
X.DS I
Xecu
X.DE
Xby itself.
XIn this case, the screen is cleared
Xand the folowing screen will be presented.
X
X
X.DS L
X
X  .--[ ecu 1.96 Copyright 1986,1989, W. Tucker ]-----------------.
X  |                                                              |
X  |  Name/phone number to call: ___________________              |
X  |                                                              |
X  |                                                              |
X  |  tty: /dev/tty1a                                             |
X  |                                                              |
X  |  duplex: F  baud: 2400   parity:N  (data bits 8)             |
X  |  Add NL to transmitted CR: N                                 |
X  |  Add NL to received CR:    N                                 |
X  |                                                              |
X  |                                                              |
X  |   TAB:next ^B:prev END:proceed ^D:phone dir  ESC:quit ecu    |
X  `- logical phone directory entry, phone number or empty -------'
X
X
X.DE
X
X.*s 3 "Name/Phone Number Field"
X
XIf a dialing directory has been configured,
Xa literal phone number need not be entered.
XHowever, on your first invocation,  you'll very likely have
Xno directory.  Therefore, you have three options:
X
X.DS I
X1.  Enter a literal telephone number, (e.g. 18005551212).
X    Hyphens and open and close parentheses may also
X    be entered.
X
X2.  Press ENTER to skip the 'Name/phone' field and enter
X    ^D to enter the telephone directory to enter your
X    first directory entry.
X
X3.  Press END to enter interactive mode and use the Dial
X    interactive command to dial a literal telephone num-
X    ber or to enter the dialing directory.
X.DE
X
X.*s 3 "Other Fields"
X
XThe 'tty' field may be used to select an
Xoutgoing line
Xother than the default
X/dev/tty1a.
XNote:  only the last two characters of the tty name
Xneed be entered.  The remainder of the tty name
Xis assumed to be '/dev/tty'.
X
XThe 'duplex' field may be used to select a
Xduplex value other than the default 'F' (full).
X
XThe 'baud' field may be used to select a
Xbaud rate value other than the default 2400.
X
XThe 'parity' field may be used to select a
Xparity value other than the default 'N' (none).
X
X
XThe 'Add NL to transmitted CR' and 'Add NL to received CR'
Xfields are usually left defaulted to 'N' (no).  If you
Xwill be communicating with a terminal (with a human), you
Xwill usually need to set both of these fields to 'Y' as
Xwell as to select 'H'alf duplex.
X
X.*s 3 "Special Characters"
X
XSpecial keyboard characters while filling in the
Xstartup screen are:
X
X
X.DS I
X TAB    move to next field ... if nothing typed in
X        the field, do not disturb contents
X
X ^B     back up to previous field
X
X END    proceed with session, dialing remote if
X        logical directory entry name or literal
X        telephone number enetered
X
X ^D     enter phone directory
X
X ESC    quit ecu without any communications
X.DE
X
X.*s 2 "Command Line Arguments and Switches"
X
XECU can be started in a number of ways:
X
X.DS I
Xecu [-lxx] [-b<baud>] [-h] [-e|-o] [-t] <tel-number>
Xecu [-lxx] [-b<baud>] [-h] [-e|-o] [-t]
Xecu [-t] <logical>
Xecu [-lxx] [-b<baud>] [-h] [-e|-o] [-d] -p <proc> [<arg> ...]
X.DE
X
X.*s 3 "-l"
X
XWhen ECU starts up, it normally chooses a line as described later
Xin the section titled "Choosing a Dialout Line".
XSpecifying the -l switch can suggest that the program
Xchoose a specific line.  The argument to the switch is the
Xlast two charcters of the ttyname; e.g., "-l1a".
X
X.*s 3 "-f"
XNormally, ECU starts up in the full duplex mode.
XIf half duplex is desired, the
X.B
X-f switch
X.R
Xis used.
X
X.*s 3 "-e, -o"
X
XNormally, ECU starts up with 8 data bits and no parity.
XIf even parity is desired, the
X.B
X-e switch
X.R
Xis specified.
XIf odd parity is desired, the
X.B
X-o switch
X.R
Xis specified.
X
XThese switches
X
X.*s 3 "-p <procname>"
X
XThe 
X.B
X-p switch
X.R
Xcauses ECU to execute the procedure <procname> ("<procname>.ep")
Ximmediately.  Such a procedure is termed the
X.B
Xinitial procedure.
X.R
XAll non-switch arguments after <procname> are passed as arguments
Xto the initial procedure (see the descriptions of the
Xinteger function
X.B %argc
Xand the string function
X.B %argv ).
X
X.*s 3 "-d"
X
XThe
X.B
X-d switch
X.R
Xinstructs ECU to "die" (terminate with error status) if
Xany specified initial procedure fails.  This switch ensures a batch
XECU execution will hang up any connection and terminate if
Xa procedure error occurs.
X
XAbsence of the
X.B
X-d switch
X.R
Xcauses ecu (upon any completion of the
Xinitial procedure) to enter the 1) interactive mode if a line
Xwas successfully attached by the procedure or 2) the setup menu
Xif not line was attached.
X
X.*s 3 "-t"
X
XThe
X.B
X-t switch
X.R
Xinstructs ECU to map incoming and outgoing carriage
Xreturns to carriage return/line feed pairs.
XThis is helpful if the remote connection will be to a
Xterminal with a human operator.  Use of the
X.B
X-h switch
X.R
Xis probably also necessary.
X
X.*s 2 "Environment Variables"
X
XPrior to starting ECU, it is useful, but not necessary,
Xto establish two environment variables, ECUPROMPT and ECUHELP.
X
X.*s 3 "ECUPROMPT"
X
XThe ECUPROMPT environment variable determines the prompt printed
Xby ECU when the interactive command key ("HOME") is pressed.
XWhen you first run ECU, try setting it to your name, e. g.,
X.DS I
Xsetenv ECUPROMPT Ralph    if you use csh
X
XECUPROMPT=Ralph           if you use sh, ksh, etc.
Xexport ECUPROMPT
X.DE
XThen, when you see how it used, you may wish to
Xestablish a more permanent choice in your .login or .profile.
X
X.*s 3 "ECUHELP"
X
XOrdinarily, ECU looks for interactive command help information
Xin "/usr/lib/ecu/ecuhelp.data".
XThe ECUHELP environment may be set to the complete
Xpathname of the ecu help file if an alternate file
Xis to be used.
X
XThe help file is explained later in the section
Xtitled "Online Command Dictionary".
X
SHAR_EOF
chmod 0644 doc/_startup.txt || echo "restore of doc/_startup.txt fails"
echo "x - extracting doc/_tech.txt (Text)"
sed 's/^X//' << 'SHAR_EOF' > doc/_tech.txt &&
X.*s 1 "Technical Notes"
X
XECU is written in Microsoft/SCO XENIX System V C.  Full use
Xis made of function prototyping for ECU functions and external
Xlibrary functions.  The source consists of 32,000 lines of source
Xfiles (731000 bytes) and 2500 lines of header files (73000 bytes).
XThe output of "size" for a -M3 version:
X
X.DS I
Xtext     data    bss     dec      hex
X136500 + 33824 + 62800 = 233124 = 0x38ea4
X.DE
X
SHAR_EOF
chmod 0644 doc/_tech.txt || echo "restore of doc/_tech.txt fails"
echo "x - extracting doc/_top.txt (Text)"
sed 's/^X//' << 'SHAR_EOF' > doc/_top.txt &&
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
XPersonal Communications Package
Xfor XENIX System V
X.ce 0
X.ft P
X.sp 2i
X.lp
XCopyright 1986, 1989, Warren H. Tucker, III. All rights reserved.
X.sp 1i
X.ce 100
XTechnical Description
XRevision 0.50 (ecu 2.11)
XPRELIMINARY
X\n(mo/\n(dy/\n(yr
X.ce 0
X.ls 1
X.PH "'ECU Technical Description''%'"
X.PF "'Copyright (C) 1989, Warren H. Tucker''\n(mo/\n(dy/\n(yr'"
X.nr si 2n
X.nr Cl 9
X.nr Ej 1
X.nr U 1
X.SA 1
X.ul
X.bp 1
X
SHAR_EOF
chmod 0644 doc/_top.txt || echo "restore of doc/_top.txt fails"
echo "x - extracting doc/ecu.txt (Text)"
sed 's/^X//' << 'SHAR_EOF' > doc/ecu.txt &&
X.so _top.txt
X
X.so _intro.txt
X
X.so _basic.txt
X
X.so _features.txt
X
X.so _startup.txt
X
X.so _icmd.txt
X
X.so _proc.txt
X
X.so _hdb.txt
X
X.so _tech.txt
X
X.so _end.txt
SHAR_EOF
chmod 0644 doc/ecu.txt || echo "restore of doc/ecu.txt fails"
echo "x - extracting doc/samplproc.man (Text)"
sed 's/^X//' << 'SHAR_EOF' > doc/samplproc.man &&
X
X
X
X
X
X
X
X
X
X
X
X
X
X                        Sample ECU Procedures
X
X
X
X
X         Copyright 1989 Warren H. Tucker, III. All Rights Reserved
X
X
X
X
X
X
X
X                           June 25, 1989
X
X
X
X
X
X
X
X
X    bsd_uname.ep
X
X
X    1   #  CHK=0xD3AA
X    2   #--------------------------------------------------------------
X    3   # bsd_uname.ep - get remote username from bsd system
X    4   # return: $s0 = username
X    5   #         $i0 = 1 if success, else 0
X    6   #--------------------------------------------------------------
X    7   #+:EDITS:*/
X    8   #:06-25-1989-13:56-wht-new do command syntax
X    9   #:06-25-1989-12:33-wht-new if/while syntax
X   10   #:06-22-1989-13:30-wht-creation
X   11
X   12       set $s0='whoami'    # send command
X   13       do 'oneline'        # get $s0=username
X   14       ifi $i0 == 0        # we bombed?
X   15       {
X   16           set $i0=%colors; color red
X   17           echo 'bsd_uname: get user name failed'
X   18           icolor $i0
X   19           $i0 = 0
X   20       }
X   21
X
X
X    oneline.ep
X
X
X    1   #  CHK=0x4652
X    2   #--------------------------------------------------------------
X    3   # oneline.ep
X    4   #
X    5   # send command in $s0, expecting a one line response
X    6   # and a csh prompt ending in '% '
X    7   #
X    8   # returns: $s0 = one line response in $s0 if success
X    9   #          $i0 = 1 if success, else 0
X   10   #
X   11   # destroys: $i2
X   12   #--------------------------------------------------------------
X   13   #+:EDITS:*/
X   14   #:06-25-1989-13:56-wht-new do command syntax
X   15   #:06-25-1989-12:33-wht-new if/while syntax
X   16   #:06-22-1989-13:30-wht-creation
X   17
X   18       $i2 = %colors
X   19       color gray
X   20       send $s0                        # send command
X   21       lookfor -e %chr(0x0A) 50        # scan command echo
X   22       ifi $i0 == 0 icolor $i2;return  # if not found, return
X   23       lgets -e $s0 500 5 '\n'         # get one line response
X   24       lookfor '% ' 50                 # get prompt, don't echo
X   25       # $i0 = 1 if prompt, else 0
X   26       icolor $i2
X
X
X
X    rz_update.ep Page 1
X
X
X    1   #  CHK=0x69C9
X    2   #--------------------------------------------------------------
X    3   # rz_update.ep - update local directory
X    4   #
X    5   # parameters:
X    6   # %argv(1) = remote directory to copy from
X    7   # %argv(2) = local directory to copy to
X    8   # %argv(3) = file list to get
X    9   # %argv(4) = remote username needed, if any, else null
X   10   #            if %argv(4) not null, %argv(4)+".ep" must
X   11   #            exist to su to remote
X   12   #
X   13   # variable usage
X   14   # $i30 color settings at entry to procedure
X   15   # $i31 true if su occurred
X   16   # $i32 return code
X   17   # $s30 original working directory
X   18   # $s31 remote username we started with before su
X   19   # $s32 remote directory we started with
X   20   #--------------------------------------------------------------
X   21   #+:EDITS:*/
X   22   #:06-25-1989-13:56-wht-new do command syntax
X   23   #:06-25-1989-12:33-wht-new if/while syntax
X   24   #:06-22-1989-13:30-wht-creation
X   25
X   26       $i30=%colors # get colors at entry
X   27       $i31=0       # have not su'd yet
X   28       $i32=0       # normal return code
X   29
X   30   # check to make sure we are connected
X   31       ifi %conn == 0
X   32       {
X   33           color red; echo 'not connected to anyone!'
X   34           goto SORRY
X   35       }
X   36       color lt_blue;  echo 'Connected to '+%rname
X   37
X   38   # save local current directory and change to target
X   39       $s30=%dir
X   40       color brown
X   41       ifs $s30 == %argv(2)
X   42           echo -n 'local directory already '
X   43       else
X   44       {
X   45           cd %argv(2)
X   46           echo -n 'local directory set to '
X   47       }
X   48       color yellow; echo %dir
X   49
X   50   # make sure remote username ok
X   51       ifs %argv(4) == '' goto REMOTE_CD # if any remote username
X   52       do 'bsd_uname'          # get $s0=username
X   53       ifi $i0 == 0 goto SORRY # test failure
X   54       $s31 = $s0              # save original remote username
X   55       ifs $s0 != %argv(4)
X   56       {                       # need to su
X
X
X   rz_update.ep Page 2
X
X
X   57           color brown
X   58           echo -n 'remote username '
X   59           color yellow
X   60           echo -n $s0
X   61           color brown
X   62           echo ' ... su to '+%argv(4)+' now'
X   63           color gray
X   64           do %argv(4)         # call proc, which calls su.ep
X   65           lookfor '% ' 50     # su leaves prompt in buffer: swallow
X   66           do 'bsd_uname'      # make sure we su'd
X   67           ifi $i0 == 0 goto SORRY
X   68           ifs $s0 != %argv(4)     # failed to su?
X   69           {
X   70               color red;echo 'su to '+%argv(4)+' failed'
X   71               goto SORRY
X   72           }
X   73           $i31 = 1 #remember we su'd
X   74       }   # now we are proper username on remote
X   75
X   76   # establish proper remote working directory
X   77   REMOTE_CD
X   78       color gray
X   79       $s0 = 'pwd';do 'oneline'    # save old remote ...
X   80       $s32 = $s0                  # ... directory in $s32
X   81       ifs $s32 != %argv(1)        # if cd needed, do it
X   82       {
X   83           send 'cd '+%argv(1)     # remote cd
X   84           lookfor -e '\n' 50      # echo command
X   85           lookfor '% ' 50         # swallow prompt
X   86           $s0 = 'pwd'
X   87           do 'oneline'            # make sure we got there
X   88           ifs $s0 != %argv(1)     # dir change failed
X   89           {
X   90               color red;echo 'remote cd failed'
X   91               goto SORRY;
X   92           }
X   93       }
X   94       color brown;  echo -n 'remote directory '
X   95       color yellow; echo -n %argv(1)
X   96       color brown;  echo    ' ... starting transfer now'
X   97
X   98   # transfer files
X   99       color lt_blue
X  100       send 'sz -n -f '+%argv(3)
X  101       lookfor -e '\n' 50  # echo remote command
X  102       ifi $i0 == 0        # command failed?
X  103       {
X  104           color red; echo 'sz command failed or garbled echo'
X  105           goto SORRY
X  106       }
X  107       color brown
X  108       echo 'waiting for sz to start'
X  109       nap 10
X  110       color gray
X  111       lookfor '**'+%chr(0x18)+'B' 150 # wait 15 secs for start
X  112       ifi $i0 == 0    # command failed
X
X
X  rz_update.ep Page 3
X
X
X  113       {
X  114           color red; echo 'sz protocol failure or trigger garbled'
X  115           goto SORRY
X  116       }
X  117       icolor $i30     # restore colors at entry
X  118       rz
X  119       ifi $i0 != 0    # whoops
X  120       {
X  121           color red; echo -n '\nTRANSFER FAILED ... '
X  122           ifi $i0 == 0x100 echo 'interrupt'
X  123           ifi $i0 != 0x100 echo 'termination status '+%itos($i0,04d)
X  124           goto SORRY
X  125       }
X  126       lookfor '% ' 50         # swallow prompt
X  127       goto RETURN
X  128
X  129   SORRY # whoops
X  130       color red;echo 'rz_update failed ... sorry'
X  131       $i32 = 1    # return error
X  132
X  133   RETURN
X  134       echo ''
X  135       color brown;  echo -n 'remote user name '
X  136       color yellow
X  137       ifi $i31 != 0           # we su'd
X  138       {
X  139           send -n %chr(0x04)  # will force a new prompt from remote
X  140           echo -n $s31
X  141           color brown;  echo ' restored (sent ^D to '+%argv(4)+' shell)'
X  142           lookfor '% ' 50     # swallow prompt
X  143       }
X  144       else
X  145           color brown;  echo 'unchanged'
X  146
X  147       ifs $s32 != %argv(1)    # if we did a remote cd
X  148       {
X  149           send 'cd '+$s32     # restore original
X  150           lookfor '\n'
X  151           color brown;  echo -n 'remote working directory '
X  152           color yellow; echo -n $s32
X  153           color brown;  echo    ' restored'
X  154       }
X  155       else
X  156       {
X  157           send ''             # spark a prompt
X  158           color brown;  echo -n 'remote working directory '
X  159           color yellow; echo -n $s32
X  160           color brown;  echo    ' unchanged'
X  161       }
X  162
X  163       ifs $s30 != %dir    # restore original directory
X  164       {
X  165           cd $s30
X  166           color brown;  echo -n 'local working directory '
X  167           color yellow; echo -n $s30
X  168           color brown;  echo    ' restored'
X
X
X  rz_update.ep Page 4
X
X
X  169       }
X  170
X  171       icolor $i30  # restore colors at entry
X  172       echo ''
X  173       return $i32  # return error code (bomb procedure if error)
X
X
X
X    su.ep Page 1
X
X
X    1   #  CHK=0x2846
X    2   #+---------------------------------------------------------
X    3   # su.ep - su <username> <password>
X    4   # destroys $i2
X    5   #----------------------------------------------------------
X    6   #+:EDITS:*/
X    7   #:06-25-1989-13:56-wht-new do command syntax
X    8   #:06-25-1989-12:33-wht-new if/while syntax
X    9   #:06-16-1989-18:12-wht-creation
X   10
X   11       send 'su '+%argv(1)
X   12       lookfor -e 'word:' 50
X   13       send %argv(2)
X   14       lookfor -e %chr(0x0A) 50
X   15       nap 20
X   16       send 'source ~wht/.cshrc'
X   17       lookfor -e '% ' 70
X   18       ifs %argv(1) == 'scm' send 'cd';lookfor -e %chr(0x0A) 50; return
X   19       send ''
X   20       lookfor -e %chr(0x0A) 50
X
X
X
X    unixlogin.ep Page 1
X
X    1   #  CHK=0x0622
X    2   #+-----------------------------------------------------------------
X    3   #  unixlogin.ep - ecu UNIX login procedure
X    4   #  Copyright 1989 Warren H. Tucker, III. All Rights Reserved
X    5   #
X    6   # %argv(1) = remote name
X    7   # %argv(2) = user name
X    8   # %argv(3) = password
X    9   # %argv(4) = term type
X   10   # %argv(5) = optional number of breaks needed
X   11   #+-----------------------------------------------------------------
X   12   #+:EDITS:
X   13   #:07-09-1989-23:50-wht-add breaks
X   14   #:06-28-1989-19:36-wht-use named variables
X   15   #:06-25-1989-13:56-wht-new do command syntax
X   16   #:06-25-1989-12:33-wht-new if/while syntax
X   17   #:06-23-1989-19:46-wht-improved hayes dialer
X   18   #:06-19-1989-22:50-wht-use while and if statements
X   19   #:06-14-1989-15:58-wht-add login capability when already connected
X   20   #:06-11-1989-23:37-wht-creation
X   21   
X   22       mkvar $i_csave,$i_ltimeout,$i_retries
X   23   
X   24       $i_csave = %colors
X   25       $i_ltimeout = 30 # 3 seconds wait for first login prompt
X   26       $i_retries=3
X   27   
X   28       color red;    echo -n '\nauto-logon to '
X   29       color yellow; echo -n %argv(1)
X   30       color red;    echo    ' on '+%date+' at '+%time+'\n'
X   31   
X   32       ifi %argc < 5   # not enough args
X   33       {
X   34           color red
X   35           echo %argv(0)+' needs 5 arguments (got '+%itos(%argc)+')'
X   36           goto SORRY1
X   37       }
X   38       mkvar $i_breaks
X   39       ifi %argc > 5 $i_breaks = %stoi(%argv(5))
X   40   
X   41       ifi %conn == 0 goto DIAL
X   42   
X   43       ifs %rname == %argv(1)
X   44       {
X   45           color brown;  echo -n 'already connected to '
X   46           color yellow; echo    %rname
X   47           send ''
X   48           goto SEND_BREAKS
X   49       }
X   50   
X   51   HANGUP
X   52       ifi %conn <> 0 echo 'hanging up on '+%rname; hangup
X   53   
X   54   DIAL
X   55       color green
X   56       dial %argv(1); set $i1=$i0 #save dial result in $i1
X
X
X
X    unixlogin.ep Page 2
X
X   57       ifi $i1 == 2 color red; echo 'interrupted'; goto SORRY
X   58       ifi $i1 != 0 goto SORRY
X   59   
X   60   # send breaks?
X   61   SEND_BREAKS
X   62       ifi $i_breaks > 0
X   63       {
X   64           whilei $i_breaks > 0
X   65           {
X   66               color blue; echo 'sending break to remote'
X   67               nap 20
X   68               lbreak
X   69               $i_breaks = $i_breaks - 1
X   70           }
X   71           flush
X   72           lookfor '\n' 50
X   73       }
X   74   
X   75   # get login prompt from remote UNIX system: "login: "
X   76   GET_LOGIN_PROMPT
X   77       set $i_retries = 6      # retry count
X   78   
X   79   GET_LOGIN_PROMPT_RETRY      # retry get login prompt
X   80       whilei $i_retries > 0
X   81       {
X   82           color cyan
X   83           lookfor -e 'login: ' $i_ltimeout
X   84           ifi $i0 == 1 break          # go send username
X   85           $i_ltimeout = 50            # later login waits 5 secs
X   86           set $i_retries = $i_retries - 1 # read and decrement retry
X   87           ifi $i_retries == 0 goto SORRY  # but not if retry exhausted
X   88           color yellow
X   89           echo 'sending prompt stimulus'
X   90           color green
X   91           send '' # kick off another login prompt
X   92       }
X   93   
X   94   # give username to remote
X   95   SEND_USERNAME
X   96       nap 3 # system not always ready when it says
X   97       send %argv(2)
X   98   
X   99   # get password prompt: "Password:"
X  100   GET_PASSWORD_PROMPT
X  101       lookfor -e 'Password:' 50
X  102       ifi $i0 != 1        # did not find 'Password: '
X  103       {
X  104           send ''
X  105           gotob GET_LOGIN_PROMPT_RETRY
X  106       }
X  107   
X  108   # send the password
X  109       nap 3 # system not always ready when it says
X  110       send %argv(3)
X  111   
X  112   # get term type prompt "TERM = (ansi) "
X
X
X    unixlogin.ep Page 3
X
X
X  113   # also handle incorect login retry and 'Sorry' hangup indication
X  114   GET_TERMTYPE_PROMPT
X  115       ifs %argv(4) == ''  # if no term type, don't wait for prompt
X  116       {
X  117           $i0 = 0         # return good status
X  118           goto SETCOLOR_AND_RETURN_STATUS
X  119       }
X  120       lgets -re $s0 100 50 ') '
X  121       ifi %instr($s0,'Sorry') > 0 hangup;goto SORRY
X  122       ifi %instr($s0,'incorrect') > 0     # exhausted retry?
X  123       {
X  124           set $i_retries=$i_retries-1
X  125           ifi $i_retries > 0 goto SEND_USERNAME
X  126           goto SORRY
X  127       }
X  128   # send terminal type
X  129       ifi %instr($s0,'TERM') < 0
X  130           lookfor -e ') ' 30
X  131       send %argv(4)
X  132       lookfor -e '\n' 50
X  133       set $i0=0
X  134       goto SETCOLOR_AND_RETURN_STATUS
X  135   
X  136   # procedure failed
X  137   SORRY
X  138       echo ''
X  139       color red
X  140       echo '....... sorry'
X  141       set $i0=0
X  142       goto SETCOLOR_AND_RETURN_STATUS
X  143   
X  144   SORRY1
X  145       echo ''
X  146       color red
X  147       echo '....... sorry'
X  148       set $i0=1
X  149   
X  150   SETCOLOR_AND_RETURN_STATUS
X  151       icolor $i_csave
X  152       ifi $i0 == 0 ifi %conn !=0 prompt %rname+' >'
X  153       return $i0
X  154   
X  155   # vi:set tabstop=4 shiftwidth=4:
X
X
X
X
X    ftst.ep
X
X    1   #------------------------------------------------------------
X    2   #  ftst.ep - test ecu procedure file functions
X    3   #------------------------------------------------------------
X    4
X    5    ptrace off         # turn off trace mode
X    6    fdel 'ftst.log'    # kill any previous file
X    7    plog 'ftst.log'    # turn on logging
X    8
X    9    echo ''
X   10    echo 'ftst '+%date+' '+%time
X   11    echo ''
X   12
X   13    ptrace on                  # turn on trace mode
X   14
X   15    set $s10 = '/tmp/ftst.tmp' # temp file name
X   16    fdel $s10                  # test proc trace warning
X   17    fopen -w 0 $s10            # open file 0 for write
X   18    set i0=%ftell(0)           # should produce 0
X   19    fputs 0 'abcdefghijk'      # put a line in the file
X   20    set i0=%ftell(0)           # should produce 12
X   21    fclose 0 n                 # close the file
X   22
X   23    fopen -r 0 $s10    # open again for reading
X   24    fgets 0 $s0        # should produce 'abcdefghijk'
X   25    fseek 0 0          # rewind to read again
X   26    fgets 0 $s0        # should produce 'abcdefghijk'
X   27    fgets 0 $s0        # should produce null string
X   28    set $i0=%fmode(0)  # test file mode function
X   29    fclose 0           # close the file
X   30
X   31    fchmod 'rw-rw-r-x' $s10 # set mode using string
X   32    set $i0=%fmode($s10)
X   33
X   34    fchmod 0777 $s10        # set mode using constant
X   35    set $i0=%fmode($s10)
X   36
X   37    ptrace off              # show file attributes
X   38    echo ''
X   39    echo -n $s10+' has '+%itos(%fsize($s10),06d)
X   40    echo    ' (0x'+%itos(%fsize($s10),x  )+') bytes'
X   41    echo 'accessed '+%edate(%fatime($s10))
X   42    echo 'modified '+%edate(%fmtime($s10))
X   43    echo ''
X   44    ptrace on
X   45
X   46    # demonstrate "is directory", "is character",
X   47    # "is regular file" functions
X   48    set i0=%isdir($s10),i1=%ischr($s10),i2=%isreg($s10)
X   49
X   50    fdel $s10 # should say 'deleted'
X   51    ptrace off
X   52    plog off
X   53
X
X
X                   fsts.ep output (procedure enables tracing)
X                   ------------------------------------------
X      ftst 06-21-1989 16:12
X
X      ftst 15>  set $s10 = '/tmp/ftst.tmp' # temp file name
X      $s10 = '/tmp/ftst.tmp'
X      ftst 16>  fdel $s10                  # test proc trace warning
X      /tmp/ftst.tmp: No such file or directory
X      ftst 17>  fopen -w 0 $s10            # open file 0 for write
X      opened '/tmp/ftst.tmp' as file 0
X      ftst 18>  set i0=%ftell(0)           # should produce 0
X      $i00 =       0 (0x00000000,00)
X      ftst 19>  fputs 0 'abcdefghijk'      # put a line in the file
X      ftst 20>  set i0=%ftell(0)           # should produce 12
X      $i00 =      12 (0x0000000c,014)
X      ftst 21>  fclose 0 n                 # close the file
X      ftst 23>  fopen -r 0 $s10    # open again for reading
X      opened '/tmp/ftst.tmp' as file 0
X      ftst 24>  fgets 0 $s0        # should produce 'abcdefghijk'
X      fgets set $s00 = 'abcdefghijk'
X      ftst 25>  fseek 0 0          # rewind to read again
X      file 0 set to position 0
X      ftst 26>  fgets 0 $s0        # should produce 'abcdefghijk'
X      fgets set $s00 = 'abcdefghijk'
X      ftst 27>  fgets 0 $s0        # should produce null string
X      fgets set $s00 = ''
X      ftst 28>  set $i0=%fmode(0)  # test file mode function
X      $i00 =   33188 (0x000081a4,0100644)
X      ftst 29>  fclose 0           # close the file
X      ftst 31>  fchmod 'rw-rw-r-x' $s10 # set mode using string
X      '/tmp/ftst.tmp' mode set to 100665
X      ftst 32>  set $i0=%fmode($s10)
X      $i00 =   33205 (0x000081b5,0100665)
X      ftst 34>  fchmod 0777 $s10        # set mode using constant
X      '/tmp/ftst.tmp' mode set to 100777
X      ftst 35>  set $i0=%fmode($s10)
X      $i00 =   33279 (0x000081ff,0100777)
X      ftst 37>  ptrace off              # show file attributes
X
X      /tmp/ftst.tmp has 000012 (0xc) bytes
X      accessed 06-21-1989 16:12:01
X      modified 06-21-1989 16:12:01
X
X      ftst 46>  # demonstrate "is directory", "is character",
X      ftst 47>  # "is regular file" functions
X      ftst 48>  set i0=%isdir($s10),i1=%ischr($s10),i2=%isreg($s10)
SHAR_EOF
echo "End of part 40"
echo "File doc/samplproc.man is continued in part 41"
echo "41" > s2_seq_.tmp
exit 0
-- 
-------------------------------------------------------------------
Warren Tucker, Tridom Corporation       ...!gatech!emory!tridom!wht 
Ker-au'-lo-phon.  An 8-foot partial flue-stop, having metal pipes
surmounted by adjustable rings, and with a hole bored near the top
of each pipe, producing a soft and "reedy" tone.