more variants
[rrq/newlisp/packnl.git] / incore.lsp
index 6ba256198cc8158007440ddc5490bb8eec7ea971..5cd646b19c4890418daf6e3d92f1a9b9ee8becce 100644 (file)
@@ -8,12 +8,20 @@
 ;;
 ;; archives:archives is a hashmap for loadable files
 ;; core:core is the running binary file
-;; archive:main is the name of the first on-core member
-;; archive:incore is the byte position into core for the archive
+;;
+;; The "archive" context holds utility code.
+;; archive:main is the name of the first in-core member.
+;; archive:incore is the byte position into core for the archive.
+;;
+;; Use (archives member pathname) to register that the file "member"
+;; should be looked up in the ar style archive of the given pathname.
+;;
+;; Use (archive pathname) to register all members of the nominated ar
+;; style archive.
 
 (new Tree 'archives)
 
-(define core:core (read-file (main-args 0)))
+(define core:core (read-file "/proc/self/exe"))
 
 (context 'archive)
 
 
 (constant
    'load
-   (letex (LOAD load)
+   (letex ((LOAD load) (CTX '(or (and (1 (args)) (args 1)) MAIN)))
      (fn () (if (archives (args 0))
-                (eval-string (archive:get $it (args 0)) MAIN)
-              (LOAD (args 0)))))
+                (eval-string (archive:get $it (args 0)) CTX)
+              (LOAD (args 0) CTX))))
    'read-file
    (letex (READ-FILE read-file)
      (fn ()
        (if (archives (args 0)) (archive:get $it (args 0))
-              (READ-FILE (args 0)))))
+         (READ-FILE (args 0)))))
    'file?
    (letex (FILE? file?)
      (fn () (if (archives (args 0)) true (FILE? (args 0)))))