




 
The interface comprises a function 
scm:add-system-namespace
 which must be called, and a set of generic functions for which methods need to be defined.
scm:add-system-namespace
 adds a namespace of "systems", which:
:load
 and 
:compile
 defined for them
LispWorks has its own built-in source code manager (
lw:defsystem
, 
lw:compile-system
, 
lw:load-system
, 
lw:concatenate-system
 and related functions). A widely-used source code manager is ASDF.
In the LispWorks IDE tools, a system name that contains a colon is interpreted as
To find the system LispWorks applies the 
finder
 specified in 
scm:add-system-namespace
 to the string 
systemname
. A system name without a colon is searched (using the 
finder
) in all the known namespaces. Note that this means that a system name without a colon may match several systems in different namespaces.
In addition to the integration interface, there are new functions which look at the namespaces and systems.
The most important symbols in the integration interface are described in the remainder of this section. "module" means one of the objects that is returned by the 
finder 
in 
scm:add-system-namespace
 or by the 
system-lister 
in 
scm:add-system-namespace
 or by 
scm:module-children
.  A "system" is a module for which 
scm:module-is-system-p
 returns true.
add-system-namespace 
name
 &key 
finder
 
system-lister
 
name-lister
The function 
scm:add-system-namespace
 tells LispWorks about another system namespace.
name
 must be a string. It is compared case-insensitively. The name must be different from 
"LW"
, which is the namespace for the LispWorks built-in 
lw:defsystem
 systems.
finder must be supplied as a function or symbol which takes one argument, a string. If there is an exact match (case-insensitive) it returns a module object or a list of module objects. The finder needs to be error-free when called with a string.
system-lister must be a designator for a function which takes no argument, and returns a list of the known systems in the namespace.
name-lister
 is optional. If supplied, it must be a designator for a function which takes no argument and returns a list of the names of the systems in the namespace. If it is not supplied, the system uses 
system-lister
 and maps 
scm:module-name
 on the result.
module 
module
 => 
name
The function 
scm:module-name 
must be defined for any module. It takes a module and returns its name.
scm:module-is-system-p 
module
 => 
boolean
The generic function 
scm:module-is-system-p
 returns true if the module is a "system". That is, it has children. The default method returns false.
scm:module-children 
module
 => 
list-of-modules
The generic function 
scm:module-children
 returns the children of the module, if any. The default method returns 
nil
. This generic function is called only on "systems", that is after checking that 
scm:module-is-system-p
 returned true.