home *** CD-ROM | disk | FTP | other *** search
/ Black Box 4 / BlackBox.cdr / clipper / clbbs210.arj / FD / FILES / CLBBS210.TXT
Encoding:
Text File  |  1992-03-28  |  86.8 KB  |  2,024 lines

  1.  
  2.  
  3.         ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  4.       ░░▒▒▒░▐▐▐▐▒░▐▐▐▐▒▒▒▒░▐▐▐▐▒▒░▐▐▐▐▐▐▒░▐▐▐▐▐▐▒░▐▐▐▐▐▐▒▒░▐▐▐▐▒▒▒
  5.       ░░▒▒░▐▐░░▐▐▒░▐▐▒▒▒▒▒▒░▐▐▒▒▒▒░▐▐░░▐▐▒░▐▐░░▐▐▒░▐▐░░▐▐░▐▐░░▐▐▒▒
  6.       ░░▒░▐▐▒▒░░▒▒░▐▐▒▒▒▒▒▒░▐▐▒▒▒▒░▐▐▒░▐▐▒░▐▐▒░▐▐▒░▐▐▒░▐▐░▐▐▐▒▒▒▒▒
  7.       ░░▒░▐▐▒▒▒▒▒▒░▐▐▒▒▒▒▒▒░▐▐▒▒▒▒░▐▐▐▐▐▒▒░▐▐▐▐▐▒▒░▐▐▐▐▐▒▒░▐▐▐▒▒▒▒
  8.       ░░▒░▐▐▒▒▒▒▒▒░▐▐▒▒░▐▒▒░▐▐▒▒▒▒░▐▐░░▒▒▒░▐▐░░▐▐▒░▐▐░░▐▐▒▒▒░▐▐▐▒▒
  9.       ░░▒░░▐▐▒▒▐▐▒░▐▐▒░▐▐▒▒░▐▐▒▒▒▒░▐▐▒▒▒▒▒░▐▐▒░▐▐▒░▐▐▒░▐▐░▐▐░░▐▐▒▒
  10.       ░░▒▒░░▐▐▐▐▒░▐▐▐▐▐▐▐▒░▐▐▐▐▒▒░▐▐▐▐▒▒▒░▐▐▐▐▐▐▒░▐▐▐▐▐▐▒▒░▐▐▐▐▒▒▒
  11.       ░░▒▒▒░░░░▒▒░░░░░░░▒▒░░░░▒▒▒░░░░▒▒▒▒░░░░░░▒▒░░░░░░▒▒▒░░░░▒▒▒▒
  12.       ░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  13.         ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  14.  
  15.   Volume 2, Number 10                                      28 March 1992
  16.  
  17.                  (c) Daniel Doçekal, All Rights Reserved
  18.  
  19.      The BBS Clipper magazine, published SEMIWEEKLY, every FRIDAY
  20.  
  21.      Some of the material used comes from scanning CLIPPER echoes
  22.      which are carried in various BBS throughout the World.
  23.      These Echoes are very often the source of the most often asked
  24.      Questions and Answers about Clipper.
  25.  
  26.      Other material, which is fully signed or abbreviated is the
  27.      copyright of the appropriate persons.
  28.  
  29.      The publisher is not responsible for other authors submissions....
  30.      Published material is not necessarily the opinion of the publisher.
  31.  
  32.      Redaction:
  33.         Publisher...................................Daniel Docekal
  34.         Chief editor ...............................Daniel Docekal
  35.         Language editor .................................Dave Wall
  36.  
  37.  
  38.  
  39.                                Table of Contents
  40.  
  41. 1.  EDITORIAL  .............................................................  1
  42.     Long time nothing  .....................................................  1
  43. 2.  ARTICLES  ..............................................................  2
  44.     Nantucket Code Guidelines  .............................................  2
  45.     Starters corner (part 4)  ..............................................  6
  46.     NOVLIB, as promised here it is  ........................................ 11
  47.     Hitch Hikers Guide To The Net (7)  ..................................... 17
  48.     @...GET MEMO  .......................................................... 20
  49.     Clipper file/record locking  ........................................... 24
  50.     Get exit code after RUN command  ....................................... 25
  51. 3.  SOFTWARE  .............................................................. 26
  52.     Novell FORUMS on Compuserve  ........................................... 26
  53.     What is what (1)  ...................................................... 27
  54.     Printing out memory file  .............................................. 32
  55. 4.  NEWS  .................................................................. 35
  56.     Clipper Interface Handbook  ............................................ 35
  57. 5.  ANOMALIES  ............................................................. 36
  58.     ANOMALIES reports and commets  ......................................... 36
  59. 6.  COMMENTS  .............................................................. 37
  60. CLIPBBS 2-10       Table of Contents (...)        28 Mar 1992
  61.  
  62.  
  63.     Funny set SET DATE  .................................................... 37
  64.     __DOS_HOLD problem  .................................................... 38
  65. 7.  CLIPPER NET  ........................................................... 39
  66.     Index of described files in Clipper BBS Magazine  ...................... 39
  67. 8.  CLIPBBS  ............................................................... 41
  68.     CLIPBBS distribution  .................................................. 41
  69.     CLIPBBS, how to write an article!!!  ................................... 43
  70.  
  71.                                    - - - - -
  72. CLIPBBS 2-10                   Page 1                   28 Mar 1992
  73.  
  74.  
  75. ===============================================================================
  76.                                    EDITORIAL
  77. ===============================================================================
  78.  
  79.  
  80.                              Long time nothing
  81.  
  82. It's a long time i did write latest editorial and also there are many holes
  83. in making new versions of CLipper BBS. Problem as usual is called TIME.
  84. It's a nice hobby to make CLIPBBS, but it costs a lot of time. Thanx to all
  85. who are also contributing in magazine and i wish they will also continue,
  86. otherwise there will be more and more difficulties. Company in which i
  87. belongs has top priority over hobbies and we are now pretty busy with
  88. several networks. Therefore publishing of CLipper BBS magazine is slowed
  89. down and most probably will be slowed in future also. Also few things got
  90. lost during changes of servers in our company networks and i'm actually
  91. afraid i did skip one number which was never out, or maybe is out but i
  92. don't have it anymore (funny...).
  93.  
  94. One important news - i have new membership on Compuserver, therefore
  95. Clipper BBS Magazine will come in this worldwide medium also. 100064,2343
  96. is Compuserver number of Daniel Docekal.....
  97.  
  98. .DD.
  99.  
  100. -------------------------------------------------------------------------------
  101. CLIPBBS 2-10                   Page 2                   28 Mar 1992
  102.  
  103.  
  104. ===============================================================================
  105.                                    ARTICLES
  106. ===============================================================================
  107.  
  108.  
  109.                           Nantucket Code Guidelines
  110.  
  111. 7.  Preprocessor Directives
  112.  
  113.     7.1     Preprocessor directives are lowercase and are preceded by a "#"
  114.             sign:
  115.  
  116.              #include "Inkey.ch"
  117.  
  118.             COMMENTS: Absolutely agree about directive lowercasing. Prefixing
  119.             of them with "#" is i guess must given by syntax of CLipper
  120.             language and therefore can be left out of any guidelining...
  121.  
  122.     7.2     Pseudo-function names follow the same conventions as
  123.             user-defined function and procedure names (see section 6).
  124.  
  125.             COMMENTS: There is one disadvantage of this guideline. All pseudo
  126.             functions are UNAVAILABLE in debugger and therefore i prefer
  127.             making them in UPPERCASE because then one can see directly that
  128.             function is PSEUDO (#define or #translate made)
  129.  
  130.     7.3     Manifest constants are uppercase:
  131.  
  132.              #define ESCAPE 27
  133.              IF LASTKEY() == ESCAPE
  134.  
  135.             COMMENTS: Agree, expansion a bit is. EVERYTHING defined by
  136.             #define or #translate should be uppercase for better recognizing.
  137.  
  138.     7.4     A blank line should be placed before and after #if...#endif
  139.             directives:
  140.  
  141.          @ 2,10 SAY "ACME Stock Control System"
  142.  
  143.             #if PASSWORD
  144.                 <Ask user for password>
  145.          #endif
  146.  
  147.          MainMenu()
  148.  
  149.             COMMENTS: Agree. It's very good and also is good to use on indent
  150.             level to the right more INSIDE of #if..endif construction.
  151.             SOmetime i'm dreaming about CLEVER editor which will be able to
  152.             make some kind of outlining with Clipper constructions....
  153.  
  154. 8.  Standard Classes
  155.  
  156.     8.1     Class names follow the same conventions as user-defined
  157.             function and procedure names (see section 6).
  158.  
  159.             COMMENTS: It's logical and useful to follow the same naming
  160. CLIPBBS 2-10                   Page 3                   28 Mar 1992
  161.  
  162.  
  163.             convention for classes. All clases are of course prefixed with
  164.             "o" letter, immediately showing that 'this is a object'.
  165.  
  166.     8.2     Instance variable names begin with a lowercase letter, and
  167.             include uppercase letters wherever necessary to indicate new
  168.             words:
  169.  
  170.          oError:canDefault := .T.
  171.  
  172.             COMMENTS: There is one important moment. Starting of instance
  173.             variables with small letters is allowing to make difference
  174.             of them and any other names. Only one weakness is here. There
  175.             is no way how to present which kind of value is inside of class
  176.             variable.
  177.  
  178.     8.3     Method names follow the same convention as instance variable
  179.             names (see above):
  180.  
  181.          oBrowse:pageUp()
  182.  
  183.     8.4     When referring to a class method in text, you must also specify
  184.             the class name:
  185.  
  186.          To reposition the data source to bottom-of-file, use the
  187.          TBrowse:goBottom() method.
  188.  
  189.             COMMENTS: This paragraph is talking about case that one is writing
  190.             documentation or book about Clipper. Because of nature, that class
  191.             methods (variables) belongs to specific class, is needed to write
  192.             down which CLASS is related to method.
  193.  
  194. 9.  Spaces
  195.  
  196.     9.1     Whenever a list of two or more items is used, a space is placed
  197.             after each comma separator:
  198.  
  199.             MyFunc(nChoice, 10, 20, .T.)
  200.  
  201.             COMMENTS: This is rule coming about readability of program.
  202.             Sometime is better to not use it, because of some functions with
  203.             very long argument list. Then it's too long to waste space with
  204.             space characters between arguments.
  205.  
  206.     9.2     NEVER use spaces to indent code; use tabs instead (see section
  207.             15).
  208.  
  209.             COMMENTS: GOLDEN rule for all programs (not only in Clipper).
  210.             When program is formatted using SPACES, there is always problem
  211.             with reformating of program. Also spaces formated program is
  212.             BIGGER (and significantly) than TABS formatted program (TAB is
  213.             one character and can be in some cases replacement for 2 to 7
  214.             spaces).
  215.  
  216.     9.3     When parameters are specified as part of a function
  217.             declaration, a space is placed inside each parenthesis:
  218.  
  219. CLIPBBS 2-10                   Page 4                   28 Mar 1992
  220.  
  221.  
  222.          FUNCTION SayInBox( cMessage, cColor )
  223.  
  224.             COMMENTS: Again readability rule. It's giving better reading of
  225.             parameters when definining function.
  226.  
  227.     9.4     A space is placed on either side of each binary operator:
  228.  
  229.             nTotal := nSubTotal + nNewCost
  230.  
  231.             COMMENTS: It's good to follow this, but again. Long and complex
  232.             expressions flowing among more lines, are difficult to keep in
  233.             this way, because are coming longer and longer.
  234.  
  235. 10  Declarations
  236.  
  237.     10.1    Each variable is declared separately on its own line:
  238.  
  239.          LOCAL nSomeNum
  240.          LOCAL cString := ""
  241.  
  242.             COMMENTS: I'm still prefering method to use ONE LOCAL statement
  243.             and then multiple line declarations:
  244.  
  245.             LOCAL   nSomeNum ,;
  246.                     cString     := ""
  247.  
  248.             It's question what is better, because in Nantucket's guideline,
  249.             there is possible to place comments after every LOCAL statement,
  250.             in my case it's impossible (because of buggy implementation of /*
  251.             and */ operators).
  252.  
  253. 11  Logicals
  254.  
  255.     11.1    Logical values are referred to in text as follows:
  256.  
  257.          true (.T.)
  258.          false (.F.)
  259.  
  260.             The terms "true" and "false" are all lowercase unless they appear
  261.             at the beginning of a sentence, and are followed by the code form
  262.             of the logical value enclosed in parentheses.
  263.  
  264.             COMMENTS: Exactly opposite. TRUE and FALSE are upper case,
  265.             always.  That's because they are defined as #define constants and
  266.             #define symbols are always uppercase in my programs (see
  267.             somewhere on start of guidelines comments about #define).
  268.  
  269. 12  Operators
  270.  
  271.     12.1    The in-line assignment operator (:=) is used for assignments in
  272.             all Clipper 5.0 code:
  273.  
  274.          lContinue := .T.
  275.  
  276.             COMMENTS: 100% agree. ":=" operator is only one used in Clipper.
  277.             That's because of:
  278. CLIPBBS 2-10                   Page 5                   28 Mar 1992
  279.  
  280.  
  281.             1)  REPLACE command can be replaced with this operator
  282.             2)  there is possible to use this operator inside of expression
  283.                 and mostly in if () statements...
  284.  
  285.     12.2    The == operator is used for exact equality tests in all Clipper
  286.             5.0 code:
  287.  
  288.          lDuplicate := (CustFile->CustName == cCustName)
  289.  
  290.             COMMENTS: 100% agree. "==" operator is better readable than combi-
  291.             nation of SET EXACT and "=" operators....
  292.  
  293. -------------------------------------------------------------------------------
  294. CLIPBBS 2-10                   Page 6                   28 Mar 1992
  295.  
  296.  
  297. Starters corner                                                       Paul Ket
  298. ===============                                                       ========
  299.  
  300. Last time we left with a brand new way of storing the data in the files.  We
  301. created the Thirdtry.dbf. It consisted of three files. Two containing the
  302. real data, one is used as a reference to look-up words. In this episode we
  303. look at the meganisms behind our program. Now the real fun starts!
  304.  
  305. Last time i've made a nasty mistake: i've forgotten to include a full
  306. description of THIRDTRY.DBF. Sorry about that. Complains can be send to the
  307. editor :-> . It is contained in the addendum of this episode.
  308.  
  309. I also promised to take a closer look at the files. That can wait till an
  310. other time. Now is the time for the creative part of programming!
  311.  
  312. What do we want?
  313. ----------------
  314.  
  315. First we have to ask ourselves what we actually want our program to do.
  316. Think about this at "grass-root" level. We want the program to start and
  317. present us the contents of de files. On the screen to be precise.
  318.  
  319. Besides that we want to browse and to look up things. At the end we also want
  320. to make a hardcopy of the recipe. After that we sign off and go off to the
  321. kitchen.
  322.  
  323. What does the intended user want?
  324. ----------------------------------
  325.  
  326. What we want is important. But not as important as the wishes of the user.
  327. Remember episode 1, in which we stated that this project was also intended to
  328. pay in our debt to Mum. She agreed on buying a computer with the demand for a
  329. good program for her recipes(A). In jargon: a novice user. Somebody who
  330. doesn't want to learn about fields and records. Doesn't want to spent the
  331. leisuretime at the keyboard. So: simplicity, clarity and easy to use are
  332. major demands.
  333.  
  334. These demands are important because by our design with all those files we've
  335. created a great opportunity for making things complex. Let's not do that!
  336.  
  337. Basics
  338. ------
  339.  
  340. To have something to show to anyone else, it's nice to start with the design
  341. of the screen. We've waited with that to make a good design for our
  342. datafiles, but now the time has come to do so (B)!
  343.  
  344. Designing the screen
  345. --------------------
  346. We start desinging with a few questions.
  347.  
  348. First: what has to be present on the screen?
  349. Three categories of information can be present:
  350.  
  351. (1) Data
  352. The real data:
  353. CLIPBBS 2-10                   Page 7                   28 Mar 1992
  354.  
  355.  
  356.      - the name of the recipe
  357.      - the ingredients
  358.      - the presription how to prepare it.
  359.  
  360. (2) Extra info
  361. Things commonly seen, handy, but no complaints if you leave them out:
  362.      - time
  363.      - date
  364.      - filepath
  365.      - number of the recipe
  366.      - number of ingredients
  367.  
  368.  ┌─■INTERMEZZO■───────────────────────────────────────────────────────┐
  369.  │Altering the database structure                                     │
  370.  │-------------------------------                                     │
  371.  │At this point in the process i get the strong urge to add extra     │
  372.  │information, extending the amound of information to store. Think of:│
  373.  │     - the last time the recepe was made                            │
  374.  │     - date of data-entry                                           │
  375.  │     - names of visitors who have eaten it                          │
  376.  │     - names of family who don't like it                            │
  377.  │     - record-size                                                  │
  378.  │                                                                    │
  379.  │Why not? Go ahead!                                                  │
  380.  │Some parts can be stored in THIRDTRY.DBF, others in LOOKUP (c).     │
  381.  └────────────────────────────────────────────────────────────────────┘
  382.  
  383. (3) Directives.
  384. A user has a right to know where s/he is and what to do. So we have to tell
  385. where we are and where we can go to.
  386.  
  387. These three types of information deserve a special place on the screen.
  388. In the pre-windows-era this was called window-ing. Each type of information
  389. has his own place on the screen. Now you talk about "view-ports". It means
  390. the same without refering to that product of Microsoft.
  391.  
  392. Here's one of my favorite screen designs. It is 24 rows by 80 colums (D). You
  393. might have to adjust your pinter. But it shows beautifully on your screen!
  394.  
  395. >---------- screen starts here --------------<
  396. Date:  10 jan 1992                                             Recepe:    1
  397. Time:  12:12                                                   Total:  1123
  398. ────────────────────────────────────────────────────────────────────────────────
  399.                                           Breek de eieren in een beslagkom.
  400. Fried eggs Extra                          Roer ze goed door. Doe de boter in de
  401.                                           pan, smelt ze. Doe de geroerde eieren
  402. slices bread          3                   in de pan. Zet het vuur zo laag
  403. eggs                  5                   mogelijk. Doe een deksel op de pan!
  404. mature cheddar        50 grames           Laat het langzaam sudderen. Na 3
  405. butter                little              minuten de kaas op het ei doen.
  406. garlic                little              Kruiden naar smaak. Deksel weer op
  407. red pepper            1                   de pan doen. Als de kaas grotendeels
  408. pepper                little              gesmolten is is het ei goed. Opdienen
  409.                                           op de sneetjes brood.
  410.  
  411.  
  412. CLIPBBS 2-10                   Page 8                   28 Mar 1992
  413.  
  414.  
  415. ───────< Display    >───────────────────────────────────────────────────────────
  416. F1= Help
  417. F5= Look-Up
  418. ───────< Esc = Exit >───────────────────────────────────────────────────────────
  419. >---------- screen ends here --------------<
  420.  
  421. You can see three zones in this screen. At the top the Extra information. Two
  422. lines. Left and right filled out. As you can see i present there the number
  423. of this recepe and the total amount of recepe's i've got. In the middle the
  424. main information. Note the absence of captions like "Name", "Ingredients"
  425. etc. I think those are redundant. At the bottom the user-guide. It clearly
  426. shows only three options and gives us information about where we are
  427. (Display).
  428.  
  429. Techniques
  430. ----------
  431.  
  432. There is some programming necessary for getting this screen. I don't intent
  433. to give full listings but here's how i would do this.
  434.  
  435. For a start: i have a MAIN procedure/function which contains the main
  436. program.  In this function there's a loop.
  437.  
  438.           DO WHILE .not. <END>
  439.               PresentScreen()
  440.               GetUserKey()
  441.               ProcessKey()
  442.           ENDDO
  443.  
  444. The biggest part of the screen is organised in PresentScreen(). Not all. The
  445. horizontal lines are not disturbed at all. So, i write them only once: at the
  446. start of the program.
  447.  
  448. The time, presented in line 2, has to be updated -more ore less- continously.
  449. So, i make a small function TimeUpd() which i call in all three functions in
  450. the loop.
  451.  
  452. The keys available to the user are dependent on the place of the user in the
  453. program. So, i present this information after i've processed the last
  454. keystroke, in the function ProcessKey().
  455.  
  456. This leaves us with the thask to present the contents of THIRDTRY.DBF, the
  457. date, recepe number and the total number of recepes. Below you find a (buggy)
  458. source-listing of PresentScreen(). It depends on some unstated assumptions
  459. but it is only intended to give an idea of how this can be done(E).
  460.  
  461. >------------------ part of PresentScreen() ----------------<
  462. USE THIRDTRY.DBF ALIAS Third
  463. USE INGRDNT.DBF ALIAS Ing
  464.  
  465. @ 1,60 SAY "Recepe:" + STR(nRecepe),6)
  466. @ 2,60 SAY "Total: " + STR(LASTREC(),6)
  467. Select Third
  468. LOCATE FOR Third->Re_num=nRecepe
  469. IF found()
  470.      @ 4,0 SAY third->Name
  471. CLIPBBS 2-10                   Page 9                   28 Mar 1992
  472.  
  473.  
  474.      cDesc := third->Desc
  475.      Select Ing
  476.      LOCATE FOR ing->re_num = rRecepe
  477.      DO WHILE found()
  478.         @ A,B SAY LookUp(ing->ing_num)
  479.      ENDDO
  480.  
  481. ENDIF
  482.  
  483. >------------------ End of PresentScreen() -----------------<
  484. - - - - -
  485.  
  486. Notes:
  487.  
  488. (A) complaints are received about the sexist approach. Author likes to state
  489. that no harm is or was intended. Wherever wanted he can be replaced by she or
  490. the other way around.
  491.  
  492. (B) Handbooks and people who have studied programming will get sick at this
  493. time. Ok, it's wrong. But it works! Let's call it prototyping.
  494.  
  495. (C) What the result will be will be discussed in a forthcoming episode.
  496.  
  497. (D) Because i think you'll look at it with a Word-Perfect-alike. i haven't
  498. made it 25 * 80. A normal screen is of course 25 * 80 but in WordPerfect you
  499. "only" get 24 * 80.
  500.  
  501. (E) If somebody knows an equal simplistic but better way for doing the same
  502. job: please let me know!
  503.  
  504. ---------------------- ADDENDUM ------------------------------------
  505.  
  506.       Name: Lookup.dbf (3)
  507.       ===========================
  508.          NAME     TYPE     LENGTH
  509.       1  Ing_num   N        3,0
  510.       2  Ing_nam   C       30
  511.       ---------------------------
  512.       TOTAL                33
  513.  
  514.        Name: Ingrdnt.dbf  (3)
  515.        ======================
  516.           NAME     TYPE    LENGTH
  517.        1  Re_num    N     4,0
  518.        2  Ing_num   N     3,0
  519.        3  Amount    C    10,0
  520.        ----------------------
  521.        TOTAL             17
  522.  
  523.        Name: THIRDTRY.DBF (3)
  524.        =====================
  525.           NAME     TYPE    LENGTH
  526.        1  Re_num    N       4,0
  527.        2  Name      C      40
  528.        3  Desc      M      10
  529.        --------------------------
  530. CLIPBBS 2-10                   Page 10                  28 Mar 1992
  531.  
  532.  
  533.        TOTAL               54
  534.  
  535. -------------------------------------------------------------------------------
  536. CLIPBBS 2-10                   Page 11                  28 Mar 1992
  537.  
  538.  
  539.                      NOVLIB - one complex Novell library
  540.  
  541.  
  542. As promised, it's coming. NOVLIB, one from most complex Novell libraries.
  543. It has not ANY other use, than pure Novell networking. Written mostly in
  544. Turbo C (2.0) as is visible in .LIB files is convering almost everything
  545. avaialable from Novell Netware. Last time (in Clipper BBS Magazine number 9,
  546. Volume 2) was coming review of NETLIB. This article will cover complete
  547. review of NOVLIB. Next coming article will compare both libraries for easiest
  548. way to see what is in which library.
  549.  
  550. NOVLIB covers ONLY Novell Netware, nothing else. That's very important
  551. information. Scale of functions in NOVLIB is well spread over complete
  552. services of Novell Netware, all configuration and also statistic information.
  553. NOVLIB is coming just as two .LIB files, one with generic 2.xx and 3.xx
  554. functions and second with functions related only to Novell 2.xx (3.xx is
  555. missing all statistical services - SYSCON command in those two versions of
  556. Novell is therefore also different).
  557.  
  558.     Bindery information and access
  559.  
  560.  AccBindRd()      Returns the workstation's bindery read access security.
  561.  AccBindWr()      Returns the workstation's bindery write access security.
  562.  Bindery()        Opens & Closes the NetWare bindery.
  563.  BindCurrOb()     Returns current number of bindery objects. [286]
  564.  BindMaxOb()      Returns maximum number of bindery objects. [286]
  565.  BindPeakOb()     Returns peak number of bindery objects. [286]
  566.  BindSearch()     Searches the bindery for specified objects (users etc).
  567.  UserAdd()        Adds a new user to the bindery.
  568.  UserAddGrp()     Adds a specified user to a user group.
  569.  UserDelete()     Deletes a specified user.
  570.  UserDelGrp()     Deletes a specified user from a user group.
  571.  UserFName()      Returns or sets user's full name.
  572.  UserFree()       Returns amount of free space available to specified user.
  573.  
  574.     Printing and Redirecting
  575.  
  576.  BannerFlag()     Enables & disables the printing of a Banner.
  577.  BannerName()     Returns or sets the banner user name for printing.
  578.  CapBanner()      Returns or sets the banner text for printing.
  579.  CapCancel()      Cancels capture of the specified LPT device.
  580.  CapCopies()      Returns or sets the number of copies for printing.
  581.  CapEnd()         End capture of the specified LPT device.
  582.  CapFlush()       Flushes capture of the specified LPT device.
  583.  CapFrmFeed()     Enables & disables the form feed after printing
  584.  CapFrmName()     Returns or sets the form name for printing.
  585.  CapFrmNo()       Returns or sets the form number for printing.
  586.  CapKeep()        Enables & disables printing of an interupted print
  587.  CapMaxChar()     Returns or sets maximum characters per line for printing.
  588.  CapMaxLine()     Returns or sets the maximum lines per page for printing.
  589.  CapPrnNo()       Returns or sets the destination printer for printing.
  590.  CapQueue()       Directs captured printing to a specified queue.
  591.  CapSetup()       Sets up print capturing for the specified LPT device.
  592.  CapStart()       Starts capture of the specified LPT device.
  593.  CapTabSize()     Returns or sets the tab size for printing.
  594.  CapTimeout()     Returns or sets the timeout count for printing.
  595. CLIPBBS 2-10                   Page 12                  28 Mar 1992
  596.  
  597.  
  598.  PrnForm()        Returns or sets the form type for specified LPT device.
  599.  TabFlag()        Enables & Disables conversion of tabs to spaces
  600.  
  601.     Print servers and printer
  602.  
  603.  PrnOffline()     Checks whether the specified printer is Offline.
  604.  PrnServer()      Returns or sets the server printer for the LPT device.
  605.  PrnStopped()     Checks whether the specified LPT device is stopped.
  606.  PServerVer()     Returns the printer server version number.
  607.  
  608.     Print Queues manipulation
  609.  
  610.  QDelJob()        Deletes the specified print queue job.
  611.  QHalt()          Enables/disables print queue servicing.
  612.  QJobAdding()     Checks whether the specified print queue job is adding.
  613.  QJobDate()       Return print jobs entry date
  614.  QJobEDate()      Set or Return defered printing execute date of a print job
  615.  QJobDes()        Returns or sets the specified print queue job description.
  616.  QJobFile()       Returns the name of the specified print job's spool file.
  617.  QJobOpHold()     Places the print queue job on operator hold.
  618.  QJobPos()        Returns or sets the print job's position in queue.
  619.  QJobs()          Returns a list of print queue jobs.
  620.  QJobSize()       Returns the size of the specified print queue job.
  621.  QJobStn()        Returns station number which placed print job in queue.
  622.  QJobTime()       Return print jobs entry time
  623.  QJobETime()      Set or Return defered printing execute time of a print job
  624.  QJobUser()       Returns user ID of user who placed job in queue.
  625.  QJobUsHold()     Places the specified print queue job on user hold.
  626.  QNewJobs()       Enables/disables new jobs being added to print queue.
  627.  QNewServer()     Enables/disables new servers servicing print queue.
  628.  QueueID()        Returns the ID number for a specified print queue.
  629.  QVer()           Returns the queuing version number.
  630.  
  631.     Accounting
  632.  
  633.  AccVer()         Returns accounting system version number.
  634.  
  635.     Statistics
  636.  
  637.  BufferDirt()     Returns the number of dirty disk cache buffers. [286]
  638.  Buffers()        Returns the total number of disk cache buffers. [286]
  639.  BufferSize()     Returns the size of each disk cache buffer. [286]
  640.  CacheHits()      Returns the number of fileserver cache hits. [286]
  641.  CacheMiss()      Returns the number of file server cache misses. [286]
  642.  CurrOpen()       Returns the current number of open files. [286]
  643.  FatScanErr()     Returns the number of disk fat scan errors.     [286]
  644.  FATCurrChg()     Returns the current number of changed FAT sectors. [286]
  645.  FATErr()         Returns the number of FAT sector errors. [286]
  646.  FATErrFat()      Returns the number of fatal FAT sector errors. [286]
  647.  FATTotChg()      Returns the total number of changed FAT sectors. [286]
  648.  FileOpens()      Returns the number of file open requests. [286]
  649.  FileReads()      Returns the number of file read requests. [286]
  650.  FileWrites()     Returns the number of file write requests. [286]
  651.  FSProcess()      Returns the number of file server processes. [286]
  652.  FSUtil()         Returns file server utilisation (%). [286]
  653.  INBVer()         Returns Internet Bridge version.
  654. CLIPBBS 2-10                   Page 13                  28 Mar 1992
  655.  
  656.  
  657.  IOPending()      Returns number of disk I/Os pending. [286]
  658.  LogDrives()      Returns the number of logical disk drives. [286]
  659.  MaxConn()        Returns the maximum number of connections supported.
  660.  MaxOpen()        Returns the maximum number of open files. [286]
  661.  MaxVol()         Returns the maximum number of volumes supported.
  662.  MemTotal()       Returns the total amount of server memory. [286]
  663.  MemWaste()       Returns the amount of wasted server memory. [286]
  664.  PeakConn()       Returns the peak number of connections.
  665.  PeakOpen()       Returns the peak number of open files. [286]
  666.  
  667.     LAN/server configurations
  668.  
  669.  LANHostAdd()     Returns the specified LAN host address. [286]
  670.  LANName()        Returns the specified LAN name. [286]
  671.  LANNWAdd()       Returns the specified LAN network address. [286]
  672.  LANOption()      Returns the specified LAN option. [286]
  673.  LANSetting()     Returns the specified LAN setting. [286]
  674.  NWAppNo()        Returns the Netware Applications Number
  675.  NWError()        Returns the last NetWare error code.
  676.  NWNumber()       Returns the default network number.
  677.  NWSerNo()        Returns the Netware Serial Number.
  678.  NWVersion()      Returns the NetWare version number.
  679.  OSRev()          Returns the operating system revision number.
  680.  SecureVer()      Returns the security version number.
  681.  SFTLevel()       Returns the file server SFT level.
  682.  VAPVer()         Returns the VAP version number.
  683.  VConsVer()       Returns the virtual console version number.
  684.  
  685.     Rights, users...
  686.  
  687.  AccConsole()     Returns the workstation's Console Operator status.
  688.  DirAddUser()     Makes a user a trustee of a directory.
  689.  DirDelUser()     Deletes a user as trustee of a directory.
  690.  DirEffRt()       Returns workstation's effective rights to a directory.
  691.  IsMember()       Verifies that a user is a member of a specified group.
  692.  PassChange()     Changes the specified user's password.
  693.  PassCheck()      Checks the specified user's password.
  694.  UserBlocks()     Returns the number of blocks owned by specified user.
  695.  UserDirs()       Returns number of directories owned by a specified user.
  696.  UserFiles()      Returns the number of files owned by a specified user.
  697.  UserID()         Returns a specified user's ID number.
  698.  UserName()       Returns a specified user's login name.
  699.  UserRename()     Renames a specified user.
  700.  
  701.     Directories and mapping
  702.  
  703.  DirHandle()      Returns the directory handle of the current directory
  704.  DirMap()         Maps a specified directory to a drive letter.
  705.  DirMapDel()      Deletes a drive mapping.
  706.  
  707.     Connections and stations
  708.  
  709.  ConnClear()      Clears a specified connection number.
  710.  ConnID()         Returns the default connection ID number.
  711.  ConnNo()         Returns the current connection number.
  712.  Conns()          Returns connection numbers where a user is logged in.
  713. CLIPBBS 2-10                   Page 14                  28 Mar 1992
  714.  
  715.  
  716.  ConnUsed()       Returns if a fileserver table slot is used
  717.  CurrConn()       Returns the current number of active connections.
  718.  FSAttach()       Attaches to new fileserver.
  719.  FSConnNo()       Returns filserver Connection ID number.
  720.  FSDetach()       Detaches from a fileserver.
  721.  FSLogin()        Logs a specified user into the file server.
  722.  FSLogout()       Logs the current user out of the file server.
  723.  LockConn()       Returns connection number which has a record locked. [286]
  724.  LoginDate()      Returns the login date of current user(s).
  725.  LoginID()        Returns the ID number of current user(s).
  726.  LoginName()      Returns the login names of current user(s).
  727.  LoginStat()      Returns or sets the current file server login status.
  728.  LoginTime()      Returns the login times of current user(s).
  729.  NodeNumber()     Returns the workstation node number.
  730.  ShellRev()       Returns the workstation shell revision number.
  731.  ShellVer()       Returns the workstation shell version number.
  732.  WSLHard()        Returns the workstation long hardware type.
  733.  WSLocalDrv()     Returns number of logical local drives on workstation.
  734.  WSOS()           Returns the workstation operating system type.
  735.  WSOSVer()        Returns the workstation operating system version.
  736.  WSSHard()        Returns the workstation short hardware type.
  737.  
  738.     Other...
  739.  
  740.  ExclOn()         Returns CLIPPER exclusive status. (NON working BTW)
  741.  Strhex()         Converts number to hexadecimal string.
  742.  
  743.     File server manipulation
  744.  
  745.  FSDate()         Gets or Sets the file server date.
  746.  FSTime()         Gets or sets the file server time.
  747.  FSDown()         Downs the file server.
  748.  FSName()         Returns the file server name.
  749.  FSPrefID()       Returns or sets the prefered fileserver.
  750.  FSPrimID()       Returns or sets the primary fileserver.
  751.  LoginEnab()      Enables/disables file server login.
  752.  
  753.     Messaging services
  754.  
  755.  MsgConsole()     Sends a message to the file server console.
  756.  MsgGet()         Returns a message from other users.
  757.  MsgLogNet()      Logs a network message.
  758.  MsgMode()        Returns or sets the workstation's message mode.
  759.  MsgUser()        Sends a message to a specified connection number.
  760.  
  761.     File Services
  762.  
  763.  Purge()          Purges the workstation's erased files.
  764.  
  765.     Semaphores
  766.  
  767.  SemClose()       Closes the specified semaphore.
  768.  SemCount()       Returns number of users with specified semaphore open.
  769.  SemDec()         Decrements the specified semaphore value by 1.
  770.  SemInc()         Increments the specified semaphore value by 1.
  771.  SemOpen()        Opens the specified semaphore.
  772. CLIPBBS 2-10                   Page 15                  28 Mar 1992
  773.  
  774.  
  775.  SemValue()       Returns the value of the specified semaphore.
  776.  
  777.     TTS
  778.  
  779.  TTSAbort()       Aborts a TTS transaction.
  780.  TTSAppThr()      Returns or sets the TTS application thresholds.
  781.  TTSAvail()       Verifies that TTS is available. [286]
  782.  TTSBegin()       Begins a TTS transaction.
  783.  TTSCurrTrn()     Returns the number of current TTS transactions. [286]
  784.  TTSEnable()      Enables/disables TTS. [286]
  785.  TTSEnd()         Ends a TTS transaction.
  786.  TTSLevel()       Returns the file server TTS level.
  787.  TTSMaxTrn()      Returns the maximum number of TTS transactions. [286]
  788.  TTSPeakTrn()     Returns the peak number of TTS transactions. [286]
  789.  TTSSpace()       Returns the space currently used by TTS. [286]
  790.  TtsTotBo1()      Returns the number of TTS backouts by system    [286]
  791.  TtsTotBo2()      Returns the number of TTS backouts by workstat. [286]
  792.  TTSTotTrn()      Returns the total number of TTS transactions. [286]
  793.  TTSVolume()      Returns the volume number used for TTS workfiles. [286]
  794.  TTSWSThr()       Returns the TTS workstation thresholds.
  795.  TtsWTotTrn()    Returns the number of TTS made by workstations  [286]
  796.  
  797.     Volume and disks
  798.  
  799.  VolBlAvail()     Returns number of blocks available on specified volume.
  800.  VolBlkSize()     Returns the size of each block on a specified volume.
  801.  VolBlocks()      Returns the total number of blocks on specified volume.
  802.  VolName()        Returns the name of the specified volume.
  803.  VolNumber()      Returns the volume number of a specified volume.
  804.  VolRemove()      Verifies that the specified volume is removable.
  805.  PDChannel()      Returns the physical disk channel number. [286]
  806.  PDCont()         Returns the physical disk controller number. [286]
  807.  PDContDrv()      Returns the physical disk controller drive number. [286]
  808.  PDContType()     Returns the physical disk controller type. [286]
  809.  PDCyls()         Returns the number of cylinders on a physical disk. [286]
  810.  PDDrvSize()      Returns the physical disk size. [286]
  811.  PDDrvType()      Returns the physical disk type. [286]
  812.  PDHeads()        Returns the number of heads on a physical drive. [286]
  813.  PDHfxAvail()     Returns No. of Hot Fix redirection blocks available. [286]
  814.  PDHfxEnab()      Verifies that Hot Fix redirection is enabled. [286]
  815.  PDHfxSize()      Returns the size of Hot Fix redirection table. [286]
  816.  PDHfxStart()     Returns Hot Fix redirection table starting block. [286]
  817.  PDIOErrors()     Returns the number of physical disk I/O Errors. [286]
  818.  PDName()         Returns the physical disk name. [286]
  819.  PDRemove()       Verifies that the physical disk is removable. [286]
  820.  PDSectors()      Returns the number of sectors on a physical disk. [286]
  821.  PhyDrives()      Returns number of physical drives in the fileserver. [286]
  822.  PhyRDErrs()      Returns the number of disk read errors.         [286]
  823.  PhyRDReqs()      Returns the number of disk read requests.       [286]
  824.  PhyWtErrs()      Returns the number of disk write errors.        [286]
  825.  PhyWtReqs()      Returns the number of disk write requests       [286]
  826.  ReadReqs()       Returns the number of dos disk read requests    [286]
  827.  WriteReqs()      Returns the number of dos disk write requests   [286]
  828.  
  829.     Quite long, isn't? I was quite impressed saw it first time. Functionality
  830. seems also very good. Documentation in .NG format is coming as common
  831. CLIPBBS 2-10                   Page 16                  28 Mar 1992
  832.  
  833.  
  834. standard, but is missing general comments (about linking), list of functions
  835. per library, overlaying of library functions.
  836.  
  837. -------------------------------------------------------------------------------
  838. CLIPBBS 2-10                   Page 17                  28 Mar 1992
  839.  
  840.  
  841.                     Hitch Hikers Guide To The Net
  842.                                Episode 7
  843.  
  844.  (Xaphod, Gillian, Rod, Martin, and Arnold Lint continue their descent into
  845.  the heart of Netrothea. Flarg Brittashik has vanished leaving only a tin
  846.  of Putrina Rat Chow in his stead.)
  847.  
  848.  Xaphod: Wow, that was far out|
  849.  Martin: If you say so.
  850.  
  851.  (All of a sudden, the 12" CRT on Xaphod's shoulder starts up . . .  Star
  852.  Wars type music kicks in . . .  Once upon a time, in a Net far, far away,
  853.  a band of steadfast hackers are fighting a gallant fight.  Vast swarms of
  854.  nauseatingly repetitious messages are swamping their news. They must
  855.  retaliate.  This is their story . . . This is Zar Wars. . . All the nodes
  856.  beginning with the letter Z have banded together, they are tired of always
  857.  being last because the Net does everything alphabetically. They decide to
  858.  stage a bold attack and make their presence known| to this end they
  859.  devised a cunning scheme to echo their news articles across the known Net
  860.  several multiple times each posting. In this way, they would be assured
  861.  the attention they feel they deserve. Net.landers are at this moment
  862.  preparing for a counterattack.  They are preparing massive Photocomplaint
  863.  rays, Gargantugripe bombs, and the ever deadly Superplasmicautor-
  864.  everberatingmegamoleculozapperdingledangledonglehyperintensified-
  865.  newandimprovedtimewarping complaint field generators. The last device is
  866.  one of the most feared (and hardest to pronounce) in the known Net. Its
  867.  power is so incredible that grown men have been known to pull out their
  868.  own livers rather than be subjected to its awesome force.)
  869.  
  870.  Rod        : Turn that off
  871.  Xaphod     : (Doing so) Yah, what a drag.
  872.  Arnold Lint: Well, what do we do now.
  873.  Gillian    : I guess we keep going.
  874.  Martin     : Do we have to?
  875.  All        : Yes
  876.  Arnold Lint: Sure could go for a cup of tea.
  877.  Xaphod     : (Mumbling to himself) Stupid git
  878.  Martin     : Do you people really think this is necessary? Why can't you
  879.               be satisfied with things as they are? Must you always try to
  880.               change them - things can only get worse.
  881.  Xaphod     : Look you morose metal moron, we're going on so shut up. Look
  882.               upon this as an adventure into a whole new life.
  883.  Martin     : Oh no, not another.
  884.  
  885.  (The stairwell they are on leads into a huge room. So huge that it defies
  886.  commentary, only to say that it is, in fact, bloody huge. Off in the
  887.  distance there is a faint light. Arnold Lint and company head for it. Two
  888.  weeks later they arrive. the light is being emitted from a strange kind of
  889.  TTY. There is a plaque nearby which reads: "For the answer to Life, the
  890.  Net and Everything, type in 'Help'. For dirty books or leather goods, ring
  891.  bell for service. The Inter-Net Megamind Exchange and Novelty Shoppe
  892.  thanks you for your patronage of our establishment".)
  893.  
  894.  Arnold Lint: Wow, the answer to Life, the Net, and Everything
  895.  Xaphod     : Who cares, lets get at the dirty books
  896.  Rod        : Yah, I wonder if they have "Advanced Necrophilia for
  897. CLIPBBS 2-10                   Page 18                  28 Mar 1992
  898.  
  899.  
  900.               Scientists and Engineers" or "Yes, you can be a Toad-Sexer"?
  901.  Arnold Lint: Dirty books, way out here?
  902.  Xaphod     : Of course, depravity is the universal language.  Pornographic
  903.               material is generally considered legal tender anywhere in
  904.               the Net. I once lived for a whole year on Carnolea, just on
  905.               trading my old "Gland" magazines and lubricants for
  906.               supplies.
  907.  Gillian    : (Disgusted by the antics of Rod and Xaphod)Lets see
  908.               the answer already - boy what sicko's.
  909.  Xaphod     : OK, but then can we get some dirty books.
  910.  
  911.  (Xaphod types in 'HELP' to the keyboard. Strange hummings and buzzings
  912.  start to emanate from the TTY. The cryptic characters "101010" appear on
  913.  the screen.)
  914.  
  915. ********************************************************************
  916.  "The Hitch Hikers Guide To The Net" points out that the number 42, when
  917.  viewed in it's binary representation is in fact, quite revealing.  There
  918.  are many theories for what it actually means. The adult magazine "Spurt"
  919.  suggests that it is the perfect pattern for an orgy, three males and three
  920.  females being the supposed ideal. The actual shape of the characters of
  921.  '101010' seem to bear this out.  Also the fact that it does go
  922.  'boy-girl-boy . . . ' also helps. The religious magazine 'Modern Moral
  923.  Majority' (MMM) suggests that it is in fact a message from God. The
  924.  pattern indicates that two of the same sex shall not have intercourse. The
  925.  fact that there are equal numbers of both male and female indicates that
  926.  monogamous relationships are the thing to do.  Also the fact that, when
  927.  read, left to right, the man always comes first, really gave them an edge
  928.  on the ERA (who really didn't listen anyway). Most other people simply
  929.  wondered why everyone thought the binary sequence had anything at all to
  930.  do with sex.
  931.  ******************************************************************]
  932.  
  933.  Rod        : That's it?
  934.  Xaphod     : Apparently.
  935.  Gillian    : There must be more than just 42.
  936.  Martin     : I certainly hope not.
  937.  Xaphod     : Well, lets try to get some more info|
  938.  
  939.  (Xaphod once again starts typing at the TTY. Characters flash and buzzers
  940.  buzz. The TTY finally gives up, it types out: "All right already, if you
  941.  really want the answers, take the service elevator to the 127,366,247th
  942.  floor, then follow the green line till it meets the blue line till it
  943.  meets the orange line till it becomes the slightly off white line. Then
  944.  climb out the window, jump off and ask for Ralph.  He'll tell you the
  945.  whole story. Now push off, I've had a bad day. (To itself now) Where did I
  946.  put those Valliums. Crap, I need a drink . . .  ")
  947.  
  948.  Xaphod     : Oh well, what do we have to loose.
  949.  Martin     : Not much really, just our lives. Of course, my life means so
  950.               little already, I doubt I'd mind if it were lost.
  951.  Rod        : Quiet.
  952.  
  953.          ******************** End Of Part 7 ********************
  954.  
  955.  What is the actual answer to Life, the Net, and Everything? Will Arnold
  956. CLIPBBS 2-10                   Page 19                  28 Mar 1992
  957.  
  958.  
  959.  Lint get his tea? Will Xaphod get his dirty book? Will the net sponsor a
  960.  Pot-Luck-Orgy? For the answers to these and many other pointless questions
  961.  . . . Tune in next time . . .  same Net-time . .  . same Net-channel.
  962.  
  963. -------------------------------------------------------------------------------
  964. CLIPBBS 2-10                   Page 20                  28 Mar 1992
  965.  
  966.  
  967.                                 @...GET MEMO
  968.                        (by Stephen Forbes in original)
  969.  
  970. In recent times there have been a number of messages on the Clipper Echo
  971. about the use of memo fields inside a GET/READ. As a result I thought I would
  972. try to emulate the dBASE style using a Get object. Whilst a true Get object
  973. is created for the memo, this is simply used to enable the memo to be handled
  974. as a member of the READ (in the order it is declared), the real work is done
  975. by the function MemoReader().
  976.  
  977. ********************************* CUT HERE ********************************
  978.  
  979. // GETMEMO.CH -------------------------------------------------------------
  980. //
  981. // Header file required for emulation of dBASE style memo gets in Clipper
  982. //
  983. // Written by Steve Forbes - Clipper User Group Melbourne - 1 Feb 92
  984. //
  985. // ------------------------------------------------------------------------
  986.  
  987. #command @ <Top>, <Left> GET MEMO <var> [WINDOW <t>, <l>, <b>, <r>]     ;
  988.            [NAME <name> ]                                               ;
  989.            [VALID <valid>] [WHEN <when>] [SEND <msg>]                   ;
  990.       => SetPos( <Top>, <Left> )                                        ;
  991.        ; AAdd( GetList,                                                 ;
  992.                GetMemo( {| Val| iif( Val == NIL, <var>, <var> := Val)}, ;
  993.                         <(var)>, <{valid}>, <{when}>,                   ;
  994.                         <Top>, <Left> - 1, <t>, <l>, <b>, <r>, <name> ) )
  995.  
  996. // EOF - GETMEMO.CH -------------------------------------------------------
  997.  
  998. // TEST.PRG ---------------------------------------------------------------
  999.  
  1000. #include "Inkey.ch"
  1001. #include "Box.ch"
  1002. #include "Getexit.ch"
  1003. #include "Getmemo.ch"
  1004.  
  1005. LOCAL cName  := SPACE(20),                                              ;
  1006.       mNotes := SPACE(100),                                             ;
  1007.       mNotes2 := "This is some data in the memo field",                 ;
  1008.       dDOB   := CTOD(""),                                               ;
  1009.       cBackground := REPLICATE( "CUG Melbourne ", 8 ), i
  1010.  
  1011. MEMVAR GetList
  1012.  
  1013. SET DATE BRITISH
  1014. SET SCOREBOARD OFF
  1015.  
  1016. dDOB   := CTOD("09/03/55")
  1017.  
  1018. SETCOLOR( "W+/B" )
  1019. CLS
  1020.  
  1021. // Draw Background
  1022.  
  1023. CLIPBBS 2-10                   Page 21                  28 Mar 1992
  1024.  
  1025.  
  1026. FOR i := 0 TO 22
  1027.    @ i, 0 SAY SUBSTR( cBackground, i + 1, 80 )
  1028. NEXT
  1029.  
  1030. SETCOLOR( "N/G" )
  1031. @ 4, 4, 11, 37 BOX B_SINGLE + " "
  1032. @ 6, 7 SAY "Name:  " GET cName
  1033. @ 7, 7 SAY "Notes: " GET MEMO mNotes
  1034. @ 8, 7 SAY "DOB:   " GET dDOB
  1035. @ 9, 7 SAY "Data:  " GET MEMO mNotes2 WINDOW 10, 6, 20, 73 NAME "Data"
  1036. READ
  1037.  
  1038. SETCOLOR( "W+/B" )
  1039.  
  1040. @ 24, 1 SAY "Press any key to see the value of GETS ..."
  1041. INKEY(0)
  1042. CLS
  1043.  
  1044. ? "cName   -> " + cName
  1045. ? "mNotes  -> " + MEMOTRAN( mNotes, " ", " " )
  1046. ? "dDOB    -> " + DTOC( dDOB )
  1047. ? "mNotes2 -> " + MEMOTRAN( mNotes2, " ", " " )
  1048.  
  1049. // EOF - GETMEMO.CH -------------------------------------------------------
  1050.  
  1051. ******************************** CONTINUED ********************************
  1052.  
  1053. ********************************* CUT HERE ********************************
  1054.  
  1055. // GETMEMO.PRG ------------------------------------------------------------
  1056. //
  1057. // GetMemo() provides emulation of dBASE style memo gets in Clipper
  1058. //
  1059. // Written by Steve Forbes - Clipper User Group Melbourne - 1 Feb 92
  1060. //
  1061. // ------------------------------------------------------------------------
  1062.  
  1063. FUNCTION GetMemo ( bValue, cVarName, bValid, bWhen,;
  1064.                     nTop, nLeft, t, l, b, r,cName )
  1065. LOCAL oGet
  1066.  
  1067. //--- Create the get object!
  1068. oGet := GetNew( nTop, nLeft, bValue, cVarName )
  1069.  
  1070. IF t == NIL .OR. l == NIL .OR. b == NIL .OR. r == NIL
  1071.    t := l := 0
  1072.    b := MAXROW()
  1073.    r := MAXCOL()
  1074. ENDIF
  1075. //--- Assign the different instance variables!
  1076. oGet:Reader := { | oGet | MemoReader( oGet ) }
  1077.  
  1078. IF oGet:cargo == NIL
  1079.    oGet:cargo := DictNew()
  1080. END
  1081. DictPut( oGet:cargo, "MemoCoord", { t, l, b, r } )
  1082. CLIPBBS 2-10                   Page 22                  28 Mar 1992
  1083.  
  1084.  
  1085. DictPut( oGet:cargo, "MemoName", cName )
  1086.  
  1087. @ oGet:row, oGet:col SAY "MEMO" COLOR ColorPair( oGet:colorSpec, 2 )
  1088.  
  1089. return( oGet)
  1090.  
  1091. // =======================================================================
  1092.  
  1093. FUNCTION MemoReader( oGet )
  1094. LOCAL nKey := 0, cBuffer, cScreen := SAVESCREEN( 0, 0, 24, 79 ), aCoords
  1095. LOCAL cName, cColor
  1096. DISPBEGIN()
  1097. oGet:SetFocus()
  1098. cBuffer := oGet:Buffer
  1099. oGet:KillFocus()
  1100. RESTSCREEN( 0, 0, 24, 79, cScreen )
  1101. DISPEND()
  1102. SETPOS( oGet:row, oGet:col )
  1103. DO WHILE .T.
  1104.    IF LASTKEY() == K_ESC
  1105.       oGet:exitState := GE_ESCAPE
  1106.       EXIT
  1107.    ENDIF
  1108.    nKey := INKEY(0)
  1109.    DO CASE
  1110.       CASE nKey == K_ENTER
  1111.          oGet:exitState := GE_ENTER
  1112.          EXIT
  1113.       CASE nKey == K_UP
  1114.          oGet:exitState := GE_UP
  1115.          EXIT
  1116.       CASE nKey == K_DOWN
  1117.          oGet:exitState := GE_DOWN
  1118.          EXIT
  1119.       CASE nKey == K_F10
  1120.          aCoords := DictAt( oGet:cargo, "MemoCoord" )
  1121.          cName := IF( ( cName := DictAt( oGet:cargo, "MemoName" ) ) == NIL,;
  1122.                         "", " " + cName + " " )
  1123.          cScreen := SAVESCREEN( aCoords[1],     ;
  1124.                                 aCoords[2],     ;
  1125.                                 aCoords[3],     ;
  1126.                                 aCoords[4] )
  1127.          @ aCoords[1], aCoords[2], aCoords[3], aCoords[4] BOX B_DOUBLE_TOP
  1128.          @ aCoords[1], aCoords[2] + 2 SAY cName
  1129.          cColor := SETCOLOR( ColorPair( oGet:colorSpec, 2 ) )
  1130.          cBuffer := MEMOEDIT( cBuffer,        ;
  1131.                               aCoords[1] + 1, ;
  1132.                               aCoords[2] + 1, ;
  1133.                               aCoords[3] - 1, ;
  1134.                               aCoords[4] - 1, ;
  1135.                               .t. )
  1136.  
  1137.          oGet:varPut( cBuffer )
  1138.          SETCOLOR( cColor )
  1139.          RESTSCREEN( aCoords[1], aCoords[2], aCoords[3], aCoords[4], cScreen )
  1140.          SETPOS( oGet:row, oGet:col )
  1141. CLIPBBS 2-10                   Page 23                  28 Mar 1992
  1142.  
  1143.  
  1144.    ENDCASE
  1145. ENDDO
  1146. RETURN ( NIL )
  1147.  
  1148. //=======================================================================
  1149.  
  1150. FUNCTION ColorPair( cColorSpec, nWhich)
  1151. LOCAL n, cRetVal := "," + cColorSpec + ","
  1152. FOR n := 1 TO nWhich
  1153.     cRetVal := SUBSTR( cRetVal, AT( ",", cRetVal) + 1, LEN( cRetVal))
  1154. NEXT
  1155. cRetVal := LEFT( cRetVal, AT( ",", cRetVal) - 1)
  1156. RETURN ( cRetVal)
  1157.  
  1158. // EOF - GETMEMO.PRG ------------------------------------------------------
  1159.  
  1160. -------------------------------------------------------------------------------
  1161. CLIPBBS 2-10                   Page 24                  28 Mar 1992
  1162.  
  1163.  
  1164.                          Clipper file/record locking
  1165.  
  1166. Clipper does not lock the physical record, but instead locks a 1-byte area
  1167. offset (1000 000 000 + record number) bytes from the beginning of the file. I
  1168. found this out by monitoring record locking on Novell 3.1.
  1169.  
  1170. The following Borland C++ program is compatible with Clipper record locking. It
  1171. locks the first record in the database. I works perfectly in tandem with a
  1172. Clipper program on NW386. Locks are denied and permitted just as in a Clipper
  1173. prog.
  1174.  
  1175. #include <io.h>
  1176. #include <fcntl.h>
  1177. #include <sys\stat.h>
  1178. #include <process.h>
  1179. #include <share.h>
  1180. #include <stdio.h>
  1181. #include <conio.h>
  1182.  
  1183. int main(void)
  1184.  
  1185.   int handle, status;
  1186.   long header=0x3B9ACA01,recsize=1;
  1187.  
  1188.   handle=sopen("test.dbf",O_RDWR,SH_DENYNO,S_IREAD);
  1189.   if (handle<0) {
  1190.     printf("sopen failed\n");
  1191.     exit(1);
  1192.   }
  1193.   status=lock(handle,header,recsize);
  1194.   if (status==0)
  1195.     printf("lock succeeded\n");
  1196.   else
  1197.     printf("lock failed\n");
  1198.   getch();
  1199.   status=unlock(handle,header,recsize);
  1200.   if (status==0)
  1201.     printf("unlock succeeded\n");
  1202.   else
  1203.     printf("unlock failed\n");
  1204.   close(handle);
  1205.   return 0;
  1206.  
  1207. -------------------------------------------------------------------------------
  1208. CLIPBBS 2-10                   Page 25                  28 Mar 1992
  1209.  
  1210.  
  1211.                        Get exit code after RUN command
  1212.  
  1213. ----------------------------------------
  1214. (Asm routine to get exitcode to Clipper)
  1215.  
  1216. .MODEL  LARGE
  1217.  
  1218. EXTRN   __retni:FAR
  1219.  
  1220.         PUBLIC  GETELVL
  1221.  
  1222. .CODE
  1223.  
  1224. GETELVL PROC    FAR
  1225.  
  1226.         mov     ah,4dh          ; DOS function Get Return Code
  1227.         int     21h             ; call DOS
  1228.         push    ax              ; push Exit code on stack
  1229.         call    __retni         ; make result available to Clipper
  1230.         add     sp,2            ; reset stack pointer
  1231.         RET
  1232.  
  1233. GETELVL ENDP                    ; End of routine
  1234.  
  1235.         END
  1236.  
  1237. -----------------------------------------
  1238. (Small program to test above asm routine)
  1239.  
  1240. TEST.PRG
  1241.  
  1242.         RUN YOUR_PROGRAM
  1243.         exitcode := getelvl()
  1244.         ? exitcode
  1245.  
  1246. -------------------------------------------------------------------------------
  1247. CLIPBBS 2-10                   Page 26                  28 Mar 1992
  1248.  
  1249.  
  1250. ===============================================================================
  1251.                                    SOFTWARE
  1252. ===============================================================================
  1253.  
  1254.  
  1255.                         Novell FORUMS on Compuserve
  1256.  
  1257.  
  1258. ┌──────────────────────┬───────────────────────┬───────────────────────────┐
  1259. │        NOVA          │       NOVB            │        NOVC               │
  1260. ├──────────────────────┼───────────────────────┼───────────────────────────┤
  1261. │1) ELS NetWare        │ 1) Servers & Workstn  │ 1) General Info/Misc      │
  1262. │2) Async Communic'tns │ 2) Backups            │ 2) Upgrades               │
  1263. │3) Mini/Mainfrme Links│ 3) Printing           │ 3) Application/Utils      │
  1264. │4) LAN/LAN Links      │ 4) Disk Drives/Cntr'lr│ 4) Btrieve/XQL/SQL        │
  1265. │5) NetWare Macintosh  │ 5) K-12 Networking    │ 5) E-Mail/MHS             │
  1266. │6) NetWare VMS        │ 6) Closed - Go NOVA   │ 6) P'gramming & N'Ware    │
  1267. │7) Portable NetWare   │ 7) Closed - Go NOVA   │ 7) NetworkManagement      │
  1268. │8) NW NFS - TCP/IP    │ 8) Power Monitoring   │ 8) ProductSuggestions     │
  1269. │9) NetWare Lite       │ 9) Ethernet           │ 9) UserGroups/Train'g     │
  1270. │10) NSE               │ 10) Arcnet            │ 10) OS/2 Requester        │
  1271. │11) LANalyzer/LANtern │ 11) Token-Ring        │ 11) VAR/Dealertalk        │
  1272. │12) LANWrkPlaceDOS-OS2│ 12) Other LAN types   │ 12) CNEs                  │
  1273. │13) UK Topic          │ 13) Cabling/Media     │ 13) Developers            │
  1274. │14)                   │ 14) New Shells        │ 14) On yourSoapbox!       │
  1275. │15)                   │ 15) Windows           │ 15) The LighterSide       │
  1276. │16)                   │ 16)                   │ 16)                       │
  1277. └──────────────────────┴───────────────────────┴───────────────────────────┘
  1278.  
  1279. ┌──────────────────────┬───────────────────────┬───────────────────────────┐
  1280. │        NETW2X        │         NETW3X        │       NOVLIB              │
  1281. ├──────────────────────┼───────────────────────┼───────────────────────────┤
  1282. │1) Printing           │ 1) Printing           │ 1) Lib Questions Only     │
  1283. │2) Utilities          │ 2) Utilities          │ 2)                        │
  1284. │3) Disk Drives/Cntrls │ 3) Disk Drives/Cntrls │ 3)                        │
  1285. │4) Client/Shells      │ 4) Client/Shells      │ 4)                        │
  1286. │5) LAN Driver/Cards   │ 5) LAN Driver/Cards   │ 5)                        │
  1287. │6) Empty              │ 6) Empty              │ 6)                        │
  1288. │7) Empty              │ 7) Empty              │ 7)                        │
  1289. │8) Empty              │ 8) Empty              │ 8)                        │
  1290. │9) Empty              │ 9) Empty              │ 9)                        │
  1291. │10) Empty             │ 10) Empty             │ 10)                       │
  1292. │11) Empty             │ 11) Empty             │ 11)                       │
  1293. │12) Empty             │ 12) Empty             │ 12)                       │
  1294. │13) Empty             │ 13) Empty             │ 13)                       │
  1295. │14) 2.1x & Below/OS   │ 14) 3.x OS Specific   │ 14)                       │
  1296. │15) 2.2 OS Specific   │ 15)                   │ 15)                       │
  1297. └──────────────────────┴───────────────────────┴───────────────────────────┘
  1298.  
  1299. Novell NOVLIB Forum Libraries Menu
  1300.  
  1301.   1 Novell NEW Uploads
  1302.   2 General Information
  1303.   3 NetWare 2.X Specifc
  1304.   4 NetWare 3.X Specifc
  1305.   5 Client/Shell Drivrs
  1306. CLIPBBS 2-10                   Page 27                  28 Mar 1992
  1307.  
  1308.  
  1309.   6 NetWare Utilities
  1310.   7 Btrieve/XQL
  1311.   8 Mac/UNIX/LANalyzer
  1312.   9 Comunic'tns Product
  1313.  10 NetWare Lite
  1314.  11 Techinfo/IMSP's
  1315.  12 CLOSED
  1316.  13 Other Ptch's/Drvr's
  1317.  14 Independent Devl'mt
  1318.  15 ShareWare/Demo
  1319.  16 Public Domain/Text
  1320.  17 Other NEW Uploads
  1321.  
  1322. -------------------------------------------------------------------------------
  1323.  
  1324.  
  1325.                            What is what (1)
  1326.  
  1327. ADDCOMM 99
  1328.  
  1329.         Advanced communications library for dBASE. Baud rates to 19200
  1330.         bps, Xmodem, Xmodem-CRC, Ascii text capture to .DBF files.
  1331.         COM1 to COM4 supports. Can operate unattended. Includes macro
  1332.         processing
  1333.  
  1334. ARTFUL freshWin
  1335.  
  1336.         Database Warehouse, £129
  1337.  
  1338.         Windowing library, opening as many windows as you like, using
  1339.         popup, exploding or ventian-blind methods. Drag then, size
  1340.         them, float them, color them, say and get to them, hide them,
  1341.         write to them even when hidden. Coded in C and assembly where
  1342.         it counts, for insanely great speed. Complete source in 5.0 and
  1343.         C and assembly, nguide database and manual. Based on OOP
  1344.  
  1345. ARTFUL TWO also as ARTFUL.LIB
  1346.  
  1347.         Database warehouse, £285 for 5.0, £185 for Summer 87
  1348.  
  1349.         Rapid Application Development (RAD) for Clipper programmers:
  1350.  
  1351.         menu designer, dictionary manager, fiel-level dynamic help
  1352.         system, autohelp system displays help on ENTRY INTO a field,
  1353.         report manager, user manager, relational query, relational
  1354.         search, scrolling detail regions, scoped browsers, pusbuttongs,
  1355.         radio buttons, check boxes, field and file selectors,
  1356.         intelligent file maintenance objects, csrolling lookup tables,
  1357.         enumerated fields, milti-tag list boxes, automatic multi user
  1358.         apps, automatic file and index handling, automatic relational
  1359.         protections, dynamically selectable menus, individual colors,
  1360.         all text in header files for easy translations, complete source
  1361.         code in 5.0 and C
  1362.  
  1363. BAR CODE LIBRARY
  1364.  
  1365. CLIPBBS 2-10                   Page 28                  28 Mar 1992
  1366.  
  1367.  
  1368.         Offers a bar code printing facility that can be called from
  1369.         Clipper application, it can print a variety of different
  1370.         formats and supports most major printers. bar code reading
  1371.         systems are available from various other manufacturers.
  1372.  
  1373. BENCHTEST
  1374.  
  1375.         TST program which allow recording and playback of kestrokes in
  1376.         Clipper program. Also screen dumping, pausing with
  1377.         optional messages, sleeping, break points, choices of playback
  1378.         speed. Record to an easy to edit text files. Use for demos,
  1379.         debugging or unattended testing. Requires about 44KB of memory.
  1380.  
  1381. BITON
  1382.  
  1383.         Allows a Clipper application use ORACLE as a data storage
  1384.         medium through function calls. Requires Oracle 5.1b and
  1385.         MicroSoft C alternate Math lib (LLIBCA.LIB). Basic knowledge of
  1386.         Oracle SQL Required.
  1387.  
  1388. BLINKER
  1389.  
  1390.         Fast dynamic overlaylinker for Clipper. 6times faster than
  1391.         PLINK86 with automatic overlaying and compatible with existing
  1392.         .LNK files. also overlays well behaved C and ASM code and .LIB
  1393.         code Included profilling functions a free pool memory packer,
  1394.         burning in of SET CLIPPER variable and serial numbers plues
  1395.         creating of demonstration EXEs. Now supoprots incremental
  1396.         linking and comes with NG database.
  1397.  
  1398. CALC(DB)
  1399.  
  1400.         Fully functional spreadsheet library for Clipper5, Powerfull
  1401.         spreasheet and calculation facilities. Consists of an API which
  1402.         provieds for formula creating, Lotus 123, macro supports. Cell
  1403.         access and control, and coversion between .DBF and .WK1
  1404.  
  1405.  
  1406. CHYDALE DBF PROTECTOR
  1407.  
  1408.         With the addtion of a single line to your source code stops end
  1409.         users accessig DBF files with dBASE, DBU or other utilities,
  1410.         while allowing your application to accessthe files normally.
  1411.         The changes to the DBF can easily be reversed by you allowing
  1412.         YOU total control of access to DBF files.
  1413.  
  1414. CHYDALE DBT REPLACER
  1415.  
  1416.         Replaces DBT file associated with DBF files. Requires very
  1417.         little modification to any existing application to use it.
  1418.         reduces the number of file handles required and saves loads of
  1419.         disk psace, the DBT Replacer can be used to store variable
  1420.         length text and Binary data
  1421.  
  1422. CHYDALE MOUSE DRIVER
  1423.  
  1424. CLIPBBS 2-10                   Page 29                  28 Mar 1992
  1425.  
  1426.  
  1427.         Integrate mouse with your Colipper application using the
  1428.         Chydale Mouse driver and avoid trouble of programming the
  1429.         mouse. One line of code added to your source code enables mouse
  1430.         support for MENU TO, MEMOEDIT, GETs, ACHOICE, DBEDIT and more.
  1431.         A unique new BUTTON facility allows to associate and action
  1432.         with a region on the screen.
  1433.  
  1434. CHYDALE NETWORK LIBRARY
  1435.  
  1436.         Meets the requirements of network programmers. COnsists of thwo
  1437.         main parts, one for user entry protection and the other for
  1438.         user monitoring, Open a view of files in one function call with
  1439.         the view manageer,. System supervisor utility allows control of
  1440.         users by logging their activities and password protection.
  1441.  
  1442. CHYDALTE TEST CASE GENERATOR
  1443.  
  1444.         Generator is designed for programmers wishing to perform
  1445.         realisting test on systems. It fully populates data file
  1446.         avoiding laborious typing. It produces random data which meets
  1447.         constraints set by the programmer - such as ranger or related
  1448.         fileds.
  1449.  
  1450. CHYDALE PROFESSIONAL TOOLKIT
  1451.  
  1452.         DBF Protector, DBT REPLACER, MOUSE DRIVER, NETWORK LIBRARY and
  1453.         CASE GENERATOR
  1454.  
  1455. CHYDALE SUPERCLASS
  1456.  
  1457.         TRUE objects to be defined and created which operate in the
  1458.         same manner as Clipper 5's fixed classes. Create and export
  1459.         instance variables, assign methods just like the predefined
  1460.         classes. Integrates fully with 5.01 debugger, some fully
  1461.         documented sample classes included - menu, stack, image objects
  1462.         and others.
  1463.  
  1464. CL Professional
  1465.  
  1466.         Database Warehouse, £519
  1467.         (C) Dr.Huggle&Partner Gmbh
  1468.  
  1469.         CLTOOLS3.0 and CLREPORT 3.0 and CLTEXT 3.1 included in one
  1470.         package.
  1471.  
  1472. CLARINET
  1473.  
  1474.         Transparent connectivity to Novell's Netware operating system
  1475.         from withing datbase applications. This function library
  1476.         provides direct interation with network without having use
  1477.         external NEtware utilities. Fully network aware applications,
  1478.         includes service for connectios, worskstations, directories,
  1479.         bindery, printing....
  1480.  
  1481. CLASSY
  1482.  
  1483. CLIPBBS 2-10                   Page 30                  28 Mar 1992
  1484.  
  1485.  
  1486.         Adding own real objects (classes) into Clipper. For 5.0 it was
  1487.         shareware, for 5.01 it's classic product for buy.
  1488.  
  1489. CLEAR+
  1490.         Flowchars from source code, high resolution diagrams,
  1491.         multi-level system tree charts, formatted source listing,
  1492.         program flow simulation mode, multi-page charts with line
  1493.         indexing, PCX and PIC file output, zooming and rotation,
  1494.         portrait or landscape orientation. Supports dBASE II, III,
  1495.         III+, IV, Clipper, Focbase, QuickSilver and dBXL.
  1496.  
  1497. CLIP2EB
  1498.  
  1499.         Advantage of POWER of EMERALD BAY without leaving the security
  1500.         of Clipper.
  1501.  
  1502. CLIPFPCX
  1503.  
  1504.         Small and very fast function for displaying one .PCX file on
  1505.         screen. Nothing else, but SHAREWARE and really very fast.
  1506.  
  1507. CLIPPER TOOLS, also called NANTUCKET TOOLS
  1508.  
  1509.         Supported, supplied and written by Nantucket porvides with 270+
  1510.         useful functions covering basic windowing, serial port,
  1511.         database functions, screen, system informations, printer...
  1512.  
  1513. CLIPTOOLS
  1514.  
  1515.         More than 270 functions to help with problems. Store file/field
  1516.         details in text files and use intelligent functions to manage
  1517.         .DBT files, powerful browser and user interface functions,
  1518.         network, relation manipulation, menu system, virtual big screen
  1519.         made from physical screens, low level functions, stack system,
  1520.         full internatl network support, 500pages manual
  1521.  
  1522. CLIPX
  1523.  
  1524.         set of function for windowing, look-ups and popus, implode,
  1525.         explode and slide, DBHANDLE is a powerful replacement for
  1526.         DBEDIT, dbgen generates databases, dbseek seeks
  1527.         first/last/next/prevous key occurence, barmenu handles 4
  1528.         directional bar option selection, completely documented with
  1529.         numerous examples and help for NG engine.
  1530.  
  1531. CLIRMA
  1532.  
  1533.         Clipper and DCA's IRMA subroutines to allow PC programs to
  1534.         drive IBM 3270 mainframe screens via IRMA board. Requires
  1535.         Summer 87 and MS linker v3.61 or later
  1536.  
  1537. CLREPORT 3.0
  1538.  
  1539.         list programming, menu driven report rafting with WYSIWYG user
  1540.         interface, complex evaluations included in reports. Directly
  1541.         linkable runtime modules, more than 300 pritner types, graphics
  1542. CLIPBBS 2-10                   Page 31                  28 Mar 1992
  1543.  
  1544.  
  1545.         and text output, screen output with horizontal and vertical
  1546.         scrolling..
  1547.  
  1548. CLTOOLS 3.0
  1549.  
  1550.         Over 250 functions in 20 groups, mouse, windowing, graphics,
  1551.         operating system, serial interface, string processing, direct
  1552.         access to DOS background printer spooler, 43 line EGA, 256
  1553.         windows, nested GETs
  1554.         windows like surface, graphics library including:
  1555.         -       window processing on graphics screens
  1556.         -       event management for running dialog boxes
  1557.         -       mouse support, buttons, scrollbasrs, icon menues
  1558.         -       about every graphics element you could thing of, image
  1559.                 management, presentation graphics
  1560.         -       PCS support, scan your pictures
  1561.         -       unachieved results in printing
  1562.         -       vector font, rubberbanding
  1563.         -       printer spooler
  1564.         -       serial interface functions
  1565.         -       string management
  1566.  
  1567. CLTEXT 3.1
  1568.  
  1569.         Object oriented text processing, 80 methosd of editing, MS word
  1570.         like in look and feel, 350 printer installations included,
  1571.         source included (probably).
  1572.  
  1573. 123CONNECTION
  1574.  
  1575.         Transparent connectivity to Lotus compatible spreadsheet data
  1576.         from within database applications. Ability to access, read or
  1577.         write existin worksheets or create entirelyt new worksheets,
  1578.         compatible with Lotus 123 release 1.x and 2.x worksheets of
  1579.         unlimited size. Clipper Summer 87 and 5.0 compatible
  1580.  
  1581. CODE BASE
  1582.  
  1583.         "C" library for datbase and screen managemet, Compatible with
  1584.         data, index and memo files of dBASE and CLipper. Allows you to
  1585.         buold a milti-user dBASE/Clipper compatible application with
  1586.         pulldown menus, popup window, data entry from picklists and
  1587.         more. Runs much faster than Clipper of FOX. Needs TurboC++,
  1588.         Microsoft C, Zortech C++ or similar environment.
  1589.  
  1590. COMMTOOLS
  1591.  
  1592.         Give your application the power of communication, Commtols is
  1593.         development tool for CLipper 5.0 and Summer87 whcih extends the
  1594.         Clipper dialect to include comms facilities. Send Faxes, dial
  1595.         modems, importa data via your serial port, supports numernous
  1596.         communications protocols and variety of hardware.
  1597.  
  1598. dANALYST GOLD
  1599.  
  1600.         Converts from ANY single to multi-user application. Also
  1601. CLIPBBS 2-10                   Page 32                  28 Mar 1992
  1602.  
  1603.  
  1604.         provides blocking diagrams, cross references variables,
  1605.         performs data type analysis and lists data structures, Works
  1606.         with DV386 and allows creating of Windows applications. Works
  1607.         with Clipper, dBASE, Foxbase+, QuickSilver or C
  1608.  
  1609. DB2SC4
  1610.  
  1611.         Utility to transcribe data from .DBF files to Supercals 4 and 5
  1612.         formats by specifying record and field ranges and scopes.
  1613.         Character blanks and zeros are automatically excluded. prompt
  1614.         file paramters can automate the program from DOS. Developed in
  1615.         Clipper, linkable object code version is available.
  1616.  
  1617. DBDBAK
  1618.  
  1619.         Database Warehous, £129
  1620.         (c) Data Base Designs
  1621.  
  1622.         Comprehensive backup and restore library with
  1623.         compression/decompression up to 75% with DBF files, robust disk
  1624.         formatting routines, disk "branding", multiple directory backup
  1625.         and file tagging, large file splitting, error handling, arhive
  1626.         library maintenance, disc label printing, incremental file
  1627.         backup.  Clipper source provided.
  1628.  
  1629. DBDMOUSE
  1630.  
  1631.         Pull down menu generator with full mouse support.Written in
  1632.         Assembler.
  1633.  
  1634. DBDSCRL
  1635.  
  1636.         Provides sophisticated method of presenting data on screen with
  1637.         light bar scrolling, mouse support and field pnning with freeze
  1638.         capability. Can be called recursively. Source provided.
  1639.  
  1640. -------------------------------------------------------------------------------
  1641.  
  1642.  
  1643.                          Printing out memory file
  1644.  
  1645.  Here's MEMDUMP program in Clipper 5.01 (converted from Rick Spence's
  1646.  ideas). It fills an array with the contents of a .MEM file.  You would
  1647.  simply dump the contents instead of building the array.
  1648.  
  1649.  // #include "fileio.ch"
  1650. #define MEM_SIZE  32
  1651. #define CRLF chr(13)+chr(10)
  1652. #define MNAME 1
  1653. #define MTYPE 2
  1654. #define MLEN  3
  1655. #define MDEC  4
  1656. FUNCTION memdump( fname )
  1657. local mem_handle, mem_rec, _mem_rec := array(4)
  1658. local csize, value, contents := {}
  1659.     if pcount() != 1 .or. ((mem_handle := fopen(fname)) == -1)
  1660. CLIPBBS 2-10                   Page 33                  28 Mar 1992
  1661.  
  1662.  
  1663.         return contents
  1664.     endif
  1665.     mem_rec := space(32)
  1666.     do while (fread(mem_handle, @mem_rec, MEM_SIZE) == MEM_SIZE)
  1667.         Fill_Array(mem_rec, _mem_rec)
  1668.         do case
  1669.             case _mem_rec[MTYPE] == "C"
  1670.                 csize := _mem_rec[MLEN] + _mem_rec[MDEC] * 256
  1671.                 value := space(csize)
  1672.                 fread(mem_handle, @value, csize)
  1673.             case _mem_rec[MTYPE] == "D"
  1674.                 value := space(8)
  1675.                 fread(mem_handle, @value, 8)
  1676.                 value := IEEE2real( value )
  1677.                 value := ctod('01/01/100') + value - 1757585
  1678.             case _mem_rec[MTYPE] == "L"
  1679.                 value := space(1)
  1680.                 fread(mem_handle, @value, 1)
  1681.                 value := iif(asc(value)==0,".F.",".T.")
  1682.             case _mem_rec[MTYPE] == "N"
  1683.                 value := space(8)
  1684.                 fread(mem_handle, @value, 8)
  1685.                 value := IEEE2real( value )
  1686.         endcase
  1687.         aadd(contents, { _mem_rec[MNAME], ;
  1688.                          _mem_rec[MTYPE], ;
  1689.                          _mem_rec[MLEN], ;
  1690.                          _mem_rec[MDEC], ;
  1691.                          value } )
  1692.     enddo
  1693.     fclose(mem_handle)
  1694. RETURN contents
  1695.  
  1696. PROCEDURE Fill_Array(mem_rec, _mem_rec)
  1697.     _mem_rec[MNAME] := substr(mem_rec, 1, 11)
  1698.     * Fix for Clipper's placement of non-null bytes after null terminator
  1699.     _mem_rec[MNAME] := left(_mem_rec[MNAME], at(chr(0),_mem_rec[MNAME])-1)
  1700.     _mem_rec[MTYPE] := chr( asc( substr(mem_rec, 12, 1)) - 128)  // & 127
  1701.     _mem_rec[MLEN]  := asc(substr(mem_rec, 17, 1))
  1702.     _mem_rec[MDEC]  := asc(substr(mem_rec, 18, 1))
  1703. RETURN
  1704.  
  1705. ************************[ p. 1032, Lief's Book ]**************************
  1706. FUNCTION IEEE2real(cIee)
  1707. // note this function may have glitches on some numbers.
  1708. local retval := 0, k, x1 := "", sign, exponent, fraction
  1709.     if cIee <> replicate(chr(0),8)     // Are all bits set to zero?
  1710.         * x1 will be the 8 bytes converted to it's 64 bit binary equivalent
  1711.         * in text
  1712.         for k := len(cIee) to 1 step -1
  1713.             x1 += Dec2Bin(asc(substr(cIee,k,1)),8)
  1714.         next k
  1715.         sign     := (substr(x1,1,1) == "1")
  1716.         exponent := Bin2dec(substr(x1,2,11)) - 1023
  1717.         fraction := Bin2dec("1"+substr(x1,13),.t.) / (2**52)
  1718.         retval   := if(sign,-1,1) * ( fraction * (2**exponent))
  1719. CLIPBBS 2-10                   Page 34                  28 Mar 1992
  1720.  
  1721.  
  1722.     endif
  1723. RETURN retval
  1724.  
  1725. -------------------------------------------------------------------------------
  1726. CLIPBBS 2-10                   Page 35                  28 Mar 1992
  1727.  
  1728.  
  1729. ===============================================================================
  1730.                                      NEWS
  1731. ===============================================================================
  1732.  
  1733.  
  1734. Clipper Interface Handbook
  1735.  
  1736.  
  1737. There's a new book out called "The Clipper Interface Handbook" by John Mueller
  1738. that describes all about interfacing Clipper with both C and Assembly language.
  1739. It also includes references to DOS interrupts, tips on interfacing a mouse and
  1740. a into a Clipper app and command/function reference for Clipper, C and ASM. The
  1741. book covers all versions to 5.01 (but centers mainly on 5.01).
  1742.  
  1743. Stats  :
  1744. Title  : The Clipper Interface Handbook Version 5.x
  1745. Author : Mueller, John
  1746. ISBN   : 0-8306-3532-7
  1747. Publisher : Windcrest/McGraw Hill
  1748. Price  : $27.95 US Rec Retail
  1749.  
  1750. -------------------------------------------------------------------------------
  1751. CLIPBBS 2-10                   Page 36                  28 Mar 1992
  1752.  
  1753.  
  1754. ===============================================================================
  1755.                                    ANOMALIES
  1756. ===============================================================================
  1757.  
  1758.  
  1759.                      ANOMALIES and their comments
  1760.  
  1761. This part of Clipper BBS Magazine is dedicated to all discovered 
  1762. anomalies and comments about them in Clipper products. Because 
  1763. Nantucket is still unable to give own bug and anomalies reports (as 
  1764. actually did in past with Summer 87 version) is very handy to have 
  1765. results of many investigations done on many user places. I'm also
  1766. doing my own investigatings, because i'm always very good when someting 
  1767. has hidden problems. Everything what i buy will first show all problems 
  1768. and then all normal things. This amazing part of my live is sometime 
  1769. making me crazy, but for testing of programs it's great <grin>.
  1770.  
  1771. Daniel
  1772.  
  1773.  
  1774.  
  1775. -------------------------------------------------------------------------------
  1776. CLIPBBS 2-10                   Page 37                  28 Mar 1992
  1777.  
  1778.  
  1779. ===============================================================================
  1780.                                    COMMENTS
  1781. ===============================================================================
  1782.  
  1783.  
  1784. Funny set SET DATE....
  1785. ----------------------
  1786.  
  1787. This is most probably of the topic, BUT
  1788.   did you know that you could :
  1789.   SET DATE FORMAT TO "CC-YY,MM:DD"
  1790.  
  1791. and your dates would now display as 19-92,01:29
  1792.  
  1793. -------------------------------------------------------------------------------
  1794. CLIPBBS 2-10                   Page 38                  28 Mar 1992
  1795.  
  1796.  
  1797.                             __DOS_HOLD problem
  1798.  
  1799. The __dos-Hold problem arises also when you compile with the latest
  1800. Blinker-releases.  The problem can be solved when you put into your
  1801. module somewhere a function :
  1802.  
  1803. function __dos_hold
  1804. return .t.
  1805.  
  1806. -------------------------------------------------------------------------------
  1807. CLIPBBS 2-10                   Page 39                  28 Mar 1992
  1808.  
  1809.  
  1810. ===============================================================================
  1811.                                   CLIPPER NET
  1812. ===============================================================================
  1813.  
  1814.  
  1815.  
  1816. Following is COMPLETE list of all published file descriptions in Clipper
  1817. BBS magazine in previous numbers. Purpose of this index list is to allow
  1818. anybody find needed file descriptions in growing number of described files.
  1819. Short description after name will give first possible close image about
  1820. file. Number enclosed in "[]" will mean number of Clipper BBS magazine.
  1821.  
  1822. ┌─────────────┬────┬────────────────────────────────────────────────┬──────┐
  1823. │FileName     │Src │Description                                     │Where │
  1824. ├─────────────┼────┼────────────────────────────────────────────────┼──────┤
  1825. │ACCESS.ARJ   │Cln │Source of speed testing program                 │[1-06]│
  1826. │ACH2TB.ARJ   │Cln │Convert ACHOICE to TBROWSE                      │[1-05]│
  1827. │ACHOO2.ARJ   │Cln │Replacement of ACHOICE with GET possibilites    │[1-06]│
  1828. │ADHOC302.ARJ │Cln │Summer 87 inteligent report program             │[1-04]│
  1829. │ASCPOS.ARJ   │Cln │replacement of ASC(substr(cString,nPosition,1)) │[1-11]│
  1830. │BARNTX.ARJ   │Cln │Displaying bar indication during indexing       │[1-13]│
  1831. │BLOCK.ARJ    │Cln │Tetris game written in Cliper                   │[1-19]│
  1832. │BUTTON.ARJ   │Cln │@GET in form of BUTTON                          │[1-14]│
  1833. │CALC14.ARJ   │Cln │PoPup Calculator                                │[1-08]│
  1834. │CIVMIL.ARJ   │Cln │Upgrade of Civil->Military time conversion      │[1-19]│
  1835. │CL5103.ARJ   │Cln │Report of 5.01 anomaly number 3                 │[1-04]│
  1836. │CL5REP6.ARJ  │Cln │5.01 replacement of REPORT command              │[1-04]│
  1837. │CLIP110.ARJ  │Cln │Clipper Documentor program                      │[1-05]│
  1838. │CLIPFPCX.ARJ │Cln │Fast .PCX displayer for CLipper                 │[1-15]│
  1839. │CLIPLINK.ARJ │Cbs │Complete text of R.Donnay about linkers         │[1-04]│
  1840. │CLIPPLUS.ZIP │Cln │Object extension for CLIPPER 5.0                │[1-14]│
  1841. │CLIPSQL.ARJ  │Cln │Demo of complete SQL library for CLipper        │[1-05]│
  1842. │CLIPWARN.AJ  │Cln │Semaphore for convert WARNING: into ERRORLEVEL  │[1-11]│
  1843. │CLPFON.ARJ   │Cln │Set of fonts for EXPAND.LIB from author         │[1-03]│
  1844. │COMET.ARJ    │Cln │Demo version of communication library           │[1-19]│
  1845. │COND.ARJ     │Cln │Builder of conditional indexes like SUBNTX      │[1-03]│
  1846. │CWDEMO.ARJ   │Cln │Classworks lib written in CLASS(Y)              │[1-13]│
  1847. │DBSCN2.ARJ   │Cln │Screen designer generator                       │[1-05]│
  1848. │DIAL.CLN     │Cln │Dialer with using of FOPEN()                    │[1-07]│
  1849. │DOC111.ARJ   │Cln │Documentor, newer version                       │[1-08]│
  1850. │DTF102.ARJ   │Cln │.DBT files replacement, fully functional        │[1-14]│
  1851. │ENDADD.ARJ   │Cln │replacement of incrementing last char of string │[1-11]│
  1852. │GETKEY.ARJ   │Cln │Input oriented library, wordprocessing          │[1-12]│
  1853. │GETPP.ARJ    │Cln │Modified GETSYS.PRG well documented             │[1-19]│
  1854. │GSR151.ARJ   │Cln │Global Search and replace for programmers       │[1-07]│
  1855. │HGLASS.ZIP   │Cln │Hour glass for indication of index progression  │[1-04]│
  1856. │HILITO.ARJ   │Cln │Highlighting of keywords on screen              │[1-19]│
  1857. │HOTKEY.ARJ   │Cln │Makin unique hot key letter for every arrat el. │[1-14]│
  1858. │INDXSL.ARJ   │Cln │User Fields selection builder for index generate│[1-03]│
  1859. │IOBASYS9.ARJ │Cln │Demo of S87 library and calling Clipper from C  │[1-03]│
  1860. │IS.ARJ       │Cln │Several c sources of ISxxxx functions           │[1-11]│
  1861. │JG2.ARJ      │Cln │Jumping between GET statements in READ          │[1-08]│
  1862. │KF_LOKUP.ARJ │Cln │Set of program for database relations           │[1-07]│
  1863. │LUTLIB.ARJ   │Cln │Another Clipper library                         │[1-08]│
  1864. │MK30.ARJ     │Cln │Mouse library demo version                      │[1-03]│
  1865. │MOVEGETS.ARJ │Cln │GETSYS change for moving between gets via VALID │[1-03]│
  1866. CLIPBBS 2-10                   Page 40                  28 Mar 1992
  1867.  
  1868.  
  1869. │MSWIN.ARJ    │Cln │Detection of Windows mode when running Clipper  │[1-14]│
  1870. │NFDESC2.ARJ  │Cln │NanForum library description list               │[1-06]│
  1871. │NFLIB2.ARJ   │Cln │NanForum library main file                      │[1-06]│
  1872. │NFSRC2.ARJ   │Cln │NanForum library Source files                   │[1-06]│
  1873. │NOTATION.ARJ │Cln │Complete text of article about hungarian notat. │[1-04]│
  1874. │NTXBAR.ARJ   │Cln │Bar of indexing via system interrupts           │[1-19]│
  1875. │OCLIP.ARJ    │Cln │Object extension, real (not #define/command)    │[1-12]│
  1876. │OOPSCL5.ARJ  │Cln │Another version of pseudo objects               │[1-07]│
  1877. │PACKUP.ARJ   │Cln │ASM source of PACK/UNPACK replacement SCRSAVE.. │[1-04]│
  1878. │PARTIDX3.ARJ │Cln │Partial indexing                                │[1-12]│
  1879. │PAT1.ARJ     │Cln │CIX NanForum Libraryy PATCH                     │[1-07]│
  1880. │PAT2-2.ARJ   │Cln │Fix for FLOPTST.ASM in Nanforum Library         │[1-13]│
  1881. │PAT2-3.ARJ   │Cln │TBWHILE improvement for Nanforum libray         │[1-14]│
  1882. │PAT2-4.ARJ   │Cln │FT_PEGS() patch for NFLIB                       │[1-15]│
  1883. │PAT2-5.ARJ   │Cln │FT_TEMPFIL() patch for NFLIB                    │[1-16]│
  1884. │POPUPCAL.ARJ │Cln │Popup calender                                  │[1-05]│
  1885. │POSTPRNT.ARJ │Cln │Postscript printing from inside of Clipper      │[1-14]│
  1886. │POWER10.ARJ  │Cln │French library                                  │[1-07]│
  1887. │PRINTSUP.AJR │Cln │Low level BIOS routines for printing            │[1-11]│
  1888. │QS20F.ARJ    │Cln │Screen designer, demo, looks very good          │[1-11]│
  1889. │READPW.ARJ   │Cln │GETSYS change for password invisible reader     │[1-03]│
  1890. │SCANCODE.ARJ │Cln │Database with scan codes                        │[1-07]│
  1891. │SCRSAVE.ARJ  │Cln │Screen AntiBurning utility (inactivity snake)   │[1-05]│
  1892. │SEGUE.ARJ    │Cln │Novell library - demo                           │[1-15]│
  1893. │SHADO.ARJ    │Cln │Creating shadow on screen                       │[1-14]│
  1894. │SHELP50A.ARJ │Cln │SuperHelp for Clipper                           │[1-07]│
  1895. │SHOWANSI.ARJ │Cln │Displaying a ANSI from inside CLIPPER no ANSI.SY│[1-15]│
  1896. │SNAP497.ARJ  │Cln │Beta version of SNAP, partially compatible to 5 │[1-12]│
  1897. │SNAP50.ARJ   │Cln │dBASE/CLIPPER documentor supporting 5.01 little │[1-15]│
  1898. │SOUND.ARJ    │Cln │Multiple TONE() used as one SOUND function      │[1-06]│
  1899. │STATUS.ARJ   │Cln │Timer interrupt hooked status indicator         │[1-12]│
  1900. │SUPER160.ARJ │Cln │SUPER.LIB for Summer87                          │[1-13]│
  1901. │SYMBOL.ARJ   │Cln │Dumper of symbol tables of Summer87 .EXE        │[1-03]│
  1902. │TBUNIQUE.ARJ │Cln │Browsing unique without unique index            │[1-12]│
  1903. │TBWHL4.ARJ   │Cln │WHILE browsing using TBROWSE, well commented    │[1-06]│
  1904. │TICKER.ARJ   │Cln │Real Time Clock, interrupt driven on screen     │[1-12]│
  1905. │VOICE200.ARJ │Cln │VOICE synthetizing library for Clipper          │[1-13]│
  1906. │VSIX711.ARJ  │Cln │Vernon Six Clipper utilities and library        │[1-05]│
  1907. │VSIX800.ARJ  │Cln │Vernon's library, lot of functions              │[1-12]│
  1908. │WIPEV11.EXE  │Cln │VERY good screen manipulation library           │[1-11]│
  1909. │ZIP2BAR.ARJ  │Cln │Printing BAR (USPS) code on EPSON printer       │[1-15]│
  1910. └─────────────┴────┴────────────────────────────────────────────────┴──────┘
  1911.  
  1912. Src can be:
  1913.     Cln     File is accesible on ClipperNet
  1914.     Cbs     File is accesible in HQ BBS of CLipper BBS Magazine
  1915.  
  1916.  
  1917. -------------------------------------------------------------------------------
  1918. CLIPBBS 2-10                   Page 41                  28 Mar 1992
  1919.  
  1920.  
  1921. ===============================================================================
  1922.                                     CLIPBBS
  1923. ===============================================================================
  1924.  
  1925.  
  1926.                              CLIPBBS Distribution
  1927.  
  1928.   CLIPBBS is special magazine about CLIPPER and CLIPPERing (or about
  1929.   another related problems and xBASE languages). This magazine is for
  1930.   free and articles aren't honored. Nobody can make a profit from the
  1931.   distribution of this magazine.
  1932.  
  1933.   CLIPBBS can be freely downloaded and uploaded to any BBS or any other
  1934.   public system without changes of original contents or number of files
  1935.   in original archive (kind of archive can be changed, but we are sup-
  1936.   porting ARJ archive because is best and smallest).
  1937.  
  1938.   If you are interested in CLIPBBS and would like to become a DISTRIBUTION
  1939.   site, contact publisher on 2:285/608@fidonet or 27:1331/4412@signet
  1940.   or just call to 31-10-4157141 (BBS, working 18:00->08:00, top is V32b) or
  1941.   voice to 31-10-4843870 in both cases asking for DANIEL (Docekal).
  1942.  
  1943.   Distribution sites:
  1944.  
  1945.   Clipper BBS Home system  │
  1946.   ─────────────────────────┘
  1947.       NETCONSULT BBS, SYSOP Daniel Docekal, phone 31-10-4157141
  1948.       Daily 18:00 till 08:00 (GMT+1), sat+sun whole day
  1949.       Modem speed 1200, 2400, 9600, 12000, 14400 (V32b)
  1950.       2:285/608@fidonet.org
  1951.  
  1952.   United Kingdom   │
  1953.   ─────────────────┘
  1954.       Welsh Wizard, SYSOP Dave Wall, phone 44-656-79477
  1955.       Daily whole day, modem speed HST
  1956.  
  1957.   Italy   │
  1958.   ────────┘
  1959.       Lady Bright BBS, SYSOP Gianni Bragante, Phone: +39-15-8353153
  1960.       20:00-08:00 monday to friday, from saturday 13:00 to 08:00 monday
  1961.       24h/24h holydays, 300-9600 baud v21,v22,v32,v42bis
  1962.       2:334/307@fidonet.org
  1963.  
  1964.   United States of America  │
  1965.   ──────────────────────────┘
  1966.      The Southern Clipper, SYSOP Jerry Pults, phone 1-405-789-2078
  1967.       Daily whole day, modem speed HST
  1968.  
  1969.       The New Way BBS, SYSOP Tom Held, phone, 1-602-459-2412
  1970.       Daily 24hours, 1:309/1@Fidonet.org, 8:902/6@RBBS-Net
  1971.  
  1972.   Canada    │
  1973.   ──────────┘
  1974.       SYSOP Gordon Kennet, phone 1-604-599-4451 
  1975.       Daily 24houts, 2400bps V42b, 1:153/931@fidonet.org
  1976.  
  1977. CLIPBBS 2-10                   Page 42                  28 Mar 1992
  1978.  
  1979.  
  1980.   WORLDWIDE   │
  1981.   ────────────┘
  1982.   
  1983.       Clipper File Distrubution Network (ClipperNet, area CL-DOC)
  1984.       Various systems around whole world
  1985.  
  1986.  
  1987.  
  1988. -------------------------------------------------------------------------------
  1989. CLIPBBS 2-10                   Page 43                  28 Mar 1992
  1990.  
  1991.  
  1992.                      How to write articles in CLIPBBS?
  1993.   
  1994.   
  1995.   Submission of articles to CLIPBBS is really easy:
  1996.     Maximum of 78 characters per line, as long or as short as you like
  1997.     ASCII text.
  1998.     Choose from the list of extension which most describes your text, or
  1999.     just name it .ART as ARTicle and send it to publisher or to any
  2000.     distribution site via modem to BBS or with mailer as file attach.
  2001.     Article will come automatically appear in the next free issue.
  2002.   
  2003.   Extensions are:
  2004.   
  2005.           Articles (anything)             .ART
  2006.           Software                        .SOF
  2007.           News                            .NEW
  2008.           Question and Answers            .Q&A
  2009.           ANOMALIES and their comments    .ANO
  2010.           Letters to editors              .LET
  2011.           Advertisement                   .ADV
  2012.           Wanted                          .WAN
  2013.           Comments                        .CMS
  2014.           DUMP from conferences           .DMP
  2015.           Clipper Net                     .CLN
  2016.           
  2017.   That's all at the moment, there will probably be changes later, as the
  2018.   magazine evolves. If you have any ideas for a new section of CLIPBBS,
  2019.   please tell us, or just write an article about it.
  2020.   
  2021.   Daniel, publisher
  2022.  
  2023. -------------------------------------------------------------------------------
  2024.