home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-10-08 | 53.6 KB | 1,305 lines |
- ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
- ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
- ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
- ░░░░░░░▓▓▓▓░░▓▓▓▓░░░░░▓▓▓▓░░░▓▓▓▓▓▓░░▓▓▓▓▓▓░░▓▓▓▓▓▓░░░▓▓▓▓░░░░░░░░░░░
- ░░░░░░░░▓▓ ▓▓░░▓▓ ░░░░░▓▓ ░░░▓▓ ▓▓░░▓▓ ▓▓░░▓▓ ▓▓░▓▓ ▓▓░░░░░░░░░░░░
- ░░░░░░░░▓▓ ░░ ░▓▓ ░░░░░░▓▓ ░░░░▓▓ ░▓▓ ░▓▓ ░▓▓ ░▓▓ ░▓▓ ▓▓▓░░ ░░░░░░░░░░░░
- ░░░░░░░░░▓▓ ░░░░░░▓▓ ░░░░░░▓▓ ░░░░▓▓▓▓▓ ░▓▓▓▓▓ ░▓▓▓▓▓ ░▓▓▓░░░░░░░░░░░░░░░░
- ░░░░░░░░░▓▓ ░░░░░░▓▓ ░░▓░░░▓▓ ░░░░▓▓ ░░▓▓ ▓▓░░▓▓ ▓▓░░░ ▓▓▓░░░░░░░░░░░░░░
- ░░░░░░░░░▓▓░░▓▓░░▓▓ ░▓▓ ░░▓▓ ░░░░▓▓ ░░░░░▓▓ ░▓▓ ░▓▓ ░▓▓ ▓▓░░▓▓ ░░░░░░░░░░░░
- ░░░░░░░░░▓▓▓▓ ▓▓▓▓▓▓▓ ░▓▓▓▓░░░▓▓▓▓░░░░▓▓▓▓▓▓ ▓▓▓▓▓▓ ░▓▓▓▓ ░░░░░░░░░░░
- ░░░░░░░░ ░░ ░░ ░░░ ░░░░ ░░ ░░░ ░░░░░░░░░░
- ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
- ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
- ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
-
- Volume 1, Number 7 8 Octomber 1991
-
- (c) Daniel Doçekal, All Rights Reserved
-
- The BBS Clipper magazine, published PERIODICALLY, later WEEKLY......
-
- Some of the material used comes from scanning CLIPPER echoes
- which are carried in various BBS throughout the World.
- These Echoes are very often the source of the most often asked
- Questions and Answers about Clipper.
-
- Other material, which is fully signed or abbreviated is the
- copyright of the appropriate persons.
-
- The publisher is not responsible for other authors submissions....
- Published material is not necessarily the opinion of the publisher.
-
- Redaction:
- Publisher...................................Daniel Docekal
- Chief editor ...............................Daniel Docekal
- Language editor .................................Dave Wall
-
-
-
- Table of Contents
-
- 1. EDITORIAL ............................................................ 1
- Monday editorial ..................................................... 1
- 2. ARTICLES ............................................................. 2
- DOSRCS - Revision Control System - Part (5) .......................... 2
- The Programmer's Guide to CLIPPER Linkers - part (4) ................. 5
- What is faster, FOR or AEVAL? ........................................ 11
- RCS - New version of PUT.BTM for 4DOS (or NDOS) ...................... 13
- 3. Q&A .................................................................. 15
- Clipper 87 books ..................................................... 15
- 4. ANOMALIES ............................................................ 16
- ANOMALIES reports and commets ........................................ 16
- INKEY() function anomaly with SETKEY ................................. 16
- Keyboard codes missing from definition of K_xxxx ..................... 17
- Memoedit() function .................................................. 17
- 5. ADVERTISEMENT ........................................................ 18
- WHAT WAS IN PREVIOUS NUMBER .......................................... 18
- 6. CLIPPER NET .......................................................... 19
- Index of described files in Clipper BBS Magazine ..................... 19
- CLIPBBS 1-07 Table of Contents (...) 8 Oct 1991
-
-
- ClipperNet - DIAL.CLN ................................................ 19
- ClipperNet - GSR151.ARJ .............................................. 20
- ClipperNet - KF_LOKUP.ARJ ............................................ 20
- ClipperNet - OOPSCL5.ARJ ............................................. 21
- ClipperNet - PAT1.ARJ ................................................ 21
- ClipperNet - POWER10.ARJ ............................................. 22
- ClipperNet - SCANCODE.ARJ ............................................ 22
- ClipperNet - SHELP50A.ARJ ............................................ 22
- 7. CLIPBBS .............................................................. 24
- CLIPBBS distribution ................................................. 24
- CLIPBBS, how to write an article!!! .................................. 25
-
- - - - - -
- CLIPBBS 1-07 Page 1 8 Oct 1991
-
-
- =============================================================================
- EDITORIAL
- =============================================================================
-
-
- Monday editorial
-
- Hello all again. It's monday. Yes, it's unusual because of all previous
- ones written on mostly Sunday. Reality is always first before writing fun,
- Satturady and Sunday i spent in optimizing one time critic application
- (FAX/TELEX/E-MAIL server) written as combination of Clipper, C and
- Assembler. It was last piece of Summer 87 code not fully optimized into
- 5.01 Clipper. Thanx god that never again...
-
- OK, get back to main theme. Clipper BBS magazine. Do you, reader, now what
- is wonderfull? I'm publishing, writing and collecting magazine only by my
- own, everybody is telling me, great work, keep it... But what's strange,
- nobody is giving ANY articles (sorry, exception is Pepijn Smits with
- article about his great library). Where are all Clipper freaks with ideas
- good to publish? I'm not expecting someone from U.S. they have own
- Reference Clipper or Nantucket News, but EUROPE? Where they are sleeping?
- Or they are afraid to write not in own language?
-
- Don't be. Own language.... My own language is Czech. It's language of few
- millions of people (less than 10, but more than 5 millions). Country called
- Czechoslovakia located in centre of Europe. Therefore my English is
- sometime bad and i'm sure that some englishman can have lot of fun with
- reading my sentencies or way of writing words. Year ago, i moved to The
- Netherlands to work. Family including my wife, my dog and me is now trying
- to get another language, Dutch as good as we are capable to speak and
- understand English. Unfortunately my wife and me are also journalist and
- there is coming a problem. For me it's easy, technical journalism is just
- easy (writing of books also), but normal one.... Therefore don't be afraid
- to use another strange language.
-
- About what to write? About everything what one can see interesting for
- himself or for some others. Everything what is related to Clipper. It not
- must be real only Clipper thing. Good use of editor, DOS, .BAT files any
- utilities which can help...
-
- Somewhere later,
- Daniel
-
- -----------------------------------------------------------------------------
- CLIPBBS 1-07 Page 2 8 Oct 1991
-
-
- =============================================================================
- ARTICLES
- =============================================================================
-
-
- DOSRCS - Revision Control System - Part (5)
-
- _____________________
- RCS.EXE - Maintanence
- ═════════════════════
-
-
- RCS.EXE is maintenance utility set for controlling RCS system and
- files. Is not very often used, but several jobs must be done via
- this program -
-
- - unlocking of locked revision
- - changing/adding of users of file
-
- RCS can work on files only in case, that caller of RCS is in access
- list of file, user is superuser, or access list is empty or user is
- owner of file or -i options is used.
-
- _____________
- SYNTAX of RCS
-
- RCS [ options ] file ...
-
- _______________
- Options for RCS
-
- -i
-
- Creates and initializes a new RCS file, but does not
- deposit any revision.
-
- -a<logins>
-
- ║ Appends the login names appearing in the COMMA SEPARATED
- ║ list <logins> to the access list of the RCS file. This
- ║ command is NEEDED in network environment to allow several
- ║ programmers work on one file (not at the same time of
- ║ course..). Please note LOWER case of "-a" switch.
-
- -A<oldfiles>
-
- ║ Appends the access list of <oldfile> to the access list of
- ║ RCS specified file. It's needed in case of neccesity make
- ║ the same access list for new file as for old one.
-
-
- -e[<logins>]
-
- ║ ERASES login names appearing in COMMA SEPARATED list
- ║ <logins> from access list of RCS file. If <logins> is
- ║ omitted, ENTIRE access list is erased!
- CLIPBBS 1-07 Page 3 8 Oct 1991
-
-
- -b[<rev>]
-
- Sets the default branch to <rev>. If <rev> is omitted, the
- default branch is reset to the highest branch in the trunk.
-
- -c[<string>]
-
- ║ Sets the comment leader to string. The COMMENT LEADER is
- ║ printer before EVERY log message line generated by the
- ║ keyword $Log$ during CheckOut. This is usefull for
- ║ programming languages without multi-lie comments or for
- ║ better keeping format of your program. During RVS -i or
- ║ initial CI, the comment leader is guessed from the suffix
- ║ of the working file.
-
- -l[<rev>]
-
- Locks the revision with number <rev>. If a branch is given,
- the latest revision on that branch is locked. If <rev> is
- omitted, the latest revision of default branch is locked.
- Locking prevents overlapping changes. Lock is removed with
- CI or with RCS -u.
-
- -u{<rev>]
-
- ║ Unlock the revision with number rev. If a branch is given,
- ║ the latest revision on that branch is unlocked. If <rev> is
- ║ omitted, the latest lock held by the caller is removed.
-
- Normally only locker of a revision may unlock it, but
- sometime is needed to unlock revision without original
- locker. If somebody else than original locker is trying to
- unlock revision, is asked for writing message to original
- locker. In UNIX it's probably working, but in DOS
- environment it has not effect.
-
- -L
-
- │ Sets locking for STRICT. Strict locking means that the
- │ Owner of an RCS file is not exempt from locking for
- │ checkin (normally is possible to get file without lock).
- │ This should be used for files that are shared. Please not
- that -L is upper case "-L".
-
- -U
-
- Sets locking to non-strict. Owner of a file need not lock a
- revision for checkin. Please DO NOT use this option for
- file that are shared with more people.
-
- ║ In DOSRCS version logging is STRICT by DEFAULT.
-
- -n<name>[:<rev>]
-
- ║ Associates SYMBOLIC name <name> with branch or revision
- ║ <rev>. RCS prints an error message if name is already
- CLIPBBS 1-07 Page 4 8 Oct 1991
-
-
- ║ associated with another number. if <rev> is omitted, the
- ║ symbolic name <name> is deleted.
-
- -N<name>[:<rev>]
-
- Same as "-n", except that it overrides a previous
- assignment of <name>.
-
- -o<range>
-
- │ Deletes "outdated" revisions given by range. Range
- │ consisting of a single revision number means that revision.
- │ Range consisting of a branch number means the latest
- │ revision on that branch. Range of from <rev1>-<rev2> means
- │ revisions <rev1> to <rev2> on the same branch, -<rev> means
- │ from beginning of branch containing <rev> up to and
- │ including <rev> and finally <rev>- means from revision
- │ <rev> to the end of the branch containing <rev>. NONE of
- │ the outdated revisions may have branches or locks.
-
- -q
-
- Quite mode, diagnostics is not printed.
-
- -s<state>[:<rev>]
-
- │ Sets the state attribute of the revision <rev> to <state>.
- │ If <rev> is a branch number, the latest revision on that
- │ branch is assumed. Any identifier is acceptable for state.
- │ A useful set of state is:
-
- ║ Exp Experimental
- ║ Stab Stable
- ║ Rel Release
-
- │ Default CI sets the state of revision to EXP.
-
-
- -t[<txtfile>]
-
- Writes descriptive text into the RCS file (deletes existing
- text). If <txtfile> is omitted, RCS prompt the user for
- text, otherwise DESCRIPTIVE text is copied from the file
- <textfile>. If "-i" is presend, text is requested even if
- "-t" is not given.
-
- That's all about this utility control program.
-
- See you later..
- .DD.
-
- -----------------------------------------------------------------------------
- CLIPBBS 1-07 Page 5 8 Oct 1991
-
-
- The Programmer's Guide to CLIPPER Linkers - part (4)
-
- = VIRTUAL MEMORY LINKING (VML) =
-
- Virtual Memory Linking is a technique developed by Pocket Soft,
- Inc. and was introduced in the .RTLINK version 3.1. They
- originally referred to this techique as "dynamic-overlaying"
- which led to a lot of confusion, because it was not at all
- similar to overlaying of code and data, therefore, I proposed
- that this type of linking be referred to as "Virtual Overlays".
- Now, with the release of .RTLINK/Plus 4.0, Pocket Soft is
- calling this technology Virtual Memory Linking (VML), which is
- a much more appropriate name for the technology.
-
- Unlike "dynamic overlays" which are "read-only", virtual overlay
- managers not only overlay the CODE portion of a module, but also
- the portion of a module which is changed during the running of an
- application - the DATA. The data changes are written out to disk
- in temporary files which are managed during the running of the
- application.
-
- Virtual overlays are similar in concept to both the "dynamic-
- overlaying" technique used in RTLINK/Clipper-5.0 when loading
- code from disk into memory combined with the Virtual Memory
- Manager (VMM) system which allocates virtual memory for memvars
- and arrays. When executing a program using virtual overlaying,
- the code is paged from disk to memory on a "least recently used"
- basis. This means that code which has not been used for a while
- is overwritten to make room for the new code, leaving frequently
- used code in memory.
-
- Virtual overlay linkers dynamically allocate the size of the
- object pool for paging code in accordance with the memory
- available during the start of the application. The more memory
- that is available, the less "disk-intensive" the application
- and the better the speed performance. VMM and VML systems
- which are properly designed will automatically execute programs
- in the available memory by making use of conventional memory,
- expanded memory, extended memory and disk.
-
- At the writing of this article, my experience with this type
- of linking is limited to my experience with Clipper-5.0, however
- it is very curious to me that the VML system in RTLINK-4.0 was
- announced at "virtually" the same time the VMM system was
- incorporated in Clipper-5.0. It is only speculation on my
- part, but Pocket Soft's advertising about the features of VML
- and Nantucket's advertising about the features of VMM are so
- similar that it appears to the casual observer that there was
- a collaboration of efforts in the development of this technology,
- or that Microsoft developed the technology and simply handed it
- over to Nantucket and Pocket Soft at the same time. It is
- unclear at the present time, how much of Clipper 5.0's memory
- management is handled by the Clipper Libraries and how much is
- handled by the RTLINK linker.
-
-
- CLIPBBS 1-07 Page 6 8 Oct 1991
-
-
- = SYMBOL-MANAGEMENT =
-
- Symbol Management is a technique that can greatly reduce the
- amount of memory overhead in a linked application. Symbol
- management is a process in which the "symbol table" is managed
- to prevent unneccessary symbols in the main root memory area.
- There is usually very little that a linker can do to resolve
- this problem because the problem is usually caused by the
- compiler and the programmer. Every compiled object contains
- symbols, constants, code and data. Overlay linkers can usually
- do a good job of overlaying code and constants but symbols and
- data must be treated differently. Symbols must always be placed
- in "root" memory for overlay managers to be able to find and load
- the module which contains the called symbol. Unfortunately,
- most linkers are not sophisticated enough to eliminate the
- "redundancy" of symbols which are placed in root memory. For
- example, if you reference the memvar INV_NMBR just one time in
- each of 10 different clipper-compiled objects, there will be
- 10 different symbol-table entries for INV_NMBR, however, if
- you compile your 10 programs into one larger object, then
- INV_NMBR will occupy only 1 memory location in the symbol table
- thereby greatly reducing the root memory allocation.
-
- This can become a delicate balancing act, however, when trying
- to find the proper balance of .OBJ file size verses symbol count
- to make a difference in memory usage. Increasing the .OBJect
- size may increase the overlay area size thereby nullifying the
- memory savings from the reduced symbols. Static and reloable
- overlay linkers do nothing to help this problem because they
- overlay at the "object" level.
-
- ALINK, BLINKER, WARPLINK, dCLIP-2.50, and NOLINK-2.50 all excel
- in the area of symbol management. Memory management with these
- link systems is very efficient because they overlay code segments
- down to the "procedure" level rather than the "module" level.
- This means that you can now compile your large clipper application
- into just a few huge .OBJect files, thereby greatly reducing
- the number of symbols which are placed into "root" memory.
- It is really this "symbol management" of ALINK, BLINKER and
- WARPLINK which make them perform well as memory-management linkers
- as much as their overlaying techniques.
-
- NOLINK, dCLIP and dCLIPRUN provide even better symbol management
- because they not only overlay at the procedure level (when using
- dynamic libraries), but they only create symbols when called for
- during the running of the application. The symbols from a huge
- report that is run once a week will waste valuable memory with
- other linkers, where "true dynamic-linking" will create these
- symbols only at the time the report is being run.
-
- - PROGRAMMING TIPS FOR SYMBOL REDUCTION -
-
-
- This article is basically intended to provide "linking" tips
- for memory-management, however, it is incumbent upon me to
- also offer additional tips on reducing symbol-count in your
- CLIPBBS 1-07 Page 7 8 Oct 1991
-
-
- applications which will work with ALL linkers.
-
- a. USE CONSTANTS INSTEAD OF MEMVARS
-
- Clipper memory variables are always treated as "symbols".
- Refrain from using a memory variable if a constant is sufficient.
- For example, an unnecessary symbol can be eliminated by changing
- the code:
-
- escapekey=27
- DO WHILE INKEY()#escapekey
- *clipper code
- ENDDO
-
- to:
-
- DO WHILE INKEY()#27
- *clipper code
- ENDDO
-
-
- b. USE ARRAYS INSTEAD OF MEMVARS
-
- Every different Clipper memvar name creates a "symbol", whereas
- an array name creates only ONE symbol. The following example
- shows how to save considerable memory in a clipper application
- by reducing the symbol count with an array.
-
- This code produces 10 symbols:
-
- mname = name
- maddress = address
- mcity = city
- mstate = state
- mzip = zip
- @ 1,1 SAY 'Name ' GET mname
- @ 2,1 SAY 'Address' GET maddress
- @ 3,1 SAY 'City ' GET mcity
- @ 4,1 SAY 'State ' GET mstate
- @ 5,1 SAY 'Zip ' GET mzip
- READ
- REPL name WITH mname, address WITH maddress,;
- city WITH mcity, state WITH mstate, zip WITH mzip
-
-
- This code produces 6 symbols:
-
- PRIVATE gets[5]
- gets[1] = name
- gets[2] = address
- gets[3] = city
- gets[4] = state
- gets[5] = zip
- @ 1,1 SAY 'Name ' GET gets[1]
- @ 2,1 SAY 'Address' GET gets[2]
- @ 3,1 SAY 'City ' GET gets[3]
- CLIPBBS 1-07 Page 8 8 Oct 1991
-
-
- @ 4,1 SAY 'State ' GET gets[4]
- @ 5,1 SAY 'Zip ' GET gets[5]
- READ
- REPL name WITH gets[1], address WITH gets[2],;
- city WITH gets[3], state WITH gets[4], zip WITH gets[5]
-
-
- c. USE THE SAME NAME MEMVARS WHENEVER POSSIBLE
-
- Again, every "different" Clipper memvar in a module creates
- a symbol. If an object contains several procedures, use the
- same name for memvars even though they may not perform the same
- or similar functions. For example, procedure A and procedure B
- both need 5 memvars. If procedure A declares its memvars with
- 5 unique names and procedure B declares its memvars with 5
- unique names, then 10 symbols are used in the linked application.
- To eliminate 5 symbols, make sure that procedure B assigns the
- same name to the memvars as procedure A. This is not possible
- of course, if the memvars need to be public to both procedures
- and perform different functions, only if they are private.
-
-
-
- - USING THE CLIPPER-5.0 PRE-PROCESSOR FOR SYMBOL MANAGEMENT -
-
-
- The above techniques for symbol reduction may not be practical in
- all programming situations because of the "cryptic" method in
- which you must treat your memvar declarations. Clipper 5.0 solves
- this problem and also makes it easier to do steps 1 and 2 above by
- including a language "pre-processor" which allows you to program
- using non-cryptic language extensions then convert your code at
- compile time to memory-efficient use of arrays or constants.
-
- Let's look at how you would use Clipper-5.0 pre-processor
- definitions to solve the problems in examples 1 and 2 above.
-
-
- 1. CONVERTING MEMVARS TO CONSTANTS AT COMPILE-TIME
-
- #define escapekey 27
- DO WHILE INKEY()#escapekey
- *clipper code
- ENDDO
-
-
- 2. CONVERTING MEMVARS TO ARRAYS AT COMPILE-TIME
-
- #ifndef DEBUG && compiling non-DEBUG version
- PRIVATE gets[5]
- #define mname gets[1]
- #define maddress gets[2]
- #define mcity gets[3]
- #define mstate gets[4]
- #define mzip gets[5]
- #endif
- CLIPBBS 1-07 Page 9 8 Oct 1991
-
-
- mname = name
- maddress = address
- mcity = city
- mstate = state
- mzip = zip
- @ 1,1 SAY 'Name ' GET mname
- @ 2,1 SAY 'Address' GET maddress
- @ 3,1 SAY 'City ' GET mcity
- @ 4,1 SAY 'State ' GET mstate
- @ 5,1 SAY 'Zip ' GET mzip
- READ
- REPL name WITH mname, address WITH maddress,;
- city WITH mcity, state WITH mstate, zip WITH mzip
-
-
- To compile the above code WITHOUT symbol substitution for
- debugging purposes, compile as follows:
-
- CLIPPER <my app> /rDEBUG
-
- To compile the above code WITH symbol substitution for
- your final application, compile as follows:
-
- CLIPPER <my app>
-
- The /rDEBUG switch has the same effect as the comand:
-
- #define DEBUG
-
- in your source code, however, it is much more convenient because
- it allows you to make debug or non-debug versions of your code
- simply from the DOS command line or .BAT files.
-
-
- SYMBOL COMPACTION
-
- Some linkers include "symbol-compaction" techniques to help
- eliminate the problem caused by the duplicate symbols in each
- Clipper object file. RTLINK/Clipper-5.0 automatically
- eliminates duplicate symbols during linking, thereby eliminating
- the need to compile your .PRG files into larger objects using
- .CLP files. I experimented with a large application of mine
- in which I compiled the source code into 100 objects, then 10
- objects, and finally only 3 objects. The number and size of
- the object files made absolutely no difference in the output
- size of the .EXE produced by RTLINK/Clipper-5.0, whereas each
- of these models would have produced drastically differenct
- results with any other linker.
-
- WARPLINK provides a utility named SP.EXE (written by Steve
- Klingler) which essentially performs the same task, however,
- symbol-compaction with WARPLINK is a two-step process. First
- the .EXE must be created using WARPLINK.EXE, followed by
- running SP.EXE using the following syntax:
-
- SP <input file .EXE name> <output file .EXE name>
- CLIPBBS 1-07 Page 10 8 Oct 1991
-
-
- The results, in some cases can be dramatic. In one of my
- applications, SP.EXE removed 908 duplicate symbols from the
- symbol table and reduced my .EXE by 15k.
-
- SP.EXE will work only on .EXE files created with WARPLINK or
- .EXE files which contain no overlays.
-
- -----------------------------------------------------------------------------
- CLIPBBS 1-07 Page 11 8 Oct 1991
-
-
- What is faster, FOR or AEVAL?
-
-
- New test is here. This time we will be taking a look at AEVAL and
- FOR cycles used in ekvivalent situations. As usual, we will see
- that AEVAL with codeblock is again slower than classic application
- of FOR cycle with the same effect.
-
- Remember? In some previous number we did a tests of DBEVAL and FOR,
- therefore logically is coming test of AEVAL and FOR.
-
- Overwiew
- ALL tests are using this definition of variables:
- │ local aTest := ARRAY(1000) ,;
- │ n , start
-
- ARRAY has only 1000 of values for avoiding cases of
- disk swappings in smaller memories.
-
- TEST1 is FOR and is filling array with values of value index
- │ start := seconds()
- │ for n:=1 to 1000
- │ aTest[n]:=n
- │ next
- │ ? 'for elapsed in ', seconds()-start
-
- TEST2 is AEVAL equivalent of TEST1
- │ start := seconds()
- │ n := 1
- │ aeval(aTest,{|xx| xx:=n++})
- │ ? 'aeval elapsed in ', second()-start
-
- TEST3 is FOR and is displaying complete ARRAY on screen
- │ start := seconds()
- │ for n:=1 to 1000
- │ QQout(aTest[n],chr(13))
- │ next
- │ ?
- │ ? 'for qqout elapsed in ', seconds()-start
-
- TEST4 is AEVAL equivalent of TEST3
- │ start := seconds()
- │ aeval(aTest,{|xx| QQout(xx,chr(13))})
- │ ?
- │ ? 'aeval qqout elapsed in ', seconds()-start
-
- TEST5 is FOR + EVAL equivalent of TEST3
- │ start:=seconds()
- │ for n:=1 to 1000
- │ eval({|| QQout(aTest[n],chr(13))})
- │ next
- │ ?
- │ ? 'for+eval elapsed in ', seconds()-start
-
-
- All those tests i runned on AT286/16Mhz Laptop with normal memory,
- CLIPBBS 1-07 Page 12 8 Oct 1991
-
-
- no EMS, nothing special (free about 550KBs).
-
- Results are:
-
- │ T1 │ T2 ║ T3 │ T4 │ T5 │
- ├───────┼───────╫───────┼───────┼───────┤
- │ 0.28 │ 0.38 ║ 2.08 │ 2.20 │ 2.52 │
-
- And interpretation?
-
- T1 and T2 are telling, that AEVAL is slower for 0.1 of
- second on initialization of 1000 of values in array.
- Actually cannot be expected nothing else, because is here
- evaluation of code block with passing values instead of
- just executing assig of value directly in FOR. But at all
- NANTUCKET maybe can do something with those results...
-
- T3 and T4 are telling the same, AEVAL was slower again for
- displaying of 1000 values than the same FOR cycle.
-
- T3/4 and T5 are only comparing FOR with executed command
- and FOR with EVALuated codeblock. It's actually most
- ekvivalent of T4. It's of course significantly slower,
- because of overhead of EVALuating codeblock instead of
- normal executing.
-
- Cheers
- Daniel
-
- -----------------------------------------------------------------------------
- CLIPBBS 1-07 Page 13 8 Oct 1991
-
-
- RCS - New version of PUT.BTM for 4DOS (or NDOS)
-
- In some cases is Clipper BBS Magazine slower than actual development which
- i'm doing during using of some new programs. Typicall example of this case is
- serie of BATCH files which i'm slowly upgrading for use of RCS with mine
- installation of 4DOS (NDOS of course also for all who have Norton Utilities
- 6.0 from Symantec).
-
- PUT.BTM (.BTM is extension of fast batch file in 4DOS) is slightly changed:
-
- ------------------------------<PUT.BTM>-----------------------------------
- @echo off
- SET P$=N
- IFF NOT "%1"=="" THEN
- IFF %@index[%1,*]==-1 THEN
- IFF %@index[%1,?]==-1 THEN
- echo ■
- echo ■ Processing single file %1
- echo ■
- IFF "%2"=="" THEN
- call rcsput %1 R
- ELSE
- call rcsput %1 %2 %3 %4 %5 %6 %7 %8 %9
- ENDIFF
- ELSE
- SET P$=Y
- ENDIFF
- ELSE
- SET P$=Y
- ENDIFF
- IFF %P$%==Y THEN
- echo ■
- echo ■ Processing from list defined as %1
- echo ■
- IFF "%2"=="" THEN
- for %%i in (%1) do call rcsput %%i R
- ELSE
- for %%i in (%1) do call rcsput %%i %2 %3 %4 %5 %6 %7 %8 %9
- ENDIFF
- ENDIFF
- ELSE
- echo ■ PUT Usage:
- echo ■ PUT filename [RFLU] rev_number [symbolic_name]
- echo ■ filename can be with "*" and "?" signs also
- echo ■ R = check in [default]
- echo ■ F = force check in
- echo ■ L = checkin and then check out
- echo ■ U = check in and then check out and not lock
- echo ■
- ENDIFF
- SET P$=
- ------------------<eof>----------------------------------------------------
-
- File which is called from main batch file is:
-
- <-------------------------<RCSPUT.BTM>------------------------------------>
- CLIPBBS 1-07 Page 14 8 Oct 1991
-
-
- @echo off
- echo ■
- echo ■ Processing [%1] with rev.num %3 as -%@lower[%2] %4 %5 %6 %7 %8 %9
- echo ■
- IFF "%4"=="" THEN
- CI -q -%@lower[%2]%3 %1
- ELSE
- CI -q -%@lower[%2]%3 -N%4 %1
- ENDIFF
- <--------------------<EOF>----------------------------------------------->
-
-
- And that's all. Question about 'downgrade' to normal standard .BAT files of
- DOS is little bit problematic because of absence functions like @index which
- are like AT() function in Clipper....
-
- .DD.
-
- P.S. Above is REAL BATCH FILE in simple and nice 4DOS (SHAREWARE!!!)
-
- -----------------------------------------------------------------------------
- CLIPBBS 1-07 Page 15 8 Oct 1991
-
-
- =============================================================================
- Q&A
- =============================================================================
-
-
- Clipper 87 books
-
- Question: Could someone recommend Summer87 related books?
-
- Answer:
-
- Dynamics of Clipper
- by: Arthur Fuller
- pub: Dow Jones-Irwin Software Guides
- ISBN: 1-55623-131-8
- Date: 1989
-
- Using Clipper
- by: W. Edward Tiley
- pub: Que Corporation
- ISBN: 0-88022-379-0
- Date: 1988
-
- -----------------------------------------------------------------------------
- CLIPBBS 1-07 Page 16 8 Oct 1991
-
-
- =============================================================================
- ANOMALIES
- =============================================================================
-
-
- ANOMALIES and their comments
-
- This part of Clipper BBS Magazine is dedicated to all discovered
- anomalies and comments about them in Clipper products. Because
- Nantucket is still unable to give own bug and anomalies reports (as
- actually did in past with Summer 87 version) is very handy to have
- results of many investigations done on many user places. I'm also
- doing my own investigatings, because i'm always very good when someting
- has hidden problems. Everything what i buy will first show all problems
- and then all normal things. This amazing part of my live is sometime
- making me crazy, but for testing of programs it's great <grin>.
-
- Daniel
-
-
-
- -----------------------------------------------------------------------------
-
-
- INKEY() function anomaly with SETKEY
-
- Another problem which somebody could expect that have to be solved is
- fact, that all SETKEY sets aren't working when one is using INKEY()
- function. Because INKEY() is just ONLY reading keyboard. In all other
- places where keyboard is read are all SETKEY sets executed correctly.
- But, when programmer will start to use INKEY() in more places, then
- will have problem, all SETKEY sets aren't valid and programmer MUST
- take care of them by special routines or DO CASE checks. My expectation
- that this nonlogical fact will be corrected is wrong. INKEY() is still
- don't recognizing SETKEY sets.
-
- Solving:
- don't use INKEY(), you easy can all INKEY() callings
- replace with call to new function:
-
- Function MyInkey(nnn)
- local value := 0 , cBlock
- while .t.
- if valtype(nnn)!="N"
- value:=inkey() // inkey WITHOUT parameter
- else
- value:=inkey(nnn) // inkey WITH parameter
- endif
- if (cBlock:=setkey(value))!=NIL
- Eval(cBlock) // test if valid SETKEY
- loop // and then continue
- endif
- return (value)
-
- This possible (and easy) solving has this advantages:
- - fully compatible with INKEY() function in parameter
- CLIPBBS 1-07 Page 17 8 Oct 1991
-
-
- passing and value returning
- - taking care of your SETKEY sets and executing (better
- evaluating) them without special testings or actions
- - all LASTKEY() stuff is still the same because of
- original INKEY() using
-
- .DD.
-
- -----------------------------------------------------------------------------
-
-
- Keyboard codes mising from definition of K_xxxx
-
- When received 5.01 my expectation was, that INKEY.CH was expanded to
- some missing keyboard codes. Not only codes from extended keyboard
- (because they are disputable), but also codes for normal keyboard which
- weren't in 5.0 INKEY.CH.
-
- Truth is different, INKEY.CH is still missing extended codes and from
- basic codes, K_SPACE ,just easy code is NOT included in INKEY.CH
-
- Solving:
- just update your INKEY.CH with (example):
- #define K_SPACE 20
- #define K_CTRL_UP 397
- #define K_CTRL_DOWN 401 ....
-
- .DD.
-
- -----------------------------------------------------------------------------
-
-
- Memoedit() function
-
- A more comments i will give to MEMOEDIT() function.
-
- First problem which i had with Memoedit() in Clipper 5.0 was a problem
- that there IS NOT a way to access edited string from INSIDE of
- Memoedit(). One can access ONLY original string, but edited (and
- continuously changed) string is hidden somewhere in Clipper memory. I
- reported this problem already to Nantucket a LONG time ago, the told
- "will be solved in new version", but true is again different. And i'm
- so sure, that this isn't so problem.
-
- In Clipper 5.0 there was a BIG problem with MemoEdit() function when
- there was a very small free memory for your program (about 30KB after
- loading program in memory). Then Memoedit in some cases did HANG of
- whole system. Probably it had something to do with RTLINK inability to
- handle proper overlaying when there was a small memory. This problem is
- PARTIALLY out. One need more smaller memory to hang system with
- Memoedit (10KB to 20KB). Hope, somebody will take care of this, because
- to have hanging editor (yes, PE.EXE distributed with CLIPPER will hang
- too) inside of application running just close to free memory is pity.
-
- .DD.
-
- -----------------------------------------------------------------------------
- CLIPBBS 1-07 Page 18 8 Oct 1991
-
-
- =============================================================================
- ADVERTISEMENT
- =============================================================================
-
-
- WHAT WAS IN PREVIOUS NUMBER
-
- DOSRCS - Revision Control System - part (4)
- The Programmer's Guide to CLIPPER Linkers - part (3)
- Best way of making FOR cyclus, and what about WHILE cyclus
- WHICH packing/unpacking program to choose???????
- Will Clipper expand to graphics environment?
- TIPS&TRICKS - how to found largest string in array
- DANIEL.LIB - NEW version of DANIEL.RMK
- ANOMALIES reports and commets
- Clipper Debugger anomalies
- INCONSISTENCY
- New RTLINK version, INCREMENTAL LINKING
- CONFERENCE DUMP part (5)
- Index of described files in Clipper BBS Magazine
- Routing-Plan for ClipperNet
- CLN - SOUND.ARJ 30
- CLN - TBWHL4.ARJ . 31
- ClipNet - NFDESC2.ARJ
- ClipNet - NFLIB2.ARJ
- ClipNet - NFSRC2.ARJ
- ClipperNet - ACCESS.ARJ
- ClipperNet - ACHOO2.ARJ
-
- -----------------------------------------------------------------------------
- CLIPBBS 1-07 Page 19 8 Oct 1991
-
-
- =============================================================================
- CLIPPER NET
- =============================================================================
-
-
-
- Following is COMPLETE list of all published file descriptions in Clipper
- BBS magazine in previous numbers. Purpose of this index list is to allow
- anybody find needed file descriptions in growing number of described files.
- Short description after name will give first possible close image about
- file. Number enclosed in "[]" will mean number of Clipper BBS magazine.
-
- ┌─────────────┬────┬────────────────────────────────────────────────┬──────┐
- │FileName │Src │Description │Where │
- ├─────────────┼────┼────────────────────────────────────────────────┼──────┤
- │ACCESS.ARJ │Cln │Source of speed testing program │[1-06]│
- │ACH2TB.ARJ │Cln │Convert ACHOICE to TBROWSE │[1-05]│
- │ACHOO2.ARJ │Cln │Replacement of ACHOICE with GET possibilites │[1-06]│
- │ADHOC302.ARJ │Cln │Summer 87 inteligent report program │[1-04]│
- │CL5103.ARJ │Cln │Report of 5.01 anomaly number 3 │[1-04]│
- │CL5REP6.ARJ │Cln │5.01 replacement of REPORT command │[1-04]│
- │CLIP110.ARJ │Cln │Clipper Documentor program │[1-05]│
- │CLIPLINK.ARJ │Cbs │Complete text of R.Donnay about linkers │[1-04]│
- │CLIPSQL.ARJ │Cln │Demo of complete SQL library for CLipper │[1-05]│
- │CLPFON.ARJ │Cln │Set of fonts for EXPAND.LIB from author │[1-03]│
- │COND.ARJ │Cln │Builder of conditional indexes like SUBNTX │[1-03]│
- │DBSCN2.ARJ │Cln │Screen designer generator │[1-05]│
- │HGLASS.ZIP │Cln │Hour glass for indication of index progression │[1-04]│
- │INDXSL.ARJ │Cln │User Fields selection builder for index generate│[1-03]│
- │IOBASYS9.ARJ │Cln │Demo of S87 library and calling Clipper from C │[1-03]│
- │MK30.ARJ │Cln │Mouse library demo version │[1-03]│
- │MOVEGETS.ARJ │Cln │GETSYS change for moving between gets via VALID │[1-03]│
- │NFDESC2.ARJ │Cln │NanForum library description list │[1-06]│
- │NFLIB2.ARJ │Cln │NanForum library main file │[1-06]│
- │NFSRC2.ARJ │Cln │NanForum library Source files │[1-06]│
- │NOTATION.ARJ │Cln │Complete text of article about hungarian notat. │[1-04]│
- │PACKUP.ARJ │Cln │ASM source of PACK/UNPACK replacement SCRSAVE.. │[1-04]│
- │POPUPCAL.ARJ │Cln │Popup calender │[1-05]│
- │READPW.ARJ │Cln │GETSYS change for password invisible reader │[1-03]│
- │SCRSAVE.ARJ │Cln │Screen AntiBurning utility (inactivity snake) │[1-05]│
- │SOUND.ARJ │Cln │Multiple TONE() used as one SOUND function │[1-06]│
- │SYMBOL.ARJ │Cln │Dumper of symbol tables of Summer87 .EXE │[1-03]│
- │TBWHL4.ARJ │Cln │WHILE browsing using TBROWSE, well commented │[1-06]│
- │VSIX711.ARJ │Cln │Vernon Six Clipper utilities and library │[1-05]│
- └─────────────┴────┴────────────────────────────────────────────────┴──────┘
-
- Src can be:
- Cln File is accesible on ClipperNet
- Cbs File is accesible in HQ BBS of CLipper BBS Magazine
-
-
- -----------------------------------------------------------------------------
-
-
- ClipperNet - DIAL.CLN
-
- CLIPBBS 1-07 Page 20 8 Oct 1991
-
-
- File Name: DIAL.CLN
- Other Names:
-
- File Size: 1,791 bytes
- File Contents:
- DIAL.PRG 4297
-
- Dialer program written for CLIPPER 5.0 with many back steps coming from
- fact that author was for sure Summer87 programmer. It's using ONLY Clipper
- code, nothing from any other language. FOPEN is used for opening of COM
- port, and FWRITE for putting all AT commands on this. Easy and limited
- of course.
-
- .DD.
-
- -----------------------------------------------------------------------------
-
-
- ClipperNet - GSR151.ARJ
-
- File Name: GSR151.ARJ
- Other Names:
-
- File Size: 140,879 bytes
- File Contents:
- GSR.DOC 16478
- GSR.EXE 148300
- GSR.SDA 1552
- GSRAVOID.DBF 141
-
- This, big set of files, is really needed utility of Clipper programmer.
- Global search and replace.
-
- GSR now works on ANY size file. You may select a single file, or a group of
- files to operate on. You specify what text to look for, and what text to
- replace it with. Your search can be either case sensitive or not. You may
- either view each occurance, to verify the change, or have GSR automatically
- make all replacements for you.
-
- The search and/or replace string can be read from a disk file allowing you
- to search for and replace binary or text strings made with your choice of
- editor. In any case, if you choose to make the replacements, your original
- file will be saved with the extension .GSR. Subsequent changes will
- increment the .GSR extension, with up to 99 changes kept on any single file
- name. Like .gsr .gs1 .gs2 up to .g99
-
- Find all occurances of any text and replace it with other text. Rename an
- existing variable across many programs. Change a copyright notice.
- Change a client name when you are recycling code. and many more.....
-
-
- .DD.
-
- -----------------------------------------------------------------------------
-
-
- CLIPBBS 1-07 Page 21 8 Oct 1991
-
-
- ClipperNet - KF_LOKUP.ARJ
-
- File Name: KF_LOKUP.ARJ
- Other Names:
-
- File Size: 12,028 bytes
- File Contents:
- KF_LKUP.PRG 18889
- KF_PPDBF.PRG 4584
- KF_UTIL.PRG 13340
- READ.ME 4106
-
- Set of lookup function related to relations between databases.
- Documentation is too less descriptive and i hadn't enough of patience to
- scan through source codes...
-
- Contains some usefull conversion functions also and two functions for
- saving and restoring database status on stack (made by static variable of
- course).
-
- .DD.
-
- -----------------------------------------------------------------------------
-
-
- ClipperNet - OOPSCL5.ARJ
-
- File Name: OOPSCL5.ARJ
- Other Names:
-
- File Size: 2,826 bytes
- File Contents:
- CLASSES.PRG 4387
- DEMO.PRG 2685
- OOPS.H 1465
-
- Another version of _pseudo_ objects. this one is very small and very
- simple, therefore nice to learn about how to make pseudo objects. It's
- known, that pitty use of preprocessor can create pseudo objects which are
- in fact array keeping all needed information.
-
- .DD.
-
- -----------------------------------------------------------------------------
-
-
- ClipperNet - PAT1.ARJ
-
- File Name: PAT1.ARJ
- Other Names:
-
- File Size: PAT1.ARJ
- File Contents:
- ORIGIN.ASM 3404
- ORIGIN.OBJ 170
- PAT1.DOC 1035
- CLIPBBS 1-07 Page 22 8 Oct 1991
-
-
- PATCH number one for Nanforum Toolkit Library version 2.0.
-
- ORIGIN.ASM is replacement for the same named file in sources, ORIGIN.OBJ is
- possible just use as replace for .LIB file (LIB -+ORIGIN.OBJ).
-
- Function for returning location of .EXE was returning normally garbage,
- this is fix.
-
- .DD.
-
- -----------------------------------------------------------------------------
-
-
- ClipperNet - POWER10.ARJ
-
- File Name: POWER10.ARJ
- Other Names:
-
- File Size: 138,668 bytes
- File Contents:
- LISEZ.MOI 2560 POWERCOM.MEM 1706
- POWER.INS 95 POWER.NG 214796
- GO.BAT 2262 NOSILVER.OBJ 3638
- POWER.CH 3898 POWER.PRG 35142
- POWER.LIB 236419 POWERCOM.PRG 11718
- POWER.MEM 1706
-
- Another library. Pitty is, that ALL about this library is written ONLY and
- ONLY in FRENCH language. And i'm not so good in this (actually my knowledge
- of french is zero). From function names it looks nice, but author could
- choose better language for distributing library worldwide :-)
-
- .DD.
-
- -----------------------------------------------------------------------------
-
-
- ClipperNet - SCANCODE.ARJ
-
- File Name: SCANCODE.ARJ
- Other Names:
-
- File Size: 2,154 bytes
- File Contents:
- SCANCODE.DBF 5719
-
- Database file contains list of scan codes of keyboard for use in DOS
- services. It is NOT the same as INKEY() codes!
-
- .DD.
-
- -----------------------------------------------------------------------------
-
-
- ClipperNet - SHELP50A.ARJ
-
- CLIPBBS 1-07 Page 23 8 Oct 1991
-
-
- File Name: SHELP50A.ARJ
- Other Names:
-
- File Size: 124,163 bytes
- File Contents:
- DEMO.BAT 1981 MVCLIP50.LIB 21621
- HINTS.TXT 3534 ORDER.FRM 1396
- HELP.PRG 5697 SHELP50.LIB 206279
- HELPCON.PRG 3742 HELPDEMO.PRG 5334
- SCREENS.DBT 29601 PROJECT.HLP 2727
- SYSHELP.DBT 76399 L.LNK 192
- HELPLIB.PRG 7670 HSETUP.HLP 8
- SUPERV25.DOC 198 CLIPPER.501 15
- HELPMGR.PRG 5113 VERSION.50 26
- SHELP.MGR 913 PROJECT.PRJ 238
- SCREENS.HLP 396 HELPMGR.DBF 813
- SYSHELP.HLP 6410 PRINT.ME 13266
- SYSLINK.HLP 690
- SHELP.REF 41809
-
- Super Help for Summer87 and Clipper 5.01 both. It's able to generate field
- or conceptual level help. Support for project management, creating help
- screens, linking help windows, creating of help index, windowing effects...
-
- Seems like very good help. Maybe later i will do some testings...
-
- ------10 minutes later------
-
- After trying to make a demo program included.
-
- 1) authors are dreaming everybody has BLINKER and link script is
- only for BLINKER. Must be changed
- 2) CLIPPER compilation of programs is missing some switches and
- bombing immediately out. +++NEEDS /M ++++++
- 3) List of libraries must include BOTH .LIB presented in file
- otherwise one will get list of LOT missing....
- 4) After this it's working, but my patience to totally strange
- system of screens was not enough long....
-
- .DD.
-
- -----------------------------------------------------------------------------
- CLIPBBS 1-07 Page 24 8 Oct 1991
-
-
- =============================================================================
- CLIPBBS
- =============================================================================
-
-
- CLIPBBS Distribution
-
- CLIPBBS is special magazine about CLIPPER and CLIPPERing (or about
- another related problems and xBASE languages). This magazine is for
- free and articles aren't honored. Nobody can make a profit from the
- distribution of this magazine.
-
- CLIPBBS can be freely downloaded and uploaded to any BBS or any other
- public system without changes of original contents or number of files
- in original archive (kind of archive can be changed, but we are sup-
- porting ARJ archive because is best and smallest).
- If you are interested in CLIPBBS and would like to become a DISTRIBUTION
- site, contact publisher on 2:285/608@fidonet or 27:1331/4412@signet
- or just call to 31-10-4157141 (BBS, working 18:00->08:00, 2400bps) or
- voice to 31-10-4843870 in both cases asking for DANIEL (Docekal).
-
- Distribution sites:
-
- United Kingdom
- Welsh Wizard, SYSOP Dave Wall, phone 44-656-79477
-
- United States of America
- The Southern Clipper, SYSOP Jerry Pults, phone 1-405-789-2078
-
- -----------------------------------------------------------------------------
- CLIPBBS 1-07 Page 25 8 Oct 1991
-
-
- How to write articles in CLIPBBS?
-
-
- Submission of articles to CLIPBBS is really easy:
- Maximum of 78 characters per line, as long or as short as you like
- ASCII text.
- Choose from the list of extension which most describes your text, or
- just name it .ART as ARTicle and send it to publisher or to any
- distribution site via modem to BBS or with mailer as file attach.
- Article will come automatically appear in the next free issue.
-
- Extensions are:
-
- Articles (anything) .ART
- Software .SOF
- News .NEW
- Question and Answers .Q&A
- ANOMALIES and their comments .ANO
- Letters to editors .LET
- Advertisement .ADV
- Wanted .WAN
- Comments .CMS
- DUMP from conferences .DMP
- Clipper Net .CLN
-
- That's all at the moment, there will probably be changes later, as the
- magazine evolves. If you have any ideas for a new section of CLIPBBS,
- please tell us, or just write an article about it.
-
- Daniel, publisher
-
- -----------------------------------------------------------------------------
-