**>> ZX3.DOC <<** ZX.COM is a horiZontal directory eXtended and integrated with other common file management utilities. Filenames are listed in alphabetical order. Here's the directory display: A>zx =ZX v3.0==1:ZX2 DOC==2:ZX3 DOC= : APPEND .COM 1k : CHAR .DEF 1k : CHAR .GTH 1k : CHAR .ZIG 1k : COPY .COM 8k : EDFIL8 .COM 11k : FIND51 .COM 3k : FINDBD54.COM 2k : MERGPRIN.OVR 8k : NSWP .COM 12k : PRN .COM 29k : RAMDISK .COM 9k : RESQ .COM 9k : SETDISK .COM 6k : SMK .COM 4k : SORTV .COM 2k : TOON12 .COM 1k : TXTTOWS .COM 2k : UNERA .COM 1k : USFT1C .COM 6k : WC .COM 2k : WS .COM 14k : WS0 .DEF 1k : WSMSGS .OVR 26k : WSOVLY1 .OVR 27k : ZX .COM 3k A: 195k total 194k used 1k left A> In addition to the DIRECTORY, ZX also contains a file ERASE function, a SCROLL function for printing files with simultaneous text display, a TYPE function for viewing text in segments for reading, a sector-oriented text EDITor, a COPY function for duplicating files, a RENAME function for changing file names, and an UNERASE function for recovery from errors in file erasures. There is also a HELP screen, which summarizes these functions. ZX remembers recently entered file names, and provides single- keystroke reentry of the same names. Where it might be useful, file operations are followed automatically by the directory to confirm the operation, or to assist in recovery from errors. ZX3.COM is smaller than 3k. ZX's small disk footprint is well-suited to any situation where space should be conserved. ZX is useful on any CP/M 2.x system which has a Z80 CPU and an 80-column screen. **>> NEW IN ZX3 <<** ZX, ZX1, and ZX2 are the predecessors of ZX3. The differences in ZX2 and ZX3 are: 1. ZX3 has a unique filename memory. Recently used filenames can be re-entered with a single keystroke for later operations. 2. ZX3 has improved copy logic, and also accepts ambiguous filenames so that multiple files may be copied with a single command. 3. ZX3 has a new UNERASE function, to correct mistaken file erasures. 4. ZX3's TYPE function allows you to step backward through a file using the new ^B (Back) command. 5. ZX3's COPY, ERASE, and RENAME now handle R/O files. 6. ZX3's SCROLL now accepts ambiguous filenames, so that a document in several sections, or all files of a given type, may be printed with a single command. 7. ZX3 gives improved disk space statistics, handling files to 496k and disk space to 9999k. **>> USING ZX <<** FILENAME MEMORY in ZX3 is used in all other operations, and so will be described first. Note the names in the header line of the directory display above. =ZX v3.0==1:ZX2 DOC==2:ZX3 DOC= Listed after ==1: and ==2: are the filenames most recently used in the first and second positions on the command line. These names are listed in a distinctly different format from the directory to avoid confusion between them. ZX's commands all have the format: A>ZX -> FILENAME(S) and OP-eration in <> When new names are entered by the user on the command line, they are automatically put in the ==1: and ==2: blanks in the header line, as appropriate. Afterward, A>ZX 2 1 C -> means copy ==2: NAME to ==1: NAME A>ZX 2 E -> means erase the file named in ==2: This one-stroke entry of ambiguous or unambiguous filenames reduces the work of entering repeated commands, and makes error recovery, for example, much easier. ZX remembers its filenames through repeated invocations of ZX, through other programs, and through disk changes. On some computers, ZX remembers through warm boots, and even through cold boots! It all depends on how your system handles memory during the reset. On battery-powered portables with continuously refreshed memory, ZX may remember for years if you don't enter new names. Try it and see. In fact, because filename memory is an unusual facility, it will take a few trials to absorb the usefulness of remembered filenames when entering commands. Now that I am accustomed to filename memory in ZX, I miss it in other programs. The stored filenames are kept in a seldom-used place. But they are in memory, of course, and can be overwritten by other programs which use memory in an unusual way, or by the operating system during boots. ZX monitors the header line, and when it finds gibberish instead of filenames, it will replace the names with blanks and start over. If your header line mysteriously empties, and you have not turned power off, this is what has happened. COPY requires two file names, followed by C or c (but see autoname, below): A>ZX B:FL.ONE D:FL.TWO C -> copies, finishes with a directory of D:, then returns to A: for commands. AUTONAMING is a second feature of ZX intended to reduce the keystroking required to enter command lines. Unlike filename memory, autonaming applies only to operations like copying and renaming, which require two filenames (and perhaps two disk specifications). Autonaming is explained here, but used throughout the examples. The essence of it is that ZX3 will supply the second file name or disk specification if the user omits it. In the example below, ZX autonames the target disk for a copy operation, making it the same as the first named disk. A>ZX FL.ONE FL.TWO C -> makes A:FL.TWO, but A>ZX B:FL.ONE FL.TWO C -> will make B:FL.TWO, not A:FL.TWO. If you do not want to think about this, just specify the disks to use, as in the first example above, and ZX3 will always follow your explicit instructions. Because most copies use the same file name for the new file, but put it on another disk, ZX3 autonames files in the same way, in order to save the keystrokes required to type the second file name: A>ZX *.FLS B: C -> makes B:*.FLS, using the names of the files on A: Filename memory and autonaming are useful together: A>ZX 1 D: C -> copies the FILE(S) named in ==1: to disk D: Copies of a R/O (Read Only) file are made without notice to the user, and a R/O file which is the target of a copy operation is revised in the same way. Copies of a R/O file have their previous attributes, except that they are R/W (Read or Write). DIRECTORY functions are performed in standard CP/M style: A>ZX -> directory of A: A>ZX D: -> directory of D: A>ZX A.FL -> show A.FL only A>ZX 2 -> show ==2: only A>ZX *.COM -> all .COM files on A: A>ZX B:??.* -> B:files with 1 & 2 letter file names Invocation of ZX3 automatically logs in all disks present, to avoid BDOS errors and to insure that all directory and space information is up to date. ERASE is indicated by putting E or e after the file name: A>ZX BAD.TXT E -> erases A:BAD.TXT, then shows directory A>ZX B:*.BAK E -> erases all .BAK files on B:, confirms with B: directory A>ZX B:1 E -> erases ==1: on B:, does directory R/O (Read Only) files are erased by ZX3 without muss, fuss, or notice to the user. HELP is a screen summarizing these commands: D>ZX ? -> list of ZX commands RENAME requires two file names on the command line, then R or r: A>ZX ZX3.COM ZX.COM R -> recommended rename A>ZX B:APT.TXT BAD.TXT R -> renames B:APT.TXT to B:BAD.TXT, then shows the directory to confirm A>ZX D:2 1 R -> yep, both files on D: Renaming a file clears all attributes (flags in the filename), so renamed R/O files will become R/W. SCROLL is started by S following the file name: A>ZX PRINT.FL S -> scrolls text with no breaks. NOT followed by directory. Useful for speed readers, or A>ZX PRINT.FL S^P -> for ^Printing the file. A>ZX CHAPT?.* S -> scrolls CHAPT1, CHAPT2, ...in order found on disk. A file scroll may be halted by using the standard CP/M signal: type ^S to stop, and ^Q to restart, cycling as many times as you wish. If you wish to bail out in the middle of a long scroll, type ^S to stop, then ^C to warm boot. TYPE is initiated by T or t after the file, and stopped by ^X: A>ZX WHICH.TXT T -> each keypress shows one sector of WHICH.TXT, ^X exits to a directory, ^B steps back a sector. If you wish to print a subsection of a file, it is convenient to use a repeating key to TYPE fast-forward to the right stuff (using ^B to step back if you overshoot). Then type ^E to invoke EDIT. You are not going to edit, but the edit mode gets CP/M's attention, so that you can start the printer with ^P, then . This will not alter the file, but will send the text following to the printer. You can eXit with ^X when you have printed enough. Text in files which are typed and scrolled is shown with the high bits of characters reset, so that WordStar text files will appear as normal text onscreen, and also print correctly. EDITing is done from within the TYPE function, by typing ^E after display of the sector which you want to alter: ----------- This section contains lines with 80 characters ------------- D>ZX PRUNE.LET T -> ZX called to Type PRUNE.LET Dearest Prunella, please do me the honor of being my wife. I can't continue to live without your company. Ardently, Fahrqhar -> ZX types first sector, stops -> Any key continues, ^X quits =Edit below= -> ^E edits, retypes text Dearest Prunella, please do me the honor of being my wife.[]I can't continue to live without your company.[]Ardently,[]Fahrqhar Friend Pru: =================favor====feeding my dog. []C================= feed him during vacation. ==Regards, ========== -> Edited text typed in, cr -> ZX displays edited sector Friend Pru: please do me the favor of feeding my dog. Can't continue to feed him during vacation. -> Any key continues display Regards, -> Re-edit with ^E Fahrqhar -> Exit to directory with ^X -> Automatic dir at end of text : PRUNE .LET 1k : PRUNE1 .LET 1k : PRUNE2 .LET 1k : PRUNE3 .LET 1k D: 254k total 6k used 248k left ---------------------- Example EDIT session ---------------------------- Please examine the edit in the illustration above, which uses a document only one sector (128 characters) long for simplicity. ZX is called from CP/M to TYPE prune.let. It displays the first sector, then stops. At this point ^X (Control-X) will exit directly to the directory display. A ^E will invoke the edit function in order to change the characters just displayed. Fahrqhar typed ^E. The sector is then redisplayed for editing in linear form, without carriage returns(cr) or line feeds(lf). Instead, cr's are written as '[' and lf's as ']'. The stretched out, left-justified editing display is convenient because new text is typed immediately below the characters being replaced. There are three special editing characters: '=' leaves the character above it unchanged '[' puts a carriage return in the edited text ']' puts a line feed in the edited text. The '=' enables you to edit only sections which need changing. The '[' and ']' enable you to put new line breaks in the text, if required. Check the example above. A carriage return (or typing off the end of the sector) terminates editing, and redisplays the newly-edited sector with normal line breaks. If the retyped section doesn't look right, another ^E will repeat the edit. If the edit seems OK, any other key continues with more text, ^B goes back, or ^X exits to the directory. The same text editing functions used when typing CP/M commands are also available while editing in ZX. When you reach the end of the first line just keep typing and let the monitor wrap the display around under the 48 characters in the second line (80 first line + 48 second line). When you type "return" to quit editing, characters beyond the quitting point are left unchanged. Like many other things in computing, text editing with ZX is easier done than said. While no one is likely to edit his novel using ZX, the mini-editor is well-suited to changing a date, altering a phrase, or revising a note in an existing document. UNERASE returns files which have just been erased by ZX or elsewise: A>ZX GONE.LF U -> unerases the .FL, confirms with dir A>ZX 1 U -> recovers erase error automatically A>ZX *.TXT U -> try to recover all erased .TXT, then DIR Unerasure is a function you need only occasionally, but then you REALLY need it. UNERA was invented by Gene Cotton, in Interface Age, Dec, 1981, p.96, and his article is worth reading as an example of stylish assembly language. ZX borrows shamelessly from UNERA. Not everything can be successfully recovered. The BDOS may have written over your file, if you did something else before ZX...u. Some files, which have multiple erased directory entries, cannot be sorted out by ZX, and the simultaneous reactivation of duplicate entries leaves a wreck. So check the file before you use it. Immediate unerasure works 98% of the time. If ZX cannot recover your file, byte-by-byte disk editing with a disk editor like DU can probably do it, but this is much work, and only can be justified for a very important file. **>> MESSAGES <<** The area to the right of the stored filenames, in the header line, is ZX3's message area, where notes on the progress of operations will appear. =No file= indicates that a filename supplied does not exist. The same message appears when a directory is requested for an empty disk. A =No file= is always followed by a directory display in order to assist the user in typing the correct file name. =File exists= indicates that you have tried to rename a file to a file name which already exists. The message is (of course) followed by a directory. =* in filename= is the most mysterious of the error messages, but means that an ambiguous file name (containing * or ?) has been supplied for renaming. Because the directory will be scrambled if this command is taken literally, ZX will trap such attempts, without restricting the uses of amgiguity in other operations. To assist in finding the specific file name, =* in filename= is followed by a full directory (surprise!). =File names identical= You are trying to copy a file into itself. If carried out, this command trashes the directory entry, so ZX3 notes it, backs out, then shows the directory to assist whatever you were trying to do. ZX3 detects subtle examples of this difficulty like: A>ZX D:FL.ONE FL.ONE (recall that the target disk is autonamed D:), and will give this message. =ZX ? for help= The command character at the end of the input line is not on ZX3's list. =Copying= The command line has cleared all tests. This message is repeated at the start of each file during a multi-file copy operationn. =Directory full=, =Disk full=. =File close failed= It takes great agility to see this message, which means that the new file ZX3 made to copy TO has somehow disappeared before ZX3 could finish writing it. =Edit below= Edit mode has been invoked. Align the new text below the original text. =Unerased= ZX found the file(s) you asked it to reactivate. Look the recovered file over carefully before asking it to do anything important. =Dir R/W error= Whoops! ZX has had a disk error while trying to unerase. Check the directory that ZX automatically shows after the error. If it looks OK, try again. **>> ZX3'S USES <<** ZX3 can serve as the sole file utility in any situation where disk space should be conserved. As the notes say, it is a "light power tool" whose small disk footprint is better suited to portable computers, or to data or archive disks, than are larger programs like NSWEEP. I hope that you find ZX3's command-driven, directory-oriented style engaging in its own right. It provides the most economical way, in time and keystokes, to perform many of the most frequent file operations, and gives many forms of aid to the user. ZX3 follows most functions with the updated directory to pave the way for the next step, and to confirm that you have done exactly what you intended. ZX3 orders all operations from a consistent and simple command format, unlike the CP/M utilities which do similar things. ZX3 provides several unusual aids to the entry of concise command lines, like filename memory and autonaming. It is very powerful in batch files, like those executed by SUBMIT, EX, or MAKBATCH, where ZX3's ability to take a set of varied and complex orders from the command line makes any desired batch operation easy. ZX3's many functions and small size are very appropriate in batch files also. Its 3k of code make ZX3 fast-loading where it counts, in applications which may be repeated hundreds of times. Besides, there is something likeable about ZX3's relentless helpfulness. As you can see from the directory which heads these notes, I now keep ZX and Dave Rand's wonderful NSWEEP on utility disks, but only ZX on data disks. I hope you also find ZX helpful. Please direct comments and bug sightings to: Mike Yarus 2231 16th Street Boulder, CO 80302 January, 1986 Compuserve 73145,513