Path: utzoo!attcan!uunet!husc6!bloom-beacon!tut.cis.ohio-state.edu!cs.utexas.edu!milano!titan!janssen@titan.sw.mcc.com From: janssen@titan.sw.mcc.com (Bill Janssen) Newsgroups: comp.windows.x Subject: Re: CLX under Franz Allegro CommonLisp 3.0 Message-ID: <1218@titan.SW.MCC.COM> Date: 16 Sep 88 21:03:43 GMT References: <1123@titan.SW.MCC.COM> <8809012055.AA05694@sparky> Sender: janssen@titan.SW.MCC.COM Reply-To: janssen@titan.sw.mcc.com (Bill Janssen) Organization: MCC Software Technology Lines: 27 In-reply-to: jdi@sparky.UUCP (John Irwin) Rebuilding from the CLX sources shipped with Allegro 3.0.1 almost works, but there is still the problem that xlib::*recursive-event-queue* is not required to be bound, in R2. So input.l/event-listen should look like this: #+excl (defun event-listen (display &optional (timeout 0)) (declare (type display display) (type (or null number) timeout)) ;; Returns the number of events queued locally, if any, else nil. Hangs ;; waiting for events, forever if timeout is nil, else for the specified ;; number of seconds. However, if we are running a process wait function ;; (in the scheduler stack group) and the input lock is held by another ;; process, return nil. (let ((queue (or (and (boundp '*recursive-event-queue*) (*recursive-event-queue*)) (display-event-queue display))) (*inside-event-listen-catch* t)) (if (cdr queue) (length (cdr queue)) (unless (eq :would-block (catch 'event-listen (wait-for-event display timeout nil))) (and (cdr queue) (length (cdr queue))))))) Then everything works. I understand all of this is fixed in R3. Bill