home *** CD-ROM | disk | FTP | other *** search
/ Black Box 4 / BlackBox.cdr / clipper / clbbs110.arj / CLBBS110.TXT
Encoding:
Text File  |  1991-10-29  |  63.5 KB  |  1,337 lines

  1.                         ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░                      
  2.               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░             
  3.         ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░       
  4.      ░░░░░░░▓▓▓▓░░▓▓▓▓░░░░░▓▓▓▓░░░▓▓▓▓▓▓░░▓▓▓▓▓▓░░▓▓▓▓▓▓░░░▓▓▓▓░░░░░░░░░░░    
  5.    ░░░░░░░░▓▓  ▓▓░░▓▓  ░░░░░▓▓  ░░░▓▓  ▓▓░░▓▓  ▓▓░░▓▓  ▓▓░▓▓  ▓▓░░░░░░░░░░░░  
  6.   ░░░░░░░░▓▓  ░░  ░▓▓ ░░░░░░▓▓ ░░░░▓▓ ░▓▓ ░▓▓ ░▓▓ ░▓▓ ░▓▓ ▓▓▓░░  ░░░░░░░░░░░░ 
  7.  ░░░░░░░░░▓▓ ░░░░░░▓▓ ░░░░░░▓▓ ░░░░▓▓▓▓▓  ░▓▓▓▓▓  ░▓▓▓▓▓  ░▓▓▓░░░░░░░░░░░░░░░░
  8.  ░░░░░░░░░▓▓ ░░░░░░▓▓ ░░▓░░░▓▓ ░░░░▓▓    ░░▓▓  ▓▓░░▓▓  ▓▓░░░ ▓▓▓░░░░░░░░░░░░░░
  9.   ░░░░░░░░░▓▓░░▓▓░░▓▓ ░▓▓ ░░▓▓ ░░░░▓▓ ░░░░░▓▓ ░▓▓ ░▓▓ ░▓▓ ▓▓░░▓▓ ░░░░░░░░░░░░ 
  10.    ░░░░░░░░░▓▓▓▓  ▓▓▓▓▓▓▓ ░▓▓▓▓░░░▓▓▓▓░░░░▓▓▓▓▓▓  ▓▓▓▓▓▓  ░▓▓▓▓  ░░░░░░░░░░░  
  11.      ░░░░░░░░    ░░       ░░    ░░░    ░░░░      ░░      ░░░    ░░░░░░░░░░    
  12.         ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░       
  13.               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░             
  14.                         ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░                      
  15.  
  16.    Volume 1, Number 10                                   29 Octomber 1991
  17.  
  18.                   (c) Daniel Doçekal, All Rights Reserved
  19.    
  20.       The BBS Clipper magazine, published PERIODICALLY, later WEEKLY......
  21.    
  22.       Some of the material used comes from scanning CLIPPER echoes
  23.       which are carried in various BBS throughout the World.
  24.       These Echoes are very often the source of the most often asked
  25.       Questions and Answers about Clipper.
  26.      
  27.       Other material, which is fully signed or abbreviated is the
  28.       copyright of the appropriate persons.
  29.    
  30.       The publisher is not responsible for other authors submissions....
  31.       Published material is not necessarily the opinion of the publisher.
  32.  
  33.       Redaction:
  34.          Publisher...................................Daniel Docekal
  35.          Chief editor ...............................Daniel Docekal
  36.          Language editor .................................Dave Wall
  37.  
  38.  
  39.  
  40.                                Table of Contents
  41.  
  42.  1. ARTICLES  ..............................................................  1
  43.     The Programmer's Guide to CLIPPER Linkers - part (7)  ..................  1
  44.     Some improvement to read command line arguments!!!  ....................  7
  45.     Building code for REAL developers...  .................................. 12
  46.  2. SOFTWARE  .............................................................. 17
  47.     List of CLIPPER related areas on CLIPPER BBS HQ system  ................ 17
  48.  3. ANOMALIES  ............................................................. 21
  49.     ANOMALIES reports and commets  ......................................... 21
  50.     Jo French anomalies report, some comments  ............................. 21
  51.     AEVAL()           Undocumented return reference  ....................... 21
  52.     APPEND FROM       Append From Delimited with Character Numbers  ........ 22
  53.  4. CLIPPER NET  ........................................................... 23
  54.     Index of described files in Clipper BBS Magazine  ...................... 23
  55.  5. CLIPBBS  ............................................................... 25
  56.     CLIPBBS distribution  .................................................. 25
  57.     CLIPBBS, how to write an article!!!  ................................... 26
  58.  
  59.                                    - - - - -
  60.  CLIPBBS 1-10                   Page 1                   29 Oct 1991
  61.  
  62.  
  63.  ==============================================================================
  64.                                     ARTICLES
  65.  ==============================================================================
  66.  
  67.  
  68.         The Programmer's Guide to CLIPPER Linkers - part (7)
  69.  
  70.  
  71.          ════════════════════════════════════════════════════════════════
  72.  
  73.                               PRODUCT COMPARISONS
  74.  
  75.          ════════════════════════════════════════════════════════════════
  76.  
  77.  
  78.          PLINK86s87
  79.  
  80.          Current Version - Clipper Summer 87
  81.  
  82.          List Price - Supplied with Clipper Summer 87
  83.  
  84.          PLINK86s87 is the linker provided with Clipper and is
  85.          compatible with all Clipper-compiled objects, Clipper-compiled
  86.          libraries, the Clipper libraries, and all third-party libraries.
  87.          PLINK86 is a "static overlay" linker and requires careful
  88.          overlay design.
  89.  
  90.          PLINK86s87 supports overlaying of "MODULES" from libraries to
  91.          allow you to take simplify your development environment and
  92.          work from libraries rather than .OBJ files.
  93.  
  94.          PLINK86s87 is a mature, reliable linker which is sophisticated
  95.          enough to handle linking of most large Clipper applications which
  96.          requires overlays, provided that you are patient enough to
  97.          analyze your code and structure your overlays properly.
  98.  
  99.  
  100.  
  101.          RTLINK
  102.  
  103.          Current Version - 3.11
  104.  
  105.          List Price - $295.00
  106.  
  107.          RTLINK.EXE is a general-purpose MS-DOS linker for all compiler
  108.          languages, assembly languages, and Clipper.   RTLINK is compatible
  109.          with the Clipper libraries, Clipper-compiled objects and all
  110.          third-party libraries.  RTLINK is is also compatible with all
  111.          PLINK86 commands and will link your applications from your
  112.          existing PLINK86 *.LNK files.
  113.  
  114.          RTLINK is both a "static" overlay linker and a "reloadable"
  115.          overlay linker.  It's "reloadable" overlay feature is limited
  116.          however to C/ASM object files and library modules.  All of the
  117.          modules in CLIPPER.LIB, EXTEND.LIB and most third-party n
  118.          libraries are reloadable because they were written in C/ASM.
  119.  CLIPBBS 1-10                   Page 2                   29 Oct 1991
  120.  
  121.  
  122.          All Clipper-compiled modules must be placed in "static-overlays"
  123.          in the same manner as PLINK86.
  124.  
  125.          RTLINK also allows use of .PLLs (pre-linked libraries) to help
  126.          reduce disk space usage of applications.   RTLINK is a mature,
  127.          reliable linker which is sophisticated enough to handle linking
  128.          of any large application which requires overlays.
  129.  
  130.          RTLINK has a "VIRTUAL OVERLAY" feature which provides the added
  131.          feature of including the DATA portion of object modules into
  132.          overlay segments, by writing the data to a "virtual overlay"
  133.          on disk and restoring the data whenever the overlayed code is
  134.          reloaded into memory.
  135.  
  136.          RTLINK supports overlaying of "MODULES" from libraries to
  137.          allow you to take simplify your development environment and
  138.          work from libraries rather than .OBJ files.
  139.  
  140.          RTLINK is an excellent linker for all applications, but
  141.          particularly for applications which are C/ASM code intensive
  142.          and NOT Clipper-code intensive.
  143.  
  144.  
  145.  
  146.          RTLINKplus
  147.  
  148.          Current Version - 4.0
  149.  
  150.          List Price - $495.00
  151.  
  152.  
  153.          RTLINKplus is an even more sophisticated version of RTLINK which
  154.          offer much more power in the area of debugging tools.  RTLINKplus
  155.          includes MicroSoft CODE-VIEW support, a sophisticated runtime
  156.          PROFILER, and an overlay analyzing system which scans .MAP files
  157.          and produces graphs of overlay usage to help determine the
  158.          efficiency of your overlay structures.
  159.  
  160.          RTLINKplus also includes a VIRTUAL MEMORY LINKING system which
  161.          allows Microsoft C and MASM programs to automatically execute in
  162.          all available conventional and expanded memory or in as little as
  163.          100k of conventional memory.
  164.  
  165.  
  166.          RTLINK and RTLINKplus are available from:
  167.  
  168.          Pocket Soft, Inc.
  169.          P.O. Box 821049
  170.          Houston, TX 77282
  171.          Voice: (713) 460-5600
  172.          Fax  : (713) 460-2651
  173.  
  174.          RTLINK/CLIPPER-5.0
  175.  
  176.          Current version - 3.11
  177.  
  178.  CLIPBBS 1-10                   Page 3                   29 Oct 1991
  179.  
  180.  
  181.          List Price - Included with CLIPPER-5.0
  182.  
  183.          RTLINK-CLIPPER/5.0 is a custom version of RTLINK which supports
  184.          all the basic features of RTLINK but with two important new
  185.          features:
  186.  
  187.          1. Automatic Clipper-code overlaying - this feature uses a
  188.             "dynamic-overlaying" technique which automatically manages
  189.             Clipper-code overlays in an overlay pool at runtime.
  190.  
  191.          2. Incremental linking - this feature provides a faster link
  192.             cycle than normal linking by maintaining a work file which
  193.             is a history of past linking sessions.  This work file is
  194.             then used to insure that only the code "changed" since the
  195.             last link session is linked into the new executable.
  196.  
  197.  
  198.  
  199.          ALINK
  200.  
  201.          Current Version - 1.08
  202.  
  203.          List Price - $195.00
  204.  
  205.          ALINK.EXE is a linker specially designed for Clipper
  206.          applications.   ALINK is compatible with the Clipper libraries
  207.          and all third-party libraries.  ALINK is also compatible with
  208.          many PLINK86 commands and will link your applications from your
  209.          existing PLINK86 *.LNK files with some modifications.
  210.  
  211.          ALINK is a "dynamic overlay" linker which provides dynamic
  212.          overlays for Clipper-compiled object files only.  ALINK will
  213.          NOT overlay from .LIBrary files therefore all functions from
  214.          .LIB files will be linked into the ROOT memory area.
  215.  
  216.          ALINK is the only linker which is NOT a stand-alone linking
  217.          system.  It is instead an overlay "pre-processor" which
  218.          extracts all the code segments from the Clipper-compiled objects
  219.          down to the function or procedure level, creates an .OVL file
  220.          of Clipper-executable code, then creates a set of .SYM (symbol)
  221.          files which are used by PLINK86 or Microsoft LINK to complete
  222.          the symbol "fix-ups" and generate the .EXEcutable program.
  223.  
  224.          ALINK also includes a replacement for OVERLAY.LIB which is the
  225.          "dynamic overlay" manager.  This manager is linked into the
  226.          .EXEcutable programs and manages the dynamic overlaying of all
  227.          the Clipper code.  ALINK uses the Clipper free pool to link its
  228.          executable code segments, therefore it is recommended that you
  229.          use a memory-packing utility and call the AL_FLUSH() function
  230.          regularly in your ALINK-ed programs to reduce memory fragmentation.
  231.  
  232.          ALINK is an excellent linker for applications which are
  233.          Clipper-code intensive.  If you use many functions from third-
  234.          party libraries, then ALINK will not allow these to be
  235.          overlayed.
  236.  
  237.  CLIPBBS 1-10                   Page 4                   29 Oct 1991
  238.  
  239.  
  240.          ALINK is a available from:
  241.  
  242.          Accfin Software
  243.          329 North State St.
  244.          Orem, UT 84057
  245.          1-(800) 336-6644
  246.  
  247.  
  248.  
  249.          BLINKER
  250.  
  251.          Current Version - 1.3
  252.  
  253.          List Price - $189.00
  254.  
  255.  
  256.          BLINKER.EXE is a linker specially designed for Clipper
  257.          applications.
  258.  
  259.          BLINKER is compatible with the Clipper libraries, and all third-
  260.          party libraries.  BLINKER is also compatible with many PLINK86
  261.          commands and will link your applications from your existing
  262.          PLINK86 *.LNK files with some modifications.
  263.  
  264.          Like ALINK,  BLINKER is a "dynamic overlay" linker which provides
  265.          dynamic overlays for Clipper-compiled objects and "some" C/ASM
  266.          objects.  BLINKER will allow overlaying of entire libraries
  267.          with the "ALLOCATE" command.  This is not always a useful feature
  268.          because very few libraries have modules which are ALL compatible
  269.          with BLINKER.  BLINKER requires that C/ASM modules be "well-
  270.          behaved".  The EXTEND.LIB library is an example of a well-behaved
  271.          library, therefore, it may be ALLOCATEd in an overlay section.
  272.  
  273.          BLINKER's dynamic overlay manager works excellently with
  274.          Clipper-compiled code and the EXTEND.LIB library.  Once you
  275.          start experimenting with other libraries, you may find that it
  276.          is not worth the effort to go any further.  Some third-party
  277.          library developers such as FUNCKY, FLIPPER, dCLIP, etc. have
  278.          released new versions of their libraries which are broken out
  279.          into "resident" and "overlayable" to be fully compatible with
  280.          BLINKER.
  281.  
  282.          BLINKER provides the best memory management solution for Clipper-
  283.          code intensive .EXEcutable applications.  BLINKER is not a simple
  284.          linker.  It also imbeds functions into the linked program which
  285.          are called between loading of overlay segments for "memory-packing"
  286.          to help reduce the memory fragmentation caused by "dynamic-
  287.          overlaying".  This may cause problems with any non-standard memory
  288.          allocation techniques you may have built into your application and
  289.          should be taken into consideration.
  290.  
  291.          BLINKER supports special profiling features, incremental-linking,
  292.          and allows "burning" of the  SET CLIPPER environment into the
  293.          .EXEcutable program.
  294.  
  295.          BLINKER evolved from ALINK's technology therefore it accomplishes
  296.  CLIPBBS 1-10                   Page 5                   29 Oct 1991
  297.  
  298.  
  299.          its "dynamic-overlaying" in much the same manner, however it is
  300.          a stand-alone linker and is 5 to 10 times faster than ALINK in
  301.          producing an executable program.
  302.  
  303.          BLINKER is available from:
  304.  
  305.          BLINK, Inc.
  306.          P.O. Box 7154
  307.          Richmond, VA 23221-0154
  308.          Voice: (804) 353-0137
  309.          Fax  : (804) 355-1676
  310.  
  311.  
  312.  
  313.          WARPLINK
  314.  
  315.          Current version - 1.50b
  316.  
  317.          List Price - $250.00
  318.  
  319.          WARPLINK is a general-purpose linker designed for "dynamic-
  320.          overlay" applications.
  321.  
  322.          WARPLINK is compatible with the Clipper libraries, and all
  323.          third-party libraries.  WARPLINK is NOT compatible with PLINK86
  324.          commands and will NOT link your applications from your existing
  325.          PLINK86 *.LNK files.
  326.  
  327.          WARPLINK is a "dynamic overlay" linker which provides dynamic
  328.          overlays for Clipper-compiled objects and "some" C/ASM objects.
  329.          WARPLINK will allow overlaying of called modules from complete
  330.          libraries by including the library name in (parenthesis).
  331.  
  332.          Like BLINKER, WARPLINK requires that C/ASM modules be "well-
  333.          behaved".  Because WARPLINK is a general-purpose linker it is
  334.          more compatible with third-party libraries than BLINKER,
  335.          and it produces as memory-efficient executables as BLINKER.
  336.  
  337.          There are applications, however, where WARPLINK will create better
  338.          memory models than BLINKER due to its ability to overlay code not
  339.          manageable by BLINKER and other situations where WARPLINK will
  340.          create better speed performance than RTLINK because its
  341.          "overlay-pool" technique is more efficient than RTLINK's disk-
  342.          intensive "overlay-reloading".  WARPLINK "learns" how to manage
  343.          the pool most efficiently while the application is running.
  344.  
  345.          WARPLINK can overlay entire libraries but is NOT capable of
  346.          overlaying "MODULES" like PLINK86 and RTLINK.
  347.  
  348.          WARPLINK also includes portions of the SMARTMEM (tm) library
  349.          by Steve Steiner for memory profiling and memory defragmentation.
  350.  
  351.          WARPLINK works with all languages and can create .COM files
  352.          directly from .OBJ files for much smaller non-Clipper
  353.          applications.  It also supports incremental linking by re-linking
  354.          only the modules which have been changed.
  355.  CLIPBBS 1-10                   Page 6                   29 Oct 1991
  356.  
  357.  
  358.          WARPLINK also includes a symbol-compacting utility which
  359.          produces a second .EXE from the original .EXE and removes all
  360.          duplicate (redundant) symbols from the symbol table to improve
  361.          memory performance.  This eliminates the need to compile your
  362.          .PRGs into large objects using .CLP files.
  363.  
  364.          WARPLINK is an excellent linker for all applications.  What
  365.          it lacks in features, it more than makes up for in performance.
  366.  
  367.          WARPLINK is a available from:
  368.  
  369.          Hyperkinetix, Inc.
  370.          666 Baker #405
  371.          Costa Mesa, CA 92626
  372.          (714) 668-9234
  373.  
  374.  ------------------------------------------------------------------------------
  375.  CLIPBBS 1-10                   Page 7                   29 Oct 1991
  376.  
  377.  
  378.            `C' Style ArgC() and ArgV() Function For Clipper 5.01
  379.            =====================================================
  380.  
  381.                            By David A Pearson.
  382.                            -------------------
  383.  
  384.     After reading about the Exe_Path() function by Terry Carmen back in
  385.     issue 1-02 I decided that it would be nice to expand on the idea and
  386.     include a set of ArgC() and ArgV() functions in my library.
  387.  
  388.     Given below is the source for the functions I developed. The approach
  389.     I took was to grab the whole command line from the PSP block and then
  390.     write a Clipper function to `split' the command line in the same way
  391.     that `C' does when your applications starts up.
  392.  
  393.     First off, the function for grabbing the command line:
  394.  
  395.  ;*****************************************************************************
  396.  ; File....: _GETARGS.ASM                                                     *
  397.  ; By......: David A Pearson                                                  *
  398.  ; Function: Provides an internal function for getting the arguments passed   *
  399.  ; ........: to a clipper program.                                            *
  400.  ;*****************************************************************************
  401.  
  402.  Public          _GetArgs
  403.  
  404.  Extrn           __RetCLen:Far
  405.  
  406.  _GetArgs_Text   Segment 'CODE'
  407.                  Assume CS:_GetArgs_Text
  408.  
  409.  ;*****************************************************************************
  410.  ; Function: _GetArgs()                                                       *
  411.  ; Syntax..: _GetArgs() --> cArgString                                        *
  412.  ; Usage...: Returns the argument string passed to the clipper program.       *
  413.  ; By......: David A Pearson.                                                 *
  414.  ;*****************************************************************************
  415.  
  416.  _GetArgs        Proc    Far
  417.  
  418.                  Push    BP              ; Save registers
  419.                  Mov     BP,SP
  420.                  Push    DS
  421.                  Push    ES
  422.                  Push    SI
  423.                  Push    DI
  424.  
  425.                  Mov     AH,62h
  426.                  Int     21h             ; BX now contains segment for PSP.
  427.                  Mov     ES,BX
  428.                  Mov     SI,80h          ; Offset for arg' string size byte.
  429.                                          ; Move size into AL.
  430.                  Mov     AL,Byte Ptr ES:[SI]
  431.                  Xor     AH,AH           ; Zero AH.
  432.                  Push    AX              ; Place size onto stack.
  433.                  Inc     SI              ; Point to start of string.
  434.  CLIPBBS 1-10                   Page 8                   29 Oct 1991
  435.  
  436.  
  437.                  Mov     AX,ES           ; Move the segment of the string into
  438.                                          ; AX.
  439.                  Mov     BX,SI           ; Move the offset of the string into
  440.                                          ; BX.
  441.                  Push    AX              ; Place segment and offset onto the
  442.                  Push    BX              ; stack.
  443.                  Call    __RetCLen       ; Call Clipper with the string.
  444.                  Add     SP,6            ; restore the stack.
  445.  
  446.                  Pop     DI              ; Restore registers
  447.                  Pop     SI
  448.                  Pop     ES
  449.                  Pop     DS
  450.                  Pop     BP
  451.  
  452.                  Ret                     ; And back we go
  453.  
  454.  _GetArgs        EndP
  455.  
  456.  _GetArgs_Text   EndS
  457.  End
  458.  
  459.     I'm not too sure if this code will overlay very well with the likes of
  460.     Blinker, but I'm sure that the ASM programmers among you will be able
  461.     to sort that out!
  462.  
  463.     Now that we have a method of grabbing the command line we need to split
  464.     it down into a usable form. Source code follows:
  465.  
  466.  /*****************************************************************************
  467.  * File....: ARGS.PRG                                                         *
  468.  * By......: David A Pearson                                                  *
  469.  * Function: Provides a set of functions for getting at the command line      *
  470.  * ........: arguments in a 'C' style.                                        *
  471.  * Notes...: Compile with switches /n/w                                       *
  472.  * ........: Please note that the first time you call either ArgC() or Argv() *
  473.  * ........: the function SetArgs() will be called. SetArgs() in turn calls   *
  474.  * ........: _GetArgs() to retrieve the command tail from the PSP block. It   *
  475.  * ........: then goes on to parse the string and split it up as 'C' would    *
  476.  * ........: before your program executes.                                    *
  477.  * ........: Because of this initial delay you may wish to make a dummy call  *
  478.  * ........: to one of the functions at the start of you application.         *
  479.  *****************************************************************************/
  480.  
  481.  #define SLASH_R            chr(13)  // \r is an argument separator.
  482.  #define SLASH_T            chr(9)   // \t is an argument sepatator.
  483.  
  484.  #define ARG_SEPARATORS     " "+SLASH_R+SLASH_T
  485.  
  486.  #xtranslate PrevChar(<cString>,<nPosition>)  ;
  487.              =>                               ;
  488.              if(<nPosition> > 0,substr(<cString>,<nPosition>-1,1),"")
  489.  
  490.  static nArgC := NIL
  491.  static aArgV := {}
  492.  
  493.  CLIPBBS 1-10                   Page 9                   29 Oct 1991
  494.  
  495.  
  496.  /*****************************************************************************
  497.  * Function: ArgC()                                                           *
  498.  * Syntax..: ArgC() --> nNumberOfArguments                                    *
  499.  * Usage...: Returns the number of arguments passed to the Clipper program.   *
  500.  * By......: David A Pearson                                                  *
  501.  *****************************************************************************/
  502.  
  503.  function ArgC()
  504.  if nArgC == NIL
  505.     SetArgs()
  506.  endif
  507.  return(nArgC)
  508.  
  509.  /*****************************************************************************
  510.  * Function: ArgV()                                                           *
  511.  * Syntax..: ArgV([<nArgIndex>]) --> cArg | aArgs                             *
  512.  * Usage...: If <nArgIndex> is passed it returns the argument at the position *
  513.  * ........: indicated by the index. If called with no parameter it returns   *
  514.  * ........: an array of all arguments.                                       *
  515.  * By......: David A Pearson                                                  *
  516.  *****************************************************************************/
  517.  
  518.  function ArgV(nArgIndex)
  519.  local acReturn := NIL
  520.  if nArgC == NIL
  521.     SetArgs()
  522.  endif
  523.  if valtype(nArgIndex) == "N"
  524.     if nArgIndex > 0 .and. nArgIndex <= nArgC
  525.        acReturn := aArgV[nArgIndex]
  526.     else
  527.        acReturn := if(nArgIndex == 0,Exe_Path(),"")
  528.     endif
  529.  else
  530.     acReturn := aArgv
  531.  endif
  532.  return(acReturn)
  533.  
  534.  /*****************************************************************************
  535.  * Function: SetArgs()                                                        *
  536.  * Syntax..: SetArgs() --> NIL                                                *
  537.  * Usage...: Internal function to read in the command line and split it into  *
  538.  * ........: it's componant parts in a style similar to 'C'.                  *
  539.  * By......: David A Pearson                                                  *
  540.  *****************************************************************************/
  541.  
  542.  static function SetArgs()
  543.  local cCommand     := alltrim(_GetArgs()),;
  544.        cThisArg     := ""                 ,;
  545.        cThisChar    := ""                 ,;
  546.        lInQuotes    := .F.                ,;
  547.        nLoopCounter := 0
  548.  if empty(cCommand)
  549.     nArgC := 0
  550.  else
  551.     for nLoopCounter := 1 to len(cCommand)
  552.  CLIPBBS 1-10                   Page 10                  29 Oct 1991
  553.  
  554.  
  555.        cThisChar := substr(cCommand,nLoopCounter,1)
  556.        do case
  557.           case cThisChar $ ARG_SEPARATORS .and. !lInQuotes
  558.                if !(PrevChar(cCommand,nLoopCounter) $ ARG_SEPARATORS);
  559.                           .and. !empty(cThisArg)
  560.                   aadd(aArgV,cThisArg)
  561.                   cThisArg := ""
  562.                endif
  563.           case cThisChar == "\"
  564.                if substr(cCommand,nLoopCounter+1,1) != '"'
  565.                   cThisArg += cThisChar
  566.                endif
  567.           case cThisChar == '"'
  568.                if PrevChar(cCommand,nLoopCounter) == "\"
  569.                   cThisArg += cThisChar
  570.                else
  571.                   if lInQuotes
  572.                      aadd(aArgV,cThisArg)
  573.                      cThisArg := ""
  574.                   else
  575.                      if !(PrevChar(cCommand,nLoopCounter) $ ARG_SEPARATORS);
  576.                                  .and. !empty(cCommand)
  577.                         aadd(aArgV,cThisArg)
  578.                         cThisArg := ""
  579.                      endif
  580.                   endif
  581.                   lInQuotes := !lInQuotes
  582.                endif
  583.           otherwise
  584.                cThisArg += cThisChar
  585.        endcase
  586.     next
  587.     if !empty(cThisArg)
  588.        aadd(aArgV,cThisArg)
  589.     endif
  590.     nArgC := len(aArgV)
  591.  endif
  592.  return(NIL)
  593.  
  594.     Please note that for ArgV() to work correctly you should include the
  595.     Exe_Path() function in your application.
  596.  
  597.     ArgC() returns the number of paramaters passed on the command line,
  598.     for example:
  599.  
  600.          nPassed := ArgC()
  601.  
  602.     ArgV() returns the actual value of the parameter, for example:
  603.  
  604.          function ShowArgs()
  605.          local nArg := 0
  606.          for nArg := 0 to ArgC()
  607.             ? ArgV(nArg)
  608.          next
  609.          return(NIL)
  610.  
  611.  CLIPBBS 1-10                   Page 11                  29 Oct 1991
  612.  
  613.  
  614.     would display a list of all arguments passed. Note that calling ArgV()
  615.     with a value of 0 is the same as calling Exe_Path(). Also, you can
  616.     call ArgV() with no parameters to get an array of all passed parameters.
  617.     For example:
  618.  
  619.          function ShowArgs()
  620.          local aArgs := ArgV()
  621.          aeval(aArgs,{|element| qout(element)})
  622.          return(NIL)
  623.  
  624.     Please note that the returned array does *not* contain the output
  625.     from Exe_Path(), Clipper isn't too keen on you asking for element
  626.     0 of an array!
  627.  
  628.     Using a ArgV()/ArgC() approach in your application has a couple of
  629.     advantages. First, you can get access to the command line from any
  630.     point in your system, not just from the top level function/procedure.
  631.     Also, you can cater for a variable number of parameters. By using
  632.     ArgV() you can also detect the Clipper // paramaters too, for example
  633.     you can check if //F<NoOfFiles> has been passed on the command line.
  634.  
  635.     I hope this is of use to someone. I developed these more for fun than
  636.     anything else, and I must admit I've not used them for anything yet!
  637.  
  638.                  __DavePearson()
  639.  
  640.  ------------------------------------------------------------------------------
  641.  CLIPBBS 1-10                   Page 12                  29 Oct 1991
  642.  
  643.  
  644.           BUILDING CODE FOR REAL (estate?) DEVELOPERS
  645.           -----------------------------------------------------------
  646.           Copyright (C) G. L. Jereza  1991  All Rights Reserved.
  647.  
  648.           Developing  software  is  very  much  like  building a house.
  649.           Let's look at two similarities and briefly elaborate on  one.
  650.           First,  the  system  analyst  is,  in  many  ways,  like  the
  651.           architect; the  system designer  is like  the contractor; and
  652.           the programmer the  craftsman.  And  second, just as  a house
  653.           must be built with a set of building codes, so must a program
  654.           be written according to design and coding standards.
  655.  
  656.           Standards are  the application's  bedrock.   The standards in
  657.           here  come  from  several  sources.    Most are from personal
  658.           experience.   The others  are from  other language  norms, or
  659.           were adapted from  Simonyi's Hungarian notation  methodology,
  660.           as  well  as  other  sources.    The  selection was, well ...
  661.           eclectic.
  662.  
  663.           These standards have somewhat overlapping objectives:
  664.  
  665.                   1. improve maintainability
  666.                   2. save time thinking about variable names
  667.                   3. save effort entering unnecessary keystrokes
  668.                   4. make debugging easier, and
  669.                   5. encourage consistency through documentation
  670.  
  671.           The common theme is speed.  However, since software evolve or
  672.           die, the primary objective is to improve maintainability.
  673.  
  674.           In the long  term, these standards  are more economical  than
  675.           new hardware.   Successful  implementation, however,  require
  676.           consistent  use,  and  of  course,  that  both  designer  and
  677.           programmer exercise discipline and a sense of idealism.
  678.  
  679.           Enough said.
  680.  
  681.  
  682.           CLIPPER 5 DESIGN AND CODING STANDARDS
  683.  
  684.           Rule 1: Establish a clear objective.  Remember that a problem
  685.                   understood  is  half  solved.    Use  one sentence to
  686.                   describe   it   and  several  qualifiers  to  address
  687.                   'doability' (including features), time, and cost
  688.                   constraints. Example:
  689.  
  690.                            An interpreter module for Clipper.
  691.                              - IDE like QuickBasic 4.5
  692.                              - x guru year(s)
  693.                              - priced less than $100
  694.  
  695.                   Once the objective has been created, stand by it.  If
  696.                   the pressure to change becomes unbearable, then  call
  697.                   it something else.  A  new version perhaps?  (A  very
  698.                   wicked grin  is appropriate  here).   Or start  a new
  699.                   project!  (Easy to do when you have not invested your
  700.  CLIPBBS 1-10                   Page 13                  29 Oct 1991
  701.  
  702.  
  703.                   ego, or too much time, into that old project).  Often
  704.                   times, it is far  easier to start from  the beginning
  705.                   as compared to modifying code.
  706.  
  707.           Rule 2: Define   file  structures   and   relationships,  and
  708.                   normalize data (remove subcategories).  Start a  data
  709.                   dictionary where all the terms are defined.  The  key
  710.                   word here is 'start'.
  711.  
  712.           Rule 3: Avoid coding until the very last.  Use pseudocode  or
  713.                   structured English.   Prototype as soon  as possible.
  714.                   Draft a user's manual.  Get user feedback.  Make sure
  715.                   you WILL have users.  Realize that there is no  right
  716.                   way of doing the wrong thing.
  717.  
  718.           Rule 4: Code the  program in  three stages:   First,  make it
  719.                   work.  Second, make it look good.  Last, optimize the
  720.                   code.  Test top modules first (i.e. top-down design).
  721.                   Use 'stubs' for lower modules.
  722.  
  723.           Rule 5: Avoid overly clever or convoluted code (e.g. compound
  724.                   Boolean expressions). Period.
  725.  
  726.           Rule 6: Practice good system design.  Checklist:
  727.  
  728.                   __  Modules should be functionally cohesive.  Do  not
  729.                       combine  unrelated  processes  into   meaningless
  730.                       modules. Avoid procedures. Use functions.
  731.                   __  Modules  should  be  loosely  coupled.   Few data
  732.                       elements should be shared between module  i.e.  a
  733.                       module should  not modify  the internal  logic or
  734.                       data of  another module.   Use  local and  static
  735.                       variables.
  736.                   __  A module should not call more than  approximately
  737.                       half a dozen lower-level modules.
  738.                   __  Any module affected by the outcome of a  decision
  739.                       should be subordinate to the module that  affects
  740.                       the   decision   (though   not   necessarily  the
  741.                       immediate subordinate).
  742.  
  743.           Rule 7: Design  a  user-friendly  interface.   This means you
  744.                   must  design  for  the  user  and  you must know your
  745.                   subject.  Checklist:
  746.  
  747.                   __  Maintain the user's interest.
  748.                   __  Orient the user (e.g. number screens).
  749.                   __  Communicate in concrete and specific terms.
  750.                   __  Request inputs and produce outputs in consistent
  751.                       terms.
  752.                   __  Ask for information in a logical sequence.
  753.                   __  Make it obvious what kind of error was commited
  754.                       and where.
  755.                   __  Provide a way to cancel part or all of the
  756.                       transaction.
  757.                   __  Provide a convenient help mechanism.
  758.                   __  Give the user  control.
  759.  CLIPBBS 1-10                   Page 14                  29 Oct 1991
  760.  
  761.  
  762.                   __  Keep the user informed at all times.
  763.                   __  Provide defaults for standard inputs.
  764.                   __  Take advantage of color and sound, but don't
  765.                       overdo it.
  766.                   __  Focus the user's attention e.g. a cursor.
  767.                       People focus on one concept at a time. Do not
  768.                       focus on the technology.
  769.                   __  Keep  it simple even if it means code complexity.
  770.                       Avoid unnecessary parts. Avoid the feature-creature.
  771.  
  772.           Rule 8: Do not re-invent the wheel.  Do what CPAs  (certified
  773.                   public  accountants)  do:    cut,  paste, and attach.
  774.                   Isaac Newton said, "If I have seen further, it is  by
  775.                   standing on  ye shoulders  of giants".   Re-use code,
  776.                   but  do  not  code  for  re-usability (unless this is
  777.                   *the* objective).
  778.  
  779.           Rule 9: Write clear code, and complete but  concise comments.
  780.                   Checklist:
  781.  
  782.                   __  Lower   case    all   native    language   words.
  783.                       Exceptions:
  784.  
  785.                       a. FUNCTION, RETURN, LOCAL, STATIC, and FIELDS.
  786.                       b. Object oriented export instance variables.
  787.                          Example:
  788.  
  789.                            oBrowse:getColumn(oColumn)
  790.                                    ^--- lowercase tagname.
  791.  
  792.                   __  Begin   user-defined   functions   with   Capital
  793.                       letters.  Start functions from a 3rd party source
  794.                       with a "3".  (What?!   You don't have the  source
  795.                       code?).  Use  UpperLower combinations to  delimit
  796.                       identifiers,  e.g.    FirstName.    Also,   start
  797.                       conversion functions with the value they take and
  798.                       end  with  the  converted  value separated by the
  799.                       number 2.
  800.  
  801.                   __  Prefix  all  variables  with  a  character   type
  802.                       prefix:
  803.  
  804.                         a - Array         o - Object
  805.                         b - Code block    s - Screen variable
  806.                         c - Character     k - Color string
  807.                         d - Date          m - a variable in .mem file
  808.                         l - Logical       z - miscellaneous or catchall
  809.                         n - Numeric
  810.  
  811.                       Use   the   single   type-prefix   character  for
  812.                       temporary variables.
  813.  
  814.                   __  Express  file  names  in  capital letters.  Begin
  815.                       file names  with a  common prefix.   Index  files
  816.                       should reflect the file  that they belong to  but
  817.                       not what the index expression is.  Example:
  818.  CLIPBBS 1-10                   Page 15                  29 Oct 1991
  819.  
  820.  
  821.                       Correct:
  822.                          NAMES.DBF ---> NAMES1.NTX
  823.                                         NAMES2.NTX
  824.                       Wrong:
  825.                          NAMES.DBF ---> NAMESF.NTX
  826.                                         NAMESL.NTX
  827.  
  828.                       Also, reference all fields with an alias.
  829.  
  830.                   __  Layout  each  code  page  in  an  orderly manner.
  831.                       Avoid  writing  lines  that  extend  beyond   the
  832.                       visible right margin.  Use continuation  symbols.
  833.                       Indent logical levels 3 spaces.  Do not use tabs.
  834.                       Use  parentheses  liberally.    Use a full screen
  835.                       width line of dashes to delineate a logical break
  836.                       in a  program file.
  837.  
  838.                   __  Use  a  standard 'header' for  each program file.
  839.                       Example:
  840.  
  841.                          Name .......: 3GOOD()
  842.                          Description.: Check code integrity.
  843.                          Syntax .....: 3GOOD()
  844.                          Returns ....: Logical
  845.                          Called by...: Main()
  846.                          Calls.......: -none-
  847.                          Example ....: if !3GOOD()
  848.                                           zap
  849.                                        endif
  850.                          Comments....: Function from Free Inc.
  851.  
  852.                   __  Limit  module  listings  to  54  lines or 1 page.
  853.                       Large  complex  modules  should  be  broken  into
  854.                       submodules.  On  rare ocassions, trivial  modules
  855.                       consisting of two to three lines, can be combined
  856.                       into a supermodule.
  857.  
  858.                   __  Use  version  control  software  to document code
  859.                       during development.
  860.  
  861.                   __  Use include files.
  862.  
  863.                   __  Ideally, final code should be self - documenting.
  864.                       Four    letter    command    abbreviations    are
  865.                       counter-productive.   Like code,  comments should
  866.                       be  modular.    No  references  to  other sources
  867.                       (other than in the header) allowed.
  868.  
  869.                   __  Compile using the following example:
  870.                       CLIPPER filename  [/m/n/s/m | /m/n/b/p]
  871.  
  872.                   __  Link using the following example:
  873.                       RTLINK FI filename VE 2 LIB 3freelib PLL base50
  874.  
  875.           Rule 10: Test your  application with this in  mind:  "testing
  876.                   can  show  the  presence,  but  never  the absence of
  877.  CLIPBBS 1-10                   Page 16                  29 Oct 1991
  878.  
  879.  
  880.                   errors".   Where the  documentation and  the software
  881.                   are inconsistent  with each  other, generally  assume
  882.                   that the error is in the software (or as our publish-
  883.                   er is fond of saying, 'reality is different').
  884.  
  885.           That's it.  Just like the ten commandments.  And like the ten
  886.           commandments, the list is not all inclusive or comprehensive.
  887.           It is aimed toward  smaller projects.  In those  instances,
  888.           it worked for me.  And it should work for you too.
  889.  
  890.  ------------------------------------------------------------------------------
  891.  CLIPBBS 1-10                   Page 17                  29 Oct 1991
  892.  
  893.  
  894.  ==============================================================================
  895.                                     SOFTWARE
  896.  ==============================================================================
  897.  
  898.  
  899.  List of CLIPPER related areas on CLIPPER BBS HQ system
  900.  
  901.      Mentioned files are available on NETCONSULT BBS, 31-10-4157141
  902.      (working hours, workdays 18:00->08:00, weekends 24hours/day)
  903.  
  904.      Speeds 1200bps -> 14400bps (V32 modem)
  905.  
  906.      FIDONET 2:285/608, Signet 27:1331/4412
  907.  
  908.  
  909.  ╒══════╤══════════════════════════════════════════════════════════════════════╕
  910.  │ # 53 │ CLIPPER related utilities *CL*              Access Level :        10 │
  911.  ├──────┴───────────────┬───────────────────────────────┬──────────────────────┤
  912.  │ ░░░░░▒▒▒▒▒▓▓▓▓▓█████ │    153 KBytes in     2 Files  │ █████▓▓▓▓▓▒▒▒▒▒░░░░░ │
  913.  ╘══════════════════════╧═══════════════════════════════╧══════════════════════╛
  914.  XREF140C.ZIP  152610 10-17-91* [002] DBase/Clipper DBF and NDX/NTX
  915.                                            Documentation Tool
  916.  
  917.  
  918.  
  919.  ╒══════╤══════════════════════════════════════════════════════════════════════╕
  920.  │ # 54 │ CLIPPER text&.NGuides     *CL*              Access Level :        10 │
  921.  ├──────┴───────────────┬───────────────────────────────┬──────────────────────┤
  922.  │ ░░░░░▒▒▒▒▒▓▓▓▓▓█████ │   1499 KBytes in    42 Files  │ █████▓▓▓▓▓▒▒▒▒▒░░░░░ │
  923.  ╘══════════════════════╧═══════════════════════════════╧══════════════════════╛
  924.  -┌──────────────────────────────────────────────────────────────────────────┐
  925.  -│                  TEXT FILES about/around CLIPPER                         │▐
  926.  -│                                                                          │▐
  927.  -└──────────────────────────────────────────────────────────────────────────┘▐
  928.  - ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  929.  
  930.  RELCLIP5.ARJ   59424 06-11-91  [002] Release note in WP 5.1 format
  931.  -            THis file uploaded  by somebody there maybe for making betters
  932.  -            score of Download:Upload ratio contains complete text of release
  933.  -            note about Clipper 5.01.
  934.  NED.TXT         2271 05-07-91  [002] lezen van commandline (clipper 5.0 +
  935.                                            EXPAND.LIB)
  936.  -            Sample text about reading a command line parameters from inside
  937.  -            of Clipper more universal than PARAMSTR() function. (Dutch text)
  938.  SHARE.MSG       6028 09-30-90  [001] Text about using SHARE.EXE with CLIPPER
  939.  -            Usefull text explaining SHARE.EXE command from MS DOS. Especialy
  940.  -            usefull because written from point of view CLIPPER.
  941.  CL50PRG.ARJ    25684 09-16-91  [002] Discussion about 5.0 from CW on Nantucket
  942.  -            Discussion about Clipper 5.0x from CLIPPER WORLD. CLIPPER World is
  943.  -            Nantucket BBS in UK and contains areas for CLipper with direct
  944.  -            support of Nantucket stuff in England.
  945.  CLIPLINK.ARJ   38148 09-06-91  [002] documentation about LINKERs for CLIPPER
  946.  - ▒░▒        Document about CLipper linkers. Giving complete list of linkers for
  947.  - ▒░▒        clipper. Compares them and explaining all linking and overlaying
  948.  - ▒░▒        methods. Giving explanation about how to static overlay clipper and
  949.  - ▒░▒        how to control some from linkers. VERY GOOD text.
  950.  CLIPBBS 1-10                   Page 18                  29 Oct 1991
  951.  
  952.  
  953.  CLPGUID4.ARJ   29404 04-14-91  [002] Errate of programs for Rick Spence's book
  954.  -           This is a complete set of programs used in Rick Spences's book about
  955.  -           Clipper, together with fixes of mistakes inside.
  956.  
  957.  -┌──────────────────────────────────────────────────────────────────────────┐
  958.  -│                  NORTON GUIDES or another help for CLIPPER               │▐
  959.  -│                                                                          │▐
  960.  -└──────────────────────────────────────────────────────────────────────────┘▐
  961.  - ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  962.  
  963.  50NGCH.ARJ      9583 01-06-91  [002] Norton Guide for Clipper 5.0 header files
  964.  -           This is ONLY a complete .NG database contains all .CH file coming
  965.  -           with CLIpper 5.0. It's nice to have it sometime when one is
  966.  -           interested in some constants or structures stored inside of this
  967.  -           header files.
  968.  
  969.  -┌──────────────────────────────────────────────────────────────────────────┐
  970.  -│                  NANTUCKET and ANOTHER CLIPPER NEWSLETTERs....           │▐
  971.  -│                                                                          │▐
  972.  -└──────────────────────────────────────────────────────────────────────────┘▐
  973.  - ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  974.  
  975.  NN0101.ARJ      9869 12-11-90  [002] Nantucket News Volume 1 Number 1
  976.  NN0102.ARJ     17079 12-11-90  [000] Nantucket News Volume 1 Number 2
  977.  NN0103.ARJ     17921 12-11-90  [000] Nantucket News Volume 1 Number 3
  978.  NN0104.ARJ      8164 12-11-90  [000] Nantucket News Volume 1 Number 4
  979.  NN0201.ARJ      7576 12-11-90  [000] Nantucket News Volume 2 Number 1
  980.  NN0202.ARJ     18900 12-11-90  [000] Nantucket News Volume 2 Number 2
  981.  NN0203.ARJ      3205 12-11-90  [000] Nantucket News Volume 2 Number 3
  982.  NN0204.ARJ      9125 01-04-91  [000] Nantucket News Volume 2 Number 4
  983.  NN0301.ARJ     16109 12-11-90  [000] Nantucket News Volume 3 Number 1
  984.  NN0302.ARJ     12296 12-11-90  [000] Nantucket News Volume 3 Number 2
  985.  NN0303.ARJ     15879 12-11-90  [000] Nantucket News Volume 3 Number 3
  986.  R(C)0206.ARJ   47402 12-11-90  [000] Reference Clipper Volume 2 number 6
  987.  R(C)0209.ARJ   69086 12-11-90  [000] Reference Clipper Volume 2 number 9
  988.  R(C)0210.ARJ  141162 12-11-90  [000] Reference Clipper Volume 2 number 10
  989.  R(C)0211.ARJ   97237 12-11-90  [000] Reference Clipper Volume 2 number 11
  990.  R(C)0212.ARJ  123300 12-11-90  [000] Reference Clipper Volume 2 number 12
  991.  R(C)0306.ARJ   19940 09-12-90  [000] Reference Clipper Volume 3 number 6
  992.  R(C)0307.ARJ   48238 12-11-90  [000] Reference Clipper Volume 3 number 7
  993.  R(C)0310.ARJ  125633 09-12-90  [000] Reference Clipper Volume 3 number 10
  994.  R(C)0311.ARJ  127102 09-12-90  [000] Reference Clipper Volume 3 number 11
  995.  R(C)0312.ARJ  201636 09-12-90  [000] Reference Clipper Volume 3 number 12
  996.  TIPS_1.ARJ      4708 08-20-91  [001] Another ROGER DONNAY text about
  997.  TIPS_2.ARJ      3770 08-15-91  [001] Clipper, Linking, Overlaying
  998.  TIPS_3.ARJ      5064 08-15-91  [002] And other usefull things
  999.  CLPFON.ARJ     54373 09-10-91  [001] Some EGA/VGA Clipper Fonts, needs Expand
  1000.                                            Lib
  1001.  CL5103.ARJ     28749 09-16-91  [003] Anomaly report No. 3 for Clipper 5.01
  1002.  ALTDO328.ARJ   25805 09-16-91  [001] Fast, small DBF file utility
  1003.  CLIP110.ARJ    27114 09-16-91  [001] Clip 1.10, easy MAKE for Clipper '87 &
  1004.                                            5.0x
  1005.  CL-ROUTE.263    4499 09-21-91  [000] CLN routing plan for Friday, 20 Sep 1991
  1006.  SCANCODE.ARJ    2154 09-27-91  [000] dbf-file with all ScanCodes
  1007.  CL-ROUTE.270    5109 09-28-91  [000] CLN routing plan for Friday, 27. Sep 1991
  1008.  FECHO.DAT        512 10-15-91* (yet to be descriped)
  1009.  CLIPBBS 1-10                   Page 19                  29 Oct 1991
  1010.  
  1011.  
  1012.  -------------------------------------NEW_-------------------------------
  1013.  CL-POL.007      3319 10-14-91* CLN policy No. 07, Sunday, 13. Oct 1991
  1014.  CL-ROUTE.286    5686 10-14-91* CLN routing plan for Sunday, 13. Oct 1991
  1015.  CTNEWS01.ARJ   21220 10-14-91* [001] Deutsche Clipper News Ausgabe 1 von Henry
  1016.                                            Jalbuena (2:246/14.5)
  1017.  
  1018.  
  1019.  
  1020.  ╒══════╤══════════════════════════════════════════════════════════════════════╕
  1021.  │ # 55 │ CLIPPER libraries         *CL*              Access Level :        10 │
  1022.  ├──────┴───────────────┬───────────────────────────────┬──────────────────────┤
  1023.  │ ░░░░░▒▒▒▒▒▓▓▓▓▓█████ │   1072 KBytes in    14 Files  │ █████▓▓▓▓▓▒▒▒▒▒░░░░░ │
  1024.  ╘══════════════════════╧═══════════════════════════════╧══════════════════════╛
  1025.  -┌──────────────────────────────────────────────────────────────────────────┐
  1026.  -│                  LIBRARIES for Clipper - all  kinds                      │▐
  1027.  -│                                                                          │▐
  1028.  -└──────────────────────────────────────────────────────────────────────────┘▐
  1029.  - ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1030.  
  1031.  CLIP327.ARJ    13141 03-17-90  [000] 5.0x  Communication CLIPPER<-->IBM3270
  1032.  -            This is .LIB file which will allow to connect Clipper application
  1033.  -            to IBM3270 communication.
  1034.  CLPNET.ARJ      8855 07-11-90  [003] 5.0x  NOVELL Bindery functions Library
  1035.  -           .LIB file for accessing bindery informations from NOVELL bindery.
  1036.  -            Novell bindery contains all informations about users and objects
  1037.  -            inside of server. Therefore can be very useful to have access to
  1038.  -            this kind of informations.
  1039.  LXNET.ARJ      18048 09-30-90  [002] 5.0x NOVELL Bindery and printing
  1040.  -            This is a another version of CLPNET.ARJ. Adding some possibilities
  1041.  -            to access a printing abilities of Novell Netware.
  1042.  MOUS50.ARJ     13507 03-23-91  [001] 5.0x mouse library
  1043.  -            Complete MOUSE library for use in Clipper 5.0x applications.
  1044.  -            Of course is NOT supplied source, only .LIB file.
  1045.  CLIPFPCX.ARJ   34268 05-24-91  [004] S87 5.01x  Clipper s87/5.01: "Fast" PCX
  1046.  - ▒░▒        VERY good library for VERY FAST displaying a PCX file to display
  1047.  - ▒░▒        of your computer. Working really very fast and taking very small
  1048.  - ▒░▒        part of memory for to do it.
  1049.  VWINDOW.ARJ    11257 05-16-91  [005] 5.0x Windowing library for CLipper
  1050.  -            This is a library with documentation for windowing system for use
  1051.  -            with Clipper 5.0x. Seems nice, but i have my own one.
  1052.  AHELP5.ARJ    197215 05-16-91  [001] Complete Linkable (.LIB) help
  1053.  -            This library is offering complete HELP system with all normal
  1054.  -            HELP possibilities. There is also good documentation for it.
  1055.  TRL.ARJ       311671 04-04-91  [002] 5.0x Tom Rettig Library for Summer+5.0
  1056.  -  ▒░▒       Well known library with mostly low level functions. Now it's
  1057.  -  ▒░▒       totally free for use and is coming together with ALL sources.
  1058.  -  ▒░▒
  1059.  EXPAND50.ARJ   78090 04-04-91  [001] 5.0x Expand Library for CLIPPER 5.0
  1060.  EXPAND52.ARJ   87272 06-18-91  [002] 5.01 Expand library v2.00
  1061.  EXPAND30.ARJ   65418 08-29-91  [001] S87  Expand Library for Summer 87
  1062.  -  ▒░▒       Dutch origin library. Very good combination of low level and
  1063.  -  ▒░▒       high level functions for all kind of system dependent functions.
  1064.  -  ▒░▒       Modem communication, mouse, PRINT support and number of next
  1065.  -  ▒░▒       well usefull functions. This is really VERY good library. V2.00
  1066.  -  ▒░▒       lot of new function which are really very nice!
  1067.  TSDWIN10.ARJ   27895 03-06-91  [002] 5.0 Another windowing library
  1068.  CLIPBBS 1-10                   Page 20                  29 Oct 1991
  1069.  
  1070.  
  1071.  -            Complete windowing library for CLipper 5.0 which seems be a good.
  1072.  -            I didn't test this library but probably i will do this because
  1073.  -            seems to be really nice.
  1074.  3PX50.ARJ      65134 11-24-90  [000] Another Library for Clipper
  1075.  -            some function to improve your programs...
  1076.  CLHLP100.ARJ  140920 07-04-91  [001] Create Help utility for your program.!!
  1077.  -            Library for both versions of Clipper S87 and 5.01
  1078.  
  1079.  ------------------------------------------------------------------------------
  1080.  CLIPBBS 1-10                   Page 21                  29 Oct 1991
  1081.  
  1082.  
  1083.  ==============================================================================
  1084.                                    ANOMALIES
  1085.  ==============================================================================
  1086.  
  1087.  
  1088.                       ANOMALIES and their comments
  1089.  
  1090.  This part of Clipper BBS Magazine is dedicated to all discovered 
  1091.  anomalies and comments about them in Clipper products. Because 
  1092.  Nantucket is still unable to give own bug and anomalies reports (as 
  1093.  actually did in past with Summer 87 version) is very handy to have 
  1094.  results of many investigations done on many user places. I'm also
  1095.  doing my own investigatings, because i'm always very good when someting 
  1096.  has hidden problems. Everything what i buy will first show all problems 
  1097.  and then all normal things. This amazing part of my live is sometime 
  1098.  making me crazy, but for testing of programs it's great <grin>.
  1099.  
  1100.  Daniel
  1101.  
  1102.  
  1103.  
  1104.  ------------------------------------------------------------------------------
  1105.  
  1106.  
  1107.                   Jo French anomalies report, some comments
  1108.  
  1109.  Following serie of anomalies and comments to them is using as basis complete
  1110.  JO FRENCH anomaly report (file CL5103.NG), eventually later version (5104 is
  1111.  slowly coming somewhere around). Because i'm not member of Compuserver and
  1112.  from Europe is Compuserver one from most expensive and most hard accesible
  1113.  medias to acces, i want to comment some Jo French reported anomalies here.
  1114.  Maybe he will get all this commment and will be able to update his report
  1115.  for new things from mine and also for some commented facts.
  1116.  
  1117.  Jo French is making great deal. For 5.0 version of CLipper it was wonderfull
  1118.  job to collect all those bugs (anomalies so called) and in this time Jo's
  1119.  report was very good with very good checking. Probably during time and lot
  1120.  of work it's sometime loosing quality of previous reports. Because i'm
  1121.  keeping also mine personal buglists, my investigations of all Jo's reported
  1122.  problems is sometime different. Therefore i want to pick up those differences
  1123.  and hope that someone else will be able to give me additional informations
  1124.  to finish my private research.
  1125.  
  1126.  Daniel
  1127.  
  1128.  ------------------------------------------------------------------------------
  1129.  
  1130.  
  1131.               AEVAL()           Undocumented return reference.
  1132.  
  1133.    Problem Statement
  1134.  
  1135.    AEVAL() documentation does not mention the presence of a second return
  1136.    reference; i.e., the element number.
  1137.  
  1138.  ---COMMENT---
  1139.  CLIPBBS 1-10                   Page 22                  29 Oct 1991
  1140.  
  1141.  
  1142.      Maybe my english knowledge is not enough good to understand this simple
  1143.      sentence <grin>, but i don't see any possibility to have presence of a
  1144.      second return reference from one function. Only via changing directly
  1145.      some parameter of function, but how two returns?
  1146.  
  1147.      JO, if you are reading this, please try to keep good work which i saw
  1148.      in all 5.0 version reports and complete all description to be enough
  1149.      clear and descriptive.
  1150.  
  1151.  .DD.
  1152.  
  1153.  ------------------------------------------------------------------------------
  1154.  
  1155.  
  1156.        APPEND FROM       Append From Delimited with Character Numbers.
  1157.  
  1158.    Problem Statement
  1159.  
  1160.    APPEND FROM DELIMITED does not translate numbers enclosed in quotes to
  1161.    numerics for input to a numeric field.
  1162.  
  1163.  ------COMMENT-----
  1164.  
  1165.      Maybe i'm missing some background of this problem, but when i'm
  1166.      creating test program like this:
  1167.       ┌─────────────────────────────────────────────┐
  1168.       │  #define VARSIZE 128                        │
  1169.       │  dbcreate('test01.dbf',;                    │
  1170.       │          { {"CHARS", "C", VARSIZE , 0 },;   │
  1171.       │          {"NUMBR", "N",  12     , 2 }  })   │
  1172.       │                                             │
  1173.       │  use TEST01                                 │
  1174.       │  append from test.txt delimited             │
  1175.       └─────────────────────────────────────────────┘
  1176.  
  1177.      Then creating file TEST.TXT with text for append:
  1178.       ┌─────────────────────────────────────────────┐
  1179.       │  1,1                                        │
  1180.       │  "2","2"                                    │
  1181.       │  3,3                                        │
  1182.       │  "4","4"                                    │
  1183.       │  5,5                                        │
  1184.       │  "6","6"                                    │
  1185.       │  7,7                                        │
  1186.       │  "8","8"                                    │
  1187.       │  9,9                                        │
  1188.       └─────────────────────────────────────────────┘
  1189.  
  1190.      Result is as expected. Numeric field correctly filled with
  1191.      numbers coming from appended text, never mind if closed in
  1192.      quotes or not.
  1193.  
  1194.      Has anybody around some other experience?
  1195.  
  1196.  .DD.
  1197.  
  1198.  ------------------------------------------------------------------------------
  1199.  CLIPBBS 1-10                   Page 23                  29 Oct 1991
  1200.  
  1201.  
  1202.  ==============================================================================
  1203.                                   CLIPPER NET
  1204.  ==============================================================================
  1205.  
  1206.  
  1207.  
  1208.  Following is COMPLETE list of all published file descriptions in Clipper
  1209.  BBS magazine in previous numbers. Purpose of this index list is to allow
  1210.  anybody find needed file descriptions in growing number of described files.
  1211.  Short description after name will give first possible close image about
  1212.  file. Number enclosed in "[]" will mean number of Clipper BBS magazine.
  1213.  
  1214.  ┌─────────────┬────┬────────────────────────────────────────────────┬──────┐
  1215.  │FileName     │Src │Description                                     │Where │
  1216.  ├─────────────┼────┼────────────────────────────────────────────────┼──────┤
  1217.  │ACCESS.ARJ   │Cln │Source of speed testing program                 │[1-06]│
  1218.  │ACH2TB.ARJ   │Cln │Convert ACHOICE to TBROWSE                      │[1-05]│
  1219.  │ACHOO2.ARJ   │Cln │Replacement of ACHOICE with GET possibilites    │[1-06]│
  1220.  │ADHOC302.ARJ │Cln │Summer 87 inteligent report program             │[1-04]│
  1221.  │CALC14.ARJ   │Cln │PoPup Calculator                                │[1-08]│
  1222.  │CL5103.ARJ   │Cln │Report of 5.01 anomaly number 3                 │[1-04]│
  1223.  │CL5REP6.ARJ  │Cln │5.01 replacement of REPORT command              │[1-04]│
  1224.  │CLIP110.ARJ  │Cln │Clipper Documentor program                      │[1-05]│
  1225.  │CLIPLINK.ARJ │Cbs │Complete text of R.Donnay about linkers         │[1-04]│
  1226.  │CLIPSQL.ARJ  │Cln │Demo of complete SQL library for CLipper        │[1-05]│
  1227.  │CLPFON.ARJ   │Cln │Set of fonts for EXPAND.LIB from author         │[1-03]│
  1228.  │COND.ARJ     │Cln │Builder of conditional indexes like SUBNTX      │[1-03]│
  1229.  │DBSCN2.ARJ   │Cln │Screen designer generator                       │[1-05]│
  1230.  │DIAL.CLN     │Cln │Dialer with using of FOPEN()                    │[1-07]│
  1231.  │DOC111.ARJ   │Cln │Documentor, newer version                       │[1-08]│
  1232.  │GSR151.ARJ   │Cln │Global Search and replace for programmers       │[1-07]│
  1233.  │HGLASS.ZIP   │Cln │Hour glass for indication of index progression  │[1-04]│
  1234.  │INDXSL.ARJ   │Cln │User Fields selection builder for index generate│[1-03]│
  1235.  │IOBASYS9.ARJ │Cln │Demo of S87 library and calling Clipper from C  │[1-03]│
  1236.  │JG2.ARJ      │Cln │Jumping between GET statements in READ          │[1-08]│
  1237.  │KF_LOKUP.ARJ │Cln │Set of program for database relations           │[1-07]│
  1238.  │LUTLIB.ARJ   │Cln │Another Clipper library                         │[1-08]│
  1239.  │MK30.ARJ     │Cln │Mouse library demo version                      │[1-03]│
  1240.  │MOVEGETS.ARJ │Cln │GETSYS change for moving between gets via VALID │[1-03]│
  1241.  │NFDESC2.ARJ  │Cln │NanForum library description list               │[1-06]│
  1242.  │NFLIB2.ARJ   │Cln │NanForum library main file                      │[1-06]│
  1243.  │NFSRC2.ARJ   │Cln │NanForum library Source files                   │[1-06]│
  1244.  │NOTATION.ARJ │Cln │Complete text of article about hungarian notat. │[1-04]│
  1245.  │OOPSCL5.ARJ  │Cln │Another version of pseudo objects               │[1-07]│
  1246.  │PACKUP.ARJ   │Cln │ASM source of PACK/UNPACK replacement SCRSAVE.. │[1-04]│
  1247.  │PAT1.ARJ     │Cln │CIX NanForum Libraryy PATCH                     │[1-07]│
  1248.  │POPUPCAL.ARJ │Cln │Popup calender                                  │[1-05]│
  1249.  │POWER10.ARJ  │Cln │French library                                  │[1-07]│
  1250.  │READPW.ARJ   │Cln │GETSYS change for password invisible reader     │[1-03]│
  1251.  │SCANCODE.ARJ │Cln │Database with scan codes                        │[1-07]│
  1252.  │SCRSAVE.ARJ  │Cln │Screen AntiBurning utility (inactivity snake)   │[1-05]│
  1253.  │SHELP50A.ARJ │Cln │SuperHelp for Clipper                           │[1-07]│
  1254.  │SOUND.ARJ    │Cln │Multiple TONE() used as one SOUND function      │[1-06]│
  1255.  │SYMBOL.ARJ   │Cln │Dumper of symbol tables of Summer87 .EXE        │[1-03]│
  1256.  │TBWHL4.ARJ   │Cln │WHILE browsing using TBROWSE, well commented    │[1-06]│
  1257.  │VSIX711.ARJ  │Cln │Vernon Six Clipper utilities and library        │[1-05]│
  1258.  CLIPBBS 1-10                   Page 24                  29 Oct 1991
  1259.  
  1260.  
  1261.  └─────────────┴────┴────────────────────────────────────────────────┴──────┘
  1262.  
  1263.  Src can be:
  1264.      Cln     File is accesible on ClipperNet
  1265.      Cbs     File is accesible in HQ BBS of CLipper BBS Magazine
  1266.  
  1267.  
  1268.  ------------------------------------------------------------------------------
  1269.  CLIPBBS 1-10                   Page 25                  29 Oct 1991
  1270.  
  1271.  
  1272.  ==============================================================================
  1273.                                     CLIPBBS
  1274.  ==============================================================================
  1275.  
  1276.  
  1277.                               CLIPBBS Distribution
  1278.    
  1279.    CLIPBBS is special magazine about CLIPPER and CLIPPERing (or about 
  1280.    another related problems and xBASE languages). This magazine is for
  1281.    free and articles aren't honored. Nobody can make a profit from the
  1282.    distribution of this magazine.
  1283.    
  1284.    CLIPBBS can be freely downloaded and uploaded to any BBS or any other
  1285.    public system without changes of original contents or number of files
  1286.    in original archive (kind of archive can be changed, but we are sup-
  1287.    porting ARJ archive because is best and smallest).
  1288.    If you are interested in CLIPBBS and would like to become a DISTRIBUTION
  1289.    site, contact publisher on 2:285/608@fidonet or 27:1331/4412@signet
  1290.    or just call to 31-10-4157141 (BBS, working 18:00->08:00, 2400bps) or
  1291.    voice to 31-10-4843870 in both cases asking for DANIEL (Docekal).
  1292.    
  1293.    Distribution sites:
  1294.    
  1295.    United Kingdom
  1296.        Welsh Wizard, SYSOP Dave Wall, phone 44-656-79477
  1297.    
  1298.    United States of America
  1299.        The Southern Clipper, SYSOP Jerry Pults, phone 1-405-789-2078
  1300.  
  1301.  ------------------------------------------------------------------------------
  1302.  CLIPBBS 1-10                   Page 26                  29 Oct 1991
  1303.  
  1304.  
  1305.                       How to write articles in CLIPBBS?
  1306.    
  1307.    
  1308.    Submission of articles to CLIPBBS is really easy:
  1309.      Maximum of 78 characters per line, as long or as short as you like
  1310.      ASCII text.
  1311.      Choose from the list of extension which most describes your text, or
  1312.      just name it .ART as ARTicle and send it to publisher or to any
  1313.      distribution site via modem to BBS or with mailer as file attach.
  1314.      Article will come automatically appear in the next free issue.
  1315.    
  1316.    Extensions are:
  1317.    
  1318.            Articles (anything)             .ART
  1319.            Software                        .SOF
  1320.            News                            .NEW
  1321.            Question and Answers            .Q&A
  1322.            ANOMALIES and their comments    .ANO
  1323.            Letters to editors              .LET
  1324.            Advertisement                   .ADV
  1325.            Wanted                          .WAN
  1326.            Comments                        .CMS
  1327.            DUMP from conferences           .DMP
  1328.            Clipper Net                     .CLN
  1329.            
  1330.    That's all at the moment, there will probably be changes later, as the
  1331.    magazine evolves. If you have any ideas for a new section of CLIPBBS,
  1332.    please tell us, or just write an article about it.
  1333.    
  1334.    Daniel, publisher
  1335.  
  1336.  ------------------------------------------------------------------------------
  1337.