(FILECREATED " 8-Oct-86 14:12:25" {ERIS}<LISPCORE>SOURCES>CMLDOC.;5 4750   

      changes to:  (VARS CMLDOCCOMS)
                   (VARIABLES *DOCUMENTATION-HASH-TABLE*)

      previous date: " 1-Oct-86 21:04:00" {ERIS}<LISPCORE>SOURCES>CMLDOC.;4)


(* "
Copyright (c) 1986 by Xerox Corporation.  All rights reserved.
")

(PRETTYCOMPRINT CMLDOCCOMS)

(RPAQQ CMLDOCCOMS ((* ;;; "Documentation strings")
                   (VARIABLES *DOCUMENTATION-HASH-TABLE*)
                   (FUNCTIONS DOCUMENTATION HASH-TABLE-FOR-DOC-TYPE SET-DOCUMENTATION)
                   (SETFS DOCUMENTATION)
                   (* 
                     "Should be in CMLEXEC because exec command definer is loaded long after CMLDOC."
                      (COMMANDS DOC))
                   (* ;; "Use the proper compiler")
                   (PROP FILETYPE CMLDOC)
                   (DECLARE: DONTEVAL@LOAD DONTCOPY DOEVAL@COMPILE (LOCALVARS . T))))



(* ;;; "Documentation strings")

(DEFGLOBALVAR *DOCUMENTATION-HASH-TABLE* (* ;;; "This is the repository for all documentation strings in the system.  It is a two-level hash-table scheme, just like *definition-hash-table*.  At the first level, *DOCUMENTATION-HASH-TABLE* maps the symbols that name documentation-types into a separate hash table for each type.  Those tables map names into the documentation strings for those names.  The first-level table uses an EQ test while the second-level ones use CL:EQUAL."
                                            )     (* ;; "The hash-table is initialized to have second-level tables for each of the required documentation types.")
   (LET ((HT (MAKE-HASH-TABLE (QUOTE :TEST)
                    (QUOTE EQ)
                    (QUOTE :SIZE)
                    10
                    (QUOTE :REHASH-SIZE)
                    5)))
        (FOR TYPE IN (QUOTE (TYPE SETF STRUCTURE CL:FUNCTION VARIABLE))
           DO (SETF (GETHASH TYPE HT)
                    (MAKE-HASH-TABLE (QUOTE :TEST)
                           (QUOTE CL:EQUAL)
                           (QUOTE :SIZE)
                           50
                           (QUOTE :REHASH-SIZE)
                           50)))
        HT))

(DEFUN DOCUMENTATION (NAME DOC-TYPE) (GETHASH NAME (HASH-TABLE-FOR-DOC-TYPE DOC-TYPE)))

(DEFUN HASH-TABLE-FOR-DOC-TYPE (DOC-TYPE) (LET ((HT (GETHASH DOC-TYPE *DOCUMENTATION-HASH-TABLE*)))
                                               (CL:WHEN (NULL HT)
                                                      (WARN 
                                             "The documentation type %"~S%" was not previously known" 
                                                            DOC-TYPE)
                                                      (SETQ HT (SETF (GETHASH DOC-TYPE 
                                                                           *DOCUMENTATION-HASH-TABLE*
                                                                            )
                                                                     (MAKE-HASH-TABLE :TEST
                                                                            (QUOTE CL:EQUAL)
                                                                            :SIZE 50 :REHASH-SIZE 50)
                                                                     )))
                                               HT))

(DEFUN SET-DOCUMENTATION (NAME DOC-TYPE NEW-STRING) (SETF (GETHASH NAME (HASH-TABLE-FOR-DOC-TYPE
                                                                         DOC-TYPE))
                                                          NEW-STRING))

(DEFSETF DOCUMENTATION (NAME DOC-TYPE) (NEW-STRING)
                                                  (* ;; "The WHEN is to allow this to be used in code that comes earlier in the loadup than CMLDOC.  Such code won't have its strings saved, but it won't blow up, either.")
                                       (BQUOTE (PROGN (CL:WHEN (FBOUNDP (QUOTE SET-DOCUMENTATION))
                                                             (SET-DOCUMENTATION (\, NAME)
                                                                    (\, DOC-TYPE)
                                                                    (\, NEW-STRING)))
                                                      (\, NEW-STRING))))




(* "Should be in CMLEXEC because exec command definer is loaded long after CMLDOC." (COMMANDS 
DOC))




(* ;; "Use the proper compiler")


(PUTPROPS CMLDOC FILETYPE COMPILE-FILE)
(DECLARE: DONTEVAL@LOAD DONTCOPY DOEVAL@COMPILE 
(DECLARE: DOEVAL@COMPILE DONTCOPY

(LOCALVARS . T)
)
)
(PUTPROPS CMLDOC COPYRIGHT ("Xerox Corporation" 1986))
(DECLARE: DONTCOPY
  (FILEMAP (NIL)))
STOP