Annotation of 43BSD/contrib/emacs/etc/ledit.l, revision 1.1

1.1     ! root        1: ;;; -*- Mode: lisp -*-
        !             2: 
        !             3: ; load in the c functions
        !             4: 
        !             5: (removeaddress '_signal)
        !             6: (removeaddress '_switch_to_proc)
        !             7: (removeaddress '_set_proc_str)
        !             8: 
        !             9: (cfasl "/src/mdc/ledit/leditcfns.o" '_switch_to_proc 'emacs)
        !            10: 
        !            11: (getaddress '_set_proc_str 'set_proc_str)
        !            12: 
        !            13: (declare (special *ledit-infile*               ; emacs->lisp tempfile
        !            14:                  *ledit-outfile*              ; lisp->emacs tempfile
        !            15:                  *ledit-ppfile*               ; pp->emacs tempfile
        !            16:                   *ledit-lisztfile*            ; compiler input
        !            17:                   *ledit-objfile*              ; compiler output
        !            18:                  *ledit-initialized*)         ; flag
        !            19:         )
        !            20: 
        !            21: (setq *ledit-initialized* nil)
        !            22: 
        !            23: ;;; INIT-LEDIT
        !            24: 
        !            25: (defun init-ledit ()
        !            26:   (let ((user (getenv '|USER|)))               ;USER must be uppercase
        !            27:        (setq
        !            28:         *ledit-outfile* (concat "/tmp/" user ".l2") ; lisp -> emacs
        !            29:         *ledit-infile*  (concat "/tmp/" user ".l1") ; emacs -> lisp
        !            30:         *ledit-ppfile*  (concat "/tmp/" user ".l3") ; pp output to emacs.
        !            31:         *ledit-lisztfile*  (concat "/tmp/" user ".l4")
        !            32:         *ledit-objfile*  (concat "/tmp/" user ".o")
        !            33:         *ledit-initialized* t)))
        !            34: 
        !            35: ;;; LEDIT
        !            36: ; if 1 arg, arg is taken as a tag name to pass to emacs.
        !            37: ; if 2 args, second arg is a keyword.  If 2nd arg is pp,
        !            38: ; pp is applied to first arg, and result is sent to emacs
        !            39: ; to put in a buffer called LEDIT (which is first erased.)
        !            40: 
        !            41: (defun ledit fexpr (args)
        !            42:     (apply #'ledit* args))
        !            43: 
        !            44: ;;; LEDIT*
        !            45: 
        !            46: (defun ledit* n
        !            47:     (if (not *ledit-initialized*) (init-ledit))
        !            48:     (ledit-output (listify n))
        !            49:     (syscall 10. *ledit-infile*)        ; syscall 10 is "delete"
        !            50:     (syscall 10. *ledit-lisztfile*)
        !            51:     (emacs)
        !            52:     (ledit-input)
        !            53:     (syscall 10. *ledit-outfile*)
        !            54:     (syscall 10. *ledit-ppfile*)
        !            55:     t)
        !            56: 
        !            57: ;;; LEDIT-OUTPUT
        !            58: ;;; Egad, what a mess!  Doesn't work for XEMACS yet.
        !            59: ;;; Here's an example from Moclisp:
        !            60: ;;; -> (defun bar (nothing) (bar nothing))
        !            61: ;;; bar
        !            62: ;;; -> (ledit bar)
        !            63: ;;; should produce...
        !            64: ;;; (progn) (progn tag (setq tag "bar") (&goto-tag))
        !            65: ;;; and
        !            66: ;;; -> (ledit bar pp)
        !            67: ;;; should stuff this to emacs...
        !            68: ;;; (progn) (switch-to-buffer "LEDIT") (erase-buffer)
        !            69: ;;; (insert-file "/tmp/walter.l3") (lisp-mode)
        !            70: ;;; and this...
        !            71: ;;; (def bar
        !            72: ;;;   (lambda (x)
        !            73: ;;;    (bar nothing)))
        !            74: ;;; into *LEDIT*
        !            75: 
        !            76: (defun ledit-output (args)
        !            77:   (if args
        !            78:       (let ((ofile (outfile *ledit-outfile*)))
        !            79:           (format ofile "(progn)")             ; this is necessary.
        !            80: 
        !            81:           (cond ((null (cdr args)) ; no keyword -> arg is a tag.
        !            82:                  (format ofile "(progn tag (setq tag \"~A\"~
        !            83:                                 (&goto-tag))"
        !            84:                                 (car args)))
        !            85:                 ((eq (cadr args) 'pp)       ; pp-> pp first arg to emacs
        !            86:                      (apply 'pp `((|F| ,*ledit-ppfile*) ,(car args)))
        !            87:                      (format ofile "(switch-to-buffer \"LEDIT\")~
        !            88:                                     (erase-buffer)")
        !            89:                      (format ofile "(insert-file \"~A\")"
        !            90:                                     *ledit-ppfile*)
        !            91:                      (format ofile "(lisp-mode)"))
        !            92:           
        !            93:                 (t (format t "~&~A -- unknown option~%" (cdr args))))
        !            94:           (close ofile))))
        !            95: 
        !            96: ;;; LISZT*
        !            97: ;;; Need this guy to do compile-input.
        !            98: ;;; Liszt returns 0 if all was well.
        !            99: ;;; Note that in ordinary use the user will have to get used to looking
        !           100: ;;; at "%Warning: ... Compiler declared *foo* special" messages, since
        !           101: ;;; you don't usually want to hunt around in your file, zap in the the
        !           102: ;;; declarations, then go back to what you were doing.
        !           103: ;;; Fortunately this doesn't cause the compiler to bomb.
        !           104: ;;; Some sleepless night I will think of a way to get around this.
        !           105: 
        !           106: (defun liszt* (&rest args)
        !           107:    (apply #'liszt args))
        !           108: 
        !           109: ;;; LEDIT-INPUT
        !           110: ;;; Although there are two cases here, in practice
        !           111: ;;; it is never the case that there is both input to be
        !           112: ;;; interpreted and input to be compiled.
        !           113: 
        !           114: (defun ledit-input ()
        !           115:   (if (probef *ledit-lisztfile*)
        !           116:       (cond ((getd #'liszt)
        !           117:             (format t ";Compiling LEDIT:")
        !           118:             (and (zerop (liszt* *ledit-lisztfile* '-o *ledit-objfile*))
        !           119:                  (load *ledit-objfile*)))
        !           120:            (t (format t ";Can't compile LEDIT: No liszt.~%;Reading instead:")
        !           121:               (let ((ifile (infile *ledit-lisztfile*)))
        !           122:                 (ledit-load ifile)
        !           123:                 (close ifile)))))
        !           124: 
        !           125:   (if (probef *ledit-infile*)
        !           126:       (let ((ifile (infile *ledit-infile*)))
        !           127:        (format t ";Reading from LEDIT:~%")
        !           128:        (ledit-load ifile)
        !           129:        (close ifile))))
        !           130: 
        !           131: ;;; LEDIT-LOAD
        !           132: ;;; A generally useful form of load
        !           133: 
        !           134: (defun ledit-load (ifile)
        !           135:   (let ((eof-form (list 'eof-form)))
        !           136:     (do ((form (read ifile eof-form) (read ifile eof-form)))
        !           137:       ((eq form eof-form))
        !           138:       (format t ";  ~A~%" (eval form)))))
        !           139: 
        !           140: (setsyntax #/ 'macro 'ledit)                  ; make ^E = (ledit)<return>
        !           141: 
        !           142: ;; more robust version of the c function set_proc_str. Does argument checking.
        !           143: ;; set_proc_str sets the string that is stuffed to the tty after franz pauses
        !           144: ;; and the csh wakes up. It is usually "%emacs" or "%vemacs" or "%?emacs"
        !           145: (defun set-proc-str (arg)
        !           146:   (if (stringp arg)
        !           147:     (set_proc_str arg)
        !           148:     (if (symbolp arg)
        !           149:       (set_proc_str (get-pname arg))
        !           150:       (error arg " is illegal argument to set-proc-str"))))

unix.superglobalmegacorp.com

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