Morrow Owner's Review, Volume 4, #4, page 6 (Aug/Sep '87)

Forever Z

by Rick Charnes

I very much appreciate all the letters I've been getting with the large number of excellent suggestions. This is the stuff of which real communication is made and makes being involved in this Z- adventure such a joy. Please continue to send mail to the MOR office and phone calls to my home. Something as delightful as Z-System as life in general feels best when done with the support of a concerned, vital, passionate and enthusiastic community, and that is what we are building here. Whether by BBS, phone network, or mail, staying in touch with and learning from others fundamentally enhances the pleasure and meaning of the entire computing experience. Communication and understanding, remember, were the great promises of the computer revolution. Let's work to make that a reality and take it away from those who would use computers primarily as a tool in their plans for military armament as they bring us closer and closer to global holocaust.

One of the odds and ends culled from discussions on the MOR BBS was a question about error handlers. Error handlers are a little used but very powerful Z-System feature. If you're a less than perfect typist and are tired of CP/M's "????" response when you type something it finds incomprehensible, then error handlers are for you. When an error handler is "installed" in your system and ZCPR3 cannot understand what you've typed in, you're then in the words of Jerry Maloney, error handler enthusiast in Boston, "given a second chance". Simply correct your typing error, hit <CR>, and your command line is run again. I'm not aware of anything comparable to this in the MS-DOS world.

This may not seem so important for those used to CP/M 2.2 with which only a single command may be typed on any one line. Remember, however, that in ZCPR3 many commands may be strung together, separated by a semicolon. I take advantage of this feature as often as I can. If you have a series of commands to run that you don't use very often and therefore for which an alias is not appropriate, simply type them all together at the ZCPR3 prompt. This can be very enjoyable and can save a lot of time especially on floppy systems. Rather than sitting staring at the screen while I am waiting for the results of one command before I can run the next, I often try to anticipate my next several moves and type in as many commands as I can foresee into the future. For instance, if I'm cleaning up my disk and then want to rename a file before working on it I can easily find myself doing something like:

ERASE *.BAK,MARY.LTR;REN JOE.LTR=JOE;NW JOE.LTR

This may look difficult and confusing but if you study it you'll see it's quite straightforward and is a real time-saver. You may find it an enjoyable challenge to discipIine yourself enough to anticipate and plan out your next few commands. In this example we take advantage of a capability of many ZCPR3 but not CP/M utilities, that of accepting a file list parameter. Here, ERASE.COM is given a parameter of:

*. BAK,MARY.LTR

a list of two files, one ambiguous and one unambiguous, separated by a comma. A quick browse through ZCPR3: The Manual will reveal that a dozen or two utilities have this ability. After ZCPR3 has erased these, JOE is renamed to JOE.LTR and then loaded in with NewWord. It's our multiple command line feature that permits us to do this.

But to my point: with long command lines such as these typing mistakes happen rather easily! Enter error handlers. The most common error handler is VERROR, for Video ERROR. To install VERROR, simply type "VERROR<CR>". From then on VERROR is "installed". From then on, anytime you make a mistake, or anytime any of your VFILER or other macros contain a mistake, your error handler is invoked. You are then put into a one-line Wordstar-like editor within which you can then use all the familiar cursor motion commands to correct your input anywhere on your command line. When finished, simply hit <CR> and your command(s) are sent out again.

One warning, though: With ZCPR3.0 you cannot be running an extended command processor such as ARUNZ if at the same time you have an error handler installed. With the new ZCPR3.3 This problem is remedied.

By the way, if you're feeling that you never manually string a series of commands together on the command line and can't imagine why you would ever want to do so, here's an easy one to start out with in order to see how much time you can actually save. Suppose you're on one directory and want to log on to another, do a disk directory, and then perform various operations from there. If you're on AO: and want to work on BO:, without ZCPR3 you would type "BO:<CR>", wait for the system to log you in, then "DIR", etc. Instead, try simply "BO:;DIR<CR>". Why complicate matters with an extra carriage return and a wait, when you could be having fun watching the computer do all the work for you?

