TD8K=f:Altos 580 T. Pascal and MultiplanDSQD (80track 5.25") 4    INSTALL COM3INSTALL DATM INSTALL LD n INSTALL MSG]INSTALL SPC4MP CODX !MP COM"#$%&1MP HLPN'()*+,-./01MP40 223MP80 245LISTER PAS,67READ ME 589TINST COMG:;<=>?@TINST DTA#ABTINST MSGCTURBO COMpDEFGHIJK,yTURBO MSG LTURBO OVR MCMDLIN PASNMC HLP%OPMC PAS3QRMC-MOD00INCSMC-MOD01INCTMC-MOD02INCUMC-MOD03INC$VWMC-MOD04INCFXYZMC-MOD05INCX[\]MCDEMO MCS]^_`TEST1 aEPSON VDPbGKX COMcGKX DOCJdef]{GKXS COMgZDE COM}hijkZDENSTALCOMIlmnZDKCOM COMoVDKCOM COMpVDKCOM DOCSqrsVINST266DOCMtuvwxyzWS GKX {VDE COMy|}~VDE266 QRFVDE266 UPDZDE02 DOCVINST COMOBENZ VDT COM ZDE   *3" !-4>HNNNNNNN[aaaaaaamm|uuu &&&288888IOOO[m|kqq]cc:@@@+11W]lu~_Vd  -      acS!~#"o&^$V*N#"*N#<F#"O* N#FæO* æ##O*  ^#V^#Væ5!5O*  ^#Væ*æ*^#Væ*^æ͸QAO ^#Væ͸dIO ^æSxTOææ"^#VæaÛaO* s#r[qòqO*  ^#Vs#ræ"æ*s#ræ*sæs#ræsæs#ræ~O* &P "æ͸͸|g}æ͸)ֆO|æ͸;֐O|g}æ͸R֖O|æ͸æ͸æ͸=æ͸=æC ڮʮæ"W*~#2U~#2V"#:V?o&"[:Uo"Y*WC *[*WC *Y*WY *N #"æ*[*#"J*^#V#"*WC J:U_:V?W*"æ:V@ʺæ͸fֲOv͸t֥O* x/Gy/O ++#~2G+~2**Y *+++r+s*"xw+xw+r+s!w*_^#Vz*"!6!"*6*##^#V"^#V^#Vr+s2 #  : #~+:9~ͪAkk<##p.R #p! w!w!!w#w#w~ͪ ʕ!.ʖ*ʚ?“>2 #p>2 >?¡Öa_!"  |-æ JF _Fæ^ MæxWxG|^z@ʖ~# x‡zzz{zz ʺs#ý#^ xê {a{ _xʦ >$! s +" !N* ^#V*^#~W#"*"!9{PO*+F+~x C1æ*~2++V+^"~!ʤw*_^#Vz˜!"!1Ä"^#V+" *"*"^#V*"!:++æ͸yO xI yO r+sæ͸4O æ͸CֽO* ^#V"r+sæ+ææ)æY æ æ æ æyI æ)æA æ` æ͏ "ææææz/W{/_æz/W{/_æ{æ͸*"" x/w $y >S))ҁ =y |x怴gD|OzGKzW!>))}o|gҶ =£ | x怴gzy怲WȯzW{_ |g}o|g}o|g}o r  r b1x 8 r > ir r  r  r ͸y2 yO! ^#V|¨    error -- undefined system call $!: ʶ ++æ) ê xC / $ ú ": _!Ä*s#r#*:A2o *z)""!""|*#*|C pJ!~KK *~*|#"|) s#r*"*"#**Y "*"v**zY "##"*"C   error - load address too low $""*""*v*)*Y """ *r)*Y ""*6++"**t)"$&*s#r#*s#r#####*++":ʣ*#)"J!~{K *~*s#r#"*s#r#*~)"!5a*s#r*t*G*C   intersecting segments- unable to load program $@D|gs#r#6#xwæ~!K w*_^#Vz? !"!Ä"^#V+" "*"*"1yʦæ}   illegal system instruction encountered $x‚ ~ ͪAڂ҂_#~:‚#~‚ ì ‚~ʬ#^ ~#^ @_, _ x ^#,   ,  , ìͳ#s#r~O !o ‚: ‚Ͱ<ʚ*6*æX:MP.CODͳ#s#r ‚: ‚Ͱ<ʧ ! ~ڠ<ʦ*6*æ҂*6ͼ<ʠì* ‚<ʚì" yO 2\~  Y "!>Px/ ^#V#^#V*r+s*+%F/ #  #&)48>DHMVZaRehkor}  "&*5;?D   "$*&*$s#r#*(s#r**t)s#r#*s#rJ!"* " 3K **DM*""*)""x| *"*s#r#"*"""OK ***zY }*ʝ6#6#=“*|­*"ù**)^#Vs#r#*)s#r>2!"**!Ä*N#F#"Jx M #~+: ~ͪAҘ <2\##~M #*. ]͞ ~#@ .˜ ~#*H e͞ ~˜ \ _* :\s @w#6:# 6.# !] ~?ʔ # † k * k +~.ʻ ʻ _° >?ͪ# Ÿ >  ½ !]6?!^ w# ҂! s#rì!"<҂*5!x5}*<#"<~, *<æ҂yOxʬ!w kk,o6o,W* O!ï!ï!ï!ï!ï!ï!ï!æ!  ~û">2y!  "~#fo"7*! EVx %w#!%:G9!"H>=2G*H~#"HINSTALL LD (xU66h6FCTTABd$ĸFNEXTdDdX`MOVBATd$Hɘ MPSNQDSch-OPENF8H PDD5H Q(x-Rd error - no load file present $ error - loader file format error $ error - invalid load file $9 ͫ#1fZ8P!Xerox 820-II Z9PTRS-80 Model IIM3(Apple II, IIe 40 columnM7PApple II, IIe 80 columnM9PApple II, IIe w/o reverse videoZ6P Apple IIIKPP Kaypro IIM2PXerox 820 or 820-IIM8P Xerox 860V4PVector Graphic Vector 4t8PTelevidio TS-802HMP Harris MFTNAPNorthStar AdvantagekbP Zenith h19 ZAP Zenith Z-29laPADM - 3aZ1PADM - 5Z2PADM - 21l1P ADM - 31/32l4PADM - 42d1P DEC VT-100 ZFPDEC VT-100 without graphicsdvP DEC VT-52 kAP  @ANSI terminala1P ADDS regent M6PBeehive DM1/5/10/20/30 DEDatavue 132/c MSP Soroc IQ-120 M1P Soroc IQ-150 Z4P Televideo 910Z5PTelevideo 910+v1PTelevideo 912/920Z7P Televideo 925v5P Televideo 950H5PHazeltine 1500CANCEL UP DIR KEYHOMEEND RIGHT DIR KEY LEFT DIR KEY DOWN DIR KEY BACKSPACEDELETEHELP RETURN TAB CHAR LEFT CHAR RIGHT WORD LEFT WORD RIGHT NEXT WINDOWPAGE UP PAGE DOWN PAGE LEFT PAGE RIGHT NEXT ULCELL REFERENCERECALC UP SCROLL DOWN SCROLL LEFT SCROLL RIGHT SCROLL BACKTABESCAPE( LINE DELETE* LINE FEED+ PLUS SIGN, FORWARD SPACE- MINUS SIGN. DECIMAL POINT1 FUNCTION 12 FUNCTION 23 FUNCTION 34 FUNCTION 45 FUNCTION 56 FUNCTION 67 FUNCTION 78 FUNCTION 89 FUNCTION 9: FUNCTION 10@ NUMERAL 0A NUMERAL 1B NUMERAL 2C NUMERAL 3D NUMERAL 4E NUMERAL 5F NUMERAL 6G NUMERAL 7H NUMERAL 8I NUMERAL 9 vertical barupper right cornerlower right cornerlower left cornerupper left cornertop  9half of a +bottom half of a +horizontal bar    ( 1 : ? D I N S X q     # ( - 6 ? L U f o x } +4=BGLQV[t  9RW\ans|!&38AFKX]bglqv{ ).3<ER[lu~  1:CHMRW\az !&?X]bgty  #4=FKPUZ_d} $)B[`ejw| %*/<AJS\ir!.7HQZ_dinsx $).38=Voty~49>CPU^gp}#,5BK\ensx}!*38=BGLQj /HMRWdir{GS8rBY84B[8C]8J8M8bD_8Da8@DDEEKGd8f8h8j8l8Lo8r8u8x8|8~?DD6?'c?D~8lE8G8rB8[4B8C888bD8D8@DDEEKG88888L88888~?DD6?.(c?D8bbVW4WccWEbDccdKcd~?DD6?(c?WlE~ ).7@IV_py$5>GLQV[`e~  %*C\afkx} ! & + 0 = B K T ] j s !!!!"!/!8!I!R![!`!e!j!o!t!y!!!!!!!!!!!!!"" "%"*"/"4"9">"W"p"u"z"""""""""""""""""##5#:#?#D#Q#V#_#h#q#~##############$ $$$$$-$6$C$L$]$f$o$t$y$~$$$$$$$$$$$$$$%%"%+%4%9%>%C%H%M%R%k%%%%%%%lEY5Gfe8G8rB84B8C888bD8D8@DDEEKG88888K9999 9~?DD6?E)c?D 9lE9G9rB 9z4B$9C(999bD29D79@DDEEKG;9=9?9D9I9KL9P9T9V9X9~?DD6?)c?DZ9lEd9Gh9rBp94Bt9Cx9^9a9bD9D9@DDEEKG999 rB54B5C5S5V5bD5D5@DDEEKG616L6g66Pf f66f~?DD6?ec?D$7VUWVW<4WTATW5SDDTUKV`T~?TT6?%c?WlEE7GH7rBO74BQ7o^S7?7B7w`U7DW7@DDEEKGY7[7]7_7a7Kd7g7j7l7n7~?DD6?%c?Dp7lEx7G99K99999~?DD6?*c?D9lE9G9rB94B9C999bD9D9@DDEEKG99999L99999~?DD6?X+c?D9lE9G9rB94B9C999bD9D:@DDEEKG:: : : :L:::: :~?DD6?+c?D":lE,:G2:rB::4B<:C{7rB74B7o^7r7u7w`7D7@DDEEKG77777K77777~?DD6?E&c?D7lE7G7rB74B7o^777bD7D7@DDEEKG77777L77777~?DD6?&c?D7lE7G7rB74B7C777bD7D7@DDEEKG77777 %>:&:):bD@:DB:@DDEEKGF:H:J:L:N:LQ:V:[:`:e:~?DD6?+c?Dg:lEq:Gu:rB}:4B:C:k:n:bD:D:@DDEEKG:::::L:::::~?DD6?X,c?D:lE:G:rB:4B:C:::bD:D:@DDEEKG:::::L:::::~?nK888 8 8~?DD6?&c?D8\ ^VW4W`Xd^WD[[\KV`~?Zr[6?'c?Y^\ ^VW4WXXd^WD[[\K]X~?Zr[6?o'c?Y^lE8G8rB#84B%8C'888bD)8D+8@DDEEKG.808284868L98<8?8B8E8~?DD6?'c?DG8lEP8 8DD6?,c?D:lE:G:rB;4B;C ;::bD;D;@DDEEKG;; ;";$;K';-;3;9;?;~?DD6?-c?DA;lEN;GT;rB];4B_;Ca;H;K;bDj;Dn;@DDEEKGu;w;y;{;};K;;;;;~?DD6?-c?D;lE;G;rB;4B;C;;;bD;D;@DYDD6?F2c?D>lE>G>rB>45B>C>>>bD>D>@DDEEKG>>>>>L>>>>>~?DD6? 3c?D>lE>G?rB?4B ?C ?>>bD?D?@DDEEKG?????L"?%?(?+?.?~?DD6?3c?D0?F FDEEKG;;;;;L;;;;;~?DD6?.c?D;lE;G;rB;4B;C;;;bD;D;@DDEEKG< <<< <K#<)</<1<3<~?DD6?t.c?D5<lE@<GC<rBK<4BM<CO<:<=<bDQ<DS<@DDEEKGU<W<Y<[<]<L`<e<j<m<p<~?DD6?*/c?Dr<lE   F   F   F       P       AA7z<G~<rB<4B<C<t<w<bD<D<@DDEEKG<<<<<fO<<<<<~?DD6?1/c?D<lE<G<rB<5B<C<<<bD<D<@DDEEKG<<<<<K<<<==~?DD6?/c?D=lE =G=rB=4B=C== =bD=D =@DDEEKG$=&=(=    !@JABCDE     U       X  }   \+ CADBVSj*=,=L/=2=5=8=;=~?DD6?0c?D==lEG=GK=rBS=4BU=CW=A=D=bDY=D[=@DDEEKG_=a=c=l=u=Lx={=~===~?DD6?0c?D=lE=G=rB=4B=C===bD=D=@DDEEKG=====L=====~?DD6?P1c?D=lE=G=rB=4B=C *UTJHWQ@ N LMRP\#+CADB CADBVSUTJHW~@ N LMRP\#+CADBP       P       Z :===bD=D=@DDEEKG=====L==>> >~?DD6?1c?D>lE>G>rB#>4B%>C'>>>bD)>D+>@DDEEKG/>1>3>5>7>L:>>>B>F>J>~?DD6?1c?DL>lET>GX>rB`>4Bb>Cd>N>Q>bDh>Dm>@DDEEKGq>u>y>~>>L>>>>>~? m      W  _      W  Z       W  [O CADBP Q RS[CADB}[O CADBP Q RS[!?19M8!?M8!?21M8Bb!?1V4Qb!?2V4`b! ?3V4ob!?4V4~! ?5V4b!1?6b!:?7V4b!C]V4b!H?9V4b![?10V4b!R?11V4b#!W?12V4b!\?1# c!a?14PV4c!z?15V4)c!?16V49cJ?17V4Ic!?18(   P   P   "][##PTCADBU CADB CADB[CADBH4P LMh \+[CADB_ CADBHPCADBY    \  +#YP= #][##P][## P+= $%1.1T><.2.0G0G4G4G0YP= PEY FGy7x6vy6Ky5x5qpJPEY FGy7x6vy6Ky5x5qpJP= -][##P= =N'L)K+M-O/B1G3A5C7@9D;E=F?HAIC       P       K       Z       K T-GGGGYP+<= T/G0G4G4G0YP*= T)G0G4YP;= ZT~2~1G0G4YP(0(B<[?7hcQ2P<[?7hc$PHJY FGK@][##JP [?7hN          "@JABCD   W     !@JABCDE     P~   K[>2l[>2h[>5l[>5hP Y  90@0P##PEF RSK`d@dPeJ+=; $% !22 0 +{!4 1 ()P*= T'][##YP*= @T.2601.2600][##YP= T,G0G4G4G0P= T.2.0G0E!++++++-jghefonk`cdefusa`cdefusaxkjmlvwqxkjmlvwqdDLH@\P`yvwtu~}zjghefonkPE!?9M8!= !?11M8?12M8!?13M8!?14M8!5M8!?16M8?17M8!?18M8K #G4G4G0YP= TkjjkP+= 1.1T><.2.0G0G4G4G0YP+= $%1.1T><.2.0G0G4G4G0YP~~~~~][##~  *##" PARMS inflag  !"inflag8 2G ͩXNG*}N:_~44#####"##~2#N#~~ʙXNWY{kʑ^ʖoͩoAC"*:_=ek!V"T"V*w"+^~#9wi(~##ʫ2Z~#"XҜ_:Z=*X}րO![ ^#VͯGxʒ ô*T~ͯ*T^_#"TÒ*T4#4Ò*T~`w#~`wÒͯOͯ^xʒ *TF#Np+qÒͯOͯGy*TNҒywÒ*T~*TwÒͼ0!~P_^# yCXÒ# yʒ~Hͼ0!~Hͼ0!~H*T~GOxwÒͯOͯGy*TNڒywÒ*X~#"X!Z5*T~#"T!dq #q#w :!Fx~# |}}o|NNN_^ xͩʟ½ ¬ &*28AIQYchpszVinflag("')#":9g#"̓****:_:::'>S))/ ='|x怴gD|OzGKzW!>))}o|gd =Q|tx怴gzy怲W #,259<?DM[]_acegikmoqsu &)-037:AFNU\cgjquxm",1`gRGCHSCNPARMS}setsptchroutPKYicolumn(pchScreepchRealCucomp16rgchScreusub16du66=intostwmu66movbaupdateCuV< yseoupdateCuygrflagf40rm1xc2*icolumnDrm5Krm4Pr79Uctrlsoutcharchroutouttrans*}*##"* grflagPARMSintostgrfon*}!"* intostPARMSgrflaggrfoff$7S*##^*##V"\&{P=(*2P=>'2}2M>O2}2}2+"#"*"!"*L~ #-8;@KWei{q(intostusub164GSxmu66^rgch2Q*FL"Ry%*Xx9 *~_&:QF*V*R2Q )7:>ANGpchScree -updateCuJintost#Doutchar4PARMSTbinverseQwh !lq#p*"ny2tx6{6y,**:_}*"n"ra+"n#_:{ "pv+"p :lŽ*n^O*p^O*p*w:m¢*}*n#"*y:m¿*{*r;:l*p*y:m*{;*n#2t#"r +**n:_**p:_{"x *~|ScremPARMSicolumnirowrm1xc1mcolrm1xc2rm5rm4r79f40pchBufctrls*intostPARMS*intostPARMS*intostPARMS readyco5 **:_rgchScrepchScreeusub16du66icolumn readyco!A**z6 #**! rgchScrepchScreeupdateCuintostrm1xc1PARMSHy """ " 2_>V{*#""*4QTWZ^jmqw{~MS )rgchScre8%pchScree<N<Cintostsetatr'0outcharJusub16?,du66H!5updateCuPgrfonZouttrans^pchRealCaegrfoffiPARMSuicolumnDd/binversetJ7 y*"D"Fy**J*D*L*D*R*F*R $+17=pchScreeupdateCu!.:intost'4@PAy"*"Sx6* ͞:_*"*"-:_*"*"xw* **"*"͞n!N#F*"***x ^#{:_* &*039BFIMQ`dgkqt~ucomp16!mu66\pchScreemovbargchScregrfongrfoffoutcharicolumn>Xm|colzpchBufsetspt y ! ^#V*& intostPARMSsetatr=^"* TRMSHbinverseC *~r*~ay2*F\"y5*xI *~_6:V**2!q#p*"y2x—{—yDA**:_}*""I+"#_:{ "+" :*^U*^U#**:**#"*: **"x= *~_**#2#" +\{*#"y*""yœ*******#-09GJNQW^blqw}2-x&>O*0 ~_:-w#""*#~!"):?HOY\`e{$videoinvideoout* pchScreeRr '!readxcoltbad0ltbad03ltbad1ltbad13tforII.C '"!"#!9"A1?*#*!P\#+ TempHL!TempDE#TempSPtrAvideoin$ ""***TempHLTempDE TempSPtrvideoout *}|`o`pchScree *&}op$-;>FKYz~ pchScree=i'1w updateCu&Z BVintost3T!outcharD8setatrrgchScreusub16icolumndu66pchRealCgkgrfon`outtransdgrfoffoPARMSbinverse{< *(*#",w{2z*}{+#~g#F##N:z##\ \O ~yO #8:zG#~#N8#^#k$.>FLRehqxvideoinvideooutpchScree!ucompPchScreereadxco.M>!< |/+s #"!""""videoinpchScreevideooutltbad0"ltbad03%ltbad1(ltbad13+D% """*ͮ"Uxʞ !N#F**ʹ*"*")}gxo*"*"xʞ *"*"!N#F**ʹr*|}xͮ  !,17;>DHKOScgjnu}setsptvideoin$Vvideooutucomp16! y:)+16grflag1 :<2> 2>curtemp > :curtemp#y*~A ˿w#z videoinvideooutpchScree >videoin >videooutN *|gPD|OzGKzW!>))}o|g5 ="|Ex怴gzy怲W 18>pchScreereadyco#> !w"videoinpchScreevideooutD- """*ͮ"Uxʞ !N#F**ʹP*"*")eZ(= tforII"}0gxosetsptpchScree1:7\>͈*3##^*5##V"!\&{PB(/2,PB>'2+}2)R>O2+}2)}2*+"'#"#*"-!"%*1O:2!@~ʯ*R: ! Nwy#·!  Nwy#!@~> 2I@!E:w>2!I.6#6s#6@   [ \::V %(2=@EP\jn v-intostusub169LX}=MP*"*"xʞ *"*"!N#F**ʹr*|}xͮ  !,17;>DHKOScgjnu}setsptvideoin$_videooutmu66\ucomp16 ("&PL}!90) setsptpchScree&mu66*}*##" grflagPARMSgrfon !" grflag grfoff+Ɏ< <*;* mu66crgchScrerPARMS/ctrlsicolumn!irow"rm1xc1#mcol%rm1xc2'rm5)rm4*r79+f40,pchBuf-swaptb >* intost PARMS swaptb>0:&{zŠ2!O "[^6#V6#z==~#] ){*}+]:k#*s#r#w#>[* }P*###s#r#w>]{ʷ>O*ҟ0~©>w#" x>O*0~> w#" x·  #49BISVZ_uyvideoin videooutpc#}P13.$3."?w{2*}{+#~z#F##N:##o oO ~yO #K:G#~#NK#^#~7AQY_ex{$)/videoinvideooutpchScree4ucomp16grflagD >7tforII6>F/.{z2!O "[^6#V6#zCC~#] /{*}+c:q#*s#r#w#>[* }P*###s#r#w>]{ʽ>O*ҥ0~¯>w#" x•>O*0~> w#" x½ { PhScreeLlreadxcoltbad0ltbad03ltbad1ltbad13: *42#"{1{|---+ss|} ")pchScree !"pchScreez&"x=> у_> _PD|OzGKzW!>))}o|gb =O|x怴gzy怲W^emu662hrysetsptpchScreexsetspt-updatCurdu66;Hhry *PpchScreedu66 hry yfay{H!Y *x +y=~WwOx:#yw~W6xQ#~6$7N*AupdatCurpchScreeH """""":/I*:p*+"!+"*P"Ë*!"*+P*+"!+"Ë!"!#":/Lx INSTALL.MSG"#$% 89:;<!Fatal Error       Jw*CCCYCqCCan't open Message FileInvalid Message FileMessage File too largeInvalid Message number   INSTALL.SPC&iacpMax, itermMax are: @-DPARMSRGCHSCNblock ./0123672 L# uvq }jD ND11 PD }E }E }2E }KE }dE }}E }E [cEdEVEeEfEgEhEaFi/F5 [j2HlKHmNHnQHqYHpUHoHr]HqeH paHkiH KF LF x@I  zFOA&H&E&X&P&IDͻͼsea shells bseaIz UcSbIQ&UTc}0Ud g>eV~|UIQDeT>fQ0Q9UTd}$! h ITd| pXbTd| \ݠYbTd|>eT >fQ0Q9 QAQZUTd}|U I&I'UTdZ|30iIh   i Dž R Td} IZbTd6A>bbTIz}Qa QzQ aUaQ2} Uc>c>Sc|T >>c}  VaUcV c}cVUBdAyyc}0Ade& AAA Ayb~yTbU5z&5z5UWT5IU5J&Ub­ % not assigned error in testMP.COx$bQ"(5EH  [Dd %QT"6UQs\Ta5Ib RfQ T#TQ=T"2 <3DPb   tbB"CHB CTIz6TTTT8QT#IT#T"6dSU6uSU'\u'R0V65''UTc6za5I\5Ib'W5:I5:I\d5UcIbJQ :I\b^Q 0Tea5I\5Id5I 0aT}Ts%Kt%LuIQY&zIQN'z&' QRCUR\a&T"0TTTT}aSb}R 0TgTgQ0:z|2TjR RaRj:i ] 7 0:za aT:i ] 7 0:za} k gI T}|Th gI:z T}  Q ^IcTbUd^bIQ0b}J LT1U     ClSlS5 Q$ RN됅 VV} VVu {Sm VVe {S] V O zm  Se| 55Ia5I\5Ib57A7AIT"aS}RR} T#PR.DO!)1     B`W"IT Ƙg| Ƙg TT ASTyDA塈TSyUFA@圖 AC堎@TyBCSBC E@S;<=IbEQ ^bTyTyUP=GAQbT @TyU D-;<=z^Q ^BՀB孉TyBQBCByUy;<=z p\ݺpbT |zm Tl zm  SlT z mS   z}ggpSh Q RͫF {S?A; {S4A0 {S) {S" {S S SUh| ThA {[|RCQT#ATAT TheSSh|1Tf+iW ʴg y Xc gy Sh| AW}  SecS.VdWV۴yAffyTedT f{SSe} SdbAccTS bATd} `TkjW ʴghl֫Ui: S  g{SSk}  k W PTgTybAfUh:_ \AR@j Tby|HUP=A\ݺPj Rg|2 AlSSg|"ViW kbyi ky Sg} @\yTc}M@bT:VXfe{SUP=ybTVXyBf{SUP=y}  A Ba} pTiSh A iBa}B yC CATVTh  bBaV}`Ag VAAyVP=Bc} pP=dT%iSU AXB h VA ֵy} AAbCaX}BqQ!QTjTk^mQ_p TlW pA_p }pppTlWAm }AAVBC  B_n n AnU _m CgmV}T!WnTcT}WD  Bܪ _o AhoW}p0VZyCb|1VeW^޴gfSTf ȭ| S ȭ @cTSzSzTyTzyb}@UgcT@ U<zeSSg{SSgQZfAyKzMzLzTyb} `Q"AyAeTTTT AeUTTT ]TeeyeA ZeWcdTf+gzzzeTǴyAAzc} *15KCCBC@ VcA0Q&AZQ'A6ZdC CCd}A֐AAc|W0yCyyCCyAaA0|-|2AA|%dAACyCCy|Q(AhyTyU{dUT[TaQ-7AT#AfBi Aj UY i _UlA_VZyCdyyTyP=_Tk eAn AP _SUUɲmyUVZyCdyyTyAyP= A yV P=¼ il}$TbQA Q4SbA&Ba}TAcTbBaV}   BQ<WQ|yAaTyTyByAy 2D`IQTIzUTTTQ5f5IQ_I^^U_T_0fǪA_eekeqffI^5f5I}^^BeYfz0A_IQ:Q 0} TT"'tTaZ=W6Zֻ0T6ZֻT6Z{6Zy5A\ 5AR5Q)5A} TZQ*VcT 5AXנQ+ZZc6ZCd6ZeCCe}yCyCeW05AVTyUAֻ0 Td%Ad|A AAdCa}TAc" |eV0CByCBCy| adT0&5A%Q,%&ר&b&5At'tTaZ T6Zy}&$&oD PUiZVQUh Zf |(^QQTiS ^gZV[Uh Zf  }`TghbT zSml iCfǪfY^5f5IBe}^^Q_I^AfAfǪfY^}]$Gtz                    FOlIJOaHUH]HMQHJNHFFPP@IF/FKHIEg Qa Q g Q9 Q0ׂ Q7f?|_WT>Q0Zf>Q0Wf>Q0fRT?|/WT>Q0Qdf>Q0^f>Q0fRT?~z0dIeTfBAICfQtUBf}>V\g \>y y Tyy|V\gS yT yT yS y yTy f}TTbcdCbBc} c!Ap?A\ݾ?:yDp?D\ݾ?Bc}c C bBc} cAdCTz| CAYzBc}cCBc}b CBcVb} @j SVW e VTk \ T ^Dz }f>[|W>i >\i>h >\h g   I}x^ X PfSVgSV W gT2d{SVhSVT DZi{y ?  Vc} D^cTiTzQ zACe ~['fTd3TQ.]Q BQ QBI*Q(DQ)c}CQEV[TI3(%TjUi|j  TUiQ TbDc} @WV۱efg ֯Th: f{SV}fTh:0AjSVW Vʱkfy ky i / V} >ciT:iTecT>g ?&H,E^BJ$|N3V Ȥeb|i3'V|]3$V|Q3V|EQ&? ?|:3 V|. Q Q^? @?| Q  8> z JUT zTk \ A  ^DI   ^D }}|>>g >\g 1U z> zTk \ A  ^DI   ^D }}}]% ThTiTk \ \Tf[] A AՐA k:yg \ A A}  A Ak :y f|  A:y}\  A:y Vk W Ȳd ycTj U?  AAep?\ݿ?  AAep?\ݿ?  AAe Af AI A T?T?}Tl\*A^D^DI  IT? J? }T?} j}i UV?Tf FAep?\ݿ?Tl\*A^D^DI  IT? J? }T ?|3V Ȥeb}\ z EdAcUb-&^eBCQ~0SCDCDAE1b}  ^Cd3%/$|J2VcXc|\c|^c| J2]c^cc|,3#$X\JQ6c| JQ5cccc Ec9^@dJ2fT3zT3z@ dQ iDIe z@dDIIDz@*dJ2#DIeQ Dz@/dDIIDzT3z|e@dQ iDIe z@dQ iDI zIe@ dQ iDI zIe@%dDIIDzT3z@dQ iDIe z55Ig@ J2Q5:z@J2 QRDz|QCDzQ5:z@Jf'?}T?T?Tz^#PXmwA~                EEFP/FFQQjDFQPPQEQP@IEM2EJKEdE}E0TdQ T^Dz}e jg A裺 V 2V[XQTTR ,eTg Q3 A 3 ^B } QRQ [}2VQXQ2VQYQ2V[WQ2V[X^2VQ XU]TUVQo -UWQUXQR }UVUQ UXQYXUUVUQ UVQo -UWQUXQUVUQ UYR }UVTQ UXQ&YYU]TYTVQTWQTXQYYUXTVQTWQYXUWTVQTWQTXQT\QY]UVTVQ'TWQ$TXQTZQY]U]TTVQTWQTYQR [}TYQYZU]TTTQQ U3ZQ V8UQV8UQ W8UQW8UQ X3ZTYQTZQT[QT\QT]QY^UT QYy> z>h I \SX>Y{i>f>\f I \SSAXuVe TdQNAD   z^D_0 10I0IzQ,00Iz100I1I0I1Iz} VeAg jAg}=0V\eSyTyTySyTdQ4^Di>l j  k  i l A U}}fYgQQsUW h V y Ȥ  ȫ yT0de~V>g&%, ^ ?~?z>@?T~&T>g&L,IBK--L)bUN2J!(1XO2^/b12H;n0x5TQ?|Q ?|^?|]?| ?|\?|Q ?|Q?|Q?|Q?|VT>g Qa Q QcR R}RUTTTaS})b00bT TQ Qb}TTTǰITR*Q  Tc IRU}0Q 33I bT}0bT>}33I3 3 I*x2Tx)w.b>B|]T>d>\dRd>c>\cRc bIb|>e>\eReI澾}} TcTzb % ||3b|3b|3b| 3b|3b3bIaS}/c>b>\SQ Rb >d >aI\aS}/Ycc} Tz3I3IZ*c)e*2:d)*2f  cf2dUUX66I55I|UY-K-K9I=*c)e*2:d)*2f99I|66I55IU55I-T#U66I xwce7f77I>,"8CQX[foI?|A?|AQdQ0?A^Q0?_Ae|y>P=A?|mA>>P=|bdba|Z|VQ`bQ`a|JQ?>?|@A^XA^:y|/AAQ:y| A>IP=|Q?>?>?Vc~077I>?}z>bbT&>牀 I|>b| >c>Vb}FP5Dj           NQ:QvQbQQ65  875   69  ^_ _,5  A_KUz_}' _ XDT_!QQAQ5"Q "K  '" MN7 _  yTz _ U_!}!' n@^geQ" HUe}ef Tf|xD_ D HUD_e} X De BH8KQ2D,Q^TQ X D  h y e} yVncTKDb}0TfKg^deeTh K H ee}  ~  UfDyTz0^daHUa}TaaAbbT aBW}gP_fQV_dddTK_eeQDfc} TdTcKHda}QAQSUTd! ."vz3&+Gn?GYi   0 s 3 N s   1 Z q ' ? m b ZW&C|BS&_r/W=v.[0w ` ! !R!t!!!""":"\"_"t"$_&&&&&' '''B'_''''((2(M([(|(((()%)F)h){)))***8*Z****++?+Z+++++,,E,\,--9----.YN Microsoft Install Version 1.02 (C) Copyright Microsoft Corporation 1981 The Install program modifies a Microsoft product  b O to take full advantage of a terminal's capabilities. Install uses a file that describes many terminals. If your terminal is not in that file, you may define your own terminal by answering a series of questions. A manual describing your terminal will help you answer the questions. Press RETURN after each of your answers. Press control-C, at any time to abort install. Press any key to continue.(Data is available for these terminals: The program will ask you questions about your terminal. Invalid SymbolIllegal TCD data pointerUnexpected End of File,Wrong number of graphics chars or input keysIllegal Input KeyIllegal screen definition Fatal Error The following list summarizes the strings that use your terminal's capabilities. You may continue selecting any one item to modify until the complete list is acceptable. r The following list shows the strings that will be used to generate graphics characters on your terminal. The following list shows strings se  A prompt will indicate what type of answer is needed: (I) for Integer (number keys only) (Y/N) for Yes or No (Answer Y or N.) (S) for Sequence of character(s). Special keys can be coded with a prefix character. Type &M at any time to see the menu of the prefixes. Press RETURN to accept the proposed answer to each question. To change the proposed answer, backspace over the answer and type a new answer. 8Enter name of product file. (Change Disks if necessary)Put disk with 4 nt by special keys which will generate the different screen functions on your terminal. w Enter number corresponding to capability (I) Just press RETURN to see more items. Enter D when DONE with this list. Enter number corresponding to graphics character (I). Just press RETURN to see more items. Enter D when DONE with this list.v Enter number corresponding to function (I). Just press RETURN to see more items. Enter D when DONE with this list.U The following questions pertain to graph ; on it into current drive Press any key when ready.a Enter number corresponding to system. Just press RETURN to see more items. Press D when DONE. Abort Install? (Y/N)Answer too longIllegal use of &, ^, or ','Answer too lowAnswer too high'Attempted to validate with invalid type. Answer must be all numbers%Answer must be all numbers or letters Answer Y for YES or N for NOAnswer out of rangeYou may either proceed through each question sequentially, or you may just change sel $ic characters that may be displayed. You can assign special keys to screen functions. These special keys are optional because there is already a control key defined to provide each function listed. If you wish to accept the default, just press RETURN. For example, the default for LEFT DIR KEY is control-S. If, in addition, you want the left arrow key to move the cursor left, you must type the sequence of characters produced by the left arrow key in response to the question regarding the ected items from a menu. Do you want to go sequentially (Y/N)?(more)Install complete(Linking code)(Checking references)(Allocating virtual screen)(Opening Installation files) (Verifying)(Collecting data)(Updating file)(Building map file)(Writing to Product)Code Patch File InvalidA Insert Install disk in current drive, Press any key when readyList of terminals invalidA Insert product disk in current drive, Press any key when readyProduct file not correct typeA Insert Ins   LEFT DIR KEY. (Just pressing the left arrow will enter this sequence of characters.) To define more than one key to do the same function, separate the definitions by a comma (but no spaces).  Clear Screenclear the screen (S)Position CursorGraphics9What sequence of characters will begin graphics mode (S)7What sequence of characters will end graphics mode (S)Initialize MultiplanSome terminals have properties that must be set before Multiplan can run. If your terminal can set wrap- tall disk in current drive, Press any key when readyInstall Spec file Invalid#Cannot deallocate unallocated spaceAllocate size clobbered Corrupt mmtypbad rgbszAloc size Bad arena #Cannot allocate byte size Memory space exhausted Linkage Error!Invalid Error NumberUnexpected End of File'Maximum size of installed code exceededUnresolved referencesInvalid external referenceUnresolved Parms referenceUnresolved references:Disk I/O Error* Fixup value exceeds size of code block:  n 1around mode, then enter the corresponding sequence of characters. If you set more than one property, you may need to generate a pause between each character sequence. Use the &P or &I to generate a pause. (type &M to review their use). What sequence of characters should be used to initialize your terminal? (S)Reset MultiplanOWhat character sequence will reset the terminal after Multiplan completes? (S)Erase to End of Lineerase to the end of a line (S)Clear to End of Display"clear to Dve functions to be applied to the row number. (I)EWhat sequence of characters separates the row and column numbers (S)What value is added (I)What is the test value (I)How is the column number modified? 1. Send without modification 2. Send as an integer (Field width is variable.) 3. Send as a 2 place decimal 4. Send as a 3 place decimal 5. Add a value before sending 6. If the number is greater than a test value, add a value 7. If the number is less or equal to a tes end of screen display (S) Reverse Video7What sequence of characters will end reverse video (S)Keyboard Click Onturn on the keyboard click (S)Keyboard Click Offturn off the keyboard click (S) Cursor onturn on the cursor (S) Cursor offturn off the cursor (S) Sound Bellsound the bell (S)dDoes your terminal require a special sequence of characters to turn off reverse video (Y/N)Input TranslationThe next question is about your terminal's reverse video capability. If your termi t value, add a value Select one of the above functions to be applied to the column number. (I)1Your answers are too long; you must change themYour input keys are ambiguous. No two functions may share the same string and no string may be the same as the prefix to another string.0 What sequence(s) of characters (S) represent What character (S) generates Number of rows2How many rows (lines) does your terminal have (I)Number of columns7How many character columns does your terminal ha nal does not have reverse video, type N. Some terminals will write a blank character to the screen when they start a reverse video field, and write another blank to the screen when they end the reverse video field. If your terminal has reverse video and does this, type N. Does your terminal have non-destructive reverse video (Y/N)5What sequence of characters begins reverse video (S)9What sequence of characters begins a major highlight (S)7What sequence of characters ends a major highlight ve (I) Terminal name%What is the name of your terminal (S) What character sequence will ?Begin Graphics ModeEnd Graphics Mode There are two prefix characters: ^ is for coding control characters. & is for the following characters: &E - escape &R - return &^ - ^ &N - newline &T - tab && - & &F - formfeed &B - backspace &, - , &X - rubout &Dxxx - 3 digit decimal (less than 256) &Oxxx - 3 digit octal (less than 0400) &Hxx - 2 digit hex &P&Hxx- pause xx (hex) 0 (S)9What sequence of characters begins a minor highlight (S)7What sequence of characters ends a minor highlight (S)8What sequence of characters turns off reverse video (S)>What sequence of characters will start cursor positioning (S)<What sequence of characters will end cursor positioning (S)+Each row and column on the screen can be addressed for cursor positioning. If the position of the upper left hand corner is row 1, column 1, answer Y. If the position of the upper left hand corner is  milliseconds &Iy&Dxxx - pad character 'y', xxx times &Y - Used to code a Y after a control-C + You may now select one or more screen tests from the following list. If a message does not appear or part of the test fails, press control-C to exit. During the tests, control-C will not abort the program. Possible terminal tests are: 1. Cursor positioning 2. Clearing the screen 3. Multiplan initialization 4. Function keys 5. Reverse video 6. Cursor and keyclick options 7. S $ row 0, column 0, answer N. Is the upper left corner of the screen row 1, column 1 (Y/N)%Is the row position given first (Y/N)How is the row number modified? 1. Send without modification 2. Send as an integer (Field width is variable.) 3. Send as a 2 place decimal 4. Send as a 3 place decimal 5. Add a value before sending 6. If the number is greater than a test value, add a value 7. If the number is less or equal to a test value, add a value Select one of the abo  ounding the bell 8. Graphics characters 9. All of the above Which test would you like to run (I)? Enter D when you are DONE testing.Test of cursor positioningThe X should be in the upper left-hand corner.upper right-hand corner.lower left-hand corner.lower right-hand corner.Test of Clear the screen.The screen should be empty.'If there is only one line of E's at the"top of the screen, the sequence of%characters to initialize the terminalmust set wrap-around mode.&Verify the as ON-.@.@t @@ABCDEGIJKLMNOPQRS      MP .COM INSTALL.DAT MP .COM signment of terminal keysby pressing special keys.Press RETURN to continue to next test Test of turning on Highlight. %The above line will turn to Highlightwhen you press RETURN. Test of turning off Highlight. Highlight will be turned off on%the above line when you press RETURN.Test of turning off the cursor If the cursor can be turned off,it should be off.Test of turning on the cursorThe cursor should now be on.'Test of turning the keyboard click off.$If keyboard click can be tu  Xrned off,it should be off.Press the space bar to test. Keyboard click should now be on.(The bell will sound for each key struck.Test of graphics characters.(If the terminal has graphics characters,$the border of the box is continuous,&there are two down marks pointing into#the box on the top line, and two upmarks on the bottom line.$Press control-C if this test failed.Can not open map file%Block Load Addr Relocation OffsetRelocation Offsets:*You may wish to change disks at this time  . File not found: 0 Insert correct disk, Press any key when ready(Collecting data for ] Following is a list of available user slots that may have different terminals installed. \Enter number corresponding to user Just press RETURN to see more items. Enter D when DONE.If you wish, you may redefine X by answering a series of questions. Would you like to redefine this terminal? (Y/N)?block ) (Packing block M Enter number corresponding to system. Just press RETURN to see more item   /$s.Answer must be all numbers or D.  AUc$'*U׬*r*x7ed\Adec &&=}T a}+eBXbc*x*SSTTa%dׯ} Ve%cT5,&օ*h $g  A}   d e fc}j TcTk RMP5R cT+Al[圖`d'$hi   [[eTTTTS$Tc$$UeTd,Tg T0QjT/ j U__<_TSTd g e}$ȳ&R :T_iQ@_i_z_}6v-eeAt s%wx%Dzu+%Ta%*BAx}(&US UUS   'b\AcyXAyUyTUUCBAL Rd{ .h~       'x"!d"h"f"!!!!!$!!$%!"%!!!!$%$5"$%%!!Qb]2%,QPQb\ aT#Q *T(Q [*T06I)WU6J-WUQ,QPQ!!bU1aQb Qca!QdaWTTTUT *.Mc.Fd-:c}.J).Ee-.Lײfutv%)-&('TP%T\$T Q?7I! 0gk3iBTkB |FVWfk~3IkLVUf !k  I Ik >h~mA)U~[ !U~Q~ [5Ƹ T Q( Z˼ ?    1 գ9 5Ɛ  T| T嬆 Q@lUmQ1zGlmTQ0 > ? T! ? jT#Q0 > ?}QE ?TQ- lQ+ ?^0^:0 ?|.5Ɛ mT  k|kTz Q*k 0k取IQ- k IQ(Q)Q [˼ ?hk *+Q# Q# *U!i!j!f Us!oWf h  h g+0XQ *| UQ U* T#UQ W+XQ | UQ Uݰ U+Uݰ|WQ +ZQ  h+ ZQ  * 0 ed eb| eפ+T#0AdTQ+?| TQ-?ay ^ 0;<=zU HeH`Q@dAcQ0cy/cT byabQ /*%![&aS}**aTx >BF #"##!!# $!!!!!!~% T@T @D11h IVh>g|DTg-/eDRuTvAr+AfBUfhLgBI . Ak h KgD8jTi , % I I I?| IQ Q_?} (05I׳g   ,MZt&I)&t}065Id5J e IQ U-!.~__\r[AAYL~n<"rEP8   "!~%!$%,%## $"%!!!$ rUcaV,Ax T *zUvxT*zTvVa}.rU4x8T<*z|$-Xo ,UQdu/w0oTe&)J5e&UUTf&UdTtTsU}8 NOd   !!!!!!!!!0%!h_$p_$ֳ_R`TTb\AcZAZAUXAP!&b+dB p e}|f6yT*Ǭ*7y*xz*xU$.l"j"n"R@T sR QT$Ae$Afih R%c h%sTjIQ Rj hIQRIQg Q` Q` a#` #^Yh [%d%O Q`% JQ  Q %szQ ei}h ,K~   2%r"p"t"!!!v"Ts$Tr&tT(V%QTrQtQ-)Vע(Vׅ)V/'bTu5UcuUuTQ bc %RU$QaRU$Q aT*BNXbw)8GRdp  6It6Jx*fWi &f iIk QnJm*&ǐ VWi!o &o!To/.Zo*!o,!R8Q% V U"#h T"#h o+Q"" !%Rh ! ?|Rh| RhRh!K 2.*4" @|~=~?~A~ X  @ ~a UH ($    @| V R!  T RǤ F ]840OK    WB~ *6z XIXzUf|L XU< ,TTd v   x"!%!!!  0bT >}T I>T} UT@c!>e>fQeQfT}U Q 0f?}UTQAQZUTQaQzUTTQ0Q9UTTQ QR|"&UTR"'UT5XUTQ.Q_UT (^^A$AA%Q,UT@^?l "!!!""$"$$P#!!!!)Ev)Fuxq4(4,4(20.,@|)|%|!| eIk6It6Jx *fWi~K&f f i~; X&o   e W |1  |  UUdU ewIi~ *ՁfUi~)fUi~!$U~ L VH__& 5IQ }_* 5}&5I Q(* 5I Q) +*6zd oUe6It6JxIi~I V*%$2"%0 (|% ,|# -| /| &|' V7I 5 V $|+ DlVi ! %0WiU!Vi g*6z '_,Tu f~V X"IXzTf  Tf2~& ~xWif   || |+*,:|#*%/ղe$.ղba./ճc1aA#0AdABWL1U/ :}*)K)Jx*$q#T$#r(+$'U&x*Q$ײq#T$#r)@paT+('U*)G)Fx*Q>%ײq#T%#s)G2+('U/x*%q#T%#s'+(%UTab- St}.GcIT{wN W H _ ; h 3J      $  + +                          "#R## |&f| 7|WiU~R  |*fWi|Wif|Wi*Յ~.&fWi~" V) Tw$ Vu~!;|'_)_>VVwu|Q *6zB i| !&! UC| X&IXzUf Tf,T| ( | X; &0Q+|,o   e W |Z  TN|S | T|| *f5_U* z*xT#Wi''u~''upWy { AeIAy6AIt Jx|/@{W'.T^h ,UTy6 It6 JxI&y0Vg d|*d|d| Ug5Q 5 2" $#####!#$!!#$"#!##p"!!!#!""#$$#!$"%'#%"P#"#I!(5*}I}IQ: JI}5&a7b770 Q7b|Ic:5׾?! II!}bVIcaIJDZa|}!&aJ! I}|]II!&a|Ia|AI}Q >cQ } a I=|Q< <IQ }~**վ?Sz^P5fTuo 521Th  j IQ@l KfQ:?Q ? I  IRz56 zT JQ w  Eg|4 KgQ  zk I . M ZI D  !dT \$ X&TU/LcTb6IdIQ@h Kdf Q 5:z/J5ֱd/KUTgU/K ?}05d*eUIXzT#*x0Ty*&LaTUY'a+21סQTUy5*d+*+oIzUX J+cTT7IeAd TdTc5h5A *A *xP= *T#T5*Q *!2Vb11a}%!o !o!o0Eo0Fo@!1:-!-G!o!o0E!0F! !!!T2HI.dv&< )         x"5"###'!# $!!##!!$! $!%%  ǧQ@*y &*{z& tI*y Q`Q`R*y *Q*y &UT&tGQF v`)@          #x"5"##########!!#!#!!!!%$HPTh_vTy-mTkw(o S_UjUux5 Q'U**I_~*x_Q ~ ~(Q(vyUy4*I  b~*I*IQ6I6JQא*J b~`*x*I*x}*_*IQ(3Q ?Q\Tg!lVbWP=~(VvmE裕0l!裍!Ii> Tl}Q?0^߾?y yyTh ƀkJ x!$$!#! mIncLnLcB !Aj c KnI BIA!Ak! Bj/? @ A@aQ ? AFl A a.? dg ~R >f@fO i5v3t1-nK;7436/87:<4$>V֘997JVdAzBy~AՅ:yQ%QAz:y|2 BVe|VQ eIQ6Q a|5I?>5J Te|>i>nTePh Q Q? 66Ha|y Q 5I? Qصa Q? 5J? Q@صa|U|t1>^nIn,j  IaQ(?|XTQ-?Qa\e|Q"?>eRR ac:y| j*xIQ }S*IQ)f|Tg"}(m+<81*I_x|H!!77HUUy7HxQ?S?Q??|sQUg*IUyQ Q6 Ⱦ?|R 5Q?b|>(VvQ>?|3QV?:n*IRQ*I5*xI?}*xzTj~%)!, 0W |~AK~`Q )XwQ:?|c*I= |2<|Q4?QbQ< *x|<Q<Q?Qr *x|(8^n U *x|8g3 I 3 IUjUy|` hQ|5I?>II Q:?I창IJQ> 5J(#y _+x)wm3a~! !!R>_~Qk1$/+ ~1A^bSg ll)QwGR )@g} T1^W )yRk| OE !HAkCx Q@)Ec*)y*Ix R!)y )yZmBh|2AcR)yQ)yAEeIQgTl Xg IQp } Q *Vǫ*){z *VxQ )y|KQ)yU |>IQa| Q  a|$|IzzJzzIJ )w~ LyAAyT0)A=)BdQ!e QeQ`Qe猂)AA;<=z)Xw})w-Vu5)y)y(VvAIbQc@[3؆ QQ Q` Q`Q` Q` Vu5[(Az*!pQ aQ  |QbQb4 QQ Vu5 UlQbUcQk6ITcQ?kU deg*IQ:*J Tl*xU dfhQ?k*IQ6I6J%*J )degB*J>dfh|*ITlTeQ>fTgQh5 i hjf   Q? ? zWQ  ? ?zY TgQcQ?dT6IeQcQ>d랐*JUg*xQ>dQc*I5!!֤ Tf K>_>lPeQQ? !gSz|TzQz| 0TzTH| 0azQ:Q? TzQ>z| -xzT| -zQ? Q  ~yR)yQ)y~j)Q njw GR @@ yRy#Fc>e Fd>l@z9Vֳezx Q x)QwQ)yU ~|QbTfQ>iTg  UzUFz?? ? ?P *YN* ~|kgTbl!fif X g i}d}bTy|. Q zVx|xRyQyU ~A|:VИ)Q njw GRGQ@Ex @@ yW& GQ \TcQfTdQ@fQ Ƚ??zTbTc*I/ *xI+Ub*xTc*I25*x Tc*I^*IQ0c5*x}5@IQ5/T TyUyIQ5(;>?Q9dQ0z Q1zUP=Uy}d8Q0}yUdgTb f*IQ0*x}*ITd *I?*x}*I1*x .b*x}*I  ,*x}*h*IQQE;Tc*xTe*I+Ue*x*IT*h*I^*xIQ0c}ׁbQ@R xT ?@Tƀ z U ,o .o P ^& Sb           $!!%%! @ Ex|PA8 RyT QbQrTQf取Qb QfUy|! |Ec EdIbIxIz|M3Ƹ )Q|<>my y*yTI@[h|!>b*ǫ*){z*LaQ@)wy~/R؍*U0*z*o/*YU*)8XxQ )y@$1TQ-?QQ"?d 6I6II,eIIeId l !!!#!!!! QcI$$J$cIJIcQ?dK))L)dKLKdR*yQ*yQ Q?0 5eSe-6tAp(Ad%BsfLgBI 'Ah f KgB%$*Q`&  J$%$$%%!!%!$! $$ $!!!p"t"$$$!$!!##$%b A/AֱT0TtxTu!d!-KA A' xA tA3uxd} &!t!u*!x@-$!!%!"Uo$$%%U--3 Tf_++TTo- )g& w$%TA%/AbB#xA)tA;73. +'# @||_YT 3 ~UvSo 5.Th_RS}R~,TTmUhUlTm6j7k2n0_T_U_|Um7j6k0n2_U20_0_!eT y A~T y AA븖IfBg b Kf!oi(.(Tl(Ȼ i' f.%("Th  #5 T#5(@ ! V% _Uv$1p%1\ݐ _'I_L=g Iʳ/c X Lbd IA_/yT ȻT/Acz' ȻA)청UvTheU P=~eU P=~ aT5Bx*#J#LQSu01843:6$.@91'A@@f'u1'0Tu9'SS90A@AT-2{Ry62yU SsTfI 3J -3(o Ih,UfXc b W K z z J z/1TuNWS<8G02@7'촆"/%AFV @g% s/%1/%B'T.7'%SSA0Tt@fRa6e!.Ǒ*&&,( @8U&tTt8U&R %U8Sb'S1'cA@b@%S/%cAFdA `0.-Tl,o ,T1QRѡUT_5WUUh ~T Q Th -*!eTr$2!Ts%0A B눲%s}$r}TorswT o! QQ@ @VTUWTb!@3Xw$)E1$)@+%c)F%s%)G TU%s}s|%)F %)GTU}TU!U  !Iz\\!Ic!@hb*grA  $$$!$!$% $$!!!!$$#!#$ -1Q-o3 &g(d0&(f0 U0&e &T( &c(fe((Tc} tv *$SSb& .&CBATo062hTi2y5AdIe3Tg!fg @''@T fTQ-?Q e f|>e|!jI Ij f @-o @@|VeQ"?Q" z| 3 V 262-2T#-y Z%Ef{"K"U $!!"!$!"$$$$$!!$!r"'$p"To UoUo5A a} Twr&*.TTT'r%w$2K2JTt)x*T2L2Ma*T*aT*x}*x2E&2F*.&*T2@Q$2@2Er.2@* D T%5AAd%[ 5:AP=}.$/ X$r$ .cILdBVASȻ$r$X0e,AP=}0e2dYUz//A/ֻ/bAЖuKw)2))Y4T@BLIeA') Vg d%+%(+%%+%+oTeY3I3P=}%c%s@E Ȼ2@T{y2e%,A@BT2yUAE2ye}TA@, & (0(T2b2b%AE2b}T .ax2装*A>f@f .","* &  T&T2K2JaT&ײt$2E&rD2GQ>)2G2FwQ>)w.&2GT*T'*xT*떡}*x*2F*x)2F*w딯`f>Ay>Ay>Ay>Ay}0JIIJ LKKLT>>첿? ???U TefvocdIIJJKLǢLKգKKBLL;IJǢ4JIա-:z8z)z(zVbeSf}}|T 叛| 3Ƙ ,dVdA0}0U%a%bU0VcA %c}Ab}0c0d'%$e0 -d}'%Uus PTh0gTj fV|Ac潽|aIa}.$dLaIxB*a| //a2eaKxAI*a}vT Tc cV}N.            "x"#P###"!!#!$!#$!"p"###!##!R#"!"Q3'Ca'/Zo/u.1 !*bTxUx0a>b>c-2d*0cIbQVz"aT* c 0 S))w6I?-!c6J?2!X0JfTQ v dTT! % /!yT TAhIXz5 e% \8Y4!f ,A Uh|K0U XgXf Xjf}Ti Ui j T "\ Z ' |  ' 3  z @hQXhIVj eTT T-,f,gV - -A-ֻ yI FTQ  @ k  !d/"KeALfAP=d}0@d1eWT@TQ@--dA@@e1W,c-AFVA@fBP=c}TRaX0b,A 1AeAyy}Uc1a1+-Be AbAyyILd 1ca}o !1+aT RXRaX/ֱb /kl&(%*CRɀR̀X*%R'(%R&)%RȀ1'R(%!o tQ#UTQ V* _A _&xR+ATQ WTQ Q X**'}__ _ TC! ״_*(%R̀* _%Q *}Tj_ _+GQ? ____]Yg*RˀR̀*)%Rʀ(%VU_Q *+A TVTQ V*Q V* __! _}_T ʼ}%:}Ӽ~1'+@;8(%*RˀR̀*  /c(v(TeTeV dV}@Sy-e1'-yA@@f  @TU-ye}T `SySg,i -H ,y AFj B A A@ U T  h Bg ,y i} SySyTb #+3Pej};      #5"!$!$%%!!!!,%$~%!%!$#!"!!!!%%% U WYY@2y%y3AeJyLy@T!y!yeA'AfA)yA<y b T0 T! / ! T! T! * _ TQ *}uo 0eT6g! A! AdA)x*!xBWLU*Ue}TD*U@$U;hLiBI 0 Aj h Ki fT  :f}T yTZ&T&Y&V&TT%'QUT|!$$! TQ TQ?Q %Ec%Fdqt# #%@p T Vc&&%G T&%Gd%E%F$T >cQQ TzVUb0$$$$"%$$$$$! %!!!!!!!!$$!!%%##%$!!!!!!!!$$%$Tc5aSSTz1/WzTz2zTb&  0T)yd A'AB#y !cW,XYc .@DeT f@J @2%RoT+-5I׶e@3DAIe!zU@D @T @DAeTT@T cT@1 1Ii T e1j i e j}e|Dg35 I5 J  U& AEUR%U D& fAEU9XUmIJ Tm2zzKL Tm%zz& f e +-5K׶l  AEdeccae}Taz IQ 66Haa!?@D |2(Ee|%(Fe,e eA 'A d5Xe5X9KzLz6fAPKJAJǡ9Jȡ1IJzKzMzAFFTAVTUc|?|;LMWTJɡ*J]͡"OLzJHEAE CUc}IUtTs5xT**zT**zTb&6aIXAzITIUIT&z}Q?a T3%az}TooTo#o"SooToSo yT*yT*T6 S6\2Q(o&ToQoTooXo To!Vo$Uoo0o0o T-y0owo Uo(0ov0o!+u'UQdo'R&%3YNp"h %"   $!#%.%$ GATU@*QT*pzz*\zzX 'X       $$$!!!!%!!$!$!!!$$!!! Ta- :RRT} ,&VUW쮬/G(/FTv)/@p/ETwT1%Q2QPX2QPQ6 YQ2QP#2Ta.Q2QP#ף 6I}Q #*@5XeFfEgyy f-U\ 벮 @f7eTh "A AAhA /}g  , &AffTPP=TTT !0%&!,%!$!!$2%%aIQ\-VQ+T_Iz/U-p5\T_o)oz.0VTWTo )o6 Sx+wTt|KB-*4hxURRMPU Sx5QSx|UtUv +wTvTt6TSxTd\ T:Qz}TURMP촆 TQQ 5UTe2c1SAA!2פ|: '  |!쵉' ! A@@bc}~Q7BaIQQ T_IzU坋Q |3Q%o s-RMP| RVC-URb%G\T_rBrzTRTQ 淗Q)嫊Q52c1! ?TTT,@T_++Me+Lf+Jg+Kh+Ei+Fj+A_*X*_&*_' *_( _)RkSlQ@mSn _Q+yRS_|A(_)(_|*T _ _ k l| _ k l__"+G_$T_!T_ _ע:_%_}_ U_%_ T _#"U#+GU U_! U+P=!}yT_RS_|w&___|cT> _ :}}__T_$_#:} _$m#n|! _ ף:}e_* mnTITD)0-*(()*&&(* #)))|u m n F  Tdc}i-Q+%cIQ\qIqs/U5UuTu5URRMP촉UQRMP嫉Q5#UqQ쭪TbTa\?qQI1\)Q:qQ}\}5UURMPUbB M^    $$!!$!!%$!#!r%!!!#!%!$$!!$$$$$$!!!!%%%%!%%%%%$t%PTQTU@UTRbRRR Q\UQTQooc01^Q*עײxo+o*o)o(o'o3%Q3$QRo#o"Ta\6 T gT DŽT TǙ~y s wT_IK ֵd)A%0AcIBL_1ALQ9~.%)e~#A0AA)_U_AUTy| -%)T/_AT_5*  T__|QTxswuBnIVILU_L_|ILV LT_Z_T=A_y_0AcI VzVy| VzySȻT1Ij_y_A)_BIC_| VA_%)UAI.Á g~tf~Q~!~swuTxDlv        !#% XQTb:X}3V}3Q?o ooX6o,tvo oo o!sooo2o2w2o2o2o o2o2ob2 2uT;R֬1Rdc%!&IeI IIT QTd}R2STURQ!!01^Q*װ*!+TT!*!)!(!'!T3%Q3$QR!#!"Tb\6XQTX3V}3Q?T.!+&(-!! !!%!!!!2װ)2װ!2װ!2װ,2װ!!2װ!2װ'2װ2'2ׯ1Rc0!&IdIIc}pTURMPU쳚QVTb\Q5 QT}q TUiQUh  Th\ Y!!T j UUo2Ux|2Ux/նb1նdu'~25 Q~Tk U''fv(~\ T('(f^jfb~Ty~25 Q~&Tk'/(1 +Ul~ ~'(f___\'(Y'(lAM.Ag A)쳈Ul L) BW"'(T%)&T2kA Ty~ ) < Ȼ#| '(T%)& TT~MA Tc\QI MQ}紉QT I>>U}T%0TTd!-/2R/Q@5Q5! !Q@@@ed}ƧU8:p 9 Lkv!`W*IT Ɩg|g T} TT #TU#DT#A塍TqQT|RR%U孍QTqTTqU#F2#A#@圖#A##CbQR-#|-T#y#B#C #ESC;<=Ia#E Q ^QSUT#yT#yU#P=#G#A#QaT#y#D#Sz^Q #^#BՀ#B孈LUc#BQ둡#B#yU#y#E v2o{\$ I B L_!AL~~_ A<_ B#_T2뉫'(T%)&25 Q~Tk~Tyl|A UkAUTy|'/(1'(fAZY'(TTT%&).Ag |S |!_0CAF_VA@nm_'I'J(K (LQ9|Im}_} BW% L!'(T A)% B#) A<&븫Ty|T | I8U|2Tl(v~Th'u~i  |2x| swt2xo uv6Bw6Dt6Cs%YTtWs|%Y%s&T&QQ VX6BȪQT/T1Y 4 J_   ^zQ zTc}pxaTbTS\@yTyTyTWyTVRyTyyTyWeTTy| RT%U孈TqU[b[a#@$U#A圉|#A#QcT#y#y#C#y #A圉|2'#C#y#@[#B #C#Bc##Ba#B#Cb}#P= #D#Q=U#y##Ba5Q#y}8K#B#yQ#D.# b}Ff&+0     !#!$$l%!$ %!!$%!!!W$.6BIa.I[d    !#d%h%f%$!b%$!!`$y6By6Cy6DyATATAAAA ATAQ TU@${eB{f6C{gTT T     ֣Q TURQ?eUQTQ>;(f)4A )KK)URT|KKzf},ղd-aT%!kWU-Ǭ--T +TQ@QfUQ>TQS55Q>>eQ?T5:z}(g )+ A K K ) 뺩| K K z g}-ղd,뱠'#WUT,׬,,T +T QQ?Q a/eIIbKKc% JJLL eda}U.zK/z.zM0z.z.W$d6Bo2/eKbzMczcbQ? QTQ zz.UT gTe:IS IKc KMdhTf:I7 Iz II  Iz  z h} g}Ut. T_Tv%_)_'_JIjLKkJInLK_J lL mT_  VV   QQ?Q 52, Ux5 QޤU_T_Ih J~Ki L~ I K~T I_T K_T fT DŽTTǙ~ Jg Q# i ,ղh  iAQ h}}-e-Q,ժTQTQ>7(f)0A %K_)URT|KKzf},ղd덲SǬT+T Q?Qh  Q?i  e, 믊Q }},f,Q>j- TQ>TQP55Q?e T5ez}(g )' A  Ks ) ͩ| K K z g}-ղd뜲jUT  T+T pjkhTT DŽT dž ,i j k h}hQ@ _g-gTxQsuQ>tVTQQ>TTg5G 55| 55 Qa?}Tw ,iI IfK KgUwTlh h~& Ij J~ Kk L~7 QTw Tl  mT_T_WnT_ ! &!R & V>!_X_L_IV!R_:)_nAvT*T'!!_|;.A_L -B'A)uAtVQTQ>T(i )R A G$ K ͣ K z| K K| K K K z| K֣6 z i}),g6 ,g,heeU  , ,  g}|$/Ue  , ,-9g}+T, `P}I}  j%&%Z%X%l%^%&`%V%\%d%f%$b%!%h%$!$!!!$1b}yV6Xףe+TaR6TRRMPTCRR9-Q-e-(I:T6meVׅzoVׅQe}үU6Q"#@2.TTS2f@A@ 5Ab>d.2@ T$e2. 5Ag>iTk QUkXi   #0lmhAFj j (hm} Z $#aIcQ\T_##z5BaIbQQ\$QX'5CT5DU-UopS_2a.2_D1u_Q UzXDI mQ E_DIUbIJ\KLVIInKK_IDzIj <JQ L $ pvo uto w o44T4Th 3I 3 }%Q'%p z z%\ z z Qs IQ I K\s$ z* zT zQ> z TrQx( Ir Jx2c0Kbc}0d!Tce:AE e}d}!f!&AFg VA@be ge}f} !cTd! Te!A !Af}}@LlB$IA_2n ASKjlIIj j >m@m  i'k iV ~NUk~KVk~F\k~AIk~:Vk~3IzzJzzIQ QzSz| IzKz|Xk|T_VkIfJi Ph FQ?Q IzzKz"z__ j}oj HIk J9KlL- h ! A. Ai AQ, BW LQ4 }μ }W j}EDIQ5!7S_2. DI__T__Q X_U___DI>S_D_SDIVQX__TzVWU _|"S2_.AA% YDIDImQdm+!.+xDI*xzE*x*xQ.*.S. @Ue!C(RX @) Eg(R   T z V۪U5fe}]Q:4f  hQ Q?Q TzQp| TQ U_f|z Q? TzQ>|  T Q? U_  h| z JL|a8 QfQ?hQz|$IJIfQfKLK hQ?hTiT Qif T Q@i hz z| l j~w k >b >c >d Ie(WUoUqTq (V4 ,)f|& ,g|  &+h|  &i (V$j f g (V j h i? ? ? z Sz@y,4&0-,'(W)P=| ,),Iy|) ' (#yU(U(V3,)֡-,)&%-!(U ,)#yU1,eT)e\ SQ -VTcT#T'#aIdQ\5BbIcQ\T_&2&z!Uo 0IUiI IdK KeTgfh 3Jf Lg#֐J J֐*֐L LօU ib h}7V &TTkSb0f2~'0gAFVA@dB+SBBbUh2Bi? 7Th| Th FjA Uz X|* Y  -V1V -V1V%Q|QQ8 Q Lm n| mn-VTmT#5|S0 f,cA LlA Kec}5AFU,פUk| Q6s _Tm}Z멢륅롤QS|(V1./ !)P=T@&%,!'(W-+|+ - (#>yU(U(V)&+֡#&,'(U&+/&+e|(V/! 1.+|TT-x4n              #$!x%%n%$~%!!!!!$!$%%%p%t%v%!z%|%$r%$!$!! TURMPUQTRcRRRQ\QTQotRoooov(oUP!W 6+L\ SȻQz|U_T_L f~ ,g !" Kb A L hA ,פ6 g}0e2BfAcUoTd:AFIJKL['c}ToA@b27V8F bz 4   !  #%%%%%%%%%!!!!#a>QbT_zT#T!5BT5CW5DU5E5D5B֡ #5CRQ #o5Bt5Cx5Do 5Eu5Ba>bQQ Tc7z#I6#|U6zT6zQ6zT6zQ>6zT5CvT5Dw T( T)@6IeTg6fe fb} T_)X_(-- 7V坌Q=~rQiTkQ>jTl6    6I/ Ǵb.ǴdcUa,",b| cTb|T.b f e}Qc!!VTW3VUUTUThUU mU}笫w65^ vu t sUTxoTT%12XaaaTcTeLbQȠQ$ Q -*|?Ue|+dT-QPe`dUdQ *T#c}cQ -*}Q -*QaV+abb T-k 0# A  K K  KI z k}Th F  Ig |6 T 2 ` T2`   I?z z}Uo0VaUdV d}dVUBeAyyd}@Aef%AA  yb~ 0TjUnmA..Ah Bk Lf d B I ,A_Kfd WTmA(.Ai Bl Lg e B I,3geW Tn UTT V V UTVT WWUII T W_ޣIQ }Q n }^ }s }[뇰 F\TL"d    #$$!$!!$$!!#aT+Q +U-,VTW쯧Tt('z)'zb7Ac16X6XQd7A dT7}**x|(bɬȬǬɫȫǫ*ɠ*Wx|*ǡx6*Xu'Nv'Ow'GT'FQ?'@T'EQ*TTT믯xu7MXo 'Jo 'GT <96TTT-,VUW#a5Bb5CcT+Q TQ TQ>Q dzz*vwTNa#bT ++UQ 7cT U0UUf>_>_ gT} UT TTT 5Cb5BaYTbWa|YaTQQ UUutv#w#aW1ۡQ 1Q*x#c5Ba5CbW1ۡ'Q*TQ> Q>Q d6:z}*Ux*xTc6bQ?IIUzIz},b    #* &!$&$$! &l%$$,%$&$!$!$&!!&&"&$&! TgRVC.URkTooToToTooTo5QTtTxTlUR 7Q&*-cdTQE^Ul|-QEU2P=)Q?^Td})R}2@A5CQ.-,VTWT5C@Dg5Af *f *q T+ ef5 {  #c5Bdc#dT++U 7ATU#aT+Q Tt6XbTAcKJWLMYQ(뱯\STETTFT#a'K'J'Eb'ETV'AQQ UTT5BU?L'Mb'Fc : b}'FT'G [MȡQ?Q TIU `+\QTt7+g   z *h T * 'i( z) z+ox6*Xu A' E'y'y F'y'y-,VTW쯭#a5Bb'c+d\QT V'Aע T'G 6tm2Bxn)f-w-)-.Un g&*)0\ToTo4U1h /- AFj V A@f i j I J K L\ i} h}/16S3 ToXu'No'Oo| g*& S~  AcTgTf>eQ }+Ug>ed ^Q0f>e}Ty yU0Te$)wIdTTz^)w?}0(aaI^)}0v)5)(w)()0)(* (*v&tQx}*(xpT-N$$ #$$ $# #  $# # ##  " ## ##"#!5"&%&!%!!$&!&&%!$$"&$&%!!!!!$'FנQ('EQ'FQ?Q TTTT'L'Mef'FgfT : e}*d[]ȣQ(TTT'FUTǨTUV'EUT6xTUTTT 6*xXuگUbc+7dA  AcTb}bec+%7,  | 9> VV}+6X6XQ}+oH riJOW\afkq        #"#####"%"!"!"!!%!!!%)nUx&i%j(k'l62/5^TaTcToUml3dTRRHPURe TxQ U0SQ |iQeTfKUg V_J.$da0 &!%!!!!$5o QQ?_2!~_! V%*_TxTUx {B ~[UoXUoQ b-(#    3 Wb-o!/o'o  o"-UUoYbXS.ji(gfQ b  TfQ>g ji|Vb  TiQj gf5}-o't/w  V~^.(UT_T_Q ^Q b  oVb  o!!c,A(!AdBbILbA_B !~'X_b [_b~T[_)R Wɲ_5}|W_U_!b)IT ,T_I V_}!$$$!_ &TRRSLT쳍Q UV 3QQTusxtR&&^R-&!R0&!R3&QD!!!!^TbQ?)6I_R6&Q 6I}bQ ^}!g .8R:& A'Z\ A3 A |  A R>&RA& K^ g}QB-1^0+QQO0RD&+Q +p+hǪRG&^Tk k%, hRJ& AE A@ RO&^}.a2_,TK__}Tc-Tb:1A)AdB_IL_An2_AzTTT0mLAdA_S___L:1?<A1)A_B#_ImA_U}RT_Q*M)66IT 1z\T|.(c \T1)&dȻz|@_}) Q .+Rh__}Q*_QQ?TUݲb~(~&THTTTm)T_|U_| .(c..((X|55}.(|*TUoV .(\o.(|륤| )"|뱤#[ QUTUT2oI^}~Qc o Qc v2I BFI*N0 W\TZd| ^d|WdVdUd2JQ;2J^\2JQD[\2JENU\YX]Ts2aI^V>Q;NIQ;|FTcIA! K   W|&ccIQAbIQ }T_}}O}F/f)5A@l@_@T IRR&ȰRW&@^f}!e/wAFVA@_RZ&/BfNA@R_&'_A  l9Rb&_mO__ m_}լ^e}Ti (PQWRe&5 AU Q;QSQT5 JQ 5 J^| Q;QSQH6ԭ=Rh&(}Sj (0QWRj& Q;3 X_ARm&QAEQ F^}QE^0WQI3I3II>} * Rp&xTU& Rs&tTU p jA솪QCRv&$Ry&'Յ uR|&'TU% sR&%TU|H E I!?IR&R& R r%Us20y}%U؍20ATTUQTUQ?TW+ۡQ +ۢAb,$&!TQ o o uyUT@%zQ&T@AeTf! ^ Q;IQ; ?>g}yTzy To 5}.(d!Ah , !,aV T 1)&cgȻ T   g ySȻ AcIQ }I ;| TIQ;T>yyU QIWyU3cT3yU 3cT3Vv#mn$ ##   $" #  #" ##!#"%$$ $#$$#$WQTj h jT IQ;Q;>}B IR&R&I'BL  j h TR&E AQ;>}^TA)!B#! AR 6}Q Rhee}QQ?1xQ  1UT TkTl]a T \ f3XjTa&! z y z yUS Q a>dTIQLeh3 )i T  TQH TQT  QT=S    iz) S S V ( TS 4 z)w|  z)w% R)Te[)yR)QQ@)@vRT7)w 3UP=U@Tv)XlTi)~ )G 2@: 4))||:e|)@|)Fe)FIk kIfJKjKg LT_Wn!< !7 A3! Ah Bn L_ B .Tx!R m B I!Am jA&|FCIyRQ0:벅|"Q`:Iv|I| Q`Q@~^~Me~>)w~ yR @Q)y)EeW50U0fTz)gT TRV) iT TR(GS|Th IIlIIz}| gRI T zraIQ\II7B 109h TeTf U)/'dT'Uo  Ie''f| I Ie'f| I Ieu: Bg Y085Id5J e IQ e}fIQ ef}T_XXzg  8yT*QYǤ*7y*xzXxU @AefIYUI TI B3yTo Ig.eAAe WJ?K?XQyUeI I}[yUB   %   %% %% %$!"&&$&$! &%$!!$%!!#$!%!$%%$!$ T' .|xI)Q|kk IUT zTj I(+|IIQ)TzUj 1 55IU첋 5Ik o I I! 1 -$-5Io -IoR)yQ@@)g%2%Ah 倖 Q)yRR w w@2@2 eT1)Tf [JQR73 77 3S!S! Q*Tx./TQ*/"9Ơ9R ) [SS T1T\,V9ưaTTTeTQe1fTfT fTj/ &IQ>2t&t^}&t5o o Ta&tIb QQ@a}&taQ?5 aTQ56 0/c\T(!,dVȻQ*z&t5a"(7+4n21k/.-,+*)('&@#|\QVz^Qaz3}0/cT&tQ-z^RwsoTuST%z3}Q60/A6To vTo&tI$'*'D G #LR||Xv|Wv|Wo | Xo |YvZv53}00//V$LC F%OR | '&tdAM|UoTo55 aWQ 5oaQDXxVo To$*G  L R |WxWo Xo YxZx5Yb)ecw%16%Q( ֮ z@z    68U6 6 8 8 U[66 8 T STx./TQ*3 3 S"(/AR[#!UqSTqS#qTT#qSQTT#qSQT#qS@$GR$@Q$yR$e$@eG@0@@&@qQ`Q`'RE$yQ@$QQ^@Tqs Q*$@Q*UqR  $!!!%! FfIU Q*(yRcJILKף gLiJn j k| gJi jL_kIlKmSh A PdBA>&Aes)wId%16(`l.e:)PONMLKJIHG<dDEX^|[)VI쵏%sz|tQ)b|d)IQ.)JQ. )w)wQ:.|L3|H|D;'uS|;)wH'uUR|))w)IQ.S)I)IQ,Q)t'uS~C)w%'16%'Q) sTuYbTcTe)wIdm((<9=<61^ |0)VI쵖KbTe|>SǤ)IQ,)I}Te|)Ue|#S6Q.()I)w})I뤅})w*  ^UXWVc bV!QR%sz! 7U!%szQC  !7UoTa)IQ)wIQ@a}/Ta)I ^ Q0a}0)%a)wIgd_B I%A_B #Tr'RB T AhU P=} T y A A(G@(GQ Q(Fh IU g(TMeVf I JTe| K L4Tf| ( *)f Ie Kf I J K  L(GQ(yR4 6Ifr~2 ))))))))))'5Ƙ 5Ơ  5:Wa  }    T\,  HbQA z 5ƨ TQ@YQ X\  5` QAbTTab 5ư TdbTUd5  aTQU, 5Ɛ})wT%szTeW-b3AcI>>3Abs>럈}%s}}TQ(\Q('u%bRU %csvQ,U% %16Q,}U%16%sQ,%sz%sQ)|Q(Q))wQVzQ zSQcaQ bTab}3}0/dQ"T8*$Fl   +"'"#&!#&&!!#,%!!!!/RMP| RVC/URf%  @&.QcT_5.z02cTUbQUsTv1!VTWTT%Q ,0V-*TuTx8*Q'%T#'o*r*x-QTx'u',0Wף TzVg}UbWY XU  5ƨ  HcQU,TV,z  5ƘTT밣Ub5  cTU,ֺc 5Ƙ U݈R T 5R |\QU叚\, TaTUa5Rc%5Roh| 5R?^Q$ 受T\,  HQ@aQ?V: z 5Ơ Tb[ 5Ơ}HIVTCU? TdTeTUd5Ɛ |iM  HQE>c -Txu.Q &.*|j02띲cQTU>D@|@<|<''u|3+u$x|-'+ '+Ր*$'u|*냅'+*$*x|**x.de22d2"2U)2U*Q2'T)'"UV'UU/RMP| RVC/URe'-Q*b&.QcT_5.zTQUdbQTTzV}QTc.02QT5.dQ ?&.׭&w.T#)&Q &)*)tzU@02.Qe'TUTs.R$.Q *.yTy/V5Ƙ  Uc}|=TXe| GTeRy[yHi#7sb@_w~B"* **********  ** * *  ** **" *"   *&&&!&%&!!%!!!!&&%&$##&!$!QQ?c53QTURhee}!RSQQ?&2 &tI^}&2Eb^!V%.dTo TUo  / >|"|&2E^55^}#]Q:5eQ/ &I^}&t%|-8F T&W#|.&^}&IQ 3+" !N* ^#V*^#~W#"*"!9{PO*+F+~x C1æ*~2++V+^"~!ʤw*_^#Vz˜!"!1Ä"^#V+" *"*"^#V*"!:++æ͸y  >S))Ҩ =  |ẍ́ | ͳ zͳ D|Oͽ DM!>))}o|g = | x ͳ zyͳ ȯzW{_ |g}o|g}o|g}o͂!y!æzX!d![!æxWxG_ ʭ ^z @y ~ # xj í zX!zĴ z { zĴ z ʢ s#å d!#^ x… [!õ {a{ _zX!x d! [!æ!ya!^!s!v!æU!#È!-Multiplan (C) 1981 Microsoft !-4>HNNNNNNN[aaaaaaamm|uuu &&&288888IOOO[m|kqq]cc[aaaLRRx~ V- -    g!æj!æR!æm!æx ^#{X!d![! z  lcpE< 2 3  z h } L     N͸y2 yO!1 ^#V!: ++æ) õ xd P E ": _!Ä*s#r#*D|gs#r#6#xwæ~!V w*_^#VzJ !"!Ä"^#V+" "*"*"1yʦæa!x± ¿ ~ Aڱұ_#~:±#~±  ±~#^ ~#^ @_' _ð y= x ^#'  acS!~#"o&^$V*N#"*N#<F#"O* N#FæO* æ##O*  ^#V^#Væ5!5O*  ^#Væ*æ*^#Væ*^æ͸QAO ^#Væ͸dIO ^æSxTOææ"^#VæaÛaO* s#r[qòqO*  ^#Vs#ræ"æ*s#ræ*sæs#ræsæs#ræ~O* '  ' ~  K:Q!~C 23À #s#r" 9±:9±HP* d t *a~<*56*3æ#s#r9±:9±<ʸ ! ~<*56*3æұ*56<*9±<"y`2\~^#~+:,~AҴ<2\##~^#*?]ͺ~#Q.´~#*Yeͺ~´\_! ~`*:\ʏ@w#6:#6.#!] ~?ʰ# ¢à *à +~._>?*#>? # »>  !]6?!^ q "æ͸͸|g}æ͸)ֆO|æ͸;֐O|g}æ͸R֖O|æ͸ͭæ͸ͭæ͸ͭ=æ͸ͭ=æd ڮʮæ"W*~#2U~#2V"#:V?o&"[:Uo"Y*Wd *[*Wd *Y*Ẅ́ *N #"æ*[*#"J*^#V#"*Wd J:U_:V?W*"æ:V@ʺæ͸fֲOv͸t֥O* x/Gy/O ++#~2G+~2**̈́ *+++r+s*"xw+xw+r+s!w*_^#Vz*"!6!"*6*##^#V"^#V w# ұ! s#r!"fұ*7_&!x_}1*f#"f~, D*fæұyyx!w ••,ʙ6Ù,*7'&y!!!!!!!!æ!` ~"5>23y$!`  "5~#fo"77*7!^#Vr+s29#  [ #~+:h~AښҚ<##͟. #͟! w!w!!w#w#w~ !.*?>29#ß>29>?a_XOoyg*~| >2"5!"3!"9!{Uy##U~##N#Fo&͋ ) ^#Vzs*9! ~####~#*9! ~#fo*5!s#r*9! ~!V!*5!##s#r w#6*5!##~#foN#F*9! ^#V s#r w*5!^#V##~*9! ~###w#6*5!^#V##~!V*3!"?!*5!T] @*9! F##NNG^#VOp#6#q#6*5! ~g6++^#Vs*5! ~>(ʊ>-*?!w#"?!*5! ~=ʱ===ʱ=*?!*3!d  *5!^#V ѷI-I+~I*?!6$#"?!*5! 6#6*I3!" MP COD : w 8;"@_*@T9BK*@*A="@ "@xʕ; w#È;2>2>O!^#V#~ʦG~2ʦ~#0ʦ~#0Oæ:+w#w^0w#0K"j0w#0Z"j4*j̈́ }wsæ~# x͈æw# i͝ævvæͺævÅævFõ ͽo&%æ!{!w# 5! ^#V*9! N#F*?!*3!-)(II*3!{OT] Gw#<+*3!~(>)W> ̈́ *5! s++~!Vw*9! ^#Vz!V*5! ~##NGʧ=ʤyGOçAH*3!*5! N V*5! Ný  d!>2õ y2=!"7!!O!V#n/  2V"?!{2=!y2>!.æ:2:2æ:NҦAO>NO!{~w ʦw ʦ#3>A2b![{E æ"~æ!{E *~!{E >2æ͢õ Moyͼ!{!~:7>2>2>2:ʵ !~w!~Gʢ$/<Nwy+2z2!5!:]:2zҬ~4x~wì!~u+ fÉ€ >ʛHoG•yʬ!Fwx!z~P#7'w#¸~4~?+6!{'#!z~P47>O'#*:P!!=! *?!!_*?!A!:O!G:P!Ojw# Ly͔-60# Ly͔>:=!6.#Obw# U60# b60#:=!YO6.#ʄ60# xA!w# ‡b_:>!ʩ{ž6,#:O!w#6:P!w#/2P!#>2a21õ !9"C!AM"5!>+V+^=xgxѻҎyѻڒlhD͋ )";!^#V+zO*5!w!y~#fo ###s͈ 6#6!*;!*C~w!z>'?w#!zP~w#%B #ɷʀOT] >Of+Gw+VyWB~w+h e!>`{x:ʉG!OxG~G@¬yx@w6#w!{f+w+'.f!.!{t!s͙6 #~+w`!'w#7 4:G!~ʉOxG~2yl=m'w#¾~?w:ҹG4yOxG>_!{x  <!>2"9!} | goVN#y}:y>p+VN#^P*9!a|:##*9! ^#V r+s :##yB B *9! ^#V r+s"A! "?! ~´#~=*A! ~#~=*9! ^#V r+s:y   |- *?!s*A! *?!ͺ *?!͝*?!͈!͢|> $*?! 6#6#q#6*9! ʀ ʥ ><864:N#F! ~¡ #~¡ ! ͈s^#V͈ 6#6###r+s F#^{?O{*9!^##Vg {?_ {?_|!z?D5D!~/+x2͑ͫ+xGñ*~|͑!"~"zʺ!!u>^#V#DM<3`i Pf>@2 ya񇇇wew+zo*Î!"{"}|2z>>!!~FAҮ 1!  } I"!  error - old version of CP/M, CP/M 2.0 required. $  MICROSOFT MULTIPLAN  Version 1.06 (C) Copyright Microsoft Corporation 1981 $|2Q![" 2 .o&6 !,"* -2*q#p#<2* ~"-"F" ʓ" "!; " "w# ¦" " ¸""6 # " " "" # "q#p#:*<2* #|n"V GIFUNC GOFUNCNZ PRFUNC RCFUNCfV GSFUNCU RVFUNC  error - file MP.COD not found $ error - format error on file MP.COD $ error - invalid MP.COD file $ error - no data file present (MP80 or MP40) $ error - data file format error (MP80 or MP40) $ error - invalid data file (MP80 or MP40) $Cr GVFUNC FAFUNC GPFUNC UCFUNC !RRFUNC "WRFUNCW #CSFUNC  #""*.}G: .L#)#  error - terminal not installed $!.[#=R#^#V!.N#F#.E *.!.N#F#R!xʎ#~#~# {#*.!.^#V#".".*̈́ ".*.̈́ "\(*.!.^#V#". KB*\(*."\(*.$"\(*.*.͋'*.MD*.*.E !R!x6$ #^#V#*\(+r+s$x ^#V#*\(+r+s$2*:P$|+ !s~)~)~) ~)~)*.}P!*Ҙ$64#60Ý$68#60:!*͗)ʷ$+ **d $+ :A<2::Q!$!**E **)""**VNC (RZFUNC\ NULW SOH STX&W ETX4W EOTDX ENQ ACK BELY BS HT_ LF VT FFY CR SO SIX DLE @ B BsP 02/$J.q.0;1Z12222 333945666n7*1*a0z].6 #Q.*c0x.*k..k.m.+3"c0*e0r0ʲ.r0ʴ."e0*a0x0:1_ͮ0ek!.".".*0."e0+^~+%+ )*!*͗)/%, **d F%H, *!*͗)`%, )**"*:!*͗)ʃ%+ !#"***#**d %:!*͗)ʲ%+ ****#"*)* s#r**"***"*Ê%****̈́ "***"*****̈́ "*##"***!d 7&&  error - load address too low $"*"**."*"*****)**̈́ "*"*" **)**̈́ ""*6++"*****)"v+x+**s#r#**s#r#####**++"*:* '**#)*"*:!*͗)&+ ****s#r#"***s#r#**)";#ҋ.2.////5//v/H/Q/!///0`/~##02.~#". /_2:.=*..=/րO!. ^#V 0Gx/ %/*.~=/ 0*.^_2#"./*.4#4/*.~`w#~`w/ 0O 0^x/2 j/*.F#Np+q/ 0O 0Gy*.N/yw/*.~50T0*.w/-00!H0~/_2/# y´/X2/# y/~ù/-00!H0~ù/-00!I0~ù/*.~GOxw/ 0O 0Gy*.N/yw/*.~#".!.5*.~#".!H0dK0q K0#q#w M0:I0!J0Fu7x~# g0|}}o|g||GMzW!z>˜0>S))Ҡ0 =˜0|x怴gD|OzGKz*!*5&**s#r******d f'4'  intersecting segments- unable to load program $> ^(̈́ "\(!'[͋'**+.P #x ^#V#^#V*\(r+sË'_(c(k(r(v((((((((((((((((((((((((((((()) ))))$)()2)I)W)6);)>)B))))))))))))))))))f))))))*,,,,,,,,,,---- - -o)s)**x+*v+s#r#*z+s#r****)s#r#**s#r)*͢)!*"*** "r+*͇)ʷ(+ ):.*r+w##:.w****DM**""p+**)"t+x) *t+*p+s#r#"p+*t+:͇ pW!>))}o|g0 =0|0x怴gzy怲W00= *R1}1*1##"R1*1.111!+++-*R1}P1!"R1*V1.V1X1*1##^*1##V"1\&{Pʗ1(ʄ121Pҗ1>'21x0}21ç1>O21x0}21x0}21+0"1#"1*a0"1!x0"1*1.11111P*2.2 2.1"729232"c0:1I2w232"e0͓2*1*a0*c0r0*a0x0:1_ͮ0:1:1:12*!"****!Ä#s x~)**N#F#"*͗)x ͭ)ʗ)x ͺ)ʢ)ͱ))w#;)):*)!" *>=2** *~#" *!*)!* *)Fw p# )FCBRND $FCBSIZ&T \DEFF1 lDEFF2$Y TOPMEM DEFDMAHY RECSIZ)h BDOS WMP80 0DCFUNC -O ^2yO #à2:72G#~#Nʠ2#^#2212*a0*c0x0:1_î0"3"3"33"33"3*3r0"3_3xB3*3 ͪ3:1_*3"3*3"393:1_0*3"3*3"3xƒ3*3 *1*3"3*3"3ͪ3z3!3N#F*3"c0*3r03*1g0*13x ^#{02;13:1_0*a0y4 !4 ^#V.*4.4!4%4)4/454><.2#.0!5q#p*c0"5y25xo4{o4ye4385355*a0*c0x0:1_ͮ0}*c0"5"5=5ʚ4+"5#_:1{ "5¯4+"5 :54*5^͈5*5^͈54*5x.*5:54*5.*5x.#"e0*5:54*5.*5t5:515I515*5x0x.*5:5)5*5.t5*5#x.25#"5 +*a0*5x0:1_ͮ0*a0*5x0:1_ͮ0{"c0x *c0~_2w5x.͏5{0͓2*e0#"e0;1555555G0G4G4G02|6G }6X"6G*6}"6:|6_~66#####5##~2|6#N#~~m6X"6WY{?6e626j6C6}6C6"6"6"6_26 x5}6s65‘6 €6*6##"666  DB !+158<?BFJSY\`cfkt#*-69=BGMPTWZ^ahmu| &ISXy  +03=HKP[guy8DWcn}OS\jpzKX   "@JABCD   W !"6d.F2*?N w&r "&)-36@DGKNRagntqj}<y'( #@CFIMY\`fjmqtx{~<B'+=+29.7$?IMPTXfhjlnd3S 5 '*-0AENS\X(  '*-0AE  !ZeM* 1EE0`334J5:??5@LE N S >W -Z [ [ \ D] {^ ^ aazjkm1m1mmmwq{u77c84,9994 5 l6 5 6 5!;!b<!<!<!<"g="="%>"F>"F>#TA#A#4#'B#^C#G$I%K%#K%K&YG&*I&I&I'M(L)jN*`O*oP*P*P*P+Q+R+R+S+S,-U,U,U-(V.W.?X.\X.X/X/Y/Y/Y0rd1d1e2e2f2f2g2Dg 2g3g3h3Si3i3(j44n4p5q5p6As7t8[t9w:q{;<==R=R=>>>>>=?s@&@@A@BJC{D|E}E~E~!There are three ways to use HELP:!$1. You may press the "?" key at any$time during your work. The help#text that appears will apply to the#command you were using when you pressed "?". When you resume !(by pressing "R"), your work will!be exactly as you left it.'2. You may view information on special'topics right now by selectingone of the topics listed at thebottom of the screen. Type the!first letter of the  edesired word.!%3. You may familiarize yourself with% all the available information by "paging through the help text right"now. Select "Next" (press "N")"Previous" or "Start" page.%If you need information on a specific%#command, highlight the command name##on the proper menu (using the space#bar) and press "?". Applications %The following table provides an index%to the commands and help'topics which apply to common questions.'%If you need to: You should consult:%$enter d 8ata: *Value, Lock, Help$Keyboardenter text: Alpha use menus: / Help Commands enter arguments tocommands: ( Help Editing edit text or %formulas: n Help Editing, Edit,%Alpha do calculations: Help Formulas use mathematical or financial functions: )Help Formulasmove through the%sheet: Help Commands, Goto%'create headings: Format (Continuous),'Window Split Titles use data in inactive sheets: Xternaldefine or deletenammby reference. "MAX(list) largest of the values."#MIN(list) smallest of the values.##NPV(d,list) Returns the Net Present# Value of the cash flows represented  by the values. The first parameter d is the discountrate.%OR(list) Returns True if (and only% if) any argument values areTrue,otherwise returns False.%STDEV(list) sample standard deviation%of the values.SUM(list) sum of the values.The other functions have fixedarguments as shown:!ABS(n) absolute!es for cells: Names use names: \ Help Formulas change the formatof numbers: Formatre-arrange sheetcontents: Copy, Delete, Insert, Move replicate dataor formulas: Copy!clear the sheet: Transfer Clear! save and load files: !Transfer show file directory: Transfer Load increase speed: Option recalc alphabetize: SortEDITING%The editing commands give you an easy%!way to use what is already on the!&screen, so you do l value of the! number n. 'ATAN(n) arctangent of n in radians.''COS(n) cosine of the angle n given' in radians. "COLUMN() current column number."'DOLLAR(n) the text string showing the'value n in $ format.EXP(n) e to the power n.$FALSE() the logical value False.$$FIXED(n,m) the text containing n in$Fix format with m decimals. m=0 is the same as Intformat.#IF(f,a,b) Returns a if f is True,#otherwise returns b.'INDEX(vector,n) Returns the nth element'in theess typing. You can&!use the editing commands any time!$you are entering or changing values,$text, or formulas.&If you need to: Here is what you do:&Delete proposedresponse: Just type the replacement. Multiplan will auto-matically delete theproposed response.Append to proposed#response: To expand proposed#cell references, justtype acolon (:) or otheroperator; in otherinstances pressthe Character or WordRight key and typethe rest of the tB vector.$INDEX(area,n,m) Returns the value in$the nth row and mth columnof the rectangular area.'INT(n) the largest integer that is'less than or equal to n.%ISERROR(n) Returns True if (and only%if) n is an error value.%ISNA(n) Returns True if (and only%if) n is an #N/A value.'LEN(t) the length of the text t in' characters. &LN(n) the base e logarithm of n.&'LOG10(n) the base 10 logarithm of n.''LOOKUP(n,area) works as follows: If the' area is higher than widext.#Insert new text: Type the text. It#will be inserted in front of the highlighted cursor.Move the cursor ifnecessary beforetyping."Delete some text: Use backspace to"delete in front of the cursor. Use the delete key todelete what is highlighted. Move the highlight asnecessary before deletion. %Replace some text:Just delete the old%text and type thenew.$Move highlight: Use Character/Word$Left/Right keys (seeunder Keyboard).FORMULAS"Formula e, n will #be looked up in the first column of#the area. If n is less than the$first cell in the first row, #N/A is$#returned. Otherwise Multiplan scans#$for the row that in the first column$!contains the greatest number less!&or equal to n. The result is the value&in the last column of the$same row. For areas wider than high,$"rows and columns are interchanged."#MID(t,n,m) starting at position n,# take m characters of the text value t. MOD(n,m) the remainder of the integer divisios are recipes for producing"values. The table of functions%that may be used in formulas is shown%below. Other parts of formulas"are described following the table."$The following functions operate on a$set of values either given asarguments or contained in areasreferenced by the arguments:%AND(list) Returns True if (and only% if) all values are True, otherwise returns False.&AVERAGE(list) = SUM(list)/COUNT(list).&%COUNT(list) number of values that are% given explicitly or nn n/m.!NA() returns the #N/A (not!available) value.NOT(f) the opposite of theTrue/False flag f.PI() the value of pi. (3.1416...) !REPT(t,n) the text t repeated n!times."ROUND(n,m) n rounded to m decimal"places.#ROW() the current row number.##SIGN(n) Returns -1 if n<0, 0 if#n=0, 1 otherwise.#SIN(n) the sine of the angle n#specified in radians.!SQRT(n) the square root of n.!'TAN(n) the tangent of the angle n.'#TRUE() the logE to columns n through m%(short for Cn:Cm.)%Relative references are measured from% the cell containing the formula. 'They can be entered using the direction'keys. The forms are:&R[-n], R[+n] are the nth row above and&below the active cell.$C[-n], C[+n] are the nth column left$and right of the active cell.(the + sign may be omitted)!R is the row containing the!active cell (i.e., R[0]).$C is the column containing the$active cell (i.e., C[0]).#and combinations of tical value True.#'VALUE(t) The text t must contain the'representation of a numeric constant. The value of thatconstant is returned.%Formulas are made by combining values%$(text and numbers) and references to$%other cells with the usual arithmetic%operations and other functions.!Numeric values are stored with 14!"digits of precision (mantissa) and"&a decimal exponent ranging from -64 to&+62. Numeric constants may be typed as integers (123), decimal &fractions (123.001), or in exp he above, e.g.#R[-2]C.'Names may be defined to be any absolute'"reference (with the Name command)."'A name may be used anywhere an absolute'reference can be used. Names must start with a letter and may %contain letters, digits, periods, and%!underline characters. They may be!%entered by pressing the Reference key%$(@) and stepping through the list of$#defined names using the directional#keys.The operators in formulas are:+ arithmetic addition- subtraction* onential&'notation (123.001E3). The exponent sign'(E) may be typed in upper or$lower case. Percentages may be typed$#in, followed by percent sign (12%).#%Text-valued constants are enclosed in% double quotes (the constants may not themselves contain quotes).'Multiplan may produce error values that'will propagate through theoperations. These are:&#N/A not available: a special value&that may be created using theNA() function and that will bepropagated by arithmetic oper/ multiplication/ division%^ exponentiation. Calculated by%the rule: a^b = exp(ln(a)*b)for exponents that are notintegral numbers.% percent, same as /100&& text string concatenation. The&formula "$"&"1.00" will yield:"$1.00"."<, <=, =, >=, >, <> are comparison"operators: less, less orequal, equal, greater or equal,greater, and not equal.To be used for comparing numbers only. &The operators require single values as&operands. If presentedations. ##NAME? result of an undefined name# reference. %#NUM! result of overflow or illegal%use of arithmetic functione.g. sqrt(-1).&#DIV/0! result of an attempt to divide&by 0.##REF! relative reference reaching#outside the sheet or referenceto a deleted area.'#NULL! intersection of disjoint areas,' e.g. R1 R2. !#VALUE! use of text value where a!number is needed or vice versa.Use of references in illegalcontexts when a value isneeded.%Absolute references are spe  with a#vector (a rectangular collection of# cells of width or height =1), it $will be automatically intersected by$$the current row or column, whichever$"is perpendicular to the vector, to"obtain a single value.%The following three operators operate%on groups (sets) of cells:&(space) intersection of two areas, the&collection of cells thatbelong to both operands.%, union of the two areas; cells%that belong to either operand.%: range operator: the smallest%rectancial names%$that incorporate absolute row and/or$#column numbers and that are used to##refer to particular cells or groups#$of cells. A reference may be used to$!get the value from the referenced! cell. Absolute references may be &entered simply by using direction keys&"followed by the Reference key (@)."'RnCm (e.g., R2C3) refers to a single'cell.Rn refers to all of row n."Cn refers to all of column n.""Rn:m refers to rows n through m"(short for Rn:Rm.)%Cn:m refers ?gular collection ofcells that includes all cellsin either operand.For example, R1C1:R2C2 is therectangle with R1C1 as itsupper left corner and R2C2 asits lower right corner.COMMAND OVERVIEW%The Multiplan worksheet consists of a%"grid of up to 63 columns in width,"&and 255 rows in length. The screen has&one or more "windows" into"the worksheet, and an area showing"#command, message, and status lines.#'The message line suggests the action to'be taken or explains errors wUf specified cell(s).&The parameter must describe an area of&!the sheet. When an error message!#occurs, check to see that all names#$have been defined and also check the$use'of parentheses and operators. For more'information about the use of parentheses and operators select "Formulas" (F) on the Help Menu. COPY#Replicates cell contents into other#cells. A variety of sources anddestinations is provided. The from: and to: area must have compatible shape. COPY Fhen they occur. The status line "displays coordinates of the active"!cell, its contents, percentage of!&storage remaining, and worksheet name.&'There is a highlighted "active cell" on' the worksheet. The highlight can be moved around by pressing the&direction keys. The same keys are also&"used for scrolling the contents of"$windows. The Home key may be used to$go to row 1 column 1 quickly.#The command menu offers a choice of#$commands. To get going, you need to:$"1. Select an activeROM 'Copies contents and format of a cell or'#group of cells to another location.#Parameters are:&1. Description of a cell or the group&of cells to be copied.!2. Area to be filled with single!source cell, or upper left cell where the source group should be !copied. Copy from a source into a!similarly shaped target area isalso permitted. COPY RIGHT &Used to make a row of identical values&or formulas. Parameters are:&1. Number of copies to be made to the&righE cell. The"direction keys may be used. Thesame keys also scroll theworksheet in the window.'2. Select a command. There are two'ways to do this. You canmove the highlight to a commandword using the spaceor backspace keys and thenpress RETURN. Or, type thefirst letter of the commandword.A new and more specific commandmenu or the parameterfields with the proposedresponses will be displayed.%3. Specify the parameters of the%command. The TAB key may beust of the "source".Total number of identical cellswill be this number +1 (the original). #2. This parameter (the "source" of# copying), is usually left as the !active cell which is the proposed!response. A vertical group#("vector") may be copied instead to#create a matrix. COPY DOWN $Used to fill a column with identical$$values or formulas. Parameters are:$%1. Number of copies to be made below% the "source". #2. This is the source of the copy,#usually left aIed to move from field tofield. See "Editing" for other useful tips. %4. You may use the Cancel key at%any time to return to the mainmenu.$5. Press RETURN. The command is$now carried out.%Press "?" for additional information.%ALPHA Used to enter or edit alpha text terminated by RETURN. An empty'string of characters may not be entered'with this command. ALPHA/VALUE If an Alpha or Value command isterminated with a direction key'or any other key that mo s the active cell!which is the proposed response. A!horizontal group ("vector")may be copied instead to form amatrix.DELETEDeletes all or parts of rows or"columns. Space is closed up, hence""cells to the right of or below the"deleted area will move. DELETE ROWS $Deletes all or part of row(s); space$#will be closed up; formulas, names,#and references are adjusted.$To delete the active row, just press$RETURN.&Effects of deletions on references and&formulas, as well?ves the cursor,'Multiplan will respond!with ALPHA/VALUE, ready to accept!!another alpha or value entry. The!$first character typed will determine$the type of entry. The'characters 0 through 9, =, +, -, (, and'" select VALUE; allother characters select ALPHA.'This process may be repeated to enter a'sequence of text or values.!If the text is too long, an error!#message will result. Note also that#%double quotes may not be used in text%strings.BLANK Blanks out contents o  as on'structures of rows and columns, must be'carefully considered.The parameters are: 1. Number of rows to be deleted 2. First row to be deleted$3.4.These two parameters are usually$"left as proposed. They may be used"#to limit the deletion to a range of#columns. Cells below the range will move up to occupy the deleted space.DELETE COLUMNS'Deletes all or part of column(s); space'will be closed up; formulas,#names, and references are adjusted.#Parameters are:# 2 decimalplaces (negative numbersenclosed in parentheses).$* (Bar Graph) Displays as many$asterisks as the value of thenumber.%% (percent) Displays the number%times 100 followed by a percentsign.- Do not change format.'4. Number of decimals. This is used in'!the Exp, Fix and % formats above.! FORMAT WIDTH #Sets width (3 to 32 characters) for# specified column(s). Multiplan's 'initial default width is 10 characters.'#Text (words) are cut off a1. Number of columns to be deleted#2. First column to be deleted$3.4.These two parameters are usually$left as proposed. They may beused to limit the deletion to arange of rows. Cells to the!right of the range will move left!to occupy the deleted space.EDIT'Puts contents of active cell on command'line for editing. Edited'value is reassigned to cell when RETURN' is pressed. &When editing formulas, check carefully&before pressing RETURN.#Use the Alpha command to edit tet edge of#&column, but cell content is preserved.&'Widen column to display entire text, or'use Format Cells (Continuous%format) to run text into next column.%$Numbers too wide to be displayed are$indicated by # signs. Widen#column(s) to display entire number.#Parameters are:$1. Width of column in characters. A$"D" will cause the columns to#use the "default width" (See Format#Default width).#2.3.Range of columns to be changed.#FORMAT DEFAULT%Used to set formatting fxt.#Press "E" now to see section onEditing.FORMAT$Presents four options for formatting$cells as described below:FORMAT DEFAULT CELLS'Used to change the format for all cells'that have the "Def"%property. The desired format (as well%as alignment) is described%under the Format Cells command below.% FORMAT CELLS $Sets a specific format and alignment$for one or more cells. Just'typing "FC" shows the properties of the'active cell. Parameters are: 1. CelHor cells with%"Default" formatting, width&for columns that have "Default" width,&!and for other formatting options.!FORMAT DEFAULT WIDTH#Used to change the width of columns#that have "Default" width.$Initially all columns have "Default"$width.FORMAT OPTIONS&"comma" option: when selected, numbers&will be displayed with#commas separating every third digit#before the decimalpoint. This affects only fixed,integer, percent and dollarformats."formulas" option: l or group of cells to be formatted. 2. Alignment. Choices are:"Def Aligns as specified in the"Format Default command.Ctr Centers cell entries#Gen (General) Aligns text left,#numbers right."Left Aligns cell entries to the"left."Right Aligns cell entries to the"right. - Do not change alignment. 3. Format. Choices are:"Def Format as specified in the"Format Default command."Cont Continues long text across"column border, if next cell the formulasthemselves will be shown, notthe numerical values of theformulas. All field widths will be automatically doubled to accommodate the formulaswhen this option is turned on.GOTO%Used to move cell pointer over sheet.% GOTO ROW-COL Moves cell pointer directly to!specified row and column. If cell!'requested is already visible, window is' not moved. "Otherwise window is shifted to the"specified cell. GOTO NAME "Moves cell pointer directly to the" upperKempty and also formatted"Cont".&Exp (Scientific notation) Displays&numbers as a decimal times apower of ten. Number of digitsas specified in "# of decimals." %Fix Rounds to and displays number%of decimals specifiedin "# of decimals" field.%Gen (General) Displays numbers in%the most appropriate formconsidering the size of thecell and of the number. Int Numbers will be shown as integers after rounding.%$ Displays numbers with leading%dollar sign and  left corner of named area. &The direction keys may be used to step&through the directory of names. GOTO WINDOW 'Moves worksheet so that the active cell'is at the upper left cornerof the designated window.INSERT'Used to insert new blank cells into the'sheet. Existing cells may be%moved to make room for the new cells.% INSERT ROW $Inserts entire blank rows across the$"sheet, or portions of rows between"#specified columns. Rows below added#!row(s) are moved down. Refer8 adjusted, as%are definitions of names.Parameters are:1. First row to be moved.&2. Moved rows will appear in front of&the contents of this row.$3. Number of consecutive rows to be$moved. MOVE COLUMN %Moves whole columns from one place to% another in the sheet. References %affected by the move are adjusted, as%are definitions of names.Parameters are:1. First column to be moved.$2. Moved columns will appear to the$left of the contents of thiscolumn.'3. Nences!$affected by insertions are adjusted.$Name definitions are adjustedaccordingly. Parameters are:"1. Number of new blank rows to be" inserted. "2. The new space will be inserted" before the contents of this row. %3.4.These parameters are usually left%with the proposed values.They may be used to limit theinsertion to between thespecified columns. INSERT COLUMN 'Inserts entire columns in the sheet, or'!partial columns between specified!'rows. Columns to the right of ~umber of consecutive columns to be'moved.NAME&Used to name a cell or group of cells.&!The names may be used in formulas!&or in other commands. The name command&is also useful for inspectingthe existing definitions. Theparameters are:"1. Name to be defined. Names must"start with a letter and may!contain letters, digits, periods,!and underline characters. To review names already defined, "use directional keys (right arrow:"next name, left arrow: previousname).&2. the space'inserted move right. References$affected by insertions are adjusted.$Name definitions are adjustedaccordingly. Parameters are:%1. Number of new blank columns to be%created.%2. The new space will be inserted to% the left of the contents of this column.%3.4.These parameters are usually left%with the proposed values.They may be used to limit theinsertion to between thespecified rows.LOCK'Used to protect specified cell contents'and formulas from'uninten Definition of the cell(s) that the&name is to refer to. Absolute#references may be entered by use of#direction keys. Groups of cells are formed using a colon (:) for ""ranges" or by using comma (,) for" "unions". OPTIONS$This command lets you turn on or off$various optional features of Multiplan. #"recalc" option: controls how often#formula recalculations areperformed. "Yes" causes recalculation whenever a cell is changed.!This may take some time on a busy!sheet. To g}tional change by other commands.'The Lock Cells commandcan also unlock cells. In a worksheet the next unlocked non-blank cell can be easilylocated by a special key (see Keyboard). 'Note that values imported from external'sheets may be unlocked onlyby the eXternal Copy command. LOCK CELLS #Used to protect specific cells from#%unintentional change. Parameters are:%'1. Cell or group of cells to be locked' (unlocked). "2. Shows current state (Locked or"!Unlocked) of current c Cet quicker response turn the option off and press the Recalc key (!)!when you desire to see up-to-date!results.#"mute" option: silences the audible#alarm.!"iteration" option: when "Yes" is!selected, the recalculation of#worksheets with circular references#will be repeated until a completion test (see below) is satisfied. The following special "functions may be used in iterative" worksheets: #DELTA(): returns the maximum change#in the values of cells fromone iteration to6ell. Use to!specify desired state. LOCK FORMULAS $If confirmed, all cells in the sheet$"that contain text or formulas will"#be locked. This may be a convenient#first step in creating a locked&sheet. You may, however, wish to leave&certain text strings unlockedor lock some important numbers.MOVE'Used to move whole rows or columns from'one place to another.MOVE ROW"Moves whole rows from one place to" another in the sheet. References %affected by the move are  another. Byreferring to DELTA() from theworksheet more than once themaximum change in a particularportion of the worksheet may be calculated. ITERCNT(): returns #N/A duringnormal recalculation and the!iteration count (starting with 1)!during iteration.&"completion test at" option: specifies&the location of a formula#for completion test. Iteration will#end when this formula evaluates to TRUE. If the option field is empty, the formulaDELTA()<0.001 will be used.PRIting "Yes""for the "formulas" option."4. The printing of row and column"numbers may be requested or suppressed. QUIT&Ends Multiplan session when confirmed.&This command will not save the'active sheet. Use Transfer Save to save'worksheet before using Quit.SORT&You can sort any part of the worksheet& using this command. The sort key %may be any designated column. Rows of%%the worksheet will be exchanged until%'the values in the Key column are in the'selected order. Both tGNT$Used for printing of worksheets. The$%menu command Printer starts printing.%&File prints printable output on a disk&file; Margins sets margins to%be used; and Options defines the part%&of the worksheet to be printed, allows&&insertion of a control line at the top&!of the output, or prints formulas!instead of their values.&Time required to print depends on size&of the sheet and the speed of the printer. &As many columns are printed across the&"page as will fit. Leftover coluext and'numeric values are allowed. Text values'will be ordered before any!numerical values. Empty cells are!always sorted last.$To create multi-level sorts, sort on$the last key first, and proceed'backward sorting on the other keys. The'parameters are:1. The key column number.%2.3.These parameters can restrict the%sort to a range of consecutiverows.$4. Sort order. ">" means ascending,$"<" means descending values.TRANSFER&The subcommands of TRANSFER affect the&3mns"$begin a new page. When all rows have$been printed, the next set of!columns will begin on a new page.! PRINT Printer Starts printing on the printer. PRINT FILE %Directs printed output to a disk file%instead of a printer."If a file of the same name exists," Multiplan will ask permission to #replace it. Output to the file will#start immediately.%The parameter is the name of the file%!to which output is to be printed.! PRINT MARGINS 'Used to set page dimensions entire active worksheet orsaved worksheets. TRANSFER LOAD 'Loads a worksheet from a disk file. The'parameter is the "filename" of!the file. Spell and punctuate the! filename exactly as it was saved with Transfer Save.!The direction keys may be used to!!display the file directory on the!screen#and then select a file by pointing.#'Data may be automatically copied to the'"loaded sheet from other supporting"!sheets. See XTERNAL COPY for more! information. 'Use TRANSFER >for printed'output. After the RETURN key%is pressed, Multiplan will resume the%&Print command for the selection of the&#Printer or the File to be used. The#parameters are:%1. Left margin (in print positions.)% 2. Top margin (in print lines.) '3. Width of printable area on the page'(in print positions.)#4. Height of printable area on the#page (in print lines.)%5. Height of pages (in print lines.)% PRINT OPTIONS %The options allow part of a worksheet%to be printed, the inse POPTIONS to specify special'file formats. All#special format files will be merged#"into the active sheet, rather than"loaded as a whole. The filename must conform to the %general rules of the Operating System%'of the machine you use. Only worksheets'saved in Multiplan may beloaded by TRANSFER LOAD.'To create new worksheets, there must be'space available on the disk and%the disk must not be write-protected.% TRANSFER SAVE %Saves a copy of the current worksheet%&as a disk f rtion of$a control line at the top of output,$#and printing of formulas instead of#%their values. After RETURN, Multiplan%!will resume the Print command for!'the selection of the Printer or File to'be used. The options are:"1. Description of the rectangular"group of cells that is to be!printed (if not the whole sheet.)!%2. Arbitrary text may be sent to the%printer using this parameter.'3. A printout of the formulas (instead'of the values of the formulas)"can be obtained by selec  file from which it can later&be loaded with Transfer Load.'The parameter is the "filename". If the'filename already exists, the#message, "Overwrite existing file?"#$will ask for confirmation to replace$!that file with the new worksheet.!'See TRANSFER OPTIONS for information on'special file formats.TRANSFER CLEAR After confirmation, the sheet is cleared. Columns are set to 10&characters wide, default format is set& to General. "Sheet name is set to TEMP, with no"dependIT HORIZONTAL&Splits active window across the screen&at the row indicated. The new&window will occupy the space below the&row selected, and may be#linked with the original window for#synchronized scrolling in thehorizontal direction.WINDOW SPLIT VERTICAL&Splits active window vertically at the& column specified. The new window &may be linked with original window for&synchronized scrollingin the vertical direction.WINDOW SPLIT TITLES Splits active window into 2 oing or supporting sheets.TRANSFER DELETE#Removes worksheet from file system.#TRANSFER OPTIONS%Modifies the context of the following%TRANSFER operations:!The setup argument may be used to!#specify the directory or disk drive#for saving and loading files.&The file "mode" may be used to set the&desired file format for the#following Loads and Stores. This is# important for data exchange with 'other programs. "Normal mode" should be'selected for all files thatare no:r 4 windows which scroll together.#This command is used to hold column#titles or row headings in place$while cells are scrolled. Parameters$are:%1. Number of rows to become a window%across the top of the screen.!2. Number of columns to become a!!window at the left of the screen.!'The remaining display space becomes the'!active window which is linked for!#horizontal movement with the window##above it, and for vertical movement#with the window to its left.Note that the accLt used for interchange.#"Symbolic" mode is used for loading#and saving of worksheets in the%symbolic SYLK format. In "Other" mode%'VisiCalc (TM VisiCorp) format files may' be loaded. Great care should be taken to%distinguish files that have different%formats!TRANSFER RENAME&Renames active sheet. Offers to update&%references to the sheet on supporting%&and depending sheets. The parameter is&the desired new name.VALUE'Can be used to enter a value or formula'in the ac\eptance of the"proposed parameters will split the"'titles so that the current cell will be'at the upper left corner of&of the data area in the active window.& WINDOW BORDER $Used to border or to remove a border$from a window.#Note that borders occupy one screen#$position on each side of the window,$#thus reducing the display area by 2#"screen lines and 2 screen columns." WINDOW CLOSE #This command removes the designated#window from the screen. WINDOW LINK 'This commtive cell. The#command is completed when RETURN is#pressed. A directional key or#any other key that moves the cursor#will also terminate the value%and move to the appropriate new cell.%Multiplan will respond!with ALPHA/VALUE, ready to accept!another alpha or value entry.#This feature is described under the#Alpha command.&The following simplifications are also& available: $Numbers may be entered directly. The$Value command is entered auto-#matically when the leading digit is and can set or break the links'for synchronized scrolling.Parameters are:%1.2.These parameters define a pair of%windows. In most cases theproposed values are acceptable.Note that linking of windowsthat are not "neighbors" is not permitted. #3. The parameter shows the current#!state of linking, and may be used!to change the linking. The direction of linking follows the direction of window splits.XTERNAL!This group of commands deals with!!references to inactive (exter#typed.%The characters =, +, -, (, and " will%also start the Value command.#At the beginning of the formula and#after entering an operator, a&relative reference can be entered just&by pressing the direction keys'to move the highlight to the cell to be'referenced. The reference&may be changed to Absolute by pressing&the Reference (@) key.WINDOW%This command is used to control size,%!number, and display of "windows",!%which are subdivisions of the screen.%WINDOW SPL nal)! worksheets. XTERNAL COPY %Copies data from an external sheet to%the active sheet. Optionally,#a permanent link may be established# between the active sheet and the $source of the data. The Name command$may be used immediately after!the copy to create a name for the!target area that is related tothe name of the source%("filename.areaname".) The parameters%are:&1. External sheet name. The direction& keys may be used to step through names of the supporting sheets.! in use in" existing links. All copies using this name - whether a real sheet name or just a formal or "dummy" #name - will henceforth refer to the#first parameter.KEYBOARD'Below are standard keys for CP/M-80 and'$MP/M Multiplan. If you have another$%terminal and some of these keys don't%work, see the "Keys for Other Terminals" &below and the chart of exceptions that&applies to your terminal.&If your terminal has up,down,left, and&$right arrow keys, they move the cell$%point2. Name of the source area to be!!copied on the external sheet. The! direction keys will step through !the permanently copied names from!thesheet defined by the first parameter. &3. Target area on the active sheet. A&permanent link (see below) may be broken by deleting the target area definition. 4. Link option. If "No" link is "selected, the copy will be carried"#out and the command will terminate.#!If "Yes" is selected, a permanent! link is established as described below.&ter. If your terminal has a home%'key, it moves the cell pointer to R1C1.'MOVE THE CELL POINTERUp Direction kCTRL-EDown Direction CTRL-XLeft Direction CTRL-SRight Direction CTRL-DNext Window H CTRL-W, ;Next Unlocked Cell CTRL-FSCROLL THE WINDOW$Page Up CTRL-R Up-Direction$&Page Down !CTRL-R Down-Direction&&Page Left FCTRL-R Left-Direction&'Page Right CTRL-R Right-Direction'Home CTRL-QEnd CTLinked copies have a number of special&properties: a permanent record#of the copy parameters will be kept#!with the active sheet. Every time!%the sheet is loaded, the copying will%be repeated so that the most$up-to-date information on the source$"sheets - the "supporting" sheets -"$can be imported to the active sheet.$$Whenever sheet relationships change,$$the supporting sheets may be updated$%with a "receipt" showing which sheets%$"depend" on them. These lists may be$ inspected using the X.RL-ZSELECT AND EXECUTE COMMANDSCancel 9CTRL-C"Execute command RETURN, CRTL-M"Select next SPACE BAR item on menu %Select previous BACKSPACE, CTRL-H% item on menu 'Tab to next field TAB, CTRL-I, CTRL-A' in command Help ?Recalculate ( !EDIT CELLS AND COMMANDS"Delete DELETE, CTRL-Y"%Backspace Y BACKSPACE, CTRL-H%Character Right CTRL-LCharacter Left CTRL-KWord Right CTRL-PWord LefTERNAL LIST command described below.'The imported data will be locked on the'sheets. When a cell containing!imported data is highlighted, the!status line will show:%[source sheet name source area name]%%Linking may be changed or broken only%by redefining the target area&or deleting the target area definition&in the XTERNAL COPY command. XTERNAL LIST $The relationships between the active$"worksheet and other worksheets are" displayed: %"Sheets supporting" shows she t  CTRL-OReference @KEYS FOR OTHER TERMINALS%Some keys differ from the chart above%on'the following terminals. See below for''exceptions that apply to your terminal.'Apple II and IIe Apple III TRS-80 Model II Kaypro II Xerox 820 and 820 model IIVector Graphic Vector 4 Harris MFT NorthStar ADVANTAGEZenith/Heath h19 Zenith Z-29 ANSIADM 3a/5/21/31/42Televideo 910/912/920Televideo 910+Televideo 925/950/TS-802 DEC VT-100 Datavueet names%"and possibly a substitute name for"%worksheets which support (export data%to) the active sheet;%"Sheets depending on" lists filenames%!of sheets which depend on (import! data from) the active worksheet. &Press any key to return to the display&of the active sheet. XTERNAL USE 'Sets a substitute name for a supporting'%sheet using the following parameters:%#1. New sheet name to be used. This# name should not be used in other substitutions."2. Sheet name currently  132/c Soroc IQ-150 APPLE II, IIe and IIISelect previousitemi on menu CTRL-TCharacter Right CTRL-BCharacter Left CTRL-VBackspace } CTRL-T#Special Characters (Apple II only):#[ (left bracket) CTRL-N] (right bracket) SHIFT-M^ (exponent) xSHIFT-N\ (back slash) CTRL-LXEROX 820 OR 820-IITab to next field TAB, CTRL-I in command Cancel ESCHelp HELP KAYPRO II Cancel  ge Down  f2Page Left  f3Page Right f4End f5Cancel ERASERecalculate f6Help 7HELPALL ANSI STANDARD TERMINALSUp Direction SHIFT +Keypad Up-ArrowDown Direction SHIFT +Keypad Down-ArrowLeft Direction SHIFT +Keypad Left-ArrowRight Direction SHIFT +Keypad Right-Arrow $Character Right SHIFT + Keypad 9$$Character Left SHIFT + Keypad 7$$Word Right   ~ ESC, CTRL-CSelect previousitem on menu CTRL-UCharacter Right CTRL-BCharacter Left CTRL-VBackspace B CTRL-UTRS-80 MODEL IINext Unlocked Cell F2%Page Up  CTRL-R + Up Arrow%'Page Down CTRL-R + Down Arrow''Page Left ! CTRL-R + Left Arrow'"Page Right CTRL-R + Right"ArrowHome -F1VECTOR GRAPHIC VECTOR 4Next Window CTRL-B, ;Page Up C1Page Down C2Page Left   SHIFT + Keypad 3$$Word Left P SHIFT + Keypad 1$ADM-3A/5/21/31/42,TELEVIDEO 910/912/920Backspace d CTRL-UCharacter Left CTRL-VCharacter Right CTRL-BTELEVIDEO 910+Backspace k CTRL-BCharacter Left CTRL-UCharacter Right CTRL-\TELEVIDEO 925/950/TS-802Cancel F1Help F11Backspace U CTRL-BCharacter Left F2, CTRL-UCharacter Right F3, CTRL-JWord Left  F4W C3Page Right C4End CTRL-V HARRIS MFT Select previousitem on menu BACKTAB Select next item on menu SPACE BARExecute Command ENTERDelete  DELBackspace BACKTABCharacter Right CTRL-UCharacter Left CTRL-YNORTHSTAR ADVANTAGEUp Direction SHIFT + Up-Arrow!Down Direction SHIFT + Down-Arrow!!Left Direction SHIFT + Left-Arrow!"Right DirectionSHIFT + Right-Arrow"'Page Up SHIFT + Upper-Left-Arrow''l ord Right WF5 DEC VT-100 Character Left PF 1Character Right PF 2Word Left  PF 3Word Right (PF 4 DATAVUE 132/C Next Window & F6Next Unlocked Cell F7Page Up  F13Page Down  F14Page Left  F12Page Right F15Cancel escHelp F8Recalculate F10Delete F3Backspace @ CTRL-UCharacter Right F4Character Left F2WordPage Down SHIFT + Lower-Left-Arrow'Page Left SHIFT +Lower-Right-ArrowPage Right SHIFT +Upper-Right-ArrowDelete CTRL-YCharacter RightCTRL-BCharacter Left CTRL-VHEATH/ZENITH H19%Use the SHIFT key to enter numbers on% the keypad. $Next Unlocked Cell CTRL-F, LINEFEED$"Character Right DC (keypad 9)""Character Left IC (keypad 7)""Word Right DL (keypad 3)""Word Left  IL (keypad 1)"Reference  WHITEPage Up   Right F5Word Left  F1Reference $ F9 SOROC IQ-150 Backspace O CTRL-UCharacter Right CTRL-BCharacter Left CTRL-V-------!e f1Page Down  f2Page Left  f3Page Right f4End f5Cancel ERASERecalculate BLUEHelp RED ZENITH Z-29 %Use the SHIFT key to enter numbers on% the keypad. $Next Unlocked Cell CTRL-F, LINEFEED$"Character Right DC (keypad 9)""Character Left IC (keypad 7)""Word Right DL (keypad 3)""Word Left  IL (keypad 1)"Reference f7Page Up  f1Pa 7 2[]dpP`rbf>864(+-=>^/*&:<,<<> VDCGLR-DCEFG$*%-!$$!!$$'()d' TEMPU F6B >* MP.HLPnID;PMPF;K;E;F;WF;F;R;C;A;CNN;N;ENU;F;LNE;F;S;E;NL;NB;;Y;X;P;S;R;C;K;E;G;D;K;F0&&&&&&ERRORCHOOSELOOKUPNAINDEXLOOKUP w@CBH%ACt#`1D' 1i@DDc5W@XB1#`uCrqDQx QbqC32&AbP6Qyh#p$As#@8PA!x5VBGRV8sdft CB)AWP##@PAA A1b'v`A#XP@B@cfw#gXdF!6t9V 32h5=AiFuA1?yi&&$VdYd u"Apyc&yI@ABV#sA$!5b71@xS3E%5q?P'8CPe@?vsq$9ATyg @IPS(Wiu@333332%A    !#%  .5>   |}#~*-26 ; @ $E IRNWN!\ekr    . ; D V _   "&')!,ML-1577:= =>CGJ*G0G7H?JKLLR UYY [!^!_ ac P'AP'B "CP'FP'G! C#P'H#P'I'P'G*P'J,P'G.!C0K0@L0r(@M0u(@N0&x(O0P'P0P'U4 C:P'V:P'W>#XA %YAEAZA#CA#YA!#[A#Sa&o !o ((78f:7x7.,$,(R*-b#NULL!#DIV/0!#VALUE!#REF!#NAME?#NUM!#N/A65YRCrc+-^*/&:<>=0123456789-"+(=;k UA?#CA#YA!#RA#SACA@\A~(@]A&(#^AP'_A@`C.r( @aC( $CC!#QC!#bC!CC#CC#dC!#[C#SC?#CC#eC!#RC#SCCC@fC(#CC!#gC!#hC#CC!#iC!#jC&CC #CC% #kC % #lC% #mC% #nC% CC oC%`aC(`pC(%qC@sCN( oC2%&rC$P'tC#CF$#cC!#QC!#R4&#S4ES: # sD.I.P.T.X.].`.f.j.q.x........................// / ///"/%/*/3/8/@/H/P/R/U/Y/`/d/k/r/x/~///////////////////////0 000000 0%0+060C0X0\0b0i0000000000000011 11'1,1:1P1V1f1q1111111111111112222(21272I2S2a222222333!3*323=3B3L3\3j3k3n3q3{3333333333334 44444&4)4.42474:4<4>4D4I4P4Q4U4t4444444444444444444444444444444445 5 555555#5*5,5:5;5?5C5E5J5S5W5^5e5h5n5t55d&@T4{(#CF#uF@vF(0CF1wF xF@vF(2CF3yF@zF( @{F&( #^F#CF$#CF !@vF(#CF !@vF(#CF #jFsheetformulacelllockprintrowoptionlinkmarginscommandalignmentavailablemultiplandependsupportkeysavechangeeditdefineenterfilecolumnwindownumbernamewidthformatreferencecopycannottoillegalfromofselectnotdeletebeforehorizontaltoogroupdirectionblankverticaltransfersymbolicorusemanyinsteadhelpconfirmbetweenlengthg&&&&&& & &&&''''' &&&''&&(&TRUEFALSECOUNTIFISNAISERRORSUMAVERAGEMINMAXROWCOLUMNNANPVSTDEVDOLLARFIXEDSINCOSTANATANPISQRTEXPLNLOG10ABSINTSIGNROUNDLOOKUPINDEXREPTMIDLENVALUEANDORNOTMODITERCNTDELTA ``*`! &% &-&1&59@C(&GI&M@T@Z)^)b )finsertvaluesplitonerrorclosecharsalphaingwritexternalorderefaultrightleftedin Cont Exp Fix Gen Int $ *Ctr Gen: Yes Nos No s No s s %:slnllongdtextparameterOverexist?Circular s unresolvǁDisk sPress any redraw screenInsufficient memoryY is a d workerror: line read sField has wordsis long(s)(s)(s)a text (no double quotes)a a , d fda (arfdirectory)a type letterwill fitVer 1 )k &n )s)w&z&  && ( @@@@@@` ` `pp '`pp '``& .06 Bytes:Ƃmay be dY retry access those scoleinnon-Shapes areas do match: ing: by EALPHA/VALUE: text Disk fuller s recalculate: Readline MP system disk: Del Form Go Ins Move Opt Quit Sort XternHELP: Resume Start Next Previous Applications s s board s: Down : : s Ds : -col : s srefer S recalcmuteiterationcompletitest at: er ssandorder:  W> <: Load Clear s Re: BEXTERNAL: List sstartatssalign: Def C G L R -code: Def % -# decimals: s S commassthroughstatus: UnƟ# sŢ# stoppage setupr-c seE S mode: Normal Other: Titlewith ed˙S align: C Gen L Rcode: %GOMOVEQUIT:DS:er:CLEAR:SORT by DOWNbǗnamLOAD filRENAMSAV: # s# ssǽd(efault): S: areaEEǽat at TITL {;VBGRV8sdft CB)AWP##@PAA A1b'v`A#XP@B@cfw#gXdF!6t9V 32h5=AiFuA1?yi&&$VdYd u"Apyc&yI@ABV#sA$!5b71@xS3E%5q?P'8CPe@?vsq$9ATyg @IPS(Wiu@333332%A  " "&(*,   "$& !&-27> C Y $^ flLqL!v    V c l t }  17!!$KJ%)-//5; ;<AEH EEF!HIJJP SWW Y!\!] _a P'AP'B "CP'FP'G! H#P'I#P'J'P'G*P'K,P'G.!L0M0@N0r(@O09u(@P0x(Q0P'R0P'W4 D:P'X:P'Y>#ZA %[AEA\A`A@aA4~(@bA/(#c-&V !V PP784:7F7.,$,(R*-b#NULL!#DIV/0!#VALUE!#REF!#NAME?#NUM!#N/A5X5YRCrc+-^*/&:<>=0123456789-"+(=;kAP'dA@eCr( @fC( $gC!#SC!#hC!LC#]C #kC,!#^C#UC?#_C#lC,!#TC#UC`C@mC(#iC!#nC!#]C #[A+!#^A#UA?#SC!#oC!#_C#[A.!#TA#UA&pC #qC% #rC% #sC% #tC% #uC% vC  wC3%`fC(`xC(%yC@{C%( wC2%&zC$P'|C#jF$#iC!#SC!#T4&#U4&@V4{(#jF7 2[]dpP`rbf>864(+-=>^/*&:<,<<> VDCGLR-DCEFG$*%-!$$!!$$'()d' TEMP )#}F@~F(0F 1LF/F@~F(2LF3F@FF( @F)( #cF#F$#iF!@~F(#SF!@~F(#]F#_FsheetformulacelllockprintrowoptionlinkmarginscommandalignmentavailablemultiplandependsupportkeysavechangeeditdefineenterfilecolumnwindownumbernamewidthformatreferencecopycannottoillegalfromofselectnotdeletebeforehorizontaltoogroupdirectionblankverticaltransfersymbolicorusemanyinsteadhelpconfirmbetweenlengthinsertvaluesplitonerU F6B >* MP.HLPnID;PMPF;K;E;F;WF;F;R;C;A;CNN;N;ENU;F;LNE;F;S;E;NL;NB;;Y;X;P;S;R;C;K;E;G;D;K;F0&&&&&&ERRORCHOOSELOOKUPNAINDEXLOOKUP w@CBH%ACt#`1D' 1i@DDc5W@XB1#`uCrqDQx QbqC32&AbP6Qyh#p$As#@8PA!x5 Ororclosecharsalphaingwritexternalorderefaultrightleftedin Cont Exp Fix Gen Int $ *Ctr Gen: Yes Nos No s No s s % Free:slnllongdtextparameterOverexist?Circular s unresolvǁDisk sPress any redraw screenInsufficient memoryY is a d workerror: line read sField has wordsis longsssa text (no double quotes)a a , d fda , s view directorya type letterwill fitMicrosoft&  && ( @@@@@@` ` `pp '`pp '``&" Versi1.06 Total Bytes :Ƃmay be dY retry access those ss coleinnon-Shapes areas do match: ing: by EALPHA/VALUE: text Disk fuller s recalculate: Readline MP system disk: GoMoves Quit Sort HELP: Resume Start Next PreviousApplications s s board s: Down : : s Ds : -col : s srefer S recalcmuteiterationcompletitest at: er ssandorder: > <: Load Clear s Re: BEXTERNAL: List sstartats# ss# ss: Def -code: Def % -# decimals: s S commassǽd(efault)through status: UnƟŢ: toppage S: areasetup-col s E S mode: Normal Other: Titleswith edES : ěcode: %ǽGOMOVEQUIT:DS:er:CLEAR:SORT by DOWN bLOADRENAMSAV: Eat at TITLES: 0.5.<.@.D.I.L.R.V.].d.m.v.........................../////$/,/4//A/E/L/P/W/^/d/j/o/t/v/{//////////////////////000 0000'040I0M0S0Z0s000000000000000111#111N1T1d1o1111111111111222!2,292B2K2Q2c2m2{222233333%323;3<3D3O3T3^3n3|3}33333333333333334444,434447494;4J4M4Q4S4X4[4]4_4e4n4s4|444444444444444444444444444555 555555!5%5*5-5/55595=5?5E5J5O5W5 ? &&&&& & &&&''''' &&&''&&(&TRUEFALSECOUNTIFISNAISERRORSUMAVERAGEMINMAXROWCOLUMNNANPVSTDEVDOLLARFIXEDSINCOSTANATANPISQRTEXPLNLOG10ABSINTSIGNROUNDLOOKUPINDEXREPTMIDLENVALUEANDORNOTMODITERCNTDELTA ``*`! &% &-&1&59@C(&GI&M@T@Z)^)b )f )k &n )s)w&z program SourceLister; {  SOURCE LISTER DEMONSTRATION PROGRAM Version 1.00A This is a simple program to list your TURBO PASCAL source programs. PSEUDO CODE 1. Find Pascal source file to be listed 2. Initialize program variables 3. Open main source file 4. Process the file a. Read a character into line buffer until linebuffer full or eoln; b. Search line buffer for include file. c. If line contains include file command:   T%cedure ProcessLine(PrintStr: WorkString); begin CurRow := Succ(CurRow); if length(PrintStr) > PageWidth then CurRow := Succ(CurRow); if CurRow > PrintLength Then begin Write(lst,FormFeed); VerticalTab; CurRow := 1; end; Writeln(lst,PrintStr); end {Process line}; Procedure ProcessFile; var LineBuffer: WorkString; Function IncludeIn(VAR CurStr: WorkString): Boolean; Var ChkChar: char; column: integer; begin 3?hen process include file and extract command from line buffer  Else print out the line buffer. d. Repeat step 4.a thru 4.c until eof(main file); INSTRUCTIONS 1. Compile and run the program using the TURBO.COM compiler. 2. Two ways to print a file a. Run from TURBO in memory:  = 1. Type "R" and enter a file name to print when prompted.  = 2. Specify a run-time parameter from the compiler options  menu. b. Run the progr[ ChkChar := '-'; column := pos(search1,CurStr); if column <> 0 then  9 chkchar := CurStr[column+3] else begin  ! column := Pos(search3,CurStr);   if column <> 0 then   chkchar := CurStr[column+4]   else   begin  ! column := Pos(search2,CurStr);   if column <> 0 then   chkchar := CurStr[column+3]   else   begin  ! column := Pos(search4,CurStr);   if c am from DOS  @ 1. Type LISTER and enter a file name to print when prompted.  2. Specify a commandline parameter: A> LISTER filename } Const PageWidth = 80; PrintLength = 55; PathLength = 65; FormFeed = #12; VerticalTabLength = 3; Type WorkString = String[126]; FileName = String[PathLength]; Var CurRow : integer; MainFileName: FileName; MainFile: text; search1, search2, search3, Dolumn <> 0 then   chkchar := CurStr[column+4]   end;  end; end; if ChkChar in ['+','-'] then IncludeIn := False Else IncludeIn := True; end { IncludeIn }; Procedure ProcessIncludeFile(VAR IncStr: WorkString); var NameStart, NameEnd: integer;   IncludeFile: text;  e IncludeFileName: Filename; Function Parse(IncStr: WorkString): WorkString; begin  * NameStart := pos('$I',IncStr)+2;  search4: string[5]; Procedure Initialize; begin CurRow := 0; clrscr; search1 := '{$'+'I'; { So LISTER can list itself! } search2 := '{$'+'i'; search3 := '(*$'+'I'; search4 := '(*$'+'i'; end {initialize}; Function Open(var fp:text; name: Filename): boolean; begin Assign(fp,Name); {$I-} reset(fp); {$I+} If IOresult <> 0 then begin Open := False; close(fp); end else Open := True; end { Open }; $ while IncStr[NameStart] = ' ' do  NameStart := Succ(NameStart);   NameEnd := NameStart;  1 while (not (IncStr[NameEnd] in [' ','}','*']))  +AND ((NameEnd - NameStart) <= PathLength)  do NameEnd := Succ(NameEnd);   NameEnd := Pred(NameEnd);  Parse := copy(IncStr,NameStart,(NameEnd-NameStart+1)); end {Parse}; begin {Process include file} IncludeFileName := Parse(IncStr); If not Open(IncludeFile,IncludeFi Procedure OpenMain; begin If ParamCount = 0 then begin Write('Enter filename: '); readln(MainFileName); end else begin MainFileName := ParamStr(1); end; If Not Open(MainFile,MainFileName) Then begin Writeln('ERROR -- File not found: ',MainFileName); Halt; end; end {Open Main}; Procedure VerticalTab; var i: integer; begin for i := 1 to VerticalTabLength do writeln(lst); end {vertical tab}; Pro ejleName) then begin  H LineBuffer := 'ERROR -- Include file not found: ' + IncludeFileName;  B ProcessLine(LineBuffer); end Else begin  while not eof(IncludeFile) do   begin  " Readln(IncludeFile,LineBuffer);   ProcessLine(LineBuffer);   end;  close(IncludeFile); end; end {Process include file}; begin {Process File} VerticalTab; Writeln('Printing . . . '); while not eof(mainf‘]ile) do begin Readln(MainFile,LineBuffer); if IncludeIn(LineBuffer) then  - ProcessIncludeFile(LineBuffer) else  ProcessLine(LineBuffer); end; close(MainFile); write(lst,FormFeed); end {Process File}; BEGIN Initialize; OpenMain; ProcessFile; END. De}; BEGIN Initialize; OpenMain; ProcessFile; END. z  &Welcome to TURBO PASCAL Version 3.0!  -- In spite of all efforts, some errors have found their way into the new TURBO 3.0 manual. This file contains all the necessary corrections and additions, and we apologize for any inconvenience this may cause you. Please make a working copy of your TURBO disk and store the ori- ginal in a safe place. For help making a backup copy, please refer to a ppendix M of the TURBO PASCAL Reference Manual. Now, using your working copy, run TINST to install TURBO.COM for your terminal. Installation procedures are discussed in Chapter One and Appendix L.  ***  *  *  -* Need help with TURBO? Please see *  -* Appendix N in your Reference Manual *  (* for answers to common questions.  iK *  *  *  ***    --3- Contents of the READ.ME File --0 1. CORRECTIONS to the 3.0 Reference Manual m[ All versions ] 2. OMMISSIONS from the 3.0 Reference Manual [ All versions ] 3. New FEATURES . [ CP/M-80 ] 4. ADDITIONAL FILE LIST i- cally it will close all open files, output an error mes- sage, and call the Halt standard procedure to terminate the program. If an error handler returns, i.e. if it does not call Halt, or if an error occurs wisthin an error handler, Turbo Pascal will itself output the error message and terminate the program.    ---  +NEW FEATURES OF CP/M-80 IMPLEMENTATION OF   q  [ CP/M-80 ]    ---   CORRECTIONS   --!- Page 253 - MOV AL,[BP-1]  --l The correct statement is: MOV AL,[BP+4] Page 293 - TURBO-BCD will compile and run any program --- Well - almost. The Real functions Sin, Cos, ArcTan, Ln, Exp, and Sqrt and the pre-declared constant Pi are not availabԽ TURBO 3.0   - AN OVERVIEW -  --- Inline ------ A constant identifier used in an INLINE statement does not always generate two bytes of code. Files ----- New FIB formats. Optional 4th parameter on Blockread/Write returns number of blocks actually read. SeekEoln function. SeekEof function. Misc. ----- Exit procedure - To exit the current block le in TURBOBCD.    ---  OMISSIONS  --$- User Written Error Handlers  --- In Turbo Pascal 3.0 you may write your own error handler, which is called in case of an I/O or Run-time error. The procedure must have the following header:  aprocedure Error(ErrNo, ErrAddr: Integer); The name of the procedure and its parameter OvrDrive procedure - To specify the drive on which to find overlays ParamCount function - Gives number of characters in the command buffer ParamStr function - Gives the string of characters in the command line Overlays -------- Overlay files are opened and closed every time they are accessed. Therefore, there is never a need to specifically close an overlay file. The Y compiler directive is no longer supported. Instead, the OvrPath (Ms are unim- portant, as long as it is a procedure with two value parameters of type Integer. The value passed in ErrNo is the error type and number. The most significant byte, i.e. "Hi(ErrNo)", contains the error type, and the least significant byte, i.e. "Lo(ErrNo)", contains the error number (see Appendix F or G in the Turbo Pascal Manual). The following error types are defined:  0 User Break (Ctrl-C).  1 I/O S-DOS) or OvrDrive (CP/M) standard proce- dures may be used to specify the drive and subdirectory in which overlay files reside. Please note that run-time error F0 indicates that your over- lay file is missing or is called recursively. (This error number is omitted from the Reference Manual but is included elsewhere in this file.)    ---   TURBO PASCAL Version 3.0    error.  2 Run-time error. In case of a user interrupt (Ctrl-C), the low byte of "ErrNo" is always 1. "ErrAddr" contains the address (offset in Code Segment for 16 bit versions) of the error. To activate the error handler, Oassign its offset address to the standard variable "ErrorPtr", i.e.  'ErrorPtr:=Ofs(Error); { 16 bit } or  dErrorPtr:=Addr(Error); { 8 bit } There are no limits to what an error handler may do. Typ a CP/M-80  Additional File List In addition to the list of files mentioned in Chapter 1 of your TURBO Reference Manual, the following files are included on your TURBO disk: Sample programs --- LISTER PAS - simple program to list your Pascal source CMDLIN PAS - get parameters from the command line MC PAS - sample spreadsheet program - MAIN MODULE MC-MOD00 INC - sample spreadsheet program ߉( ͫCopyright (C) 1985 BORLAND IncBNo Terminal selectedP~7#~= oͦkԄ!!"~#(}:$= +*!5!*!!:(2!5:(>2!!!:O::O:!1*! !45(! +/ 0y0(- INCLUDE MODULE 00 MC-MOD01 INC - sample spreadsheet program - INCLUDE MODULE 01 MC-MOD02 INC - sample spreadsheet program - INCLUDE MODULE 02 MC-MOD03 INC - sample spreadsheet program - INCLUDE MODULE 03 MC-MOD04 INC - sample spreadsheet program - INCLUDE MODULE 04 MC-MOD05 INC - sample spreadsheet program - INCLUDE MODULE 05 MC HLP - spreadsheet help file MCDEMO MCS - spreadsheet data file (not for use with TURBO-87) --------- d!k5!{5__o&  :(͠|(  *"x2y( >28!"9!! og2"">~22 9/4*9 Co&ͦͣ} [ (!e{ͦA8Q0G: x@!\w# (͂ ?(*( .( w^. ^!h6# (?( *( ͂( w#>?> w#ͦ 8 !ɿ .,;:=?*[]<>{}a{ |ʹ}ͽƐ'@'7||}>2ͯ*Bڨ  "og"2>2! {--  u""*B"[Ru*"^#V#^#V#N#FO/o&9O/o&9!9(> (G!9 w#Eͺw}8' RB0 >' RqRR!+ Ͱ R!+ Ͱ r!+ Ͱ r!+ Ͱ r!# Ͱ r!+ Ͱ T]KB!z>  ZS>))0 = | |̀̀DMgo>jB0 7?= H͒<z5a)a<z {0Gɯgo||~}||/g}/o#}o&K[xAJSJDM!b"!6J"DM'd } ) W _}8(8J`9{T]=o`9y ) >' ́ ͬ͗ }>' xˆ }} ˸T}ٕ(0D=z ,= ( ͒ 0%{ , 7 ?(8ͬ x ͆ - r 8˸x ͏  ,-xG}r }مM 9r .>#n0͒ { = - nx ͇ ,-(-˸G,-r }ٕ?M  ?  #?w#?/w#?w#!9! E9!!9~(+Fͺ!"9!(#>2*"| >"2:( Ͷ *w*6 !\$![ (ͦ( #:~CONTRMKBDLSTCAUXUSR>2i:*ˮ~0:*:(@q##pZ* :(  ~* < >26"!"""~>2""v>2>"!"ˮ(!~8>~O6~*"9.> 8ͬ ?= u+-(>͆ 0ͬ ͆ 8 ?x ͇ , 78ƀ8ƀ8ox٨!دoGOW_gɷɷ|لg{ً_zيWyىOxوG|ٔg{ٛ_zٚWyٙOx٘Gxٸyٹzٺ{ٻ|ټx٨ xx( ?}ٽ }ցr <(r 7{ = |٤g{٣_z٢Wy١Ox٠G{ ͬ ́ }x>' ͬ}ƀ/ƀo -́ }0͎-́ ͎,}l˸ 8 4 ͗ x( - 8́ - 8,́ }l8;*!͗ ! >4ͬ͗ ͗ ͬ--- ́w(6(2(-()(6 (8 0 :(* y(~#+ (( 66 #6 #"*: y~o p .##~ͺ(.6w4._~ =*##55= *[R8*~#"= ͣ}== ͯ}͵}*#w+#~+>*~('k!0(ˮ]k!8ˮ!]~-#8~>27kˮw>O$6̃s #r$ͣ6̏ k ( (ˮ qk(ˮ ( k ˮ*O:~ ##~._q4((=ʦ==ʩ=ʬò* ,,,-xGg?+2n*8t z~,->' x' ͘}. ͆́ , ! >4,͢- o&0%,͗ }gr }؉}颋.:}8c~I$I~L*͢ٷx˸ }0G,<},-(-́ !>I0 ͗͘ o8 ͆ >' m.`1pF,t6|!wS<.z}[|%FXc~ur1}͆ٯx(<˸ 8 !~J 0.O!>s 8 =  n s͗ ͆ .n 0 ͎-́ OT0 j oD,:j[:4^q*##~6ͺ>2}*|(̓|( ̓6-#[RM8( G> A~#*'C! !TRUEFALSE!9N#Y~#( G~#> >    "~(kѻ(( !0 (ˮ!!>2Sz:0:*6##ww#w$w#w:  ##N#F*B>2w#w#[s#r> "~ͮ*-w#ww##> ͮÁ""~>2:ZR0 *4#4>2:ZR> *4 #4(>  !I}袋.}8c~I$I~L! >ͬ͗ I× nn ͗ = ͆ nf^VNF!DLT\I!!53!r1!͒!> x #-= o˸x͆(- }(x>8(z ,z `iÃ!>' |r |̀>)=|(DMbo˸88x(0 8> ̀x(>-{(ay( z(>. ( {>E>+|(|Dg>-|/ 0:p# ~# +>0w#,-  60#} >22*f(/˦:G(##~++ :O x yC!ͺ Q*:G(##~._.͚f<\=<͚*##w ͮ +4 #4x >>2:G("ͮ"*nˮ*0 SZѷR8@* N#F#s#r, 0})jS\*##w+ N#FB ͮr+s>2!T]>)j)0 0= ]R!#]*^#V#N#F#^#V>2Ͱ:0:*6 #-Nw#Fwq#p#6#w#w#w"~Á>">!DM!":*B:!>(>2>">!"2z˸}րogM| .(z = ~> x0w#xG%͇ %͇ ZJDM%͇ = _~65+~hìx-Sx9?+{Η@}|z z gZJDM0{ ,7}o˸? #yO!@9i& w"~ʰ*w#wx(9* :O *-4 #4!*4 #4 *-N#Fq#pV+^Bq#pSZѷR&* s#r$ s#rL <?*L!\  <( !\$>2>2L:>!(* \$\<(!3: [1ð\!(7"~> 2"S"Ns#FrB(Z#\: \<(?*"}K\! !*}#"}! x \* *>) 2""{_!"*=÷$!џ*&n&E;%!ڟ*&)^#V!ԟ*&)^#V#!ڟ*&)^#V*I#!ԟ*&)*s#r!џ*&!s""**"!}2!ԟ*&)^#V*͒E%*&!}2Ü%**"!}2 !ԟ* &)^#V*͒E&* &!}2 %**E"**E"!ڟ*&)^#V**" !ڟ* &)^#V**" * *s*d* * *d*s* *d!џ*&!s!џ* &!s""***d***d*G!* &}2*&*!nf}(HR0nf" ^VMDnfutqp*s#r*s#r"* uKB!0>' ~#fo{_"*R0RnfR0KqputsrNF( ^VNF^V*SutKqp R*R(~w~wnf ut"6#K*K*!""*NFy(* "*B0Cnf* [R*"*RS[s#r^#V""6#>O"w2x2*"!F"" &y*"*>2"*"ED'!!+)!s#r!!+)*!Rs#r!"J'!"*!Eʠ)!*+)^#V"}!*+)^#V"{*!R"*}"y*{"w*y*w!"**y*wf$*!m#*m*u*d*y*w*f$*y!q#*q*uͼ&E((*y!"y*y*w*f$*y!q#'*w*y*f$*w!o#*u*oͼ&E~(*w!R"w*w*y*f$*w!o#B(*y*w͸E(*y*w͒Eʩ(*y*w{%*y!"y*w!R"w*y*wE'*w*}R*{*yREC)*y*{y!F"""!\*: Nr!~6go(\R*s#r_2x( s x(T]DMx(R0 U(͝O/o&9q# (!>F0#( ~ ( #]( ~ ( (#}(  i&T-a%â}ͦo*!~6o&|:2 2}:__zѯ2*|KB " z ^C User break+=  I/O Run-time error {ʹ, PC=*ͯNot enough memory Program aborted :ʎ'1!d!c$>,cE:)*!"!*+)*ys#r!*+)*{s#r*w"{Í)*}*wEʇ)*!"!*+)*}s#r!*+)*ws#r*y"}*}*{ͥEʍ'J'*!*!ͥ}oES**!E*!;M $$$SOWRK.$$$p!;o !}2:!!#!!#!ڟ!)^#V!ԟ!)^#V#!ԟ!)!ԟ!)^#V!s#r*!El*!"r**"!ڟ*)^#V**"***d*!"*!"**E*!"*!"*k*!R*}/o|/g#f$*k!COM="|*|D"z*z! !!V !t!t,"r*r"p!*p:ͣfzʝ!"n*p*n*p*nn&s*n#o!P!!Eʺ!͛͛ͺ*** FATAL ERROR: !:!ͪ ""**E"*""*"*""**E?"*"E"*"*" "!* Eʁ"** !}2È"!}2*&" * :ͣ!* !n&! }oE"* !!Ö"* * :ͣn&! E#* !* |#***d*k!"k*k*ͥ}2""""""!!)"!*"!+"!"!,* * !!,! !! E+!@! !!,! !"*!EB,!*!"*!"**"*!͸Ew,!"-!ڟ!)*I"Eʔ,!"!ڟ!)*I"Eʷ,*!"!ڟ!)*I"E,*!"!s*I"E,*!"!u*I !n&+s"/+"6"8!;*6*o !;*8*ͺ "2"4!;*2*o !;*4*; "/*/*"-*-!ԟ!)^#V*-!ԟ!)^#V}o*-!ԟ!)^#V}o}21*1&")"+*+*"'!}2&!ԟ*&&)^#V*'͒E8$*&&!}2& $!ڟ*&&)^#V*+*E**)s#r" """$*$|#}oEz%*$*"!}2*"*"* *"!ԟ*&)^#V*!ԟ*&)^#V*}oE%*&!}2 _"E-*!"*!͒E+-!"-!"!}2:!"!"!"!ԟ!)!s#r!ԟ!)!s#r!ԟ!)!s#r*G!!џ!!s!џ!!s!џ!!s&!"k*G!*:&E-!;͓*!ͥE.!u*z*!R"*!ͥE,.!s*z*!R"*!ͥE\.!ڟ!)*z*!R"*!ͥEʌ.!ڟ!)*z*!R"*!ͥEʼ.!ڟ!)*z*!R"**G!*G!*G!*&}2*&"*"*0!͛" !ͩ!D !:*&e.=!*&́! ͑! ͑O!:ͣ!}oͥ6}o}oE6*&́! ͑! ͑OEʨ7!!!!n&+sͥ6E8*:*e.=**&! ͒E7*&͛"! " !ͩ!D V8͛!" !:ͣ!vzG8"͛!"! "!" *+8!ͩ!D i6*&́!$͑!0!9͛O}o}oE6*&! ͒E8͛*&4!ͪ! " *:*&e.=*i6E8! }28!ͩ!D Ä8 !"s#r*2!s}2""*"**0^#V͒E40*2n&Eʉ/**0^#Vo **3!ͺ *2!s**]!RE0*&E/MSeek read error͞!/**]E/MSeek write error͞!**o $0**o **3!; *0*s#r"*"*2n&E|0**0^#Vo **3!ͺ *Ͱ "}2"""**!/!*&R"ߞ*"*3*&**ߞ*!d*ߞ*EL1**0."M*!}2!ͩ!D *&! ]OEP9*&}2Æ9*&́!0!9͛!$͑OEz9͢6}9̈́8͛ *&ã:*m+"m*m!Eʸ9!"m͛!*" !V!!oV!!:!o:}2 * *I}oEM:*U! E!E:͛!<" *ͤ!Ͷ *U!R*͒EJ:.9* .}oEʢ:*U! E!Eʍ:͛!>" .*ͤ! Z:"P!"!:͛!ͪ! " !"m!! !!9!9!N:!!^#V!!/*3**ߞ!**ߞR!d*ߞ!"ߞ0"֞}2؞"ٞ"۞"ݞ*ݞ*ٞ!/!*؞&R*֞!"Ҟ*ݞ"Ԟ*۞*Ԟ3*؞&*Ҟd*Ԟ2!s*Ҟ*֞E/2*ݞ*Ԟ0^#V!!/*۞*Ҟ*Ԟ3!*֞*ҞR!d*Ԟ2!s*Ҟ!"Ҟü1"̞"Ξ"О*О}oE2*Оͩ!̝͎ͫ!̝:ͣ!E2!̝:!! e.!̝:! e.=Ͳ+k!ʝ!ȝ*ȝ!*ʝ*Ξ}oE2!̝:! e.!̝:! e.=Ͳ#!k*̞2@21o#!͒Eh;͛ ͛ͺ9*** WARNING: Unable to sort Terminal names - Press RETURN  ͛ mR"*!!s!ͩ!D *&! ͒Eʶ<*&́! !~͛OE<*&͛" *!*!n&#s**!n&*&sä<*&!*&!}o*:ͣ!}oE~<͛!"! "!" *!*!n&+sä<*&!*&}oEʤ!*n&n&͛"! "!i:!ͪ! " !ͩ!D *&*&! }oEʗ>!*n&n&}2ã>*&}2*&́!!n&͑!!n&͑OEV>*&͛" *&!!n&*s*4&!E RBR5  RBR5  RBR5 RBx5MCtrl-*4&!@e.=! 6  R–5M! 6 R³5M! 6R5M! 6 R5M! 6R6M! 6*4&e.!*4&!EM6!:M(+128)=!!:!5!5:8*:ͣ*ͥEʕ6!}2͛!" Ü6!}2*&6!:!!*!*!ͥ}o*!͸}o}2*&*&e.!*& """"!}2X*&EP?*^#V͛!&! "!i:!ͪ! " *X&}oEG@!Zu;*&Er?G@!Z*!Y!X:=*Y&*&}oEʣ?!}2XD@*Y&E?**s#r*^#V**=E?!}2X?***L*Vs"J!*Jfzʲ@"F͛!_" *F#Ô@!*Jfz@"F͛!" *F#ý@"B"D*&EA!*D:ͣ=*&EGI*+~!s!:͛!ͪ! " *+&!+@=iI*+~!s*+&M=sI!=!!ȗ]OEJͨ=*+!+@*+:M͍EJ!=*+M*+M*+J!s*+I!s*+!s*+F!sJͨ=*+!+@ͨ=*+!+@*+=ͨ=*+J!!!H@ͨ=*+I!!!H@*+F=*+Fn&}oEʵJͨ=*+!!!>J*+!s#r=J!=!!ȗ]OEʂKͨ=*+M!+@*+Mwfz7A"͛*D*n&4!ͪ! " *#A*D:ͣ!EʮA͛ͺ ( !*D:ͣfzʜA"͛*D*n&!&! " *#kA͛!"ͺ)  ͛! "!i:!ͪ! " !*B́!-͑f6}2!:M͍*&}o}oEB!:*DHB*&!-EHBM*D!?:͛!ͪ """*&EʇB*n&!EʀB!}2ÇB!}2!=*&}oEʶB!*sM*=qD*&EB*n&!EB!}2B!}2!=!}2*&EKC*&:M͠EgK*+S:M͍}2!=*&}oEPKͨ=*+S!+@dK*+SM=K*+SM!=ÉK!=!!ȗ]OEKͨ=*+u!+@*+u:M͠EKͨ=*+o!+@K*+oM=K!=!!ȗ]OE&Lͨ=*+i!+@)L=!!ȗ]OEʔLͨ=*+[!+@*+[:M͠E}Lͨ=*+a!+@ÑL*+aM=ÛL!=! !ȗ]OELͨ=*+|!!!H@ͨ=*+{!!!H@L!=!!ȗ]O*C*n&!͒}oE#C!}2KC*&}o*n&!}oEKC!}2*&E`C!*shC!*s*n&!EʷC*&EʑCM*!:͛!ͪ! " **@qD*&ECM*!:͛!ͪ! " *&*:M͠}oE+D*:͛!ͪ! "!i:!ͪ! " *+́@!@u;͛ !@:M͠*&}o}oEqD!@:*">*>"<*<:M͍EʪD*<6M÷E*<Fn&ED!e.!8DM000!*<^#Vk!8*<6*<:!8+:M͠}oE6Mͨ=*+K!!'!>9M=!!ȗ]O*+M:M͠}o!!ȗ]O*+u:M͠}o}oEʬMͨ=*+Y!!'!>ÿM*+Y!s#r=!!ȗ]O*+i:M͠}o!!ȗ]O*+[:M͠}o}oE2Nͨ=*+g!!'!>EN*+g!s#r=*-&!!fzqN"'͛ *'#VN!:͛!ͪ ͛ íON"h**h"**EN!"N*!EN*"KN!}2m!}2m*!EʧO͛o:=*<:=!8:=*<:=*<:ͣ!8:ͣ"6*6*<:ͣ!8:ͣ"4*<n&EʛE*<G*6s*<H*4s÷E*<G*4s*<H*6s"2*2!!N*2"0*0}!s*0~!s*0F!s!!ʗ:o !!͒EbFM6File Containing messages for this program is not found͞!!!e!?02!2͔=!͔=!i͔=!ԓ͔=!͔=!!!!n&s!͔=!!!!n&s!͔=!͔=!ǔ͔=!v͔=!%͔=!j"+!  !2:͛!ͪ !ͩ!jD *j&́!͑!͑!͑! ͑OEO*j&RfO!͖NçORzO!͖NçOR”O*&}o}2&çO R§O͛ *m&!}2&!*~!""*~!*R!EO*#"!͔=!!!!:ͣ!s!n͔=!n!!!n:ͣ!s! ]!""*"!EgR!"*"+!*#"*"+*#" * +!#"**͒EP** +"* "P*"+"*"*+* R"*+*#"!*+fz[͔=!}2*&}oEG!:͛!ͪ! " *&EeG*+:͛!ͪ! "!i:!ͪ! " !+́@!u;!:M͠}2-!:M͠*&}oEG!}2!:M͠EG!:*+ G!!ȗ]OEʘH!!ȗ]OEH*+}*+!+IBÕH*+}n&!}2!=*&EsH*+}!s!:͛!ͪ! " *+!+@=ÕH*+}!s*+M=ßH!=!!ȗ]OElI!!ȗ]OEH*+~*+&!+IBiI*+~n&!}2! cR"!*+fzIR"*+* ***"**͸E@R͛*#!&ͺ)  **͒**R!ͥ}oEʺQ! * ! ͤ!jͶ !j:!Q**RRQ!:!QRQ!n:!!:͛!ͪ **+E@R͛M!!:ͣR!ͪ *#Q͛ *#P͓N}oEʙP*&&"Ɨ!ȗP!ʗP!!}2l! !:p! !͒ER!  E!}2!}2! ]!}2!"*&ES= SWͺY"[*&#=Z*&#Z,[[[*&}2!}2!*&"͛*&!!&ͺ:  *W͛ͺ  !*&))!n&!E[!:͛!ͪ ͛! " \!!*&)):ͣfz\"͛!*&))*n&4!ͪ! " *#[!=:͛!ͪ !C!́!B͑!Q͑!-͑f6BRc\!}2\QRw\!}2\ARBҍ\0\\ -R\!*&))!e.!:͛!ͪ \!C:M͠E\!*&))!C:*&ͷY}l!͔=KN͐N}oE S!}2lsW!}2*&EAS!"!=S͛ ͨ=!!! ]!!>*&E}S!}2lsW*+"*! ]}2*! ]#ESͨ=!!! ]!>*&ES!}2lsW*+"!}2!}2jUS=!}2*&ET!j͸E=6T! * ! ͤ!jͶ !=*&*&}oEiTF}2!}2!=!jrD~T!}2!}2!=!}2*&ENU! !ȗ]O! !ȗ]O}oEGU*Ɨ"͛ ͛ ͨ=͛ ͛ ! !ȗ]OEUͨ=*EoE]!}2B^!}2B!"! e.!>!_!>͗WͯW!M1*!"!!,fz]}2A!*A&)):ͣ#}2@**@&!Eʦ]!}2B! X^!_!*A&))͗WͯW*@&M1**@&"*A&#[]!}2@!_!@͗WͯW!M1^^*B&=^!_!8͗WͯW!͆0*#"*8&}29*9&*!*!!"!"!_!͗WͯW!͆0!"*!R"!!,fzS_}2 PKaypro with hilite0=> /-C1B1 E RP=Kaypro, no hilitetin 2g etex 3000=  ()(T-ERP= Televideo 925/920/92?  *()TERPTexas Instruments &+P[;H Visual 200YO=    E RP=Lear-Siegler ADM-20=  ()(TERP=Lear-Siegler ADM-31=  *))(TERP= Liberty=  )(s  v)34xLMPYWyse WY-100/200/300=  *))(TERP= Zenith00Cur[, Morrow Y0 E(qEpKLMPYOrona ttach00C+P[;H Visual 200YITERP= Morrow MDT-20=  ()(TERP= Osborne 1)(=  (()TERP=Otrona Attache`a=> HU$U KLMP=QumesI=  ()(TERP= RC-855 (ITT)   'PSoroc 120/Apple CP/M=  *)(T P=Soroc new models= * Ta+)(TERP= SSM-UB300;00A2J1;17U0UKLMP;Tandberg TDV 2215 'PTeleray series 10Y    KLMPY Tel 1 "TURBO Pascal installation menu. 2 ~ Choose installation item from the following: 3 4 [S]creen installation | [C]ommand installation | [Q]uit 5 6 Enter S, C, or Q: 10 Duplicate definition. Error occurred between question 11 Commands starting with the same letter must have the same length. Error occurred between question 12 The total maximum length of commands are execeeded 13 -> 14 CU,RSOR MOVEMENTS: 20 Character left a  21 Alternative  22 Character right  23 Word left  24 Word right  25 Line up  26 Line down  27 Scroll down  28 Scroll up 29 Page up  30 Page down  31 To left on line  32 To right on line  33 To top of page  34 To bottom of page  35 To top of file  36 To end of file  37 To begining of block  38 To end of block V 39 To last cursor position 15 INSERT & DELETE: 40 Insert mode on/off  41 Insert line  42 Delete line  43 Delete to end of line  44 Delete right word > 45 Delete character under cursor 46 Delete left character  47 Alternative , 16 BLOCK COMMANDS: 48 Mark block b }egin  49 Mark block end  50 Mark single word  51 Hide/display block  52 Copy block  53 Move block  54 Delete block  55 Read block from disk  56 Write block to disk 2 17 MISC. EDITING COMMANDS: 57 End edit 58 Tab  59 Auto tab on/off  60 Restore line 61 Find  62 r Find & replace  63 Repeat last find 64 Control character prefix 101 Nothing ^Q: Quit, ^R: Last page, ^C: Next page, : Select terminal: Wait Sorting Definitions Change to: (Y/N)? y n Text file name: Command: Numeric entry expected Legal range is , please re-enter: Choose one of the following terminals: None of the above ( Max. 20 Characters ) Delete a definition ( Max. 20 Characters ) Which terminal? (Enter no. or ^Q to exit)( d!k6!{6``o&  :(͠|(  *"x2y( >28!"9!! og2"">~22!:05+:!Co&ͦͣ} [ (!e|ͧA8Q0G: x@!\w# (̓ ?(*( .( x_. _!h6# (?( *( ̓( w#>?> w#ͧ 8 !ɿ .,;:=?*[]<>{}a{ |͵};Ɛ'@'7||}>2Ͱ*Bک  "og"2>2!W: Delete terminal? (Enter no. or ^Q to exit): Do you want to modify this definition before installation? Terminal type: Send an initialization string to the terminal? Initializaion defined as a command string? (No = a file) Send a reset string to the terminal Reset defined as a command? (No = a file) CURSOR LEAD-IN command: CURSOR POSITIONING COMMAND to send between line and column: CURSOR POSITIONING COMMAND to send after both line and column: Column first OFFSET to add to LIN ""*B"[Rv*"^#V#^#V#N#FO/o&9O/o&9!9(> (G!9 w#Eͻw}8( RB0 >( RrRR!+ ͱ R!+ ͱ s!+ ͱ s!+ ͱ s!# ͱ s!+ ͱ T]KB!z>E: OFFSET to add to COLUMN: Binary address Number of ASCII digits (2 or 3): CLEAR SCREEN command: Does CLEAR SCREEN also HOME cursor HOME command: DELETE LINE command: INSERT LINE command: ERASE TO END OF LINE command: START HIGHLIGHTING command: END HIGHLIGHTING command: Number of rows (lines) on your screen: Number of columns on your screen: Delay after CURSOR ADDRESS (0-255 ms): < Delay after CLEAR, DELETE and INSERT (0-255 ms): z S>))0 = | |́́DMgo>jB0 7?= H͓<z5b)b<z {0Gɯgo||}||/g}/o#}o&K[xAJSJDM!b"!6J"DM'd } * W _}8(8J`9{T]=o`9y *  >( ͂ ͭ͘ }>( x‰ }} ˸T}ٕ(0D={ ,= ( ͓ 0%| , 7 ?(8ͭ x ͇ - s 8˸x ͐  ,-xG}s }مN 9s .>#n0͓ | = - nx ͈ ,-(-˸G,-s }ٕ?N ( ͫCopyright (C) 1985 BORLAND IncB Televideo 925/920/92P?  *EE RT(1)1~7#~=  oͦlԅ!!"~#(}:$= +*!6!*!!:(2!6:(>2!!!T:O::O:!*! !45(! +/ 0y0 S9.> 8ͭ ?= u+-(>͇ 0ͭ ͇ 8 ?x ͈ , 78ƀ8ƀ8ox٨!دoGOW_gɷɷ|لg{ً_zيWyىOxوG|ٔg{ٛ_zٚWyٙOx٘Gxٸyٹzٺ{ٻ|ټx٨ xx( ?}ٽ }ցs <(s 7| = |٤g{٣_z٢Wy١Ox٠G| ͭ ͂ }x>( ͭ}ƀ/ƀo  -͂ }0͏-͂ ͏,}l˸ 8 5 ͘ x( - 8͂ - 8,͂ }l8;*!͘ ! >5ͭ͘ ͘ ͭ--- Jw(6(2(-()(6 (8 0 :(* y(~#+ (( 66 #6 #"*: y~o p .##~ͻ(.6w4._~ =*##55= *[R8*~#"= ͣ}== ͯ}͵}*#w+#~+>*~('l!0(ˮ]l!8ˮ!]~-#8~>27lˮw>O%7̄s #r%ͤ7̐ l ( (ˮ ql(ˮ ( l ˮ*O:~ ##~._q4((=ʦ==ʩ=ʬò* ,,,-xGg?+2n*8t z~,->( x( ͙}. ͇͂ , ! >5,ͣ- o&0% ,͘  }gs }؉}颋.:}8c~I$I~L*ͣٷx˸ }0G,<} ,-(-͂ !>J0 ͙͘ o8 ͇ >( m.`1pF,t6|!wS<.z}[|%FXc~ur1}͇ٯx(<˸ 8 !~J 0/O!>t 8 =  o t͘ ͇ /o 0 ͏-͂ OT0 j oD,::4^q*##~6ͻ>2}*|(̈́|( ̈́6-#[RM8( G> A~#*(C! !TRUEFALSE!9N#Z~#( G~#> >    "~(lѻ(( !0 (ˮ!!>2S{:1:*6##ww#w$w#w:  ##N#F*B>2w#w#[s#r> "~ͯ*-w#ww##> ͯÂ""~>2:[R0 *4#4>2:[R> *4 #4(> j !I}袋.}8c~I$I~L! >ͭ͘ JØ oo ͘ = ͇ nf^VNF!DLT\I!!53!r1!͓!> x #-= o˸x͇(- }(x>8({ ,{ `iÄ!>( |s |́>)=|(DMbo˸88x(0 8> ́x(>-{(ay( z(>. ( {>E>+|(|Dg>-|/ 0:p# ~# +>0w#,-  60#~>22*f(/˦:G(##~++ :O x yD!ͻ Q*:G(##~._.͛g<]=<͛*##w ͯ +4 #4x>>2:G("ͯ"*nˮ*0 S[ѷR8@* N#F#s#r- 0})jS\*##w+ N#FB ͯr+s>2!T]>)j)0 0= ^R!#^*^#V#N#F#^#V>2ͱ:1:*6 #-Nw#Fwq#p#6#w#w#w"~Â>">!DM!":*B:!>(>2>">!"2˸}րogM| .({ = ~> x0w#xG%͈ %͈ ZJDM%͈ = _~65+~hìx-Sx9?+{Η@}|{ { gZJDM0| ,7}o˸@ #yO!@9i& "~ʱ*w#wx(9* :O *-4 #4!*4 #4 *-N#Fq#pV+^Bq#pS[ѷR'* s#r$ s#rM <?*M!\  <( !\$>2>2M:>!(* \$\<(!4: [1ð\!(7"~> 2"S"Ns#FrB(Z#\: \<(?*"}K\! !*}#"}! x \* *>* 2""{_!"*f@  #@w#@/w#@w#!9! E9!!9~(+Fͻ!"9!(#>2*"| >"2:( ͷ *w*6 !\$![ (ͧ( #:~CONTRMKBDLSTCAUXUSR>2j:*ˮ~1:*:(@q##p[* :(  ~* < >26"!"""~>2""v>2>"!"ˮ(!~8>~O6~*" ~nf}(HR0nf" ^VMDnfutqp*s#r*s#r"* vKB!1>( ~#fo{_"*R0RnfR0KqputsrNF( ^VNF^V*SutKqp R*R(~w~wnf ut"6#L*L*!""*NFy(* "*B0Cnf* [R*"*RS[s#r^#V""6#>O"w2x2*"!G"" 'z*"*>2"*" 2aD!]l2D%Ͳ&">>>2D~-Start address@"! ĸ-"DEnd address@"*< ĸ-"D *| "Enter PC@"͸-"Ͷ'!"y>2y Searching~-ï(*-/-Y-!D /-^-(%!%"\%!%"}%D$>2D3y$2y*" y*(E6#"yͶ':D=ʉ(= >C!OM>C!HN22y*D"y*D" y3yͻ&GrGr<9*!(*y"y*y7R8&*y"Gr3yGr! "9*!> Compiling 3y(  --> -~-,E:y  Compilation aborted" lines :yO):y Y*not fo !G"""!\*: Os!~6go(\R*s#r_2x( s x(T]DMx(R0 U(͞O/o&9q# (!>F0#( ~ ( #]( ~ ( (#}(  i&T-a%ã}ͧo*!~6o&|:2!2}:__{ѯ2*|KB " z ^C User break+=  I/O Run-time error {͵, PC=*ͰNot enough memory Program aborted :m'=!*"*E!ze  und "( *y R #Code: [y*y+#*y #* yData: #>2$E9*0sGError &h@.:#E(f*B~(^ 80O#0#( ~# #: ~ (7 0![B 0  ( #Y*found2D:y(?>.%D!y $ Error found in above include fileY-( D!D U.* y*Disk or directory fullU."Run-time error position :$E(:D=(;=+Y-!D(!D3y >C!OM2*i-&ͣ*B" glÅ :$E:#Eă-n-*-$:D=(2$E"'- *< "D<2D ?)!TURBO Pascal systeml5!Version 3.01A 5!CP/M-80, Z80 Copyright (C) 1983,84,85 ͅBORLAND Inc. )! Terminal: !S Include error messages-2#Eă-n-Y"{!"ͧ!?$Q$ /$8: z ?ogged drive:Aork file:1ain file:D-dit ompile un ave eecute ir uit compiler ptions Text: [&E* i"%+'%\!>O!VR-!Ͳ&ѷ( Program@"!>C!OM-(!\:D!!!2D!!Dir mask@"Gr:\( =_GrA2l,WyGrͲ&O<(RyO!ay ~ =!Wy  :h=0:  #~x> (> ( No file ~<2q{nf"o{#ͥ,*o{̈́,`iͥ,Bytes Remaining On X: R@.>k_Gr |,,( ͜,0:q{)New drive@" : ͧA Gr2_Gr (Y/N)? ͧY(N N B(E+#[(E**EFree: շR;. bytes (Ͱ>-Ͱ>)= compile ->  5!!X#?:D@#emory @#om-file @#cn-file :D(]tart address:*DͰ (min ! Ͱ) nd address:*DͰ (max *Ͱ) ind run-time error uit ͧ!J$g$/$(#7^#VLWMECRSXDQOMCHSEFQ,$y$*(v*& +r++X#'#'''/'M'z'u$Y" Main file name~-@">2D -D!\$!%"}%% Work file name@">2E n-" -D!\$!%"}%!%"\%n-D*&E"BD"DD ,>P!AS2e"f:\Gr<2\:E*- Y- ͨ$D!D$>2D:D%$:DD!D #*&E6 #"(E2aD2D2$E*B"&E\!>M!SG-2#EU.(!%"}%!%"\%\$*(E6#"&E!ͧ0 8 ))))o@@>:  x>.-!\0.:Dw0.>w0.6- not foundͲ&<͜'. Press   *(Er+sS{2VD<2WD!C"r{!ND?*&E͋3:dD=(!ͣ:dDG> x;//0.(!.z8 2aDW2$E!9D=Di/6SB2aD!$E6*4D{;0 5"2D"6D":D"LDK*E%6 #"(E Loading -\ͻ&$Ͳ&WyGr<(.Cm{Km{B Ͳ&Wyw# File not foundU.%2 New File#!*(E File too bigͳ%2E"!e6B#6A#6K>:aD(,Workfile 1 not saved. Save2aD-/-!D\$ Saving \-*(E+6%͸&Gr!]l2aD<2D\Ͳ&*&E͸&Gr<(NWyGr~#GͲ& >Wyx xր> \Gr\! 6T] Directory  Disk fullU.͸&Ͳ&:D : FAw#yA"4D?Ü.SB0 !dD6#w!dDBͣ/ !dDKCͣ/7=( !C ^#V7i/SB4#wi/BqB!ͣ!dD~#~͇/= < >^@ N#0O # >>O BqB!VD~ s6!"XD2ZDͣ;<:h88 !*ͣ1!ALine !ACol !:TD AInsert AOverwrite :[D AIndent:ND<*ZD(2ZD!ͣ0[XD*2D;ʆ7͆7[&E*2DRMDy(> 0BqB ! ͣ<>0*2D"XDÆ70G> |>0(-'11d1 1 =">͓A"2D!t{"4D?@=29 *2D͓A;=">:cA>#[4DsAt{R*2D7>6 #6 *4D;"4D?*4D;">*:D;"2D*"2D@=>*4D;8 A8;8 A0#"4D*4D?>[4DկR0<2q{+;8+*2D͓A">*2D͓A"2D@=!t{"4D A8? A0;8 :q{ ># A8*2DͲAM::SD*4D"JD">*2DͲA"2D=!C"r{9!C"r{2SD"2D=F07*4D[JDRA6  07*4Dͧ?{6 ;(#yA!t{"4D?ʹ:">*2D͓A8 RMD;=&>*2D͓A hR8<00 D-: #V6#/0^ :eD>y 6 ~04J ~(~͇/#4 ͹1 - SB( (( ͹1_~ݾ04s~#͇/~8VÙ1~5+~ 1A>ɯ2`D12U=FindrD1=Replace withD=OptionsD1:hg%.ã>2`D112i/6">>#[4DsAt{R[2D"jD!DF6(C#~08:0 40_0.+ͧW U N G B { SlD*&E:_Dg(*(E_ *jD"jDf [(E;b3;b3tD:sDGf(=_0F(3~8 =++>:( Z:i=͞;=A=>[4D;8~ (8 A8*UA A8%*2DͲAʹ7\7$;*4D *4D;8"4DUA?yAUA~ (qB†7͎;0Æ7͎;0Æ7:WD!i74 &oͣ*LDG( ͓A0<;;#[(ER#{+[&E> ;8 #+t{ ~Ϳ;:h=G<̓<͢<:NDG(~Ϳ;0; (:h=GF(̓<͢<>[4DsA#"hD;0+̓<͢<[hD;(~Ϳ;0; (m<~Ϳ;0  0@{<:(M>FF @[FD;87[HD;8!,FF ![BD;8[DD;(0 :Fl:FÅ:š> : 2VD:i=o&ͣ 38T(3 K6F( 3~8386f̿;:`D4^ KlD ClDx E38f(*jD32͸3͋3^=Search string not found>͑3=[(E;8;"2DRt{"4D?@[&EsA*(E+sA08:A8 [a8{طf( Ϳ;?f(;ȾV( 30ɾkb)))qB(N a͋3x;N U=Replace (/): nfͣBqB  y !ͣBqB  y SB>ͧY( NƯ2$E:DO:sDO0f *jD>x(!DqB)A =Af F">=*BD[DD;6==Write block to fil ;> !ͣZ*2DSFDSHD!t{6~[BD; "FD[DD; "HD X6 #(eͿ;0[DD;0!"HD[BD;0!"FD>2QD6 #*4D?F07:WD=07 (w# Ϳ;0&==Line too long - CR inserted>!}R9=͆;=A6!ͣ;!ͣ<> !{s{+; {;PYsA>#MD*FD>"FD*HD>"HDi`#t{R:QDO0*2D>*2D!t{A(%~[FD; "BD[HD; "DDw##+> w**ER8&B =0A byte(s) left>=ERROR: Out of space>Ü.=*** INTERRUPTED>Ü. BU.0z[ eH5 -Ͳ&<("=Overwrite old \-,(Ͳ&*DD~6=*BDq&wD1D=Read block from fileH5 -Ͳ&< =\.>6*(E[*E RDM*nD7>!5*nDR!5"\%?%"DD*nD"BD*m{RDM![nD5û>6=i6*nD[BD"BD "DD>*BD͋3D76=i6*nD"BD "DD@=D7F(>#[4DsA&>t{R[2D"nD[BD;[DD8;0 *BDR"pDMD>KpDy/Ox/G[nD*BDF">*BD;"2D*6D[BD;8[DD;0*2D"6D*DD[BDR=MD@>*2D"BD"DD=D7!bDx7D7*4D"HD*2D"DDNF  (ERBһ>]T͍>S(Ex 8 G By(*BDp?"BD*DDp?"DD*LDp?"LD*2Dp?"2D*6Dp?"6D*:Dp?":D;طB [(ERMDx 8 G By(S(E[FDsAF("FDN[HDsA"HDt{:h=OR}88<2ND:h==2RDD72RD2ND6D7F*LD[&EsA"LD[2D;ʼ@8E[2D;( ͲAyB"LD6x :(:i=8 !ͣ c )A[2D;( ͓AyBx @:i=_yW81 F@0':WD8!(2WD*LDB͓A<"LDsq*LD :i_yO0͓A y "LD)A@ͷ@:WDo:i}(=(2WD*LD͓A" \ A(>(*4D"FD*2D"BDF">*BDË3">*DDË3&͉7!t{;07)A">*(EË3!t{"4D?>#{;8!{"4D?6!TD~w6![Dfnã*2D͓A">*2D͓A"2D@=*2DͲA">*LD[&E;">*2D[LD;(ͲA[2D"2D:i ͲA*2DͲA͟7">*2D*LD:iG͓A͟78[LD;0͓A*LD[2D;">">*LD:iG͓A">:iOG*LD͓A"LDA*2D͓A"2D@)A=">:iGO*LDͲA"LDA*2DͲA*LD[&E;()A">*&E"2D"LD@=!t{"4D?F(͏7S7Ư2$E> 8͆7 FM:CAT:29*2D !$!LD<:i=Þ;[r{Ⱦ(7:SD 02WD6 F( *FD;8 "FDN( *HD;8 "HD.A!{R(MDkb#!{6 ;͆7:h=*4DG#<*(E+RDMT]8 > A7MD> ;8 ;(8 #`i.A{R+MD{kb+y(6 ͣF(:%E2%E*>D"@D B*@DEB[>DR͠w"@D#m{R!Y{[>D*@DR( EB~">D[>D*@DR{ DCAB&!fu ~wRO*o Xnu iw+p+r+s*o6+p+:{( r+s~Ͷr+:{ͼrLxn*o:{*yW(!"{*{{*s{"{{~6+F+V+^+(#!l:{(%V+^+iR:\{2{*b{}2{l"{r+s+x(J~OF+~2{+V+^+"Z{iR*s{Wm~\m~+(\mWmWmͨm!|M%                <>,[].*+-/$:=(){}^#' 8f9f9s9997778~8T8S7\7/8A88J77'7|9q7κ$UZZ7696ݵU4*T}712-2t{t{t{Y{Y{    !2{4OA*s{*{*{:{:{:{!{4̀F2{2{2{"{"{S{|(R( lktk! hkM2k#^#V++~+(XR:W{ 7:\{8(@(98(6 0/2k)Uk*X{pk*b{lk2k2W{>2\{!"b{Uke2kR!{5:{(F*{:{ G2k>!vk!;hk2k" >!vk!-hk>*vk:{= 2k&*{|('[{R(:{( :{>~klkpk!#dk2k*o"s{"u{"{{*s{[{{R#^#V~( ++~+(~ͼrI*s{:{_Wmim\mWmWmͨmn(*s{}OwRXnDu> #:{ͼrK6n ~2{+V+^i"{>2{ͪOͼr!E{{sq{*(E#"{$$$$"{* y"ygo2{2{2{2{2{2{2y2{2{"{"{qq+"Ty> 2{>2{>2{*&E"{"{!y6*yͤl**E+"w{T]B"s{"u{"{{ͩk!tE:y= xll"yrwoXn u tFn tFn(Po*o>1!vk!y:y(ltk:{(>~kyk!ehk>!~kyk>~kyk* ylk:yg.>yk!hk̀FR~.ͼr ! dk[y$l!l:{_$l*s{im"s{:{_lYkyk2\{6RXn6u:{:{!{4~2{*{*{!"{"{2{mP*{"b{"{"{:{2]{2{2{>2\{6RPXnu(O*{[{R8"{n(8ͪOOjoP*{in("oHo:{>2{mP2{"{n(:{PoXnur:{oXnuXn3ujoR*`{[^{|ͼr!ck!{ ~~k#:y= xl2{l*{*y*{"y!"{!9!3y$:y= '!{4y 6#3yGrGr<Ͷr\2{2{*y"{\mͨmn(*o*s{Wmimo 8ix\mx Wm !Wzy \m~# Wmͨm'"o\mTm*s{Wmͨm}O[Z{r! GF===;;;}2\{6R oWm*s{͜mͨm"^{>2\{>2]{!"b{6RXn/uXnBu }O:\{80rD*Z{"^{>!>!02\{"b{6RXnn!Wmim:{\mWmͨmn(Po!{~42\{S^{"`{z!(#"b{6Rix ͪr3Xnbuͼr iͼr,orͪr4QͧQͪOͼr:\{ rWm*s{"Z{!\{~\m#ͨmi{~+2W{V+^+SX{V+^\{~+"y{*s{Ky{B #N#F ~ 6++~ @+~(;6+^+V*s{Kw{B Ͷr*#N#F ~ ++(~+(F+Nq+p}R2{2{YS"{dk*s{[u{R0I#N#F!!+sXoIr*ovk*{#R!l+älgSXnu2o>2{:{2{_(>2{~kvk!lgSXnVu(2o͒^2kEyk6nͼr)XR:W{ :\{ 0r m:\{`o^Qkͼr,*vk:b{= 2k&{~k2kyk###!c\HoͲ^@oag:\{ ( :b{=> rQk@oag:\{ :b{= r! (!Hoy^!Qk@oy^.!IhkHoy^!]@oy^]*^{SR*o{tk!BY]@oy^]*^{SR*o{tk!{BY!!]]QkHoag:\{rHoy^!BYHoagQk@oag!eX]HoagQk@oy^Qk@o͝^!OÓ]! !!?hk!!!l!c!ZV! dkp^2ki`oy^2k m^+mͷe`oQk^x r^x r^x r^x ͼr ! hk^x ͼr!2ke.z_ 2kR>2{n(:{~kyk@o($l:{˟~kyk:{:{gS2{2{n(Xnu(6Ykyk!lXnPu(U:{Ͷrr)gSXnu(2o!l6nͼr(:{ͼrHWm:{\mYkWmyk:{:{!{Ͷraag:\{ͼr!{^4!{:]{w*{>"vkn(XnTuͼr gS2{Ho>> o>( >< o>(2{goGi x (Ar!{~ 6>* o (6n XR*X{6n( 6nͼrJ++V+^ j>+ o(>- o(:!(##(##^#VzͶr/.x 0ͼr/! hk Qkz_xͼr/y(ͼr,!Phk 6`x  ( ͼr/2k|g2k}o}_ ( ͼr/2k|g2k}o}_`/ o}VPo+F+V+^+V+^+++V+^+V+^+ʸWHoF+~+2W{V+^+H~+(AiR:W{ *:\{8f^FX:\{(* 8) $2k m+g mag?m:i{ħX+mQk(@o(@oPoz(tkpk>vk:\{(80r6:{O G(>*{"X{mgQk>2W{`o:\{Y m+g%mͧX:d{=(<(2k[2k*e{yk2k*o{lk2k:\{ x - ! # x 2ke. x  ! hk:\{  y*^{*{|[^{Rr,:\{(O 04 :{o '#000*`{| *m{~ !\{i{0 #r!a:{_,j(x 2k}/o|/g#2kxG2{x 0( 2kQkz x ! hk  x 2ke.x 2k z ! hkz (0#( 8 2kx Uk! hk 2kxͼr, {ȷyKr,*{|[{zRr,^}_9`^}_9`Y>j 5:{_j2{x 1yO~kyk tk!Nhk@k6n WiR*^{"{:\{G͔g \:\{0( ͼf*^{"{:\{GiR:\{Oͼr>mg*^{~ ͼr>*`{~ ͼr>*b{|ͼr>e.yk!9hkn E!hkn͝^x Oͼr,Xnbu! Qk͝^xŹͼr,!hkn(o!],V+^+V+^SX{iR2W{`of^FXeY!q !p7Y4Qk@oͲ^PohkY!7YY!!!YBYàZYͶr?!(!pQk@oy^Yͼr@!!Y!YY:\{ *^{SR*o{pkY!YPoY:\{_^#Vhkqp{jHoYr͔g7:\{8 0mg:\{ɯ=>2{n(ͬZsY8 ʺ[ͼrA!hkQmgͬZͬZag:\{8 ( 8rB :b{=g.yk!!s (!E ( !O:b{= !Nhkn(Po!:{hk:{G! hk!:{w(!:{(!2{hk>2{n( !hkô[Y8! ʿ[ͼrA!hkë[a!hk! wn ^Po#>+e~ke2k&e2kl&e2k}lge! hk!Ho^Pox(͠^ e e!"{e !Ho!Ͳ^PoñcHoͲ^@o!HoͲ^@oy^@oQky^Po!lhkHoͲ^n Ͳ^!>hkPo!e!~hkn! y^Po!< hk!e!eY !!!eͼr#hk!VV!^^eͶr?(!>!E!`/!hk>j !x ~,() !hk@kë[a^x8 8rB n AͿ^*an y^x *n Qky^!x .tkx Qk!tkx!(!z (!' ( ! (!#hkn[Po!ÙZ!!"{:{ͼr#!hk*^{SRn mag%mͧX*{hkPoàZ!!Yͼr%Qk@oagQk@oy^n(Qkag:\{ :b{= rgYHo͏\Qk@oy^Qk@oy^!PohkHoͲ^@o͏\Qk:b{=g.@oy^yk!! ag:\{r"Hö́^*an y^Qkx (-n y^Qk!x (.tkQkx ( !tkQk@o͏\:b{=g.yk!x (! ""b>Hoy^Qkn y^2kDM2k!Pohk 2ko&>Hoy^Qkn y^2k2k!Ho6n(6n ++V+^tkagPo Ho6n V+^iR agͤl*b{ͷe2kMh2k!9 oy^oHoy^PoHö́^Ho͝^n( !tk>2\{YͼrPoJJ:W{O*X{:\{ g!$ &:b{=g.yk! (>! (>**X{vkhk 2k! Uk(':{O( *^{[`{R(pkR#lk!Whk 2k2ks:b{=2k#r*X{ :b{=>" 2k}>2vk2k*yk:\{ 0 (mg!- ( !;(g!^hk:{ >**{vk:b{=2k&mg" >)>=>^ݾtonrnr nrnrn:{(r)nrnrororXndurXnBurq2{=2{~( ( ((({( ~* qF~$(!qx*~  ~) q} qq~ͧI(MR(GA(AU(;X(5V (/B@()C(#W(LK(D(F(RG(NP(Jr]q~+( -(ͼr]6!{~wq~,oq~hrͪr]02{q~hr0 q~:yͼr` -\Gr<ͶrZy$:y=( !Wy"{!y>!*s{[{S{R<|Ͷrc}o)|"{"{2{2y!"{:{2{:{":b{= 2kn2k^#V*^{SR*b{:k{glki 1xͼr<.ayk"X{>2\{!t"^{!"`{i"b{Dk>!*X{vkigr)͔g:{*{O G>!(>*vkG >vk2kg("6n .XR:W{>!(>*!{p*X{"{h(i(Vi(́iXnxͷe> 2\{!"b{-"^{-"`{h:{GX!{~O6n x_*{"{!{6*i:\{nmgQkf^*`{SR:i{ͼr,*k{| }0!()2k+=< }8 2k#<  jpk2k:{O(*m{[k{R#pk!Mhk*^{iR*b{| }=(.= 2k)$ 2k)]T):{g pk!hkh2k:\{ n)ho>2{| }=(E(Qk2"[2{*p~#:{ͼr[*{"{*{"{!yq ( ( ( 8w#2{`qqq`q6*{#"{}(> :y(>I> > *{@.͠(. *** Abort compilation,ͼr  :y *{~#"{*{[{R80[{:{GGryGr !>S{*{~#"{ 2y:{2{:{2{*{#"{A[?_a{?Sr0:?||zr}DM!>))0 = BKgo>jB0 7?= ## ##+~qq2y( yR[{:y [&ER[{" y:y= 3yGr{q{"Kk)<2k:\{n:]{O6nͼr)XR*X{|!{F(mg6*X{"{*{[X{"{:\{ o!{~ 4mg62k^#V*^{iR:\{nmgQk*b{y^:{O( pk!Mhk2ko> 2\{!"b{+"^{-"`{>2{ir)ix rix ͼr j>j(ͼr,jx xGٯ|/g}/o#~-(+tox ( r{j6nFx+ 8V+^ F+N+V+^+~+ngNWz (+~~'(^(# f!Wz~^($#(6' B#~Ͷr7' #~' w# #~ͧͶr7@#w# #}ͪr8y= g:Wzo wo$(3hr0=" tEGETNItAHCtAER tAELOOBtXETtTYB  URT SLAF  NIXAM !I P tUPTUO tUPNI tOC tRT tBK tSL tUA tSU tELFUBtTPPAEHtTPRUCERtTPTSNOCtTPNINOCtTPTUONOCtTPTUOTSLtTPNIXUAtTPTUOXUAtTPNIRSUtTPTUORSUtTPRORRE tAERBC      ufuu"1hr0ͧE(. .()( ͤͪr9 ͪr8 F#~~k#y~k!Wz ~#~k>)>%>!{~kz>> >>>!~k}~k|G:y p#(=(*RͶrk:y([{= [{:y([{*s{7Rͪrc*y%%Rͪrb!{F(ˆl:{_!Wyp<ll*Ty#"Ty2{*yRͪrb"y:y=( ]k*{:{G(#^#VR8###+h&))DMT]+#s#r#s#r!{4:{G*{^#V#ͤlF#kF#k:y=[yR}2{)lg[{[TyR(l"Ty! !{Nˎ"WyGr3yGr=" uuuvPROGRAENFORWAREXTERNAPACKEARRAFILSERECORSTRINOABSOLUTTHEELSDUNTINONI.:LABECONSTYPVABEGIOVERLAPROCEDURFUNCTIOBEGIYSISWHILTREPEA.TFOMTCASUGOTVWIT0VINLINzVT#DOWNT+ANDIMOSHSHOXO<>< (IWRITELZWRITZREADLZREAZDELETH\INSERi\ASSIG%YRESEԛYREWRITŠYCLOSŽYERASSYRENAMHYSEEnYGETMEv]NEׁ]FREEME͖]DISPOSš]MAR˶]RELEASŻ]OVRDRIV]CRTINI^CRTEXI^GOTOXO]CLRSC$^CLREO*^NORMVIDE/^HIGHVIDE/^LOWVIDE4^IN"4rd{W{"{!9 *{d{W{"{!9 d{W{!9 z\m{*s{w+"s{ék~Srͪr:Ͳn͚n~a8{0 \m#~dr0*s{#wo~Srͪr:*u{[s{RWm*s{"u{*{{*w{"}{:{(\y2{*u{[}{R 2{=#^#V~(+~# ++F+H˸a8{0 y(dr8"{S{~2{*{[{:{m[ o~(~.#to>] o~.~)>:>;>,>.>( "("SLIN9^DELLIN>^DELAk]BLOCKREA[BLOCKWRIT\RANDOMIZe]MOV]FILLCHA]EXIC^HALI^PORO^STACKPTZ^FLUSȍYEXECUT`YCHAI[YSTҜ\VA]BDO5eBIOeCHdORcCOPBdLENGT#dPO4dCONCAcdSUCöcPREĹcUPCASdTRUNàcROUNĥcODcABScSQBcSQRgcSIlcCOqcARCTAvcL{cEXЀcINԅcFRAÊcRANDO͎dPARAMCOUN~dPARAMST҃dLcHcSWAcPT dIORESULԦdEOƫdEOLdSEEKEOƷdSEEKEOLμdFILESIZdFILEPOdKEYPRESSEcMEMAVAIdMAXAVAIdPORԡeSTACKPTҬeADDXeSIZEOeBDOSH5eBDO6eBIOSHeBIOeME" are not allowed  can not be  constant  does not  expression  identifier  file  here Integer File Illegal  or Undefined  match  real String Textfile  out of range  variable  overflow  expected  type Invalid  pointer 01';' 02':' 03',' 04'(' 05')' 06'=' 07':=' 08'[' 09']' 10'.' 11'..' 12BEGIN 13DO 14END 15OF 17THEN 18TO DOWNTO 20Boolean 21  22  23  24  25  26  27  28Pointer 29Record 30Simple"" 31Simple 32 33 34 35 36Type 37Untyped 40 label 41Unknown syntax error 42 in preceding definitions 43Duplicate label 44Type mismatch 45 46 and CASE selector 47Operand(s) operator 48 result 49  length 50 length 51 subrange base 52Lower bound > upper bound 53Reserved word 54 assignment 55 exceeds line 56Error in integer 57Error in 58 character in 60s 61 s ands 62Structureds 63s 64s and untypeds 65Untypeds""yS 66I/O 67 s must be parameters 68 componentss 69dering of fields 70Set base 71 GOTO 72Label not within current block 73 FORWARD procedure(s) 74INLINE error 75 use of ABSOLUTE 90 not found 91Unexpected end of source 97Too many nes"ted WITH's 98Memory 99Compiler0 d WITH's 98Memory 99Compiler/"" " #6##lu "/"""@2Б!12 2*"*"rKB*"!ے &),HV]agqty Egmv"&^#V#{*N#F r+s!6#6q(6 #( {w#?6x2q(#Q!\q(a!\\!Q      a{ >## >#### #!C"* *#s#r####g#s#r7!}!*!y 0&! ~#fo(:z <2z!f!z64!6">2{G:|2{x4!  ^C$qqqq1:2_ :_:@. '. !<.    7*"! *o"![K<!ѷ(  :{>> 2|TURBO COM B TURBO.COM not found. Re-insert disk in drive X: and hit RETURN$ ########?program CommandLine; { COMMANDLINE PARAMETERS DEMONSTRATION PROGRAM Version 1.00A This program gets parameters from the command line: INSTRUCTIONS 1. Load the TURBO compiler and compile to a .COM file 2. Quit the TURBO compiler and execute the program with  parameters. Try:  cmdlin abc def  &cmdlin Greetings from Frank Borland!  Pcmdlin NOTE: For information about these functions, please refer to your   TURBO 3# # .0 Reference Manual. } var i : integer; begin for i := 1 to ParamCount do writeln(ParamSTR(i)); end. 0 Reference Manual. } var i : integer; begin for i := 1 to ParamCount do writeln(ParamSTR(i)); end.  $$$ A3+A4+A5)  --- In the example the next last line shows that the active cell is cell A5 and that A5 contains a formula: (A1+A2+A3+A4) which means that the numbers in A1,A2,A3 and A4 should be added and placed in A5. The formula can be abbreviated t~o: (A1>A4) meaning: add all cells from A1 to A4. .PA You move the cursor around just like you do in the TURBO editor:   (Up)   $$6 Ctrl-E  "(Left) Ctrl-S Ctrl-G (Right)  Ctrl-X  (Down) A cell may contain a number, a formula or some text. The type of of the cell and its coordinates are shown in the bottom left corner of the screen: A 5 Formula: 1 (Means that the current cell is A5 and that it  $ contains a formula) A 1 Text + (Cell A1 contains text) A 2 Numeric (Cell A2 contains a numbe$u INTRODUCTION MicroCalc is a tiny spread sheet program a la VisiCalc. It is provided with the TURBO-Pascal system as an example program. Since MicroCalc is only a demonstation program it has its limita- tions (which you may have fun eliminating): * You cannot copy formulas from one cell to others. * You cannot insert and delete lines or columns. In spite of its limitations MicroCalc does provide some interest- ing features among which are: * 11 digits float$v"r and no cell references) .PA  Summary of MicroCalc Cells are denoted A1 through G21 giving a total of 147 cells. Summary of standard functions and operators: SIN, COS, ARCT, ABS, FACT, EXP, LN, +,-,/,* Futhermore the operator '>' can be used to denote a range of cells to add. Entering data To enter data in any field move the cursor to the cell and enter the data. MicroCalc automatically determines if the field is numeric or a a text field. When moving be$ing point reals (Thanks to TURBO Pascal!) * Full set of mathematical functions (SIN,COS,LN,EXP etc.) * Built in line editor for text and formula editing. * Text can be entered across cells. * Once entered a formula is protected from accidental erasure. .PA In addition to this MicroCalc offers all the usual features of a spread sheet program: * Load a spread sheet from the disk. * Save a spread sheet on the disk. * Automatic recalculation after each entry. (May be d$ 6tween fields: ^S,^D,^E,^X move left right up and down. When editing a field ^S,^D moves left and right. ^A,^F moves to beginning/end of line. DEL,^G deletes left or right character. ESC makes it possible to regret changes and to edit an existing cell. .PA  Summary of commands / will restore the screen Q will Quit MicroCalc L will Load a spread sheet from the disk. S will Save a spread sheet on the disk. R w$<isabled). * Print the spread sheet on the printer. * Clear the current spread sheet. The spread sheet is an electronic piece of paper on which you can enter text, numbers and formulas and have MicroCalc do calcula- tions automatically. T6he next page shows the electronic spread sheet. .PA  -- A B  C d D .... 1 22.00 2 1.00 3 2.00 4 3.00 5 28.00 . . A 5 Formula: (A1+A2+ $$ill Recalculate P will Print the spread sheet. F makes it possible to change the output format for numbers. A switches Autocalc ON and OFF Note: to use scientific notation use the the F command and enter minus one - -1 for the number of decimals. .PA  EXAMPLES The following are examples of valid cell formulas: A1+(B2-C7) subtract cell C7 from B2 and add the result to cell A1 (A1>A23) the sum of cells: A1,A2,A3..A23 $$h(A1>B5) the sum of cells: A1..A5 and B1..B5 The formulas may be as complicated as you want:  SIN(A1)*COS(A2)/((1.2*A8)+LN(FACT(A8)+8.9E-3))+(C1>C5) To edit an existing formula or text simply move to the cell and press ESC, make your changes and press . If you make a mistake you may press ESC again, the old value of the cell will then be restored. To try MicroCalc now you may use the /L command and load the file: CALCDEMO. $$^aV try MicroCalc now you may use the /L command and load the file: CALCDEMO. $$$ $ %%program MicroCalc; { MICROCALC DEMONSTRATION PROGRAM Version 1.00A This program is Copyrighted by Borland International, Inc. 1983, 1984, 1985 and is hereby donated to the public domain for non-commercial use only. Dot commands are for the program lister: LISTT.PAS (available with our TURBO TUTOR): .PA, .CP20, etc... INSTRUCTIONS 1. Compile this program using the TURBO.COM compiler. a. Use the O command from the main menu to select Options. b.%W5n use } { the TLIST program to generate a listing.  } {$I MC-MOD00.INC Miscelaneous procedures  } {$I MC-MOD01.INC Initialization procedures  } {$I MC-MOD02.INC Commands to move between fields  } {$I MC-MOD03.INC Commands to Load,Save,Print  } {$I MC-MOD04.INC "Evaluating an expression in a cell } {$I MC-MOD05.INC *Reading a cell definition and Format comma%0 Select the C option to generate a .COM file.  3c. Select the Q option to Quit the Options menu.  2d. Select the M option to specify the Main file  e. Type "MC" and hit  +f. Type C to compile the program to disk  g. Type R to run the program 2. Exit the program by typing: /Q } {$R-,U-,V-,X-,A+,C-} const FXMax: Char = 'G'; { Maximum number of columns } FYMax != 21; { Maximum number of lines  %Ond} {.PA} {"***} {* START OF MAIN PROGRAM PROCEDURES  *} {"***} { Procedure Commands is activated from the main loop in this program } { when the user type a semicolon. Commands then activates a procedure} { which will execute the command. These procedures are located in the} { above modules.  % } type Anystring = string[255]; ScreenIndex = 'A'..'G'; Attributes = (Constant,Formula,Txt,OverWritten,Locked,Calculated); { The spreadsheet is made out of Cells every Cell is defined as } { the following record: } CellRec = record CellStatus: set of Attributes; { Status of cell (see type def.) } Contents: String[70]; :{ Contains a formula or some text } Value: Real; { Last calculated c% } { For easy reference the source code module number is shown in a } { comment on the right following the procedure call. } procedure Commands; begin GotoXY(1,24); HighVideo; Write('/ restore, Quit, Load, Save, Recalculate, Print, Format, AutoCalc, Help '); Read(Kbd,Ch); Ch:=UpCase(Ch); case Ch of 0 { In module } 'Q': Halt; 'F': Format;  { 04 } 'S': %C(ell value } DEC,FW: 0..20;  { Decimals and Cell Whith } end; Cells = array[ScreenIndex,1..FYMax] of CellRec; const XPOS: array[ScreenIndex] of integer = (3,14,25,36,47,58,68); var Screen: Cells; * { Definition of the spread sheet } FX: +ScreenIndex; { Culumn of current cell } FY: Integer;  { Line of current cell } Ch: Char; { Last read character % Save;  { 03 } 'L': Load;  { 03 } 'H': Help;  { 03 } 'R': Recalculate; { 05 } 'A': Auto;  { 00 } '/': Update;  { 01 } 'C': Clear; { 01 } 'P': Print; %] } MCFile: ,file of CellRec; { File to store sheets in } AutoCalc: boolean; { Recalculate after each entry? } { The following include files contain procedures used in MicroCalc. } { In the following source code there is a reference after each } { procedure call indicating in which module the procedure is located.} { If you want a printer listing of the following modules then you } { must let the include directives start in column one and the %%Je { 03 } end; Grid; { 01 } GotoCell(FX,FY); | { 02 } end; { Procedure Hello says hello and activates the help procedure if the } { user presses anything but Return } procedure Wellcome; procedure Center(S: AnyString); var I: integer; begin for I:=1 to (80-Length(S)) div 2 do Write(' '); writeln(%%kS); end; begin { procedure Wellcome } ClrScr; GotoXY(1,9); Center('Welcome to MicroCalc. A Turbo demonstation program'); Center('Copyright 1983 by Borland International Inc. '); Center('Press any key for help or to start'); IGotoXY(40,12); Read(Kbd,Ch); if Ch<>^M then Help; end; {.PA} {"***} {* *THIS IS WHERE THE PROGRAM STARTS EXECUTING  *} {**%%,-***} begin Init; %{ 01 } Wellcome; ClrScr; Grid; a{ 01 } GotoCell(FX,FY); repeat Read(Kbd,Ch); case Ch of ^E: MoveUp; "{ 02 } ^X,^J: MoveDown; #{ 02 } ^D,^M,^F: MoveRight; ) { 02 } ^S,^A: MoveLeft; %dg{.PA} {!**$*} {* SOURCE CODE MODULE: MC-MOD00  *} {* PURPOSE: #Micellaneous utilities an commands. *} {!***} procedure Msg(S: AnyString); begin GotoXY(1,24); ClrEol; Write(S); end; procedure Flash(X: integer; S: AnyString; Blink: boolean); begin HighVideo; GotoXY(X,23); Write(S); if Blink then % C{ 02 } '/': Commands; ^[: GetCell(FX,FY); H{ 04 } else if Ch in [' '..'~'] then GetCell(FX,FY); &{ 04 } end; until true=false; 1{ (program stops in procedure Commands) } end. @% begin repeat GotoXY(X,23); Blink:=not Blink; if Blink then HighVideo else LowVideo; Write(S); Delay(175); until KeyPressed; end; LowVideo; end; procedure Auto; begin AutoCalc:=not AutoCalc; if AutoCalZc then Flash(65,'AutoCalc: ON ',false) else Flash(65,'AutoCalc: OFF',false); end; Xthen Flash(65,'AutoCalc: ON ',false) else Flash(65,'AutoCalc: OFF',false); end; % &&&&&qG {.PA} {!**$*} {* SOURCE CODE MODULE: MC-MOD01  *} {* PURPOSE: 1Display grid and initialize all cells *} {* in the spread sheet.  *} {!***} procedure Grid; var I: integer; Count: Char; begin HighVideo; For Count:='A' to FXMax do begin GotoXY(XPos[Count],1); && Write(Count); end; GotoXY(1,2); for I:=1 to FYMax do writeln(I:2); LowVideo; if AutoCalc then Flash(65,'AutoCalc: ON' ,false) else Flash(65,'AutoCalc: OFF',false); Flash(33,' Type / for Commands',false); end; procedure Init; var I: ScreenIndex; J: Integer; LastName: string[2]; begin for I:='A' to FXMAX do begin for J:=1 to FYMAX do begin with Screen[I,J] do begin  CellStatus:=[Txt];  Contents:='';  Value:=0; && Y DEC:=2; { Default number of decimals }  FW:=10; { Default field whith F } end; end; end; AutoCalc:=True; FX:='A'; FY:=1; { First field in upper left corner } end; procedure Clear; begin HighVideo; GotoXY(1,24); ClrEol; Write('Clear this worksheet? (Y/N) '); repeat Read(Kbd,Ch) until Upcase(Ch) in ['Y','N']; Write(Upcase(Ch)); if UpCase(Ch)='Y' then . begin ClrScr; Init; Grid; & & &1end; end; 8nd; end; 8&O{.PA} {!**$*} {* SOURCE CODE MODULE: MC-MOD02  *} {* PURPOSE: 1Display values in cells and move between *} {* cells in the spread sheet.  *} {!***} procedure FlashType; begin with Screen[FX,FY] do begin GotoXY(1,23); Write(FX,FY:2,' '); if Formula in CellStatus then writ&&e('Formula:') else if Constant in CellStatus then Write('Numeric ') else if Txt in CellStatus then Write('Text '); GotoXY(1,24); ClrEol; if Formula in CellStatus then Write(Contents); end; end; { The following procedures move between the Cells on the calc sheet.} { Each Cell has an associated record containing its X,Y coordinates } { and data. See the type definition for "Cell". L } procedure GotoCell(GX: ScreenIndex; GY: integer); begin with Scree&&n[GX,GY] do begin HighVideo; GotoXY(XPos[GX],GY+1); Write(' '); GotoXY(XPos[GX],GY+1); if Txt in CellStatus then Write(Contents) else begin if DEC>=0 then Write(Value:FW:DEC) else Write(Value:FW); end; FlashType; GotoXY(XPos[GX],GY+1); end; LowVideo; end; {.CP20} procedure LeaveCell(FX:ScreenIndex;FY: integer); begin with Screen[FX,FY] do begin GotoXY(XPos[FX],FY+1); LowVideo; if Txt in CellStatus&&  then Write(Contents) else begin if DEC>=0 then Write(Value:FW:DEC) else Write(Value:FW); end; end; end; {.CP20} procedure Update; var UFX: ScreenIndex; UFY: integer; begin ClrScr; Grid; for UFX:='A' to FXMax do for UFY:=1 to FYMax do if Screen[UFX,UFY].Contents<>'' then LeaveCell(UFX,UFY); GotoCell(FX,FY); end; {.CP20} procedure MoveDown; var Start: integer; begin LeaveCell(FX,FY); Start:=FY; repeat FY:=FY+1; if FY>& ''pFYMax then FY:=1; until (Screen[FX,FY].CellStatus*[OverWritten,Locked]=[]) or (FY=Start); if FY<>Start then GotoCell(FX,FY); end; {.CP20} procedure MoveUp; var Start: integer; begin LeaveCell(FX,FY); Start:=FY; repeat FY:=FY-1; if FY<1 then FY:=FYMax; until (Screen[FX,FY].CellStatus*[OverWritten,Locked]=[]) or (FY=Start); if FY<>Start then GotoCell(FX,FY); end; {.CP20} procedure MoveRight; var Start: ScreenIndex; begin LeaveCell(FX,FY); Start:=FX; r'en {$I-} assign(F,FileN); reset(F); {$I+} if IOResult<>0 then Exist:=false else Exist:=true; end; procedure GetFileName(var Line: AnyString; FileType:String3); begin Line:=''; repeat Read(Kbd,Ch); if Upcase(Ch) in ['A'..'Z',^M] then begin write(Upcase(Ch)); Line:=Line+Ch; end; until (Ch=^M) or (length(Line)=8); if Ch=^M then Delete(Line,Length(Line),1); if Line<>'' then Line:=Line+'.'+FileType; end; {.CP20} procedure Save;'epeat FX:=Succ(FX); if FX>FXMax then begin FX:='A'; FY:=FY+1; if FY>FYMax then FY:=1; end; until (Screen[FX,FY].CellStatus*[OverWritten,Locked]=[]) or (FX=Start); if FX<>Start then GotoCell(FX,FY); end; {.CP20} procedure MoveLeft; var Start: ScreenIndex; begin LeaveCell(FX,FY); Start:=FX; repeat FX:=Pred(FX); if FX<'A' then begin FX:=FXMax; FY:=FY-1; if FY<1 then FY:=FYMax; end; until (Screen[FX,FY].' var I: screenIndex; J: integer; begin HighVideo; Msg('Save: Enter filename '); GetFileName(Filename,'MCS'); if FileName<>'' then begin Assign(MCFile,FileName); Rewrite(MCFile); for I:='A' to FXmax do begin for J:=1 to FYmax do write(MCfile,Screen[I,J]); end; Grid; Close(MCFile); LowVideo; GotoCell(FX,FY); end; end; {.CP30} procedure Load; begin HighVideo; Msg('Load: Enter filename '); GetFileName(Filename,'MC'bCellStatus*[OverWritten,Locked]=[]) or (FX=Start); if FX<>Start then GotoCell(FX,FY); end; bellStatus*[OverWritten,Locked]=[]) or (FX=Start); if FX<>Start then GotoCell(FX,FY); end; 'S'); if (Filename<>'') then if (not exist(FileName)) then repeat Msg('File not Found: Enter another filename '); GetFileName(Filename,'MCS'); until exist(FileName) or (FileName=''); if FileName<>'' then begin ClrScr; Msg('Please Wait. Loading definition...'); Assign(MCFile,FileName); Reset(MCFile); for FX:='A' to FXmax do for FY:=1 to FYmax do read(MCFile,Screen[FX,FY]); FX:='A'; FY:=1; LowVideo; UpDate; end; GotoCell(FX,FY); end'' ?; {.PA} procedure Print; var I: screenIndex; J,Count, LeftMargin: Integer; P: string[20]; MCFile: Text; begin HighVideo; Msg('Print: Enter filename "P" for Printer> '); GetFileName(Filename,'LST'); Msg('Left margin > '); Read(LeftMargin); if FileName='P.LST' then FileName:='Printer'; Msg('Printing to: ' + FileName + '....'); Assign(MCFile,FileName); Rewrite(MCFile); For Count:=1 to 5 do Writeln(MCFile); for J:=1 to FYmax do begin 'AK{.PA} {!**$*} {* SOURCE CODE MODULE: MC-MOD03  *} {* PURPOSE: 1Read, Save and Print a spread sheet. *} {* Display on-line manual. *} {!***} type String3 = string[3]; var FileName: string[14]; Line: string[100]; function Exist(FileN: AnyString): boolean; var F: file; begi ''^ Line:=''; for I:='A' to FXmax do begin with Screen[I,J] do begin  3while (Length(Line)0 then Str(Value:FW:DEC,P) else Str(Value:FW,P);  Line:=Line+P;  end;  \end else Line:=Line+Contents; end; { With } end; { One line } For Count:=1 ''to LeftMargin do Write(MCFile,' '); writeln(MCFile,Line); end; { End Column } Grid; Close(MCFile); LowVideo; GotoCell(FX,FY); end; {.PA} procedure Help; var H: text; HelpFileName: string[14]; Line: string[80]; I,J: integer; Bold: boolean; begin if Exist('MC.HLP') then begin Assign(H,'MC.HLP'); Reset(H); while not Eof(H) do begin Readln(H,Line); ClrScr; I:=1; Bold:=false; LowVideo; repeat For J:=1 to Length('' Line) do  begin  if Line[J]=^B then  begin  Bold:=not Bold;  'if Bold then HighVideo else LowVideo;  end else write(Line[J]);  end;  Writeln;  I:=I+1;  Readln(H,Line); until Eof(H) or (I>23) or (Copy(Line,1,3)='.PA'); GotoXY(26,24); HighVideo; write('<<< Please press any key to continue >>>'); LowVideo; read(Kbd,Ch); end; GotoXY(20,24); HighVideo; write(' <<< Please p''Sress to start MicroCalc >>>'); LowVideo; Readln(Ch); UpDate; end else { Help file did not exist } begin Msg('To get help the file MC.HLP must be on your disk. Press '); repeat Read(kbd,Ch) until Ch=^M; "GotoCell(FX,FY); end; end; 0 toCell(FX,FY); end; end; /' ' (((: Char; function SimpleExpression: Real; var S: Real; Opr: Char; function Term: Real; var  T: Real;  function SignedFactor: Real;  function Factor: Real;  type  0StandardFunction = (fabs,fsqrt,fsqr,fsin,fcos,  farctan,fln,flog,fexp,ffact);  @StandardFunctionList = array[StandardFunction] of string[6];  const  =StandardFunctionNames: StandardFunctionList =('ABS','SQRT','S((oqQR','SIN','COS',  $'ARCTAN','LN','LOG','EXP','FACT');  var  4E,EE,L: Integer; { intermidiate variables }  Found:Boolean;  F: Real;  Sf:StandardFunction;  OldEFY,  { Current cell }  EFY,  SumFY,  Start:Integer;  OldEFX,  EFX,  SumFX:ScreenIndex;  CellSum: Real;  f(Q%{.PA} {!**$*} {* SOURCE CODE MODULE: MC-MOD04  *} {* PURPOSE: Evaluate formulas.  *} {* Recalculate spread sheet. *} {*  *} {* NOTE: 2 This module contains recursive procedures *} {* 7and is for computer scientists only. *} {*******(!unction Fact(I: Integer): Real;  begin  ,if I > 0 then begin Fact:=I*Fact(I-1); end  else Fact:=1;  end { Fact }; {.PA}  begin { Function Factor }  if Ch in Numbers then  begin  Start:=Pos;  *repeat NextCh until not (Ch in Numbers);  9if Ch='.' then repeat NextCh until not (Ch in Numbers);  if Ch='E' then  begin  NextCh; (**d} var Form: Boolean; {$A-} procedure Evaluate(var IsFormula: Boolean; { True if formula}  0 var Formula: AnyString; { Fomula to evaluate}  * var Value: Real; { Result of formula }  var ErrPos: Integer);{ Position of error } const Numbers: set of Char = ['0'..'9']; EofLine = ^M; var Pos: Integer; { Current position in formula  } Ch: Char; { ( x + repeat NextCh until not (Ch in Numbers);  end;  .Val(Copy(Formula,Start,Pos-Start),F,ErrPos);  end else  if Ch='(' then  begin  NextCh;  F:=Expression;  )if Ch=')' then NextCh else ErrPos:=Pos;  end else  5if Ch in ['A'..'G'] then { Maybe a cell reference }  begin  EFX:=Ch;  NextCh;  if Ch in Numbers then  (CCurrent character being scanned ; } EXY: string[3]; { Intermidiate string for conversion A} { Procedure NextCh returns the next character in the formula A } { The variable Pos contains the position ann Ch the character } procedure NextCh; begin repeat Pos:=Pos+1; if Pos<=Length(Formula) then Ch:=Formula[Pos] else Ch:=eofline; until Ch<>' '; end { NextCh }; function Expression: Real; var E: Real; Opr (r(Y{begin  F:=0;  EXY:=Ch; NextCh;  if Ch in Numbers then  begin  EXY:=EXY+Ch;  NextCh;  end;  Val(EXY,EFY,ErrPos);  IsFormula:=true;  1if (Constant in Screen[EFX,EFY].CellStatus) and  5not (Calculated in Screen[EFX,EFY].CellStatus) then  begin  :Evaluate(Form,screen[EFX,EFY].contents,f,ErrPos); ([ =Factor;  case sf of  fabs: f:=abs(f);  fsqrt: f:=sqrt(f);  fsqr: f:=sqr(f);  fsin: f:=sin(f);  fcos: f:=cos(f);  farctan: f:=arctan(f);  fln : f:=ln(f);  flog: f:=ln(f)/ln(10);  fexp: f:=exp(f);  ffact: f:=fact(trunc(f));  end;   (Hq F Screen[EFX,EFY].CellStatus:=Screen[EFX,EFY].CellStatus+[Calculated]  :end else if not (Txt in Screen[EFX,EFY].CellStatus) then  F:=Screen[EFX,EFY].Value;  if Ch='>' then  begin  OldEFX:=EFX; OldEFY:=EFY;  NextCh;  EFX:=Ch;  NextCh;  if Ch in Numbers then  begin  EXY:=Ch;  NextCh; ( Found:=true;  end;  end;  if not Found then ErrPos:=Pos;  end;  Factor:=F;  "end { function Factor}; {.PA}  begin { SignedFactor }  if Ch='-' then  begin  NextCh; SignedFactor:=-Factor;  end else SignedFactor:=Factor;  /end { SignedFactor }; begin { Term }  T:=SignedFactor;  while Ch='^' do  begin  NextCh; t:=exp(ln(t)*Sign(j5 if Ch in Numbers then  begin  EXY:=EXY+Ch;  NextCh;  end;  val(EXY,EFY,ErrPos);  Cellsum:=0;  for SumFY:=OldEFY to EFY do  begin  for SumFX:=OldEFX to EFX do  begin  F:=0;  5if (Constant in Screen[SumFX,SumFY].CellStatus) and  ( edFactor);  end;  Term:=t; end { Term }; begin { SimpleExpression } s:=term; while Ch in ['*','/'] do begin  Opr:=Ch; NextCh;  case Opr of  '*': s:=s*term;  '/': s:=s/term;  end; end; SimpleExpression:=s; end { SimpleExpression }; begin { Expression } E:=SimpleExpression; while Ch in ['+','-'] do begin Opr:=Ch; NextCh; case Opr of  '+': e:=e+SimpleExpr(s? not (Calculated in Screen[SumFX,SumFY].CellStatus) then  begin  7Evaluate(Form,Screen[SumFX,SumFY].contents,f,errPos);  "Screen[SumFX,SumFY].CellStatus:=  .Screen[SumFX,SumFY].CellStatus+[Calculated];  >end else if not (Txt in Screen[SumFX,SumFY].CellStatus) then  F:=ScrEEn[SumFX,SumFY].Value;  Cellsum:=Cellsum+f;   ( ession; '-': e:=e-SimpleExpression; end; end; Expression:=E; end { Expression }; begin { procedure Evaluate } if Formula[1]='.' then Formula:='0'+Formula; if Formula[1]='+' then delete(Formula,1,1); IsFormula:=false; Pos:=0; NextCh; Value:=Expression; if Ch=EofLine then ErrPos:=0 else ErrPos:=Pos; end { Evaluate }; {.PA} procedure Recalculate; var RFX: ScreenIndex; RFY:integer; OldValue: real; Err: integer; begin LowVideo; Goto(e f:=Cellsum;  end;  end;  end;  end;  end;  end else  begin  found:=false;  for sf:=fabs to ffact do  if not found then  begin  'l:=Length(StandardFunctionNames[sf]);  7if copy(Formula,Pos,l)=StandardFunctionNames[sf] then  begin  Pos:=Pos+l-1; NextCh;  F: )l)UXY(1,24); ClrEol; Write('Calculating..'); for RFY:=1 to FYMax do begin for RFX:='A' to FXMax do begin with Screen[RFX,RFY] do begin  !if (Formula in CellStatus) then  begin  &CellStatus:=CellStatus+[Calculated];  OldValue:=Value;  $Evaluate(Form,Contents,Value,Err);  if OldValue<>Value then  begin  GotoXY(XPos[RFX],RFY+1);  &if (DEC>=0) then Write(Value:FW:DEC)  else Write(Value))=:FW);  end;  >end; end; end; end; GotoCell(FX,FY); end; FW);  end;  >end; end; end; end; GotoCell(FX,FY); end; ))))) mE{.PA} {!**$*} {* SOURCE CODE MODULE: MC-MOD05  *} {* PURPOSE: 1Read the contents of a cell and update *} {* associated cells. *} {!***} { Procedure GetLine will let the user type and/or edit a string of } { maximum length "MAX". The string will start at cursor position: } { ) ))ColNO,LineNO. If ErrPos <> 0 then the cursor will jump to position } { ErrPos in the string. If the last parameter is "True" then all } { characters entered will be translated to upper case.  } { If the user at anytimes types then the string returned } { contain $FF to indicate that editing was aborted. *} procedure GetLine(var S: AnyString;  { String to edit }   ColNO,LineNO, { Where start line } )A write(Ch);  if X=length(S) then S:=S+Ch  else S[X]:=Ch;  end;  !if Length(S)+1<=MAX then X:=X+1  %else OkChars:=[]; { Line too Long }  GotoX;  end else  if Length(S)+1<=Max then  OkChars:= [' '..'}']; { Line ok again } end; end; until CH=^M; end; {.PA} procedure GetCell(FX: ScreenIndex;FY: Integer); var S: H AnyString; NewStat: Set of Attributes; ErrorPosition: Integ)}  MAX, { Max length  }  0 ErrPos: integer; { Where to begin }  UpperCase:Boolean); { True if auto Upcase } var X: integer; InsertOn: boolean; OkChars: set of Char; procedure GotoX; begin GotoXY(X+ColNo-1,LineNo); end; begin OkChars:=[' '..'}']; InsertOn:=true; X:=1; GotoX; _ Write(S); if Length(S)=1 then X:=2; if ErrPos<>0 then X:=ErrPos; GotoX; repeat ) er; I:  ScreenIndex; Result: Real; Abort:  Boolean; IsForm: Boolean; { Procedure ClearCells clears the current cell and its associated } { cells. An associated cell is a cell overwritten by data from the } { current cell. The data can be text in which case the cell has the } { attribute "OverWritten". If the data is a result from an expression} { and the field with is larger tahn 11 then the cell is "Locked" } procedure ClearCells; begin )[ Read(Kbd,Ch); if UpperCase then Ch:=UpCase(Ch); case Ch of ^[: begin  ! S:=chr($FF); { abort editing }  Ch:=^M;  / end; ^D: begin { Move cursor right }  X:=X+1;  - if (X>length(S)+1) or (X>MAX) then X:=X-1;  GotoX;  / end; ^G: begin { Delete right char }   if X<=Length(S) then   begin   Delete(S,X,1);  ( Write(copy(S,X,Length(S)-X+1),' '); )A I:=FX; repeat with Screen[I,FY] do begin  GotoXY(XPos[I],FY+1);  write(' '); I:=Succ(I); end; until ([OverWritten,Locked]*Screen[I,FY].CellStatus=[]); { Cell is not OVerWritten not Locked } end; {.CP20} { The new type of the cell is flashed at the bottom of the screen } { Notice that a constant of type array is used to indicate the type } procedure FlashType; begin HighVideo; GotoXY(5,23); LowVideo; end; ) GotoX;   end;  . end; ^S,^H: begin { Move cursor left }  X:=X-1;   if X<1 then X:=1;  GotoX;  8 end; ^F: begin { Move cursor to end of line }  X:=Length(S)+1;  GotoX;  > end; ^A: begin { Move cursor to beginning of line }   X:=1;  GotoX;  . end; #127: begin { Delete left char }  X:=X-1;   if (Length(S)>0) a)  {.CP20} { Procedure GetFormula repeats calling the procedure GetLine and } { Evaluate until the line read by GetLine contains a valid formula. } { Evaluate returns an error position in the string evaluated. If } { this position is non zero GetLine is called. If the user types } { ESC in GetLine to abort the editing then the string returned from } { Getline will contain $FF and te original value of the cell will } { be restored later. )nd (X>0) then   begin   Delete(S,X,1);  & Write(copy(S,X,Length(S)-X+1),' ');  GotoX;   if X<1 then X:=1;   end else X:=1;  N end; ^V: InsertOn:= not InsertOn; {.PA} else begin  if Ch in OkChars then  begin  if InsertOn then  begin  insert(Ch,S,X);  %Write(copy(S,X,Length(S)-X+1),' ');  end else  begin  ** } procedure GetFormula; begin FlashType; repeat GetLine(S,1,24,70,ErrorPosition,True); if S<>Chr($FF) then begin  *Evaluate(IsForm,S,Result,ErrorPosition);  if ErrorPosition<>0 then  &Flash(15,'Error at cursor'+^G,false)  else Flash(15,' ',false); end; until (ErrorPosition=0) or (S=Chr($FF)); if IsForm then NewStat:=NewStat+[Formula]; end; {.CP20} { Procedure GetText calls the procedure GetLine with*[ CellStatus:=[Txt];  Contents:='';  end;  I:=Succ(I);  kend; until not (OverWritten in Screen[I,FY].CellStatus); with Screen[FX,FY] do begin  CellStatus:=[Constant];  2if IsForm then CellStatus:=CellStatus+[Formula];  Value:=Result; end; end; end; {.PA} { Procedure GetCell finnaly starts here. This procedure uses all } { all the above local procedures. First it initializes the temporaly } { v* the current } { cells X,Y position as parameters. This means that text entering } { takes place direcly at the cells posion on the screen. } procedure GetText; begin FlashType; with Screen[FX,FY] do GetLine(S,XPos[FX],FY+1,70,ErrorPosition,False); end; {.CP20} { Procedure EditCell loads a copy of the current cells contents in } { in the variable S before calling Xeither GetText or GetFormula. In } { this way no changes are made to the current cell.  *}ariable "S" with the last read character. It then depending on } { this character calls GetFormula, GetText, or EditCell. } begin { procedure GetCell } S:=Ch; ErrorPosition:=0; Abort:=false; NewStat:=[]; if Ch in ['0'..'9','+','-','.','(',')'] then begin NewStat:=[Constant]; if not (Formula in Screen[FX,FY].CellStatus) then begin GotoXY(x11,24); ClrEol; ClearCells; GetFormula; end else begin Flash(15,'Edit formula Y/N?',true)*B } procedure EditCell; begin with Screen[FX,FY] do begin S:=Contents; if Txt in CellStatus then GetText else GetFormula; end; end; {.PA} { Procedure UpdateCells is a little more complicated. Basically it } { makes sure to tag and untag cells which has been overwritten or } { cleared from data from another cell. It also updates the current } { with the new type and the contents which still is in the temporaly } { variable "S". *M; repeat read(Kbd,Ch) until UpCase(CH) in ['Y','N']; Flash(15,' ',false); if UpCase(Ch)='Y' then EditCell Else Abort:=true; end; end else begin if Ch=^[ then begin NewStat:=(Screen[FX,FY].CellStatus)*[Txt,Constant]; EditCell; end else begin if formula in Scre(en[FX,FY].CellStatus then begin  %Flash(15,'Edit formula Y/N?',true);  4repeat read(Kbd,Ch) until UpCase(CH) in ['Y','N'];  Flash(15,' * } procedure UpdateCells; var Flength: Integer; begin Screen[FX,FY].Contents:=S; if Txt in NewStat {Screen[FX,FY].CellStatus} then begin I:=FX; FLength:=Length(S); repeat  I:=Succ(I);  with Screen[I,FY] do  begin  FLength:=Flength-11;  if (Flength>0) then  begin  CellStatus:=[Overwritten,Txt];  Contents:='';  end else  begin *  ',false);  Pif UpCase(Ch)='Y' then EditCell Else Abort:=true; end else begin  NewStat:=[Txt];  ClearCells;  GetText; end; end; end; if not Abort then begin if S<>Chr($FF) then UpDateCells; GotoCell(FX,FY); if AutoCalc and (Constant in Screen[FX,FY].CellStatus) then Recalculate; if Txt in NewStat then begin GoXtoXY(3,FY+1); Clreol; For I:='A' to FXMax do LeaveCell(I,FY); end; *') if OverWritten in CellStatus then  begin  CellStatus:=[Txt];  !GotoCell(I,FY);LeaveCell(I,FY);  end;  end;  end; until (I=FXMax) or (Screen[I,FY].Contents<>''); Screen[FX,FY].CellStatus:=[Txt]; end else { string changed to formula or constant } begin { Event number two } I:=FX; repeat  with Screen[I,FY] do  begin  #if OverWritten in CellStatus then  begin *`*q end; Flash(15,' ',False); GotoCell(FX,FY); end; {.PA} { Procedure Format is used to } procedure Format; var J,FW,DEC, FromLine,ToLine: integer; Lock: Boolean; procedure GetInt(var I: integer; Max: Integer); var S: string[8]; Err: Integer; Ch: Char; begin S:=''; repeat repeat Read(Kbd,Ch) until Ch in ['0'..'9','-',^M]; if Ch<>^M then begin  Write(Ch); S:=S+Ch;  Val(S,I,Err); * SjP To: B. Osss S: string[8]; Err: Integer; Ch: Char; b  From: O. P. Timistt (B3)!; kjhlkjfdsahfsdalkjhfksjhdafkjldshfalkjdsaf skajfs  034909 t D As you requested I have compiled a sales budget for our three major E products covering next ye*end; until (I>=Max) or (Ch=^M); if I>Max then I:=Max; end; begin HighVideo; Msg('Format: Enter number of decimals (Max 11): '); GetInt(DEC,11); Msg('Enter Cell whith remember if larger than 10 next column will lock: '); GetInt(FW,20); Msg('From which line in column '+FX+': '); GetInt(FromLine,FYMax); Msg('To which line in column '+FX+': '); GetInt(ToLine,FYMax); if FW>10 then Lock:=true else Lock:=False; for J:=FromLine to ToLine do begin Screen[FX,J*tar by quaters. I have assumed an increase d > of 20% every quater for Super A and 10 pct for Super B and C.  1;r;Z A Product 1. Quater 2. Quater 3. Quater 4. Quater Year Totalal C ---  Super Adfskjdfskjlkjljlsafjfshdkljhfdsjfhkjfdkljfakljakjhkjlhfds  Super Bl{kjdl{kds{lkdjs{lksdjf{ldksfaj{lkdjsfl{kdjf{lkdjf*is].DEC:=DEC; Screen[FX,J].FW:=FW; with Screen[Succ(FX),J] do begin if Lock then begin  &CellStatus:=CellStatus+[Locked,Txt];  Contents:=''; end else CellStatus:=CellStatus-[Locked]; end; end; NormVideo; UpDate; GotoCell(FX,FY); end; (0Video; UpDate; GotoCell(FX,FY); end; (*al{kdjf{lkjfd  Super C  A ---  Year total  B ===  22"d B To simulate sales just change the numbers for the first quater.  (A1>A19)** )[ kjdsflkdjsalkdjfsklj{fdlkjfsdflk{dfl{kjdfkljsdkljsfkljsflkjsdkljfsdlkj 3" 2354! (C3+A3+C3)  22"  33* +~+  335!  " (A8)+A4  23"  54"+ 45dskdklfklfkldsalkdsfdklklfdlkfd+w 13332 34"  43"  34"  43"  43"  2"+ !330fllkfdasklfkskfld !2330!8 !22000 0 45  # (B12>B14)  34"  4 +E 32"  543!  45"  345! 3254!  3" 435 + w  34"  34"  34"  23"  325! 400+  23"  23"  4" # (C12*1.2)Ez> # (C13*1.1): ף^ # (C14*1.1)+D 3332!  11"  33"  35! (C3>C6)  32" 23+  YT 435! # (D12>D14) ףK 34"  43"  34"  34" 32+9  23" # (B12*1.2)efff # (B13*1.1)efffJ # (B14*1.1)A 435! # (C12>C14) ++}  223! 324! 253!  23" 3454!  234+72CAFkUSLLEC )䵱FMUS )䶱FE )䷱F # (B12>E12) jFMUS jFE jFEDLO Skƈ/$1 # (B13>E13)jȱ jʱEj̱1EMANNOITCNUFDRADNATS ~j|U # (B14>E14)SILNOITCNUFDRADNATS   CAFF XEF X94L FLF ATCRAF j1TGNELFooMELLECETAD # (F12>F14)LECTIDEooDXETTEGooC jC jL@  jAMj  +"( l|{dsfa{dsf{l|dsa{lds{lfd{lkfd  32"  32"  23"  43" # (D12*1.2)t+XAMjjjF FooOETNECooOMOCLLEWooMDNAMMOC oJAMROF!FjF)ooBLECTEG?SACREPPU kOPRRE NLOCjFoo>NILTEGoo=TALUCLACERAOPRRE LUMROFFLUMROFSI kooc1TAULAVE k+ROFo oo+NIRPoo)AOLoo )VAS-PYTEL Foo(MANELIFTEGELIFF^ k'SIXE e+ڧd # (D13*1.1) >lt # (D14*1.1)F7Aj 435! # (E12>E14) *i 3"  43"  34 + IL ĵMANELIF  GNIRTSoo& oo&HGIREVOMoow%UEVOMoo$WODEVO ooG$TADPU#FjF)ooY#LECEVAEL"GjG) ECOTOGoo !PYTHSALFoox AELCooI ooIRGooiTUA&NILB kFjooSA ooSM k*LACOTUA 0 +LIFCM j۸ F )޸F ߸EER+w  43"  32"  23"  32"  543! 435+ CS )j OPX -)    LLEC P  (P6,,޵8+ ```X  &]?%B2 CA@ D$A DaDA`?%B@, , ,V,,, fEPSON FX/LQ 8;EFGH-1-045CMC-MOD03INC$VWMC-MOD04INCFXYZMC-MOD05INCX[\]MCDEMO MCS]^_`BENZ VDKa EPSON VDP  ,,,,, , -H-Z|\s1{ 22`* V+"^Rڿ:]- <*#^#VS#^#V*s#r ^#V*.s#r ^#V*.s#r? (8# *͟ !%:m$;vK! * DM!  :]#(- " (v0**" :|( 2N2 2 :\( 2E2 2 :( 252[2 :(2S2 O! 6#w j\\<4* DM*  ! ~(2> >=^)) F#~a# ( ! "!">!R)DS\*\--<4ú!05( ! 6#>D# w 6#>S06^@#w#6#! ~> > !GK"e>X2g:m+ (* z  ###* DM * DM! s# x j\< @7\! ,!~ !8<^ ,!~_@ # ,!~Ͳ_0: ,!~ = ,!~  (^ ,!~_@ # ,!~Ͳ!RM: o`)) q#!y(! R[R<<}2 BDSVHWILRUCGP _! ~~,!~_E( H(>< ,!~> ,! ~ ,!~> ,!!--~  e \!< T  *|. " " "% " " ". ^#V"1"W" *"2 0g.*E(+RR!P "&""m"""@ "!N "g"q"! "!Q "","D !S "8"@"I! "v" ! " " " "! "^" ! "" " ! " " !x "~ " " !O ""!| "P!* "b "" !M """!K " " !%"z DM*q#pB! DM^q#Vp"#!*.Ns#FrC ""|<2* DM!GKX v3.90 (c) Eric Gans 01/30/88 $GKX already in memory.$GKX removed-- from memory.$GKX not in memory.$All key assignments cleared - $GKX file not found.$File I/O error.$Syntax error in GKX file.$GKX file too large for buffer.$GKX file saved.$GKX file loaded. $GKX ready.$:8!":M (=2M  :P (>:P (*Q _OG:S y(2S y\ 2S ||  OG!  :N (2P 2N > ! x0$o~( o&))~(=2P #"Q ~052O :O >2M >:P 2N 2P > 0 2A> ((( (V(d(S(<(G*`*  ( *`- 7Eric Gans French Dep't UCLA Los Angeles, CA 90024  !GKX.DOC (Formerly GKEY2) v 3.90  01/30/88 Version 3.90 Allows reconfiguration of ESC (trigger) key and of macro buffer size. (Suggested by Benjamin Cohen.) Version 3.80 Adds option to change keyboard port number (in GKXSET). Fixes a bug in GKXS372. Ver}sion 3.72 Adds Kaypro-10 extensions, append file command (+), space for comments in GKX files. Renamed file-e[K R` go##*`"K * (#w`R}=C!`!~2P #"Q ~*`:^G>N0$o2OO* ({2 +%sx 1x  \(D|(@ x! ! 0$o= : o&D))#|0 |( w\ +x($ B###}2 BL}w> {x G 0 ^@O>|>}>(  GKX 3.9> --s to GKX.COM and GKXSET.COM to avoid confusion. Version 3.0 Uses ASCII files for macros. GKX files can be edited with a text editor. Allows reconfiguring "highbit" keys (keypad and arrow or function keys). Captures BIOS CONSxTAT to allow long key strings in Wordstar and other word processors. Allows 1 K of memory for key storage.  k* * * GKX is a keyboard enhancement program that has several decided advantages over SMARTK- uire GKX to be in memory at time of use.) GKX Commands: To redefine a key: [you will be prompted by "=" here] Typing the shift key at any point will abort the redefinition. To produce the original value of a redefined key: To load a key file: GKX fn(.GKX) To append a key file to current settings (duplicate keys will be overwritten): GKX fn(.GKX) + To save current sett-EY and other commercial programs. - special extensions for Kaypro 10 allow undelete, case change and letter transpositions in Wordstar 3 and other word processors (new in v3.72) - stores macros in editable ASCII files (new in v3.0) - takes less memory space, leaving more for programs - loads and responds faster - can save key files, clear current settings, or take itself out of memory without the need for an auxiliary program - allows redefinition of esca-ings in a file: GKX fn(.GKX) $ To remove GKX from memory: GKX - To clear current settings (leave GKX in memory): GKX # + is treated as a single key in these procedures. For example, the sequence: |B(=)blurk| will define B as blurk. (The "=" is a prompt added by the program, not typed by you.) To type a straight , either use the shift key or just hit the key twice. Up to 1024 bytes (default) are available for definitions, enough f-pe sequences, thereby doubling the number of redefinable keys This last feature was the deciding factor in writing this program. After some experience with MS-DOS, where keyboard enhancers have so much more to work with, I was struck by the poverty of programs that are limited to the standard ASCII set, most of which cannot be redefined without great inconvenience. GKX allows the redefinition of + any key, thereby adding 127 configurable-or nearly any conceivable use. If you get past the maximum you will get a beep while trying to redefine. Any single redefinition can contain as many as 255 characters. GKX's redefinitions are not cumulative: if you redefine B as blurk then if you redefine 1 as BLURK you really get BLURK, not blurkLURK. Version 3 of GKX allows you to reconfigure high bit keys like the Kaypro keypad and arrows, or function keys. In order to allow multi-character strings- combinations few of which are ever used by application software. If ESC is not convenient for this purpose, v3.9 allows you to change it to another key (e.g., '~'). The general structure of the program is similar to SMARTKEY, although it is much simpler. To redefine a key, you use the "setup" key, originally defined as "|"; a "shift" key, originally defined as "\", allows you to use the original value of a redefined key. Unlike SMARTKEY, GKX lets you abo-  in Wordstar and other word- processors, GKX now sets the console ready (or CONSTAT) BIOS function active during the playback of such strings. It changes the BIOS CONIN address to "translate" keys as they are typed and fixes a few addresses to protect the program in the TPA. (SMARTKEY uses the CONOUT function to check for the BDOS address after Warm Boots; GKX uses the -- less often used -- SELDSK function.)  Reconfiguring GKX The foll-rt a redefinition by typing the shift key; you don't have to re- redefine. You can also reset a key by redefining it as nothing. GKX can load and save key files, clear current settings, and remove itself from memory. (You need only enter the filename; the program will supply the extension .GKX.) A companion file, GKXSET, can read current settings and change the setup and switch keys in GKX; it also includes some help information. (Unlike FIXKEY, GKXSET does not req ..qowing items may be changed in GKX v3.90: the setup key (originally '|'); the shift key (originally '\'); the keyboard port number (originally 5); the "trigger" key for the second set of key redefinitions (originally ESC = 1bh); and the size of the macro buffer (originally 1024 bytes; may be set to anything between 100H = 256 and 400H = 1024 bytes). GKXSET allows you to do this without patching; or if you prefer, the bytes may be found in the first sector of the file: 102.13.3, but they are not specific to any one word processor. *** If you DON'T have a Kaypro, DON'T use these characters in *** your key files. They depend on specific BIOS addresses and *** are guaranteed NOT to work on any other system! The enclosed file WS.GKX (sorry I forgot to include this in previous versions) gives examples of the possibilities of GKX for undeletion, case toggles, and letter transposition (the most common editing features left out of WS 3). .H 7C '|' = setup 103H 5C '\' = shift 104H 05 = keyboard port 105H 1B cESCAPE = trigger for second set of macros 106H 00 04 1024 = size of macro buffer  GKX Files GKX Version 3 uses ASCII key files to store macros. This means that you can read these files on the screen and edit them with a text editor--a convenience borrowed from MS-DOS programs. If you save the current settings in a file. #L get line at cursor #R erestore saved line at cursor #W * get word at cursor #I * insert saved word at cursor #G get letter at cursor #P !insert saved letter at cursor #C toggle case (upper/lower) of letter at cursor #U ** change user number #H *** delay to reset cursor position * Consecutive words saved at the same cursor position are saved cumulatively. This allows you move several words in the same " line by deleting them (in WS u., 25 spaces are reserved for comments for each redefine. The format of key definitions is as follows: char [comment] =def The character should be written as normally typed, except for the following: (char-80h) for "high-bit" characters over 127 (80h) char >for + char char for + highbit ^char for control characters #D / for #B (or ^H) for Backspace #S  for #V  variable length input (unti.~sing ^T), then undeleting them somewhere else. ** You are prompted with '>'. Enter the user number in HEX, that is, 0 - 9, and a - f for users 10 - 15. The user number will change immediately. This is handly if you have fixed old WS to keep its overlays in a single user area (using the patches WSUSER or WSUSR2) and want to edit files in different areas without reloading. *** This is useful in WS for commands that make use of the cursor position . l CR) ## for # (see below for Kaypro 10 extensions) The same characters are used in the definitions, except that the and symbols are not permitted. A comment may be placed between the defined key and the equal sign. The definition must follow the equal sign directly. Each definition must be followed by a CRLF. Spaces may be included in the definitions, but if a definition ends with a space you should use '#S'. Maximum length is 255 character.  after a change (see WS.GKX for examples). It does not seem to be necessary in VDE, which updates the cursor much faster. 9. s. The easiest way to get started is to define a few macros and save the file; this will give you an idea of the file format (comments cannot be saved in this manner).  ***  !!! KAYPRO 10 Extensions !!! If you have a Kaypro 10 with the standard BIOS you should be able to use the following extensions. (If they won't work on your system, please let me know!) They have been set up to work with Wordstar v .D..s 1  L :]  s _080|!X 0$o^#V{ * M  #^#V"T  DM# Á  |! 2 ~(T2 ͷ: /G   ^))~( G#~ͷ|: <8)2 # ( S!"|! "z: o&))*T ####R?  ) : (     G2\: : #~2\#x ځDO#]~a8{0˯#y>    : 2   ,: U(48#!"0$o^: 0  : 2 .. 0^: <2 @_: <2 VHWILRUCGP#D$|:ͷ   (2  ͷ2|\\|:ͷ#   (2  |:lk   h !i ~͇2 ; la|:ͷF  ( 2  ^|N   h !i ~ͫ|(0"|Na! "z6T]*?  ????{Ɛ'@'_8>G#~͢{__0 8>G#~08 0bk)]T))0$o $h ) l   ..! ~ !v \X! e2|\), key to be redefined, redefinition sequence, setup key. To reset a defined key, define it as nothing. To use a redefined key (or other special key): Type shift key (originally <\>), key to display. To load a key file: GKX fn.GKX To append a key file to current settings: GKX fn.GKX + To save current settings: GKX fn.GKX $ To remove GKX from memory: GKX - To clear current settings: GKX # Escape sequences: + any key can be redefined just as if it were a single ke. /Z/2y: entering |Bblurk| will redefine B as blurk.$ ... Type any key$ GKXSET v3.90 (c) Eric Gans 01/30/88 $ 0 = Quit GKXSET 1 = Display current settings 2 = Change setup key 3 = Change shift key 4 = Set keyboard port number 5 = Change ESC trigger 6 = Change buffer size (256-1024) 7 = GKX information Your choice: $GKX 3.9 File name (.GKX) : $ File name (.COM - for GKX.COM) : $ File not found.$ Incorrect GKX file.$ Bad GKX.COM file.$ GKX not in memory.$$$ redefined as: $/wp1:!88*6 2n*0(!0|S(D 2n*d"ˋem*-28<2\ 2828:28@1:2/ is current setup key. Change to: $ is current shift key. Change to: $ is current ESC trigger. Change to: $ is current keyboard port. Enter new port (hex): $Current buffer size is $ Change to: $ bytes free for redefinitions. $ Setup key changed to: $ Shift key changed to: $ ESC trigger changed to: $ Keyboard port changed to: $FK/xGKXGKX COM 3/98*N"8:d2):/ 28!1:5!~#͟*8!_1 !B7ͼ$:8 #ͤ$ͺ..:] (_$͏#:8 r1:8!@28281:{42X3͛6.5GTXy+H2%'AX  :   1k%:8x!X8#6, !mS#!: v > >#$ x##F !$c9!G G![8#08:ڙ [ M#!H=~+x;!R8#61%&)h%&)r%  %vP%//%%/k0(& !O8#6M// %7 =l4" "J2ͬ1e1~1M2:W J2~111{40#:8#:8-:8( !7͗1{4!_1:8_$*:8_ m* S(D e- :5:8D28:8 5:T 2ͬ1/0[[:8o&6^#V00 ]]] 1#:8( {45 >>>>>> >> > 28*Y&))))͒+ :8_:8 /28L4͛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+͌*{4:8> :8g(*!f8#ʔ/0!_1#ͺ.5*8uA!"85*8"8*8͌:w=5"L,BPY!V~O >>w44!>N#Fx%!V~@Ba8 *8>` S8 *8>[ Bͣ>28uAt6a&͚)&+:8=G:8X5r:8!8G:8y5r!v7:8(:8N !|7͗1ͦ BB:8N(:8(_jb x( #DMz('(+͌ (+͌ w25͓63ͣa6u:8͜t6͓63+0*8~ i6#͌=*8&!8 a8"͚)( ~=!Z #+"8( (/ )!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##/V (Vt6w&=!y6:8=y6EaF6͚) ͓63~(6 +#"8 ( (jt6#A>28:=!Z!8y6]͚)+ͭ)( ͧ( ͧ+ͭ)ļ)ͣ) ͷ)) ͷ))͚)X:( ͷ)) : X:X:( ͷ)) :XͲ)ļ)5:8=_!P8<_+%%[8S8͌=(5:8_=!P8_ͣ[8S8u]:8Ü:8??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/6{4!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!H7͗1% 92828>2]!~/ $#~#/(/'}( !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>!1:>_!z(N #= ~(^6#DM!BDM8{(I: :2s#K!T]BBDMN#!1::8N(Q +~#8#+8{4 !!>ݾ8^R8#"|6#+| !"!!!8FD0F:F:28!8F0G!(^#~#BO~˾(#~˾4>1)!7͗1% (cO!7͗1Q 14y( / C(B( 7>2]>28~#](x29*8"8:9( GXB!9~(G#~2:8{OY]~>28!N7͗1% {49O!>28B:9{4:8xW8}(0:8.Y5>28:8(@:87:8L48( :8:9u'/:8?:87:J2ͬ1!^8e1͛6T:W1J2~11 7* O287_YN !8n%0:8!u8 !L8;/&![8#~=!y6:J~ʇ&Ì&&:8(H!b +y0+Í~:Z/<͍Ç&!n7͗1% :8(@(=#([* (1/S!1:6{4*( 08 0Gx28:!1:"8>28!J~28~n%>21:{4:8F28!86[(+](.>(5<(<_!1:~#F(F{ #"8!1:"8ɯ28_D:aB+ SB*8++++"8>>2:8F_͚)H>28:8T} *8^!"8)*8~#"8($_~< :8 !8~<(5(!1:"8:{ɯ28DT! 26! 2wÈ6:8!Jn%! 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:8 008,j_:b7![~( 0# +s{!ab B[E* (+O<[8[E* 8 {40!n7͗1:8" 8(![(#6( T]#H{40!U8#( 6!d6 (N r {&0̈́&5_?8 51{:8!y6jͥ{ ':8†> 5ͥ:8!Z!y6]:88:J 3͡:8N( ͣ) T͛6a8t6+pr:8> t6> :8!855#AE͝:8> > 5:J5*8~5!d5*8> > 5:8X28:8a8 :J(:8=ͬ&<Ç&͚) 0x( V0x:8!84O&5ͣ) J- :M(͚) (> ͚) +4{&( 8 eͤ&x=J+=:8=͍aڛ(͚)yO(8ͬ&(&ͤ&}ʏ(&!8aڛ(͚)7( ~=!Z ͭ) +&{&ʕ(ڕ(e͚)( XXé'ͤ&é'ͣ) Dͣ) T-(P+X)>&͚) T) +> ͍é'+):8mY5YJYN:M(:L4O0(T͡a0͍7+͚) X7 (͍+͚) +͍ͣ) 0i+͡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!i8#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 0) (ÍÍ͚) +͚)XX {2):8͍͚)(Jͭ) XJͭ͡) X&a&!8:8=G:8J͖)(͍ͤ&> ͍3͡+*8~ *8~> !)!)!)!)!) !)͚)ͣ)~ #,;:-.?!  J2ͬ1!b8e11:W( :K0{4J2ͬ1~11m*2]**#^#VSS*R*r+s[S**#s#r*#s#r>2\1:͚*:>0ɷ(%!R˶#˶<(!()% :A28r1T]5+O>: z+6+6:(#x2\y28_ e+~08+:0'0_+~08:00W_+ 0i{20a*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!!X7͗1> ' :\G:8O( w+w+w+T]+y6.O0 08 }(~ (A8Q_>8K+}(~ A#{<2\>:> +#(]#(d.( (@8t[(B+(  > Er17ɯ(;. ##(/ (8C[(+(~ #~[ #~( + 28!eB+F+:] (!+ .,;:?*=[?(#+28ANW> +#(T] (#8L,(0PY() 45 #( +N+F* |( N#Fxɯ2h2i2|28/28\$*< 7$*\$*/-0!:8W K~ >-w(n :8(d/28~ ~ (0˾> #wz ˾~ +~(7 20p !85( > ͌0:8O0...  y!8(> ͌012:8_ 5#:8( !7͗1{4-_$!;7ͼ$:8 ͵.m*:\r*\$*' BG!~w#!~[( x͟*B28#~W( A(NB28!"0 8!!d( ~ 8~ (> #wz#Ÿ,È,28 m*:\r*!] ˾#͵.8f\$*28:8(4!\ !\!8$*< ¨.$*\$*< ¨.282h2|\$*:8= g$*<ʦ.xʛ.!͈!)(ow:8W <~ ~!8(" ( ( 28~ >28:8 ~#"\$*(͛.H!:w > (|-}--(6#\$*(͛. \$*<72i:W2!B8͍1M/!o8:8N :8 !l8/͗%tx%%͹%:8=!8 !08:8N(>28:L28:8= *N"8 !"828280͚)_A8[0 nˮ +5!f7͗1:" B28ͺ.{45!8~/w!Mn%!x8:8N(:M !L8>/!Jn%:J!8~(:8!r8 !L87/!8n%:8!~8 !L8D/!8n%:8!{8 !L8A/ &O:88>28y28 &!80$280{4:8N(:8=(&!n7͗1:8" B:&!88@&.0!88~(6w>:8G:8 j:8=G͍͚) +<͍ɷ͚) X= &28ͣ) >G͈ͣ x!ZG 0=0L8G/:W2ͬ1e11:K(2!Wn%( @1,5@1ͺ.5ͬ1 2~12:\@2:8O30 2y01y x20y02L,(+`iF($:\# N:8(>/2#~ 2>:2!]~ (2#>.2!e~2#~1>[2:821!Kn%z0@15:K!-9:8 :<28:8_~# ~#G> ͔0͌000:80!:U !8͈1#{4:80iB!8n%(/@1:85>28W4:W 22M/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~e1:Vͬ1:W-1 1:8_ͣ0:828&<0`B!9;͈12 (!<< ((!A>(!j= ͈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 ^KCopblo0; :8Ox0_:88 8 x={(<28D28*8"8:8N:8 _+BJ(R8#"8C8͒ ͎6L4͍3͓6 :8=3=3=84W4:8384W4:Wb"2ͬ1*8:8N3**832:8o&31l2 6 ! e1ͫ‚6:8G}4ͫ‚6ͣ) 3:8W:KW:8=_32ͣ!8:8=W=G:<_4S:8!8 *84ͫˆ6:8!8(G#2ͺ.͍3ͫˆ60528/28}4:8< ͒:KW2:8(:8_ͣ:<_:8GJD_:W<_:8 8(ê5:8GW$ͣ:8G:8=W:<_4S!8 *8zȯGO_O(0/ck^KFillist^Ksave+eXitEsc-TAtaback ^KmoVblock^KErasfile^KQuit Esc-Arrowshifscreen ^QgotBlock^Q ͥ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/Er0 5'Oruler^ODisplaCRs^OZascreen ,0ƓrorNoFoundSyntaErrorCannoReformatNameReadWriteEraseLoadFindChangtoDirOptionsLengthColumnPageLineMacroRepeacoun([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< 1#1\s%1%*""!e͵ ZDENSTAL - ZDE Installer, Version 0.3 Copyright (c) 1988 by Carson Wilson [Opening !] !l \<ʃ!'\ڐ*'˽R !!%%6: ʙ͵, ! !##( K(P<(<ʭÙ:˿!%P(DK ڐ*%PR!%I)>ڐ*%`R!%)(`ڐ*%fR!%(͵] Installing: !'͵ ...Press to see Main Menu ͵ --- ZDENST1!ab display spacing:  ͛ ͵ Variable tab columns: ͉͉ͥ͵ MODIFY DEFAULT CHARACTERS? (Y/N) Y͵ Wildcard character: ͣ͵ Code for block marker: ͵ Print toggles 1-4 (# ͵): i͵ Print switches 1-4 (# ͵): i4+5#~\#͵ TERMINAL INSTALLATION: Currently "!)(͵" CHOOSE: dit current or ist terminals: E# L ͵ TERMINALS: press to select from list: !~#Gͥ͞Y(`͵(1AL MENU --- ption configuration ey definitions erminal installation urther patching

rinter installation estore defaults Choose option, ave, uit, or elp: ͇ O`T/ PKFQpR[SH÷͵ 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 (by1hEnd of list))(`͵Selected͵ EDIT TERMINAL͵ Terminal ID: !)(͵ Viewable columns: ͛͵ Auto wrap at line end: l͵ Viewable lines: ͛͵ Extra DELete key: ͵ Extra arrow keys u/d/r/l: i#͵ Clear to end of line [06]: w͵ Terminal init [07]: w͵ Terminal deinit [07]: w͵ Alternate video on [06]: w͵ Alternate video off [06]: w͵ Alt video uses high bit: l͵ Output filter limit: ͵ Cursor position mode (St1pte) 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  4 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 1ld/Rev/ANSI/None): ͣ͵ [Non-ANSI] Cursor position sequence: i͵ Delay after cursor positioning: ͵ Insert line [06]: w͵ Delete line [06]: w͵ Ins/del specific to line 1: l͵ PRINTER INSTALLATION: Printer ID: !(͵ Send LF after CR: l͵ Page length, lines: ͛͵ Top margin, lines: ͛͵ Left margin, columns: ͛͵ Printer initialization [13]: w͵ Printer deinit [07]: w͵ :(x͵ toggle on [07]: w͵ ...and1a 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!)'-!V(M!"'!"'!)T]6K/!)(`͵ Done.͵ USER OPTIONS: Create BAKup files: !'l͵ Default file mode (W/A/N): ͣ͵ Auto mode select filetype 1: ͵ Mode: ͣ͵ Auto mode se1 2 off [07]: w͵ :(x͵ toggle on [07]: w͵ ...and off [07]: w͵ : (x͵ toggle on [07]: w͵ ...and off [07]: w͵ :!(x͵ toggle on [07]: w͵ ...and off [07]: w͵ :"(x͵ switch [07]: w͵ :#(x͵ switch [07]: w͵ :$(x͵ switch [07]: w͵ :%(x͵ switch [07]: w\'͵ Select <0-9> or ap; or to exit:  Z!20ڳ ҳ2[͵ New definition: ( edits, saves; u1lect filetype 2: ͵ Mode: ͣ͵ Default insert on: l͵ Default ruler on: l͵ Default HCR display on: l͵ Enable hyphenation: l͵ Left margin col: ͛͵ Right margin col: ͛͵ Scroll overlap: ͛͵ Show system files: l͵ Fixed drives (A-P): ͵ Ring bell on error: l͵ Enable help menus: l͵ Use alt video in header: l͵ Suppress header by default: l͵ Clock speed in MHz: ͵ Horizontal scroll delay: ͵ Fixed t 11se ^P to enter these) |\ÀMÀ͵ MACRO KEYS: (!J)8!I)8͵ bytes free)!K) > 02q͵ o͵! (0((w#\>8+~ OO!>w7@͵ :[W:_!K)z(N #= ~(^6#DM!I+BDM{:J) :I)s#K!H+T]BBDMN#!͵ Choose o-repeat or uiet if desired: 1 N ADDS 25 A P KkkG4G0SY LMPADDS Viewpoint PK0A  G4G0SY ERPAmstrad / Heath P KHEHEpqSY LMQANSI standard P A:Bondwell 2 P TI1\N(Q +~#8#+ !!K)>ݾ8^R8#"I)|6#+| !"I)!K)! O@O^#($#~ħ~+ ~ğ+~#G~#\͵<>͵͵͵ FURTHER PATCHING: You will require DDT or a similar utility. Addresses & in this version of the program are:  0User patch area: *'-:'_+͵  Command tables:  Basic: *'͵ ESC/^K: *'͵ ^O: *'͵ ^Q: *'ͥ͵ [Closing !] 2h2|22%!'\ڭ: c1gNS= ERDEC VT52 P KHJHJ SY  QCommodore 128 P T)(S= ER*Epson Geneva PX8PT   S= +Kaypro II/IV P  S= ERPKaypro 2/4/10 P B0C0S= ER1q͵, ! :K(.P(!`"%!)(%`(!f"%!(%!P"%!K)%!%ڭ͵] {%͵ *Aborted* k͵ *File)͵ *Read͵ *Version ͵ *Write͵ error* k 7] <(طͬ͞ (.!\w# ( 8w#6 #!\HH ~Y Nͬ͞ (Y(N Oq##~\͞ ( \w###88ͬ͞8(28(w#:w###|9}9811LearSiegler ADM3P T S= ER*Morrow MDT-20 P T R= ERPMorrow MT-70 PTG1G0S= ERPNEC Starlet 8401PTg**)(S= ERPNorthstar Advtg.P S= LMOsborne 1/2/4 P 1aͬ͞8(w# 7?W؇27WO:7A~MOMO0:0 ??>2C"$2C"(*8)*F#(8#ͬ͞!cd6K:x(!cw(Y# -AS8A0!cwG(4# :d "W8wWڧw#[KH!c: #*KH :#()w͛͵... ͬ͞Ͳ8(w# 7?2% (0_:%W2% (_:%W؇؂؂؃2%:%~1 77T)(S= ERPOsborne Exec. PTlmS= ERPOtrona Attache P KU&U S= LMPTelevideo 910+ P TG4G0S= EROTRS-80 mod 2 P&TP  SY  :TRS-80 model 4P P 1mo&&+!&~ ( O#0 ?!}FNy(-B0 ##>1B84 ##NFy(>0}0B> 6 #= 'd F#^#V## ^#V##͵ :͵ ͵? 㯆#O#O Opa{_COMZDE5AASMN....@@@@#7Teletype :?Generic CRT P 22Yq S=  QZenith ZT10 P Ts1s0S= ER222ZDKCOM 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> 222͡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.12345678ZDT 12345678ZDK :*22 #: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*#2 2/2% s#r*#s#rw B>CBB<|͟>.ͭ͟ ĭŸO*. HWHWr# x}o|g 7|g}o71@2VDKCOM Version 1.2 [Z80] :] (/´Syntax: VDKCOM .VDT converts text file to .VDK overlay VDKCOM .VDK converts overlay to .VDT text files!e~V#~D#~TK!6K!6T!]!]ͤ File not found.a converting ]͉...:K>͈>P͈2͈ n(+q(! (=/(H^(0(E (͈ͦͦ^̸/ƀÈ@͸*+:=w27 x ͖{2> 222͡84ր2͡8 ր2>q2>n7: P]7: Pt7͡>^7@/(^(}7:7/(^(>/77 xw: 7:=22!B"~#_ File type must be VDT or VDK. * No directory space for new file.  Key macro string exceeds 127 characters. Key macros exceed 498 characters.12345678VDT 12345678VDK :*22#: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*#22 % s#r*#s#rw B>CBB<|͟>.ͭ͟ ĭŸO*. HWHWr# x}o|g 7|g}o71@2 3133e lower case "n" and "q" eliminated not just lines of code, but whole subroutines. I have also added a literal character indicator prefix, the slash. If you want to print a carat in a key macro string without causing the next character to become an actual control character, type "/^". To print a single slash, type "//". If you need to start a no-option key macro with lower case "n" or "q", type "/n" or "/q". HOW TO USE VDKCOM VDKCOM compiles an ASCII text file into a *.VDK file of 33key macros which VINST will install in VDE. It alsos convert an existing VDK file into a text file with the extension VDT. It allows you to create, edit, and re-edit complicated key macros with a full-featured word processor - VDE itself - instead of the backspace-only line editor in VINST. The syntax is: VDKCOM .VDT converts text file to VDK overlay VDKCOM .VDK converts overlay to VDT text file Use VDE in NONDOCUMENT mode to type a file that looks like what you 33a see when you use the K option of VINST, 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^33 tP^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. VDKCOM accepts trailing sp3 == VDKCOM11 == PVDK key macro overlay file compiler for Eric Meyer's Video Display Editor v2.65 Version 1.1 copyright 1988 by Fred Haines. Released by the author to the CP/M community for all reasonable noncommercial purposes. NEW IN VERSION 1.1 Making the user type "" or "" to select an option - while it corresponded to what he wosuld saw in the K menu of VINST - was unduly tedious, both for him and for me. Changing the option flags to simpl 33aces 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 VDK file, though they may in the VDT 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 than3]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 chara3 allowed by VDE and VINST, 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 VDK 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 .VDT. Run VDKCOM .VDT. Then load the resulting VDK file into VDE with the c3cters from the beginning of each line, used to remove line numbers from the beginnings of messages in modem capture files. Benjamin Cohen, to whom I owe the inspiration for this program, suggests using it as an alias. A minimal one would be: VDK vde $1.vdt n;vinst265 vde $1.vdk Rob Friefeld was kind enough to review and correct my code and make several useful corrections, but is in no way to blame for the conception and design. PROGRAMMER'S NOTE: A VDK file is a data structure f3*ommand VINST VDE .VDK. q^C^C^C^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^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 mac.ro to move from line 1 of a page to line 1 o3<our records long. The first two bytes are an ID number which VINST checks to ensure that it is working with a correct version. The current number, 0250h, is valid for the most recent releases of VDE. These two bytes are followed by up to ten strings, each preceded by a string-length byte which VDE uses to index the string's location. Each string is limited by the size of a buffer in VDE to 127 bytes. An empty string is indicated by a string-length byte of 00h. After the last byte of th3@f 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 my 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, 3 e last string, the remainder of the 512 bytes are filled with 00h. It is a peculiarity of VDKCOM 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 VDE and VINST allow. When you look at the key macro buffer of VDE using the K option of VINST, you see something that looks like this: <0>This l3at 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 44kine 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 , 4^c', and finishes off the file when all strings are accounted for by inserting an EOF ^Z. In addition, VDKCOM 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 VDK file in CP/M is so similar to the eight-sector MS/DOS version that you can use VDKCOM, along with a patcher, to c4, and <> (no option) are supplied by VINST. The VDT 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. VDKCOM recognizes blank lines as unassigned keys. These produce an "error" message when invoked by VDE. VDE recognizes a No Repeat option if the the hi4reate a VDK file for installation in VDE12, the MS/DOS version of VDE. Make up the VDT file as you would for CP/M, then patch the second ID byte from 50h to 60h and add four records of nulls. Fred Haines Glendale Littera RCPM/QBBS 818 956-6164 =@41gh 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 448by 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 4 4the 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 VDK overlays to VDT text files, the procedure is more or less reversed. VDKCOM converts the string length bytes to CRLF pairs, the control code bytes to two-byte ASCII strings ' 4446part of VINSTALL. There are also a number of User Options affecting the operation of VDE 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); VDE assumes only that the printer responds normally to Backspace (if ^PH is used), Linefeed, and Formfeed. You will probably want to redo this, so you will have access to your printer's special features.  ===4   VINST266.DOC   --   [Supplement to VDE.DOC]  'Instuctions for VINSTALL 2.66 (06/88)  1Installation Utility for Video Display Editor  (c)1988 E. Meyer As distributed, VDE is set up for a basic Generic Terminal, and VDE-M is set up for an Osborne Executive. Unless you have an Executive, you will want to re-"install" VDE(M) befo4== RUNNING VINSTALL === VINSTALL SYNTAX: A>vinstall {d:}vdename{.com} {instfil} "{}"=optional Typically, you can use VINSTxx to modify VDExx.COM (of course, feel free to rename these files more conveniently) simply by typing:  A>VINSTxx VDExx and selecting the values you want to change. If you have to do a manual installation of VDE for your computer, you may want to create an "installation file" which you can use (and give to others)4re using it. The "Generic" VDE installation may run on many different computers, but it is very slow. VDE can now be installed for ANY terminal; if improperly installed, the display may be a mess, but there are no other side effects. VDE-M requires a computer with memory-mapped video; if improperly installed, it may crash. Most users should be able to install VDE simply by going to the Terminal Installation and choosing the ist option to select from a menu of terminals already bui4h to supplement the built-in terminal list of VINSTALL. This is done by specifying another filename:  A>VINSTxx VDExx TERMNAME VINSTALL will load and use (or create) the file TERMNAME.VDE (or .VDM), and update it as well as VDE.COM when you exit. The installation file is very small, containing just terminal parameters (no user options, etc). It is also possible to create "key files" of VDE macro key definitions. These work just the same way, except they must have a filet4lt into VINSTALL. 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 VDE basically working, you may want to go through the detailed dit procedure to fine tune things; the better the installation, the faster and 4 Fype of ".VDK", and this must be specified on the command line, eg:  A>VINSTxx VDExx MYKEYS.VDK There are also "printer files" of type ".VDP", which store your printer installation data, and work the same way:  A>VINSTxx VDExx OKIDATA.VDP (No, you can't specify more than one supplemental file at once.) The version numbers of VDE(M), VINSTALL, and any ".VDx" files must "agree" or you will get an error. The match need not be exact, as there may be a new 4more attractive the display will be. NOTE: the installation of arrow keys affects VDE's command behavior. If the keys ^J,^K,^L are in use as arrow keys, as in many of the CP/M defaults, they will not function as Wordstar synonyms. Installing VDE 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 VINSTALL can be improved. Terminal installation, while necessary, is only one 55release of VDE without modifying the installation areas. VINSTALL's Key (".VDK") files are compatible with MSDOS versions of VDE as well (except that the MSDOS version allows up to 1K for definitions). VINSTALL 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. VINSTALL uses sever5 first entering VDE? (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 VDE? 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.5Zal 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 lead zeros.) H BYTE STRINGS - fixed length: enter the required number of hex bytes.  ;variable: enter the (hex) count for the number of bytes,  Cfollowed by the bytes themselves. Example: (02)1B3D. The max-  imum length5 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 VDE 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 VDE won't reset them before writing to them, speeding up som54 is given in square brackets [#]. This format is  referred to below as "(#),bytes". VINSTALL 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 VINSTALL procedure. Most people will be using VDE; you can try to use VDE-M instead if you have memory mapped video with: (1) a high bit that can be used to highlight and provide a cursor; (2) an absolute address at or above5e 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 VDE error message displays? Enable help menus (Y/N) - Do you want to have the help menus (^J,ESC-H) avail- able? Normally "Y". If you change this to "N", you will hav5zf 4000h. Memory mapped video provides much faster screen display if your hardware supports it. === 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 VDE.DOC do you Nwant as the default? (Originally "A".) Auto mode select filetypes - You ca5 0e 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 d51n 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 VDE? (Originally No.) Default ruler on (Y/N) - Do you want the Ruler line (^OT) to start out ON when 55.elay 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. (VDE-M is so fast that a value of 01 is recommended.) 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 va5s 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; VDE strips these. Use "FF" for "not used". The default is CP/M ^K,^J,^L, entered as 0B0A0CFF. (Don't install ^H here.) These keys will not function as Wordstar synonyms unless you remove these assignments. Terminal init, deinit - Enter the codes you want s5riable tab stop columns, in ascending order. (Column 1 is the leftmost.) Fill unused values with zero. Originally 5,15,35,55. You will next be asked whether you want to continue to MODIFY DEFAULT CHARACTERS? (Y/N) Ordinarily you will NOT; however, if a default assignment in VDE conflicts with some special application, you can change these values. Remember the new values if you do! When entering control codes (00-1F), avoid standard ASCII values ^H,^I,^J,^L,^M,^Z (ASCII 5ent to initialize your screen on entry into VDE, 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.  INSTALLATION (Generic VDE only) 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 - E508,09,0A,0C,0D,1A). Wildcard character - Normally "_", 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 r5nter 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 (eg inverse, dim) 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 5ibbon/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.  == 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 li nes on your 5  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 VDE how your terminal can be made to put the cursor at any given row/colu5:screen. Normally 24 for a standard screen. Must be at least 4. DELete character (00-7F) - VDE 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) - VDE always accept 66mn on the screen:  >"S"tandard = leadin byte(s), row byte, column byte (default)  4"R"eversed = leadin byte(s), column byte, row byte  3"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 a6gits. Video in/out code - If your video RAM is in the ordinary bank of memory (eg, at F000), just enter "C9" here (that's a RET instruction). Otherwise, you will need the machine-language code to switch video memory in and out. There are 16 bytes available for each routine, and you must preserve all the CPU registers (including A), and end with a RET. You should find the assembler code to do this in your terminal manual; to convert it to hex, either look up the hex va6ddressing 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 positionin6lues in a Z80 reference book, or use DDT or ASM/MAC to write and assemble the code to hex form. You may find it easier to install this code with an assembler overlay than with VINSTALL. The addresses are 0190h (VidIN) and 01A0h (VidOUT). CAUTION: if switching in video RAM affects the low end of memory (0000- 3FFF) in any way, you will not be able to use VDM. There is no provision for relocating any VDM code to cope with such situations.  ===6g (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 is6== PRINTER INSTALLATION  === VDE.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 manufac- ture their own LF on receiving a CR, you will want No here. Pa6[ 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 sequencDes you installed above are for line 1 only, rather than general.  INSTALLATION (Memory-mapped VDE-M only) Unused columns of RAM (0-255) - Enter the number of unused bytes in video RAM between the end of one visible line and t6 ge 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 stri6he start of the next. Example: many computers have 128 bytes of RAM per line, but only show 80 of them. So there would be 48 unused columns. Cursor on/off - Enter the codes (#),bytes to turn the regular CP/M cursor on and off, so it won't appear on the VDE screen. If you can't do this zero them out (00), and the cursor will remain visible at the upper corner of the screen. Video RAM start (4000-FFFF) - Enter the starting address of your video memory, as four hex di 6 6ng 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 6o 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 VDE 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. VINSTALL also tells you the add6M 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. == MACRO KEYS == The default macro definitions are those attached to the commands ESC-0..9 when VDE is first entered. By changing them you can6resses of the command tables in VDE/M. You may find this useful if you need to go in and change a VDE 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 al6 configure VDE to suit your own specialized writing requirements. (Any Keys defined with ESC-# while running VDE override the defaults.)  VINSTALL gives you a display much like this: MACRO KEYS: (01C6 bytes free) <---- note free bytes (up to 01F4 = 500) <0><> <1><> 9 <---- "<>" flag means empty <2><> <3>^[;^C e<---- normal macro key <4><> <5>World Wide Widgets Inc. <---- "" flag means no-6{so see the "keycodes" 00 and 80-84h in the tables; these are used internally for arrow keys and other functions.) === RESTORE DEFAULTS === This option is provided in the event that someone has so mucked up your copy of VDE that you can't sort out what's wrong. This should return VDE to nearly the state it was distributed in: all User Options restored to their defaults, Termi9nal Installation set to Generic (or Osborne Exec), printe61rpt 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 VDE. All the same rules apply (but VINSTAtLL will accept longer keys, up to 128 bytes). If the new definition is too long to fit it will be rejected.  == FURTHER USER PATCHING  === 6 _Er set to a basic Teletype, no Macro Keys, no User Patch code.  == GOING BEYOND VINSTALL  === 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 VDE. (You may also find this the easiest way to install other data, such as the VidIN/OUT routineos for the VDM Terminal Installation.) Write the overlay file, generate a HEX file with your assembler, then 6 Entry to VDE is via a JP instruction at 0100h. The current value is JP 0480h. 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 0480h. Exit from VDE is via a JP instruction at 0103h, 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 VINSTALL. This small region in VDE can be used t 77umerge it with VDE.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 VDE 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 VINSTALL sets VDE up for), and sets the cursor and DEL key definitions properly. There is another problem: the VDE case t7 =jp entry ; (0100h) jump to entry routine in Patch area  Mjp exit ; (0103h) jump to exit routine in Patch area *---> org 0250h V ;At User Patch area, entry: ld a,0Ah ;entry routine to turn cursor off  out 10h,a  ld a,20h  out 11h,a  ld a,0Bh  out 10h,a  xor a,a  out 11h,a ;Done... *---> 2 jp 0480h ;Jump to VDE start point ; 7oggle 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 010B-0112h in VDE.COM; alternatively, you can get VINSTALL 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 7< exit: ld a,0Ah ;exit routine to turn cursor on  out 10h,a  ld a,40h  out 11h,a  ld a,0Bh  out 10h,a  ld a,8  out 11h,a ;Done...  rst 0 ;Reboot CP/M  end You can also add code like this to VDE.COM using the "a" command to enter assembler mnemonics in a debugging utility like DDT or (Z)SID. Eric Meyer, 427 N. Washington, Bloomington IN 47401 7lthat may change with versions of VDE. ;NEC8401 Patch for VDE 2.64 (Z80 mnemonics) org 0100h  ;At beginning of VDE.COM,  org 0250h I ;At User Patch area, entry: ld c,08h ; set screen mode:  4ld e,81h ; Soroc, wrap on, fnkeys off, etc  rst 10h ; call special BIOS  $ld c,4Eh ; set cursor keys:  ld e,3 ; to 7/--- CIS [74415,1305] '==  7,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,(010Bh) ; get address of main command menu *---> 4 ld de,7*3 ; offset of ^^ (this may change)  0add hl,de ; point to offending ^^ code    jp 0480h 7 7_ ;Jump to VDE Start point data: db 4,7Fh,0,0 ;Data to set "DEL" key as DEL (7F)  end Here's another example: the Bondwell 14 will run VDE-M, but can't turn off its own cursor with an ESC sequence. After selecting the BW14 terminal installation from VINSTALL, you need to add small Z80 routines to turn off the cursor on ejntry, and restore it on exit. ;BONDWELL 14 patch for VDE-M 2.64 (Z80 mnemonics) org 0100h ;At beginning of VDE.COM, 777word =#I k del blk  =^KY p ins line =^N#R r trans lft =^S#H#G^G^S#P^D t trans rt =#G^G^D#P u user "=#U v case (ins off) =#C 77777^@ save/del prev wd =^A#H#W^T ^H use BS as DEL =#D ^T save/del wd =#W^T ^Y save/del line =#L^Y ` goto end sent =^QF.^M^M^D ~ goto end par =^QF^N#S^M^M #D use DEL as DEL rt =^G 1 Keypad 0 format/return =^B^QP 2 Keypad . save/return =^KS^QP @ Keypad 1 beg block  =^KB A Keypad 2 end block t =^KK B Keypad 3 move/hide blk =^KV^KH C Keypad Enter reformat file =^QQ^B1 P Keypad 4 beg ln =^QS 7 72Q Keypad 5 end ln E=^QD R Keypad 6 copy/hide blk =^KC^KH S Keypad , center =^OC a Keypad 7 underline =^PS b Keypad 8 prev cursor =^QP c Keypad 9 save/delete ln =#L^QY d Keypad - save/del begln =#L^Q#D 1 fast find  =^QF#V^M 2 find/repl  =^QA 3 mark sent . =^QF.^MB^M^D^KB^QF.^M^M^D^KK 4 mark para  =^QF#S^MB^M^D^KB^QF^N#S^M^M^KK c case (ins) =#C^G i ins 888G̈́0M:G D̈́0/50502:;3.#:7#:7:7( !(6 0h2!/:7_͋):7_ ͠S427:7 C4:D~0 0̈́-d/[[:7o&?5^#VA/i/ ]]] 50:7( 2C4M >>>>>> >> > 27*I&)))):+ :7_:7 /27ͻ25:!Z75#~T]#](O!Z74^q{8>2^:Z72^ɯM͜YN(  !s(!!s ( (#OGyHMAʗ=ʸ=l=>B2!}ր0>M{(2(. (M=(Jy(!w# 088@%0u0:0u0! ! >+Z0 Z0Z06}րM͉> BKxbk~08 :0 #x0Ex(<($8*(8 ,!'ͷ 8$!ͷ 8!dͷ 8! ͷ 8 !ͷ 8x70= DMOI Z د 7!+ FNy(-B0 ##>1B84 ##NFy(>0}0B> 6 #= 'd !/7 <2!72.72)7/2(7>2 72'7:2+7:2*7!5 0!!7k ͜ B(WD(MP(FL(/T(5*(^(<@(G#(d=(x"* K  G 2 7 G 2+7 82*7~ m~!wF b 8](Z2'722.7^)!F#*T7"X7*P7:)7 :'7!'72)7!!7n(O^ R+ a *T7[V7""7S$7!!7~(2&7<27:/7Gn 8s*"7) ;͆ %(&:!7_(> ͆ x(( x::7(n 82>2 7] ͆ [$7{z0> ͆ ::7O:/7( y͆ !~(˾F#! 75Ÿ !F#*X7+s)2:&7> Ć :!7g(s)!6 ^)!&74 N:'7_:(7=  :'7O:&7!!78˶ :*7(G!!7N(I:.7G:170>F> ͆ = *,7:.7G> ͆ :&7!)7o&81N9!776 2))-27<2\ 2727:r247ʹ/:2/7*>"07:T2Y):/ 2:7!85!~#)ͭ!/ !5#:8 # !# :/7G7nnnnn (.(:7ȯ271 >27:7W :7(>27 !Y):!7W >^͆ @!!7v ^ 0O!Y)(P!U( 4>_!0F#+>_!~ F#˾_( :+7G> ͆ > ͆ ::7Æ x~͆ #x^(#!B=:E !R9"P7*.%"V72G7<2E72F72I7!"L7"N7"J7*P7+"R76 *V7#"T76 F#^#V## ^#V##͜@`0@a{_:7>G:7x= :HG x BDM*P7DM*R7*V7KT7KR7*T7++87 #-1$0-|:] (͚#":7 q/:7!027271N92[115JS4{r0lg$=& p .  = VBq$R::7qC!6͉r 9"I!.   "#5 D"#>!W#/  !6{͜08: r s[ MC#!=,~0+;!6͉͐r$($($ ; G%$-%$.n/t%f !6͉{r4  $|K D̈́0 0// 8u8*T7+*R7"R7#"T7*R7#*T7"T7+"R70) > 7> Q ###7?(#+0S> *T7x 7?z 7*V7+> ##>4:D7?-*J7+"J7:F7(=*J7#"J7:F7!D7(<:D72F7>5:E7=(,?&!G78#$:E7=:E7=!J<:E7!p<:p2E7ɯ ~#(  > 8&T]~  > 8 > # x SR7*V7T] >0~ ~+ x ST7o}p!76*R7#w"R7p!76*T7+w"T7!"J7*X7#> *R7 *J7"J7*X7+> *T7 *J7R"J7!6 0M͜8*T7"X7:[8! 7_*R7RRN:8; :82TT] C7( | } ; K7n:82B##y27( >  ++~#( ( | } ; K7t:8=G8(!SÜy++*T7~( (~6 ͊͒Ͳ! 7FC4!8( O#> C4![8K4O#> C4K4y+*T7~( (~6 ͊͒C4!5 082 72 7>2!~/ $#~#/(͜I(B( 7>2>2 7~#(x28*R7"X7:8( GͰ![8~(G#~́>2 7!5 02[8O!827N(Q r0M0 W>!8>_!z(N #= ~(^6#DM!BDMͭ{(I: :s#K!T]BBDMN#!8:7N(Q +~#8#+ͭ2 !!>ݾ8^R8#"|6#+| !"!!!7FM0:͠27!7F0G!(^#~#O~˾(#~˾Ě>1)!5 0(cO!5 0M͜Q r0͚My( !862*( 08 0Gx297ʠ!8"77>27!:~2=7~$>282:727M!76[(+](.>(5<(<_!8~#({ #"77!8"78>27U:8:7IJL8%(L0:7C4>27L:7(ͭ:77: 7ͻ2w8 ( :8&Ͱ:7?:77͠D̈́0 0!6 /5D̈́0 /50 7* ͻ277_YN ! 7ͥ$3.: 7!6 !64o-8&!K8#~=!p4::~%%8&: 7(H!R +y0+~:J/<%!5 0:I7(@(=#(X (1a8,g_:R7!K~( 0# +s{!QR K O<K8K a8 23.!5 0:I7 8(!K(#6( T]#H23.87ɯ27_ͪàl *77++++"77>>2D:7M_ )ʺM>27:7% *77^&*77^#"77~< :7 !97~<(5( !8"77{կ27ͪ͠!~06!~0w4{:: /!=7$!~0~62;7:;72~0!~0~62<7:<72~0 0͐-d/!A/`i6 *V7#[P7RB|6 *P7[R7P*T7[V7P j6 :7>Y >N2^6!T6A/50C4{z~# (8:7n/!/0-C4*P7͎!"J7C4*R7"X7*V7ͲC48 *T7>ʼ8 *P7>ʷ,>2I748& ) 8&l:F7=G:I7͗8X!6͉( !T (Y  ́O4 %0%K4_?8 O4I0{́:E7!p4 { À&: 7> ́K4 :E7!J=!p4: 7Ĝ:: 3:7N( ) ͬ584l`: 7> ́4> ́:F7!D7g4G4ͬ5: 7> ͔> ͔G4::O4*T7> > K4:7Ͱ27: 78 ::(:17=e &Y<% ) ll͗>27*T7+"T7~ G4O4>27x(*T7++> ##"T7G4>27O4*T7~(*T7~6 +w~#"T7 G4 x7*R7#x8gT]#> 8*S4ñ:D7!F7G:I7͸S4ñ!5:/7(:7N !5 0I :7N(:/7(_jb x( #DM|z('(^+ (^+͒ͧC45L2,4͙:I745L2^+0*V7~ 4ͬ=*78&!I7"8$ ) ( ~=!J #+"R7͝ ( (4͙8&=!p4:E7=4pͱ4 ) 5L2~(6 +#"T7͊ ( (4ͬ>2I7:p=!J!E74 ) l)(l),)( l),))8 oG4*T7"T7^0+ ,*V7##^0 *V7~ # +*T7K4"T7>27!62B7Ͱ% )!B7(2C7 :7N!C7~ 6 6 Y :T́C4) i 6 i C4#Gw +ͧ͒C4!A768$:T T] +~8*T7:T F T]+:T: :TT]8SR7+x *V7:Tp *V7:TT]8ST7#x O 2w DM*R7B`i(#SR7 KT7BDM(+ST7 SR7#"T7ͧ>27C4+#RDM[T71!8 :F7"),)  ("),)( ) l=ʢ ) ʰ"),)( ')1)r"),) Ͱ"),)Ͱ"),)( ')1)r"),)ͰC4:D7=_!@8<_^+ڑ‘[R7SX7Ͳ:I7C4:D7_=!@8_,||[T7SX7:I7:D7?? (E(B( 9k90+#RDM[T71!ST7ͧ>27C4`i7B :7Ï !5 0>:\G:7O('͜0:8 @G 0OY !y7p#6?{7 6 0:;(̈́0:p2H7:D7=257:p!67wgN y7͋) i/NFile l"y7͋)`"_!#! ~(:A( ~w#6+> w+w+w+T]+y6.OA/ !575( > /:67Oi/...  y!67(> /50B1:7_ C4:7( !(6 0h2͚#!5#:7 ):\)\͋)<ʹ#2͚#!5#:7 +^)8*R7,+ 0 [R7"R7#ʹ#s)9 .,;:?*=[?(##+27ANWɯ2h2|27/27\͋)< 7͋)\͋)+0!:7W K~ >-w(n :7(d/27~ ~ (0˾> #wz ˾~ +~(7 27!!T( ~ 8~ (> #wz#l+U+27 ):\)!] ˾#:7(-!\ !\!7͋)͋)\͋)272h2|\͋)<.-x#-!!Y)(jw:7W <~ ~!8(" ( ( 27~ >27:7 ~#\͋) C!:w > (|9Z>27C4:] #:7 !>6 0h2^)*T7"X7*P70*T7,*X7+27s)͚#!5#:7 $^)*T7"X7*P7O( RBK,0*X7+ʹ#s)2!\y7 :7:7:7!y7\ ~27_#~27#~27 ͚#!5#:7Ĵ#1$0->272 0>G!~͜w#!~[( x)27#~W( A(N27!"27:7N(>2 7:<27:17= *>"07 !"072 7273. )_A8[0 nˮ >27lO4!5 0: 2/70-2C4!7~/w!=ͥ$!6:7N(:= !67o-!:ͥ$::!6 !6/o-! 7ͥ$: 7!6 !6=o-! 7ͥ$: 9|,}|,|,(6#\͋) \͋)<7:G̈́0!60ʹ-!6:7N :/7 !6o-$ͯ$$$Æ%:G̈́0 0/50:;(Ä0!Gͥ$( ʹ/͵C4ʹ/͢0-C4 0 ̈́0 /̈́0:\@u0:7 8 >1u0 0u0>:u0!]~ (u0#>.u0!e~u0#/>[u0:7u050!;ͥ$ʟ.ʹ/͢C4:;!7:G7207y2173.2:7N(:37=t%!5 0:I7 8(!1702073.2͘%!1737͞%͆%3.:37=!6 !6@o-!0727~(6w>:I7G:17 ́:07=G ) l<ɷ ) Ͱ= ?&2I7) >G, x!JG>8 0x+6 ͬ:17!I74ͭ%5) - :=( ) (> ́ ) l4%(8 &x=&l=:17=( ) 9 (0)_!H75Z04:H7_4:q  Z0 Z0:p<2H7/> :p<2H7:H7_~# ~#G> //:/A/:47!7ͥ$(/ʹ/:4734͎>272:G ̈́0G1ʹ-27C4ʹ/C4:47!7F(?2r!GF =!;2D7ɯ7G#^#~0 ]>  ~0̈́- 0:/*̈́- 0:p<_450:F!:/>2>7:F!:/2>7:E7!p :F7!D7:<0?:>7_~0 _Z0:G(:7(:rWz2?7:N !!+1z(  ~0 {!+1 A(=!+1!:R(z_~0#{_~0{_~0#z_~0:G9ʸͻ;(8 &a($&&%(8&!I7( ) ʭ' ~=!J ́) l8&% ( ( ) ( ͰͰ'&') F) ͬ-(RlͰ|(>$& ) ͬ6) l> ́'l|(: 7C4:=(͠ͻ2̀ͻ0(̬̓07l ) \( (l) v( ( ) l ) Ͱð {2):17 ) (J) Ͱ) Ͱ8&Ϳ%!I7:07=G:17)(&> ́9 !<1z<1!?1{<1!91/60 84 #0w11~/:F 0:pW-Z0 50:F7_,0͎:F72F78&:E7Ox0_:G78 8 x={(<2G7D2E7*J7"N7:7N:/7 _+BJ(R8#"N7CL7: 4»215 :7=S2=F2=ʧ22:7F2ʧ22:G̈́0 0*L7:7N82"*N732*:I7o&3250̈́0# !# /S4:F7G2S4) F2:F7W:;W:E7=_F2̈́0,!E7:G7=W=G:p<_c3S:F7!D7 *T7c3S4: 7!F7(G#[10-1S43.S427/272:D7< ::;Ẅ́0:9F2l*T7~*R7~> ![)!X)!X)!P)!P) !T) ))~ #,;:-.?!  G̈́0 0!6/50:G2G̈́0 0/50)*#^#VS))r+s[)*#s#r!"1N9)ú>0ɷ(%!B˶#˶<(!()% :127/T](\O>: S++~08+:0'0_+~08:00W_+0^{27 }(~ (A8F_>8@{<2\>:> +#(]#(d.( (@8t[(B*(  > /7ɯ(;. ##(/ (8C[(*(~ #~[ #~( #+ 27!e2 +6 +:] (!+ 99F7(:8_,:p<_:G7GJD_^:pW<_:D7 8(4:G7GW$,:G7G:I7=W:p<_c3S!D7 *T7zȯGO_O(34 ( 4{!J<_DWDG > 44( (3 0L@%0u0:0@y (:7(  u0(> u0{=HG!y/:?7 u0 :47=W͖0:p_>> >>> :70275L2!̓45L2!̓4:G!!7 ̈́-/8:3.:F7=:I7=u4 ) ( :E7!p(%:F7!D7g4:F7=u4:F7!D7g4:G7K4>27>27>27!79K=nhdr) ^OFlusrt^Oruler^ODisplaCRs^OZascreen !90!76-5 ) :7) (8 = ^E = ^D f ^Q, start, end of line = ^X = ^S or ^H ^Q, top, end of screen  N[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 f9)^csup^worrt^linup^delete^undelete^prcode ^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^KPrint9 /ile ^QP to place marker ^R page back ^QI to page/line no. ^C page forward ^W scroll back line ESC, shift up, down 1/4 screen ^Z scroll down line ESC, shift right, left 32 cols  1^O make current line top DELETING: MISCELLANY: D FIND and REPLACE: ^G delete char right ^V INSERT on/off >^QF find string DEL delete char left ^N insert a CR  9CEsc0..usky ^KCopblock^KFillist^Ksave+eXitEsc-TAtaback ^KmoVblock^KErasfile^KQuit Esc-Arrowshifscreen ^QgotBlock^Q(3) Many people (myself included!) are using CP/M ever less  often. So: while the MSDOS version will continue to develop, I think CP/M VDE is about finished. Thanks to all who've helped.  ***** **** ***** This is a quick guide to changes in VDE since version 2.65. Please read VDE.DOC and VINST.DOC for full details. These changes are relatively minor; version 2.66 is being released now in order:˩ ~ MACROS: ESC-M define macro ESC-# store macro key ESC-!,=,~,+ ESC-; wait (pause) ESC-0..9 use key macro programming &: k to tie up some loose ends, and wrap up the development of CP/M VDE. Enjoy! VDE/VDM: Two new Print (^KP) options allow setting the printer top and left margin. At the "Options" prompt, type "T" followed by the number of lines to skip,. and/or "L" followed by the columns to skip:  Options: T4L12 will skip 4 lines at the top and 12 columns at the left. See PRINTING. VINSTALL: You can choose a default setting for the new printer left margin, originally 0. See: :g: PRINTER INSTALLATION. MINOR CHANGES: Several small problems have been fixed. In addition: 1. You can now mark the end of a block (^KK) before the start (^KB) has been marked. 2. ^QT can now be used repeatedly; it does not stall on the specified character. (If the cursor is on a ".", "^QT." will delete to the NEXT one.) 3. Tab Set (^OI) "@n" sets tabs at column n+1, 2n+1... (not n, 2n...) NOTE: If you also use MSDOS, look for VDE121.ARC. The DOS v: w   ZZ DDDDDDD EE  ZZ DD DD EE   ZZ DD DD EE  ZZ DD DD EEEEEE   ZZ DD DD EE  ZZ DD DD EE   ZZ DDDDDDD EE   Z-System Display Editor   Beta Version 0.2  KJanuary 03, 1989 by Carson Wilson ZDE is copyright 1988 by Carson Wils:ersion of VDE includes powerful new features such as dual-file editing and DOS commands, and is fully compatible with the CP/M version. ----- Eric Meyer, 427 N. Washington, Bloomington IN 47401 ----- :Eon. All rights reserved. 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. You may redistribute ZDE02.LBR in its present form to others privately for testing. Please do not post this beta version of ZDE in public areas of bulletin boards. * * * ::ؽ  BETA VERSION 0.2 NOTES  FUNCTIONAL ENHANCMENTS TO ZDE  ZDE BUGS FIXED  'ZDENSTAL BETA VERSION 0.2 NOTES:  -- This should be the final beta test version before I distribute ZDE publicly. I have made many changes to the initial test version (see the end of this file for information on ZDE version 0.1), many of them in response to reports by beta testers. . I hope all of these changes are for the bet:: %ter, but the new code has not yet been tested, so please indulge me by giving this final beta version a thorough workout and reporting any flaws. I am now SysOp of the Antelope Freeway Remote Access System (312-764-5162, Chicago), so this is the best place to reach me, since even first-time callers can leave messages to the SysOp. I am also available less frequently at Al Hawley's Ladera Z-Node (213-670-9465, Ladera Heights, CA) and Richard Jacobson's Lillipute Z-Node (312-649-1730, Chicag: ;y;Lo). Since ZDE is not yet available publicly, I ask that you leave only private Z-mail about ZDE. FUNCTIONAL ENHANCMENTS TO ZDE: --- There are several functional enhancements in version 0.2. First, many people (including myself) put ZCPR named directory support at the top of their list of suggestions. ZDE will now accept ZCPR named directories when loading, renaming, and era\sing files, and when requesting a directory listing with the ^KF command. The named dir;wam 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 search;ectory (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. T;es 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. 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 ;his 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..;ZZCPR and ZSDOS, so I have included them in ZDE. For WordStar compatibility, I have changed the "To Page/Ln" command from ^QI to ^QP and 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. Finally, I have changed;." message is now "Wait". These changes were also necessary because of the decrease in available space on the status line. The second functional enhancment is the new ^QM 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 l;  default wildcard character to ^Z so that ZDE can find strings with literal '_' characters. Use the ^QZ command to find a literal ^Z. ZDE BUGS FIXED: -- While there are fewer bug fixes this time than in version 0.1, I have found and corrected several potentially fatal bugs as well as other minor glitches. 1. ZDE no longer crashes if no name is given in response to the ^KW prompt (thanks to EricT Meyer for finding this one). 2. ^KB and ^KK now behave properly when entered at ;cimited 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. The ^QM command 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 progr ;;the rightmost column of the screen. 3. The "Chg?" prompt is now properly erased in all circumstances. 4. 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). 5. 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). 6. Backwards replace now finds the first oc;CgVDE266.LBR by Eric Meyer. !===  BETA VERSION 0.1 NOTES  VINSTALL BUG  NOTES TO DOSDISK USERS  CHANGES FROM VDE 2.66  4PLANNED ENHANCEMENTS BETA VERSION 0.1 NOTES:  -- Eric Meyer, author of VDE, the Video Display Editor, has completed his degree in History of Science and gone on to more gainful pursuits.;Xcurrence 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). 7. 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 use; He is still working on an MS-DOS version of VDE, but unfortunately has largely dropped further work on the Z80 version. Fortunately, Eric has authorized me to continue developing VDE, with the stipulation that the program be renamed. The new name "ZDE" connotes ZDE's similarity to VDE while emphasizing its improved performance under the Z-System. Because my system is not memory-mapped, I will not be continuing work on VDM, the memory- mapped version of VDE. This initial version of ZDE ;d, 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. 8. ^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. ZDENSTAL. -------- Due to new enhancements, ZDE may no longer be installed with VINST.COM. Included in this library is ZDENSTAL.COM, the new install program for ZDE. ZDE;is largely identical in operation to VDE version 2.66. I am releasing it in hopes of thoroughly debugging VDE before adding new features to ZDE. The only major functional change is one which I felt was long overdue for ZSDOS users--file create stamps are now preserved across file editions. Most of the other changes I have made simply correct minor bugs in VDE (see below). Because of ZDE's present similarity with VDE 2.66, both the documentation and VINST program supplied in VDE266.LBR by;sNSTAL 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 ins;  Eric Meyer are completely compatible with this version of ZDE, and are therefore not included in this library. Please obtain VDE266.LBR before using ZDE. Also, this version of ZDE is still compatible with CP/M 2.2 and CP/M Plus, as was VDE. Please give this beta version a thorough testing and tell me of any problems or suggestions you have for the first public release of ZDE. I regularly log onto Lillipute Z-Node #1 (312-649-1730, Chicago). Since this is not a public distribution, plea;=tall VDE 2.66. I have included a version of Fred Haines' wonderful VDKCOM.COM utility which compiles VDE macro keys from text files (see VDKCOM12.LBR for usage instructions). The ZDE-compatible version is named ZDKCOM.COM. ZDENSTAL also corrects the bug which prevented VINST from loading installation files whose archive bits were set, and adds several new terminal types. The reference to ZDENSTAL.DOC in ZDENSTAL refers to the eventual release documentation. For now, see VDE266.DOC in <<se leave any notes as private Z-messages. For the next month or so I will also be available infrequently at Ladera Z-Node (213-670-9465, Ladera Heights, CA). If you have involved comments, I am available "interactively" at 312-274-7612. (Oh God, don't let that slip into common use: "The President will be available interactively at the press conference on Friday...") VINSTALL BUG: --b VINSTALL will not accept .VDE, .VDK, or .VDP files if the files have been set to System, R/O, <zrsor is at the left side of the screen, and moving to the left edge of the screen with ^A no longer causes redisplay. 6. ^A now moves to the first character on line 2 before jumping to line 1 when line 1 is empty. 7. ^PZ now causes a horizontal scroll if it moves the cursor beyond the right edge of the screen. 8. ^KB, ^KK, ^KU and ^QY no longer cause unnecessary redisplays. 9. Block and place markers no longer set file status to "Changed." 10. The cursor no longer jumps around when m<|vor Archive. Solution: set all such files to Directory, R/W, and Modified before using. 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 awuare 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 <?oving 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. 11. For faster operation, ZDE no longer resets drives under ZSDOS (same as CP/M Plus). 12. 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. 13. Strings can now be found with ^QA<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 C< even if they are the very last item in the file (credit goes to Cameron W. Cotrill for finding this one). 14. "^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. 15. ^^ now sets file status to "Changed" when converting from lower-to-upper case as well as upper-to-lower. 16. "Wait..." message now disappears after disk operations with ruler on and statu<tP/M 2.2) requires a disk reset or warm boot when disks are changed (see manual, p. 7). CHANGES FROM VDE 2.66:  --- 1. The bug fix published in VDE266.FIX has been incorporated. 2. 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 asy their .BAK files. Note that if a file with the name of a block being saved with ^KW or ESC-W already exists, th< +s line off. VDE266 forgot to erase the message in this situation. 17. 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. 18. Backwards find and replace operations<e 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. 3. Several ZDE bugs affecting use with DosDisk have been eliminated (see above for bugs IN DosDisk 1.00, however). 4. Tabs displayed in the last column of the last row no longer cause the screen to scroll. 5. Virtual screen displays no longer show garbage at the end of the line if the cu <Q< now work properly instead of repeating the prompt indefinitely when the replace string is shorter than the find string (thanks to Benjamin Cohen for pointing this out). 19. 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. 20. ZDE restores INSert to entry status when macros abort due to errors (e.g., "[[[ Not Found ]]]"). PLANNED ENHANCEMENTS:  -- 1. Improve VINSTALL to accept ASCII files for key definitions, along the lines of Fred Haines' VDKCOM program. 2. Named directory support for ZCPR systems. 3. Bridger Mitchell has suggested command "bindings" which would allow any control k&ey or meta key sequence to be linked t<<9o any ZDE command. This idea will be familiar to users of Perfect Writer. Key bindings would allow ZDE to simulate EMACS, for example. 4. Using the ZCPR "reserved" registers, interface ZDE's ^PZ command with Al Hawley's new Z80 assembler for a- Turbo-style Z80 programming environment. *@<<< < =O=s(1(*""!epVDE(M) 2.66 INSTALL (06/88) (c)1988 E.Meyer [Opening !] ~!l \<>!*\̈́K**˽fRXͺ(>M2 !!((6: ʁp, ! ~!K#K#( K(PK<̈́K*(`RX!(*`̈́K*(fRX!(]+p] Installing: !*~p ...Press to see Main Menu͢ p --- VINSTALL MENU --= V p Variable tab columns: D`Dp MODIFY DEFAULT CHARACTERS? (Y/N) ͢ͱYp Wildcard character: ^p Code for block marker: ͷp Print toggles 1-4 (^B,D,S,Y): $p Print switches 1-4 (^Q,W,E,R): $4+5#p TERMINAL INSTALLATION: ͺ pGeneric Terminal VersionpMemory Mapped Versionp Currently "!*~p" Choose: dit current or ist terminals: ͢ͱEA L p Terminals: press to select from list: !ͺ(!*&~#G~=f- ption configuration ey definitions erminal installation urther patching

rinter installation estore defaults Choose option, ave, uit, or elp: ͢ͱB OJT PK;FjQ+R=SHàüp VINSTALL HELP -- press ^C at any time to abort VINSTALL VINSTALL 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 =Y͢ͱ`Y(`p(End of list)*`pSelectedp Editing installation - ͺpGeneric Terminal Version Terminal ID: !*p Viewable columns: Vp Auto wrap at line end: 'p Viewable lines: Vp Extra DELete key: ͷp Extra arrow keys u/d/r/l: $#p Clear to end of line [06]: 2p Terminal init [07]: 2p Terminal deinit [07]: 2p Alternate video on [06]: 2p Alternate video off [06]: 2p Alt video uses high =W0-F (don't omit lead zeros). BYTE STRINGS: Fixed length - just enter the required  & number of HEX bytes, 2 digits each.  - Variable length - enter the HEX # of bytes  4 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. (Se=bit: 'p Output filter limit: ͷp Cursor position mode (Std/Rev/ANSI/None): ^p [Non-ANSI] Cursor position sequence: $p Delay after cursor positioning: ͷp Insert line [06]: 2p Delete line [06]: 2p Ins/del specific to line 1: 'pMemory Mapped Version Terminal ID: !*p Viewable columns: Vp Unused columns in RAM: Vp Viewable lines: Vp Extra DELete key: ͷp Extra arrow keys u/d/r/l: $p Terminal init [07]=e VDE.DOC for further explanation of patches and values.) p RESTORE DEFAULTS: This will restore VDE to its original distribution state: default options, terminal, and printer; no function keys, no user patches. Proceed? (Y/N) ͢ͱY!*-!]+!"*!"*!+T]6K/ͺ!(!&*`p Done.p USER OPTIONS: Create BAKup files: !*'p Default file mode (W/A/N): ^p Auto mode select filetype 1: p Mode: ^p Auto mode select filetype 2: = : 2p Terminal deinit [07]: 2p Turn cursor off [06]: 2p Turn cursor on [06]: 2p Video RAM start addr: |p Z80 video in routine: $p Z80 video out routine: $p PRINTER INSTALLATION: Printer ID: !]+p Send LF after CR: 'p Page length, lines: Vp Top margin, lines: Vp Left margin, columns: Vp Printer initialization [13]: 2p Printer deinit [07]: 2p ^B toggle on [07]: 2p ...and off =p Mode: ^p Default insert on: 'p Default ruler on: 'p Default HCR display on: 'p Enable hyphenation: 'p Left margin col: Vp Right margin col: Vp Scroll overlap: Vp Show system files: 'p Fixed drives (A-P): p Ring bell on error: 'p Enable help menus: 'p Use alt video in header: 'p Suppress header by default: 'p Clock speed in MHz: ͷp Horizontal scroll delay: ͷp Fixed tab display spacing: ==[07]: 2p ^D toggle on [07]: 2p ...and off [07]: 2p ^S toggle on [07]: 2p ...and off [07]: 2p ^Y toggle on [07]: 2p ...and off [07]: 2p ^Q switch [07]: 2p ^W switch [07]: 2p ^E switch [07]: 2p ^R switch [07]: 2p Select <0-9> or ap; or to exit: ͢ͱ Z2;0n n2p New definition: ( edits, saves; use ^P to enter these) 7;;p MACRO KEYS: (!,=7M>1B84 ##NFy(>0}0B> 6 #= 'd F#^#V## ^#V##p :p p? 㯆#Oͮ#Oͮ͢ͱ͢ Oͮͫ+ëîa{_!*~COMVDE5AASMN....@@@@#7_Teletype :?Generic CRT P  N  =!,p bytes free)!, > 02,p *p!ͫ (0((w#>8+~  ͫ!>w7@p :W:_!,z(N #= ~(^6#DM!.BDM{:, :,s#K!.T]BBDMN#!p Choose o-repeat or uiet if desired: ͢ͱN(Q +~#8#+ !!,>ݾ8^R8#",|6=ADDS 25 A P KkkG4G0SY LMPAmstrad / Heath P KHEHEpqSY LMQANSI standard P AQBondwell 2 P TINS= ERDEC VT52 P KHJHJ SY  Commodore 128 P =#+| !",!,! OҮ@O^ͮî#($#~b~+ ~Z+~#G~#p<>ppp FURTHER PATCHING: You will require DDT or a similar utility. Addresses in this version of the program are:  0User patch area: **ͭ-ͮ:*_+ͭp  Command tables:  Basic: **ͭp ESC/^K: **ͭp ^O: **ͭp ^Q: **ͭ`p [Closing !] ~2h2|22!*\ͦh: p, ! ~:K(.P(!`"(!*(`(!f"(!]+(!=: T)(S= ER*Epson Geneva PX8PT   S= +Kaypro II/IV P  S= ERPKaypro 2/4/10 P B0C0S= ER*LearSiegler ADM3P T S= ER*Morrow MDT-20 P T=P"(!,(!(ͦhp] {(p *Aborted* &p *File)p *Readp *Version p *Writep error* & 7 <(ط~gY͍ (.!w#͍ ( 8w#6 #!HH ~Y NͮgY͢ͱ (Y(N Oͮq##~Y͢ͱ ( w###gY8(28(w#:w###|}gY8(w#͍ 7?؇2͍O:A~Oͮ= R= ERPNEC Starlet 8401PTg**)(S= ERPNorthstar Advtg.P S= LMPOsborne 1/2/4 P T)(S= ERPOtrona Attache P KU&U S= LMVTelevideo 910+ P TG4G0S= ER=ROî0:0 ?ͱ?>2?C@"B$2?C@"B(ͮ*B)ͮ*BF#(#gY!6K@:?x(!w(Y#͍ -80!wG(4#͍ :? "8w͍bw#[BK@H!:? #*BK@H :?#(ͮ)ͮVp... ͹gYm8(w#͍ 7?2͍ (0_:W2͍ (_:W؇؂؂؃2:~o&!~ ( Oͮ#0 ?!8FNy(-B0 ## >>OTRS-80 mod 2 P&TP  SY  FTRS-80 model 4P P S=  QZenith ZT10 P Ts1s0S= ERBondwell 14 POsborne 1/4 P0   Osborne Exec P0 >>yk X.0.2˷TRS80-Holmes CPMP X?{???TRS80-Mont.MicroP '01>ӄ>ӄTRS-80 mod 2 P&TP>  @@ @>zK>^O^L1^M^Q^S^N..lm8,rm73^O^L8^M^O^R73^M Your truly,^MGeral D Pine^MManage R& Benefit Analysis^M ^Q^R^Q^A ^Q^R^Q^F 30 Sout Ashlan Avenue^O^C^ML Grange I 60525^O^C^M ^Vqq^B^Q^R^Q^Fqq^M^G^G &^B& ^O^L1^M^Q^S^N..lm1,rm65^O^R65^M VINST COMO BENZ VDT  >>>> > >C>>>>>>>> > ?]???????? ? ????????? ? @@@@@@@@@ @ @@@@@@@@@ @ AAAAAAAAA A AAAAAAAAA A BBBBBBBBB B BBBBBBBBB B C CCCCCCCC C CCCCCCCCC C DDDDDDDDD D D"DDDDDDDD D E