;;; -*-Scheme-*-
;;;
;;; The Scheme part of the X11 widget interface

(require 'xt)

(define widget-subdirectory 'xaw)

(define widgets-loaded '())
(define load-always '())

(define-macro (load-widgets . w)
  (let ((wl '()) (l '()))
    (if (null? w)
	(error 'load-widgets "no arguments"))
    (for-each
     (lambda (w)
       (if (not (symbol? w))
	   (error 'load-widgets "argument not a symbol"))
       (if (not (memq w widgets-loaded))
	   (set! l (cons w l))))
     w)
    (for-each
     (lambda (w)
       (if (not (memq w widgets-loaded))
	   (set! l (cons w l))))
     load-always)
    (if l
	(begin
	  (set! widgets-loaded (append widgets-loaded l))
	  (format #t "[Loading ")
	  (do ((f l (cdr f))) ((null? f))
	    (format #t "~a~a" (car f) (if (null? (cdr f)) "" " "))
	    (set! wl (cons (format #f "~a/~a.o" widget-subdirectory (car f))
			   wl)))
	  (format #t "]~%")
	  `(fluid-let ((load-libraries
			 (if (feature? 'motif)
			     "-lXm -lXmu -lXt -lX11 -lc"
			     "-lXaw -lXmu -lXext -lXt -lX11 -lc")))
	     (load ',wl)))
	#f)))

(define load-widget load-widgets)

(provide 'xwidgets)
