                 ADDING USER-DEFINED EXTENSIONS TO WCL
                 -------------------------------------

Over the past few months, I have received incessant requests for me to
provide support for user extensions to WCL. I have finally decided to
provide a simple interface or hook to WCL for Windows programmers so that
they can add their own commands. This provides endless opportunities for
extending the command set which I have provided as internal commands, since
such user extensions are treated as internal commands by WCL.

The interface I have provided is very simple, as long as the rules are
adhered to. It revolves around DLLs which must be created by the user, and
which export two USER FUNCTIONS that WCL will interface to (the DLLs can
export other functions as well, but WCL will only interface to two named
functions).

Rules
-----
1. The DLLs must be given the extension .WXX (instead of .DLL), and
   must be compiled with the FAR directive (and for C/C++ programmers,
   it must be "FAR Pascal").

2. The .WXX DLLs *must* be in the WCL directory (i.e., in the same
   directory as WCL.EXE, WCLDLL.EXE, and BIGWCL.EXE).

3. [i] The first of the two user functions must be called IsValidCommand.
       It takes a null terminated string as a parameter, and returns an
       integer. This is the function that WCL polls to see if any command
       that is not recognised by WCL is one that is recognised by the user
       DLLs. It is only if after polling all the .WXX files and none of them
       recognised the command that WCL will present a "command not found"
       error message to the user.

       In this scheme, when the user types a command, WCL looks for
       the command in this order;

               [a] from the list of command aliases
               [b] from the list of WCL internal commands
               [c] from the list of WCL .CBF batch files
               [d] from .EXE, .COM, .BAT, programs in the "path"
               [e] if the "command" is a file name, from the list
                   of associations in the "Extensions" part of WIN.INI
               [f] from the list of .WXX DLL files found in the WCL
                   directory.

       If the command is not found in any of these places, then an
       error is reported "this command cannot be found". If the
       command is found in a .WXX file, then the whole command line
       is passed to that DLL's "UserProc()" function.

       The user can =if         [ethe tE e two erProc()"  WCL
        T1 can
o-ltwo erProIt is. Ietopd.
      uling eOrue t uWXX feOruf anyDLL's "UserProc()" functnd       H rom the lithe fE e fun X feOruf afor user extenTxa-= "UserProc()" functege to"/*ave rece   IneOrus scheOr oneer;
eS fE e fun X feOruf afor us
  +  8    n.1WXX not bnot rLoneer         feOd       H NF batch fillOruf  T1111111ithe userP lituf e     eOrufrom eOr  H NF bateOrj|FpreIOSuWatch filovrindowsH ()" functiIn thE  this   H NF batl commands by TxTLtng ia  notE   [eu "Us n.1 u.BAT,eOrugramsi  tlO      h fiW  H NF baoE notE *****et be nteoerPrut musthE  this a alcomman****und ieist oRuOt fiOrj uiatioeOrues foeOru| d -poes C *******GserProceisOFASFeOtH TxTLtng i nrues f any (eoerPrutound 
   uions eOru     eOru     FeOruthe WtX***sҲؠ^t be  [a]******Gj uiatiyudund 
   uions eao***a aj uiatioeN passed to Zr      o

       If tufile,***     ****eOru     eOru DLL'eOruaLNeun    U aCIoeao*Epn.psav***or: FeOtɍ#     FeOru nP	<z*ort  eOt   thenYX$~ u funceOru.

 uiiao"rnterfalhI*****u)ecte   ɍ# yudort  eOt   tao    o Z,***     *NextenTxa-= *7NwE"t bnotu     'uhese eOrue t ueOrufeOrueE***eOto"t edlBund ueOru  W  H NF baoE -filovrindu ytOUserPeEt uWX en OE  E]c|acIerun.

eOru)" fueOruge toeTEud.
 eUEoUCssovrindu  W  HSE* dund 
   u    TE   T1  ruge toeTECL is one thatT1ne
e (anmOruearseutuf eeOru   feOru     eErugeOt"COCaPsisoyOtYsroceis (a- inFeOtBNCCLX en OE  E nuf epREZ   eOrue

eOeFeOtBN ureIOSeOruch fienoeOru   n.ch fieytOUser)a   TE aj,Oru   feO-   *
*	*7*,h fiWeTEu       NioeOrues fo^t be vu.LFLuOru is eEZ  Oru  h feOruH NF eTEu notE(   u eOt  |acIerunOcsOxO:Ȳ

eOA    eOr e     ruH NF eTElist of commanTYV eeOru   fePGUOru-----uP liteOru**GseeOruceisOajru ao.  feO-acfKliteOru**Cista C.IP)E" functcommanTYGj ueTEu  of asN    ****eO: FeOtftound nTYV eeOru   OruatleOt Ieru uudundeOru uioneE   eOrsɍ#er ** FeOown commands.  C  eTn"RAIONg: FeOt   / eOru**Gsee n****iD(#er BOtofuru[e] if eaLNeueOru U aCeOtceOru*et bE-----e  thenYX$~ u fu**a aKcsOxO:pyuduru[e] if eaLNeaou   nTdeOru uionNeOto"t edlBund nTm