I can hardly believe I've let three columns come and go without a mention of the famous "POKE 'N' GO" technique. This is one of the very nicest features of Z-System, something that you easily run the risk of taking for granted. It's especially useful for saving disk space on floppy systems. Suppose you normally run WordStar or NewWord in single space mode and a right margin of 65, but occasionally use double spacing and a right margin of 78. You are tired of having to remember to manually type in your "^OS" to change the spacing, set your new ruler line with "^OR", and finally put in your ^PA code to change the printer pitch to 12. I always end up forgetting to do this when using settings other than my default and find it extremely frustrating. One solution of course is to make a completely new WS.COM or NW.COM disk file with these new settings, but with disk space precious this is silly. With Z-System's alias-making capability there is an easy solution.

Let's take the above situation and see how we can handle it with ZCPR3. The first step is to find the exact patch points in our *.COM file where the values for line spacing and right margin are held. This is done with NewWord by extracting the information from the relevant section in the "patch menus" in NWINSTAL.COM, and with WordStar from one of the many public domain docs providing this kind of information. To set NewWord 2.16 to the above values we find that 0762h should be set to 02, 0713h to 4e (4eh = 78 decimal) for the ruler line, and lastly both 0721h and 0723h should be changed to OA to modify the standard printer pitch from 10 to 12.

Now for the beautiful part. Make either a free-standing alias using our trusty VALIAS or BALIAS or my preferred method an entry in your ARUNZ.CMD, as follows:

GET 100 NW.COM
POKE 0762 02
POKE 0713 4E
POKE 0721 OA
POKE 0723 OA
GO $1

With ARUNZ/ALIAS.CMD all this is strung together on a single line separated by semicolons, beginning with its name. I have called mine NW78. Here's what happens: in Z-System we have a memory-resident GET command. GET is one of those seemingly arcane features that really performs when called on. It will load the file given as its second parameter at the location in memory given as its first parameter, but without running it. We here load NW.COM at 100 hex, the spot in memory where all COM files load when they run. But here it doesn't actually run; it simply is suspended there, awaiting further instructions. Now we use ZCPR3's resident POKE command, which CP/M also lacks. "POKE 0762 02" will insert the hex value 02 at memory location 0762. Since we have loaded NW.COM into memory we are in effect patching NW! Then GO is the final memory-resident command used in our holy Trinity. GO takes whatever is sitting there at 100 hex and runs it, and the "$I" is of course the name of our file to be edited.

Suppose we wanted to work on our file JOE.LTR. At the ZCPR3 command line we simply type "NW78 JOE.LTR<CR>" and sit back and watch. Our command processor gives us a pleasing visual display of all this POKE-ing, NewWord loads, and we find ourselves in JOE.LTR, double spaced, margin set to 78.

You can have as many of these POKE 'N' GO aliases as you like, setting your word processor to as many default values as you like. Disk space used for all this sophisticafion? If entered as an entry inside your ALIAS.CMD, 0k.

A couple of notes inspired by letters I have received: the Morrow KEY.COM will not work with the hard disk Z-System. The Morrow BIOS was reworked much more fundamentally than the floppy version in order to Z-ify it. A decision was made in its development that the amount of space KEY.COM took up in the BIOS was not justified by what it did, that this space was more important used elsewhere. Backgrounder II, which has an extensive key redefinition capability, or Echelon's NUKEY are the programs of choice for hard disk users.

Some confusion has developed about the public directory feature. The best way to team about it is with the PUBLIC.HLP file on the Z-System disk. If you're logged onto the same drive but a different user area than your public directory, DO NOT create a file with the same name as a file on the public directory. Z-System will assume you are working on the public file and will make any changes to it that you make to your file, such as deletion, etc.

