PACKET lisp (* Autor: J.Durchholz , P. Heyderhoff *)
(* Datum: 09.05.1984 *)
DEFINES (* Version 1.7.2 *)
(* Ă„nderung: notebook *)
(* 13.3.86 I. Ley *)
(* Ă„nderung: start lisp system *)
(* 25.3.86 I. Ley *)
(* Anpassung an ELAN-Compiler Version 1.7.5 *)
(* 8.4.86 I. Ley *)
start lisp system,
lisp heap,
insert lisp,
run lisp,
run lisp again,
lisp,
break 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):
enable stop;
create lisp system (f, heap);
forget (insert heap);
insert heap := heap
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;
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;
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
work := evalquote (ausdruck);
IF is error THEN handle error
ELSE note (work)
FI
FI
PER .
handle error:
IF text (error message, 18) = "halt from terminal" THEN
enable stop
ELSE
note (error message);
put ( error message); pause(20);
clear error;
FI .
END PROC lisp;
PROC break lisp:
break;
page;
quit;
FILE VAR in :: sequential file (modify, "LISP INPUT"),
out :: notefile; modify (out);
headline (out,"LISP OUTPUT");
headline (in, "LISP INPUT");
noteedit (in);
END PROC break lisp
END PACKET lisp;