home *** CD-ROM | disk | FTP | other *** search
/ Black Box 4 / BlackBox.cdr / clipper / clbbs101.arj / CLBBS101.TXT
Encoding:
Text File  |  1991-08-31  |  44.8 KB  |  1,047 lines

  1.                                                             
  2.        ▓▓▓▓   ▓▓      ▓▓▓▓   ▓▓▓▓▓▓  ▓▓▓▓▓▓  ▓▓▓▓▓▓   ▓▓▓▓    
  3.       ▓▓░░▓▓  ▓▓░      ▓▓░░   ▓▓░░▓▓  ▓▓░░▓▓  ▓▓░░▓▓ ▓▓░░▓▓   
  4.      ▓▓░░  ░░ ▓▓░      ▓▓░    ▓▓░ ▓▓░ ▓▓░ ▓▓░ ▓▓░ ▓▓░▓▓▓  ░░  
  5.      ▓▓░      ▓▓░      ▓▓░    ▓▓▓▓▓░░ ▓▓▓▓▓░░ ▓▓▓▓▓░░ ▓▓▓     
  6.      ▓▓░      ▓▓░      ▓▓░    ▓▓░░░░  ▓▓░░▓▓  ▓▓░░▓▓   ░▓▓▓   
  7.       ▓▓  ▓▓  ▓▓░      ▓▓░    ▓▓░     ▓▓░ ▓▓░ ▓▓░ ▓▓░▓▓  ▓▓░  
  8.        ▓▓▓▓░░ ▓▓▓▓▓▓  ▓▓▓▓   ▓▓▓▓    ▓▓▓▓▓▓░░▓▓▓▓▓▓░░ ▓▓▓▓░░  
  9.         ░░░░   ░░░░░░  ░░░░   ░░░░    ░░░░░░  ░░░░░░   ░░░░   
  10.                                                             
  11.   Volume 1, Number 1                                4 February 1991
  12.                  (c) Daniel Doçekal, All Rights Reserved
  13.   
  14.      BBS Clipper magazine, published RANDOMLY, later WEEKLY......
  15.   
  16.      Some from materials are coming from scanning CLIPPER echo
  17.      which is carying FidoNet. Mostly this echo is and will be
  18.      source of often asked Question and Answers because can be
  19.      very helpfull in this small moment.
  20.     
  21.      Other materials, which are fully signed or abbreviated are
  22.      copyrighted material of appropriate persons.
  23.   
  24.      Publisher is not responsible for other authors....
  25.      Published materials don't have to be opinion of publisher..
  26.   
  27.  
  28.  
  29.                                Table of Contents
  30.  
  31.   1. EDITORIAL  ..........................................................  1
  32.      First letter from editor&publisher  .................................  1
  33.   2. ARTICLES  ...........................................................  3
  34.      .PPO? OOPs, CLIPPER 5.0 has a preprocessor!  ........................  3
  35.      To be aware in 5.01?  ...............................................  5
  36.   3. QUESTIONS AND ANSWERS  .............................................. 13
  37.      4DOS and CLIPPER  ................................................... 13
  38.      Clipper books and magazines  ........................................ 13
  39.      Needed fix of BNU for hanging in 5.01?  ............................. 16
  40.      Discovering GHOST empty records  .................................... 16
  41.      Turbo C++ and Clipper  .............................................. 16
  42.   4. COMMENTS  ........................................................... 19
  43.      Distribution sites and how to get CLIPBBS  .......................... 19
  44.      How to send an article to CLIPBBS  .................................. 20
  45.  
  46.                                    - - - - -
  47.   CLIPBBS 1-01                   Page 1                    4 Feb 1991
  48.  
  49.  
  50.   ===========================================================================
  51.                                    EDITORIAL
  52.   ===========================================================================
  53.  
  54.  
  55.   Welcome into CLIPBBS magazine,
  56.   
  57.   yes, just another Clipper magazine from set of New Clipper magazines
  58.   apperaring slowly in many countries. But, this one is little bit
  59.   different, it's used especially in BBS (Bulletin Board System)
  60.   environment and is distributed ONLY electronicaly. Yes, i know, here is
  61.   already Nantucket News or Reference for CLipper or how this two are
  62.   called and they are also available in electronic form, but i don't have
  63.   a good feeling from them because of lack of interest in pure problems
  64.   of new Clipper freaks and lack of reactions to some common problems.
  65.   
  66.   Few weeks ago i decided to make a new Clipper magazine. REally don't
  67.   know at this moment if it's good idead or how long will be alive,
  68.   because it's magazine of all us who are Clipper programmers or users or
  69.   just fans and all articles here aren't honored and must be written by
  70.   somebody from us.
  71.   
  72.   I really don't know at this moment how this magazine will go to you,
  73.   reader, but hope that i will find more people which will do uploads to
  74.   several bulletin boards, or distribute this magazine to any other
  75.   countries. Here is NOT limitation about distribiution, then feel free
  76.   and put this magazine whenewer do you want, only keep original files in
  77.   archive of any type without changing them.
  78.   
  79.   For all of you who are able to write something to this magazine, please
  80.   do this and don't be afraid about your bad english (mine is also not
  81.   quite perfect, but i'm czechoslovakian and not englishman) or other
  82.   things. Just send me this article, it will goes here if only little
  83.   readable.
  84.   
  85.   I believe this can be nice magazine with lot of reactions from side of
  86.   readers. I'm also keeping eye on CLIPPER echo in FidoNet, Clipper ECHO
  87.   in GT environment, Nantucket Bulleting Board called Clipper World, i'm
  88.   also a member of ClipNet, so called clipper distribution network and i
  89.   hope i some next month i will become as member of Compuserve also.
  90.   Therefore i have a quite lot of sources of information, but i don't
  91.   want to write all articles alone. Please do also some nice for all
  92.   other Clipper programmers and nice and interesting facts put here.
  93.   
  94.   Ending idea is, that this magazine will come out WEEKLY. At this
  95.   beginning really don't know how often will come out, but i'm thinking
  96.   about 14days interval between numbers, but all this depends from
  97.   articles coming or from time which i will have to write new ones.
  98.   
  99.   Purpose of this magazine is to inform all Clipper programmers about
  100.   CLipper itself. Question and Answer part of this magazine will continue
  101.   with putting answers for often needed question and often problems with
  102.   sometime getting old of them again in live because of passing out old
  103.   numbers. Anyway, all number and also single articles will be available
  104.   on my BBS or mailer for download or for request. And if anyone will
  105.   ask in CLIPPER echo, i will repost all this informations for everybody
  106.   CLIPBBS 1-01                   Page 2                    4 Feb 1991
  107.  
  108.  
  109.   using. All coming information from Nantucket (if they will) i will also
  110.   put here and so on. Sometime maybe also information about other xBase
  111.   languages, but only when it has something to do with Clipper.
  112.   Advertisements are welcome (commercial also!) but they MUST give
  113.   something nice to Clipper programmers and so on.
  114.   
  115.   I'm planning also nice serie of articles about files in ClipNet and
  116.   other CLipper files available in many BBS with some short or long
  117.   descriptions about those files, therefore everybody can collect
  118.   complete descriptions about available files for downloads from some
  119.   BBS. If anyone want to do this about own BBS, will be welcome. World is
  120.   open to discuss everything via modems, then why not.
  121.   
  122.   Information about commercial products will be here also, because i'm
  123.   missing them in Clipper echos around (they are prohibited, but i think
  124.   we all need them and first we need informations about them). Everyone
  125.   will can then compare some products and take decisions about their
  126.   using and buying.
  127.   
  128.   Information about how to give articles to this magazine is possible to
  129.   see in end of magazine.
  130.   
  131.   Have a nice reading (HANR) and see you soon.....
  132.   (.DD.)
  133.  
  134.   ---------------------------------------------------------------------------
  135.   CLIPBBS 1-01                   Page 3                    4 Feb 1991
  136.  
  137.  
  138.   ===========================================================================
  139.                                    ARTICLES
  140.   ===========================================================================
  141.  
  142.  
  143.                 .PPO? OOPs, CLIPPER 5.0 has a preprocessor!
  144.   
  145.   
  146.   A few weeks ago i got a file called CL5IEO.ZIP inside of which was one
  147.   .NG and one .TXT file. Inside of those files was something for what lot
  148.   of us, CLIPPER 5.0 programmers, is looking a long and long time. List
  149.   of internal errors reported by CLIPPER 5.0. Gotcha, not developed by
  150.   NANTUCKET, it is assembled from COMPUSERVE comments by Terry McConnell
  151.   - thank to this man.
  152.   
  153.   But and But. Not every inside of this is true. One really GOLD example
  154.   which i'm explaining there is discovering another MAGIC function of
  155.   CLIPPER 5.0.
  156.   
  157.   A preprocessor. Dear reader, when you are compiling program, are you
  158.   thinking about preprocessor? Not? Really not? That's a biggest mistake
  159.   which you can make, because Nantucket prepared for you nicest game on
  160.   the world. Try to get your program and try to use CLIPPER /P for see
  161.   how funny result you can get.
  162.   
  163.   Back to point. CL5IEO.TXT is describing Internal Error #666 on
  164.   SetColor(). Nice example there is producing really this error on EVERY
  165.   run (not like as other Internal Error, sometime).
  166.   
  167.   Example:
  168.   
  169.   line := 0
  170.   set color to ("$$$$$$$$$$$") ; ? ++line //1
  171.   x := setcolor()              ; ? ++line //2
  172.   ? "Setcolor return ", x      ; ? ++line //3
  173.   set color to &x              ; ? ++line //4
  174.   z := "@@@@@@@@@@@@"          ; ? ++line //5
  175.   set color to &Z              ; ? ++line //6
  176.   set color to "z+/z/t/m/q"    ; ? ++line //7
  177.   ? setcolor()                 ; ? ++line //8
  178.   m = "z+/z/t+/m/q"            ; ? ++line //9
  179.   setcolor(m)                  ; ? ++line //10
  180.   set color to &m              ; ? ++line //11
  181.   ? setcolor()                 ; ? ++line //12
  182.   set color to "w/n,w/n,w/n,w/n,w/n,w/n"
  183.   setcolor("W/n,w/n,w/n,w/n,w/n,w/n,w/n")
  184.   
  185.   
  186.   Additional comments in original text is:
  187.   
  188.           Last executed line is 8, and SetColor(0) error is on line 9.
  189.   
  190.   Absolutely wrong, author of this example is not counting with magic
  191.   which will make preprocessor! Of course, every normal people will
  192.   expect translation to preprocessed source really as you can see program
  193.   example above. Reality is different:
  194.   CLIPBBS 1-01                   Page 4                    4 Feb 1991
  195.  
  196.  
  197.   line := 0
  198.   SetColor( "$$$$$$$$$$$" )                       ; QOut( ++line )
  199.   x := setcolor()                                 ; QOut( ++line )
  200.   QOut( "Setcolor return ", x )                   ; QOut( ++line )
  201.   SetColor( "&x              <end of line> ? ++line" )
  202.   z := "@@@@@@@@@@@@"                             ; QOut( ++line )
  203.   SetColor( "&Z              <end of line> ? ++line" )
  204.   SetColor( '"z+/z/t/m/q"    <end of line> ? ++line' )
  205.   QOut( setcolor() )                              ; QOut( ++line )
  206.   m = "z+/z/t+/m/q"                               ; QOut( ++line )
  207.   setcolor(m)                                     ; QOut( ++line )
  208.   SetColor( "&m              <end of line> ? ++line" )
  209.   QOut( setcolor() )                              ; QOut( ++line )
  210.   SetColor( '"w/n,w/n,w/n,w/n,w/n,w/n"' )         //*//
  211.   setcolor("W/n,w/n,w/n,w/n,w/n,w/n,w/n")
  212.   
  213.   As everybody now can see, all SET COLOR TO commands with "&" operator
  214.   or with direct string ("...") parameter are eating complete end of
  215.   line! It means, all ? ++line commands are eaten and unhappy program is
  216.   counting ONLY to 8 and not to 12 as author expected!
  217.   
  218.   It finally means - error is on line marked with //*// in .PPO list and
  219.   not in line signed with //9 in original program. Internal Error in this
  220.   case is on right place, because of totally crazy color string specifying
  221.   six color codes!
  222.   
  223.   Another question at this moment is - how Nantucket can produce
  224.   Preprocessor which is eating remain of line when is used operator for
  225.   multiple commands on line together with macro operator.
  226.   
  227.                                GOLD RULE IS
  228.   Never trust to your program, because is preprocessed by Cliper
  229.   preprocessor.
  230.   (.DD.)
  231.  
  232.   ---------------------------------------------------------------------------
  233.   CLIPBBS 1-01                   Page 5                    4 Feb 1991
  234.  
  235.  
  236.                            To be aware in 5.01?
  237.              Some comments about 5.01 problems and advantages
  238.               (very old article coming after release of 5.01)
  239.   
  240.   It's now a few weeks ago, i got long time waiting 5.01 upgrade of
  241.   Clipper 5.0. Thanks god, this 'upgrade' is solving most important
  242.   problems which had a reason for stop producing our programs in Clipper
  243.   5.0.
  244.   
  245.   The new release of Clipper 5.01 is not ONLY upgrade or 'bug' (anomaly)
  246.   fix, but it's mostly another version of Clipper and i think, numbering
  247.   it like 5.01 isn't really giving imagine about number of changes
  248.   inside.
  249.   
  250.   This article is describing few things which Clipper programmer have to
  251.   be aware in Clipper 5.01. First i must say, I BELIEVE in Clipper 5.01
  252.   like in normal and valid programming device of programmer. This same i
  253.   couldn't say about 5.0, because in final stage of using this i missed
  254.   all trust to this version. Then, don't be aware that your 5.01 will not
  255.   do what you need, it will do, but still is better to know where is a
  256.   problem hidden.
  257.   
  258.   Some from comments which i will have to Clipper 5.01 are mostly
  259.   'cosmetic' changes and somebody will have fun after reading them, but
  260.   i'm every time very critic to programs which i'm using.  Therefore i
  261.   will include some small things on the same way as things bigger. Some
  262.   comments are only WARNING not to be mistaken from your side when using
  263.   something and maybe can save you some time of discovering that you did
  264.   some kind of mistake.
  265.   
  266.                               Keyboard codes
  267.   
  268.   When received 5.01 my expectation was, that INKEY.CH was expanded to
  269.   some missing keyboard codes. Not only codes from extended keyboard
  270.   (because they are discutable), but also codes for normal keyboard
  271.   which weren't in 5.0 INKEY.CH.
  272.   
  273.   Truth is different, INKEY.CH is still missing extended codes and from
  274.   basic codes, K_SPACE ,just easy code is NOT included in INKEY.CH
  275.   
  276.        Solving:
  277.             update your INKEY.CH with (example):
  278.                  #define   K_SPACE        20
  279.                  #define   K_CTRL_UP      397
  280.                  #define   K_CTRL_DOWN    401 ....
  281.   
  282.   Another problem which somebody could expect that have to be solved is
  283.   fact, that all SETKEY sets aren't working when one is using INKEY()
  284.   function. Because INKEY() is just ONLY reading keyboard. In all other
  285.   places where keyboard is read are all SETKEY sets executed correctly.
  286.   But, when programmer will start to use INKEY() in more places, then
  287.   will have problem, all SETKEY sets aren't valid and programmer MUST
  288.   take care of them by special routines or DO CASE checks. My expectation
  289.   that this nonlogical fact will be corrected is wrong. INKEY() is still
  290.   don't recognizing SETKEY sets.
  291.   
  292.   CLIPBBS 1-01                   Page 6                    4 Feb 1991
  293.  
  294.  
  295.        Solving:
  296.             don't use INKEY(), you easy can all INKEY() callings
  297.             replace with call to new function:
  298.   
  299.             Function MyInkey(nnn)
  300.             local     value   := 0 , cBlock
  301.             while .t.
  302.             if valtype(nnn)!="N"
  303.                  value:=inkey()      // inkey WITHOUT parameter
  304.             else
  305.                  value:=inkey(nnn)   // inkey WITH parameter
  306.             endif
  307.             if (cBlock:=setkey(value))!=NIL
  308.                  Eval(cBlock)        // test if valid SETKEY
  309.                  loop                // and then continue
  310.             endif
  311.             return (value)
  312.   
  313.        This possible (and easy) solving has this advantages:
  314.        -    fully compatible with INKEY() function in parameter passing
  315.             and value returning
  316.        -    taking care of your SETKEY sets and executing (better
  317.             evaluating) them without special testings or actions
  318.        -    all LASTKEY() stuff is still the same because of original
  319.             INKEY() using
  320.   
  321.                             New RTLINK version
  322.                             INCREMENTAL LINKING
  323.   
  324.   Another expectation which i had - incremental linking in new version of
  325.   Clipper will work. Truth is again different. DO NOT use incremental
  326.   linking. It's working successfully only for few first links and then
  327.   programmer will receive nice set of error from program. Probably will
  328.   then start looking to errors in own program, but reality is -
  329.   incremental linking is NOT working.
  330.   
  331.   First, second and sometime third link is WITHOUT problems, but after
  332.   this you can receive errors of this kind:
  333.   
  334.        Syntax error: +
  335.             Be sure, that on your program line where report is reported
  336.             doesn't exist a "+" operation
  337.        Syntax error
  338.             Just funniest error, because it's SYNTAX error on compiled
  339.             and linked code. Maybe there is processor of your PC
  340.             reporting non existed function....
  341.        Cannot create overlay file: !^%#@(*
  342.             Really, i cannot reproduce file name reported by overlay
  343.             manager, because this magazine will not probably have all
  344.             control and graphical symbols which one can get in IBM PC
  345.             environment.
  346.   
  347.   All this errors you will get in part of code which was a subject of
  348.   changes, everything other (not changed) is still working pretty
  349.   perfect.
  350.   
  351.   CLIPBBS 1-01                   Page 7                    4 Feb 1991
  352.  
  353.  
  354.   FAX which i then sent to Nantucket, together with uploads of these
  355.   error reports to Nantucket special message area on CLIPPER WORLD BBS
  356.   are WITHOUT answers.
  357.   
  358.   FAX to Pocket Soft Inc., authors of RTLINK, is with answer:
  359.   │    RTLINK version shipped with Clipper 5.01 is working with
  360.   │    INCREMENTAL linking without problems. It passed our and Nantucket
  361.   │    test suites. If you have some problems, please contact
  362.   │    Nantucket.....
  363.   
  364.   Still there is one positive thing which stopped make me angry to fact
  365.   that Incremental isn't working. Prelinked Libraries stuff is working
  366.   ABSOLUTELY perfect (not in 5.0 there wasn't possible to use it) and
  367.   therefore my link time is just few second only for my OBJ files and all
  368.   other 350KB of Clipper runtime is permanently sitting on my disc.
  369.   Another advantage of this is of course fact, that some from small
  370.   utilities for my program can be long about 10 or 20 kilobytes of .EXE
  371.   file and that is really very nice (before between 200 and 400
  372.   kilobytes).
  373.   
  374.   Another stupidity of RTLINK which is making me really angry is fact,
  375.   that one still cannot press Ctrl Break for stop linking somewhere in
  376.   middle of linking. One MUST wait till RTLINK will display something to
  377.   screen (and this can be after 10 or 15 minutes from moment when one
  378.   pressed Ctrl Break). Only at moment of displaying will DOS see your
  379.   Ctrl Break. RTLINK will NEVER look for this key. Solving of this stupid
  380.   fact is only one. Use /VERBOSE:2 switch for your Rtlink and then there
  381.   will be continuous flow of text on screen and RTLINK will stop when you
  382.   will need it.
  383.   
  384.                               Sample program
  385.   
  386.   Hope you can remember that there are some sample program (directory
  387.   CLIPPER5\SOURCE\SAMPLES in standard installation).  Unfortunately
  388.   somebody can use some from them inside of programs together with own
  389.   code. Especially nice is sample allowing to have browsing and selecting
  390.   facility for files on your disc - FILEMAN.
  391.   
  392.   But be aware when you are using this program. You MUST update to new
  393.   version or change some lines in your old one, because this old one will
  394.   NOT work with new CLIPPER 5.01. Why?
  395.   
  396.   Because of change in SELECT command is no longer possible to have
  397.   command like this:  Select  arrray[ subscript ]
  398.   
  399.   In 5.0 this one was without problems working, in 5.01 this one is
  400.   giving error - ALIAS array NOT EXIST. Yes, of course, it's absolutely
  401.   logical, because there MUST be:
  402.   
  403.             Select (array[ subscript ])
  404.   
  405.   SELECT command syntax is:
  406.             SELECT area name
  407.             SELECT area number
  408.   
  409.   Then of course SELECT is right when is interpreting 'array' like area
  410.   CLIPBBS 1-01                   Page 8                    4 Feb 1991
  411.  
  412.  
  413.   name. But and but, old select did this fact different. Then be aware of
  414.   your select commands in your sources.
  415.   
  416.   For them which are using TBROWSE objects on basis from samples coming
  417.   with CLIPPER 5.0 (TBDEMO..) is there another recommendation. Take a
  418.   closer look to new TBDEMO, because there are few things solved more
  419.   better than in previous version.
  420.   
  421.   Be very carefully when using DBU supplied with Clipper 5.01. This
  422.   program is coming in some cases to never ending cycle of WHILE command.
  423.   Exactly:
  424.   
  425.        Open EMPTY database
  426.        Go to do BROWSE of this database
  427.        Start typing new values for record
  428.             And then wait forever.
  429.   
  430.        Point is, that you MUST first press INS key for insert NEW record.
  431.        But when one will forget did this?
  432.   
  433.                              CLIPPER DEBUGGER
  434.   
  435.   CLD is now great program and i'm really using it every day.  Previous
  436.   CLD was unusable because of memory problems of CLIPPER (no one my
  437.   application was able to fit in memory together with CLD.EXE nor
  438.   CLD.LIB). There is lot of improvements in this new debugger, but of
  439.   course there are same nonlogical and non working things:
  440.   
  441.        Totally new HELP system for CLD is enough descriptive, but not
  442.        CONTENTS SENSITIVE. When one will press F1 (Help key), then will
  443.        get first page of help and MUST scan through all of them to page
  444.        which need. In case of small memory left is this process VERY slow
  445.        (because of lot of disc swaps).
  446.   
  447.        Don't try to use HELP system when you are editing (for example)
  448.        colour codes or path string for your source files.  If one will
  449.        press F1 at this moment,then will get some graphics codes which
  450.        are equal to code of F1, but will not get help. Somebody who made
  451.        it forget that F1 is help and not a valid key for editing
  452.        characters...
  453.   
  454.        One must still be carefully when specifying command line options
  455.        for SPLIT and EGA/VGA screen.  CLD /S/50 and CLD /50/S is really
  456.        not the same for CLD..  Just use spaces between them and then it's
  457.        working well (CLD /S /50 is the same as CLD /50 /S)
  458.   
  459.        Be aware of using ? row() or ? col(). Both of them will return not
  460.        value from YOUR program, but value from inside of Debugger.
  461.        Debugging a program and needs to know values of cursor position is
  462.        at this moment totally impossible.
  463.   
  464.        Some from people using CLD will report - When i pressed F8, then
  465.        CLD didn't make steps through my procedure, he just did action for
  466.        F10 (execute procedure). Be aware at this moment if your .OBJ
  467.        files ALL had specified /B switch for CLIPPER command line. If
  468.        not, then CLD will not warning you of course, will just step
  469.   CLIPBBS 1-01                   Page 9                    4 Feb 1991
  470.  
  471.  
  472.        through. You can then be surprised and thinking what is wrong!
  473.   
  474.        There is IMPOSSIBILITY to debugging a code which is using #include
  475.        statements for include PART of CODE (not only #define and other
  476.        definitions). Because Clipper is allowing you to use #include for
  477.        normal part of program (with all commands...), then i'm expecting
  478.        that will be able to correct do debugging of this includes.
  479.        ABSOLUTELY not, when one will do this, will have a debugger step
  480.        cursor somewhere in .PRG file, but on wrong place of course,
  481.        because of mixup of line numbers. Small example of this:
  482.   
  483.        Program.prg
  484.        1    function Main()
  485.        2         #include "small.inc"
  486.        3         ? 'Hello this is NOT a first line of program'
  487.        4         ? 'and there will be a RETURN coming'
  488.        5    RETURN NIL
  489.   
  490.        File  SMALL.INC
  491.        1         ? 'This is a first line of program of course'
  492.        2         ? '-----------------------------------------'
  493.   
  494.        Of course, after compiling there is another program:
  495.        1    function Main()
  496.        2         ? 'THis is a first line of program of course'
  497.        3         ? '-----------------------------------------'
  498.        4         ? 'Hello this is NOT a first line of program'
  499.        5         ? 'and there will be a RETURN coming'
  500.        6    RETURN NIL
  501.   
  502.        CLD will start a debugging and display PROGRAM.PRG file on screen
  503.        with debugging step cursor on line "2" of PROGRAM.PRG file.
  504.        Executed instruction but will be a instruction from line "1" of
  505.        SMALL.INC. I'm so sure, that this stupid acting is possible to
  506.        eliminate just by better recognizing of includes and modifying
  507.        screen display routines of source code.
  508.   
  509.        There is of course EASY solving for this - NEVER use #include for
  510.        part of your code. All your code you can easy put to separate .OBJ
  511.        files and call them like function.  Then will CLD working GREAT.
  512.   
  513.        Possibility to use Alt-D function for stop program in working is
  514.        limited. If there will be for example:
  515.   
  516.             WHILE rlock()
  517.             ENDDO          (of course, this is a mistake. But i
  518.                            made it few time, just forgotten "!"
  519.                            negation)
  520.   
  521.        Then one will NOT be able to stop program and see what is working.
  522.        When i had this problem i did lot of looking what is wrong and
  523.        after LONG period i found that there is missing one negation for
  524.        condition.
  525.   
  526.   
  527.                              STATIC OVERLAYING
  528.   CLIPBBS 1-01                   Page 10                   4 Feb 1991
  529.  
  530.  
  531.   Lot from us were using static overlaying of CLIPPER 5.0 libraries to
  532.   solve memory problems. Roger Donnay supplied MEM50.LNK script for
  533.   including most bigger part of Clipper runtime to static overlays had
  534.   few problems (hanging because of RTLINK problems to handle memory), but
  535.   was working very nice.
  536.   
  537.   New CLIPPER 5.01 version of Clipper has totally changed all names of
  538.   function (really ALL and FULLY). The old MEM50.LNK then not working
  539.   because is fixed to old names. Maybe Donnay will come with new version
  540.   of this, but - there is NOT reason to use static overlays because
  541.   dynamic overlaying and memory management of RTLINK is now working and
  542.   your application will work probably better without static overlaying.
  543.   
  544.   Still, when somebody will try to adapt old MEM50.LNK to new names, then
  545.   will encounter one problem. Not problem to found new names (they are
  546.   easily detectable), but will receive "INTERNAL ERROR 999" which will
  547.   not be able to found in documentation (like all internal errors). Then
  548.   don't spend a time for static overlaying, there is no effect for this.
  549.   
  550.                             Memoedit() function
  551.   
  552.   A more comments i will give to MEMOEDIT() function.
  553.   
  554.   First problem which i had with Memoedit() in  Clipper 5.0 was a problem
  555.   that there IS NOT a way to access edited string from INSIDE of
  556.   Memoedit(). One can access ONLY original string, but edited (and
  557.   continuously changed) string is hidden somewhere in Clipper memory. I
  558.   reported this problem already to Nantucket a LONG time ago, the told
  559.   "will be solved in new version", but true is again different. And i'm
  560.   so sure, that this isn't so problem.
  561.   
  562.   In Clipper 5.0 there was a BIG problem with MemoEdit() function when
  563.   there was a very small free memory for your program (about 30KB after
  564.   loading program in memory). Then Memoedit in some cases did HANG of
  565.   whole system. Probably it had something to do with RTLINK inability to
  566.   handle proper overlaying when there was a small memory. This problem is
  567.   PARTIALLY out. One need more smaller memory to hang system with
  568.   Memoedit (10KB to 20KB). Hope, somebody will take care of this, because
  569.   to have hanging editor (yes, PE.EXE distributed with CLIPPER will hang
  570.   too) inside of application running just close to free memory is pity.
  571.   
  572.                             Memory(n) function
  573.   
  574.   Never take a care of value returned by Memory() function. When there is
  575.   30KB reported by Memory(1), then Memory(3) (run space) can report this
  576.   number:
  577.   
  578.             -1   (probably -1 as result of calculating)
  579.             768  just perfect, i have 640KB of memory in computer
  580.                  and RUN space is 768KB free
  581.   
  582.                               MENU functions
  583.   
  584.   One nice surprise i had after running our applications. I made a own
  585.   menuying system which was using FACT that cursor is staying just
  586.   immediately AFTER selected menu line. This one WAS true in Clipper 5.0
  587.   CLIPBBS 1-01                   Page 11                   4 Feb 1991
  588.  
  589.  
  590.   and this one IS NOT true in 5.01 I don't understand why 5.01 is putting
  591.   cursor on place of SET MESSAGE (never mind if there is MESSAGE or not)
  592.   and not logically to place after selected menu line.
  593.   
  594.   Then if your menu system is acting strange and you are getting sure
  595.   that MENU TO is still working the same, change your mind - it's
  596.   different.
  597.   
  598.                              STATIC functions
  599.   
  600.   Be very carefully when using STATIC functions. I had a static functions
  601.   used a parameter for ACHOICE() function for my own keyboard actions in
  602.   this MENU ACHOICE() choosing. ACHOICE is just NOT executing this
  603.   function when is STATIC. Unbelievable is, that there IS NOT error
  604.   message (not found function or ...), there is just NOT EXECUTING.
  605.   
  606.                                INCONSISTENCY
  607.   
  608.   One funny inconsistency of program language is in new Clipper 5.01
  609.   version. I found it when i was thinking:
  610.   
  611.        OK, there are  @ SAY .. COLOUR,  @ .. TO .. COLOUR command
  612.        (something new in 5.01, extension of @ command). Then there
  613.        OF COURSE is @ .. CLEAR .. COLOUR.
  614.        GOTCHA, there is NOT @CLEAR with COLOUR parameter. Maybe
  615.        somebody is thinking that CLEAR is without colour, but then
  616.        is wrong.
  617.   
  618.   
  619.                                COPY FILE TO
  620.   
  621.   Nice surprise of COPY FILE command is this case:
  622.   
  623.        there is a file:
  624.                  some text
  625.                  another texts
  626.                  lot of text
  627.                  <eof>
  628.   
  629.                  It means, file is ended with EOF character as is
  630.                  standard is DOS.
  631.   
  632.        Then is there command:
  633.                  COPY FILE <file> TO LPT1
  634.   
  635.        And result is:
  636.             Unrecoverable error: write error....
  637.   
  638.        Just, COPY FILE TO printer will NOT handle files which are
  639.        containing EOF character. Why? Because when COPY command is
  640.        writing something to printer port, then is doing this in block and
  641.        then is checking if returned number of really processed characters
  642.        is the same as return of passed character. DOS will of course NOT
  643.        COUNT _EOF_ character between processed characters and giving back
  644.        different number. And then will your program immediately fail with
  645.        "unrecoverable" error and return to DOS. I found this very
  646.   CLIPBBS 1-01                   Page 12                   4 Feb 1991
  647.  
  648.  
  649.        annoying. And from this moment i have to use RUN("copy ...")
  650.        command instead of normal and logical COPY FILE.
  651.   
  652.   
  653.   
  654.   (somewhere later, i want to continue with some comments about
  655.    compuserve list of anomalies in Clipper and some other discovered
  656.    problems which aren't in CIX list)
  657.   
  658.                                                                   .DD.
  659.  
  660.   ---------------------------------------------------------------------------
  661.   CLIPBBS 1-01                   Page 13                   4 Feb 1991
  662.  
  663.  
  664.   ===========================================================================
  665.                              QUESTIONS AND ANSWERS
  666.   ===========================================================================
  667.  
  668.  
  669.   Question:
  670.   
  671.           I'm using 4DOS with Clipper 5.01 and having problems with
  672.           using RUN (!) command from CLIPPER. What i have to do for
  673.           correct using of 4DOS?
  674.   
  675.   Answer:
  676.   
  677.           1)      take a sure, that CONFIG.SYS contains correct specs:
  678.   
  679.                   shell=c:\4dos.com /e:512 /s:d /p
  680.   
  681.                   This one is telling to boot that has to take 4DOS.COM
  682.                   instead of COMMAND.COM with 512 bytes for environment
  683.                   and swapping to disk (replace with /s:e for EMM swap)
  684.                   /P is telling to run AUTOEXEC.BAT for start of system.
  685.   
  686.           2)      AUTOEXEC.BAT has also to set several things:
  687.   
  688.                   path c:\;c:\4dos
  689.   
  690.                   Be sure that PATH is telling where to found all other
  691.                   files from 4DOS!
  692.   
  693.                   set COMSPEC=c:\4dos.COM
  694.                   set 4DSHELL=/S:D
  695.   
  696.                   First one is giving correct COMSPEC for all invocation
  697.                   of COMMAND.COM like later and other is telling again
  698.                   about swapping for all other copies of 4DOS.COM later.
  699.   
  700.           This two things are needed for DOS to get correctly working,
  701.           for CLIPPER here is needed something totally different. Clipper
  702.           is taking COMSPEC DOS variable to run 'command.com', then will
  703.           RUN without problems any internal or external DOS commands or
  704.           another programs. If one wants to run another session of
  705.           4DOS.COM, then for compatibility is best to use
  706.           RUN("%COMSPEC%") which is without problems.
  707.   
  708.           And last comment - ONE MUST HAVE ENOUGH MEMORY TO RUN _TWO_
  709.           coppies of 4DOS.COM in case of running another 4DOS.COM or
  710.           copy of 4DOS.COM + runned program.
  711.  
  712.   ---------------------------------------------------------------------------
  713.  
  714.  
  715.   QUESTION:
  716.   
  717.       I'm looking for good books about Clipper 5.0x and also looking
  718.       for some newspapers about it, where i can found some from them?
  719.   
  720.   CLIPBBS 1-01                   Page 14                   4 Feb 1991
  721.  
  722.  
  723.   ANSWER:
  724.   
  725.                AVAILABLE CLIPPER BOOKS AND PERIODICALS
  726.   
  727.       BOOKS
  728.   
  729.       Clipper 5:  A Developer's Guide
  730.       Author:         Joseph D. Booth, Greg Lief and Craig Yellick
  731.       Publisher:      M&T Books
  732.                       501 Galveston Drive
  733.                       Redwood City, CA 94063-4728
  734.   
  735.       To Order:       1-800-533-4372
  736.                       1-800-356-2002 (in CA)
  737.   
  738.   
  739.       Clipper Developer's Library
  740.       Author:         James Occhiogrosso
  741.       Publisher:      Microtrend Books
  742.                               Slawson Communications, Inc.
  743.                       165 Vallecitos de Oro
  744.                       San Marcos, CA 92069
  745.   
  746.       To Order:       1-800-SLAWSON
  747.   
  748.   
  749.       Clipper Programming Guide, 2nd Edition Version 5
  750.       Author: Rick Spence
  751.       Publisher:      Microtrend Books
  752.                       Slawson Communications, Inc.
  753.                       165 Vallecitos de Oro
  754.                       San Marcos, CA 92069
  755.   
  756.       To Order:       1-800-SLAWSON
  757.   
  758.   
  759.       Illustrated Clipper 5.0, 2nd Edition
  760.       Author:  John Meuller
  761.       Publisher:      Wordware Publishing, Inc.
  762.                       1506 Capital Avenue
  763.                       Plano, TX 75074
  764.   
  765.       To Order:       1-800-229-4949
  766.   
  767.   
  768.       Straley's Programming with Clipper 5.0
  769.       Author: Stephen J. Straley
  770.       Publisher:      Bantam Books
  771.                       666 5th Avenue
  772.                       24th Floor
  773.                       New York, NY 10103
  774.   
  775.       To Order:       1-800-223-6834 ext. 9479
  776.                       212-492-9479
  777.   
  778.   
  779.   CLIPBBS 1-01                   Page 15                   4 Feb 1991
  780.  
  781.  
  782.       Using Clipper, 2nd edition
  783.       Author: Ed Tiley
  784.       Pubisher:       Que Corporation
  785.                       11711 North College Avenue
  786.                       Suite 140
  787.                       Carmel, IN 46032
  788.   
  789.       To Order:       1-800-428-5331
  790.   
  791.   
  792.       PERIODICALS
  793.   
  794.       The Aquarium
  795.       Publisher:      Grumpfish, Inc.
  796.                       PO Box 17761
  797.                       Salem, OR 97305
  798.   
  799.       To Order:       503-588-1815
  800.   
  801.   
  802.       Compass for Clipper
  803.       Publisher:      Island Publishing
  804.                       1424 Sherman Avenue
  805.                       Suite 300
  806.                       PO Box 2347
  807.                       Coeur d'Alene, ID 83814
  808.   
  809.       To Order:       208-667-3727
  810.   
  811.   
  812.       Nantucket News: The Technical Journal of Nantucket Corporation
  813.       Publisher:      Nantucket Corporation
  814.                       12555 W. Jefferson Boulevard
  815.                       Los Angeles, CA 90066
  816.   
  817.       To Order:       213-390-7923
  818.   
  819.   
  820.       Reference(Clipper): The Independent Guide to Clipper Expertise
  821.       Publisher:      Pinnacle Publishing
  822.                       28621 Pacific Highway South
  823.                       PO Box 8099
  824.                       Federal Way, WA 98003-009
  825.   
  826.       To Order:       1-800-231-1293
  827.                       206-941-2300
  828.   
  829.       European Nantucket Users Club Magazine - Clip a Time
  830.       Publisher:      The Europen Nantucket Users Club
  831.                       33 Nobel Square
  832.                       Basildon
  833.                       Essex SS13 1LT
  834.                       England
  835.   
  836.       To Order:       44-268-590955
  837.                       44-268-590905 (FAX)
  838.  
  839.   ---------------------------------------------------------------------------
  840.   CLIPBBS 1-01                   Page 16                   4 Feb 1991
  841.  
  842.  
  843.   Q&A
  844.   
  845.   Question:
  846.   
  847.     I have a problem with the DBU in Clipper 5.01. I can create a
  848.     dbase, but when I go to enter data, DBU hangs. No response from
  849.     keyboard... nothing! Running an AT (286) 10hz V/c drive VGA.
  850.     (Can't see any probs there) Is there a fix I should know about?
  851.   
  852.   Answer:
  853.   
  854.     You are completely right. Nantucket produced changed DBU but this
  855.     change is putting in DBU new error which wasn't in previous version.
  856.     Here is a fix (one from many):
  857.   
  858.     at line 281, change DBUEDIT.PRG to say:
  859.   
  860.           /* Edit the current field */
  861.             IF bof() .and. eof() .and. !lAppend
  862.                  keyboard chr(K_DOWN) + chr(nextkey())
  863.                  loop
  864.             ENDIF
  865.  
  866.   ---------------------------------------------------------------------------
  867.  
  868.  
  869.   QUESTION:
  870.   
  871.       I encounter very often a very annoying problem which i refer to as
  872.       "ghost records". With no apparent regularity i find in my .dbf files,
  873.       usually but not always at the end, one or more records whose fielsd are
  874.       filled with right arrows (chr(26)'s). For sure this problem is a very
  875.       well known one; Can someone tell me the origin of these records and how
  876.       to avoid them ?  (I use clipper 87 and am starting with clipper 5.1.
  877.       The ghost records are visible also with dbxl interpreter and enter in
  878.       the total number of records of the fields).
  879.   
  880.   ANSWER:
  881.   
  882.       Sounds like a dBase III pack of a clipper .dbf file.  Or header
  883.       corruption where there is one more record in the filesize than the
  884.       header says.  Clipper reads the real filesize and gets the last record
  885.       which is full of end-of-file markers (^Z or ASCII 26).
  886.   
  887.       Solution : don't access the files from dBase or DBXL.  (I do it often
  888.       though and only stop doing it when problems arise - which has not
  889.       happened for a year or so now).
  890.  
  891.   ---------------------------------------------------------------------------
  892.  
  893.  
  894.   QUESTION:
  895.   
  896.           I'm using for my programs combination of Turbo C++ and Clipper
  897.           sources and i want:
  898.   
  899.   CLIPBBS 1-01                   Page 17                   4 Feb 1991
  900.  
  901.  
  902.           1) to be able to use command line compiling of C modules
  903.           2) create from my objects complete library
  904.           3) do both first totally automatically
  905.   
  906.   ANSWER:
  907.   
  908.           Following is a example of .RMK link script file for use as
  909.           RMAKE #name.rmk to complete manage you created library
  910.   
  911.           Comments are added as usuall in .RMK files, therefore just
  912.           cut this part out, define own files and start using:
  913.   
  914.   // Example RMAKE file for combination of TCC sources and CLIPPER
  915.   // sources, result is going to library
  916.   
  917.   makepath[.OBJ]  := "\SOURCE\DANIEL\OBJ"
  918.   makepath[.PRG]  := "\SOURCE\DANIEL"
  919.   makepath[.C]    := "\SOURCE\DANIEL"
  920.   makepath[.CH]   := "\SOURCE\DANIEL"
  921.   makepath[.LIB]  := "\LIB"
  922.   //      makepath is used for telling RMAKE where to get and put
  923.   //      some used files
  924.   //      .OBJ files are ALLWAYS stored in subdirectory OBJ of main
  925.   //              program directory
  926.   //      .PRG files, .C and .CH files are in main source program
  927.   //              directory
  928.   //      .LIB files are in common lib directory, not in CL5\LIB
  929.   
  930.   #ifdef DEBUG
  931.   .prg.obj:
  932.       clipper $< /w/n/m/b /o$@
  933.       lib \lib\daniel -+$@;
  934.   #else
  935.   .prg.obj:
  936.       clipper $< /w/n/m/l /o$@
  937.       lib \lib\daniel -+$@;
  938.   #endif
  939.   
  940.   //      Above is defined how will be managed CLIPPER sources from
  941.   //      .PRG to .OBJ state with possibility to define /DDEBUG on
  942.   //      command line calling RMAKE @name.rmk /DDEBUG for include
  943.   //      debugger by simply one switch
  944.   //      LIB.EXE is coming from standard MICROSOFT C or from any other
  945.   //      source which is giving this program. Anyway TLIB can be also
  946.   //      used of course. LIB will be called for REMOVING old .OBJ from
  947.   //      and putting NEW inside ( -+ on beginning of name). Library
  948.   //      name is called DANIEL (it's my private library).
  949.   
  950.   .c.obj:
  951.       TCC -I\TC\INCLUDE -L\TC\LIB -C -d -ml -wmlt -K -G -O -Z -k- -c -o$@  $<
  952.       LIB \LIB\DANIEL.LIB -+$@;
  953.   
  954.   //      This is definition how to make .OBJ from .C sources and put
  955.   //      them again into library. Bunch of switches IS CASE sensitive
  956.   //      then please careful with using them!
  957.   //      And of course, later don't forget to link your CL.LIB with
  958.   CLIPBBS 1-01                   Page 18                   4 Feb 1991
  959.  
  960.  
  961.   //      your program, otherwise it will NEVER work......
  962.   
  963.   dd_lib1.obj:        dd_lib1.prg  dprinter.ch daniel.ch
  964.   dd_lib2.obj:        dd_lib2.prg  dprinter.ch daniel.ch
  965.   dd_lib3.obj:        dd_lib3.prg  dprinter.ch daniel.ch
  966.   dd_lib4.obj:        dd_lib4.prg  dprinter.ch daniel.ch
  967.   dd_lib5.obj:        dd_lib5.prg  dprinter.ch daniel.ch
  968.   dd_netw.obj:        dd_netw.prg  dprinter.ch daniel.ch
  969.   configer.obj:       configer.prg dprinter.ch daniel.ch
  970.   
  971.   //      This is simple, all this are CLIPPER modules with some include
  972.   //      .CH files which are of course also checked for changes
  973.   
  974.   cleanup.obj:        cleanup.c
  975.   faxlog.obj:         faxlog.c
  976.   isprinte.obj:       isprinte.c
  977.   screen.obj:         screen.c
  978.   wptext.obj:         wptext.c
  979.   wputil.obj:         wputil.c
  980.   
  981.   //      And this is definition of .C modules, they aren't checked
  982.   //      for includes, because includes in C are quite stabil
  983.  
  984.   ---------------------------------------------------------------------------
  985.   CLIPBBS 1-01                   Page 19                   4 Feb 1991
  986.  
  987.  
  988.   ===========================================================================
  989.                                    COMMENTS
  990.   ===========================================================================
  991.  
  992.  
  993.                              CLIPBBS Distribution
  994.   
  995.   CLIPBBS is special magazine about CLIPPER and CLIPPERing (or about 
  996.   another related problems and xBASE languages). This magazine is for
  997.   free and articles aren't honored. Nobody can take profit from dis-
  998.   tributing of this magazine. 
  999.   
  1000.   CLIPBBS can be freely downloaded and uploaded to any BBS or any other
  1001.   public system without changes of original contents or number of files
  1002.   in original archive (kind of archive can be changed, but we are sup-
  1003.   porting ARJ archive because is best and smallest). Please, in case of
  1004.   your interest in CLIPBBS and possibility to became a DISTRIBUTION
  1005.   site, contact publisher on 2:285/608@fidonet or 27:1331/4412@signet
  1006.   or just call to 31-10-4157141 (BBS, working 18:00->08:00, 2400bps) or
  1007.   voice to 31-10-4843870 in both cases asking for DANIEL (Docekal).
  1008.   
  1009.   At this moment (22/08/1991) here aren't distribution sites because is
  1010.   coming first trial number.
  1011.  
  1012.   ---------------------------------------------------------------------------
  1013.   CLIPBBS 1-01                   Page 20                   4 Feb 1991
  1014.  
  1015.  
  1016.                      How to write articles in CLIPBBS?
  1017.   
  1018.   
  1019.   Writing of articles to CLIPBBS is really easy. Write articles, max 78 
  1020.   characters per line, long as you wish, pure ASCII text. Choose from 
  1021.   list of extension which is describing your text, or just name it .ART 
  1022.   as ARTicle and send it to publisher or to any distributes site (if 
  1023.   exist already) via modem to BBS or with mailer as file attach. Article 
  1024.   will come automatically in nearest free issue.
  1025.   
  1026.   Extensions are:
  1027.   
  1028.           Articles (anything)             .ART
  1029.           Software                        .SOF
  1030.           News                            .NEW
  1031.           Question and Answers            .Q&A
  1032.           Letters to editors              .LET
  1033.           Advertisement                   .ADV
  1034.           Wanted                          .WAN
  1035.           Comments                        .CMS
  1036.           
  1037.   That's all at this moment, probly later we will be changing this. If 
  1038.   you have any tip about subparts of CLIPBBS, please tell us, or just 
  1039.   write article about this.
  1040.   
  1041.   Daniel, publisher
  1042.                                   
  1043.   
  1044.  
  1045.   ---------------------------------------------------------------------------
  1046.  
  1047.