
10.6     Loading Modules
Two convenient procedures are available for loading modules. Various facilities described in this
manual are actually in loadable modules and their documentation notes that they must be loaded.
Loadable modules typically exist as FASL files .B files see the section on the compiler for
information on producing FASL files.
(load [FILE:{string, id}]): nil                                                                                  macro
For  each  argument  FILE,  an  attempt  is  made  to  locate  a  corresponding
file.  If  a  file  is  found  then  it  will  be  loaded  by  a  call  on  an  appropriate
function. A full file name is constructed by using the directory specifications
in  loaddirectories*  and  the  extensions  in  loadextensions*.  The  strings
from  each  list  are  used  in  a  left  to  right  order,  for  a  given  string
from loaddirectories* each extension from loadextensions* is used. More
information  about  loaddirectories*  and  loadextensions*  can  be  found
below.
 
While the file is being loaded *usermode will be set to nil. If a file cannot be found the call on
load will be aborted.
    ⋆⋆⋆⋆⋆ ‘FILE' load module not found
If either *verboseload or *printloadnames is non-nil then 
    ⋆⋆⋆ loading FULL-NAME
is printed just prior to loading the file. Once a file has been loaded the message
    ⋆⋆⋆ FILE loaded
will be printed if the *verboseload is non-nil. In addition, the name FILE is added to the list
referenced by options*. If an attempt is made to load a file which has been partially loaded
then
  ⋆⋆⋆ Warning: Load of FILE previously requested, but incomplete.
will be printed. If FILE is found to be in options* then the attempt to load FILE will be
ignored.
    ⋆⋆⋆ FILE already loaded
Note that memq is used to determine if FILE is in options*. Therefore when you use string
arguments for loading files, although identical names for ids refer to the same object, identical
names for strings refer to different objects.
(reload [FILE:{string,id}]): nil                                                                               macro
Reload is very similar to load. The difference between the two is that for
each name FILE, the first occurance of FILE in options* will be removed
before attempting to load the file.
 
(imports FILES:list): nil                                                                                             expr
This function is also used to load modules. If imports is invoked as another
module  is  being  loaded,  then  the  modules  specified  by  FILES  will  not
be loaded until the loading of the current module is complete. Otherwise
imports is identical to load.
 
loaddirectories*  = [Initially: list]                                                                             
global
         References a list of strings to append to the front of file names passed as
arguments to load, reload, and imports.
 
loadextensions* = [Initially: association-list]                                                           
global
         References the a-list 
((".b" . faslin) (".lap" . lapin))
The car of each pair is a string which represents an extension to append to
the end of the file names passed as arguments to load, reload, and imports.
The cdr is a function appropriate for loading a file of a particular extension.
For example, a file whose extension is B is loaded with the function faslin.
 
 
options* = [Initially: nil]                                                                                            
global
         Once a file corresponding to an argument FILE to either load, reload, or
imports  has  been  loaded,  FILE  will  be  added  to  the  list  referenced  by
options*.  An  attempt  to  load  a  file  by  applying  load  or  imports  will  be
aborted if FILE is found in options*. Reload removes the first occurance of
FILE from options* before passing its argument to load.
 
*verboseload = [Initially: nil]                                                                                    
switch
         If  non-nil,  a  message  is  displayed  when  a  request  is  made  to  load  a  file
which  has  already  been  loaded,  when  a  file  is  about  to  be  loaded,  and
when the loading of a file is complete. Since *redefmsg is set to the value
of *verboseload, a non-nil value will also cause a message to be printed
whenever a function is redefined during a load.
 
*printloadnames = [Initially: nil]                                                                             
switch
         If non-nil, a message is printed when a file is about to be loaded.