mirror of
https://github.com/PDP-10/its.git
synced 2026-02-11 18:54:32 +00:00
54 lines
1.7 KiB
Common Lisp
Executable File
54 lines
1.7 KiB
Common Lisp
Executable File
;;; -*- Mode:LISP; IBase:10.; -*-
|
|
;;;
|
|
;;; IMPDEF: A library for selectively including a definition from a file of definitions
|
|
|
|
(HERALD IMPDEF /15)
|
|
|
|
(EVAL-WHEN (EVAL COMPILE)
|
|
(COND ((NOT (STATUS FEATURE IOTA))
|
|
(LOAD '((DSK LIBLSP) IOTA FASL)))))
|
|
|
|
;;; (IMPORT-DEFINITION function filename)
|
|
;;; Gets the definition of the function from filename and includes just
|
|
;;; that one function in current file.
|
|
;;;
|
|
;;; Works for DEFUNs, DEFMACROs, DEFUN&s, and recursive IMPORT-DEFINITIONs.
|
|
|
|
(DEFMACRO IMPORT-DEFINITION (NAME FILE)
|
|
(TERPRI MSGFILES)
|
|
(PRINC '|;IMPORT-DEFINITION looking for | MSGFILES)
|
|
(PRIN1 NAME MSGFILES)
|
|
(PRINC '| in /"| MSGFILES)
|
|
(PRINC (NAMESTRING FILE) MSGFILES)
|
|
(PRINC '/" MSGFILES)
|
|
(COND ((NOT (PROBEF FILE))
|
|
(TERPRI MSGFILES)
|
|
(PRINC '|;File not found. -- IMPORT-DEFINITION| MSGFILES)
|
|
'`(FILE ,FILE NOT FOUND WHEN LOOKING FOR DEFINITION
|
|
OF ,NAME))
|
|
(T
|
|
(IOTA ((STREAM FILE 'IN))
|
|
(DO ((FORM (READ STREAM STREAM)
|
|
(READ STREAM STREAM)))
|
|
((EQ FORM STREAM)
|
|
(TERPRI MSGFILES)
|
|
(PRINC '|;Definition of function | MSGFILES)
|
|
(PRIN1 NAME MSGFILES)
|
|
(PRINC '| not found. -- IMPORT-DEFINITION|
|
|
MSGFILES)
|
|
`'(FUNCTION ,NAME NOT FOUND IN ,FILE))
|
|
(COND ((AND (NOT (ATOM FORM))
|
|
(MEMQ (CAR FORM)
|
|
'(DEFUN DEFMACRO MACRO DEFUN/&
|
|
IMPORT-DEFINITION))
|
|
(OR (AND (ATOM (CADR FORM))
|
|
(EQ (CADR FORM) NAME))
|
|
(AND (NOT (ATOM (CADR FORM)))
|
|
(EQ (CAADR FORM) NAME))))
|
|
(TERPRI MSGFILES)
|
|
(PRINC '|;Using | MSGFILES)
|
|
((LAMBDA (PRINLENGTH)
|
|
(PRIN1 FORM MSGFILES)) 2.)
|
|
(PRINC '| -- IMPORT-DEFINITION| MSGFILES)
|
|
(RETURN FORM))))))))
|