(FILECREATED " 8-Mar-85 15:12:08" {ERIS}<SPEECH>MAILREADER>PROSE-PHONE.;22 6583
changes to: (FNS PROSE.OPERATOR)
previous date: " 1-Mar-85 19:09:04" {ERIS}<SPEECH>MAILREADER>PROSE-PHONE.;21)
(* Copyright (c) 1984, 1985 by Xerox Corporation. All rights reserved.)
(PRETTYCOMPRINT PROSE-PHONECOMS)
(RPAQQ PROSE-PHONECOMS ((FNS PHONEINPUT.MONITOR PROSE.OPERATOR START.OPERATOR.PROCESS
START.TONE.MONITOR.PROCESS TONE.MONITOR.PROCESS)))
(DEFINEQ
(PHONEINPUT.MONITOR
[LAMBDA NIL (* edited: "17-Jan-85 12:17")
(* Wakes up the P.PROCESS whenever a command has been
completed as determined by the contents of PHONEINPUT
and the state of the mailreader)
(PROG (DUMMY) (* Interrupt)
[COND
((AND (EQ (fetch (STATE STATEINFO TALKING) of STATE)
(QUOTE TALKING))
(EQ (CAR (fetch PHONEINPUT of STATE))
11))
(RETURN (replace (STATE STATEINFO HALTSPEECH) of STATE with T]
(COND
([OR (EQ (QUOTE 11)
(CAR (fetch PHONEINPUT of STATE)))
(EQ (QUOTE 12)
(CAR (fetch PHONEINPUT of STATE]
(COND
((PROCESSP (fetch PROCESS of STATE)))
(T (* There was no live process so we have to start one)
(START.PROSE.PROCESS) (* Has to block to make sure the process gets started
before we try to wake it in the next statement)
(BLOCK 1000)))
(DSUBST (QUOTE *)
11
(fetch PHONEINPUT of STATE))
(DSUBST (QUOTE #)
12
(fetch PHONEINPUT of STATE))
(DSUBST 0 10 (fetch PHONEINPUT of STATE))
(WAKE.PROCESS (fetch PROCESS of STATE)
T])
(PROSE.OPERATOR
[LAMBDA NIL (* BBB " 8-Mar-85 15:11")
(* Waits for an incoming call;
answers, wakes up the touch tone monitoring process;
and loops back to the call waiting state)
(while T
do (WAIT.FOR.CALL)
(BLOCK 3000)
(OFF.HOOK)
(DISMISS 2000) (* Holding for the phone company to set up the billing)
(P.CHUNK
" This is the Interlisp-D mail reader. Please enter your user name or push zero sharp sign for help. "
)
[if (AND (BOUNDP (QUOTE MAILREADERLOGFILE))
(OPENP MAILREADERLOGFILE))
then (printout MAILREADERLOGFILE (DATE)
": Call received." T)
else (SETQ MAILREADERLOGFILE (OPENFILE (QUOTE {DSK}MAILREADERLOG)
(QUOTE APPEND]
[if (NOT (OPENP (QUOTE {DSK}NAME.HASH)))
then (SETQ MAILREADERUSERSFILE (OPENHASHFILE (QUOTE {DSK}NAME.HASH)
(QUOTE BOTH]
(P.RESET.TIMER)
(BLOCK 1000)
(WAKE.PROCESS \TONE.MONITOR.PROCESS T)
(SUSPEND.PROCESS \PROSE.OPERATOR.PROCESS)
(printout MAILREADERLOGFILE (DATE)
": Call completed." T])
(START.OPERATOR.PROCESS
[LAMBDA NIL (* pkh: "19-Dec-84 18:36")
(* * comment)
(USEDFREE \PROSE.OPERATOR.PROCESS)
(COND
((AND (BOUNDP (QUOTE \PROSE.OPERATOR.PROCESS))
(PROCESSP \PROSE.OPERATOR.PROCESS)) (* Checking to see whether there is a running process
already)
(replace (STATE OPERATORPROCESS) of STATE with \PROSE.OPERATOR.PROCESS))
(T [SETQ \PROSE.OPERATOR.PROCESS (ADD.PROCESS (QUOTE (PROSE.OPERATOR]
(replace (STATE OPERATORPROCESS) of STATE with \PROSE.OPERATOR.PROCESS])
(START.TONE.MONITOR.PROCESS
[LAMBDA NIL (* pkh: " 8-Jan-85 23:47")
(* Starts the process which
(a) monitors the phone for ringing, and
(b) monitors for incoming touch tones)
(* The handle on this porcess may not need to be kept)
(USEDFREE \TONE.MONITOR.PROCESS)
(COND
((AND (BOUNDP (QUOTE \TONE.MONITOR.PROCESS))
(PROCESSP \TONE.MONITOR.PROCESS)) (* Checking to see whether there is a running process
already)
(replace (STATE TONEPROCESS) of STATE with \TONE.MONITOR.PROCESS))
(T (SETQ \TONE.MONITOR.PROCESS (ADD.PROCESS (QUOTE (TONE.MONITOR.PROCESS))
(QUOTE SUSPEND)
T))
(replace (STATE TONEPROCESS) of STATE with \TONE.MONITOR.PROCESS])
(TONE.MONITOR.PROCESS
[LAMBDA NIL (* edited: "17-Jan-85 12:25")
(* Watches for touch tones and pushes them on the list which is in the PHONEINPUT field of (STATE; Calls
PHONEINPUT.MONITOR whenever a touch tone has been received to see whether a command has been completed))
(while T
do [for THE.TONE as I from 0 to 2000
do (BLOCK)
(COND
((NEQ (LOGAND (BUS.INPUT CTRL)
TONE)
0) (* There is a touch tone)
(SETQ THE.TONE (LOGAND 15 (BUS.INPUT DTMF)))
(BUS.OUTPUT DTMF 0)
(replace (STATE PHONEINPUT) of STATE with (push (fetch (STATE PHONEINPUT)
of STATE)
THE.TONE))
(P.RESET.TIMER)
(SETQ \TIMEOUTFLG NIL)
(PHONEINPUT.MONITOR]
(COND
(\IGNORETIMER T)
((AND (NOT \IGNORETIMER)
(TIMEREXPIRED? P.TIMEOUTTIMER (QUOTE TICKS))
(NOT \TIMEOUTFLG))
(SETQ \TIMEOUTFLG T)
(P.CHUNK " Please type a key to maintain the connection. ")
(P.RESET.TIMER))
((AND (TIMEREXPIRED? P.TIMEOUTTIMER (QUOTE TICKS))
\TIMEOUTFLG)
(SETQ \TIMEOUTFLG NIL)
(P.BYE])
)
(PUTPROPS PROSE-PHONE COPYRIGHT ("Xerox Corporation" 1984 1985))
(DECLARE: DONTCOPY
(FILEMAP (NIL (474 6496 (PHONEINPUT.MONITOR 484 . 2074) (PROSE.OPERATOR 2076 . 3440) (
START.OPERATOR.PROCESS 3442 . 4121) (START.TONE.MONITOR.PROCESS 4123 . 5130) (TONE.MONITOR.PROCESS
5132 . 6494)))))
STOP