IMD 1.16: 1/06/2007 13:33:18 FOGCPM.202 --FOGCPM202PATCH18ACOM PATCH18ACOMM-07-15 89 PATCH18ATXTPATCH BUG PATCH DOCw!"#$%&'()*+,-./PATCHINSCOM0123456789:;<=>?PATCHINSCOM5@ABCDEF-CPM202 DOCPATCHINSDTA"GHIJKPATCHINSMSGLMNDOS AZMOPDOS1 MQCQRSTUVWXYZ[\]^_`DOS1 MQC6abcdefgDOS2 MQChijklmnopqrstuvwDOS2 MQCSxyz{|}~INSTALL COMQINSTALL PAS"PUBLIC COMPUBLIC DOCPUBLIC SRC<SUPRBDOSDOCOSUPRDOS2TXT This is the disk name. SUPRBDOSDOC 'SUPRDOS2TXT  ͫCopyright(c) 1985 Bill RinkBupdnlfrtJESUS is the WAYActrix/Soroc 120CP/MP= *E T()~7#~= oͦkԄ!!"~#(}:$= +*!5!*!!:(2!5:(>2!!!:O::O:!*! !45(! +/ 0y0( 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! ""*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> S>))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 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ͬ͗ ͗ ͬ--- ́ ,,,-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 !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#}˸}րogM| .(z = ~> x0w#xG%͇ %͇ ZJDM%͇ = _~65+~hìx-Sx9?+{Η@}|z z gZJDM0{ ,7}o˸? #yO!@9i&?  #?w#?/w#?w#!9! E9!!9~(+Fͺ!"9!(#>2*"| >"2:( Ͷ *w*6 !\$![ (ͦ( #:~CONTRMKBDLSTCAUXUSR>2i:*ˮ~0:*:(@q##pZ* :(  ~* < >26"!"""~>2""v>2>"!"ˮ(!~8>~O6~*"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((=ʦ==ʩ=ʬò*: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(> >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>">!"2"~ʰ*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""{_!"*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"*"!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!Xgܵ>\"p*pn&"r*r"d!Z*dn&s!Z!*d!n&s*Z"f*fP! !!͙͛!" k! :͛!ͪ ̈́"*n&!`*n&!g}oE!*n&! R*s*n&!/*n&!:}o*n&!@*n&!G}o}oEU"*n&!@E@"*n&!7R"R"*n&!0R"n"!}2yM Invalid HexL!*!"!ü:ͣ"!*fz""!ü*n&}2!͊!**R!N*|g}o"*"*#Ï"*""""!*n&|g}o"*! E2#*!0*s@#*!7*s!*n&|g}o!V"*! E}#*!0*sË#*!7*s*n&!*n&!}oEʿ#*n&*s#!.*s*!V}2x!x!w!v!u"*w&*v&e.͢ =!r*!|g}o}2x!x!w!v!u"*w&*v&e.͢ =!o!r:!o:=!ü͠Eʋ$!!o&}2*&}2nÒ$!}2*n&}2ùP!Ĺ!!͙!Ĺ:͛!ͪ! " *ù&E$!jP͎ %a$e.P!j*&!͒E$!j:P!!:"h*h!fzU%"!*͙*#6%"^*^"*!*!! fzʾ%"*n&!`Eʵ%**n&!_|g}os*#Á%"P"R"T!*Ps#rMP!!!Pfz&"*R*+!s*#%!"*T:!!k͖ }2E*E&!HEK&!"*E&!"͒*E&!.͒}o*E&!X͒}oEʈ&!H}2E!,e.*T:Ͳ"*!E&*T:!*!RkP!*T:*!*T:ͣkP*T'*T:P!!"*E&!HE'**n&}2G!G͊!}2G**!͊!}2F*R*P^#V+*G&!N*F&s*P^#V!*Ps#r*~&E'!}2~!D!k͛!"ͺ Ucase-off ̈́*E&!.Ec(!:!!:ͣkP!!:!!*R*P^#V+*s*P^#V!*Ps#r*~&Ec(!}2~!D!k͛!"ͺ Ucase-off ̈́*E&!"E(*P^#V*P^#V!:ͣ!Rfz("*R*+*!n&s*!"*#Ý(*!*Ps#r*E&!XE')!}2u*R*P^#V+!Xs*P^#V!*Ps#r*!E&!}2y*x&*}&}o}oEʳ*!!͙*z&*t&}o}oEʏ)͛ͺ Display  ͛ͺSearch Cont Record  *~&Eʼ)k͛ͺUcase ̈́͛ͺ  *}&}oE)͛ͺ +/- Quit *}&Eʳ**z&E*͛ͺBase  *z&*t&}o}oEJ*͛ͺ OverLay  *t&Eʄ**|&Ea*k͛ͺLog_Sec ̈́͛ͺ  Õ*͛ͺAddress ͛ͺ Edit +/- Quit !!͙͛!("*!&ͺ) Cmd> !"a$}2*&!͒E**}&EG+*&!A*t&}o}oE/+!"*&!EEG+!"*z&E+*&!D*t&}o}oEw+! "*&!O*t&}o}oEʝ+!"*t&*&!L}oEʿ+! "*}&E+*&!BE+!"*&!RE+!"*&!UE,! "*&!SE),!"*&!CEA,!"*&!+EY,!"*&! Eq,!"*&!-Eʉ,!"*&!QEʡ,! "*R,R, R, R, R,!}2x,!}2x!!(!o&}2!"ָ*ָ*&N"ָ!%*ָ!*&!*&DM"ۻ*ۻ!"ٻ*ۻ! !"׻*׻!"ջ*׻! "ӻ*׻! "Ż*׻! "ѻ*׻!!"ϻ*׻!!"ͻ*ͻ!!"û*׻! !"˻*׻! !"ɻ*׻! !"ǻ!Ae.!,!!*&!As!!!k͛!U" ̈́͛ͺser No:*!& !!!k͛!D" ̈́͛ͺisk No: !:!ͪ !!! ͛!D" k͛!i" ̈́͛!r" !!! k͛!S" ̈́͛ͺtats !6!͛ͺ Sec/Track: *ջ!& !6!͛ͺ Blk Shift: *ӻ!& !6! ͛ͺ Ext Mask: *ѻ!& !A! ͛ͺ  !6! ͛ͺ Max Blk#: *ϻ!& !A!͛ͺ  !6!͛ͺ Dir Exts: *ͻ!!& !6!͛ͺ Dir Track: *ǻ!& "*RP0MFile Does Not ExistL!}2Rv0MNot Open for InputL!}2R0MNot Open for OutputL!}2R¾0M File Not OpenL!}2R0MError in Numeric FormatL!}2 R1MIllegal OperationL!}2!R<1MNot Allowed in Direct ModeL!}2"Rn1MAssign to STD file Not AllowedL!}2R˜1MRecord Length MismatchL!}2R1MSeek beyond end-of-fileL!}2R1MUnexpected end-of-fileL!}2R2MDisk Write ErrorL!}2R62MDirectory is fullL!}2R\2MFile Size OverflowL!}2R}2MFile DisappearedL!!!fzʬ2"!(*+!s*#É2~2*!E2!"2!"**!RE2*!R"*!E 3!"!~*o!~!(*;!0*!Eʘ3!3!͛ͺ  !3!*͛!&!/"*!!& **!"!~*o!~!(*ͺ!0MA:!M File Name:!͘$!!:ͣ!E3!V%M.COM!:Ͳ"!o&}2!:e.!:Ͳ!͒Eʐ4!:!!k!:e.=!!!n&!AR}2!:!!k!!!*&!As!*&!~!:p!~p!0!!͛ͺ  !!!:͛!ͪ!:!ͪ *!E|5!~]"͛ͺ (ͺEof=*!R!&!)" !"ͭ2!!͙*!!:M͍}oE3*}&}oEʳ5!#%*{&}oE5! !͛ͺ  ! !*͛!& *"*|&Es6*!E66*ջ!R"*!R"ʹ5**ջE[6!"*!"ʹ5*ٻ*!Rn&"*!E6*ջ!R"*"*|&Eʮ6*!"*!R"ʹ5*!E6!"!"!"*|&E6!"ʹ5**ջ!RE97!"!"*|&E*7!"*!"ʹ5! *DM! *DM5! o&"5! o&"~2!!(T7*!Eʌ8!!͛ͺ  !!*͛!& *|&E7!!!k*͛!& ̈́**!"*!"!!(!T7!!͛!/"*!& *|&Eʉ8!#!͛!/" k*͛!& ̈́Ý8M Disk ErrorL!*!R"!!(f7*w&}oE8*!"!!(!f7*!R"!!͙͛ͺCopying  k*͛!& ̈́͛ͺ sectors starting at track  k*͛!& ̈́͛ͺ and sector  k*͛!& ̈́͛ͺ using  k*|&E9͛ͺLog_sec 9͛ͺPhy_sec ̈́͛ͺ OK? a$}2*&!͒E9*&!YE:!"lͭ2ͭ8*w&}oEʄ:*!"*!"*l!"l**lEʄ:*!R"*!R"a$}2*l**&!͒}o*w&}o**}oE:*{&Ew;MNumber of sectors to overlay:!͘$!!*!E;!}2wM$use Physical or Logical reference? >!͘$͖ }2*&!LEm;!}2|t;!}2|Ñ;!8!*ջ͛!& MTrack:!͘$!!*!Ev<ʹ5*|&E;MLogicalP!-;MPhysicalP!-!-:M Sector:=!͘$!!*!E?<*{&E9<8<!!͛ͺ'=========> D I R E C T O R Y <========= !"V!\!!s*="P!\*P!?s*P#=͛ͺUser: 0 *͛ *R! "N͛! " *N!*N!fz="P͛!N*Pn&" *P#ë=͛!." *N! *N! fz>"P͛!N*Pn&" *P#=͛ͺ  !"T!}2L!!fz.@"X*<o&"R*R! "N*R!͒E?*L&Eʐ>!}2L͛ ͛! " *N!*N!fz>"P͛!N*Pn&" *P#ó>͛!." *N! *N! fz$?"P͛!N*Pn&" *P#>*T!"T*T!EP?͛ͺ  ?!"T͛ *V!"V*V!E?!"V͛! "! "ͺHit to continue... !Z͎ ͙*R!EJ>*T!͒E?͛ !"T*<*X!}2L͛! "ͺUser: *X!& *X#A>*<*M&͛! "! "ͺ!Hit to return to Menu... !Z͎ "J*J!R!!"*J!*!RR!!R"*!!! "! "6!"8*8! ͸E^A!ȼ*8+)*6s#r!ȼ*8!+)*6!s#r*6!"6*8!"8@!!!0fzʕA"8!ȼ*8+)*8!s#r*8#iA"."0"2"4*4!!! !"!ȼ*2+)^#V"$*$*0*!&͛" !ȼ*2!+)^#V"$*$*0* &͛" !ȼ*.+)^#V"$*$*0*&͛" ͛ͺ printing.... !ͺ! " !ͺ! " !ͺͺ Address  !ͺͺ/00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F !ͺͺ 0123456789ABCDEF !" !!fzMD"*!*!R"*"#!ͺ! "!ü:!ͪͺ  * " !!fzC" !(* +n&}2* !" !!!!"!ͺ*&"*&"! " * #dC!ͺ! " !!fz2D" !(* +n&}2* !" !!!!"!ͺ*&" * #C!ͺ! " *#C*}&EOE!"!"!!fzOE"*!*!R"*"#!*!ü:͛!ͪ !"!!fz:E"!(*+n&}2*!"**"*!"*!!*R"!***͖A*#D*!"*#oD*}&}oE'H!"!"!"*"!#%!!!(*+n&}2*!"*&! EʼF*!!,! 4 ! !E?F!!,! 4 !  !LF!!!,!EʰF͛! " !,! !!,! !LF!,"*&!*&!}oEF*!"͛*&" ÒG*&! *!P}oEPG*!"*!"!"*!*ÒG*&! *&! }oEʒGk͛! " ̈́*!"*!EH*!"**!REG!"k͛ͺEOF ̈́!"*!"*!"ͭ2*!*!"*!EʆE"Զ"ֶ"ض"ڶ*ڶ*ֶ!O*ض*Զ!}oEʞHM Window Won'M t Fit Screen=P!y!y:L!ÔI*ֶ*Զ!*ڶ!fzH"ʶ͛!-" *ʶ#ùH!*ضfzI"ʶ*ֶ*Զ*ʶ͛!|" *ʶ#H!*ضfzOI"ʶ*ֶ*ڶ*Զ*ʶ͛!|" *ʶ#I*ֶ*Զ*ض!!*ڶ!fzʔI"ʶ͛!-" *ʶ#vII*m!!EʿI*k!@!"_I!*m!@R!R"_*_*!R!!"i*!! *i!RR!R"m!ȼ*m+)^#V"o*m!*m!0}oEoJ͛!" *o*ia$}2*&!͒EyJ!!͛ͺ  !!*&! EJ͛!^"*&!@" J͛! "*&" *o*i!}2h*&RK R(K!}2hK R!!͛ͺ- Operating System - !!͛ͺ Version BDOS BIOS !!! "*l&"*!EʎX͛ͺCP/M  ÿX*!EʰX͛ͺMP/M  ÿX͛ͺ????  *&"*!EX͛ͺ1.x Y*!͛!&!."*!E!& ͛*!XW!ͪ*!R!XW!ͪ !! ͛ͺL- Logged - ---- Records ---- - Tracks - --- Capacity --- --- TPA --- !! ͛ͺLDrive User Block Track Drive Sys. Drive Directory Drive Bytes K !! ͛ͺ !o&!A"ͺ: ! !o&!&ͺ  !" * "*n&!" * ͛!& *^#V͛!& *n&! *n& ! *  !!,͛!!yͺ  * ^#V͛!& !,*^#V * ^#V !!,!,͛Eʫ[!,! !͛!,!&ͺ  *^#V!͛!&!/"* ^#V!!&!,! !&!K" !*!V ! !!,͛!!yͺ!,! !!y M Hit any key to return to Menu...!͘$͖ }2>@!"!}2~!}2}!}2u!}2t!}2|!}2x!}2{!}2w! !o&"!o&}2!!*&!Ask!F!!!(Ḧ́!!͛ͺ0PATCH 1.8a (c) Copyright Bill Rink; 1984,1985. ̈́!!k͛!F" ̈́͛ͺile !!k͛!T" ̈́͛ͺracks !! k͛!M" ̈́͛ͺemory !! k͛!Q" ̈́͛ͺuit !!͙-!!͛ͺ Selection?  a$}2*&!͒Eʎ^!"*&MR^TR^FR^QR^!"ð_SR^UW\ð_URJ_M User No.:!͘$!!:!!*!EG_! *ð_DR _MDisk No. (A-P):!͘$!!!n&!AR}2!*&ð_IR°_~<\*!͒E_^*&!QE_!!͛ͺHappy Trails.. >O*&!F*&!T}oE.`!}2z5`!}2z!!͙*z&EYa*&!FEʵ`!}2t!"͛ͺ FileName: !*!͛ͺRecord:  ͵3!:M͍Eʲ`\a!}2t!"͛ͺTrack: !!͛ͺ Phy_Sec:  !)!͛ͺSectors/Track= :*"#!<!͛ͺBase= !ü:!ͪ *!EVaNDìa͛ͺ'This is MEMORY that you are LOOKING at! !<!͛ͺPage: !" Q8)!!͙*&!EaBB*Rsb*}&E_b!"*z&EPb*t&E;b*!"**ջ!RE5b*!R"x7Jb*!"ͭ2ND_b*!" Q*}&}oEpbND!gRb*}&}oEʣb***RR"*z&Eb!"*t&Eb*!R"x7b*!R"ͭ2NDb*!R" Q!gRc!}2u̓V!gRec*t&E0c:OcMRecord:!͘$!!ͭ2*!EbcND!gRcMAddress=!͘$!ü*z&Ecr"*R!"**!REc*!R"ͭ2NDcr"" Q!gRxe!!͙͛ͺ6Cursor: Up=^E,^I Dn=^X,^M left=^S,^J right=^D,^K ͙͛ͺ5Cmds: ^A=switch to ALTERNATE field (Hex <--> Ascii) ͛ͺ, ^Q=QUIT edit mode ͕I!!͙!!͛ͺWriteRecord Abort ͙͛ͺCmd> a$}2*&!͒Ed*&!WEOeMRecord UpdatedL!*z&ELe*t&EFeͭ8Ie͙3Oe(Q*z&Ere*t&Eiex7leͭ2NDue Q!gReMBase=!͘$!ür""*"#!B!͙!ü:͛!ͪ *t&Eex7eͭ2ND!gRf*"*"*"*"*!"!}2vT!g R6f*~&}o}2~!g Rf!"*}&}o}2}*}&}o*!͒}oEʯfM' .COM file cannot be DISPLAYed as ASCIIL!*}&}o}2}f!#%*}&}oEfND*}&Ef*!R"ͭ2OND!g Rg*|&}o}2|!gR!g!}2{:!}2{*! Eʬa*z&*t&}o}oERg!~Ͱ \ R"ͭ2OND>f R *|&}o}$!ü*z&Ecr"*R!"**!REc*!R"ͭ2NDcr"" Q!gRxe!!͙͛ͺ6Cursor: Up=^E,^I Dn=^X,^M left=^S,^J right=^D,^K ͙͛ͺ5Cmds: ^A=switch to ALTERNATE field (Hex <--> Ascii) ͛ͺ, ^Q=QUIT edit mode ͕I!!͙!!͛ͺWriteRecord Abort ͙͛ͺCmd> a$}2*&!͒ =============< PATCH >============== This powerful disk and memory utility has been updated to include some desirable features that will further enhance it's capabilities. The latest version released is PATCH 1.8 and will be the LAST release in this series. The next release will be entiltled PATCH+ and will incorporate several enhancements that will make this utility one of the most powerful avail- able. In addition to the features presently available in PATCH 1.8, there will be the following: * Search and Replace of Alphanumeric String and Data * Display of TWO files simultaneously for modification * Cut and Paste between either one or two files * Overlaying of data between any combination of files, sectors or disk drives * Accessing of files by group numbers * Placing FILENAME.EXT in command line to go directly into edit file mode * Scanning of several files (using wildcards) for a specified search key and then enter the edit file mode upon finding a  match * Other features will be installed as suggestions and needs arise * In addition, there will be a MS-DOS/PC-DOS verison released with the same capabilities In previuos releases I had requested that any individuals who found this utility useful to kindly submit a donation of approximately $25. The response was very poor in regards to monetary contributions, however several people submitted suggestions for enhancements and additions to the program. As I am now fully employed as a engineering software con- sultant, writting software is my only means of income. Therefore, all future releases of PATCH+ will be via orders submitted to me in the amount of $25. To the kind individuals that did contribute donations to me prior to the version 1.8 release, I will be sending them a complimen- tary copy of PATCH+ when it becomes available. If you wish to inquire about ordering a copy, you may write me at the following address: William Rink PO Box 21447 San Jose, Ca 95151-1447 I wish to thank those of you that have supported my efforts in this pro- gram, either by monetary contributions or by providing time and effort in debugging and checking out the software. Bill Rink, San Jose, CA tility useful to kindly submit a donation of approximately $25. The response was very poor in regards to monetary contributions, however several people submitted suggestions for enhancements and additions to the program. As I am now fully employed as a engineering software con- sultant, writting software is my only means of income. Therefore, all future releases of PATCH+ will be via orders submitted to me in the amount of $25. To the kind individuals that did contribute donations to me prior to the version 1.8 release, I will be sending them a complimen- tary copy of PATCH+ when it becomes available. If you wish to inquire about ordering a copy, you may write me at the following address: William Rink PO Box 21447 San Jose, Ca 95The reason for the updated PATCH18A version was because I forgot to compile version 1.8 with the DEBUG switch disabled, which in turn prevented you from interrupting a SEARCH function while in progress by hitting any key on the console keyboard. This meant that you would have to reboot if you were scanning the disk, as it could take some time to complete the search if the target was not found. (same for a long file..) There is one bug that I know of in PATCH18A that is quite minor but none the less baffeling. If you perform the STAT command to see the disk parameters and such, you will be UNABLE to use the DIRECTORY function until you have accessed the disk through the FILE function. I have tried several things to make this problem dissapear, such as disk resets, get disk number, reselect disk, etc., with no results. If anyone has a clue, please let me know on the Potpourri BBS (408)-378-7474. Thanks....Bill Rink  MQ M0:PATCH18.LBR/HdɁ0AM=Ph&./o.ЩB& :u************************************************************************ * * * PATCH 1.8 DOCUMENTATION * * * ************************************************************************ PATCH.COM is copyrighted by Bill Rink, San Jose, Ca. TURBO PASCAL is copyrighted by Borland International, Scotts Valley, Ca. Note: This was compiled with a Z80 version TURBO PASCAL compiler. ** TERMINAL INSTALLATION PROGRAM NOW INCLUDED ** (SEE BELOW FOR INSTALLATION INSTRUCTIONS) ------------------------------------------------------------------------ Record of Revisions ------------------------------------------------------------------------ Release date May 5, 1985 PATCH 1.8 1. Fixed a bug in the directory procedure. Also, scans all users files in sequence. 2. Added a CP/M status routine to display various parameters about your system. 3. Changed DISPLAY of ASCII files routine so that it is not necessary to have a DELINE function in your terminal, also updates screen more quickly. Release date January 20, 1985 PATCH 1.7 (not released due to DIR bug) 1. Put the cursor key variable in 1st page of program space so that it can be modified for terminal installation. (See install procedure.) Release date December 27, 1984 PATCH 1.6 1. Fixed bug that limited maximum user number to 9. 2. You can now search while viewing ASCII files in the alternate DISPLAY mode. 3. When changing DISPLAY modes, the file pointer is decremented so that you will reference the same records after the change in mode. 4. Slight modifications to DOC file to clarify the install procedures. 12/20/84 Robert Flagg 72466,2332 (for KayPro SIG, Compuserve PCS25) KayPro Sig Version includes Kim Levitt's terminal definition file (renamed PAT15.DTA) from his LIFE.LBR 11/25/84 courtesy Kim Levitt. Release date December 1, 1984 PATCH 1.5 1. Added the capability to read and write system tracks. Actually any track/record on the dis k can be modified. 2. Added an overlay feature to allow the overlaying of a file to any track/record on the disk. The routine performs a two record copy at a time and so it is quite slow, but effective. 3. Corrected some documentation errors in the DOC file. Not Released Patch 1.4 Release Date November 13, 1984 Patch 1.3 I received a phone call from Irv Hoff telling me that people were having difficulty running the .COM file, most likely because of TPA size differences. Well, as it turned out that was the problem. Evidently when TURBO PASCAL compiles a program, it records the top of the TPA in the file so that upon loading the .COM file into memory it sets the program variable space at the top of memory. Well, if your running ZCPR3 or have a large BIOS, then most likely PATCH was stepping all over your CCP and causing untold problems. This new version was compiled for a TPA size of 48k, top of TPA set to BF00. Thanks to Irv Hoff for pointing it out! Release Date October 31, 1984 Patch 1.2 1. Fixed search function to stop after wrapping around to beginning of search. 2. Added tabbing to ASCII display mode (tab size=8). 3. Quicker disk operations during searches. 4. Default disk changed when reference is made to a disk in File Name. 5. Added a WILDCARD to the search routine Release Date October 21, 1984 Patch 1.1 1. Changed Search function to disregard upper/lower case distinction by by using a toggle. 2. Search now begins at current record and wraps around. 3. Now able to select disks other than default. 4. Added Display mode that prints ASCII files out in line format for better readability. First Release Date October 15, 1984 Patch 1.0 ------------------------------------------------------------------------ PATCH 1.7 (c) Copyright Bill Rink; 1984 ------------------------------------------------------------------------ This software is made available to the public domain and may be freely distributed. It is not to be sold or used for commercial use under any circumstances, without the express consent of the author. I may be con- tacted by addressing your correspondence to: William Rink PO Box 21447 San Jose, Ca 95151-1447 ........................................................................ PATCH is a file/memory editor that allows for easy access of either in- dividual records within a file, pages within memory, or individual records on the disk. PATCH can operate in one of two modes; accessing 128 byte records from within the selected file, or 256 byte pages of processor memory (up to 64k). Regardless of which mode you are in, there are 256 bytes of information displayed on the screen. PATCH works like a full screen editor when changing hex data. In addition, it has search capabilities on any combination of either HEX, DECIMAL, or ASCII fields that are separated by commas. PATCH is based upon the concept of EDFILE, a program which I have used extensively and enjoyed tremendously. My desire was to make an enhanced version that would be easy to use and more versatile. **************** INSTALLATION ********************* To install this program, simply execute the PATCHINS.COM program and re- pond to the prompts. You MUST have the following files on the same drive/user area in order to successfully install the program: 1. PATCH.COM 2. PATCHINS.DTA 3. PATCHINS.MSG 4. PATCHINS.COM Please read the INSTALL.DOC file for detail information on how to prop- erly install PATCH.COM. Make certain that you have the proper information available for answer- ing the terminal control questions before proceeding with a MANUAL in- stallation. By the way, I have noticed that in some cases TURBO PASCAL actually uses the opposite control characters for REVERSE VIDEO. If your start-up screen does not have a REVERSE VIDEO boarder around the main menu, try reversing the definitions for START HIGHLIGHTING and END HIGH- LIGHTING. CURSOR KEY DEFINITION If you would like to customize the cursor movement commands to match those of your terminal, simply use PATCH to modify the following loca- tions. Modify PATCH.COM, not the memory image, as you will experience problems in trying to modify run-time code on the fly that is referen- cing these locations each time you enter a key during an edit session. Values in parenthesis are the current defaults. UP Cursor 0132 hex (10) Left Cursor (02) 0138 hex Down Cursor 0135 hex (0E) Right Cursor (06) 013B hex You will notice that there are lables to the left of each of these lo- cations to confirm the data byte being changed. Sorry, ONLY a single byte is available for defining the cursor keys as I only read a single character from the keyboard each time to determine if it is data or a cursor key. START-UP SCREEN When PATCH is first started it displays a menu of available options. You'll notice that at this time you can select which disk and user area is to be used for  making changes. The disk can also be changed once you are working with disk files by indicating the disk with the file name. You can then choose from viewing/editing records from either a particu- lar file, disk tracks, or pages from within memory. Depending on which mode you enter, you will then have a selection of commands available to use. COMMANDS You will then be shown a list of commands to use for operating in that mode. The command set is more complete when editing files due to the nature of operation. 'Display' This will change the display mode for looking at a file. If you are looking at a file in the hex/ASCII mode, entering a "D" will toggle you into a ASCII line mode in which each line is strictly ASCII and is terminated by a CR,LF. Any non-printable characters will be shown as a reverse video field to indicate them as such. Tabs are converted, using a tab size of 8. Binary files that end in .COM are illegal to display and you will not be allowed to use this mode. 'Record' FILE MODE-Enter the record number within the file that you wish to access. This is a DECIMAL record number. The EOF record is shown next to the file name. TRACK MODE-You will be asked for the track number and the record number. Again these are DECIMAL numbers. The number of sectors per track are shown at the top of the screen. You will be prompted for either PHYSICAL or LOGICAL record numbers, depending on which mode you are in. 'Base' Allows changing the BASE address used as a reference while in a file. The default is 100H. This is useful when view- ing image files of the operating system. The BASE can be changed from anywhere within a file. The screen that you are currently viewing will then be updated. The BASE can be set when you are viewing system tracks to reflect the ac- tual memory locations that the operating system would reside in. If you are outside the system tracks, the address refer- ences lose their meaning. BASE is not allowed when viewing memory locations. 'Search' Will prompt you for a search key to be used for scanning re- cords or memory. You may search for any combination of char- acter types (hex, decimal, or ASCII). To denote different types, use a prefix before the field. Use quotes (") at the beginning of any ASCII field, a decimal point (.) at the be- ginning of a decimal field, and a H at the start of a hex field. If you leave the prefix out, it will be assumed to be hex. Separate each field with a comma. e.g. "This is ASCII,.1234,0FE1," etc. Will search for an ASCII string followed by a decimal, hex and ASCII field. When a string is found, it will be reverse highlighted to denote it from the rest. Wildcards are permitted by using an 'X' for a don't care. This must be a separate field, delimited by a comma and there may be as many X's in the string as you desire.  For example, entering a "Bo,X,"t,X for a search string would locate a match for BOATING, BOOTS, or BOTTOM. Exercise caution, be- cause whenever the wildcard(s) are present, any "X" in an ASCII string will act as if it were a wild card too. For ex- ample, searching with a string of "XRAY,X will locate XRAYS as well as GRAYS. Searches are done on an entire 256 byte buffer and so there are times when the target string will cross the boundary be- tween two buffers. When this happens you will be notified and the tail end of the string will be highlighted. Just go back one record to access the beginning of the target string. (Sometimes more characters are highlighted than necessary when a boundary is crossed, do not be concerned..) You can terminate the search at any time by hitting any char- acter on the keyboard. This is useful if you are searching a long file and realize that you entered the wrong key. The re- sponse will always be KEY NOT FOUND and you will be returned to the record from which the search began. 'Ucase' When highlighted, it means that when searching for an ASCII match, the case of the key and the string matched against will NOT matter. Both the search string and the characters searched will be converted to UPPER case for determining a match. If not highlighted, case does matter. This feature can be toggled by entering an "U" command. If you perform a search on a hex, decimal, or ASCII and numerical combination, Ucase will toggle to the OFF state i.e., all searches will be exact matches if mixed or numeric. 'Cont' Continues the search for the last string found. 'Address' Allows a HEX address to be entered for positioning from within the file or memory. This option is not valid when in TRACK mode. 'Edit' Will place the cursor at the top left corner or at the begining of the string that was found with a 'Search'. Com mands will be displayed to indicate how you may move the cursor from within the display. There are two sets of commands available, the standard WordStar format and one for those who like to use thier right hand. If you have cursor keypad that outputs E2,E4,E6, and E8, then it will work. (You can use PATCH to change these for your particular keypad, just search for them) To change from the HEX field to the ASCII field, or visa versa, enter a ^F. To quit editing, enter a ^Q. You will then be asked if you wish to WRITE the record or ABORT the edit. Hitting ANY character other than a "W" will abort the update. You will notice that the screen is then re- freshed with the current record. On an EDIT update PATCH will write the record and then read it back, displaying the changed data on the screen. If you ABORT, PATCH will read the unmodified records and redisplay them. 'Page' Paging is accomplished by either entering a + or -, or hit- ting a RETURN for paging forward. In TRACK mode, PATCH will take you from track to track as you exceed the number of records on a track. 'Overlay' This feature is available when you are in FILE mode only. By selecting it you are asked how many records you would like to copy from the file. Next you are asked if those records should be PHYSICAL or LOGICAL. If you are copying into sys- tem tracks you should use PHYSICAL, into another file use LOGICAL. Next you are asked for the destination track and record. Upon completion of this entry you will be told what it is about to do. If you like the parameters, just enter a 'Y'. Now PATCH will read two records and copy them to the destination, one at a time. It seems slow, but reliable and required little structural changes in the software. 'Log_Sec' The default mode for accessing TRACKS is in the PHYSICAL record mode i.e., each record accessed is physically located after the preceeding one. The system tracks are written this way to make booting the operating system simpler. Once the BIOS is in control, all disk accesses are done using LOGICAL records and so PATCH will use the disk skewing table in the BIOS to compute the PHYSICAL record needed to gain access to the desired LOGICAL record. This mode can be toggled. When in LOG_REC mode you will see both record numbers displayed at the top of the screen. To use this program, it is necessary that your terminal have the follow- ing following screen commands available: Cursor Addressing Reverse Video Clear Line Clear Screen I think you will find this a powerful PATCH utility and I hope you find it useful. Enjoy! Bill Rink San Jose, California fault mode for accessing TRACKS is in the PHYSICAL record mode i.e., each record accessed is physically located after ͫCopyright (C) 1984 BORLAND IncA Visual 200912/920/92PInitExitY,000) vHomeLnsMelxOL3igh4ow~7#~=% o&ͦoͦܐԩͣ}!!"8~#(}:$= +*!Z!*B!!:(=2!Z: <2!!!:O::O:!*B! !45(!.+/ 0y0( d!kZ!{Z͈͈o&  :(y ͠|( *"x2y( >28!?"9!!>2 :D]SXN]D [ (!e}̈́A8Q0G: x@!\w# (   yV. V!h6# (*(.(!8}(*(̈́w#>?> w#a{ |͒}͛Ɛ'@'7||}>"C"6# ""͐ͩ*B"[R5*"^#V#^#V#N#FO/o&9O/o&9!9(> (G!9 w#E͊w}8uRB0 >R@RR!+ͨ z R!+ͨ z <!+ͨ z <!+ͨ z <!#ͨ z <!+ͨ z T]KB!z> S>))0 = |JJDMgo>jB0 7?= H\<z5+)+<z {0Gɯgo||H}||/g}/o#}o&K[xAJSJDM!b"!6J"DM'ͬͬdͬ ͬ} wͦWͧ _}8(8J`9{T]=o`9y w >uJ u` }>(; xQ }} ˸T}ٕ(0D=C ,= ( [ 0%D , 7 ͏ ?(8u x O - ; 8˸x X ,-xG}; }م 9; .>#n0[ D = - nx P ,-(-˸G,-; }ٕ? 9.>͏ 8u ?= u+-(>O 0u O 8͏ ?x P , 78ƀ8ƀ8ox٨!دoGOW_gɷɷ|لg{ً_zيWyىOxوG|ٔg{ٛ_zٚWyٙOx٘Gxٸyٹzٺ{ٻ|ټx٨ xx(ͼ ?}ٽÏ }ց; <(; 7D = |٤g{٣_z٢Wy١Ox٠GD u J }x>uu}ƀ/ƀo; -J }0W-J W,}l˸ͨ 8 ; ` x( -ͨ 8J -ͨ 8,J }l8;*!` ! >u` ` u--- J ,,,-xGg?+2n*8t z~,->uxua}.; OJ , ; !U >,k- o&0%,` }g; }؉}颋.:}8c~I$I~L*kٷx˸; }0G,͙<},-(-J ! >0 a` o8 Oþ >um.`1pF,t6|!wS<.z}[|%FXc~ur1}Oٯx(<˸ͨ 8; !~Jͨ 0O!><ͨ 8 =  7 <` O ; 7 0 W-J OT0 j oD,:j !I}袋.}8c~I$I~L!>u` ` 77 ` = O nf^VNF!DLT\I!!53!r1!\!> x #-= o˸xO(- }(x>8(C ,C `iM!>u|; |J>| )=|(DMbo˸ͦ88ͦx(0 8> Mx(>-Ͳ{(ay(Ͱͦ \z(>.Ͳ (Ͱ ~ͦ{>EͲ>+|(|Dg>-Ͳ|/ 0:p# ~# +>0w#,-  60#J˸}րogM| .(C = ~> x0w#xG%P %P ZJDM%P = _~65i+~hìx-Sx9?+{Η@}|C C gZJDM0D ,7}o˸  #yO!@9i&   # w# /w# w#!9! E9!!9~(+F͊!"9!(#>2*Ͳ"|>" :( ͆ *6#w*6#6 !\$![ (̈́( #:~CONTRMKBDLSTAUXUSR>2$*#~ Ͷ$*:> >w###6  #6++p>2S-$Ͷ:*6###ww#w$w#w: ##N#F*B> w#w#[s#r>2S$Ͷ$*6 #-Nw#Fwq#p#6#w#w#w* :( ͒: *^ F* < >26"~͟*-w#ww#͟"~ <@*Ͳ!\  <ʮ!\$> >2*|>! * \$\<(!: [1Á\!(f"> 2:!<"F( #~#6e>!["N>!~8>O6*"w (=(&("( :(N 8y(~#x+% (6*#~[*#~ *~(h#"b=  8 J= B== ͯ}8= ͵}/ͭ !*###~-_~(4Q6*>2>*##w:>*##~*#~(E[ ( ( ( !][ ( ( ((w#(6!]~-#8~>7  [>OkͼMs #rkͼpX á[ [ (( #w(q*#~[ (  *##~6͜O$*#~(08ʦ=ʦ==ʩ=ʬò+###~-_q46͡> *:4^q}Ò*|(M|( M6-#͐ͦ[R8 (G> ͒C~͒#*ͦC!h !lTRUEFALSEͦ!9^#(~#(G~͒#> ͒> Ò "F![(#RR0*4#4> RR *4 #4(>>2$*V(/˖:(#~+ x y2!͵( =( X:(R*:(###~-_-͌X> :("͟"*^˞*V˖0 SRѷR8A* N#F#s#r$ 0})jS\*###w* N#FB ͟r+s> !T]>)j)0 0= UR!#U*^#V#N#F#^#V>">!2DM"~x(L* :O(o:" C}=( ?*-N#Fp+qq#p! * F+N+++V+^Bq#p>>> SRѷR* s#r$ s#r"S"! N#FB(^x * 6#[<(H*! Kq#p##K[! *! 4 #4! x *$ *>w""{_!"*nf}(HR0nf" ^VMDnfutqp*s#r*s#r"* 5KB!>u~#fo{_"*R0RnfR0KqputsrNF( ^VNF^V*SutKqp R*R(~w~wnf ut"6# * *!""*NFy(* "*B0Cnf* [R*"*RS[s#r^#VS>O"w2x2!"" @*>2"!"""!\Ͳ*: !~6go(\R*s#r_2x( s x(T]DMR0 -a%}̈́o*!~6o&͠|ͣ}%^C User break1:% I/O% Run-time% error ͒%, PC=[R"͍% Program aborted*1!͍!0[ͲZ PATCHINS.MSG PATCHINS.DTA PATCH.COMCOM"|*|"z*z!" !  !t͡!t"r*r"p!*p m5zʲ "n*p*n*p*nn&(s*n#Ä P!Ͳ5!NE R͐Ŕ*** FATAL ERROR: ! !q͐""**ͯE%!*"+!*"*""**͛ET!*"Z!*"*" ", * ͥEʖ!** ͥ!}2Ý!!}2*&" * m!͛* !n&! N}oE!* !!ͽë!* * mn&! NE'"* !* !n&+s!D*"6"8!;*6*b!;*8*gb"2"4!;*2*b!;*4*kb"/*/*"-*-!ԟ!)^#VN*-!ԟ!)^#VN}o*-!ԟ!)^#VN}o}21*1&")"+*+*"'!}2&!ԟ*&&)^#V*'aEM#*&&!}2&#!ڟ*&&)^#V*+***)s#r" """$*$͑"}oEʏ$*$*"!}2*"*"* *"!ԟ*&)^#V*N!ԟ*&)^#V*N}oE$*&!}2#!џ*&n&EP$!ڟ*&)^#V!ԟ*&)^#V+"!ڟ*&)^#V*^"!ԟ*&)*s#r!џ*&!s""**"!}2!ԟ*&)^#V*aE$*&!}2ñ$**"!}2 !ԟ* &)^#V*aE$%* &!}2 $**"**"!ڟ*&)^#V**" !ڟ* &)^#V**" * *s* * * * *s* * !џ*&!s!џ* &!s""*** *** *\ * &}2*&*!͛EY&!!+)!s#r!!+)*!Rs#r!"_&!"*!͛Eʵ(!*+)^#V"}!*+)^#V"{*!R"*}"y*{"w*y*w!"**y*w{#*!m"*m*u* *y*w*{#*y!q"*q*u%E='*y!"y*y*w*{#*y!q"'*w*y*{#*w!o"*u*o%Eʓ'*w!R"w*w*y*{#*w!o"W'*y*w͇E'*y*waEʾ'*y*w͐$*y!"y*w!R"w*y*w͛E&*w*}R*{*yRͯEX(*y*{ͯEO(*!"!*+)*ys#r!*+)*{s#r*w"{â(*}*wͯEʜ(*!"!*+)*}s#r!*+)*ws#r*y"}*}*{tEʢ&_&*!N*!t}oEh)*!NE#)!; $$$SOWRK.$$$=!;yb!}2:!!+"!!+"!ڟ!)^#V!ԟ!)^#V+"!ԟ!)!ԟ!)^#V!s#r*!͛Eʁ)!"Ç)*"!ڟ*)^#V**"*** *!"*!"**NE)!"*!"*k*!R*}/o|/g#{#*k!"*** *k!"k*k*t}2""""""!͡!("!)"!4*"!"!*ͼ *ͼ !͡!! !! ͥE +!@! !͡!! ͧ!"*!͛EW+!*!"*!"**"*!͇Eʌ+!",!ڟ!)*^!Eʩ+!"!ڟ!)*^!E+*!"!ڟ!)*^!E+*!"!s*^!E ,*!"!u*^!E',*!"*!aE@,!",!"!}2:!"!"!"!ԟ!)!s#r!ԟ!)!s#r!ԟ!)!s#r*\ !џ!!s!џ!!s!џ!!s&!"k*\ *:&E,!;\b*!tE-!u*:*!R"*!tED-!s*:*!R"*!tEt-!ڟ!)*:*!R"*!tEʤ-!ڟ!)*:*!R"*!tE-!ڟ!)*:*!R"**\ *\ *\ *&}2*&"*"*0!s#r*2!s}2""*"**0^#VaEL/*2n&Eʡ.**0^#Vb**3!gb*2!s**U!R͛E/*&E.Seek read errorͳ /**U͛E /Seek write errorͳ **b!Ͳ85 R4!Ͳ85R4!Ͳ85 R 5!Ͳ85R'5!Ͳ85*4&e.!Ͳ*4&!͛Ee5! (+128)!Ͳ! !5Ͳ!5 8* m*tEʭ5!}2R!bô5!}2*&6! !!͞*!N*!t}o*!͇}o}2*&*&e.!Ͳ*&Rb!8!b! *&e.!Ͳ*&Q! a! a! m!N}oͽ5}o}oE6*&Q! a! aE6!!!!n&+sͽ5E7* *e.*Ͳ*&! aE7*&R! b!8!bn7R!b! m!Ez_7"R!! !b*+57!8!b́5*&Q!$a!0!9k}o}oE6*&! aE8R*&4!q! b* *&e.*Ͳ́5E7! }28!8!bÜ7""*Ͳ!}2!8!b*&(Q!-a!A!ZkEi8*&(}2ß8*&(Q!0!9k!$aEʓ8ͺ5Ö8͜7R͐b*&ü9*+"*!NE8!"R!*b!$k !k !$ ! ͽ}2 * b* A}oEf9* M! !NE59R!<b* 8!$ͳb* M!R*aEc9-8* b-}oEʻ9* M! !NEʦ9R!>b-* [!$bs9"P!Ͳ" ! R!q! b!", !ͼ !!8!8!g9!$!("!aEʄ:R͐bŔ9*** WARNING: Unable to sort Terminal names - Press RETURN͐b+_bR͐bÀQ"*!!s!8!b*&! aE;*&Q! !~kE+;*&Rb*!*!n&#s**!n&*&s;*&!N*&!N}o* m!͛}oEʚ;R!! !b*!*!n&+s;*&!N*ߗ&}oE;!}2ޗ;!8!bø:R͐b""! R!q*!!-*!!E !qb"""**t**͇}o}2*&""""* \Eʇ*Ӑ^#VR!! ! !q! b*x&}oEc?!z͑:*ޗ&Eʎ>c?!z*Ӑ!y!xV<*y&*"&}oEʿ>!}2x`?*y&E?*͐*Ӑs#r*Ӑ^#V*ѐ*ϐ!!}2x?*ѐ*ϐ;`?*x&}oE2?! R!q!E !qb`?*Ӑ^#V*ѐ*ϐ!<}oE`?*ѐ*ϐ;!}2xl>"p"r"t"v*vn&"l!l*t*r*p>*l*vs"j!*j5z?"fR!_b*f#ð?!*j5z?"fR!b*f#?"b"d*"&E@!*d m5zS@" R*d* n&4!q! b* #@*d m!͛E@Ŕ (b!*d m5zʸ@" R*d* n&!! b* #Ç@R!́) bR! ! !q! b!*b~5}2 ! \*"&}o}oE(A! *dͲ[A* &!-NE[A*dͲ!_ R!q͐b""" *"&EʚA* n&!NEʓA!}2ÚA!}2!=*&}oEA!* s*Ͳ<ÄC*"&EA* n&!NEA!}2A!}2!=!}2*"&E^B*&* n&!a}oE6B!}2^B*&}o* n&!N}oE^B!}2*&EsB!* s{B!* s* n&!NEB*&EʤB*Ͳ! R!q! b**?ÄC*&EB*Ͳ! R!q! b*"&* o}oE>C* R!q! ! !q! b*+͝?!`͑:R͐b!` o*"&}o}oEʄC!` *Ͳ"^*^"\*\ \EʽC*\6D*\Fn&EC!e.!XͲC000!*\^#V5!XͲ*\6*\ !X *\ !X *\ *\ m!X m"V*V*\ m!X m"T*\n&EʮD*\G*Vs*\H*TsD*\G*Ts*\H*Vs"R*R!!*R"P*P}!s*P~!s*PF!s!ڕ! <b!ڕ5!aEuE6File Containing messages for this program is not foundͳ !ڕ!e!_H1!RͰI*K!s#rLLL*KY!s#rXM*Kg!s#r<*M&!!5zʄM"GR͐b*G#iM! R!q͐bR͐bNM"*6*"6*6*4͛EM!"6M*6!ͯEM*4"6^M!}2!}2*4!͛EʺNR͐b!R R!qb!8!b*&Q!a!a!a! aE)N*&RyN!ͩMúNRN!ͩMúNR§N*ߗ&}o}2FúN RºNR͐b*&!}2F!*~!/!"<*~!*<R!͛EO*<#"*@"8O*B+">*B*6+*@R"8*8+*:#"8!*8+5znQ"2!*:+5z\Q"0*6+*@*0*8*2"%*%*>͇ESQR*%#!́) b*6*4a*>*%R!t}oEP!**%b!*8!ͳb! !Ͳ Q*>*%RRP!ߎ !Ͳ QR Q! !Ͳ! R!qb*0*:+ͯESQR!! mR!qb*0#$PR͐b*2#PͦM}oEʬO*F&"!P!ͲP!;Ͳ!}2!*!; =!*5!aEQ!*bE!}2ߗ!}2ޗ!*U!N}2ܗ!"ڗ*ܗ&ER<R!Ͱ<^MͣM}oE3R!}2ÆV!}2"*ܗ&ETR!"%!<SR͐b*ޗ&EʐR!}2ÆV*%+"%*%!*UN}2ܗ*%!*U#NES*ޗ&ER!}2ÆV*%+"ڗ!}2ݗ!}2!}TS 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): 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 LINE: 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): Delay after ERASE TO END OF LINE and HIGHLIGHT (0-255 ms): Is this definition correct? Hardware dependent information Operating frequency of your microprocessor in MHz (for delays): 101 Nothing 200 Choose one of the following displays: 201 Which display? (Enter no. or Q to exit): 202 Default display mode 203 Monochrome display 204 Color display 80x25 205 Color display 40x25 206 b/w display 80x25 207 b/w display 40x25 FSET to add to LINE: 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): Delay after ERASE TO END OF LINE and HIGHLIGHT (0-255 ms): Is this definition correct? Hardware dependent information Operating frequency of your microprocessor in MHz (for delays): 101 Nothing 200 Choose one of the following displays: 201 Which display? (Enter no. or Q to exit): 202 Default display mode 203 Monochrome display;============================= ;SUPRBDOS Customization ; ;SUPRBDOS is a derivative of P2DOS by H.A.J. Ten Brugge of the Netherlands. ;It is subject to the same restriction as P2DOS, namely, that it is for ;non-commercial use only. ; ;See SUPRBDOS.DOC for more information on installation. ; FALSE EQU 0 TRUE EQU 0FFH ; ;Set these conditionals before assembly ;Conditionals DOTIME EQU FALSE ; True if time-stamping is supported ;Only one of these should be true: M80 EQU FALSE ; True if using M80 or compatible Z80MR EQU TRUE ; True if using Z80MR ; IF M80 CSEG ENDIF ; ; ;Some systems, like the Kaypro 4, only recognize changes between single ;and double sided disks when the system is warm booted; bdos function 13 ;(reset disk) will not work. By adding a "hook" to the bios of these ;machines and setting RESDSK to TRUE, bdos functions 13 and 37 will ;allowchanges between single and double sided disks. Very handy for disk ;housekeeping utilities such as NSWP, NULU, and cataloging programs. ; ;The "hook" is added as follows: Obtain the source to your computer's BIOS. ;Examine the code for WARM BOOT. Somewhere, there should be a call to ;a routine which initializes the disk system after a warm boot, or which ;detects changes between single and double sided disks. Call this routine ;DISKINT for purposes of discussion. Modify your bios's cold boot routine to ;initialize 3 bytes at address SETDSK as "JP DISKINT". The location of SETDSK ;is arbitrary, it may be in your bios, or in a reserved spot in CP/M's page 0. ; RESDSK EQU FALSE IF RESDSK ;address of JP DISKINIT set by modified Kaypro bios ;change to suit your system. SETDSK EQU 04BH ENDIF ; IF M80 .Z80 ; $INCLUDE ORG.DAT $INCLUDE DOS1.MAC $INCLUDE DOS2.MAC ENDIF ; IF Z80MR *INCLUDE ORG.DAT *INCLUDE DOS1.MAC *INCLUDE DOS2.MAC ENDIF ; END ; .MAC $INCLUDE DOS2.MAC ENDIF ; IF Z80MR *INCLUDE ORG.DAT *INCLUDE DOS1.MAC *INCLUDE DOS2.MAC ENDIF ; END ;vDOS1.MACf  !"#$%&'()*+,-./0123456789o:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdevm7n*|uw7gW}~}MI|K<'\R}& #W_m`dj"Q{0nTq=D??z.>]^gOvxqu?8sIaڛ ?3'`n2z-$q3`[A81I,ItjU~q3Ice$q3?(:i6fG?z.>C?r!=T #pdD,6B%beZ8s"1Bt}[=\R}Av[=`at `u:qպGs08sI!aYnF'x#蹤sG%g@4UAkЀو=|1ctds08sI!aYnL{{,b| Aa2a諮q30&N Cuf>>@%beZGkG%gyOKπݡ;,!cp A`uC10c:K<'\R}>%g` ݯ.Kπ|{Kq2\I\}7]c,> ໃ ./J8~`s\R}V7䓋o_TQR}y8nqy|t \}vpyv>qs~z`{(>G\ 7/^^`>Wv[\䃳wˋW;.../7/JG;\|'//ζ:Ë7}v}:_'\{~W?>?|ogW_~uII]\\^'-n_/vvg;d9>9û˟^Ov:Ëobnw{J%g`:a \]n?}?>lwv\.Gy }w@?5>Wg;˯~psg?׻3p>|q8`U//ξ9۽|np;\~/.?Wb縸=TKt26spow/O5.寮^ps.v}/w%gxv>'lp'lqyVR}owꓫw0ƻwW擋pys\.>>/>W8 Wgspow//|Go.}5nv/q |s5.+?׸ PR}.>rXR}~W߽GI8оx{o.?9.?Ov/'_ˋ%gG?`w?3q}t L98]pvW~2޽>+?׸@IˋnOoL?W]\\^'L(_]rqqy{ܝn^@.../PR}ߎ.v T]]W;TqW0QR}&?~{w~?ƻÛrǻ ^bWn.n>>]\Lh߽㳫k g}|vOv=?y TqW/v/'׸G7pu>_^|tnPR}xyy|ϯ^^ﮯk|']㛳{\]~{{3vo g\]7;T竟^ˋqy~0s=^~ ~w7|{QR}]s|svs|qGcqv/xaI8py_z}~ n_ˏ95./7?|w1^\~tsuW-(><ϯvwk\pyWg-nqu?]'#L98Tq._`p{?gջ5~ %g{;۽t;|tyv?J8+o^zws||ͻ\^Tqw;\ WgxgWq5v/ή?y(>ǒ]Z8|1rsӁdSk6g#a%}I98F)_EIGbdΩO7 %ՒjIp_}Y/DE%$jkSYp(qp\R-TX8AII>D*}?XcqN>@ؗSp@CIude ;È+=KTx)-V{~q?8̡p$=*bL00aaK0`=ć*4 ONSR% 'MTIbM`ކ*IcCso"J8:o#t1;fqu y^{𶵇*?A&!ܛtM]Atٽd:1z!TqbM]vV1A Ț!(%Ւ*cW{̽57NS0*08i\1&MX`㾤 `tbe%С;,8t&ЀiT@25m o|XޠGTXI| 8.+11c/5`Mqպ>6z/*so0=F'q\Vb"t8rw/J,qպܛ;X̽ Xu|UW|لso"h*OpPR<`W{̽!=V#^2V{ F w+]6fĠXq[.dU{@Ipb0Y25Y$d܎Naz+?hcܛ8dŕTؘ#b0:1F{7qXFX ީ,{3)VRR`d#KjȝhuӸjcM"v塤ZR{Qb{d3/v25Y$ F lоHIv'A"tcCb_ ܉UtS*V6fh_ݕTquA0&'DCwhG>"0CEI o:|0Fb:XM?FQ#ls=h@Iص֝`Fnk0{@"pj=(1&0oĘ`sv-ޏơQf Ck5ġ;XPNJ84Z{<O%UtM`O%Uʂ7#^ lоCID5{dAw9q0 <@A*1C"09z\T4T ̎V8O݈[ۯJ<0[>{݈goo*0f9ѠG|.rqT9aK z* ̎tC+K8p"ybۣ`Ճx^>},XUjI0vmή@~z,1k=ƪ+6sIوsrp6<@Ylk{8QhCI؇FH&UsoÉjkaوsrp6@Jt1Ŷ?TKfa:XJ%Ucv8q4qh( l AC1D)C J(GVmIǟuNCt 3ؼ/t3FlޗTqx5+º{k04]`e%J8.+1%U2˩]CU*mF+?l6֢о9)bU*O7<`Uo$?ڧlU G/8oW%UrhSQ@/B8OOUV%U]5!q>=8há}dqTqx\TROq>ĉ1;<|~* A)_V=O7?ȊnT2V!hIG`Ճts끬Ne5 V!hI>D/FNܧȊnT]hVGWG#U?ȊnT]hQK!Q)_V=O7Neх&NԺS#U@VLp{uN4/FNܧ` +SY0Ndf1/FNܧNeŠiԒ勑f9j +SY0E{YK#UfsȊnT8i%9Q5/)_V=O7ͱ dtw* 4 5ֿ,ɉ:/FNܧx +SYउW8LIN4/`Ճt|9ީ,pȋوs%`Ճt|;ީ,0b3jJ:2]`Ճt؁Ne*8> +uN)_V=O7AȊnTN$'^M|1r:X>l67Y1'^]C,I"/FNܧȊnTE:Qh_$bb%k3LGdIԒjIUL Y]I$z#7Ɋ%*8f*-ɇBbf@beľDQJ!@bf@beK7Y/%]Qx YvUR)_l@(ErIPdtĒ|:Q9 $+[#NQ17.ɇ@$Vz|(_HV8 |.4Au$/Fn?HVdi֣C;#7_ $+4QAQTR6N&#7@"~(p2 OJ2*Jby Y u ?XSR-iw~ɔ/F~!Ye%aơm=c:e1jINQL&]J,i:TK:NWl6ɊC18.+1Aї"Q%ļfHļfHļfJb^q %1ljINQL9jINNfOv\&hD5{LGt+T!Ekqrp%Ւw]^';|'8\\PRuΟ0|ĕN<Ɋp5,]KINf褉1$+4 1&p,MIVdFlFm_{3Y#ν@bM`f%9ŘfhCn^`wqqyv7JrGFŜ0|#b Ɋvhw}}ɮZRܩh&]ZR'2إO7͗.9I">,:ݜ}3\g߯& G4viCI l9L\I$9h_$|,/BB"0a6g#a)?1#[8J4'%i_fCtZ%>TK];MmUWlN0=ܝ]5yCyںpPB*$L7m#+֢QDB*$NHV8{(1S1%q,$+=LET S1%q Ɋ(beK~W[жӁu%+֢9qA$N84 "D8%4&b6at+-n=Ɋ(1z!‡,%Ւg}'l6$+Tb- 틔ۉkQ Y$b- 틔D?`sLB)(/Ro':Q Y$‰B"%QbsI$KPqbD,/%ш2z} 0o[3r@ :.-sh[vՄhf]5)-sݐLê+l%̡mWd͹$ڜ9ʓ9ChZGd6JIlv8'kQ4*=zdzT1ЀŭJbC{"YV%e%Y졠zDCI8'2ALG)TòؘvդZR-bgq5vhDG%жQ\Id QH >DiT2($^ŔTЇBQQI95֫Ҟn6CIkY zF%cBҞULIQQI95֫Ҟn6CIgl)¨ӨU iO7 ;n+|.4A(yHQkW1%Uڞn6kW1(w'QKD`5γf99qqОn6CI8>Z>D1($f3ψ~z*7q_o~zɈ%UFt4b\q\VbCP!"J 7SI8~M#Np{0($f3 soRR<3'QKt+rw/I9ݽDҞn6CI8a7!ڜ8ٯH{C*p} N0&dS0iOs75=|RRk98eS0iOs75=|RRk9DS2˩وs>d)?f&*{2˩وsbL0!KI8Јp(QmdS0iOt t8b6f99q_ԈoLWYJR0&dS0iOs75=|RR^H`M,6g#a+Ҟ1,%UKD5N[XCLI8Ft4~4F"w1D!iOhDEeI8Ny9qr H{ %U[Ea[ j6g#1($vjs6lk[!`JW<2] *^{PR~̵(ۀC CC;5ok0%UNsojjTqrjs6f" |RR^s- 琧CC;9qyZTtoעr灤=qY)C9qY!f3TׯifsX,6g#a+Ҟ*!KIx%LW1rjs6f"TןчeU0&p0˩وsbL0!KIx(9,0rjs6f"f3T҈26SdYN^PR^},U2CtJ3E_&DL=l*GؘÂڜ8ٯH{jG,%U╘VRfõ(/Bf99q0 Оn6CIc:Qh_rjs6/Bf(TCn6vsC 1&?==l1@ <3Ę`J0b#UCf@Ę`J${9`ff̽II$LW/1TIts0 wZI$vY#BPG,X(Y#C$YCt zF-Y#dх&N,M6ِ0b8ZG<04jI2u$+Zw04jI21HVn+|.4AJbX XUJb$+(ۀ^$fs$+&ӣ©q]G4y5$+  MYLI2QzGb-  MJb~dMġCDe>_b>~MˆE%ީ,%1|D|% 'M"w$f藘?#Y&{e>_b>do ޤ$f藘%Y?`s7NKb~+N`NKb~$+4Qܛ,dQvJb~dő*p(Qm%1|D|p@b/soRGKIVv̽II2/1|Iˆ&u8,g$+h"hDEeI2/1|G‰"/6g#Ε,$+֢9qq(^)Y#%惯HVݽ,Y#%X¼ 8, '7U5}5e>_b~}Lb- 琻{ 6ye>_b~}@b-։btbCe>_b~dala)Y#%_82]e>_b~ iTܛWRGK̯#YDalaL.Y#%ߒ0DMC)Y#qY$+bPejHT(Y#qY$+bPejHT(Y#%/7$+LW1G]0J%U&ڣjIA>DiԒjIFl^`6aх&1CJ@kNٶyv!`S7Y/%ՒL!ָɊ(`*$zթHV8EͶ[Q_z)~+w]IV$BDo[!?ULIr-qO[KVDU JOhDyarAZRtÑ*!ФZO2VHV0kW1%IVؘFFEגjIFlŔTK2dsBo[ŐXXb0bJ⭡u%YacMDWhAI#U0%Ւ1-od~zSo'Nc 3¨Ө d9^J%U֝TK:j [ =`*$Nl) 3¨Ө h)v/%Ւ*r7>DiԷaiԒjIp–B‡i?Xc)=z 36<[W{ؐ؋Cq$)$+T2ۉևF%+bFF^ŔDo[)Ɋ(|.4S+rוdFt4]޶&{؜CtJb-  MJb0$+TkI4|EBψ~zɈ%CdZ~zSo + 3h"BmMLI(VG^ZҺ'lvhѧ_OX XU0إ$]W6fDtxۚjINmSjRR--ndmjR[棱K Gn?|=Dѕ[CJ #:o[SR-": ?XGkp?jIaT?֨N@B)›mjW[DaiTt-ShgkQULI4<ˆ&BmMLI C76TK&z–iސZ`DGKIVQQѵ$Lm3 {z"$bA N„Q{jIGXb"|.4)td|'ծHV8EvUo !1@#Cܜe!Y!wjW8:M֋+޶#C$Yqd dĖijW>Y|D3%Y}FQJa|=2> Yt#X--nծHVD]D#+h"4Ĕtd|'F7$+=ULI5}NIV8S>Duo}K&ڙdZ~z/K4v&Y+X[Z>L{t-޶FbdEu]K&ڙdZ~z/K4v&Y졠+X[Z>L{t--ngNOdZQ@07FI dSt-޶jۺS1DpKQQkQŔĖiskDVE17jRW]y$+T"K{|V{JI5|=2>" r׵$̡m4'+֢>QŔĻ`hIV Jb0| a*tSo _m؋!w]Kbǡ=YE‡1ShgF#5֫xӊٶL41*LG)T~z#ZRR-ɇ1?aVG%+֢B*vƨbJ.Ƌݻ?}~ax(O4*JB) ?Xc)̸ TiDd^b8e+0FS{|ɊEB >QŔD? ސPq>x7%ш2z{q[`kW1A"kI8'>D5Xb,jWaZD$+TbeK7Y/%00Fݐ1`eK7Y/A"ne*Y<D"7HT]1hDyar׵$f\QKa|a)Y<ThI>Q7'!YZ`DGKa|azLV$v\2ݐ0Dvƨ%ш 3kI>QO']Pq +ULI4HV$BitLC^ŔĖiC{"Y|D3+6]KdEWh@;Kb|֒pPе$NaIVqXbP(?1CTKXXb0BjIkQ?em۬S?kQLG h)zF^ŔĖiC{"Y^ŔĖ8d'fXbJb0$+T5֫LFD-F #:>Åx;ч# iN^ŔTKX‡B8:jIkL}Xګ8div_%Y]Ka|]݆!╘Efp~(;jKчdZ>DѕD3IV8Eגxk_m>DwLVJL^Ŕ! [>6OdZ:^Ŕ`hIV8Eגxk_m>D!╘$Xb0q$z}NIVECt Z]I1dSt-FHVD1Xb0qCdZ~zSD:*N4L5֫xk_m>Dw@VĠA"+`*$z}=X"ʝXbJCTOB)щr׵$N|5viOb/:Hđ5 V!hI5\Pq =!fik g~zS[ny YD=|)-1K%+lpPеѽ>a˴c~zɈ!KI4<ˆ&BmMLI 5֫* w]1 ٶyv!`S7Y/%U[c'! ~zJ%S?OdSxkLkM,FHVD.D?$+T(ErI4|Eˆ&p$jW$+TB$Q"YaDGgPD$+TbeK7Y/%Uw?;.~wk3\~w~__P(_03\(~WaԒhD$odSMKI4<ˆ&BmMLI#U~^J%u8ȇG`eK7Y/%e!YтpRm>0* 3¨ӨZґQ7'l~CԁdE 6ceK7Y/%v1Jƌ04*TKNbZJ%- [>fy"YjلqŔD?/ސPqfbW)FHVmDDh)=zf!Y1NګitpP0ULI5"Ɋ04*`*$NabF#B*$. 3T®m%Ւ*zm3l̰F/vK%ٵ-n Ɋlƛ?)޶#C$YFFEג9ћ0*Ɋ04*5۵&m= f\]O2UQɊ(ԮSQŔĖijWXb ks7NkW1h=JID_kI4|Eˆ&.)=Ē2 ސhfz)޶#C$YFFEגxkh׶c6f8]K%Udi?XSR$C;ujb5γ%UN`*>QѶ#wkQ]18nIV8{(Z \y `*>QŔĖijWXb ks7NkW1h=JIljW>֒ G]14?lN2vE‡i?XccT1%1Z*NglJmb/:HL%1dEodZ{ɊEb5γLGS[>dZ~zلqŔitFCjg1B*$zթHV8EͶ[Q_$FpLVA$cya4'XFX |jB^ŔDo[cTO‡1*|jB^@4?Փa ?Xc)S84kQy)bJa 3T®m%ei~88&< #NU |)Shg6f]18nHV8{(X,SQŔitWd~zƨbJbVG%+֢PcT1B*$qǡ=Y>b$z))Kf$+x#DEג'~E‡eFpuW%0m/Ɋqg8nIV8{(}HRmG>DHVY¡Xb 1(%q Lˆ`>QŔ[,IVY¡` FkW1,_p Wd`*>QŔ)L #Ny)bJ6fDhAI #6c5γjI&-nծ|'b- ?#Q1׵?LIljWik g]K2y5ΛNHV8{(pjl9yS0qh$+֢12qhO$+֢X]_GA֡$94=z#DMZLu!ĖnHV&֠(h:18nHV8{(pj(xL^  gFݩW \L^ mkQ?XXbJ&< #NYwb\IġD37Ɋź5֫'UHV8ECT)8&+bP 2$N84 S1$N%h׶ Ɋ% h\0Ѐ(w֣[CW|@ƌ()`MI& D$+TbeK7Y/%0ښ/Ɋ:HL%尲 [ݮHV8ElY&ݣ(%1ڒxkjkjɊ8 kQDS8C#YSkG)d ®m%֘dE&*5֫xkhjIVENkW1%/O'u"YQ!ѮUxk_mM^wdE $v\2q!DVLM]D?2gNO[[ɫq섷&dkQDSULI&>D5$+T$Vzxk_mM^%+bP 2itWd#T+޶F=X¡ rh=JIĕ'Yai0#T+S84kQ8Fz8nHV8{( =itWd֣1˸(h:dj=a˴ h)`* %1ڒxkjkj"+⠃D܎T{ɊEb =2qhO$+֢5֫sE"7HT>QŔitFCuw*ƕitW$zè~ YFF^Ŕ)L\yF#0NŸ8C+&[6f8Č֣dj:&< #N>Qż]Z&qCI&'54y5Ο1c-(w ?XSɫq'}:Pq,MTzxk_mM^'+bP 2)LɊ(Zh=JI5ڵd~4.h@;EQJ2y5Ϋg6f8Fa¨= Xɫq'}zGB)4QAQJa|5y5BVĠA"ne*8NaHVEEQJb˴ 3u ?XcA&*$C[o _mM^؋Sk&ڣm%qpP0ULI5fi~ Y u ?XcAQJ⭡ɫq$+TY5֫diK2y5rB?ь0* D:^Ŕ[jkjg"q;.SI5aeK.Ƌݻ?}~VR5.Ǘ/v?/vvgv߯*[ݮHV8܍SU ZRRe0%Uښ{q[YT2qhO$+֢h)`*,C#YY$*УAQJ"YY$*ZƨbJ54y5k⇀fXbJ2y5 DoHV8tĒxkjkj;Y!w]Kf*Nz"$ښNVA%GϡY$*У)-qhO[K g~zS{\Y$*ZƨbJ2y5N84 S1$N%F C^Ŕ)L\yF#0NŸ8C+~Q= 8f*--nW$+֢h= |[jkj"Y`B$$+T‡a)`*GAIjkѧd^t?Ț$W%Ւ*h"Ÿ"⸬ĔTKK'lv{p0p8zSo >$+l̐%Ւ*8Q^RR-/1>aI3^T_vn?ᇻv7/^\]W_샫k|gW.^g߯mktٽ$KgĖ9dE 6㕘P[c C#+lkȦC kĖKC#+lkȦR[ж.-}l p'lĹ2bC#+lpPе$zŒo[+wВp2۱)釂SoJb|2gsd%$+4l}S[>q5YWKWͮK⭡_gdu-T?`soRR-/1{’mktҲ9$YᤉWd f*-nݧ'b-l J f~Uݸ߼!Y}ƛ߼)~߮Ȋ> QMŪJb˴~OdZnT*%O|7$+Tx7(~Zb/nqJb|wݐ- w* V{uJL(/[{–iǟPq8 ]eq_|޶F'dEpbJK>֟emYYôGFjg1(-31/ЀX؜8W[o"YOjP[$QX!w]K%U8A;E~4`MJ%%N210Ȋ(uٯ0:X?Do[! 'MCl‚ٯJщ5>pbN1&X$%IVؘôGFlĹjIY`MJ%%$zlIV8iCl‚ٯJ1KY`MJK>=a˴G'YujtM01fĠ%/3K ZR-H`MJ%%',޶F'-CNxE6P0`mk4BH`MJ⭡_- 3kI #:=PSR-/1|y–9c Ȋ(ZXCLI~_I>mFV8{(Z(?1CTK01C)䗘>;a˴,s6OdZ~4F"~(%%|fOx;Q1CTK05jI~̡mm;|"+֢oCLI5K>Ғ1CTK0ݽyp(^)䗘~|–9cv/Mx"+֢ݽyp(^)~_Z6f]גjI~q-pjut%Ւ mNZ6$+4l`6aW%Z%YVGWo lIVؘ!w]K%UDdjWMJ%%'lC>鉬X"~(PjRo $+l̐%Ւ*۵(F'>d)䗘_eڭXbtbCأ%Y}f2qtbȊ(B$%|fɊ>c3tZ[ Ɋ(atbChcxHV,ֽDג2G'ik g]K6f]גjI>,Ө7>,Z_b~ mNZ6$+4l`6aW%8^aF̽ \%%/ǖdr׵ZR1F|0>QK%%ߝemdzT1Ѐ(w #>\m6c< oU1F|0>QKj–>}i 3=sX`$~/$~ϞhDyar׵ZR'elڧ&ha#RR-/1%eڭXb%[D?5X25Y$*Ė)[26Xb%*~j<‡ejHTt--3omIlC>Xu8ĖiBb%ZXCLI1hnU[fڒ26X{=PSmHV,nU[氵%e>i;4CA q(^)r,ۡu8:,ֽ,-sh^DVEM?52VHV,ֽD6P``JdEs2֖ĖidbKdmx $ژ9hnU[氵%e>f҄ gCyp(^)WrwWL#.%D{Y%>Do[o&%QJ-TcIKτ LGq<5\R}9qy,Tyg]\\^';\w~9.v7/l>]_|~~0.CyZCAג2lCV`3qή?rpcA'?/޶E#YcZJ&f!Y qήSQŔDo["ΑMsv-%MdEnjvo޶$,e5ѓ-،Ek1z!%ָs$+rwS{,]KIlv8YqCtJB) ?XcdIԒ mI5|c:HL%ָɊ(`*$1&YacSص$1&/Omk\dZ~zSRrpno>>z3ܼ{w}7׻ ]ˋnpyWg;.../J?\]d9.>]샛{wk\]$NhgW;\ĖiFtn'b;ۺ$C[o _mŘ`>+Sh'՗D#$1&Nx;إO7? 3r5 V!hIq\VbJ%q9a<$+Zq\Vb8.'3Y$*⸬ĔD7IV~س`/oA1 :HD a*6gڭ'Yai0fжQJ4v&Y졠kIlvIV8EKb0\1hbskJm{q[ r%edE hbskP[fkQqY)6g})^ \y S1$zd! JLIĕ'Yai0#T+) 0$+8 Fe%$QXacu-Tc-Et?TK{GϡY$*УW%eОHVEkW1MX0UI1s]_|w7^bw.v]\\^'겲߬n^z/ޔTKZ]]W_)̽p¼WxSR-i1y7fw}/ޔTKZVb oO=ޔdyMI+fsd*y7śjIj?a^gW8/ޔTKZy7ջN7%ՒŘߘ .../~ZrdT o.v]\\^MI 'M"w f*esx–iyHV8Q^I! f%e>-ç--n>kQlĖM?%+=tEXd f_[l- g]#S12}y"+֢Ȧ f~U[W%+=t-~߼!Y}ƛ߼)~Kb/n $IȦ fYwb %]_|w7^bw.v]\\^'겲߬n^z/ޔTKZ]]W_vkDOS2.MAC[  !"#$%&'()*+,-./0123o456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ%*Nҷzϩ_>yCt_= ˶b9:8 J=Sψ1-:X֞e[g<#IVT,'8/͍s+W,J7έI tT$g9H.R{NU?a.mRqnOtXN0܊6ǹ)49b_;Tq*f&E=INU &Re_rB+J0Y(uI75''8UR{ZsB+ t=}yVT,'89?~O8_TjNpYNp;n_γ('-bޛԚG8^~7/*5'8,'cgQzkOB7gl07*U4'(;ړЍY<[a4JNp;nn[gQqnOtXN9ToO3*JoI87e+t $谜ZQ<=@YSԷRmĘmqCt$tu ,@g+dG+*mqI9'87u\$˶b0DPV=INp]38FWJtLV)}b9yw="$:q<@gpuצ\pϩR.\*Al,pJaל:iR7TN~ \Jȩ#(owx:yḭT%\γ(V?p #/?YEtc c+*StT9:,CNa p誾E _u {,20r0Dx'%]՗gK&usV%' ^"Nt*HNx5;BtUE 4'Y6)sSsXr«!DW3lSg[]85> ƲXNp;neR_γ(fU='Dﱸ =bl,|,:/lJCNpp9!DPE:s!:*J9a;Ӥ0aXu qS^γ(b.jg'ޛԚBtUZйۨ 9V :jTœQ!KENJ03'gQ>tm8&n{UjNgQ<#tNV)ʲٍp9!zx%=2'8:o򛲭ٍp9yV_γ(Rkǭ>\cB9 f!NU8yќ΢~} s!NU8ɤ9w8=Οl,1qv#+Rs:3G.B}|nJ~SNMs:gDﱸc:Է97StkNprwysNh%`q:[ &>ZQ_<~SӜzNgQ9)0s[{:]}0, {փ4-vU 9fp:k|E½n+'9y,MͅW,ʩ9a[QJtLV)ʦ9yܦB83MsrԜ+yOmVm8&NI t'%'9`q*U&XSsX%'}Y_u *::/RYE95' c+J|L,9pp:ϢsN#@_|zϜGv@Ia°Hm9S9, {Vft%N)jo ;"^`1M GE½nkN=}g8 +yeYcbX$$ 5'8/$fW,ʰIQa>' CDcfP^tTe̤(M0Ϝ`xSNM&9Dtʩ)ijIT1"%,9y,f6]γ(}yr󘏗?YE c+*Nt' 9=q[@gapۚZ XV*EVT,'a{{|yj[籸'tTeX$rr^ ܽiZn* {֜vwЩRapۚLtʩ)qϩǿ//~׿㯾~w?/~9?O~8S?O͟sGw-,9_~}ǟ?S*<⡶ ?O~ 4]^wTѩ_w/?SX^0,u[Ias7 !:F @gӯvaNpxfMv9'ެ7k*4 |Nx5TkYEkVr9uVQ52zoR+XX|N=g8_t$kdޤ֜zNU~ޛԚSϩ_3_<ү{Zs«@g,~p?Qs9:(7vɩ=yf6]γ(7vɯ;_#Feαү1SYsSN6VFy&:)EB/n;˶b9uRNMol9u~M˶bl1ΏoъFy&zNgѹ3G<@YsSmrB,?йzgӜJ@KNpt$lG8"N}kArB5,²XN0? |N0j>'ArXq tEY52zoR+{MXNcq{mrmqWgQsӚYt3̅_:Ϣ Lrnky謏<#4:L87eY,'(>~D7+˩YE?TQM {MXNvog7e[g:?uTQMo_XE97ͩTEط`:k|V&UsӜs8MtE97 x<&Yt4'cgQV&UsӜ0 ~6TEg}<,D|iC laIP6mZޡ 㶸t$ 5'(>~D7+˩9587M'+0f6I)jo4 ߾rnSij3Bt!: @YvKNp^tE9ү/:TEsyF3XNSsn~>Ia9!DP=:[ nBoI87 XYзz}TE 帕9W,5ں,:qLVl%RM⎛ʺ?@YhEŨ;hqF3'8⮇ų'aYcԜԜJr-z`3OݬPCtN,SgX$95'σsӜzNaO6sf:Ϣ$ ]r }3=1MU:okSs¹iNcq{i9an]tTͮNINx5wGXE lXNpr @瘦*JiNcq{i9an]tT>j('{:/Rٰ㯾[ݏWϿ W?ʩl%R:X/UeԜ0)~vwЩRRUVNIN0QY륪"SX>Ia9!DP=:('4'9`q*U)'ȹ)syJ][{#'86@YhEŨړ>Rk x+alEr¾ rcq:k|n;؊z !:@YsSN6VFy&`KJUFNx5pE't^R)Vo;؊}^ g:cT"'F3d<tTebUn;U 9Pg@gE UI99DK5dQÄ_:(g7e[g1nU|N0KgO¹iN9TY:M97e+6Mb9a;<2 3 0b9a;Ӥ0aG+*Ltʩ)o^wmŮ9:D aJNvyf3˶bJVNr9Ug[]<w6M}w???G~_CN8 C amqלjxwԗs|ȩZQZQ%`q9-|:ͮN ums@YS/*œŽ|T6Jr^IajxwT>E _u a- S*0IaJQX<?kw6 wGh"H9!<kwnUe[gj(*' .W.R{NtoӴqm߮G:(mv-pjN8j-|u[wNc+>*§g8xgQNaf[Qv|ЩRmVjxwT:/RA9!xyS*D9eY,'8xܼ\tE9_T8X99'UۺMJQmrinT)ft؅R.9!Ϧ@Ms-|}ƫ;D ,CUEY䤔vɩJ3Z `JQJtLV)}b$ ]rB+@g+d c+*:U2XNx5TT"'|QɩJ3DUݤjk;sNp*~]WChۺs[9U~} 'a[QNp[@JUIh c>"MsǭIgQI(X9!tNV)ʦ9!˴\ciNcйzT֜siÄalEjNx5TS*M4*OsSPb6USs0b9y1M X<(Ԕax ˩9DKnV!:'Sh/"MsǭJ}gQZԜprbtTeokSsX<I6 hj(*W"Haha4ENJ)jsnй>ŪM]/| #P tE95' c+*bsΦ9yv95ųRNMp38F95e^X%ZXrU&sXtRMs9u%jԭrjNr9QsΰHӷz}9y=βRUӰs-,:D $P5!::ЩRmԜp[9D@gJ]PNMs/~o&A]>'Btf@g.l.bcIV4'8xx*U̿᭝>|t uqk>]sGЩRçלPxçל<1Tʵço9ӇO\sBΡytYSa7m !:*BY%ZXX䤜j:cTʦ9:߬p 3GoSͦ0?#DtEIaJQ} '>ZQv@Ia9@Ye[g1ER$9y@Iioo_:$/*5'ctEVT[c^r-zD&U fS_s хEV :Z wft%'xtYSo&A]8 }zNS+SsSijOpx@gYc|Q*isBΡJ-,sЪSP*U&N w*EsyJ]PNMs]Nl߬pJ6JN '(;E 4'8xܪDv:UM&U(\ݹU9abN0Qw:/RʩiNp;n{ tEG]75'8x,:UM|'6x+{;E 4?= ъotVQm8&J-,ChaY%ZX85' !::ЩRmԜp7R4'ctT&ܣ.G+*^ ?=2TerP%'[]85> ъC7yo&A](E3z1MURUVMsB;䄹)~vwЩRRUVNINǎ4:LG]VT,'S+~ze^ʩ9.RREN=>U']r tE63)JoIrB+@g+d֞e[g ʩ)0?rXgQI(˶blœ.MsB!D<7.v VS)E γ([a+Otm8&J\Ǔu< }3 :Bœ(~v+YE9Ԝ :|I4'30=p8Xsf:Ϣ$ ]r=1MU:Wn;sB;3z1MU4' ^I8B/9avYp 3ъ}Xγ(..'Dﱸc:TEsm''Tʲٍp||! wGp,H9K rrSp!:0_t_JUn{ rcq:X0 }3 F !:0_t_JUn{ rcq:X0 }3 F nT tn;P"q"b6,'8Ur0Vl%RhEIa07tTeYcFOo wGp YumsB+J0Y(ъq sNh% V*EVTv ^N/d c+*Sp3^*EVT,'ʻ#Qt4B]u[<w@gyE)',:=wxй8Q4RVT:(',:[;}xy:ϢJQm89']tфoMI(˶b$KNx5#Q9CLP)|='8GYPN*EYuc+$KNh%`q:ϢG+*F,rRa>'Jrǭ>|s:Ϣ,rRaSs9u"UZ%> upI=#' ~h[%'89YEbUn*Q島UrBΡj[@Bm)M9uǛMa~fMS9 }U>y1M 3lXNp]NMGdN0Q|nV!:'Sϩ3XZQ1`0:?|XV"^siZv:95Nʩ)wb|FWF"q:?׃^MXRas c#]tE9_T85)9an1Tʲٍpo}Nx5;/tA]u[JtLV)}b9anTo9Ktz &>ZQ/a:Urv#Yuc|'6r«;/,HaM85'8xܼ\t_8lq 3[^>U!j%'8GdNq:Ul,1qv#+|LtA]PNMsB+J0Y(up3g7e[gZ GZQx &_:cSS`Ήs\]85' c]c9Z9TqޞtVqړpr sNpvz<$0xSϩswԜsZ]sB!,w:"NoIhGNpӇ'(,HnV(fri"$0xǭ>|1'[]N:k|Na>ZQyeS1 M8=wxgӜV`JQ gp9Bt!: @YvKNpӇ ft؅7k*̜:ԥkNhжJNpr謢 &Q(Q島UrBΡj[@Bmft؅9y *Jr}T*BtU*:Gj[7.9AoSN='89o:/A$ˇ?UjN9foT8зz U?;n謢yjNXrMM|N0Q|nV!:'SϩsRX䤔JќzNc"gMN^^Nl0÷͚5'ʻcRN2H9!Dܨ3Qa3œGE lXN9.:xyTM|BtZu S*ĺ uڜ @E*uB95 K9}YuB1إ?#D+r *,rRIhNx5cRNN1F]u[07ώ[;}xy\NrjN87 wإ@grjNnBtS+~Y%ZXG]8 ԜWإ^tnUX*i+إ>=gǭ>|US?O P÷gNpxLRNM.˩@N0Q|nV!:'إyFaRαKԜ4v)q3$Ԕax K9}йUaƦs9u rR)S'!]}$6F/*A߉ ~oUENJ9ͩ}?aRN*ET)[p5Sc>n Re[g=#DPy{YIPzkO)9:M*As2o<4 @gI߬prBtOaFXXiy)90,b6HItXN0Q|i0s4U~I]N=C @g'A= '+0s4U˩d}}i"*J?YS9'87I4'8xçW,J03XN;?y,:UMt*M0O]ZTWC IH.R8v),rRIhN;n+Nl&QŨL$ 9{ "gQa>'#/:(xSssNp]NMG:k|6 &_:c4 u0Dr2<#D0v)r9v),rRIhNprjz:ϢSS%' C 0>΋T"R<ĩ9 N>38F03XN&9E ,ٍpgY~e+œG<pgY,'L7&G9y6m%SX!:**N[{N6VNaΩfM+S,g8xy1M *J?YS9'87ų'aӜsΰHӷz}9avYp 3ъ}Xγ(rVs}ΰHsjNhGNpӇO@Y&ag[ќv<~XtTe(SV)'97kZ@E*u±KaRN*EsBaRsRX䤔Jќ38F03XNoִ>s8@Yβ'+0S*ٍpgYAr«;ެi,H5V :,'[]85> ъQg7e[g<tTԬ*g7e[g1B9 s«fM yJ]u[% LV)}bٍpgY,'΢~ ,䩍rv#˶b9YYt2yehRpv#s>v,@YhEŨβXNp:UM#' Wû͚֟E }wNsa9gǭ>|&US?O q[5> g7½l,G MέX Vx V!'BtUt Y-{N95f:(Ia4}γ(߬g7眰out$lxÛ5fM&a(s>v@IaBs*Vs>vx ر<D5yFsrZ UJa,:Z͚֯:߬0:ٍp9!DPկ@gVI9a;j6JN0qk/_@ISsu65\|zJ0Y(M009DKg,&YXNoִ#tVQV6(frrjz=bN0Q|nV!:'ӛ5 Uv9sNp]NMG &_:c4 u0Dr9u=0sFŏ&~S'Ԕ|'68x3_XlXNA1fs99?fͮG:k|D͚ '9yN>}gQNͪrbcIsGY㓰)[ &?;~Kk C4[;} t=E+M0E|Y6)C4} 'aӜeZtY䤔Jќ<t$lVr>v @YE%'.mR~UjN0sŜcZt4'8:k|Na5'8xço@YENBŏ&a CtVQZ,~4 ~K_m̅̅̅ 3z|D5> 0xV8qk_tVQ9)M009yN^^γ(0x:UR̆bcIs«;:/RnG<γ(QN*EYu aǭ> cݣ ߚ.œ^ YR~EG]pRX䤔Jќ<1<0xNpk/_:Xh· 0xbx|kw6 wS:[tE MtSϘgЩRSߦ&7k*לj(0eP)|='[]@gOBs*Vs¾s !:F*JќsiRuܪ՜^r*Fٰ q 󇗯9an@JUNa:|xv6)לj(0:ˠ.R{NOa~ otVQm8&J-,ChaY%ZXX䤜œ^ Oa u[sS층ӇT6^ʩ9 wSep*’BtS+~9v)޶*ܣ.,qkNOa .W,J10VbNx5wS:ˠ .R(9yfͮ@Y&~sNpr|YEi=eB0VbNx5wStDO]P̆sw*oœ謢\](frmS+y c^rB+1'Oa)fèʩiNx58?{eP̆QNMy{'6XE99?g.ezNINOaa:(߉ N.gpb6ax ˩9DKg,&YXNOa3ǭ>|X*Jŏ&a )?yNJQpqߎilSs^}b9uRNMI3-?Va>ΏmuJ0o:bcIs93X@>ZQ1/p0>'8xwy|Q cq{c(uPN*EYu {,,}bA9|Q @gO©YU~K_mB f!s¾qY㓰iNiйzZ<#I4'cGtEbxL@MsB:|k9'8pD5> [se0D uBݬVfUrsN0Q|nV!:'S)8 籸?/__wqsX\N9[N8 C/s~_?uNp7ߦzĜS YEbUn*ԶgUrꤶUhc+\\N>ªqsB;3z1MU4'8xwy|Q uxT6Q*םI9DQ,HnVrGD {,3zO)j޶G$\sǭJ؋^γ(}b9,D|Y6)S*5'@gO¦9,D|Y6)S*5'޳)o8?9yt$lX@gchNط`q:k|iNpx4 ъ..'|4qX*(}T>ZQìm&Y>ZQ1},}b9y +J 7/a~|Q9DKg,&YXN=γ(S,m}ƾ^t$ޛJ7UG8:ϢԶ &ìmrp?Qs9a;4:L7:oJm1pT:$'8 tV&Em`3OݬPCtN,SgUr9UQm3/tE7Va+\scUVaޤ֜:csv^cN=N9ITۨԶ mlڊs} 'St..'87mD:ϢޛJmƦHNnuйoIUc3OÄ &_:$aSUhcV$6!SޏJ95M[zN{95}mrޞ@JUzkO*Nr9x Wûc/'}eP)SӜouA;IN9a;4:L%'cG;4:LN9yս'gQY<wv95gQʩ)Gx83XNpzyЩâ]qf[Q1޶*m4QtZUJN.y U ?Ū KT,'/.^gNXFʺ?ez@gYcԜTBoIʺ<2[ϜT3Lox,CU9f6=NLpަI,vڟez@o=Z\E89 /:"κG+*StO23:7B6 $0˩S /:xj붲l,1JaZ F?x,:qLSYc?x\cl,1qv#kNENZ3N9=5gxйS[βo^r*SsRez@OmVm8&NIKN7{ZQ6O ?nڔgL(}wkN='~y aFMj未D3N95e^X%ZXr3:D ˶bJͩJn3:D I6 hwnU|NU3*}] _W ~?prmg<t?ON ?/G?ſ_~>//_ȜzNuIez@gG+*F7B6JN2U|@9_TX5{N{?j}ǿQY5{N~Ԫcv?sB'rBpQ7~Ԫ?:}'_9/~#_?寿 R|r*9MU?jU+O5'/~~ w6)M9gGkN__Orߦ JNhnF*JќsiRuܪ՜^r*FٰZQ6O ?nڔgL(}wkN='~y aFMj未D3N95e^X%ZXr3:D ˶bJͩJn3:D I6 hwnU|NU3*}] _W ~?prmg<t?ON ?/G?ſͫCopyright (C) 1984 BORLAND IncAKaypro II and IVctedP= ER~7#~=% o&ͦoͦܐԩͣ}!!"8~#(}:$= +*!Z!*B!!:(=2!Z: <2!!!:O::O:!*B! !45(!.+/ 0y0( d!kZ!{Z͈͈o&  :(y ͠|( *"x2y( >28!?"9!!>2 :D]SXN]D [ (!e}̈́A8Q0G: x@!\w# (   yV. V!h6# (*(.(!8}(*(̈́w#>?> w#a{ |͒}͛Ɛ'@'7||}>"C"6# ""͐ͩ*B"[R5*"^#V#^#V#N#FO/o&9O/o&9!9(> (G!9 w#E͊w}8uRB0 >R@RR!+ͨ z R!+ͨ z <!+ͨ z <!+ͨ z <!#ͨ z <!+ͨ z T]KB!z> S>))0 = |JJDMgo>jB0 7?= H\<z5+)+<z {0Gɯgo||H}||/g}/o#}o&K[xAJSJDM!b"!6J"DM'ͬͬdͬ ͬ} wͦWͧ _}8(8J`9{T]=o`9y w >uJ u` }>(; xQ }} ˸T}ٕ(0D=C ,= ( [ 0%D , 7 ͏ ?(8u x O - ; 8˸x X ,-xG}; }م 9; .>#n0[ D = - nx P ,-(-˸G,-; }ٕ? 9.>͏ 8u ?= u+-(>O 0u O 8͏ ?x P , 78ƀ8ƀ8ox٨!دoGOW_gɷɷ|لg{ً_zيWyىOxوG|ٔg{ٛ_zٚWyٙOx٘Gxٸyٹzٺ{ٻ|ټx٨ xx(ͼ ?}ٽÏ }ց; <(; 7D = |٤g{٣_z٢Wy١Ox٠GD u J }x>uu}ƀ/ƀo; -J }0W-J W,}l˸ͨ 8 ; ` x( -ͨ 8J -ͨ 8,J }l8;*!` ! >u` ` u--- J ,,,-xGg?+2n*8t z~,->uxua}.; OJ , ; !U >,k- o&0%,` }g; }؉}颋.:}8c~I$I~L*kٷx˸; }0G,͙<},-(-J ! >0 a` o8 Oþ >um.`1pF,t6|!wS<.z}[|%FXc~ur1}Oٯx(<˸ͨ 8; !~Jͨ 0O!><ͨ 8 =  7 <` O ; 7 0 W-J OT0 j oD,:j !I}袋.}8c~I$I~L!>u` ` 77 ` = O nf^VNF!DLT\I!!53!r1!\!> x #-= o˸xO(- }(x>8(C ,C `iM!>u|; |J>| )=|(DMbo˸ͦ88ͦx(0 8> Mx(>-Ͳ{(ay(Ͱͦ \z(>.Ͳ (Ͱ ~ͦ{>EͲ>+|(|Dg>-Ͳ|/ 0:p# ~# +>0w#,-  60#J˸}րogM| .(C = ~> x0w#xG%P %P ZJDM%P = _~65i+~hìx-Sx9?+{Η@}|C C gZJDM0D ,7}o˸  #yO!@9i&   # w# /w# w#!9! E9!!9~(+F͊!"9!(#>2*Ͳ"|>" :( ͆ *6#w*6#6 !\$![ (̈́( #:~CONTRMKBDLSTAUXUSR>2$*#~ Ͷ$*:> >w###6  #6++p>2S-$Ͷ:*6###ww#w$w#w: ##N#F*B> w#w#[s#r>2S$Ͷ$*6 #-Nw#Fwq#p#6#w#w#w* :( ͒: *^ F* < >26"~͟*-w#ww#͟"~ <@*Ͳ!\  <ʮ!\$> >2*|>! * \$\<(!: [1Á\!(f"> 2:!<"F( #~#6e>!["N>!~8>O6*"w (=(&("( :(N 8y(~#x+% (6*#~[*#~ *~(h#"b=  8 J= B== ͯ}8= ͵}/ͭ !*###~-_~(4Q6*>2>*##w:>*##~*#~(E[ ( ( ( !][ ( ( ((w#(6!]~-#8~>7  [>OkͼMs #rkͼpX á[ [ (( #w(q*#~[ (  *##~6͜O$*#~(08ʦ=ʦ==ʩ=ʬò+###~-_q46͡> *:4^q}Ò*|(M|( M6-#͐ͦ[R8 (G> ͒C~͒#*ͦC!h !lTRUEFALSEͦ!9^#(~#(G~͒#> ͒> Ò "F![(#RR0*4#4> RR *4 #4(>>2$*V(/˖:(#~+ x y2!͵( =( X:(R*:(###~-_-͌X> :("͟"*^˞*V˖0 SRѷR8A* N#F#s#r$ 0})jS\*###w* N#FB ͟r+s> !T]>)j)0 0= UR!#U*^#V#N#F#^#V>">!2DM"~x(L* :O(o:" C}=( ?*-N#Fp+qq#p! * F+N+++V+^Bq#p>>> SRѷR* s#r$ s#r"S"! N#FB(^x * 6#[<(H*! Kq#p##K[! *! 4 #4! x *$ *>w""{_!"*nf}(HR0nf" ^VMDnfutqp*s#r*s#r"* 5KB!>u~#fo{_"*R0RnfR0KqputsrNF( ^VNF^V*SutKqp R*R(~w~wnf ut"6# * *!""*NFy(* "*B0Cnf* [R*"*RS[s#r^#VS>O"w2x2!"" @*>2"!"""!\Ͳ*: !~6go(\R*s#r_2x( s x(T]DMR0 -a%}̈́o*!~6o&͠|ͣ}%^C User break1:% I/O% Run-time% error ͒%, PC=[R"͍% Program aborted*1!/͍!)-Ͳ.("]/!!5zʇ "W/*]/*W/! !|g}o"U/*U/! ͇EV !O/!*W/R!0*U/s~ !O/!*W/R!A*U/! Rs*W/#!O/!!s!O/!!0s!O/ !_/Ͳ!_/ Ŕ ͐bŔError- submit file not created.͐b"I/*!R"C/*!R"A/ŔYour bdos memory address is *C/!q!.͐bŔYour bios memory address is *A/!q!.͐b*A/*C/R!aE"Ŕ< Your bdos address is invalid. The bdos and bios addresses͐bŔ*should differ by $0E00. Yours differs by *A/*C/R!q!.͐bŔA Remove all memory resident programs such as RAM disks, keyboard͐bŔ*redefinition programs, etc. and try again.͐b "*C/*I/s#r";/"=/"?/Ŕ8Enter name of CP/M system image file : b*;/+._b*;/ \Ep#CPM.BIN*;/Ͳ!/*;/ =!/z5!N}2.*.&}oE#ŔCannot find file *;/ !q́ . Try again.͐b*.&E"!/UUE$!/U!!*=/s#r&$!/U!*=/s#r!".!}2.!}2.!/A}o*.&}o}oEʜ$*.!".!/!.!kbBdos!. |!aEʙ$!}2.:$*.&E %*.!".ŔYour bdos is located at *.!q́ in file *;/ !q͐b*.*?/s#r%ŔCan't locate bdos in file *;/ !q́. Automatic generation ͐bŔCof submit file is not possible. See SUPRBDOS.DOC for instructions ͐bŔon manual installation. ͐b !-GO.SUB<b!-b!-[́ Z80MR DOS.BBZ͐b!-[́DDT͐b!-[!I!e/ !q͐b!-[!R͐b!-[!F*x/!q! *x/!R!!q́ 0͐b!-[́IDOS.Hex͐b!-[!R*v/!q͐b!-[́G0͐b!-[́SAVE *t/!́ DOS.BIN͐b!-[́8;SUPRBDOS ready to be written onto disk. To put SUPRBDOS͐b!-[́$; on your disks, type SYSGEN DOS.BIN͐b!-bŔGO.SUB file created.͐b!-ORG.DAT<b!-b!-[! ́ORG! *z/!q!H͐b!-bŔORG.DAT file created.͐bŔ;This program creates a submit file for assembling SUPRBDOS.͐b!z/ R͐b!x/!t/!e/"ŔYour offset is b*x/*z/R"v/R*v/!q!.͐b%Ŕ0Type "EX GO" to continue SUPRBDOS installation. ͐bYour offset is b*x/*z/R"v/R*v/!q!.͐b%Ŕ0Type "EX GO" to continue SUPR. See SUPRBDOS.DOC for instructions ͐bŔon manual installation. ͐b !-GO.SUB<b!-b!-[́ Z80MR DOS.BBZ͐b!-[́DDT͐b!-[!I!e/ !q͐b!-[!R͐b!-[!F*x/!q! *x/!R!!q́ 0͐b!-[́IDOS.Hex͐b!-[!R*v/!q͐b!-[́G0͐b!-[́SAVE *t/!́ DOS.BIN͐b!-[́8;SUPRBDOS ready to be written onto disk. To put SUPRBDOS͐b!-[́$; on your disks, type SYSGEN DOS.BIN͐b!-bŔGO.SUB file created.͐b!-ORG.DAT<b!-b!-[! ́ORG! *z/!q!H͐b!-bŔORG.DAT file created.͐bŔ;This program creates a submit file for assembling SUPRBDOS.͐b!z/ R͐b!x/!t/!e/"ŔYour offset is b*x/*z/R"v/R*v/!q!.͐b%Ŕ0Type "EX GO" to continue SUPRprogram Install (input,output) ; {This program writes a submit file for assembling SUPRBDOS. The submit file should be executed with EX.COM, not SUBMIT.COM} type st14 = string[14] ; st5 = string[5] ; var BdosAddr, BdosFilePos, offset, Pages : integer ; SysFileName : st14 ; function Hex (i : integer) : st5 ; var count, nibble : integer ; temp : st5 ; begin for count := 0 to 3 do begin nibble := (i shr (count*4)) and $0F ; if nibble <= 9 then temp [5-count] := chr(ord('0')+nibble) else temp [5-count] := chr(ord('A')+nibble-10) ; end ; temp[0] := chr(5) ; temp[1] := '0' ; Hex := temp ; end ; procedure Error ; begin writeln (^G^M) ; writeln ('Error- submit file not created.') ; halt ; end ; procedure GetCpmAddr (var BdosAddr : integer) ; {This finds the bdos memory address.} var DosAddr : integer absolute $0006 ; BiosAddr: integer absolute $0001 ; d, b : integer ; begin d := DosAddr - 6 ; b := BiosAddr - 3 ; writeln ('Your bdos memory address is ', Hex(d),'.') ; writeln ('Your bios memory address is ', Hex(b),'.') ; if (b-d) <> $0E00 then begin writeln (' Your bdos address is invalid. The bdos and bios addresses') ; writeln ('should differ by $0E00. Yours differs by ',Hex(b-d),'.') ; writeln (' Remove all memory resident programs such as RAM disks, keyboard'); writeln ('redefinition programs, etc. and try again.') ; Error ; end else BdosAddr := d ; end ; procedure ScanSysFile (var BdosFilePos, Pages : integer; var SysFileName : st14) ; {This finds the location of the bdos in the CP/M system image file.} type pseduoblock = record len : byte ; st : array [1..128] of char; end ; var f : file ; block : string [128] ; pblock : pseduoblock absolute block ; i, bdosloc : integer ; found,ok : boolean ; begin repeat write ('Enter name of CP/M system image file : ') ; readln (SysFileName) ; if SysFileName = '' then SysFileName := 'CPM.BIN' ; assign (f, SysFileName) ; {$i-} reset (f) {$i+} ; ok := (ioresult = 0) ; if not ok then writeln ('Cannot find file ',SysFileName, '. Try again.') ; until ok ; if odd(filesize(f)) then Pages := (filesize(f) div 2)+ 1 else Pages := filesize(f) div 2 ; i := 0 ; found := false ; pblock.len := 128 ; while not eof (f) and (not found) do begin i := i + 1 ; blockread (f,pblock.st,1) ; if pos('Bdos',block) <> 0 then found := true ; end ; if found then begin bdosloc := i * 128; writeln ('Your bdos is located at ', Hex(bdosloc), ' in file ',SysFileName) ; BdosFilePos :=bdosloc ; end else begin writeln ('Can''t locate bdos in file ',SysFileName,'. Automatic generation ') ; writeln ('of submit file is not possible. See SUPRBDOS.DOC for instructions ') ; writeln ('on ma nual installation. ') ; Error ; end ; end ; procedure WriteSubFile ; {This writes the submit file} var f : text ; begin assign (F,'GO.SUB') ; rewrite (F) ; writeln (F,'Z80MR DOS.BBZ') ; writeln (F,'DDT') ; writeln (F,'I',SysFileName) ; writeln (F,'R') ; writeln (F,'F',Hex(BdosFilePos),' ',Hex(BdosFilePos-1+$0E00),' 0') ; writeln (F,'IDOS.Hex') ; writeln (F,'R',Hex(offset)) ; writeln (F,'G0') ; writeln (F,'SAVE ',Pages, ' DOS.BIN') ; writeln (F,';SUPRBDOS ready to be written onto disk. To put SUPRBDOS') ; writeln (F,'; on your disks, type SYSGEN DOS.BIN') ; close (F) ; writeln ('GO.SUB file created.') ; assign (F,'ORG.DAT') ; rewrite (F) ; writeln (F,^I,'ORG',^I,Hex(BdosAddr),'H') ; close (F) ; writeln ('ORG.DAT file created.') ; end ; begin {main} writeln ('This program creates a submit file for assembling SUPRBDOS.') ; GetCpmAddr (BdosAddr) ; writeln ; ScanSysFile(BdosFilePos, Pages,SysFileName) ; write ('Your offset is ') ; offset :=BdosFilePos-BdosAddr ; writeln (Hex(offset), '.') ; WriteSubFile ; writeln ('Type "EX GO" to continue SUPRBDOS installation. ') ; end. {main} I',SysFileName) ; writeln (F,'R') ; writeln (F,'F',Hex(BdosFilePos),' ',Hex(BdosFilePos-1+$0E00),' 0') ; writeln (F,'IDOS.Hex') ; writeln (F,'R',Hex(offset)) ; writeln (F,'G0') ; writeln (F,'SAVE ',Pages, ' DOS.BIN') ; writeln (F,';SUPRBDOS ready to be written onto disk. To put SUPRBDOS') ; writeln (F,'; on your disks, type SYSGEN DOS.BIN') ; close (F) ; writeln ('GO.SUB file created.') ; assign (F,'ORG.DAT') ; rewrite (F) ; writeln (F,^I,'ORG',^I,Hex(BdosAddr),'H') ; close (F) ; writeln ('ORG.DAT file created.') ; end ; begin {main} writeln ('This program creates a submit file for assembling SUPRBDOS.') ; GetCpmAddr (BdosAddr) ; writeln ; ScanSysFile(BdosFilePos, Pages,SysFileName) ; write ('Yoo Usage: PUBLIC [d:] -- list PUBLIC files [on d:] PUBLIC [d:]file.ext -- make file PUBLIC PUBLIC [d:]file.ext X -- make file private $ The currently PUBLIC files are: $ set to ==> $PUBLIC $PRIVATE $ ==> is already $ (There are no PUBLIC files.)$ *** Multiple copies, can't change!$ *** No File!$ *** Can't make file $s1J!]~ !ˆ J22:\( =2_ 2####~2,2:mX!ˎ(!\6?2<(b 8Xr!4\2< !F:( 5-8 !N(uͭ Gͤ!F(:_:_ ͤ{!~ +:_ !6<(!u:_ !~($˾!6<( WH~ #:G( #~/ ] #N>/GyOH~2z :!Jo$:ʤh|ͫ ͫ ëH͜>͸#͌.ͫ~( Oͫ#:AO ͫ Y 0 ͫo&:  |{0OͫPUBLIC.DOC Th file i thi librar com fro issu #9 o Docto Dobb Journal Th .SR file ar th assemble sourc files Yo ma hav t chang thes t .AS fo you assembler Th assembl i fo Z8 processor bu th sourc file ar writte i a extende 808 assembl language I you assemble doe no suppor thes mnemonics yo wil hav t defin th Z80- specifi instruction a macros. Th us o thes file i ver wel documente i DDʠ #97 an wil no attemp t explai the fully bu her i shor overview: System runnin ZCP hav th optio o puttin al .CO file o A0 an runnin the fro an use level Th .CO file tha us overlay wil no b abl t fin thei overlay unles the ar copie onto every user level. Th PUBli patc solve thi proble b creatin publi file whic ca b accesse fro al levels Th progra PUBLIC.CO wil se bi o th secon byt o th filename BDO i patche t matc an unambiguou referenc t suc fil fro an use level Thi facilit ca als b use o non-ZCP system t mak .CO file availabl t al use levels. PUBLIC.CO i copyrighte b Plu*Perfec Systems I i utilit t set/clea attribut bi o filename Fo us wit Plu*Perfect PUBlic-file BDOS patch. Usage PUBLI [d: -- List PUBLI File o d: PUBLIC [d:]filename.typ -- Makes filename.typ PUBlic PUBLIC [d:]filename.typ X -- Makes filename.typ private filename, type must be unambiguous - no wildcards. Print drive/use numbe o al file o specifie name wit attribute bits displayed as lower-case characters. If just one such file is found: option X -- clears attribute bit 2 -- making file private no option -- sets attribute bit 2 -- making file P!UBlic ou referenc t suc fil fro an use level Thi facilit ca als b use o non-ZCP system t mak .CO file availabl t al use levels. PUBLIC.CO i copyrighte b Plu*Perfec Systems I i utilit t set/clea attribut bi o filename Fo us wit Plu*Perfect PUBlic-file BDOS patch. Usage PUBLI [d: -- List PUBLI File o d: PUBLIC [d:]filename.typ -- Makes filename.typ PUBlic PUBLIC [d:]filename.typ X -- Makes filename.typ private filename, type must be unambiguous - no wildcards. Print drive/use numbe o al file o specifie name wit attribute bits displayed as lower-case characters. If just one such file is found: option X -- clears attribute bit 2 -- making file private no option -- sets attribute bit 2 -- making file P; PUBLIC - SET AND CLEAR PUBLIC FILE ATTRIBUTE 3/6/85 FALSE EQU 0 TRUE EQU NOT FALSE LISTPUBBIT EQU 0 MAKPUBBIT EQU 1 FENCE EQU '|' NULL EQU 0 BELL EQU 7 CR EQU 0DH LF EQU 0AH ESC EQU 1BH SPACE EQU ' ' DEL EQU 7FH drivefn equ 14 openfn equ 15 closefn equ 16 srchfstfn equ 17 srchnxtfn equ 18 deletefn equ 19 readfn equ 20 writefn equ 21 makefn equ 22 renamefn equ 23 logvecfn equ 24 curdskfn equ 25 dmafn equ 26 setattrfn equ 30 getaddrfn equ 31 userfn equ 32 readrfn equ 33 writerfn equ 34 sizefn equ 35 reccnt equ 15 currec equ 32 r0 equ 33 tbuff equ 80h fcb equ 5ch fcb2 equ fcb+16 boot equ 0000h bdos equ 0005h bdoslen equ 0e00h org 100h top: jmp start usage: db CR,LF,'Usage: PUBLIC [d:] -- list PUBLIC files [on d:]' db CR,LF,' PUBLIC [d:]file.ext -- make file PUBLIC' db CR,LF,' PUBLIC [d:]file.ext X -- make file private' db CR,LF,'$' header: db CR,LF,'The currently PUBLIC files are:',CR,LF,'$' tomsg: db ' set to ==> $' pubnam: db 'PUBLIC $' privnam: db 'PRIVATE $' ismsg: db ' ==> is already $' nopubs: db CR,LF,'(There are no PUBLIC files.)$' multimsg: db CR,LF,LF,BELL,"*** Multiple copies, can't change!$" nonemsg: db CR,LF,BELL,'*** No File!$' cantmsg: db CR,LF,BELL,"*** Can't make file $" start: sspd ustack lxi sp,stack lxi h,fcb+1 mov a,m cpi SPACE lxi h,flags res LISTPUBBIT,m jrnz setup bset LISTPUBBIT,m lxi d,header call printde setup: mvi c,dmafn ; set directory buffer lxi d,buf call bdos mvi c,curdskfn ; save current drive call bdos sta drive sta udrive lda fcb ; check for specified drive ora a jrz savusr dcr a sta drive ; login specified drive mov e,a mvi c,drivefn call bdos savusr: mvi c,userfn ; save user number lxi d,0ffh call bdos sta uuser mvi c,getaddrfn ; get extent mask for this drive call bdos inx h inx h inx h inx h mov a,m sta EXTMASK xra a  sta count lda fcb2+1 cpi 'X' lxi h,flags res MAKPUBBIT,m jrz find bset MAKPUBBIT,m ; ; find all filename entries in all user numbers ; find: lxi h,fcb mvi m,'?' ; match ALL dir entries xchg mvi c,srchfstfn call bdos sta indx ; save position in buffer inr a jrz done ; no entries at all findall: call chknxt ; is entry PUBLIC or specified filename? jrnz findnxt call savefcb ; yes -- save it call setcol call printentry ; list it lxi h,count ; and count it inr m findnxt: mvi c,srchnxtfn ; lxi d,fcb call bdos sta indx inr a jrnz findall nomore: lxi h,flags bit LISTPUBBIT,m lda count jrz nom0 ora a jrnz done lxi d,nopubs call printde jr done nom0: sui 1 jrc none jrnz nochanges lxi h,flags ; exactly 1 file found bit MAKPUBBIT,m jrz nom1 call setpub jr done nom1: call setpriv jr done ; ; can't be PUBLIC if > 1 match on drive ; nochanges: lxi d,multimsg call printde jr done none: lxi d,nonemsg call printde jr done nopub: lxi d,pubnam call cant ; ; all done -- restore drive/user and return ; done: call crlf lxi h,flags bit LISTPUBBIT,m jrz done0 lxi d,usage call printde done0: lda udrive ; relogin user's drive mov e,a mvi c,drivefn call bdos done1: lda uuser mov e,a mvi c,userfn call bdos call crlf xit: lspd ustack ret ; ; set the PUBLIC attribute bit ; setpub: lxi h,pubfcb+2 ; test attr bit 2 bit 7,m jrnz ispub ; quit if already PUBLIC bset 7,m ; set attr bit 2 lda pubfcb ; save user number for output mov e,a ; set user number for this file mvi c,userfn ; call bdos ; lxi h,pubfcb mvi m,0 ; put default drive into fcb xchg mvi c,setattrfn ; call bdos inr a jrz nopub lxi d,tomsg call printde lxi d,pubnam call printde setpend: lxi h,pubfcb jmp prnent1 ispub: lxi d,pubnam jmp istype ; ; reset the public attribute bit ; setpriv: lda pubfcb ; save "file user number mov e,a ; set user number of fcb mvi c,userfn call bdos lxi h,pubfcb+2 ; reset PUBLIC attr bit bit 7,m ; jrz ispriv ; quit if it's alread private res 7,m lxi h,pubfcb mvi m,0 ; default drive xchg mvi c,setattrfn ; call bdos inr a jrz nopriv lxi d,tomsg call printde lxi d,privnam call printde jr setpend nopriv: lxi d,privnam jmp cant ispriv: lxi d,privnam istype: push d lxi d,ismsg call printde pop d printde: mvi c,9 jmp bdos cant: push d lxi d,cantmsg call printde pop d jr printde ; ; check next directory entry ; if listing PUBLIC files, ret Z if PUBLIC and 0th extent. ; if matching a filename, ret Z if same name, type and extent ; else ret NZ ; chknxt: call findentry mov a,m cpi 0e5h ; don't match erased entries jrnz chkn0 ora a ; set NZ ret chkn0: inx h lda flags bit LISTPUBBIT,a jrz chkn1 ; ; list all PUBLIC files ; inx h ; point at 2nd char of filename mov a,m cma ani 80h ; check complement of attr bit rnz ; not PUBLIC -- ret NZ lxi d,12-2 ; have a PUBLIC file dad d ; point at its extent byte xra a ; and check for extent 0 jr chkn3 ; ; check for match with specified filename / extent 0 ; ; note: doesn't allow wiled cards. ; chkn1: lxi d,fcb+1 mvi b,11 ; name & type chkn2: ldax d sub m ani 7fh ; don't test attr bits inx h inx d rnz : NZ if no match djnz chkn2 ldax d ; now check the extent chkn3: mov c,m ; ; check for same extent in a,c ; samext: push psw extmask equ $+1 mvi a,0 cma mov b,a ; save mask mov a,c ; mask c ana b mov c,a ; save in c pop psw ; ana b sub c ani 1fh ; check only legal bits 0..4 ret savefcb: call findentry mov a,m ; save the user number sta fileuserno lxi d,pubfcb lxi b,32 ldir ret ; ; find entry in buffer ; findentry: lda indx ; point to fcb found add a ; * 32 add a add a add a add a lxi h,buf  add l mov l,a rnc inr h ret setcol: lda count ani 3 jz crlf call twosp mvi c,fence call charout twosp: mvi c,SPACE call charout mvi c,SPACE jmp charout ; ; print drive/user/filename ; printentry: call findentry prnent1: push h call printdrv fileuserno equ $+1 mvi a,0 call printuser pop h print$fn: inx h ; print finename.ext mvi b,8 call prfn mvi c,'.' call charout mvi b,3 prfn: mov a,m ; print filename char, lowercase if attr bit set ani 7fh ; kill attr bit when printing cmp m ; jrz prfn1 ori 20h ; set lower case prfn1: mov c,a call charout inx h djnz prfn ret printdrv: lda drive ; print drive adi 'A' mov c,a jr charout crlf: mvi c,CR call charout mvi c,LF charout: push h push b push d mov e,c mvi c,2 call bdos pop d pop b pop h ret printuser: cpi 10 ; print A as user number jrnc printu1 push psw ; 1 space if single digit mvi c,SPACE call charout pop psw printu1: mov l,a mvi h,0 call printdec mvi c,':' jr charout printdec: decout: push psw push b push d push h lxi b,-10 lxi d,-1 decou2: dad b inx d jc decou2 lxi b,10 dad b xchg mov a,h ora l cnz decout ; recursive mov a,e adi '0' mov c,a call charout pop h pop d pop b pop psw ret flags db 0 indx db 0 drive db 0 count db 0 udrive db 0 uuser db 0 ustack dw 0 pubfcb equ $ stack equ pubfcb+32+48 buf equ stack end  set ani 7fh ; kill attr bit when printing cmp m ; jrz prfn1 ori 20h ; set lower case prfn1: mov c,a call charout inx h djnz prfn ret printdrv: lda drive ; print drive adi 'A' mov c,a jr charout crlf: mvi c,CR call charout mvi c,LF charout: push h push b push d mov e,c mvi c,2 call bdos pop d pop b pop h ret printuser: cpi 10 ; print A as user number jrnc printu1 push psw ; 1 space if single digit mvi c,SPACE call charout p SUPRDOS2 User's Guide SUPRBDOS Release 2, 10/11/86 The following files should be in your distribution package: READ.ME- overview of SUPERBDOS features SUPRBDOS.DOC -user's guide and installation instructions DOS.AZM- DOS1.MAC- source to SUPERBDOS DOS2.MAC INSTALL.COM -program to assist you in installing SUPRBDOS INSTALL.PAS -Turbo Pascal source to INSTALL. Z80MR.COM- public domain Z80 assembler used in installation of SUPRBDOS Z80MR.DOC EX.COM - enhanced submit utility used in installation PUBLIC.COM-utility for handling public files PUBLIC.DOC PUBLIC.SRC UNCR20.COM- file uncruncher SEMI-AUTOMATIC INSTALLATION 1. Extract all files from SUPRBDOS.LBR onto a blank disk in drive B. Extract all files from Z80MR.LBR onto the same disk. Delete Z80MR.LBR. Uncrunch all type *.?Z? files by typing UNCR#20 *.?Z? 2. Copy SYSGEN.COM and DDT.COM from your CP/M disk to your SUPRBDOS disk. 3. Create a disk file containing your CP/M or ZCPR3 system image. Do this by running sysgen as follows: A>sysgen SYSGEN VER 2.2 SOURCE DRIVE NAME (OR RETURN TO SKIP)a SOURCE ON A, THEN TYPE RETURN FUNCTION COMPLETE DESTINATION DRIVE NAME (OR RETURN TO REBOOT) A>SAVE x CPM.BIN x is size of your CP/M system in 256-byte "pages". If you are not sure what this number is, try 50. 4. Run INSTALL. If all goes well, the program will end by telling you to "TYPE EX GO to continue SUPRBDOS installation." If INSTALL aborts saying 'Can't locate bdos', read the manual installation section. If INSTALL asks you to try again, do as it says. 5. Type EX GO. 6. You now have a copy of SUPRBDOS in a file called DOS.BIN. Install it on a few test disks by typing B>sysgen dos.bin SYSGEN 2.2 DESTINATION DRIVE (RETURN TO REBOOT)a DESTINATION ON A, THEN TYPE RETURN FUNCTION COMPLETE 7. Warm boot your system with SUPRBDOS in A. If it boots correctly, continue testing by copying files, running programs, until you are satisfied that it works. Try this: Warm boot with SUPRBDOS, PIP, and a test file in A. Change the disk in B without hitting Control-C. PIP the test file to B. No "Bdos Err on B: R/O"! If your system hangs or goes completely nuts upon warm booting with SUPRBDOS, repeat the installation again. If the problem recurs, please write and tell me about it. Include as much information as possible. Otherwise, see your local CP/M expert (alas, a vanishing breed). MANUAL INSTALLATION Automatic installation should work on most systems with standard CP/M 2.2. If you have a non-standard CP/M, proceed with caution; SUPRBDOS might not work with your CP/M. The steps involved are : 1) Find the location of the bdos in your computer's memory. This number ends in a 6. Subtract 6 from this number and call the result BdosMemAddr. 2) Find the location of the bdos in your CP/M system image file. Do DDT CPM.BIN and type 'D' repeatedly to scroll through the contents of CPM.BIN. Somewhere, there should be the word 'Bdos', followed by the text of the various bdos error messages. If you can't find these, your CPM.BIN file is screwed up, or you have a non-standard CPM. When you find the word 'Bdos', not the most recent address ending with a 00 or 80. Call this number the BdosFileAddr. 3) Compute the Offset (hex arithmetic) as follows: Offset := $10000 + BdosFileAddr - BdosMemAddr. 4) Overlay the old bdos with SUPRBDOS. B>ddt cpm.bin DDT VERS 2.2 NEXT PC a b (DDT prints these numbers) icpm.bin (you type this) r (you type this) f 0 (clear out old bdos) idos.hex (you type this) r (type "R" followed immediately by the offset you calculated ^C (exit DDT) B> Now, do SAVE x DOS.BIN, where x is the same number you used in saving CPM.BIN. 5) SYSGEN DOS.BIN to write SUPRBDOS onto your disks. USAGE -----Changing Disks Without Control-C SUPRBDOS should work just like your old BDOS, quietly and out of your way. It has some additional features which make it much nicer than your old BDOS. For example, let's say you're writing the "Great American Novel" with WordStar. It's late, you've written all day, and you want to move on to other things. You hit ^K^D to save your work, and WordStar burps: **Disk Full. Press ** With your old BDOS, if you switched disks, you'd get Bdos Err on A: R/O and you'd say bye-bye to Chapter 5 unless you had a text recovery program. With SUPRBDOS, move to the beginning of file using ^R, not ^Q^R, and mark the beginning of a block. Move to the end of file using ^C, not ^Q^C, and mark the end of block. Hit ^K^W to write the block to disk. Enter a filename on a drive not containing your novel (probably your WordStar disk). Remove the disk from that drive, and insert a blank disk. Hit return, and your work will be saved to a new disk. Finally, replace the old disk. Try this with your old BDOS, and you'd be quite sorry. SUPRBDOS's "Control-C-less" operation is not limited to Wordstar. You may change disks at any time, with any program, with one exception. IF A FILE IS OPEN FOR WRITING, DO NOT CHANGE DISKS UNTIL THE FILE IS PROPERLY CLOSED. IF YOU DO, YOU WILL TRASH YOUR DISKS! This is why, in the example above, we changed the disk containing WordStar, not the disk containing the novel. No files were open for writing on the Wordstar disk, so it was ok to change it. The novel file was open, so its disk could not be changed. -----Public Files If you use user areas, you'll love this. Public files are files which are accessi$ble from all user areas. Normally, if Wordstar was in A7: and your text files in A8:, you could not edit your files with Wordstar. If Wordstar and its overlays were made public files, you could be logged into A8:, B6:, or any other user area and still run Wordstar. Public files are invisible to the use of wildcards, so you may not copy them with PIP *.*. They must be specified by name. Public files are also read-only, so they may not be erased. To make a file PUBLIC, run the PUBLIC program which is included with SUPRBDOS. Ex: A>public ws.com To restore a file to normal (make it private), A>public ws.com x <---the X makes the file private. ----Error Messages SUPRBDOS may produce the following error messages: Disk Error on A : error message Function xx ; File = FILE.TYP where the error message may be Read error Write error Non existent drive Read-Only (this happens only if disk was set to r/o with bdos function 28, not when disks are changed.) File is Read-only The BDOS function number and the file involved (if applicable) are given, so a full message may be: Disk Error on A: Write error Function 22 ; File = CHAPTER.5 In this case, there was a write-error trying to create file CHAPTER.5. -----Advanced Features SUPRBDOS has optional time-stamping capabilities built in. To use these, you must have a real time clock and a bios routine which access the clock. You must edit DOS.Z80 and set DOTIME to TRUE and reinstall SUPRBDOS. You must also "initialize the directory for time stamps", according to the author of P2DOS, from which SUPERBDOS is derived. How this is done is not explained. Maybe an adventurous soul out there will find a way. SUPRBDOS can be installed so that functions 13 and 37 allow the free interchange of single and double sided disks. On many machines, such as the Kaypro IV, changes between single and double sided disks are recognized only at warm boots. Obviously, this is a limitation on the switching of disks without Control-C. If your machine is one of these and if you have the source to your bios, you can remove this limitation. Add code to your bios cold boot routine to initialize a jump to the routine which decides if the computer is looking at a single or double sided disk. Suppose this routine is DISKINIT. Change your cold boot routine to look like CHKTYP EQU 04BH CBOOT: Blah Blah Blah LD HL,CHKTYP LD A,0C3H ;initialize a jump LD (CHKTYP),A LD HL,DISKINIT ;to DISKINIT LD (CHKTYP+1),HL Blah Blah JP CCP ;pass control to CCP This code puts a JP DISKINT instruction at 04BH. Edit DOS.Z80, setting the RESDSK conditional to TRUE. Set SETDSK equal to CHKTYP. Re-assemble SUPRBDOS. Now, functions 13 and 37 will identify new disks by calling CHKTYP, which in term "calls" DISKINIT. This feature is extremely useful to have when using disk cataloging programs, the file utility NSWP207, the library manager NULU 1.5, and many others with which expect disk changes and call functions 13 and 37 to change disks. *************************************** Legal Stuff To my knowledge, all components of the SUPRBDOS.LBR are public domain for non-commerical use only. SUPRBDOS is a modification of P2DOS, by H.A.J. Ten Brugge from the Netherlands, and therefore is subject to the same restrictions as P2DOS. Z80MR and the PUBLIC files are public domain. INSTALL is a program written by moi, and is also public domain. I assume no liability for the use of or the consequences of the use of SUPRBDOS. *************************************** Questions and comments can be directed to Benjamin Ho 626 Emerson St. Evanston, IL 60201 SUPRBDOS was developed on a Kaypro IV. rected to dentify new disks by calling CHKTYP, which in term "calls" DISKINIT. This feature is extremely useful to have when using disSUPRBDOS, release 2. 10/11/86 Release 2 Changes Renamed from SUPRBDOS to SUPRDOS2. o New installation program for easy, almost automatic installation. o SUPRBDOS identification removed from bdos serial number area. The id number caused problems with several CP/M implementations. o Z80MR assembler substituted for ZASM assembler. There is debate as to whether ZASM is public domain. As a result, some sysops have refused to distribute release 1. To avoid legal problems and widen distribution of SUPRBDOS, ZASM has been removed from SUPRBDOS.LBR. >>>>If you already have release 1 working, there is no need to get release 2. If you don't have release 1, or were unable to get release 1 working, try release 2. Installation is much easier! SUPRBDOS is a complete public domain replacement for the CP/M 2.2 BDOS. Written in Z80 assembler, it enhances the performance of a standard CP/M or ZCPR system. Its features include: -automatic disk relogging. No more Control-C to log in ch%anged disks. -delete key functions like backspace. No more annoying echoing of deleted characters. -improved, understandable error messages. -support of PUBLIC files. An installation program is included for easy installation. Read SUPRBDOS.DOC for more details. To get started, extract all library files. Don't use NULU 1.5; it will not extract large files properly. Nulu 1.51 or LU is ok. Uncrunch the files by typing UNCR20 *.?Z?. ================== This package was originally released on Ken Stritzel's Sun Valley RCPM (312-983-5147). .?Z?. ================== This package was originet release 2. If you don't have release 1, or were unable to get release 1 working, try release 2. Installation is much easier! SUPRBDOS is a complete public domain replacement for the CP/M 2.2 BDOS. Written in Z80 assembler, it enhances the performance of a standard CP/M or ZCPR system. Its features include: -automatic disk relogging. No more Control-C to log in ch This is the release date of the disk. xv+RR,6r6p __F FP!PP F#tFP6z&tv'FvrP2~tFtvvFP+P PvvFPv& 9vv FP#t"+P PvvFPv& +] UPv vv2FPRvf#uMF"tF<tB* t ttF FF ~tFPPv v+YY]Uvoyv&&TRPv2FPRvf Fog Library Disk FOG-CPM.202 Copyright (1989) by Fog International Computer Users Group to the extent not copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distribution for profit or personal gain is strictly forbidden. For information, contact FOG, P. O. Box 3474, Daly City, CA. 94015-0474. as part of the description of a file indicates that the program is distributed on a "try first, pay if you like it" basis. If you find the program(s) meet your need, please refer to the author's documentation for information on becoming a registered user. Only by registering and paying for the programs you like and use will the authors of such programs continue development. Often, more complete documentation, additional modules, and new releases are available only to registered users. Expert utilities including an editor which allows changes to memory or disk and a replacement for CP/M 2.2 BDOS.  Filename Description -07-15 .89 This is the release date of the disk. -CPM202 .DOC This is the description of the disk contents. PATCH18A.COM C242 26K ver. 1.8A [Patch 1 of 7] A file, memory and disk editor which allows you to modify a file directly in memory or on disk. PATCH18A.TXT 99CB 3K ver. 1.8A [Patch 2 of 7] PATCH .BUG 7A0C 1K ver. 1.8A [Patch 3 of 7] PATCH .DOC 4F4D 15K ver. 1.8A [Patch 4 of 7] PATCHINS.COM 4C73 23K ver. 1.8A [Patch 5 of 7] PATCHINS.DTA 412E 5K ver. 1.8A [Patch 6 of 7] PATCHINS.MSG B11B 3K ver. 1.8A [Patch 7 of 7] DOS .AZM 6981 2K ver. 2 [Super BDOS 1 of 10] SUPRBDOS or SUPRDOS2 is a replacement for CP/M 2.2 BDOS. It features automatic relogging of disks after a disk swap (no more ^C), it deletes key functions such as backspace (to eliminate echoing of deleted characters) and it supports PUBLIC files (so you can access files and programs from other user areas). DOS1 .MQC F98E 23K ver. 2 [Super BDOS 2 of 10] DOS2 .MQC 114E 27K ver. 2 [Super BDOS 3 of 10] INSTALL .COM E22F 11K ver. 2 [Super BDOS 4 of 10] INSTALL .PAS A552 5K ver. 2 [Super BDOS 5 of 10] PUBLIC .COM 4E28 1K ver. 2 [Super BDOS 6 of 10] PUBLIC .DOC 8C63 3K ver. 2 [Super BDOS 7 of 10] PUBLIC .SRC 2819 8K ver. 2 [Super BDOS 8 of 10] SUPRBDOS.DOC BED4 10K ver. 2 [Super BDOS 9 of 10] SUPRDOS2.TXT 6724 2K ver. 2 [Super BDOS 10 of 10]  F98E 23K ver. 2 [Super BDOS 2 of 10] DOS2 .MQC 114E 27K ver. 2 [Super BDOS 3 of 10] INSTALL .COM E22F 11K ver. 2 [Super BDOS 4 of 10] INSTALL .PAS A552 5K ver. 2 [Super BDOS 5 of 10] PUBLIC .COM 4E28 1K ver. 2 [Super BDOS 6 of 10] PUBLIC .DOC 8C63 3K ver. 2 [Super BDOS 7 of 10] PUBLIC .SRC 2819 8K ver. 2 [Super BDOS 8 of 10] SUPRBDOS.DOC BED4 10K ver. 2 [Super BDOS 9 of&'