/runlibfile where { pop }{ /runlibfile { run } def } ifelse % (types.ps) runlibfile (reader.ps) runlibfile (printer.ps) runlibfile % read /_readline { print flush (%stdin) (r) file 99 string readline } def /READ { /str exch def str read_str } def % eval /EVAL { 2 dict begin % just "return" the "ast" /env exch def /ast exch def ast end } def % print /PRINT { true _pr_str } def % repl /REP { READ (stub env) EVAL PRINT } def % repl loop { %loop (user> ) _readline not { exit } if % exit if EOF { %try REP print (\n) print } stopped { (Error: ) print get_error_data false _pr_str print (\n) print $error /newerror false put $error /errorinfo null put clear cleardictstack } if } bind loop (\n) print % final newline before exit for cleanliness quit