|
|
1.1 root 1: ; FP interpreter/compiler
2: ; Copyright (c) 1982 Scott B. Baden
3: ; Berkeley, California
4: ;
5: ; Copyright (c) 1982 Regents of the University of California.
6: ; All rights reserved. The Berkeley software License Agreement
7: ; specifies the terms and conditions for redistribution.
8: ;
9: (setq SCCS-runFp.l "@(#)runFp.l 5.1 (Berkeley) 5/31/85")
10:
11: ; FASL (or load if no object files exist) then run FP.
12: ; also set up user-top-level to 'runFp'.
13:
14: (include specials.l)
15:
16: (declare
17: (localf make_chset setup init addHelp initHelp)
18: (special user-top-level))
19:
20: (sstatus translink on)
21:
22: (mapcar 'load
23: '(fpMain handlers scanner parser codeGen primFp utils fpPP fpMeasures))
24:
25:
26: (defun runFp nil
27: (cond ((null (make_chset))
28: (patom "Illegal Character set")
29: (terpri)
30: (exit))
31:
32: (t
33: (setup) ; set up FP syntax funnies
34: (init)
35: (Tyi)
36: (msg N "FP, v. 4.2, (4/28/83)" N (B 6))))
37:
38: (setq user-top-level 'res_fp) ; from now on just resume FP--
39: ; no need for extensive initializations
40:
41: (signal 2 'break-resp)
42: (fpMain nil t)) ; invoke fp, exit to shell when done
43:
44: (defun res_fp nil ; restart fp after infinite recursion,
45: ; simpler initializatin than runFp.
46: (signal 2 'break-resp)
47: (msg N (B 6))
48: (setq in_def nil infile nil outfile nil fn_name 'tmp$$ in_buf nil)
49: (setq level 0)
50: (fpMain nil t))
51:
52:
53: (defun make_chset nil
54: (putprop 'fonts "+-,>!%&*/:=@{}()[]?~TF;#" 'asc)
55: (cond ((null (setq rsrvd (get 'fonts char_set))))
56: (t (setq e_rsrvd (explodec rsrvd)))))
57:
58:
59: (defun setup nil
60: (setq newreadtable (makereadtable nil))
61: (let ((readtable newreadtable))
62: (mapcar '(lambda (z) (setsyntax z 66)) (exploden rsrvd))
63: (setsyntax #/< 'macro 'readit))
64:
65: (setsyntax #/< 'macro 'readit))
66:
67:
68: (defun init nil
69: ; these are the only chars which may delimit numbers
70: ; (select operator)
71:
72: (setq num_delim$ '(#/, #/] #/@ #/: #/} 41 59 32 9 10 #/-))
73:
74: (setq timeIt nil)
75: (setq char_set (concat 'scan$ char_set))
76: (setq in_def nil)
77: (setq infile nil)
78: (setq outfile nil)
79: (setq fn_name 'tmp$$)
80: (setq in_buf nil)
81: (setq level 0) ; initialize level to 0
82: (setq TracedFns nil) ; just to make sure TracedFns is defined
83: (setq DynTraceFlg nil) ; default of no dynamic tracing
84:
85:
86:
87: ; These are the builtin function names
88:
89: (setq builtins
90: '(
91: out ; output fn - for debug only
92: tl ; left tail
93: id ; id
94: atom ; atom
95: eq ; equal
96: not ; not
97: and ; and
98: or ; or
99: xor ; xor
100: null ; null
101: iota ; counting sequence generator
102: ; (library functions)
103: sin
104: asin
105: cos
106: acos
107: log ; natural
108: exp
109: mod
110: ; (unary origin)
111: first ; the first element
112: last ; the last element
113: front ; all except last
114: pick ; get nth element
115: concat ; concat
116: pair ; makes pairs
117: split ; splits into two
118: reverse ; reverse
119: distl ; distribute left
120: distr ; distribute right
121: length ; length
122: trans ; transpose
123: while ; while
124: apndl ; append left
125: apndr ; append right
126: tlr ; right tail
127: rotl ; rotate left
128: rotr)) ; rotate right
129:
130: (initStats)
131: (initHelp))
132:
133: (defun addHelp (text cmd)
134: (putprop 'helpCmd text cmd))
135:
136: (defun initHelp nil
137: (addHelp "fsave <file> Same as csave except without pretty-printing" 'fsave)
138: (addHelp "cload <file> Load Lisp code from a file (may be compiled)" 'cload)
139: (addHelp "csave <file> Output Lisp code for all user-defined fns" 'csave)
140: (addHelp "debug on/off Turn debugger output on/off" 'debug)
141: (addHelp "lisp Exit to the lisp system (return with '^D')" 'help)
142: (addHelp "help This text" 'help)
143: (addHelp "script open/close/append [file] Open or close a script-file" 'script)
144: (addHelp "timer on/off Turn timer on/off" 'timing)
145: (addHelp "trace on/off <fn1> ... Start/Stop exec trace of <fn1> ..." 'trace)
146: (addHelp "stats on/off/reset/print [file] collect and output dynamic stats" 'stats)
147: (addHelp "fns List all functions" 'fns)
148: (addHelp "delete <fn1> ... Delete <fn1> ..." 'delete)
149: (addHelp "pfn <fn1> ... Print source text of <fn1> ..." 'pfn)
150: (addHelp "save <file> Save defined fns in <file>" 'save)
151: (addHelp "load <file> Redirect input from <file>" 'load)
152: )
153:
154:
155: (setq user-top-level 'runFp)
156: (setq char_set 'asc) ; set to the type of character set
157: ; desired at the moment only ascii (asc)
158: ; supported (no APL at this time).
159:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.