Various: Try porting the code to CLisp.
[lisp] / sys-base.lisp
index 440facf..b1e3595 100644 (file)
 (defpackage #:mdw.runlisp
   (:use #:common-lisp #+cmu #:extensions)
   (:export #:*lisp-interpreter* #:*command-line-strings*))
+(in-package #:mdw.runlisp)
+
+#+clisp
+(progn
+  (defvar *lisp-interpreter*)
+  (defvar *command-line-strings*)
+  (let ((args (coerce (ext:argv) 'list)))
+    (setf *lisp-interpreter* (car args))
+    (setf *command-line-strings* (nthcdr 7 args))))
+
 (defpackage #:mdw.sys-base
-  (:use #:common-lisp #+cmu #:extensions #:mdw.runlisp)
-  (:export #:exit #:hard-exit #:*program-name* #:*command-line-strings*))
+  (:use #:common-lisp #+cmu #:extensions #+cmu #:mdw.runlisp)
+  (:export #:exit #:hard-exit #:*program-name* #:*command-line-strings*)
+  (:import-from #:mdw.runlisp #:*lisp-interpreter* #:*command-line-strings*)
+  #+clisp (:import-from #:ext #:exit))
 (in-package #:mdw.sys-base)
 
 ;;; --- This is currently all a bit CMUCL-specific ---
 
-#+cmu
+#+(or cmu)
 (defun exit (&optional (code 0))
   "Polite way to end a program.  If running in an interactive Lisp, just
    return to the top-level REPL."
-  (if *batch-mode*
-      (throw 'lisp::%end-of-the-world code)
+  (if #+cmu *batch-mode*
+      #+cmu (throw 'lisp::%end-of-the-world code)
       (progn
         (unless (zerop code)
           (format t "~&Exiting unsuccessfully with code ~D.~%" code))
         (abort))))
 
-#+cmu
 (defun hard-exit (&optional (code 0))
   "Stops the program immediately in its tracks.  Does nothing else.  Use
    after fork, for example, to avoid flushing buffers."
   (declare (type (unsigned-byte 32) code))
-  (unix::void-syscall ("_exit" c-call:int) code))
+  #+cmu (unix::void-syscall ("_exit" c-call:int) code)
+  #+clisp (ext:quit code))
 
-#+cmu
-(defvar *program-name* (pathname-name (car *command-line-strings*))
+(defvar *program-name*
+  (pathname-name (car *command-line-strings*))
   "A plausible guess at the program's name, stripped of strange extensions.")
 
 ;;;----- That's all, folks --------------------------------------------------