1*12092Sbaden (setq SCCS-runFp.l "@(#)runFp.l 1.2 04/29/83") 212071Sbaden ; FP interpreter/compiler 312071Sbaden ; Copyright (c) 1982 Scott B. Baden 412071Sbaden ; Berkeley, California 512071Sbaden 612071Sbaden ; FASL (or load if no object files exist) then run FP. 712071Sbaden ; also set up user-top-level to 'runFp'. 812071Sbaden 912071Sbaden (include specials.l) 1012071Sbaden 1112071Sbaden (declare 1212071Sbaden (localf make_chset setup init addHelp initHelp) 1312071Sbaden (special user-top-level)) 1412071Sbaden 1512071Sbaden (sstatus translink on) 1612071Sbaden 1712071Sbaden (mapcar 'load 1812071Sbaden '(fpMain handlers scanner parser codeGen primFp utils fpPP fpMeasures)) 1912071Sbaden 2012071Sbaden 2112071Sbaden (defun runFp nil 2212071Sbaden (cond ((null (make_chset)) 2312071Sbaden (patom "Illegal Character set") 2412071Sbaden (terpri) 2512071Sbaden (exit)) 2612071Sbaden 2712071Sbaden (t 2812071Sbaden (setup) ; set up FP syntax funnies 2912071Sbaden (init) 3012071Sbaden (Tyi) 31*12092Sbaden (msg N "FP, v. 4.2, (4/28/83)" N (B 6)))) 3212071Sbaden 3312071Sbaden (setq user-top-level 'res_fp) ; from now on just resume FP-- 3412071Sbaden ; no need for extensive initializations 3512071Sbaden 3612071Sbaden (signal 2 'break-resp) 3712071Sbaden (fpMain nil t)) ; invoke fp, exit to shell when done 3812071Sbaden 3912071Sbaden (defun res_fp nil ; restart fp after infinite recursion, 4012071Sbaden ; simpler initializatin than runFp. 4112071Sbaden (signal 2 'break-resp) 4212071Sbaden (msg N (B 6)) 4312071Sbaden (setq in_def nil infile nil outfile nil fn_name 'tmp$$ in_buf nil) 4412071Sbaden (setq level 0) 4512071Sbaden (fpMain nil t)) 4612071Sbaden 4712071Sbaden 4812071Sbaden (defun make_chset nil 4912071Sbaden (putprop 'fonts "+-,>!%&*/:=@{}()[]?~TF;#" 'asc) 5012071Sbaden (cond ((null (setq rsrvd (get 'fonts char_set)))) 5112071Sbaden (t (setq e_rsrvd (explodec rsrvd))))) 5212071Sbaden 5312071Sbaden 5412071Sbaden (defun setup nil 5512071Sbaden (setq newreadtable (makereadtable nil)) 5612071Sbaden (let ((readtable newreadtable)) 5712071Sbaden (mapcar '(lambda (z) (setsyntax z 66)) (exploden rsrvd)) 5812071Sbaden (setsyntax #/< 'macro 'readit)) 5912071Sbaden 6012071Sbaden (setsyntax #/< 'macro 'readit)) 6112071Sbaden 6212071Sbaden 6312071Sbaden (defun init nil 6412071Sbaden ; these are the only chars which may delimit numbers 6512071Sbaden ; (select operator) 6612071Sbaden 6712071Sbaden (setq num_delim$ '(#/, #/] #/@ #/: #/} 41 59 32 9 10 #/-)) 6812071Sbaden 6912071Sbaden (setq timeIt nil) 7012071Sbaden (setq char_set (concat 'scan$ char_set)) 7112071Sbaden (setq in_def nil) 7212071Sbaden (setq infile nil) 7312071Sbaden (setq outfile nil) 7412071Sbaden (setq fn_name 'tmp$$) 7512071Sbaden (setq in_buf nil) 7612071Sbaden (setq level 0) ; initialize level to 0 7712071Sbaden (setq TracedFns nil) ; just to make sure TracedFns is defined 7812071Sbaden (setq DynTraceFlg nil) ; default of no dynamic tracing 7912071Sbaden 8012071Sbaden 8112071Sbaden 8212071Sbaden ; These are the builtin function names 8312071Sbaden 8412071Sbaden (setq builtins 8512071Sbaden '( 8612071Sbaden out ; output fn - for debug only 8712071Sbaden tl ; left tail 8812071Sbaden id ; id 8912071Sbaden atom ; atom 9012071Sbaden eq ; equal 9112071Sbaden not ; not 9212071Sbaden and ; and 9312071Sbaden or ; or 9412071Sbaden xor ; xor 9512071Sbaden null ; null 9612071Sbaden iota ; counting sequence generator 9712071Sbaden ; (library functions) 9812071Sbaden sin 9912071Sbaden asin 10012071Sbaden cos 10112071Sbaden acos 10212071Sbaden log ; natural 10312071Sbaden exp 10412071Sbaden mod 10512071Sbaden ; (unary origin) 10612071Sbaden first ; the first element 10712071Sbaden last ; the last element 10812071Sbaden front ; all except last 10912071Sbaden pick ; get nth element 11012071Sbaden concat ; concat 11112071Sbaden pair ; makes pairs 11212071Sbaden split ; splits into two 11312071Sbaden reverse ; reverse 11412071Sbaden distl ; distribute left 11512071Sbaden distr ; distribute right 11612071Sbaden length ; length 11712071Sbaden trans ; transpose 11812071Sbaden while ; while 11912071Sbaden apndl ; append left 12012071Sbaden apndr ; append right 12112071Sbaden tlr ; right tail 12212071Sbaden rotl ; rotate left 12312071Sbaden rotr)) ; rotate right 12412071Sbaden 12512071Sbaden (initStats) 12612071Sbaden (initHelp)) 12712071Sbaden 12812071Sbaden (defun addHelp (text cmd) 12912071Sbaden (putprop 'helpCmd text cmd)) 13012071Sbaden 13112071Sbaden (defun initHelp nil 13212071Sbaden (addHelp "fsave <file> Same as csave except without pretty-printing" 'fsave) 13312071Sbaden (addHelp "cload <file> Load Lisp code from a file (may be compiled)" 'cload) 13412071Sbaden (addHelp "csave <file> Output Lisp code for all user-defined fns" 'csave) 13512071Sbaden (addHelp "debug on/off Turn debugger output on/off" 'debug) 13612071Sbaden (addHelp "lisp Exit to the lisp system (return with '^D')" 'help) 13712071Sbaden (addHelp "help This text" 'help) 13812071Sbaden (addHelp "script open/close/append [file] Open or close a script-file" 'script) 13912071Sbaden (addHelp "timer on/off Turn timer on/off" 'timing) 14012071Sbaden (addHelp "trace on/off <fn1> ... Start/Stop exec trace of <fn1> ..." 'trace) 14112071Sbaden (addHelp "stats on/off/reset/print [file] collect and output dynamic stats" 'stats) 14212071Sbaden (addHelp "fns List all functions" 'fns) 14312071Sbaden (addHelp "delete <fn1> ... Delete <fn1> ..." 'delete) 14412071Sbaden (addHelp "pfn <fn1> ... Print source text of <fn1> ..." 'pfn) 14512071Sbaden (addHelp "save <file> Save defined fns in <file>" 'save) 14612071Sbaden (addHelp "load <file> Redirect input from <file>" 'load) 14712071Sbaden ) 14812071Sbaden 14912071Sbaden 15012071Sbaden (setq user-top-level 'runFp) 15112071Sbaden (setq char_set 'asc) ; set to the type of character set 15212071Sbaden ; desired at the moment only ascii (asc) 15312071Sbaden ; supported (no APL at this time). 15412071Sbaden 155