- description
-        (C) 2000 - 2001 Guido Draheim
 -        @see LGPL for licensedescription:
      	this wordset implements a simple module-system.
            the basic module-system is based on the three
            words MODULE/END-MODULE/EXPORT - these three were
            present TEK' mforth, here the MPE' forth is used
            as an example for the naming scheme. This 
            implementation has also mpe's EXPOSE-MODULE,
            and it has a serious form of mpe's REQUIRES
            under the name ALSO-MODULE which clarifies that
            the search-order is modified. Note also that
            pfe defines a REQUIRES in require-ext that works
            like INCLUDE-ONCE
 
- 
EXTENSIONS | MODULE
 ( "name" -- old-current )( | ); |  |  
 
-        create a new WORDLIST with the given name. It
       will also have an implicit hidden vocabulary just as
       well and all DEFINITIONS will go into that
       hidden wordlist. Therefore the old CURRENT is
       memorized on the cs-stack.
 -        effectivly, CONTEXT[1] will have the wordlist-id
       of the public wordlist "name" and CONTEXT[0] will
       have the hidden wordlist contained in "name" - the
       hidden wordlist will always be known as HIDDEN' so
       that it can be re-referenced without need to use
       ALSO just to access a single definition from 
       just another vocabulary. Note that HIDDEN' is 
       defined immediate (a VOCABULARY' ) to modify
       the ORDER inside a colon definition.
 -  : MODULE
   CURRENT @ ( -- old-current )
   VOCABULARY
   ALSO LATEST NAME> EXECUTE ALSO DEFINITIONS
   C" HIDDEN'" $CREATE WORDLIST CONTEXT !
 ;
  
- 
EXTENSIONS | END-MODULE
 ( old-current -- )( | ); |  |  
 
-        clean up the cs-stack from the last MODULE 
       definition. Effectivly, MODULE definitions can
       be nested.
 -  : END-MODULE ( old-current )
   PREVIOUS PREVIOUS CURRENT ! 
  
- 
EXTENSIONS | EXPORT
 ( old-current "name" -- old-current )( | ); |  |  
 
-        the named word in the hidden dictionary (i.e. 
       the wordlist referenced in CURRENT) is exported
       into the public wordlist of it (i.e. which is in
       this implementation CONTEXT[1]). The actual
       implemenation will create a DEFER-word in the
       public wordlist withits parameter area pointing
       to the cfa of the hidden implementation.
 -  : EXPORT
   CURRENT @ CONTEXT CELL+ @ CURRENT !
   DEFER CURRENT !
   LATEST COUNT CURRENT @ SEARCH-WORDLIST
   IF LATEST NAME> >BODY ! ELSE ABORT" can't find word to export" THEN
 ;
  
- 
EXTENSIONS | EXPOSE-MODULE
 ( "name" -- )( | ); |  |  
 
-        affects the search order, ALSO module-wid CONTEXT ! hidden'
 -  : EXPOSE-MODULE 
    ALSO S" HIDDEN'" 
    ' DUP VOC? ABORT?" is no vocabulary" >VOC 
    SEARCH-WORDLIST 0= IF " no hidden vocabulary found" THEN
    DUP VOC? ABORT?" hidden is no vocabulary" EXECUTE
 ;
 
- 
EXTENSIONS | ALSO-MODULE
 ( "name" -- )( | ); |  |  
 
-        affects the search-order, ALSO module-wid CONTEXT ! 
 -  : ALSO-MODULE
   ' DUP VOC? ABORT?" is no vocabulary" 
   ALSO EXECUTE
 ;