|
|
1.1 ! root 1: ;--- file: complra.l ! 2: (include "compmacs.l") ! 3: ! 4: (def put ! 5: (macro (x) ! 6: ((lambda (atm prp arg) ! 7: `(progn (putprop ,atm ,arg ,prp) ,atm)) ! 8: (cadr x) (caddr x) (cadddr x)))) ! 9: ! 10: ! 11: ! 12: ; register allocation and important addresses for compiled code ! 13: ; ! 14: (setq np-reg 'r6 ;points one beyond top stack value ! 15: lbot-reg 'r7 ;current value of lbot ! 16: ln-reg 'r8 ;address of linker ! 17: olbot-reg 'r10 ;base of args to this fcn ! 18: bnp-reg 'r11 ;bind np ! 19: bnp-val '"*-32(r8)" ;value of global var bnp ! 20: i-mov 'movl ;stacking instruction for namestack ! 21: i-clr 'clrl ;clear namestack ! 22: qfuncl '"*-28(r8)" ;addr of qfuncl ! 23: ) ! 24: ! 25: ; these are the short cut places to call when you want to call ! 26: ; a non system function with 4 or less arguments ! 27: ! 28: (setplist 'qfs '(0 "*-8(r8)" 1 "*-12(r8)" 2 "*-16(r8)" ! 29: 3 "*-20(r8)" 4 "*-24(r8)")) ! 30: ! 31: (setq faslflag nil) ! 32: ! 33: (declare (special w-vars w-labs w-ret w-name w-bv w-atmt cm-alv v-cnt)) ! 34: ! 35: ! 36: ! 37: ! 38: (cond ((lessp (opval 'pagelimit) 2000) (opval 'pagelimit 2000))) ! 39: ! 40: ! 41: ! 42: (def Gensym (lambda (x) ! 43: (prog (e) ! 44: (setq e (gensym (cond (x) (t 'L)))) ! 45: (setq twa-list (cons e twa-list)) ! 46: (return e)))) ! 47: ! 48: (def cvt (lambda (a) ! 49: (prog (l) ! 50: (setq l (quotient a 2704)) ! 51: (setq a (difference a (times l 2704))) ! 52: (setq l (list l (quotient a 52) (mod a 52))) ! 53: (return (mapcar '(lambda (x) (nthelem ! 54: (add1 x) ! 55: '(A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ! 56: a b c d e f g h i j k l m n o p q r s t u v w x y z))) l))))) ! 57: ! 58: (def nth ! 59: (lambda (x n) ! 60: (cond ((equal n 0) x) ! 61: ((lessp n 0) ! 62: (prog (m lst) ! 63: (setq m (difference 0 n)) ! 64: (setq x (reverse x)) ! 65: lp (cond ((zerop m) (return lst))) ! 66: (setq lst (cons (car x) lst)) ! 67: (setq x (cdr x)) ! 68: (setq m (sub1 m)) ! 69: (go lp))) ! 70: (t (nth (cdr x) (sub1 n)))))) ! 71: ! 72: (def cleanup (lambda nil ! 73: (mapc 'rematom twa-list) ! 74: (setq twa-list nil))) ! 75: ! 76: (def mylogor (lambda (x y) ! 77: (boole 7 x y))) ! 78: ! 79: (def leftshift ! 80: (lambda (x cnt) ! 81: (prog () ! 82: loop (cond ((zerop cnt) (return x)) ! 83: ((lessp cnt 0) ! 84: (setq x (quotient x 2)) ! 85: (setq cnt (add1 cnt))) ! 86: (t (setq x (times x 2)) (setq cnt (sub1 cnt)))) ! 87: (go loop)))) ! 88: ! 89: (def flag ! 90: (lambda (atm flg) ! 91: (cond ((put atm flg t) atm)))) ! 92: ! 93: (def ifflag ! 94: (lambda (atm flg) ! 95: (cond ((and (and (atom atm) (not (numberp atm))) ! 96: (get atm flg)) ! 97: t)))) ! 98: ! 99: (def unflag ! 100: (lambda (atm flg) ! 101: (put atm flg nil))) ! 102: ! 103: ! 104: ! 105: ;--- chain - a : an atom ! 106: ; returns a if a has the form cxr where x is an elt of {a d} ! 107: ; else returns nil. ! 108: ; ! 109: (def chain ! 110: (lambda (a) ! 111: (prog (expl) ! 112: (cond ((lessp (flatsize a) 3) (return nil))) ! 113: (setq expl (explode a)) ! 114: (cond ((not (eq (car expl) 'c)) (return nil))) ! 115: loop (setq expl (cdr expl)) ! 116: (cond ((eq (car expl) 'a) (go loop)) ! 117: ((eq (car expl) 'd) (go loop)) ! 118: ((and (eq (car expl) 'r) (null (cdr expl))) (return a)) ! 119: (t (return nil)))))) ! 120: ! 121: ;--- ismacro - a : atom name found in the functional position ! 122: ; returns the body of the macro if a is the name of a macro, else ! 123: ; return nil. ! 124: ; ! 125: (def ismacro ! 126: (lambda (a) ! 127: (prog (x) ! 128: (cond ((not (symbolp a)) (return nil)) ! 129: ((setq x (assoc a k-macros)) (return (cadr x)))) ! 130: (setq x (getd a)) ! 131: (cond ((and (bcdp x) (eq (getdisc x) 'macro)) (return x)) ! 132: ((and (dtpr x) (eq (car x) 'macro)) (return x)))))) ! 133: ! 134: ;--- isnlam - a : atom found in the functional position ! 135: ; return the body of the nlambda if a names an nlambda, ! 136: ; else return nil ! 137: ; ! 138: (def isnlam ! 139: (lambda (a) ! 140: (prog (x) ! 141: (cond ((not (symbolp a)) (return nil))) ! 142: (cond ((setq x (assoc a k-nlams)) (return (cadr x)))) ! 143: (setq x (getd a)) ! 144: (cond ((and (dtpr x) (eq (car x) 'nlambda)) (return x)) ! 145: ((and (bcdp x) (eq (getdisc x) 'nlambda)) (return x)))))) ! 146: ! 147: (def ucar ! 148: (lambda (arg) ! 149: (cond ((dtpr arg) (car arg)) ! 150: ((numberp arg) arg) ! 151: ((getd arg) arg) ! 152: (t (get arg '*car))))) ! 153: ! 154: ;--- defsysf - funname : lisp function name ! 155: ; - inname : internal system name ! 156: ; We declare that funname is a system type function with ! 157: ; the address of the c-code for it at inname. Thus we ! 158: ; can call this function directly without going through ! 159: ; the oblist. This type of optimization can be turned off ! 160: ; by disabling this routine (if debuggin is desired) ! 161: ; ! 162: (def defsysf ! 163: (lambda (funname inname) ! 164: (putprop funname inname 'x-sysf))) ; indicate of prop list ! 165: ! 166: (def $pr$ ! 167: (macro (x) ! 168: (list 'patom (cadr x) 'vp-sfile))) ! 169: ! 170: (def emit1 ! 171: (lambda (a) ! 172: (aprint a) ! 173: ($terpri))) ! 174: ! 175: (def emit2 ! 176: (lambda (a b) ! 177: (aprint a) ! 178: ($pr$ '" ") ! 179: (aprint b) ! 180: ($terpri))) ! 181: ! 182: (def emit3 ! 183: (lambda (a b c) ! 184: (aprint a) ! 185: ($pr$ '" ") ! 186: (aprint b) ! 187: ($pr$ '\,) ! 188: (aprint c) ! 189: ($terpri))) ! 190: ! 191: (def emit4 ! 192: (lambda (a b c d) ! 193: (aprint a) ! 194: ($pr$ '" ") ! 195: (aprint b) ! 196: ($pr$ '\,) ! 197: (aprint c) ! 198: ($pr$ '\,) ! 199: (aprint d) ! 200: ($terpri))) ! 201: ! 202: (def aprint ! 203: (lambda (foo) ! 204: (prog nil ! 205: loop (cond ((null foo) (return)) ! 206: ((atom foo) ($pr$ foo) (return)) ! 207: (t ($pr$ (car foo)) ! 208: (setq foo (cdr foo)))) ! 209: (go loop)))) ! 210: ! 211: (def $terpri (lambda () (terpr vp-sfile))) ! 212:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.