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