File size: 4,557 Bytes
12bfd03
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;                                                                       ;;
;;;                Centre for Speech Technology Research                  ;;
;;;                     University of Edinburgh, UK                       ;;
;;;                       Copyright (c) 1996,1997                         ;;
;;;                        All Rights Reserved.                           ;;
;;;                                                                       ;;
;;;  Permission is hereby granted, free of charge, to use and distribute  ;;
;;;  this software and its documentation without restriction, including   ;;
;;;  without limitation the rights to use, copy, modify, merge, publish,  ;;
;;;  distribute, sublicense, and/or sell copies of this work, and to      ;;
;;;  permit persons to whom this work is furnished to do so, subject to   ;;
;;;  the following conditions:                                            ;;
;;;   1. The code must retain the above copyright notice, this list of    ;;
;;;      conditions and the following disclaimer.                         ;;
;;;   2. Any modifications must be clearly marked as such.                ;;
;;;   3. Original authors' names are not deleted.                         ;;
;;;   4. The authors' names are not used to endorse or promote products   ;;
;;;      derived from this software without specific prior written        ;;
;;;      permission.                                                      ;;
;;;                                                                       ;;
;;;  THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK        ;;
;;;  DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING      ;;
;;;  ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT   ;;
;;;  SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE     ;;
;;;  FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES    ;;
;;;  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN   ;;
;;;  AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,          ;;
;;;  ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF       ;;
;;;  THIS SOFTWARE.                                                       ;;
;;;                                                                       ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;  
;;;  Handle module descriptions.
;;;  

(defvar *module-descriptions* nil
  "*module-descriptions*
   An association list recording the description objects for proclaimed
   modules.")

(define (set_module_description mod desc)
  "(set_module_description MOD DESC)
   Set the description for the module named MOD."
  (let ((entry (assoc mod *module-descriptions*)))
    (if entry
	(set-cdr! entry (cons desc nil))
	(set! *module-descriptions* (cons (cons mod (cons desc nil)) 
					  *module-descriptions*))
	)
    )
  )

(define (module_description mod)
  "(module_description MOD)
   Returns the description record of the module named by symbol MOD"
  (let ((entry (assoc mod *module-descriptions*)))
    (if entry
	(car (cdr entry))
	nil
	)
    )
  )

(defmac (proclaim form)
  "(proclaim NAME &opt DESCRIPTION...)
   Anounce the availability of a module NAME. DESCRIPTION
   is a description in a fixed format."
  (let ((name (car (cdr form)))
	(description (cdr form))
	)
    (list 'proclaim-real (list 'quote name) (list 'quote description))
    )
  )

(define (proclaim-real name description)
  (set! *modules* (cons name *modules*))
;  (if description
;      (set_module_description name (create_module_description description))
;      )
  )

(define (describe_module mod)
  "(describe_module MOD)
   Describe the module named by the symbol MOD."

  (let ((entry (module_description mod)))
    (format t "---------------------\n")
    (if entry
	(print_module_description entry)
	(format t "No description for %l\n" mod)
	)
    (format t "---------------------\n")
    )
  )

(define (describe_all_modules)
  "(describe_all_modules)
   Print descriptions of all proclaimed modules"
  (format t "---------------------\n")
  (let ((p *module-descriptions*))
    (while p
	   (print_module_description (car (cdr (car p))))
	   (format t "---------------------\n")
	   (set! p (cdr p))
	   )
    )
  )

(proclaim 
 module_description 1.1 
 "CSTR"  "Richard Caley <rjc@cstr.ed.ac.uk>"
  ( "Handle module descriptions from C++ and from Scheme."
   )
  )

(provide 'module_description)