home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / beehive / compress / ql40.arc / QL-OLD.DOC < prev    next >
Text File  |  1991-08-11  |  19KB  |  386 lines

  1.  
  2. --------------------------------------------------------------------
  3. ===> For general Usage, please refer to the file QL40.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.0 (sgg) 08-13-88
  182. - Major overhaul, really too extensive to itemize here. Mostly involved
  183. a complete revamping of the user interface with help / status screens;
  184. correction and consolidation of the ZCPR related code to allow it to
  185. work; some changes in memory allocation from DS to run-time generated
  186. pointers; filename alphabetization, some user area support, and some
  187. general rearrangement and reformatting of the source, as well as a
  188. rewrite of most of the documentation.
  189.  
  190. This rewrite started as a 'simple consolidation' of efforts from various
  191. people. Though the scope grew well beyond simple, the efforts of those
  192. people was indispensible in it's development.  Many thanks to Ben Grey,
  193. Bruce Morgen, Ross Presser, Bob Schultz, and driving force Paul Foote.
  194.  
  195.                                                 - Steven Greenberg
  196.  
  197. ver 3.1 (rjp) 06-09-88
  198. - Working from QL26 by Bruce Morgen (4/6/88), made compatible with
  199. ZCPR3.  Setting the equate ZCPR3 to TRUE should make this work; however,
  200. I have not tested it, for I do not have access to any ZCPR system.
  201. Assembly information, quoted from QL26.AZM, has been placed in the file
  202. QL$ZCPR3.DOC.
  203. - Added 'S' command to Save library members without decompressing them.
  204. - After extracting or saving a file, QL will report the file size in
  205. sectors and in K.
  206. - A check for out of disk space, omitted by some oversight, was added to
  207. the file extraction code.
  208. - ALL of the extraction code can be bypassed by setting the option
  209. equate EXTR to FALSE.  This saves a few K in program size.
  210. - Added case-insensitive searching toggle, controlled by 'I' cmd.  To do
  211. this required that the search be made slower; sorry.  It now takes about
  212. 3.25 sec to search all of a 60K file, instead of less than .25 sec.
  213.  - Added ability to select files by number.  If you specify an ambiguous
  214. filename on the command line, QL will display all the filenames that
  215. match and ask you to select one.  (If none were found, QL will search
  216. for libraries with matching root names, just like it does with
  217. unambiguous files.  If exactly one matching file was found, it will skip
  218. the selection process.)  ALL matching files, including LBRs, are
  219. available for selection.  If an LBR is selected, it will be opened as a
  220. library UNLESS you specified .LBR in the ambiguous filename, in which
  221. case it will be opened as an ordinary file.  When you exit from viewing
  222. a file, the selection menu pops up again.
  223. - A few cosmetic changes:  cleaned up the usage message, added and
  224. removed CRLFs to neaten up the display, added "Members in d:library.LBR"
  225. message, and displayed default disk in "d>Member (1-xx)" message.
  226. ------------------------------------
  227. Bug reports: Leave mail at one of:
  228.     CRUNCH RCP/M        [Steve Greenberg]  (201)447-6543
  229.     Holly Park RCP/M    [Dick Roberts]     (201)757-1491
  230. or US Mail:
  231.     Ross Presser
  232.     209N Haddonview Apts
  233.     Westmont, NJ 08108
  234. Nights: (609)869-0298
  235.  
  236. ver 3.0  (rjp) 05-17-88
  237. - Incorporated the fix in QL25BFIX.LBR, supplied by an anonymous
  238. programmer, which fixes what is probably the last bug in the file
  239. extraction code.  Changed major revision level to 3.  Also, if the
  240. "E" command is disallowed (no WHEEL), it will not appear in the help menu.
  241. Also included QL25B/30.DIF, a SSED script file for updating ver 2.5b to 3.0.
  242.  
  243. ver 2.5b (rjp) 04-21-88
  244. - Corrected several disastrous bugs in file extraction code.
  245. ver 2.5a (rjp) 04-11-88
  246. - Added capability to extract (and decompress) files from libraries with
  247. E command (only if WHEEL). Member is extracted to default drive; if file
  248. already exists, user is asked whether to purge it.
  249. - Moved size of CCP from CHKSUMCCP routine (hard-coded) to CCPSIZE equate.
  250. - To recognize the fact that some reverse on/off sequences occupy space on
  251. the screen, the flag REVSPACE was added.  Set it to the number of spaces to
  252. reserve for each REVON and REVOFF command.
  253. - Added two instructions in the initializing code to zero the R2 byte in
  254. the default FCB.  Some CCPs (mine!) do not automatically zero this byte;
  255. if it is not zero, the first sector of uncompressed, unlibraried files
  256. that match *.?Z? or *.?Q? is not read in properly.
  257. - Added ability to display non-displayable control characters with dim-video.
  258. This is controlled by the flag CTRLDIMVID.  Changed CTRLDISPLAY to
  259. CTRLWORDSTAR; added (computed) flag CTRLDUMMY =
  260. - Split the source file into two parts to make it easier to edit!
  261.  
  262. Note: I was going to call this QL26, but before I was finished someone had
  263. already pre-empted that name.  I was NOT going to start my changes over again
  264. with QL26.  Therefore I am calling this QL25A.
  265.  
  266. ver 2.5 (sgg) 02-28-88
  267. - Corrected a bug which prevented all previous versions from being able to
  268. uncrunch a file if the system's BDOS started at an address other than a
  269. page boundary or a page boundary plus six. This would cause an "unknown
  270. uncrunch error", which wasn't even the "correct" error message due to
  271. another bug in the error message reporting code (also fixed).
  272. - Eliminated the use of alternate registers and the associated EQUate.
  273. Use of the alternate registers conflicted with some systems. Removed
  274. redundant register saves and eliminated a subroutine level in the same
  275. same area (memory i/o routines). Also:
  276. - Added Wordstar-like ability to display control characters not otherwise
  277. handled (eg "02" in a file will display as "^B").
  278. - Added ascii FF (formfeed) char to the "legitimate character" list, so
  279. documents with a leading formfeed won't come up in hex mode.
  280. - Changed most JP's to JR's in UNC.AZM, and removed the extra entrypoints
  281. and associated code not used by QL.
  282.  
  283. ==> Many thanks to Ken Reid and Mike Greenhill.
  284.  
  285.  
  286. ver 2.4 (sgg) 01-25-88
  287.  To make QL a viable "online" utility:
  288.    added BYE detect: adjusts memory limits and inhibits video attribute xmit
  289.    checks wheel byte:  inhibits system COM file and "core" dumps.
  290.    continuously checks for ^S, etc while running remote.
  291.  Stronger checking of user keyboard input some synonyms added.
  292.  Added M80 EQU to allow assembly under M80 / SLR Z80ASM.
  293.  Used macros so terminal attribute sequences could be relocated to the beg-
  294.  inning of the file (configuration section) where they logically should be.
  295.  Other misc. changes.
  296.  
  297. ver 2.3 (njd) 12-27-87
  298.   fixed a nasty bug in ws doc file handling and other doc file goofs.
  299.   added tab expansion to spaces option.
  300.   added @ marker character for control characters we can't reliably send to
  301.     a terminal.
  302.   added truncation toggle command.  Removed truncation logic to putc: rtn
  303.     where it belonged, but not before torturing myself at length with the
  304.     old scheme.
  305.  
  306. ver 2.2 (njd) 12-12-87  release halted due to a nasty bug in ws doc files.
  307.   added core dumping option if no file or library name is given.
  308.   added filename.ext to summary.
  309.   added summary word count for text files.
  310.   fixed line counting in ws document files with page breaks.
  311.   better eof handling for files just larger than available memory.
  312.  
  313. ver 2.1 (sgg) 12-5-87
  314.  - Changed display of library member filenames. Now includes the reference #.
  315.  - Eliminated "File not found" message each time a library was opened. The
  316.    message will only appear if neither a plain nor .LBR file with the
  317.    specified name can be found.
  318.  - Added "Q", escape, and ^K as additional synonyms to existing eXit & ^C
  319.    for BISHOW, LIST61, and generic compatibility reasons.
  320.  - Changed code which outputs the uncrunched filename to prevent it from
  321.    outputting any chars in the header beyond the filename (CR23D compat.)
  322.  - Added UCHEX equate for those who prefer upper case letters in hex dump.
  323.  - Took the liberty of removing my own name (and cbf's) and copyright message
  324.    from the display (still embedded in the code, however). Made some changes
  325.    to the main help menu as well.
  326.                                                 - Steven Greenberg
  327.  
  328. ver 2.0 (njd) 12-1-87
  329.   included uncrunching capability, courtesy of Greenberg & Falconer.
  330.   changed unsqueezing method to read & unsqueeze simultaneously, like uncrunch.
  331.     Can handle much bigger squeezed files.  What was I thinking before?
  332.   added checksum verification of ccp overwrite instead of a lot of bookkeeping.
  333.   added hex/ascii display of non-text files and as an alternative for text files.
  334.   added partial display of files too big for available memory.
  335.   changed the whole find string philosophy.
  336.   added highlighted display of found strings in text and hex/ascii.
  337.   added find of hex byte strings when prefaced with '-'.
  338.   deleted all page tagging code, unnecessary with page number selection.
  339.   eliminated most self-modifying code.
  340.  
  341. ver 1.6 (njd)
  342.   set fcb1 r2 field to 0 to avoid random read (bdos fn 33) error 6.
  343.   capitalized jump, call and return condition codes for Z1 assembler.
  344.   removed 'title' directive (unsupported by Z1 assembler).
  345.   added conditional for Z1 assembler to generate a .COM file directly.
  346.  
  347. ver 1.5 (njd)
  348.   fixed dumb error in deleted member handling.
  349.  
  350. ver 1.4 (njd)
  351.   removed Member Not Found and substituted numeric choice of members from
  352.     the library directory.
  353.   added half-intensity option for *.c?m members.
  354.   added option for DOS+ bdos call 211.
  355.  
  356. ver 1.3 (njd)
  357.   added library searching and directory listing capabilities.
  358.   added unsqueezing and protection from squeezed files that get too big.
  359.   added option to not use bios console output routine to speed display.
  360.   added delay code for page number input without <ret>.
  361.   eliminated scroll on forward paging.
  362.   added total byte and line summary.
  363.   made line overlap user configurable.
  364.   use computed file size to see if file will fit below bdos and if it will
  365.     overlay ccp instead of reading until collision.
  366.   fixed single line forward so it adjusts current page as expected.
  367.   added long line truncation flagging with '>'.
  368.  
  369. ver 1.2 (njd)
  370.   added page tagging.  If usealtregs is true, this feature uses the z80
  371.     alternate register set, which may be incompatible with your system,
  372.     particularly if it is interrupt driven.  Set the usealtregs equate
  373.     false to use fake memory register code (which is slightly longer)
  374.     and reassemble.  Page tagging can be eliminated by setting pagetags
  375.     equate false.
  376.   page pointer rtn now looks for lf instead of cr, which is the way it
  377.     should have been written in the first place.  Ah, middle age...
  378.   during page number jumps, watches for sufficient number of digits
  379.     for page to jump to.
  380.   better command parser and clearer program structure.
  381.   made reentrant for zcpr 'go' cmd by initializing storage.
  382.   added version numbering.
  383.  
  384. ver 1.1
  385.   original for standard text files.
  386.