(FILECREATED " 2-Dec-84 12:22:00" {ERIS}<SPEECH>PROSE>COMMUNICARD.;9 11366  

      changes to:  (FNS PLAYIT TEST.RECORD DIAL.DIGIT DIAL STATUS TONE? TEST.TONE ANSWERING.MACHINE 
			TEST.PLAY COMMUNICARD.SETUP OFF.HAND OFF.HOOK OFF.LINE OFF.PHONE ON.HAND 
			ON.HOOK ON.LINE ON.PHONE RINGING? TEST INIT.ANSWERING.MACHINE CORRECT 
			TEST.PLAY.FILE INP OUT HEX POLL)
		   (VARS COMMUNICARDCOMS BEEP.LIMIT BACKWARDS.LIMIT SPEECH3.LIMIT SPEECH2.LIMIT 
			 SPEECH1.LIMIT RESPONSE.LIMIT SPEECH.THRESHOLD RDY TONE MONITOR HAND ENB LINE 
			 PHONE OH DATA DTMF RST CTRL AROUNDEXITFNS BANK)

      previous date: "30-Nov-84 17:10:18" {ERIS}<SPEECH>PROSE>COMMUNICARD.;1)


(* Copyright (c) 1984 by Xerox Corporation. All rights reserved.)

(PRETTYCOMPRINT COMMUNICARDCOMS)

(RPAQQ COMMUNICARDCOMS ((VARS BACKWARDS.LIMIT BANK BEEP.LIMIT CTRL DATA DTMF ENB HAND LINE MONITOR OH 
			      PHONE RDY RESPONSE.LIMIT RST SPEECH.THRESHOLD SPEECH1.LIMIT 
			      SPEECH2.LIMIT SPEECH3.LIMIT TONE)
	(FNS ANSWERING.MACHINE COMMUNICARD.SETUP CORRECT DIAL DIAL.DIGIT 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 TEST TEST.PLAY TEST.PLAY.FILE 
	     TEST.RECORD TEST.TONE TONE?)))

(RPAQQ BACKWARDS.LIMIT 5000)

(RPAQQ BANK 4)

(RPAQQ BEEP.LIMIT 2000)

(RPAQQ CTRL 630)

(RPAQQ DATA 631)

(RPAQQ DTMF 628)

(RPAQQ ENB 8)

(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 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 11:21")
    (while T
       do (BLOCK)
	  (if (RINGING?)
	      then (OFF.HOOK)
		   (PLAYIT SPEECH1.ARRAY SPEECH1.LIMIT)
		   (RECORDIT RESPONSE.ARRAY RESPONSE.LIMIT)
		   (PLAYIT SPEECH2.ARRAY SPEECH2.LIMIT)
		   (PLAYIT RESPONSE.ARRAY RESPONSE.LIMIT)
		   (PLAYIT BACKWARDS.ARRAY BACKWARDS.LIMIT)
		   (PLAYIT RESPONSE.ARRAY RESPONSE.LIMIT (QUOTE BACKWARDS))
		   (PLAYIT RESPONSE.ARRAY RESPONSE.LIMIT (QUOTE SLOW))
		   (PLAYIT RESPONSE.ARRAY RESPONSE.LIMIT (QUOTE FAST))
		   (PLAYIT RESPONSE.ARRAY RESPONSE.LIMIT (QUOTE SMEAR))
		   (PLAYIT SPEECH3.ARRAY SPEECH3.LIMIT)
		   (BLOCK 2000)
		   (ON.HOOK)
		   (BLOCK 2000])

(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])

(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 LIMIT OPTION)                               (* hdj " 2-Dec-84 11:31")
    (SELECTQ OPTION
	     [SLOW (for DATUM from 0 to (SUB1 LIMIT)
		      do (BUS.OUTPUT DATA (ELT ARRAY DATUM))
			 (BUS.OUTPUT DATA (ELT ARRAY DATUM]
	     [FAST (for DATUM from 0 to (SUB1 LIMIT) by 2
		      do (BUS.OUTPUT DATA (LRSH (IPLUS (ELT ARRAY DATUM)
						       (ELT ARRAY (ADD1 DATUM)))
						1]
	     [BACKWARDS (for DATUM from (SUB1 LIMIT) to 0 by -1 do (BUS.OUTPUT DATA (ELT ARRAY DATUM]
	     [SMEAR (for DATUM from 0 to (IDIFFERENCE LIMIT 2)
		       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 (SUB1 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 LIMIT)                                      (* hdj " 1-Dec-84 17:00")
    (BUS.OUTPUT DATA SPEECH.THRESHOLD)
    (for DATUM from 0 to (SUB1 LIMIT) 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])

(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 11:38")
    (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)
			 (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])
)
(PUTPROPS COMMUNICARD COPYRIGHT ("Xerox Corporation" 1984))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (1789 11284 (ANSWERING.MACHINE 1799 . 2628) (COMMUNICARD.SETUP 2630 . 2817) (CORRECT 
2819 . 3021) (DIAL 3023 . 3279) (DIAL.DIGIT 3281 . 3675) (HEX 3677 . 4068) (HEXCHAR 4070 . 4328) (
INIT.ANSWERING.MACHINE 4330 . 5105) (INP 5107 . 5229) (OFF.HAND 5231 . 5420) (OFF.HOOK 5422 . 5595) (
OFF.LINE 5597 . 5786) (OFF.PHONE 5788 . 5957) (ON.HAND 5959 . 6125) (ON.HOOK 6127 . 6313) (ON.LINE 
6315 . 6481) (ON.PHONE 6483 . 6673) (OUT 6675 . 6800) (PLAYIT 6802 . 7797) (POLL 7799 . 7931) (
RECORDIT 7933 . 8189) (RINGING? 8191 . 8352) (STATUS 8354 . 9228) (TEST 9230 . 9600) (TEST.PLAY 9602
 . 9843) (TEST.PLAY.FILE 9845 . 10157) (TEST.RECORD 10159 . 10552) (TEST.TONE 10554 . 11009) (TONE? 
11011 . 11282)))))
STOP