;;; This file is part of the Scheme Untergrund Library.

;;; Copyright (c) 2002-2003 by Martin Gasbichler.
;;; For copyright information, see the file COPYING which comes with
;;; the distribution.

(define (interface-value-names interface-name)
  (let ((interface (environment-ref (config-package) interface-name))
	(value-names '()))
    (for-each-declaration
     (lambda (name base-neme type)
       (if (not (equal? type syntax-type))
	   (set! value-names (cons name value-names))))
     interface)
    value-names))

(define-record-type rt-structure :rt-structure
  (make-rt-structure meta-structure)
  rt-structure?
  (meta-structure rt-structure-meta-structure))

(define (rt-structure-loaded? rt-structure)
  (package-loaded? 
   (structure-package (rt-structure-meta-structure rt-structure))))

(define-record-discloser :rt-structure
  (lambda (s)
    (list 'rt-stucture (structure-name (rt-structure-meta-structure s)))))

(define (reify-structure name)
  (let ((struct (get-structure name)))
    (make-rt-structure struct)))

(define (load-structure rts)
  (ensure-loaded (rt-structure-meta-structure rts)))

(define (rt-structure-binding structure name)
  (if (not (rt-structure-loaded? structure))
      (error "Structure not loaded" structure))
  (contents
   (binding-place
    (generic-lookup (rt-structure-meta-structure structure)
		    name))))

(define (rt-structure->environment rt-structure)
  (structure-package (rt-structure-meta-structure rt-structure)))

(define (load-config-file file)
  (load file (config-package)))