PACKET lisp (* Autor: J.Durchholz , P. Heyderhoff *) (* Datum: 09.05.1984 *) DEFINES (* Version 1.7.2 *) start lisp system, lisp heap, insert lisp, run lisp, run lisp again, lisp: SYM VAR run again pointer :: nil; DATASPACE VAR insert heap :: nil space; PROC start lisp system (DATASPACE CONST heap): enable stop; initialize lisp system (heap); forget (insert heap); insert heap := heap END PROC start lisp system; PROC start lisp system (DATASPACE CONST heap, FILE VAR f): start lisp system (heap); input (f); WHILE NOT eof (f) REP TEXT VAR name; get (f, name); SYM CONST s :: new atom (name); get (f, name); SYM CONST property name :: new atom (name); IF NOT null (property name) THEN SYM VAR property; get (f, property); add property (s, property name, property) FI; PER END PROC start lisp system; PROC start lisp system (FILE VAR f): create lisp system (f, insert heap) END PROC start lisp system; DATASPACE PROC lisp heap: insert heap END PROC lisp heap; DATASPACE VAR run heap :: nil space; PROC insert lisp: insert lisp (last param) END PROC insert lisp; PROC insert lisp (TEXT CONST file name): interpret (insert heap, file name) END PROC insert lisp; PROC run lisp: run lisp (last param) END PROC run lisp; PROC run lisp (TEXT CONST file name): forget (run heap); run heap := insert heap; interpret (run heap, file name) END PROC run lisp; DATASPACE VAR do heap :: nil space, do file :: nil space; PROC interpret (DATASPACE CONST heap, TEXT CONST file name): enable stop; FILE VAR f :: sequential file (input, file name); interpret (heap, f) END PROC interpret; PROC interpret (DATASPACE CONST heap, FILE VAR f): initialize lisp system (heap); get (f, run again pointer); add property (new atom ("program"), new atom ("APVAL"), run again pointer); put (evalquote (run again pointer)) END PROC interpret; PROC run lisp again: put (evalquote (run again pointer)) END PROC run lisp again; PROC get ausdruck: enable stop; get (ausdruck) END PROC get ausdruck; SYM VAR ausdruck; PROC lisp: (* HAUPT TESTPROGRAMM FUER LISP Heyderhoff 25.1.83 *) IF NOT exists ("LISP HEAP") THEN FILE VAR bootstrap :: sequential file (input, "lisp.bootstrap"); create lisp system (bootstrap, new ("LISP HEAP")); verbose lisp output (TRUE); FI; FILE VAR out :: notefile; output (out); SYM VAR work; command dialogue(FALSE); forget ("LISP INPUT"); command dialogue(TRUE); (* bildlaenge(23); *) (* EUMEL 1.65 *) disable stop; REP get (ausdruck); IF is error THEN handle error ELSE output (out); work := evalquote (ausdruck); IF is error THEN handle error ELSE put (out, work) FI FI PER . handle error: IF text (error message, 18) = "halt from terminal" THEN enable stop ELSE put (out, error message); put ( error message); pause(20); clear error; FI . END PROC lisp; END PACKET lisp;