IMD 1.16: 29/05/2007 12:32:08 FOGCPM.036 --FOGCPM036ARROWK1 COM^ ARROWK4 COM`ARROWKIICOM^ !"#$%&ARROWS PASR'()*+,-./01AUTOBOOTCOMM23456789:;AUTOBOOTPASA<=>?@ABCDBARGRAPHCOMEFGHIJKLMNOPQRSTBARGRAPHCOMQUVWXYZ[\]^_-06-00 86 `BARGRAPHDOC;abcdefghDBASTIMECMD ijDBASTIMEASMBklmnopqrsDBASTIMEHEXtKPBROWSECOM[uvwxyz{|}~KPBROWSEDOCKPBROWSEPASAKPVIDEO PASTIME COMTIME ASMMKPPRTLSTCOMkKPPRTLSTDOC-CPM036 DOCThis is the disk name. e call putchr lda memcon+8 call putchr lda memcon+9 call putchr ; ; ; ********************************************* ; EXIT: ; ********** EXIT ROUTINE ******************* lxi d,endmsg mvi c,printf call bdos lhld oldsp sphl ret ; ********************************************* ; ; ; ****************************** ; SEND CHAR TO CONSOLE ; *********ͫCopyright (C) 1984 BORLAND IncAKaypro II and IV P= ERC1B1~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!͍!/7Ͳo"0123456789ABCDEF}2W00h!OͲ!O!!*W&!n&s!O!!*W&!n&s!O R!q! b}2N*N& RBҴ ŔCTRL-*N&!@! b8!  R ŔSPACE b8!!]RB *N&R! b8! R!ŔDEL b8!~R/!RB8!*N&!EͲ!!5zr!"\!E*\n&q *\#P!R͐b";"="?*?n&!NEʫ!*= 9!õ!*?n&q Ŕ New definition: b*=Ͳ*;!͛EC"!*?s!*;5z@""\!8!^b*^&q *=*\*^&s*\#"e"!8!^b*^&q *^&*?sR͐bR͐bŔ0Current settings of the vector pad (arrow keys).͐bR͐b!Cn&}2{*{&!NE;#!_Ͳ!!5z-#"\!`*\n&}2^!_ *^&e.!_Ͳ*\#"!_ !sͲŔ Up arrow = b*{&!NEq#!s 9!÷#*{&! ͯEʦ#ŔCTRL-*{&!@͐b÷#R*{&͐b!Dn&}2z*z&!NE4$!_Ͳ!!5z&$"\!d*\n&}2^!_ *^&e.!_Ͳ*\##!_ !nͲŔ Down arrow = b*z&!NEv$!n R!q͐bü$*z&! ͯEʫ$ŔCTRL-*z&!@͐bü$R*z&͐b!En&}2y*y&!NE9%!_Ͳ!!5z+%"\!h*\n&}2^!_ *^&e.!_Ͳ*\#$!_ !iͲŔ Left arrow = b*y&!NE{%!i R!q͐b%*y&! ͯEʰ%ŔCTRL-*y&!@͐b%R*y&͐b!Fn&}2x*x&!NE>&!_Ͳ!!5z0&"\!l*\n&}2^!_ *^&e.!_Ͳ*\#%!_ !dͲŔRight arrow = b*x&!NEʀ&!d R!q͐b&*x&! ͯEʵ&ŔCTRL-*x&!@͐b&R*x&͐bR͐bŔChange? (y/n) b!8!^b*^&(Q!Ya!NaE&*^&R͐b*^&(!NNEB'Ç/Ŕ0Please select one of the following (? for help)-͐bR͐bŔ 1. CP/M set͐bŔ 2. WordStar set͐bŔ 3. Perfect Writer set͐bŔ 4. Design your own͐bŔ 5. Abort - no changes͐bR͐bŔYour selection: b!8!^b*^&(Q!1a!2a!3a!4a!5a!Aa!?aEL(*^&R͐b*^&(1R)!C! s!D! s!E!s!F! sŔCP/M set installed:͐bÇ/2R_)!C!s!D!s!E!s!F!sŔWordStar set installed:͐bÇ/3R¾)!C!s!D!s!E!s!F!sŔPerfect Writer set installed:͐bÇ/4RH-R͐bŔ9Entering a '0' will leave that arrow definition the same.͐bR͐bŔ%Length of Up arrow definition? (1-4) b!Z+_b*Z!NEq**ŔCurrent up arrow = b!{!s*Z|!!C*{&s!!5z*"\!`*\!s*\n&s*\#ô*R͐bŔ'Length of Down arrow definition? (1-4) b!Z+_b*Z!NE;+ë+ŔCurrent down arrow = b!z!n*Z|!!D*z&s!!5zʫ+"\!d*\!n*\n&s*\#À+R͐bŔ'Length of Left arrow definition? (1-4) b!Z+_b*Z!NE,w,ŔCurrent left arrow = b!y!i*Z|!!E*y&s!!5zw,"\!h*\!i*\n&s*\#L,R͐bŔ(Length of Right arrow definition? (1-4) b!Z+_b*Z!NE,E-ŔCurrent right arrow = b!x!d*Z|!!F*x&s!!5zE-"\!l*\!d*\n&s*\#-Ç/5R\-ARƒ-ŔAborted - no changes͐bÇ/?R‡/R͐bŔArrow CP/M WS PW͐bŔ set set set͐bR͐bŔUp ^K ^E ^P͐bR͐bŔDown ^J ^X ^N͐bR͐bŔLeft ^H ^S ^B͐bR͐bŔRight ^L ^D ^F͐bR͐bŔIEntering the number of the corresponding set, will install the definition͐bŔG set above. Entering '4' will allow you to enter your own definitions,͐bŔ up to four characters per key.͐bB'R͐bþ" Entering '4' will allow you to enter your own definitions,͐bŔ up to four characters per key.͐ ͫCopyright (C) 1985 BORLAND IncBKaypro with hiliteedP=  E RC1B1~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!0#>Ç#!0123456789ABCDEF}2SM00h!G!G!!!*S&!n&s!G!!!*S&!En&s!G:͛!ͪ! " }2F*F& RB!͛ͺCTRL-*F&!@"! " P"  R!͛ͺSPACE  P"!]RB"*F&͛"! " P" R-"͛ͺDEL  P"~RG"RBP"*F& !9!!fzʊ""X!9*Xn&͉!*X#h"͛ "+"-"/*/n&!E"*-:Q""*/n&͉!͛ͺ New definition:  M*-*+!E[#!*/s!*+fzX#"X!ͩ!ZD *Z&͉!*-*X*Z&s*X##}#!ͩ!ZD *Z&͉!*Z&*/s͛ ͛ ͛ͺ0Current settings of the vector pad (arrow keys). ͛ !5n&}2w*w&!ES$M![!!fzE$"X!`*Xn&}2Z![:*Z&e.=![*X# $![:!o͛ͺ Up arrow =  *w&!Eʉ$!o:Q"$*w&! Eʾ$͛ͺCTRL-*w&!@" $͛*w&" !6n&}2v*v&!EL%M![!!fz>%"X!d*Xn&}2Z![:*Z&e.=![*X#%![:!j͛ͺ Down arrow =  *v&!Eʎ%!j:͛!ͪ %*v&! E%͛ͺCTRL-*v&!@" %͛*v&" !7n&}2u*u&!EQ&M![!!fzC&"X!h*Xn&}2Z![:*Z&e.=![*X#&![:!e͛ͺ Left arrow =  *u&!Eʓ&!e:͛!ͪ &*u&! E&͛ͺCTRL-*u&!@" &͛*u&" !8n&}2t*t&!EV'M![!!fzH'"X!l*Xn&}2Z![:*Z&e.=![*X# '![:!`͛ͺRight arrow =  *t&!Eʘ'!`:͛!ͪ '*t&! E'͛ͺCTRL-*t&!@" '͛*t&" ͛ ͛ͺChange? (y/n)  !ͩ!ZD *Z&́!Y͑!N͑OE'*Z&͛" *Z&!NEZ( Ó0͛ͺ0Please select one of the following (? for help)- ͛ ͛ͺ 1. CP/M set ͛ͺ 2. WordStar set ͛ͺ 3. Perfect Writer set ͛ 4. Design your own ͛ͺ 5. Abort - no changes ͛ ͛ͺYour selection:  !ͩ!ZD *Z&́!1͑!2͑!3͑!4͑!5͑!A͑!?͑OEd)*Z&͛" *Z&1R*!5! s!6! s!7!s!8! s͛ͺCP/M set installed: Ó02Rw*!5!s!6!s!7!s!8!s͛ͺWordStar set installed: Ó03R*!5!s!6!s!7!s!8!s͛ͺPerfect Writer set installed: Ó04RT.͛ ͛ͺ9Entering a '0' will leave that arrow definition the same. ͛ ͛ͺ%Length of Up arrow definition? (1-4)  !VN *V!Eʆ++͛ͺCurrent up arrow =  !w!o*V͔"!5*w&s!!fz+"X!`*X!o*Xn&s*X#+͛ ͛ͺ'Length of Down arrow definition? (1-4)  !VN *V!EM,ý,͛ͺCurrent down arrow =  !v!j*V͔"!6*v&s!!fzʽ,"X!d*X!j*Xn&s*X#Ò,͛ ͛ͺ'Length of Left arrow definition? (1-4)  !VN *V!E-Æ-͛ͺCurrent left arrow =  !u!e*V͔"!7*u&s!!fzʆ-"X!h*X!e*Xn&s*X#[-͛ ͛ͺ(Length of Right arrow definition? (1-4)  !VN *V!E-Q.͛ͺCurrent right arrow =  !t!`*V͔"!8*t&s!!fzQ."X!l*X!`*Xn&s*X#&.Ó05Rh.AR.͛ͺAborted - no changes Ó0?R“0͛ ͛ͺArrow CP/M WS PW ͛ͺ set set set ͛ ͛ͺUp ^K ^E ^P ͛ ͛ͺDown ^J ^X ^N ͛ ͛ͺLeft ^H ^S ^B ͛ ͛ͺRight ^L ^D ^F ͛ ͛ͺIEntering the number of the corresponding set, will install the definition ͛ͺG set above. Entering '4' will allow you to enter your own definitions, ͛ͺ up to four characters per key. Z(͛ # Entering '4' will allow you to enter your own definitions, ͛ͺ up to four characterͫCopyright (C) 1984 BORLAND IncAKaypro II and IV P= ERC1B1~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~,->uxu a}.; 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!͍!/7Ͳo"0123456789ABCDEF}2W00h!OͲ!O!!*W&!n&s!O!!*W&!n&s!O R!q! b}2N*N& RBҴ ŔCTRL-*N&!@! b8!  R ŔSPACE b8!!]RB *N&R! b8!  R!ŔDEL b8!~R/!RB8!*N&!EͲ!!5zr!"\!E*\n&q *\#P!R͐b";"="?*?n&!NEʫ!*= 9!õ!*?n&q Ŕ New definition: b*=Ͳ*;!͛EC"!*?s!*;5z@""\!8!^b*^&q *=*\*^&s*\#"e"!8!^b*^&q *^&*?sR͐bR͐bŔ0Current settings of the vector pad (arrow keys).͐bR͐b!5n&}2{*{&!NE;#!_Ͳ!!5z-#"\!`*\n&}2^!_ *^&e.!_Ͳ*\#"!_ !sͲŔ Up arrow = b*{&!NEq#!s 9!÷#*{&! ͯEʦ#ŔCTRL-*{&!@͐b÷#R*{&͐b!6n&}2z*z&!NE4$!_Ͳ!!5z&$"\!d*\n&}2^!_ *^&e.!_Ͳ*\##!_ !nͲŔ Down arrow = b*z&!NEv$!n R!q͐bü$*z&! ͯEʫ$ŔCTRL-*z&!@͐bü$R*z&͐b!7n&}2y*y&!NE9%!_Ͳ!!5z+%"\!h*\n&}2^!_ *^&e.!_Ͳ*\#$!_ !iͲŔ Left arrow = b*y&!NE{%!i R!q͐b%*y&! ͯEʰ%ŔCTRL-*y&!@͐b%R*y&͐b!8n&}2x*x&!NE>&!_Ͳ!!5z0&"\!l*\n&}2^!_ *^&e.!_Ͳ*\#%!_ !dͲŔRight arrow = b*x&!NEʀ&!d R!q͐b&*x&! ͯEʵ&ŔCTRL-*x&!@͐b&R*x&͐bR͐bŔChange? (y/n) b!8!^b*^&(Q!Ya!NaE&*^&R͐b*^&(!NNEB'Ç/Ŕ0Please select one of the following (? for help)-͐bR͐bŔ 1. CP/M set͐bŔ 2. WordStar set͐bŔ 3. Perfect Writer set͐bŔ 4. Design your own͐bŔ 5. Abort - no changes͐bR͐bŔYour selection: b!8!^b*^&(Q!1a!2a!3a!4a!5a!Aa!?aEL(*^&R͐b*^&(1R)!5! s!6! s!7!s!8! sŔCP/M set installed:͐bÇ/2R_)!5!s!6!s!7!s!8!sŔWordStar set installed:͐bÇ/3R¾)!5!s!6!s!7!s!8!sŔPerfect Writer set installed:͐bÇ/4RH-R͐bŔ9Entering a '0' will leave that arrow definition the same.͐bR͐bŔ%Length of Up arrow definition? (1-4) b!Z+_b*Z!NEq**ŔCurrent up arrow = b!{!s*Z|!!5*{&s!!5z*"\!`*\!s*\n&s*\#ô*R͐bŔ'Length of Down arrow definition? (1-4) b!Z+_b*Z!NE;+ë+ŔCurrent down arrow = b!z!n*Z|!!6*z&s!!5zʫ+"\!d*\!n*\n&s*\#À+R͐bŔ'Length of Left arrow definition? (1-4) b!Z+_b*Z!NE,w,ŔCurrent left arrow = b!y!i*Z|!!7*y&s!!5zw,"\!h*\!i*\n&s*\#L,R͐bŔ(Length of Right arrow definition? (1-4) b!Z+_b*Z!NE,E-ŔCurrent right arrow = b!x!d*Z|!!8*x&s!!5zE-"\!l*\!d*\n&s*\#-Ç/5R\-ARƒ-ŔAborted - no changes͐bÇ/?R‡/R͐bŔArrow CP/M WS PW͐bŔ set set set͐bR͐bŔUp ^K ^E ^P͐bR͐bŔDown ^J ^X ^N͐bR͐bŔLeft ^H ^S ^B͐bR͐bŔRight ^L ^D ^F͐bR͐bŔIEntering the number of the corresponding set, will install the definition͐bŔG set above. Entering '4' will allow you to enter your own definitions,͐bŔ up to four characters per key.͐bB'R͐bþ" Entering '4' will allow you to enter your own definitions,͐bŔ up to four characters per key.͐on for this program was to conservatively list the contents of a large MAST.CAT file (mine has 4000+ files) for easy and quick referrence. My catalog used to take 60+ pages if using XCAT's printer option, now it only takes 21 pages. Bug reports, proPROGRAM Vector_Pad_Definition; { Written by Craig Brown Sept. 1985 } { This program will re-define the vector pad (arrow keys) on the Kaypro 4'84. It DOES NOT affect the definition on the disk, only that which is in memory. It allows choices from three sets of pre-defined definitions or make your own. } (* * * * * VARIBLE DECLARATIONS * * * * *) type str4= string[4]; var up, { arrow key value fields - prime definition } down, left, right: byte; up4, { multiple value fields - secondary definition } down4, { if an arrow key has more then a one byte definition } left4, { the prime field is set to 00 and the (up to) four } right4, { bytes of definition are stored here. } ans4: str4; ans: char; { input field, with multiple type definition } ansb: byte absolute ans; x, y, z: integer; { garbage fields } (* * * * * PROCEDURES * * * * *) PROCEDURE displayhex(in value: byte); { This procedure displays a byte in hex. It is a modification of a routine from Micro Cornucopia #24, written by Tom Geldner. } var hexstr: string[3]; const hexltr: array[0..15] of char= '0123456789ABCDEF'; begin hexstr:='00h'; hexstr[1]:=hexltr[((invalue) div 16)]; hexstr[2]:=hexltr[((invalue) mod 16)]; write(hexstr,' '); end; PROCEDURE Write1(inchar: char); { This procedure will display a byte value differentaly, depending on its ASCII value. It either displays it as a control character (CTRL-A) or as its ASCII character or the hex equivilent (for those that don't have a character) } var inbyte: byte absolute inchar; begin case inchar of #0..#31: write('CTRL-',chr(inbyte+$40),' '); #32: write('SPACE '); #33..#125: write(inchar,' '); #127: write('DEL '); #126, #128..#255: displayhex(inbyte); end; {case} end; PROCEDURE Write4(invalue4: str4); { This procedure will display the 4 bytes of the secondary key definition. } begin for x:=1 to 4 do write1(invalue4[x]); writeln; end; PROCEDURE EditEntry(var invalue: byte; var invalue4: str4; len: integer); { This procedure allows you to enter a new key definition up to 4 bytes long. It first displays the old definition and then enters the new. } begin if invalue=0 then write4(invalue4) else write1(chr(invalue)); write(' New definition: '); invalue4:=#0#0#0#0; { set the 4 byte definition to 0's so a short (2 or 3 byte) definition doesn't include any part of the old } if len>1 then begin { if definition is to be more then one byte } invalue:=0; { input and display values } for x:=1 to len do begin read(kbd,ans); write1(ans); invalue4[x]:=ans; end; {for} end {if} else begin { if definition is 1 byte enter and display } read(kbd,ans); write1(ans); invalue:=ansb; end; writeln; end; (* * * * * MAIN PROGRAM * * * * *) { The memory locations used in this program are for the Kaypro 4'84 running CP/M 2.2F. Other machines or versions of CP/M may vary, no guarentees extended, or liability assumed by the author. } label 0, 1, 2, 3, 4, 5; BEGIN writeln; writeln('Current settings of the vector pad (arrow keys).'); writeln; 0: up:=mem[$F635]; { the definition for the up arrow is at } if up=0 then begin { F635h. if it is 00h the definition is} ans4:=''; { stored starting at F661h for up to 4 } for x:=1 to 4 do begin { bytes } ansb:=mem[$F660+x]; ans4:=ans4+ans; end; up4:=ans4; end; write(' Up arrow = '); if up=0 then write4(up4) else if up<$20 then writeln('CTRL-',chr(up+$40))  else writeln(chr(up)); down:=mem[$F636]; { down arrow is at F636h. if 00h then } if down=0 then begin { starts at F665h for 4 bytes } ans4:=''; for x:=1 to 4 do begin ansb:=mem[$F664+x]; ans4:=ans4+ans; end; down4:=ans4; end; write(' Down arrow = '); if down=0 then writeln(down4) else if down<$20 then writeln('CTRL-',chr(down+$40)) else writeln(chr(down)); left:=mem[$F637]; { left arrow is at F637h. if 00h then } if left=0 then begin { start at F669h for 4 bytes } ans4:=''; for x:=1 to 4 do begin ansb:=mem[$F668+x]; ans4:=ans4+ans; end; left4:=ans4; end; write(' Left arrow = '); if left=0 then writeln(left4) else if left<$20 then writeln('CTRL-',chr(left+$40)) else writeln(chr(left));  right:=mem[$F638]; { right arrow is at F638h. if 00h then } if right=0 then begin { start at F66Dh for 4 bytes } ans4:=''; for x:=1 to 4 do begin ansb:=mem[$F66C+x]; ans4:=ans4+ans; end; right4:=ans4; end; write('Right arrow = '); if right=0 then writeln(right4) else if right<$20 then writeln('CTRL-',chr(right+$40)) else writeln(chr(right)); writeln; write('Change? (y/n) '); repeat read(kbd,ans); until upcase(ans) in ['Y','N']; writeln(ans); if upcase(ans)='N' then halt else begin 1: writeln('Please select one of the following (? for help)-'); writeln; writeln(' 1. CP/M set'); writeln(' 2. WordStar set'); writeln(' 3. Perfect Writer set'); writeln(' 4. Design your own'); writeln(' 5. Abort - no changes'); writeln;   write('Your selection: '); repeat read(kbd,ans) until upcase(ans) in ['1','2','3','4','5','A','?']; writeln(ans); case upcase(ans) of '1': begin { CP/M pre-defined set } mem[$F635]:=$0B; { up = ^K } mem[$F636]:=$0A; { down = ^J } mem[$F637]:=$08; { left = ^H } mem[$F638]:=$0C; { right = ^L } writeln('CP/M set installed:'); end; '2': begin { WS pre-defined set } mem[$F635]:=$05; { up = ^E } mem[$F636]:=$18; { down = ^X } mem[$F637]:=$13; { left = ^S } mem[$F638]:=$04; { right = ^D } writeln('WordStar set installed:'); end; '3': begin { PW pre-defined set } mem[$F635]:=$10; { up = ^P } mem[$F636]:=$0E; { down = ^N } mem[$F637]:=$02; { left = ^B } mem[$F638]:=$06; { right = ^F } writeln('Perfect Writer set installed:'); end; '4': begin { Self definition routine } writeln; writeln('Entering a ''0'' will leave that arrow definition the same.'); writeln; write('Length of Up arrow definition? (1-4) '); readln(y); if y=0 then goto 2; write('Current up arrow = '); editentry(up,up4,y); mem[$F635]:=up; for x:=1 to 4 do mem[$F660+x]:=byte(up4[x]); 2: writeln; write('Length of Down arrow definition? (1-4) '); readln(y); if y=0 then goto 3; write('Current down arrow = '); editentry(down,down4,y); mem[$F636]:=down; for x:=1 to 4 do mem[$F664+x]:=byte(down4[x]); 3: writeln; write('Length of Left arrow definition? (1-4) '); readln(y); if y=0 then goto 4; write('Current left arrow = '); editentry(left,left4,y); mem[$F637]:=left; for x:=1 to 4 do mem[$F668+x]:=byte(left4[x]); 4: writeln; write('Length of Right arrow definition? (1-4) '); readln(y); if y=0 then goto 5; write('Current right arrow = '); editentry(right,right4,y); mem[$F638]:=right; for x:=1 to 4 do mem[$F66C+x]:=byte(right4[x]); 5: end; '5','A': begin writeln('Aborted - no changes'); halt; end; '?': begin { help information } writeln; writeln('Arrow CP/M WS PW'); writeln(' set set set'); writeln; writeln('Up ^K ^E ^P'); writeln; writeln('Down ^J ^X ^N'); writeln; writeln('Left ^H ^S ^B'); writeln; writeln('Right ^L ^D ^F'); writeln; writeln('Entering the number of the corresponding set, will install the definition'); writeln(' set above. Entering ''4'' will allow you to enter your own definitions,'); writeln(' up to four characters per key.'); goto 1; end; end; {case} end; {else} writeln; goto 0; END.  ͫCopyright (C) 1984 BORLAND IncAKaypro II and IV P= ERC1B1~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!͍!I'Ͳ'!"!o&}2hcŔAUTOBOOT ver 1.01͐bŔJune 1985 by Waid Reynolds͐bŔ([Modified 8/14/85 by George B. Cabellon]͐bR͐bŔFPublic domain software for setting the autoboot command line of Kaypro͐bŔKfloppy or hard disks. This program works with all 8 bit Kaypros, including͐bŔLthe Kaypro 10. On the 10, only hard drive A: and floppy C: are boot drives.͐bŔ@DO NOT put an autoboot command on hard drive B:. It won't work.͐bR͐bR͐bŔ "b!!5z#"¢!*¢n&Rb*¢##R!"͐bR͐bR͐bI#ŔPress to quit or͐bŔEnter desired command line͐bŔA of up to 16 characters: [................]͐bŔ0 [Upper or lower case may be used] -----------> b!j+._b!j m}2i*i&!͛En%R͐bR!́2 ++ Sorry, must be less than 16 characters long ++͐bR͐b*i&!͇E$*i&!N}2*&}oE%!jͥ"!j"!!5z%"!*!j*!Rn&s*#ø%!!*i&sR͐bŔ0Writing new autoboot command line ------------> b!j R!q́ to disk...b! !DM.! !DM.! *DM.! .!!!!5z&"! *DM.! .*#ê&R͐bR͐bR!́ ++ Done ++͐b!*&}oE-'$*&}oE-'%!*h&DM.*&E'#ê&R͐bR͐bR!́ ++ Done ++͐bProgram AUTOBOOT; { By Waid Reynolds June '85 Ever want to set up a boot disk so that it would run a program automatically when your Kaypro boots up? This can be done when you format a disk using the COPY program, but, you may want to later change the boot instructions without having to reformat the disk. Here's a simple Turbo Pascal program which will allow you to specify a command line of up to 16 characters for the autoboot sequence. To run this program after it is compiled, just type AUTOBOOT followed by the key. The program will prompt you for the disk drive and the desired autoboot command line. Once entered, the program will write your command line to the appropriate disk, then ask if you want to do it again. The command line is written to track 0, sector 2 beginning at byte 8. After booting up, CP/M looks at this location to determine if an autoboot is desired. A valid command line will then be executed, if found. } Type str17 = string[17]; Const { BIOS entry points relative to Warm Boot } seldsk = 8; { select disk } settrk = 9; { set track } setsec = 10; { set sector } setdma = 11; { set dma address } rd = 12; { read selected sector } wr = 13; { write it} getdisk = 25; { BDOS get disk function } track = 0; { Location of auto boot } sec = 1; { command line } quit: boolean = false; Var cmd_line: str17; { The new command line string. Includes one extra byte, so we can tell if user entered too long a string. } cmd_line_len: byte; bios_address: integer absolute 1; { Address of BIOS jump vector } default_drive_num, drive_num: byte; drive_letter: char; { Drive A - P } sector: array [0..127] of char; { Buffer for the disk sector we are going to modify } dma_address: integer; Procedure Init; (* Set the dma address in memory for sector t0,s1 to be read into memory so that it will overlay our array called "sector[]". Also find out what the currently logged disk drive is. *) begin dma_address := addr(sector); { The addr of the 1st byte of "sector[]" array } default_drive_num := Bdos(getdisk); { 0 = A:, 1 = B:, etc. } End; {init} Procedure Intro; (* Introduce the program *) begin clrscr; writeln('AUTOBOOT ver 1.01'); writeln('June 1985 by Waid Reynolds'); writeln('[Modified 8/14/85 by George B. Cabellon]'); writeln; writeln('Public domain software for setting the autoboot command line of Kaypro'); writeln('floppy or hard disks. This program works with all 8 bit Kaypros, including'); writeln('the Kaypro 10. On the 10, only hard drive A: and floppy C: are boot drives.'); writeln('DO NOT put an autoboot command on hard drive B:. It won''t work.'); writeln; End; {Intro} Procedure Get_drive; (* Get the user to enter the letter of the desired disk drive. *) begin repeat writeln; write('Enter the letter of the desired drive (A - P) or Q to quit: '); read(kbd, drive_letter); drive_letter := upcase(drive_letter); { "upcase()" is a built-in Turbo function which converts one character to upper case if it is lower case. } until drive_letter in ['A'..'Q']; quit := (drive_letter = 'Q'); if not quit then (* Convert to number *) begin drive_num := ord(drive_letter) - 65; { The above line converts the ASCII value of drive_letter to a number in the range of 0 - 15. The ASCII values of letters A to P are 65 to 80. The "ord" built-in function tells Turbo to return the value of the character, 65 - 80 in this case. By subtracting 65 we then arrive at a number in the range of 0 - 15, which CP/M can understand. } Bios(seldsk, drive_num); { Select the drive } end; End; {get_drive} Procedure Pad(var s: str17); (* Fill out the command string to full length of 16 chars using spaces. We don't want anything other than spaces following our command line. By using "var" ahead of "s" in the first line of this procedure, we tell Turbo to pass the actual location of the string to be operated on. If "var" was not present, we would be operating on a temporary string, "s" created in this proc. Thus adding spaces to the end of "s" would not effect the real string. *) Var pos: integer; begin while length(s) < 16 do s := s + ' '; End; {pad} Procedure Upcase_string(var s: str17); (* Convert the command line string to upper case so CP/M won't choke on it. Note the use of "var" again, so that we will be operating on the real string, not a temporary clone of it. *) Var pos: integer; begin for pos := 1 to length(s) do begin if s[pos] in ['a'..'z'] then s[pos] := upcase(s[pos]); end; End; {upcase_string} Procedure Display_old_cmd_line; (* Display the command line, if any, currently located at track 0, sector 1 on the designated disk drive. *) Var pos: integer; begin Bios(settrk, track); { Set the track } Bios(setsec, sec); { Set the sector } Bios(setdma, dma_address); { Set dma address } Bios(rd); { Read the disk sector into memory starting at the beginning of our array called "sector[]". It is critical that this be done so that the array will contain the proper data when it is rewritten to disk later on. } { Now, display the current command line, if any. } writeln; write('Current autoboot command line ---------------> "'); for pos := 8 to 23 do write(sector[pos]); writeln('"'); writeln; End; {display_old_cmd_line} Procedure Get_command_line; Var pos: integer; begin writeln; Display_old_cmd_line; repeat writeln('Press to quit or'); writeln('Enter desired command line'); writeln(' of up to 16 characters: [................]'); write(' [Upper or lower case may be used] -----------> '); readln(cmd_line); cmd_line_len := length(cmd_line); if cmd_line_len > 16 then begin writeln; writeln(#7,' ++ Sorry, must be less than 16 characters long ++'); { "#7" makes the Kaypro beep. } writeln; end; {if} until cmd_line_len <= 16; quit := (cmd_line_len = 0); if not quit then begin Pad(cmd_line); { Fill out w/spaces to length of 16 } Upcase_string(cmd_line); { Convert to uppercase } { Assign new cmd line to sector[] character by character } for pos := 8 to 23 do sector[pos] := cmd_line[pos-7]; { And set the length byte so CP/M will know how long the new command line is } sector[7] := chr(cmd_line_len); end; {if} End; {get_command_line} Procedure Write_command_line; (* Write the "sector[]" array to disk at sector t0, s1. *) Var secno: integer; begin writeln; write('Writing new autoboot command line ------------> '); write(cmd_line,' to disk...'); Bios(settrk, track); { Set the track } Bios(setsec, sec); { Set the sector } Bios(setdma, dma_address); { Set dma address } Bios(wr); { Write the sector to disk } { Force BIOS to actually write our modified sector to disk. Kaypro CP/M buffers 4 128 byte sectors in memory. So, a write to disk must be forced by reading enough sectors to cause CP/M to flush the current buffer to disk. } for secno := sec+1 to sec + 5 do begin Bios(setsec, secno); Bios(rd); end; writeln; writeln; writeln(#7,' ++ Done ++'); End; {write_command_line} BEGIN {============ MAIN =============} Init; Intro; repeat Get_drive; if not quit then begin Get_command_line; if not quit then Write_command_line; end; {if} { Set default drive back to original } Bios(seldsk, default_drive_num); until quit; END. of Autoboothihi*͏7> _> _s$`!g>5f1`> _=`M*KͶ:͖X[B*Z&GX*gGX> _> _$`!g>5f1`> _=`ß*Ͷ:͖XíC*&GX*gGX> _> _@$`!g>5f!g>5f1`> _=`*Ͷ:͖X=*&GX*g*&͝GGX(*g*'&͝GGX> _> _û$`!h>5f!g>5f1`> _=`t*rͶ:͖XÂ**&GXÏ*g*&͝GGXã*h*&͝GGX> _> _6$`!h>5f!h>5f1`> _=`*Ͷ:͖X *&GX *h* &͝GGX*h*&͝GGX> _ > _"$`! h>5f! h>5f! h>5f!h>5f1`> _#=`z*xͶ:͖XÈL*&GXÕ*h*&͝GGXé* h*&͝GGXý* h*&͝GGX* h*&͝GGX> _$> _&Ü$`!h>5f!h>5f!h>5f!h>5f1`> _'=`-*+Ͷ:͖X;D*:&GXH*h*G&͝GGX\*h*[&͝GGXp*h*o&͝GGXÄ*h*&͝GGX> _(> _0> _1=`ø*Ͷ:͖XL`m`> _2> _4Ø$`!h>5f1`> _5> _7*h>!h5f> _8*>!h5f> _9*h*hYGCLʅ> _9> _@G*h*h͝G*E;G>!h5f> _A*h*h;G>!h5f> _B#> _C$`*h1`> _E' $`!+h>5f!)h>5f!'h>5f!%h>5f!#h>5f!!h>5f!h>5f!h>5f1`> _F> _G*!7>U*!7>U#*!!7>U> _I=*;>!5h5f> _PU*S>!7h5f> _Qm*k>!3h5f> _RÅ*>!1h5f> _T*5h!9hͤW$`*h1`>5f> _U*7h!9hͤW$`*h1`>5f> _V*5h!@hͤW$`*h*#h*+hͩG͝G1`>5f> _W*7h!@hͤW$`*h*!h*)hͩG͝G1`>5f> _X*5h!GhͤW$`*5h!@h͇W*%h*+hͩG͝G1`>5f> _Y*7h!GhͤW$`*7h!@h͇W*%h*)hͩG͝G1`>5f> _a*'h*1hmGCL > _a> _b*5h!9h͇W>!-h$`5f1`*5h!@h͇W*+h> _c*7h!9h͇W*-h*7h!@h͇W*-h> _d!͒8> _f!*>!-h$`5f1`*#h*+hͩG*+h> _g*7h!@h͇W*5h!@h͇W*-h͑G*7h!Gh͇W*5h!Gh͇W*-h͑G> _h!C͒8> _iÜ*>!-h$`5f1`*!h*)hͩG*)h> _p*7h!@h͇W*-h͑G*5h!@h͇W*7h!Gh͇W*-h͑G*5h!Gh͇W> _q!͒8> _s*7h!9h͇W*5h!9h͇W*7h!@h͇W*5h!9h͇W@> _t*7h!9h͇W*5h!9h͇W*7h!9h͇W*5h!@h͇W@> _u*7h!@h͇W*5h!@h͇W*7h!@h͇W*5h!9h͇W@> _v*7h!@h͇W*5h!@h͇W*7h!9h͇W*5h!@h͇W@> _x*7h!@h͇W*5h!@h͇W*7h!Gh͇W*5h!Gh͇W@> _*7h!9h͇W*5h!@h͇W*7h!Gh͇W*!h*)hͩG͑G*5h!Gh͇W@> _*7h!@h͇W*5h!9h͇W*7h!Gh͇W*5h!Gh͇W*#h*+hͩG͑G@> _*7h!Gh͇W*5h!Gh͇W*7h!Gh͇W*!h*)hͩG͑G*5h!Gh͇W@> _*7h!Gh͇W*5h!Gh͇W*7h!Gh͇W*5h!Gh͇W*#h*+hͩG͑G@> _> _*'h*3hmGCL > _> _*5h!9h͇W>!-h$`5f1`*5h!@h͇W*+h> _*7h!9h͇W*-h*7h!@h͇W*-h@> _!Y ͒8> _Ø * >!-h$`5f1`*#h*+hͩG*+h> _*7h!@h͇W*5h!@h͇W*-h͑G*7h!Gh͇W*5h!Gh͇W*-h͑G@> _! ͒8> _ * >!-h$`5f1`*!h*)hͩG*)h> _*7h!@h͇W*-h͑G*5h!@h͇W*7h!Gh͇W*-h͑G*5h!Gh͇W@> _!5 ͒8> _*7h!@h͇W*5h!@h͇W*7h!@h͇W*5h!9h͇W> _*7h!@h͇W*5h!@h͇W*7h!9h͇W*5h!@h͇W> _*7h!@h͇W*5h!@h͇W*7h!Gh͇W*5h!Gh͇W> _> _> _> _> _> _ > _> _> _> _> _k *i !7>U> _Å * !7>U> _ß * !7>U> _ù * !7>U> _ * * !7>U> _ *  *!7>U> _ !*!Z>!7U͚dS0iCD> _!!6>N]> _#Î> _$=`ouB1*mͶ:!r:͖X> _%> _'> _(=`êðC1*Ͷ:!:͖X> _)> _1> _2=`B0*Ͷ:!:͖X> _3> _5?> _6=` &C0*Ͷ:!#:͖X> _7> _9z> _@=`[aB2*YͶ:!^:͖X> _A> _Cõ> _D=`ÖÜC2*Ͷ:!:͖X> _E> _G> _H=`*Ͷ:͖X> _I> _Qè> _Rͦ> _SI> _T=`2 NO BARS HAVE BEEN DEFINED YET!!!!͖XL`m`> _Ǘ> _V=`L`\Return to main menu by pressing any key L`}`2phL`ym`> _WD2> _X> _`L> _a=`No more values!!͖XL`m`> _b=`L`m`> _c=`L`\Return to menu by pressing any key L`}`2phL`ym`> _dD2> _e> _gç> _hͦ> _iI> _p\ YOU HAVE USED SMALL LETTER IN THE FILENAME!! THIS MIGHT CAUSE PROBLEMS LATER!!!!!!!!!!!!! USE O N L Y CAPITAL LETTERS IN YOUR FILENAMES!!!!!!!! > _̈́> _=`L`\Return te menu by pressing any key....L`}`2nhL`ym`> _D2> _> _ > _ͦ> _]> _=`0Do you wish to change all bars (O)pen or (F)ull !͖X> _͘> _=`L`}`2|hL`ym`> _@*>>!Nh$`5f1`*^h\!Z>f> _pOuo*|h!n8GL*|h!s8GL4GCL> _*Nh!iͤW$`ù*1`>5f> _*Nh!iͤW$`*1`>5f> _!d͒8> _D2> _> _> _ͦ> _> _6*4>!Nh$`5f1`N*LW!U>f> _=`q !o͖XL`m`> _!_͒8> _=`ÝLâ **:͖XL`m`> _=`L **:͖XL`m`> _ > _> _> _ͦ> _ !!hFa> _]> _=`b)Enter the graph headier, max. 50 letters.!8͖XL`m`> _=`Ç ---> !͖X> _͘> _=`L`ye[!haL`ym`> _ > _"> _#ͦ> _$*dh*mGCLQ> _$=` B0*Ͷ:!:͖X.OUT OF SCALE!!!!͖X:@C0*8Ͷ:!=:͖X> _%=`L`m`> _&p*n>!dh5f> _']> _(=`+ The latest ACCEPTED scale valeu was: !͖X*hhXL`m`> _)=`+ Previous NOT ACCEPTED attempt was: !͖X*bhXL`m`> _0=`b+ Change maximum only, enter new maximum: !6͖X> _1͘> _2=`L`ye[!`h͗YL`ym`> _3*`h>!bh5f> _4ó*>!Nh$`5f1`*^h!>f> _5*Nh!iͤW$`*Nh!i͇W*`h̀9R9BO$fM1`>5f> _6'*Nh!i͇W$f#H#LW> _6K*I>!dh5f> _7!͒8> _8p*dh*nmGCLʔ> _8*bh>!hh5f> _9à*dh*mGCLʻ> _9> _@> _B}> _C*^h*mGCL> _C> _D*>!Rh5f> _EZ*>!Ph5f> _F0*.G>!Vh5f> _GK*I>!Xh5f> _Hc*a>!\h5f> _I{ *y>!Th5f> _Pͦ> _Q> _Rç*>!Nh$`5f1`*^h!>f> _S*Nh*mGCL> _S*>!fh5f"> _S*fh* ͝G>!fh5f> _T=`*fh́:eX*Nh!"i͇W͖X> _U!͒8> _V_*]>!Nh$`5f1`*^h{!y>f> _W*Ph*Rh*Nh!i͇W$99*Th*\h*Nh!i͇W*Vh*Xh͢> _X *Rh*͝G>!Rh5f> _Y!͒8> _`Ϳ> _a=`  !͖X!h͖X5 (Maximum value: !͖X*`hXH)!F͖XL`m`> _bͿ> _c=`L`}`2nh> _d> _f$"> _gͦ> _h]> _i=`6(A)dd more values or (S)tart again from the beginning !͖X> _p͘> _q=`L`}`2thL`ym`> _rS!s*th!8GL*th!8GL4GCLd> _rX*V>!^h5f> _sp*^h*nmGCLʋ> _s]> _t=`ðEnter maximum value !͖X> _u͘> _v=`L`ye[!`h͗YL`ym`> _w*^h*mG*`h!99mG?GCL/> _w#d*!>!`h5f> _x*`h>!bh5f> _y*`h>!hh5f> _> _> _ͦ> _y*^h*w͝G>!^h5f> _]> _=`Previous bar was bar number....!͖X*^h*͑GXL`m`> _=`Previus bar value was..........!͖X"*^h* ͑G!i͇WnHL`m`> _=`lPrevious bar name was..........!L͖Xx*^h*v͑G!"i͇W͖XL`m`> _=`L`m`> _=`L`m`> _=`Enter next bar's value !͖X> _͘> _=`*^h!iͤW$`L`ye[1`͕LL`ym`> _*^h!i͇W*`h̀9R9H#Lʜ> _=`L`\Value too large! Enter new value = *^h!iͤW$`L`ye[1`͕LL`ym`> _*^h!iͤW$`÷*^h!i͇W*`h̀9R9BO$fM1`>5f> _]> _=` Is the bar (O)pen or (F)ull !͖X> _͘> _=`L`}`2rhL`ym`> _O FT f*rh!M 8GL*rh!R 8GL4GCLʚ > _Ë * >!Zh5fò > _æ * >!Zh5f> _*^h!iͤW$`*Zh1`>5f> _]> _=`!-Enter this bar's name, maximum 5 characters: ! ͖X> _͘> _=`*^h!"iͤW$`L`ye[1`aL`ym`> _=`L`m`> _]> _=`L`\Add more bars (Y/N) L`}`2nhL`ym`> _͘> _! *^h*!JGCL!> _Ͳ> _ !N!n*nh!!8GL*nh!!8GL4GCL\> _> _8(> _:"*^h*8"mGCLU"> _> _`"!_"!iFa> _ͦ> _]> _=`"CDo you wish to change open bars into full bars or vice versa (Y/N) !"͖X> _͘> _ =`L`}`2zhL`ym`> _! #Y#y*zh! #8GL*zh!#8GL4GCLF#> _!ͱ> _"ͦ> _#\#*Z#>!Nh$`5f1`*^hx#!v#>f> _$]> _%=`ñ#Original bar value is !#͖X*Nh!i͇WnHL`m`> _&=`#and the bar is !#͖X> _'#*Nh!i͇W*#mGCL:$> _'=`*$open!%$͖XL`m`\$> _'=`O$full!J$͖XL`m`> _(=`$The bar's name is !l$͖X*Nh!"i͇W͖XL`m`> _)=`L`m`> _0=`L`\CHANGE THIS (Y/N) L`}`2xhL`ym`> _1$Y$y*xh!$8GL*xh!$8GL4GCL(> _1> _2]> _3=`h%'Enter new value, = no change: !@%͖X> _4͘> _5=`*Nh! iͤW$`L`ye[1`͕LL`ym`> _6ò%*Nh! i͇W!%9R9&H#L%> _6*Nh! iͤW$`*Nh!i͇W1`>5f> _7*Nh!iͤW$`*Nh! i͇W1`>5f> _8*Nh!iͤW$`6&*Nh!i͇W*`h̀9R9BO$f2&M1`>5f> _9]> _@=`Õ&Is this bar (O)pen or (F)ull !w&͖X> _A͘> _B=`L`}`2vhL`ym`> _C&F&f*vh!&8GL*vh!&8GL4GCL''> _C*Nh!iͤW$`'*'1`>5fL'> _C*Nh!iͤW$`@'*>'1`>5f> _D]> _E=`Ó',Enter new bar's name, = no change: !f'͖X> _F͘> _G=`L`ye[!iaL`ym`> _H'!i!'YHLL'> _H*Nh!"iͤW$`!i1`Fa> _I͘> _P> _Q=`L`m`> _R!#͒8> _S> _U*,> _Vͦ> _W=`L`m`> _X=`ô(DAlways use a new name, otherwise you will destroy the previous file!!o(͖XL`m`> _Y=`)3Always use C A P I T A L letters in filenames!!!(͖XL`m`> _`=`L`m`> _a]> _b=`O)ETNER FILENAME !?)͖X> _c͘> _d=`L`ye[!~haL`ym`> _eÍ)*)>!Nh$`5f1`!~hB;ì)!)>f> _f))^!~h*Nh*):͟:*)YGCL)*> _g!)͒8> _h*> _i> _iV> _p> _p%*.BAK!~h! *:!hFa> _qE*.BGF!~h!@*:!~hFa> _r!~h!hͶ;> _s!~h<> _tÂ***$`!~h1`j<> _uà***=`!^h>͖C!`h>͖C> _v***>!Nh$`5f1`*^h*!*>f> _w**Nh!"i͇W!*JHLL3+> _w*Nh!)iͤW$`&+*****! +1`FaW+> _w*Nh!)iͤW$`*Nh!"i͇W1`Fa> _xc+*a+=`*Nh!iͤW>͖C*Nh!iͤW>͖C*Nh!"iͤW>͖C> _y!*͒8> _ï+!h!+JHLL+> _+*******************************!+!hFa> _,*+=`!h>͖C> _,*,͠=> _> _`/> _ͦ> _]> _=`h,ETNER FILENAME !X,͖X> _͘> _=`L`ye[!~haL`ym`> _æ,*,>!Nh$`5f1`!~hB;,!,>f> _,,^!~h*Nh*,:͟:*,YGCL-> _%-> _!,͒8> _6-> _> _V> _> _E-.BGF!~h!@-:!~hFa> _b-*`-$`!~h1`j<> _À-*~-=`!^h>D!`h>D> _ã-*->!Nh$`5f1`*^hÿ-!->f> _-*-=`*Nh!iͤW>D*Nh!iͤW>D*Nh!)iͤW>D> _.******Nh!)i͇W!.JHLLS.> _*Nh!"iͤW$`F.!E.1`Faw.> _*Nh!"iͤW$`*Nh!)i͇W1`Fa> _*Nh!iͤW$`Ò.*Nh!i͇W*`h̀9R9BO$f.M1`>5f> _!-͒8> _.*.=`!h>D> _ /*******************************!h!.JHLL4/> _'/!&/!hFaE/> _!h!hFa> _Q/*O/͠=> _> _ ͦ> _\ ***************************** BARGRAF.COM v. 1.8 ***************************** This is a bar graph program programmed in SBASIC for the '84 Kaypros. Copyright Veikko Rekunen/SUOKUG/1985 This program may freely be copied for non-commercial purposes but it may not be sold without a written permission from the author, nor may it be included in any package for sale without a similar permission. Veikko Rekunen, 61400 YLISTARO, FINLAND > _%I> _&=`ø1/ R E A D BARKRAF.DOC !!!!!!!1͖XL`m`> _'̈́> _(=`L`m`> _)=`L`\Start the program by pressing any key........................L`}`2nh> _1> _1ͦ> _2> _3=`ø2O M A I N M E N U !h2͖XL`m`> _4> _5]> _6\ (G)ive values (H)eadings (V)alue change (D)raw graph (C)hange scale (S)ave graph on disk (L)oads file from disk (Q)UIT! > _Q=`L`}`2lhL`ym`> _R͘> _S*lh>͵`3G!38͜K3> _T͇þ5>͵`3g!38͜K4> _U͇þ5>͵`4V!48͜K24> _V."þ5>͵`<4v!:48͜KV4> _W."þ5>͵``4D!^48͜Kz4> _Xþ5>͵`Ä4d!48͜Kž4> _Yþ5>͵`è4C!48͜K4> _`þ5>͵`4c!48͜K4> _aþ5>͵`4S!48͜K 5> _bB(þ5>͵`5s!58͜K.5> _cB(þ5>͵`85L!658͜KR5> _d4,þ5>͵`\5l!Z58͜Kv5> _e4,þ5>͵`À5H!~58͜Kš5> _fþ5>͵`ä5h!58͜K¾5> _gþ5>`> _i5Q5q*lh!58GL*lh!58GL4GCL@6> _i=`L`\QUIT? ARE YOU SURE (Y/N) L`}`2nhL`ym`C6D2> _pO6YT6y*nh!M68GL*nh!R68GL4GCLʌ6> _pÏ6D2> _q> _qͦ> _r> _s=`L`m`> _t=`79SOMETHING HAS GONE W R O N G NOW ! ! ! ! ! ! ! ! !6͖XL`m`> _u=`L`m`> _v> _w=`L`\Return to menu by pressing any key...L`}`2nhL`ym`> _xD2> _y!^i"Si!_i"9h!`i"@h!ai"Gh!bi"i!ci" i!di"i!ei"i!fi""i!gi")iSi9h@hGhi iii"i)iCopyright (C) 1979, By Topaz programming. All rights reserved. From here on protected by End User License.  "8"8"8"8"8"8"8"8*8*"*8:88͜K8*8*8*8!**8͑G"!͜K888"9!a6Fa&:ao!"!9k;$9!"H9!K9>5f:N9W2N9z2Q9!K9>f!"v9!y9>5f:9W:|92|9!y9>f!"9|299G)}lg"9!9>6#=ž9>/!9w͢T:99:929!9>f!":!:>5f*:}lg::9!:::G|g}ox<9::G!!:"~:a2b!bFaa2a!aFa!b^!a^!a~W:#M:bwf:#Z:xm:y2a(aa2b2c!":L`!Xd N{Җ:O&;!":!a6Fa:a_!>":":"aE::!aw#:(aa!";"$;"";a2a!aFa!a^!a:";O :$;f:$;!!"?;"a}!a6 #=2;(aa!"h;a2a!aFa!a^!a~#];!";a2a!aFa!a^!;"c/Q!;ڢ;:;g:;2;!;>f!@6#=X<a!!M>͚dʀ<~R=Sʐ6#=x=6#6!R-TYPE FILE NOT FOUN}2bM>͚dʼ=~RP>S=!=^)FILE CLOS";>%~~=*;>%6>*;>%6*;>~>=_kb*;>!>>^*;>&~#*;>!=>>͖C>S-TYPE FILE CLOS"B$C ~#\>:C:Ct>ͺ?kb*B*B(6Gxœ>2#C:bO>͚dʼB~R¼B w! |2C"B"/?"k?"C!$C 2C~#>:l? Q?:C>?2?͙?*C*C6 #{ ?+6 +6 *B$C w#&?!m?.?ͺ??H?ͺ?͟?m?Ā??͙?>2Ce?̀??ͺ??:#C*C*C|}*C?ͮA!$C^:CB?*C"C*C"C*C"C:C>ʶ?/2C*C?@!0C^B*B$w#?DM*CzB}2"CzW{_|g}o?z@" C" C"B2C2B:CX@* ClB|@}@}O*B ~X@*Bq*B!PC^*B!BB!~w##e@:C!^C^:B2C!PC^:Cž@* C}2 C2B:Bʬ@=_*C!"B!"B*C!?C^}@:"C@B BbA=@bAB+|@:BBbA@lB:C.A: C.A!aw#AaB:C*B}\BaB:C!)ҍB ҍB#=“B))ҜB#ÀB!$C^!0C^!?C^!sC^!C^R-TYPE REAEXTENDING FILEND OF DISK DAT RANDOM RECOR R-TYPE FILE NOT OPE NO MORE DIR SPAC*WRONG TYPE FIL"D:bO>͚dʉD~S‰D ~RʉD>Ww"DD+~#CC*D~!D~#C=_!D~*D~!D#=C*DD+w#D8D!D^*D"D*D"D"D*D| D+"D*Dw#"D:D!D^:DND/2D*D9Z*D:DpD=_D x\D!D^ S-FILE WRITWRITE ON UN-OPENED FIL,S TYPE FIL"NF:bO>͚dF~SF ~WF>Rw""F$F*~#!ERE͒E2a!a͒Ew#=8E!a*NFFakE=_!F~*NF͒Ew#=^E*"F$F*w#sEͧE!PF^*EF"JF*GF"LF*JF||E+"JF*LF~#"LF:IF!^F^*EF9Z*GF:$FE=_$FEE xÿE*EF9Z}>M6# F F!uF^READ PAST EOREAD ON UN-OPENED FIL,S TYPE FIL!)G> 6 #=†F!a6!a(G:a:>²F~##`ڰF @~F#.F¶F~F#.FF1G~F#F!)GG!1GG!a(G w#F~*G> _y{!G !G>?w# GzW{_zW{_"G͜K>ҊGÈG"G͜K>ʊGڊG>ÊG"G͜K>ʊGÈG"G͜K>ŠG>K!}o|g}o|g"GGZG*G"GG9ZG!||GxŷG|/g}/o#y> H Hy> H>L"GHK>CHCH>CH"GHK>CHAH"GHK>CH>K!"kHͿJ>gHeH"kHͿJ>gH>͸K!>2J"J2a2J2J!J>5f:JJ:J2J2J!J>f>͵`!J>fKH!J>fBO!J4åH>͵`!J>fKH!J>fM!J5H:JI/2J!J>fLåH!J>5f!J~I/<"I^~w>2J{2J!JHJw#4I+~0?I:J> RI>-2a:JqII:J=2J>2J>2J!Ja:JʉI=2J~#wI>.:JI=2J~#ÍI!aJ:J/<6.#60=¬I:JG:JG#w¼I+~0I.I#6:JJ6E#+I/<-p# II:OxJ0w#q#6!a~J60#6>2a(J#~Jx2a:JDJ:]DJ:bO>!a]*J!J>f!J>fM!J>5f2J!J~ʎJJ=w!J~w+ |J:J2JiJ!JͦP:J07"J!b6Fa!a6Fa!ba~ KOJJ#J! ~JOzJ#JJ JJ KJ"}K!a>5f!a>5f!a:aCK~|K:aa!àKVK*}K!aa~w!aaoK|K#qK!҅KKOKy?zKz>K7z·K{"K!KK!K!TrueFalse"K!KK!K>f!!L!&.T L.F" LqL!L!!>*L>"@L!a5f:a>>L/!|>"oL{\LtL!a6Fa*oL:atL}TʑLtʑLYʑLyʑLʑL>>"L!LQ:LW:L2L*LLw#µL>L>2L"L!M>5f!L>5f2M2MM!L>f!͑M!LM!MM*L|5M:L/M!MM5M!MM!MM+>M*L}}^M^M!MM>2L!M7wrM+fM:LG!M~w!LͦP:L2M!M~_w!M~Ww:LW"L!LMNGMxMMîM4#~wM~/w+M~w+~w M"N!N>5f!N>5f:NN:NN!N~_w!N~Ww"N:N2N!N w#9NKNfNNNDN!NNw+ ZNDN:NG:NO2NxN:NNxN*N!N>1O!N>f*NN*N!N:N1O!N>f!!N>f*N!N~w+ N!N~w# N!N7wO+O0!N~+~=w!N~w+ O O2NzW~ww"4P!P>5f!P>5f:PCP:P7P!P~_w!P~Ww"P:P2PgP×O!P|P O!P|P!PP+ O?چO!PP+µOÆO:Po:PgG2P|OxOx7P*P!fP>͇P!cP>f*4P!P7wP+O!PpP!P4#>w!PͦP*P!P:P͇P!P>f!!_P>f*4P!IP^ DIVISION BY ZER!PpP!P~w# sP~w+~PzW~ww~2P#~P+~=w~w~w+P ¬P6:P+~6# P>w+>P~+2S#"S>+2S~#ʘQ ʘQ ʘQEZQ~+}Q-}Q+>+2S#~ʘQ{_~R_#ÃQ+6E:S+{ʦQ/<2*S5Rx//2S!S͢T:S+Q:S2S:*SR!;SQ/<2*S!-S"+S>f:*S=R2*S*+S>fBSQ!4S>f!S>fBS*c>5f*cT*c~w2SG!S>6#=AR*S~ER#"S.bR>2SHR!SS~#lR!SSR!SSR!S"SR!SSRR2"S!!S>6+=¥R!S"SR:SʽR HR:SR*S!*SER.R4R:S S!SSRɯw+R0S >7ѯ7"S!'T>5f! T>5f:(TT:!TT!-T~_w!&T~Ww".T: T20T!Tw#„S0ÖSʱS?TNTҏS!T&T w+ ¥SÏS:0TG:'TO2TxS:TSxT*.T!>T>͑T!8T>f*S]T*.T!T:T͑T!T>f!!1T>f*S!&T ~w+ ET!(T~w# TT!T 7wnT+bT`!T~+~=w!T ~w+€T pT2TzW~ww0~2T#~T+~=w~w~w+T ¨T6:T+~6# T>w+>T~kV}>pV/21W}o|g"-WDM:1W¶V*  " |!9]"Xa2a!aFa:a_!a6!a:bO>]*X"Xa2a!aFa:a_!a6:]X!a:bO>]*X")Y+YY0XX!a6 :Y+Xw#YwXx Y60#<62a:]#Y!a:bO>]*)Y"Y!Y|>+2YJY}/o|/g#>-2YYN#F |bY,VYy/Ox/G y0w#}YQY*YaZatZڭYs#rͳYØY!YYERROR IN INPUT, RE-ENTER PLEAS:cm`:cO `ym`!Y `:ae[??!ZYNUMBER TO LARGE/SMALy!*Zx*Z1Z) ,Z"rZ>2qZ7?{_zW!qZ5nZyOxG#yO#xGFZ*rZ DMFZBK2c +ʈZ-‰Z>2c`i"Z! ʬZT])))0 ?ںZ_ÑZ:c|/g}/o#*ZDM! Hȷ707 Z?_))))Z"C[:aO4[*a~ [ #4[Z~,N[ N[ N[E~)[+N[-N[ #[[[~,<[# >0[[~,4[)[E[~,[[# "ay2aO>͚dh\O2a!a"a2a`f[ [[[ \'\[w5\:cʿ[~c~#‚[>2a6:c>ê[xʂ[+~cÂ[xʂ[+>c> c>cÂ[[>#cm`!a>]Â[>#cm`:ae[!H\|_:cOF]:ae[TOO MANY CHARECTERS. MAX IS 252a!a"a2a^#V"\>!\*\*a*a~ ʳ\\#"a:a2a҂\!\^>!\*\*a*a6!a"a#"a:a2a\>2a\-ASCII FIL~]#c\#~#ym`Q`2E]~5]2D]#~5]c!D]55]]:E]Q`ym`!L] `?2 _" _2]"}]ʀ]a2]!]Fa!]"]!]^:b!*]y]~#.,-$*^+/&!\´]#~:bO~c#Ã]N# 6~^#^6#^^"#: __͢_:cm`** _2y_~2c#~2c#:y_!z_P_:cO>[c_>]c> c:{_=2{_P_>2{_ym``fk_:z_/2z_`fn_^"#͢_!_ `:cm` WARNING ONL:cOm` `!_ `:c!_ `_ ERRO IN LINE*c|0c|0c}0c}0c!c>w~`c!c4# `c* s#r#" * +V+^" y2b ff:bO!Xd ~X`> c<_`O> c> c2c>͚d¡`^#V>!`!`:``f:cʲ`c"``:a!af:a`:a!:a!af:a`:a!!"a2aa!#aO  ~2a!a5f!a2a!aFaa^#V#"Ba~2Ea#f:Ea!!"azzaOFxʑayda#6Ña#wʑaʑa da#6ÑaO~ڗaʌa #6#y5f*a"aa|«a}«aq|a!ay2a5f*aaÑaFaO #6 waza d d!Xd 4 %d6%d!yd 4 %d6y2Vd>͚d8dff2Wd^#V!Nd!Wd>:VdO:Wdʸd!A ¦dd#~#^#VN#!A dd~#d"]f^#=fV#= f*]f*]f^#V#N#F#N#F"]f__{Pfs+=\fr+=\fs+=Of!fiff> |f!D !f^%BAD CHANNEL NUMBEfÕgÕgg(ggÕgÕgÕgÚgfÃgÌgÕgÕgÕgÕgÕgÕgÕgÕg_mg|f*f:lggf2lgf!#g)gf:lgDgmg|Kg*Dg7>|^g2lgDg2lgDg*g|! "g__7:g·g\!g^>2g:gg\!g^_<2g!~ɀ&INPUT FILE REA 22PPt This is the release date of the disk. TIME COM TIME ASM & *************************** B A R G R A F v. 1.8 ************************** Copyrigh 1985/Veikk Rekunen/SUOKUG Th autho take n responsibilit fo an damag o los du t th us o th program becaus th progra has not been tested for all possible uses. GENERAL: BARGRAPH.CO͠ an BARGRAPH.DO for graphic packag fo th '8 Kaypros Subsequentl i shoul wor onl i thos Kaypro wit th graphic capability Al version o BARGRAPH.COM whos versio numbe i smalle tha 2. ma freel b copie t friend an acquaintances bu the mus no b sol no include i an packag fo sal withou prio writte permission from the author. All enquiries should be addressed to Veikko Rekunen SF-61400 YLISTARO F I N L A N D BARGRAPȠ versio 1.8 i stil anythin bu perfect bu i offer limite possibilit t displa informatio a ba graphs Du t th larg filesiz tha SBASI forms th progra ha som limitations Th mos notable are: - only 12 bars at one time - no printer support as yet THE USE OF THE PROGRAM: You start the program as any other CP//M program by writing: BARGRAPH or bargra Th progra accept bot smal an capita letter I AN OTHE OPTIO bu whe savin o loadin graphs Thu i i possibl t us smal letter almost exclusively. Th progra i suppose t b ver eas t use Whe yo star th progra (b writin fo instanc BARGRAP an pressing) yo wil firs se the copyright notice. Pressing any key will move onwards to the main menu. This is what the main menu looks like: M A I N M E N U (G)ive values (H)eadings (V)alue change (D)raw graph (C)hange scale (S)ave graph on disk (L)oad file from disk (Q)UIT!  Yo no mak you choic merel b pressin th appropriat key Yo ma us eithe smal o capita letters D NO PRES I thi cas yo wil se th bars outlines I yo pres "F o "f" the wil b fille bars I i eas t accentuat th bar b definin ever secon on (O)pe an th other (F)ull Usuall (O)pe bar ar goo enough a th (F)ul bars are rather brighty. Eac ba ma b give nam (maximu characters) Thes name wil b printe belo th bars I yo ente mor character tha 5 th res wil be truncated. After you have entered the name press . Afte yo hav give th dat fo on bar yo ma g o enterin dat b pressin Afte th headin print th presen maximu valu o th bars. (V)alue change Firs yo wil b aske whethe yo merel wis t chnag al th presen bar int (O)pe o (F)ul bars Pressin " + TIME + X @ 17,0 * EOF:DBASTIME.CMD ; Program ....: DBASTIME.ASM ; Author .....: Gary Conway ; Created ....: 7 Feb. 1986 ; Update .....: ; Notice .....: Copyright 1986 Infinity Design Concepts ; ; ESC EQU 1BH CLS EQU 1Ah LF EQU 0Ah CR EQU 0Dh ORG 43000 ;put it in a safe spot ; --------------------------------------------- ; ;jump table ; JMP MENU ;draw menu lines JMP CLOCK ;clock routine ; ;spares ; JMP 0 JMP 0 JMP 0 JMP 0 JMP 0 JMP 0 ; --------------------------------------------- ; ;the following variables can be read with PEEK() in dBASE ;they are valid after a call to CLOCK ; MEMCON: THOURS: DS 2 ; +0,+1 = HOURS TMINUTES: DS 2 ; +2,+3 = MINUTES TMONTH: DS 2 ; +4,+5 = MONTH TDAY: DS 2 ; +6,+7 = DAY TYEAR: DS 2 ; +8,+9 = YEAR AMPM: DS 1 ; 1 = PM, 0 = AM DS 20 ;spare ; ;draw menu lines ; MENU: LXI H,MENUTBL CALL PRTABLE RET PRTABLE: ; ; This routine will print lines from a table in the following format ; V1,H1,V2,H2 ; HL points to the table at entry  ; the last byte of the table must be FF DCX H PTBL1: LXI D,PLINE +1 MVI C,4 PTLP: INX H INX D MOV A,M CPI 0FFH RZ STAX D DCR C JNZ PTLP PUSH H CALL ILPRT PLINE: DB ESC,'L',0,0,0,0,00 POP H JMP PTBL1 ; ;in-line print routine ; ILPRT: XTHL MOV A,M INX H XTHL ORA A RZ PUSH H MOV E,A CALL CO POP H JMP ILPRT CO: PUSH B! PUSH D! PUSH H MOV E,A MVI C,2 CALL 5 POP H! POP D! POP B RET MENUTBL: DB 36,32,36,190 ;top line DB 46,32,46,190 ;second line DB 36,32,88,32 ;left line DB 36,190,88,190 ;right line DB 88,32,88,190 ;lower line DB 0FFH ; ;clock routine ; CLOCK: ; Ports for NS-MM58167A National Clock Chip ; ----------------------------------------- ; PORT ; 34D 22H RTCS - Status Port R/W ; 36D 24H RTCD - Data Port R/W ; 32D 20H RTCA - Attribute Port R/O ; ----------------------------------------- ; ; ; ; initialize clock mvi a,15 out 34 ; send to clock init port ; THE RETURNED VALUES ARE IN BCD AND MUST BE CONVERTED ; TO DECIMAL OR SOMETHING IN ORDER TO BE USED ; *************************************************** ; ---------- GET HOURS CODE ------------ **** ; *************************************************** HOURS: mvi a,0 ; 0 is code for AM sta ampm mvi a,04 ; put 4 in A out 32 ; send to port 32 in 36 ; get hours from port 36 mov e,a ; store code temp in E in 22h ; check status port cpi 01h ; if status bit D0 is 1 => bad read jz HOURS mov a,e ; recall stored code cpi 20h ; test for 8 oclock pm jz OCLOCK8 cpi 21h ; test for 9 oclock pm jz OCLOCK8 cpi 22h ; test for 10 oclock pm jz OCLOCK10 cpi 23h ; test for 11 oclock pm jz OCLOCK10 cpi 00h ; test for 00h jnz pass mvi a,12h ; if zero => make 12h jmp store ; go store PASS: cpi 12h ; jm store ; if < 12h => go store cpi 12h jz codepm ; if = 12h => go store sui 12h ; subtract 12h if > 12h CODEPM: mov e,a ; save A into E mvi a,1 ; 1 is code for pm sta ampm mov a,e jmp store OCLOCK8: sui 18h ; subtract 18h from 20->21h ; converts 8->9 oclock to regular time jmp codepm ; go set the pm code to 1 OCLOCK10: sui 12h ; subtract 12h from 22->23 ; converts 10->11 oclock to regular time jmp CODEPM ; go set the pm code to 1 STORE: sta memry ; store ; --------------------------------------------------- MIN: ; *************************************************** ; ---------- GET MINUTES CODE ------------ **** ; *************************************************** mvi a,03 ; put 3 in A **** out 32 ; send to port 32 **** in 36 ; get minutes from port 36 **** sta memry+1 ; store **** in 22h ; get status code **** cpi 01h ; if 1 => bad read **** jz MIN ; if bad => go read again **** ; **** ; *************************************************** ; --------------------------------------------------- ; *************************************************** MONTH: ; *************************************************** ; ---------- GET MONTHS CODE ------------ **** ; *************************************************** mvi a,07 ; put 7 in A **** out 32 ; send to port 32 **** in 36 ; get months from port 36 **** sta memry+2 ; store **** in 22h ; get status code **** cpi 01h ; if 1 => bad read **** jz MONTH ; if bad => go read again **** ; **** ; *************************************************** ; --------------------------------------------------- ; *************************************************** DAYS: ; *************************************************** ; ---------- GET DAYS CODE ------------ **** ; *************************************************** mvi a,06 ; put 6 in A **** out 32 ; send to port 32 **** in 36 ; get days from port 36 **** sta memry+3 ; store **** in 22h ; get status code **** cpi 01h ; if 1 => bad read **** jz DAYS ; if bad => go read again **** ; **** ; *************************************************** ; --------------------------------------------------- ; *************************************************** YEARS: ; *************************************************** ; --------------- GET YEARS CODE --------- **** ; *************************************************** **** mvi a,09 ; put 9 in A **** out 32 ; send to port 32 **** in 36 ; get years from port 36 **** sta memry+4 ; store **** in 22h ; get status code **** cpi 01h ; if 1 => bad read **** jz YEARS ; i f1 => go read again **** ; **** ; *************************************************** ; --------------------------------------------------- ; *************************************************** WKDAYS: ; *************************************************** ; ---------- GET WEEKDAYS CODE ------------ **** ; *************************************************** mvi a,05 ; put 5 in A **** out 32 ; send to port 32 **** in 36 ; get weekdays from port 36 **** sta memry+5 ; store **** in 22h ; get status code **** cpi 01h ; if 1 => bad read **** jz WKDAYS ; if 1 => go read again **** ; **** ; *************************************************** ; --------------------------------------------------- ; *************************************************** ; This next little piece of code is due to the fact that ; Kaypro does not utilize the power up/down functions of ; the clock chip correctly, and sometimes during this ; transition period, the clock can become disrupted. If ; we leave the chip pointing to hundredth's of seconds ; then if there is a time change during transition, it won't ; make much difference. ; ; ---------- Leave PIO Pointing to hundredth's of seconds ; mvi a,01 out 20h ; --------------------------------------------------------- ; **************************************** ; CONVERT FROM BCD TO DECIMAL ; **************************************** CONVERT: lxi d,memry lxi h,memcon mvi c,6 LOOP: ldax d rar! rar! rar! rar! ani 0Fh ; zero high order nibble adi 30h ; convert to ASCII mov m,a ; and store to memcon ldax d ; reload char for low order nibble conversion ani 0Fh ; zero high order nibble inx h adi 30h ; convert to ASCII mov m,a ; and store to memcon inx d ; increment source pointer inx h ; increment dest. pointer dcr c ; decrement loop ctr. jnz loop RET ; ; ============= VARIABLE AREA ================= memry: DS 6 ; =============================================== ; END :10A7F800C32FA8C387A8C30000C30000C30000C3B9 :08A808000000C30000C30000C2 :10A82F002172A8CD36A8C92B114CA80E0423137E74 :10A83F00FEFFC8120DC23CA8E5CD56A81B4C000068 :10A84F00000000E1C337A8E37E23E3B7C8E55FCD7F :10A85F0065A8E1C356A8C5D5E55F0E02CD0500E199 :10A86F00D1C1C9242024BE2E202EBE24205820243E :10A87F00BE58BE582058BEFF3E0FD3223E00321A9C :10A88F00A83E04D320DB245FDB22FE01CA8BA87B0A :10A89F00FE20CAD3A8FE21CAD3A8FE22CAD8A8FE7A :10A8AF0023CAD8A8FE00C2BDA83E12C3DDA8FE125F :10A8BF00FADDA8FE12CAC9A8D6125F3E01321AA845 :10A8CF007BC3DDA8D618C3C9A8D612C3C9A83254F2 :10A8DF00A93E03D320DB243255A9DB22FE01CAE0B7 :10A8EF00A83E07D320DB243256A9DB22FE01CAF093 :10A8FF00A83E06D320DB243257A9DB22FE01CA0073 :10A90F00A93E09D320DB243258A9DB22FE01CA104D :10A91F00A93E05D320DB243259A9DB22FE01CA2030 :10A92F00A93E01D3201154A92110A80E061A1F1FEA :10A93F001F1FE60FC630771AE60F23C63077132393 :05A94F000DC23CA9C986 :0000000000 ͫCopyright (C) 1984 BORLAND IncAKaypro with hiliteedP= ERC1B1~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!͍!s.*Ͳ3+ŔB0bŔC0bŔB1bŔC1bŔB2bŔC2bŔB3bŔC3b "y*[ &}oE!! !\ Ͳ!}2[ !"\!*y5z!"^!`Ͳ*\! m͇!*\n&! N}oEk!*\!"\-!*\! m͇!*\n&! a}oE!!` !*\n&e.!`Ͳ*\!"\k!*^#!!` !{Ͳ!{ !c*!!Po&"T!\!!s!! 5zG""R!\*R!?s*R#%"*!!\o&"T*T!aE#*T! "P*P!*P!5zʵ""RR!P*Rn&b*R#Î"R! b*P! *P! 5z""RR!P*Rn&b*R#"Ŕ b!"V*!o&"T*T! "P*T!aE#*P!*P!5z~#"RR!P*Rn&b*R#W#R! b*P! *P! 5z#"RR!P*Rn&b*R#á#Ŕ b*V!"V*V!NE$!"VR͐b*T!NE#cŔGKPBROWSE.COM version 5.0 for the Kaypro/84 series, Veikko Rekunen, 1986͐bR͐bŔGThe program present text files, including those written with WordStar's͐bŔJD-option on the Kaypro screen and shows boldface, doublestrike, underlines͐bŔ,and the alternate and normal character sets.͐bR͐b ŔM Copyright 1986, Veikko Rekunen, 61400 YLISTARO, F I N L A N D ͐b R͐bŔL This program may be copied for non-commercial purposes, but it MAY NOT be͐bŔM sold or included in any package to be sold without a prior written consent͐bŔE from the author. Programmed in Borland Int'l's Turbo Pascal, v 2.0͐b! !Ŕ This is ^BbŔboldface text!bŔ^Bb! !Ŕ This is ^Db Ŕdouble strike text!b Ŕ^D͐b! !Ŕ This is ^Sb< Ŕunderlined text!bJ Ŕ^S͐b! !Ŕ This is ^Ab Ŕ alternate b Ŕ!^N and this normal character set.b!! ŔPress any key...... b ͠EV(c!!! Ŕ"File to read, to finish: b < !+._bJ 5"B*B!a}2! \E(!}2*&E3)Ŕbc!! Ŕ NO SUCH FILE!b!B_(!̾8!b*&"Ⱦ*Ⱦ!͛Em)*Ⱦ!R"Ⱦs)*Ⱦ"Ⱦ*Ⱦ! NEʏ)*ʾ!"ʾ*Ⱦ!NEʥ)!-"Ⱦ*Ⱦ!NEʻ)!-"Ⱦ*Ⱦ}2*&Rb*ž&!NE)!}2ž)!}2ž*ƾ&!NE*!}2ƾ< %*!}2ƾJ *ľ&!NEH*!}2ľ U*!}2ľ !! Ŕ#Press any other key for next screenb Ŕ b . Ŕ to stop...b!8!b!"ʾ *&!NE*!}2þc*ƾ&E+< *ž&E+*ľ&E%+ *¾&E2+ !X oE_+!X !Ͳ!}2Ǿi+!}2Ǿ$*Ǿ&!NE~+_(!̾! <!̾Ϳ(*&}oE~+! \Eʷ+Õ-!}2Ǿ!}2ƾ!}2ž!}2ľ!}2þ!}2¾!"ʾc!̾͝}oEʄ,4)*ʾ!tE,V**þ&E,Ä,*&R0,)Á,R@,)Á,RP,&*Á,Rg,!}2¾ Á,R~,!}2¾ Á,)+!̾bR͐bR͐b J . Ŕ b Ŕ That was the end of the text!͐b R͐bŔ b Ŕ'Do you wish to read another file (Y/N) b!8!b R͐bR͐b*&(!NNEi+c!! R͐bŔ b Ŕ KPBROWSE.COM ͐b R͐bŔ b Ŕ Copyright 1986, Veikko Rekunen ͐b !!!Bcb R͐  ******************************************************************************* * KPBROWSE.COM * * v 5.0 * * Copyright 1986, Veikko Rekunen / SUOKUG * * * * (SUOKUG = Suomen Kaypro Users' Group, the Kaypro Users' Group of Finland) * * * * This program may freely be copied for non-commercial purposes, but it may * * not be sold or included in any package for sale without a prior written * * consent from the author, Veikko Rekunen, SF-61400 YLISTARO, F I N L A N D * ******************************************************************************* Th progra present tex file i th '8 CP/ Kaypro on screenfu a th time Bot WordSta an straigh ASCI file ma b presented I th fil i WordSta file boldfaced doublestruck underlined an alternat an norma character ar displayed Thi make i possibl t easil chec i an o thes marker hav bee mislai o omitted. NOTE A i i impossibl t determin whethe th progra i use correctly th autho TAKE N RESPONSIBILITY fo possibl corrupte files N file hav bee corrupte i test performe b th author bu yo neve know! KPBROWSE.CO͠ s fa work i th '8 CP/ Kaypro only bu i shoul b rathe eas t modif th includ fil KPVIDEO.PA fo an individua compute tha ha thes capabilitie o a leas som o them hav als attempte t writ specia progra fo th Osborne- calle OSBROWSE.COM i cas yo ar interested. Th progra wa writte a a exercis i Borlan International' Turb Pasca v 2.00. How to use KPBROWSE.COM: To the prompt A> (or B>) where the A or B is the disk drive letter, write either A>KPBROWSE and the program will prompt you for your choice, or A>KPBROWSE FILENAME.TYP where the L: is the optional disk drive, if you files are not on the logged disk. I yo wis t abor th progra whe prompte fo filename pres onl I th fil i no o th disk yo wil ge a erro message I yo d no wis t se th entir file th presentatio ma b stoppe afte an screenfu o tex merel b pressin th ' ') Do Begin Comm_L_Arg:=Comm_L_Arg+Command_Line[J]; J:=J+1; End; End; Command_Line_Argument:=Comm_L_Arg; End; Procedure GetDIR; {Modified from Turbo Tutor} const Search_First : Integer = $11; Search_Next : Integer = $12; Set_DMA : Integer = $1A; var Counter,Error, Loop, Start : Integer; FCB : array[0..25] of Byte absolute $005C; DMA : array[0..255] of Byte; begin ClrScr; Error := BDos(Set_DMA,Addr(DMA)); FCB[0] := 0; for Loop := 1 to 11 do FCB[Loop] := ord('?'); Error := BDos(Search_First,Addr(FCB)); if Error <> 255 then begin Start := Error * 32; for Loop:= Start+1 to Start+8 do Write(Char(Mem[Addr(DMA)+Loop])); Write(' '); for Loop:= Start+9 to Start+11 do Write(Char(Mem[Addr(DMA)+Loop])); Write(' '); Counter:=2; end; repeat Error := BDos(Search_Next); Start := Error * 32; if Error <> 255 then begin for Loop:= Start+1 to Start+8 do Write(Char(Mem[Addr(DMA)+Loop])); Write(' '); for Loop:= Start+9 to Start+11 do Write(Char(Mem[Addr(DMA)+Loop])); Write(' '); Counter:=Counter+1; end; If Counter=4 then begin Counter:=1;WriteLn; end; until Error=255 end; Procedure Copyright_Notice; Begin; ClrScr; WriteLn('KPBROWSE.COM version 5.0 for the Kaypro/84 series, Veikko Rekunen, 1986'); WriteLn; WriteLn('The program present text files, including those written with WordStar''s'); WriteLn('D-option on the Kaypro screen and shows boldface, doublestrike, underlines'); WriteLn('and the alternate and normal character sets.');WriteLn;Dim;Inverse; WriteLn(' Copyright 1986, Veikko Rekunen, 61400 YLISTARO, F I N L A N D ') ;DimAway;InverseAway;WriteLn; WriteLn(' This program may be copied for non-commercial purposes, but it MAY NOT be'); WriteLn(' sold or included in any package to be sold without a prior written consent'); WriteLn(' from the author. Programmed in Borland Int''l''s Turbo Pascal, v 2.0'); GotoXy(10,14); Write('This is ^B');Inverse;Write('boldface text!'); InverseAway;Write('^B');GotoXy(10,16); Write('This is ^D');Inverse;Dim;Write('double strike text!'); DimAway;InverseAway;WriteLn('^D');GotoXy(10,18); Write('This is ^S');Underline;Write('underlined text!'); UnderlineAway;WriteLn('^S');GotoXy(10,20); Write('This is ^A');Dim;Write('alternate ');DimAway; Write('^N and this normal character set.'); GotoXy(16,24);Dim;Inverse; Write('Press any key...... ');DimAway;InverseAway; Repeat until Keypressed; End; Procedure Filename_question; Begin; ClrScr;GetDIR; GotoXy(16,24);Dim;Inverse; Write('File to read, to finish: ');DimAway;InverseAway;Underline; ReadLn(Filename);UnderlineAway; End; Procedure IOchecking; Var IOcode : Integer; Begin; IOcode:=IOresult; IOerror:=(IOcode<>0); If Filename='' then IOerror:=False; If IOerror then begin; Write(^G^G); ClrScr; GotoXy(28,12); Inverse; Write('NO SUCH FILE!'); Delay(1000); Filename_question; End; End; Procedure Read_Character; Begin; Read(Filevariable,One_Character); { These lines filter} Code:=Ord(One_Character); { the WS bit eight } If Code>127 Then Code:=Code-128 else Code:=Code; If Code=13 then Line_number:=Line_number+1; If Code=31 then Code:=45; If Code=30 then Code:=45; One_Character:=Chr(Code); End; Procedure Write_Character; begin Write(One_Character); End; Procedure Boldfacing; begin If Boldface_sign=False then begin Boldface_sign:=True; Inverse; end else begin Boldface_sign:=False; InverseAway;  end; end; Procedure Underlining; begin If Underline_sign=False then begin Underline_sign:=True; Underline; end else begin Underline_sign:=False; UnderlineAway; end; end; Procedure Doublestriking; begin If Doublestrike_sign=False then begin Doublestrike_sign:=True; Dim;Inverse; end else begin Doublestrike_sign:=False; DimAway;InverseAway; end; end; Procedure Screen_Full; begin GotoXy(1,24); Dim;Inverse; Write('Press any other key for next screen');DimAway;Blink; Write(' ');Dim;BlinkAway;Write('to stop...'); Read(Kbd,Go_On2); Line_number:=1; DimAway;InverseAway; If Ord(Go_On2) = 27 then Interrupt_sign:=True; ClrScr; If Underline_sign then begin; Underline; end; If Boldface_sign then begin Inverse; end; If Doublestrike_sign then begin Dim;Inverse; end; If Alternate_sign then begin; Dim; end; End; Begin If Command_Line_Argument(1)<>'' then begin Filename:=Command_Line_Argument(1); CPM_line:=True; end else begin CPM_line:=False; Copyright_Notice; End; Repeat begin; If CPM_line=False then Filename_question; {$I-} Repeat begin; Assign(Filevariable,Filename); Reset(Filevariable);IOchecking; end until Not IOerror; {$I+} If Filename='' then Goto Finish; CPM_line:=False;Underline_sign:=False;Boldface_sign:=False; Doublestrike_sign:=False;Interrupt_sign:=False;Alternate_sign:=False; Line_number:=1; ClrScr; While not Eof(Filevariable) do begin Read_Character; If Line_number>=22 then Screen_Full; If Interrupt_sign then goto Interrupt; begin Case One_Character of ^B : Boldfacing; ^S : Underlining; ^D : Doublestriking; ^A : begin Alternate_sign:=True; Dim; end; ^N : begin Alternate_sign:=False; DimAway; end; else Write_Character; end; end; end; Interrupt: Close(Filevariable); WriteLn;WriteLn;DimAway;InverseAway;UnderlineAway;BlinkAway; Write(' ');Dim;Inverse; WriteLn(' That was the end of the text!'); DimAway;InverseAway;WriteLn; Write(' ');Dim;Inverse; Write('Do you wish to read another file (Y/N) ');Read(Kbd,Go_On); DimAway;InverseAway;WriteLn;WriteLn; End until UpCase(Go_On)='N'; Finish: ClrScr;GotoXy(1,10); WriteLn;Write(' ');Dim;Inverse; WriteLn(' KPBROWSE.COM '); InverseAway;DimAway; WriteLn;Write(' ');Dim;Inverse; WriteLn(' Copyright 1986, Veikko Rekunen '); InverseAway;DimAway; GotoXy(1,24); Delay(2000);ClrScr; End. Procedure Inverse; Begin; Write(^['B0') End; Procedure InverseAway; Begin; Write(^['C0') End; Procedure Dim; Begin; Write(^['B1') End; Procedure DimAway; Begin; Write(^['C1') End; Procedure Blink; Begin; Write(^['B2') End; Procedure BlinkAway; Begin; Write(^['C2') End; Procedure Underline; Begin; Write(^['B3') End; Procedure UnderlineAway; Begin; Write(^['C3') End; Version 2.0!9"1B > >L>">2!> $_",{ t!t"y#y^>~~~_>2!{~jj2> $2"ʁ> $2 "ʑ> $2 "ʡ> $2 "ʱ> $2 "> ! 0w#0w#  : g:g>:g:g:g:!̃t :g:g>/g:g:g>/g:g:g *_  = ] $=!] $ am$ pm$B1B3= <-.. Welcome from Infinity Design Concepts ..->C1C3 $ Time: Date:$DISK3 e&SAMPLER z*AMO-ARC h*FOGSCANDEXE (h ORDRFORMDOC C$ FOGSCAN DOC g]FOGSCANCCOM fSETFGSCCCOM d~3FGSCNBBSCOM dl\lFOG-CPM DTA m*FOG-CPM IXP n*FOG-CPM NDX n*DX6; Program...: TIME.ASM ; Author....: Gary Conway ; Notice....: Copyright 1985, Infinity Design Concepts ; Date......: 06.09.85 ; Update....: 07.10.85 ; Version...: 2.0 ; ; This program will read the Real Time Clock of the Kaypro and ; display the time and date on the screen. It can be assembled with ; ASM.COM or MAC.COM. org 100h wboot equ 0001h bdos equ 0005h cons equ 1 printf equ 9 conout equ 2 ; esc equ 1BH cls equ 1Ah lf equ 0Ah cr equ 0Dh jmp STRT NOTE: DB 'Version 2.0' STRT: ; ; ****************************** ; SET UP LOCAL STACK ; ****************************** lxi h,0 dad sp shld oldsp lxi sp,stktop ; ****************************** ; ; ****************************** ; PRINT date/time ; ****************************** lxi d,signon mvi c,printf call bdos ; ; ****************************** ; ; ****************************** ; SET UP THE CUSTOM CURSOR ; ****************************** mvi a,0Ah out 28d ;access the 6845 video cont roller mvi a,76 out 29d ; ****************************** ; ; ; ; Ports for NS-MM58167A National Clock Chip ; ----------------------------------------- ; PORT ; 34D 22H RTCS - Status Port R/W ; 36D 24H RTCD - Data Port R/W ; 32D 20H RTCA - Attribute Port R/O ; ----------------------------------------- ; ; ; ; initialize clock mvi a,15 out 34 ; send to clock init port ; THE RETURNED VALUES ARE IN BCD AND MUST BE CONVERTED ; TO DECIMAL OR SOMETHING IN ORDER TO BE USED ; *************************************************** ; ---------- GET HOURS CODE ------------ **** ; *************************************************** HOURS: mvi a,0 ; 0 is code for AM sta ampm mvi a,04 ; put 4 in A out 32 ; send to port 32 in 36 ; get hours from port 36 mov e,a ; store code temp in E in 22h ; check status port cpi 01h ; if status bit D0 is 1 => bad read jz HOURS mov a,e ; recall stored code cpi 20h ; test for 8 oclock pm jz OCLOCK8 cpi 21h ; test for 9 oclock pm jz OCLOCK8 cpi 22h ; test for 10 oclock pm jz OCLOCK10 cpi 23h ; test for 11 oclock pm jz OCLOCK10 cpi 00h ; test for 00h jnz pass mvi a,12h ; if zero => make 12h jmp store ; go store PASS: cpi 12h ; jm store ; if < 12h => go store cpi 12h jz store ; if = 12h => go store sui 12h ; subtract 12h if > 12h CODEPM: mov e,a ; save A into E mvi a,1 ; 1 is code for pm sta ampm mov a,e jmp store OCLOCK8: sui 18h ; subtract 18h from 20->21h ; converts 8->9 oclock to regular time jmp codepm ; go set the pm code to 1 OCLOCK10: sui 12h ; subtract 12h from 22->23 ; converts 10->11 oclock to regular time jmp CODEPM ; go set the pm code to 1 STORE: sta memry ; store ; --------------------------------------------------- MIN: ; *************************************************** ; ---------- GET MINUTES CODE ------------ **** ; *************************************************** mvi a,03 ; put 3 in A  **** out 32 ; send to port 32 **** in 36 ; get minutes from port 36 **** sta memry+1 ; store **** in 22h ; get status code **** cpi 01h ; if 1 => bad read **** jz MIN ; if bad => go read again **** ; **** ; *************************************************** ; --------------------------------------------------- ; *************************************************** MONTH: ; *************************************************** ; ---------- GET MONTHS CODE ------------ **** ; *************************************************** mvi a,07 ; put 7 in A **** out 32 ; send to port 32 **** in 36 ; get months from port 36 **** sta memry+2 ; store **** in 22h ; get status code **** cpi 01h ; if 1 => bad read **** jz MONTH ; if bad => go read again **** ;  **** ; *************************************************** ; --------------------------------------------------- ; *************************************************** DAYS: ; *************************************************** ; ---------- GET DAYS CODE ------------ **** ; *************************************************** mvi a,06 ; put 6 in A **** out 32 ; send to port 32 **** in 36 ; get days from port 36 **** sta memry+3 ; store **** in 22h ; get status code **** cpi 01h ; if 1 => bad read **** jz DAYS ; if bad => go read again **** ; **** ; *************************************************** ; --------------------------------------------------- ; *************************************************** YEARS: ; *************************************************** ; --------------- GET YEARS CODE --------- **** ; *************************************************** **** mvi a,09 ; put 9 in A **** out 32 ; send to port 32 **** in 36 ; get years from port 36 **** sta memry+4 ; store **** in 22h ; get status code **** cpi 01h ; if 1 => bad read **** jz YEARS ; i f1 => go read again **** ; **** ; *************************************************** ; --------------------------------------------------- ; *************************************************** WKDAYS: ; *************************************************** ; ---------- GET WEEKDAYS CODE ------------ **** ; *************************************************** mvi a,05 ; put 5 in A **** out 32 ; send to port 32 **** in 36 ; get weekdays from port 36 **** sta memry+5! ; store **** in 22h ; get status code **** cpi 01h ; if 1 => bad read **** jz WKDAYS ; if 1 => go read again **** ; **** ; *************************************************** ; --------------------------------------------------- ; *************************************************** ; This next little piece of code is due to the fact that ; Kaypro does not utilize the power up/down functions of ; the clock chip correctly, and sometimes during this ; transition period, the clock can become disrupted. If ; we leave the chip pointing to hundredth's of seconds ; then if there is a time change during transition, it won't ; make much difference. ; ; ---------- Leave PIO Pointing to hundredth's of seconds ; mvi a,01 out 20h ; --------------------------------------------------------- ; **************************************** ; CONVERT FROM BCD TO DECIMAL ; **************************************** CONVERT: lxi d,memry lxi h,memcon mvi c,6 LOOP: ldax d rar! rar! rar! rar! ani 0Fh ; zero high order nibble adi 30h ; convert to ASCII mov m,a ; and store to memcon ldax d ; reload char for low order nibble conversion ani 0Fh ; zero high order nibble inx h adi 30h ; convert to ASCII mov m,a ; and store to memcon inx d ; increment source pointer inx h ; increment dest. pointer dcr c ; decrement loop ctr. jnz loop ; ; ; **************************************** ; PRINT CODES ON SCREEN ; **************************************** lxi d,pos1 ; print time mvi c,printf call bdos lda memcon call putchr lda memcon+1 call putchr mvi a,3Ah call putchr lda memcon+2 call putchr lda memcon+3 call putchr lda ampm ; get am/pm code 0 = am ; 1 = pm cpi 1 cz pmprint cnz amprint ; lxi d,pos2 ; print date mvi c,printf call bdos lda memcon+4 call putchr lda memcon+5 call putchr mvi a,'/' ; load '/' for date call putchr lda memcon+6 call putchr lda memcon+7 call putchr mvi a,'/' ; load '/' for date call putchr lda memcon+8 call putchr lda memcon+9 call putchr ; ; ; ********************************************* ; EXIT: ; ********** EXIT ROUTINE ******************* lxi d,endmsg mvi c,printf call bdos lhld oldsp sphl ret ; ********************************************* ; ; ; ****************************** ; SEND CHAR TO CONSOLE ; ****************************** ; PUTCHR: push h! push b! push d! mov e,a mvi c,conout call bdos pop d! pop b! pop h! ret ; ****************************** ; AMPRINT: ; PRINT "AM" push h! push b! push d lxi d,ammsg mvi c,printf call bdos pop d! pop b! pop h ret ; PMPRINT: ; PRINT "PM" push h! push b! push d lxi d,pmmsg mvi c,printf call bdos pop d! pop b! pop h ret ; ; ; +++++++++++++ MESSAGES +++++++++++++++ ; pos1: DB ESC,'=',20h,5Dh,' $' pos2: DB ESC,'=',21h,5Dh,' $' ammsg: DB ' am$' pmmsg: DB ' pm$' endmsg: DB ESC,'B','1',ESC,'B','3' DB ESC,'=',20h,20h,'<-.. Welcome from Infinity Design ' DB 'Concepts ..->',ESC,'C','1',ESC,'C','3',cr,lf,lf,'$' signon: DB cls,09h,09h,09h,09h,09h,09h,09h,'Time:' DB cr,lf,09h,09h,09h,09h,09h,09h,09h,'Date:$' ; ; ; ============= VARIABLE AREA ================= oldsp: DS 2 memry: DS 6 memcon: DS 20 ampm: DS 1 ; =============================================== ; ; ; =============== STACK AREA ================== DS 32 stktop: ; ; =============================================== ; END ARROWS PAS ')AUTOBOOTCOM 2&AUTOBOOTPAS < BARGRAPHCOM Eh-06-00 86 `BARGRAPHDOC aDBASTIMECMD iDBASTIMEASM k!DBASTIMEHEX tKPBROWSECOM u-KPBROWSEDOC KPBROWSEPAS ,&PRINTLST9!"6͖*   =""6#}|BD!"6 "}00-!~G#~ }q+ph##h"p#w *7"7"7"7*7*7l&*7}!h6#6#q#p*7"7*7|`i"7* 3X<  x}H%Ɛ'@'_ ERROR $ AT PC $"DM6#6#!"*{w#zw!">2DM}|*ڋ"^#V{^#V{_zWڋ{z*w#ww#w###s#rq#p#!5#ʋOM+F+N*}|!"~#fo"{z }|"~#~#~#O~G(}|*##^#V}|Fs#r##q#pw#w#~w#~w7!N#F#~#foov}|w`i}^:0d"7"6"6I*6*6ìd"7!9DM$!8"7:7_27:727͏ NN:7#i$ $a>$9 :7* *a>*.) #>.27Ñ-R #J.>->2727OÑ>27i\ 9 27q> 27 #p,†>27p!7q.¢>27 #¢ Ö!7q^µ è!7q->27 >287$:8O2727!8r#:7=27:7> 9 ":7i 9 :7!76uy@G)8/%9 2727277$p:727Gy@w:7!7>i >ʝ4!75<27:7!7G:7¶:7OxGx8W?< =z#z#!8~!:7:7!7Bi B:7]:7]>-9 BG:7OW*"$"$ :7!73i 3O>z9 3y9 :7:7:8:8p> 9 >09 > 288#!!7~276i 9 :8@27!7 ڪ<ʩw>ð6!7p27/O!8 #ʼ  y27=/27:7>09  9 :8=!75:7. 27!7~>.9 :7!7/N:71:7G:7)G*27x. :8H!75N 9 1:7. :7ʋ>E9 !7:7e5~ p/<-Gy9 x/ x Gy9 x09 :7ʜi 9 2727:7:727d"7|:7:7 ~W#^#:7z~#[ |~:727͏ NS"7"7:7/-!<&E\ 9  /-  ? 9 E͇]ͥ:7> !64O:7x* Y͇Çͥ( >26> h> h͇âͥ:7:6Ҫ> d<°ͫÇͫ:7ʧ*6&|TL:6ڰ͊>ðçÇ!7:6=ć27!8~5*7~% +"7) 0G>09 / [ 0:7:7:7Y Y >,e *7:8> >-*7|PU| >27~G#N#"7"7`i"7"7 !#² & / & ! \  x 27͏ UN. x§ "7*7| *7"7*7 +"7*7~#"727*7~#"7*7|+"7 > 9 d"7!7454! :7#/!&$\ $>$9 : *l *>*V - #.>-V \ 9 = *7++!"7:00!{~Gwog:00! !*| F#N# N # x  ä"727́(  *7#"7  6  >26:7ʸ 2727GW27  ~"ʖ " Ç ~"ʍ 271 ~,ʲ æ U *7͕:6 o&##h6#6Gw# *7s#r:6# 1 :7+~ " :7=   !7q~!6 w !7rimproper input - reenter $͕ͭ|{ ##hp#q#w xq s#r͕ͻ xʖ ! h w#wͭDM; ͻ ; ͭDM5ͻ 5*7DM*7}| ODF#N# "7 go O o& o&}2 o&E{2 xn&}!92 >O; ä"7>27y27w# J +2727 [ +r -u >270r .¤ :7*/27y 0z :7=27Ò E e ͋һ y*G :727 x :7 :7<27z y G-_x ͋*G͋#OxG{*G:7@*7wɯ27y27+c-f>27c)DM)) O ͋W:7zz/W{/_s#r:7=27~#0:?^#V* }||~!7N q!7 ^!6!7 n&*A8"7*A8!4#!DE<́|EX!CE!"́*A82́:|j ẂSIEZ"7WEX́%IE<*A8^w#Vw* }|!"[8>2_8zW{_!_85*[8Ұ |g}o"[8*]8|g}o"]8Û*]8*[8DM*A8;"C8*C8"C8BN|>>>)=; h"A8;p#z= *A8 "H8"J8}2N8RE8*A8$ ~#I$*A8 E8 w#^=͟7~#DF*A8r+s"E8:N8=R|R!G8~@wR"Q8)|ʯ>(>NF|~#~#G*A8:́=6#> 6 #=x:w#28͇6 6.28͇6 +~"b8!d8"`8xw#Lp`8|*A8!DM!:+ ws ʃ>w6:8ڮ.›# ”7*´:Y8>*Ҵ>286?#`{_:*?w#:Y8:Z8IF>?x*Q8)7w#w*C8*J8}O|Gr# x*J8*H8#{z"H828g>2Z8Ͷ2Z8́u:8^*A8!~w:8r*A8!~w <ʘ*A8!^w#Vw*A8. s#ŕګxEX*Q8)8^#f|OEk28g>2Z8Ͷ2Z8 ́|*A8!:~!~w <MÉ|EX͟8 s#r͟7 ^#VzFU"A8*Q8)8 ^#V"S8=*E8"W8!9"U8G8 ڋ:N8RB=iRUi|IRi+DM*E8͐*C8{o>g+{z_yW!*A8 s#r!G8~w"H8*J8"L8Ŕ!5!9"U8mU*mU*mU+́,!5!9"U8mU+mU+*O8*C8s#r*A8!0! ~#~!G8>w:N828 —!85ʩÃ:G82G8*C8+"L8*J8"L8!G8~w"H8`:G8`*H8~iͷ *E8|REi5!9"U8*L8*H8#{z"H8:G8`R*H8n&:G8i"H8`!6 <,g ]Gy2: p#:*E8|̷6!"8 ʒ"ʒ!86,!86!6"8õ28!6"828:8 ²ͷ !8 *8w#"8!8~ ls#rR~#foʢF#NyOx~*E8hs#rr#sͷ#wz»ͷͷR454; ~>"ls#r*E8|Rͷ R!G8~ЇwWRi*H8*C8{_zW{z<I=)!G8>wR*U8*S8|DWiG:7xh *E8|ʀ*W8|ERi+"W8ҏ*C8"H8:G8­`*A8! N#F p+q*H8w!G8>w5!9"U8}hR:7>"hhͮ:7>"h\ͨ\͊:7>,h:7>"hhͮ:7>"h5\ͨ5\͊:7h+ *W8|Y++T> h+|L> h> h+ R*A8!0! w#w*H8+"H8!G8~wR*U8*S8|EF͟7 ^w#VwzCUp"A8=8 w#wx!7)~#foĝ*8#"8{z͟7# ^w#VwzDUp"A8 !9"U8!Ͷ<FRi*A8"8!Ͷ<ʖ*A8 *8~# h ́چ|EXx*8"A8x!x*8"A8x!!>2Y8Ͷ*A8 6?##6?!"8_*A8~=_"7<EX]"7<EX##FNW`*C8O yŷ>~##7/K~#G@*8"8 x2Y8*8)b*U8[PY[ |¯##h"8iqqͿͿ*8! 9SLz |[PY[y_xWx# xͿͿɯ>[7[7?zN#Fy1x+Ͱ|F~~ws#r[\n&ͿAC!hiq++*zSS[yxҒPY##h"8iBKqͿ*8|[++ͿzSS[yOxG ##h"8iBKqͿ*8|~DMxWzW|~#+Ϳ![yOxG]yx:PYh"8iBKqͿ*8SS!"8O!7~28w26ͨ*6&##hxw#q#6q:827 !64^w|~[a~~_w# x¼[! hiBKq++"8|SS!"8S[S`i͞$##h"8i x=G*8p#z2Sq*8+|"8>Ϳ*8|DM~G#N#zw#s#xʂ@͛wyʔOw# ‹yOw#w#w#w# ›^#V* }||~!9 ~#fo%##~#=`i!9BK'$DM!9'$!9! 9N#F#'$@#BK$!9DM$#DM$!9DMS! 9DM$!9DM#W@7 !9DM$͠7 $DM$!9DMͳÙ!9DM$!9DM@=!Ê͠=!Üͳ@4 Ê4 Ü!9DM$͠4 Ñ! 9DM$!9DM@ "Ê "Ü͠4 "DM"Ê!9DM$J%!9!9x!9DM ҆$7 J%@PP"8 *8!9~w{_!y+##!82*8͞$ |g"8!H$>'-w# >@2828͐#8$ *%*70 8*8"8>28:8WO $!8:8w i 8$$!8s 8'$!8:8w:8W!8ʻ 8$r28Ҡ m#ʻ 8o&G>Ow# ­ q#µ :8!8 8H$ >m#!8#!!8#8!8!7>' # Ð#+>'w#>'w #!:828͐#!8~P :8 6!8~ "+w# @_! "6w{288!8~#o!!8~#z!N#!8q#Š!!8"8~#!ʸ!G8*8K$Ҵ!#4?¥!!G8*8'w#K$!!85*8#“!͐#8#!8~ȯw+6+w!:8<28OF!8 怮w "_#~ȓA"w>28`i"8288*8>'#>'#>'#>'#>'#>'#>'>'w7"*8H$#~'w!8~w:8="28Q#!8N#5"8'$͐#8#!DZA"28x28"OG>F28!8r#"i`)!8~'w## #Ð#!8 +D# #?>#! #!8J#=> pT]w+ V#~w!88G# v#:8зʪ#!8Q#!85q!88w+²#p!855#p8 + + + + + + '# P'> '# o g"8`i8+$*8|$ɵ!8+$~#~#~#~#~#~#~#~#!8'w#'w#'w#'w#'w#'w#'w!9~A҃$6/OGʕ$#6=Ž$x>#w|ڤ$DM!xį$y)ҵ$)һ$)$)$)$)$)$)|"|%|%$%z$0%x)yOxGyx%GyO#=%ogeo$$)9%#1%O%$`i!:8Arinter, RT, or iskfile? (P, C, or D): PPrinterDDiskfileCCRT&Unable to open MAST.LST on current du:Ffilename.typ - dsk | filename.typ - dsk | filename.typ - dskF----------------------------------------------------------------------DONE:  [ any key or uit ] Q All done.&Unable to open MAST.LST on current du:, Enter today's date (MM/DD/YY): 9 ++ Outputting MAST.LST to the printer ++%MAST.LST - Master CP/M Catalog as of  pageFfilename.typ - dsk | filename.typ - dsk | filename.typ - dskF----------------------------------------------------------------------DONE: All done.&Unable to open MAST.LST on current du:, Enter today's date (MM/DD/YY): @Enter drive to create MASTER.LST on (A,B,C,or c/r for default): Default MASTER.LSTAA A:MASTER.LSTBB B:MASTER.LSTCC C:MASTER.LST; Program ABORTED! MASTER.LST file already exists! ++ Creating file ++&'MASTER.LST - Master CP/M Catalog as of & &Ffilename.typ - dsk | filename.typ - dsk | filename.typ - dsk&F----------------------------------------------------------------------DONE:& & & & & & &  DWME3 Operating system reports an error!!3 Check disk for FREE space available Error Code --> 6!&"7"7!&"78!&%8!B&%!$"8*8}/o|/g"8!c8%! c8%!c8%!c8%!c8%! c8%*8!o&t8%*8!s&t8%*8!w&t8%*8!{&t8%*8!&t8%*8!&t8%->!8*8!&t*8 ct*8 ctͫ*8*8.!!ͻ-ͫ*8ͫ*8*86.!!ͻ-ͫ*8ͫ*8*88!&%8!&%8!&%!s5͠*8*8t!&t*8tͼ͇͇͇!&ͫ*8ͫ "8*8cͩ!)'ͺ©.!,'ͼq0*8cͩ!5'ͺ.!8'ͼ42*8cͩ!B'ͺ.Á.!E'ͼ*8ͦ|/͇͇*8J'tͼ͝/*8!!!>*!!\0'!"8!"8."8!r'ͼ!'ͼ͇T0*8{z_/!"8͇!5!8n*8!!!(ͺŒ/*8ͼI/*8! y! (ͺ©/*8ͼ\0*8!yͫ*8+|*8++|/*8ͫ*8#"8*8#"8*8-{z/I/!"8͇*8!(t*8tͫ "8*8cͩ!-(ͺK0*8ͫ!0(ͫ*8ͫ!͝͝T0-"8I/*8|I/͇*8K(tͼ͝*8ͦ|—0͇͇*8V(tͼ͝ë0*8!!!>*-"8*8ͼ!~( !9> *9ͯ++++++++|0ë0-"8͇͇!(ͫ!!2'!"8!"8!"9>*9(t!)tͫ*9~͇!&)ͼ!n)ͼ*9+|B1͇2*8{z[1!"8͇!5!8n*8!!!)ͺˆ1*8ͼE1*8! y!)ͺ¥1*8ͼ2*8!yͫ*8+|*8++|1*8ͫ*8#"8*8#"8*8{z1E1!"8*8ͼ*9#"91*8|E1>!͝-"8͇*8)tͼ͝*8ͦ|Z2͇͇*8)tͼ͝n2*8!!!>*-"8*8ͼ!) !9> *9ͯ++++++++|ʞ2n2-"8͇͇!)*ͫ*8ͫ "8*8 {oz2!k*ͼ9!t*%O3*8cͩ!*ͺ3!*ͼ9!*%O3*8cͩ!*ͺ'3!*ͼ9!*%O3*8cͩ!*ͺL3!*ͼ9!*%O3ð2*9ͦ|3-"8͇͇͇*8!*tͼ͝Ó3*9!!!>͇͇͇*8!*t*8t*9t!+tͫ!!35'!"8!#+s !5*9&+t!O+s !5!R+!U+s !5!X+!+s !5!+5*8++++|44!"85!5!8n*8!!!+ͺv4*89%!+s !5*84*8! y!+ͺ¨4*8 9%!,s !5*835*8+|4*8!y 9%*8++|4*8!y 9%*8+++|4*8!y9%*8#"84*8|4!,s !5* 9*8* 9*8*9!͝!͝-"8͇͇͇*9,tͼ* 9),t*8tͼ͝ͳ!D,ͺͳ!H,ͺҵ5-"8͇!L,ͼ͇*8,tͼ5-"8͇*8!,tͫͳͼ͝͝ >y ((( ((}|:Y8>*Ҵ>286?#`{_:*?w#:Y8:Z8IF>?x*Q8)7w#w*DBASTIMEHEX tKPBROWSECOM u-KPBROWSEDOC KPBROWSEPAS  PRINTLST and KPPRTLST v1.2 Program written and (C) 11/24/1984 by Steven L. Sanders A utility program to list the CP/M Master Catalog file. PRINTLST.COM is generic, usable by any CP/M computer KPPRTLST.COM is for video-able Kaypros only This program will output the contents of the MAST.LST file generated by XCATxx.COM into a 3-across format either to the CRT, printer, or diskfile. I found all the other listing programs to be big space-wasters when it came to the number of sheets needed to print-out a big catalog. PRINTLST ignores all other disk numbers except for the first one generated by XCAT, if you need a cross-ref listing then use XCAT's list output function. To use, run XCATxx on your MAST.CAT file first and choose the diskfile output option and generate the needed MAST.LST file. PRINTLST.COM will look for MAST.LST on the logged du:, if it is not there the program aborts with an error message. If it does find the MAST.LST file it will then prompt for CRT display , output to printer, or diskfile options. Before outputting to the printer or diskfile the program will prompt for entry of the date to be included in the listing. If the diskfile option is chosen, you then enter the destination drive letter (A, B, C, or c/r for default drive). If the file MASTER.LST already exists on the specified destination drive - the program aborts with a message saying "File already exists!" PRINTLST will format the MAST.LST file into a 3-across listing like so: filename.typ - dsk | filename.typ - dsk | filename.typ - dsk ---------------------------------------------------------------------- K10VIDEO.IQF - 117 | K10Z2ND1.LBR - 118 | K10Z348K.LBR - 216 K10ZCPR2.LBR - 166 | K10ZCPR3.LBR - 194 | K2-XMD88.LBR - 167 and so on ... If listing to the CRT, it displays 15 lines (45 filenames) and then prompts you to "hit any key or uit" before displaying more. If outputting to the printer, it lists %57 lines (171 filenames) per page, numbers the pages, and continues to the end of the file. If outputting to diskfile, the title and header lines are printed once at the beginning and the listing is continuous to the end of the file. The main reason for this program was to conservatively list the contents of a large MAST.CAT file (mine has 4000+ files) for easy and quick referrence. My catalog used to take 60+ pages if using XCAT's printer option, now it only takes 21 pages. Bug reports, problems, improvements: Steve Sanders (Sysop) DATACOM NETWORK RCPM SYSTEM #1 (813) 937-3608 DATACOM NETWORK RCPM SYSTEM #2 (813) 937-6829 DATACOM NETWORK RCPM SYSTEM #3 (404) 632-2109 -06-00 86 `BARGRAPHDOC aDBASTIMECMD iDBASTIMEASM k!DBASTIMEHEX tKPBROWSECOM u-KPBROWSEDOC KPBROWSEPAS  Fog Library Disk FOG-CPM.036 Copyright (1986) 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. Kaypro programs. Filename Description -06-00 .86 This is the release date of the disk. -CPM036 .DOC This is the description of the disk contents. ARROWK1 .COM C6AE 12K [ArrowKey Programs 1 of 4] Arrow key programs for Kaypro 1, 4, and II. Turbo Pascal code is included. ARROWK4 .COM 98E9 12K [ArrowKey Programs 2 of 4] ARROWKII.COM BD47 12K [ArrowKey Programs 3 of 4] ARROWS .PAS C75B 11K [ArrowKey Programs 4 of 4] AUTOBOOT.COM 0F8E 10K [Autoboot 1 of 2] Allows all Kaypro users to specify the command to be executed after a "cold boot". Turbo Pascal source code is included. AUTOBOOT.PAS 37B8 9K [Autoboot 2 of 2] BARGRAPH.COM AC21 27K [Bargraph 1 of 2] Graphics program for '84 series Kaypros. Allows you to make bar graphs on screen from input values. BARGRAPH.DOC E9A9 8K [Bargraph 2 of 2] DBASTIME.CMD 0AF4 2K [dBASE Time 1 of 3] Works with dBASE II to read internal clock on Kaypros.  Displays clock information and stores time in dBASE. DBASTIME.ASM A3C0 9K [dBASE Time 2 of 3] DBASTIME.HEX CFE9 1K [dBASE Time 3 of 3] KPBROWSE.COM 10F3 12K [Kaypro Browse 1 of 4] Gives screen-at-a-time viewing of files on '84 series Kaypros Shows underline, bold, etc. on screen. Turbo Pascal source code is included. KPBROWSE.DOC 8798 4K [Kaypro Browse 2 of 4] KPBROWSE.PAS D3F9 9K [Kaypro Browse 3 of 4] KPVIDEO .PAS 7F85 1K [Kaypro Browse 4 of 4] TIME .COM D81A 1K [TIME 1 of 2] Read and display the Kaypro clock. TIME .ASM F070 10K [TIME 2 of 2] KPPRTLST.COM FCC5 14K [Kaypro PrintList 1 of 2] For '84 series Kaypros. Prints MAST.LST file three across. KPPRTLST.DOC 374D 3K [Kaypro PrintList 2 of 2] oboot 1 of 2] Allows all Kaypro users to specify the comm&'