home *** CD-ROM | disk | FTP | other *** search
/ Black Box 4 / BlackBox.cdr / clipper / clbbs106.arj / CLBBS106.TXT
Encoding:
Text File  |  1991-03-04  |  86.2 KB  |  1,983 lines

  1.                         ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░                      
  2.               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░             
  3.         ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░       
  4.      ░░░░░░░▓▓▓▓░░▓▓▓▓░░░░░▓▓▓▓░░░▓▓▓▓▓▓░░▓▓▓▓▓▓░░▓▓▓▓▓▓░░░▓▓▓▓░░░░░░░░░░░    
  5.    ░░░░░░░░▓▓  ▓▓░░▓▓  ░░░░░▓▓  ░░░▓▓  ▓▓░░▓▓  ▓▓░░▓▓  ▓▓░▓▓  ▓▓░░░░░░░░░░░░  
  6.   ░░░░░░░░▓▓  ░░  ░▓▓ ░░░░░░▓▓ ░░░░▓▓ ░▓▓ ░▓▓ ░▓▓ ░▓▓ ░▓▓ ▓▓▓░░  ░░░░░░░░░░░░ 
  7.  ░░░░░░░░░▓▓ ░░░░░░▓▓ ░░░░░░▓▓ ░░░░▓▓▓▓▓  ░▓▓▓▓▓  ░▓▓▓▓▓  ░▓▓▓░░░░░░░░░░░░░░░░
  8.  ░░░░░░░░░▓▓ ░░░░░░▓▓ ░░▓░░░▓▓ ░░░░▓▓    ░░▓▓  ▓▓░░▓▓  ▓▓░░░ ▓▓▓░░░░░░░░░░░░░░
  9.   ░░░░░░░░░▓▓░░▓▓░░▓▓ ░▓▓ ░░▓▓ ░░░░▓▓ ░░░░░▓▓ ░▓▓ ░▓▓ ░▓▓ ▓▓░░▓▓ ░░░░░░░░░░░░ 
  10.    ░░░░░░░░░▓▓▓▓  ▓▓▓▓▓▓▓ ░▓▓▓▓░░░▓▓▓▓░░░░▓▓▓▓▓▓  ▓▓▓▓▓▓  ░▓▓▓▓  ░░░░░░░░░░░  
  11.      ░░░░░░░░    ░░       ░░    ░░░    ░░░░      ░░      ░░░    ░░░░░░░░░░    
  12.         ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░       
  13.               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░             
  14.                         ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░                      
  15.  
  16.    Volume 1, Number 6                                        4 March 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.     DOSRCS - Revision Control System - part (4)  ..........................  1
  44.     The Programmer's Guide to CLIPPER Linkers - part (3)  .................  5
  45.     Best way of making FOR cyclus, and what about WHILE cyclus  ........... 10
  46.     WHICH packing/unpacking program to choose???????  ..................... 13
  47.     Will Clipper expand to graphics environment?  ......................... 16
  48.  2. SOFTWARE  ............................................................. 18
  49.     TIPS&TRICKS - how to found largest string in array  ................... 18
  50.     DANIEL.LIB - NEW version of DANIEL.RMK  ............................... 18
  51.  3. ANOMALIES  ............................................................ 22
  52.     ANOMALIES reports and commets  ........................................ 22
  53.     Clipper Debugger anomalies  ........................................... 22
  54.     INCONSISTENCY  ........................................................ 24
  55.     New RTLINK version, INCREMENTAL LINKING  .............................. 24
  56.  4. ECHODUMP  ............................................................. 26
  57.     CONFERENCE DUMP part (5)  ............................................. 26
  58.  5. CLIPPER NET  .......................................................... 28
  59.     Index of described files in Clipper BBS Magazine  ..................... 28
  60.  CLIPBBS 1-06       Table of Contents (...)         4 Mar 1991
  61.  
  62.  
  63.     Routing-Plan for ClipperNet  .......................................... 28
  64.     CLN - SOUND.ARJ  ...................................................... 30
  65.     CLN - TBWHL4.ARJ  ..................................................... 31
  66.     ClipNet - NFDESC2.ARJ  ................................................ 31
  67.     ClipNet - NFLIB2.ARJ  ................................................. 32
  68.     ClipNet - NFSRC2.ARJ  ................................................. 32
  69.     ClipperNet - ACCESS.ARJ  .............................................. 34
  70.     ClipperNet - ACHOO2.ARJ  .............................................. 34
  71.  6. CLIPBBS  .............................................................. 36
  72.     CLIPBBS distribution  ................................................. 36
  73.     CLIPBBS, how to write an article!!!  .................................. 37
  74.  
  75.                                    - - - - -
  76.  CLIPBBS 1-06                   Page 1                    4 Mar 1991
  77.  
  78.  
  79.  =============================================================================
  80.                                    ARTICLES
  81.  =============================================================================
  82.  
  83.  
  84.              DOSRCS - Revision Control System - part (4)
  85.  
  86.                           _________________
  87.                           Check In - CI.EXE
  88.                           ═════════════════
  89.  
  90.  CI.EXE is second most often used program from DOSRCS set of
  91.  programs. It's used in simply form in our RCSPUT.BAT:
  92.  
  93.                │ @echo off
  94.                │ echo Processing [%1]
  95.                │ CI -q %1
  96.  
  97.  One switch used in this case, -q, is used only for supressing some
  98.  messages and questions given by CI.EXE.
  99.  
  100.  Complete syntax is:
  101.  
  102.          CI [options] file ...
  103.  
  104.  One important warning:
  105.  
  106.          Every RCS used and stored file is using user names for
  107.          specifying who is able to access file and not. Originally
  108.          every file is getting name of user who was storing first
  109.          this file and this user has right to use this file. Other
  110.          users not, until they are written inside of file as other
  111.          possible users. It's done by RCS program, or by making
  112.          access list empty. Superuser can of course access all files
  113.          without limitation.
  114.  ________
  115.  BRANCHES
  116.  
  117.          Branches are created automatically in most cases. Typicall
  118.          example is this:
  119.  
  120.          TEST.PRG has initial revison 1.1 and next revisions
  121.                  1.2 and 1.3
  122.  
  123.                  Owner of file will retrieve 1.1 from RCS and
  124.                  start changing (1.1 is locked!). After this will
  125.                  use CheckIn without specifying new number of
  126.                  revision. CheckIn will see that 1.1 is locked and
  127.                  therefore will assume that new revision number MUST
  128.                  be 1.1.1.1 (added 1.1 after 1.1) and will store it
  129.                  with this number. User then can continue in
  130.                  BRANCHING with number 1.1.1.2, 1.1.1.3...
  131.  
  132.  ________________________
  133.  UNLOCKING of LOCKED FILE
  134.  
  135.  CLIPBBS 1-06                   Page 2                    4 Mar 1991
  136.  
  137.  
  138.          Sometime is needed to unlock locked revision (user can for
  139.          example delete .PRG file and forget to use PUT for storing
  140.          it back!). When this will happend, nobody is able to get
  141.          revision for locking again and must be used RCS.EXE for
  142.          unlocking. See some next continuing about RCS.EXE
  143.  
  144.  _____________________________________
  145.  CHECKING of differences and -Q switch
  146.  
  147.          Normally, CI checks whether the revision to be deposited is
  148.          different from the preceding one. If it is not different,
  149.          CI either aboirts the deposit (if -Q is given) or asks
  150.          whether to abort (if -Q is omitted). Deposit can be forced
  151.          with -F option.
  152.  
  153.  ____________
  154.  LOG MESSAGES
  155.  
  156.          Log message is used for every deposited revision. CI is
  157.          asking for LOG message every time when new revision (or
  158.          forced revision) is coming. User/programmer can use as many
  159.          lines wants and end them with "." or Ctrl Z. All lines are
  160.          then part of $Log$ keyword. If CI is used for more files in
  161.          one (CI *.PRG for example), is possible use the same
  162.          message for all this files - CI is asking for reuse old
  163.          message, but it's not working in case how i'm using CI,
  164.          because PUT is calling RCSPUT with only one file at one
  165.          time. But mostly changes in sources are different for
  166.          everyone different.
  167.  
  168.  ___________________
  169.  INCLUDING NEW FILES
  170.  
  171.          New files of RCS are created when RCS file of give
  172.          source/text is not exist. RCS is then creating new RCS file
  173.          with initial revision (1.1 by default), access list is
  174.          initialized to empty and CI is asking for DESCRIPTIVE TEXT
  175.          instead of LOG message. This text is description of purpose
  176.          of file and is NOT part of $Log$ definition.
  177.  
  178.  __________
  179.  CI options
  180.  
  181.  
  182.          -r[<rev>]
  183.  
  184.          assigns revision number <rev> to checked in revision,
  185.          releases corresponding lock and deletes working file. This
  186.          -r option is automatically given if not specified. Non
  187.          specified <rev> is request for automatic counting of new
  188.          revision number. <rev> if specified must be higher than the
  189.          latest one on the branch to which rev belongs, or must
  190.          start a new branch.
  191.  
  192.  
  193.          -f[<rev>]
  194.  CLIPBBS 1-06                   Page 3                    4 Mar 1991
  195.  
  196.  
  197.          Forces a deposit. New revision is deposited even it is not
  198.          different from preceding one.
  199.  
  200.          -k[<rev>]
  201.  
  202.          Searches working file for keyword values to determine its
  203.          revision number, creating date, state and author (see
  204.          article about KEYWORDS) and assigns these values to
  205.          deposited revision rather than computing them.
  206.  
  207.  ║       This is quite nice switch with main interest in sending a
  208.  ║       complete latest revision to another place (developers,
  209.  ║       check out sites, beta test sites). Then receiver will use
  210.  ║       CI -k *.* on all files and if correct keywords are written
  211.  ║       in EVERY file (no problem when used one kind of header), CI
  212.  ║       will take all correct number from files and will create
  213.  ║       correct stored new revision in another set of RCS files on
  214.  ║       another place!
  215.  
  216.          -l[<rev>]
  217.  
  218.          Works like -r, only it perform addition CO -L for just
  219.          deposited revision. Therefore, deposited revision is
  220.          immediately checked out again and locked.
  221.  
  222.  ║       This one is usefull in case that one wants to save
  223.  ║       revision, but continue in workign and editing.
  224.  
  225.  
  226.          -u[<rev>]
  227.  
  228.          Works like -l, except that deposited revision is NOT
  229.          locked.
  230.  
  231.  ║       This one is useful in case that one wants to (for example)
  232.  ║       copile revision immediately after checking, but is not
  233.  ║       planning another editing.
  234.  
  235.  
  236.          -q[<rev>]
  237.  
  238.          Diagnostics output is not printed, revision which is not
  239.          different from preceding one is NOT deposited, unless -f is
  240.          given.
  241.  
  242.  
  243.          -d<date>
  244.  
  245.          Uses <date> for the checkin date and time. Date may be
  246.          specified in free format as was explained in article about
  247.          CO.EXE program.
  248.  
  249.  ║       Useful in case of need to say different date of creating
  250.  ║       revision than reality, or for "-k" option where date is not
  251.  ║       available.
  252.  
  253.  CLIPBBS 1-06                   Page 4                    4 Mar 1991
  254.  
  255.  
  256.          -m<msg>
  257.  
  258.          Uses <msg> as LOG message for ALL revisions checked in. If
  259.          this switch is not used, CI will ask for filling in all LOG
  260.          messages.
  261.  
  262.          -n<name>
  263.  
  264.          Assigns the symbolic name <name> to the number of the
  265.          checked-in revision. CI printer an error if name is already
  266.          assigned to another number. Later is possible to use this
  267.          symbolic name instead of revision number in CO command.
  268.  
  269.          This is giving nice possibility to NAMED some from
  270.          revisions which have key value.
  271.  
  272.          -N<name>
  273.  
  274.          Same as -n, but it's overriding previsou assignment of
  275.          name. RCS is of course still keeping number style of
  276.          revisions, only assigns additional name, therefore name can
  277.          be reasigned to another revision. Please NOTE THAT this is
  278.          "-N" and previous one was "-n".
  279.  
  280.          -s<state>
  281.  
  282.          Sets the state of the checked-in revision to the identifier
  283.          <state>. Default is <Exp>. Can be used for division of
  284.          revisions or writing down some special flags or comments.
  285.  
  286.          -t[<txtfile>]
  287.  
  288.          Writes DESCRIPTIVE text into the RCS file (deleted the
  289.          existing text of course). If <txtfile> is omitted, CI
  290.          prompts the user for text, otherwise descriptive text is
  291.          copied from file <txtfile>.
  292.  
  293.          -w<login>
  294.  
  295.          Uses <login> for Author field of deposited revision. Can be
  296.          used for change of author or for set author for "-k"
  297.          option
  298.  
  299.  
  300.  All flags are described, interesting are marked with double line,
  301.  together with tip of use.
  302.  
  303.  See you later...
  304.  .DD.
  305.  
  306.  -----------------------------------------------------------------------------
  307.  CLIPBBS 1-06                   Page 5                    4 Mar 1991
  308.  
  309.  
  310.         The Programmer's Guide to CLIPPER Linkers - part (3)
  311.  
  312.  
  313.          - OVERLAY RELOADING WITH RTLINK/CLIPPER-5.0 -
  314.  
  315.          This is a very important "undocumented" feature of the RTLINK
  316.          linker supplied with Clipper-5.0.  I have been RELOADING
  317.          objects from the Summer 87 Clipper libraries for years, so when
  318.          I received my copy of Clipper-5.0, the first thing I attempted
  319.          to do was to overlay some of the larger modules in the
  320.          Clipper libraries using the RELOAD command in my linker
  321.          script file.  The Nantucket development team had the foresight
  322.          to insure that their C and ASM compiler assigned a UNIQUE name
  323.          to each Clipper C/ASM object in the Clipper libraries, thus
  324.          allowing, you, the Clipper programmer to use both the
  325.          "undocumented" RELOAD command and MODULE command in your .LNK
  326.          script files.
  327.  
  328.          Refer to the script file on the next page for an example of how
  329.          to use these features to reduce memory usage in your Clipper-5.0
  330.          applications.  This link file creates an overlay area for
  331.          overlaying the larger modules in the Clipper libraries which
  332.          are not likely to call each other recursively, therefore you
  333.          will probably notice very difference in speed performance yet
  334.          you will get up to 40K more memory overhead depending on how
  335.          much of the Clipper libraries your application uses.
  336.  
  337.          You may get a "warning" message during link time if your
  338.          application does not call one of the modules referenced in an
  339.          overlay area.  In the event this happens, simply remove that
  340.          module from the link file.  For example, if you are not using
  341.          any TBROWSE objects, remove the following line:
  342.  
  343.             SECTION MODULE D:\S89\EDIT\TBROWSE.C
  344.  
  345.           # Example of using RELOADABLE overlays with the
  346.           # Clipper-5.0 version of RTLINK
  347.  
  348.           FI <my files>
  349.           LIB <my libs>
  350.           LIB \CLIPPER5\LIB\extend
  351.           LIB \CLIPPER5\LIB\clipper
  352.           LIB \CLIPPER5\LIB\terminal
  353.           LIB \CLIPPER5\LIB\dbfntx
  354.           OUTPUT <my .EXE>
  355.           VERBOSE
  356.           RELOAD FAR 200
  357.           BEGINAREA
  358.             SECTION MODULE D:\S89\EDIT\MEMOEDIT.C
  359.                     MODULE D:\S89\MEMO\MEMOTRAN.C
  360.             SECTION MODULE D:\S89\MEMO\MEMOREAD.C
  361.                     MODULE D:\S89\MEMO\MEMOWRIT.C
  362.                     MODULE D:\S89\MEMO\MEMOLINE.C
  363.                     MODULE D:\S89\MEMO\MLCOUNT.C
  364.                     MODULE D:\S89\MEMO\MLPOS.C
  365.             SECTION MODULE D:\S89\EDIT\TBROWSE.C
  366.  CLIPBBS 1-06                   Page 6                    4 Mar 1991
  367.  
  368.  
  369.             SECTION MODULE D:\S89\EDIT\ACHOICE.C
  370.                     MODULE D:\S89\ARRAY\ASCAN.C
  371.                     MODULE D:\S89\ARRAY\ASORT.C
  372.                     MODULE D:\S89\ARRAY\ARRAY.C
  373.                     MODULE D:\S89\ARRAY\DIRECTRY.C
  374.             SECTION MODULE D:\S89\DBCMD\DBSTRUCT.C
  375.                     MODULE D:\S89\DBCMD\DBCREATE.C
  376.                     MODULE D:\S89\DBCMD\JOINLIST.C
  377.                     MODULE D:\S89\DBF\SORTOF.C
  378.             SECTION MODULE D:\S89\TERM\GETHELP.C
  379.           ENDAREA
  380.  
  381.  
  382.  
  383.  
  384.          = DYNAMIC OVERLAYS =
  385.  
  386.          "Dynamic Overlays" are segments of code which are loaded into a
  387.          "memory pool" at runtime.   Dynamic overlay segments usually
  388.          look like this in your link file:
  389.  
  390.            # only 1 area needed
  391.            BEGINAREA
  392.              SECTION FILE A
  393.              SECTION FILE B
  394.              SECTION FILE C
  395.              SECTION FILE D
  396.              SECTION FILE E
  397.              SECTION FILE F
  398.            ENDAREA
  399.  
  400.          In the above example, if a function in FILE A calls a function
  401.          in FILE B, then FILE B is loaded into the memory pool along with
  402.          FILE A and the memory pool is "dynamically" managed to insure
  403.          that modules which call each other repetitively will remain in
  404.          memory to improve speed performance.  Some dynamic overlay
  405.          linkers also provide automatic "reloading" to insure that the
  406.          application will always have sufficient memory in the pool.
  407.          Modules which don't need to be in the memory pool will be
  408.          removed to allow room for others at runtime.
  409.  
  410.          Dynamic overlay linkers (ALINK, BLINKER, WARPLINK, RTLINK-
  411.          CLIPPER 5.0) offer the advantage of simpler overlay design and
  412.          usually better memory management.  Some also have a tendency to
  413.          "fragment" the Clipper free memory pool because they share the
  414.          heap with the Clipper application rather than allocating a
  415.          separate dos memory area.  This can cause applications to run out
  416.          of memory after prolonged running of the application if there is
  417.          not sufficient memory overhead at the start of the application.
  418.          Some dynamic overlay linkers also support overlay management by
  419.          "frequency of usage".  If a module is called often during the
  420.          running of an application, it will remain in the overlay pool
  421.          rather than being "swapped out" to load other overlays.  This
  422.          insures optimum runtime performance.
  423.  
  424.          Dynamic-overlay linkers such as WARPLINK and BLINKER both
  425.  CLIPBBS 1-06                   Page 7                    4 Mar 1991
  426.  
  427.  
  428.          make a disclaimer in their documentation requiring that the
  429.          objects being overlayed are "well-behaved".   After much
  430.          experimentation with our own libraries and many third-
  431.          party libraries, it is now more clear what constitutes
  432.          well-behaved modules:
  433.  
  434.             a. Well-behaved code uses the Clipper EXTEND interface,
  435.                registers or the stack for parameter passing and does
  436.                not use undocumented features of Clipper.
  437.  
  438.             b. All Clipper-compiled .OBJects are dynamically-
  439.                overlayable.
  440.  
  441.          Modules which CANNOT be dynamically-overlaid are:
  442.  
  443.             a. Routines which handle interrupts.
  444.  
  445.             b. Modules in which the DATA area is changed during
  446.                runtime rather than allocating memory in the root area.
  447.  
  448.          Dynamic overlaying of third-party libraries can be an
  449.          aggravating learning experience if you don't get support from
  450.          the third party vendor in trying to accomplish this task.
  451.          From my experience, the entire concept of dynamic-overlaying
  452.          of C/ASM code is not very well-defined.  BLINKER and WARPLINK
  453.          have chosen to accept this challenge while the more conservative
  454.          RTLINK has chosen instead to dynamic-overlay Clipper-compiled
  455.          objects only and handle all the C/ASM code using static or
  456.          reloable overlays - which, in my opinion, is a much more reliable
  457.          concept.
  458.  
  459.          In the long run, I believe that dynamic-overlay linkers will
  460.          survive only if they work flawlessly with all third-party
  461.          libraries or very clearly define the rules for compatability with
  462.          each third-party product and develop a following of add-on
  463.          support.
  464.  
  465.  
  466.          - PROCEDURE-LEVEL OVERLAY LOADING -
  467.  
  468.          For a dynamic-overlay manager to work effectively, it is
  469.          important that it load overlays at the smallest possible code-
  470.          segment level, i.e., the procedure/function rather than the
  471.          entire object.  This requires managing the symbol table
  472.          seperately from the code and data, therefore, these linkers
  473.          place the symbol table into the root memory area and each
  474.          function into a separate overlay segment.  To keep the root
  475.          memory symbol table as small as possible it is recommended that
  476.          you compile your application into a few large objects rather
  477.          than many small objects when using dynamic-overlay linkers.
  478.  
  479.          I am not exactly sure at this time how RTLINK/CLIPPER-5.0
  480.          accomplishes the symbol management, but compiling into large
  481.          objects does not appear to be necessary with Clipper-5.0 to
  482.          reduce the executable memory model.  RTLINK/CLIPPER-5.0 does
  483.          not appear to be dependent on the method that your source code
  484.  CLIPBBS 1-06                   Page 8                    4 Mar 1991
  485.  
  486.  
  487.          is compiled with the exception of line numbers, which WILL
  488.          increase your memory usage.
  489.  
  490.  
  491.  
  492.          = DYNAMIC LINKING =
  493.  
  494.          True "Dynamic linkers" should not be confused with "Dynamic
  495.          Overlay" linkers.  Dynamic overlay linkers perform all the
  496.          linking and fix-ups for the entire application at one time
  497.          and then produce an .EXEcutable program.  True "dynamic linkers"
  498.          perform all the linking and fix-ups at "runtime" by linking
  499.          from your .OBJ files or "dynamic-libraries" during the
  500.          running of the application.
  501.  
  502.          Dynamic linkers (dCLIP, dCLIPRUN, NOLINK) provide the best
  503.          memory-management for very large applications.   All other forms
  504.          of linkers still require that each symbol reference in the
  505.          application be resolved at link time and assigned an address in
  506.          the "root" memory area.  Even the most sophisticated of overlay
  507.          management schemes cannot eliminate the need to create this
  508.          "symbol table", therefore the memory usage of a program will
  509.          always increase proportionally with the number of symbols in the
  510.          .OBJects regardless of the overlay technique.
  511.  
  512.          Dynamic linkers solve this problem by adding to the "root-
  513.          memory" symbol table only if a function or procedure is called
  514.          at runtime.  Dynamic linkers will load the executable portion of
  515.          the code into an "object pool" and perform the symbol fixups in
  516.          the main heap area.  Once a symbol has been added to the heap,
  517.          it will stay in memory even after returning from the called
  518.          function, however the executable code may be removed from the
  519.          object pool to make space for new objects which may be called
  520.          by the application.
  521.  
  522.          Dynamic linkers also allow linking from sets of dynamic
  523.          libraries during the running of an application therefore large
  524.          applications such as accounting systems can be distributed
  525.          with one .EXE (the "dynamic-link engine") and multiple "dynamic-
  526.          libraries".
  527.  
  528.          There are at least two (2) pre-requisites for a language to
  529.          be able to support true dynamic linking:
  530.  
  531.           1.  The compiled code must be fully relocatable and not contain
  532.               any code or data which must remain at a fixed memory
  533.               location.
  534.  
  535.           2.  The error-handling system must allow for reconciling
  536.               "missing externals" at runtime.
  537.  
  538.          Clipper SUMMER-87 and 5.0 compile code into P-code (or Pseudo-
  539.          code) objects rather than native code.  This code is "interpreted"
  540.          rather than "executed" at runtime, therefore it is fully
  541.          relocatable.  In addition, any called function or procedure which
  542.          is not in memory or in an overlay will cause a runtime error
  543.  CLIPBBS 1-06                   Page 9                    4 Mar 1991
  544.  
  545.  
  546.          which is passed through the UNDEF_ERROR() function (Summer 87) or
  547.          the ErrorSys() code block (Clipper-5.0).   dCLIP and NOLINK
  548.          take advantage of this feature of Clipper by "dynamically-linking"
  549.          the missing code from .OBJect files on the disk or from dynamic
  550.          libraries to resolve the "missing external" error then returning
  551.          a .TRUE. value from the error handler to continue program
  552.          execution.  The error is completely transparent to the operator
  553.          because it is resolved by the dynamic-link system as follows:
  554.  
  555.             * Clipper's ERRORSYS.PRG module
  556.             FUNCTION undef_error
  557.             PARAM   _proc,_line,_info
  558.             IF SUBSTR(_info,1,16)="missing EXTERNAL"
  559.               * get name of .OBJect from .MAP file or .DLB dynamic lib.
  560.               _obj=DC_OBJFIND(_proc)
  561.               * link object into memory and verify proc is loaded
  562.               IF DC_OBJLOAD(_obj) .AND. TYPE(_proc+'()')='UI'
  563.                 RETURN .t.
  564.               ENDIF
  565.             ENDIF
  566.             DO _disperror WITH _proc,_line,_info
  567.             BREAK
  568.  
  569.          Some Dynamic-Linkers also provide a "dynamic-link library", so
  570.          you can actually link a "linker" into your application, thereby
  571.          taking advantage of multiple link technologies in one
  572.          application.  dCLIP.EXE is an example of an Clipper application
  573.          which uses three (3) overlaying techniques all at the same
  574.          time.  DCLIP.EXE is built using the dCLIP "dynamic-link" library,
  575.          the Clipper Libraries, some Clipper-compile objects and RTLINK.
  576.          Much of the C/ASM code in the Clipper libraries and the
  577.          DCLIPNL.LIB "dynamic-link" library are overlayed using the
  578.          "RELOADABLE" overlay capability of RTLINK.  The Clipper-compiled
  579.          part of dCLIP is "DYNAMICALLY" overlayed with the RTLINK dynamic
  580.          overlay manager, and the user "application" code is "DYNAMICALLY-
  581.          LINKED" at runtime by the dCLIP dynamic link functions.  This
  582.          dynamic-link technology is easily included in any Clipper
  583.          application by simply defining the DCLIPNL.LIB ahead of
  584.          CLIPPER.LIB in your application link statement, then using
  585.          a function call in your application to reference the object
  586.          maps or dynamic libraries to use during program execution.
  587.  
  588.  -----------------------------------------------------------------------------
  589.  CLIPBBS 1-06                   Page 10                   4 Mar 1991
  590.  
  591.  
  592.      Best way of making FOR cyclus, and what about WHILE cyclus
  593.  
  594.  Next from serie of speed tests of CLipper is here. At this time we
  595.  will be looking how is working FOR command and if is not better to
  596.  make replacement with WHILE.
  597.  
  598.  TEST programs used for this purpose are simple:
  599.  
  600.  TEST1     pure FOR loop with 10000 of iterations
  601.      │           local   start  := 0 ,;         ─┐
  602.      │                   n,n1                    ├─the same for ALL
  603.      │                                          ─┘    tests
  604.      │           ? "test no 1,    FOR 0->9999"
  605.      │           start = seconds()
  606.      │           for n:=0 to 9999
  607.      │           ?? n,chr(13)
  608.      │           next
  609.      │           ?
  610.      │           ? "    elapsed ",seconds()-start
  611.  
  612.  TEST2     pure FOR loop with 100,000 of iterations
  613.      │           ? "test no 2,   FOR 0->99999"
  614.      │           start = seconds()
  615.      │           for n:=0 to 99999
  616.      │           ?? n,chr(13)
  617.      │           next
  618.      │           ?
  619.      │           ? "    elapsed ",seconds()-start
  620.  
  621.  TEST3     combined two FOR loops with 100,000 of iterations
  622.      │           ? "test no 3,  FOR 0->9 ( FOR 0->9999 )"
  623.      │           start = seconds()
  624.      │           for n1=0 to 9
  625.      │           for n=0 to 9999
  626.      │                   ?? n,chr(13)
  627.      │           next
  628.      │           next
  629.      │           ?
  630.      │           ? " elapsed ",seconds()-start
  631.  
  632.  TEST4     combined two FOR loops with 100,000 of iterations
  633.      │           ? "test no 4,  FOR 0->9999 (FOR 0->9)"
  634.      │           start = seconds()
  635.      │           for n1=0 to 9999
  636.      │           for n=0 to 9
  637.      │                   ?? n,chr(13)
  638.      │           next
  639.      │           next
  640.      │           ?
  641.      │           ? "    elapsed ",seconds()-start
  642.  
  643.  Comments:       difference of T3 and T4 is only in way of nesting
  644.                  FOR loops. It was just for fun with possible
  645.                  different results.
  646.  
  647.                  Functionally T2, T3 and T4 are doing EXACTLY the
  648.  CLIPBBS 1-06                   Page 11                   4 Mar 1991
  649.  
  650.  
  651.                  same job, only with different way. T1 is for
  652.                  counting theoreticall time for T2,T3 and T4
  653.  
  654.            │ T1            │ T2            │ T3            │ T4
  655.    ────────┼───────────────┼───────────────┼───────────────┼──────────
  656.      result│ 19.93         │ 213.55        │ 199.82        │ 200.31
  657.      theory│               │ 199.93        │ 199.93        │ 199.93
  658.    ────────┼───────────────┼───────────────┼───────────────┼──────────
  659.      diff  │               │  13.62        │-  0.11        │   0.38
  660.  
  661.  Lets take a look to results.
  662.  
  663.  -       First look is telling, that T3 is FASTEST from all other
  664.          test with 100,000 of iterations. Real FOR with only one
  665.          FOR command is much slower than TWO NESTED FOR LOOPS.
  666.  
  667.          Why is this? It's very simple and it can be seen on screen
  668.          when tests are running. At moment when T2 is running over
  669.          iteration with number 65535 is coming SLOWNESS of
  670.          displaying with comparation to previous speed. Why is this
  671.          happening is again very simple and it's NOT any "bug" or
  672.          "gotcha" of Nantucket.
  673.          Registers of your mikroprocessor in your PC are 16bits, it
  674.          means they are able to keep value 0-65535. Nantucket seems
  675.          made good work, because is OPTIMIZING small loops into ONLY
  676.          one 16bit register and only when needed is taking another
  677.          16bit register. Then it's probably working with 32bits for
  678.          FOR command and is of course slower (must operate with two
  679.          instead of one register).
  680.  
  681.  -       Above mentioned register explanations is also explaining
  682.          why T3 and T4 are faster than T2. They are using TWO times
  683.          only 16bit registers and therefore must be faster because
  684.          of saved time. Time used for switching between two FORs
  685.          is very small.
  686.  
  687.  -       Still seems better to make 0->9 (0->9999) than T4, because
  688.          it went (only little) bit faster.
  689.  
  690.  
  691.  
  692.  For lot of fan, i did another two tests with WHILE. Both are
  693.  simulating T1 and T2.
  694.  
  695.  TEST11          WHILE loop for 10,000 iteration
  696.      │           local start     := 0 ,;
  697.      │           n
  698.      │
  699.      │           ? "test1,     WHILE 0->9999"
  700.      │           n     = 0
  701.      │           start = seconds()
  702.      │           while n++<10000
  703.      │           ?? n,chr(13)
  704.      │           end
  705.      │           ?
  706.      │           ? "    elapsed   ",seconds()-start
  707.  CLIPBBS 1-06                   Page 12                   4 Mar 1991
  708.  
  709.  
  710.  TEST12          WHILE loop for 100,000 iterations
  711.      │           ?
  712.      │           ? "test2,     WHILE 0->99999"
  713.      │           n     = 0
  714.      │           start = seconds()
  715.      │           while n++<100000
  716.      │           ?? n,chr(13)
  717.      │           end
  718.      │           ?
  719.      │           ? "    elapsed   ",seconds()-start
  720.  
  721.  
  722.  And now we can give FINAL table connected with previous one.
  723.  
  724.            │ T1            │ T2            │ T3            │ T4
  725.    ────────┼───────────────┼───────────────┼───────────────┼──────────
  726.      result│ 19.93         │ 213.55        │ 199.82        │ 200.31
  727.      theory│               │ 199.93        │ 199.93        │ 199.93
  728.    ────────┼───────────────┼───────────────┼───────────────┼──────────
  729.      diff  │               │  13.62        │-  0.11        │   0.38
  730.    ────────┴───────────────┴───────────────┴───────────────┴──────────
  731.            │ T11           │ T12
  732.    ────────┼───────────────┼────────────────
  733.      result│ 19.94         │ 213.33
  734.    ────────┴───────────────┴────────────────
  735.  
  736.  In long run (T12) seems WHILE loop a bit faster. Interesting again.
  737.  In normal run (with 16bit counting) it's bit slower, or the same
  738.  speed as FOR loop.
  739.  
  740.  .DD.
  741.  
  742.  -----------------------------------------------------------------------------
  743.  CLIPBBS 1-06                   Page 13                   4 Mar 1991
  744.  
  745.  
  746.           WHICH packing/unpacking program to choose???????
  747.  
  748.  
  749.  Maybe you know, there exists war called Archivers War. Everyone is
  750.  trying to explain why one archiver is better than other. My small
  751.  addition to this "WAR" is only pure view to times and sizes created
  752.  with using of several kind of archive programs.
  753.  
  754.  First, i took a database of size about 1MB because it can be very
  755.  interesting for us, Clipper programmers.
  756.  
  757.  Files        ORDER.DBF   size  1121395 bytes
  758.  
  759.  ┌──────────┬────────┬───────┬────────────┬────────┬────────────────┐
  760.  │Archivers │ Make   │Restore│ Final Size │ Percent│ Comment        │
  761.  │          │  time  │ time  │            │        │                │
  762.  ├──────────┼────────┼───────┼────────────┼────────┼────────────────┤
  763.  │ZIP1.10   │   4.78 │ 0.13  │  119,038   │ 10.61  │                │
  764.  │ARJ2.20   │   1.08 │ 0.27  │  106,473   │  9.49  │  (no options)  │
  765.  │ARJ2.20   │   1.01 │       │  106,730   │  9.51  │  -m1           │
  766.  │ARJ2.20   │   0.88 │       │  110,324   │  9.83  │  -m2           │
  767.  │ARJ2.20   │   0.62 │       │  114,288   │ 10.19  │  -m3           │
  768.  │ARJ2.20   │   0.48 │ 0.30  │  142,626   │ 12.71  │  -m4           │
  769.  │ARJ2.20   │   4.35 │ 0.23  │  101,028   │  9.00  │  -jm           │
  770.  │ARJ2.20   │   1.08 │       │  106,202   │  9.47  │  -jh65500      │
  771.  │PAK2.51   │   0.90 │ 0.30  │  134,845   │ 12.02  │                │
  772.  │PKPAK3.61 │   0.22 │ 0.20  │  123,691   │ 11.03  │                │
  773.  │LHA2.12   │   1.56 │ 0.22  │  108,286   │  9.65  │                │
  774.  └──────────┴────────┴───────┴────────────┴────────┴────────────────┘
  775.  
  776.  
  777.  And then, i took RTLINK.EXE (everybody has this 300KBs big monster)
  778.  and runned again the same compressions.
  779.  
  780.  Files        RTLINK.EXE   size  354701  bytes
  781.  
  782.  ┌──────────┬────────┬───────┬────────────┬────────┬────────────────┐
  783.  │Archivers │ Make   │Restore│ Final Size │ Percent│ Comment        │
  784.  │          │  time  │ time  │            │        │                │
  785.  ├──────────┼────────┼───────┼────────────┼────────┼────────────────┤
  786.  │ZIP1.10   │   0.47 │ 0.08  │  179,045   │ 50.47  │                │
  787.  │ARJ2.20   │   0.63 │ 0.18  │  166,526   │ 46.94  │ -m1 and no opt.│
  788.  │ARJ2.20   │   0.48 │       │  169,080   │ 47.66  │  -m2           │
  789.  │ARJ2.20   │   0.40 │       │  171,559   │ 48.37  │  -m3           │
  790.  │ARJ2.20   │   0.28 │       │  187,824   │ 59.95  │  -m4           │
  791.  │ARJ2.20   │   0.67 │       │  163,283   │ 46.03  │  -jm           │
  792.  │ARJ2.20   │   0.63 │       │  166,509   │ 46.94  │  -jh65500      │
  793.  │PAK2.51   │   0.50 │ 0.17  │  176,890   │ 49.87  │                │
  794.  │PKPAK3.61 │   0.17 │ 0.12  │  241,809   │ 68.17  │                │
  795.  │LHA2.12   │   0.60 │ 0.18  │  170,431   │ 48.05  │                │
  796.  └──────────┴────────┴───────┴────────────┴────────┴────────────────┘
  797.  
  798.  
  799.  And now, we can do some sorts - editor will do this.
  800.  
  801.          Fastest on .DBF                         T1 points
  802.  CLIPBBS 1-06                   Page 14                   4 Mar 1991
  803.  
  804.  
  805.          PKPAK3.61 │   0.22                       11
  806.          ARJ2.20   │   0.48   -m4                 10
  807.          ARJ2.20   │   0.62   -m3                  9
  808.          ARJ2.20   │   0.88   -m2                  8
  809.          PAK2.51   │   0.90                        7
  810.          ARJ2.20   │   1.01   -m1                  6
  811.          ARJ2.20   │   1.08   (no options)         5
  812.          ARJ2.20   │   1.08   -jh65500             4
  813.          LHA2.12   │   1.56                        3
  814.          ARJ2.20   │   4.35   -jm                  2
  815.          ZIP1.10   │   4.78                        1
  816.  
  817.          Fastest on .EXE                         T2 points
  818.          PKPAK3.61 │   0.17                       10
  819.          ARJ2.20   │   0.28   -m4                  9
  820.          ARJ2.20   │   0.40   -m3                  8
  821.          ZIP1.10   │   0.47                        7
  822.          ARJ2.20   │   0.48   -m2                  6
  823.          PAK2.51   │   0.50                        5
  824.          LHA2.12   │   0.60                        4
  825.          ARJ2.20   │   0.63   (no options)         3
  826.          ARJ2.20   │   0.63   -jh65500             2
  827.          ARJ2.20   │   0.67   -jm                  1
  828.  
  829.          Creating smallest result on .DBF       T3 points
  830.          ARJ2.20   │   101,028    -jm            11
  831.          ARJ2.20   │   106,202    -jh65500       10
  832.          ARJ2.20   │   106,473    (no options)    9
  833.          ARJ2.20   │   106,730    -m1             8
  834.          LHA2.12   │   108,286                    7
  835.          ARJ2.20   │   110,324    -m2             6
  836.          ARJ2.20   │   114,288    -m3             5
  837.          ZIP1.10   │   119,038                    4
  838.          PKPAK3.61 │   123,691                    3
  839.          PAK2.51   │   134,845                    2
  840.          ARJ2.20   │   142,626    -m4             1
  841.  
  842.          Creating smallest result on .EXE       T4 points
  843.          ARJ2.20   │   163,283    -jm            10
  844.          ARJ2.20   │   166,509    -jh65500        9
  845.          ARJ2.20   │   166,526    -m1 and no opt. 8
  846.          ARJ2.20   │   169,080    -m2             7
  847.          LHA2.12   │   170,431                    6
  848.          ARJ2.20   │   171,559    -m3             5
  849.          PAK2.51   │   176,890                    4
  850.          ZIP1.10   │   179,045                    3
  851.          ARJ2.20   │   187,824    -m4             2
  852.          PKPAK3.61 │   241,809                    1
  853.  
  854.  POINT scales (first way of view results):
  855.  
  856.          Archiver  │ switches       │ T1  T2  T3  T4 ║  SUM
  857.          ──────────┼────────────────┼────────────────╫───────
  858.          ARJ2.20   │    -m3         │  9   8   5   5 ║   27
  859.          ARJ2.20   │    -m2         │  8   6   6   7 ║   27
  860.          PKPAK3.61 │                │ 11  10   3   1 ║   25
  861.  CLIPBBS 1-06                   Page 15                   4 Mar 1991
  862.  
  863.  
  864.          ARJ2.20   │    -m1         │  6   3   8   8 ║   25
  865.          ARJ2.20   │    (no options)│  5   3   9   8 ║   25
  866.          ARJ2.20   │    -jh65500    │  4   2  10   9 ║   25
  867.          ARJ2.20   │    -jm         │  2   1  11  10 ║   24
  868.          ARJ2.20   │    -m4         │ 10   9   1   2 ║   22
  869.          LHA2.12   │                │  3   4   7   6 ║   20
  870.          PAK2.51   │                │  7   5   2   4 ║   18
  871.          ZIP1.10   │                │  1   7   4   3 ║   15
  872.  
  873.          This first way of viewing result is giving very funny result,
  874.          it's moving PKZIP at LATEST place because of BIG slownes on
  875.          .DBF files and still worse results of compression than most
  876.          from ARJ methods. Shocking is place of PKPAK3.161 on third
  877.          place because if you will look back, then it's giving most
  878.          worse result of size of result archives, but it's fastest from
  879.          all arhives tested (in MAKING because extracting is not so much
  880.          interesting in this competition).
  881.  
  882.  LOGICAL SCALES (second way of viewing results)
  883.  
  884.          Logical way of looking to results is very simple. PKPAK is not
  885.          good for use because it's producing worse results of
  886.          compressing. Logically i will then want forget about nice times
  887.          of packing (actually, they aren't so much different, because
  888.          machine used for testing was only 286/16Mhz LAPTOP).
  889.  
  890.                  Then personal/logical scale is:
  891.  
  892.                          ARJ (dependent from switches)
  893.                          LHA
  894.                          ZIP
  895.                          all others ready for drop out
  896.  
  897.  .DD.
  898.  
  899.  -----------------------------------------------------------------------------
  900.  CLIPBBS 1-06                   Page 16                   4 Mar 1991
  901.  
  902.  
  903.               Will Clipper expand to graphics environment?
  904.                                   alias
  905.                            Theoretical article
  906.                                   about
  907.                    FUTURE OF CLIPPER and NANTUCKET :-)
  908.  
  909.  
  910.  
  911.  What's a Clipper at this moment? I'm sure about one thing, at this
  912.  moment it's character based compiler with many difficulities of
  913.  implementing it inside of graphics based environment. With this is
  914.  connected also question when we will see a Clipper for Window....
  915.  
  916.  Clipper needs great change to be able fulfill all needs for
  917.  graphically oriented application of this time. Windows and any
  918.  graphics based environment is fixed to fact, that application or
  919.  compiler used for creating or programs are enough fast in moment of
  920.  displaying. If not, user is getting complete nice system with not
  921.  nice background of slow speed.
  922.  
  923.  Way of clippering at this moment is single process task. Windows is
  924.  event driven system with many facilities of multitasking system,
  925.  including DDE (dynamic data exchange) system.
  926.  
  927.  Nantucket then has two ways to choose:
  928.  
  929.          -       slowly adapt Clipper to new environment with producting
  930.          several changed versions until it will fit into needs of
  931.          Windows programming
  932.  
  933.          -       drastically change Clipper to something different and
  934.          incompatible in many cases with original xBASE language ideas.
  935.  
  936.  Problem of second alternative is, that it will leave many programmers
  937.  in "old" fashioned Clipper which can come into dead end. Will not be
  938.  changed and upgraded because will be here new "windows Clipper" with
  939.  main interest of Nantucket (passing perfect inside of WINDOWS hysteria
  940.  coming into world). In this drasctic case will come something like is
  941.  coming in case of S87 -> 5.0x jump. Many old programmers have problems
  942.  to recognize significant changes and additions of new Clipper and are
  943.  not able to use it in all directions. But it's still very small and non
  944.  problematic at all. What can come in case of Windows Clipper will be
  945.  creating of new compiler. In case of Nantucket which seems to jumping
  946.  from left to right with difficulties to maintain correctly and enough
  947.  fast world market it can mean only one. If step to create Windows
  948.  Clipper will come into reality, Nantucket will have to drop idea of
  949.  Clipper in old fashion and create new language, or replace completely
  950.  philosophy of market.
  951.  
  952.  Of course is here possibility to follow first slow way, which can be
  953.  more easy for Nantucket, but it can only mean loosing of Windows market
  954.  whcih is coming to be bigger and bigger and probably loose head with
  955.  competition with Borland (which had always better market politic than
  956.  Nantucket, at least in other continents than America.)
  957.  
  958.  From windows Clipper and windows market let make step out to take a
  959.  CLIPBBS 1-06                   Page 17                   4 Mar 1991
  960.  
  961.  
  962.  look to actual state of Clipper.
  963.  
  964.  First, i have to say, that it's mine personal view and i'm living in
  965.  EUROPE and not in U.S. where will probably everything looks different
  966.  and probably much better.
  967.  
  968.  Nantucket, producing one from most complex xBASE compatible programming
  969.  systems Clipper made a big step with not enough saved back. Clipper 5.0
  970.  was a crash of many possible customers and dealers because was
  971.  unbelievable buggy. Game with dates of releasing 5.01 (which actually
  972.  should be 5.1 because it's not only bugfix) and final decision NEVER
  973.  telling any date, NEVER telling any bug reports means lost of trust
  974.  from many sides. Lost of money in case of firms were trusting in 5.0
  975.  version can be sometime very big number.
  976.  
  977.  Promises of informing registered users about "something" from acting in
  978.  Nantucket are also left. Only one what i got as registered user was
  979.  Clipper 5.01, but not ANY informations. It's matter of local supporters
  980.  and dealers of course, but then it's also in hands of Nantucket itself.
  981.  
  982.  Is possible also say, that Clipper itself is fulfilled with not filled
  983.  promises. From biggest ones is easy to point out:
  984.          NEVER distributed dBASE index drivers
  985.          NEVER working incremental linking of RTLINK
  986.          NEVER published Clipper Programmers Interface
  987.          NEVER published Replaceable Database Drivers information,
  988.                  nor any existing drivers
  989.          STILL problematic use of Clipper programs in small
  990.                  memory of PCs
  991.  
  992.  Still repeating stories with bugs (so called ANOMALIES by Nantucket)
  993.  which are invented by many parties, but for sure not Nantucket is also
  994.  not giving good image to Clipper. Especially if some problems are
  995.  staying permanently from version to version which should be a bugfix.
  996.  
  997.  For European users is GOOD technical support of Nantucket something as
  998.  midnight dream. FAXES or telephones to Nantucket offices are mostly
  999.  unaswered or without ANY professional answer when they are little bit
  1000.  difficulty than reading of standard manuals. Possibility to go to
  1001.  COMPUSERVE is in Europe very hard and when, then is very expensive.
  1002.  Therefore putting attention into Compuserve from side of Nantucket is
  1003.  maybe good for U.S., but not for any other parts of world. Very good
  1004.  idea of setting up Nantucket Bulletin Board in England is slowly going
  1005.  to nowhere because staff of Nantucket is not able to decide WHO and HOW
  1006.  OFTEN has to work on this Bulletin Board and Clipper World (that's name
  1007.  of this BBS) is dying and staying on dead point.
  1008.  
  1009.  With all this oscillating background will be very difficult to come
  1010.  into professional WINDOWS market. Especially because will be needed
  1011.  probably to get second, drastic way.
  1012.  
  1013.  .DD.
  1014.  
  1015.  -----------------------------------------------------------------------------
  1016.  CLIPBBS 1-06                   Page 18                   4 Mar 1991
  1017.  
  1018.  
  1019.  =============================================================================
  1020.                                    SOFTWARE
  1021.  =============================================================================
  1022.  
  1023.  
  1024.              TIPS&TRICKS - how to found largest string in array
  1025.  
  1026.  In some of mine function for displaying MENU on screen (generic function)
  1027.  was coming a need to count SIZE of window for MENU, because text of every
  1028.  field can come in different length.
  1029.  
  1030.  For this sample, we have to say:
  1031.  
  1032.      INPU is    aMenu - array of texts for MENU function. Something like:
  1033.  
  1034.          aMenu := {"First","Second","Third","Latest one"}
  1035.  
  1036.  And then, it's simple to use aeval() function for get what we need.
  1037.  
  1038.      local nMaxLen := 0
  1039.      aeval(aMenu, {|n| nMaxLen:=max(len(xx),nMaxLen)} )
  1040.  
  1041.  And that's all. Some explanations:
  1042.  
  1043.      aeval(aMenu, {|n| nMaxLen:=max(len(n) ,nMaxLen)} )
  1044.              │      │               └──────┬───────┘
  1045.              │      │                      └── getting maximal from
  1046.              │      │                          two values and assigning
  1047.              │      │                          it as new maximal length
  1048.              │      └──────── It's needed for aeval() function, every
  1049.              │               time it's getting value of one portion of
  1050.              │               array
  1051.              └────── aeval() function is scanning WHOLE array, field
  1052.                      by field and is using codeblock defined as second
  1053.                      parameter
  1054.  
  1055.  -----------------------------------------------------------------------------
  1056.  
  1057.  
  1058.                    DANIEL.LIB - NEW version of DANIEL.RMK
  1059.  
  1060.  After getting NANFOR.LIB got inspired with their .RMK file and made totally
  1061.  new one for DANIEL.LIB. Old one is of course working still, but this one is
  1062.  far better. Feel free to get it as inspiration also, because it's nice
  1063.  piece of easy to change .RMK file.
  1064.  
  1065.  I'm absolutely sure, that using of RMAKE is someting that is staying at
  1066.  lowest level of interest to upgrade in knowledges and in praxis in most of
  1067.  programmers minds. Mine opinion is different and sometime i'm getting mad
  1068.  to make some upgrades of my using of .RMK files. This is one from them.
  1069.  
  1070.  <----------------------------------FILE BEGINS HERE------------------------>
  1071.  
  1072.  /***************************************************************************
  1073.   * $Author$
  1074.   * $Date$
  1075.  CLIPBBS 1-06                   Page 19                   4 Mar 1991
  1076.  
  1077.  
  1078.   * $Revision$
  1079.   * $RCSfile$
  1080.   * $Source$
  1081.   * $State$
  1082.   * $Locker$
  1083.   *
  1084.   * $Log$
  1085.   *
  1086.   ***************************************************************************/
  1087.  
  1088.  
  1089.  //  ------------------------------------------------------------------------
  1090.  //  PATH macros for compiling and/or linking. They MUST be set correctly
  1091.  //  ------------------------------------------------------------------------
  1092.  
  1093.  l   =   \LIB
  1094.  o   =   \SOURCE\DANIEL\OBJ
  1095.  s   =   \SOURCE\DANIEL
  1096.  c5  =   C:\CL5\BIN
  1097.  tc  =   C:\TC\BIN
  1098.  mc  =   C:\MSC\BIN
  1099.  ma  =   C:\MASM
  1100.  ta  =   C:\TASM
  1101.  ex  =   \SOURCE\DANIEL
  1102.  
  1103.  
  1104.  //  ------------------------------------------------------------------------
  1105.  //  Killing working giles used for manipulation or checkings
  1106.  //  ------------------------------------------------------------------------
  1107.  
  1108.  wrk =   DANIEL.RSP
  1109.  
  1110.  !iffile $(s)\$(wrk)
  1111.      #! del $(s)\$(wrk)
  1112.  !endif
  1113.  
  1114.  //  ------------------------------------------------------------------------
  1115.  //  Now some internal definition dependent from DEFs from outside
  1116.  //  ------------------------------------------------------------------------
  1117.  
  1118.  //  DEBUG is defined in case of request for DEBUGGING capable version
  1119.  !ifdef DEBUG
  1120.      SW  =   /W/N/M/B
  1121.      SW1 =   /DDEBUG
  1122.      !stdout "DANIEL.RMK     -   DEBUGGER version generated"
  1123.  !else
  1124.      SW  =   /W/N/M/L
  1125.      !stdout "DANIEL.RMK     -   NOTDEBUG version generated"
  1126.  !endif
  1127.  
  1128.  //  ------------------------------------------------------------------------
  1129.  //  And some defintions which are changing internal parameters
  1130.  //  ------------------------------------------------------------------------
  1131.  
  1132.  PLL     =   /PLL:FULLBASE
  1133.  
  1134.  CLIPBBS 1-06                   Page 20                   4 Mar 1991
  1135.  
  1136.  
  1137.  //  ------------------------------------------------------------------------
  1138.  //  apply above defined paths into internal RMAKE defintions for DEFAULTS
  1139.  //  default will be used when will not be specified directly. Can save some
  1140.  //  time and work with filling all informations
  1141.  //  ------------------------------------------------------------------------
  1142.  
  1143.  makepath[.OBJ] := $(o)
  1144.  makepath[.PRG] := $(s)
  1145.  makepath[.EXE] := $(ex)
  1146.  makepath[.LIB] := $(l)
  1147.  makepath[.CH]  := $(s)
  1148.  makepath[.INC] := $(s)
  1149.  makepath[.C]   := $(s)
  1150.  
  1151.  
  1152.  //  ------------------------------------------------------------------------
  1153.  //  inference rules for TC files
  1154.  //  WARNING $(tc)... TWO lines are actually ONE line. For space in magazine
  1155.  //                   was divided in two. BEFORE USING PUT BACK!!!!!!
  1156.  //  ------------------------------------------------------------------------
  1157.  .c.obj:
  1158.      $(tc)\TCC -I\TC\INCLUDE -L\TC\LIB -C -d -ml -wmlt -K -G -O
  1159.              -Z -k- -c -o$(o)\$* $(s)\$*.C
  1160.      echo -+$(o)\$* & >> $(s)\$(wrk)
  1161.  
  1162.  //  ------------------------------------------------------------------------
  1163.  //  inference rules for .PRG files
  1164.  //  ------------------------------------------------------------------------
  1165.  .prg.obj:
  1166.      $(c5)\clipper.exe $(s)\$* $(sw) $(sw1) /o$(o)\$*
  1167.      echo -+$(o)\$* & >> $(s)\$(wrk)
  1168.  
  1169.  
  1170.  //  ------------------------------------------------------------------------
  1171.  //  inference rules for library from RSP
  1172.  //  ------------------------------------------------------------------------
  1173.  .RSP.LIB:
  1174.      echo ,$(l)\DANIEL.LST; >> $(s)\$(wrk)
  1175.      if not exist $(l)\DANIEL.LIB LIB $(l)\DANIEL.LIB
  1176.      LIB.EXE $(l)\DANIEL.LIB @$(s)\$(wrk)
  1177.      DEL $(l)\DANIEL.BAK
  1178.  
  1179.  //  ------------------------------------------------------------------------
  1180.  //  check existency of CLIPPER.EXE and then dependece of CLIPPER files
  1181.  //  ------------------------------------------------------------------------
  1182.  
  1183.  !iffile $(c5)\CLIPPER.EXE
  1184.  
  1185.  dd_lib1.obj :   dd_lib1.prg  dprinter.ch daniel.ch
  1186.  dd_lib2.obj :   dd_lib2.prg  dprinter.ch daniel.ch
  1187.  dd_lib3.obj :   dd_lib3.prg  dprinter.ch daniel.ch
  1188.  dd_lib4.obj :   dd_lib4.prg  dprinter.ch daniel.ch
  1189.  dd_lib5.obj :   dd_lib5.prg  dprinter.ch daniel.ch
  1190.  dd_netw.obj :   dd_netw.prg  dprinter.ch daniel.ch
  1191.  configer.obj:   configer.prg dprinter.ch daniel.ch
  1192.  
  1193.  CLIPBBS 1-06                   Page 21                   4 Mar 1991
  1194.  
  1195.  
  1196.  !else
  1197.      //  clipper.exe doesn't exit
  1198.      !stderr "DANIEL.RMK error: CLIPPER.EXE file not found...."
  1199.  !endif
  1200.  
  1201.  //  ------------------------------------------------------------------------
  1202.  //  check existency of TCC.EXE and then dependece of C files
  1203.  //  ------------------------------------------------------------------------
  1204.  
  1205.  !iffile $(tc)\TCC.EXE
  1206.  
  1207.  cleanup.obj :   cleanup.c
  1208.  faxlog.obj  :   faxlog.c
  1209.  isprinte.obj:   isprinte.c
  1210.  screen.obj  :   screen.c
  1211.  wptext.obj  :   wptext.c
  1212.  wputil.obj  :   wputil.c
  1213.  
  1214.  !else
  1215.      //  TCC.EXE doesn't exist
  1216.      !stderr "DANIEL.RMK error: TCC.EXE file not found....."
  1217.  !endif
  1218.  
  1219.  //  ------------------------------------------------------------------------
  1220.  //  final dependence of library
  1221.  //  ------------------------------------------------------------------------
  1222.  
  1223.  DANIEL.LIB  :   $(wrk)
  1224.  
  1225.  
  1226.   <------------------------------END OF FILE-------------------------------->
  1227.  
  1228.  .DD.
  1229.  
  1230.  -----------------------------------------------------------------------------
  1231.  CLIPBBS 1-06                   Page 22                   4 Mar 1991
  1232.  
  1233.  
  1234.  =============================================================================
  1235.                                    ANOMALIES
  1236.  =============================================================================
  1237.  
  1238.  
  1239.                       ANOMALIES and their comments
  1240.  
  1241.  This part of Clipper BBS Magazine is dedicated to all discovered 
  1242.  anomalies and comments about them in Clipper products. Because 
  1243.  Nantucket is still unable to give own bug and anomalies reports (as 
  1244.  actually did in past with Summer 87 version) is very handy to have 
  1245.  results of many investigations done on many user places. I'm also
  1246.  doing my own investigatings, because i'm always very good when someting 
  1247.  has hidden problems. Everything what i buy will first show all problems 
  1248.  and then all normal things. This amazing part of my live is sometime 
  1249.  making me crazy, but for testing of programs it's great <grin>.
  1250.  
  1251.  Daniel
  1252.  
  1253.  
  1254.  
  1255.  -----------------------------------------------------------------------------
  1256.  
  1257.  
  1258.                        Clipper Debugger anomalies
  1259.  
  1260.  CLD is now great program and i'm really using it every day.  Previous
  1261.  CLD was unusable because of memory problems of CLIPPER (no one my
  1262.  application was able to fit in memory together with CLD.EXE nor
  1263.  CLD.LIB). There is lot of improvements in this new debugger, but of
  1264.  course there are same nonlogical and non working things:
  1265.  
  1266.       Totally new HELP system for CLD is enough descriptive, but not
  1267.       CONTENTS SENSITIVE. When one will press F1 (Help key), then will
  1268.       get first page of help and MUST scan through all of them to page
  1269.       which need. In case of small memory left is this process VERY slow
  1270.       (because of lot of disc swaps).
  1271.  
  1272.       Don't try to use HELP system when you are editing (for example)
  1273.       colour codes or path string for your source files.  If one will
  1274.       press F1 at this moment,then will get some graphics codes which
  1275.       are equal to code of F1, but will not get help. Somebody who made
  1276.       it forget that F1 is help and not a valid key for editing
  1277.       characters...
  1278.  
  1279.       One must still be carefully when specifying command line options
  1280.       for SPLIT and EGA/VGA screen.  CLD /S/50 and CLD /50/S is really
  1281.       not the same for CLD..  Just use spaces between them and then it's
  1282.       working well (CLD /S /50 is the same as CLD /50 /S)
  1283.  
  1284.       Be aware of using ? row() or ? col(). Both of them will return not
  1285.       value from YOUR program, but value from inside of Debugger.
  1286.       Debugging a program and needs to know values of cursor position is
  1287.       at this moment totally impossible.
  1288.  
  1289.       Some from people using CLD will report - When i pressed F8, then
  1290.  CLIPBBS 1-06                   Page 23                   4 Mar 1991
  1291.  
  1292.  
  1293.       CLD didn't make steps through my procedure, he just did action for
  1294.       F10 (execute procedure). Be aware at this moment if your .OBJ
  1295.       files ALL had specified /B switch for CLIPPER command line. If
  1296.       not, then CLD will not warning you of course, will just step
  1297.       through. You can then be surprised and thinking what is wrong!
  1298.  
  1299.       There is IMPOSSIBILITY to debugging a code which is using #include
  1300.       statements for include PART of CODE (not only #define and other
  1301.       definitions). Because Clipper is allowing you to use #include for
  1302.       normal part of program (with all commands...), then i'm expecting
  1303.       that will be able to correct do debugging of this includes.
  1304.       ABSOLUTELY not, when one will do this, will have a debugger step
  1305.       cursor somewhere in .PRG file, but on wrong place of course,
  1306.       because of mixup of line numbers. Small example of this:
  1307.  
  1308.  
  1309.       Program.prg
  1310.       1    function Main()
  1311.       2         #include "small.inc"
  1312.       3         ? 'Hello this is NOT a first line of program'
  1313.       4         ? 'and there will be a RETURN coming'
  1314.       5    RETURN NIL
  1315.  
  1316.       File  SMALL.INC
  1317.       1         ? 'This is a first line of program of course'
  1318.       2         ? '-----------------------------------------'
  1319.  
  1320.       Of course, after compiling here is another program:
  1321.       1    function Main()
  1322.       2         ? 'THis is a first line of program of course'
  1323.       3         ? '-----------------------------------------'
  1324.       4         ? 'Hello this is NOT a first line of program'
  1325.       5         ? 'and there will be a RETURN coming'
  1326.       6    RETURN NIL
  1327.  
  1328.       CLD will start a debugging and display PROGRAM.PRG file on screen
  1329.       with debugging step cursor on line "2" of PROGRAM.PRG file.
  1330.       Executed instruction but will be a instruction from line "1" of
  1331.       SMALL.INC. I'm so sure, that this stupid acting is possible to
  1332.       eliminate just by better recognizing of includes and modifying
  1333.       screen display routines of source code.
  1334.  
  1335.       There is of course EASY solving for this - NEVER use #include for
  1336.       part of your code. All your code you can easy put to separate .OBJ
  1337.       files and call them like function.  Then will CLD working GREAT.
  1338.  
  1339.       Possibility to use Alt-D function for stop program in working is
  1340.       limited. If there will be for example:
  1341.  
  1342.            WHILE rlock()
  1343.            ENDDO          (of course, this is a mistake. But i made it
  1344.                           few time, just forgotten "!" negation)
  1345.  
  1346.       Then one will NOT be able to stop program and see what is working.
  1347.       When i had this problem i did lot of looking what is wrong and
  1348.       after LONG period i found that there is missing one negation for
  1349.  CLIPBBS 1-06                   Page 24                   4 Mar 1991
  1350.  
  1351.  
  1352.       condition.
  1353.  
  1354.  .DD.
  1355.  
  1356.  -----------------------------------------------------------------------------
  1357.  
  1358.  
  1359.                               INCONSISTENCY
  1360.  
  1361.  One funny inconsistency of program language is in new Clipper 5.01
  1362.  version. I found it when i was thinking:
  1363.  
  1364.       OK, there are  @ SAY .. COLOUR,  @ .. TO .. COLOUR command
  1365.       (something new in 5.01, extension of @ command). Then there OF
  1366.       COURSE is @ .. CLEAR .. COLOUR.  GOTCHA, there is NOT @CLEAR with
  1367.       COLOUR parameter. Maybe somebody is thinking that CLEAR is without
  1368.       colour, but then is wrong.
  1369.  
  1370.  .DD.
  1371.  
  1372.  -----------------------------------------------------------------------------
  1373.  
  1374.  
  1375.                  New RTLINK version, INCREMENTAL LINKING
  1376.  
  1377.  Another expectation which i had when new Clipper 5.01 was coming -
  1378.  incremental linking in new version of Clipper will work. Truth is again
  1379.  different.  DO NOT use incremental linking. It's working successfully
  1380.  only for few first links and then programmer will receive nice set of
  1381.  error from program.  Probably will then start looking to errors in own
  1382.  program, but reality is - incremental linking is NOT working.
  1383.  
  1384.  First, second and sometime third link is WITHOUT problems, but after
  1385.  this you can receive errors of this kind:
  1386.  
  1387.       Syntax error: +
  1388.            Be sure, that on your program line where report is
  1389.            reported doesn't exist a "+" operation
  1390.       Syntax error
  1391.            Just funniest error, because it's SYNTAX error on
  1392.            compiled and linked code. Maybe there is processor of
  1393.            your PC reporting non existed function....
  1394.       Cannot create overlay file: !^%#@(*
  1395.            Really, i cannot reproduce file name reported by
  1396.            overlay manager, because this magazine will not
  1397.            probably have all control and graphical symbols which
  1398.            one can get in IBM PC environment.
  1399.  
  1400.  All this errors you will get in part of code which was a subject of
  1401.  changes, everything other (not changed) is still working pretty
  1402.  perfect.
  1403.  
  1404.  FAX which i then sent to Nantucket, together with uploads of these
  1405.  error reports to Nantucket special message area on CLIPPER WORLD BBS
  1406.  are WITHOUT answers.
  1407.  
  1408.  CLIPBBS 1-06                   Page 25                   4 Mar 1991
  1409.  
  1410.  
  1411.  FAX to Pocket Soft Inc., authors of RTLINK, is with answer:
  1412.       RTLINK version shipped with Clipper 5.01 is working with
  1413.       INCREMENTAL linking without problems. It passed our and Nantucket
  1414.       test suites. If you have some problems, please contact
  1415.       Nantucket.....
  1416.  
  1417.  .DD.
  1418.  
  1419.  -----------------------------------------------------------------------------
  1420.  CLIPBBS 1-06                   Page 26                   4 Mar 1991
  1421.  
  1422.  
  1423.  =============================================================================
  1424.                                    ECHODUMP
  1425.  =============================================================================
  1426.  
  1427.  
  1428.                           CONFERENCE DUMP part (5)
  1429.  
  1430.  Subj: NTX Structure                  Prvt: N          Read: N
  1431.  
  1432.  I think Rick Spence's book on Clipper 5.0 has description of
  1433.  NTX file structure and others used in the Clipper environment.
  1434.  
  1435.  Subj: OBJECT VISION                  Prvt: N          Read: N
  1436.  
  1437.  Borland has released a new toy called "Object Vision".
  1438.  Has anyone out there used this product?
  1439.  Looks real interesting in the advertisements.
  1440.  
  1441.  Subj: PKLITE/Blinker?                Prvt: N          Read: N
  1442.  
  1443.  very interesting.  Had assumed Lite e.a. would not work with overlayed
  1444.  programs at all.  Do you have any experience using it with Blinker?
  1445.  
  1446.  Subj: PKLITE/BLINKER?                Prvt: N          Read: N
  1447.  
  1448.     I could be wrong, but strictly speaking from my shareware copy of
  1449.  the PKLITE program, it advises not to compress overlayed .EXE-s ...
  1450.  Having used it on programs not utilizing overlays say about 320K, I
  1451.  have reduced sizes down to say about 125-130K ... It's neat . One
  1452.  thing one must remember is that there is no reduction in memory used
  1453.  size form the original program . Say if it was 450K before, it will
  1454.  still be 450K even though it has been compressed. However, I can't state
  1455.  what the commercial version is capable of < least not yet > ...
  1456.  
  1457.  Subj: PKLITE/Blinker?                Prvt: N          Read: N
  1458.  
  1459.          I principally use Warplink, with Tlink for short things and
  1460.  in development cycles, though Warplink seems to be taking over that as
  1461.  well.  I have played with Blinker, but I prefer the MSLink-style of
  1462.  linker invocation; hence Warplink.  I can't say whether Pklite will
  1463.  work or not with Blinker, but I heard it will.  Apparently, the issue
  1464.  has to do with external vs. internal overlays.  I believe I saw a
  1465.  message thread to that effect either on this Clipper net or one of
  1466.  the others.  BTW, note that the issue of linker speed is irrelevant
  1467.  when using incremental linking.  When relinking incrementally the
  1468.  link time is one second or so.  In a large program with complex
  1469.  overlaying done internally Pklite is the longest part of cycle, so
  1470.  save it for release versions.
  1471.  
  1472.  Subj: Randomness                     Prvt: N          Read: N
  1473.  
  1474.  Is it my imagination or does Clipper not have a random number function?
  1475.  
  1476.  All I could find in the manual is a program to maipulate the time
  1477.  function to simulate a random number generator.  If Load-us and the
  1478.  ("Out to")-C programs can do it, why can't dBase or Clipper without
  1479.  CLIPBBS 1-06                   Page 27                   4 Mar 1991
  1480.  
  1481.  
  1482.  all the contortionism?
  1483.  
  1484.  Subj: Randomness                     Prvt: N          Read: N
  1485.  
  1486.  Standard Clipper just don't have a Random() function.  Some add-on libs
  1487.  does thou, eg. FUNCky.
  1488.  
  1489.  -----------------------------------------------------------------------------
  1490.  CLIPBBS 1-06                   Page 28                   4 Mar 1991
  1491.  
  1492.  
  1493.  =============================================================================
  1494.                                   CLIPPER NET
  1495.  =============================================================================
  1496.  
  1497.  
  1498.  
  1499.  Following is COMPLETE list of all published file descriptions in Clipper
  1500.  BBS magazine in previous numbers. Purpose of this index list is to allow
  1501.  anybody find needed file descriptions in growing number of described files.
  1502.  Short description after name will give first possible close image about
  1503.  file. Number enclosed in "[]" will mean number of Clipper BBS magazine.
  1504.  
  1505.  ┌─────────────┬────┬────────────────────────────────────────────────┬──────┐
  1506.  │FileName     │Src │Description                                     │Where │
  1507.  ├─────────────┼────┼────────────────────────────────────────────────┼──────┤
  1508.  │ACH2TB.ARJ   │Cln │Convert ACHOICE to TBROWSE                      │[1-05]│
  1509.  │ADHOC302.ARJ │Cln │Summer 87 inteligent report program             │[1-04]│
  1510.  │CL5103.ARJ   │Cln │Report of 5.01 anomaly number 3                 │[1-04]│
  1511.  │CL5REP6.ARJ  │Cln │5.01 replacement of REPORT command              │[1-04]│
  1512.  │CLIP110.ARJ  │Cln │Clipper Documentor program                      │[1-05]│
  1513.  │CLIPLINK.ARJ │Cbs │Complete text of R.Donnay about linkers         │[1-04]│
  1514.  │CLIPSQL.ARJ  │Cln │Demo of complete SQL library for CLipper        │[1-05]│
  1515.  │CLPFON.ARJ   │Cln │Set of fonts for EXPAND.LIB from author         │[1-03]│
  1516.  │COND.ARJ     │Cln │Builder of conditional indexes like SUBNTX      │[1-03]│
  1517.  │DBSCN2.ARJ   │Cln │<sorry, forget, will add in next number, hope>  │[1-05]│
  1518.  │HGLASS.ZIP   │Cln │Hour glass for indication of index progression  │[1-04]│
  1519.  │INDXSL.ARJ   │Cln │User Fields selection builder for index generate│[1-03]│
  1520.  │IOBASYS9.ARJ │Cln │Demo of S87 library and calling Clipper from C  │[1-03]│
  1521.  │MK30.ARJ     │Cln │Mouse library demo version                      │[1-03]│
  1522.  │MOVEGETS.ARJ │Cln │GETSYS change for moving between gets via VALID │[1-03]│
  1523.  │NOTATION.ARJ │Cln │Complete text of article about hungarian notat. │[1-04]│
  1524.  │PACKUP.ARJ   │Cln │ASM source of PACK/UNPACK replacement SCRSAVE.. │[1-04]│
  1525.  │POPUPCAL.ARJ │Cln │Popup calender                                  │[1-05]│
  1526.  │READPW.ARJ   │Cln │GETSYS change for password invisible reader     │[1-03]│
  1527.  │SCRSAVE.ARJ  │Cln │Screen AntiBurning utility (inactivity snake)   │[1-05]│
  1528.  │SYMBOL.ARJ   │Cln │Dumper of symbol tables of Summer87 .EXE        │[1-03]│
  1529.  │VSIX711.ARJ  │Cln │Vernon Six Clipper utilities and library        │[1-05]│
  1530.  └─────────────┴────┴────────────────────────────────────────────────┴──────┘
  1531.  
  1532.  Src can be:
  1533.      Cln     File is accesible on ClipperNet
  1534.      Cbs     File is accesible in HQ BBS of CLipper BBS Magazine
  1535.  
  1536.  
  1537.  -----------------------------------------------------------------------------
  1538.  
  1539.  
  1540.                          Routing-Plan for ClipperNet
  1541.  
  1542.  Followin text is routing schema of ClipperNet from last friday. Someone
  1543.  interested in connecting to ClipperNet, find your nearest RC or NC node
  1544.  and ask for information. Someone for downloading files from ClipperNet
  1545.  advertised here, find closest BBS, take a look into FIDONET NODELIST
  1546.  (all number are FIDONET NODENUMBERS..
  1547.  
  1548.  
  1549.  CLIPBBS 1-06                   Page 29                   4 Mar 1991
  1550.  
  1551.  
  1552.         CLN-HQ  2:240/100 Clipper WorkShop BBS (Hamburg - FRG)
  1553.         RC 24       |
  1554.                     |
  1555.         RC 23       |234/64 TugBoat BBS (Glumsoe - DK)
  1556.                     |    |
  1557.                     |    |231/62 TBSM's Opus (Kolding - DK)
  1558.                     |
  1559.                     |240/1 Ramos II (Hannover - FRG)
  1560.         NC 240      |240/102 MuM BBS (Hamburg - FRG)
  1561.                     |240/600 IGEPOS Mailbox System (Lage - FRG)
  1562.                     |241/2004 NordSee BBS (Leer - FRG)
  1563.                     |    |
  1564.                     |    |241/5302 Terrania City (Bonn - FRG)
  1565.                     |
  1566.                     |241/2103 H.C.C. (Hamburg - FRG)
  1567.                     |
  1568.                     |241/5609 BLM (Wermelskirchen - FRG)
  1569.                     |    |
  1570.                     |    |241/4008 Stone's Box (Haan - FRG)
  1571.                     |    |    |
  1572.                     |    |    |241/5603 Funboard (Velbert - FRG)
  1573.                     |    |         |
  1574.                     |    |         |241/4512 BS-1 (Bad Salzuflen - FRG)
  1575.                     |    |              |
  1576.                     |    |              |241/4511 MICOS BS (Bad Salzuflen-FRG)
  1577.                     |    |                  |
  1578.                     |    |                  |241/4501 Life-Box(Osnabrueck-FRG)
  1579.                     |    |
  1580.                     |    |241/5303 NEPTUN Box (Bonn - FRG)
  1581.                     |    |    |
  1582.                     |    |    |243/93 Piano-Bar (Urbar - FRG)
  1583.                     |    |
  1584.                     |    |241/5608 Pit's BBS (Wermelskirchen - FRG)
  1585.                     |
  1586.         NC 241      |241/7605 Baden Area (Offenburg - FRG)
  1587.                     |    |
  1588.                     |    |241/7000 Popey-Box (Donaueschingen - FRG)
  1589.                     |
  1590.                     |242/47 Dungeon of Despair (Aachen - FRG)
  1591.                     |
  1592.         NC 243      |243/29 Clipper Ship (Nieder Olm - FRG)
  1593.                     |    |
  1594.                     |    |247/31 Tritech BBS (Seelzen - FRG)
  1595.                     |    |    |
  1596.                     |    |    |247/9 Wildbox (Heidelberg - FRG)
  1597.                     |    |         |
  1598.                     |    |         |247/1 Schawott-Host (Brensbach - FRG)
  1599.                     |    |
  1600.                     |    |249/29 Guenter's Mailbox (Mainz - FRG)
  1601.                     |
  1602.         NC 245      |245/60 Bonny's (Dortmund - FRG)
  1603.                     |    |
  1604.                     |    |241/4152 Quick!-Box (Meerbusch - FRG)
  1605.                     |    |    |
  1606.                     |    |    |242/92 Skyhigh Mailsystem (Krefeld - FRG)
  1607.                     |    |
  1608.  CLIPBBS 1-06                   Page 30                   4 Mar 1991
  1609.  
  1610.  
  1611.                     |    |245/9 MANNY'S BBS (Essen - FRG)
  1612.                     |    |    |
  1613.                     |    |    |245/102 WiInf_BBS (Essen - FRG)
  1614.                     |    |
  1615.                     |    |245/36 SoftStream (Dortmund - FRG)
  1616.                     |
  1617.         NC 246      |246/15 MagicBox Munich (Muenchen - FRG)
  1618.                     |    |
  1619.                     |    |241/8007 Merlin BBS (Nuernberg - FRG)
  1620.                     |    |246/5 PERI-BBS (Kassel - FRG)
  1621.                     |    |246/10 Beta-System (Muenchen - FRG)
  1622.                     |    |246/26 AGS-Box (Leutkirch - FRG)
  1623.                     |    |246/32 Aischgrund Mailboxsystem (Gerhardshofen-FRG)
  1624.                     |         |
  1625.                     |         |246/12 AlphaSoft Network (Fuerth/Stadeln - FRG)
  1626.                     |
  1627.         RC 28       |285/610 Lobster BBS (Schiedam - NL)
  1628.                     |    |
  1629.                     |    |285/402 AllTime Board (Koudekerke - NL)
  1630.                     |    |285/608 NETCONSULT BBS (Rotterdam - NL)
  1631.                     |    |500/223 HEKOM BBS (Harmelen - NL)
  1632.                     |    |    |
  1633.                     |    |    |283/314 KISS Software Support (Almelo - NL)
  1634.                     |    |
  1635.                     |    |500/236 Touch-One (Den Haag - NL)
  1636.                     |    |512/43  Flash BBS (Utrecht - NL)
  1637.                     |
  1638.         RC 29       |296/10 BBS D.C.V.V. (Maaseik - B)
  1639.                     |    |
  1640.         RC 20       |    |201/254 Clipper(Sweden) BBS (Vallingby - S)
  1641.                     |    |    |
  1642.                     |    |    |200/306 Lanthandelen (Kalmar - S)
  1643.                     |    |
  1644.                     |    |294/5 CIS BBS (Antwerpen - B)
  1645.                     |
  1646.         RC 30       |302/801 Gepard's Oracle (Zuerich - CH)
  1647.                     |    |
  1648.                     |    |302/807 SENECA (Zuerich - CH)
  1649.                     |    |    |
  1650.                     |    |    |302/804 Triton (Zuerich - CH)
  1651.                     |    |
  1652.         RC 32       |    |321/100 Cyrielle (Montargis - F)
  1653.                     |    |
  1654.         RC 33       |    |331/110 DB-Line (Biandronno - I)
  1655.                     |
  1656.         RC 31       |313/9 EuroSoft Net 2 (Wien - A)
  1657.                     |
  1658.         RC 34       |341/25 Clipper U.C.P. (Majadahonda - E)
  1659.                          |
  1660.                          |341/8 AlpaSoft (Madrid - E)
  1661.                          |341/14 Rafa_STD-1 (Madrid - E)
  1662.  
  1663.  -----------------------------------------------------------------------------
  1664.  
  1665.  
  1666.                             CLN - SOUND.ARJ
  1667.  CLIPBBS 1-06                   Page 31                   4 Mar 1991
  1668.  
  1669.  
  1670.  File Name:      SOUND.ARJ
  1671.  Other Names:
  1672.  
  1673.  File Size:      2,336 bytes
  1674.  File Contents:
  1675.                  SOUND.CH           1447
  1676.                  SOUND.TXT          1762
  1677.                  SOUND.PRG           411
  1678.  
  1679.  Sound function using TONE() function for playing a melody. Point of this
  1680.  function is, that it's getting parameter as array of arrays contains in
  1681.  every field tone and length of piece of melody.
  1682.  
  1683.  In SOUND.CH file are defined some particular notes and two sample sounds
  1684.  for your programs. It's also nice way how to implement note names in
  1685.  clipper programs anyway.
  1686.  
  1687.  .DD.
  1688.  
  1689.  -----------------------------------------------------------------------------
  1690.  
  1691.  
  1692.                             CLN - TBWHL4.ARJ
  1693.  
  1694.  File Name:     TBWHL4.ARJ
  1695.  Other Names:
  1696.  
  1697.  File Size:      5,164 bytes
  1698.  File Contents:
  1699.                  NAMES.DBF          1458
  1700.                  READ.ME            1317
  1701.                  NAMES.NTX          2048
  1702.                  TBWHILE.PRG        7041
  1703.                  MAKEIT.BAT           49
  1704.  
  1705.  COMPUSERVER coming well commented function for WHILE browsing a database
  1706.  with Tbrowse objects. It's good as example how to handle own cases, because
  1707.  it contains complete sample with included database (.DBF).
  1708.  
  1709.  .DD.
  1710.  
  1711.  -----------------------------------------------------------------------------
  1712.  
  1713.  
  1714.                             ClipNet - NFDESC2.ARJ
  1715.  
  1716.  File Name:      NFDESC2.ARJ
  1717.  Other Names:
  1718.  
  1719.  File Size:      5,129 bytes
  1720.  File Contents:
  1721.                  NFDESC.TXT        12451
  1722.  
  1723.  NANFORUM library is one from greatest Clipper projects which i ever seen.
  1724.  It's great idea of sharing user supplied, test and used sources into one
  1725.  big library. It's managed by some CompuServe users to final state of
  1726.  CLIPBBS 1-06                   Page 32                   4 Mar 1991
  1727.  
  1728.  
  1729.  complete library with .NG documentation.
  1730.  
  1731.  First day when i looked into NANFORUM library i decided immediately take it
  1732.  inside of mine used libraries set. I can only reccomend to do this for you
  1733.  also. If want to take a look to list of functions in this library before
  1734.  taking over of complete needed library files, get this file, because .TXT
  1735.  inside is complete list of functions with descriptions.
  1736.  
  1737.  See also articles about NANFORUM in "SOFTWARE" section of magazine.
  1738.  
  1739.  .DD.
  1740.  
  1741.  -----------------------------------------------------------------------------
  1742.  
  1743.  
  1744.                             ClipNet - NFLIB2.ARJ
  1745.  
  1746.  File Name:      NFLIB2.ARJ
  1747.  Other Names:
  1748.  
  1749.  File Size:      167,730 bytes
  1750.  File Contents:
  1751.                  NANFOR.LIB       197161
  1752.                  FTINT86.CH         1250
  1753.                  FTMENUTO.CH        2329
  1754.                  FT_ACH2T.CH        4572
  1755.                  NANFOR.NG        333548
  1756.  
  1757.  THIS IS MAIN FILE NEEDED for NanForum library. Complete documenation (.NG
  1758.  file) and complete 5.01 library (NANFOR.LIB) with needed definition files
  1759.  (.CH files) are included. Don't worry about size, it's great and needed for
  1760.  everybody to save LOT of programming.
  1761.  
  1762.  See articles about NANFOR.LIB in this magazine!
  1763.  
  1764.  .DD.
  1765.  
  1766.  -----------------------------------------------------------------------------
  1767.  
  1768.  
  1769.                             ClipNet - NFSRC2.ARJ
  1770.  
  1771.  File Name:      NFSRC2.ARJ
  1772.  Other Names:
  1773.  
  1774.  File Size:      308,973
  1775.  File Contents:
  1776.          ADAPTER.ASM        3428     BYTENOT.PRG        2531
  1777.          AINT86.ASM         4453     BYTEOR.PRG         2659
  1778.          CHDIR.ASM          2021     BYTEXOR.PRG        2788
  1779.          DEFAULT.ASM        4535     CALENDAR.PRG       7395
  1780.          DIRFUNC.ASM        2971     CLRSEL.PRG        24956
  1781.          DISPA.ASM          4524     CNTRYSET.PRG       2403
  1782.          ENDCAP.ASM         6266     COM34.PRG          2687
  1783.          FLOPTST.ASM        9955     D2E.PRG            2453
  1784.          FLUSHCAP.ASM       4195     DATECNFG.PRG      11619
  1785.  CLIPBBS 1-06                   Page 33                   4 Mar 1991
  1786.  
  1787.  
  1788.          HANDCNT.ASM        6372     DAYOFYR.PRG        3939
  1789.          INP.ASM            3427     DAYTOBOW.PRG       2403
  1790.          ISPRINT.ASM        8548     DECTOBIN.PRG       1763
  1791.          KSPEED.ASM         6627     DFILE.PRG          6574
  1792.          LOGOUT.ASM         2719     DIR2DBF.PRG        4195
  1793.          MKDIR.ASM          2149     DISKFUNC.PRG       3349
  1794.          NOVDMP2.ASM        2844     DISPMSG.PRG        8113
  1795.          NOVPURGE.ASM       2219     DOSVER.PRG         2275
  1796.          NWTTS1.ASM         3555     E2D.PRG            1749
  1797.          NWTTS2.ASM         2788     EASTER.PRG         3683
  1798.          NWTTS3.ASM         3044     ELAPMIL.PRG        1635
  1799.          NWTTS4.ASM         2660     ELAPSED.PRG        4579
  1800.          NWTTS5.ASM         2532     ELTIME.PRG         2275
  1801.          ORIGIN.ASM         3299     EXIST.PRG          1837
  1802.          OUTP.ASM           4196     FIELD.PRG         11491
  1803.          PUTKEY.ASM        10595     FINDITH.PRG        3427
  1804.          REBOOT.ASM         2660     FIRSTDAY.PRG       1763
  1805.          RESTATT.ASM        6600     GCD.PRG            3043
  1806.          RMDIR.ASM          2149     HEX2DEC.PRG        1772
  1807.          SAVEATT.ASM        7908     INVCLR.PRG         2543
  1808.          SHADOW.ASM         9060     ISBIT.PRG          2787
  1809.          TMENU.ASM         38602     ISBITON.PRG        2019
  1810.          _WHEREIS.ASM      23526     ISSHARE.PRG        2403
  1811.          ALT.C              1507     LASTDAY.PRG        1891
  1812.          CAPLOCK.C          2019     LINKED.PRG         4963
  1813.          CINT86.C           8552     MADD.PRG           4451
  1814.          CTRL.C             1507     MENU1.PRG         20198
  1815.          DISPC.C           27601     MENUTO.PRG        12522
  1816.          FTTEXT.C          16982     METAPH.PRG        14691
  1817.          GETENVRN.C         5219     MILTIME.PRG        7523
  1818.          NUMLOCK.C          2275     MIN2DHM.PRG        1636
  1819.          PEEK.C             2147     MONTH.PRG          4195
  1820.          POKE.C             2275     MOUSE1.PRG        23032
  1821.          PROPER.C           3299     NETPV.PRG          3043
  1822.          PRTSCR.C           2019     NOOCCUR.PRG        2531
  1823.          SHIFT.C            1507     NTOW.PRG           4164
  1824.          STOD.C             1507     NWLSTAT.PRG        2219
  1825.          VIDEO1.C          11049     NWSEM.PRG         16077
  1826.          FTINT86.CH         1250     NWUID.PRG          3811
  1827.          FTMENUTO.CH        2329     PAGE.PRG           2531
  1828.          FT_ACH2T.CH        4572     PCHR.PRG           8435
  1829.          CINT86.H           1174     PEGS.PRG           8675
  1830.          DFKEY.H            5117     PENDING.PRG        4835
  1831.          FTTEXT.H           1410     PICKDAY.PRG        1763
  1832.          TMENU.INC          3746     POPADDER.PRG      45352
  1833.          MINTER.MAC         9931     PRTESC.PRG         2915
  1834.          AADING.PRG         4772     QTR.PRG            3939
  1835.          AAVG.PRG           2510     RAND1.PRG          2275
  1836.          ACCTADJ.PRG        3427     RESTSETS.PRG       1891
  1837.          ACCTMNTH.PRG       4579     ROUND.PRG          7267
  1838.          ACCTQTR.PRG        4579     SAVEARR.PRG        6774
  1839.          ACCTWEEK.PRG       3811     SAVESETS.PRG       2275
  1840.          ACCTYEAR.PRG       3299     SCANCODE.PRG       3171
  1841.          ACH2TB.PRG        27161     SCREGION.PRG       8705
  1842.          ADESSORT.PRG       2636     SETDATE.PRG        2787
  1843.          AEMAXLEN.PRG       3811     SETTIME.PRG        2915
  1844.  CLIPBBS 1-06                   Page 34                   4 Mar 1991
  1845.  
  1846.  
  1847.          AEMINLEN.PRG       3683     SINKEY.PRG         2787
  1848.          AMEDIAN.PRG        3913     SQZN.PRG           4030
  1849.          ANOMATCH.PRG       3127     SYSMEM.PRG         1930
  1850.          ANY2ANY.PRG        6698     TBWHILE.PRG       14947
  1851.          AREDIT.PRG        10932     TEMPFILE.PRG       3427
  1852.          ASUM.PRG           2769     VERTMENU.PRG       6207
  1853.          AT2.PRG            3555     VIDCUR.PRG         3965
  1854.          ATPROMPT.PRG      17385     VIDMODE.PRG        3043
  1855.          BITCLR.PRG         2915     WDA.PRG            2659
  1856.          BITSET.PRG         2787     WEEK.PRG           3939
  1857.          BITTEST.PRG        7779     WHEREIS.PRG        3939
  1858.          BLINK.PRG          2403     WORKDAYS.PRG       2787
  1859.          BYT2BIT.PRG        2609     WOY.PRG            5987
  1860.          BYT2HEX.PRG        2459     XBOX.PRG           8599
  1861.          BYTEAND.PRG        2787     YEAR.PRG           3171
  1862.          BYTENEG.PRG        2147     NANFOR.RMK        18351
  1863.  
  1864.  COMPLETE (real) complete sources of NANFORUM library available for everyone
  1865.  who wants to make ANY changes in sources. They are really free for sources.
  1866.  
  1867.  This files is absolutely no needed for to have NANFORUM library working
  1868.  (you need only file with .LIB !!), therefore take it only when you need it,
  1869.  or just want it.
  1870.  
  1871.  Finaly i was wondering if include complete list of files inside archive,
  1872.  but i found it useful for some cases.
  1873.  
  1874.  .DD.
  1875.  
  1876.  -----------------------------------------------------------------------------
  1877.  
  1878.  
  1879.                             ClipperNet - ACCESS.ARJ
  1880.  
  1881.  File Name:      ACCESS.ARJ
  1882.  Other Names:
  1883.  
  1884.  File Size:      411
  1885.  File Contents:
  1886.                  ACCESS.PRG         1198
  1887.  
  1888.  
  1889.  Source of TEST program for speed of Clipper. Very easy and showing only
  1890.  time needed for accessing variables in FOR cycles.
  1891.  
  1892.  .DD.
  1893.  
  1894.  -----------------------------------------------------------------------------
  1895.  
  1896.  
  1897.                             ClipperNet - ACHOO2.ARJ
  1898.  
  1899.  File Name:      ACHOO2.ARJ
  1900.  Other Names:
  1901.  
  1902.  File Size:      6,851 bytes
  1903.  CLIPBBS 1-06                   Page 35                   4 Mar 1991
  1904.  
  1905.  
  1906.  File Contents:
  1907.                  ACHOOS.PRG        21976
  1908.  
  1909.  ACHOICE "replacement" allowing combine achoice() features with direct GET,
  1910.  searching for whole menu line (not only one letter)...
  1911.  
  1912.  .DD.
  1913.  
  1914.  -----------------------------------------------------------------------------
  1915.  CLIPBBS 1-06                   Page 36                   4 Mar 1991
  1916.  
  1917.  
  1918.  =============================================================================
  1919.                                     CLIPBBS
  1920.  =============================================================================
  1921.  
  1922.  
  1923.                               CLIPBBS Distribution
  1924.    
  1925.    CLIPBBS is special magazine about CLIPPER and CLIPPERing (or about 
  1926.    another related problems and xBASE languages). This magazine is for
  1927.    free and articles aren't honored. Nobody can make a profit from the
  1928.    distribution of this magazine.
  1929.    
  1930.    CLIPBBS can be freely downloaded and uploaded to any BBS or any other
  1931.    public system without changes of original contents or number of files
  1932.    in original archive (kind of archive can be changed, but we are sup-
  1933.    porting ARJ archive because is best and smallest).
  1934.    If you are interested in CLIPBBS and would like to become a DISTRIBUTION
  1935.    site, contact publisher on 2:285/608@fidonet or 27:1331/4412@signet
  1936.    or just call to 31-10-4157141 (BBS, working 18:00->08:00, 2400bps) or
  1937.    voice to 31-10-4843870 in both cases asking for DANIEL (Docekal).
  1938.    
  1939.    Distribution sites:
  1940.    
  1941.    United Kingdom
  1942.        Welsh Wizard, SYSOP Dave Wall, phone 44-656-79477
  1943.    
  1944.    United States of America
  1945.        The Southern Clipper, SYSOP Jerry Pults, phone 1-405-789-2078
  1946.  
  1947.  -----------------------------------------------------------------------------
  1948.  CLIPBBS 1-06                   Page 37                   4 Mar 1991
  1949.  
  1950.  
  1951.                       How to write articles in CLIPBBS?
  1952.    
  1953.    
  1954.    Submission of articles to CLIPBBS is really easy:
  1955.      Maximum of 78 characters per line, as long or as short as you like
  1956.      ASCII text.
  1957.      Choose from the list of extension which most describes your text, or
  1958.      just name it .ART as ARTicle and send it to publisher or to any
  1959.      distribution site via modem to BBS or with mailer as file attach.
  1960.      Article will come automatically appear in the next free issue.
  1961.    
  1962.    Extensions are:
  1963.    
  1964.            Articles (anything)             .ART
  1965.            Software                        .SOF
  1966.            News                            .NEW
  1967.            Question and Answers            .Q&A
  1968.            ANOMALIES and their comments    .ANO
  1969.            Letters to editors              .LET
  1970.            Advertisement                   .ADV
  1971.            Wanted                          .WAN
  1972.            Comments                        .CMS
  1973.            DUMP from conferences           .DMP
  1974.            Clipper Net                     .CLN
  1975.            
  1976.    That's all at the moment, there will probably be changes later, as the
  1977.    magazine evolves. If you have any ideas for a new section of CLIPBBS,
  1978.    please tell us, or just write an article about it.
  1979.    
  1980.    Daniel, publisher
  1981.  
  1982.  -----------------------------------------------------------------------------
  1983.