(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP")
(FILECREATED "17-Sep-87 13:47:38" |{MCS:MCS:STANFORD}<LANE>COURIEREVALSERVE.;5| 8426
changes to%: (FNS CES.ERRORN REMOTEEVAL REMOTEAPPLY \REMOTEEVAL CES.REMOTEEVAL CES.REMOTEAPPLY
)
(VARS COURIEREVALSERVECOMS)
(COURIERPROGRAMS EVAL)
previous date%: "30-Dec-85 13:17:43" |{MCS:MCS:STANFORD}<LANE>COURIEREVALSERVE.;1|)
(* "
Copyright (c) 1985, 1986, 1987 by Xerox Corporation & Stanford University. All rights reserved.
")
(PRETTYCOMPRINT COURIEREVALSERVECOMS)
(RPAQQ COURIEREVALSERVECOMS ((* Client Routines)
(FNS REMOTEEVAL REMOTEAPPLY)
(* Server Routines)
(FNS CES.REMOTEEVAL CES.REMOTEAPPLY CES.ERRORN)
(FILES COURIERSERVE)
(COURIERPROGRAMS EVAL)))
(* Client Routines)
(DEFINEQ
(REMOTEEVAL
[LAMBDA (FORM COURIERSTREAM NOERRORFLG) (* ; "Edited 17-Sep-87 13:12 by cdl")
(* DECLARATIONS%: (RECORD RESULT
(REJECTTYPE ERRORTYPE ERRORSTRING)))
(LET (STRING STREAM RESULT)
(DECLARE (SPECVARS STREAM STRING))
(if [LISTP (SETQ STRING (COURIER.CALL COURIERSTREAM 'EVAL 'EVAL (MKSTRING FORM T)
'RETURNERRORS]
then [with RESULT STRING (if ERRORSTRING
then [if (ZEROP (COURIER.FETCH (EVAL . ERRORN)
NUMBER OF ERRORSTRING))
then (OR NOERRORFLG (ERROR
"Remote evaluation error!"
FORM))
else (OR NOERRORFLG (ERROR (ERRORMESS ERRORSTRING]
else (OR NOERRORFLG (ERROR REJECTTYPE ERRORTYPE]
elseif [SETQ RESULT (RESETLST [RESETSAVE NIL `(CLOSEF? ,(SETQ STREAM (OPENSTRINGSTREAM
STRING
'INPUT]
(NLSETQ (READ STREAM]
then (CAR RESULT)
else (OR NOERRORFLG (ERROR "Unreadable remote evaluation result!" STRING])
(REMOTEAPPLY
[LAMBDA (FN ARGS COURIERSTREAM NOERRORFLG) (* ; "Edited 17-Sep-87 13:14 by cdl")
(* DECLARATIONS%: (RECORD RESULT
(REJECTTYPE ERRORTYPE ERRORSTRING)))
(LET (STRING STREAM RESULT)
(DECLARE (SPECVARS STRING STREAM))
(if [LISTP (SETQ STRING (COURIER.CALL COURIERSTREAM 'EVAL 'APPLY (MKSTRING FN T)
(for ARG in ARGS collect (MKSTRING ARG T))
'RETURNERRORS]
then [with RESULT STRING (if ERRORSTRING
then [if (ZEROP (COURIER.FETCH (EVAL . ERRORN)
NUMBER OF ERRORSTRING))
then (OR NOERRORFLG (ERROR "Remote apply error!"
(CONS FN ARGS)))
else (OR NOERRORFLG (ERROR (ERRORMESS ERRORSTRING]
else (OR NOERRORFLG (ERROR REJECTTYPE ERRORTYPE]
else (if [SETQ RESULT (RESETLST [RESETSAVE NIL `(CLOSEF? ,(SETQ STREAM (OPENSTRINGSTREAM
STRING
'INPUT]
(NLSETQ (READ STREAM]
then (CAR RESULT)
else (OR NOERRORFLG (ERROR "Unreadable remote apply result!" STRING])
)
(* Server Routines)
(DEFINEQ
(CES.REMOTEEVAL
[LAMBDA (COURIERSTREAM PROGRAM PROCEDURE STRING) (* ; "Edited 17-Sep-87 10:14 by cdl")
(LET (STREAM SEXPR)
(DECLARE (SPECVARS STREAM SEXPR))
(if [SETQ SEXPR (RESETLST [RESETSAVE NIL `(CLOSEF? ,(SETQ STREAM (OPENSTRINGSTREAM
STRING
'INPUT]
(NLSETQ (READ STREAM]
then (SETQ SEXPR (CAR SEXPR))
[if (SETQ SEXPR (ERRORSET SEXPR))
then `(RETURN ,(MKSTRING (CAR SEXPR)
T))
else `(ABORT REMOTE.EVAL.ERROR ,(CES.ERRORN]
else `(ABORT REMOTE.READ.ERROR ,(CES.ERRORN])
(CES.REMOTEAPPLY
[LAMBDA (COURIERSTREAM PROGRAM PROCEDURE FN ARGS) (* ; "Edited 17-Sep-87 11:12 by cdl")
(DECLARE (SPECVARS FN ARGS))
(LET (ERROR SEXPR STREAM)
(DECLARE (SPECVARS STREAM))
[SETQ ARGS (for ARG in ARGS declare%: (SPECVARS ARG)
collect [SETQ SEXPR (RESETLST
[RESETSAVE NIL `(CLOSEF? ,(SETQ STREAM
(OPENSTRINGSTREAM ARG
'INPUT]
(NLSETQ (READ STREAM]
(if SEXPR
then (CAR SEXPR)
else (SETQ ERROR 'REMOTE.READ.ERROR)
(RETURN]
(if ERROR
then `(ABORT ,ERROR ,(CES.ERRORN))
else (if [SETQ FN (RESETLST [RESETSAVE NIL `(CLOSEF? ,(SETQ STREAM (OPENSTRINGSTREAM
FN
'INPUT]
(NLSETQ (READ STREAM]
then (SETQ FN (CAR FN))
[if (SETQ SEXPR (NLSETQ (APPLY FN ARGS)))
then `(RETURN ,(MKSTRING (CAR SEXPR)
T))
else `(ABORT REMOTE.APPLY.ERROR ,(CES.ERRORN]
else `(ABORT REMOTE.READ.ERROR ,(CES.ERRORN])
(CES.ERRORN
[LAMBDA NIL (* ; "Edited 17-Sep-87 13:41 by cdl")
(* Minimal functionality, just for
backward compatibility)
(COURIER.CREATE (EVAL . ERRORN)
NUMBER ← (CONSTANT (ZERO))
EXPR ← (CONSTANT null])
)
(FILESLOAD COURIERSERVE)
(COURIERPROGRAM EVAL (1105 0)
TYPES
[(SEXPR STRING)
(FN STRING)
(ARGS (SEQUENCE SEXPR))
(ERRORN (RECORD (NUMBER CARDINAL)
(EXPR SEXPR]
PROCEDURES
((EVAL 0 (SEXPR)
RETURNS
(SEXPR)
REPORTS
(REMOTE.EVAL.ERROR REMOTE.READ.ERROR)
IMPLEMENTEDBY CES.REMOTEEVAL)
(APPLY 1 (FN ARGS)
RETURNS
(SEXPR)
REPORTS
(REMOTE.APPLY.ERROR REMOTE.READ.ERROR)
IMPLEMENTEDBY CES.REMOTEAPPLY))
ERRORS
((REMOTE.EVAL.ERROR 0 (ERRORN))
(REMOTE.APPLY.ERROR 1 (ERRORN))
(REMOTE.READ.ERROR 2 (ERRORN))))
(PUTPROPS COURIEREVALSERVE COPYRIGHT ("Xerox Corporation & Stanford University" 1985 1986 1987))
(DECLARE%: DONTCOPY
(FILEMAP (NIL (985 4515 (REMOTEEVAL 995 . 2731) (REMOTEAPPLY 2733 . 4513)) (4544 7562 (CES.REMOTEEVAL
4554 . 5419) (CES.REMOTEAPPLY 5421 . 7137) (CES.ERRORN 7139 . 7560)))))
STOP