IMD 1.16: 29/05/2007 18:20:08 FOGCPM.051 --FOGCPM051FLYKPRO COM FLYKPRO COM-06-00 86 FLYKPRO DOCGAMES COM !"#$%&'GAMES COM()*+,-./01234567GAMES COM889:;<=>-CPM051 DOCGAMES DOC?K10BAKUPCOM@ABCK10BAKUPDOCDEKP-CLS COMFKPCPM COMHGHIJKLMNOKPCPM DOCPQKPCPM BUG RSKSTRO484COMTUVWKSTROK10COMXYZ[KSTROKE2COM\]^_KSTROKESDOC`abcdefghijklmnoKSTROKESDOCpKSTROKESASMqrstuvwxyz{|}~KSTROKESASM!NU-LABELCOMRNU-LABELDOCNU-LABELBAS?OLDLABELCOMFOLDLABELDOCKP-TYPERCOM$KP-TYPERDOC.This is the disk name. GxI"^#V#Óy,y( %6s#r#s#r#͒#>""Y">["Y"s#rw+>z,+Ͷ*ʏ"*#6+>1x#s#r>w++͝&+>#>9%͒# % %ʍ$"!# #ʧ"##a"?!7#""!͎-!21 ͝0!21 ͝0X1" !!-͝0 !!-͝0!21!21-!21-͝0!21͝0÷ !!-/ "ͧ121-/$"ͧ121-å 0("s1,00"s14͏/4X14"X18" t0<s1,t0@s14X18" 8/,"X1,"͏/,*X1,"B/,443/,4t-/8"!C-s1 /,"!C-s1$͉͞+!21͞+-/8"!C-s1 /4"!C-s1$͉͞+<0,4!C-s1Dk1"-!~!͞+/H"s1H8/HD<0LP!C͸-g/"0P"0"s1T=/T"X1T"X1X"X18"X1\"X1`"0L"0"s1T=/T"PX1T")<0dh!C͸-g/"i0h"s1T=/T"X1T"X1X"X18"X1\"X1`"0d"s1T=/T"X1T")B/lp/p"s1T=/T"X1T"X1X"X18"X1\"X1`"/l"s1T=/T"%X1T")8/T`9X1T`<0`T!C-s1T0T"F1!-Y0͋0!C-0"s1tͩ/08s1xX1|X-/x"!C-s1 /|"!C-s1$͉͞+!͞+X1\k1"!t͏10-!z!͞+-!v!͞+-!r!͞+/H"s1H8/H-!+8/T`+X1T`<0`Ts1T0T"08s1xX1|X-/x"!C-s1 /|"!C-s1$͉͞+X1\k1"Û-!n!͞+/H"s1H8/HX1"-X1 "X1$"͉͞+!g!͞+-X1 "X1$"͉͞+!g!͞+-X1 "X1$"͉͞+!`!-!-͞+-X1 "X1$"͉͞+!g!͞+-X1 "X1$}"͉͞+!g!͞+-X1 "X1$"͉͞+!Y!-!-+X1"-X1 "X1$"͉͞+!`!-!-+-X1 "X1$"͉͞+!g!͞+-X1 "X1$"͉͞+!g!͞+-X1 "X1$}"͉͞+!g!͞+-X1 "X1$"͉͞+!g!͞+-X1 "X1$"͉͞+!Y!-!-+X1y"-X1 "X1$"͉͞+!g!͞+-X1 "X1$"͉͞+!g!͞+-X1 "X1$"͉͞+!g!͞+-X1 "X1$"͉͞+!g!͞+-X1 "X1$"͉͞+!R!-!-+-X1 "X1$}"͉͞+!R!-!-+ͼ(*0s1!-F10u"Y00s1<0s1͔/Z ͊/ - !>!-͞+!̓+9!! -+-! ͞+!$!͞+!̓+n!! -+ͧ.-!!+-!-͞+-! +-!!+-!!+-! +-!!+͟-͝0!.| !͏1;1#ͅ1s1 !͏16(! / ! / ! .R0-!͞+͟-͝0!.|R -!͞+ͨ-! ͞+͟-͝0!.|{ ! .R0-!͞+CX1m"X1i"X1e"X1e"X1a"X1a"X1]"X1]"X1p"X1@Y"X10Y"X1hU"X1PQ"X1M"X1"X1dI"X1lE"X1<"X1(A"X1L="X1="0l5"!C!/*0(09"s10u"0d0Ls1d/Ls1L/L*0u"s1LX1L0(1"e0(F10"Y0F10L-"Y0F10<u"0s1(3/()" X1"./(%" X1y"͙/ /l!"s1l/d"s1d0<"!C͸-e0s18/("3 ÷ -X1 "X1$ "͉͞+! ͞+!21! -! -͞+k1"v /H"s1H8/H "o -!21!n!-͞+k1"æ /H"s1H8/H " 0-X1 "X1$%"͉͞+k1""͟-͝0!.|! ."-!n!͞+*R -!-+0*|go*|go|g}o|O /l"s1l*|go*|go|g}o|ʄ /l"s1l6*Rœ /<"s1<9*R´ /<"s1<*|go*|go|g}o| ͪ2*R J*|go*|go|g}o|z/H"s1H8/H" ͅ/dG/"m./L!3/!|./!|G/"3/("X1d!X1L!X1"3/lE"X1lE"/l"s1l./("S͙/</<"s1<X1q"͙/X1q"/l!s1l-X1 !X1$"͉͞+-g!!-!21-͞+!d-!Cͧ+-X1 !X1$!͉͞+- !-͞+!L-!Cͧ+͏/bX1y"X1y"0<s1<-X1 E"X1$!͉͞+-g!!-!21-͞+!-!Cͧ+8/<!X1<!͏/<X1<!X1@<ͺX10(X1plT<0dh!C͸-X/"X1hd<0PL!C͸-X/"#X1PL͙//s1./!FX1"ͅ/TX1!-X1 "X1$!͉͞+-g!!-!21-͞+!-!Cͧ+B/0("e0s1G/"./!^./= /l"s1lX1"X1d!= -X1 "X1$!͉-͞+k1"/H"s1H8/H! - ! -! -+k1"E/H"s1H8/HM">-!͞+k1"k/H"s1H8/H!då -!͞+-X1 "X1$!͉͞+- !\ -! -+6/!s1-X1 "X1$"͉͞+B/!- !A -! -+= B/!- !& -! -+= B/!2X1! = B/!T- ! -! -+= B/!jX1" = B/!- !-! -+= 3/!= 0!s1/"]/d/"X/d(3/"/- !-! -+͔/= /"s1= <0ds1- !-͞+!-!C̓+! -+= <0ds1- !-͞+!-!C̓+! -+= 3/= /!s1=/!3/d"<0!!C͸-s1-X1 "X1$"͉͞+-!-!C̓+! -+= -X1 "X1$"͉͞+- !{-! -+= -X1 "X1$"͉͞+- !_-! -+= X1!X1" = -!+k1"j!f.-!+/H"s1H8/H!T-!+Ë ""î " xhhhhhhhhhx xhhhhhhhx" " h ALTITUDEh h CLIMB h xhhhhhhhhhhhhhx xhhhhhCOMMUNICATIONShhhhhhx "W\ " h 5000 h h 25 h h HEADING h h h"ë " h 4500 h h 20 h h 281 h h h" " h 4000 h h 15 h hhhhhhhhhhhhhhh hhhhhhhhhhhhhhhhhhhhhhhhhhj "MR " h 3500 h h 10 h +++++ xhhhhhhhhhhhx"Ú " h 3000 h h 5 h + + h FUEL h" " h 2500 h h 0 h + + h h"49 " h 2000 h h -5 h + + hhhhhhhhhhhhh"kp " h 1500 h h-10 h +hhhh hhhhh hhhh+"á " h 1000 h h-15 h + +" " h 0500 h h-20 h + + STALL WARNING [ ]"#( " h 0000 h h-25 h + +"TY " h[ 2500 ]h h[ 6 ]h +++++"é " hhhhhhhhhhhhhhhhhhhhhhhhhhh AIRSPEED hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh" " h40 60 80 100 120 140 160 180 200 h"  " h"`e " hhhhhhhhhhhhhhhhhhhhhhhhhhhh POWER hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh"õ " h0 10 20 30 40 50 60 70 80 90 100h" " h"" " hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh"-!,+-!+-!!+-!+-!!+-!+-!}+-![+-!?+-!+-!+-!+-!!+-!+-!!+-!q+-!2+-!+-!+-!+-!!+-!~+-!!+-!?+-!+-!+-!+-!g+-!!+-!6+-!!+̓$̓$.9 KAYPRO VERSION RSELLERS * ENJOY B.Eiben-DECjif touchdown is GENTLE !;The fuel supply is marginal !! A forced landing is possible>at touchdown. A 100 foot hill is at the far end of the runway.;results in a bounce. The Descent rate must be below -10 fps!=!A!G!0333} @$pZbxfHh 44l `H@;z8@ȆH \LL}<|zz@z` j`jz $p 0 *(x@`tZyHVU*H@L p̓$[[[[ BASLIB #970028 5.1 - OWNED BY MICROSOFT, 1979 2;#2>#*^#V"<###^#V"?#!$"#6#6P>2$>2$>2$;#ü#>#ü#ó#_DF#~怩OùF 4óN~_#~W#~O!~/woG}_}W}OEC!9"#** $!6#}$|$6!#6#z2$*|S$> $6#s#r#=H$>2#>2#>2#2#"#!#"#Z#L5͡5 STOk'Ã$'*#.. . .........<4*#|Š$:#$*#|$&*  s#r*  {w#6"#*#*#>2#'͡5Error -!%%~<%=%#~#% %#ͧ5}$Syntax Error in DATRETURN without GOSU Type MismatcOut of DatIllegal Function CalFloating OverfloInteger OverfloOut of Memor Subscript Out of Rang Division By ZerOut of String SpacString Formula Too CompleRESUME without Erro2Field Overflo3Internal Erro4Bad File Numbe5File Not Foun6Bad File Mod7File Already Ope9Disk I/O Erro:File Already Exist=Disk Ful>Input Past En?Bad Record Numbe@Bad File NamCToo Many FileUnprintable Erro!9N#F*~#~('~+.'~#~('+^#V###'###'|:'~#fo!B'͡5 Internal Error - No Line Number #*~#'͡5 at line&͉''>ͽ'<ڢ'Ͷ'Œ'ͽ'<ڢ'0AͶ'Ҟ'}_|W!'B~#fo>͡5 at address|w-}w-'> A> A!9"#*#EK'!F(@+)!(**(|g)]"#"#%I(Random Number Seed (-32768 to 32767) )ڸ(|*#*#ʟ())() )( ( ("#"#K!"CaM]ß(!n(xG6HÄF|JJDM!>I I7>{_zW}o|g=I×I|G J|GOoygG*J|XHiFIg{oH J! ~w! ~G+NFrJ/<#Fwx+ bJF+N9F!G>w2! EK:2xJKJ4ʴNqKJ>K!2KG:J!Vwz#N#"(!9"("(y2(*#|)*#!*"#A~#*(B~*ʄ**7 *8"(F*R*&6*C*C*C*C_*t7*C_*6*C*C*(Bw*~#"(,*)~*!"#~,"*#"~ʣ*ʣ*# ’**"©*#"(x"ʾ* ʾ*+~ ʳ*y!4_*͡5?Redo from Start *(<4!*@+*(:(O)*(+~+$+++ +w +/+++~#fo͠0"(!(5*(!~2?+#~#^#V͓5++24@t$'+ì,'+ì,'+ì,'͡+ì,'+,'+,'+,'3,,'+|,'+|,'+|,'3,|,C+C+"C+H~# +x25:#£,s,",94<,~,dA#,9~, dA#%,>25:#£,F#~#foxs,,j,a,~#dAU,j,24s,>"dAG:#xs, B*#+~<ʟ,=ʟ,###~Ÿ,*# B!,*#*#~=ҳ,/<,,=ÿ,,:#> dAs,>,dAW*##^ --+=- Bz{-{_ -!$"#!"#2#0-!#~6#w~!P-e-NG-(i&î$ G~#u-#g-++̀-0:ڋ-A|£$}ڣ$!$wɭ͕#!->ʲ-͟#w>!4'͚Iڣ$';3--2424~#~#foBXNcL~24o&~ʣ$#^#V++24o&'.6C>].'.&6C>].'.t7C>B'.~,"z.#"~ʑ.ʑ.# }.(ã$"—.#.y!4͠0* ^#V#"#"#.^#V#!"#+V+^"#>2#.8.:#̧.*#B~=(æ$B~,/#"#ɧ/*#"#+V+^"#(ì$'͛H>I/>I/>I/>I/>I/>^#V#^#V#$B>s/>s/>s/>s/>s/>^#V#!C$B>Û/>Û/>Û/>Û/>Û/>^#V#!($B^#͂B!C͝B>/>/>/>/>/>2/~#fo##͍B^#V#'J/^#͂B/͍B^#V#'K0^#͂B0͍B^#V#'LKB0^#͂Bn0^#V#ͿBH0͍B:Cʄ02C#à$:Cʗ02C#à$'30~##++IJ4>B+V+^+0+r+s4'͠0~#^#V!4S0>20|'1+})N##1~#fo :01!9"#!#4 ~B#ã$|£$'!9>!4^#͂BC͝B^#V#^#V#͝B͍B^#V#C͝BL'ͿBͲ1!C͝B'Ͳ1!(JcLMH^#V#'1'1'z1|1|LM^#V1GN22y22#~#fo~#fo;2#12 !2 y;2y<.E2)E2)2424hhe]2`2c2gf2i2gl2o2gr2u2hx2{2e~2u2i2N2j_!T24š25*U2"U2~#N#F#22 BÝ2yxҿ2 Ý2+++6@#yw#xw+++6###!T2~623Ú2J3*U2#~#~Қ2(Ú$!*W2"U2~#^#V#G3&3B 3|23 3++~_w#~Ww# 33*W2DM~#^#V#ڤ3d3S3+ze4+{e4##{z~#q#p_S3y™3x™3DMS3~#™3S3YP+++"U26@###{_zW+r+sɷ3*[2|3(Ý$^#V+"[2͊2#s#r+++r+s##!33*5{z*5?4}|~# 4yG;3xB3Ͳ44*5*5Ba455[4Ͳ44###B4͇4͡5 during G.C. #͇4͡5 #͡5 Internal Error - String Space Corrup#N#F*W2yx4*Y2yx4++`i+V+^B|4##6+6+~6  >@++*[2"[2s#r+J3*U2#~_#~W%5(é$r+s##6"Y2###![2~#foI5B95<*W2"U2*Y2}o|g6@#s#r#6"Y2*5*5"[2}w>#w##Bt5++6+6]22N~A#=•5ͧ5~A#ç5W:V\x75^~V#~!c~#~#V,?6*C}/o|/g#"C|36L6!C~wɯ2C,?6H36*C36L,?6G>>7~ͨ##86è#5!DV6>!DC2]6# \6!DuF!D=7 D>>6>|}+!7}E77M+6!C>;G2C!7_K!7}E!D}E~_#~W#~ÓNJ!>J͝L6ɇ<o&36L*C*C7"C`i"C!C^#V#N#F#!7KoNx{dN!D6DMwg>NÈNA7:5Gw#A7<7V7!D=7C,?C,?47*C||<,?*C7P7!>J7f66Ó76:C2C:C @7:C´7ù77|/g}/o7! @:C77"C>256aj7 L} 606?>25`h7~&G?-*8+*8+? 9.ʷ8e<8Ef8?lT8LT8qT8Qe8:58>8~%8#8!8d8D–88?=??ڀ9–8_{_88š85,?!67,? –88*8#6t7Ö88#Ö86&6,?76=,?66!5F :5_ ":x*":{":Aq?B:EB:DB:0":,":.E:+60{N:+6${+p25!56 6*C*C25 ;E~ʪ::Ҋ:0ڊ: #~{:>DGy:"C`i"C#~+:-:0OxG:#~¯:`xE:y Қ:>25:|Қ::Ú:"C`i"C6#W<:5$;.;2;2;͞=607=+~0A;.7s;,?>"w#6+d;6-/</ f;:#p#w#6!5#z;ڑ<͖=zr=]>{̇6=r=:ʩ;p#6!5#:5~ ʮ;*ʮ;+;?-+$0;#?;++w;ï;;6%ژ<<>l6<9+6%6<47!D=7Ͳ6 =U=,?8=CO6>=>l6Q=8&=8U=,?g=t#6m=>l6I==60#s=‚=ͱ=60#=~={P7!>J7f6͏6>> ͱ=/>S6=>S6p#==!C6!>6>76??ͱ=7/{_#zW#yO++5>͸6#6p#'>>c>?>ͱ=N#F#*C/}o|gv>"Cp#=c>ͱ=w1_cƤ~@zZrN vH Tʚ;@B''d #~: ? ? ?0?<=:59?7-++??OX?HX?+d?m?7H#ʙ?s?(×$M!ͅ?ڃ?}0?)))صoÅ?M!ͫ?ک?}?0? ?? ))))صoë?a{ t7,?:C:C6:52525(×$(à$!"#!("(%@:?+6@͡5?6@p\Aj@:-A>\2-AP@5@1A+d@~1Ax@+1Ax@1A.A!(2-A{@\AO<@:-Aʑ@>\1A2-Ay@4A7 "A @ µ@6@@4A6@@6@1A> 1A>]@@>#d@@6.A!(FAx@ x@x<>Ayq#1A x@> 1A\AA x@{@:?+.Aw'A>^1A@1A.A~ UA> 1A1A#FA͟#*# {A#~+ dA~=A*#!$"#dA"#> dA> dA> ͯ#> ͯ#*bA/B GHBCB~#foEB##RB>_B~+~?~jB+#wB+ wB&)))^#V#!C͝B͝Bw#w#w#w#IP>CB>CB ~#=B!B#~ B BɅo$ɧGw#B{z倃( ozzpH{,q{ō(Yz$)zƀǔȕɔ(% }o|gzRzzʀj(% $)zzˀP$)z̀E(}9o|=gz $)|g}oz(}9o|=gz $)|g}oz3pHI{,qI{0-r{8-0H D;GF2C:C%G͈Nx/F+N+=DE!DXE!C>q#p#=[E!C}E"0COE>E*E*0C0H?N:C?N!DN#FCLͧGqʺEGFGx £EšE%G!CGòEj0 TeB׳]h!I.k $EXNGF$EG!D}E9-!Cq#~++w+qFÈNDNn"~`35zr1{r1h!I0HʈNyO2D{F0HʈN:CEҍF/<E9҈N:DO7MG2D!D;G:D2Cx!DC GFF4G:CF!D~++wÈN!C4#F4F+6!DC# Fɯ# GG%G/!COyw#GG:CNG!CVwz# 3Gx&G?N!CaGFGxF!Cw?NF~w# cG$EXNGÂG$EG!DuF$EXNGÞG$EGE!DeFy2D!C7C~q+´GqGNsY+GG W~w+GG!CGLGXN!Cw#HÈNH}GHHMHGH7M!CF#^#V#NNMH}D~#5HG++NyÐNC3H!CXN>ʄHbH9-́N͋IoN!D6DMg>N| M>\HakXN!|IJÞHXNxکH9-"~KLMcLVMxOK!HLKH!HLKI!HJI!HëJd&X4#]IXN II!IQY͝L"I!SI.MeK 8͝LMI!\ILM!cIJ.M!bIͿJeK!kIëJ!|ILKI!IJ׳]b5~P$L~yI XNIcLIÈNXNIyNI͈NILMIfL͝L|dNI!IILM_JKJ>O!C~+>wÈNQYaNMÈN:C9Jh1JLMcLƁ9J.MRK!BJͿJJKQYaN͈N?NN|Yt&wz^Pc|u~r1aNiJ9->2C!JͿJLMogLJ }}{(qnz LMoNKͿJKLM~#XN=xKyNJJLJyNʈN:CaNK/<.M҈N7MgN!C2K~_#~W#~ON#4N.NNG~_#~W#~OMaMLOKyNʈN>OJLbKyNM͈NȯGCL"Cy2CFo%M.M!D*C:COҟKC4N÷KKg.*C:COzҠKKg.*C:CíKx<=K{_zWxG)yOHGNLKyNdN͈NCLy+F+F+Fw`h|;LgyL:CO|g}oxG-|L}LaMElaO L!C~Gx[Lƀ>Nw7Mw+ɷN?NoNx{dN!D6DMwgLz€L >N|1N{>2CaM/óN ҲN7>{_zW}o|g=©N|g}oNCZQN o-yOzW{_xGNC*CDM^#V#N#F҈N7MgN!C2K~_#~W#~ON#4N.NNG~_#~W#~OMaMLOKyNʈN>OJLbKyNM͈NȯGCL"Cy2CFo%M.M!D*C:COҟKC4N÷KKg.*C:COzҠKKg.*C:CíKx<=K{_zWxG)yOHGNLKyNdN͈NCLy+F+F+Fw`h|;LgyL:CO|g}oxG-|L}LaMElaO L!C~Gx[Lƀ>Nw7Mw+ɷN?NoNx{dN!D6DMwgLz€L >N|1N{>2CaM/jxw$"{3!f$"{$!:jͽyB-$!Qlͽy%ü3ͪt!<|%s!ll%s *$<|%s*$<|%s!$%sͪt! %s!"j%s͘r|"$_w!jͽy#4!"$! "$!Ï4!x4*$E}*$)s#rs#r*$#"$*$|ڈ4)P4*$#"$*$|ڟ4)J4ͪt! %s!"$"$͘rͳ|*$|zy&m!Ǐͺx|"$*$"$! 5*$*$}o|4ͪt!j%s5ͪt!j%s*$#"$*$*$z|5}|4ͪt!MlIs!"$*$)*$s#r*$#"$*$"$!"$÷5*$*$}o|•5*$*$}o|…5!"$"$Ü5!"$*$#"$Ü5*$#"$*$E}*$)^#V|Y5*$+|7*$E}*$)^#V|7*$+|6*$E}*$)^#V|6*$*$}o|P6*$E}*$)^#V|P6͘rzmy&m!Ǐͺx|"$*$k{9^::*$*$}o|u6*$|ʶ6!"$Ð6*$E}*$)^#V|¶6͘rzmy&m!Ǐͺx|"$*$k{9^:R;͘r{y&m!Ǐͺx|"$*$k{9^:*$*$}o|ʍ7*$E}*$)^#V|7*$*$}o|)7*$|j7!"$D7*$E}*$)^#V|j7͘rzmy&m!Ǐͺx|"$*$k{9:R;͘r{y&m!Ǐͺx|"$*$k{9:*$*$}o|²7*$|9!"$7*$E}*$)^#V|9͘r{y&m!Ǐͺx|"$*$k{9R;*$+|+9*$E}*$)^#V|+9*$*$}o|8*$E}*$)^#V|8*$*$}o|d8*$|ʥ8!"$8*$E}*$)^#V|¥8͘rzmy&m!Ǐͺx|"$*$k{^::R;͘r{y&m!Ǐͺx|"$*$k{^::*$*$}o|8*$|^:!"$9*$E}*$)^#V|^:͘r{y&m!Ǐͺx|"$*$k{^:R;*$*$}o|ʹ9*$E}*$)^#V|¹9*$*$}o|{9*$|:!"$y:*$E}*$)^#V|:͘r{y&m!Ǐͺx|"$*$k{:R;*$*$}o|9*$|L)=!"$*$"$*$"$ͦ?*$*$"$*$"$*$*$"$*$*$}o|g#Ù>ͦ?*$#"$*$*$z|>}|Ғ>*$*$"$*$*$}o|g"$*$+>ͦ?*$+"$*$*$zz>{z>*$*$}o|g"$"$*$*$}o|g"$*$+&?ͦ?*$+"$*$*$zz:?{z?*$*$}o|g"$*$*$"$*$*$}o|g#q?ͦ?*$#"$*$*$z|?}|j?*$)=*$#"$_w!iͽyV>%*$|ڳ?)go*$|?)?go|g}o*$|?)go|g}o*$|?)?go|g}o|N@!<|!=<|xw *$<|xw *$<|xw*$<|xw$"{ͪt!$%s*$+"$!4ͷ{$"{!4ͷ{$"{$!i"{$!i"{ !k{!i{xw !i{xw !i{xw$"{$!$xw!$xw!$xw$"{ͪt! s!iIs!"$"$ͪt!lIsͪt!lIs!"$!Jiͤr!$r$!Fiͽy%$!Qlͽy%!$x|"$*$|?A)ZAͪt! <|%s!<|%sAͪt!%iIsͪt!h%s%!h"{%!h͸yA_w%"{͘r|"$uAͪt!%Ish!%Hx|ʯA͞KI*$|ڿA)A$!$"{$!$"{IͬJ*$|A)Bͪt!hIs!A*$#"$*$/| B)A@ͪt!h%s*$@s!hͤr!$r$!QlͽyqL!$x|"$*$*$z|WB}|B*$|iBIòA*$|vB)҅Bͪt!hIsBͪt! Isͪt!h%s*$s!nh%s*$@sͪt!^h%s!P|!l%s!OhIs!"%"%" %ͬJ*$" %!" %ͪt!%%s$*$!z%s!P|!l%s!"$OKͬJ*$"$!"%*$|.C!"%%!%"{$*$!z%"{ͪt!:hIsͬJ* %#" %* %*$" %ͪt!%%s$*$!z%s!P|!l%sOKͬJ*$*$"$%!%"{$*$!z$"{ͪt!%%s!$Is*$|C!"%*%|HD*$|HDͪt!P|!l%s!*hs!%%s!%Is*$|,D* %|ʝDͪt! hIs*$*$}o|g"$F*$|D * %|oEͪt!P|!l%s!gs!%%s!%Is*%|©D*$|©Dͪt!gIsòAͪt!gIs*$|ͳ|*$|zly|"$F* %|oEͪt!gIsͪt!`g%s!f%"{Yg!%Hx#|zm!Ǐͺx|"$*$|Dͪt!%Is*$|jxw$"{3!f$"{$!:jͽyB-$!Qlͽy%ü3ͪt!<|%s!ll%s *$<|%s*$<|%s!$%sͪt! %s!"j%s͘r|"$_w!jͽy#4!"$! "$!Ï4!x4*$E}*$)s#rs#r*$#"$*$|ڈ4)P4*$#"$*$|ڟ4)J4ͪt! %s!"$"$͘rͳ|*$|zy&m!Ǐͺx|"$*$"$! 5*$*$}o|4ͪt!j%s5ͪt!j%s*$#"$*$*$z|5}|4ͪt!MlIs!"$*$)*$s#r*$#"$*$"$!"$÷5*$*$}o|•5*$*$}o|…5!"$"$Ü5!"$*$#"$Ü5*$#"$*$E}*$)^#V|Y5*$+|7*$E}*$)^#V|7*$+|6*$E}*$)^#V|6*$*$}o|P6*$E}*$)^#V|P6͘rzmy&m!Ǐͺx|"$*$k{9^::*$*$}o|u6*$|ʶ6!"$Ð6*$E}*$)^#V|¶6͘rzmy&m!Ǐͺx|"$*$k{9^:R;͘r{y&m!Ǐͺx|"$*$k{9^:*$*$}o|ʍ7*$E}*$)^#V|7*$*$}o|)7*$|j7!"$D7*$E}*$)^#V|j7͘rzmy&m!Ǐͺx|"$*$k{9:R;͘r{y&m!Ǐͺx|"$*$k{9:*$*$}o|²7*$|9!"$7*$E}*$)^#V|9͘r{y&m!Ǐͺx|"$*$k{9R;*$+|+9*$E}*$)^#V|+9*$*$}o|8*$E}*$)^#V|8*$*$}o|d8*$|ʥ8!"$8*$E}*$)^#V|¥8͘rzmy&m!Ǐͺx|"$*$k{^::R;͘r{y&m!Ǐͺx|"$*$k{^::*$*$}o|8*$|^:!"$9*$E}*$)^#V|^:͘r{y&m!Ǐͺx|"$*$k{^:R;*$*$}o|ʹ9*$E}*$)^#V|¹9*$*$}o|{9*$|:!"$y:*$E}*$)^#V|:͘r{y&m!Ǐͺx|"$*$k{:R;*$*$}o|9*$|L)=!"$*$"$*$"$ͦ?*$*$"$*$"$*$*$"$*$*$}o|g#Ù>ͦ?*$#"$*$*$z|>}|Ғ>*$*$"$*$*$}o|g"$*$+>ͦ?*$+"$*$*$zz>{z>*$*$}o|g"$"$*$*$}o|g"$*$+&?ͦ?*$+"$*$*$zz:?{z?*$*$}o|g"$*$*$"$*$*$}o|g#q?ͦ?*$#"$*$*$z|?}|j?*$)=*$#"$_w!iͽyV>%*$|ڳ?)go*$|?)?go|g}o*$|?)go|g}o*$|?)?go|g}o|N@!<|!=<|xw *$<|xw *$<|xw*$<|xw$"{ͪt!$%s*$+"$!4ͷ{$"{!4ͷ{$"{$!i"{$!i"{ !k{!i{xw !i{xw !i{xw$"{$!$xw!$xw!$xw$"{ͪt! s!iIs!"$"$ͪt!lIsͪt!lIs! "$!Jiͤr!$r$!Fiͽy%$!Qlͽy%!$x|"$*$|?A)ZAͪt! <|%s!<|%sAͪt!%iIsͪt!h%s%!h"{%!h͸yA_w%"{͘r|"$uAͪt!%Ish!%Hx|ʯA͞KI*$|ڿA)A$!$"{$!$"{IͬJ*$|A)Bͪt!hIs!A*$#"$*$/| B)A@ͪt!h%s*$@s!hͤr!$r$!QlͽyqL!$x|"$*$*$z|WB}|B*$|iBIòA*$|vB)҅Bͪt!hIsBͪt! Isͪt!h%s*$s!nh%s*$@sͪt!^h%s!P|!l%s!OhIs!"%"%" %ͬJ*$" %!" %ͪt!%%s$*$!z%s!P|!l%s!"$OKͬJ*$"$!"%*$|.C!"%%!%"{$*$!z%"{ͪt!:hIsͬJ* %#" %* %*$" %ͪt!%%s$*$!z%s!P|!l%sOKͬJ*$*$"$%!%"{$*$!z$"{ͪt!%%s!$Is*$|C!"%*%|HD*$|HDͪt!P|!l%s!*hs!%%s!%Is*$|,D* %|ʝDͪt! hIs*$*$}o|g"$F*$|D * %|oEͪt!P|!l%s!gs!%%s!%Is*%|©D*$|©Dͪt!gIsòAͪt!gIs*$|ͳ|*$|zly|"$F* %|oEͪt!gIsͪt!`g%s!f%"{Yg!%Hx#|zm!Ǐͺx|"$*$|Dͪt!%Is*$|j%s!f$"{ͪt!$Is$!Ql͙y$!a͙y|g}o|%äSͪt! %s!taIs!ÔX$!ma"{*$++++{$wͪt!$%s!tX*$E}*$)^#V|Xͪt!ga%s*$E}*$)^#V|GXͪt!aa%s*$E}*$)^#V|pXͪt![a%s*$#"$*$|ڄX)Wͪt!lIs*$#"$*$|ڤX)W!"$!"$*$*$zzX{zX*$|X)X*$"$*$*5%z|X}| Y*$|Y) Y*$"5%*$"=%*$"?%!"$*$#"$!Q" %*=%|6Y)#_*?%|FY)#_*=%|VY)#_*?%|fY)#_*=%++++"A%*?%++++"C%*C%E}*A%)^#V"$*?%*$E}*$*=%)^#V"$*$*?%}o|gE}*$}o|g*=%)^#VE}*$)*?%}o|gE}*$)}o|g*=%)^#VE} "$*$E}*?%}o|gE}*$E}}o|g*=%)^#VE}*$))*?%}o|gE}*$))}o|g*=%)^#V*$"$*$E}*$)*?%E}*$)*=%)^#VE} *$E}*?%E}*$E}*=%)^#VE}"$*$|3[*?%E}*=%)^#V|3[!"$*?%E}*=%)^#V|^*$|[[)Ҁ[*$|k[)ڀ[*$|€[!%" %*$|ڍ[)ڶ[*$|ڝ[)ڶ[*$|ڭ[)Ҷ[!P" %*$|[)[*$|[)[!P" %*$|[)\*$|[)\*$|\!H" %* %|,\*$|,\!" %*$|n\*$|J\!P" %*$|\\!P" %*$|n\!Q"$*$|{\)Ҡ\*$|ڋ\)ڠ\*$| \!)" %*$|ڭ\)\*$|ڽ\)\*$|\!)" %*$|\)]*$|\)]*$|\)]!P" %*$|]):]*$|%]):]*$|:]!("$*$|G])ڀ]*$|W])Ҁ]*$|g])ڀ]*$|w])Ҁ]!("$*$|ڍ])]*$|ڝ])]*$|ڭ])]*$|ڽ])]!("$*$|]*$|]*C%E}*A%))s#r*$|^!Q"$* %)#^#V*$)#^#Vz|'^}|1^* %"$*$)#^#V"]%| |u^*$| |u^*]%|l^)u^!J"$*$)#^#V"]%| |¹^*$| |¹^*]%|ڰ^)ҹ^!%"$*C%E}*A%)"_%^#V*$)#^#V"]%zz^{z^*]%*_%s#r*$|_)#_*=%*$"=%*?%*$"?%Y*$|8_*$|8_*$|V_*$|V_!"$*$|p_*$|p_!"$*$|Ž_*$|Ž_!"$*$|¨_*$|¨_!"$*$|_*$|_!"$*$|_*$|_!"$*$|_*$|_!"$ Yͪt! Isͪt!lIsͪt!lIsͪt!lIsͪt!aIsͪt!`Isͪt!`Isͪt!lIsͪt!g`Is!f$"{äS͵nj`Hit any key to start.J`is to get five counters in a row - horizontally, vertically or diagonally.D`the same way, with X's and O's, but the board is 19 x 19 and the aimEaGO BANG is like a large game of noughts and crosses. It is played in ^a O da X ja . pa 2mm2pm*^#V"nm##^#V"qm!3n"0n6#6P>27n>26n>25nmmmpmmm_TG!flG!"$,G*%|H*%|HͶG!fͼG!"$,GG!f!9"m*y%*s%Qn!6#}Qn|Qn6!n6#zdn*w%|ʅn> n6#s#r#=zn>2m>2m>2m2m"m!m" n͌mã STO͝qõn&r* n.. . .........͓*n|¼n:n*o*n|*o)q*s% s#r*s% {w#6"n*m*n>2n&rError -!Wo~Input Past En?Bad Record Numbe@Bad File NamCToo Many FileUnprintable Erro!9N#F*m%~#~Zq~+`q~#~Zq+^#V###8q###8q|lq~#fo!tq Internal Error - No Line Number m*m%~#r at line)qͻq&r>q at address|7w}7w&r> Ѝ> Ѝ!9"m*m)ڔr|*m*n{r))ܡr) )ܡr ܡr ܡr"n"mK!"ʏG]{r!JrL~2r#~#^#V++͉ڦn0r*n|r!ߙix%{*"n0rRs3t0r]s3t0rhs3t0r(s3t0rRsPt0r]sPt0rhsPt0rͺs^t0rRst0r]st0rhst0rͺstǏssÏss"Ǐ|sH~# tsx21:+n*ts©s#i<jt~ʥs<#Ùs#~ʥs <#ìs>21:+n*tF#~#foxsjtss~#" ,<W*0n#^ ̍tʇt+=ڇtz{ڟt{_Ñt0rͪtt!3n"0n!"n2+nv$Mt:rn:rn(n"{͉>2+n!!u",n:(nt2t2t2t:tG:(n*)n_x´u:ttt:t0u:tt*tDM*t}Vu:1t|$~ʍu<#Ju:1t*tEN#^#V` ʉu |u <‚u͉:tuX~#\v ªu ™uC>\v<_WvW~#!v#v&vʸv+>ʷu+~#.1v_ʧv\ʕu®u$ v*®ux#v~$> v v#Wiv~#..®u# iv~##Wx2tCxtzg."t`i"t2tv~#2t2tz>+rwmw>xn0r͙w͙w͉͉~#~#fo͹d|ʳw+ Һw_{"w"w~w_*w o gC#~#fox͹͉*w*wx#N#fi>x~#N#fi͹ÉFO%xG#~#fo#~#fox͹y>xÉ6 #>xQxxnű\x y<2GxF~ڦxڦx#~#foyʹO #~#foxʪxšx#‰xêx!Gx4 †x2Gx͉͉*Gx&>.~͉o&~n#^#V++͉o&0r~7y>7y>7y>7y>7y>^#V#!Ǐ>_y>_y>_y>_y>_y>^#ZǏ^#Z!Ǐu>Ûy>Ûy>Ûy>Ûy>Ûy>]}!+>ÿy>ÿy>ÿy>ÿy>ÿy>]}y~#fo##e^#V#0r͵y^#Zye^#V#0rͶz^#Zze^#V#0rl*z^#ZVz^#V#͗0ze^#V#0r*bz^#ZÎz^#V#͗hz|0rnBKzPY|n0rBK ҿz o_âzzn0rzz z_zo _ W}x͉DMe:ʏ {2ʏ#n:ʏ{2ʏ#n0rR_{~##++ >͹+V+^+R{+r+sS0r%{~#^#Vxq{>2j{|¬{+})N#Ҩ{~#fo :j{›{!9"m!n4 ~ʹ#n0r {~n#~#fon&͉0rz{}~{s#{:rn"Ǐ0r>#|0rǏ>|0rÏ>͹21#~#-|xx|n0r!9>x+͝|*0n{ @++*}"}s#r+͡~*}#~_#~W|:rnr+s##6"}###!}~#foʠǎ<*}"}*}}o|g6@#s#r#6"}**"}}w>#w##ǎˀ++6+6ɴ}}[~Ѝ#=~Ѝ#*$Z*?%Z*$Z*=%)^#V̓Y*Ǐ}/o|/g#"Ǐ|͖͊Y!ɏ~wɯ2ʏ̓t͊*Ǐ͊Ö̓tƓ>>/~m#Ïm(!͏í>!͏Ï2# ³!͏@!͏͔؏>>ց>|}+!JH\+6!ɏ>͉2!F*!BH!͏H~_#~W#~Ogø!õh/ɇ<o&͊Ö*Ǐ*ɏ_"Ǐ`i"ɏ!Ǐ^#V#N#F#!FöUx{J!ˏ6*wg>ͲnØ:1Gw#˜í!͏Ǐ̓Ï̓*Ǐ||<̓*Ǐͧ!͡ͽm!:ɏ2ɏ:ʏ`n:ʏ |/g}/o*!`:ʏ3n"Ǐ>21'aj) L}a͇K>2 `h*~&ʞ-ʁ+ʁ+id.eʓE½ilʫLʫqʫQʼ:1փ>փ~%#*!+dփD탷2i͔iׄ탯_{_AQ8̓!63̓ 2Á#6˂탷2#f}̓h=̓DGЅ"Ï`i"ŏ#~+H-0OxGH#~`xE=y >2 M|5"Ï`i"ŏQ#WV: {Å҉60f+~0ʘ.fʆ̓>"w#6+6-/</ ҽ:#p#w#6!#zKzɈʹ{ށ=Ɉ\p#6! #:2~ *+i-+$0C#iC++w9C6%g Áu#+6%'^͋V_xɈو_yOQ{_xÇɈԇɈy OɈGO߇*2=ɈPtѯ͋7VyOOzWOQ#/< />ͪE>ͪp#=nQY?\/{_#zW#yO++Ҍ#Qp#~>ú_>N#F#*Ǐ/}o|g͉"Ǐp#=ºw1_cƤ~@zZrN vH Tʚ;@B''d #~: i i i0?<=:1Ґ7-++i&OʯHʯ+ͻĊ*H#ʊ:rnM!܊ڊ}0?)))صo܊M!}&0? ? ))))صoa{ ˂̓:ʏ:ɏ: 2 2 :rn:rn0r|n,ʀ-:nʾ*n!m"n{f$%ʤ!*nÏ|}!"n>6>4>?>=>:>7>5>2>3>@>C>:ro&n!"n!ߙ"ݙ:r?p4B:>\2( +<~ P+ P !ߙ2S4O:i>\ 2yӌ 7 ӌ ӌ « > >5µ>#<Ό6!ߙP Px<>ތyq# P> 4 PS:rw&rЍ>^ @ ~ -> #m*0n S#~+ <~=*0n!3n"0n<"0n> <> <> m> m*: G ~#fo##*>7~+~?~B+#O+ O&)))E!^#V#!Ǐuuw#w#w#w#>ÏÝ>Ǐ ~#=¡!Ʌo$ɧGw#½{zԏnO !v!ɏy#+n?v>Ɠ%ͽҐ!͏ʑ:ʏn:ԏ/͉2:Ïnx/F+N+=!͏#!Ï>q#p#=&!ÏH" *%:ʏ%!ӏN#FrqʅGܷ͵x ne!ɏ͑}j0 TeB׳]h!I.k >Ɠ̑ͽ!͏Hv!ʏq#~++w+qnDNn"~`35zr1{r1h!InyO2ӏFn:ʏҐX/<Ґ9n:ӏOG2̏!ӏ͉:̏2x!͏Ïגҏ4͵:!ˏ~++wn!Ï4#¨4ґ+6!͏Ï# ɯ# ͒͒/!Oyw#蒯G:ɏ!Vwz# x%!,xʏ!ʏw%Ï~w# .>ƓMͽ!͏@>ƓiͽҐ!͏0y2ӏ!ɏ~q+qڠNsY+•Ë W~w+ªã!ɏç͖Ɠ>!Ïw#̓nݓ}!ƏF#^#V#N}͏~#G++NyvÏ!Ǐ>>O-vg]U!ˏ6*g>Ͳ|>'ak>.n_ʾnƔ21h|JҚ!̫2*ͼ͔>O!ʏ~+>wnQYGٗn:ʏh2.Ɓ! ͊JQYGn%|Yt&wz^Pc|u~r1G4v>2ʏ!Q͊2og͖û }}{(qnz 2Uͼ͊ü2~#>=x͹_ͻÕͨø_n:ʏG˕/<ngͲ!Ǐ~_#~W#~O#4.șG~_#~W#~OGͨ_n>Oûͨ-_ٗnȯG"y2Fo!D*Ǐ:ɏOjʏ4Â͒g.*:Ozk͒g.*Ǐ:ɏxx<={_zWxG)yOHGͨù_Jny+F+F+Fw`h|gy:ǏO|g}oxG-|ޖ}ٖGElaOؖ!ʏ~Gx&ƀ$ww+ɷ%Ux{J!ˏ6*wgLzK >Ͳ|{>2ʏG/)) =!ɏ~7w?##wy7O*Ǐ*ɏ"ɏ"ǏajSX͎%JS\E!ʏ%/Ù Ҙ7>{_zW}o|g=|g}oCZQô o-yOzW{_xGęN#"ۙ!9"֙"ؙy2ڙ*n|* n!؛"nA~#*ݙO~؛ʓ,R/Y"ݙUa}*ɏ*Ǐ*ŏ*Ïn˂*Ǐnf*ɏ*Ǐ*ݙOʆ~#"ݙ,؛ ~؛!"n~,"ž#"~ʲʲ# ¡؛"¸#"ݙx"͛ ͛+~ ›yxn?Redo from Start *͓֙!ͤr*ۙ:ڙO*ؙ+~+3%% +w '>++~#fo%{"ؙ!ڙ5*֙#~ N Ne^#V#0r͵y^#Zye^#V#0rͶz^#Zze^#V#0rl*z^#ZVz^#V#͗0ze^#V#0r*bz numbe o menu-drive compute game i on progra wit simpl graphics Th onl proble wit thi progra tha hav foun i tha th onl wa ou o som o the i yo don' wan t finis i "war boot." 3COPYRIGHT 1980, G. YOUNG, INC.PRNHEXSYMBAK$$$TMP1!"(!"*222 p N  ͤ L24G!m ~QL#n6$3 ͤ L:2o  ͤ Œ! y ͤ ¢:Nº>2 P N m X e X :o _ X X  ͤ º:YLb: N 3> 2RͶ> 2R͜6 ͤ :N8Y!????????????!m ".:4=24*.~2C2=#".S=2V N !"4!".*. ".*4#"4**+H ڵ*."0*4"6*0 "0*6#"6**H I*0*. qG*. *0 !G q**#""4!".] *. ".*4+"4H K*. :6=268'  ̈́ :="="="2 ̈́ %] *. >26 ̈́ :=2"0 ̈́ !".*. "0~*.:G “*0". "0ͅ**+"*".X*0".X!"."*. ".~ʷ*. c ! *. m* *. 2, ͤ :NmYyS>2,*.V  M ### K  9 ͤ :3CyYʥN3*. "0ͅ*.ï:,å͖ͅ*.ï͖*0".ï*0*.w#Ì*."0*0 "0~*. Ü"0!". *. ".~'  ̈́ :6=26 ̈́ :=2 ><2>26e ̈́  ̈́ ><2>26Ͳ*0#"2!". "0Iͅ#"22-!~B`$X!i ###a ~2`!`$ :o 2`:-%!̈́ !'  ̈́ ><2-R!' b N  N ͣ~ ͤ  ͤ K:Y3Ͳ'  ̈́ :6=26 ̈́ >26 ̈́  !   !  ̈́  ̈́ >26><2:   ͣ ͤ !  8 !   ͤ :NY:o 2==$":o 2! !  <!"4*2"G2*G`*4#"4*G"G*H k>2  ʲ PRESS ANY KEY TO CONTINUE $*2"G*4H *G! *4+"4H *G"G>2      |}    ̈́ ̈́  :Ą ><2 ̈́  Ä :   $ʠ _Î N  :!G~a { _w#» ~#  # >>2= !Z >*K >)K #>(K w>'K #>,K >+K #>%K w>$K #>#K >"K #>!K > K #>=P 0w 00/00/00 HH:MM:SS$ABKayPro 10 - HARD DISK CATALOG AND BACKUP PROGRAM v2.3 Program MUST be run from each user area. Copies to same user on floppy as currently logged. $ Enter Drive Letter to Backup "A or B": $ Enter "C" as Floppy Drive: $ Backing up Drives $ to Floppy Drive $ Do you want a printed record (Y/N)? $ Is this Correct (Y/N)? $ Enter 8 Char Date for Reports (MM/DD/YY)? $ for Date $ ERASE Floppy Disk First (Y/N)? $ MEMORY FULL...REPORT NOT COMPLETE$ Begin Backup to Floppy (Y/N)? $ SORTING...$ FILE NOT FOUND...ABORTING$DISMOUNT BACKUP DISK AND ENTER RETURN$Do you wish to run Backup again (Y/N)? $MOUNT DISKETTE FOR BACKUP AND ENTER 3 CHAR DISK ID OR "END"? $END)? BACKUP ALL FILES OF TYPE OT , (Y/N/S)? $BACKUP FILE NAMED p: (Y/N)? . SO, (Y/N/C)? $ THE FOLLOWING FILES WILL BE COPIED TO DISKETTES$ E:TER RETU.N$ $ $THE FOLLOWING FILES ARE ON DISKETTE NO. ETT AS OF ACKUP AN$ $ CONSOLIDATED INDEX BY FILE TYPE AS OF $UP ALL F $ FILE TOO LARGE TO FIT ON ONE DISKETTE SO NOT BACKED UP **** $C)? $ THE FOLLOWING FILES WILL BE COPIED TO DISKETTES$ E:TER RETU.N$ $ $THE FOLLOWING FILES ARE ON DISKETTE NO. ETT AS OF ACKUP AN$ $ CONSOLIDATED INDEX BY FILE TYPE AS OF $UP ALL F $ FILE TOO LARGE TO FIT ON ONE DISKET$ want a printed record (Y/N)? $ Is this Correct (Y/N)? $ Enter 8 Char Date for Reports (MM/DD/YY)? $ for Date $ ERASE Floppy Disk First (Y/N)? $ MEMORY FULL...REPORT NOT COMPLETE$ Begin Backup to Floppy (Y/N)? $ SORTING...$ FILE NOT FOUND...ABORTING$DISMOUNT BACKUP DISK AND ENTER RETURN$Do you wish to run Backup again (Y/N)? $MOUNT DISKETTE FOR BACKUP AND ENTER 3 CHAR DISK ID K10BAKUP.COM derived from BAKUP23A.ASM ============ This is a slightly modified copy of BAKUP23A.ASM for the Kaypro 10 computer. It is not a fast back up program but is more like an auto-sweep + cataloging program. When used with the copy of D.COM supplied in this .LBR, you can easily identify files that have been backed-up. There will be a solid inverse video block turned on at bit F4. NOTE: That this copy of D.COM is also set to show $SYS files and any other attribute 1-4, $SYS, $R/O with the same inverse video block in the appropriate position of the filename or filetype. K10BAKUP.COM should be placed with your other system utility files on A0. It MUST be run from the desired user area and will copy to the same user area on the floppy as the hard disk. It does NOT support multiple user areas but then with 390k floppies it wouldn't work to well anyhow. A0>k10bakup this will back up files from drive A, user 0 of the hard drive to drive C, user 0 of the floppy. A1>k10bakup this will back up files from drive A, user 1 of the hard disk to drive C, user 1 of the floppy. etc --------- etc -------- etc -------- etc For those of you who want a 'fast' back up program, see the messages in reference to the FASTBACK program in the RBBS now. This is a SUPER FAST program and streams files to the floppy rather than using a PIP-type operation as most of these programs do. The FASTBACK program sells for $99 and a 20% discount can be had by members of the TBKUG. Steve Sanders 06/14/84 same user area on the floppy as the hard disk. It does NOT support multiple user areas but then with 390k floppies it wouldn't work to well anyhow. A0>k10bakup this will back up files from drive A, user 0 of the hard drive  C7B4C0C1C2C3$GAMES COM !"#$%&'GAMES COM()*+,-./01234567GAMES COM889:;<=>GAMES DOC?K10BAKUPCOM@ABCK10BAKUPDOCDEKP-CLS $$$>COPYRIGHT (C) 1978, DIGITAL RESEARCH Portions (C) 1982, NLSo&)))))))a{__> W> W^~W#nO****!*$*'! "y2s2t>(2u>2s>2t>2u:sO̓:tO<2t͋*y"y͓2{:{!nI )^6<2{:x/ͣ2͛!u51!;n:] ʜ\Ͱz^!iKAYPRO SYSGEN VER 2.2SOURCE DRIVE NAME (OR RETURN TO SKIP)SOURCE ON A, THEN TYPE RETURNDESTINATION DRIVE NAME (OR RETURN TO REBOOT)DESTINATION ON , THEN TYPE RETURNPERMANENT ERROR, TYPE RETURN TO IGNOREFUNCTION COMPLETEINVALID DRIVE NAME (USE A, B, C, OR D)NO SOURCE FILE ON DISKSOURCE FILE INCOMPLETE %]]]M "I *K  )*= ^#V"O I G  *G )*= N#F*O ? J*G #"G (*I )*= ^#V*O DM? m*I +"I JI G  *G )*= ^#V"Q *I )*= *G )*= N#Fq#p*I )*= *Q s#r*G #"G *I +"I K I  G M   !M G  :S <2S O!T *G s#r*S &l ) *M s#r*I "M ^I K  X:S <2S O!T *K s#r*S &l ) *I s#r*G "K û!" "    #* #" )*= * #" )*= N#Fq#p   * )*= * ) *= ^#VN#F? H * #" )*= ^#V";  *; ^#V" * )*= ^#V"; *;  ͪ  *; q#pÝn* " ! p+q* )*= ^#V"; ! 6> ! i* &*; >OK : <2 E:/ *; ^#V*% DMf kK : *; Nf E*; ~ڻWK þE *; ~SK E = ! 6:! ':/ : = !: = : <2 * " !" >! .  * *&͵ "( * *&͵ > j*( #"( *DM*( V"( !" (   K!" }2 : <2 O:* * * "    >! = * DM** +" *( * " Ø* #" *&0\XDR COPYRIGHT (C) 1979, DIGITAL RESEARCH _͌> ͒> Ò> Ò͘~#͌ì _2<2 凇!2:2a{_:ʖ:>Ľʖ:=2–!B!6#5ʖ:Ľ!ͬʧ )!F#xʺ~0wëw!" !~6ͽ:ý(!#͘*~ ""͌#>?͌͘ =_.:;<> Oo$>!Y2*O"ʉ@G:ʐ:wÖx2p0ʹ#*©6?ëw˜0ï#6 ¹.0#*6?w0#6 #6" #~?  xDIR ERA TYPESAVEREN USER!yO#< Ty#O 321y_͸2y2ͽ:1͘A͌>>͌92^ :¥.!_~#fow]!v"!çREAD ERRORçNO FILE^: ! ~ 3#0 Wx x G ~ # 3x~#B!Y~ɯ2:=!ý:=!:ý^T!~  6?#ˆ:`O> K{͘A͒>:͒͢>:͒͢xK > K > ͒x  ͢ØÆ^ BRͧ9!5‚#~Y‚#"T<ÆALL (Y/N)?^ Tʧ͘!6!~ڇ w4!Y~ʆ͌†t=ʆf ^ T 2o&)|+!<ͧÆNO SPACE^ :Ty!B*O=?_s#"^sG!~Ypsp2mÆÆf ͧÆFILE EXISTS _: É: :ʉ=2)ͽÉ T!@k!}|q=qf^!~2>`~22\!!B!~> >#0~O#Cx2͘1)ͽÂf zͧÆBAD LOADCOMf^: ! Â$$$ SUB"C{2!"E9"1A22!ty)K!G_^#V*C~E ,&-AGMS!!ô!ô!Bdos Err On : $Bad Sector$Select$File R/O$:BA2!~6 O͐  :E B 2>: b# : y! 4 5~yy5 6yҐ^H@Oy H H: –ͬ  #H: !  Hù H H $O͐: 2 *CN# x: 2 p&x~+é72 H! >w_: ! 5ͤNkͱ¦ͱxʊ#Nx: ! 2 ͤ! 5™#wO~x½p Hy<< ʑ :!qMD#2E>! ^#V w#P:BO|^#V#"##"##"##"!O*!O*|!6ʝ6>*w#w*w#w'û*! J*""!N#F*^#V*~#foyx*{_zW+*yx#*DM*s#r*s#ryOxG*0MD!!N: EG>O: \S*C :qn& ^#V>O^"*}:*)=":O:o"*C *C!ͮ~2~2ͦ:2ͮ:O:w:w |g}o*# ):BO!yoxg*:BO}!N#F "*#*s#r^ ~!J! J*:o$*C~i6iw**{#zr+s{ozg**͕** ,w͜͸Ͳ!!N#F$**O!~#:A#~$=2Ek͌::/GyO>2!q*C"͡ʔ*JҔ^:Oyʃ?|x | s-|N-# S:2E!~Яw>T D^6k-äPYy 5*{zBK5ڋ>*Cw~#+w#w+ɯ2E22i^ *C :~w~͔͔# #  w ~>2!E5T*C!"C"C!w# F! w͌x2͢*C ~<wʃG:!ʎì 4~ʶ¬:<ʶ$ʶïZͻx>2>2ͻ:!Z2:Eẅ́͊Ͳ>2>2T*CGͻ:ẅ́n>2;O ^DM;}H>"*C ::ddslO s#r:E͊:==»y==»*Ww#*"͸*:G#š"͸:!w4!iw:Z!E~=262*C!!~~#~O~G#n,-.‹! w! yG!x͢.:E<ʄ! q!pQ:E<. ʄ$.:E<ʄi6}2ExN! ~态O>G~G!~G} *C!r#r#r ^ͥ_y#x#{s+p+q-*C ͥ!!q#p#w*:BOYG}*MD "ã:!Bw!>2*C~=2u:B2~2wE:A*Cw>"!""2B!"!rQQQâ~?ͦ~?rQ*"CQ-Q͜QüQrQ$Q*):B"*)*)Q;*"E:;:A2AQÓQÜQ*C}/_|/*W}_*"}o|g":ʑ*C6:ʑw:2E**E}DQ>2eHÙ /HC>|ÀÄÈÌÐØè  0123456789-, .x2:32:G KAYPRO II 64k CP/M vers 2.2 >!2"!2":Ox Warm Boot 1̀̈́!",͈͐ *"2~ >(̈́!4(:.3ʬ.*ì(:.6ʬ.-ͬ!5O ~:.9ʬ.Eì.6ì.9ì:.9ʬ.?ʬ.E@ʬ.9ì:.Bʬ.<ʬ.0. ,.(.$. .2.2.:4(.!s1&{˿~#O/.9ì:.Bʬ.<ʬ.0. ,KPCPM.DOC (KPROCPM.DOC) If you are using a Kaypro with MDM7xx and a printer, this may be the answer to your loss of copy and/or requirement for many nulls. The brainwork for this project was supplied by Jack Crenshaw. See KPCPM.BUG (KAYPRO.BUG in the RCP/M LBR). His fix was "sugar coated" by me in an effort to reach any Kaypro/MDM7xx user having this problem. A. Download KPCPM.BIN - XA1:dow kpcpm.bin/prot:xmodem/type:bin B. Change the name of KPCPM.BIN to KPROCPM.COM C. Place a disk containing KPROCPM.COM in drive A, and a disk containing DDT.COM in drive B. Press the RESET button. NOTE: REQUIRED KEYBOARD TYPING WILL BE SHOWN BY ENCLOSING CAPITAL LETTERS WITHIN SQUARE BRACKETS---[ ] 1. A>[KPROCPM] [RETURN] 2. When asked for source drive name, [RETURN] 3. When asked for destination drive name, [B]. 4. Type [RETURN] again. 5. Following a few seconds of action in drive B, you will again be asked for destination drive name. [RETURN] If all went well, you have completed the installation of a revised CPM operating system on the disk in drive B. The following procedure will check your work. Remove the disk from drive A and lay it aside. Move the disk from drive B to drive A. Press the RESET button. 1. A>[DDT] [RETURN] When the dash mark (-) appears, type: 2. [LFA2D] [RETURN] DDT will list RAM contents at FA2D. 3. If the first line reads FA2D JMP F9EE you were successful, if not then go back to the beginning and install it again. When the procedure checks okay, you may now PIP your MDM7xx.COM to the disk in drive A. Hopefully, this will permit your Kaypro/printer to communicate with the MDM7xx program to have it handle overflow during carriage returns, etc. -slight revision of RCP/M DOC file for KayPro Sig (PCS25) -Robert Flagg 72466,2332 11/17/84 conds of action in drive B, you will again be asked for destination drive name. [RETURN] If all went well, you have complet #: 74332 Sec. 1 - General Sb: #Kaypro Mystery Solved 18-Jan-84 01:54:26 Fm: JACK CRENSHAW 72325,1327 To: All Some time ago I reported a problem with the MDM711/Kaypro/Epson combina- tion, in that the ^P print buffer dropped characters. Periodically, the subject has come up again, with Irv Hoff and Pete Holsberg trying hardest to help me solve the problem. I finally got around to looking at the Kaypro BIOS, and as Pete suspected, there's a bug. The offending piece of code is in the ROM, and goes: LISTST: IN 1CH ;GET SYSTEM PORT BIT 3,A ;TEST PRINTER READY BIT RZ ;THIS IS THE BUG MVI A, 0FFH ;ELSE RETURN FF RET Note that if the bit 3 is zero, the routine returns garbage in A. The garbage is whatever is in port 1CH, which includes output as well as input bits. However, the zero FLAG is set properly, which is why BIOS function 4 (LIST) works OK. Ironically, if the programmer had used the usual ANI insruction instead of the Z-80 fancy bit test, he would have saved two bytes as well as get the right response. The bug is in the ROM, so can't be easily fixed. The patch is easy, though - Change the jump vector in the BIOS to: JMP PATCH and add: PATCH: CALL 0FB65H ;call old bios entry RNZ ;OK unless its zero XRA A ;else clear A RET ;that's all, folks - Jack Crenshaw  the ROM, and goes: LISTST: IN 1CH ;GET SYSTEM PORT BIT 3,A ;TEST PRINTER READY BIT RZ ;THIS IS THE BUG MVI A, 0FFH ;ELSE RETURN FF RET Note that if the bit 3 is zero, the routine returns garbage in A. The garbage is whatever is in port 1CH, which includes output as well as input bits. However, the zero FLAG is set properly, which is why BIOS function 4 (LIST) works OK. Ironically, if the programmer had use*|!9"1] †_̓!y~AC͐_91[O! +"͖͐͐z-z~>!ywÞʓ!y4*#~w" “_ ͐Óow{͐!"͖͐!"z!yw6͐!5! ! y@͐ ͐ ͐~w# ͐ 0 ͐_1!Q w@s͐1xx  h1O y ͐!yw*#!y4"~ _ ͐*å" xGy ͐ ͐~#͐ <_w E NW^@_w`͐wf͐wl͐wq͐w$$$$"}*W ͐9 ͐*"i * " !" !"5 ʵê !w# x¾*b ͐ ͐ ͐~#6KSTROKES +++ Version 2.1 Semi-intelligent keys for KAYPRO II and 4 Options: 1 - Define Special Function(s) 2 - Set initial Macro definition 3 - Define keypad 4 - Set speed 5 - Exit to CPM Enter your selection: $-N:Enter special function number (1-8) or 9 to stop: $: Enter a number between 1 (fastest) and 9 (slowest) to set the speed at which Special Function and MACRO characters are passed to the foreground program. > $ WARNING! You have exceeded 63 keystrokes, corrupting one or more of the succeeding Special Functions. Re-define or forgo the use of the corrupted Special Function(s). $MACRO initialization$ Present contents of buffer are as follows: $ Enter up to 63$ Enter up to 190 keystrokes. Terminate with "~" (To leave unchanged, enter ONLY "~") >$"~" leaves remaining New values unchanged, returns to main menu. Key Old value (currently in force) | | New value (installed on exit to CP/M) | | | change New values at cursor with single keystrokes UP ----- DOWN --- LEFT --- RIGHT -- 0 ------ 1 ------ 2 ------ 3 ------ 4 ------ 5 ------ 6 ------ 7 ------ 8 ------ 9 ------ - ------ , ------ . ------ $  $ $ < $ $ Hit any key to return to main menu.$ To execute a Special Function use "~", where is a number (1 - 8). To define the MACRO function use "~D~". To execute the MACRO function use "~X". To repeat the MACRO function use "~R~", where is a 1 - 5 digit number less than 65536 OR use "~R~" to repeat 65535 times. During MACRO repetition, hit any key to stop early. To change the speed at which characters are read out use "~S", where is a number (1 - 9). Immediately after installation, use "SAVE 16 .COM" to save the current definitions, if desired. After RESET, use " " to install the current definitions, OR "" to update definitions from menu, OR "KSTROKES" to start from scratch. $ Installing +++KSTROKES+++ version 2.1 $ CANNOT LOAD KSTROKES - RESET SYSTEM AND TRY AGAIN $ $   nything>" to install!"!~! _$ DEXmRS 1B9>~!;"6!Q" ~d*6w#"66!" !;"6!y" *6~G#~ʤ"6!"+>wx!~ʡ=w>>x!"!" ʿ *8+"8|!:w"6s!"8!.~0)))_|+"8m1O!: "6s.1!w ܷ. This is special function number 1. It is 63 characters long.This is special function number 2. It is 63 characters long.This is special function number 3. It is 63 characters long.This is special function number 4. It is 63 characters long.This is special function number 5. It is 63 characters long.This is special function number 6. It is 63 characters long.This is special function number 7. It is 63 characters long.This is special function number 8. It is 63 characters long.TThis is the MACRO. It can be up to 190 characters long. SYSTEM AND TRY AGAIN $ $   nything>" to install!"!~! _$ DEXmRS 1B*|ܸ!9"1] †_̓!y~AC͐_91[O! +"͖͐͐z-z~>!ywÞʓ!y4*#~w" “_ ͐Ów{͐!"͖͐!"z!yw6͐!5! ! y@͐ ͐ ͐~w# ͐ 0 ͐_1!Q w@s͐1xx  h1O y ͐!yw*#!y4"~ _ ͐*å" xGy ͐ ͐~#͐ <_w E NW^@_w`͐wf͐wl͐wq͐w$$$$"}*W ͐9 ͐*"i * " !" !"5 ʵê !w# x¾*b ͐ ͐ ͐~#6KSTROKES +++ Version 2.1 Semi-intelligent keys for KAYPRO II and 4 Options: 1 - Define Special Function(s) 2 - Set initial Macro definition 3 - Define keypad 4 - Set speed 5 - Exit to CPM Enter your selection: $-N:Enter special function number (1-8) or 9 to stop: $: Enter a number between 1 (fastest) and 9 (slowest) to set the speed at which Special Function and MACRO characters are passed to the foreground program. > $ WARNING! You have exceeded 63 keystrokes, corrupting one or more of the succeeding Special Functions. Re-define or forgo the use of the corrupted Special Function(s). $MACRO initialization$ Present contents of buffer are as follows: $ Enter up to 63$ Enter up to 190 keystrokes. Terminate with "~" (To leave unchanged, enter ONLY "~") >$"~" leaves remaining New values unchanged, returns to main menu. Key Old value (currently in force) | | New value (installed on exit to CP/M) | | | change New values at cursor with single keystrokes UP ----- DOWN --- LEFT --- RIGHT -- 0 ------ 1 ------ 2 ------ 3 ------ 4 ------ 5 ------ 6 ------ 7 ------ 8 ------ 9 ------ - ------ , ------ . ------ $  $ $ < $ $ Hit any key to return to main menu.$ To execute a Special Function use "~", where is a number (1 - 8). To define the MACRO function use "~D~". To execute the MACRO function use "~X". To repeat the MACRO function use "~R~", where is a 1 - 5 digit number less than 65536 OR use "~R~" to repeat 65535 times. During MACRO repetition, hit any key to stop early. To change the speed at which characters are read out use "~S", where is a number (1 - 9). Immediately after installation, use "SAVE 16 .COM" to save the current definitions, if desired. After RESET, use " " to install the current definitions, OR "" to update definitions from menu, OR "KSTROKES" to start from scratch. $ Installing +++KSTROKES+++ version 2.1 $ CANNOT LOAD KSTROKES - RESET SYSTEM AND TRY AGAIN $ $   nything>" to install!"!~! _$ DEXmRS 1B9>~!;"6!Q" ~d*6w#"66!" !;"6!y" *6~G#~ʤ"6!"+>wx!~ʡ=w>>x!"!" ʿ *8+"8|!:w"6s!"8!.~0)))_|+"8m1O!: "6s.1!w з. This is special function number 1. It is 63 characters long.This is special function number 2. It is 63 characters long.This is special function number 3. It is 63 characters long.This is special function number 4. It is 63 characters long.This is special function number 5. It is 63 characters long.This is special function number 6. It is 63 characters long.This is special function number 7. It is 63 characters long.This is special function number 8. It is 63 characters long.TThis is the MACRO. It can be up to 190 characters long. SYSTEM AND TRY AGAIN $ $   nything>" to install!"!~! _$ DEXmRS 1B*|!9"1] †_̓!y~AC͐_91[O! +"͖͐͐z-z~>!ywÞʓ!y4*#~w" “_ ͐Ów{͐!"͖͐!"z!yw6͐!5! ! y@͐ ͐ ͐~w# ͐ 0 ͐_1!Q w@s͐1xx  h1O y ͐!yw*#!y4"~ _ ͐*å" xGy ͐ ͐~#͐ <_w E NW^@_w`͐wf͐wl͐wq͐w$$$$"}*W ͐9 ͐*"i * " !" !"5 ʵê !w# x¾*b ͐ ͐ ͐~#6KSTROKES +++ Version 2.1 Semi-intelligent keys for KAYPRO II and 4 Options: 1 - Define Special Function(s) 2 - Set initial Macro definition 3 - Define keypad 4 - Set speed 5 - Exit to CPM Enter your selection: $-N:Enter special function number (1-8) or 9 to stop: $: Enter a number between 1 (fastest) and 9 (slowest) to set the speed at which Special Function and MACRO characters are passed to the foreground program. > $ WARNING! You have exceeded 63 keystrokes, corrupting one or more of the succeeding Special Functions. Re-define or forgo the use of the corrupted Special Function(s). $MACRO initialization$ Present contents of buffer are as follows: $ Enter up to 63$ Enter up to 190 keystrokes. Terminate with "~" (To leave unchanged, enter ONLY "~") >$"~" leaves remaining New values unchanged, returns to main menu. Key Old value (currently in force) | | New value (installed on exit to CP/M) | | | change New values at cursor with single keystrokes UP ----- DOWN --- LEFT --- RIGHT -- 0 ------ 1 ------ 2 ------ 3 ------ 4 ------ 5 ------ 6 ------ 7 ------ 8 ------ 9 ------ - ------ , ------ . ------ $  $ $ < $ $ Hit any key to return to main menu.$ To execute a Special Function use "~", where is a number (1 - 8). To define the MACRO function use "~D~". To execute the MACRO function use "~X". To repeat the MACRO function use "~R~", where is a 1 - 5 digit number less than 65536 OR use "~R~" to repeat 65535 times. During MACRO repetition, hit any key to stop early. To change the speed at which characters are read out use "~S", where is a number (1 - 9). Immediately after installation, use "SAVE 16 .COM" to save the current definitions, if desired. After RESET, use " " to install the current definitions, OR "" to update definitions from menu, OR "KSTROKES" to start from scratch. $ Installing +++KSTROKES+++ version 2.1 $ CANNOT LOAD KSTROKES - RESET SYSTEM AND TRY AGAIN $ $   nything>" to install!"!~! _$ DEXmRS 1B9>~!;"6!Q" ~d*6w#"66!" !;"6!y" *6~G#~ʤ"6!"+>wx!~ʡ=w>>x!"!" ʿ *8+"8|!:w"6s!"8!.~0)))_|+"8m1O!: "6s.1!w . This is special function number 1. It is 63 characters long.This is special function number 2. It is 63 characters long.This is special function number 3. It is 63 characters long.This is special function number 4. It is 63 characters long.This is special function number 5. It is 63 characters long.This is special function number 6. It is 63 characters long.This is special function number 7. It is 63 characters long.This is special function number 8. It is 63 characters long.TThis is the MACRO. It can be up to 190 characters long. SYSTEM AND TRY AGAIN $ $   nything>" to install!"!~! _$ DEXmRS 1B KSTROKES +++ Version 2.1 (for KAYPRO II or 4 with CP/M 2.2) April, 1984 William B. Forbes 45 Dellwood Road Worcester, MA 01545 This program is a somewhat restricted version of the various key definition programs reviewed by Susan Hyman in the March/April, '84 issue of PROFILES magazine. It lets you define 8 "Special Functions" (SPFNs) of up to 63 keystrokes each. It also lets you define up to 190 strokes as a "MACRO" function. The MACRO function can be defined at any time and executed either singularly or repeatedly. You can also specify single keystrokes for the cursor and keypad keys. Finally, you can specify the speed at which SPFN and MACRO keystrokes are output so as not to cause your computer to choke. The speed setting can be changed at any time, as the situation demands. All its functions can be saved for subsequent installation as defaults or to be updated from the menu. Version 2.1 will only run on a KAYPRO II or 4 under CP/M 2.2. RUNNING THE PROGRAM -- Typing "KSTROKES" in response to the system prompt gives you a menu which will allow you to define the SPFNs, set up an initial MACRO string, set the transmission speed, and/or define the keypad. If you don't want to change any of the SPFNs, etc., type a space plus any extra character (except a space) after the program name to inhibit the menu. EXAMPLES: A>KSTROKES <<< gives you the menu A>KSTROKES S <<< installs the defaults ===================================================================== THE MENU DEFINING THE SPECIAL FUNCTIONS -- Choosing the first option on the menu allows you to set up definitions of the SPFNs. After selecting the function number you wish to define, you are shown the current definition of that function. You may then enter up to 63 keystrokes to re-define that SPFN. These may be letters, numbers, control characters, tabs, carriage returns, line feeds, 'escape's, 'delete's, back spaces, or keypad strokes. After the last keystroke, indicate that you are finished by typing a tilde (~). If you don't wish to change the definition of the SPFN, type only the tilde. Thus, you can easily review an SPFN by selecting it for re-definition and then entering only the tilde. (NOTE that since the keypad definitions are not actually changed until you select option 5 and return to CP/M, any keypad strokes used in defining an SPFN will be interpretted according to the definitions in force when you entered the program. When you invoke the SPFN later on, you will get those characters even if you have subsequently changed the keypad definitions. Also, NOTE that most application programs add the line feed after a carriage return. When you type a carriage return, it shows up as and the cursor goes to the beginning of the next line on the screen. Likewise, back space = , line feed = and escape = . In the case of these last three, however, the cursor does not return to the beginning of the line.) The program doesn't check to see whether you are running over your allotted 63 keystrokes when you define an SPFN. This feature has both yin and yang. On the one hand, you can garbage up the SPFNs by not counting. On the other hand, since the SPFN strings are contiguous in memory and terminated by a null byte, typing more than 63 characters merely runs you over into the next SPFN. Thus, you can define SPFNs longer than 63 keystrokes, but you lose the succeeding SPFN(s). For example, if you define SPFN 5 as having 80 keystrokes, you will get all 80 when you invoke SPFN 5 later on. You will also get the last 26 strokes of SPFN 5 when you invoke SPFN 6. Indeed, SPFN 9 is contiguous with the MACRO (!?!). Thus, if you wanted, you could have only one SPFN of 702 keystrokes but no other SPFNs and no (initial) MACRO. Or, you could make SPFN 1 up to 127 keystrokes and simply forgo the use of SPFN 2. SPFNs 3 - 8 would work just fine. Just  be careful to review each SPFN while in the menu, though, to be sure you know what you're doing. Anyway, you shouldn't have any difficulty as long as you stick to 63 strokes for each SPFN. SETTING THE INITIAL MACRO DEFINITION -- By selecting the second option from the menu, you can provide a default definition of the MACRO function. This works the same as defining the SPFNs, but you can have up to 190 strokes. Also, remember that the MACRO can be defined at any time as long as there hasn't been a cold start. The capability of setting it up in advance is provided because of the fact that when you define the MACRO in a program or in CP/M, the strokes are passed on to whatever program is running at the time (the Foreground program). When you initialize the MACRO from the menu, you remain in a state of grace. Furthermore, if you have a particularly large, complex function you wish to perform using the MACRO, you won't have to type it in every time; you can save it as a default if you enter it from the menu (see below). SETTING THE SPEED OF TRANSMISSION -- Some programs such as WORDSTAR keep checking to see if you have typed another character before doing their own housekeeping. If you have, they put the character on a stack to be processed later, when you pause (to think?). If you type too fast, you can overrun the internal stack before WORDSTAR has a chance to do its thing. It then has no place to put the incoming characters and you're in trouble. Executing an SPFN or MACRO function is like typing lickity-split or maybe even faster than that. As long as you are sending fewer keystrokes than the program's stack can hold or if you are using a program which doesn't have such a type-ahead feature, it doesn't matter how fast characters are sent. But if you invoke several long SPFNs or repeat even a fairly short MACRO too many times, you can outrun the Foreground program's capacity to process the "keystrokes". From the menu (option 4), you can set the speed of transmission in a range of 1 (fastest) to 9 (slowest). The actual speeds which correspond to these numbers will vary according to the procedures that a particular Foreground program uses to get characters from the keyboard. The value you enter from the menu will be in force immediately after KSTROKES installs itself and it can be saved as a default along with the other functions. You can change the speed at any time with a "resident" command (see below). INITIALIZING THE CURSOR AND KEYPAD DEFINITIONS -- Selecting option 3 from the main menu lets you define new values to the cursor and keypad keys. The screen gives you three pieces of information on each key: 1) the name of the key; 2) the Current definition (that is, what would be sent to the computer if a given key were struck at any time before returning to CP/M); and 3) the New definition (that is, the definition as it will be after KSTROKES installs itself). The New keypad definitions that come with the program are ones which I use for WORDSTAR as follows: : erase : \/ ................................. | 1 | 2 | 3 : - : | ^Q | ^O | ^K : line : | 11 | 0F | 0B : 19 ^Y : |.......|.......|.......:.......: | 4 | 5 | 6 : , : backward -> | line | word | char : word : | 05 ^E | 01 ^A | 13 ^S : 14 ^T : |.......|.......|.......:.......: | 1 | 2 | 3 : E : forward -> | line | word | char : : | 18 ^X | 06 ^F | 04 ^D : : |.......|.......|.......: char : | 0 | . : : scroll -> | down | up : : | 1A  ^Z | 17 ^W : 07 ^G : |...............|.......:.......: The screen shows you a cursor pointed the line of information for one key. The keystroke you give will replace the New value in that column and the cursor will advance to the next line. You can insert the Current value by just hitting the key of that name. The Current values reflect whatever has been set by CONFIG or some similar program. If you don't want to fool around with the keypad, I suggest you use CONFIG and change all the New values to correspond to what you have set or to their "natural" values. INSTALLING THE DEFINITIONS -- Selecting option 5 installs the program and returns you to CP/M. The SPFNs and the MACRO function will be in force until the next cold start. The keypad definitions also remain in force until the next cold start. Before exiting, the program throws up a little command summary. You can save the definitions you have created by using the SAVE 16 command IMMEDIATELY after leaving KSTROKES and returning to CP/M. Use a different file name with a .COM extension for each set of definitions you make up. For example, if you made up a keypad and SPFNs for Perfect Writer, you might want to type: "SAVE 16 KSPW.COM" in response to the system prompt immediately after installation. Thereafter, you could install those definitions by using the system command "KSPW W" in response to a system prompt. By typing an extra character after the filename (it doesn't matter which character or characters you use) you can inhibit the menu. If you want to update your Perfect Writer definitions, use "KSPW" with no extra characters. ====================================================================== THE RESIDENT COMMANDS USING SPECIAL FUNCTIONS -- Once KSTROKES is installed, you invoke an SPFN by typing a tilde as a shift character, followed by the SPFN number. For example: if SPFN 3 were defined as "brown fox"  then typing: "The quick ~3 jumped over the lazy dog" would produce: "The quick brown fox jumped over the lazy dog" If you want to type a tilde and KSTROKES is installed, type it twice and you'll get a single tilde. For that matter, any keystroke which follows a tilde and which doesn't have a specific meaning will return a single tilde. So, for instance, if you forget to lift your finger from the shift key and type "~@", you'll only get a tilde instead of SPFN 2. USING THE MACRO -- The MACRO is invoked by typing "~X" or "~x" (for eXecute). It may be defined at any time, even in the middle of running another program, by typing "~D" or "~d" (for Define) followed by the desired sequence of keystrokes. After the last stroke another tilde must be typed to terminate the definition. For example: typing "~D^CDIRR B:~", defines the MACRO; subsequently, typing "~X" produces "^CDIRR B:", and will continue to do so until you redefine the MACRO  using "~D" or "~d", or there's a cold start. (see the application notes, below, for an explanation of the s in this example) Furthermore, you can automatically repeat a MACRO by typing "~R~", where is a decimal number in the range 1 - 65535. For example: typing "~D_________~", defines the MACRO; subsequently, typing "~R20~" will give you 20 lines of underlines. (NOTE that all of the characters you type while defining the MACRO are passed on to the Foreground program. Any output from the Foreground program is not incorporated into the MACRO. The "~D", "~X", "~R20" and terminating tildes are not passed on to the Foreground program, nor do they appear on the screen.) SETTING THE SPEED OF TRANSMISSION -- You can change the transmission speed, as described above, at any time with the resident command "~S", where is a number in the range 1 - 9. This is handy if you are making use of some short SPFNs and a long (or oft repeated) MACRO. Set the speed at 1 or 2 most of the time and at 9 just before you execute the long MACRO. You will have to learn the quirks and speed requirements of your particular application program by trial and error. In the preceeding example for the repeat command, if you were in WORDSTAR at the time, you should actually have typed: "~S9~R20~" and then "~S1" after the MACRO stopped repeating to get the desired result. (NOTE that KSTROKES is lazy; it doesn't check whether you actually enter a number in the range 1 - 9. If you are familiar with ASCII codes, you can set the speed slower than "9" by giving "~S:", "~S;", "~S<", "~S=", etc. The program takes the hex equivalent of the character you type, subtracts 031H, multiplies by 4, and uses that byte as a counter.) ===================================================================== GENERAL APPLICATION NOTES 1) Not only will the resident code survive a warm boot, but you can even define a MACRO function that includes ^Cs or other warm boots. When you do this, you may have to include one or more filler characters at appropriate spots since a character or two can be lost on warm boot. Also, some programs, when they are loaded, seem to clear away any characters waiting to be input. If this happens, you may need to put some extra characters in your SPFNs to accomodate such a feature. For example, I have found that when WORDSTAR is called up, the first character after "WS" dissapears. The following SPFN works: "WSLB:D" If you leave out the , the LB: gets lost, but the D does not. If s are not appropriate, sometimes backspaces or "cursor left"s work for this purpose. 2) The resident portion of KSTROKES loads itself into high core, just below the CCP and alters the BDOS call in location 05H, thus appearing to enlarge FDOS. The enlarged "FDOS" includes the CCP as well as the resident portion of KSTROKES. This means you lose 3K of core when KSTROKES is installed, even though the resident code, including buffers, is only 1K large. 3) When the resident portion of KSTROKES is installed, you should be able to run most application programs, even those that make use of high core, such as DDT and DESPOOL. System utilities such as STAT, SAVE, BAUD, and various MODEM programs should also run. However, you can't install the resident code if some version of it is already in place or if something else like DESPOOL is loaded in the background; you have to do a cold start to unload the offending code. Version 2.1 of KSTROKES gives you an error message and returns to CP/M if you try to run it while Background code is loaded. 4) In the interest of brevity (of the resident code and .COM file, that is), I didn't build in a lot of safeguards against wrong keystrokes. For example, the resident code doesn't check whether you have overrun 190 characters in the "~D~" command. For that matter, neither does the menu (option 2). In the latter case, overrunning 190 keystrokes only wastes your time. When the resident portion of the code is installed, only the 1st 190 characters go with it. If you overrun with the resident command, you write into the CCP. That wouldn't be so bad if you were in an application program at the time, since when you do a warm boot on leaving the foreground program a new copy of the CCP is read from the disk. But if your program returns to the CCP with a RET instruction and you have garbaged it by overrunning the MACRO buffer, you're in trouble. Anyway, who would ever want a MACRO of 190+ keystrokes, right? 5) The numbers 1 - 8 were chosen to designate the SFPNs partly because there is a nice blank space above the top line of keys which was obviously intended to accomodate a template describing each function. With a little Southern ingenuity you could even rig some kind of gadget to hold a different template for each set of SPFNs you use. 6) I wrote this program largely because I was disturbed by the lack of a macro capability in a certain nameless word processing program which otherwise has a very powerful and complete command repertoire. KSTROKES is intended to provide a few basic services which are easy to learn and use while keeping overhead to a minimum. You can do some fairly "big" things with it, though, if you have a few tricks up your sleeve. For example, you could put a "boilerplate" of standard text into a file, then call up that text and insert it into a document with an SPFN such as "^KRBOILER1.TXT" or the equivalent for any particular word processor. Also, you could define successive SPFNs which would perform the parts of a task between "pauses" for entry of custom material. Best of luck with this program. I hope it works well for you. Any problems or suggestions, drop me a line. ; ;TITLE ++ KSTROKES Version 2.1 for KAYPRO CP/M version 2.2 ; FALSE EQU 0 TRUE EQU NOT FALSE ; KAYPRO2 EQU FALSE ; TRUE, IF YOU HAVE AN OLD 2 OR 4 KAY484 EQU TRUE ; TRUE, IF YOU HAVE A NEW 2 OR 4 KAYTEN EQU FALSE ; TRUE, IF YOU HAVE A 10 ALTK484 EQU FALSE ; TRUE, IF YOU HAVE AN ALT. VERSION ; OF CP/M 2.2G - SEE KSTROKES.DOC ; ;Define several addresses ; IF KAYPRO2 FBASE EQU 0EC06H ;ORIGINAL FBASE FOR OLD 2 OR 4 ENDIF IF KAY484 FBASE EQU 0E806H ;ORIGINAL FBASE FOR NEW 2 OR 4 ENDIF IF KAYTEN FBASE EQU 0DC06H ;ORIGINAL FBASE FOR TEN ENDIF IF ALTK484 FBASE EQU 0E606H ;ORIGINAL FBASE FOR ALT. CP/M 2.2G ENDIF DESTIN EQU FBASE-0C06H ;PROGRAM DESTINATION BIOS EQU FBASE+0DFAH ;BOTTOM OF BIOS CONST EQU BIOS+07H ;BIOS JMP TABLE ENTRY FOR CONSOLE STATUS CONIN EQU BIOS+0AH ;BIOS JMP TABLE ENTRY FOR CONSOLE IN KEYDEF EQU BIOS+35H ;KEYPAD DEFINITIONS ; ;Define several constants ; CLRSCR EQU 01AH ;clear KAYPRO screen CR EQU 00DH FUNCT EQU 5 ;BDOS entry address BS EQU 008H ;cursor right LF EQU 00AH ;linefeed UP EQU 00BH ;cursor left CL EQU 00CH ;cursor up PBUF EQU 009H ;BDOS print function SIZE EQU 0400H ;size of the resident code, etc. ; ; ORG 100H ; ; START: LHLD 6 ;check FBASE MOV A,H LXI B,FBASE CMP B JNZ NOLOAD ;if it's nonstandard, quit ; ;Relocate stack ; LXI H,0 DAD SP SHLD OLDSP LXI SP,NEWSTK ; ;Check argument, if any ; LXI B,5DH LDAX B CPI 020H ;if it's not blank, JNZ NSTALL ; go directly to NSTALL ; ;Routines to alter default patterns ; MENU1: LXI D,MENU1T ;put menu addr in DE CALL DOMENU ;display menu and get response LXI D,MENU1J ;put jmp table addr in DE CALL DOOPT JMP MENU1 ; ;Code to define special function strings ; DEFSPF: MVI E,CLRSCR ;clear screen MVI C,2 CALL FUNCT LXI H,NCHAR ;check # of chars in previous SPFN MOV A,M CPI 65 ;terminating null byte is counted, too JM NCHOK LXI D,MSG1A ;print warning CALL PRINT NCHOK: LXI D,MENU2T ;put menu addr in DE CALL DOMENU CPI '9' ;finished defining? RZ ; yes, return to main menu LXI B,00H ;BC will contain pattern buffer offset SUI 031H ;make function a binary number, ; subtracting 1 in the process RAL!RAL!RAL!RAL!RAL!RAL ;multiply by 64 JNC NCARY2 ;if there was a carry, INR B ; put it in B NCARY2: MOV C,A ;put low-order part of offset in C LXI H,SPFNS-OFFSET ;put pattern buffer address in HL DAD B ;add in offset, DCX H ; decrement it, SHLD FILPTR ; and store it CALL SHOW LXI D,MSG3A ;print 2nd part of menu CALL PRINT LXI D,MSG3C CALL PRINT CALL FILBUF JMP DEFSPF ; ;Code to fill a buffer the beginning of which is pointed to by FILPTR ; NCHAR: DB 0 FILBUF: MVI C,6 ;get a character MVI E,0FFH CALL FUNCT ORA A ;if no character ready, try again JZ FILBUF CPI '~' ;if 1st character is '~` RZ ; leave contents unchanged PUSH A ;save character MVI A,0 ;set NCHAR to zero LXI H,NCHAR MOV M,A POP A ;restore 1st character JMP NXTCH ;and continue FLOOP: MVI C,6 ;get a character MVI E,0FFH CALL FUNCT ORA A ;if no character ready, try again JZ FLOOP NXTCH: LXI H,NCHAR ;increment NCHAR INR M LHLD FILPTR ;get pointer to last character INX H ;increment it CPI '~' ;is this the end? JZ FILEND MOV M,A ;no, put character into string SHLD FILPTR ;update pointer CALL DISPLA ;display character CPI CR ;if it was a , JNZ FLOOP LXI D,CRLF ;send a CALL PRINT JMP FLOOP ;and get another character FILPTR: DS 2 FILEND: XRA A ;null out A MOV M,A ;put null at end of string RET ;and return ; ;Code to set initial macro definition ; SIMDEF: LXI D,MSG1B ;print instructions CALL PRINT LXI H,MACKRO-OFFSET-1 ;put addr of macro string in FILPTR SHLD FILPTR CALL SHOW LXI D,MSG3B ;print instructions CALL PRINT LXI H,MACKRO-OFFSET-1 ;put addr of macro string in FILPTR SHLD FILPTR CALL FILBUF ;call routine to fill string buffer LXI H,NCHAR ;zero NCHAR XRA A MOV M,A JMP MENU1 ; ;Code for defining keypad ; DEFKEY: LXI D,MSG4 ;print instructions CALL PRINT LXI H,KEYDEF CALL SHOKEY LXI H,NUKEYS CALL SHOKEY LXI H,NUKEYS ;put pointer in H MVI C,18 ;put counter in C DKLOOP: MOV A,C ;are we done? ORA A JZ DKDONE ;yes, end PUSH B ;save registers PUSH H LXI D,MSG4B ;position cursor CALL PRINT LXI D,MSG4C CALL PRINT LXI D,MSG4D CALL PRINT DKL2: MVI C,6 ;get a character MVI E,0FFH CALL FUNCT ORA A ;if no character ready, try again JZ DKL2 CPI '~' ;was it an enya? JZ MENU1 ; yes, return to main menu POP H ;otherwise, store it MOV M,A INX H ;update pointer PUSH H ;save pointer PUSH PSW ;save character LXI D,MSG4D2 ;erase old new character CALL PRINT POP PSW ;restore character CALL DISPLA ;display new character POP H ;restore registers POP B DCR C ;decrement key counter JMP DKLOOP ;loop back for next key DKDONE: LXI D,MSG4E ;print message CALL PRINT MVI C,01H ;wait for response CALL FUNCT JMP MENU1 ;return to main menu ; ;Routine to set speed ; PAUSE: LXI D,MENU4T ;display "menu", get response CALL DOMENU SUI 031H ;make it a number-1 RAL!RAL ;multiply it by 4 LXI H,SETPAU-OFFSET ;store answer MOV M,A JMP DKDONE ;show them what they did ; ;Routine to process a menu ; DOMENU: LDAX D ;get MAX from top of table LXI B,MAXRES ;put MAX in argument of CPI STAX B INX D ;skip over MAX CALL PRINT ;display menu GETRES: MVI C,01H ;get a response CALL FUNCT CPI 031H ;is it < "1"? JM BADRES ; yes, it's meaningless MAXRES EQU $+1 CPI 00H ;is it > MAX from jump table? JP BADRES ; yes, it's meaningless RET BADRES: MVI C,09H ;erase bad response LXI D,ERASE CALL FUNCT JMP GETRES ;and try again DOOPT: SUI 031H!RAL ;make the response into a table offset LXI B,00H ;use BC for 16-bit value MOV C,A XCHG ;get addr of table addr from DE DAD B ;add it to table base in HL CALL MEMHL ;get addr of routine PCHL ;and go to it ; ;Print routine ; PRINT: MVI C,PBUF CALL FUNCT RET ; ;Routine to show contents of buffer ; SHOW: LXI D,MSG2 CALL PRINT LXI H,NCHAR ;zero character counter XRA A MOV M,A LHLD FILPTR ;get pointer to first character-1 PUSH H ;save it on stack SHLOOP: INX H ;update pointer PUSH H ;save pointer LXI H,NCHAR ;count characters in string INR M POP H ;reclaim pointer SHLD FILPTR ;save updated pointer MOV A,M ;put next character in A ORA A ;is it a null? JZ SHEND ; yes, end show CALL DISPLA ;use display routine to print character CPI CR ;if it was a JNZ NOCR LXI D,CRLF ;send a CALL PRINT NOCR: LHLD FILPTR ;get pointer JMP SHLOOP ;do next character SHEND: POP H ;restore pointer SHLD FILPTR RET ; ;Routine to show key definitions after option 3 ; SHOKEY: LXI B,NUKEYS ;get high order part of address MOV A,B XRA H ;are we displaying current or new settings? MOV B,A ;zero = NUKEYS MVI C,18 ;use C for character counter SKLOOP: MOV A,C ;done? ORA A JZ SKDONE ;yes, end DCR C ;decrement character counter PUSH H ;save registers PUSH B LXI D,MSG4B ;skip to right screen loc CALL PRINT POP B ;if displaying new settings, skip more ORA A ORA B JNZ CURSET PUSH B LXI D,MSG4C CALL PRINT POP B CURSET: POP H MOV A,M ;get a character INX H ;increment pointer PUSH H PUSH B CALL DISPLA POP B POP H JMP SKLOOP SKDONE: LXI D,MSG4A ;restore cursor to top CALL PRINT RET ; ;Routine to display characters being entered into buffer ; DISPLA: PUSH PSW ;save character CPI 020H ;is it printable? JM CONCHR ; no, it's a control character CPI 07FH ;is it a 'del'? JZ DELET ; yes, go print it MOV E,A ;just print it MVI C,2 CALL FUNCT JMP DIDONE CONCHR: CPI CR ;is it a ? JZ PCR ; yes, print CPI LF ;is it a ? JZ PLF ; yes, print CPI 01BH ;is it an escape? JZ PESC ; yes, print PUSH PSW ;save character MVI E,'^' ;output carat MVI C,2 CALL FUNCT POP PSW ;output character ADI 040H ;make it printable MOV E,A MVI C,2 CALL FUNCT JMP DIDONE DELET: LXI D,DELSTR CALL PRINT JMP DIDONE PCR: LXI D,CRSTR CALL PRINT JMP DIDONE PLF: LXI D,LFSTR CALL PRINT JMP DIDONE PESC: LXI D,ESCSTR CALL PRINT JMP DIDONE DELSTR: DB '$' CRSTR: DB '$' LFSTR: DB '$' ESCSTR: DB '$' DIDONE: POP PSW ;restore character RET ;and return ; ;Routine to load HL with (M) ; MEMHL: SHLD LARG LARG EQU $+1 LHLD 0000H RET ; ;Print messages after menu ; SAVMSG: LXI D,MSG5 ;print SAVE instructions CALL PRINT ; ;Set up intercept of BIOS CONIN and CONST functions ; NSTALL: LXI D,MSG6 ;print notice, version CALL PRINT LHLD CONST ;get original CONST destination SHLD OSTDST ; store it in dummy LXI argument LHLD CONIN ;get original CONIN destination SHLD OCIDST+1-OFFSET ; store it in dummy JMP argument LXI H,NDST1 ;set up level 1 call intercept SHLD CONIN ; by altering BIOS jump table LXI H,DESTIN ;"enlarge" FDOS and alter BDOS addr SHLD 06H ; by altering CALL 0005 destination ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; >>>>> NO MORE CALLS TO BDOS AFTER THIS POINT <<<<< ;; ;; >>>>> UNTIL INSTALLATION IS COMPLETED <<<<< ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ;Redo keypad definitions ; SETKEY: LXI B,KEYDEF LXI D,NUKEYS LOOP01: LDAX D ORA A JZ MOVEIT STAX B INX B INX D JMP LOOP01 ; ;Routine to move business end of prog to high memory ; (see "Soul of CPM", pp. 259-261) ; MOVEIT: LXI B,ENDP-BEGINP+1 ;# of bytes to move LXI D,BEGINP ;where they come from LXI H,DESTIN ;where they're going MOVEM: LDAX D ;get byte INX D ;increment pointer MOV M,A ;store byte INX H ;increment pointer DCX B ;decrement count MOV A,B ;both B and C must be 0 ORA C ; so OR them to see JNZ MOVEM ;otherwise do another byte JMP CPM ; ;Return to CCP ; CPM: LHLD OLDSP SPHL RET ; ;Can't load - print message and quit ; NOLOAD: LXI D,MSG7 CALL PRINT RET ; ;spaces for things ; OLDSP: DS 2 DS 30 NEWSTK: MENU1T: DB 5+31H DB CLRSCR,'KSTROKES +++ Version 2.1',CR,LF,LF DB 'Semi-intelligent keys for KAYPRO II and 4',CR,LF,LF,LF DB 'Options:',CR,LF,LF DB ' 1 - Define Special Function(s)',CR,LF DB ' 2 - Set initial Macro definition',CR,LF DB ' 3 - Define keypad',CR,LF DB ' 4 - Set speed',CR,LF DB ' 5 - Exit to CPM',CR,LF,LF,LF DB 'Enter your selection: $' MENU1J: DW DEFSPF DW SIMDEF DW DEFKEY DW PAUSE DW SAVMSG MENU2T: DB 9+31H DB 'Enter special function number (1-8) or 9 to stop: $' MENU4T: DB 9+31H DB CLRSCR,LF,LF,'Enter a number between 1 (fastest) and 9 ' DB '(slowest) to set the speed at which',CR,LF DB ' Special Function and MACRO characters are passed to the ' DB 'foreground program.',CR,LF,LF,'> $' MSG1A: DB CR,LF,LF DB 'WARNING! You have exceeded 63 keystrokes, corrupting ' DB 'one or more of ',CR,LF,'  the succeeding Special ' DB 'Functions.',CR,LF DB 'Re-define or forgo the use of the corrupted Special' DB ' Function(s).' DB CR,LF,LF,'$' MSG1B: DB CLRSCR,'MACRO initialization$' MSG2: DB CR,LF,LF DB 'Present contents of buffer are as follows:',CR,LF,LF,'$' MSG3A: DB CR,LF,LF,LF DB 'Enter up to 63$' MSG3B: DB CR,LF,LF,LF DB 'Enter up to 190' MSG3C: DB ' keystrokes. Terminate with "~"' DB CR,LF,' (To leave unchanged, enter ONLY "~")' DB CR,LF,LF,'>$' MSG4: DB CLRSCR DB '"~" leaves remaining New values unchanged, ' DB 'returns to main menu.',CR,LF,LF DB 'Key Old value (currently in force)',CR,LF DB '| | New value ' DB '(installed on exit to CP/M)',CR,LF DB '| | | change New values at cursor ' DB 'with single keystrokes',CR,LF DB 'UP ----- ',CR,LF DB 'DOWN --- ',CR,LF DB 'LEFT --- ',CR,LF DB 'RIGHT -- ',CR,LF DB '0 ------ ',CR,LF DB '1 ------ ',CR,LF DB '2 ------ ',CR,LF DB '3 ------ ',CR,LF DB '4 ------ ',CR,LF DB '5 ------ ',CR,LF DB '6 ------ ',CR,LF DB '7 ------ ',CR,LF DB '8 ------ ',CR,LF DB '9 ------ ',CR,LF DB '- ------ ',CR,LF DB ', ------ ',CR,LF DB ' ',CR,LF DB '. ------ ' MSG4A: DB CR,UP,UP,UP,UP,UP,UP,UP,UP,UP,UP DB UP,UP,UP,UP,UP,UP,UP,UP,'$' MSG4B: DB CR,LF,CL,CL,CL,CL,CL,CL,CL,CL,CL,'$' MSG4C: DB CL,CL,CL,CL,CL,CL,CL,'$' MSG4D: DB CL,CL,CL,CL,CL,CL,'< $' MSG4D2: DB BS,BS,BS,BS,BS,BS,BS,' ',BS,BS,BS,BS,BS,BS,BS,'$' MSG4E: DB CR,LF,LF,'Hit any key to return to main menu.$' MSG5: DB CR,LF,LF DB 'To execute a Special Function use "~", where ' DB ' is a number (1 - 8).',CR,LF DB 'To define the MACRO function use "~D~".',CR,LF DB 'To execute the MACRO function use "~X".',CR,LF DB 'To repeat the MACRO function use "~R~",',CR,LF DB ' where is a ' DB '1 - 5 digit number less than 65536',CR,LF DB ' OR use "~R~" to repeat 65535 times.',CR,LF DB ' During MACRO repetition, hit any key to stop early.' DB CR,LF DB 'To change the speed at which characters ' DB 'are read out use "~S",' DB CR,LF,' where is a number (1 - 9).',CR,LF,LF DB 'Immediately after installation, use "SAVE 16 .COM"' DB CR,LF,' to save the current definitions' DB ', if desired.',CR,LF DB 'After RESET, use " " to install the' DB ' current definitions,',CR,LF DB ' OR "" to update definitions from menu,' DB CR,LF DB ' OR "KSTROKES" to start from scratch.' DB CR,LF,LF,'$' MSG6: DB LF,'Installing +++KSTROKES+++ version 2.1' CRLF: DB CR,LF,'$' MSG7: DB LF,'CANNOT LOAD KSTROKES - RESET SYSTEM AND TRY AGAIN' DB CR,LF,'$' ERASE: DB 08H, 20H, 08H, 24H NUKEYS: DB 00BH, 00AH, 008H, 00CH DB 01AH, 018H, 006H, 004H, 005H, 001H, 013H DB 011H, 00FH, 00BH, 019H, 014H, 007H, 017H NKEYS: DB 00H DS 14H ; ;Code to be relocated to high memory ; BEGINP EQU $ OFFSET EQU DESTIN-BEGINP ; ;First, transfer calls to BDOS ; JMP FBASE ; ;Code to be executed on intercept of CONIN call ; NDST1 EQU $+OFFSET LXI H,DESTIN ;"enlarge" FDOS and alter BDOS addr SHLD 06H ; by altering CALL 0005 destination LXI H,NRET1 ;push new return addr onto stack PUSH H ; to intercept return from CONIN OCIDST EQU $+OFFSET JMP 0000H ;complete original call to BIOS routine ; (0000 is a dummy argument) ; ;Code to recognize shift character (~) ; NRET1 EQU $+OFFSET CPI '~' ;is it an "~"? JZ ENYA ; if so, do function RET ;otherwise, just return ; ;Code to interpret shift functions ; ENYA EQU $+OFFSET LXI H,NRET2 ;set up 2nd level return intercept PUSH H JMP OCIDST ;and call BIOS again NRET2 EQU $+OFFSET CPI 05FH ;is it l.c.? JM CAP ; no, jump SUI 020H ; yes, capitalize CAP EQU $+OFFSET CPI 'D' ;is it a "D"? JZ DEFMAC ; yes, define macro CPI 'X' ;is it an "X"? JZ EXMAC ; yes, execute macro CPI 'R' ;is it an 'R'? JZ RPTMAC ; yes, repeat macro CPI 'S' ;is it an "S"? JZ SETSPD ; yes, set speed CPI '1' ;is it < "1"? JM OTHVAL ; yes, it's meaningless CPI '9' ;is it => "9"? JM EXSPFN ; no, execute special function OTHVAL EQU $+OFFSET MVI A,07EH ;any other value, return "~" RET ; ;macro definition routine ; DEFMAC EQU $+OFFSET LXI H,MACKRO ;initilize macro pointer SHLD MACPTR LXI H,NDST3M ;set up 3rd level call intercept SHLD CONIN ; by altering bios jump table NDST3M EQU $+OFFSET CALL OCIDST CPI 07EH ;is it an enya? JZ ENDMAC ; yes, we're done defining LHLD MACPTR ;M = macro pointer MOV M,A ;store character in buffer INX H ;increment length SHLD MACPTR ; and save it MVI M,00H ;terminate? macro RET ;and return character to prog ; ;macro definition end routine ; ENDMAC EQU $+OFFSET LXI H,NDST1 ;restore level 1 call intercept SHLD CONIN JMP NDST1 ;and go there, discarding terminal character ; ;macro execution routine ; EXMAC EQU $+OFFSET LXI H,MACKRO ;get macro pointer, SHLD MACPTR ; and put it in volitile storage SEND EQU $+OFFSET LXI H,NDST3I ;set up level 3 call intercept of CONIN SHLD CONIN NDST3I EQU $+OFFSET LHLD MACPTR ;get pointer to next character MOV A,M ;get next macro character MOV B,A ;save it for now INX H ;increment pointer MOV A,M ;is next character a null? ORA A JZ FINMAC ; yes, finish up SHLD MACPTR ;store updated pointer LXI H,NDST3S ;set up level 3 call intercept of CONST SHLD CONST DCX H ;point HL at pause counter SETPAU EQU $+OFFSET+1 MVI A,1 ;say no this many times MOV M,A MOV A,B ;reclaim character RET ;and return PAUCNT EQU $+OFFSET DB 1 NDST3S EQU $+OFFSET LXI H,PAUCNT ;how many times have we said no MOV A,M ORA A ;is it zero? JZ SAYYES ;yes, done waiting DCR A ;update pause count MOV M,A MVI A,0 ;indicate no character ready RET SAYYES EQU $+OFFSET MVI A,0FFH ;indicate character ready RET FINMAC EQU $+OFFSET MOV A,B ;reclaim character PUSH PSW ; and save it on stack OSTDST EQU $+1 ;"Old STatus DeSTination" LXI H,00 ;restore original CONST destination SHLD CONST LXI H,NDST1 ;restore level 1 call intercept SHLD CONIN CALL CONST-1 ;check console status ORA A ;if key was struck, stop JZ NOSTOP CALL OCIDST ;clear stop character JMP RPTEND ;and end repititions NOSTOP EQU $+OFFSET LHLD RPTCNT ;otherwise, update count DCX H SHLD RPTCNT MOV A,H ;test for zero count ADD L JZ RPTEND POP PSW ;get last character LXI H,LSTCHR ;put it at top of macro buffer MOV M,A SHLD MACPTR ;put pointer in volitile storage JMP SEND ;and do macro again RPTEND EQU $+OFFSET LXI H,1 ;put a 1 in repeat count SHLD RPTCNT POP PSW ;reclaim last character RET ;and return to foreground ; ;code for repeating macro ; RPTMAC EQU $+OFFSET LXI H,0 ;zero counter NEWDIG EQU $+OFFSET PUSH H ;save counter on stack CALL GETCH ;get a character POP H CPI '~' ;stop if enya JZ RMLOOP SUI 030H ;make it a number PUSH H ;multiply counter by 10 POP D DAD H DAD H DAD D DAD H MVI D,0 ;zero in D MOV E,A ;new digit in E  DAD D ;add in new digit JMP NEWDIG RMLOOP EQU $+OFFSET MOV A,H ;test for zero count ADD L JNZ NZCNT DCX H ;if it was zero, make it FFFF NZCNT EQU $+OFFSET SHLD RPTCNT ;store count JMP EXMAC ;start doing macros ; ;Code for executing special functions ; EXSPFN EQU $+OFFSET LXI B,00H ;BC will contain pattern buffer offset SUI 031H ;make function a binary number, ; subtracting 1 in the process RAL!RAL!RAL!RAL!RAL!RAL ;multiply by 64 JNC NOCARY ;if there was a carry, INR B ; put it in B NOCARY EQU $+OFFSET MOV C,A ;put low-order part of offset in C LXI H,SPFNS ;put pattern buffer address in HL DAD B ;add in offset, SHLD MACPTR ; and store it JMP SEND ;complete function with same code as EXMAC ; ;Routine to set speed ; SETSPD EQU $+OFFSET CALL GETCH ;get 1 character SUI 031H ;make it a number-1 RAL!RAL ;multiply it by 4 LXI H,SETPAU ;store answer MOV M,A JMP NDST1 ;go back to intercept ; ;Little routine to get a character ; GETCH EQU $+OFFSET CALL OCIDST ;get next digit ORA A JZ GETCH RET ; ; MACPTR EQU $+OFFSET DS 2 RPTCNT EQU $+OFFSET DW 1 SPFNS EQU $+OFFSET DB 'This is special function number ' DB '1. It is 63 characters long.',0H DB 'This is special function number ' DB '2. It is 63 characters long.',0H DB 'This is special function number ' DB '3. It is 63 characters long.',0H DB 'This is special function number ' DB '4. It is 63 characters long.',0H DB 'This is special function number ' DB '5. It is 63 characters long.',0H DB 'This is special function number ' DB '6. It is 63 characters long.',0H DB 'This is special function number ' DB '7. It is 63 characters long.',0H DB 'This is special function number ' DB '8. It is 63 characters long.',0H LSTCHR EQU $+OFFSET DS 1 MACKRO EQU $+OFFSET DB 'This is the MACRO. It can be up to 190 characters long.' DB CR,0H DS 190-57 ; ;End of code to be relocated ; ENDP2 EQU $+OFFSET ENDP EQU $ END 100H   DW 1 SPFNS EQU $+OFFSET DB 'This is special function number ' DB '1. It is 63 characters long.',0H DB 'This is special function number ' DB '2. It is 63 characters long.',0H DB 'This is special function number ' DB '3. It is 63 characters long.',0H DB 'This is special function number ' DB '4. It is 63 characters long.',0H DB 'This is special function number ' DB '5. It is 63 characters long.',0H DB 'This is special function number ' DB '6. It is 63 characters long.',0H DB 'This is special function number ' DB '7. It is 63 characters long.',0H DB 'This is special function number ' DB '8. It is 63 characters long.',0H LSTCHR EQU $+OFFSET DS 1 MACKRO EQU $+OFFSET DB 'This is the MACRO. It can be up to 190 characters long.' DB CR,0H DS 190-57 ; ;End of code to be relocated ; ENDP2 EQU $+OFFSET ENDP EQU $ END 100H  NU-LABEL+}!"*͖* d  =""6#}|B=!"* "}00-!~G#~ }q+ph##a"p#w *+"+"+" +* +*+*+}!a6#6#q#p* +" +*+|`i"+* ,X5 }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}|?s#r##q#pw#w#~w#~w7!N#F#~#foho}|p`i}WP"+"*"*****ßP"+!9DM͹!+"*+:+R2+:'+2+d NN:4+#\$ͺ $T>$ :4+*ͺ *T>*.ͺ #>.2)+Ä-Eͺ #=.>->2+2)+OÄ>2+\\̺  ͺ 2 +d> 2 + ͺ #c,y>2(+c!)+q.•>2+ͺ #• É!+q^¨ͺ Û!+q-¹>2+ͺ >2+5+:w+O2+2+!x+r#:)+=2!+:+>  :+G  :+!+6hy@G+/% 2(+2+2+5+͹c:)+2+Gy@w:+!+>G >ʐ4!+5<2!+:+!+G:+©:+OxGx+W?< =¶zܢzԩ!+~͝ù:!+:+!+5G 5:+P:)+P>- 5G: +OW*$$ :+!+&G &O1z &y :)+:+:v+:w+c>  >0 > 2++ͩ͝!+~2+6G  :w+@2+!+ ڝ<ʜw>ã6!+p2+/O!+ #ʯ ʽ y2+=/2+:+>0  :+=!+5:+ 2(+!+~>. :+!+/A:+$:+G:+G2+x :+;!+5A $:+ :+~>E !+:+X5~ c/<-Gy x/ k Gy x0 :+ʏG  2+2+:+:+2+P"+|´:+~W#^#:+z~#9 |~:&+2+d NS"$+""+:4+/!(&1\̺  ͺ  ͺ / ͺ  +  1zI͘:+> !*4O:+b*. Yzq͘ >2*> T> TzÌ͘:+:*Ҕ> P<š͞q͞:+ʑ**&:*ښq>ÚͽÑͽq!+:*=q2+!+~5**+~ +"*+ 0G>0 9 0:(+:+:+7 7 >,C *+:v+> >-*0+|*F>2+~G#N#"0+"2+`i",+".+!#‡ &ð /ʮ &ʮ !ʮ \°  x° 2+d UN. x| "&+*.+| *,+".+*0+ +".+*2+~#"2+24+*$+~#"$+*"+|+""+ >  P"+!+454!d :4+#/!&$1 ͺ $>$  *A ͺ *>*+ -T ͺ #.>-+ \̺  ͺ  *0+++!"0+:00!{~Gwog:00> !> !>*o| F#N# NͰ # x  Ͱ p"d+2^+:00 ͸ *+#"+  *  >2*:^+ʑ 2c+2=+GW2c+ ~"o ` ~"f 2c+ ~,ʋ  . *d+a:*ʼ o&##a6#*Gw#³ *d+s#r:*# :c++~ " :^+   !>+q~!* w !N+rimproper input - reenter $ay|T ##ap#q#w xJ s#ra͔ xo ! A w#wyDM ͔  yDM͔ *+DM*+}|ڬ ODF#N# "+ͳ goͭ OͰ o&ͭ o&}2 o&E{2 xn&}!9O p"j+>2h+y2g+w#  +2f+2i+K ' +> -A >2i+K0> .p :f+ /2f+y³ K0F :i+=2i+^ Eʹ eʹ W҇ y Gʥ :h+2h+ҡ xå :f+ڳ :i+<2i+KF yK ʹ G-_ x KW GKW OxG{ G:i+@*j+wɯ2l+y2g+K+/-2>2l+/)DM)) O KW#:l+Fz/W{/_s#r:g+=2g+~#0:?^#V* }||~!=+N q!>+ ^!*!N+ n& PY  |##a"m+!!oo*m+! 9SLz*|4 PY y_xW@x# xoo$&ɯ> 7 7?zN#FyRx+`|g~~ws#r }n&oAC!aq++*zSS yxҳPY##a"o+BK!o*o+| ++ozSS yOxG ##a"q+BK!o*q+|~DMxxzx|~#+@o! yOxG~yx[PYa"s+BK!o*s+SS!"s+p!+~2u+w2*͛**&##axw#q#*!:u+2+ !*4^w|~ a~~_w# x ! aBK!++|DM~G#N#zw#s#x2@K'yDOw# ;yOw#w#w#w# K^#V* }||~!9 ʢʝ~#foF##ìä~#¤=~`i!9BKDM!9!9! 9N#F#BK͹!9DM͹DM͹!9DM! 9DM͹!9DM!9DMPDM͹!9DMcI!9DM͹!9DM:PLcÅ:ͣL!9DM͹PÝA! 9DM͹!9DM;:ͣ;LP;þDM͕:!9DM͹!9!9(!9DM @6H͹@PP"+͹*+!9~w{_!y+##!+2*+Z |g"+!H͚>'-w# †>@2w+2v+I+ù %*++*+"+>2+:w+W͹!v+:+w +͹!v+%+!+:+w:+W!w+m+ҹr2+R&m~+o&G>Ow# _q#g:+!v++҈>&Ͱ~+ͩÝ!+~+!+ڶ7>' #¤I+>'w#>'w #:+2v+I!~+~Pˆ:+ڈ6!w+~ ʐ+w# @ 6w{2++!+~#!!+~#,!x+q#<!x+"+~#ʈjG+*+f#4?WʈG+*+'w#u!+5*+#EI~+ͩ!+~ȯw+6+wª:w+<2w+OF!v+ 怮w ʅ_#~ȓAw>2+`i"+2++*+>'#>'#>'#>'#>'#>'#>'>'w*+#~'w!+~w:+=s2+ !+~+I~+ͩÝDZA2w+x2v+ʤOG>F2w+!+r#¯i`)!+~'w# ¹I!w+ + #?! ~!v+=>q# pT]w+ ~w!+~+G# /:+зc!~+ !w+5q!++w+kp!w+55Ip+ + + + + + + 'ï P'> 'ï o g"v+`i+*v+|ɵ!+~#~#~#~#~#~#~#~#!+'w#'w#'w#'w#'w#'w#'w!9~A<6G>Mw|`DM!xky)q)w)})҃)҉)ҏ)ҕ)||zµx)yOxGyxGyO#=¹ogeoµ)#O͚`i!:w+A Enter desired text for the line, do not exceed 30 chrs/line. |--------- max 30 chrs --------| Line 1 text: 4[ Maximum entry is 30 characters - Please re-enter ] Line 2 text: 4[ Maximum entry is 30 characters - Please re-enter ] Line 3 text: 4[ Maximum entry is 30 characters - Please re-enter ] Line 4 text: 4[ Maximum entry is 30 characters - Please re-enter ]  Your label looks like this: 4 -------------------------------- |  |  |  | 4 -------------------------------- [ Options: 

