|
|
1.1 ! root 1: ! 2: ;----------- macros for the compiler ------------- ! 3: ! 4: ! 5: (setq sectioncamacsid "@(#)camacs.l 5.2 11/11/80") ; id for SCCS ! 6: ! 7: ; Copyright (c) 1980 , The Regents of the University of California. ! 8: ; All rights reserved. ! 9: ; author: j. foderaro ! 10: ! 11: (declare (macros t)) ; compile and save macros ! 12: ! 13: ;--- comp-err ! 14: ; comp-warn ! 15: ; comp-note ! 16: ; comp-gerr ! 17: ; these are the compiler message producing macros. The form is ! 18: ; (comp-xxxx val1 val2 val3 ... valn) , all values are printed according ! 19: ; to this scheme. If vali is an atom, it is patomed, if vali is a ! 20: ; list, it is evaluated and printed. If vali is N a newline is printed ! 21: ; ! 22: ; furthermore ! 23: ; the name of the current function is printed first ! 24: ; after comp-err prints the message, it does a throw to Comp-err . ! 25: ; errors are preceeded by Error: ! 26: ; warnings by %Warning: and ! 27: ; notes by %Note: ! 28: ; The message is sent to the message file ! 29: ; ! 30: (def comp-err ! 31: (macro (l) ! 32: `(progn ,@(comp-msg ! 33: `( "Error: " g-fname ": " ,@(cdr l) N)) ! 34: (setq er-fatal (1+ er-fatal)) ! 35: (throw nil Comp-error)))) ! 36: ! 37: (def comp-warn ! 38: (macro (l) ! 39: `(progn (cond (fl-warn ! 40: ,@(comp-msg ! 41: `( "%Warning: " g-fname ": " ,@(cdr l) N))))))) ! 42: ! 43: (def comp-note ! 44: (macro (l) ! 45: `(progn (cond (fl-verb ! 46: ,@(comp-msg ! 47: `( "%Note: " ,@(cdr l) N))))))) ! 48: ! 49: (def comp-gerr ! 50: (macro (l) ! 51: `(progn ,@(comp-msg ! 52: `("?Error: " ,@(cdr l) N)) ! 53: (setq er-fatal (1+ er-fatal))))) ! 54: ! 55: ;--- comp-msg - port ! 56: ; - lst ! 57: ; prints the lst to the given port. The lst is printed in the manner ! 58: ; described above, that is atoms are patomed, and lists are evaluated ! 59: ; and printed, and N prints a newline. The output is always drained. ! 60: ; ! 61: (eval-when (compile load eval) ! 62: (def comp-msg ! 63: (lambda (lis) ! 64: (cond ((null lis) `((drain))) ! 65: (t `(,(cond ((atom (car lis)) ! 66: (cond ((eq (car lis) 'N) ! 67: `(terpr)) ! 68: (t `(niceprint ,(car lis))))) ! 69: (t `(niceprint ,(car lis)))) ! 70: ,@(comp-msg (cdr lis))))))) ! 71: (def niceprint ! 72: (macro (l) ! 73: `((lambda (val) ! 74: (cond ((floatp val) ! 75: (patom (quotient (fix (times val 100)) 100.0))) ! 76: (t (patom val)))) ! 77: ,(cadr l))))) ! 78: ! 79: ;--- super if macro ! 80: (defun If macro (lis) ! 81: (prog (majlis minlis revl) ! 82: (do ((revl (reverse lis) (cdr revl))) ! 83: ((null revl)) ! 84: (cond ((eq (car revl) 'else) ! 85: (setq majlis `((t ,@minlis) ,@majlis) ! 86: minlis nil)) ! 87: ((or (eq (car revl) 'then) (eq (car revl) 'thenret)) ! 88: (setq revl (cdr revl) ! 89: majlis `((,(car revl) ,@minlis) ,@majlis) ! 90: minlis nil)) ! 91: ((eq (car revl) 'elseif)) ! 92: ((eq (car revl) 'If) ! 93: (setq majlis `(cond ,@majlis))) ! 94: (t (setq minlis `( ,(car revl) ,@minlis))))) ! 95: ; we displace the previous macro, that is we actually replace ! 96: ; the if list structure with the corresponding cond, meaning ! 97: ; that the expansion is done only once ! 98: (rplaca lis (car majlis)) ! 99: (rplacd lis (cdr majlis)) ! 100: (return majlis))) ! 101: ! 102: ;--- standard push macro ! 103: ; (Push stackname valuetoadd) ! 104: ! 105: (defmacro Push (atm val) ! 106: `(setq ,atm (cons ,val ,atm))) ! 107: ! 108: ;--- pop macro ! 109: ! 110: (defmacro Pop (val) ! 111: `(prog1 (car ,val) (setq ,val (cdr ,val)))) ! 112: ! 113: ;--- unpush macro - like pop except top value is thrown away ! 114: (defmacro unpush (atm) ! 115: `(setq ,atm (cdr ,atm))) ! 116: ! 117: ;--- and an increment macro ! 118: ! 119: (defmacro incr (atm) ! 120: `(setq ,atm (1+ ,atm))) ! 121: ! 122: (defmacro decr (atm) ! 123: `(setq ,atm (1- ,atm))) ! 124: ;--- add a comment ! 125: ! 126: (defmacro makecomment (arg) ! 127: `(cond (fl-comments (setq g-comments (cons ,arg g-comments))))) ! 128: ! 129: ;--- add a comment irregardless of the fl-comments flag ! 130: (defmacro forcecomment (arg) ! 131: `(setq g-comments (cons ,arg g-comments))) ! 132: ! 133: ;--- write to the .s file ! 134: ! 135: (defmacro sfilewrite (arg) ! 136: `(patom ,arg vp-sfile)) ! 137: ! 138:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.