home *** CD-ROM | disk | FTP | other *** search
/ Black Box 4 / BlackBox.cdr / clipper / clbbs107.arj / CLBBS107.TXT
Encoding:
Text File  |  1991-10-08  |  53.6 KB  |  1,305 lines

  1.                         ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░                      
  2.               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░             
  3.         ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░       
  4.      ░░░░░░░▓▓▓▓░░▓▓▓▓░░░░░▓▓▓▓░░░▓▓▓▓▓▓░░▓▓▓▓▓▓░░▓▓▓▓▓▓░░░▓▓▓▓░░░░░░░░░░░    
  5.    ░░░░░░░░▓▓  ▓▓░░▓▓  ░░░░░▓▓  ░░░▓▓  ▓▓░░▓▓  ▓▓░░▓▓  ▓▓░▓▓  ▓▓░░░░░░░░░░░░  
  6.   ░░░░░░░░▓▓  ░░  ░▓▓ ░░░░░░▓▓ ░░░░▓▓ ░▓▓ ░▓▓ ░▓▓ ░▓▓ ░▓▓ ▓▓▓░░  ░░░░░░░░░░░░ 
  7.  ░░░░░░░░░▓▓ ░░░░░░▓▓ ░░░░░░▓▓ ░░░░▓▓▓▓▓  ░▓▓▓▓▓  ░▓▓▓▓▓  ░▓▓▓░░░░░░░░░░░░░░░░
  8.  ░░░░░░░░░▓▓ ░░░░░░▓▓ ░░▓░░░▓▓ ░░░░▓▓    ░░▓▓  ▓▓░░▓▓  ▓▓░░░ ▓▓▓░░░░░░░░░░░░░░
  9.   ░░░░░░░░░▓▓░░▓▓░░▓▓ ░▓▓ ░░▓▓ ░░░░▓▓ ░░░░░▓▓ ░▓▓ ░▓▓ ░▓▓ ▓▓░░▓▓ ░░░░░░░░░░░░ 
  10.    ░░░░░░░░░▓▓▓▓  ▓▓▓▓▓▓▓ ░▓▓▓▓░░░▓▓▓▓░░░░▓▓▓▓▓▓  ▓▓▓▓▓▓  ░▓▓▓▓  ░░░░░░░░░░░  
  11.      ░░░░░░░░    ░░       ░░    ░░░    ░░░░      ░░      ░░░    ░░░░░░░░░░    
  12.         ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░       
  13.               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░             
  14.                         ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░                      
  15.  
  16.    Volume 1, Number 7                                     8 Octomber 1991
  17.  
  18.                   (c) Daniel Doçekal, All Rights Reserved
  19.    
  20.       The BBS Clipper magazine, published PERIODICALLY, later WEEKLY......
  21.    
  22.       Some of the material used comes from scanning CLIPPER echoes
  23.       which are carried in various BBS throughout the World.
  24.       These Echoes are very often the source of the most often asked
  25.       Questions and Answers about Clipper.
  26.      
  27.       Other material, which is fully signed or abbreviated is the
  28.       copyright of the appropriate persons.
  29.    
  30.       The publisher is not responsible for other authors submissions....
  31.       Published material is not necessarily the opinion of the publisher.
  32.  
  33.       Redaction:
  34.          Publisher...................................Daniel Docekal
  35.          Chief editor ...............................Daniel Docekal
  36.          Language editor .................................Dave Wall
  37.  
  38.  
  39.  
  40.                                Table of Contents
  41.  
  42.  1. EDITORIAL  ............................................................  1
  43.     Monday editorial  .....................................................  1
  44.  2. ARTICLES  .............................................................  2
  45.     DOSRCS - Revision Control System - Part (5)  ..........................  2
  46.     The Programmer's Guide to CLIPPER Linkers - part (4)  .................  5
  47.     What is faster, FOR or AEVAL?  ........................................ 11
  48.     RCS - New version of PUT.BTM for 4DOS (or NDOS)  ...................... 13
  49.  3. Q&A  .................................................................. 15
  50.     Clipper 87 books  ..................................................... 15
  51.  4. ANOMALIES  ............................................................ 16
  52.     ANOMALIES reports and commets  ........................................ 16
  53.     INKEY() function anomaly with SETKEY  ................................. 16
  54.     Keyboard codes missing from definition of K_xxxx  ..................... 17
  55.     Memoedit() function  .................................................. 17
  56.  5. ADVERTISEMENT  ........................................................ 18
  57.     WHAT WAS IN PREVIOUS NUMBER  .......................................... 18
  58.  6. CLIPPER NET  .......................................................... 19
  59.     Index of described files in Clipper BBS Magazine  ..................... 19
  60.  CLIPBBS 1-07       Table of Contents (...)         8 Oct 1991
  61.  
  62.  
  63.     ClipperNet - DIAL.CLN  ................................................ 19
  64.     ClipperNet - GSR151.ARJ  .............................................. 20
  65.     ClipperNet - KF_LOKUP.ARJ  ............................................ 20
  66.     ClipperNet - OOPSCL5.ARJ  ............................................. 21
  67.     ClipperNet - PAT1.ARJ  ................................................ 21
  68.     ClipperNet - POWER10.ARJ  ............................................. 22
  69.     ClipperNet - SCANCODE.ARJ  ............................................ 22
  70.     ClipperNet - SHELP50A.ARJ  ............................................ 22
  71.  7. CLIPBBS  .............................................................. 24
  72.     CLIPBBS distribution  ................................................. 24
  73.     CLIPBBS, how to write an article!!!  .................................. 25
  74.  
  75.                                    - - - - -
  76.  CLIPBBS 1-07                   Page 1                    8 Oct 1991
  77.  
  78.  
  79.  =============================================================================
  80.                                    EDITORIAL
  81.  =============================================================================
  82.  
  83.  
  84.                               Monday editorial
  85.  
  86.  Hello all again. It's monday. Yes, it's unusual because of all previous
  87.  ones written on mostly Sunday. Reality is always first before writing fun,
  88.  Satturady and Sunday i spent in optimizing one time critic application
  89.  (FAX/TELEX/E-MAIL server) written as combination of Clipper, C and
  90.  Assembler. It was last piece of Summer 87 code not fully optimized into
  91.  5.01 Clipper. Thanx god that never again...
  92.  
  93.  OK, get back to main theme. Clipper BBS magazine. Do you, reader, now what
  94.  is wonderfull? I'm publishing, writing and collecting magazine only by my
  95.  own, everybody is telling me, great work, keep it... But what's strange,
  96.  nobody is giving ANY articles (sorry, exception is Pepijn Smits with
  97.  article about his great library). Where are all Clipper freaks with ideas
  98.  good to publish? I'm not expecting someone from U.S. they have own
  99.  Reference Clipper or Nantucket News, but EUROPE? Where they are sleeping?
  100.  Or they are afraid to write not in own language?
  101.  
  102.  Don't be. Own language.... My own language is Czech. It's language of few
  103.  millions of people (less than 10, but more than 5 millions). Country called
  104.  Czechoslovakia located in centre of Europe. Therefore my English is
  105.  sometime bad and i'm sure that some englishman can have lot of fun with
  106.  reading my sentencies or way of writing words. Year ago, i moved to The
  107.  Netherlands to work. Family including my wife, my dog and me is now trying
  108.  to get another language, Dutch as good as we are capable to speak and
  109.  understand English. Unfortunately my wife and me are also journalist and
  110.  there is coming a problem. For me it's easy, technical journalism is just
  111.  easy (writing of books also), but normal one.... Therefore don't be afraid
  112.  to use another strange language.
  113.  
  114.  About what to write? About everything what one can see interesting for
  115.  himself or for some others. Everything what is related to Clipper. It not
  116.  must be real only Clipper thing. Good use of editor, DOS, .BAT files any
  117.  utilities which can help...
  118.  
  119.  Somewhere later,
  120.  Daniel
  121.  
  122.  -----------------------------------------------------------------------------
  123.  CLIPBBS 1-07                   Page 2                    8 Oct 1991
  124.  
  125.  
  126.  =============================================================================
  127.                                    ARTICLES
  128.  =============================================================================
  129.  
  130.  
  131.              DOSRCS - Revision Control System - Part (5)
  132.  
  133.                         _____________________
  134.                         RCS.EXE - Maintanence
  135.                         ═════════════════════
  136.  
  137.  
  138.  RCS.EXE is maintenance utility set for controlling RCS system and
  139.  files. Is not very often used, but several jobs must be done via
  140.  this program -
  141.  
  142.          -       unlocking of locked revision
  143.          -       changing/adding of users of file
  144.  
  145.  RCS can work on files only in case, that caller of RCS is in access
  146.  list of file, user is superuser, or access list is empty or user is
  147.  owner of file or -i options is used.
  148.  
  149.  _____________
  150.  SYNTAX of RCS
  151.  
  152.            RCS [ options ] file ...
  153.  
  154.  _______________
  155.  Options for RCS
  156.  
  157.          -i
  158.  
  159.          Creates and initializes a new RCS file, but does not
  160.          deposit any revision.
  161.  
  162.          -a<logins>
  163.  
  164.  ║       Appends the login names appearing in the COMMA SEPARATED
  165.  ║       list <logins> to the access list of the RCS file. This
  166.  ║       command is NEEDED in network environment to allow several
  167.  ║       programmers work on one file (not at the same time of
  168.  ║       course..). Please note LOWER case of "-a" switch.
  169.  
  170.          -A<oldfiles>
  171.  
  172.  ║       Appends the access list of <oldfile> to the access list of
  173.  ║       RCS specified file. It's needed in case of neccesity make
  174.  ║       the same access list for new file as for old one.
  175.  
  176.  
  177.          -e[<logins>]
  178.  
  179.  ║       ERASES login names appearing in COMMA SEPARATED list
  180.  ║       <logins> from access list of RCS file. If <logins> is
  181.  ║       omitted, ENTIRE access list is erased!
  182.  CLIPBBS 1-07                   Page 3                    8 Oct 1991
  183.  
  184.  
  185.          -b[<rev>]
  186.  
  187.          Sets the default branch to <rev>. If <rev> is omitted, the
  188.          default branch is reset to the highest branch in the trunk.
  189.  
  190.          -c[<string>]
  191.  
  192.  ║       Sets the comment leader to string. The COMMENT LEADER is
  193.  ║       printer before EVERY log message line generated by the
  194.  ║       keyword $Log$ during CheckOut. This is usefull for
  195.  ║       programming languages without multi-lie comments or for
  196.  ║       better keeping format of your program. During RVS -i or
  197.  ║       initial CI, the comment leader is guessed from the suffix
  198.  ║       of the working file.
  199.  
  200.          -l[<rev>]
  201.  
  202.          Locks the revision with number <rev>. If a branch is given,
  203.          the latest revision on that branch is locked. If <rev> is
  204.          omitted, the latest revision of default branch is locked.
  205.          Locking prevents overlapping changes. Lock is removed with
  206.          CI or with RCS -u.
  207.  
  208.          -u{<rev>]
  209.  
  210.  ║       Unlock the revision with number rev. If a branch is given,
  211.  ║       the latest revision on that branch is unlocked. If <rev> is
  212.  ║       omitted, the latest lock held by the caller is removed.
  213.  
  214.          Normally only locker of a revision may unlock it, but
  215.          sometime is needed to unlock revision without original
  216.          locker. If somebody else than original locker is trying to
  217.          unlock revision, is asked for writing message to original
  218.          locker. In UNIX it's probably working, but in DOS
  219.          environment it has not effect.
  220.  
  221.          -L
  222.  
  223.  │       Sets locking for STRICT. Strict locking means that the
  224.  │       Owner of an RCS file is not exempt from locking for
  225.  │       checkin (normally is possible to get file without lock).
  226.  │       This should be used for files that are shared. Please not
  227.          that -L is upper case "-L".
  228.  
  229.          -U
  230.  
  231.          Sets locking to non-strict. Owner of a file need not lock a
  232.          revision for checkin. Please DO NOT use this option for
  233.          file that are shared with more people.
  234.  
  235.  ║       In DOSRCS version logging is STRICT by DEFAULT.
  236.  
  237.          -n<name>[:<rev>]
  238.  
  239.  ║       Associates SYMBOLIC name <name> with branch or revision
  240.  ║       <rev>. RCS prints an error message if name is already
  241.  CLIPBBS 1-07                   Page 4                    8 Oct 1991
  242.  
  243.  
  244.  ║       associated with another number. if <rev> is omitted, the
  245.  ║       symbolic name <name> is deleted.
  246.  
  247.          -N<name>[:<rev>]
  248.  
  249.          Same as "-n", except that it overrides a previous
  250.          assignment of <name>.
  251.  
  252.          -o<range>
  253.  
  254.  │       Deletes "outdated" revisions given by range. Range
  255.  │       consisting of a single revision number means that revision.
  256.  │       Range consisting of a branch number means the latest
  257.  │       revision on that branch. Range of from <rev1>-<rev2> means
  258.  │       revisions <rev1> to <rev2> on the same branch, -<rev> means
  259.  │       from beginning of branch containing <rev> up to and
  260.  │       including <rev> and finally <rev>- means from revision
  261.  │       <rev> to the end of the branch containing <rev>. NONE of
  262.  │       the outdated revisions may have branches or locks.
  263.  
  264.          -q
  265.  
  266.          Quite mode, diagnostics is not printed.
  267.  
  268.          -s<state>[:<rev>]
  269.  
  270.  │       Sets the state attribute of the revision <rev> to <state>.
  271.  │       If <rev> is a branch number, the latest revision on that
  272.  │       branch is assumed. Any identifier is acceptable for state.
  273.  │       A useful set of state is:
  274.  
  275.  ║       Exp     Experimental
  276.  ║       Stab    Stable
  277.  ║       Rel     Release
  278.  
  279.  │       Default CI sets the state of revision to EXP.
  280.  
  281.  
  282.          -t[<txtfile>]
  283.  
  284.          Writes descriptive text into the RCS file (deletes existing
  285.          text). If <txtfile> is omitted, RCS prompt the user for
  286.          text, otherwise DESCRIPTIVE text is copied from the file
  287.          <textfile>. If "-i" is presend, text is requested even if
  288.          "-t" is not given.
  289.  
  290.  That's all about this utility control program.
  291.  
  292.  See you later..
  293.  .DD.
  294.  
  295.  -----------------------------------------------------------------------------
  296.  CLIPBBS 1-07                   Page 5                    8 Oct 1991
  297.  
  298.  
  299.         The Programmer's Guide to CLIPPER Linkers - part (4)
  300.  
  301.          = VIRTUAL MEMORY LINKING (VML) =
  302.  
  303.          Virtual Memory Linking is a technique developed by Pocket Soft,
  304.          Inc. and was introduced in the .RTLINK version 3.1.  They
  305.          originally referred to this techique as "dynamic-overlaying"
  306.          which led to a lot of confusion, because it was not at all
  307.          similar to overlaying of code and data, therefore, I proposed
  308.          that this type of linking be referred to as "Virtual Overlays".
  309.          Now, with the release of .RTLINK/Plus 4.0, Pocket Soft is
  310.          calling this technology Virtual Memory Linking (VML), which is
  311.          a much more appropriate name for the technology.
  312.  
  313.          Unlike "dynamic overlays" which are "read-only", virtual overlay
  314.          managers not only overlay the CODE portion of a module, but also
  315.          the portion of a module which is changed during the running of an
  316.          application - the DATA.  The data changes are written out to disk
  317.          in temporary files which are managed during the running of the
  318.          application.
  319.  
  320.          Virtual overlays are similar in concept to both the "dynamic-
  321.          overlaying" technique used in RTLINK/Clipper-5.0 when loading
  322.          code from disk into memory combined with the Virtual Memory
  323.          Manager (VMM) system which allocates virtual memory for memvars
  324.          and arrays.  When executing a program using virtual overlaying,
  325.          the code is paged from disk to memory on a "least recently used"
  326.          basis.  This means that code which has not been used for a while
  327.          is overwritten to make room for the new code, leaving frequently
  328.          used code in memory.
  329.  
  330.          Virtual overlay linkers dynamically allocate the size of the
  331.          object pool for paging code in accordance with the memory
  332.          available during the start of the application.  The more memory
  333.          that is available, the less "disk-intensive" the application
  334.          and the better the speed performance.  VMM and VML systems
  335.          which are properly designed will automatically execute programs
  336.          in the available memory by making use of conventional memory,
  337.          expanded memory, extended memory and disk.
  338.  
  339.          At the writing of this article, my experience with this type
  340.          of linking is limited to my experience with Clipper-5.0, however
  341.          it is very curious to me that the VML system in RTLINK-4.0 was
  342.          announced at "virtually" the same time the VMM system was
  343.          incorporated in Clipper-5.0.  It is only speculation on my
  344.          part, but Pocket Soft's advertising about the features of VML
  345.          and Nantucket's advertising about the features of VMM are so
  346.          similar that it appears to the casual observer that there was
  347.          a collaboration of efforts in the development of this technology,
  348.          or that Microsoft developed the technology and simply handed it
  349.          over to Nantucket and Pocket Soft at the same time.  It is
  350.          unclear at the present time, how much of Clipper 5.0's memory
  351.          management is handled by the Clipper Libraries and how much is
  352.          handled by the RTLINK linker.
  353.  
  354.  
  355.  CLIPBBS 1-07                   Page 6                    8 Oct 1991
  356.  
  357.  
  358.          = SYMBOL-MANAGEMENT =
  359.  
  360.          Symbol Management is a technique that can greatly reduce the
  361.          amount of memory overhead in a linked application.  Symbol
  362.          management is a process in which the "symbol table" is managed
  363.          to prevent unneccessary symbols in the main root memory area.
  364.          There is usually very little that a linker can do to resolve
  365.          this problem because the problem is usually caused by the
  366.          compiler and the programmer.   Every compiled object contains
  367.          symbols, constants, code and data.   Overlay linkers can usually
  368.          do a good job of overlaying code and constants but symbols and
  369.          data must be treated differently.  Symbols must always be placed
  370.          in "root" memory for overlay managers to be able to find and load
  371.          the module which contains the called symbol.  Unfortunately,
  372.          most linkers are not sophisticated enough to eliminate the
  373.          "redundancy" of symbols which are placed in root memory.  For
  374.          example, if you reference the memvar INV_NMBR just one time in
  375.          each of 10 different clipper-compiled objects, there will be
  376.          10 different symbol-table entries for INV_NMBR, however, if
  377.          you compile your 10 programs into one larger object, then
  378.          INV_NMBR will occupy only 1 memory location in the symbol table
  379.          thereby greatly reducing the root memory allocation.
  380.  
  381.          This can become a delicate balancing act, however, when trying
  382.          to find the proper balance of .OBJ file size verses symbol count
  383.          to make a difference in memory usage.  Increasing the .OBJect
  384.          size may increase the overlay area size thereby nullifying the
  385.          memory savings from the reduced symbols.  Static and reloable
  386.          overlay linkers do nothing to help this problem because they
  387.          overlay at the "object" level.
  388.  
  389.          ALINK, BLINKER, WARPLINK, dCLIP-2.50, and NOLINK-2.50 all excel
  390.          in the area of symbol management.  Memory management with these
  391.          link systems is very efficient because they overlay code segments
  392.          down to the "procedure" level rather than the "module" level.
  393.          This means that you can now compile your large clipper application
  394.          into just a few huge .OBJect files, thereby greatly reducing
  395.          the number of symbols which are placed into "root" memory.
  396.          It is really this "symbol management" of ALINK, BLINKER and
  397.          WARPLINK which make them perform well as memory-management linkers
  398.          as much as their overlaying techniques.
  399.  
  400.          NOLINK, dCLIP and dCLIPRUN provide even better symbol management
  401.          because they not only overlay at the procedure level (when using
  402.          dynamic libraries), but they only create symbols when called for
  403.          during the running of the application.  The symbols from a huge
  404.          report that is run once a week will waste valuable memory with
  405.          other linkers, where "true dynamic-linking" will create these
  406.          symbols only at the time the report is being run.
  407.  
  408.          - PROGRAMMING TIPS FOR SYMBOL REDUCTION -
  409.  
  410.  
  411.          This article is basically intended to provide "linking" tips
  412.          for memory-management, however, it is incumbent upon me to
  413.          also offer additional tips on reducing symbol-count in your
  414.  CLIPBBS 1-07                   Page 7                    8 Oct 1991
  415.  
  416.  
  417.          applications which will work with ALL linkers.
  418.  
  419.          a. USE CONSTANTS INSTEAD OF MEMVARS
  420.  
  421.          Clipper memory variables are always treated as "symbols".
  422.          Refrain from using a memory variable if a constant is sufficient.
  423.          For example, an unnecessary symbol can be eliminated by changing
  424.          the code:
  425.  
  426.             escapekey=27
  427.             DO WHILE INKEY()#escapekey
  428.               *clipper code
  429.             ENDDO
  430.  
  431.          to:
  432.  
  433.             DO WHILE INKEY()#27
  434.               *clipper code
  435.             ENDDO
  436.  
  437.  
  438.          b. USE ARRAYS INSTEAD OF MEMVARS
  439.  
  440.          Every different Clipper memvar name creates a "symbol", whereas
  441.          an array name creates only ONE symbol.  The following example
  442.          shows how to save considerable memory in a clipper application
  443.          by reducing the symbol count with an array.
  444.  
  445.          This code produces 10 symbols:
  446.  
  447.              mname = name
  448.              maddress = address
  449.              mcity = city
  450.              mstate = state
  451.              mzip = zip
  452.              @ 1,1 SAY 'Name   ' GET mname
  453.              @ 2,1 SAY 'Address' GET maddress
  454.              @ 3,1 SAY 'City   ' GET mcity
  455.              @ 4,1 SAY 'State  ' GET mstate
  456.              @ 5,1 SAY 'Zip    ' GET mzip
  457.              READ
  458.              REPL name WITH mname, address WITH maddress,;
  459.                   city WITH mcity, state WITH mstate, zip WITH mzip
  460.  
  461.  
  462.          This code produces 6 symbols:
  463.  
  464.              PRIVATE gets[5]
  465.              gets[1] = name
  466.              gets[2] = address
  467.              gets[3] = city
  468.              gets[4] = state
  469.              gets[5] = zip
  470.              @ 1,1 SAY 'Name   ' GET gets[1]
  471.              @ 2,1 SAY 'Address' GET gets[2]
  472.              @ 3,1 SAY 'City   ' GET gets[3]
  473.  CLIPBBS 1-07                   Page 8                    8 Oct 1991
  474.  
  475.  
  476.              @ 4,1 SAY 'State  ' GET gets[4]
  477.              @ 5,1 SAY 'Zip    ' GET gets[5]
  478.              READ
  479.              REPL name WITH gets[1], address WITH gets[2],;
  480.                   city WITH gets[3], state WITH gets[4], zip WITH gets[5]
  481.  
  482.  
  483.          c.  USE THE SAME NAME MEMVARS WHENEVER POSSIBLE
  484.  
  485.          Again, every "different" Clipper memvar in a module creates
  486.          a symbol.  If an object contains several procedures, use the
  487.          same name for memvars even though they may not perform the same
  488.          or similar functions.   For example, procedure A and procedure B
  489.          both need 5 memvars.  If procedure A declares its memvars with
  490.          5 unique names and procedure B declares its memvars with 5
  491.          unique names, then 10 symbols are used in the linked application.
  492.          To eliminate 5 symbols, make sure that procedure B assigns the
  493.          same name to the memvars as procedure A.   This is not possible
  494.          of course, if the memvars need to be public to both procedures
  495.          and perform different functions, only if they are private.
  496.  
  497.  
  498.  
  499.          - USING THE CLIPPER-5.0 PRE-PROCESSOR FOR SYMBOL MANAGEMENT -
  500.  
  501.  
  502.          The above techniques for symbol reduction may not be practical in
  503.          all programming situations because of the "cryptic" method in
  504.          which you must treat your memvar declarations.  Clipper 5.0 solves
  505.          this problem and also makes it easier to do steps 1 and 2 above by
  506.          including a language "pre-processor" which allows you to program
  507.          using non-cryptic language extensions then convert your code at
  508.          compile time to memory-efficient use of arrays or constants.
  509.  
  510.          Let's look at how you would use Clipper-5.0 pre-processor
  511.          definitions to solve the problems in examples 1 and 2 above.
  512.  
  513.  
  514.          1. CONVERTING MEMVARS TO CONSTANTS AT COMPILE-TIME
  515.  
  516.             #define escapekey 27
  517.             DO WHILE INKEY()#escapekey
  518.               *clipper code
  519.             ENDDO
  520.  
  521.  
  522.          2. CONVERTING MEMVARS TO ARRAYS AT COMPILE-TIME
  523.  
  524.              #ifndef DEBUG  && compiling non-DEBUG version
  525.                PRIVATE gets[5]
  526.                #define mname     gets[1]
  527.                #define maddress  gets[2]
  528.                #define mcity     gets[3]
  529.                #define mstate    gets[4]
  530.                #define mzip      gets[5]
  531.              #endif
  532.  CLIPBBS 1-07                   Page 9                    8 Oct 1991
  533.  
  534.  
  535.              mname = name
  536.              maddress = address
  537.              mcity = city
  538.              mstate = state
  539.              mzip = zip
  540.              @ 1,1 SAY 'Name   ' GET mname
  541.              @ 2,1 SAY 'Address' GET maddress
  542.              @ 3,1 SAY 'City   ' GET mcity
  543.              @ 4,1 SAY 'State  ' GET mstate
  544.              @ 5,1 SAY 'Zip    ' GET mzip
  545.              READ
  546.              REPL name WITH mname, address WITH maddress,;
  547.                   city WITH mcity, state WITH mstate, zip WITH mzip
  548.  
  549.  
  550.          To compile the above code WITHOUT symbol substitution for
  551.          debugging purposes, compile as follows:
  552.  
  553.            CLIPPER <my app> /rDEBUG
  554.  
  555.          To compile the above code WITH symbol substitution for
  556.          your final application, compile as follows:
  557.  
  558.            CLIPPER <my app>
  559.  
  560.          The /rDEBUG switch has the same effect as the comand:
  561.  
  562.            #define DEBUG
  563.  
  564.          in your source code, however, it is much more convenient because
  565.          it allows you to make debug or non-debug versions of your code
  566.          simply from the DOS command line or .BAT files.
  567.  
  568.  
  569.          SYMBOL COMPACTION
  570.  
  571.          Some linkers include "symbol-compaction" techniques to help
  572.          eliminate the problem caused by the duplicate symbols in each
  573.          Clipper object file.   RTLINK/Clipper-5.0 automatically
  574.          eliminates duplicate symbols during linking, thereby eliminating
  575.          the need to compile your .PRG files into larger objects using
  576.          .CLP files.  I experimented with a large application of mine
  577.          in which I compiled the source code into 100 objects, then 10
  578.          objects, and finally only 3 objects.  The number and size of
  579.          the object files made absolutely no difference in the output
  580.          size of the .EXE produced by RTLINK/Clipper-5.0, whereas each
  581.          of these models would have produced drastically differenct
  582.          results with any other linker.
  583.  
  584.          WARPLINK provides a utility named SP.EXE (written by Steve
  585.          Klingler) which essentially performs the same task, however,
  586.          symbol-compaction with WARPLINK is a two-step process.  First
  587.          the .EXE must be created using WARPLINK.EXE, followed by
  588.          running SP.EXE using the following syntax:
  589.  
  590.               SP <input file .EXE name> <output file .EXE name>
  591.  CLIPBBS 1-07                   Page 10                   8 Oct 1991
  592.  
  593.  
  594.          The results, in some cases can be dramatic.  In one of my
  595.          applications, SP.EXE removed 908 duplicate symbols from the
  596.          symbol table and reduced my .EXE by 15k.
  597.  
  598.          SP.EXE will work only on .EXE files created with WARPLINK or
  599.          .EXE files which contain no overlays.
  600.  
  601.  -----------------------------------------------------------------------------
  602.  CLIPBBS 1-07                   Page 11                   8 Oct 1991
  603.  
  604.  
  605.                     What is faster, FOR or AEVAL?
  606.  
  607.  
  608.  New test is here. This time we will be taking a look at AEVAL and
  609.  FOR cycles used in ekvivalent situations. As usual, we will see
  610.  that AEVAL with codeblock is again slower than classic application
  611.  of FOR cycle with the same effect.
  612.  
  613.  Remember? In some previous number we did a tests of DBEVAL and FOR,
  614.  therefore logically is coming test of AEVAL and FOR.
  615.  
  616.  Overwiew
  617.          ALL tests are using this definition of variables:
  618.          │       local   aTest := ARRAY(1000) ,;
  619.          │               n , start
  620.  
  621.          ARRAY has only 1000 of values for avoiding cases of
  622.          disk swappings in smaller memories.
  623.  
  624.  TEST1   is FOR and is filling array with values of value index
  625.          │       start := seconds()
  626.          │       for n:=1 to 1000
  627.          │       aTest[n]:=n
  628.          │       next
  629.          │       ? 'for elapsed in ', seconds()-start
  630.  
  631.  TEST2   is AEVAL equivalent of TEST1
  632.          │       start := seconds()
  633.          │       n := 1
  634.          │       aeval(aTest,{|xx| xx:=n++})
  635.          │       ? 'aeval elapsed in ', second()-start
  636.  
  637.  TEST3   is FOR and is displaying complete ARRAY on screen
  638.          │       start := seconds()
  639.          │       for n:=1 to 1000
  640.          │       QQout(aTest[n],chr(13))
  641.          │       next
  642.          │       ?
  643.          │       ? 'for qqout elapsed in ', seconds()-start
  644.  
  645.  TEST4   is AEVAL equivalent of TEST3
  646.          │       start := seconds()
  647.          │       aeval(aTest,{|xx| QQout(xx,chr(13))})
  648.          │       ?
  649.          │       ? 'aeval qqout elapsed in ', seconds()-start
  650.  
  651.  TEST5   is FOR + EVAL equivalent of TEST3
  652.          │       start:=seconds()
  653.          │       for n:=1 to 1000
  654.          │       eval({|| QQout(aTest[n],chr(13))})
  655.          │       next
  656.          │       ?
  657.          │       ? 'for+eval elapsed in ', seconds()-start
  658.  
  659.  
  660.  All those tests i runned on AT286/16Mhz Laptop with normal memory,
  661.  CLIPBBS 1-07                   Page 12                   8 Oct 1991
  662.  
  663.  
  664.  no EMS, nothing special (free about 550KBs).
  665.  
  666.  Results are:
  667.  
  668.       │  T1   │  T2   ║  T3   │  T4   │  T5   │
  669.       ├───────┼───────╫───────┼───────┼───────┤
  670.       │  0.28 │  0.38 ║  2.08 │  2.20 │  2.52 │
  671.  
  672.  And interpretation?
  673.  
  674.          T1 and T2 are telling, that AEVAL is slower for 0.1 of
  675.          second on initialization of 1000 of values in array.
  676.          Actually cannot be expected nothing else, because is here
  677.          evaluation of code block with passing values instead of
  678.          just executing assig of value directly in FOR. But at all
  679.          NANTUCKET maybe can do something with those results...
  680.  
  681.          T3 and T4 are telling the same, AEVAL was slower again for
  682.          displaying of 1000 values than the same FOR cycle.
  683.  
  684.          T3/4 and T5 are only comparing FOR with executed command
  685.          and FOR with EVALuated codeblock. It's actually most
  686.          ekvivalent of T4. It's of course significantly slower,
  687.          because of overhead of EVALuating codeblock instead of
  688.          normal executing.
  689.  
  690.  Cheers
  691.  Daniel
  692.  
  693.  -----------------------------------------------------------------------------
  694.  CLIPBBS 1-07                   Page 13                   8 Oct 1991
  695.  
  696.  
  697.            RCS - New version of PUT.BTM for 4DOS (or NDOS)
  698.  
  699.  In some cases is Clipper BBS Magazine slower than actual development which
  700.  i'm doing during using of some new programs. Typicall example of this case is
  701.  serie of BATCH files which i'm slowly upgrading for use of RCS with mine
  702.  installation of 4DOS (NDOS of course also for all who have Norton Utilities
  703.  6.0 from Symantec).
  704.  
  705.  PUT.BTM (.BTM is extension of fast batch file in 4DOS) is slightly changed:
  706.  
  707.  ------------------------------<PUT.BTM>-----------------------------------
  708.  @echo off
  709.  SET P$=N
  710.  IFF NOT "%1"=="" THEN
  711.      IFF %@index[%1,*]==-1 THEN
  712.          IFF %@index[%1,?]==-1 THEN
  713.              echo ■
  714.              echo ■  Processing single file %1
  715.              echo ■
  716.              IFF "%2"=="" THEN
  717.                  call rcsput %1 R
  718.              ELSE
  719.                  call rcsput %1 %2 %3 %4 %5 %6 %7 %8 %9
  720.              ENDIFF
  721.          ELSE
  722.              SET P$=Y
  723.          ENDIFF
  724.      ELSE
  725.          SET P$=Y
  726.      ENDIFF
  727.      IFF %P$%==Y THEN
  728.          echo ■
  729.          echo ■  Processing from list defined as %1
  730.          echo ■
  731.          IFF "%2"=="" THEN
  732.              for %%i in (%1) do call rcsput %%i R
  733.          ELSE
  734.              for %%i in (%1) do call rcsput %%i %2 %3 %4 %5 %6 %7 %8 %9
  735.          ENDIFF
  736.      ENDIFF
  737.  ELSE
  738.      echo ■  PUT Usage:
  739.      echo ■      PUT filename [RFLU] rev_number [symbolic_name]
  740.      echo ■              filename can be with "*" and "?" signs also
  741.      echo ■              R = check in                [default]
  742.      echo ■              F = force check in
  743.      echo ■              L = checkin and then check out
  744.      echo ■              U = check in and then check out and not lock
  745.      echo ■
  746.  ENDIFF
  747.  SET P$=
  748.  ------------------<eof>----------------------------------------------------
  749.  
  750.  File which is called from main batch file is:
  751.  
  752.  <-------------------------<RCSPUT.BTM>------------------------------------>
  753.  CLIPBBS 1-07                   Page 14                   8 Oct 1991
  754.  
  755.  
  756.  @echo off
  757.  echo ■
  758.  echo ■  Processing [%1] with rev.num %3 as -%@lower[%2] %4 %5 %6 %7 %8 %9
  759.  echo ■
  760.  IFF "%4"=="" THEN
  761.      CI -q -%@lower[%2]%3 %1
  762.  ELSE
  763.      CI -q -%@lower[%2]%3 -N%4 %1
  764.  ENDIFF
  765.  <--------------------<EOF>----------------------------------------------->
  766.  
  767.  
  768.  And that's all. Question about 'downgrade' to normal standard .BAT files of
  769.  DOS is little bit problematic because of absence functions like @index which
  770.  are like AT() function in Clipper....
  771.  
  772.  .DD.
  773.  
  774.  P.S. Above is REAL BATCH FILE in simple and nice 4DOS (SHAREWARE!!!)
  775.  
  776.  -----------------------------------------------------------------------------
  777.  CLIPBBS 1-07                   Page 15                   8 Oct 1991
  778.  
  779.  
  780.  =============================================================================
  781.                                       Q&A
  782.  =============================================================================
  783.  
  784.  
  785.  Clipper 87 books
  786.  
  787.  Question:   Could someone recommend Summer87 related books?
  788.  
  789.  Answer:
  790.  
  791.          Dynamics of Clipper
  792.          by: Arthur Fuller
  793.          pub: Dow Jones-Irwin Software Guides
  794.          ISBN:   1-55623-131-8
  795.          Date:   1989
  796.  
  797.          Using Clipper
  798.          by: W. Edward Tiley
  799.          pub: Que Corporation
  800.          ISBN:   0-88022-379-0
  801.          Date:   1988
  802.  
  803.  -----------------------------------------------------------------------------
  804.  CLIPBBS 1-07                   Page 16                   8 Oct 1991
  805.  
  806.  
  807.  =============================================================================
  808.                                    ANOMALIES
  809.  =============================================================================
  810.  
  811.  
  812.                       ANOMALIES and their comments
  813.  
  814.  This part of Clipper BBS Magazine is dedicated to all discovered 
  815.  anomalies and comments about them in Clipper products. Because 
  816.  Nantucket is still unable to give own bug and anomalies reports (as 
  817.  actually did in past with Summer 87 version) is very handy to have 
  818.  results of many investigations done on many user places. I'm also
  819.  doing my own investigatings, because i'm always very good when someting 
  820.  has hidden problems. Everything what i buy will first show all problems 
  821.  and then all normal things. This amazing part of my live is sometime 
  822.  making me crazy, but for testing of programs it's great <grin>.
  823.  
  824.  Daniel
  825.  
  826.  
  827.  
  828.  -----------------------------------------------------------------------------
  829.  
  830.  
  831.                   INKEY() function anomaly with SETKEY
  832.  
  833.  Another problem which somebody could expect that have to be solved is
  834.  fact, that all SETKEY sets aren't working when one is using INKEY()
  835.  function. Because INKEY() is just ONLY reading keyboard. In all other
  836.  places where keyboard is read are all SETKEY sets executed correctly.
  837.  But, when programmer will start to use INKEY() in more places, then
  838.  will have problem, all SETKEY sets aren't valid and programmer MUST
  839.  take care of them by special routines or DO CASE checks. My expectation
  840.  that this nonlogical fact will be corrected is wrong. INKEY() is still
  841.  don't recognizing SETKEY sets.
  842.  
  843.       Solving:
  844.            don't use INKEY(), you easy can all INKEY() callings
  845.            replace with call to new function:
  846.  
  847.            Function MyInkey(nnn)
  848.            local     value   := 0 , cBlock
  849.            while .t.
  850.            if valtype(nnn)!="N"
  851.                 value:=inkey()      // inkey WITHOUT parameter
  852.            else
  853.                 value:=inkey(nnn)   // inkey WITH parameter
  854.            endif
  855.            if (cBlock:=setkey(value))!=NIL
  856.                 Eval(cBlock)        // test if valid SETKEY
  857.                 loop                // and then continue
  858.            endif
  859.            return (value)
  860.  
  861.       This possible (and easy) solving has this advantages:
  862.       -    fully compatible with INKEY() function in parameter
  863.  CLIPBBS 1-07                   Page 17                   8 Oct 1991
  864.  
  865.  
  866.            passing and value returning
  867.       -    taking care of your SETKEY sets and executing (better
  868.            evaluating) them without special testings or actions
  869.       -    all LASTKEY() stuff is still the same because of
  870.            original INKEY() using
  871.  
  872.  .DD.
  873.  
  874.  -----------------------------------------------------------------------------
  875.  
  876.  
  877.              Keyboard codes mising from definition of K_xxxx
  878.  
  879.  When received 5.01 my expectation was, that INKEY.CH was expanded to
  880.  some missing keyboard codes. Not only codes from extended keyboard
  881.  (because they are disputable), but also codes for normal keyboard which
  882.  weren't in 5.0 INKEY.CH.
  883.  
  884.  Truth is different, INKEY.CH is still missing extended codes and from
  885.  basic codes, K_SPACE ,just easy code is NOT included in INKEY.CH
  886.  
  887.       Solving:
  888.            just update your INKEY.CH with (example):
  889.                 #define   K_SPACE        20
  890.                 #define   K_CTRL_UP      397
  891.                 #define   K_CTRL_DOWN    401 ....
  892.  
  893.  .DD.
  894.  
  895.  -----------------------------------------------------------------------------
  896.  
  897.  
  898.                            Memoedit() function
  899.  
  900.  A more comments i will give to MEMOEDIT() function.
  901.  
  902.  First problem which i had with Memoedit() in  Clipper 5.0 was a problem
  903.  that there IS NOT a way to access edited string from INSIDE of
  904.  Memoedit(). One can access ONLY original string, but edited (and
  905.  continuously changed) string is hidden somewhere in Clipper memory. I
  906.  reported this problem already to Nantucket a LONG time ago, the told
  907.  "will be solved in new version", but true is again different. And i'm
  908.  so sure, that this isn't so problem.
  909.  
  910.  In Clipper 5.0 there was a BIG problem with MemoEdit() function when
  911.  there was a very small free memory for your program (about 30KB after
  912.  loading program in memory). Then Memoedit in some cases did HANG of
  913.  whole system. Probably it had something to do with RTLINK inability to
  914.  handle proper overlaying when there was a small memory. This problem is
  915.  PARTIALLY out. One need more smaller memory to hang system with
  916.  Memoedit (10KB to 20KB). Hope, somebody will take care of this, because
  917.  to have hanging editor (yes, PE.EXE distributed with CLIPPER will hang
  918.  too) inside of application running just close to free memory is pity.
  919.  
  920.  .DD.
  921.  
  922.  -----------------------------------------------------------------------------
  923.  CLIPBBS 1-07                   Page 18                   8 Oct 1991
  924.  
  925.  
  926.  =============================================================================
  927.                                  ADVERTISEMENT
  928.  =============================================================================
  929.  
  930.  
  931.                          WHAT WAS IN PREVIOUS NUMBER
  932.  
  933.      DOSRCS - Revision Control System - part (4)
  934.      The Programmer's Guide to CLIPPER Linkers - part (3)
  935.      Best way of making FOR cyclus, and what about WHILE cyclus
  936.      WHICH packing/unpacking program to choose???????
  937.      Will Clipper expand to graphics environment?
  938.      TIPS&TRICKS - how to found largest string in array
  939.      DANIEL.LIB - NEW version of DANIEL.RMK
  940.      ANOMALIES reports and commets
  941.      Clipper Debugger anomalies
  942.      INCONSISTENCY
  943.      New RTLINK version, INCREMENTAL LINKING
  944.      CONFERENCE DUMP part (5)
  945.      Index of described files in Clipper BBS Magazine
  946.      Routing-Plan for ClipperNet
  947.      CLN - SOUND.ARJ   30
  948.      CLN - TBWHL4.ARJ  . 31
  949.      ClipNet - NFDESC2.ARJ
  950.      ClipNet - NFLIB2.ARJ
  951.      ClipNet - NFSRC2.ARJ
  952.      ClipperNet - ACCESS.ARJ
  953.      ClipperNet - ACHOO2.ARJ
  954.  
  955.  -----------------------------------------------------------------------------
  956.  CLIPBBS 1-07                   Page 19                   8 Oct 1991
  957.  
  958.  
  959.  =============================================================================
  960.                                   CLIPPER NET
  961.  =============================================================================
  962.  
  963.  
  964.  
  965.  Following is COMPLETE list of all published file descriptions in Clipper
  966.  BBS magazine in previous numbers. Purpose of this index list is to allow
  967.  anybody find needed file descriptions in growing number of described files.
  968.  Short description after name will give first possible close image about
  969.  file. Number enclosed in "[]" will mean number of Clipper BBS magazine.
  970.  
  971.  ┌─────────────┬────┬────────────────────────────────────────────────┬──────┐
  972.  │FileName     │Src │Description                                     │Where │
  973.  ├─────────────┼────┼────────────────────────────────────────────────┼──────┤
  974.  │ACCESS.ARJ   │Cln │Source of speed testing program                 │[1-06]│
  975.  │ACH2TB.ARJ   │Cln │Convert ACHOICE to TBROWSE                      │[1-05]│
  976.  │ACHOO2.ARJ   │Cln │Replacement of ACHOICE with GET possibilites    │[1-06]│
  977.  │ADHOC302.ARJ │Cln │Summer 87 inteligent report program             │[1-04]│
  978.  │CL5103.ARJ   │Cln │Report of 5.01 anomaly number 3                 │[1-04]│
  979.  │CL5REP6.ARJ  │Cln │5.01 replacement of REPORT command              │[1-04]│
  980.  │CLIP110.ARJ  │Cln │Clipper Documentor program                      │[1-05]│
  981.  │CLIPLINK.ARJ │Cbs │Complete text of R.Donnay about linkers         │[1-04]│
  982.  │CLIPSQL.ARJ  │Cln │Demo of complete SQL library for CLipper        │[1-05]│
  983.  │CLPFON.ARJ   │Cln │Set of fonts for EXPAND.LIB from author         │[1-03]│
  984.  │COND.ARJ     │Cln │Builder of conditional indexes like SUBNTX      │[1-03]│
  985.  │DBSCN2.ARJ   │Cln │Screen designer generator                       │[1-05]│
  986.  │HGLASS.ZIP   │Cln │Hour glass for indication of index progression  │[1-04]│
  987.  │INDXSL.ARJ   │Cln │User Fields selection builder for index generate│[1-03]│
  988.  │IOBASYS9.ARJ │Cln │Demo of S87 library and calling Clipper from C  │[1-03]│
  989.  │MK30.ARJ     │Cln │Mouse library demo version                      │[1-03]│
  990.  │MOVEGETS.ARJ │Cln │GETSYS change for moving between gets via VALID │[1-03]│
  991.  │NFDESC2.ARJ  │Cln │NanForum library description list               │[1-06]│
  992.  │NFLIB2.ARJ   │Cln │NanForum library main file                      │[1-06]│
  993.  │NFSRC2.ARJ   │Cln │NanForum library Source files                   │[1-06]│
  994.  │NOTATION.ARJ │Cln │Complete text of article about hungarian notat. │[1-04]│
  995.  │PACKUP.ARJ   │Cln │ASM source of PACK/UNPACK replacement SCRSAVE.. │[1-04]│
  996.  │POPUPCAL.ARJ │Cln │Popup calender                                  │[1-05]│
  997.  │READPW.ARJ   │Cln │GETSYS change for password invisible reader     │[1-03]│
  998.  │SCRSAVE.ARJ  │Cln │Screen AntiBurning utility (inactivity snake)   │[1-05]│
  999.  │SOUND.ARJ    │Cln │Multiple TONE() used as one SOUND function      │[1-06]│
  1000.  │SYMBOL.ARJ   │Cln │Dumper of symbol tables of Summer87 .EXE        │[1-03]│
  1001.  │TBWHL4.ARJ   │Cln │WHILE browsing using TBROWSE, well commented    │[1-06]│
  1002.  │VSIX711.ARJ  │Cln │Vernon Six Clipper utilities and library        │[1-05]│
  1003.  └─────────────┴────┴────────────────────────────────────────────────┴──────┘
  1004.  
  1005.  Src can be:
  1006.      Cln     File is accesible on ClipperNet
  1007.      Cbs     File is accesible in HQ BBS of CLipper BBS Magazine
  1008.  
  1009.  
  1010.  -----------------------------------------------------------------------------
  1011.  
  1012.  
  1013.                             ClipperNet - DIAL.CLN
  1014.  
  1015.  CLIPBBS 1-07                   Page 20                   8 Oct 1991
  1016.  
  1017.  
  1018.  File Name:      DIAL.CLN
  1019.  Other Names:
  1020.  
  1021.  File Size:      1,791 bytes
  1022.  File Contents:
  1023.                  DIAL.PRG           4297
  1024.  
  1025.  Dialer program written for CLIPPER 5.0 with many back steps coming from
  1026.  fact that author was for sure Summer87 programmer. It's using ONLY Clipper
  1027.  code, nothing from any other language. FOPEN is used for opening of COM
  1028.  port, and FWRITE for putting all AT commands on this. Easy and limited
  1029.  of course.
  1030.  
  1031.  .DD.
  1032.  
  1033.  -----------------------------------------------------------------------------
  1034.  
  1035.  
  1036.                             ClipperNet - GSR151.ARJ
  1037.  
  1038.  File Name:      GSR151.ARJ
  1039.  Other Names:
  1040.  
  1041.  File Size:      140,879 bytes
  1042.  File Contents:
  1043.                  GSR.DOC           16478
  1044.                  GSR.EXE          148300
  1045.                  GSR.SDA            1552
  1046.                  GSRAVOID.DBF        141
  1047.  
  1048.  This, big set of files, is really needed utility of Clipper programmer.
  1049.  Global search and replace.
  1050.  
  1051.  GSR now works on ANY size file. You may select a single file, or a group of
  1052.  files to operate on. You specify what text to look for, and what text to
  1053.  replace it with. Your search can be either case sensitive or not. You may
  1054.  either view each occurance, to verify the change, or have GSR automatically
  1055.  make all replacements for you.
  1056.  
  1057.  The search and/or replace string can be read from a disk file allowing you
  1058.  to search for and replace binary or text strings made with your choice of
  1059.  editor. In any case, if you choose to make the replacements, your original
  1060.  file will be saved with the extension .GSR. Subsequent changes will
  1061.  increment the .GSR extension, with up to 99 changes kept on any single file
  1062.  name. Like .gsr .gs1 .gs2 up to .g99
  1063.  
  1064.  Find all occurances of any text and replace it with other text.  Rename an
  1065.  existing variable across many programs.  Change a copyright notice.
  1066.  Change a client name when you are recycling code.  and many more.....
  1067.  
  1068.  
  1069.  .DD.
  1070.  
  1071.  -----------------------------------------------------------------------------
  1072.  
  1073.  
  1074.  CLIPBBS 1-07                   Page 21                   8 Oct 1991
  1075.  
  1076.  
  1077.                             ClipperNet - KF_LOKUP.ARJ
  1078.  
  1079.  File Name:      KF_LOKUP.ARJ
  1080.  Other Names:
  1081.  
  1082.  File Size:      12,028 bytes
  1083.  File Contents:
  1084.                  KF_LKUP.PRG       18889
  1085.                  KF_PPDBF.PRG       4584
  1086.                  KF_UTIL.PRG       13340
  1087.                  READ.ME            4106
  1088.  
  1089.  Set of lookup function related to relations between databases.
  1090.  Documentation is too less descriptive and i hadn't enough of patience to
  1091.  scan through source codes...
  1092.  
  1093.  Contains some usefull conversion functions also and two functions for
  1094.  saving and restoring database status on stack (made by static variable of
  1095.  course).
  1096.  
  1097.  .DD.
  1098.  
  1099.  -----------------------------------------------------------------------------
  1100.  
  1101.  
  1102.                             ClipperNet - OOPSCL5.ARJ
  1103.  
  1104.  File Name:      OOPSCL5.ARJ
  1105.  Other Names:
  1106.  
  1107.  File Size:      2,826 bytes
  1108.  File Contents:
  1109.                  CLASSES.PRG        4387
  1110.                  DEMO.PRG           2685
  1111.                  OOPS.H             1465
  1112.  
  1113.  Another version of _pseudo_ objects. this one is very small and very
  1114.  simple, therefore nice to learn about how to make pseudo objects. It's
  1115.  known, that pitty use of preprocessor can create pseudo objects which are
  1116.  in fact array keeping all needed information.
  1117.  
  1118.  .DD.
  1119.  
  1120.  -----------------------------------------------------------------------------
  1121.  
  1122.  
  1123.                             ClipperNet - PAT1.ARJ
  1124.  
  1125.  File Name:      PAT1.ARJ
  1126.  Other Names:
  1127.  
  1128.  File Size:      PAT1.ARJ
  1129.  File Contents:
  1130.                  ORIGIN.ASM         3404
  1131.                  ORIGIN.OBJ          170
  1132.                  PAT1.DOC           1035
  1133.  CLIPBBS 1-07                   Page 22                   8 Oct 1991
  1134.  
  1135.  
  1136.  PATCH number one for Nanforum Toolkit Library version 2.0.
  1137.  
  1138.  ORIGIN.ASM is replacement for the same named file in sources, ORIGIN.OBJ is
  1139.  possible just use as replace for .LIB file (LIB -+ORIGIN.OBJ).
  1140.  
  1141.  Function for returning location of .EXE was returning normally garbage,
  1142.  this is fix.
  1143.  
  1144.  .DD.
  1145.  
  1146.  -----------------------------------------------------------------------------
  1147.  
  1148.  
  1149.                             ClipperNet - POWER10.ARJ
  1150.  
  1151.  File Name:      POWER10.ARJ
  1152.  Other Names:
  1153.  
  1154.  File Size:      138,668 bytes
  1155.  File Contents:
  1156.                  LISEZ.MOI          2560     POWERCOM.MEM       1706
  1157.                  POWER.INS            95     POWER.NG         214796
  1158.                  GO.BAT             2262     NOSILVER.OBJ       3638
  1159.                  POWER.CH           3898     POWER.PRG         35142
  1160.                  POWER.LIB        236419     POWERCOM.PRG      11718
  1161.                  POWER.MEM          1706
  1162.  
  1163.  Another library. Pitty is, that ALL about this library is written ONLY and
  1164.  ONLY in FRENCH language. And i'm not so good in this (actually my knowledge
  1165.  of french is zero). From function names it looks nice, but author could
  1166.  choose better language for distributing library worldwide :-)
  1167.  
  1168.  .DD.
  1169.  
  1170.  -----------------------------------------------------------------------------
  1171.  
  1172.  
  1173.                             ClipperNet - SCANCODE.ARJ
  1174.  
  1175.  File Name:      SCANCODE.ARJ
  1176.  Other Names:
  1177.  
  1178.  File Size:      2,154 bytes
  1179.  File Contents:
  1180.                  SCANCODE.DBF       5719
  1181.  
  1182.  Database file contains list of scan codes of keyboard for use in DOS
  1183.  services. It is NOT the same as INKEY() codes!
  1184.  
  1185.  .DD.
  1186.  
  1187.  -----------------------------------------------------------------------------
  1188.  
  1189.  
  1190.                             ClipperNet - SHELP50A.ARJ
  1191.  
  1192.  CLIPBBS 1-07                   Page 23                   8 Oct 1991
  1193.  
  1194.  
  1195.  File Name:      SHELP50A.ARJ
  1196.  Other Names:
  1197.  
  1198.  File Size:      124,163 bytes
  1199.  File Contents:
  1200.                  DEMO.BAT           1981     MVCLIP50.LIB      21621
  1201.                  HINTS.TXT          3534     ORDER.FRM          1396
  1202.                  HELP.PRG           5697     SHELP50.LIB      206279
  1203.                  HELPCON.PRG        3742     HELPDEMO.PRG       5334
  1204.                  SCREENS.DBT       29601     PROJECT.HLP        2727
  1205.                  SYSHELP.DBT       76399     L.LNK               192
  1206.                  HELPLIB.PRG        7670     HSETUP.HLP            8
  1207.                  SUPERV25.DOC        198     CLIPPER.501          15
  1208.                  HELPMGR.PRG        5113     VERSION.50           26
  1209.                  SHELP.MGR           913     PROJECT.PRJ         238
  1210.                  SCREENS.HLP         396     HELPMGR.DBF         813
  1211.                  SYSHELP.HLP        6410     PRINT.ME          13266
  1212.                  SYSLINK.HLP         690
  1213.                  SHELP.REF         41809
  1214.  
  1215.  Super Help for Summer87 and Clipper 5.01 both. It's able to generate field
  1216.  or conceptual level help. Support for project management, creating help
  1217.  screens, linking help windows, creating of help index, windowing effects...
  1218.  
  1219.  Seems like very good help. Maybe later i will do some testings...
  1220.  
  1221.  ------10 minutes later------
  1222.  
  1223.  After trying to make a demo program included.
  1224.  
  1225.  1) authors are dreaming everybody has BLINKER and link script is
  1226.     only for BLINKER. Must be changed
  1227.  2) CLIPPER compilation of programs is missing some switches and
  1228.     bombing immediately out. +++NEEDS  /M ++++++
  1229.  3) List of libraries must include BOTH .LIB presented in file
  1230.     otherwise one will get list of LOT missing....
  1231.  4) After this it's working, but my patience to totally strange
  1232.     system of screens was not enough long....
  1233.  
  1234.  .DD.
  1235.  
  1236.  -----------------------------------------------------------------------------
  1237.  CLIPBBS 1-07                   Page 24                   8 Oct 1991
  1238.  
  1239.  
  1240.  =============================================================================
  1241.                                     CLIPBBS
  1242.  =============================================================================
  1243.  
  1244.  
  1245.                               CLIPBBS Distribution
  1246.    
  1247.    CLIPBBS is special magazine about CLIPPER and CLIPPERing (or about 
  1248.    another related problems and xBASE languages). This magazine is for
  1249.    free and articles aren't honored. Nobody can make a profit from the
  1250.    distribution of this magazine.
  1251.    
  1252.    CLIPBBS can be freely downloaded and uploaded to any BBS or any other
  1253.    public system without changes of original contents or number of files
  1254.    in original archive (kind of archive can be changed, but we are sup-
  1255.    porting ARJ archive because is best and smallest).
  1256.    If you are interested in CLIPBBS and would like to become a DISTRIBUTION
  1257.    site, contact publisher on 2:285/608@fidonet or 27:1331/4412@signet
  1258.    or just call to 31-10-4157141 (BBS, working 18:00->08:00, 2400bps) or
  1259.    voice to 31-10-4843870 in both cases asking for DANIEL (Docekal).
  1260.    
  1261.    Distribution sites:
  1262.    
  1263.    United Kingdom
  1264.        Welsh Wizard, SYSOP Dave Wall, phone 44-656-79477
  1265.    
  1266.    United States of America
  1267.        The Southern Clipper, SYSOP Jerry Pults, phone 1-405-789-2078
  1268.  
  1269.  -----------------------------------------------------------------------------
  1270.  CLIPBBS 1-07                   Page 25                   8 Oct 1991
  1271.  
  1272.  
  1273.                       How to write articles in CLIPBBS?
  1274.    
  1275.    
  1276.    Submission of articles to CLIPBBS is really easy:
  1277.      Maximum of 78 characters per line, as long or as short as you like
  1278.      ASCII text.
  1279.      Choose from the list of extension which most describes your text, or
  1280.      just name it .ART as ARTicle and send it to publisher or to any
  1281.      distribution site via modem to BBS or with mailer as file attach.
  1282.      Article will come automatically appear in the next free issue.
  1283.    
  1284.    Extensions are:
  1285.    
  1286.            Articles (anything)             .ART
  1287.            Software                        .SOF
  1288.            News                            .NEW
  1289.            Question and Answers            .Q&A
  1290.            ANOMALIES and their comments    .ANO
  1291.            Letters to editors              .LET
  1292.            Advertisement                   .ADV
  1293.            Wanted                          .WAN
  1294.            Comments                        .CMS
  1295.            DUMP from conferences           .DMP
  1296.            Clipper Net                     .CLN
  1297.            
  1298.    That's all at the moment, there will probably be changes later, as the
  1299.    magazine evolves. If you have any ideas for a new section of CLIPBBS,
  1300.    please tell us, or just write an article about it.
  1301.    
  1302.    Daniel, publisher
  1303.  
  1304.  -----------------------------------------------------------------------------
  1305.