(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
(FILECREATED "30-Oct-87 11:17:12" {ERINYES}<LISPUSERS>LYRIC>CHATSERVER-NS.;4 8192   

      changes to%:  (VARS CHATSERVER-NSCOMS) (FNS \NSCHAT.BIN MAKE.NS.CHAT.CONNECTION)

      previous date%: "30-Oct-87 10:50:52" {ERINYES}<LISPUSERS>LYRIC>CHATSERVER-NS.;3)


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

(PRETTYCOMPRINT CHATSERVER-NSCOMS)

(RPAQQ CHATSERVER-NSCOMS ((FNS MAKE.NS.CHAT.CONNECTION NS.CHAT.SERVE NSCHAT.SERVER.ATTENTION NSCHAT.SERVER.OUTPUTABORTED NSCHAT.SERVER.WHENCLOSED SPP.EOMP \NSCHAT.BIN \REMOTE.EOFP \REMOTE.PEEKBIN \REMOTE.READP) (FILES COURIERSERVE CHATSERVER) (P (COURIER.START.SERVER)) (DECLARE%: EVAL@COMPILE DONTCOPY (FILES (SOURCE) MODARITH) (FILES (LOADCOMP) LLNS SPP)) (FUNCTIONS CHECK) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) (LAMA MAKE.NS.CHAT.CONNECTION))))
)
(DEFINEQ

(MAKE.NS.CHAT.CONNECTION
  [CL:LAMBDA (CSTREAM CPROG CPROC PARAMETERS TRANSPORT WAITTIME CREDENTIALS VERIFIER)
                                                          (* ; "Edited 30-Oct-87 10:40 by Masinter")

         (LET ((OUTPUTSTREAM (SPPOUTPUTSTREAM CSTREAM)))
              (CL:UNWIND-PROTECT (PROGN (with SPPCON (fetch SPP.CONNECTION of CSTREAM)
                                              (SETQ SPPEOMONFORCEOUT T)
                                              (SETQ SPPATTENTIONFN (FUNCTION NSCHAT.SERVER.ATTENTION)
                                               )
                                              (SETQ SPPOUTPUTABORTEDFN (FUNCTION 
                                                                        NSCHAT.SERVER.OUTPUTABORTED))
                                              (SETQ SPPWHENCLOSEDFN (FUNCTION CHATSERVERWHENCLOSEDFN)
                                               ))
                                        (with STREAM CSTREAM (SETQ DEVICE
                                                              (create FDEV
                                                                     DEVICENAME ← 'NSCHATDEVICE 
                                                             (* ; "")

                                                                     PEEKBIN ← #'\REMOTE.PEEKBIN 
                                                             (* ; "")

                                                                     READP ← #'\REMOTE.READP 
                                                             (* ; "")

                                                                     EOFP ← #'\REMOTE.EOFP 
                                                             (* ; "")

                                                                     GETEOFPTR ←
                                                                     (FUNCTION NILL)
                                                             (* ; "")

                                                                     BIN ← '\NSCHAT.BIN using DEVICE)
                                                              )
                                              (SETQ STRMBINFN '\NSCHAT.BIN))
          
          (* ;; "return the value, and then ")

                                        [COURIER.RETURN CSTREAM CPROG CPROC '((0 0]
                                        (SPP.FORCEOUTPUT OUTPUTSTREAM)
                                        (SPP.SENDATTENTION CSTREAM 209)
                                        (PROCESS.NAME (THIS.PROCESS)
                                               'CHAT.SERVER)
                                        (SPP.DSTYPE OUTPUTSTREAM 192)
                                        (CHATSERVEROPENFN CSTREAM OUTPUTSTREAM))
          
          (* ;; "on the way out. Note that these will have the property of also killing the process")

                     (CLOSEF? CSTREAM)
                     (CLOSEF? OUTPUTSTREAM)
                     (RESET])

(NS.CHAT.SERVE
(LAMBDA (INPUTSTREAM OUTPUTSTREAM OPENFN WHENCLOSEDFN) (* lmm " 7-Jan-86 13:21") (PROG (PARAMETERS TRANSPORT WAITTIME CREDENTIALS VERIFIER) (repeatuntil (SPP.READP INPUTSTREAM) do (BLOCK)) (for I to 4 do (* Echo Courier version number) (BOUT OUTPUTSTREAM (BIN INPUTSTREAM))) (SPP.SENDEOM OUTPUTSTREAM) (SPP.CLEAREOM INPUTSTREAM) (repeatuntil (SPP.READP INPUTSTREAM) do (BLOCK)) (for I to 12 do (* Courier protocol bytes |...|) (BIN INPUTSTREAM)) (SETQ PARAMETERS (COURIER.READ INPUTSTREAM (QUOTE GAP) (QUOTE SessionParameterObject))) (SETQ TRANSPORT (COURIER.READ INPUTSTREAM (QUOTE GAP) (QUOTE Sequence.TransportObject))) (SETQ WAITTIME (COURIER.READ INPUTSTREAM (QUOTE GAP) (QUOTE WaitTime))) (SETQ CREDENTIALS (COURIER.READ INPUTSTREAM (QUOTE GAP) (QUOTE credentials))) (SETQ VERIFIER (COURIER.READ INPUTSTREAM (QUOTE GAP) (QUOTE verifier))) (* Courier RETURN command) (BOUT OUTPUTSTREAM 0) (BOUT OUTPUTSTREAM 2) (BOUT OUTPUTSTREAM 0) (BOUT OUTPUTSTREAM 0) (COURIER.WRITE OUTPUTSTREAM (QUOTE (0 0)) (QUOTE GAP) (QUOTE SessionHandle)) (SPP.SENDEOM OUTPUTSTREAM) (SPP.FLUSH.TO.EOF INPUTSTREAM) (with STREAM OUTPUTSTREAM (SETQ EOLCONVENTION 2)) (with STREAM INPUTSTREAM (SETQ IMAGEDATA OUTPUTSTREAM) (SETQ DEVICE (create FDEV DEVICENAME ← (QUOTE NSCHAT) BIN ← (FUNCTION \REMOTE.BIN) PEEKBIN ← (FUNCTION \REMOTE.PEEKBIN) READP ← (FUNCTION \REMOTE.READP) EOFP ← (FUNCTION \REMOTE.EOFP) GETEOFPTR ← (FUNCTION NILL) using DEVICE)) (SETQ STRMBINFN (FUNCTION \REMOTE.BIN))) (SPP.CLEAREOM INPUTSTREAM T) (SPP.CLEARATTENTION INPUTSTREAM T) (CHATSERVEROPENFN INPUTSTREAM OUTPUTSTREAM) (SPP.CLOSE INPUTSTREAM T)))
)

(NSCHAT.SERVER.ATTENTION
(LAMBDA (X) (* ; "Edited  6-Oct-87 13:25 by Masinter") (SPP.CLEARATTENTION X T) (LET (BYTE) (SELECTQ (SETQ BYTE (BIN X)) (209 (* ; "attention 209, whatever that is") NIL) (PRINTOUT PROMPTWINDOW T "attention byte " BYTE " recieved."))))
)

(NSCHAT.SERVER.OUTPUTABORTED
(LAMBDA (STREAM X Y Z) (* lmm "10-Jan-86 00:32") NIL))

(NSCHAT.SERVER.WHENCLOSED
(LAMBDA (STREAM X Y Z) (* lmm " 9-Jan-86 18:06") (CLOSEF? (SPPOUTPUTSTREAM STREAM))))

(SPP.EOMP
(LAMBDA (STREAM) (* ; "Edited  6-Oct-87 13:04 by Masinter") (EQ (fetch SPPEOFBITS of STREAM) \SPPFLAG.EOM))
)

(\NSCHAT.BIN
(LAMBDA (STREAM) (* ; "Edited 30-Oct-87 10:35 by Masinter") (until (\REMOTE.READP STREAM) do (BLOCK)) (\BUFFERED.BIN STREAM))
)

(\REMOTE.EOFP
(LAMBDA (STREAM) (* ; "Edited  6-Oct-87 11:37 by Masinter") (* ;; "terminal EOF: never") NIL))

(\REMOTE.PEEKBIN
(LAMBDA (STREAM NOERRORFLG) (* ; "Edited  6-Oct-87 11:35 by Masinter") (* ;; "SPP peek: ignore EOM") (until (SPP.READP STREAM) do (if (SPP.EOMP STREAM) then (SPP.CLEAREOM STREAM T)) (BLOCK)) (PROG ((BYTE (\BUFFERED.PEEKBIN STREAM NOERRORFLG))) (if (SPP.EOMP STREAM) then (SPP.CLEAREOM STREAM T)) (RETURN BYTE)))
)

(\REMOTE.READP
(LAMBDA (STREAM) (* ; "Edited  6-Oct-87 14:06 by Masinter") (* ;; " termal READP: ignore EOM") (PROG NIL RETRY (COND ((SPP.READP STREAM) (RETURN T)) ((SPP.EOMP STREAM) (SPP.CLEAREOM STREAM) (GO RETRY)) (T (RETURN NIL)))))
)
)
(FILESLOAD COURIERSERVE CHATSERVER)
(COURIER.START.SERVER)
(DECLARE%: EVAL@COMPILE DONTCOPY 
(FILESLOAD (SOURCE) MODARITH)

(FILESLOAD (LOADCOMP) LLNS SPP)
)
(DEFMACRO CHECK (X) (BQUOTE (CL:ASSERT (\, X))))
(DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS 

(ADDTOVAR NLAMA )

(ADDTOVAR NLAML )

(ADDTOVAR LAMA MAKE.NS.CHAT.CONNECTION)
)
(PRETTYCOMPRINT CHATSERVER-NSCOMS)

(RPAQQ CHATSERVER-NSCOMS ((FNS MAKE.NS.CHAT.CONNECTION NS.CHAT.SERVE NSCHAT.SERVER.ATTENTION NSCHAT.SERVER.OUTPUTABORTED NSCHAT.SERVER.WHENCLOSED SPP.EOMP \NSCHAT.BIN \REMOTE.EOFP \REMOTE.PEEKBIN \REMOTE.READP) (FILES COURIERSERVE CHATSERVER) (P (COURIER.START.SERVER)) (DECLARE%: EVAL@COMPILE DONTCOPY (FILES (SOURCE) MODARITH) (FILES (LOADCOMP) LLNS SPP)) (FUNCTIONS CHECK) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) (LAMA))))
)
(DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS 

(ADDTOVAR NLAMA )

(ADDTOVAR NLAML )

(ADDTOVAR LAMA )
)
(PUTPROPS CHATSERVER-NS COPYRIGHT ("Xerox Corporation" 1987))
(DECLARE%: DONTCOPY
  (FILEMAP (NIL (952 7096 (MAKE.NS.CHAT.CONNECTION 962 . 4029) (NS.CHAT.SERVE 4031 . 5655) (
NSCHAT.SERVER.ATTENTION 5657 . 5923) (NSCHAT.SERVER.OUTPUTABORTED 5925 . 6012) (
NSCHAT.SERVER.WHENCLOSED 6014 . 6129) (SPP.EOMP 6131 . 6254) (\NSCHAT.BIN 6256 . 6400) (\REMOTE.EOFP 
6402 . 6514) (\REMOTE.PEEKBIN 6516 . 6850) (\REMOTE.READP 6852 . 7094)))))
STOP