;;; -*- Mode:Common-Lisp; Package:TELNET; Base:8 -*-

;;;                           RESTRICTED RIGHTS LEGEND

;;;Use, duplication, or disclosure by the Government is subject to
;;;restrictions as set forth in subdivision (b)(3)(ii) of the Rights in
;;;Technical Data and Computer Software clause at 52.227-7013.
;;;
;;;                     TEXAS INSTRUMENTS INCORPORATED.
;;;                              P.O. BOX 2909
;;;                           AUSTIN, TEXAS 78769
;;;                                 MS 2151
;;;
;;; Copyright (C) 1987, Texas Instruments Incorporated. All rights reserved.
;;; Copyright (C) 1987 Unisys Corporation
;;; All Rights Reserved

(DEFUN AUTODIAL (&KEY
		 (PREFIX (IF NET:*SERIAL-HOST* (NET:GET-HOST-ATTRIBUTE NET:*SERIAL-HOST* :AUTODIAL-PREFIX)))
		 (NUMBER (IF NET:*SERIAL-HOST* (NET:GET-HOST-ATTRIBUTE NET:*SERIAL-HOST* :AUTODIAL-NUMBER)))
		 (STREAM SYS:*SERIAL-PORT-OWNER*)
		 MENU
		 VERBOSE)
  "Dial a number using an autodialer.  If :PREFIX or :NUMBER are not specified,
use the attributes associated with NET:*SERIAL-HOST*.  If :MENU is specified, display a menu
to select the number to dial."
  (LET
    ((PRE PREFIX)
     (NUM NUMBER)
     (CONTINUE T))
    (DECLARE (SPECIAL PRE NUM))
    (WHEN MENU
      (SETQ CONTINUE
	    (CATCH 'END-CVV
	      (TV:CHOOSE-VARIABLE-VALUES
		'((PRE
		    "Prefix"
		    :DOCUMENTATION "Modem's autodial prefix (e.g., ATDT)."
		    :STRING)
		  (NUM
		    "Number"
		    :DOCUMENTATION "Telephone number to dial.  A comma <,> causes a 2 second wait."
		    :STRING))
		:NEAR-MODE '(:POINT 500 400)
		:LABEL "Serial Port Autodial"
		:MARGIN-CHOICES '(("Abort" (THROW 'END-CVV NIL))("Do It")))
	      T)))

    (WHEN CONTINUE
      (IF (NOT (STREAMP STREAM))
	  (WHEN VERBOSE
	    (FORMAT T "~&Stream <~A> is not a valid stream." STREAM))
	  (PROGN
	    (SEND STREAM :CLEAR-INPUT)
	    (SEND STREAM :CLEAR-OUTPUT)
	    (SEND STREAM :LINE-OUT (FORMAT NIL "~A~A" PRE NUM))
	    (IF (PROCESS-WAIT-WITH-TIMEOUT
		  "Dialing..."
		  3600
		  (FUNCTION (LAMBDA (STREAM)
			      (SEND STREAM :GET :DATA-CARRIER-DETECT)))
		  STREAM)
	      (PROGN 
		(SEND STREAM :CLEAR-INPUT)
		(SEND STREAM :CLEAR-OUTPUT)
		T)
	      (SEND STREAM :CLEAR-INPUT)
	      (SEND STREAM :CLEAR-OUTPUT)
	      NIL))))))


