                                              
                           
               
         
                   
                 
          
             
            
              
                                            
               
                           
                                              
 
   Volume 1, Number 10                                   29 Octomber 1991
 
                  (c) Daniel Doekal, All Rights Reserved
   
      The BBS Clipper magazine, published PERIODICALLY, later WEEKLY......
   
      Some of the material used comes from scanning CLIPPER echoes
      which are carried in various BBS throughout the World.
      These Echoes are very often the source of the most often asked
      Questions and Answers about Clipper.
     
      Other material, which is fully signed or abbreviated is the
      copyright of the appropriate persons.
   
      The publisher is not responsible for other authors submissions....
      Published material is not necessarily the opinion of the publisher.
 
      Redaction:
         Publisher...................................Daniel Docekal
         Chief editor ...............................Daniel Docekal
         Language editor .................................Dave Wall
 


                               Table of Contents

 1. ARTICLES  ..............................................................  1
    The Programmer's Guide to CLIPPER Linkers - part (7)  ..................  1
    Some improvement to read command line arguments!!!  ....................  7
    Building code for REAL developers...  .................................. 12
 2. SOFTWARE  .............................................................. 17
    List of CLIPPER related areas on CLIPPER BBS HQ system  ................ 17
 3. ANOMALIES  ............................................................. 21
    ANOMALIES reports and commets  ......................................... 21
    Jo French anomalies report, some comments  ............................. 21
    AEVAL()           Undocumented return reference  ....................... 21
    APPEND FROM       Append From Delimited with Character Numbers  ........ 22
 4. CLIPPER NET  ........................................................... 23
    Index of described files in Clipper BBS Magazine  ...................... 23
 5. CLIPBBS  ............................................................... 25
    CLIPBBS distribution  .................................................. 25
    CLIPBBS, how to write an article!!!  ................................... 26

                                   - - - - -
 CLIPBBS 1-10                   Page 1                   29 Oct 1991


 ==============================================================================
                                    ARTICLES
 ==============================================================================


        The Programmer's Guide to CLIPPER Linkers - part (7)
 
 
         
 
                              PRODUCT COMPARISONS
 
         
 
 
         PLINK86s87
 
         Current Version - Clipper Summer 87
 
         List Price - Supplied with Clipper Summer 87
 
         PLINK86s87 is the linker provided with Clipper and is
         compatible with all Clipper-compiled objects, Clipper-compiled
         libraries, the Clipper libraries, and all third-party libraries.
         PLINK86 is a "static overlay" linker and requires careful
         overlay design.
 
         PLINK86s87 supports overlaying of "MODULES" from libraries to
         allow you to take simplify your development environment and
         work from libraries rather than .OBJ files.
 
         PLINK86s87 is a mature, reliable linker which is sophisticated
         enough to handle linking of most large Clipper applications which
         requires overlays, provided that you are patient enough to
         analyze your code and structure your overlays properly.
 
 
 
         RTLINK
 
         Current Version - 3.11
 
         List Price - $295.00
 
         RTLINK.EXE is a general-purpose MS-DOS linker for all compiler
         languages, assembly languages, and Clipper.   RTLINK is compatible
         with the Clipper libraries, Clipper-compiled objects and all
         third-party libraries.  RTLINK is is also compatible with all
         PLINK86 commands and will link your applications from your
         existing PLINK86 *.LNK files.
 
         RTLINK is both a "static" overlay linker and a "reloadable"
         overlay linker.  It's "reloadable" overlay feature is limited
         however to C/ASM object files and library modules.  All of the
         modules in CLIPPER.LIB, EXTEND.LIB and most third-party n
         libraries are reloadable because they were written in C/ASM.
 CLIPBBS 1-10                   Page 2                   29 Oct 1991


         All Clipper-compiled modules must be placed in "static-overlays"
         in the same manner as PLINK86.
 
         RTLINK also allows use of .PLLs (pre-linked libraries) to help
         reduce disk space usage of applications.   RTLINK is a mature,
         reliable linker which is sophisticated enough to handle linking
         of any large application which requires overlays.
 
         RTLINK has a "VIRTUAL OVERLAY" feature which provides the added
         feature of including the DATA portion of object modules into
         overlay segments, by writing the data to a "virtual overlay"
         on disk and restoring the data whenever the overlayed code is
         reloaded into memory.
 
         RTLINK supports overlaying of "MODULES" from libraries to
         allow you to take simplify your development environment and
         work from libraries rather than .OBJ files.
 
         RTLINK is an excellent linker for all applications, but
         particularly for applications which are C/ASM code intensive
         and NOT Clipper-code intensive.
 
 
 
         RTLINKplus
 
         Current Version - 4.0
 
         List Price - $495.00
 
 
         RTLINKplus is an even more sophisticated version of RTLINK which
         offer much more power in the area of debugging tools.  RTLINKplus
         includes MicroSoft CODE-VIEW support, a sophisticated runtime
         PROFILER, and an overlay analyzing system which scans .MAP files
         and produces graphs of overlay usage to help determine the
         efficiency of your overlay structures.
 
         RTLINKplus also includes a VIRTUAL MEMORY LINKING system which
         allows Microsoft C and MASM programs to automatically execute in
         all available conventional and expanded memory or in as little as
         100k of conventional memory.
 
 
         RTLINK and RTLINKplus are available from:
 
         Pocket Soft, Inc.
         P.O. Box 821049
         Houston, TX 77282
         Voice: (713) 460-5600
         Fax  : (713) 460-2651
 
         RTLINK/CLIPPER-5.0
 
         Current version - 3.11
 
 CLIPBBS 1-10                   Page 3                   29 Oct 1991


         List Price - Included with CLIPPER-5.0
 
         RTLINK-CLIPPER/5.0 is a custom version of RTLINK which supports
         all the basic features of RTLINK but with two important new
         features:
 
         1. Automatic Clipper-code overlaying - this feature uses a
            "dynamic-overlaying" technique which automatically manages
            Clipper-code overlays in an overlay pool at runtime.
 
         2. Incremental linking - this feature provides a faster link
            cycle than normal linking by maintaining a work file which
            is a history of past linking sessions.  This work file is
            then used to insure that only the code "changed" since the
            last link session is linked into the new executable.
 
 
 
         ALINK
 
         Current Version - 1.08
 
         List Price - $195.00
 
         ALINK.EXE is a linker specially designed for Clipper
         applications.   ALINK is compatible with the Clipper libraries
         and all third-party libraries.  ALINK is also compatible with
         many PLINK86 commands and will link your applications from your
         existing PLINK86 *.LNK files with some modifications.
 
         ALINK is a "dynamic overlay" linker which provides dynamic
         overlays for Clipper-compiled object files only.  ALINK will
         NOT overlay from .LIBrary files therefore all functions from
         .LIB files will be linked into the ROOT memory area.
 
         ALINK is the only linker which is NOT a stand-alone linking
         system.  It is instead an overlay "pre-processor" which
         extracts all the code segments from the Clipper-compiled objects
         down to the function or procedure level, creates an .OVL file
         of Clipper-executable code, then creates a set of .SYM (symbol)
         files which are used by PLINK86 or Microsoft LINK to complete
         the symbol "fix-ups" and generate the .EXEcutable program.
 
         ALINK also includes a replacement for OVERLAY.LIB which is the
         "dynamic overlay" manager.  This manager is linked into the
         .EXEcutable programs and manages the dynamic overlaying of all
         the Clipper code.  ALINK uses the Clipper free pool to link its
         executable code segments, therefore it is recommended that you
         use a memory-packing utility and call the AL_FLUSH() function
         regularly in your ALINK-ed programs to reduce memory fragmentation.
 
         ALINK is an excellent linker for applications which are
         Clipper-code intensive.  If you use many functions from third-
         party libraries, then ALINK will not allow these to be
         overlayed.
 
 CLIPBBS 1-10                   Page 4                   29 Oct 1991


         ALINK is a available from:
 
         Accfin Software
         329 North State St.
         Orem, UT 84057
         1-(800) 336-6644
 
 
 
         BLINKER
 
         Current Version - 1.3
 
         List Price - $189.00
 
 
         BLINKER.EXE is a linker specially designed for Clipper
         applications.
 
         BLINKER is compatible with the Clipper libraries, and all third-
         party libraries.  BLINKER is also compatible with many PLINK86
         commands and will link your applications from your existing
         PLINK86 *.LNK files with some modifications.
 
         Like ALINK,  BLINKER is a "dynamic overlay" linker which provides
         dynamic overlays for Clipper-compiled objects and "some" C/ASM
         objects.  BLINKER will allow overlaying of entire libraries
         with the "ALLOCATE" command.  This is not always a useful feature
         because very few libraries have modules which are ALL compatible
         with BLINKER.  BLINKER requires that C/ASM modules be "well-
         behaved".  The EXTEND.LIB library is an example of a well-behaved
         library, therefore, it may be ALLOCATEd in an overlay section.
 
         BLINKER's dynamic overlay manager works excellently with
         Clipper-compiled code and the EXTEND.LIB library.  Once you
         start experimenting with other libraries, you may find that it
         is not worth the effort to go any further.  Some third-party
         library developers such as FUNCKY, FLIPPER, dCLIP, etc. have
         released new versions of their libraries which are broken out
         into "resident" and "overlayable" to be fully compatible with
         BLINKER.
 
         BLINKER provides the best memory management solution for Clipper-
         code intensive .EXEcutable applications.  BLINKER is not a simple
         linker.  It also imbeds functions into the linked program which
         are called between loading of overlay segments for "memory-packing"
         to help reduce the memory fragmentation caused by "dynamic-
         overlaying".  This may cause problems with any non-standard memory
         allocation techniques you may have built into your application and
         should be taken into consideration.
 
         BLINKER supports special profiling features, incremental-linking,
         and allows "burning" of the  SET CLIPPER environment into the
         .EXEcutable program.
 
         BLINKER evolved from ALINK's technology therefore it accomplishes
 CLIPBBS 1-10                   Page 5                   29 Oct 1991


         its "dynamic-overlaying" in much the same manner, however it is
         a stand-alone linker and is 5 to 10 times faster than ALINK in
         producing an executable program.
 
         BLINKER is available from:
 
         BLINK, Inc.
         P.O. Box 7154
         Richmond, VA 23221-0154
         Voice: (804) 353-0137
         Fax  : (804) 355-1676
 
 
 
         WARPLINK
 
         Current version - 1.50b
 
         List Price - $250.00
 
         WARPLINK is a general-purpose linker designed for "dynamic-
         overlay" applications.
 
         WARPLINK is compatible with the Clipper libraries, and all
         third-party libraries.  WARPLINK is NOT compatible with PLINK86
         commands and will NOT link your applications from your existing
         PLINK86 *.LNK files.
 
         WARPLINK is a "dynamic overlay" linker which provides dynamic
         overlays for Clipper-compiled objects and "some" C/ASM objects.
         WARPLINK will allow overlaying of called modules from complete
         libraries by including the library name in (parenthesis).
 
         Like BLINKER, WARPLINK requires that C/ASM modules be "well-
         behaved".  Because WARPLINK is a general-purpose linker it is
         more compatible with third-party libraries than BLINKER,
         and it produces as memory-efficient executables as BLINKER.
 
         There are applications, however, where WARPLINK will create better
         memory models than BLINKER due to its ability to overlay code not
         manageable by BLINKER and other situations where WARPLINK will
         create better speed performance than RTLINK because its
         "overlay-pool" technique is more efficient than RTLINK's disk-
         intensive "overlay-reloading".  WARPLINK "learns" how to manage
         the pool most efficiently while the application is running.
 
         WARPLINK can overlay entire libraries but is NOT capable of
         overlaying "MODULES" like PLINK86 and RTLINK.
 
         WARPLINK also includes portions of the SMARTMEM (tm) library
         by Steve Steiner for memory profiling and memory defragmentation.
 
         WARPLINK works with all languages and can create .COM files
         directly from .OBJ files for much smaller non-Clipper
         applications.  It also supports incremental linking by re-linking
         only the modules which have been changed.
 CLIPBBS 1-10                   Page 6                   29 Oct 1991


         WARPLINK also includes a symbol-compacting utility which
         produces a second .EXE from the original .EXE and removes all
         duplicate (redundant) symbols from the symbol table to improve
         memory performance.  This eliminates the need to compile your
         .PRGs into large objects using .CLP files.
 
         WARPLINK is an excellent linker for all applications.  What
         it lacks in features, it more than makes up for in performance.
 
         WARPLINK is a available from:
 
         Hyperkinetix, Inc.
         666 Baker #405
         Costa Mesa, CA 92626
         (714) 668-9234

 ------------------------------------------------------------------------------
 CLIPBBS 1-10                   Page 7                   29 Oct 1991


           `C' Style ArgC() and ArgV() Function For Clipper 5.01
           =====================================================
 
                           By David A Pearson.
                           -------------------
 
    After reading about the Exe_Path() function by Terry Carmen back in
    issue 1-02 I decided that it would be nice to expand on the idea and
    include a set of ArgC() and ArgV() functions in my library.
 
    Given below is the source for the functions I developed. The approach
    I took was to grab the whole command line from the PSP block and then
    write a Clipper function to `split' the command line in the same way
    that `C' does when your applications starts up.
 
    First off, the function for grabbing the command line:
 
 ;*****************************************************************************
 ; File....: _GETARGS.ASM                                                     *
 ; By......: David A Pearson                                                  *
 ; Function: Provides an internal function for getting the arguments passed   *
 ; ........: to a clipper program.                                            *
 ;*****************************************************************************
 
 Public          _GetArgs
 
 Extrn           __RetCLen:Far
 
 _GetArgs_Text   Segment 'CODE'
                 Assume CS:_GetArgs_Text
 
 ;*****************************************************************************
 ; Function: _GetArgs()                                                       *
 ; Syntax..: _GetArgs() --> cArgString                                        *
 ; Usage...: Returns the argument string passed to the clipper program.       *
 ; By......: David A Pearson.                                                 *
 ;*****************************************************************************
 
 _GetArgs        Proc    Far
 
                 Push    BP              ; Save registers
                 Mov     BP,SP
                 Push    DS
                 Push    ES
                 Push    SI
                 Push    DI
 
                 Mov     AH,62h
                 Int     21h             ; BX now contains segment for PSP.
                 Mov     ES,BX
                 Mov     SI,80h          ; Offset for arg' string size byte.
                                         ; Move size into AL.
                 Mov     AL,Byte Ptr ES:[SI]
                 Xor     AH,AH           ; Zero AH.
                 Push    AX              ; Place size onto stack.
                 Inc     SI              ; Point to start of string.
 CLIPBBS 1-10                   Page 8                   29 Oct 1991


                 Mov     AX,ES           ; Move the segment of the string into
                                         ; AX.
                 Mov     BX,SI           ; Move the offset of the string into
                                         ; BX.
                 Push    AX              ; Place segment and offset onto the
                 Push    BX              ; stack.
                 Call    __RetCLen       ; Call Clipper with the string.
                 Add     SP,6            ; restore the stack.
 
                 Pop     DI              ; Restore registers
                 Pop     SI
                 Pop     ES
                 Pop     DS
                 Pop     BP
 
                 Ret                     ; And back we go
 
 _GetArgs        EndP
 
 _GetArgs_Text   EndS
 End
 
    I'm not too sure if this code will overlay very well with the likes of
    Blinker, but I'm sure that the ASM programmers among you will be able
    to sort that out!
 
    Now that we have a method of grabbing the command line we need to split
    it down into a usable form. Source code follows:
 
 /*****************************************************************************
 * File....: ARGS.PRG                                                         *
 * By......: David A Pearson                                                  *
 * Function: Provides a set of functions for getting at the command line      *
 * ........: arguments in a 'C' style.                                        *
 * Notes...: Compile with switches /n/w                                       *
 * ........: Please note that the first time you call either ArgC() or Argv() *
 * ........: the function SetArgs() will be called. SetArgs() in turn calls   *
 * ........: _GetArgs() to retrieve the command tail from the PSP block. It   *
 * ........: then goes on to parse the string and split it up as 'C' would    *
 * ........: before your program executes.                                    *
 * ........: Because of this initial delay you may wish to make a dummy call  *
 * ........: to one of the functions at the start of you application.         *
 *****************************************************************************/
 
 #define SLASH_R            chr(13)  // \r is an argument separator.
 #define SLASH_T            chr(9)   // \t is an argument sepatator.
 
 #define ARG_SEPARATORS     " "+SLASH_R+SLASH_T
 
 #xtranslate PrevChar(<cString>,<nPosition>)  ;
             =>                               ;
             if(<nPosition> > 0,substr(<cString>,<nPosition>-1,1),"")
 
 static nArgC := NIL
 static aArgV := {}
 
 CLIPBBS 1-10                   Page 9                   29 Oct 1991


 /*****************************************************************************
 * Function: ArgC()                                                           *
 * Syntax..: ArgC() --> nNumberOfArguments                                    *
 * Usage...: Returns the number of arguments passed to the Clipper program.   *
 * By......: David A Pearson                                                  *
 *****************************************************************************/
 
 function ArgC()
 if nArgC == NIL
    SetArgs()
 endif
 return(nArgC)
 
 /*****************************************************************************
 * Function: ArgV()                                                           *
 * Syntax..: ArgV([<nArgIndex>]) --> cArg | aArgs                             *
 * Usage...: If <nArgIndex> is passed it returns the argument at the position *
 * ........: indicated by the index. If called with no parameter it returns   *
 * ........: an array of all arguments.                                       *
 * By......: David A Pearson                                                  *
 *****************************************************************************/
 
 function ArgV(nArgIndex)
 local acReturn := NIL
 if nArgC == NIL
    SetArgs()
 endif
 if valtype(nArgIndex) == "N"
    if nArgIndex > 0 .and. nArgIndex <= nArgC
       acReturn := aArgV[nArgIndex]
    else
       acReturn := if(nArgIndex == 0,Exe_Path(),"")
    endif
 else
    acReturn := aArgv
 endif
 return(acReturn)
 
 /*****************************************************************************
 * Function: SetArgs()                                                        *
 * Syntax..: SetArgs() --> NIL                                                *
 * Usage...: Internal function to read in the command line and split it into  *
 * ........: it's componant parts in a style similar to 'C'.                  *
 * By......: David A Pearson                                                  *
 *****************************************************************************/
 
 static function SetArgs()
 local cCommand     := alltrim(_GetArgs()),;
       cThisArg     := ""                 ,;
       cThisChar    := ""                 ,;
       lInQuotes    := .F.                ,;
       nLoopCounter := 0
 if empty(cCommand)
    nArgC := 0
 else
    for nLoopCounter := 1 to len(cCommand)
 CLIPBBS 1-10                   Page 10                  29 Oct 1991


       cThisChar := substr(cCommand,nLoopCounter,1)
       do case
          case cThisChar $ ARG_SEPARATORS .and. !lInQuotes
               if !(PrevChar(cCommand,nLoopCounter) $ ARG_SEPARATORS);
                          .and. !empty(cThisArg)
                  aadd(aArgV,cThisArg)
                  cThisArg := ""
               endif
          case cThisChar == "\"
               if substr(cCommand,nLoopCounter+1,1) != '"'
                  cThisArg += cThisChar
               endif
          case cThisChar == '"'
               if PrevChar(cCommand,nLoopCounter) == "\"
                  cThisArg += cThisChar
               else
                  if lInQuotes
                     aadd(aArgV,cThisArg)
                     cThisArg := ""
                  else
                     if !(PrevChar(cCommand,nLoopCounter) $ ARG_SEPARATORS);
                                 .and. !empty(cCommand)
                        aadd(aArgV,cThisArg)
                        cThisArg := ""
                     endif
                  endif
                  lInQuotes := !lInQuotes
               endif
          otherwise
               cThisArg += cThisChar
       endcase
    next
    if !empty(cThisArg)
       aadd(aArgV,cThisArg)
    endif
    nArgC := len(aArgV)
 endif
 return(NIL)
 
    Please note that for ArgV() to work correctly you should include the
    Exe_Path() function in your application.
 
    ArgC() returns the number of paramaters passed on the command line,
    for example:
 
         nPassed := ArgC()
 
    ArgV() returns the actual value of the parameter, for example:
 
         function ShowArgs()
         local nArg := 0
         for nArg := 0 to ArgC()
            ? ArgV(nArg)
         next
         return(NIL)
 
 CLIPBBS 1-10                   Page 11                  29 Oct 1991


    would display a list of all arguments passed. Note that calling ArgV()
    with a value of 0 is the same as calling Exe_Path(). Also, you can
    call ArgV() with no parameters to get an array of all passed parameters.
    For example:
 
         function ShowArgs()
         local aArgs := ArgV()
         aeval(aArgs,{|element| qout(element)})
         return(NIL)
 
    Please note that the returned array does *not* contain the output
    from Exe_Path(), Clipper isn't too keen on you asking for element
    0 of an array!
 
    Using a ArgV()/ArgC() approach in your application has a couple of
    advantages. First, you can get access to the command line from any
    point in your system, not just from the top level function/procedure.
    Also, you can cater for a variable number of parameters. By using
    ArgV() you can also detect the Clipper // paramaters too, for example
    you can check if //F<NoOfFiles> has been passed on the command line.
 
    I hope this is of use to someone. I developed these more for fun than
    anything else, and I must admit I've not used them for anything yet!
 
                 __DavePearson()

 ------------------------------------------------------------------------------
 CLIPBBS 1-10                   Page 12                  29 Oct 1991


          BUILDING CODE FOR REAL (estate?) DEVELOPERS
          -----------------------------------------------------------
          Copyright (C) G. L. Jereza  1991  All Rights Reserved.
 
          Developing  software  is  very  much  like  building a house.
          Let's look at two similarities and briefly elaborate on  one.
          First,  the  system  analyst  is,  in  many  ways,  like  the
          architect; the  system designer  is like  the contractor; and
          the programmer the  craftsman.  And  second, just as  a house
          must be built with a set of building codes, so must a program
          be written according to design and coding standards.
 
          Standards are  the application's  bedrock.   The standards in
          here  come  from  several  sources.    Most are from personal
          experience.   The others  are from  other language  norms, or
          were adapted from  Simonyi's Hungarian notation  methodology,
          as  well  as  other  sources.    The  selection was, well ...
          eclectic.
 
          These standards have somewhat overlapping objectives:
 
                  1. improve maintainability
                  2. save time thinking about variable names
                  3. save effort entering unnecessary keystrokes
                  4. make debugging easier, and
                  5. encourage consistency through documentation
 
          The common theme is speed.  However, since software evolve or
          die, the primary objective is to improve maintainability.
 
          In the long  term, these standards  are more economical  than
          new hardware.   Successful  implementation, however,  require
          consistent  use,  and  of  course,  that  both  designer  and
          programmer exercise discipline and a sense of idealism.
 
          Enough said.
 
 
          CLIPPER 5 DESIGN AND CODING STANDARDS
 
          Rule 1: Establish a clear objective.  Remember that a problem
                  understood  is  half  solved.    Use  one sentence to
                  describe   it   and  several  qualifiers  to  address
                  'doability' (including features), time, and cost
                  constraints. Example:
 
                           An interpreter module for Clipper.
                             - IDE like QuickBasic 4.5
                             - x guru year(s)
                             - priced less than $100
 
                  Once the objective has been created, stand by it.  If
                  the pressure to change becomes unbearable, then  call
                  it something else.  A  new version perhaps?  (A  very
                  wicked grin  is appropriate  here).   Or start  a new
                  project!  (Easy to do when you have not invested your
 CLIPBBS 1-10                   Page 13                  29 Oct 1991


                  ego, or too much time, into that old project).  Often
                  times, it is far  easier to start from  the beginning
                  as compared to modifying code.
 
          Rule 2: Define   file  structures   and   relationships,  and
                  normalize data (remove subcategories).  Start a  data
                  dictionary where all the terms are defined.  The  key
                  word here is 'start'.
 
          Rule 3: Avoid coding until the very last.  Use pseudocode  or
                  structured English.   Prototype as soon  as possible.
                  Draft a user's manual.  Get user feedback.  Make sure
                  you WILL have users.  Realize that there is no  right
                  way of doing the wrong thing.
 
          Rule 4: Code the  program in  three stages:   First,  make it
                  work.  Second, make it look good.  Last, optimize the
                  code.  Test top modules first (i.e. top-down design).
                  Use 'stubs' for lower modules.
 
          Rule 5: Avoid overly clever or convoluted code (e.g. compound
                  Boolean expressions). Period.
 
          Rule 6: Practice good system design.  Checklist:
 
                  __  Modules should be functionally cohesive.  Do  not
                      combine  unrelated  processes  into   meaningless
                      modules. Avoid procedures. Use functions.
                  __  Modules  should  be  loosely  coupled.   Few data
                      elements should be shared between module  i.e.  a
                      module should  not modify  the internal  logic or
                      data of  another module.   Use  local and  static
                      variables.
                  __  A module should not call more than  approximately
                      half a dozen lower-level modules.
                  __  Any module affected by the outcome of a  decision
                      should be subordinate to the module that  affects
                      the   decision   (though   not   necessarily  the
                      immediate subordinate).
 
          Rule 7: Design  a  user-friendly  interface.   This means you
                  must  design  for  the  user  and  you must know your
                  subject.  Checklist:
 
                  __  Maintain the user's interest.
                  __  Orient the user (e.g. number screens).
                  __  Communicate in concrete and specific terms.
                  __  Request inputs and produce outputs in consistent
                      terms.
                  __  Ask for information in a logical sequence.
                  __  Make it obvious what kind of error was commited
                      and where.
                  __  Provide a way to cancel part or all of the
                      transaction.
                  __  Provide a convenient help mechanism.
                  __  Give the user  control.
 CLIPBBS 1-10                   Page 14                  29 Oct 1991


                  __  Keep the user informed at all times.
                  __  Provide defaults for standard inputs.
                  __  Take advantage of color and sound, but don't
                      overdo it.
                  __  Focus the user's attention e.g. a cursor.
                      People focus on one concept at a time. Do not
                      focus on the technology.
                  __  Keep  it simple even if it means code complexity.
                      Avoid unnecessary parts. Avoid the feature-creature.
 
          Rule 8: Do not re-invent the wheel.  Do what CPAs  (certified
                  public  accountants)  do:    cut,  paste, and attach.
                  Isaac Newton said, "If I have seen further, it is  by
                  standing on  ye shoulders  of giants".   Re-use code,
                  but  do  not  code  for  re-usability (unless this is
                  *the* objective).
 
          Rule 9: Write clear code, and complete but  concise comments.
                  Checklist:
 
                  __  Lower   case    all   native    language   words.
                      Exceptions:
 
                      a. FUNCTION, RETURN, LOCAL, STATIC, and FIELDS.
                      b. Object oriented export instance variables.
                         Example:
 
                           oBrowse:getColumn(oColumn)
                                   ^--- lowercase tagname.
 
                  __  Begin   user-defined   functions   with   Capital
                      letters.  Start functions from a 3rd party source
                      with a "3".  (What?!   You don't have the  source
                      code?).  Use  UpperLower combinations to  delimit
                      identifiers,  e.g.    FirstName.    Also,   start
                      conversion functions with the value they take and
                      end  with  the  converted  value separated by the
                      number 2.
 
                  __  Prefix  all  variables  with  a  character   type
                      prefix:
 
                        a - Array         o - Object
                        b - Code block    s - Screen variable
                        c - Character     k - Color string
                        d - Date          m - a variable in .mem file
                        l - Logical       z - miscellaneous or catchall
                        n - Numeric
 
                      Use   the   single   type-prefix   character  for
                      temporary variables.
 
                  __  Express  file  names  in  capital letters.  Begin
                      file names  with a  common prefix.   Index  files
                      should reflect the file  that they belong to  but
                      not what the index expression is.  Example:
 CLIPBBS 1-10                   Page 15                  29 Oct 1991


                      Correct:
                         NAMES.DBF ---> NAMES1.NTX
                                        NAMES2.NTX
                      Wrong:
                         NAMES.DBF ---> NAMESF.NTX
                                        NAMESL.NTX
 
                      Also, reference all fields with an alias.
 
                  __  Layout  each  code  page  in  an  orderly manner.
                      Avoid  writing  lines  that  extend  beyond   the
                      visible right margin.  Use continuation  symbols.
                      Indent logical levels 3 spaces.  Do not use tabs.
                      Use  parentheses  liberally.    Use a full screen
                      width line of dashes to delineate a logical break
                      in a  program file.
 
                  __  Use  a  standard 'header' for  each program file.
                      Example:
 
                         Name .......: 3GOOD()
                         Description.: Check code integrity.
                         Syntax .....: 3GOOD()
                         Returns ....: Logical
                         Called by...: Main()
                         Calls.......: -none-
                         Example ....: if !3GOOD()
                                          zap
                                       endif
                         Comments....: Function from Free Inc.
 
                  __  Limit  module  listings  to  54  lines or 1 page.
                      Large  complex  modules  should  be  broken  into
                      submodules.  On  rare ocassions, trivial  modules
                      consisting of two to three lines, can be combined
                      into a supermodule.
 
                  __  Use  version  control  software  to document code
                      during development.
 
                  __  Use include files.
 
                  __  Ideally, final code should be self - documenting.
                      Four    letter    command    abbreviations    are
                      counter-productive.   Like code,  comments should
                      be  modular.    No  references  to  other sources
                      (other than in the header) allowed.
 
                  __  Compile using the following example:
                      CLIPPER filename  [/m/n/s/m | /m/n/b/p]
 
                  __  Link using the following example:
                      RTLINK FI filename VE 2 LIB 3freelib PLL base50
 
          Rule 10: Test your  application with this in  mind:  "testing
                  can  show  the  presence,  but  never  the absence of
 CLIPBBS 1-10                   Page 16                  29 Oct 1991


                  errors".   Where the  documentation and  the software
                  are inconsistent  with each  other, generally  assume
                  that the error is in the software (or as our publish-
                  er is fond of saying, 'reality is different').
 
          That's it.  Just like the ten commandments.  And like the ten
          commandments, the list is not all inclusive or comprehensive.
          It is aimed toward  smaller projects.  In those  instances,
          it worked for me.  And it should work for you too.

 ------------------------------------------------------------------------------
 CLIPBBS 1-10                   Page 17                  29 Oct 1991


 ==============================================================================
                                    SOFTWARE
 ==============================================================================


 List of CLIPPER related areas on CLIPPER BBS HQ system
 
     Mentioned files are available on NETCONSULT BBS, 31-10-4157141
     (working hours, workdays 18:00->08:00, weekends 24hours/day)
 
     Speeds 1200bps -> 14400bps (V32 modem)
 
     FIDONET 2:285/608, Signet 27:1331/4412
 
 
 ͸
  # 53  CLIPPER related utilities *CL*              Access Level :        10 
 Ĵ
       153 KBytes in     2 Files   ۲ 
 ;
 XREF140C.ZIP  152610 10-17-91* [002] DBase/Clipper DBF and NDX/NTX
                                           Documentation Tool
 
 
 
 ͸
  # 54  CLIPPER text&.NGuides     *CL*              Access Level :        10 
 Ĵ
      1499 KBytes in    42 Files   ۲ 
 ;
 -Ŀ
 -                  TEXT FILES about/around CLIPPER                         
 -                                                                          
 -
 - 
 
 RELCLIP5.ARJ   59424 06-11-91  [002] Release note in WP 5.1 format
 -            THis file uploaded  by somebody there maybe for making betters
 -            score of Download:Upload ratio contains complete text of release
 -            note about Clipper 5.01.
 NED.TXT         2271 05-07-91  [002] lezen van commandline (clipper 5.0 +
                                           EXPAND.LIB)
 -            Sample text about reading a command line parameters from inside
 -            of Clipper more universal than PARAMSTR() function. (Dutch text)
 SHARE.MSG       6028 09-30-90  [001] Text about using SHARE.EXE with CLIPPER
 -            Usefull text explaining SHARE.EXE command from MS DOS. Especialy
 -            usefull because written from point of view CLIPPER.
 CL50PRG.ARJ    25684 09-16-91  [002] Discussion about 5.0 from CW on Nantucket
 -            Discussion about Clipper 5.0x from CLIPPER WORLD. CLIPPER World is
 -            Nantucket BBS in UK and contains areas for CLipper with direct
 -            support of Nantucket stuff in England.
 CLIPLINK.ARJ   38148 09-06-91  [002] documentation about LINKERs for CLIPPER
 -         Document about CLipper linkers. Giving complete list of linkers for
 -         clipper. Compares them and explaining all linking and overlaying
 -         methods. Giving explanation about how to static overlay clipper and
 -         how to control some from linkers. VERY GOOD text.
 CLIPBBS 1-10                   Page 18                  29 Oct 1991


 CLPGUID4.ARJ   29404 04-14-91  [002] Errate of programs for Rick Spence's book
 -           This is a complete set of programs used in Rick Spences's book about
 -           Clipper, together with fixes of mistakes inside.
 
 -Ŀ
 -                  NORTON GUIDES or another help for CLIPPER               
 -                                                                          
 -
 - 
 
 50NGCH.ARJ      9583 01-06-91  [002] Norton Guide for Clipper 5.0 header files
 -           This is ONLY a complete .NG database contains all .CH file coming
 -           with CLIpper 5.0. It's nice to have it sometime when one is
 -           interested in some constants or structures stored inside of this
 -           header files.
 
 -Ŀ
 -                  NANTUCKET and ANOTHER CLIPPER NEWSLETTERs....           
 -                                                                          
 -
 - 
 
 NN0101.ARJ      9869 12-11-90  [002] Nantucket News Volume 1 Number 1
 NN0102.ARJ     17079 12-11-90  [000] Nantucket News Volume 1 Number 2
 NN0103.ARJ     17921 12-11-90  [000] Nantucket News Volume 1 Number 3
 NN0104.ARJ      8164 12-11-90  [000] Nantucket News Volume 1 Number 4
 NN0201.ARJ      7576 12-11-90  [000] Nantucket News Volume 2 Number 1
 NN0202.ARJ     18900 12-11-90  [000] Nantucket News Volume 2 Number 2
 NN0203.ARJ      3205 12-11-90  [000] Nantucket News Volume 2 Number 3
 NN0204.ARJ      9125 01-04-91  [000] Nantucket News Volume 2 Number 4
 NN0301.ARJ     16109 12-11-90  [000] Nantucket News Volume 3 Number 1
 NN0302.ARJ     12296 12-11-90  [000] Nantucket News Volume 3 Number 2
 NN0303.ARJ     15879 12-11-90  [000] Nantucket News Volume 3 Number 3
 R(C)0206.ARJ   47402 12-11-90  [000] Reference Clipper Volume 2 number 6
 R(C)0209.ARJ   69086 12-11-90  [000] Reference Clipper Volume 2 number 9
 R(C)0210.ARJ  141162 12-11-90  [000] Reference Clipper Volume 2 number 10
 R(C)0211.ARJ   97237 12-11-90  [000] Reference Clipper Volume 2 number 11
 R(C)0212.ARJ  123300 12-11-90  [000] Reference Clipper Volume 2 number 12
 R(C)0306.ARJ   19940 09-12-90  [000] Reference Clipper Volume 3 number 6
 R(C)0307.ARJ   48238 12-11-90  [000] Reference Clipper Volume 3 number 7
 R(C)0310.ARJ  125633 09-12-90  [000] Reference Clipper Volume 3 number 10
 R(C)0311.ARJ  127102 09-12-90  [000] Reference Clipper Volume 3 number 11
 R(C)0312.ARJ  201636 09-12-90  [000] Reference Clipper Volume 3 number 12
 TIPS_1.ARJ      4708 08-20-91  [001] Another ROGER DONNAY text about
 TIPS_2.ARJ      3770 08-15-91  [001] Clipper, Linking, Overlaying
 TIPS_3.ARJ      5064 08-15-91  [002] And other usefull things
 CLPFON.ARJ     54373 09-10-91  [001] Some EGA/VGA Clipper Fonts, needs Expand
                                           Lib
 CL5103.ARJ     28749 09-16-91  [003] Anomaly report No. 3 for Clipper 5.01
 ALTDO328.ARJ   25805 09-16-91  [001] Fast, small DBF file utility
 CLIP110.ARJ    27114 09-16-91  [001] Clip 1.10, easy MAKE for Clipper '87 &
                                           5.0x
 CL-ROUTE.263    4499 09-21-91  [000] CLN routing plan for Friday, 20 Sep 1991
 SCANCODE.ARJ    2154 09-27-91  [000] dbf-file with all ScanCodes
 CL-ROUTE.270    5109 09-28-91  [000] CLN routing plan for Friday, 27. Sep 1991
 FECHO.DAT        512 10-15-91* (yet to be descriped)
 CLIPBBS 1-10                   Page 19                  29 Oct 1991


 -------------------------------------NEW_-------------------------------
 CL-POL.007      3319 10-14-91* CLN policy No. 07, Sunday, 13. Oct 1991
 CL-ROUTE.286    5686 10-14-91* CLN routing plan for Sunday, 13. Oct 1991
 CTNEWS01.ARJ   21220 10-14-91* [001] Deutsche Clipper News Ausgabe 1 von Henry
                                           Jalbuena (2:246/14.5)
 
 
 
 ͸
  # 55  CLIPPER libraries         *CL*              Access Level :        10 
 Ĵ
      1072 KBytes in    14 Files   ۲ 
 ;
 -Ŀ
 -                  LIBRARIES for Clipper - all  kinds                      
 -                                                                          
 -
 - 
 
 CLIP327.ARJ    13141 03-17-90  [000] 5.0x  Communication CLIPPER<-->IBM3270
 -            This is .LIB file which will allow to connect Clipper application
 -            to IBM3270 communication.
 CLPNET.ARJ      8855 07-11-90  [003] 5.0x  NOVELL Bindery functions Library
 -           .LIB file for accessing bindery informations from NOVELL bindery.
 -            Novell bindery contains all informations about users and objects
 -            inside of server. Therefore can be very useful to have access to
 -            this kind of informations.
 LXNET.ARJ      18048 09-30-90  [002] 5.0x NOVELL Bindery and printing
 -            This is a another version of CLPNET.ARJ. Adding some possibilities
 -            to access a printing abilities of Novell Netware.
 MOUS50.ARJ     13507 03-23-91  [001] 5.0x mouse library
 -            Complete MOUSE library for use in Clipper 5.0x applications.
 -            Of course is NOT supplied source, only .LIB file.
 CLIPFPCX.ARJ   34268 05-24-91  [004] S87 5.01x  Clipper s87/5.01: "Fast" PCX
 -         VERY good library for VERY FAST displaying a PCX file to display
 -         of your computer. Working really very fast and taking very small
 -         part of memory for to do it.
 VWINDOW.ARJ    11257 05-16-91  [005] 5.0x Windowing library for CLipper
 -            This is a library with documentation for windowing system for use
 -            with Clipper 5.0x. Seems nice, but i have my own one.
 AHELP5.ARJ    197215 05-16-91  [001] Complete Linkable (.LIB) help
 -            This library is offering complete HELP system with all normal
 -            HELP possibilities. There is also good documentation for it.
 TRL.ARJ       311671 04-04-91  [002] 5.0x Tom Rettig Library for Summer+5.0
 -         Well known library with mostly low level functions. Now it's
 -         totally free for use and is coming together with ALL sources.
 -  
 EXPAND50.ARJ   78090 04-04-91  [001] 5.0x Expand Library for CLIPPER 5.0
 EXPAND52.ARJ   87272 06-18-91  [002] 5.01 Expand library v2.00
 EXPAND30.ARJ   65418 08-29-91  [001] S87  Expand Library for Summer 87
 -         Dutch origin library. Very good combination of low level and
 -         high level functions for all kind of system dependent functions.
 -         Modem communication, mouse, PRINT support and number of next
 -         well usefull functions. This is really VERY good library. V2.00
 -         lot of new function which are really very nice!
 TSDWIN10.ARJ   27895 03-06-91  [002] 5.0 Another windowing library
 CLIPBBS 1-10                   Page 20                  29 Oct 1991


 -            Complete windowing library for CLipper 5.0 which seems be a good.
 -            I didn't test this library but probably i will do this because
 -            seems to be really nice.
 3PX50.ARJ      65134 11-24-90  [000] Another Library for Clipper
 -            some function to improve your programs...
 CLHLP100.ARJ  140920 07-04-91  [001] Create Help utility for your program.!!
 -            Library for both versions of Clipper S87 and 5.01

 ------------------------------------------------------------------------------
 CLIPBBS 1-10                   Page 21                  29 Oct 1991


 ==============================================================================
                                   ANOMALIES
 ==============================================================================


                      ANOMALIES and their comments
 
 This part of Clipper BBS Magazine is dedicated to all discovered 
 anomalies and comments about them in Clipper products. Because 
 Nantucket is still unable to give own bug and anomalies reports (as 
 actually did in past with Summer 87 version) is very handy to have 
 results of many investigations done on many user places. I'm also
 doing my own investigatings, because i'm always very good when someting 
 has hidden problems. Everything what i buy will first show all problems 
 and then all normal things. This amazing part of my live is sometime 
 making me crazy, but for testing of programs it's great <grin>.
 
 Daniel
 
 

 ------------------------------------------------------------------------------


                  Jo French anomalies report, some comments
 
 Following serie of anomalies and comments to them is using as basis complete
 JO FRENCH anomaly report (file CL5103.NG), eventually later version (5104 is
 slowly coming somewhere around). Because i'm not member of Compuserver and
 from Europe is Compuserver one from most expensive and most hard accesible
 medias to acces, i want to comment some Jo French reported anomalies here.
 Maybe he will get all this commment and will be able to update his report
 for new things from mine and also for some commented facts.
 
 Jo French is making great deal. For 5.0 version of CLipper it was wonderfull
 job to collect all those bugs (anomalies so called) and in this time Jo's
 report was very good with very good checking. Probably during time and lot
 of work it's sometime loosing quality of previous reports. Because i'm
 keeping also mine personal buglists, my investigations of all Jo's reported
 problems is sometime different. Therefore i want to pick up those differences
 and hope that someone else will be able to give me additional informations
 to finish my private research.
 
 Daniel

 ------------------------------------------------------------------------------


              AEVAL()           Undocumented return reference.
 
   Problem Statement
 
   AEVAL() documentation does not mention the presence of a second return
   reference; i.e., the element number.
 
 ---COMMENT---
 CLIPBBS 1-10                   Page 22                  29 Oct 1991


     Maybe my english knowledge is not enough good to understand this simple
     sentence <grin>, but i don't see any possibility to have presence of a
     second return reference from one function. Only via changing directly
     some parameter of function, but how two returns?
 
     JO, if you are reading this, please try to keep good work which i saw
     in all 5.0 version reports and complete all description to be enough
     clear and descriptive.
 
 .DD.

 ------------------------------------------------------------------------------


       APPEND FROM       Append From Delimited with Character Numbers.
 
   Problem Statement
 
   APPEND FROM DELIMITED does not translate numbers enclosed in quotes to
   numerics for input to a numeric field.
 
 ------COMMENT-----
 
     Maybe i'm missing some background of this problem, but when i'm
     creating test program like this:
      Ŀ
        #define VARSIZE 128                        
        dbcreate('test01.dbf',;                    
                { {"CHARS", "C", VARSIZE , 0 },;   
                {"NUMBR", "N",  12     , 2 }  })   
                                                   
        use TEST01                                 
        append from test.txt delimited             
      
 
     Then creating file TEST.TXT with text for append:
      Ŀ
        1,1                                        
        "2","2"                                    
        3,3                                        
        "4","4"                                    
        5,5                                        
        "6","6"                                    
        7,7                                        
        "8","8"                                    
        9,9                                        
      
 
     Result is as expected. Numeric field correctly filled with
     numbers coming from appended text, never mind if closed in
     quotes or not.
 
     Has anybody around some other experience?
 
 .DD.

 ------------------------------------------------------------------------------
 CLIPBBS 1-10                   Page 23                  29 Oct 1991


 ==============================================================================
                                  CLIPPER NET
 ==============================================================================


 
 Following is COMPLETE list of all published file descriptions in Clipper
 BBS magazine in previous numbers. Purpose of this index list is to allow
 anybody find needed file descriptions in growing number of described files.
 Short description after name will give first possible close image about
 file. Number enclosed in "[]" will mean number of Clipper BBS magazine.
 
 Ŀ
 FileName     Src Description                                     Where 
 Ĵ
 ACCESS.ARJ   Cln Source of speed testing program                 [1-06]
 ACH2TB.ARJ   Cln Convert ACHOICE to TBROWSE                      [1-05]
 ACHOO2.ARJ   Cln Replacement of ACHOICE with GET possibilites    [1-06]
 ADHOC302.ARJ Cln Summer 87 inteligent report program             [1-04]
 CALC14.ARJ   Cln PoPup Calculator                                [1-08]
 CL5103.ARJ   Cln Report of 5.01 anomaly number 3                 [1-04]
 CL5REP6.ARJ  Cln 5.01 replacement of REPORT command              [1-04]
 CLIP110.ARJ  Cln Clipper Documentor program                      [1-05]
 CLIPLINK.ARJ Cbs Complete text of R.Donnay about linkers         [1-04]
 CLIPSQL.ARJ  Cln Demo of complete SQL library for CLipper        [1-05]
 CLPFON.ARJ   Cln Set of fonts for EXPAND.LIB from author         [1-03]
 COND.ARJ     Cln Builder of conditional indexes like SUBNTX      [1-03]
 DBSCN2.ARJ   Cln Screen designer generator                       [1-05]
 DIAL.CLN     Cln Dialer with using of FOPEN()                    [1-07]
 DOC111.ARJ   Cln Documentor, newer version                       [1-08]
 GSR151.ARJ   Cln Global Search and replace for programmers       [1-07]
 HGLASS.ZIP   Cln Hour glass for indication of index progression  [1-04]
 INDXSL.ARJ   Cln User Fields selection builder for index generate[1-03]
 IOBASYS9.ARJ Cln Demo of S87 library and calling Clipper from C  [1-03]
 JG2.ARJ      Cln Jumping between GET statements in READ          [1-08]
 KF_LOKUP.ARJ Cln Set of program for database relations           [1-07]
 LUTLIB.ARJ   Cln Another Clipper library                         [1-08]
 MK30.ARJ     Cln Mouse library demo version                      [1-03]
 MOVEGETS.ARJ Cln GETSYS change for moving between gets via VALID [1-03]
 NFDESC2.ARJ  Cln NanForum library description list               [1-06]
 NFLIB2.ARJ   Cln NanForum library main file                      [1-06]
 NFSRC2.ARJ   Cln NanForum library Source files                   [1-06]
 NOTATION.ARJ Cln Complete text of article about hungarian notat. [1-04]
 OOPSCL5.ARJ  Cln Another version of pseudo objects               [1-07]
 PACKUP.ARJ   Cln ASM source of PACK/UNPACK replacement SCRSAVE.. [1-04]
 PAT1.ARJ     Cln CIX NanForum Libraryy PATCH                     [1-07]
 POPUPCAL.ARJ Cln Popup calender                                  [1-05]
 POWER10.ARJ  Cln French library                                  [1-07]
 READPW.ARJ   Cln GETSYS change for password invisible reader     [1-03]
 SCANCODE.ARJ Cln Database with scan codes                        [1-07]
 SCRSAVE.ARJ  Cln Screen AntiBurning utility (inactivity snake)   [1-05]
 SHELP50A.ARJ Cln SuperHelp for Clipper                           [1-07]
 SOUND.ARJ    Cln Multiple TONE() used as one SOUND function      [1-06]
 SYMBOL.ARJ   Cln Dumper of symbol tables of Summer87 .EXE        [1-03]
 TBWHL4.ARJ   Cln WHILE browsing using TBROWSE, well commented    [1-06]
 VSIX711.ARJ  Cln Vernon Six Clipper utilities and library        [1-05]
 CLIPBBS 1-10                   Page 24                  29 Oct 1991


 
 
 Src can be:
     Cln     File is accesible on ClipperNet
     Cbs     File is accesible in HQ BBS of CLipper BBS Magazine
 

 ------------------------------------------------------------------------------
 CLIPBBS 1-10                   Page 25                  29 Oct 1991


 ==============================================================================
                                    CLIPBBS
 ==============================================================================


                              CLIPBBS Distribution
   
   CLIPBBS is special magazine about CLIPPER and CLIPPERing (or about 
   another related problems and xBASE languages). This magazine is for
   free and articles aren't honored. Nobody can make a profit from the
   distribution of this magazine.
   
   CLIPBBS can be freely downloaded and uploaded to any BBS or any other
   public system without changes of original contents or number of files
   in original archive (kind of archive can be changed, but we are sup-
   porting ARJ archive because is best and smallest).
   If you are interested in CLIPBBS and would like to become a DISTRIBUTION
   site, contact publisher on 2:285/608@fidonet or 27:1331/4412@signet
   or just call to 31-10-4157141 (BBS, working 18:00->08:00, 2400bps) or
   voice to 31-10-4843870 in both cases asking for DANIEL (Docekal).
   
   Distribution sites:
   
   United Kingdom
       Welsh Wizard, SYSOP Dave Wall, phone 44-656-79477
   
   United States of America
       The Southern Clipper, SYSOP Jerry Pults, phone 1-405-789-2078

 ------------------------------------------------------------------------------
 CLIPBBS 1-10                   Page 26                  29 Oct 1991


                      How to write articles in CLIPBBS?
   
   
   Submission of articles to CLIPBBS is really easy:
     Maximum of 78 characters per line, as long or as short as you like
     ASCII text.
     Choose from the list of extension which most describes your text, or
     just name it .ART as ARTicle and send it to publisher or to any
     distribution site via modem to BBS or with mailer as file attach.
     Article will come automatically appear in the next free issue.
   
   Extensions are:
   
           Articles (anything)             .ART
           Software                        .SOF
           News                            .NEW
           Question and Answers            .Q&A
           ANOMALIES and their comments    .ANO
           Letters to editors              .LET
           Advertisement                   .ADV
           Wanted                          .WAN
           Comments                        .CMS
           DUMP from conferences           .DMP
           Clipper Net                     .CLN
           
   That's all at the moment, there will probably be changes later, as the
   magazine evolves. If you have any ideas for a new section of CLIPBBS,
   please tell us, or just write an article about it.
   
   Daniel, publisher

 ------------------------------------------------------------------------------
