Allow for smaller newlisp binary
[rrq/newlisp/packnl.git] / incore.lsp
index 8f24187ef6b449daeaf2f27e404c40c80ed4aef4..7203047c0be43aefb1b97d0fc694df61b2878ccf 100644 (file)
@@ -47,7 +47,7 @@
          )))
 
 ;; Read a member of an external archive
-(define (get-stdin CMD)
+(define (get-stdout CMD)
   (let ((I (pipe)) (O (pipe)) (DATA "") (ALL "")
         (SUB (fn (I O)
                (map close (list (I 1) (O 0) 0))
 (define (get PATH MEMBER)
   (if (list? PATH) ((PATH 0) (PATH 1) core)
     (directory? PATH) (read-file (format "%s/%s" PATH MEMBER))
-    (ends-with PATH ".a") (get-stdin (format "%s p %s %s" AR PATH MEMBER))
-    (tar-able PATH) (get-stdin (format "%s xOf %s %s" TAR PATH MEMBER))
+    (ends-with PATH ".a") (get-stdout (format "%s p %s %s" AR PATH MEMBER))
+    (tar-able PATH) (get-stdout (format "%s xOf %s %s" TAR PATH MEMBER))
     ))
 
 ;; Discover and load an in-core archive by means of a marker row of 40
 ;; "x", and then a series of pathname\nsize\nbytes[size] members.
-(if (find (dup "x" 40) core nil 391704)
+(if (find (dup "x" 40) core nil 300000)
     (let ((P (+ $it 41))) ; skip marker and newline
       (constant 'incore P)
       (while (regex "([^\n]+)\n([^\n]+)\n" core 0 P)
 
 (constant
    'load
-   (letex ((LOAD load) (CTX '(or (and (1 (args)) (args 1)) MAIN)))
+   (letex ((LOAD load) (CTX '(if (1 (args)) (args 1) MAIN)))
      (fn () (if (archives (args 0))
                 (eval-string (archive:get $it (args 0)) CTX)
-              (LOAD (args 0) CTX))))
+              (LOAD (args 0) (eval CTX)))))
    'read-file
-   (letex (READ-FILE read-file)
+   (letex ((READ-FILE read-file) (CTX '(if (1 (args)) (args 1) MAIN)))
      (fn ()
-       (if (archives (args 0)) (archive:get $it (args 0))
+       (if (archives (args 0)) (archive:get $it (args 0) CTX)
          (READ-FILE (args 0)))))
    'file?
-   (letex (FILE? file?)
+   (letex ((FILE? file?))
      (fn () (if (archives (args 0)) true (FILE? (args 0)))))
    )