home *** CD-ROM | disk | FTP | other *** search
- #!/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.
-