[Openmcl-devel] Re: Trying to get LISA to run

nrms nils.stritzel at gmx.net
Tue Mar 29 10:38:08 PST 2005

Am 29.03.2005 um 15:51 schrieb Gary Byers:

> On Tue, 29 Mar 2005, nrms wrote:
>> Okay, no wonder nobody replied, since what I wrote was nonsense.
> Sorry. Replying was on my to-do list.  Honest.

I was just unsatisfied with my unqualified assumptions. Thanks for 
helping again, now seems to work, although I might have overlooked some 
bad side effects.

> (defun lisa-debugger ()
>    (translate-logical-pathname "lisa:debugger;lisa-debugger.lisp"))
> #+openmcl
> (pushnew (pathname-directory (lisa-debugger))
>          ccl:*module-search-path*
>          :test #'equal)
> should cause (
> to find and load "lisa-debugger.lisp".
That almost did it, only the value returned pathname-directory seems to 
be in the wrong format for require. That is why I just coded 
lisa-debugger-dir function.

>> The major problem seems to be that in a file called epilogue.lisp I 
>> got
>> the following code
>>   (set-dispatch-macro-character
>>       #\# #\? #'(lambda (strm subchar arg)
>> which is the evildoer. Is the problem here that character "?" is the
>> prompt in openmcl?  Is there an intelligent way to solve this 
>> conflict?

> 3) Use separate readtables (with separate definitions of #?).
> (3) is probably the cleanest solution, but may be somewhat awkward for
> users.
Thanks for the hint with the readtable, I tried to implement something, 
but the whole thing looks like an evil ugly hack which at least on the 
first glance seem to work. I am not sure whether it was good idea to 
establish a different readtable for installing this and removing it 
afterwards. It seems the code is bound to the table I used and I can 
call (require "cocoa") afterwards. You said it may be awkward for the 
the user, in what way?

Cheers and thanks again,


(in-package :cl-user)

(defvar *lisa-readtable*
            (copy-readtable *readtable*))

(defun new-readtable (new)
   (if (not (readtablep new))
       (error "new-readtable: Bad readtable: ~A" new))
   (setf *old-readtable* *readtable*)
   (setf *readtable* new))

(defun old-readtable ()
   (setf *readtable* *old-readtable*)
   (setf *old-readtable* nil))

(defvar *lisa-root-pathname*
     (make-pathname :directory
                    (pathname-directory *load-truename*)
                    :host (pathname-host *load-truename*)
                    :device (pathname-device *load-truename*)))

(defun make-lisa-path (relative-path)
   (concatenate 'string (namestring *lisa-root-pathname*)

(setf (logical-pathname-translations "lisa")
   `(("src;**;" ,(make-lisa-path "src/**/"))
     ("lib;**;*.*" ,(make-lisa-path "lib/**/"))
     ("config;*.*" ,(make-lisa-path "config/"))
     ("debugger;*.*" ,(make-lisa-path "src/debugger/"))
     ("contrib;**;" ,(make-lisa-path "contrib/**/"))))

(defun lisa-debugger ()
   (translate-logical-pathname "lisa:debugger;lisa-debugger.lisp"))

(defun lisa-debugger-dir ()
   (translate-logical-pathname "lisa:debugger;"))

(new-readtable *lisa-readtable*)

(pushnew (lisa-debugger-dir)
          :test #'equal)

(eval-when (:load-toplevel :execute)
   (flet ((find-or-load-system (system path)
            (let ((path (merge-pathnames path *load-truename*)))
              (unless (asdf:find-system system nil)
                (load path)))))
     (find-or-load-system :lisa.packages
                           :directory '(:relative "src" "packages")
                           :name "packages" :type "asd" :case :local))
     (find-or-load-system :lisa.implementations
                           :directory '(:relative "src" 
                           :name "implementations" :type "asd" :case 
     (find-or-load-system :lisa.utils
                           :directory '(:relative "src" "utils")
                           :name "utils" :type "asd" :case :local))
     (find-or-load-system :lisa.reflect
                           :directory '(:relative "src" "reflect")
                           :name "reflect" :type "asd" :case :local))
     (find-or-load-system :lisa.core
                           :directory '(:relative "src" "2.0-core")
                           :name "core" :type "asd" :case :local))
     (find-or-load-system :lisa.rete
                           :directory '(:relative "src" "rete" 
                           :name "rete" :type "asd" :case :local))
     (find-or-load-system :lisa.config
                           :directory '(:relative "src" "config")
                           :name "config" :type "asd" :case :local))
     (asdf:operate 'asdf:compile-op :lisa :force t)))

(compile-file (lisa-debugger))

(require "lisa-debugger")

(defun compile-lisa (&key (force nil))
   (asdf:operate 'asdf:compile-op :lisa :force force))

(defun load-lisa ()
   (asdf:operate 'asdf:load-op :lisa))


More information about the Openmcl-devel mailing list