IMD 1.16: 1/06/2007 13:41:50 FOGCPM.210 --FOGCPM210ZDE10 COM} ZDE10 DOC !"#ZDE10 DOC$%&'()*+,-./0123ZDE10 DOC|456789:;<=>?@ABC-07-15 89 -CPM210 DOCZDE10 FORDZDE10 NEWtEFGHIJKLMNOPQRSZDE10 QRFTUVZDE10 TOCWXYZZDENSTALCOMI[\]^_`abcdZDENSTALDOCefghijklmnopqrstZDENSTALDOC.uvwxyzZDKCOM12COM{|ZDKCOM12DOCN}~GRID BAS/GRID DOCGHAMCALC BAS\BUZZ COMBUZZ DOC PROBLEM RPT READ ME This is the disk name. SUPRBDOSDOC 'SUPRDOS2TXT  This is the release date of the disk. ZDKCOM12.DOC 48 E4 9984 78 GRID .BAS 0C 29 6016 47 GRID .DOC 80 D4 9088 71 HAMCALC .BAS 64 10 11776 92 BUZZ .COM 78 CD 2560 20 BUZZ .DOC 44 E1 1664 13 PROBLEM .RPT 53 6A 1408 11 READ .ME 97 CF 1408 11 PATCHINS.MSG B1 1B 2176 17 ÐZ3ENV`0ZDE 1.0 Copr. 1989 C.WilsonHZ80NWS WAB@@ Osborne 1/2/4 P T)(S= ERTeletype 61:!88*6 2m*0(!0|S(D 2m*d"ˋel*-28<2\ 2828:28?1:28*N"8:d2):/ 28!0:5!~#͞*8!^1 !A7ͻ$:8 #ͤ$͹..:] (^$͎#:8 q1:8!@28281:z42W3͚6.5GTXy+H1%~'AX  :   1k%:8x!W8#6, !mR#!: v > =#$ x##F !$c9!G G!Z8#08:ڙ [ M#!H=~+x;!Q8#61%%)g%%)q%  %vO%./%%/k0'& !N8#6M %7= l4" "J2ͫ1d1}1M2:W J2}111z4 0#:8#:8-:8( !7͖1z4!^1:8_#*:8_ l* S(D e- :5:8D28:8 5:T 2ͫ1/0[[:8o&6^#V00 ]]] 1#:8( z45 >>>>>> >> > 28*Y&))))͒+ :8_:8 /28K4͚6͒!85#~T]#͵(O!84^q{8>2:82ɯY(rN  !(!!  ( (#OGyHAX=y=+=6>B21 !}ր0>(2(. (Mr(Jy(!w# 0@Ͱ1212~ ~ >+1 116}րV >' BKxbk~08 :0 #x0Ex(<($8*(8 ,!' 8$! 8!d 8!  8 ! 8x70= DMOͦ ͷ د 7! FNy(-B0 ##>1B84 ##NFy(>0}0B> 6 #= 'd !8 <282828/282 >2828:28:28!\7͖1% !8  B(dD(ZP(SL(228B)!F#͐*8"8*8u:8 :8!828!8n(p O R+ a *8[8"8S8> !8~(28<28:8Gl 8s*8͈͞ ; }(&:8_(> x(( x:8( 82>28 [8{z0> :8O:8( y !~(˾F#͐!85 !F#͐B*8+͌*z4:8> :8g(*!e8#ʔ )!84ʔ N:8_:8=ڔ ڔ :8O:8!88˶:8(Gz!8N(K:8G:80>F> = *8:8Gͅ> :8!8o& 6 ! ͅzzzl:8G7nnnnn (.(:8ȯ28ͦ >28:8W :8(>28 !):8W >^ @!8v ` 0O!)(R!e( 4>_!@F#͐->_!~ F#˾_͟!8l:8G> > :8 x~ #x^͟#!*?:U !:"8*.%"828<282828!"8"8"8*8+"86 *8#"86 F#^#V## ^#V##@`0@a{_:86>G:8x9= :XG x BDM*8DM*8J*8K8K8*8++V*8+*8"8#"8d*8#*8"8+"8S0͢) > 7>  ###7?(#+a0S> *8 7?z 7*8+> ##>4:8?-*8+"8:8(=*8#"8:8!8(<:828>5:8=(,&!88#$:8=:8=!Z<:8!<::8< 28ɯ ~#(  > S8&T]~  > 8 > # x S8a*8T] >0~ ~+ x S8ojܝj2}( !d(!86*8#w"8!86*8+w"8!"8S*8#V> *8 M*8"8*8+d> *8 m*8R"8!7͖128N(Q 10B BW>!0:>_!z(N #= ~(^6#DM!BDM8{(I: :2s#K!T]BBDMN#!0::8N(Q +~#8#+8z4 !!>ݾ8^R8#"|6#+| !"!!!8FD0F:F:28!8F0G!(^#~#BO~˾(#~˾4>1)!7͖1% (cO!7͖1Q 14y( !0:6z4*( 08 0Gx28:!0:"8>28!J~28~m%>20:z4:8F28!86[(+](.>(5<(<_!0:~#F(F{ #"8!0:"8ɯ28_D:aB+ SB*8++++"8>>2:8F_͙)H>28:8T} *8^!"8)*8~#"8($_~< :8 !8~<(5(!0:"8:{ɯ28DT! 26! 2wÇ6:8!Jm%! 2~628:82 2! 2~628:82 2ͫ1(/0!0͝j`i86 *8#[8RB 86 *8[8*8[8 76 :8>Y >N27!701#5{z~# (8:80!^1#͹.5*8uA!"85*8"8*8͌:w=5"K,BPY!V~O >>w44!>N#Fx%!V~@Ba8 *8>` S8 *8>[ Bͣ>28uAs6a&͙)&+:8=G:8X5r:8!8G:8y5r!u7:8(:8N !{7͖1ͦ BB:8N(:8(_jb x( #DMz('(+͌ (+͌ w25͒63ͣ`6u:8͜s6͒63+0*8~ h6#͌=*8&!8 a8"͙)( ~=!Z #+"8( ( (Vs6w&=!x6:8=x6EaE6͙) ͒63~(6 +#"8 ( (js6#A>28:=!Z!8x6]͙)+ͬ)( ͧ( ͧ+ͬ)Ļ)͢) Ͷ)) Ͷ))͙)X:( Ͷ)) : X:X:( Ͷ)) :Xͱ)Ļ)5:8=_!P8<_+%%[8S8͌=(5:8_=!P8_ͣ[8S8u]:8Ü:8??!9yOxG>*8"8*8:8 # x>:](@:9=(:[9> (1(.S>*8"8*8Q:9>= `:92T] C8͈]( | } >= K8n:92B##y28( >  ++~#( ]( | } >= K8t:9=G9͈](!cy++͌*8~( (~6  =w!8F5!9( O#> 5!95O#> 55y+u*8~( (~6  w]5!G7͖1% 92828>2]!~/ $#~#/(C(B( 7>2]>28~#](x29*8"8:9( GXB!9~(G#~2:8{OY]~>28!M7͖1% z49O!>28B:9z4:8xW8}(0:8.Y5>28:8(@:87:8K48( :8:9t'/:8?:87:J2ͫ1!]8d1͚6T:W1J2}11 7* O287_YN !8m% 0:8!t8 !K8;/&![8#~=!x6:J~ʆ&Ë&&:8(H!b +y0+Í~:Z/<͍Æ&!m7͖1% :8(@(=#([* (18,j_:b7![~( 0# +s{!ab B[E* (+O<[8[E* 8 z4 0!m7͖1:8" 8(![(#6( T]#Hz4 0!T8#( 6!d6 (N r z&0̓&5_?8 51{:8!x6jͥ{ ':8†> 5ͥ:8!Z!x6]:88:J 3͡:8N( ͢) T͚6a8s6+pr:8> s6> :8!855#AE͝:8> > 5:J5*8~5!d5*8> > 5:8X28:8a8 :J(:8=ͫ&<Æ&͙) +͡a+͍SXj*8+"8~ 55jx(*8++> ##"85a5*8~(̓*8~6 +w~#"8 5j x7*8#x8gT]#̓> 5*8͍"80+ ,*8##0 *8~ # +*8͍͠5"8>28!h8#28Xa}͙)!8(28 :8N!8~ 6  !:dj5 ! !p #GBw u+͌2w 5!86S8$:d T] +~a8*8:d F T] +S:d S:d5T]V8S8+x a*8:d!a*8:d5T]d8S8#x p OB 2w DM*8B`i(#S8 K8BDM(+S8 S8#"8w25p B+#RDM[8!0͝p +#RDM[8!2S8w25j`i7B͌!:89!!W7͖1> ' :\G:8O(;G!~w#: +6+ 0B:8 @BG* 8 BOY ! 9p#6?9 6ͫ1:K(2:28:8=28:!8wgN  9#* 0NFile (# 9#*#_!#! ~(:Q( ~w#6+> w+w+w+T]+y6.O0 !85( > ͋0:8O0...  y!8(> ͋012:8_ 5#:8( !7͖1z4-^$!:7ͻ$:8 ʹ.l*:\q*\#*' BG!~w#!~[( x͞*B28#~W( A(NB28!"8:8N(>28:L28:8= *N"8 !"82828 0͙)_A8[0 nˮ +5!e7͖1:" B28͹.z45!8~/w!Mm%!w8:8N(:M !K8>/!Jm%:J!8~(:8!q8 !K87/!8m%:8!}8 !K8D/!8m%:8!z8 !K8A/ &O:88>28y28 &!80$28 0z4:8N(:8='&!m7͖1:8" B9&!88?&. 0!88~(6w>:8G:8 j:8=G͍͙) +<͍ɷ͙) X= &28͢) >G͈ͣ x!ZGx( V0x:8!84N&5͢) J- :M(͙) (> ͙) +4z&( 8 eͣ&x=J+=:8=͍aښ(͙)yO(8ͫ&(&ͣ&}ʎ(&!8aښ(͙)6( ~=!Z ͬ) +&z&ʔ(ڔ(e͙)( XXè'ͣ&è'͢) D͢) T-(P+X )>&͙) T) +> ͍è'+ ):8mY5YJYN:M(:K4O0(T͡a0͍7+͙) X7 (͍+͙) +͍͢) ) (ÍÍ͙) +͙)XX {2):8͍͙)(Jͬ) XJͬ͡) X&`&!8:8=G:8J͕)(͍ͣ&> ͍3͡+*8~ *8~> !)!)!)!)!) !)͙)͢)~ #,;:-.?!  J2ͫ1!a8d11:W( :K0z4J2ͫ1}11l*2\**#^#VSR*Q*r+s[R**#s#r*#s#r>2\1:͙*:>0ɷ(%!R˶#˶<(!()% :A28q1T]4+O>: z+6+6:(#x2\y28_ e+~08+:0'0_+~08:00W_+ 0i{28 }(~ (A8Q_>8K+}(~ A#{<2\>:> +#(]#(d.( (@8t[(B+(  > Eq17ɯ(;. ##(/ (8C[(+(~ #~[ #~( + 28!eB+F+:] (!+ .,;:?*=[?(#+28ANW> +#(T] (#8K,(0PY() 45 #( +N+F* |( N#Fxɯ2h2i2|28/28\#*< 7#*\#*.-0!:8W K~ >-w(n :8(d/28~ ~ (0˾> #wz ˾~ +~(7 28!!d( ~ 8~ (> #wz#ž,Ç,28 l*:\q*!] ˾#ʹ.8f\#*28:8(4!\ !\!8#*< §.#*\#*< §.282h2|\#*:8= g#*<ʥ.xʚ.!͈!)(ow:8W <~ ~!8(" ( ( 28~ >28:8 ~#"\#*(͚.H!:w > (|-}--(6#\#*(͚. \#*<72i:W2!A8͌1L/!n8:8N :8 !k8/͖%tw%%͸%:8=!8 !K8G/:W2ͫ1d11:K(2!Wm%( ?1,5?1͹.5ͫ1 2}12:\@2:8O30 2y01y x20y02K,(+`iF($:\# N:8(>/2#~ 2>:2!]~ (2#>.2!e~2#}1>[2:821!Km%y0?15:K!,9:8 :<28:8_~# ~#G> ͓0͋000:8B!8m%(/?1:85>28V4:W 22L/285?15:8!8F(?2!WF =!K28ɯ7G#^# 2 ]>  2/ͫ10*/ͫ1:<_Ͱ51:V!:^1>28:V!:^128:8! :8!8:<0?:8_ 2 _1:W(:8(:Wz28:N !!Ͷ2z(  2 {!Ͷ2 A(=!Ͷ2!:R(z_ 2#{_ 2{_ 2#z_ 2:G?!2z<ͦ2!2{<ͦ2!2^160 84 #0wͼ2~d1:Vͫ1:W-1 1:8_ͣ0:828&< :8Ox0_:88 8 x={(<28D28*8"8:8N:8 _+BJ(R8#"8C8͒ ͍6K4͌3͒6 :8=3=3=74V4:8374V4:Wb"2ͫ1*8:8N3**832:8o&31l2 6 ! d1ͫ6:8G|4ͫ6͢) 3:8W:KW:8=_32ͣ!8:8=W=G:<_4S:8!8 *84ͫ‡6:8!8(G#2͹.͌3ͫ‡6 0528/28|4:8< ͒:KW2:8(:8_ͣ:<_:8GJD_:W<_:8 8(é5:8GW$ͣ:8G:8=W:<_4S!8 *8zȯGO_O(6͈ʩ5 (ͤ5z{!Z<_DWDG > ͤ5͈ͤ5( (3 0M@Ͱ121Ay (:8( <1{ԩ5: 2(> 2{=HG!^1:8 2 :8=W!2:_>> >>> :8028͒63!6͒63!6:W!!8 /^18: 0:8=:8= 6͙)( :8!(%:8!85:8= 6:8!85:85>28>28>28!8!86ͽ6͙):8͢) (a8<11:8_:K!8W26667666 77OuoMemoryInvaliKeyI/ErrorNoFoundSyntaErrorCannoReformatNameReadWriteEraseLoadFindChangtoDirOptionsLengthColumnPageLineMacroRepeacoun([Q],0-9/*)Kenumbe([N/Q],0-9)Abandochanges(Y/N)Unchangedsave(Y/N) ChangedQFilsizeNNNNNMemorusedNNNNNFreeNNNNN [MenudisabledseZDE.DOo.QRF] 'LCl ^Q ^O ^P ^KESCChg?WaitRdy^QTOP Pg INSvt hy AI DS MR BAK:U !8͇1#z4:8B!8;͇12 (!;< ((!?>(!i= ͇1#5^csup^worrt^linup^delete^UNdelete^Ptcode ^down^worlf^lindnDEdeleft^reform^Pplacmark ^left^pagup^insert^deword^castoggle ^right^pagdn^insrCR^deline^L(^\rpfind (PRES^K/ESC^O^FOSUBMENUS) ^KBegiblock^KblocWrite^KLoanew^KNameEscMacrdef ^Kenblock^Kdeletblock^KSave ^KInfoEscstorkey ^KUnmarblk^KReafile^Ksave+load^KPrintEsc0..usky ^KCopblock^KFillist^Ksave+eXitEsc-TAtaback ^KmoVblock^KErasfile^KQuit Esc-Arrowshifscreen ^QgotBlock^Q" or "<", are SEARCH LOOPS. They will continue to move the cursor right (">") or left ("<") AS LONG AS the character at the cursor matches (ESC-=) or doesn't match (ESC-~) the specified character. Both search loops terminate automatically at the beginning or end of the file. Example: ESC=_> moves right as long as the current character is a space. ESC-+, followed by 0..9, CHAINS to another macro key, allowing you to build macros strings longer than the storage limit of any one key. It does not "call" the key; there is no returning. Example: ESC+9 chains to Key 9. ESC-; (semicolon) gives a brief pause, presumably so the user can see what's happening on screen. Macro programs are stored just like any other macro string (usually with "N"o repeat count). If you program in an endless loop, you will at some point have to abort with ESC. Don't make macro programs "Q"uiet until you're sure they work. Example: here is a good macro program (best stored as a Quiet Key) to move the cursor to the start of the current sentence: ESC~.1, ^S, ESC1, ESC~.<, ESC2, ^D, ESC=_2, ESC=^M2 You could write this out in programmer's pseudo-code as: If not "." goto label1 Move left ;move left if already on period label1: While not "." move Left ;move left to previous period label2: Move right ;now move back right If " " goto label2 ; as long as you see a space If "^M" goto label2 ; or a Return (all done)  7. General Information. 7.1. Disk Space. ZDE isn't disk-bound; if you run out of disk space, just insert another disk (always keep a blank FORMATTED disk around). Alternatively, you can use the ESC-F and ESC-E commands to purge unneeded files. [If you have small disks, you can also install ZDE not to preserve BAK files.] Let ZDE's filesize limits encourage you to break work up into files of 50K or less; larger files make inefficient use of floppy disks. 7.2. Error Messages. Press ESC or Space to continue. "Error" alone means the command used just won't work in this situation. (Example: a block command was used with no block marked.) More specific errors are: "Out of Memory" - the file, block, or key string won't fit in RAM. "Invalid Key" - an illegal command key sequence was pressed. "I/O Error" - file not found, disk full, empty/invalid drive, etc. "Cannot Reformat" - word too long, or margins invalid. "Not Found" - the object of a search was not found. "Syntax Error" - a macro programming command was misused. 7.3. File Modes. ZDE has three FILE MODES: "W"ordStar document, "A"SCII document, and "N"on-document. The basic difference concerns the format of disk files. In "W" mode, ZDE reads and writes WordStar-compatible files. ZDE can edit a WordStar document, except that any right justification will be lost. WordStar can edit any ZDE "W" file in Document mode. In "A" or "N" mode, ZDE reads and writes text as standard ASCII 7-bit characters, a universal format accepted by virtually all software. The only difference between "A" and "N" modes lies in the default settings on loading a new file. Typically "A" mode is used for word processing, and "N" mode for programming and other technical applications. DEFAULTS FOR: Margins Tabs Hard CR disp. ------------ ------- ---- ------------  "A"SCII or "W"ordStar mode ACTIVE VARIABLE [ON] "N"on-document DISABLED HARD OFF The file mode option can be specified along with the filename at any ZDE file function prompt, allowing you to mix WordStar and ASCII disk files as needed (see Invoking ZDE, above). You can also change the current mode with the ^K-N function by entering a new mode (e.g., "[W") with or without a filename. [ZDENSTAL allows you to select a default file mode, to be used when no mode is specified (originally this is "A"). Further, you can specify two filetype masks for automatic mode selection (e.g., all "ASM" files as "N" mode) to override that default.] NOTE ON ASCII FILES - The "A"SCII-document file format used since VDE 2.50, to allow accurate formatting and WordStar compatibility, distinguishes between HARD and SOFT CRs (see Wordwrap, above). Consequently, if you edit an ASCII file created by other software (including earlier versions of VDE), it may appear to be full of hard CRs, making text impossible to reformat. There are two easy ways to solve this problem: first, you can use ^Q-A to find "^M"s and selectively replace them with " ^M". Alternatively, the following Macro (best stored as a Quiet macro Key) does a good job of "softening up" paragraphs for reformatting: ^QS,^X,ESC=_],ESC=CR],^S,^V_^V,^D,ESC![ 7.4. Hyphenation (^O-H). ZDE can't introduce hyphens, but it does recognize them in the text, treating them as a legitimate place to break a line, so if you have a long word close to the margin, you can insert a hyphen where you'd like the word to be broken. Similarly, ZDE can't unhyphenate. If it is trying to reformat and finds a hyphen at the end of a line, it will pause to ask you what to do with it. You will see the prompt "Chg?" in the header, and can: Press "Y" to remove the hyphen and space, joining the word; "N" to leave the hyphen, but still join the word;  "ESC" to leave both the hyphen and the space alone. Typically you would choose "Y" for "soft" hyphens that you introduced to break up a word ("intro-duction"); "N" for hard hyphens that are part of a word ("vis-a-vis"); and "ESC" for punctuation (dashes "--", etc.). After your choice, reformatting will proceed automatically. You can toggle hyphenation on and off with ^O-H. If off, hyphens are not treated differently from any other text character. [The ^O-H default can be changed with ZDENSTAL.] 7.5. Interruption. If ZDE is interrupted by messages from other software (BIOS error, resident utilities, etc.), it may lose control of the screen. The best way to return it to normal is by blanking and restoring the screen (^O-Z, ESC). 7.6. Prompts. First, ZDE has several simple prompts requiring you to confirm an action by typing "Y" or "N": "Abandon changes?" - warns the file you want to Quit has been changed. "Unchanged; save anyway?" - reminds the file you want saved isn't changed. "Delete original?" - do you want to delete block copied from 2nd file? "Chg?" - do you want to change this instance of a string? Then, there are a few special purpose prompts: "Repeat count:" - enter (optional "Q" and) repeat count for Macro. "Key number:" - enter (optional "N/Q" and) key number for Key. "Rdy" - press any key to print next page (ESC quits). Finally, there are a variety of prompts for either numeric or string input, like "Column:" or "Find string:". You are expected to type in a string (up to 65 characters). The following control keys operate: Correct mistake: BS (^H), ^S, or Del Erase entire entry: ^X Abort operation: ^U Note that to get any of these codes, or a CR, into the string itself, you must precede it with ^P (this includes ^P). Examples: to find a line beginning with a "*" (find "^M,*") type ^Q-F, ^P-CR, *, CR. Now to get this into a Macro with ESC-M, you would have to type ESC-M, ^Q-F, ^P-P, ^P-CR, *, ^P-CR, CR. 7.7. WordStar Compatibility. In most respects ZDE operates much like WordStar; one big difference is the absence of a "No-File" menu. You are always in edit mode; use ^K-L to select a new file to edit. If the keys ^J, ^K, ^L are in use as CP/M arrow keys, you must use ZDE's original command set to substitute for them as follows: Block prefix (^K-)... ESC- Help menu (^J)....... ESC-H Repeat find (^L)..... ^\ If these keys are NOT installed as arrow keys, they retain their WordStar functions. Then, of course, ZDE lacks some WordStar commands, and has some of its own. Aside from these, there are the following differences in common commands: COMMON USE WORDSTAR 4 ZDE ZDE NOTES Hide block ^K-H ^K-U Actually unmarks block. Erase disk file ^K-J ^K-E Set Place Mark ^K-0..9 ^P-Z Not individually numbered. Go to Place Mark ^Q-0..9 ^Q-P Cyclic. COMMON COMMAND WORDSTAR 4 USE ZDE USE ^^ Soften hard CR Transpose upper/lowercase ^K-N Column block mode Rename current work ^O-D Display ^P codes Display hard CRs ^O-F Ruler from text Flush right ^O-P Preview mode Page length ^Q-U Repeat align Repeat undelete Note that ZDE does not implement WordStar "dot commands" in text, though in "W" mode it avoids printing them. 8. Disclaimer. You use ZDE at your own risk. The author accepts no liability for any damages resulting from its use or misuse. Direct problem reports and suggestions to the author; include a stamped return envelope for a reply if desired. Thanks to the many users of ZDE whose feedback has led to improvements and bug fixes in the past. Carson Wilson Sysop: Antelope Freeway RAS 1359 W. Greenleaf 312-764-5162, Chicago Chicago, IL 60626 24 hours, 3-12-2400 baud  block mode Rename current work ^O-D Display ^P codes Display hard CRs ^O-F Ruler from text Flush right ^O-P Preview mode Page length ^Q-U Repeat align Repeat undelete Note that ZDE does not implement WordStar "dot commands" in text, though in "W" mode it avoids printing them. 8. Disclaimer. You use ZDE at your own risk. The author accepts no liability for any damages resulting from its use or Z-System Display Editor is Eric Meyer's famous VDE improved and enhanced for Z-System. ZCPR named directory and line queue capabilities, preserves file datestamps and runs faster under ZSDOS, improved install program and documentation, and key compiler included. Over twenty flaws in VDE 2.66 corrected. Also runs under vanilla CP/M 2.2 and CP/M Plus.  WORDSTAR 4 USE ZDE USE ^^ Soften hard CR Transpose upper/lowercase ^K-N Column block mode Rename current work ^O-D Display ^P codes Display hard CRs ^O-F Ruler from text Flush right ^O-P Preview mode Page length ^Q-U Repeat align Repeat undelete Note that ZDE does not implement WordStar "dot commands" in text, though in "W" mode it avoids printing them. 8. Disclaimer. You use ZDE at your own risk. The author accepts no liability for any damages resulting from its use or  New in ZDE Z-System Display Editor Version 1.0 10 Mar 89 ZDE and its documentation are copyright 1989 by Carson Wilson, all rights reserved. They may not be circulated in any incomplete or modified form without written permission of the author. Any commercial use of ZDE, defined as any situation where the duplicator receives revenue by duplicating or distributing ZDE by itself or in conjunction with any hardware or software product, is expressly prohibited unless authorized in writing by Carson Wilson. CONTENTS 1. Functional Enhancments. 1.1. File Datestamp Capability. 1.2. Named Directory Capability. 1.3. Line Queue Capability. 1.4. Other Enhancements. 2. Bugs Fixed. 3. ZDENSTAL. 4. Notes to DosDisk Users.  5. Planned Enhancements. 6. Development History. 1. Functional Enhancments. 1.1. File Datestamp Capability. Under ZSDOS, the Create date and time of files edited with ZDE are maintained across editions. If .BAK files are being created, the create dates of new files will be the same as their .BAK files. Note that if a file with the name of a block being saved with ^KW or ESC-W already exists, the saved block will have the same Create stamp as the (previously) existing file. I hope to address this side-effect in future versions by prompting before erasing existing files during ^KW commands. 1.2. Named Directory Capability. ZDE will now accept ZCPR named directories when loading, renaming, and erasing files, and when requesting a directory listing with the ^KF command. The named directory (if available) is also displayed as part of the current file name in the status line. Since ZCPR directory names can occupy up to eight columns on the status line, it was necessary to move the rest of the status line over by eight columns. I was able to gain an extra column by putting only one space between the filetype and the "[x" specifier, but the result is that if your terminal displays less than 55 columns the current column number will not be visible in your status line. This is unfortunate, but the status line is already about as compressed as possible. To include all of the information I would have to add a second status line for narrow terminals, which would add a good deal of code and complexity to what is already a complicated program. Since most CP/M terminals (including my own) have 80 columns, I have decided in favor of the majority in this instance. You may also notice that the ^QA prompt "Chg? (Y/N/*)" has been shortened to "Chg?" and the "Wait..." message is now "Wait". These changes were also necessary because of the decrease in available space on the status line. 1.3. Line Queue Capability. A third functional enhancment is the new ^QQ command, which causes ZDE to skip to line numbers stored in ZCPR's user-defined message bytes. Under ZCPR3, up to eight line or page numbers may be passed to ZDE. The original idea was to use the interface to produce a Turbo Pascal-like integrated environment for program development, but the interface is certainly not limited to programmers. The numbers are stored in ZCPR's 16 user-defined message bytes, and ZDE treats these bytes as a packed array of up to eight elements. ^QQ causes ZDE to cycle through the array, going to the stored locations sequentially until the end of the array or a zero element is reached, at which point ZDE returns to the first stored location. The numbers are stored as inverted 2-byte hex words (LSB first), so for example to store the lines 12, 44, and 108 a program would set the 16 user-defined bytes as follows: 0C 00 2C 00 6C 00 00 00 00 00 00 00 00 00 00 00 In this example, when ZDE reaches the fourth word (00 00) it returns to the start of the array and goes to line 12 (0C 00). Any ZCPR program, or even an alias (using Jay Sage's powerful ARUNZ parameters) can now give ZDE the locations of up to eight line numbers of interest. With a little imagination we could probably create an integrated text search/edit environment which searches multiple files for a string and points ZDE to the exact location of each match for editing. Thanks to Cameron Cotrill and Al Grabauskas for suggesting this feature. 1.4. Other Enhancements. In response to a suggestion by Phil Newman, ZDE now properly accepts and displays user areas between 16 and 31. While I do not normally suggest storing files in these areas because many CP/M programs do not handle them properly, they are useful occasionally on very large disks or for security purposes, and are supported by ZCPR and ZSDOS, so I have included them in ZDE. For NewWord compatibility, I have changed the "To Mark" command from ^QP to ^QZ. This is also better mnemonically, since the "place mark" command is ^PZ. The search and replace functions now match upper or lower case by default. To search for an exact match by case, you must enter "/c/" or "/C/" (for Case) before the search string. The "/i/" option is no longer active. I have changed default find/replace wildcard character to ^Z so that ZDE can find strings with literal '_' characters. Use the ^QZ command to find a literal ^Z. ^KB, ^KK, ^KU and ^QY no longer cause unnecessary redisplays. For faster operation, ZDE no longer resets drives under ZSDOS (same as CP/M Plus). Under ZSDOS and CP/M Plus, ZDE sets the error mode to 0FEh. All BDOS errors are displayed on the screen, but ZDE retains control. For your protection, ZSDOS Path and Public files are Read Only under ZDE. That is, you can access files via Path or Public but you cannot erase Path or Public files. If you get a ZSDOS "File W/P" error when saving data with the ^KS, ^KD, ^KX, or ^KW commands or when erasing a file with ^KE, you may have given the name of a ZSDOS Path or Public file. Try again with a new name. 2. Bugs Fixed. If just a drive letter in given during the ^KF (display files) command, files in the current user area are displayed rather than files in user area 0 (thanks to Ben Cohen). ZDE no longer crashes if no name is given in response to the ^KW prompt (thanks to Eric Meyer for finding this one). ^KB and ^KK now behave properly when entered at the rightmost column of the screen. The "Chg?" prompt is now properly erased in all circumstances. Full disk errors caused CP/M Plus and ZSDOS systems to report the wrong amount of free space. This has been corrected by closing the output file after full disk errors (thanks to Howard Goldstein for this idea). File read-only errors no longer set the drive byte to "^@" under CP/M 2.2 (thanks again to Phil Newman for finding this one). Backwards replace now finds the first occurrence of the string before the cursor even if the cursor is only one character to the right of the string. If the string is replaced, the cursor now returns to the START of the new string instead of one after it as before (this may change the effects of some ZDE key macros). Ben Cohen noticed that VDE's left margin (Lnn) print option sometimes failed to indent the first line. This has been fixed. ZDE also prints the header text at the same location no matter what left margin is used, rather than indenting the header and causing it to wrap to the next line. Print option verification is also much more rigorous now than in previous versions. ^KS, ^KD, and ^KX file name requests now abort with a carriage return as well as ^U, and ^U now returns you to ZDE in response to the ^KX filename request. The bug fix published in VDE266.FIX has been incorporated. Several ZDE bugs affecting use with DosDisk have been eliminated (see below for bugs IN DosDisk 1.00, however). Tabs displayed in the last column of the last row no longer cause the screen to scroll. Virtual screen displays no longer show garbage at the end of the line if the cursor is at the left side of the screen, and moving to the left edge of the screen with ^A no longer causes redisplay. ^A now moves to the first character on line 2 before jumping to line 1 when line 1 is empty. ^PZ now causes a horizontal scroll if it moves the cursor beyond the right edge of the screen. Block and place markers no longer set file status to "Changed." The cursor no longer jumps around when moving left from columns after 254. The cursor now stops at column 254 instead of 255, and the status line says "Col 255" for any column past 254. Text past column 254 CAN actually be edited, but it will not be displayed by ZDE. Strings can now be found with ^QA even if they are the very  last item in the file (credit goes to Cameron W. Cotrill for finding this one). "^OI@" now removes all soft tab stops "as advertised" in VDE266.DOC instead of setting them all to 1, making it possible to set new tabs after entering "^OI@". "^OI#" has the same effect. ^^ now sets file status to "Changed" when converting from lower-to-upper case as well as upper-to-lower. "Wait..." message now disappears after disk operations with ruler on and status line off. VDE266 forgot to erase the message in this situation. Backwards find and replace operations now work properly instead of repeating the prompt indefinitely when the replace string is shorter than the find string (thanks to Ben Cohen for pointing this out). VDE restored INSert to its entry status just BEFORE the final byte of the macro, resulting in irregular behavior and sometimes causing macro elements to appear after the "INS" indicator in the status line. ZDE waits until the entire macro has executed before restoring entry status. Due to ZDE's code structure, the INS status line indicator does not change during macro execution. ZDE restores INSert to entry status when macros abort due to errors (e.g., "[[[ Not Found ]]]"). 3. ZDENSTAL. Included in this library is ZDENSTAL.COM, the new install program for ZDE. ZDENSTAL it is very similar to VINST in operation, but adds the feature of displaying the actual print toggles and switches at all prompts, rather than the default ones. So if you change the first default print toggle character to ^K for example, all other prompts referring to that toggle now reflect the change. Files for use with ZDENSTAL must have the type ".ZDE" (option installation), ".ZDP" (printer installation), or ".ZDK" (macro keys), but are otherwise compatible with files used to install VDE 2.66. With Fred Haines' permission, I have adapted his wonderful VDKCOM.COM utility for use with ZDE, and renamed it (what else?) ZDKCOM.COM (see ZDKCOM.DOC). ZDENSTAL also corrects the bug which prevented VINST from loading installation files whose archive bits were set. 4. Notes to DosDisk Users. DosDisk users are advised of a bug in DosDisk 1.00 which appeared during the development of ZDE. Calling Reset 13 while DosDisk is active can cause DosDisk to think other active drives are all drive A:. Bridger Mitchell, author of DosDisk, is aware of this bug and is working on a fix. In the meantime, users of CP/M 2.2 and ZRDOS who wish to edit files on MS-DOS disks should NOT log into the MS-DOS drive while editing with ZDE, as this causes ZDE to do a Reset 13 when writing to the MS-DOS drive. To edit files on the MS-DOS drive, run ZDE from drive A: or another non-MS-DOS drive. Users of ZSDOS and CP/M Plus need not worry about this problem with ZDE, as ZDE never resets disks under ZSDOS or CP/M Plus. By the same token, however, ZSDOS and CP/M Plus users must not change disks in the MS-DOS drive from within ZDE, because DosDisk (like CP/M 2.2) requires a disk reset or warm boot when disks are changed (see DosDisk manual, p. 7). 5. Planned Enhancements. If time permits, future versions of ZDE may contain the following enhancements: An improved ZDENSTAL which directly accepts ASCII files for key definitions, along the lines of ZDKCOM. Bridger Mitchell has suggested command "bindings" which would allow any control key or meta key sequence to be linked to any ZDE command. This idea will be familiar to users of Perfect Writer. Key bindings would allow ZDE to simulate EMACS, for example. Bruce Morgen and others have suggested automatic terminal installation under ZCPR, allowing the same copy of ZDE to be used with any terminal. Allow more than two default filetypes available and fixed disks. It may be possible to preserve file create datestamps under CP/M Plus and Z3PLUS. 6. Development History. 1984: VDE began as Eric Meyer's set of improvements on the tiny (4k) "VDO" memory- mapped editor by Fritz Schneider (1982), as adapted by George Peace (1984) for the Osborne Executive. 1985: The first terminal adaptation, VDE-PX for the Epson PX-8. Ongoing improvements also in parallel Osborne versions VDE-OS. 1986: The unified VDE(M) version 2.00, with generic terminal installation. Versions 2.1-2.3 added new features including macros; global replace; tighter compression; many Print options; file directory; undelete. 1987: 2.4 (1/87): Improved scrolling and screen functions; more screen sizes supported; WordStar file mode; place markers; ^OZ; block print; larger macro keys; VINSTALL terminal menu. 2.5 (3/87): User area support; variable tabs; double spacing; search wildcards; more standard block functions; improved format- ting; many  additions to VINSTALL. 2.6 (7/87): Greater WordStar compatibility; many new functions; more free RAM; faster scrolling; search options; keyboard buffer. 1988: Development through v2.64, with new functions; top margin; doublespaced printing; auto mode filetypes. 2.65 (4/88): Auto indent; tab set enhancements; small fixes. 2.66 (6/88): Printer left margin; small fixes. 1989: First version of ZDE.  Print options; file directory; undelete. 1987: 2.4 (1/87): Improved scrolling and screen functions; more screen sizes supported; WordStar file mode; place markers; ^OZ; block print; larger macro keys; VINSTALL terminal menu. 2.5 (3/87): User area support; variable tabs; double spacing; search wildcards; more standard block functions; improved format- ting; many  QUICK REFERENCE FOR ZDE 1.0 ------- [Note: the ^K- and ESC- prefixes are nearly interchangeable.] -------- CURSOR AND SCREEN: = ^E = ^D ^Q, start, end of line = ^X = ^S or ^H ^Q, top, end of screen [Note: An alternate arrow key set can also be installed.] ^F word right ^QR to top of file ^QB to block start ^A word left ^QC to end of file ^QZ to place marker ^R page back ^QI to page/line no. ^QQ to queue line ^C page forward ^W scroll back line ESC, shift up, down 1/4 screen ^Z scroll down line ESC, shift right, left 32 cols ^O make current line top DELETING: MISCELLANY: FIND and REPLACE: ^G delete char right ^V INSERT on/off ^QF find string DEL delete char left ^N insert a CR ^QA find and replace ^T delete word right TAB Tab or move to stop /B/ackwards ^Y delete line ^^ upper/lower case /C/ase-specific ^QY del to end of ln ^KI information message /// quote "/" ^Q-DEL " to beg of ln ^PZ set place marker ^Z = wildcard ^QT_ del to character ^OD HCR display on/off ^L [^\] repeat last ^U UNdelete char ^OQ header on/off find/repl ^QU UNdelete line ^OW make window ^OZ blank screen DISK FILES: BLOCKS: PRINTING: ^KN change filename ^KB block start ^KP print text ^KL load new file ^KK block end (Options: P,B,T,L, ^KR read in disk file ^KU unmark block ^,"",*nn,@nn,#nn) ^KF show disk files ^KC copy block ^OP set page length ^KE erase disk file ^KV move block ^P- insert ^-code: ^KS save work, continue ^KY delete block B,D,S,Y toggles ^KD save, load new file ^KW write block to disk Q,W,E,R switches ^KX save and exit ^KQ quit without save FORMATTING: ^OR,L set rt, lf margins ^OI,N tab set, clear ^B reform text ^OX margin release ^OV tabs variable/fixed ^OT ruler line ^OC center line ^OA auto indent mode ^OF flush line right ^OS double spacing MACROS: ESC-M define macro ESC-# store macro key ESC-!,=,~,+ ESC-; wait (pause) ESC-0..9 use key macro programming e ^KK block end (Options: P,B,T,L, ^KR read in disk file ^KU unmark block ^,"",*nn,@nn,#nn) ^KF show disk files ^KC copy block ^OP set page length ^KE erase disk file ^KV move bloc..Print in Wordstar mode, using the "L8" option for normal pitch ..printers and 8.5" paper. ZZZZZZZZ DDDDDDD EEEEEEEE ZZ DD DD EE ZZ DD DD EE ZZ DD DD EEEEEE ZZ DD DD EE ZZ DD DD EE ZZZZZZZZ DDDDDDD EEEEEEEE Z-System Display Editor Table of Contents 1. Introduction. . . . . . . . . . . . . . . . . . . . . . 1 2. Installing ZDE. . . . . . . . . . . . . . . . . . . . . 2 3. Invoking ZDE. . . . . . . . . . . . . . . . . . . . . . 2 4. ZDE's Command Set. . . . . . . . . . . . . . . . . . . 2 4.1. Command Summary. . . . . . . . . . . . . . . . . . . 3 4.1.1. Control Keys: . . . . . . . . . . . . . . . . . . . 3 4.1.2. File and Block Commands: . . . . . . . . . . . . . 3 4.1.3. Escape and Macro Commands . . . . . . . . . . . . . 4 4.1.4. Quick Commands . . . . . . . . . . . . . . . . . . 4 5. Command Descriptions. . . . . . . . . . . . . . . . . . 5 5.1. Auto-Indent Mode (^O-A). . . . . . . . . . . . . . . 5 5.2. Block Commands . . . . . . . . . . . . . . . . . . . 5 5.3. Cursor Movement . . . . . . . . . . . . . . . . . . . 6 5.4. Deleting . . . . . . . . . . . . . . . . . . . . . . 6 5.5. Disk Operations . . . . . . . . . . . . . . . . . . . 7 5.6. File Commands . . . . . . . . . . . . . . . . . . . . 7 5.7. Find, Replace . . . . . . . . . . . . . . . . . . . . 7 5.8. Header . . . . . . . . . . . . . . . . . . . . . . . 8 5.9. Information . . . . . . . . . . . . . . . . . . . . . 8 5.10. Insert Mode . . . . . . . . . . . . . . . . . . . . 9 5.11. Line Spacing . . . . . . . . . . . . . . . . . . . . 9 5.12. Margins . . . . . . . . . . . . . . . . . . . . . . 9 5.13. Pagination . . . . . . . . . . . . . . . . . . . . . 9 5.14. Place Markers and Line Queue . . . . . . . . . . . . 10 5.15. Printer Codes . . . . . . . . . . . . . . . . . . . 10 5.16. Printing . . . . . . . . . . . . . . . . . . . . . . 11 5.17. Ruler Line . . . . . . . . . . . . . . . . . . . . . 12 5.18. Tabs . . . . . . . . . . . . . . . . . . . . . . . . 12 5.19. Undelete . . . . . . . . . . . . . . . . . . . . . . 12 5.20. Upper/Lower Case . . . . . . . . . . . . . . . . . . 13 5.21. Window and Screen . . . . . . . . . . . . . . . . . 13 5.22. Wordwrap, Reformat . . . . . . . . . . . . . . . . . 13 6. Macros. . . . . . . . . . . . . . . . . . . . . . . . . 14 6.1. Macro . . . . . . . . . . . . . . . . . . . . . . . . 14 6.2. Macro Key . . . . . . . . . . . . . . . . . . . . . . 15 6.3. Macro Programming . . . . . . . . . . . . . . . . . . 15 7. General Information. . . . . . . . . . . . . . . . . . 16 7.1. Disk Space. . . . . . . . . . . . . . . . . . . . . . 16 7.2. Error Messages. . . . . . . . . . . . . . . . . . . . 17 7.3. File Modes. . . . . . . . . . . . . . . . . . . . . . 17 7.4. Hyphenation . . . . . . . . . . . . . . . . . . . . . 18 7.5. Interruption. . . . . . . . . . . . . . . . . . . . . 18 7.6. Prompts. . . . . . . . . . . . . . . . . . . . . . . 18 7.7. WordStar Compatibility. . . . . . . . . . . . . . . . 19 8. Disclaimer. . . . . . . . . . . . . . . . . . . . . . . 20  13 5.22. Wordwrap, Reformat . . . . . . . . . . . . . . . . . 13 6. Macros. . . . . . . . . . . . . . . . . . . . . . . . . 14 6.1. Macro . . . . . . . . . . . . . . . . . . . . . . . . 14 6.2. Macro Key . . . . . . . . . . . . . . . . . . . . . . 15 6.3. Macro Programming . . . . . . . . . . . . . . . . . . 15 7. General Information. . . . . . . . . . . . . . . . . . 16 7.1. Disk Space. . . . . . . . . . . . . . . . . . . . . . 16 7.2. Error Messages. . . . . . . s%1%*""!eͱ ZDENSTAL - ZDE Installer, Version 1.0 Copyright 1989 by Carson Wilson [Opening !] Ϳ!l \<!'\ڌ*'˽R™  !!%%6: ʕͱ, ! Ϳ !Œ#Œ#( K(PŒ<$<ʩÕ: ˿!%P(DK ڌ*%PR™!%E)>ڌ*%`R™!%%(`ڌ*%fR™!%(ͱ] Installing: !'Ϳͱ ...Press to see Main Menu ͱ --------------- ZDENSTAL MENU --------------- ption configuration ey definitions erminal installation urther patching

rinter installation estore defaults Choose option, ave, uit, or elp: ̓ O\T+ PK|FQlRWSHóͱ ZDENSTAL HELP -- press ^C at any time to abort ZDENSTAL ZDENSTAL is menu driven; however, there are several types of data entry in use: LOGICAL values: simply enter "Y" or "N" (Yes/No). DECIMAL values: enter a number from 0-255. HEX (byte) values: 2 digits 0-F (don't omit leading zeros). BYTE STRINGS: Fixed length - just enter the required number of HEX bytes, 2 digits each. Variable length - enter the HEX # of bytes at the "(" prompt, up to the "[max]" value shown, then the bytes themselves. CHARACTERS: type the single character directly. TEXT STRINGS: enter text, then to end. For all items you can either press immediately to keep the current value, or enter a new value instead. (See ZDENSTAL.DOC for further explanation of patches and values.) ͱ RESTORE DEFAULTS: This will restore ZDE to its original distribution state: default options, terminal, and printer; no function keys, no user patches. Proceed? (Y/N) Y!%'-!R(I!"'!"'!)T]6K/!%(`ͱ Done.ͱ USER OPTIONS: Create BAKup files: !'hͱ Default file mode (W/A/N): ͟ͱ Auto mode select filetype 1: ͱ Mode: ͟ͱ Auto mode select filetype 2: ͱ Mode: ͟ͱ Default insert on: hͱ Default ruler on: hͱ Default HCR display on: hͱ Enable hyphenation: hͱ Left margin col: ͗ͱ Right margin col: ͗ͱ Scroll overlap: ͗ͱ Show system files: hͱ Fixed drives (A-P): ͱ Ring bell on error: hͱ Enable help menus: hͱ Use alt video in header: hͱ Suppress header by default: hͱ Clock speed in MHz: ͱ Horizontal scroll delay: ͱ Fixed tab display spacing:  ͗ ͱ Variable tab columns: ͡ͅͅͱ MODIFY DEFAULT CHARACTERS? (Y/N) Yͱ Wildcard character: ͟ͱ Code for block marker: ͱ Print toggles 1-4 ( ͱ): eͱ Print switches 1-4 ( ͱ): e4+5#~X#ͱ TERMINAL INSTALLATION: Currently "!%(Ϳͱ" CHOOSE: dit current or ist terminals: E L ͱ TERMINALS: press to select from list: !~#GͿ͚͡Y(`ͱ(End of list)%(`ͱSelectedͱ EDIT TERMINALͱ Terminal ID: !%(ͱ Viewable columns: ͗ͱ Auto wrap at line end: hͱ Viewable lines: ͗ͱ Extra DELete key: ͱ Extra arrow keys u/d/r/l: e#ͱ Clear to end of line [06]: sͱ Terminal init [07]: sͱ Terminal deinit [07]: sͱ Alternate video on [06]: sͱ Alternate video off [06]: sͱ Alt video uses high bit: hͱ Output filter limit: ͱ Cursor position mode (Std/Rev/ANSI/None): ͟ͱ [Non-ANSI] Cursor position sequence: eͱ Delay after cursor positioning: ͱ Insert line [06]: sͱ Delete line [06]: sͱ Ins/del specific to line 1: hͱ PRINTER INSTALLATION: Printer ID: !(ͱ Send LF after CR: hͱ Page length, lines: ͗ͱ Top margin, lines: ͗ͱ Left margin, columns: ͗ͱ Printer initialization [13]: sͱ Printer deinit [07]: sͱ :(tͱ toggle on [07]: sͱ ...and off [07]: sͱ :(tͱ toggle on [07]: sͱ ...and off [07]: sͱ :(tͱ toggle on [07]: sͱ ...and off [07]: sͱ :(tͱ toggle on [07]: sͱ ...and off [07]: sͱ :(tͱ switch [07]: sͱ :(tͱ switch [07]: sͱ : (tͱ switch [07]: sͱ :!(tͱ switch [07]: sX#ͱ Select <0-9> or ap; or to exit:  Z2|0گ ү2Wͱ New definition: ( edits, saves; use ^P to enter these) xX|I|ͱ MACRO KEYS: (!F)4!E)4ͱ bytes free)!G) > 02mͱ kͱ! (0((w#X>8+~ KK!>w7ͱ :WW:_!G)z(N #= ~(^6#DM!E+BDM{:F) :E)s#K!D+T]BBDMN#!ͱ Choose o-repeat or uiet if desired: XN(Q +~#8#+ !!G)>ݾ8^R8#"E)|6#+| !"E)!G)! O@O^#($#~ģ~+ ~ě+~#G~#Xͱ<>ͱͱͱ FURTHER PATCHING: You will require DDT or a similar utility. Addresses in this version of the program are: User patch area: *'-:'_+ͱ Command tables: Basic: *'ͱ ESC/^K: *'ͱ ^O: *'ͱ ^Q: *'͡ͱ [Closing !] Ϳ2h2|2 2!!'\ک: _ͱ, ! Ϳ: K(.P(!`"%!%(%`(!f"%!(%!P"%!G)%!%کͱ] {%ͱ *Aborted* gͱ *File)ͱ *Readͱ *Version ͱ *Writeͱ error* g 7 <(طͿ͚ͨ (.!Xw# ( 8w#6 #!XHH ~Y N͚ͨ (Y(N Oq##~X͚ ( Xw###44͚ͨ8(28(w#:w###|5}54͚ͨ8(w# 7?S؇23SO:3A~IOIO0:0 ??>2C"$2C"(*4)*F#(4#͚ͨ!_`6K:x(!_w(Y# -=O8=0!_wG(4# : "S8wSڣw#[KH!_: #*KH :#()͗ͱ... ͚ͨͮ8(w# 7?2! (0_:!W2! (_:!W؇؂؂؃2!:!~o&"'!"~ ( O#0 ?!yFNy(-B0 ##>1B84 ##NFy(>0}0B> 6 #= 'd F#^#V## ^#V##ͱ :ͱ ͱ? 㯆#O#O Ola{_COMZDEAZ80NWS W@@@@ Teletype 6Generic CRT PN ADDS 25 P KkkG4G0SY LMADDS Viewpoint PK0A  G4G0SY ERAmstrad / Heath P KHEHEpqSY LMANSI standard P ABondwell 2 P TINS= ERDEC VT52 P KHJHJSY Commodore 128 P T)(S= EREpson Geneva PX8PT  S= Kaypro II/IV P S= ERKaypro 2/4/10 P B0C0S= ERLearSiegler ADM3P TS= ERMorrow MDT-20 P TR= ERMorrow MT-70 PTG1G0S= ERNEC Starlet 8401PTg**)(S= ERNorthstar Advtg.P S= LMOsborne 1/2/4 P T)(S= EROsborne Exec. PTlmS= EROtrona Attache P KU&U S= LMTelevideo 910+ P TG4G0S= ERTRS-80 mod 2 P&TP  SY  TRS-80 model 4P P S= Zenith ZT10 P Ts1s0S= ERR= ERMorrow MT-70 PTG1G0S= ERNEC Starlet 8401PTg**)(S= ERNorthstar Advtg.P S= LMOsborne 1/2/4 P T)(S= EROsborne Exec. PTlmS= EROtrona Attache P KU&U S= LMTelevideo 910+ P TG4G0S= ERTRS-80 mod 2 P&TP  SY  TRS-80 model 4P P  ZDENSTAL.DOC ------------ [Supplement to ZDE.DOC] Instructions for ZDENSTAL 1.0 Installation Utility for Z-System Display Editor Copyright 1989 Carson Wilson 1. Introduction. As distributed, ZDE is set up for a basic Generic Terminal. The "Generic" ZDE installation may run on many different computers, but it is very slow. ZDE can be installed for ANY terminal; if improperly installed, the display may be a mess, but there are no other side effects. Most users should be able to install ZDE simply by going to the Terminal Installation and choosing the ist option to select from a menu of terminals already built into ZDENSTAL. The list is not exhaustive, but it includes most basic types: for example, the "LearSiegler ADM3" data should do well enough on Qume, Wyse, Freedom and many other terminals, as well as many computers, that emulate an ADM3 terminal. Check your manual to see whether your machine emulates one on the menu, or comes close. Once you have ZDE basically working, you may want to go through the detailed dit procedure to fine tune things; the better the installation, the faster and more attractive the display will be. NOTE: the installation of arrow keys affects ZDE's command behavior. If the keys ^J, ^K, or ^L are in use as arrow keys, as in many of the CP/M defaults, they will not function as Wordstar synonyms. Installing ZDE for your computer should not be difficult. If you find that it was, please send me a note with the details of what was required, so that future versions of ZDENSTAL can be improved. Terminal installation, while necessary, is only one part of ZDENSTAL. There are also a number of User Options affecting the operation of ZDE that you can select or modify to suit your taste, and a default set of Macro Keys. The default printer installation is a basic Teletype (no special codes enabled); ZDE assumes only that the printer responds normally to Backspace (if ^P-H is used), Linefeed, and Formfeed. You will probably want to redo this, so you will have access to your printer's special features. 2. Running ZDENSTAL. ZDENSTAL syntax is: A>ZDENSTAL {d:}ZDEname{.COM} {instfil} "{}"=optional Typically, you can use ZDENSTxx to modify ZDExx.COM (of course, feel free to rename these files more conveniently) simply by typing: A>ZDENSTxx ZDExx and selecting the values you want to change. If you have to do a manual installation of ZDE for your computer, you may want to create an "installation file" which you can use (and give to others) to supplement the built-in terminal list of ZDENSTAL. This is done by specifying another filename: A>ZDENSTxx ZDExx TERMNAME ZDENSTAL will load and use (or create) the file TERMNAME.ZDE and update it as well as ZDE.COM when you exit. The installation file is very small, containing just terminal parameters (no user options, etc). It is possible to create "key files" of ZDE macro key definitions. These work just the same way, except they must have a filetype of ".ZDK", and this must be specified on the command line, eg: A>ZDENSTxx ZDExx MYKEYS.ZDK There are also "printer files" of type ".ZDP", which store your printer installation data, and work the same way: A>ZDENSTxx ZDExx OKIDATA.ZDP (No, you can't specify more than one supplemental file at once.) The version numbers of ZDE, ZDENSTAL, and any ".ZDx" files must "agree" or you will get an error. The match need not be exact, as there may be a new release of ZDE without modifying the installation areas. ZDENSTAL's Key (".ZDK") files are compatible with the MSDOS program VDE (except that the MSDOS VDE allows up to 1K for definitions). ZDENSTAL is largely self-documenting, and steps you through each item individually. If this is your first time running the program, take advantage of its "Help" option before you start in, for some basic instructions. You may also find a good ASCII chart helpful. ZDENSTAL uses several different types of data entry: TEXT - Just type in the character(s). LOGICAL - Yes/No. Just type "Y" or "N". DECIMAL - Enter a number from 0 to 255. HEX - Enter a two-digit hex byte value 00-FF. (Don't omit leading zeros.) BYTE STRINGS - Fixed Length: enter the required number of hex bytes. Variable: enter the (hex) count for the number of bytes, followed by the bytes themselves. Example: (02)1B3D. The maximum length is given in square brackets [#]. This format is referred to below as "(#),bytes". ZDENSTAL can't check for illegal values; be careful what you enter! What follows is a more detailed explanation of installation items, in about the same order as in the ZDENSTAL procedure. 2.1. User Options. Create BAKup files (Y/N) - Should a backup file be made when you edit an existing file? Choose "Y" to play safe, "N" to save disk space. Default file mode (W/A/N) - Which of the three file modes "W","A","N" described in ZDE.DOC do you want as the default? (Originally "A".) Auto mode select filetypes - You can specify two filetypes (or masks, using "?" as a wildcard) to automatically set a file mode other than the default. For example, you can declare all "ASM" files to be "N" mode, or all filetypes "?88" to be "W", by default. If not used, fill with some illegal character like ".". Default insert on (Y/N) - Do you want the INSERT toggle to start out ON when first entering ZDE? (Originally No.) Default ruler on (Y/N) - Do you want the Ruler line (^OT) to start out ON when first entering ZDE? (Originally No.) Default HCR display on (Y/N) - Do you want Hard CR display (^OD) to start out ON when entering a Document file ("W/A" mode)? Originally Yes. (The default is always OFF in "N" mode.) Enable hyphenation (Y/N) - Do you want hyphenation (^OH) to start out ON when first entering ZDE? Originally Yes. Left and Right margin columns (1-255) - Default margin settings for "W/A" modes. Set both to 1 to entirely disable wordwrap and reformatting. Scroll overlap (0-255) - This is the number of lines overlap between screens when scrolling with ^R/^C. The smaller, the larger the scroll. Keep this smaller than your screen size! Show system files (Y/N) - Do you want files with the SYStem attribute to show in the ZDE directory display? Fixed drives (A-P) - This lets you specify that up to two CP/M logical drives are nonremovable media (hard or RAM disk), so ZDE won't reset them before writing to them, speeding up some systems. Enter two drives from "A" to "P"; to leave either blank, enter "@". (The default is "@@", or none; if you have a RAM drive C:, enter "C@".) Caution: naming a floppy drive here can cause serious BDOS errors on CP/M 2 systems. Ring bell on error (Y/N) - Do you want your terminal bell to ring when a ZDE error message displays? Enable help menus (Y/N) - Do you want to have the help menus (^J, ESC-H) available? Normally "Y". If you change this to "N", you will have about 1K more free memory for editing. Alternate video in header (Y/N) - Do you want the header, messages, etc to appear in a contrasting video mode (if installed)? Suppress header by default (Y/N) - Do you want header display (^OQ) to start out off? Normally "N", and the header is displayed. Clock speed in MHz (01-FF) - Set this hex value to reflect your CPU clock speed; most Z80 computers are 4.0 MHz (use 40 here). Horizontal scroll delay (01-FF) - This value affects the delay between scrolling the current line and the rest of the screen, when working beyond the right screen edge. The average value is 80; adjust up or down as you like. Hard Tab display spacing - This determines how any actual Tabs (^I) in your text will display. Usually 8, this can be made 2, 4, 16, or any other power of two. Other values will produce erratic results. Variable tab stops - Enter a list of up to 8 variable tab stop columns, in ascending order. (Column 1 is the leftmost.) Fill unused values with zero. Originally 6, 11, 16, 21. Next you will be asked whether you want to continue to MODIFY DEFAULT CHARACTERS? (Y/N) Ordinarily you will NOT; however, if a default assignment in ZDE conflicts with some special application, you can change these values. When entering control codes (00-1F), avoid standard ASCII values ^H, ^I, ^J, ^L, ^M, ^Z (ASCII 08, 09, 0A, 0C, 0D, 1A). Wildcard character - Normally ^Z (1A), this is the character that will be used as a wildcard in FIND strings. Change if you wish. Block mark character (00-1F) - Normally ^@ (00), but if you need to imbed that code in your files for any reason you can change this. Print toggles (00-1F) - These are the codes that will call up the four toggles defined in your Printer installation. Normally ^B, ^D, ^S, ^Y, corresponding to WordStar bold, doublestrike, underline, and ribbon/italic. Print switches (00-1F) - These are the codes that will call up the four switches defined in your Printer installation. Normally ^Q, ^W, ^E, ^R. 2.2. Terminal Installation. Terminal ID - Identify the terminal you are installing. (16 characters) Viewable screen columns (40-255) - Enter the width of your screen in columns. The normal value is 80 for a standard screen. Screen lines (4-255) - Enter the number of lines on your screen. Normally 24 for a standard screen. Must be at least 4. DELete character (00-7F) - ZDE always accepts DEL (7F) as a delete key. If your keyboard can't generate this you can install an alternate value here (example: 1F enables ^_ on an Osborne 1). Also, if you prefer to have a destructive (deleting) Backspace, you can install ^H (08) here. Otherwise you can leave this at the default value, FF for "not used". Arrows up, down, right, left (00-7F) - ZDE always accepts Wordstar arrows ^E, ^X, ^D, ^S, as well as ^H (backspace) and ANSI ESC sequences. If your terminal has arrow keys that generate different values, you can install them as alternates here. Omit high (parity) bits; ZDE strips these. Use "FF" for "not used". By default, no alternative arrow keys are defined. To install CP/M ^K, ^J, ^L, as arrow keys, enter 0B0A0CFF. (Don't install ^H here.) If specified, these keys will no longer function as Wordstar synonyms. Terminal init, deinit - Enter the codes you want sent to  initialize your screen on entry into ZDE, and to deinitialize on exit, in the form (# of bytes),bytes. Example: ^Z is (01)1A. Minimally, both sets of codes should clear the screen. Autowrap at line end (Y/N) - Usually Yes, as most terminals wrap down to the next line when a character is printed at the right edge of the screen. If yours discards characters instead, set this to No. Clear to end of line - Enter the codes to clear to the end of the line, as (#),bytes. Example: ESC-T is (02)1B54. If your terminal can't do this then zero it out (00). Alternate video on/off - Enter the codes (#),bytes to turn your favorite video attribute (e.g., reverse, dim, or underline) on and off. This will be used for control codes and (optionally) the header and messages. If your terminal has no attributes, zero these out (00). Use high bit for alt. video (Y/N) - If, instead, your terminal needs the high bit set on characters to put them in alternate video, zero the above strings out and say Yes here; otherwise, No. Console filter (7D-FF) - This is the highest ASCII code that will be sent to the screen. Normally 7F; if your terminal can't display codes 7F or 7E (DEL and tilde), lower this to 7E or 7D. Characters filtered out will display as a "?". Cursor positioning mode (S/R/A/N) - This tells ZDE how your terminal can be made to put the cursor at any given row/column on the screen: "S"tandard = leadin byte(s), row byte, column byte (default). "R"eversed = leadin byte(s), column byte, row byte. "A"NSI std = ANSI standard sequences "ESC[rr;ccH". "N"one = no absolute cursor addressing supported. Cursor positioning sequence - This is the actual sequence used to address the cursor. IF YOU CHOSE "A" mode above, you can skip this entirely. IF YOU CHOSE "S" or "R", then enter the 4-byte sequence for addressing the cursor to the top left: two lead bytes, then two row/column offsets. Most terminals use ESC,=,20h+row,20h+col, or 1B3D2020. If you have only one lead byte, enter 00 for the second. IF YOU CHOSE "N", then you must enter two 2-byte sequences instead: first one to home the cursor, then one to move it right. If either is only one byte, enter 00 for the second. Typical values are home=1Eh, right=0Ch, which would make 1E000C00. Delay after cursor positioning (00-FF) - Normally 00. Some slow terminals require a delay here to accomplish cursor movement; adjust this value upwards as necessary. Insert, Delete line - Sequences that will cause the current cursor line to be deleted, or a new line inserted there. Most terminals can do this. Example: on an ADM3-style terminal, ESC-E or (02)1B45 inserts a line before the current one, while ESC-R or (02)1B52 deletes a line. For a few terminals,  you have to specify which line is to be inserted/deleted; in this case, enter the sequences for line 1 (the second screen line). If your terminal can't do this at all, zero these out (00). Ins/del specific to line 1 - Usually No; set to Yes only if the ins/del sequences you installed above are for line 1 only, rather than general. 2.3. Printer Installation. ZDE.LBR includes a sample printer driver: EPSON.VDP. This shows you how to implement the basic features (emphasized, underline, etc) on an Epson FX or LQ compatible printer. See above for how to load and use this file. Printer ID - Identify the printer you are installing. (16 characters) Send LF after CR (Y/N) - Normally Yes. But with some printers, which manufacture their own LF on receiving a CR, you will want No here. Page length (0-255) - Set the number of text lines to print on a page. (Does not include the top margin or 3 extra lines for a header, if used.) Setting to 0 disables pagination entirely. Top margin (0-255) - Set the number of blank lines, if any, to skip at the top of each page when printing. (Originally 0, none.) Left margin (0-255) - Set the number of blank columns to skip at the left of each line when printing. (Originally 0.) Printer initialization - Enter an optional string of code (#),bytes to send to the printer before each print job, to set margins, print modes etc. Printer deinit - Enter another optional string (#),bytes to send to the printer after each print job, to restore printer to desired state on exit. Codes for toggles - Enter the actual hex codes (#),bytes to send to the printer on encountering each of the four toggle codes, first to turn a feature on, then off. The WordStar conventions are: ^B boldface ^S underline ^D doublestrike ^Y ribbon/italic but you can use these however you like. Codes for switches - Enter the actual hex codes (#),bytes to send to the printer on encountering each of the four switches. These have no pre- established meaning. 2.4. Macro Keys. The default macro definitions are those attached to the commands ESC-0..9 when ZDE is first entered. By changing them you can configure ZDE to suit your own specialized writing requirements. (Any Keys defined with ESC-# while running ZDE override the defaults.) ZDENSTAL gives you a display much like this: MACRO KEYS: (01C6 bytes free) <---- note free bytes (500) <0><> <1><> <---- "<>" flag means empty <2><> <3>^[;^C <---- normal macro key <4><> <5>World Wide Widgets Inc. <---- "" flag means no-rpt key <6><> <7>^QR^[B^QC^[T^[C <---- "" flag means quiet key <8><> <9><> This is pretty straightforward; you just select the number of the Key you wish to redefine, then type in the new definition, much as you would in ZDE. All the same rules apply (but ZDENSTAL will accept longer keys, up to 128 bytes). If the new definition is too long to fit it will be rejected. 2.5. Further User Patching. Entry to ZDE is via a JP instruction at 0100h. The current value is JP 0490h. Thus, to add a user entry routine, you can instead JP to your own code in the User Patch area, and finish it with JP 0490h. Exit from ZDE is via a JP instruction at 010Bh, normally JP 0000h. To add a user exit routine, you can instead JP to code in the Patch area, ending it with a warm boot (RST 0). The address of the User Patch area will be given to you by ZDENSTAL. This small region in ZDE can be used to install any extra patch code you need. (Example: if your video in/out routines won't fit into 16 bytes, you can jump to the User Patch area and put more code there.) This is the ONLY such area available, as ZDE uses all available memory after its own code for editing text. Note: if you find the User Patch area too small, you can also use up to 32 extra bytes before it. This is the Print Switch code area; you must then avoid using the four Switch codes. ZDENSTAL also tells you the addresses of the command tables in ZDE/M. You may find this useful if you need to go in and change a ZDE command key that conflicts with your computer's firmware. There are four command tables: basic, ESC/^K, ^O, and ^Q. Each is a list of 3-byte entries, with a one byte keycode, then a two byte address. (Examples: you will find the ^T command in the basic table; the ^OX command appears in the ^O table, as ^X.) Find the problem keycode, and use DDT or another utility to change it. (You will also see the "keycodes" 00 and 80-84h in the tables; these are used internally for arrow keys and other functions.) 2.6. Restore Defaults. This option is provided in the event that someone has so mucked up your copy of ZDE that you can't sort out what's wrong. This should return ZDE to nearly the state it was distributed in: all User Options restored to their defaults, Terminal Installation set to Generic (or Osborne Exec), printer set to a basic Teletype, no Macro Keys, no User Patch code. 3. Going Beyond ZDENSTAL. If your computer requires special additional code, and you know how to use an assembler, you may want to make an overlay to add this code to ZDE. Write the overlay file, generate a HEX file with your assembler, then merge it with ZDE.COM using MLOAD or a similar utility. (Be sure the code fits!) Example: the following overlay adds special code for the NEC Starlet to the User Patch area, where it is immediately executed when ZDE is called up. The Starlet has different terminal emulations and key definitions; most of this code just ensures that it's in Soroc mode (which is what ZDENSTAL sets ZDE up for), and sets the cursor and DEL key definitions properly. There is another problem: the ZDE case toggle command (^^) has to be changed, as it will conflict with one of the Soroc arrow keys. (On some other computers, you can't generate ^^ from the keyboard at all.) Note how the overlay finds the address of the main command menu (all the menu addresses are stored at 0112-011Ch in ZDE.COM; alternatively, you can get ZDENSTAL to tell you what they are), adds the appropriate offset (determine this yourself), and then changes the command key to something else. Note the flags "*--->" for data that may change with versions of ZDE. ;NEC8401 Patch for ZDE 1.00 (Z80 mnemonics) org 0100h ;At beginning of ZDE.COM, jp entry ; jump to User Patch area *---> org 0260h ;At User Patch area, entry: ld c,08h ; set screen mode: ld e,81h ; Soroc, wrap on, fnkeys off, etc rst 10h ; call special BIOS ld c,4Eh ; set cursor keys: ld e,3 ; to mapped codes rst 10h ; call special BIOS ld c,4Dh ; set definable key: ld de,data ; using data below rst 10h ; call special BIOS *---> ld hl,(0112h) ; get address of main command menu *---> ld de,7*3 ; offset of ^^ (this may change) add hl,de ; point to offending ^^ code ld (hl),'\' ; change it to a backslash *---> jp 0490h ;Jump to ZDE Start point data: db 4,7Fh,0,0 ;Data to set "DEL" key as DEL (7F) end You can also add code like this to ZDE.COM using the "a" command to enter assembler mnemonics in a debugging utility like DDT or (Z)SID. try: ld c,08h ; set screen mode: ld e,81h ; Soroc, wrap on, fnkeys off, etc rst 10h ; call special BIOS ld c,4Eh ; set cursor keys: ld e,3 ; to mapped codZDKCOM Version 1.2 [Z80] :] (/´Syntax: ZDKCOM .ZDT converts text file to .ZDK overlay ZDKCOM .ZDK converts overlay to .ZDT text files!e~Z#~D#~TK!6K!6T!]!]ͤ File not found.a converting ]͉...:K>͈>P͈2͈ n(+q(! (=/(H^(0(E (͈ͦͦ^̸/ƀÈ@͸*+:=w27 x ͖{2> 2͡84ր2͡8 ր2>q2>n7: P]7: Pt7͡>^7@/(^(}7:7/(^(>/77 xw: 7:=22!B"~#_ File type must be ZDT or ZDK. * No directory space for new file.  Key macro string exceeds 127 characters. Key macros exceed 498 characters.12345678ZDT12345678ZDK:*:G*&+>2*":g. "|O*:G*xʄ*`*"2:g. "2*/̈́*Gþ##^#V+z s#r#^#V2 r+s: *~2 #"*+": 2 ##^#V+zbs#r#^#V: r+s: R*: w#"*+"+*oþ*}ʵ+"*6#"ÜR*oþ"~2#~2#^#V"#^#V"#^#V"#"*#:w*#s#r*#s#rw B>CBB<|͟>.ͭ͟ ĭŸO*. HWHWr# x}o|g 7|g}o7acros exceed 498 characters.12345678ZDT12345678ZDK:* ZDKCOM Key File Compiler for ZDE Version 1.2 10 Mar 89 ZDKCOM and its documentation are adapted with permission from VDKCOM12.LBR, by Fred Haines, Glendale Littera RCPM/QBBS, 818 956-6164. VDKCOM version 1.2 is copyright 1988 by Fred Haines, and is released by the author to the CP/M community for all reasonable noncommercial purposes. CONTENTS 1. How to Use ZDKCOM. 2. Programmer's Note. 1. How to Use ZDKCOM. ZDKCOM compiles an ASCII text file into a *.ZDK file of key macros which ZDENSTAL will install in ZDE. It alsos convert an existing ZDK file into a text file with the extension ZDT. It allows you to create, edit, and re-edit complicated key macros with a full-featured word processor - ZDE itself - instead of the backspace-only line editor in ZDENSTAL. The syntax is: ZDKCOM .ZDT converts text file to ZDK overlay ZDKCOM .ZDK converts overlay to ZDT text file Use ZDE in NONDOCUMENT mode to type a file that looks like what you see when you use the K option of ZDENSTAL, substituting lower case "n" or "q" for the No Repeat and Quiet option indicators and : qThis line would be for key 0 in Quiet mode.^M nThis line would be for key 1 in No Repeat mode.^M This line would be key 3, with key 2 unassigned. n^M^M^M The line above, key 4, prints with two blank lines following it. q"This is in quotes, but no carriage return at the end." "This line is ^P^BMacro Key 7^P^B with embedded boldface codes."^M q^VThis line turns insert on before printing the line.^A^A^A^A_^F^D_^M n ^A^A^A^A ...and so on. Lines correspond to the number keys in 0 to 9 order, with blank lines for unassigned keys. Do NOT embed control codes. Type everything in ASCII. For instance, to underline, type out '^P^Swords underlined^P^S'. It's a good idea to make hard carriage returns visible by toggling them on with the ^OD command. ZDKCOM accepts trailing spaces as part of the macro, even though you can't see them, so, if you don't want them, make sure each line is terminated by a hard carriage return. Individual key macro strings may not exceed 127 bytes in the ZDK file, though they may in the ZDT text file, since ASCII representations of single-byte control codes require two bytes, and option flags and slashes don't contribute to the length of the string. The total of all strings may not exceed 498 output bytes. This is two bytes less than allowed by ZDE and ZDENSTAL, but, under the program's present logic, it would require an inordinate amount of code to make those last two bytes available. If you really need them, add them to the ZDK file with ZPATCH or any other patcher, locate the last string-length byte, and add 2 (in hex) to it. For a quick demo, remove the leading spaces from the lines below, mark them as a block, and write them out to .ZDT. Run ZDKCOM .ZDT. Then load the resulting ZDK file into ZDE with the command ZDENSTAL ZDE .ZDK. q^C^C^C^E^E^E^E^E^[^E q^[b^[0^Qs^X^[=^M1^[= 1^S^V ^D^[!0^[1^Qb^B^Ku ^[=^M0^V^I^V^B^G^[![^[0^X ^[=^M0^T^B^N^[0^X q^P^[^P^I^P^K^P^[9 q^V^KrA0:LH.FMT^M q^G^G^G^G^X q^A^A^S q^A^A^S q^KrHEADER^M Key macro 0 measures off one full page if the top margin is 0 and the page length is 58 lines. Adjust for different page lengths by adding or subtracting ^E's. I use this macro to move from line 1 of a page to line 1 of the next page. I then use key macro 9 to read in a page header from a separate file that contains nothing but the properly spaced header text with a # in place of the page number. I search for # with a ^Qf and replace it with the appropriate page numbers. This happens so quickly on a 9 mhz SB180 with hard disk that it is virtually unnoticeable, but there is a faster way to do it. Just make up a header at the top of the first page, or, if you want to start page headers only on page two, at the foot of the file, and mark it as a block. Use key macro 0 to move from the top line of a page to the top line of the next, and copy the header into place with the ^KC command. Don't forget to erase the original of the header at the foot of the file when you get there. Key macro 1 softens and reforms a paragraph by removing the hard carriage returns from the ends of each line. Key macro 2 changes a document in flush left block format (like this one) to indented paragraph form, and key macro 3 changes it back again. Key macro 4 embeds my DIABLO 1610-compatible printer's code for setting a left margin in column 11 (^K=0Bh) in the document. If I want another margin I add or subtract from 0Bh and overwrite the ^K with the appropriate control character. You may well be able to substitute your own printer's set left margin code for this one. Key macro 5 reads in a previously prepared letterhead stored as LH.FMT on drive/user A0. Key macro 6 removes four spaces or characters from the beginning of each line, used to remove line numbers from the beginnings of messages in modem capture files. 2. Programmer's Note. A ZDK file is a data structure four records long. The first two bytes are an ID number which ZDENSTAL checks to ensure that it is working with the correct version. The current number, 0250h, is valid for several recent versions of ZDE. These two bytes are followed by up to ten strings, each preceded by a string-length byte which ZDE uses to index the string's location. Each string is limited by the size of a buffer in ZDE to 127 bytes. An empty string is indicated by a string-length byte of 00h. After the last byte of the last string, the remainder of the 512 bytes are filled with 00h. It is a peculiarity of ZDKCOM that it needs to write two null bytes at the end of the file, which means that it will accept only 498 bytes for the total length of all strings (512, less two ID bytes, less 10 string-length bytes, less these two more) rather than the 500 that ZDE and ZDENSTAL allow. When you look at the key macro buffer of ZDE using the K option of ZDENSTAL, you see something that looks like this: <0>This line would be for key 0 in Quiet mode.^M <1>This line would be for key 1 in No Repeat mode.^M <2><> <3>This line would be key 3, with key 2 unassigned. <4>^M^M^M <5>The line above, key 4, prints with two blank lines following it. <6>"This is in quotes, but no carriage return at the end." <7>"This line is ^P^BMacro Key 7^P^B with embedded boldface codes."^M <8><> <9><> The numbers down the side and the option indicators , , and <> (no option) are supplied by ZDENSTAL. The ZDT text file version of the same macro keys would omit the string numbers and no option indicators, and convert the and to simple lower case 'n' and 'q'. If you need lower case 'n' or 'q' as the first character of a key macro, just precede it with a slash, which will be ignored. ZDKCOM recognizes blank lines as unassigned keys. These produce an "error" message when invoked by ZDE. ZDE recognizes a No Repeat option if the the high bit is set on the first byte of the macro string after the length byte, and a Quiet option if the high bit is set on both of the first two bytes of the string. The translation procedure from text to overlay requires: Enter two-byte ID string 02h 50h in output file. Enter 00h to save a place for a string length byte. Check for "n" or "q" as first three bytes of new string and add 80h to the next byte or next two bytes input as required. Read in the rest of the string byte by byte and output each byte to the output file. If "^" appears in the string, drop it and subtract 40h from next byte to make it into a real control character. If "/" appears, ignore it and print the next character literally. "/^" prints "^" rather than turn the character following the carat into a control code, and "//" prints a single slash. A single input slash is ignored. When the CRLF pair is encountered in the input text file, convert it to a 00h place marker for the length of the next string. Get the number of bytes output in the last string and write it to the position of the string-length byte at the head of the preceding string. When the text file's ^Z EOF is encountered, fill the remainder of the total 512 bytes with 00h and close the files. When converting ZDK overlays to ZDT text files, the procedure is more or less reversed. ZDKCOM converts the string length bytes to CRLF pairs, the control code bytes to two-byte ASCII strings '^c', and finishes off the file when all strings are accounted for by inserting an EOF ^Z. In addition, ZDKCOM has error checking for file opening and closing and for individual and overall string length, and it reports activity to keep the user from thinking the program has hung, though the counters on the screen are otherwise meaningless. The structure of the four-sector ZDK file in CP/M is so similar to the eight-sector MS/DOS version that you can use ZDKCOM, along with a patcher, to create a ZDK file for installation in ZDE12, the MS/DOS version of ZDE. Make up the ZDT file as you would for CP/M, then patch the second ID byte from 50h to 60h and add four records of nulls. ting ZDK overlays to ZDT text files, the procedure is more or less reversed. ZDKCOM converts the string length bytes to CRLF pairs, the control code bytes to two-byte ASCII strings '^c', and finishes off the file when all strings are accounted for b10 ' 6 sept 86 GRID.BAS 20 ' 30 ' ***** NOT FOR COMMERCIAL USE ***** 40 ' Bob Bruner 50 ' P. O. Box 392 60 ' El Cerrito, CA 94530 70 ' 80 ' draw a grid, specified numbers of columns and rows 90 ' ordinary printing characters only, no special hardware requirements 100 ' 110 ' ***** USER INSTALLATION AREA ***** 120 ' user may adjust values in following lines as desired 130 ' (down to next *****) 140 ' 150 ' (Values supplied in distributed version are also listed in 160 ' remark statements before each group, for reference.) 170 ' 180 ' characters to make grid lines 190 ' (distributed version: |, - (hyphen), and a blank) 200 VERT$ = "|" 210 HORIZ$ = "-" 220 BLANK$ = " " ' one blank 230 ' 240 ' printer characteristics 250 ' (distributed version: 10, 6 -- standard pica type) 260 ' CPI = Characters Per Inch (horizontal) 270 CPI = 10 280 ' LPI = Lines Per Inch (vertical) 290 LPI = 6 300 ' Distributed version: PRINTERINIT$ = "" (null string). Leave it 310 ' that way unless you have a reason to change it. See Technical 320 ' Notes in DOC file. Make sure that preceding variables (CPI, LPI) 330 ' agree with the result of any init string you do use. 340 PRINTERINIT$ = "" 350 ' 360 ' page parameters, all in inches 370 ' If these values result in graph width or height which is negative, 380 ' there will be a message when program is run, to check installation. 390 ' (distributed version: 8.5, 1.5, 1.5, 11, 1.5, 1.5; that is 8 1/2 400 ' by 11 inch paper, with 1 1/2 inch margins all around.) 410 PAGEWIDTH = 8.5 420 LEFTMARGIN = 1.5 430 RIGHTMARGIN = 1.5 440 PAGEHEIGHT = 11 450 TOPMARGIN = 1.5 460 BOTTOMMARGIN = 1.5 470 ' 480 ' ***** END USER INSTALLATION AREA ***** 490 ' 500 ' introduction 510 PRINT : PRINT 520 PRINT "This program draws a uniform grid, with specified numbers" 530 PRINT "of columns and rows." 540 PRINT 550 PRINT "If the printer characteristics or page layout do not suit you," 560 PRINT "see installation information near top of program, or in DOC file." 570 ' 580 ' how many columns and rows? 590 PRINT : PRINT 600 PRINT "How many columns"; 610 GOSUB 1250 'entry 620 COLUMNS% = ENTRY 630 PRINT 640 PRINT "How many rows"; 650 GOSUB 1250 'entry 660 ROWS% = ENTRY 670 PRINT : PRINT 680 ' 690 ' calculated values, horizontal 700 LEFTCHAR% = LEFTMARGIN*CPI 'left margin, in characters 710 LEFTSPACE$ = STRING$(LEFTCHAR%,BLANK$) 'a string to print left margin 720 HORINCHES=PAGEWIDTH-(LEFTMARGIN+RIGHTMARGIN) ' allowed HORizontal size of graph, INCHES 730 IF HORINCHES <= 0 THEN PRINT "Requested graph width is negative. Check installation." : GOTO 1400 ' end 740 HORCHAR = HORINCHES * CPI ' HOR size, CHARacters 750 COLWIDTH% = (HORCHAR-1)/COLUMNS% 'col width, in characters; 760 ' -1 above is because there is one more border line than column 770 IF COLWIDTH% = 0 THEN PRINT "Too many columns. Won't fit. Start over." : GOTO 590 780 HORIZLINE$ = STRING$(COLWIDTH% * COLUMNS% + 1, HORIZ$) 'one horiz line 790 SPACER$ = STRING$(COLWIDTH% - 1 , BLANK$) 'blank space between vert bars 800 ' 810 ' calculated values, vertical 820 TOPLINES% = TOPMARGIN * LPI - 1 ' topmargin, in lines (-1 to account 830 ' for printing the init string) 840 VERTINCHES=PAGEHEIGHT-(TOPMARGIN+BOTTOMMARGIN) ' allowed VERTical size of graph, INCHES 850 IF VERTINCHES <= 0 THEN PRINT "Requested graph height is negative. Check installation." : GOTO 1400 ' end 860 VERTCHAR = VERTINCHES * LPI ' VERT size, CHARacters 870 ROWHEIGHT% = (VERTCHAR-1)/ROWS% 'row height, in lines 880 IF ROWHEIGHT% < 2 THEN PRINT "Too many rows. Won't fit. Start over." : GOTO 590 890 ' 900 ' draw the grid 910 PRINTER$ = "Y" ' default "Y" sends output to printer; any other value sends output to console 920 PRINT "Check that printer is ready." 930 GOSUB 1310 'continue 940 IF A$ = "C" OR A$ = "c" THEN PRINTER$ = "C" 'output to console 950 IF PRINTER$ = "Y" THEN LPRINT PRINTERINIT$ 'init string to set printer 960 ' draw top margin 970 FOR I% = 1 TO TOPLINES% 980 IF PRINTER$ = "Y" THEN LPRINT ELSE PRINT 990 NEXT I% 1000 ' draw top line and middle lines for each row 1010 FOR I% = 1 TO ROWS% 1020 GOSUB 1110 ' horiz line, top of row 1030 FOR J% = 1 TO ROWHEIGHT% - 1 1040 GOSUB 1160 ' one line, blank except vertical bars 1050 NEXT J% 1060 NEXT I% 1070 GOSUB 1110 ' horiz line, bottom of grid 1080 GOTO 1400 ' end main program 1090 ' 1100 ' subroutines 1110 ' sub to print a full length horizontal line 1120 IF PRINTER$ = "Y" THEN LPRINT LEFTSPACE$; ELSE PRINT LEFTSPACE$; 'margin 1130 IF PRINTER$ = "Y" THEN LPRINT HORIZLINE$ ELSE PRINT HORIZLINE$ 1140 RETURN 'end sub, horiz 1150 ' 1160 ' sub: one line, blank except vertical bars 1170 IF PRINTER$ = "Y" THEN LPRINT LEFTSPACE$; ELSE PRINT LEFTSPACE$; 1180 FOR SI%=1 TO COLUMNS% 1190 IF PRINTER$ = "Y" THEN LPRINT VERT$; ELSE PRINT VERT$; 1200 IF PRINTER$ = "Y" THEN LPRINT SPACER$; ELSE PRINT SPACER$; 1210 NEXT SI% 1220 IF PRINTER$ = "Y" THEN LPRINT VERT$ ELSE PRINT VERT$ 'end of line 1230 RETURN ' end sub, blank 1240 ' 1250 ' sub to get entry, validate 1260 INPUT ENTRY 1270 IF ENTRY <> INT(ENTRY) THEN PRINT "Must be integer. Re-enter." : GOTO 1260 1280 IF ENTRY < 1 THEN PRINT "Must be at least 1. Re-enter." : GOTO 1260 1290 RETURN ' end sub for entry 1300 ' 1310 ' 7 apr 84 continue inkey subroutine 1320 PRINT : PRINT 1330 PRINT TAB(10); "Press any key to continue." 1340 PRINT TAB(10); " (or press C to send output to console)" 1350 A$ = INKEY$ 1360 IF A$ = "" THEN 1350 1370 IF ASC(A$) = 3 THEN STOP 'ctrl/C trap 1380 PRINT : PRINT 1390 RETURN 'end inkey subroutine 1400 END  RETURN 'end sub, horiz 1150 ' 1160 ' sub: one liIN = 1.5 460 BOTTOMMARGIN = 1.5 470 ' 480 ' ***** END USER INSTALLATION AREA ***** 490 ' 500 ' introduction 510 PRINT : PRINT 520 PRINT "This program draws a uniform grid, with specified numbers" 530 PRINT "of columns and rows." 540 PRINT 550 PRI 1210 NEXT SI% 1220 IF PRINTER$ = "Y" THEN LPRINT VERT$ ELSE PRINT VERT$ 'end of line 1230 RETURN ' end sub, blank 1240 ' 1 GRID.DOC Notes for GRID.BAS Purpose ------- The program GRID.BAS draws a uniform grid, with specified numbers of columns and rows. This lets you make blank calendar forms or other charts. Requirements ------------ GRID was written with MBASIC 5.21 on a CP/M Kaypro II ('83), for output to an IDS Microprism dot matrix printer. However, GRID is almost completely "plain vanilla" as to the BASIC, the computer, and the printer. It should run on any computer -- CP/M or MS-DOS -- with Microsoft BASIC, and should output to any printer -- dot matrix or daisy wheel. The program does not make use of any special terminal or printer characteristics. Output is with standard printing characters, and requires no special graphics features. (The possibility of translating GRID to other BASICs is discussed under Technical Notes.) Ordinary use ------------ LOAD and RUN per usual BASIC procedures. For example, on a CP/M machine where BASIC is called MBASIC... Put GRID.BAS on a disk with MBASIC.COM, and put that disk in your A drive. At the A> prompt, type MBASIC GRID The program asks you "How many columns?" and "How many rows?". It then pauses, so you can check that your printer is ready. Hit any key to continue, and the grid will be printed. Alternatively, hit a C and the grid will be displayed on the console; this may occasionally be useful to get a feel for what the program does. As originally supplied, the program will print a grid on 8 1/2 by - 1 - GRID.DOC Notes for GRID.BAS 11 inch paper, with a 1 1/2 inch margin all around -- assuming standard pica type of 10 characters per inch, 6 lines per inch. All of these numbers can be adjusted; see Installation section. Once the program is loaded, just type RUN to run it again. With luck, that's all you need to know. Installation ------------ As noted above, the program assumes a paper size, margins, type size -- and the characters used to print the lines on the grid. All of these items can be changed, by making simple changes in the top lines of the programs. (The reason I have left these items fixed inside the program is that it is likely that once you set them the way you want them, you will leave them alone. Further, the values supplied in the distributed version are likely to be adequate for many users. If installation proves to be a problem, please let me know. I'll try  to guide you through it, and will write an installation routine if it seems warranted.) If you do not know how to modify a BASIC program, I suggest the following simple approach. LOAD the program, as if you were going to RUN it. Type LIST 100-300 to list some of the lines which may be changed. Use LIST 300-500 for the rest. (The line numbers stated above are based on the distributed version of the program; you may have to browse the program if the line numbers have been changed.) Decide which items you want to change. Re-write the lines you want to change, substituting the desired values. For example, if you want a 2 inch left margin: the LISTing shows that this is specified in line 420 LEFTMARGIN = 1.5. So replace this by typing   - 2 - GRID.DOC Notes for GRID.BAS 420 LEFTMARGIN = 2 When done making changes, if you want to save them into your copy of the program, type SAVE "GRID2" (Using a new file name, such as "GRID2", lets you retain the original, un-modified version, which is distributed as "GRID".) You may also modify the program using the EDIT command in MBASIC, or your word processor. The installation line for PRINTERINIT$ is discussed more in the Technical Notes that follow. For now, suffice it to say that this should probably be left as PRINTERINIT$ = "" (just a pair of quotes), the way it is distributed, unless you have a reason to change it. Technical notes --------------- 1. The logic of laying out the grid is straightforward. From the page size and margins, the program calculates a nominal grid size -- in inches, then in characters (horizontal dimension) or lines (vertical dimension). These numbers are then divided by the number of columns and of rows, respectively. This gives the nominal column width and row height. However, printing requirements are that column width and row height must be integers. Therefore, the nominal results are rounded to integers (by the conversion of the "real" result into an integer variable). As a result, columns and rows are uniform, but may not exactly match the requested margins. In practice I doubt that this is a serious problem. However, it might be if you have exact requirements about the grid size. In that case, you should probably carefully think out a solution, then adjust the variables to give it. (In general, the spirit of the program is to make it unnecessary for you to think out the solution, but the cost is that you get a grid of only approximately the requested size.) 2. Printer initialization string. The program allows you to define a printer initialization string that is sent to the - 3 - GRID.DOC Notes for GRID.BAS printer before drawing the grid. I consider this an advanced feature; the simple course is to leave this string as "" (two quotes right together = a null string). However, using an initialization string may be worth playing with once you have GRID working, especially if you already understand how to control your printer. The idea  is that by setting your printer to print more narrow characters (more characters per inch) and more closely spaced lines (more lines per inch), you improve the resolution of the grid. This will reduce the rounding errors discussed above. Further, it may improve the appearance of the grid, which is drawn with discontinuous characters: more smaller characters may look better. Play with this if you want to, but don't let it get in the way of drawing quick grids. And if you do use an initialization string, be sure that the character and line size variables are defined to agree with your initialization. 3. Translation to other BASICs should present little difficulty. Most of the program is basic BASIC. The one feature that might cause a problem is the STRING$ function, used to build a long string by repeating one character a certain number of times. For example, A$ = STRING$(10,"A") creates a string A$ containing the character A 10 times. If this function is not available, the desired string can be constructed through a FOR...NEXT loop. Robert Bruner P. O. Box 392 El Cerrito, CA 94530 (415)-528-1065 6 Sept 86 - 4 - in the way of drawing quick grids. And if you do use an initializhe installation line for PRINTERINIT$ is discussed more in the Technical Notes that follow. For now, suffice it to say that this should probably be left as PRINTERINIT$ = "" (just a pair of quotes), the way it is distributed, unles basic BASIC. The one feature that might cause a problem is the STRING$ function, used to build a lo!00010 PRINT "THIS PROGRAM WILL COMPUTE MISCELLANEOUS "; 00020 PRINT "ELECTRONIC FORMULAS":PRINT 00030 PRINT "IF NOT SPECIFIED, ALL ENTRIES ARE IN UNITS":PRINT 00040 REM PROGRAM BY PAUL CRABTREE 00050 PRINT TAB(21)"ENTER NUMBER OF ITEM":PRINT 00060 CLEAR 00070 PRINT 00080 DIM R1(20),C1(20),L1(20) 00090 FOR X=1TO 12:READ B$:IF B$="777"GOTO 110 00100 NEXT X 00110 FOR A=1TO 20:READ B$ 00120 IF B$="999"GOTO 240 00130 ON A GOTO 150,160,150,160,150,160,150,160,150,160 00140 ON A-10GOTO 150,160,150,160,150,160,150,160 00150 PRINT TAB(5)B$,:GOTO 170 00160 PRINT TAB(40)B$ 00170 NEXT A 00180 PRINT "IF YOU HAVE MORE VALUES FOR THIS PROGRAM" 00190 PRINT "TYPE 'YES'. IF YOU WISH TO GO TO THE MAIN LIST THEN" 00200 LINE INPUT "TYPE 'N0' ? ";M$ 00210 IF M$="YES"THEN RETURN 00220 IF M$="NO"GOTO 60 00230 GOTO 180 00240 PRINT :INPUT "WHAT ITEM NUMBER FROM MAIN LIST ? ";Q 00250 IF Q>18GOTO 240 00260 IF Q<1GOTO 240 00270 ON Q GOTO 390,1200,1480,1590,1730,1950,2010,2170,2300,950,1010 00280 ON Q-11GOTO 1050,1100,2640,1280,1370,500,610 00290 DATA "BLACK","BROWN","RED","ORANGE","YELLOW","GREEN" 00300 DATA "BLUE","VIOLET","GRAY","WHITE","777" 00310 DATA "1 PARALLEL RESISTORS","2 RESONANT FREQUENCY" 00320 DATA "3 SERIES CAPACITORS","4 REACTANCE","5 IMPEDANCE" 00330 DATA "6 ANTENNA LENGTH","7 OHMS LAW","8 POWER FORMULA" 00340 DATA "9 RESISTOR COLOR CODE","10 TRANSFORMER TURNS RATIO" 00350 DATA "11 DECIBELS","12 CONDUCTANCE","13 FREQUENCY TO TIME" 00360 DATA "14 TRANSMISSION LINE","15 ANT FIELD STRENGTH" 00370 DATA "16 PEAK RADAR PULSE POWER","17 PARALLEL INDUCTORS" 00380 DATA "18 PROGRAM CONVERSION TABLE","999" 00390 PRINT "THIS PROGRAM WILL CALCULATE PARALLEL RESISTORS" 00400 INPUT "HOW MANY RESISTORS ? ";R 00410 T=0:IF R>18GOTO 400 00420 IF R<2GOTO 400 00430 FOR X=1TO R:PRINT "RESISTOR VALUE ";X;" IN OHMS"; 00440 INPUT " ? ";R1(X):IF X=R GOTO 460 00450 NEXT X 00460 FOR X=1TO R:T=T+(1/R1(X)):IF X=R GOTO 480 00470 NEXT X 00480 PRINT "TOTAL RESISTANCE IS ";1/T;" OHMS" 00490 GOSUB 180:PRINT :GOTO 400 00500 PRINT "THIS PROGRAM WILL CALCULATE PARALLEL INDUCTORS" 00510 INPUT "HOW MANY INDUCTORS ? ";L 00520 T=0:IF L>18 GOTO 510 00530 IF L<2GOTO 510 00540 FOR X=1TO L:PRINT "INDUCTOR VALUE ";X;" IN HENRYS"; 00550 INPUT " ? ";L1(X):IF X=L GOTO 570 00560 NEXT X 00570 FOR X=1TO L:T=T+(1/L1(X)):IF X=L GOTO 590 00580 NEXT X 00590 PRINT "TOTAL INDUCTANCE IS ";1/T;" HENRYS" 00600 GOSUB 180:PRINT :GOTO 510 00610 PRINT "THIS PROGRAM WILL CONVERT ENTRIES (TO BE USED IN "; 00620 PRINT "MAIN PROGRAM) TO UNITS" 00630 PRINT "CONVERT ITEM" 00640 PRINT "(1)GIGA, (2)MEGA, (3)KILO, (4)MILLI, (5)MICRO,"; 00650 PRINT " (6)NANO, OR (7)PICO" 00660 INPUT "TO UNITS ? ";U 00670 IF U=1GOTO 890 00680 IF U=2GOTO 740 00690 IF U=3GOTO 770 00700 IF U=4GOTO 800 00710 IF U=5GOTO 830 00720 IF U=6GOTO 920 00730 IF U=7GOTO 860 00740 INPUT "MEGA VALUE ? ";U 00750 PRINT "MEGA VALUE ";U;" IS ";U*1000000;" IN UNITS" 00760 GOSUB 180:PRINT :GOTO 630 00770 INPUT "KILO VALUE ? ";U 00780 PRINT "KILO VALUE ";U;" IS ";U*1000;" IN UNITS" 00790 GOSUB 180:PRINT :GOTO 630 00800 INPUT "MILLI VALUE ? ";U 00810 PRINT "MILLI VALUE ";U;" IS ";U*.001;" IN UNITS" 00820 GOSUB 180:PRINT :GOTO 630 00830 INPUT "MICRO VALUE ? ";U 00840 PRINT "MICRO VALUE ";U;" IS ";U*.000001;" IN UNITS" 00850 GOSUB 180:PRINT :GOTO 630 00860 INPUT "PICO VALUE ? ";U 00870 PRINT "PICO VALUE ";U;" IS ";U*.000000000001;" IN UNITS" 00880 GOSUB 180:PRINT :GOTO 630 00890 INPUT "GIGA VALUE ? ";U 00900 PRINT "GIGA VALUE ";U;" IS ";U*1000000000;" IN UNITS" 00910 GOSUB 180:PRINT :GOTO 630 00920 INPUT "NANO VALUE ? ";U 00930 PRINT "NANO VALUE ";U;" IS ";U*.000000001;" IN UNITS" 00940 GOSUB 180:PRINT :GOTO 630 00950 PRINT "THIS PROGRAM WILL CALCULATE SECONDARY VOLTAGE" 00960 INPUT "PRIMARY VOLTAGE ? ";P 00970 INPUT "SECONDARY TURNS ? ";S 00980 INPUT "PRIMARY TURNS ? ";P1 00990 PRINT "THE SECONDARY VOLTAGE IS ";P*(S/P1) 01000 GOSUB 180:PRINT :GOTO 960 01010 PRINT "THIS PROGRAM WILL CALCULATE DECIBEL RATIO OF TWO POWERS" 01020 INPUT "ENTER POWER ONE ? ";P1:INPUT "ENTER POWER TWO ? ";P2 01030 PRINT "THE DECIBEL VALUE IS ";10*(LOG(P1/P2)/LOG(10));" DB" 01040 GOSUB 180:PRINT :GOTO 1020 01050 PRINT "THIS PROGRAM WILL CALCULATE CONDUCTANCE IN MHOS" 01060 INPUT "WHAT IS THE RESISTANCE ? ";R 01070 IF R<=0GOTO 1060 01080 PRINT "THE CONDUCTANCE IS ";1/R;" MHOS" 01090 GOSUB 180:PRINT :GOTO 1060 01100 PRINT "THIS PROGRAM WILL CALCULATE FREQUENCY TO TIME" 01110 INPUT "IS FREQUENCY IN HZ (1) OR KHZ (2) ? ";M 01120 IF M=1GOTO 1150 01130 IF M=2GOTO 1170 01140 GOTO 1110 01150 INPUT "FREQUENCY IN HZ ? ";F 01160 PRINT "THE FREQUENCY IS EQUAL TO ";1/F;" SECONDS":GOTO 1190 01170 INPUT "FREQUENCY IN KHZ ? ";F 01180 PRINT "THE FREQUENCY IS EQUAL TO ";1/(F/1000);" MICROSECONDS" 01190 GOSUB 180:PRINT :GOTO 1110 01200 PRINT "THIS PROGRAM WILL CALCULATE RESONANT FREQUENCY" 01210 INPUT "INDUCTANCE IN HENRYS ? ";L 01220 INPUT "CAPACITANCE IN FARADS ? ";C 01230 P=2*(4*ATN(1)):P=P*(SQR(L*C)):P=1/P 01240 PRINT "THE RESONANT FREQUENCY IS ";P;" HZ" 01250 A=P/1"000:B=A/1000:C=B/1000 01260 PRINT "IN KHZ";A;" IN MHZ";B;" IN GEGA HZ";C 01270 GOSUB 180:PRINT :GOTO 1210 01280 PRINT "THIS PROGRAM WILL CALCULATE FIELD STRENGTH" 01290 PRINT "AT MODERATE DISTANCES FROM THE TRANSMITTING ANTENNA" 01300 INPUT "WHAT IS THE EFFECTIVE ANTENNA HEIGHT IN METERS ? ";B 01310 INPUT "WHAT IS THE ANTENNA CURRENT IN AMPERES ? ";I 01320 INPUT "WHAT IS THE OPERATING WAVELENGTH IN METERS ? ";W 01330 INPUT "WHAT IS THE DISTANCE FROM ANTENNA IN METERS ? ";R 01340 E=(188*B*I)/(W*R) 01350 PRINT "THE FIELD STRENGTH IS ";E;" MILLIVOLTS PER METER" 01360 GOSUB 180:PRINT :GOTO 1300 01370 PRINT "THIS PROGRAM WILL CALCULATE THE PEAK" 01380 PRINT "POWER OF A RADAR PULSE" 01390 INPUT "WHAT IS THE PULSE WIDTH IN MICROSECONDS ? ";W 01400 INPUT "WHAT IS THE PULSE REPETION RATE ? ";R 01410 INPUT "WHAT IS THE AVERAGE POWER IN WATTS ? ";P 01420 D1=1/R:W1=W/1000000 01430 D1=W1/D1 01440 P1=P/D1:REM PEAK POWER 01450 PRINT "THE PEAK POWER IS ";P1;" WATTS" 01460 PRINT "THE DUTY CYCLE IS ";D1 01470 GOSUB 180:PRINT :GOTO 1370 01480 PRINT "THIS PROGRAM WILL CALCULATE SERIES CAPACITORS" 01490 INPUT "HOW MANY CAPACITORS ? ";C 01500 T=0:IF C>18GOTO 1490 01510 IF C<2GOTO 1490 01520 FOR X=1TO C:PRINT "CAPACITOR VALUE ";X;" IN FARADS"; 01530 INPUT " ? ";C1(X):IF X=C GOTO 1550 01540 NEXT X 01550 FOR X=1TO C:T=T+(1/C1(X)):IF X=C GOTO 1570 01560 NEXT X 01570 PRINT "TOTAL CAPACITANCE IS ";1/T;" FARADS" 01580 GOSUB 180:PRINT :GOTO 1490 01590 PRINT "THIS PROGRAM WILL CALCULATE INDUCTIVE AND CAPACITIVE "; 01600 PRINT "REACTANCE" 01610 INPUT "SOLVE FOR INDUCTIVE (1) OR CAPACITIVE (2) REACTANCE ? ";R 01620 IF R=2GOTO 1680 01630 PRINT "SOLVE FOR INDUCTIVE REACTANCE" 01640 INPUT "FREQUENCY IN HERTZ ? ";F 01650 INPUT "INDUCTANCE IN HENRYS ? ";L 01660 P=2*(4*ATN(1)) 01670 PRINT "THE INDUCTIVE REACTANCE IS ";P*(F*L);" OHMS":GOTO 1720 01680 PRINT "SOLVE FOR CAPACITIVE REACTANCE" 01690 INPUT "FREQUENCY IN HERTZ ? ";F 01700 INPUT "CAPACITANCE IN FARADS ? ";C 01710 PRINT "THE CAPACITIVE REACTANCE IS ";1/(3.1416*(F*C));" OHMS" 01720 GOSUB 180:PRINT :GOTO 1610 01730 PRINT "THIS PROGRAM WILL CALCULATE SERIES OR PARALLEL IMPEDANCE" 01740 INPUT "SERIES (1) OR PARALLEL (2) CIRCUIT ? ";Q 01750 IF Q=2GOTO 1860 01760 INPUT "RESISTANCE VALUE IN OHMS ? ";R 01770 INPUT "CAPACITANCE VALUE IN FARADS ? ";C 01780 INPUT "INDUCTANCE VALUE IN HENRYS ? ";L 01790 IF C=L THEN Z=R:GOTO 1840 01800 IF L>C GOTO 1820 01810 IF C>L GOTO 1830 01820 Z=L-C:Z=Z*Z:Z=Z+(R*R):Z=SQR(Z):GOTO 1840 01830 Z=C-L:Z=Z*Z:Z=Z+(R*R):Z=SQR(Z) 01840 PRINT "THE IMPEDANCE IS ";Z;" OHMS" 01850 GOTO 1940 01860 INPUT "RESISTANCE VALUE IN OHMS ? ";R 01870 INPUT "CAPACITANCE VALUE IN FARADS ? ";C 01880 INPUT "INDUCTANCE VALUE IN HENRYS ? ";L 01890 A=12/R:B=12/C:C=12/L 01900 IF B>C THEN X=B-C 01910 IF C>B THEN X=C-B 01920 T=A*A:X=X*X 01930 PRINT "THE IMPEDANCE IS ";12/(SQR(T+X));" OHMS" 01940 GOSUB 180:PRINT :GOTO 1740 01950 PRINT "THIS PROGRAM WILL CALCULATE ANTENNA LENGTH" 01960 INPUT "FREQUENCY IN MHZ ? ";F 01970 A=468/F:PRINT "THE HALF WAVE ANTENNA LENGTH IS ";A;" FEET"; 01980 PRINT " OR ";:PRINT A*12;:PRINT " INCHES" 01990 PRINT "OPERATION WILL BE IN THE ";300/F;" METER BAND" 02000 GOSUB 180:PRINT :GOTO 1960 02010 PRINT "THIS PROGRAM WILL CALCULATE OHMS LAW" 02020 LINE INPUT "SOLVE FOR WHAT UNIT (E),(I), OR (R) ? ";U$ 02030 IF U$="E"GOTO 2070 02040 IF U$="I"GOTO 2100 02050 IF U$="R"GOTO 2130 02060 GOTO 2020 02070 INPUT "CURRENT VALUE ? ";I 02080 INPUT "RESISTANCE VALUE ? ";R 02090 A=I*R:PRINT "THE VOLTAGE IS ";A:GOTO 2160 02100 INPUT "VOLTAGE VALUE ? ";E 02110 INPUT "RESISTANCE VALUE ? ";R 02120 A=E/R:PRINT "THE CURRENT IS ";A:GOTO 2160 02130 INPUT "VOLTAGE VALUE ? ";E 02140 INPUT "CURRENT VALUE ? ";I 02150 A=E/I:PRINT "THE RESISTANCE IS ";A 02160 GOSUB 180:PRINT :GOTO 2020 02170 PRINT "THIS PROGRAM WILL CALCULATE FOR POWER" 02180 INPUT "WHAT TWO UNITS (1)I&R, (2)E&R, (3)E&I ? ";U 02190 IF U=1GOTO 2230 02200 IF U=2GOTO 2250 02210 IF U=3GOTO 2270 02220 GOTO 2180 02230 INPUT "VALUE OF I,R ? ";A,B 02240 PRINT "POWER EQUALS ";B*(A*A);" WATTS":GOTO 2290 02250 INPUT "VALUE OF E,R ? ";A,B 02260 PRINT "POWER EQUALS ";B/(A*A);" WATTS":GOTO 2290 02270 INPUT "VALUE OF E,I ? ";A,B 02280 PRINT "POWER EQUALS ";A*B;" WATTS" 02290 GOSUB 180:PRINT :GOTO 2180 02300 PRINT "THIS PROGRAM WILL CALCULATE THE RESISTOR COLOR CODE" 02310 LINE INPUT "FIRST COLOR ? ";C1$ 02320 RESTORE :A=0:FOR X=1TO 12 02330 READ Q$:IF Q$=C1$THEN A=A:GOTO 2360 02340 IF Q$="777"GOTO 2310 02350 A=A+10:NEXT X 02360 LINE INPUT "SECOND COLOR ? ";C2$ 02370 RESTORE :B=0:FOR X=1TO 12 02380 READ R$:IF R$=C2$THEN B=B:GOTO 2410 02390 IF R$="777"GOTO 2360 02400 B=B+1:NEXT X 02410 LINE INPUT "THIRD COLOR ? ";C3$ 02420 IF C3$="GOLD"THEN C=.1:GOTO 2480 02430 IF C3$="SILVER"THEN C=.01:GOTO 2480 02440 RESTORE :C=1:FOR X=1TO 12 02450 READ S$:IF S$=C3$THEN C=C:GOTO 2480 02460 IF S$="777"GOTO 2410 02470 C=C*10:NEXT X 02480 K=C*(A+B):PRINT "THE RESISTANCE IS ";K;" OHMS" 02490 S=K 02500 K=K/1000:PRINT "OR ";K;" KILO OHMS" 02510 K=K/1000:PRINT "OR ";K#;" MEGA OHMS" 02520 K=K/1000:PRINT "OR ";K;" GIGA OHMS" 02530 PRINT "ENTRIES FOR NEXT QUESTION (NONE, SILVER, OR GOLD)" 02540 LINE INPUT "FOURTH COLOR ? ";C4$ 02550 IF C4$="NONE"GOTO 2580 02560 IF C4$="SILVER"GOTO 2590 02570 IF C4$="GOLD"GOTO 2600 02580 M=.20*S:GOTO 2620 02590 M=.10*S:GOTO 2620 02600 M=.05*S:GOTO 2620 02610 GOSUB 180:PRINT :GOTO 2310 02620 PRINT "THE RESISTOR TOLERANCE IS ";M 02630 PRINT "THE TOLERANCE RANGE IS ";S-M;" TO ";S+M;" OHMS":GOTO 2610 02640 PRINT "THIS PROGRAM WILL CALCULATE THE CHARACTERISTIC" 02650 PRINT "IMPEDANCE OF TRANSMISSION LINES" 02660 LINE INPUT "IS TRANSMISSION LINE TWO WIRE PARALLEL ? ";X$ 02670 IF X$="YES"GOTO 2710 02680 LINE INPUT "IS TRANSMISSION LINE A COAXIAL LINE ? ";X$ 02690 IF X$="YES"GOTO 2770 02700 PRINT :PRINT "TYPE 'YES' FOR ONE OF THE QUESTIONS":GOTO 2660 02710 PRINT :PRINT "PARALLEL TRANSMISSION LINE" 02720 INPUT "WHAT IS THE SPACING BETWEEN CONDUCTORS IN INCHES ? ";A 02730 INPUT "WHAT IS THE RADIUS OF ONE CONDUCTOR IN INCHES ? ";B 02740 Z=276*(LOG(A/B)) 02750 PRINT :PRINT "THE IMPEDANCE IS ";Z;" OHMS" 02760 GOSUB 180:PRINT :GOTO 2660 02770 PRINT :PRINT "COAXIAL TRANSMISSION LINE" 02780 PRINT "WHAT IS THE INNER DIAMETER OF THE OUTER CONDUCTOR" 02790 INPUT "IN INCHES ? ";A 02800 PRINT "WHAT IS THE OUTER DIAMETER OF THE INNER CONDUCTOR" 02810 INPUT "IN INCHES ? ";B 02820 Z=138*(LOG(A/B)):Z=Z*.675 02830 PRINT :PRINT "THE IMPEDANCE IS ";Z;" OHMS" 02840 GOSUB 180:PRINT :GOTO 2660 ALCULATE THE CHARACTERISTIC" 02650 PRINT "IMPEDANCE OF TRANSMISSION LINES" 02660 LINE INPUT "IS TRANSMISSION LINE TWO WIRE PARALLEL ? ";X$ 02670 IF X$="YES"GOTO 2710 02680 LINE INPUT "IS TRANSMISSION LINE A COAXIAL LINE ? ";X$ 02690 IF X$="YES"GOTO 2770 02700 PRINT :PRINT "TYPE 'YES' FOR ONE OF THE QUESTIONS":GOTO 2660 02710 PRINT :PRINT "PARALLEL TRANSMISSION LINE" 02720 INPUT "WHAT IS THE SPACING BETWEEN CONDUCTORS IN INCHES ? ";A 02730 INPUT "WHAT IS THE RADIUS OF ONE CONDUCTOR IN INCHES ? ";B KZ3ENVBUZZ 0.020 (C) 1988 Skunk Creek Computing Services.͋ W sC:.g!"?2>!~(,!]>/ # ;?"?!m~( (>2>!@ "E?! M! [! @ C *?+"?| :>(! ͏! ͏! ͏{C;_Oy_fn[E~# SE_! i{_! i{_! i{~?ݾ( 8 {<_44F~#͢F;ͨ 8 y >00Arduous Balanced Compatible Comprehensive Creditable Exemplary Functional Integrated Parallel Refined Responsive Sequential Stoical Synchronized Systematized Translucent Digital Diplomatic Flourishing Incremental Logic Management Monitored Official Organizational Policy Positional Reciprocal Third-generation Transitional Visionary Vocational Apex. Capability. Certitude. Concept. Contingency. Curtailment. Exulpation. Flexibility. Hardware. Invariance. Mobility. Options. Perspicuity. Programming. Projection. Timephase. BUZZ 1.1 MAKE BUZZSPEAK PHRASES FOR ALL OCCAISIONS CALLS - BUZZ SUCCESSIVE CALLS GIVE NEW PHRASES BUZZ // SHOW HELP BUZZ NNN RUN BUZZ NNN TIMES BUZZ NNN XXX XXX = ANYTHING, ALSO SHOW STATISTICS DERIVED FROM - GENE AMOLE'S CORNER ROCKY MOUNTAIN NEWS AUGUST 19, 1982 E. STILTNER. (C) 1988 1234 12 , 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12 U*bH"5@nvh"9uBO\.2 7:  02 77:  02 ͸8(( O. 2 7O. 2͸8O. 2 7: (G2 x0( 0(  7: .27?.2Operator Abort. CONSOLSCCS (C) 1987[&կO2X $(.(* (O 08:8A8G0:X <2X A O OO G!:X (^ yH(Q(/xB(<O D =: O H(.X(*2s Y 7) O O(Q(= O B :X !0 ))) O !O 0 8))))O !0)))O !0)O a{_KNumber conversion error, NUMBIN SCCS (C) 1987><  7cZ80 computer required for this program. $TSTZ80SCCS (C) 198702 77:  02 ͸8(( O. 2 7O. 2͸8O. 2 7: (G2 x0( 0(  7: .27?.2Operator Abort. CONSOLSCCS (C) 1987[&կO2X $(.(* (O 08:8A8G0:X <2X A O OO G!:X (^ yH(Q(/xB(<O D =: O H(.X(*2s Y 7) O O(Q(= O B :X !0 )$ Program BUZZ BUZZ makes buzzword phrases for any and every occaision. BUZZ comes up with a new and "perfect" phrase when you are writing that Very Important Document and draw a total writers' blank. Or when you need to impress the audience with a Very Important Description that everybody but nobody understands. Features: Runs on Z80-based microcomputers with the CP/M or ZRDOS operating systems. A quick help display explaining all call options is available. Call syntax: BUZZ Show a new buzz phrase. BUZZ nn Show nn buzz phrases. BUZZ / Show version number. BUZZ // Show this help display. The number of buzz phrases can be specified as: Decimal - nn or nnD Hexadecimal - nnH Octal - nnQ Binary - nnB Every effort has been made to ensure the accuracy of this program. Please report any problems to: Skunk Creek Computing Services 1985 Kohler Drive Boulder, CO 80303 Trademarks: CP/M: Digital Research, Inc. Z80: Zilog Inc. ZRDOS: Echelon Inc.  Trademarks: CP/M: Digital Research, Incl options is available. Call syntax: BUZZ Show a new buzz phrase. BUZZ nn Show nn buzz phrases. BUZZ / Show version number. BUZZ // Show this help display. The Problem Report If you have difficulties with this program, send the following to: Skunk Creek Computing Services 1985 Kohler Drive Boulder, Colorado USA-80303-5240 Program Version: _________________________________ Program Serial Number: ___________________________ Operating System: ________________________________ Operating System Version: ________________________ Hardware Configuration: __________________________ Program error: Documentation error: Include examples to fully document the problem. Suggestions for improvement: From: NAME _________________________________________ ADDR _________________________________________ CITY, STATE __________________________________ COUNTRY, ZIP _________________________________  TELEPHONE ____________________________________ Include a self-addressed and postage-paid envelope if you wish a reply. Skunk Creek Computing Services is not responsible for unsolicited media. Full program updates are available: $10.00 postpaid. 10 April 1988 t responsible for unsolicited media. Full program updates are ava System: ________________________________ Operating System Version: ________________________ Hardware Configuration: __________________________ Program error: Documentation error: Include examples to fully document the problem. Suggestions for improvement: From: NAME _________________________________________ ADDR _________________________________________ CITY, STATE __________________________________ COUNTRY, ZIP _________________________________  This library contains the following files: CRC .CRC CRC of all files BUZZ .COM Program BUZZ .DOC Documentation in print format PROBLEM .RPT Problem Report READ .ME This file Skunk Creek Computing Services will not in any manner be liable for direct, indirect, incidental or consequential damages caused by use or misuse of this program. It is the user's full responsibility to determine the fitness of this program for every application. Skunk Creek Computing Services specifically disclaims any implied warranties. This program is distributed on a "Shareware" basis. Evaluate with your system; if it is useful, please send $5.00 to: Skunk Creek Computing Services 1985 Kohler Drive Boulder, Colorado 80303 No matter whether this program is useful to you or not, feel free to copy and share it with your friends or the members of your computer club and other non-profit organizations. But please% do observe the following conditions: 1) That the contents of the BUZZ library not be altered in any manner. 2) That there be no fee charged for the BUZZ library or any of its components; except for reasonable media copying costs. Thank you, Skunk Creek Computing Services of its components; except for reasonable media copying costs. Thae of this program. It is the user's full responsibility to determine the fitness of this program for every application. Skunk Creek Computing Services specifically disclaims any implied warranties. This program is distributed on a "Shareware" basis. Evaluate with your system; if it is useful, please send $5.00 to: Skunk Creek Computing Services 1985 Kohler Drive Boulder, Colorado 80303 No matter whether this program is useful to you or not, feel free to copy and share it with your friends or the members of your computer club and other non-profit organizations. But please Fog Library Disk FOG-CPM.210 Copyright (1989) by Fog International Computer Users Group to the extent not copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distribution for profit or personal gain is strictly forbidden. For information, contact FOG, P. O. Box 3474, Daly City, CA. 94015-0474. as part of the description of a file indicates that the program is distributed on a "try first, pay if you like it" basis. If you find the program(s) meet your need, please refer to the author's documentation for information on becoming a registered user. Only by registering and paying for the programs you like and use will the authors of such programs continue development. Often, more complete documentation, additional modules, and new releases are available only to registered users. A new text editor, a buzzword creator, a grid maker and a to for radio hams are all on this disk. Filename Description -07-15 .89 This is the release date of the disk. -CPM210 .DOC This is the description of the disk contents. ZDE10 .COM 54DE 16K ver. 1.0 [Z-Sys Display Edit 1 of 10] Based on the well-liked VDE program but includes many new features to work with NZ-COM and Z3PLUS as well as with CP/M 2.2 and CPM+. It supports named directories, register variables, automatic disk relogging and file datestamping. ZDE10 .DOC F6DD 48K ver. 1.0 [Z-Sys Display Edit 2 of 10] ZDE10 .FOR 31CE 1K ver. 1.0 [Z-Sys Display Edit 3 of 10] ZDE10 .NEW AA3D 15K ver. 1.0 [Z-Sys Display Edit 4 of 10] ZDE10 .QRF 511D 3K ver. 1.0 [Z-Sys Display Edit 5 of 10] ZDE10 .TOC 6085 4K ver. 1.0 [Z-Sys Display Edit 6 of 10] ZDENSTAL.COM 8FCA 10K ver. 1.0 [Z-Sys Display Edit 7 of 10] ZDENSTAL.DOC 1AEF 22K ver. 1.0 [Z-Sys Display Edit 8 of 10] ZDKCOM12.COM 6ADD 2K ver. 1.0 [Z-Sys Display Edit 9 of 10] ZDKCOM12.DOC 48E4  10K ver. 1.0 [Z-Sys Display Edit 10 of 10] GRID .BAS 0C29 6K [Grid Drawing 1 of 2] Draws a grid on your printer using the criteria you furnish. GRID .DOC 80D4 9K [Grid Drawing 2 of 2] HAMCALC .BAS 6410 12K Computes various electronic formulas. BUZZ .COM 78CD 3K [Buzzwords 1 of 4] Creates buzzword phrases for any occasion. BUZZ .DOC 44E1 2K [Buzzwords 2 of 4] PROBLEM .RPT 536A 2K [Buzzwords 3 of 4] READ .ME 97CF 2K [Buzzwords 4 of 4] raws a grid on your printer using the criteria you furnish. GRID .DOC 80D4 9K [Grid Drawing 2 of 2] HAMCALC .BAS 6410 12K Computes various electronic formulas. BUZZ .COM 78CD 3K [Buzzwords 1 of 4] Creates buzzword phrases for any occasion. BUZZ .DOC 44E1 2K [Buzzwords 2 of 4] PROBLEM .RPT 53&'