home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
kermit.columbia.edu
/
kermit.columbia.edu.tar
/
kermit.columbia.edu
/
scripts
/
ckermit
/
dialout
< prev
next >
Wrap
Text File
|
2000-01-02
|
8KB
|
202 lines
#!/usr/local/bin/kermit +
#
# d i a l o u t -- Menu-driven dialing out with C-Kermit.
#
# Forces user to fill in the necessary blanks before it will dial.
#
# Hint: Set up and run the "getline" script first and all the blanks
# will be filled in except the phone number. For example, make a new
# script that contains something like:
#
# getline /dev/cua,usr,57600:/dev/cub,hayes,2400:/dev/ttyS0,unknown,38400
# dialout {\%1}
#
# The phone number can be supplied as a command-line argument (in quotes
# if it contains spaces or parens, etc, because of the shell).
#
# Ideas for further development:
# . Choices for local country and area code.
# . Choices for dialing directory.
# . Choices for redial limit and interval.
# . Choices for terminal type and many other settings.
#
# Requires C-Kermit 7.0 Beta.07 or later.
#
# Author: F. da Cruz, Columbia University, May 1999.
local modem device speed phone watch ; Local variables
local \%p \%m \%c \%x lastmsg
set eval new ; Use new form of EVALUATE command.
set case off ; Case doesn't matter in commands
set quiet on ; Suppress most error messages
set take error off ; Ditto
set macro error off ; Ditto
set exit warning off ; Ditto
define MSG { ; Print message at given location.
if > \v(argc) 2 screen move \%2 \%3 ; Move to given row/col (if any)
screen cleol ; Clear to end of line
if def \%1 xecho {\fcontents(\%1)} ; Print message (if any)
}
define ERRMSG { ; Print error message on message line
asg lastmsg { \fcontents(\%1)} ; Save the message for repainting
msg {\m(lastmsg)} \%m
}
define PAINT { ; Paint the menu
screen clear ; Row:
echo ; 1
echo { \v(xprogram) Dialout Setup} ; 2
echo ; 3
echo { 1. Modem type [\m(modem)]} ; 4
echo { 2. Device [\m(device)]} ; 5
echo { 3. Speed [\m(speed)]} ; 6
echo { 4. Phone number [\m(phone)]} ; 7
echo { 5. Watch modem dialog [\m(watch)]} ; 8
echo ; 9
echo { 6. Go} ; 10
echo { 7. Restart/Clear} ; 11
echo { 8. Help} ; 12
echo { 9. Quit/Exit} ; 13
echo ; 14
def \%p 15 ; Prompt line
def \%m 16 ; Message line
msg {\m(lastmsg)} \%m
}
:BEGIN
if ( not local && equal "\v(modem)" "none" ) { ; If remote or no modem type...
set modem type unknown ; Default modem type is UNKNOWN
}
assign modem \v(modem) ; Set local modem variable too.
define watch No ; Default watch modem dialog is No.
undef device ; Initialize device to none.
undef speed ; Ditto for speed.
undef phone ; And phone number.
if ( local ) { ; But if we have a device assigned
assign device \v(line) ; make it the default.
assign speed \v(speed) ; And pick up its speed.
}
if def \%1 asg phone \%1 ; Get phone number from command line.
:REFRESH ; Back here to refresh screen.
paint ; Display the menu.
set flag off ; FLAG ON means to exit the loop.
while ( not flag ) { ; Loop to read and execute choices.
msg {} \%p ; Move to prompt row and clear it.
getc \%c { Choice: } ; Prompt and get one character.
eval \%x \fcode(\%c)&127 ; Get its 7-bit code.
if ( < \%x 32 || = \%x 127 ) { ; Handle control characters.
xecho ^\fchar(\%x#64) ; Echo as ^X.
switch \%x { ; What is it really?
:12, goto refresh ; ^L = Refresh screen.
:3,:4 ; ^C and ^D...
msg {} \%m, exit 0 { Bye} ; are the same as Quit.
:default, continue ; Ignore all others.
}
}
xecho \%c ; Not a control character - echo it.
switch \%c { ; Execute the choice.
:m, :1 ; MODEM...
msg {} \%m ; Move to message line.
ask modem { Modem: } ; Prompt for modem type.
if def \m(modem) { ; If they gave one...
set modem type \m(modem) ; Try to set it.
if fail {
errmsg {Invalid modem type: "\m(modem)"}
} else {
undef lastmsg
}
asg modem \v(modem)
}
paint ; Repaint to show new modem type
break
:d, :2 ; DEVICE...
msg {} \%m ; Move to message line
ask device { Device: } ; Prompt for device.
if def \m(device) { ; Etc, as above.
set line \m(device)
if fail {
errmsg {\m(device): \v(setlinemsg)}
} else {
if not def speed asg speed \v(speed)
undef lastmsg
}
asg device \v(line)
}
paint
break
:s, :3 ; SPEED...
if not local { ; No SET SPEED before SET LINE.
errmsg {You must choose a device before setting the speed}
continue
}
msg {} \%m ; Move to message line
ask speed { Speed: } ; Prompt for speed
if def \m(speed) {
set speed \m(speed)
if fail {
errmsg {Can't set speed: "\m(speed)"}
undef speed
} else {
asg speed \v(speed)
undef lastmsg
}
}
paint
break
:n, :p, :4 ; PHONE NUMBER...
msg {} \%m
ask phone { Number: }
paint
break
:w, :5 ; WATCH...
msg {} \%m
getok { Watch? },
if success def watch Yes
else define watch No
undef lastmsg
paint
break
:g, :6 ; GO...
if not def modem { errmsg {Modem not selected}, continue }
if not def device { errmsg {Device not selected}, continue }
if not def phone { errmsg {Phone number not given}, continue }
set flag on, break
:c, :r, :7 ; CLEAR or RESET...
close
set modem type unknown
undef phone
undef lastmsg
undef \%1
goto begin
:h, :8 ; HELP...
msg {Press the digit or the first letter of the menu choice.} \%m
break
:q, :e, :9 ; QUIT...
msg {} \%m, exit 0 { Bye}
:default
errmsg {Not a valid choice: "\%c"}
}
}
msg {} \%m
echo
set dial display off ; Watch modem display...
if eq "\m(watch)" "yes" set dial displ on ; Translate yes/no to on/off.
set quiet off ; Allow Kermit messages again.
set dial connect on ; CONNECT automatically.
set exit on-disconnect on ; Exit automatically on hangup.
dial \m(phone) ; Dial the number.
if fail exit 1 Call failed. ; Give up if no answer.
; Here we exit automatically if the connection drops. If the user
; escapes back, she gets the prompt so files can be transferred, etc.,
; and has the opportunity to re-CONNECT.
;
; End.