Annotation of 41BSD/cmd/liszt/camacs.l, revision 1.1.1.1

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: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.