(FILECREATED " 3-Dec-84 16:14:51" {ERIS}<SPEECH>PROSE>COMMUNICARD.;13 12736 changes to: (FNS ANSWERING.MACHINE PLAYIT RECORDIT) previous date: " 2-Dec-84 13:31:27" {ERIS}<SPEECH>PROSE>COMMUNICARD.;12) (* Copyright (c) 1984 by Xerox Corporation. All rights reserved.) (PRETTYCOMPRINT COMMUNICARDCOMS) (RPAQQ COMMUNICARDCOMS ((VARS BACKWARDS.LIMIT BANK BEEP.LIMIT CTRL DATA DTMF ENB FAST.LIMIT HAND LINE MONITOR OH PHONE RDY RESPONSE.LIMIT RST SLOW.LIMIT SMEAR.LIMIT SPEECH.THRESHOLD SPEECH1.LIMIT SPEECH2.LIMIT SPEECH3.LIMIT TONE) (FNS ANSWERING.MACHINE COMMUNICARD.SETUP CORRECT DIAL DIAL.DIGIT GET.MESSAGES HEX HEXCHAR INIT.ANSWERING.MACHINE INP OFF.HAND OFF.HOOK OFF.LINE OFF.PHONE ON.HAND ON.HOOK ON.LINE ON.PHONE OUT PLAYIT POLL RECORDIT RINGING? STATUS STORE.MESSAGE TEST TEST.PLAY TEST.PLAY.FILE TEST.RECORD TEST.TONE TONE? WAIT.FOR.CALL))) (RPAQQ BACKWARDS.LIMIT 5000) (RPAQQ BANK 4) (RPAQQ BEEP.LIMIT 2000) (RPAQQ CTRL 630) (RPAQQ DATA 631) (RPAQQ DTMF 628) (RPAQQ ENB 8) (RPAQQ FAST.LIMIT 5000) (RPAQQ HAND 16) (RPAQQ LINE 4) (RPAQQ MONITOR 32) (RPAQQ OH 1) (RPAQQ PHONE 2) (RPAQQ RDY 128) (RPAQQ RESPONSE.LIMIT 30000) (RPAQQ RST 629) (RPAQQ SLOW.LIMIT 5000) (RPAQQ SMEAR.LIMIT 5000) (RPAQQ SPEECH.THRESHOLD 128) (RPAQQ SPEECH1.LIMIT 30000) (RPAQQ SPEECH2.LIMIT 5000) (RPAQQ SPEECH3.LIMIT 5000) (RPAQQ TONE 64) (DEFINEQ (ANSWERING.MACHINE [LAMBDA NIL (* hdj " 2-Dec-84 13:27") (PROG (PHONEMESSAGESTREAM) (SETQ PHONEMESSAGESTREAM (OPENSTREAM (QUOTE {DSK}<SPEECH>MESSAGES.SPEECH) (QUOTE APPEND))) (printout STATUSSTREAM "-- Started at " (DATE) " --" T) (while (WAIT.FOR.CALL) do (OFF.HOOK) (printout STATUSSTREAM "call at " (DATE) T) (PLAYIT SPEECH1.ARRAY) (PLAYIT BEEP.ARRAY) (RECORDIT RESPONSE.ARRAY) (PLAYIT SPEECH2.ARRAY) (PLAYIT RESPONSE.ARRAY) (PLAYIT BACKWARDS.ARRAY) (PLAYIT RESPONSE.ARRAY (QUOTE BACKWARDS)) (PLAYIT SLOW.ARRAY) (PLAYIT RESPONSE.ARRAY (QUOTE SLOW)) (PLAYIT FAST.ARRAY) (PLAYIT RESPONSE.ARRAY (QUOTE FAST)) (PLAYIT SMEAR.ARRAY) (PLAYIT RESPONSE.ARRAY (QUOTE SMEAR)) (PLAYIT SPEECH3.ARRAY) (BLOCK 2000) (ON.HOOK) (STORE.MESSAGE PHONEMESSAGESTREAM RESPONSE.ARRAY)) (CLOSEF PHONEMESSAGESTREAM]) (COMMUNICARD.SETUP [LAMBDA NIL (* hdj " 2-Dec-84 11:27") (BUS.RESET) (BUS.OUTPUT RST 0) (BUS.OUTPUT CTRL]) (CORRECT [LAMBDA (DATUM) (* hdj " 1-Dec-84 17:21") (if (IGREATERP DATUM 127) then (IDIFFERENCE DATUM 128) else DATUM]) (DIAL [LAMBDA (PHONE.NUMBER) (* hdj " 2-Dec-84 11:46") (PROG ((STRING (SUBSTRING PHONE.NUMBER 1))) (for X from 1 to (NCHARS STRING) do (DIAL.DIGIT (GNC STRING]) (DIAL.DIGIT [LAMBDA (DIGIT) (* hdj " 2-Dec-84 12:07") (if (ZEROP DIGIT) then (SETQ DIGIT 10)) (if (NUMBERP DIGIT) then (for X from 1 to DIGIT do (PRIN3 ".") (ON.HOOK) (BLOCK 200) (OFF.HOOK) (BLOCK 100)) (TERPRI) (BLOCK 2000]) (GET.MESSAGES [LAMBDA NIL (* hdj " 2-Dec-84 13:30") (PROG [(MESSAGESTREAM (OPENSTREAM (QUOTE {DSK}<SPEECH>MESSAGES.SPEECH) (QUOTE INPUT] (WAIT.FOR.CALL) (OFF.HOOK) (while (NOT (EOFP MESSAGESTREAM)) as MESSAGE# from 1 do (printout T "Press <next> for message number " MESSAGE# T) (while (NOT (KEYDOWNP (QUOTE NEXT))) do (BLOCK)) (\BINS MESSAGESTREAM (fetch (ARRAYP BASE) of RESPONSE.ARRAY) 0 (ARRAYSIZE RESPONSE.ARRAY)) (PLAYIT RESPONSE.ARRAY (ARRAYSIZE RESPONSE.ARRAY))) (PLAYIT BEEP.ARRAY (ARRAYSIZE BEEP.ARRAY)) (ON.HOOK) (CLOSEF MESSAGESTREAM]) (HEX [LAMBDA (STR) (* hdj "30-Nov-84 16:37") (PROG (LENGTH STRING) (SETQ STRING (SUBSTRING STR 1)) (SETQ LENGTH (NCHARS STRING)) (RETURN (for X from 1 to LENGTH sum (TIMES (EXPT 16 (IDIFFERENCE LENGTH X)) (HEXCHAR (GNC STRING]) (HEXCHAR [LAMBDA (CHAR) (* hdj "30-Nov-84 16:36") (SELECTQ CHAR ((0 1 2 3 4 5 6 7 8 9) CHAR) (A 10) (B 11) (C 12) (D 13) (E 14) (F 15) NIL]) (INIT.ANSWERING.MACHINE [LAMBDA NIL (* hdj " 1-Dec-84 17:33") (* * comment) (PROG NIL (SETQ SPEECH1.ARRAY (ARRAY SPEECH1.LIMIT (QUOTE BYTE) 0 0)) (SETQ SPEECH2.ARRAY (ARRAY SPEECH2.LIMIT (QUOTE BYTE) 0 0)) (SETQ SPEECH3.ARRAY (ARRAY SPEECH3.LIMIT (QUOTE BYTE) 0 0)) (SETQ RESPONSE.ARRAY (ARRAY RESPONSE.LIMIT (QUOTE BYTE) 0 0)) (SETQ BACKWARDS.ARRAY (ARRAY BACKWARDS.LIMIT (QUOTE BYTE) 0 0)) (printout T "now run TEST.RECORD on SPEECH1.ARRAY, SPEECH2.ARRAY, SPEECH3.ARRAY, RESPONSE.ARRAY, and BACKWARDS.ARRAY." T]) (INP [LAMBDA (A) (* hdj "30-Nov-84 17:14") (BUS.INPUT A]) (OFF.HAND [LAMBDA NIL (* hdj " 2-Dec-84 11:27") (BUS.OUTPUT CTRL (LOGAND (LOGNOT HAND) (BUS.INPUT CTRL]) (OFF.HOOK [LAMBDA NIL (* hdj " 2-Dec-84 11:27") (BUS.OUTPUT CTRL (LOGOR (BUS.INPUT CTRL) OH]) (OFF.LINE [LAMBDA NIL (* hdj " 2-Dec-84 11:27") (BUS.OUTPUT CTRL (LOGAND (LOGNOT LINE) (BUS.INPUT CTRL]) (OFF.PHONE [LAMBDA NIL (* hdj " 2-Dec-84 11:27") (BUS.OUTPUT CTRL (LOGOR PHONE (BUS.INPUT CTRL]) (ON.HAND [LAMBDA NIL (* hdj " 2-Dec-84 11:27") (BUS.OUTPUT CTRL (LOGOR HAND (BUS.INPUT CTRL]) (ON.HOOK [LAMBDA NIL (* hdj " 2-Dec-84 11:27") (BUS.OUTPUT CTRL (LOGAND (BUS.INPUT CTRL) (LOGNOT OH]) (ON.LINE [LAMBDA NIL (* hdj " 2-Dec-84 11:27") (BUS.OUTPUT CTRL (LOGOR LINE (BUS.INPUT CTRL]) (ON.PHONE [LAMBDA NIL (* hdj " 2-Dec-84 11:27") (BUS.OUTPUT CTRL (LOGAND (LOGNOT PHONE) (BUS.INPUT CTRL]) (OUT [LAMBDA (A D) (* hdj "30-Nov-84 17:14") (BUS.OUTPUT A D]) (PLAYIT [LAMBDA (ARRAY OPTION) (* hdj " 2-Dec-84 12:32") (LET [(LIMIT (SUB1 (ARRAYSIZE ARRAY] (SELECTQ OPTION [SLOW (for DATUM from 0 to LIMIT do (BUS.OUTPUT DATA (ELT ARRAY DATUM)) (BUS.OUTPUT DATA (ELT ARRAY DATUM] [FAST (for DATUM from 0 to LIMIT by 2 do (BUS.OUTPUT DATA (LRSH (IPLUS (ELT ARRAY DATUM) (ELT ARRAY (ADD1 DATUM))) 1] [BACKWARDS (for DATUM from LIMIT to 0 by -1 do (BUS.OUTPUT DATA (ELT ARRAY DATUM] [SMEAR (for DATUM from 0 to (IDIFFERENCE LIMIT 3) do (BUS.OUTPUT DATA (ELT ARRAY (IPLUS DATUM 2))) (BUS.OUTPUT DATA (ELT ARRAY (IPLUS DATUM 1))) (BUS.OUTPUT DATA (ELT ARRAY DATUM] (for DATUM from 0 to LIMIT do (BUS.OUTPUT DATA (ELT ARRAY DATUM]) (POLL [LAMBDA (ADDR DATA) (* hdj "30-Nov-84 16:18") (BUS.OUTPUT ADDR DATA]) (RECORDIT [LAMBDA (ARRAY) (* hdj " 1-Dec-84 17:00") (BUS.OUTPUT DATA SPEECH.THRESHOLD) (for DATUM from 0 to (SUB1 (ARRAYSIZE ARRAY)) do (SETA ARRAY DATUM (BUS.INPUT DATA]) (RINGING? [LAMBDA NIL (* hdj " 2-Dec-84 11:26") (ZEROP (LOGAND MONITOR (BUS.INPUT CTRL]) (STATUS [LAMBDA NIL (* hdj " 2-Dec-84 12:03") (PROG (STATUS) (SETQ STATUS (BUS.INPUT CTRL)) (printout T "Status: ") (printout T (if (ZEROP (LOGAND OH STATUS)) then "on" else "off") "hook/" (if (ZEROP (LOGAND PHONE STATUS)) then "" else "no ") "phone/" (if (ZEROP (LOGAND LINE STATUS)) then "off" else "on") "line/" (if (ZEROP (LOGAND HAND STATUS)) then "off" else "on") "hand/" (if (ZEROP (LOGAND MONITOR STATUS)) then "" else "not ") "ringing/" (if (ZEROP (LOGAND TONE STATUS)) then "no " else "") "tone " T]) (STORE.MESSAGE [LAMBDA (FILE SAMPLE) (* hdj " 2-Dec-84 13:31") (\BOUTS FILE (fetch (ARRAYP BASE) of SAMPLE) 0 (ARRAYSIZE SAMPLE]) (TEST [LAMBDA NIL (* hdj " 2-Dec-84 11:27") (while T do (if (RINGING?) then (OFF.HOOK) (BUS.OUTPUT DATA SPEECH.THRESHOLD) (for DATUM from 0 to (SUB1 SPEECH.LIMIT) do (SETA SPEECHARRAY DATUM (BUS.INPUT DATA))) (ON.HOOK]) (TEST.PLAY [LAMBDA (ARRAY LIMIT OPTION) (* hdj " 2-Dec-84 11:24") (while T do (if (RINGING?) then (OFF.HOOK) (PLAYIT ARRAY LIMIT OPTION) (ON.HOOK]) (TEST.PLAY.FILE [LAMBDA (FILE) (* hdj " 1-Dec-84 17:13") (while T do (if (RINGING?) then (OFF.HOOK) (for DATUM from 0 to (SUB1 SPEECH.LIMIT) do (BUS.OUTPUT DATA (BIN FILE))) (ON.HOOK]) (TEST.RECORD [LAMBDA (ARRAY LIMIT) (* hdj " 2-Dec-84 12:26") (while T do (if (RINGING?) then (OFF.HOOK) (BUS.OUTPUT DATA SPEECH.THRESHOLD) (PRIN1 "Recording... ") (RECORDIT ARRAY LIMIT) (printout T "done." T) (PLAYIT ARRAY LIMIT) (BLOCK 1000) (ON.HOOK) (BLOCK 3000]) (TEST.TONE [LAMBDA NIL (* hdj " 2-Dec-84 12:20") (PROG (THE.TONE) (while T do (BLOCK) (COND ((RINGING?) (OFF.HOOK) (BLOCK 2000) (COND ((NOT (ZEROP (LOGAND (BUS.INPUT CTRL) TONE))) (printout T "tone " (BUS.INPUT DTMF) T) (BUS.OUTPUT DTMF 0))) (ON.HOOK]) (TONE? [LAMBDA NIL (* hdj " 2-Dec-84 12:10") (COND ((ZEROP (LOGAND (BUS.INPUT CTRL) TONE)) NIL) (T (PROG1 (LOGAND 15 (BUS.INPUT DTMF)) (BUS.OUTPUT DTMF 0]) (WAIT.FOR.CALL [LAMBDA NIL (* hdj " 2-Dec-84 13:27") (while [AND (NOT (RINGING?)) (NOT (KEYDOWNP (QUOTE STOP] do (BLOCK)) (NOT (KEYDOWNP (QUOTE STOP]) ) (PUTPROPS COMMUNICARD COPYRIGHT ("Xerox Corporation" 1984)) (DECLARE: DONTCOPY (FILEMAP (NIL (1508 12654 (ANSWERING.MACHINE 1518 . 2617) (COMMUNICARD.SETUP 2619 . 2806) (CORRECT 2808 . 3010) (DIAL 3012 . 3268) (DIAL.DIGIT 3270 . 3664) (GET.MESSAGES 3666 . 4494) (HEX 4496 . 4887) (HEXCHAR 4889 . 5147) (INIT.ANSWERING.MACHINE 5149 . 5924) (INP 5926 . 6048) (OFF.HAND 6050 . 6239) ( OFF.HOOK 6241 . 6414) (OFF.LINE 6416 . 6605) (OFF.PHONE 6607 . 6776) (ON.HAND 6778 . 6944) (ON.HOOK 6946 . 7132) (ON.LINE 7134 . 7300) (ON.PHONE 7302 . 7492) (OUT 7494 . 7619) (PLAYIT 7621 . 8643) (POLL 8645 . 8777) (RECORDIT 8779 . 9051) (RINGING? 9053 . 9214) (STATUS 9216 . 10090) (STORE.MESSAGE 10092 . 10302) (TEST 10304 . 10674) (TEST.PLAY 10676 . 10917) (TEST.PLAY.FILE 10919 . 11231) (TEST.RECORD 11233 . 11648) (TEST.TONE 11650 . 12105) (TONE? 12107 . 12378) (WAIT.FOR.CALL 12380 . 12652))))) STOP