[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Making a simple window, and dumplisp in allegro (was Re: Problem in running express-windows !! )

You can't make a window until you call (initialize-window-system).

Have you tried running the demos, by doing
 :pa ew
 (run-program 'lisp-listener)      ; see frames.lisp

The mouse window should show you what the buttons do.
Click right to get a menu, or type S<space>M<space>, which is an abbreviation
for System Menu.

You don't need to load the common windows at all, just CLX.  I don't think
this should cause any problems; at its most harmless will probably only make
method dispatch just a little bit slower.

Here's what I just tried:

<cl> (initialize-window-system)

<cl> *root-window*

#<PRESENTATION-WINDOW 70014576>               ;this is default superior if I don't specify
<cl> (setq w2 (make-window 'WINDOW :BORDERS 1
			   :LEFT   10 :TOP    10
			   :HEIGHT 250 :WIDTH  400))


<cl> (expose-window w2)
;;; now we see it
<cl> (let ((*query-io* w2))
       (querying-values (*query-io* :label "Just a test.")
			(query '((alist-member :alist (one two three)))
			       :prompt "Choose one" :default 'two)))

<cl> (print "Hello." w2)

<cl> (force-output w2)   ; forces out any waiting output.


Normally, your application will be using Express-Windows for input, and the
output will automatically be flushed, so (force-output ..) is rarely necessary.
You can also use (sync) for this, which will take care of any waiting output
(for the X display).

Again, you should look at the demos for example i/o coding and use of


Here's how I did it.  If the following is make-ew-core.lisp, then (in allegro)
cl -qq < make-ew-core.lisp > make-ew-core.output

You'll have to load pcl & clx yourself (my core already had these).
Note that I call (load-ew) directly, otherwise I would be prompted for
(compile, load) x (pcl, clx, ew).

Also, I put the optional files onto the ew-files, and set optional files to
(), so I don't get prompted for those either.  You might want to replace the
call to (load-ew) with similar loading code, depending on your needs.

;;; Dump a core with express windows loaded.

(in-package :user)

(unless (excl::scheduler-running-p)

(load (make-pathname :name "system" :type "lisp" :defaults *Default-EW-Code-Pathname*))

;; Don't ask about optional files, just do 'em

(setf *Ew-Files-Copy* (append *Ew-Files-Copy* *Optional-Ew-Files-Copy*)
      *Optional-Ew-Files-Copy* ())


(setq ew::*Default-Host* "unix")  ; will this give better results?

;;; Okay, now save the world...

(excl:chdir "/usr/toad/")

;; are these necesary?  right order?
(excl:gc t)
(excl:gc :tenure)

(excl:dumplisp :name "express"
	       :read-init-file t
	       :restart-function nil
	       ; :restart-actions nil
	       :checkpoint nil)

(print "Core dumped.")

(excl:exit 0 :no-unwind t)

It was my first dumplisp for allegro, and though it works, I'm not satisfied
with the way (room) looks; there seems to be several empty oldspaces taking
up a couple meg, and the core file is 12M (on a sparc (RISC)); space in core
(by (room)) shows 6.5M used.  I tried a couple gc tweaks, but it didn't seem
to change.  Anyone have hints?