;;; -*- Mode:LISP; Package:SYSTEM-INTERNALS; Readtable:ZL; Base:10 -*- (DEFUN MAP-FORMS-IN-FILE (F FILE-NAME) "Call the function F on each form in the file" (WITH-OPEN-STREAM (STREAM (SEND (FS:MERGE-PATHNAME-DEFAULTS FILE-NAME FS:LOAD-PATHNAME-DEFAULTS NIL) :OPEN-CANONICAL-DEFAULT-TYPE :LISP :ERROR :REPROMPT)) (MAP-FORMS-IN-STREAM F STREAM))) (DEFUN MAP-FORMS-IN-STREAM (F *STANDARD-INPUT*) (LET* ((FILE-ID (SEND *STANDARD-INPUT* :INFO)) (PATHNAME (SEND *STANDARD-INPUT* :PATHNAME)) (GENERIC-PATHNAME (SEND PATHNAME :GENERIC-PATHNAME)) (*PACKAGE* *PACKAGE*)) (BINDING-INTERPRETER-ENVIRONMENT (()) (FS:READ-ATTRIBUTE-LIST GENERIC-PATHNAME *STANDARD-INPUT*) ;; Enter appropriate environment for the file (MULTIPLE-VALUE-BIND (VARS VALS) (FS:FILE-ATTRIBUTE-BINDINGS GENERIC-PATHNAME) (PROGV VARS VALS (DO ((FORM) (EOF (LIST NIL))) ((EQ (SETQ FORM (FUNCALL (OR *READFILE-READ-FUNCTION* #'READ) *STANDARD-INPUT* EOF)) EOF)) (FUNCALL F FORM))))))) (DEFUN PRINT-TOPLEVEL-ATOMS (FILE) (MAP-FORMS-IN-FILE #'(LAMBDA (X) (IF (ATOM X) (PRINT X))) FILE))