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;