rint a sample, e-enter label text ]PR Print another sample for printer alignment? y/n > NY How many labels are to be printed?. Enter number (0 = quit): Returning to CP/M$ >> Now printing [ ] labels <<' Be sure printer is ON-LINE. Want to print more labels? Yes = More of the same No! = Enter text for different label Quit = Return to CP/M$ Your choice (y/n/q) > YNQReturning to CP/M*!"+"+!"++!F+!F+!F!"+*+̈́+F!"+*+̈́+F!"+*+̈́+F!"+*+̈́+F!"+*+̈́+F!"+*+̈́+F! "+*+̈́+F*+!͕+F*+!͕+F*+!͕+F*+!͕+F*+!͕+F*+!͕+F*+!͕+F*+!͕+F*+!͕+F*+! ͕+F*+͕+Ff">!+x*+!J͕*+ ͕̈́*+ ͕̈́͞*+*+Å"!!)"͞*+͞*+*+ä"! !)"͞*+͞*+*+"!"+"!"+"*+#"+߱ҹ"*+#"+Ұ"*+*+#!"+#!"+"*+#"+"*+#"+"*+*+O#!"+@#!"+2#*+#"+߱+#*+#"+"#*+*+*+*+͕ͦ!"+Æ#*+!M͕*+͕͞""+*+#"+e#*+ͦ!"+ý#*+!P͕*+͕͞""+*+#"+Ҝ#ͧ""+qq*+S͕!g͕*+͕ͦͧ""+qqqqq!ͦq!ͦq!ͦq!eͦͧ""+qqq*+!͕*+͕ͦ "+i""+qqq*+*+͕!͕*+͕ͦqq*+*+͕!͕*+͕!͕*+͕*+͕ͦ!5ͺ !+> *+{z$*+!D͕͞#"+*+*+͕͞é$͈""+!zͺ !+> *+{z1%*+!͕͞#"+*+*+͕͞$͈""+!ͺ !+> *+{zx%*+!͕͞#"+*+*+͕͞7%͈""+!ͺ !+> *+{z%*+!͕͞#"+*+*+͕͞~%i""+qqq*+I͕!`͕*+͕ͦqq*+!͕ͦ*+͕*+͕ͦ*+!͕*+͕*+͕ͦ*+!͕*+͕*+͕ͦ*+!͕*+͕*+͕ͦ*+!͕*+͕ͦq*+*+͕!G͕*+͕!^͕*+͕!g͕*+͕!t͕*+͕!͕*+͕͞ "+*+̈́!& '*+̈́!&I$*+*+͕͞v&>q*+ͦ*+ͦ*+ͦ*+ͦq>i""+qqq*+ͦ*+͕!͕*+͕!͕͞ "+*+̈́ͦ*+̈́!‘'ê'*+̈́!ʧ'3' 'qq*+͕!͕*+͕ͦq!ͺ > !+̈́ *+| (*+ͦ*+!C͕*+͕ͦ*+ͦ͝*+|!(*+*+͕͞'i""+qqqqq*+ͦ!V͞*+@!|ͦq*+!͕*+͕!͕*+͕ͦͧ""+>!"+ì(q*+ͦ*+ͦ*+ͦ*+ͦq*+#"+*+}|(>i""+qqqqq*+!͕*+͕!͕ͦq*+͕! ͕ͦ*+! ͕*+͕!, ͕ͦ*+!O ͕*+͕!h ͕ͦ*+*+͕!{ ͕*+͕! ͕͞ "+*+̈́! ~)qqê'*+̈́! ”)I$*+̈́! ʷ)*+*+͕͞:)*+ͦ*+ͦ*+! ͕*+͕ͦ͝͝N#F#BK͹!9DM͕*+͕ͦ*+!͕*+͕*+͕ͦ*+!͕*+͕*+͕ͦ*+!͕*+͕*+͕ͦ*+!͕*+͕ͦq*+*+͕!G͕*+͕!^͕*+͕!g͕*+͕!t͕*+͕!͕*+͕͞ "+*+̈́!& '*+̈́!&I$*+*+͕͞v&>q*+ͦ*+ͦ*+ͦ*+ͦq>i""+qqq*+ͦ*+͕!͕*+͕!͕͞ "+*+̈́ͦ*+̈́!‘'ê'*+̈́!ʧ'3' 'qq*+͕!͕*+͕ͦq!ͺ > !+̈́ *+| (*+ͦ*+!C͕*+͕ͦ*+ͦ͝*+|!(*+*+͕͞'i""+qqqqq*+ͦ!V͞*+@!|ͦq*+!͕*+͕!͕*+͕ͦͧ""+>!"+ì(q*+ͦ*+ͦ*+ͦ*+ͦq*+#"+*+}|(>i""+qqqqq*+!͕*+͕!͕ͦq*+͕! ͕ Thi i grea men drive labe makin progra fo Kaypr wit revers vide capabilities. GAMES COM !"#$%&'GAMES COM()*+,-./01234567GAMES COM889:;<=>GAMES DOC?K10BAKUPCOM@ABCK10BAKUPDOCDEKP-CLS COMFKPCPM COMHGHIJKLMNOKPCPM DOCPQKPCPM BUG RSKSTRO484COMTUVWKSTROK10COMXYZ[KSTROKE2COM\]^_KSTROKESDOC`abcdefghijklmnoKSTROKESDOCpKSTROKESASMqrstuvwxyz{|}~KSTROKESASM!NU-LABELCOMRNU-LABEL$$$REM =================[ Kaypro label-maker program ]===========================\ \ Written by Steve Sanders \ 08/18/84 \ \ \ Compiled with Digital Research CBASIC Compiler CB80 \ vers$ = "1.3" REM current version number REM ----------------------[ copyrights (c) ]----------------------------------\ copyrt1$ = \ "Portions of this program are (c) Digital Research " copyrt2$ = \ " The rest is (c) 1984 Steven L. Sanders" REM ---------------------[ define constants ]--------------------------------\ clr% = 1ah REM clear screen clr$ = CHR$(clr%) eol% = 018h REM clear to end of line eol$ = CHR$(eol%) eos% = 017h REM clear to end of screen eos$ = CHR$(eos%) esc% = 1bh REM ESCape esc$ = CHR$(esc%) bs% = 08h REM backspace bs$ = CHR$(bs%)  bell% = 07h REM console bell bell$ = CHR$(bell%) cr% = 0dh REM carriage return cr$ = CHR$(cr%) REM Kaypro video codes for all new models and any old KP10s inv.on$ = esc$ + "B0" REM inverse video ON inv.off$ = esc$ + "C0" dim.on$ = esc$ + "B1" REM half intensity video dim.off$ = esc$ + "C1" blink.on$ = esc$ + "B2" REM blinking chrs ON blink.off$ = esc$ + "C2" under.on$ = esc$ + "B3" REM underline ON under.off$ = esc$ + "C3" curs.on$ = esc$ + "B4" REM cursor ON curs.off$ = esc$ + "C4" REM String constants and DEFinitions header$ = \ " K A Y P R O L A B E L M A K E R v " +\ vers$ REM position cursor where needed DEF fn.cursor$(v%,h%) PRINT esc$ + "=" + CHR$(v%+32) + CHR$(h%+32); RETURN FEND REM turns up a clean screen under header DEF fn.new.screen% PRINT FN.CURSOR$(4,0);eos$; RETURN FEND REM turns up a clean screen under header + instruction line DEF fn.screen.two% PRINT FN.CURSOR$(11,0);eos$; RETURN FEND REM time delays DEF fn.delay% FOR delay1% = 1 TO 5 FOR delay2% = 1 TO 20000 NEXT delay2% NEXT delay1% RETURN FEND DEF fn.fast.delay% FOR delay1% = 1 TO 5 FOR delay2% = 1 TO 100 NEXT delay2% NEXT delay1% RETURN FEND DEF fn.long.delay% FOR delay1% = 1 TO 10 FOR delay2% = 1 TO 20000 NEXT delay2% NEXT delay1% RETURN FEND REM -----------------------[ program begins ]--------------------------------\ banner.screen: REM excuse me while I show off PRINT clr$ + curs.off$ REM cursor off while doodling FOR dash% = 1 TO 79 PRINT inv.on$ + "-" + inv.off$; dummy% = fn.fast.delay% NEXT dash% PRINT header$ FOR dash% = 1 TO 79 PRINT inv.on$ + "-" + inv.off$; dummy% = fn.fast.delay% NEXT dash% dummy% = fn.delay% PRINT:PRINT:PRINT\ " " + inv.on$ +\ " Copyright (c) 1984 by Steve Sanders " + inv.off$ dummy% = fn.delay% PRINT:PRINT:PRINT:PRINT:PRINT:PRINT\ " Designed for use with a Kaypro computer and a parallel printer." PRINT:PRINT\ " This program will generate printed labels on 1-up label stock." PRINT:PRINT\ " Labels should be aligned with the printhead just at the top of" PRINT:PRINT\ " a label. You can print 1 sample label before beginning a run." dummy% = fn.delay% PRINT:PRINT:PRINT:PRINT blink.on$ +\ " [ press any key ]" + blink.off$ dummy% = INKEY start: dummy% = fn.new.screen% PRINT:PRINT:PRINT:PRINT curs.on$ + inv.on$ +\ " Enter desired text for the line, do not exceed 30 chrs/line. " +\ inv.off$ PRINT:PRINT:PRINT bell$ + dim.on$ +\ " " + inv.on$ + "|--------- max 30 chrs --------|" +\ dim.off$ + inv.off$ input.one: INPUT "Line 1 text: ";LINE line1$ IF LEN(line1$) > 30 \ THEN PRINT bell$ +\ "[ Maximum entry is 30 characters - Please re-enter ]";:\ dummy% = fn.long.delay%:\ PRINT cr$ + eol$;:\ GOTO input.one dummy% = fn.screen.two% input.two: INPUT "Lin!e 2 text: ";LINE line2$ IF LEN(line2$) > 30 \ THEN PRINT bell$ +\ "[ Maximum entry is 30 characters - Please re-enter ]";:\ dummy% = fn.long.delay%:\ PRINT cr$ + eol$;:\ GOTO input.two dummy% = fn.screen.two% input.three: INPUT "Line 3 text: ";LINE line3$ IF LEN(line3$) > 30 \ THEN PRINT bell$ +\ "[ Maximum entry is 30 characters - Please re-enter ]";:\ dummy% = fn.long.delay%:\ PRINT cr$ + eol$;:\ GOTO input.three dummy% = fn.screen.two% input.four: INPUT "Line 4 text: ";LINE line4$ IF LEN(line4$) > 30 \ THEN PRINT bell$ +\ "[ Maximum entry is 30 characters - Please re-enter ]";:\ dummy% = fn.long.delay%:\ PRINT cr$ + eol$;:\ GOTO input.four show.label.text: dummy% = fn.new.screen% PRINT:PRINT:PRINT:PRINT\ " " + inv.on$ + " Your label looks like this: " +\ inv.off$ PRINT:PRINT PRINT dim.on$ + " --------------------------------" PRINT " | " + dim.off$ + line1$ PRINT dim.on$ + " | " + dim.off$ + line2$ PRINT dim.on$ + " | " + dim.off$ + line3$ PRINT dim.on$ + " | " + dim.off$ + line4$ PRINT dim.on$ +\ " --------------------------------" +\ dim.off$ PRINT which.opt: PRINT bell$ + dim.on$ +\ " [ Options: " + dim.off$ + "

rint" + dim.on$ +\ " a sample, " + dim.off$ + "e-enter" + dim.on$ +\ " label text ]" + dim.off$; answer% = INKEY IF UCASE$(CHR$(answer%)) = "P"\ THEN GOTO print.sample IF UCASE$(CHR$(answer%)) = "R"\ THEN GOTO start PRINT cr$ + eol$; : GOTO which.opt print.sample: LPRINTER WIDTH 80 PRINT PRINT line1$ PRINT line2$ PRINT line3$ PRINT line4$ PRINT CONSOLE print.again: dummy% = fn.new.screen% PRINT:PRINT:PRINT:PRINT bell$:PRINT\ " Print another" + dim.on$ + " sample for printer alignment?" +\ dim.off$ + " y/n > "; answer% = INKEY PRINT UCASE$(CHR$(answer%)) IF UCASE$(CHR$(answer%)) = "N" THEN GOTO how.many IF UCASE$(CHR$(answer%)) <> "Y" THEN GOTO print.again GOTO print.sample how.many: PRINT:PRINT:PRINT\ " How many" + dim.on$ +\ " labels are to be printed?" + dim.off$ PRINT enter.number: INPUT\ " Enter number (0 = quit): ";required% IF required% = 0 THEN\ PRINT clr$:\ PRINT blink.on$ + "Returning to CP/M" + blink.off$:\ PRINT bell$:\ STOP IF required% < 0 \ THEN PRINT cr$ + eol$; : GOTO enter.number print.labels: dummy% = fn.new.screen% PRINT:PRINT:PRINT:PRINT:PRINT:PRINT bell$:PRINT\ " >> Now printing [";required%;"] labels <<" PRINT:PRINT curs.off$ +\ " Be sure printer is " + blink.on$ +\ "ON-LINE." + blink.off$ dummy% = fn.delay% LPRINTER WIDTH 80 FOR labels% = 1 TO required% PRINT PRINT line1$ PRINT line2$ PRINT line3$ PRINT line4$ PRINT NEXT labels% CONSOLE more.labels: dummy% = fn.new.screen% PRINT:PRINT:PRINT:PRINT:PRINT:PRINT dim.on$ +\ " Want to print" + dim.off$ + " more labels?" PRINT:PRINT\ " Yes" + dim.on$ + " = More of the same" PRINT dim.off$ +\ " No" + dim.on$ + " = Enter text for different label" PRINT dim.off$ +\ " Quit" + dim.on$ + " = Return to CP/M" your.choice: PRINT bell$ + curs.on$ +\ " Your choice " + dim.off$ + "(y/n/q) > "; answer% = INKEY IF UCASE$(CHR$(answer%)) = "Y" THEN\ PRINT:PRINT: GOTO how.many IF UCASE$(CHR$(answer%)) = "N" THEN GOTO start IF UCASE$(CHR$(answer%)) <> "Q" \ THEN PRINT cr$ + eol$; : GOTO your.choice PRINT clr$ PRINT bell$ PRINT blink.on$ + "Returning to CP/M" + blink.off$ STOP REM =======================[ end of program ]===============================\ NT PRINT line1$ PRINT line2$ PRINT line3$ PRINT line4$ PRINT NEXT labels% CONSOLE more.labels: dummy% ='KP-LABEL%@*@}!"$͖* d  =""6#}|B=!"$ "}00-!~G#~ }q+ph##a"p#w *%"%"%" %* %*%*%}!a6#6#q#p* %" %*%|`i"%* ,X5 }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}|?s#r##q#pw#w#~w#~w7!N#F#~#foho}|p`i}WP"%"$"$͸*$*$ßP"%!9DMx!%"*%:%R2%:'%2%d NN:4%#\$ͺ $T>$ :4%*ͺ *T>*.ͺ #>.2)%Ä-Eͺ #=.>->2%2)%OÄ>2%\\̺  ͺ 2 %d> 2 % ͺ #c,y>2(%c!)%q.•>2%ͺ #• É!%q^¨ͺ Û!%q-¹>2%ͺ >2%5%͌:w%O2%2%!x%r#:)%=2!%:%>  :%G " :%!%6hy@G+/% 2(%2%2%5%xc:)%2%Gy@w:%!%>G >ʐ4!%5<2!%:%!%G:%©:%OxGx%W?< =¶zazh!%~\ù:!%:%!%5G 5:%P:)%P>- 5G: %OW*$$ :%!%&G &O1z &y :)%:%:v%:w%c>  >0 > 2%%h\!%~2%6G  :w%@2%!% ڝ<ʜw>ã6!%p2%/O!% #ʯ ʽ y2%=/2%:%>0  :%=!%5:% 2(%!%~>. :%!%/A:%$:%G:%G2%x :%;!%5A $:% :%~>E !%:%X5~ c/<-Gy x/ k Gy x0 :%ʏG  2%2%:%:%2%P"%|´:%~W#^#:%z~#9 |~:&%2%d NS"$%""%:4%/!(&1\̺  ͺ  ͺ / ͺ  +  1zI͘:%> !$4O:%b*. Yzq͘ >2$> T> TzÌ͘:%:$Ҕ> P<š͞q͞:%ʑ*$&:$ښq>ÚͽÑͽq!%:$=q2%!%~5**%~ +"*% 0G>0 9 0:(%:%:%7 7 >,C *%:v%> >-*0%|*F>2%~G#N#"0%"2%`i",%".%!#‡ &ð /ʮ &ʮ !ʮ \°  x° 2%d UN. x| "&%*.%| *,%".%*0% +".%*2%~#"2%24%*$%~#"$%*"%|+""% >  P"%!%454!d :4%#/!&$1 ͺ $>$  *A ͺ *>*+ -T ͺ #.>-+ \̺  ͺ  *0%++!"0%:00!{~Gwog:00> !> !>*o| F#N# NͰ # x  Ͱ p"d%2^%:00 ͸ *%#"%  $  >2$:^%ʑ 2c%2=%GW2c% ~"o ` ~"f 2c% ~,ʋ  . *d%a:$ʼ o&##a6#$Gw#³ *d%s#r:$# :c%+~ " :^%   !>%q~!$ w !N%rimproper input - reenter $ay|T ##ap#q#w xJ s#ra͔ xo ! A w#wyDM ͔  yDM͔ *%DM*%}|ڬ ODF#N# "%ͳ goͭ OͰ o&ͭ o&}2 o&E{2 xn&}!9O p"j%>2h%y2g%w#  +2f%2i%K ' +> -A >2i%K0> .p :f% /2f%y³ K0F :i%=2i%^ Eʹ eʹ W҇ y Gʥ :h%2h%ҡ xå :f%ڳ :i%<2i%KF yK ʹ G-_ x KW GKW OxG{ G:i%@*j%wɯ2l%y2g%K+/-2>2l%/)DM)) O KW#:l%Fz/W{/_s#r:g%=2g%~#0:?^#V* }||~!=%N q!>% ^!$!N% n& PY  |##a"m%!!oo*m%! 9SLz*|4 PY y_xW@x# xoo$&ɯ> 7 7?zN#FyRx+`|g~~ws#r }n&oAC!aq++*zSS yxҳPY##a"o%BK!o*o%| ++ozSS yOxG ##a"q%BK!o*q%|~DMxxzx|~#+@o! yOxG~yx[PYa"s%BK!o*s%SS!"s%p!%~2u%w2$͛*$&##axw#q#$!:u%2% !$4^w|~ a~~_w# x ! aBK!++|DM~G#N#zw#s#x2@K'yDOw# ;yOw#w#w#w# K^#V* }||~!9BKßDM!9͟!9! 9N#F#ͯ͟ÐBKx!9DMx͐DMx!9DM! 9DMx!9DM͐ͯͨ!9DMÌͨÌDMx!9DM"!9DMx!9DMͯͮͮ "Dͯͥbͥ !9DMx\̈́ͥ! 9DMx!9DMͯ}b} ã̈́}}DMT!9DMx!9!9!9DM xͨ@PP"%x*%!9~w{_!y+##!%2*% |g"%!HY>'-dw# E>@2w%2v%%͌x %*%¡%*%"%>2%:w%Wx!v%:%w %͌x!v%%͟!%:%w:%W!w%,%xr2%,~%o&G>Ow# q#&:%!v%P%G>o~%h\!%=%!%u7>' #c+>'w#>'w #€:%2v%!~%~PG:%G6!w%~ O+w# @ w6w{2%%!%~#!%~#!x%q#!x%"%~#G)G%*%%#4?GG%*%'w#4!%5*%#~%h!%~ȯw+6+wi:w%<2w%OF!v% 怮w D_#~ȓAJw>2%`i"%2%%*%>'#>'#>'#>'#>'#>'#>'>'wڨ*%#~'w!%~w:%=22%!%æ~%͟~%h\DZAw2w%x2v%cOG>F2w%!%r#ni`)!%~'w# x!w% +µ #?¯! =!v%ڻ=>q#¿ pT]w+ ~w!%~%G# :%з"!~%!w%5q!%%w+*p!w%55p% + + + + + + 'n P'> 'n o g"v%`i%ã*v%|–ɵ!%ã~#~#~#~#~#~#~#~#!%'w#'w#'w#'w#'w#'w#'w!9~A6G>Mw|DM!x*y)0)6)<)B)H)N)T)||ʚztx)yOxGyxڌGyO#=xogeott)گ#§OÑY`i!:w%Arint a sample, e-enter label text ]PR5 Print another sample for printer alignment? y/n > NY$ How many labels are to be printed? Enter number (0 = quit): Returning to CP/M$ >> Now printing [ ] labels <</ Be sure printer is ON-LINE. Want to print more labels? Yes = More of the same' No = Enter text for different label Quit = Return to CP/M Your choice (y/n/q) > YNQReturning to CP/M$!"%"%!"%%!F%!F%!F!"%*%̈́%F!"%*%̈́%F! "%*%̈́%F*%͕%F*%*%͕%F*%ͦqq!ͦqqqq!Wͦq!ͦ!ͦ!&ͦqq!k͞ "%*%ͦqqq*%ͦ!ͦ!ͺ !%> *%{z9 *%ͦ*%ͦqqq*%ͦ!ͦ!ͺ !%> *%{z{ *%ͦ9 *%ͦqqq*%ͦ!ͦ!,ͺ !%> *%{z *%ͦ{ *%ͦqqq*%ͦ!;ͦ!jͺ !%> *%{z *%ͦý *%ͦqqqq!yͦqq!ͦ*%͕ͦ*%͕ͦ*%͕ͦ*%͕ͦ! ͦq*%ͦ!7͞ "%*%̈́!m„!Ý!*%̈́!pš!\!>q*%ͦ*%ͦ*%ͦ*%ͦq>*%ͦqqq*%ͦ!s͞ "%*%̈́!!"*%̈́!"!Ý!qq!ͦ*%ͦ!ͺ > !%̈́ *%|U"*%ͦ!ͦ*%ͦ͝*%|`"!"*%ͦqqqqq*%ͦ! ͞*%@!0ͦq!=ͦ!"%ý"!"%ï"*%#"%gҨ"*%#"%ҟ">!"%"q*%ͦ*%ͦ*%ͦ*%ͦq*%#"%*%}|">*%ͦqqqqq!nͦq!ͦ!ͦ!ͦ*%ͦ!͞ "%*%̈́! g#qq"*%̈́!}#*%̈́!ʓ#9#*%ͦ*%ͦ!ͦ͝͝#$Gw#³ *d%s#r:$# :c%+~ " :^%   !>%q~!qq*%ͦ!ͦ!ͺ !%> *%{z9 *%ͦ*%ͦqqq*%ͦ!ͦ!ͺ !%> *%{z{ *%ͦ9 *%ͦqqq*%ͦ!ͦ!,ͺ !%> *%{z *%ͦ{ *%ͦqqq*%ͦ!;ͦ!jͺ !%> *%{z *%ͦý *This is the same program as above but for Kaypro's with no reverse video capabilities. GAMES COM !"#$%&'GAMES COM()*+,-./01234567GAMES COM889:;<=>GAMES DOC?K10BAKUPCOM@ABCK10BAKUPDOCDEKP-CLS COMFKPCPM COMHGHIJKLMNOKPCPM DOCPQKPCPM BUG RSKSTRO484COMTUVWKSTROK10COMXYZ[KSTROKE2COM\]^_KSTROKESDOC`abcdefghijklmnoKSTROKESDOCpKSTROKESASMqrstuvwxyz{|}~KSTROKESASM!NU-LABELCOMRNU-LABELDOCNU-LABELBAS?OLDLABELCOMFOLDLABEL$$$*+%"H%"F%"D " " "y 6"C+6+!^6 F+N+<!* !!9~#ʗ RO"k'k +}|+#~ʂu6#~#<ʷ>!4R6#6*!f * |ʴ!ͯ"r! ͯ" R Can't open > or < file.$èw*6 )! 9!"6*:B<*C 2B ́F  €> _*C~+#4N s> > !+:EºF2B_~ý   > G ʘG!* ͟> !+}  > _con:rdr:pun:lst: ==_~O7 !"# !  #¾i& ~º!h~#~#F6%pw6237!9Ly=S>wD<!gs 6#6 ~+|s#r{{ ڟ!+#^{!!Pw#w!g~<6 !|~r!N!nL}*eyb>w#%!=)${=S$btx h&{ !~!nN#F{p+pH#x¯ ڽ+!9~ !~b!5> 6> *e w`i#Q᯾%,!$|!!9n&:ʟɯ2>[!9L):|!PwL#4!^w>2>2-:Ecx:-O”! DMi:- !Write error - Disk full $`i7.!9~=+SV+^+F+N "I> w+ w w##w w #~+:&~##K@~#.7K&*I++Kw#=a O! ~_#V!$r+sbk#|}o|g}o|g}o|g|!,|}!­­,ɯ|ʙ!|}!-z{!,zz{!-|!|g|}! -ɵz{!-||g}o).{ozg+|/g}/o~og~#fos#rN#F#xr~#~#[[`iDM!z>‚S\))Ҋ =‚ɯßz>|>MD!x<³z>ڸjS\>))#  =¸>>H}(i{&]@*( !}2E!9L++|ʥ !!* N9!!Z N9!9L##L!K | !9L##!Q!!9L##Lg "( *( !* ͐ !*( "( * !" !9L* F!9L* F͛e * #" +!9LF|b !"  !9L* F!9L* F4[ ;* * * !}2E!" # !99}#͓ !9F< | * !9F}* #" !9F|) * | ! & ! !* +" !9FͯH !9F͓ͯg * !ͣ !" !9F|’ * * ͣ * " !9F+++ͯ° !9F͓ͯ !# !" !" !9Fͯ !9F͓ͯ !9F͓ͯʊ * 6!" * * M 2 * #"  * F! 9L͟( ! ! 9L͟!" * w * #" # * !ͣ !9F| !! 9LN9!" !" !# í * 6!" * *  * #" * F! 9L͟ " " " 3S* !! N" !9F Y !9F͓*] !9L!ͯ"] *] ʕ *] "] !_ NͨÎ !9F }!9F }!!=!9F!9F!!R!9L6 ! !9L#Q!9L!͔͓>!9LP͓ !9L*L!"L*L)!9LL͓ʔ|*L#"L+X*L)!9LL͙q"L!9LF|!9L#Q+FÙ! TYPER Ver. 2.0 by Harvey G. LordPlaced in the public domain on 10/14/83Simple line editor. Sends one line at a time to theLST: device (printer) or to a disk file: especiallygood for addressing individual envelopes.Usage: TYPER <== Prints instructions, output goes to LST: TYPER PRINTER <== No instructions, output to LST: TYPER d:file.typ <== No instructions, output to disk fileEditing Commands: ^H = Destructive backspace ^U or ^X = Cancel current line ^C or ^S = Clear screen  ^P = Display prompts , ^J, or ^M = Send line to indicated device ^Z = End of session ^B = AbortThis version of TYPER is Lear-Sielger ADM-3A terminal dependant.Press any key to continue.Press any key when your printer is plugged in and ready to run.^B aborts.PRINTERL----!----!----!----!----!----!----!----!----!----!----!----!----!----!----RSorry, I can't open the file.wdomain on 10/14/83Simple line editor. Sends one line at a time to theLST: device (printer) or to a disk file: especiallygood for addressing individual envelopes.Usage: TYPER <== Prints instructions, output goes to LST: TYPER PRINTER <== No instructions, output to LST: TYPER d:file.typ <== No instructions, output to disk fileEditing Commands: ^H = Destructive backspace ^U or ^X = Cancel current line ^C or ^S = Clear screen  Documentation for TYPER.COM Ver. 2.0 and it's relatives, OS-TYPER, KP-TYPER, M-TYPER ... by Harvey G. Lord Did you ever need to address one envelope, not have a typewriter handy, and want the Post Office to be able to read the address? TYPER turns your computer printer into a simple typewriter for small, one-shot jobs. *** USAGE *** ==> TYPER Displays one screen of prompts, asks you to get your printer ready, then displays a ruler line at the top of the screen. Any- thing you type goes to the printer (CP/M LST: device) when you press . ==> TYPER PRINTER Avoids the initial prompt screen and printer warning. ==> TYPER d:file.typ Avoids the initial prompt screen and redirects output to a disk file instead of the printer. *** EDITING COMMANDS *** TYPER responds to eleven editing commands. ==> Destructive Backspace: CTRL-H To correct typin%g errors on the current line, ^H. Many terminals generate a ^H with their left arrow key (<-) or with their backspace key. ==> Delete Current Line: CTRL-U or CTRL-X To delete the current line (so you can do it right this time),^U or ^X are identical. These are the same as CP/M's command line editing functions. ==> Display Prompts: CTRL-P To display one screen of prompts, ^P. The prompts are the same ones displayed when you type the program's name without the word "PRINTER" or a disk file name after it. When you type ^P in the middle of a line, that line is lost. ==> Clear Screen: CTRL-C or CTRL-S To clear the screen, leaving the ruler line at the top,^C and ^S are identical. When you press ^C or ^S in the middle of a line, that line is lost. These commands do NOT pause the program or abort. ==> Print line: , ^J, or ^M To send the current line to the printer or designated disk file, , ^J, and ^M are identical. This sets the cursor on the next line. Once a line is printed on the printer or a file, TYPER cannot edit it. ==> End of session: ^Z To end the session gracefully, ^Z. This sends that line's characters to the printer (or file), closes the LST: device (or file), and exits to CP/M. ==> Abort: ^B To abort the program, ^B. This discards any characters in that line and exits to CP/M immediately. There are three ways to delete the current line. (1) ^U or ^X visibly clears the line on the screen and lets you start over,(2) ^C or ^S clears the whole screen, including the current line, and (3) ^P clears the screen and displays the prompt message. It's best, therefore, to press ^C, ^P, or ^S when the cursor isin the left-most column. In that case, there's nothing in the line and nothing to accidently lose. The ruler line is a reference only. Its right margin is not a hard margin, only a guide to tell you when the right side of the screen is nearby. After the eightieth column, the TAB key generates single spaces, not five-space tabs. *** Editing Command Summary *** ^H = Destructive backspace ^U or ^X = Cancel current line ^P = Display prompts ^C or ^S = Clear screen , ^J, or ^M = Send line to device or file ^Z = End of session ^B = Abort *** SUGGESTION *** If you get a customized version of TYPER like OS-TYPER, KP-TYPER, or M-TYPER (Osborne 1, KayPro II, and Morrow MicroDecision respectively) rename it to TYPER. That's easier to type on the command line and the prompts make more sense. *** CUSTOMIZATION NOTES *** TYPER is terminal dependant. I've customized it for the Televideo 920C terminal and for the Lear Siegler ADM-3A terminal. The Televideo version is called OS-TYPER and the ADM-3A version is called KP-TYPER. To modify TYPER for a different terminal, three changes are required: (1) The #define statement for CLS may require modification. If your terminal requires a complex screen-clearing sequence, you may need a function to do the job. (2) The cursor(v,h) function may need modification, though the same one works for the Televideo and the Lead Siegler. (3) The del_line() function may need changing. Once you've changed these functions and the #define statement, recompile: c -c1020 d:typer. To change the tab stops, change the #define statement for TAB and change the ruler line in the ruler() function.Recompile as above. *** ACKNOWLEDGEMENTS *** Version 1.0 of TYPER was written by Dave Blair in 8080 assembly code. His version permitted no editing at all. It was interesting, but not very useful; typographical errors weren't correctable. Walt Wheeler suggested that a few editing commands plus constant ruler-line display would make this a useful program. TYPER Ver. 2.0 was written for the C/80 C compiler Ver. 3.0 by Walt Bilofsky (Software Toolworks,15233 Ventura Boulevard, Suite 1118, Sherman Oaks, CA 91403). *** OWNERSHIP NOTICE *** TYPER was written on 10/13/83 by Harvey G. Lord. After debugging and adding a few improvements, it was placed in the public domain by the author on 10/14/83. You may do with this as you please; use it, sell it, eat it for breakfast. I ask that you do not delete my name. If you find TYPER useful, please give it to friends. Please report any bugs or improvements to me at 203- 429-8044 after 5:00 P.M. EST, or on weekends. Enjoy. H.G.L. y code. His version permitted no editing at all. It was interesting, but not very useful; typographical errors weren't correctable. Walt Wheeler suggested that a few editing commands plus constant ruler-line display would make th& This is the release date of the disk. KSTROKE2COM \KSTROKESDOC `DSTROKESDOC pKSTROKESASM qPSTROKESASM NU-LABELCOM )NU-LABELDOC NU-LABELBAS OLDLABELCOM #OLDLABELDOC KP-TYPERCOM KP-TYPERDOC KPCPM .BUG 36 59 1536 12 KSTRO484.COM EE C4 3968 31 KSTROK10.COM 01 54 3968 31 KSTROKE2.COM E5 E0 3968 31 KSTROKES.DOC 29 FA 17408 136 KSTROKES.ASM 0D 35 20608 161 NU-LABEL.COM 7C D5 10496 82 NU-LABEL.DOC BF 5C 128 1 NU-LABEL.BAS F3 21 8064 63 OLDLABEL.COM 95 22 8960 70 OLDLABEL.DOC 9A E5 128 1 KP-TYPER.COM 58 97 4608 36 KP-TYPER Fog Library Disk FOG-CPM.051 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 specific programs. Filename Description -06-00 .86 This is the release date of the disk. -CPM051 .DOC This is the description of the disk contents. FLYKPRO .COM DD85 20K [Kaypro JetSim 1 of 2] A flight simulator for Kaypro users complete with graphics. FLYKPRO .DOC 6CDB 1K [Kaypro JetSim 2 of 2] GAMES .COM 3E4A 39K [Games 1 of 2] A menu-driven collection of games for Kaypros. GAMES .DOC C8CD 1K [Games 2 of 2] K10BAKUP.COM 1C8D 4K [K10BAKUP 1 of 2] A simple file backup utility for Kaypro 10 systems. K10BAKUP.DOC 4ED9 2K [K10BAKUP 2 of 2] KP-CLS .COM D844 1K Clear the Kaypro screen. KPCPM .COM FE40 9K [KPCPM 1 of 3] Discussion of ^P bug in Kaypro BIOS and program to fix same. KPCPM .DOC 2C15 2K [KPCPM 2 of 3] KPCPM .BUG 3659 2K [KPCPM 3 of 3] KSTROKES.DOC 29FA 17K ver. 2.1 [KSTROKES 1 of 5] Define eight special function keys and macros on Kaypro models 2, 10, 4/84. ASseMbler source is included. KSTROK10.COM 0154 4K ver. 2.1 [KSTROKES 2 of 5] KSTROKE2.COM E5E0 4K ver. 2.1 [KSTROKES 3 of 5] KSTRO484.COM EEC4 4K ver. 2.1 [KSTROKES 4 of 5] KSTROKES.ASM 0D35 21K ver. 2.1 [KSTROKES 5 of 5] NU-LABEL.COM 7CD5 11K [NU-LABEL 1 of 3] Label making program for Kaypros with reverse video. Prints 1-up labels with on-screen display. CBasic source included. NU-LABEL.DOC BF5C 1K [NU-LABEL 2 of 3] NU-LABEL.BAS F321 8K [NU-LABEL 3 of 3] OLDLABEL.COM 9522 9K [OLDLABEL 1 of 2] Label making program for Kaypros with non-reverse video. Prints 1-up labels with on-screen display. OLDLABEL.DOC 9AE5 1K [OLDLABEL 2 of 2] KP-TYPER.COM 5897 5K [Kaypro Typer 1 of 2] Turn a Kaypro and printer into a typewriter with this program KP-TYPER.DOC C0BA 6K [Kaypro Typer 2 of 2]  [NU-LABEL 2 of 3] NU-'