home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / ENTERPRS / CPM / UTILS / F / QL41.ARK / QL-OLD.DOC < prev    next >
Text File  |  1990-04-13  |  20KB  |  396 lines

  1.  
  2. --------------------------------------------------------------------
  3. ===> For general Usage, please refer to the file QL41.DOC.
  4.  
  5. This file contains excerpts which are still relevant from the older
  6. QLnn.DOC files, and is included because it contains hints, details,
  7. credits, and other miscellaneous information.  The version revision
  8. history is also here and comprises the latter half of this document.
  9.                                                     -sgg   08-14-88
  10. --------------------------------------------------------------------
  11.  
  12. [Excerpts from]  QL31.DOC
  13. documentation and usage of QL.AZM
  14. rev 05-17-88  v3.1
  15.  
  16. Quick look typer for reasonably sized libraried or unlibraried,
  17.   crunched, squeezed & normal text and binary files, with optional
  18.   disk output, for z80 cpu's only under CP/M 2.0 or later.
  19.  
  20.   QL was [originally] written by:
  21.         Nick Dobrinich
  22.         4337 West 48
  23.         Cleveland, OH 44144
  24.  
  25. < Release >
  26. This code is placed in the public domain.
  27. Don't sell it.  Don't send money.  Don't sue me.  Don't claim you wrote it.
  28.  
  29. The code for unsqueezing and uncrunching is copyright 1986 by Steve Greenberg
  30. & C.B. Falconer for private non-commercial use.  They wrote it and I want to
  31. credit them for excellent work.  Implementation time was less than 2 hours to
  32. add a working uncruncher to QL v1.6 without benefit of a linker.
  33.  ......
  34.  
  35. [On Find & Repeat cmnds]
  36.  
  37. Up to 19 hex bytes can be searched for.  Only the first byte of
  38.  any matching strings will be marked in hex/ascii display mode:
  39.  if a hex find string was given, on the hex side; if ascii, on the
  40.  ascii side.
  41.  In text mode, control characters (cr, lf, tab) can't be highlighted,
  42.  but all printable characters of the found string will be.
  43.  Don't search for -0d0a in text mode (you already know where they
  44.  are) or the display will scroll to eof.
  45.  In hex/ascii display mode, you can search for the end of file
  46.  marker with -1a.
  47.  
  48. R or C  Repeats the find forward to the next page having an occurrence of the
  49.  find string.  Repeat is not circular, but you can go back to page 1
  50.  and repeat it.  A repeat find will never succeed on the current
  51.  page and thus can never succeed on page 1 (though Find can succeed
  52.  on page 1).
  53.  ......
  54.  
  55. Z1 assembler notes:
  56.  
  57. If you modify this code, the Z1 assembler requires all condition codes
  58. to be in UPPER case:
  59.  
  60.         ret     z
  61.         jr      c,label         ; won't assemble
  62.         ret     Z
  63.         jr      C,label         ; will
  64.  
  65. If you try to assemble with 'Z1 QL.AAZ', you will get an out of memory error.
  66. Just use 'Z1 QL' and everything will be oky-doke.  The QL.PRN file will be
  67. quite small (symbol table only), unless you've removed the 'nlist s'
  68. statement near the top of the source file.
  69.  ......
  70.  
  71. [message: 'Note: Entire file does NOT FIT in memory']
  72.  
  73. This is a warning message, not an error.  We don't do any virtual memory
  74. stuff with this program, so if a file is too large to be read entirely into
  75. RAM, QL reads (and unsqueezes/uncrunches) as much as possible and displays
  76. what it can of the first part of the file.  There is no way for QL to go
  77. beyond this without paging text to disk, which is too slow. The way to handle
  78. this for minimum disk use is to break large files up into 25k or smaller
  79. chapters, crunch them and library the crunched chapters together.
  80. Unsuccessful finds in partially read files will also give this warning.
  81. However, extraction from LBRs will never give this error; when the buffer gets
  82. full, it is simply emptied to disk and extraction continues.
  83.  .....
  84.  
  85. QL.COM is around 8k and requires a 1k pointer table and 200 bytes or so
  86. for variables, leaving 50k or so in a 62k cp/m system.  If a file doesn't
  87. fit, the page number display will have a trailing + sign (Page 1 of 78+).
  88.  
  89. Squeezed files must fit mostly in memory when unsqueezed.  They are
  90. identified by a 'Q' as the second letter of the file extension.  Since
  91. unsqueezing a file is the only way to know how long it will be and that
  92. varies according to the compression ratio, which varies according to the kind
  93. of text that was squeezed, QL tries to do the right thing with big squeezed
  94. files (it shows as much of the first part of the unsqueezed file as possible
  95. when it detects the unsqueezed text smashing into the bdos). The only way to
  96. tell if a file can be completely unsqueezed by this utility is to try it.  No
  97. harm can result.
  98.  
  99. Crunched files must also fit mostly in memory when uncrunched, but there is a
  100. further constraint:  the uncruncher efficiently occupies 24k in a work area
  101. just below the bdos.  This effectively reduces the size of crunched files QL
  102. can handle: in a 62k system, about 25k is the largest uncrunched file that
  103. will fit.  As in unsqueezing, QL will display as much of the first part of
  104. the file as possible.  Beyond that, you need another utility.
  105.  
  106. If a compressed file (like QL.AZM, which is not crunched) fails in uncrunch
  107. or unsqueeze, it is tried as a normal uncompressed file.
  108.  
  109. All additional memory up to and including ccp if necessary is used as a file
  110. buffer.  QL will not allow overwrite of bdos and warm boots only when ccp
  111. gets smashed.  The ccp is always overwritten when working with crunched
  112. files.
  113.  
  114. Once the file is loaded, there is no further disk action until exit when, if
  115. you're working from a library, all members of that library are again listed.
  116. The load and unsqueeze/uncrunch time was put up front because I don't like
  117. the disk constantly starting and stopping while I'm reading. Reading and
  118. unsqueezing/uncrunching in the background would be nice, but...
  119.  
  120. QL is self-initializing.  If you use a replacement version of ccp that has a
  121. 'go' command, you can just type 'go fn.ext'  or 'go lib' to reuse QL without
  122. having to reload it.
  123.  
  124. The only terminal capability required is erase screen and home cursor. Direct
  125. bios character output is used to speed display but may be disabled. Half-
  126. intensity can be used to display *.c?m library members at reduced intensity.
  127. [v4.0 note: Not just C?M anymore, now an entire list of extensions which
  128. are typically non-ascii. List is at end of QL.002 and could be modified].
  129. Reverse video can be used to mark matches to finds.
  130.  
  131. Mostly compatible with Wordstar document files.  QL will fail to find a
  132. string only if the first character to find is the last character of a word,
  133. which will have its hi bit set by WS.  Most normal finds work ok. If you want
  134. to type in the hex bytes, a first character with bit 7 set can also be found.
  135.  
  136. If builders built buildings the way programmers wrote programs, the first
  137. woodpecker to come along would destroy civilization.  In particular, the find
  138. string code is held together with chewing gum and is easy to derail.
  139.  
  140. [Find while in Memory dump]
  141.  
  142. [.. may cause spurious, unpredictable or unrepeatable matches if searching
  143.     the sextion of memory that contains parts of QL iself, namely it's
  144.     data area].
  145.  
  146. Beware of roaming into your roms when core dumping: if you have disk
  147. controller roms lurking in high memory, strange things, none of them good,
  148. may happen.  Finds in page 255 can't succeed.
  149.  
  150. The word count for text files is approximate, based on the simple definition
  151. of a word being a string of ascii masked characters >= '0' (30h) and < 80h.
  152. Needs more thought.
  153.  ......
  154.  
  155. < Credit where it's due >
  156. QL was inspired by bishow.asm by Phil Carey, W.F. McGee, H.M. Van Tassell and
  157. many others.  The unsqueeze code is adapted from lt18, copyrighted by Steven
  158. Greenberg and C.B. Falconer, which is a much more versatile program but
  159. doesn't permit random access.  The uncrunch code is uncrel.mac by Greenberg
  160. and Falconer.
  161.  
  162. Kudos to Neil Koozer for his speedy Z1 assembler which halved the time of the
  163. basic edit > assemble > crash cycle.
  164.  ......
  165.  
  166. My thanks to contributors to the public domain who have taught me much.
  167.  
  168. If you're so inclined, hack away at this to improve and extend the code or to
  169. suit your own preferences.
  170.  
  171. --------------------------------------------------------------------
  172.  
  173.  
  174. ---------------------------------------------------------------------------
  175. QLxx has been through quite a bit since it's original inception, but,
  176. for history buffs, here's sort of how it all went:
  177. ---------------------------------------------------------------------------
  178.  
  179. <History>
  180.  
  181. ver 4.1 (rjp) 11-29-88
  182. - Separated the numbered-file interface to a separate section, QFC.LIB,
  183. and modified LBR routines to permit use of same interface.  The interface
  184. itself was extended and modified to permit "batch" file selections through
  185. use of the () [some files] and * [all files] options, and to permit sorting
  186. of the file list from any character in the filename (particularly, sort from
  187. 8 to get an extension-separated list).  Other changes include a check for
  188. odd # of sectors in hex display mode (if found, last page is displayed
  189. as a half page), and a speedup of finds during typeout.
  190.  
  191. ver 4.0 (sgg) 08-13-88
  192. - Major overhaul, really too extensive to itemize here. Mostly involved
  193. a complete revamping of the user interface with help / status screens;
  194. correction and consolidation of the ZCPR related code to allow it to
  195. work; some changes in memory allocation from DS to run-time generated
  196. pointers; filename alphabetization, some user area support, and some
  197. general rearrangement and reformatting of the source, as well as a
  198. rewrite of most of the documentation.
  199.  
  200. This rewrite started as a 'simple consolidation' of efforts from various
  201. people. Though the scope grew well beyond simple, the efforts of those
  202. people was indispensible in it's development.  Many thanks to Ben Grey,
  203. Bruce Morgen, Ross Presser, Bob Schultz, and driving force Paul Foote.
  204.  
  205.                                                 - Steven Greenberg
  206.  
  207. ver 3.1 (rjp) 06-09-88
  208. - Working from QL26 by Bruce Morgen (4/6/88), made compatible with
  209. ZCPR3.  Setting the equate ZCPR3 to TRUE should make this work; however,
  210. I have not tested it, for I do not have access to any ZCPR system.
  211. Assembly information, quoted from QL26.AZM, has been placed in the file
  212. QL$ZCPR3.DOC.
  213. - Added 'S' command to Save library members without decompressing them.
  214. - After extracting or saving a file, QL will report the file size in
  215. sectors and in K.
  216. - A check for out of disk space, omitted by some oversight, was added to
  217. the file extraction code.
  218. - ALL of the extraction code can be bypassed by setting the option
  219. equate EXTR to FALSE.  This saves a few K in program size.
  220. - Added case-insensitive searching toggle, controlled by 'I' cmd.  To do
  221. this required that the search be made slower; sorry.  It now takes about
  222. 3.25 sec to search all of a 60K file, instead of less than .25 sec.
  223.  - Added ability to select files by number.  If you specify an ambiguous
  224. filename on the command line, QL will display all the filenames that
  225. match and ask you to select one.  (If none were found, QL will search
  226. for libraries with matching root names, just like it does with
  227. unambiguous files.  If exactly one matching file was found, it will skip
  228. the selection process.)  ALL matching files, including LBRs, are
  229. available for selection.  If an LBR is selected, it will be opened as a
  230. library UNLESS you specified .LBR in the ambiguous filename, in which
  231. case it will be opened as an ordinary file.  When you exit from viewing
  232. a file, the selection menu pops up again.
  233. - A few cosmetic changes:  cleaned up the usage message, added and
  234. removed CRLFs to neaten up the display, added "Members in d:library.LBR"
  235. message, and displayed default disk in "d>Member (1-xx)" message.
  236. ------------------------------------
  237. Bug reports: Leave mail at one of:
  238.     CRUNCH RCP/M        [Steve Greenberg]  (201)447-6543
  239.     Holly Park RCP/M    [Dick Roberts]     (201)757-1491
  240. or US Mail:
  241.     Ross Presser
  242.     209N Haddonview Apts
  243.     Westmont, NJ 08108
  244. Nights: (609)869-0298
  245.  
  246. ver 3.0  (rjp) 05-17-88
  247. - Incorporated the fix in QL25BFIX.LBR, supplied by an anonymous
  248. programmer, which fixes what is probably the last bug in the file
  249. extraction code.  Changed major revision level to 3.  Also, if the
  250. "E" command is disallowed (no WHEEL), it will not appear in the help menu.
  251. Also included QL25B/30.DIF, a SSED script file for updating ver 2.5b to 3.0.
  252.  
  253. ver 2.5b (rjp) 04-21-88
  254. - Corrected several disastrous bugs in file extraction code.
  255. ver 2.5a (rjp) 04-11-88
  256. - Added capability to extract (and decompress) files from libraries with
  257. E command (only if WHEEL). Member is extracted to default drive; if file
  258. already exists, user is asked whether to purge it.
  259. - Moved size of CCP from CHKSUMCCP routine (hard-coded) to CCPSIZE equate.
  260. - To recognize the fact that some reverse on/off sequences occupy space on
  261. the screen, the flag REVSPACE was added.  Set it to the number of spaces to
  262. reserve for each REVON and REVOFF command.
  263. - Added two instructions in the initializing code to zero the R2 byte in
  264. the default FCB.  Some CCPs (mine!) do not automatically zero this byte;
  265. if it is not zero, the first sector of uncompressed, unlibraried files
  266. that match *.?Z? or *.?Q? is not read in properly.
  267. - Added ability to display non-displayable control characters with dim-video.
  268. This is controlled by the flag CTRLDIMVID.  Changed CTRLDISPLAY to
  269. CTRLWORDSTAR; added (computed) flag CTRLDUMMY =
  270. - Split the source file into two parts to make it easier to edit!
  271.  
  272. Note: I was going to call this QL26, but before I was finished someone had
  273. already pre-empted that name.  I was NOT going to start my changes over again
  274. with QL26.  Therefore I am calling this QL25A.
  275.  
  276. ver 2.5 (sgg) 02-28-88
  277. - Corrected a bug which prevented all previous versions from being able to
  278. uncrunch a file if the system's BDOS started at an address other than a
  279. page boundary or a page boundary plus six. This would cause an "unknown
  280. uncrunch error", which wasn't even the "correct" error message due to
  281. another bug in the error message reporting code (also fixed).
  282. - Eliminated the use of alternate registers and the associated EQUate.
  283. Use of the alternate registers conflicted with some systems. Removed
  284. redundant register saves and eliminated a subroutine level in the same
  285. same area (memory i/o routines). Also:
  286. - Added Wordstar-like ability to display control characters not otherwise
  287. handled (eg "02" in a file will display as "^B").
  288. - Added ascii FF (formfeed) char to the "legitimate character" list, so
  289. documents with a leading formfeed won't come up in hex mode.
  290. - Changed most JP's to JR's in UNC.AZM, and removed the extra entrypoints
  291. and associated code not used by QL.
  292.  
  293. ==> Many thanks to Ken Reid and Mike Greenhill.
  294.  
  295.  
  296. ver 2.4 (sgg) 01-25-88
  297.  To make QL a viable "online" utility:
  298.    added BYE detect: adjusts memory limits and inhibits video attribute xmit
  299.    checks wheel byte:  inhibits system COM file and "core" dumps.
  300.    continuously checks for ^S, etc while running remote.
  301.  Stronger checking of user keyboard input some synonyms added.
  302.  Added M80 EQU to allow assembly under M80 / SLR Z80ASM.
  303.  Used macros so terminal attribute sequences could be relocated to the beg-
  304.  inning of the file (configuration section) where they logically should be.
  305.  Other misc. changes.
  306.  
  307. ver 2.3 (njd) 12-27-87
  308.   fixed a nasty bug in ws doc file handling and other doc file goofs.
  309.   added tab expansion to spaces option.
  310.   added @ marker character for control characters we can't reliably send to
  311.     a terminal.
  312.   added truncation toggle command.  Removed truncation logic to putc: rtn
  313.     where it belonged, but not before torturing myself at length with the
  314.     old scheme.
  315.  
  316. ver 2.2 (njd) 12-12-87  release halted due to a nasty bug in ws doc files.
  317.   added core dumping option if no file or library name is given.
  318.   added filename.ext to summary.
  319.   added summary word count for text files.
  320.   fixed line counting in ws document files with page breaks.
  321.   better eof handling for files just larger than available memory.
  322.  
  323. ver 2.1 (sgg) 12-5-87
  324.  - Changed display of library member filenames. Now includes the reference #.
  325.  - Eliminated "File not found" message each time a library was opened. The
  326.    message will only appear if neither a plain nor .LBR file with the
  327.    specified name can be found.
  328.  - Added "Q", escape, and ^K as additional synonyms to existing eXit & ^C
  329.    for BISHOW, LIST61, and generic compatibility reasons.
  330.  - Changed code which outputs the uncrunched filename to prevent it from
  331.    outputting any chars in the header beyond the filename (CR23D compat.)
  332.  - Added UCHEX equate for those who prefer upper case letters in hex dump.
  333.  - Took the liberty of removing my own name (and cbf's) and copyright message
  334.    from the display (still embedded in the code, however). Made some changes
  335.    to the main help menu as well.
  336.                                                 - Steven Greenberg
  337.  
  338. ver 2.0 (njd) 12-1-87
  339.   included uncrunching capability, courtesy of Greenberg & Falconer.
  340.   changed unsqueezing method to read & unsqueeze simultaneously, like uncrunch.
  341.     Can handle much bigger squeezed files.  What was I thinking before?
  342.   added checksum verification of ccp overwrite instead of a lot of bookkeeping.
  343.   added hex/ascii display of non-text files and as an alternative for text files.
  344.   added partial display of files too big for available memory.
  345.   changed the whole find string philosophy.
  346.   added highlighted display of found strings in text and hex/ascii.
  347.   added find of hex byte strings when prefaced with '-'.
  348.   deleted all page tagging code, unnecessary with page number selection.
  349.   eliminated most self-modifying code.
  350.  
  351. ver 1.6 (njd)
  352.   set fcb1 r2 field to 0 to avoid random read (bdos fn 33) error 6.
  353.   capitalized jump, call and return condition codes for Z1 assembler.
  354.   removed 'title' directive (unsupported by Z1 assembler).
  355.   added conditional for Z1 assembler to generate a .COM file directly.
  356.  
  357. ver 1.5 (njd)
  358.   fixed dumb error in deleted member handling.
  359.  
  360. ver 1.4 (njd)
  361.   removed Member Not Found and substituted numeric choice of members from
  362.     the library directory.
  363.   added half-intensity option for *.c?m members.
  364.   added option for DOS+ bdos call 211.
  365.  
  366. ver 1.3 (njd)
  367.   added library searching and directory listing capabilities.
  368.   added unsqueezing and protection from squeezed files that get too big.
  369.   added option to not use bios console output routine to speed display.
  370.   added delay code for page number input without <ret>.
  371.   eliminated scroll on forward paging.
  372.   added total byte and line summary.
  373.   made line overlap user configurable.
  374.   use computed file size to see if file will fit below bdos and if it will
  375.     overlay ccp instead of reading until collision.
  376.   fixed single line forward so it adjusts current page as expected.
  377.   added long line truncation flagging with '>'.
  378.  
  379. ver 1.2 (njd)
  380.   added page tagging.  If usealtregs is true, this feature uses the z80
  381.     alternate register set, which may be incompatible with your system,
  382.     particularly if it is interrupt driven.  Set the usealtregs equate
  383.     false to use fake memory register code (which is slightly longer)
  384.     and reassemble.  Page tagging can be eliminated by setting pagetags
  385.     equate false.
  386.   page pointer rtn now looks for lf instead of cr, which is the way it
  387.     should have been written in the first place.  Ah, middle age...
  388.   during page number jumps, watches for sufficient number of digits
  389.     for page to jump to.
  390.   better command parser and clearer program structure.
  391.   made reentrant for zcpr 'go' cmd by initializing storage.
  392.   added version numbering.
  393.  
  394. ver 1.1
  395.   original for standard text files.
  396.