home *** CD-ROM | disk | FTP | other *** search
- #!/usr/local/bin/kermit +
- #
- # g e t l i n e -- Get first free dialout line.
- #
- # Given a string of the form:
- #
- # device,modem,speed:device,modem,speed:device,modem,speed...
- #
- # ...this script cycles through the devices until it finds a free one
- # that it can assign. Upon failure it exits with a failure code.
- #
- # If it succeeds it returns with the associated modem type and speed also
- # set: if called as a "kerbang" script, it leaves you at the C-Kermit>
- # prompt; if called from another script, returns to the calling script.
- #
- # The string can be provided as a command-line argument or (if no
- # command-line argument is given) the value of the DIALOUTS environment
- # variable (DIALOUTS symbol or logical name in VMS).
- #
- # Illustrates using \fsplit() to break up delimited strings into arrays.
- #
- # Author: F. da Cruz, Columbia University, April 1999
- # Updated Oct 1999 for QNX port locking.
- #
- local \&a[] \&b[] \%i myname ; Local variables
- local list defmodem defspeed usage ; More local variables
-
- .myname := \fbasename(\%0) ; Name of this script
- .defmodem = usr ; Default modem type (*)
- .defspeed = 57600 ; Default speed (*)
-
- ; (*) Change as needed
-
- define USAGE {
- echo {\m(myname): \%1}
- echo Please supply a device list as (the only) command-line argument or
- echo in the DIALOUTS environment variable. A device list looks like:
- echo {"device,modem,speed:device,modem,speed:device,modem,speed..."}
- exit 1
- }
- if > \v(argc) 2 { ; Check for bad command line
- usage {Too many arguments.}
- }
- if def \%1 .list := \%1 ; Get command-line argument
- if not def list .list := \$(DIALOUTS) ; If none get DIALOUTS variable
- if not def list { ; If none give message and fail
- usage {No device list given.}
- }
- set quiet on ; Suppress error messages
- set qnx-port-lock on ; Significant in QNX - ignored elsewhere
- for \%i 1 \fsplit(\m(list),&a,:) 1 { ; Loop for each triplet
- dcl \&b[3] ; Re-create this array each time
- .\%m := \fsplit(\&a[\%i],&b,{,}) ; Split this triplet
- if not def \&b[1] continue ; Watch out for empty ones
- echo Trying \&b[1]...
- if not def \&b[2] { ; If no modem type included
- .\&b[2] = \m(defmodem) ; supply default
- }
- if not def \&b[3] { ; Ditto for speed
- .\&b[3] = \m(defspeed)
- }
- set modem type \&b[2] ; Try to set modem type
- if fail continue ; Failed - go to next triplet
- set line \&b[1] ; Try to get the line
- if fail continue ; Failed - go to next triplet
- set speed \&b[3] ; Set the speed but ignore errors
- if !\v(local) continue ; Make sure we're in local mode
- echo { Line: \v(line)} ; Report what we got...
- echo { Modem: \v(modem)}
- echo { Speed: \v(speed)}
- end 0 ; And return successfully
- }
- exit 1 No devices free ; Didn't get one - fail
-