Another caution: declaring a directory public in Z-System works only for all user areas on that drive. In other words, if you are logged onto D6: and your public directory is A1:, everything that goes on in your A: drive will have access to the files in A1:, but do not expect your files in A1: to have anything significant to say to operations running on your D: drive. However, there is one "out" here: in their search for overlays, a small number of programs, most notably WordStar, have enough smarts to check also on drive A: of whatever user number you're logged into if they don't find them on the current drive/user. So in our case putting the WordStar overlays into a public directory on the A: drive will do an yeoman's job of servicing your entire system. Other programs, however, such as Correct-It and SuperCalc as I mentioned last time, do not perform this "search on A:" operation and must be dealt with otherwise. Very briefly, an alias should be set up in which the very first command logs on to drive A: of the currently logged user area. Then the source file is accessed from drive A:. I have created a number of aliases that are available on the MOR BBS that deal with this problem.

I'd like to emphasize how much easier and quicker the utility VFILER makes running your entire computer operation, in the time it saves lost to typing errors. Without VFILER, if you have incorrectly typed the name of a file to be edited, for instance, time is wasted retyping your command line. With VFILER and the macros you have written, simply position the pointer on your target file, and hit the macro number or letter. "Point and shoot", as Ted Silveira very appropriately calls it. Nothing could be simpler.

One final comment about VFILER. The command recall and editing program HSH will not and cannot be made to work when running programs from its "Z" option.

As I write (early June) ZCPR3.3 has been released, written by the extraordinarily prolific Jay Sage of Boston. One of the features I like best about it is its incredible flow control package, with more "IF options" than one could possibly imagine. In addition to the "IF INPUT", "IF EXIST", "IF NULL", etc. that we've all come to use and love, it is now possible to test if a file is compressed (squeezed or crunched), ambiguous (wild cards present in the name), and for the presence of any of the three file attributes: system, read-only, and archived. We now welcome IF COMPR, IF AMBIG, IF SYS, IF RO, and IF ARC to an already packed Pantheon of conditionals. Additionally, we now have two entirely new commands related to "IF": "AND" and "OR." As an example of their use, Z-System aliases are traditionally set up so that help messages will display if the user enters the command with either a "//" parameter or no parameter at all. To create an ARUNZ entry for our by-now classic "COPY" alias to do this our line used to have to read:

COPY IF //=$1;ECHO SYNTAX:
"COPY [SOURCE]
[DESTINATlON]<CR>";
ELSE;IF NU $1;ECHO SYNTAX:
"COPY [SOURCE]
[DESTINATIONI<CR>";
ELSE;CP $2=$1;FI;FI

Whew! How boring. Now we need only enter:

COPY IF //=$1;OR NU $1;
ECHO SYNTAX:
"COPY [SOURCE]
[DESTINATION]<CR>";
ELSE;CP $2=$1;FI

One other feature of ZCPR3.3 for which alone I would want it is its memory-resident ECHO command. It can finally display lower case characters. I've always felt the upper-case only ECHO-ing looked silly and infantile; we now have the capability to make professional-looking displays, status reporting messages, etc. - a very important part of every fully-utilized Z-System.

Contact MOR for the terms of a ZCPR3.3 upgrade.

By the way, I recommend that you start writing aliases with either VALIAS or BALIAS (or, of course, as I will never fail to suggest, ARUNZ). I recommend you not even touch ALIAS.COM; this program is very much outdated.

More news on the Z280 front. I just learned of this a few days ago and know very little about it, but there is a company by the name of Zedux in Van Nuys, California that apparently manufactures a generic Z280 add-on board. And as if that weren't enough to get the adrenaline going, the real shocker to me came as I browsed through their documentation: they have a genuinely multi-tasking operating system already written for it as well. I know nothing more than what I've read, and merely pass on the information to you. I immediately sent them off a missive requesting more information and a possible Morrow beta-test, but for those whose interest is as piqued as mine their address is 14402 Hamlin Ave., Suite #C, Van Nuys, CA 91401, telephone (818) 787-0113. This could be a real gold mine.

I hope your summer is going well. Z you next time...


Rick Charnes bought his MD-2 many years ago when he thought of himself primarily as a writer. Now a self-admitted fledgling technical type, his computer has turned from tool to toy. His immense love affair with ZCPR3 leaves some occasional time for mundane things like work. He is president of BAMDUA.