IMD 1.16: 1/06/2007 13:30:03 FOGCPM.199 --FOGCPM199ARK COM ARK COM-06-21 88 -CPM199 DOC -READ ME ARKDATERDOC ARKDATERHEXARKDATERSUBARKDATERASMARK02PATFORARK02PATAZM* !"#Z1 COMb$%&'()*+,-./0CHECK28 COM123456789:;<=>?@CHECK28 COMABCHECK28 DOC~CDEFGHIJKLMNOPQRPDTINS CHNSTUPDTINS DTAVWXYWHATSFORCHKZTTYPE3 BAS[\]^_`abcdefghijTTYPE3 BAS,klmnopTTHELP1 DATqrTTYPE DOCstuvwxyz{|}~TTYPE DOCTTYPE3 NOTTTHELP0 DATTTHELP2 DATTTHELP3 DATTTHELP4 DATTTHELP5 DATTTKEYBD DATTTYPEXA DATTTYPEXB DATTTYPEXC DATTTYPEXD DATTTYPEXE DAT TTYPEXF DATTTYPEXG DATTTYPEXH DATTTYPEXI DATTTYPEXJ DATThis is the disk name. -CPM199 DOC p-READ ME ARKDATERDOC ARKDATERHEX ARKDATERSUB ARKDATERASM ARK02PATFOR ARK02PATAZM Z1 COM &1CHECK25 COM 3HHECK25 COM CCHECK25 DOC E0sk file named FILE.CRC CHEK *.* HELLO.ABC makes disk file named HELLO.ABC NOTE: If byte 0103 is 0, no disk file is made regardless of request $ :go|g."+ :m2 U: ++ Disk file disabled ++ Y2\ 2p !"- P P <( \:mF8:n U:u E> 2L!l/  ~# M1 M:*  ++ File not found ++$: *- }“"+ >n‡P <± / !P /  w# S Done $::fU!eU2* !]!*?!9!9!"}2}2!"H}2}2!"!N"!9^#V!D^!1N"!!9^#V##^#V^!-͕DJ!9^#V##^#V!9s#rÞ!9~#fo#s#r!9^#V~C!9^#V^!B͕D!}2@!9^#V^!W͕D!}2@!9^#V^!S͕D!}2@!9^#V^!-͕D-!9^#V^!/͕D0@!N"!_,Ï*H#"H*H)!9~#fo^#V!p"!.!(?!9s#rzʍ!! 9^#Vs!!p"!!>!!p"!!>!9~#!.! 9^#Vs!!>*H#)!9~#fo!9^#V*HD+*ARK version 0.2 Brian E. Moore Usage: ARK [-bsw] [ . . .] Where: b = retain backup copy of archive s = suppress compression (store only) w = suppress warning messages unknown command.$$$.BAK.ARK?!! 9s#r!!9s#r!9^#V!DC!N"!_,!"JS*J#"J*J!9~#foD9*J)!9~#fo^#V!Hp"!:!HG?! 9s#rz¥!H! 9s#r! 9~#fo#s#r!" J!*J)!9~#fo^#Vs!9s#r!!s!9s#r!9~#!" J! 9~#fo#s#r!9^#V!9^#Vp"!Hu?#! 9^#V+) Is#r!H! 9^#V+) I^#Vp"!9^#V! 9^#V+)Is#r! 9^#V!@ʹD!I! I!9^#V+! 9s#r!9~#! 9~#!!!9s#r! 9~#! 9~#fo+s#r) I^#V͔DA)!9~#fo^#V"&J`i)!9~#fo^#V)!9~#fos#r*&J`i)!9~#fos#r)!9~#fo^#V"&J`i)!9~#fo^#V)!9~#fos#r*&J`i)!9~#fos#r_:!! 9^#V+Dʛ #)!9~#fo^#V)!9~#fo^#Vͳ>!)!9~#fo^#Vͳ>!)!9~#fo^#Vͳ>!)!9~#fo^#Vͳ>‘ )!9~#fo^#V͔<)!9~#fo^#V͔ !)!9~#fo^#Vͳ> !)!9~#fo^#Vͳ>0 )!9~#fo^#V͔<)!9~#fo^#V͔ !!N #! 9^#V+Dʣ #)!9~#fo^#V)!9~#fo^#Vͳ>  !X N"!_,G !/!û #! 9~#foD )!9~#fo^#V)!9~#fo^#Vn ô *!(JC3 *!(J !5J́@ͥ@**͈!!9 !}2*!(J !! 9^#VDuplicate filenames! ?!!9s#r! !L9^#Vͧ"!9s#rz :÷ʿ ! N"!J9^#VN"*#"!L9^#V!-9p"!89z@͓@!!@9s#r*| ! 9* %͓@*!9Cʊ !+9!9ͳ>4 !!9s#r!+9!9ͳ>ʹDŠ *!9 !9́@ͥ@**͈!!9! 9* %͓@ !9~# ! N"!L9^#VN"!!9́@ͥ@*U$!9 ! N"!L9^#VN"!! 9́@ͥ@*U$!9 ! N"!L9^#VN"! 9* %͓@!}2*>E!<9s#r*@E!>9s#r*!-9 !+9*!9^#V !! 9́@ͥ@*U$!9*!-9 !!:9́@ͥ@*U$!9!9^#V!'r Cannot read file: Updating file: Adding file: Adding file: ?!!9s#r:÷¶!FN"!S!TJp"!`!TJͧ"!9s#r!}2CJ!DJ!LJz@͓@͓@!"HJ!9^#V!9^#V!9^#Vͫ"JJͤDʨ!LJt@z@3A͓@*JJ͠p!PJ͓@!DJz@͓@!LJ!PJz@͓@͓@!z@ͥ@!9^#VU$!9*HJ!9^#V!s#r!9^#V!!DJ́@͓@!}2CJ!DJ́@!LJt@AC!DJ́@!PJt@AC!cN"!}2!DJ!"HJ͖C͓@!9^#Vͻ"JJͤDʛ!9^#V*JJ͝&o*HJ!9^#V!s#r!9^#V!!9^#V! !DJ́@͓@͓@!LJ́@!PJt@8C=!mN"!}2!9^#V! !LJ́@͓@!9^#Vͫ"JJͤD:!9^#V*JJ͝&!wN"!}2!9^#V! !PJ́@͓@!9~#!! 9^#V͛'!z@ͥ@!9^#VU$!9!9^#V%"JJͤD!9^#V*JJ͝&Ü!9^#V!9^#V!9^#Vͫ"JJͤD*JJ͠!9~#=!9^#V!'!TJ7:=:÷=!N"*#"!N" analyzing, $ARCTEMP.CRNw+storing, packing, crunching, Cannot delete temporary file! done.?:CJo&Ï!}2CJ! 9^#Vͻ"hJ*hJT!}2CJ!!!"jJ*jJ#"jJ! 9^#Vͻ"lJ*hJ͕D*jJD*jJB*lJ"hJ!}2CJ*hJ!}2CJ!D%,7cD!}2CJ*lJ"hJ!}2CJ*jJ!N"!_,æDcq|Bug - bad ncr state?! 9^#V%"nJͤD*nJ*HJ͇""HJ!DJt@z@3A͓@*nJ?!J́@m@'3A!տ͓@!J́@m@VC{!J́@m@A!ۿ͓@!ۿ́@@cz@!ۿ͓@Ü!J́@!ۿt@A!ۿ͓@Ü!ۿ!J́@m@ͧA!Jt@A͓@!ۿ́@!ѿt@VCʽ!ۿ́@!ѿ͓@z@!ѿ͓@!!,N!J͎?!"Ϳ>2п!?*J"߿:pJo&"sJ! 9^#V"ʹDʿ*߿.D DM*߿}o&"߿**߿HD*߿DE~o*߿ME^ oѳ*߿D*D"*߿D*.D"*ʹDʮ*}*.D"*"*|ʻ*}:pJ_*J"Jo&)))*J͕D!J:pJo&͖C;@́@3A͓@*ٿ:pJo&.!sJ#!"J*Ϳ*qJD0:пo&Dʼ*JDr!J:pJo&͖C;@́@3A͓@*ٿ:pJo&.!sJ#!"J:пʗ! }2pJHD+"qJ2пü:pJ<2pJ ¬*BE"qJü:pJo&HD+"qJ!J*JͩC"͖C;@́@3A͓@*JD *ٿ*!!sJ#!"J?!9^#V"ٿ!}2п"J!ѿz@͓@z@!J͓@!J͓@!տz@'͓@! }2pJHD+"qJ!"Ϳ!!,N!J͎?! }2pJ*ٿ! ͝&>2Ͽ?:Ͽ! 9^"J!"!z@͓@!z@;@́@B͓@!́@m@8C*#"*D"鿯2Ͽ!Jt@z@3A͓@!*J͌Cͥ@!9^͌Cm@ ͧAͳ@3A͓@! 9^*HD*JͅD"))J́@!t@!Cʕ*)^#V"J*))J́@m@VC*))J́@m@8C}Dc*D"*|!"**D"D*"*))J́@!t@!C,*)^#V"J*))J́@m@VC*))J́@m@bC}Dc*J! 9^"J*Ϳ*BEDʯ*Ϳ#"Ϳ+*)s#r*))J!́@͓@!J́@!տt@MC?*J!!J́@?!9"! 9^#V^#V"! 9^#V^#V"*##"++^#V*s#r!"*^#V"D*##"^#V"*+"|ʘ*"`*#"*~*~?v*YÕY**#"+)*s#r5*! 9^#Vs#r!*#"+)*s#r*)E>!9^#Vs#r"*+"#|*)*^#V*)*s#r?!*\=:#>?22#<2$5:#<2#:#o& D|:#R>2$:#o&~*f2$:$.:#o&6?.>2$:$O2#<\!E>"!*#"+)*s#r*ʹD!]N"!_,:#o&)))))"*#^!:͕D*^!?ͤD:*!w#6:#"!> 2#:#=2#O:#4*!6.#"!*#"+~*!w L#"!*!6>2$ÉToo many file names. ?!9~#+!!9^#V(-!9s#r!ͤD'!9^#Vͥ.!:!9^#VG?! 9s#rz!9^#V+! 9s#r! 9~#fo#s#r! 9^#Vu?#! 9s#r! 9^#V! 9^#Vp"! 9^#V!!?!!ͧ""|! 9~#g!N"!N"!N"!N"!_,! 9~#ʶ!!ͧ""|¶!N"!N"!_,rCreating new archive: Cannot read archive: wCannot create archive copy: ?*|*!'! 9~#ʪ*!'*|ʊ:÷o!7:!!ͦ9d!N"!_,!N"Ê!7:ʊ!N"!_,!!ͦ9ʪ!N"!_,Cannot rename! Keeping backup archive Cannot delete old archive Cannot rename! ?! 9^#V:DM|*!.N"!_,-`i Not enough memory! ?!!9s#r!9~#b!!9^#V!^!mD}!!9^#V%ͤD:÷ʨ!] N"*#"!9^#V!^!mD&!9~#fo#s#r!9^#V%͕D#!9^#V!9^#V%}2&):o&ʹD#:o&͵D&è!9^#V!^!mDU*VE|U!j N"!_,:÷d!{ N"!9^#V!^!mD!!9^#V%}2:o&Dʯ! N"!_,:÷º!:o&D! N"!_,:o&͕D2 !9^#V!!!!9^#Vh#!9!}2!9^#V!!9^#V! ́@͓@S !9^#V!!!!9^#Vh#!9!"VE!bad header. not an archive. bytes skipped. Invalid header in archive I don't know how to handle archive ?!9^#V!͝&!9^#V:o&͝&:÷ !9^#V!!!9^#V#!9! 9^#V!^#V*>E2Ec!! 9^#V!^#V*>E͕Dʇ!! 9^#V!^#V*@E2Eʇ!! 9^#V!^#V">E! 9^#V!^#V"@E?!9t@z@3A͓@;@@!!9~#!!9^#V!9^#V%͝&͕D!!!N"!_,Î!Write fail ?!9~#8"!9^#V!9^͝&͕D8"!9"N"!_,Write fail ~ e" > _#S""XE~ʃ"#x"*XE""MByo&)ZE^#Vxob@h)DM|»"!! 9^#V! 9^#V"@! 9^#V!'!ZGDM"`iDMx#!"!! 9^#Vͳ>#"! ^#V! 9^#V(-"%͕D=#!*%!9^#V!s!!9^#V!s! 9^#V@!9N#F!"'Å#*'#"'*'! 9~#foD#! 9^#V"+ì#*++"+*+|#!9^#V%")͕D#*'*)`i#DM+så#~#*'@!9N#F! 9^#V! 9~#foD"/!"-$*-#"-*-*/1EL$!9^#V`i#DM+^͝&͕DI$!$! 9^#V@!9N#F!`inmDs! ^!mDʙ$!͛'ʖ$!$!9^#V!͕D$`i~#$! 9`i^#V! ^#VD͖C;@́@HA͓@!! s#r`is#r!9^#V! 9́@ͥ@! ^t6!9m@8C%!!@!9N#F!7!z@ͥ@! ^t6!9͓@! ^!mDʍ%!7! ^#V`i^#VD͖C;@́@3A͓@ü%`i~#ʼ%!7`i^#V! ^#VD͖C;@́@HA͓@!7́@@!9N#F! ^#V`i^#V#Eʄ&! ^!mD%!!`inmDs`i~#&ͱ)! ^#V! ^#V! ^0";͵Dl&*;|U&!X&!`in}Ds!! ^#V`is#r*;! s#r`i~#fo#s#r+^!mD@! 9N#F! ^#V`i^#V#E&!9^#V!mD͛'!9^#V`i~#fo#s#r+s!mD@!GDM`iH1E '`i DM!''@!9N#F!"=`i~ʎ'! ^!mD\'!͛'"=! ^ͥ.*=}D"=! ^!mDʎ'! ^#V͔͕D*!"*`i^!<͕D+!"`i#DM^! ͕D+`i^! ͕D+*`i" `i#DM~W+`i^! ͕DE+`i^! ͕DT+!`i#DM+sW++*ͥ.*|z+!* -"Ê+!* (-"*͕D+!;,!p"* !>!],!>!! H=! _,!,`i* #" +)Os#r`i#DM~!,`i^! ͕D,`i^! ͕D,!`i#DM+s!,+Õ*!O* !_,Can't open file for redirection: $@*H?!DM`i Dʊ,`i#DM+ͥ.p,!9~#ʭ,!H=mDʭ,!,7:E*A:$$$.SUB@!"!@!con:CON:lst:LST:prn:PRN:pun:PUN:rdr:RDR:@! 9^#V!! 9^#V(-@!*H"!"N-*"*#"* Dq-*^#V!,͕D{-=-!"!!HDMË-`iDM`i~#ʬ-!9^#V`i^#Vͳ>ʬ-Ã-! ^#V"! 9^#V!mD#"*mD-*^*s{-!"!*mD.*#^*#s{.!"!! ^#V*s#r*##^*##s*###^*###s!,*s#r*!9^#V!9^#V!9^#V*^#V?! 9!Dʡ.!,*s#r!*@!9^#V!D.!9^#V! D.!"!!9^#V)))*HDM! ^#V! ^#V?!9s#r!! s! s! s`is!,! s#r!9^#V@!DMB/`i'DM`iQ1E\/`i%~f/:/!"!! 9^#V\="Q͕Dʊ/!"!*Q͕Dʜ/>"Q*Q͎>! 9^#V!mDʾ/!H=!H=͕D0! 9^#V!mD/!H=͕D0!"ͧ>!'0! 9^#V!mD͕D'0!"ͧ>!!!! s#r!# s!$ s*Q!& s`i!9^#V!s#r! 9^#V!mD#!% s!0!9^#V!s#r! 9^#V!mDʓ07ͧ>!@!9N#F͋8!& ^͎>!H=ͧ>!!% s!@!9^#V)))*HDM! 9^#V! 9^#V! ^#V`i^)H^#V?@!DM!9^#V"S*S&^͎>*S$~ʐ1*S$^!DDM! 9~#fo2Es1! 9^#VBK! 9^#V*S;2ʐ1ͧ>!! 9^#V`iDXD"U|1*U! 9^#V`i*SK9"W|1ͧ>*U*WDHDPY*UHDPYDM`i! 9~#fo1E/2! 9^#V`iD! 9^#V`i*S;2/2ͧ>`iͧ>! 9^#V@!9N#F͘8T2!! 9^#V! 9^#V!$ ^!ͪ?!$ ^! 9~#fomD!$ s{¨2`i!~#fo#s#r!@:Z·3!}2Y!}2[}2Z!Y! H=! !H=:[o&͕D2!}2Z!:Ho:Zo#}2Z&Y#s!"[:Zo&DM! 9~#foD<3! 9^#VBK! 9^#V*[Yͪ?`i*["[`i:ZoD}2Z`i@! 9N#F!"]Ì3*]#"]*]! 9~#foD3!9^#VH=`i#DM+s!͕D3Å3*]@!9^#V)))*HDM! 9^#V! 9^#V! ^#V! ^)H^#V?@!DM!9^#V"_*_&^͎>*_$~ʇ4*_$^!DDM! 9~#fo2Ej4! 9^#VBK! 9^#V*_?5ʇ4ͧ>!! 9^#V`iDXD"a|4*a! 9^#V`i*_S9"c|4ͧ>*a*cDHDPYDM|4!`i*aHDPYDM`i! 9~#fo1E35! 9^#V`iD! 9^#V`i*_?535ͧ>`iͧ>! 9^#V@!9N#F͘8D_5!! 9^#V!$ ^!!9^#Vͪ?!"H="|ʗ5!!$ ^! 9~#fomD!$ s{5`i!~#fo#s#r!@! 9N#F! 9^#V"e*e+"e#|#6`i^! ͕D 6! !H=`i#DM+^!H=5! 9^#V@! 9N#F! 9^#V"g*g+"g#|k6`i#DM+^! 9^#VH=D6! 9^#V@!9^#V)))-H~œ6!"z@!9^#V)))0H^#VBK!9^#VM7!& ^͎>!`in}Ds!H=!`inmDs7ͧ>! 9!! ^#V͌Cm@ͧAͥ@!$ ^͖Cͳ@3A;@́@3A͓@`7!"z@D<766?7!!# s! 9́@m@8Cʛ7!!! s#r!$ s!"z@! 9́@ͥCmD!$ s! 9́@m@AͥC!! s#r! 9́@@!9N#F!#H=`i!~#8!!$ s!`i!~#fo+s#r͘8"8!!"i*i2EU8*i+"i^!ͤDR8*i#"iU8(8*i!$ s!͕Dʇ8`i!~#fo#s#r!!$ s!@!"k@!9N#F!!H=*kPYͤD8!! ^#V*mͤD-9!!H="͕D8*͕D9!"!!!͎?!"k!*|9!`i"k!! ^#V"m!@!9^#V))),H^<@!X9<@"*H!"H*H‘9*H!4ƒ9#4*H+"H}Y9ʡ9ʡ9o&"*H@!9!F9^#V\=DM!9!H9^#V\=͎>!DM!9!H=ͤD:!9!H=!"!DM1:!9!H=͕D1:!"!DMͧ>`i@!9!29^#V\=DM͎>!9!H=DMͧ>`i͕D~:!"!!@!9N#F! ^#V+))"w͔DM͕Dl 6 #=o=>6#=x=y > ʐ= ”=Å= 9>ڭ=0_zW×=/·=ú= : >= A >[=@=a >{ >`w# .>>='>w#={o|g >'>w# >&jz!|*0> >?a{ 0:C>7!9^#V*Hi>*}|i>*H"H|!=!9}_|#W"<@ o&<@ 2H:H _<@ :H_!9>!9F+N+V+^+~+ngx>>># >og!9>!9F+N+V+^+~+ng対?# ?x"?w"?# ?w|!9^#V#n~D???#2?!|!9^#V#n_?#V?xo? +~_?|!!9~#foʊ?#Á?}!9^#V#N#F#nxʨ?s# Ý?! 9F+N+V+^+~+ng??}?? ?++w x?ɯ?~# x?DM!99`i?|DM!99!@`i~# x1@!9K@H~#R@!_@j@|!KÄ@!C~#~#~#~Cw#w#w#w!F*E*C"K"M*K*C"K"C*M*E"M"E!C>w#@!C~2C#@'C=ɯ<F!N~O$AF!N@A+"AC!K#=AC!K#RAC!K#fAC!K#zAC!K#ŽA!C~/w#žA:K?*C*E))ҼA,=´A"E"CA:F:K?AW!F~w+AA!Ny@CAKAyZB@CAyKAZBG!Cw#0B@ZBZBG!Cw#PB!Gw#`B> !C~w#oBOG!K#„ByB!C4=hB=B!C~w#©BOG!K#¼ByBÓBG!K#B!CG~6#B> !C~w#BCC!K#C=BA2C!A'C!<A2C'CA2C2C'CA'C2CA'C'C2CA2C'CA2C2C'CA'C2CA'C'C2C"C!"E"C|C!"E*CzCD}C}zCD||C/g}/o#zC/W{/_MD!C}y/Ox/G>))C, D}o|g=C=CDM!>))&D =D}{_UD|`D|7g}o;D{_UD)PD}{_UD|g}o`D|g}o|/g}/o|g}o|g}o|ʮDßD}ŸD|ʮD!}®D|ʟD!}|D}|?>o&zo&|D}|>o&|o&}/o|/g#}}o|gBK^#VzE#yE###E#xE#~#fo}|>?o&}|>o&]˳?@AAŁ@ Aρ@ ʁ@  AAہ@ށ@Aԁ@AAс@01A3@26@754A<@=?>A:;A9@8(@)+*A./A-@,$%A'@&"@#! A`aAc@bf@gedAl@monAjkAi@hx@y{zA~A}@|tuAw@vr@sqpAP@QSRAVWAU@T\]A_@^Z@[YXAHIAK@JN@OMLAD@EGFABCAA@@rr+ww+a a+ xx+???????????,,,,,,,,,,,,,,,,/,H,H,H,H,H,H,H,H,H-HH,12o3 , 4,6,6 Okay folks her i IS versio o AR fo CP/ (FINALLY!) Thi versio i stil rathe large I require abou 5-60 fo th TPA I ther i less i wil die Yes kno i isn' pretty bu wante t ge ou somethin tha WORKS Thi i th preliminar (read alph-test version hav ye t hav an problem (othe tha th fac tha i i STIL slow) A lon a yo hav enoug memory th progra shoul ru fine Bu t kee th lawyer happy US I A YOU OW RISK Th usag i quit simple: ARK [-bsw] - retai backu o .ARK - forc n compression - supres warnin messages AR d:archiv e:*.* Not tha AR wil eithe ad o replac member o th archive s yo d no nee t specif tha i i a update (Thi exampl make (o add t D:ARCHIVE al th file o E:.) Fee fre t tr othe variations Loo fo futur versio tha wil b MUC faste AN smalle a ge ri o mor an mor o th cod (fil I/ i th nex thin t go) als pla o doin som cod t actuall ge th REA dat fro th O/ fo thos usin Z80DO i tha necessar [righ no th dat i ALWAY th dat o th versio o ARK] I th meantime mak us o thi version an hav fun! Pleas sen you problem o comment (pleas includ versio numbe information! to: Bria Moor o GEMAI t B.E.MOORE 38 E 11t Avenue #2 Eugene O 97401 (503 344-155 [voice] as current date and time. MIRROR BAK!!VMIRROR FILn!VWY700 SYSZR3tAUTOEXECBATn,r?YCONFIG SYSf@oJ mABACKMSTR mXWS4 m ARK02 Dater Utility Copyright (c) 1988 by Tom P. Douglas, All rights reserved. This is a utility to install the current date and time in Brian Moore's ARK02 utility. It's done in the following steps: 1, Get ARKDATER.ASM on your text editor and modify Month, Day, Year, Hour, Minute, and Second equates. If using another version of ARK, you'll need to change the ORG value as well. Save the file. 2, Assemble ARKDATER. Most any assembler should be able to handle this file. Link if needed; you'll need a .HEX file. 3, Use R. Fowler's MLOAD or simular utility to install the new date and time in ARK.COM. Use: MLOAD ARK.COM=ARK.COM,ARKDATER.HEX 4, Ark your files, then use Bob Freed's UNARC, or simular, to check the date and time to make sure they're right. That's all there is to it; easy as 1-2-3-4! Thanks, Brian, for CP/M ARK; good job! From: Tom P. Douglas P. O. Box 10186 Colorado Springs, CO 80932-1186 :04453E006D104E6B43 :0000000000 ; Apply current date to ARK02.COM B:VDE ARKDATER.ASM B:ASM ARKDATER B:MLOAD ARK.COM=B:ARK.COM,ARKDATER.HEX ; ARK02.COM now has current date and time. ; ; ARK02 Dater Utility ; by Tom P. Douglas ; Day Equ 13 Month Equ 03 Year Equ 88 Hour Equ 13 Minute Equ 26 Second Equ 29 Date Equ ((Year-80) shl 9) or (Month shl 5) or (Day) Time Equ (Hour shl 11) or (Minute shl 5) or (Second shr 1) Org 453EH DW Date DW Time End Patches ARK02.COM to set date and time on members added or updated to system date and time. Configure for your system; this version for CP/M 3 "get date and time" BDOS request. Also contains Z1, a superbly fast and powerful assembler. (What the heck, it was small enough to include.)  MOLECULAR COMPUTER CORPORATION. 21g"V ; ARK02PAT.AZM ; ---------- ; This is a patch file for ARK02.COM that will set the date and time on all ; members to be added or updated to the system date and time. To install for ; your system, write a routine at SYSDT: which fills the bytes at ; MONTH,DAY,YEAR,HOUR,MIN, and SEC with the appropriate values. (If, ; for instance, you have system date but not time, just fill in the date; ; the time will default to midnight.) As it stands this file is configured ; to make a CP/M 3 "get date and time" BDOS call. ; ; When you're ready to do the patch, assemble with Z1 (included) or some other ; assembler: ; Z1 ARKPAT ; and overlay with DDT, or (better) Ron Fowler's MLOAD: ; MLOAD ARK02.COM,ARKPAT ; And et voila! ARK will now fill in the system date & time. ; ; Acknowledgements: ; First of all, of course, Thom Henderson for inventing the MSDOS ARC format! ; Brian Moore for porting and hand-optimizing (ugh!!) ARK02. ; Tom P. Douglas for digging into ARK02 and locating ARKDATE:, and ; releasing ARKDATER.LBR. This program patched ARK to permanently ; change the default date and time. ; Steven G. Greenberg, for his LDIR-B library directory program, from ; which the code to interpret a DRI date was lifted almost unchanged. ; ;--------------------------------------------------------------------------- ; ORG 100h JP GETDT ;get date before beginning program START: EQU 2A21H ;ARK has a JP 2A21H at 100h, which we overlaid ENDPRG: EQU 4901H ;This is 1 byte after the last page of ARK ARKDATE: EQU 453EH ;Address of default date-and-time within ARK ORG ENDPRG MONTBL: DB 31 ;This is the table of month lengths used FEB: DB 28,31,30,31,30,31,31,30,31,30,31 ;in the SYSDAT routine. Note!!! If the ;SYSDAT routine in the original ARKPAT.AZM ;is used, MONTBL MUST BEGIN AT xx01h (i.e. ;1 byte after a page boundary). MONTH: DB 0 ;these values will be filled in by SYSDT DAY: DB 0 YEAR: DB 0 HOUR: DB 0 MIN: DB 0 SEC: DB 0 ADDIT: ;subroutine to add A to HL &shift B bits right ADD A,L ;low byte LD L,A ;save it LD A,H ;high byte ADC A,0 ;include possible carry LD H,A ;save it INC B ;is B zero? DEC B RET Z ;yes, don't shift SHIFTR: ADD HL,HL ;shift left one bit DJNZ SHIFTR ;loop B times RET ;return GETDT: CALL SYSDT ;fill in date and time LD HL,0 ;clean slate LD A,(YEAR) ;get year SUB 80 ;MSDOS dates begin with 1980 LD B,4 ;shift 4 bits CALL ADDIT ;do it LD A,(MONTH) ;get month LD B,5 ;shift 5 more bits CALL ADDIT ;do it LD A,(DAY) ;get day CALL ADDIT ;shift zero bits LD (ARKDATE),HL ;save into ARK LD HL,0 ;clean slate LD A,(HOUR) ;get hour LD B,6 ;shift 6 bits CALL ADDIT ;do it LD A,(MIN) ;get minute LD B,4 ;shift 4 bits CALL ADDIT ;do it LD A,(SEC) ;get second LD B,1 ;shift 1 bit CALL ADDIT ;do it LD (ARKDATE+2),HL ;save into ARK JP START ;continue with ARK program ; BCD2BIN: ;subroutine to convert from BCD to binary LD B,0 ;zero counter OR A ;if BCD is zero, get out RET Z BBLOOP: INC B ;count one DEC A ;dec one (BCD) DAA JR NZ,BBLOOP ;continue if not done LD A,B ;load binary value RET ;done ; CPM3DT: ;data area filled by BDOS CJUL: DW 0 ;days since 31 Dec 79 CHR: DB 0 ;hour (BCD) CMIN: DB 0 ;min (BCD) CSEC: DB 0 ;sec (BCD) SYSDT: LD C,105 ;BDOS call (CP/M 3) LD DE,CPM3DT CALL 5 LD A,(CHR) ;convert hour CALL BCD2BIN LD (HOUR),A LD A,(CMIN) ;convert minute CALL BCD2BIN LD (MIN),A LD A,(CSEC) ;convert second CALL BCD2BIN LD (CSEC),A ; LD HL,(CJUL) ;get count of days ;---------------------------- ; The rest of the code is lifted almost without change from Steven G. ; Greenberg's LDIR-B utility (release 1.2). Many thanks. LD A,78 ; Init to 1978 LD DE,365 ; Amount to subtract per year (except leap) LD B,28 ; # of days in Feb for current year ; YRLP: AND A ; Clear carry SBC HL,DE ; Subtract 1 year JR Z,GOTYR JR C,GOTYR ; If carry, we've gone too far INC A ; Else incr year by one AND A SBC HL,DE ; Repeat for the following [non-leap] year JR Z,GOTYR JR C,GOTYR INC A INC B ; The following year IS a leap year INC DE ; So use 366 for DE and flag B with a "29" AND A SBC HL,DE JR Z,GOTYR JR C,GOTYR INC A DEC DE ; Put year and # of Feb days back to normal DEC B AND A SBC HL,DE ; Repeat for one more [non-leap] year JR Z,GOTYR JR C,GOTYR INC A JR YRLP ; And loop ; ;............................................................................ ; GOTYR: ADD HL,DE ; Reverse the last subtraction with current val LD (YEAR),A ; The correct year value LD A,B ; And save current Feb val for future ref LD (FEB),A LD BC,MONTBL ; Table of # of days/month ; MNTHLP: LD A,(BC) ; Get # of days LD E,A ; Put it in DE LD D,0 AND A SBC HL,DE ; Subtract JR Z,GOTMON JR C,GOTMON ; If carry, we've gone too far again INC BC ; Else move ahead to the next month LD A,C CP 13 ; (table is <256 b ytes, so this is OK) JR NZ,MNTHLP ; GOTMON: ADD HL,DE ; Once again, add back in LD A,C ; month # LD (MONTH),A LD A,L ; The remainder should be the day# OKD: LD (DAY),A RET ; And that's it! ; $YM!GT] DM! 2D1!\!*o"D"F+w"H)G LIB!$%0123456789?@ABCDEFGHIJKLMNOPQRSTUVWXYZ_ABCDEFGHIJKLMNOPQRSTUVWXYZ Z80MR Ver 1.2K3 File 12345678 0000 Error(s) Assembly Complete  HQQ HQQAyF>DyE> B8 yC> SyP> X> I yY >~#N+H8 yL> > >>ɿ8 >x ~A(=88 *<6 #"> 6 #"@>24[<:g:5*@+6+> #*B} > #:8DO*8[@"8~`8 G#+/(:~; Я:5!:4++~֠A25##:O![o0$~+~+og~+ngy!!!X ututO~ 8(~ 8~ 8~t u t u:̯O!_=(!c,h$ #: !X4q#4 #4 #44 6_> ͦ> ! > ͦ~²ÚĦF#~ͦ͟)"B*B#"B!!"Random R/W Error2k!E~0O"l=w*l~#^#V#*l:kw#s#r#>!2>"2 !Print File Write Error w#ÔPrint File Write Error*<͔*<{G~#ͦ: L: XʾLҾ!R8S<[!"< 80w#ɃUNDEFINED@@DOUBLE DEFINEDERRORREDEFINEDPUBLICEXTRN#ASEGCSEGDSEG!"~͒~#ƒ}F#N#">2>2*H*!~ ! è Symbols ͔K͔͔(w#> w#  6 #:þ*<:<226 #6 #*B|> #"8*<w:~'2~:}'2}Gþ:4(:(:5?:(:/* G!<ʄʄ:[ī'6 #6 # ¢6ɯ24ͅ2! ڢw#â͓!'2 ܰڢ'ʛw#24:*<͔` #2 :w2* :$ !U2; :w: 0 6*JC2V :w#Q {2h :w# Ͱ:|t !! w#!  :2 ! :º _At t <2 c . ! > w#w#w! c ͅ ;t [!|42 *8"6!"8 p! ! #12345678ABC Include File Open ErrorNot Enough Memorybk6 #6E#6N#6D#6 #6 #6*8"8[8ʷ!!R!   !g!bk^!g!2|*6"8:|s![8P!!r R!r rQ !g!P!g![sR|[uRU_!F~#~# ( #$> w:O![ !p6#^#VL"*<#} z { *>:<":"*B|([@[6 #6 [8[*8++"8p"*> ">A <! "8!Q!!Z6A#6Z#6M2q: Q"pInput File Open Error*n+~+ng#>"n[x*nwSx(^# 80F#~[##O2[#> F#> F#:*U\"!~G>:F#:zr#~F#O#2F#>F#!E~#^#V#ŷ$!HEXOBJCOM>C2*>2F#2#2: Z(!"F!H"n!E66@!!!!#:(!#:z(!#*2A: !"!!"xObject File Create Error>*<wR)D[>2$!"<>2$: L0!!!6P#6R#6N2: "<Print File Create Error[HRDM!"H:K;!x DM?%`iy(!0++++81%#Ĵ>O5<ͶN+1 :U$n&H>=m&:VG$ :̍&=2!&_ !~ ̊&4!b&0&!OO:&x Aڒ&:*C’&>Ķ2p"q!!:K<*H;!!9%4 Macro or Expression Nested too DeeplyStack Ove rrun!ܰ;̰'x(G͂+xŸҐ'Gt'"O2Ny233":O:N=Ҟ'":O*O:NGt' :'='2'q':'<2')ͥ ''%$IJeo'''!!''('2(::җ&0#&×&:O2:+(y+(:2ͤ:+(B(:B(:2:2OB(yIJ4(xIJ:2¦'2lgæ'yIJ4(xIJ:2¦'2gæ'yIJxIJæ'Ͳæ'o(x(xʦ' )(o(xʦ' |g}o(yoxg!æ'o( )})!æ'o( )+|)#)o( )|)#)o( )#)|#))o( ))#)>O>Gk)!xk)yt) É)o(~)æ'æ'o(|'!zʞ)~)ô)4( æ'O( )æ'yIJo(xIJ}/o|/gæ'o(xgyoæ'o(xgyoæ'o(xgyoæ'Ͳ!"L}(|xk)ᯰk) <*k) "Lk)"*Lk)"L*o("*æ'o("**Læ'\)*)/i*+)-)&)^)=)>))<:)NOT )RES (MOD t*SHR (SHL (AND )OR )XOR  *EQ )GT ))LT :)UGT J)ULT ])HIGH}(LOW (F#~#fo1 > w#:Y +.+!*U~+O#ѱ+###?+."+O!*~w+#F#~#foɷ####i+*_+*_+!):[!ܫͫ~@wyͫͪѯ2[2S:4s":[ͮ+![:Tʸ+:T̓%2[:,*a~+ѱw#s#r>Hģyīyѩįzį{į*>z { #~'w+~'w͑#">2y22͑#"yO:2">2: ¡,>2*Q͑#::*C :z}F#:yk,}:Q,Q,_:G:Q,*zQ,{Q,*&w!4ɀ !!-!:p(  c":?-:O~O#^#V#"Qy ( Z> _-{ZW>g->0r-ĵy! -o|gF>ʍ-AOͨ,:4{ċ"s>0ʶ-ly̨,:4zċ"sy( B*<w!:-!-̹̹̹̹̹@-̹+2-*,-!--+. (.ͮ[8Q U f':41,͘++*͓#":"q'yĤ}>2*͓}̮*}|:2*͓|̮+"*+xy"2+q'ͮ+y2*B}Ĭ*}Ģ!{4&(33!d~. #~.~#/.![:TGj%%/[J>/%*F "F![*Js#r2[y}|&"<ĵ1 !U~Aڀ/€/G: 2mq'|/}ʘ/:2:G*:O!ME""(\/>@2\/)ͥͤ/:k >&2mF/nF/:̥̪/! ~6#,0ͥ/;!ͥk >& (?0̰ܰ>.->2S+/:/0@2S: @0:aİ>.:S.>.->2S+/:/0A2S: y0:i0mo?m>>ɇ.00Ҷ0:ͥ0%.*2S:ͥ0ܰ.:S.-:S>2S0.2S+0:00O:S2S>.:S.E". T".>2S+/:İ:İ*}İ>o:S2S 1>..+>m1>l1>l12z2+M ͝1Ͱ*J~I  #~N#~P#~A#~G#~E:!1(#qO". R".>+0: 1:SF.-:00G:S.,".>0.)x.". *22>.+".>.B:+2> .B". C".+/:'+2>2S1P". A  C 24͓q':5!yĤ| !*<6 #6 #+}“2U". B>1".L>81".Rf2«2 A»2>(1CE2)1 F>7 .".L22 A> 1".S". T".+0:ĵ:ĵ*}Ǵĵ>Dž.S>61".ͰGP 2J3:E(O  2_3:NA3 2k3:ZCZCM8 Pڀ3y30BKCX3Í3͙3>.+Cҥ3>.NEt1î3E". T13 Iڮ3¼3Mt1A> .>1Dgt1R".2 C33 A> .>1A> .>1Dot1L33 C4 4 A> .1B". L  I  C +>2z1 :U ̥%*a ~w Ī,f4.İ>. .-4>O%. P%.+0:,Ҡ4(%.:2>0.Uک4%. SG4 H%.ö4U". T". Dځ0t1It1Á0>1::*C!vٷR R !wH"RRܡ|+ |+ȯF#D5R". G5f'ͮ+:p5 Ĥ5+I". Rt1".TV54 D‰5 Rt1".L". I". S". T".͓_A #G,(_N F"._F xO! q,55 _O O³5 P> .".A". M  E !564 +E;6%6 GDt1".ͬA C  R  O *B} :[(![~E #~N #~D(!h#626:(w#ï6q ̬#,ʦ66[: /!կ2^7 ( (6ͅ_E(k: Z([:(*J x8p#(p##.w# "J'6!{4ͬ2[:( *J6#"J>ī_N _D 2|7:(M(6+>."..".>.>.:,".:-ڈ7’7>Ù7/Gj1".0¹7Oj1j>.".:'".:i77>./Wj1".0 _j1j>.".:'".:i78> .G İxA8<԰O ~.#~̰.G:Sv̰.2CS"s"":@̰!c8:$8-.-.>6.--:K[*{**!1!!:@!88:0҇8:ͥ0Ғ8!8:$8-:0ڡ72S:ͥ07.:Spv̰.-+/: 8: s8:08@2S:0V8:ͥ0 8:Sp̰0I". S". T5".O C". A". L".*B|̬#Ĭ29:̬!iD,*J+6#29:(w#ï96#i  6#"J,Î9I9 Rt1t1D".m9 D99 Rt1t1+BK,ʌ3,X3PY:Ĥ:o:g++|yġ|<(=ġ}>2&"|2:S.-$%ġͰ8R".:> > 9s:2Sf':p( c"*>::%:*:O=:m}1nʂ1".& >./: >.-Py:: >€f'.-FQ.".I". Rt1t1D; Rt1t1>.>#.>N". CH0;+0:)0/0-';1;: 2M:5;0:ĵ:ĵ*|ĵ}ԵF-t1Vt1^t1A". L  T>v .L". S". Et.".I> .".J;´; E". C".l".:-}1.ʂ1+x.%.(%.:(%.'>.%.+/:,%./*<;:+>.%.X!<> .X7. T!2z1 :U ̥%*a ~ʉ1".I> .".J== N". Z".+>Í:22'c= ܰ2-F='Z=È=T". A".+'F=f'-,|=A". Am=>' .Bڐ=y=D". B !6 <6My=".Sڿ=Oʡ+y|ѱw#s#r>.>+.>Eڠ=)= C=+0:)ھ0/Ҿ0-;>E> :2>1S". E  G>ʉ1O". N  DQ.A". L  L :>:>Ā:Cڤ>‘>>? .L>/ .".I> Rt1t1P>|> Dw>> Rt1t1I". T>@61".S". E  G>ʌ1.".>.:.2>). +72".-G?0?>.:-2>).D".+/:' >2S1+".>.J72D". Ck?+/:'…?>2S1Nڔ?? D>1". ܥ'?w#?q# '? ,?!;w#?'?w#? *c>+F+N=@"J"e"c*B+"B!Uj%^#V*:|:[*c*e*J>q#p#=Z@"J"e+!gD,*J"c6#:g :h ?6#"J'[*B#"B*<"@*eP~# @ A XA DA#@@ð@*cA@#@@@+33>?@@~# A@@~&°@#ð@>#@ð@G*c~#3A%Að@~#/A /A@3A"e> > [@'Bà@G> @ð@? ?>I><".".;c;:".9k6T654".)42".".".".1L S Et.C O N DQ.FQ.EJECTHEADINx INCLUD6LIST6MACLIS~+![:(6!AE8 NړA D Cڸ.ʔ.I Fʔ.!"4: Z![2?B*D![4 x2T: 2XB*E1 ͅS:-@:[:U AA".!cAo0$~#fo :1 ͅx!UAAs%+~+ng<Ͷ5!RB2B:̫G2B:BBBx$ !~(̹B4!C_ !~̴B=w!bC0C!OO:x AH":*CH"::6+fC ±B{ "z#| # "z RRġzġ{ "".".".".".".".".".QB".".".A".".".".".".".".".".".".".".".".".".QBBB".".BBB".".".".B".".".".".".".".".".".".".".".".A".".".BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB".".".".BB".BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB".".".".".".".".".".".".".".QB".".".A".".".".".".".".".".".".".".".".".".QB[B".".[B[B".".".".".".".".".".".".".".".".".".".".".A".".".[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B".".".".[B".[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B[B".".".".".͑#:1*F:1*ƌ2"}Ė#͑#">ƀ2>2*a͑#!;6~!6#w#w#6*H:z"aFFF*a "a~ N> zF>zFyzFzF#^#V:²F>'FzF"ʹ$!"B"g"i!XY 6!pq6T62[͑#*":2͖#:z!:} :~ ͷ͓$#1!{6!G"J͸F!'B:2( $eF!"8!'B:{]G!4F#4F!ͷ $eF͸F]G:0000000000  LIBͫCs  { 985 BORLAND IncB 0_0H,_ Televideo 912/920/92P"2"25["5"5=00 *EE RT(1)1~7#~= oͦkԄ!!"~#(}:$= +*!5!*!!:(2!5:(>2!!!:O::O:!*! !45(! +/ 0y0( d!k5!{5__o&  :(͠|(  *"x2y( >28!"9!! og2"">~22 9/4*9 Co&ͦͣ} [ (!e{ͦA8Q0G: x@!\w# (͂ ?(*( .( w^. ^!h6# (?( *( ͂( w#>?> w#ͦ 8 !ɿ .,;:=?*[]<>{}a{ |ʹ}ͽƐ'@'7||}>2ͯ*Bڨ  "og"2>2!  ""*B"[Ru*"^#V#^#V#N#FO/o&9O/o&9!9(> (G!9 w#Eͺw}8' RB0 >' RqRR!+ Ͱ R!+ Ͱ r!+ Ͱ r!+ Ͱ r!# Ͱ r!+ Ͱ T]KB!z> S>))0 = | |̀̀DMgo>jB0 7?= H͒<z5a)a<z {0Gɯgo||~}||/g}/o#}o&K[xAJSJDM!b"!6J"DM'd } ) W _}8(8J`9{T]=o`9y ) >' ́ ͬ͗ }>' xˆ }} ˸T}ٕ(0D=z ,= ( ͒ 0%{ , 7 ?(8ͬ x ͆ - r 8˸x ͏  ,-xG}r }مM 9r .>#n0͒ { = - nx ͇ ,-(-˸G,-r }ٕ?M 9.> 8ͬ ?= u+-(>͆ 0ͬ ͆ 8 ?x ͇ , 78ƀ8ƀ8ox٨!دoGOW_gɷɷ|لg{ً_zيWyىOxوG|ٔg{ٛ_zٚWyٙOx٘Gxٸyٹzٺ{ٻ|ټx٨ xx( ?}ٽ }ցr <(r 7{ = |٤g{٣_z٢Wy١Ox٠G{ ͬ ́ }x>' ͬ}ƀ/ƀo -́ }0͎-́ ͎,}l˸ 8 4 ͗ x( - 8́ - 8,́ }l8;*!͗ ! >4ͬ͗ ͗ ͬ--- ́ ,,,-xGg?+2n*8t z~,->' x' ͘}. ͆́ , ! >4,͢- o&0%,͗ }gr }؉}颋.:}8c~I$I~L*͢ٷx˸ }0G,<},-(-́ !>I0 ͗͘ o8 ͆ >' m.`1pF,t6|!wS<.z}[|%FXc~ur1}͆ٯx(<˸ 8 !~J 0.O!>s 8 =  n s͗ ͆ .n 0 ͎-́ OT0 j oD,:j !I}袋.}8c~I$I~L! >ͬ͗ I× nn ͗ = ͆ nf^VNF!DLT\I!!53!r1!͒!> x #-= o˸x͆(- }(x>8(z ,z `iÃ!>' |r |̀>)=|(DMbo˸88x(0 8> ̀x(>-{(ay( z(>. ( {>E>+|(|Dg>-|/ 0:p# ~# +>0w#,-  60#}˸}րogM| .(z = ~> x0w#xG%͇ %͇ ZJDM%͇ = _~65+~hìx-Sx9?+{Η@}|z z gZJDM0{ ,7}o˸? #yO!@9i&?  #?w#?/w#?w#!9! E9!!9~(+Fͺ!"9!(#>2*"| >"2:( Ͷ *w*6 !\$![ (ͦ( #:~CONTRMKBDLSTCAUXUSR>2i:*ˮ~0:*:(@q##pZ* :(  ~* < >26"!"""~>2""v>2>"!"ˮ(!~8>~O6~*"w(6(2(-()(6 (8 0 :(* y(~#+ (( 66 #6 #"*: y~o p .##~ͺ(.6w4._~ =*##55= *[R8*~#"= ͣ}== ͯ}͵}*#w+#~+>*~('k!0(ˮ]k!8ˮ!]~-#8~>27kˮw>O$6̃s #r$ͣ6̏ k ( (ˮ qk(ˮ ( k ˮ*O:~ ##~._q4((=ʦ==ʩ=ʬò*:4^q*##~6ͺ>2}*|(̓|( ̓6-#[RM8( G> A~#*'C! !TRUEFALSE!9N#Y~#( G~#> >    "~(kѻ(( !0 (ˮ!!>2Sz:0:*6##ww#w$w#w:  ##N#F*B>2w#w#[s#r> "~ͮ*-w#ww##> ͮÁ""~>2:ZR0 *4#4>2:ZR> *4 #4(> >22*f(/˦:G(##~++ :O x yC!ͺ Q*:G(##~._.͚f<\=<͚*##w ͮ +4 #4x >>2:G("ͮ"*nˮ*0 SZѷR8@* N#F#s#r, 0})jS\*##w+ N#FB ͮr+s>2!T]>)j)0 0= ]R!#]*^#V#N#F#^#V>2Ͱ:0:*6 #-Nw#Fwq#p#6#w#w#w"~Á>">!DM!":*B:!>(>2>">!"2"~ʰ*w#wx(9* :O *-4 #4!*4 #4 *-N#Fq#pV+^Bq#pSZѷR&* s#r$ s#rL <?*L!\  <( !\$>2>2L:>!(* \$\<(!3: [1ð\!(7"~> 2"S"Ns#FrB(Z#\: \<(?*"}K\! !*}#"}! x \* *>) 2""{_!"*nf}(HR0nf" ^VMDnfutqp*s#r*s#r"* uKB!0>' ~#fo{_"*R0RnfR0KqputsrNF( ^VNF^V*SutKqp R*R(~w~wnf ut"6#K*K*!""*NFy(* "*B0Cnf* [R*"*RS[s#r^#V""6#>O"w2x2*"!F"" &y*"*>2"*"!F"""!\*: Nr!~6go(\R*s#r_2x( s x(T]DMx(R0 U(͝O/o&9q# (!>F0#( ~ ( #]( ~ ( (#}(  i&T-a%â}ͦo*!~6o&|:2 2}:__zѯ2*|KB " z ^C User break+=  I/O Run-time error {ʹ, PC=*ͯNot enough memory Program aborted :ʎ'1!d!HFL>@AAP directory as du[u] ==> ___G!}2P}2P*P&}2P*P&!'! ]OEʏ!!*P&!AR!"P!"P!"P!!fz!"P!P*P*P*Pn&s*P#ö!!P"P*P^#V!E"*Pn&!!}2P2"*Pn&!}2P*P^#V!"P!*P!!Rfz""P*P*Pn&}2P!}2P!!fz"}2P*P&*P&|g}o!E"*P*P&"P*P&!V}2P*P&#Í"*P#b"*P!"P*P*Pn&}2P!}2P!*P!Efzr#}2P*P&*P&|g}o!EV#*P*P&"P*P&!V}2P*P&##*P&R‰#*P"PÛ#R›#*P&"P*P}2P}2P"P*P*P&s*P*P&s"rP"tP"vP}2xP͛ͺ Getting directory of *xP&"*vP!&ͺ:  *xP&!@R}2iP!GP! !N! *vP*iP&}2GP!HP! !?N!GP"jP*jP !?s*jP !?s*jP!?s!!O!!GPo&}2hP!*rPs*hP&!͒*rPn&!6͸}oE%*rPn&!*rPs*tP*rPn&+))))"jP!O*hP&)))))"lP! e.*lP 8=! e.=*jP*jP*lPn&*lP n&*lPn&!N!Ns#r!! fz%}2gP*jP*gP&*jP*gP&n&!|g}os*gP&#Í%!.e.*jP!  !!GPo&}2hPù$*rPn&!6E5&͛!"ͺOver !6!&ͺ entries. !!͛ [& k Bytes Free>k͛ͺRoute  ̈́*.Q&͛"*fz!&ͺ ==> *-Q&"*dz!& k!!1fz&}2O͛!." *O&#õ&!!̈́*.Q&͛"ͺ:  ͛*.Q&!$!!& !N&:͛!ͪ *.Q&*-Q&͒Eʁ'!*!*-Q&͛"ͺ:  ͛*-Q&!$!!& !N&:͛!ͪ !A!k͛ͺPress  ̈́͛!/" k͛ͺ for Help !O}2O"Ö́͛ͺ Directory of !O:!ͪ!:" k!*O&fz(}2O*O&!oE!EI(͠EA(͛! " *O*O&+))))n&! Eʡ(*O*O&+)))):͛!ͪ (̈́*O*O&+)))):͛!ͪ k͛! " *O&#(͛! " kK&̈́͛ͺ - Flags -ͺ ͺ - Commands - ͛ͺ ? k͛ͺMatch ̈́͛!?" ͛ͺ ͺB -  k͛ͺBack ̈́͛! "ͺK -  k͛ͺKill next ' ' file ̈́͛! "ͺT -  k͛ͺTest ̈́͛!<" k͛ͺUnequal ̈́͛!>" ͛ͺ ͺC -  k͛ͺCopy ̈́͛! "ͺN -  k͛ͺNext ? or <> flag ̈́͛! "ͺV -  k͛ͺView ̈́͛ͺ = k͛ͺEqual ̈́͛!=" ͛ͺ ͺD -  k͛ͺDelete ̈́͛! "ͺO -  k͛ͺ Other dir. ̈́͛ͺ ͺW -  k͛ͺ Wide dir. ̈́͛! "ͺ All Other Keys -  k͛ͺForwards ̈́͛! "ͺR -  k͛ͺ Reverse dirs. ̈́͛! "ͺX -  k͛ͺExit ͛ }2O"O*O&!E5-!*O&fz5-}2O*O*O&+)))) 8*O*O&++)))) 8E*-*O&}2O*O*O&+))))O*O&+}2O*O*O&#+))))*O*O&+))))*O&!E,!}2O-*O*O&++)))) 8!O 8}2O*O&Eʃ,*O*O&+))))!O*O&#,"}O"O!}2tO*}On&!Eʪ.*tO&!}2tO*O*tO&+)))) 8*O*tO&++)))) 8͍Eʕ.*tO&}2sO*tO&+}2tO*O*sO&+))))^#V*O*sO&++))))^#VE9.*O*sO&++))))*O*sO&+))))^#Vs#r*sO&*}On&Eʉ.*O*sO&+))))*O*sO&#+))))*sO&#}2sO9.*}On&+*}Os*tO&*}On&E\-"lO}2nO"oO"qO!}2cO!*nO&fz/}2aO*cO&*lOn&fz/}2bO*qO*aO&+)))) 8*oO*bO&+)))) 8͍E/*bO&#}2cO*qO*aO&+))))^#V!0Q*bO&+))))^#V͒Eʤ/*qO*aO&+))))!<!>͟#/*qO*aO&+))))!?!?͟#*bO&#.*aO&#.͛ͺ (Y/N)? N!" !ͩ!,QD *,Q&}2,Q*,Q&͛" *,Q&!YE80!}2`O?0!}2`O*`O&!N"NN!}2WO!}2N! *N!Np !N! +n&!~E0͛! "!N:!ͪͺ file R/O. Delete /}oE0!}2N0͛ *N&Ec1͛! "ͺ Deleting !N:!ͪͺ file... !N! +!N! +n&!|g}os!!N!!Nj1!}2WOY*WO&*_z&!}2_z*_z&*]z&Eʦ1!}2_z͛ ͛ Nk*_z&͛!&ͺ. *.Q&"*fz!&!:" *N&! E2!N:͛!ͪ /2̈́!N:͛!ͪ k"N*N!"N*N!E!Ej2*N!"N*N*nzE"N*N!Eʝ2*N*nz*NR"N*N"N*N"{N"}N!}2qN!bN*qN&!:s!! fz]3}2rN!e*_z&+))))*rN&+n&! ͒ER3*qN&!}2qN!bN*qN&!e*_z&+))))*rN&+n&s*rN&#2!bN!*qN&s*.Q&!bN:͢ =*}N*-Q&!bN:͢ =*{N!P*}N:p!P*{N:pÞ4 Source file deleted.!Q!Qͧ2!P*fzMSourceE0Eʝ4K&!e*_z&+))))!e*]z&+))))*]z&+}2]z*]z&!Er4͛ͺ ͺ No Files. *]z&#}2_zÝ4*_z&*]z&Eʐ4!}2_zÝ4!e*]z&+"`N*`Nn&=R4̈́35<R4 R4?R5̈́͛ͺ No backup. Delete /E5͛ 35YÁ5*\z&#}2\z!0Q*\z&+))))!e*_z&+))))!0Q*\z&+))))! ! ͟#!0Q*\z&+"NN*NNn&!=Eʽ5͛ͺ Files equal. s1V:!}2AN̈́*NNn& R56*-Q&!$!!e*_z&+))))^#V02ͥE6!}2AN26͛ͺ Disk full. W7<RF7!}2EN*EN&#}2EN!0Q*EN&+)))) 8*NN 8͍EF6!0Q*EN&+))))^#V!e*_z&+))))^#VͥE6!}2ANC7*-Q&!$!!e*_z&+))))^#V!0Q*EN&+))))^#VR02ͥE+7!}2ANC7͛ͺ Disk full. W7?RW7!}2AN!}2BN!Q!Qͧ2*NNn&! ͒*AN&}o}oE8͛ͺ Overwrite *-Q&"*dz!&!:"*NN 8!ͪ /}2BN͛ *BN&E8!P*dzMTargetE0}2BNY*BN&*AN&}o}oEV:!}2CN! *dz!Po!Ed8͛ͺ Directory full. V:͛ͺ Copying *.Q&"*fz!&!:"*NN 8!ͪͺ --> *-Q&"*dz!&!:"*NN 8!ͪ ! *fz!Pp ! *fz!P!p!`!lz ! *dz!P!p*lzͺ *lz!E8!PͰ *!&Ea9!PP !!P! *fz!PͰ *NNn&! Eʐ95*NN!=!=͟#K&*NNͰ1͛!e*_z&+))))^#V02!&ͺk  k͛ͺ File copied *!&EG:!P! +!P! +n&!|g}os!!P͛ͺ and archived ͛!." é;"!N"#N}2%Nk͛! "*%N&"*#N!&!:"*7N 8!ͪͺ:  ̈́!!fzʖ;}2+N*!N**N&+)))))))*+N&+n&́! ͑! ͑! ͑! !~͛!͑!͑!͑!!͛OES;͛*!N**N&+)))))))*+N&+n&" Ë;͛!<"*!N**N&+)))))))*+N&+n&!&!>" *+N&#û:͛ ͛ "7N̈́*7Nn& R<͛! "*-Q&"*dz!&!:"*7N 8!ͪͺ not found. s1k?͛ͺ Testing... !Q!Qͧ2!p!!0! N!pz!!0!N! *fz!Pp ! *dz!Pp !}2-N!"&N! *fz!P!p!0!lz ! *dz!P!pz!0!jz *lz*jzE<*jz"lz*lz!}2.N*.N&E=*&N#"&N*&N!0"(N!}2*N*-N&**N&*lz͸}oE=*(N#"(N!!fzʷ=}2+N!p**N&+)))))))*+N&+n&!pz**N&+)))))))*+N&+n&͒Eʬ=!}2-N*+N&#S=*-N&E=**N&#}2*N%=*-N&!*.N&!}oEʘ*7N!=!=͟#*7NͰ1͛!e*_z&+))))^#V02!&ͺk  ͛ͺ Files equal.  ?K&̈́͛ͺ"Files unequal starting at record #*(N!&ͺ dec. ͛ *.Q&*fz!pZ:*-Q&*dz!pzZ:*7N!<!>͟#k N!}2N! *fz̈́͛ͺ ͺ&^X = abort = pause = resume  !Q!Qͧ2!QM!Q:o !QM!QM*N&}o!͒}o}oE:@!QMͩ!QL͎ͫ!QL:͛!ͪ ͠E7@!ͩ!,QD *,Q& R@R@͠E@7@R0@R7@!}2NÓ?k!QMEm@͛ͺPress RETURN... !,QD }2NL}2OL*_z&}2^z*,Q&͛" *_z&#}2_z*_z&*]z&Eʻ@!}2_z!e*_z&+))))n&́*OL&͑*NL&͑O*_z&*^z&}oEʖ@!e*_z&+))))n&́*OL&͑*NL&͑O}2PL*PL&*&!EfA! !s! !s!}MINSTALL͍EʱA!!s!! s!PM PDTINS.CHNp!P ͛ ͛ͺ CHECK ͺ2.8ͺ (C) 1987 by Carson Wilson. ͛!E#B!}!t!}!pB̈́͛ ͛! "ͺEnter "X" to eXit or ͛! "ͺ Enter Source!!:!ͪ !}2!t͎ !t!n&!XEʲB ͛! "ͺ Enter Target!!:!ͪ !}2!p͎ !t!n&}2.Q!t:!!k!fz!bz!p!n&}2-Q!p:!!k!dz!`z*.Q&*-Q&*fz*dz}o*.Q&́! !+n&! !+n&͛O*-Q&́! !+n&! !+n&͛O}o*fź!!!+n&!!!+n&͛O}o*dź!!!+n&!!!+n&͛O}o}o}o*bz!͒}o*`z!͒}o!t:ͣ!}o!p:ͣ!}oED͛ ͛ͺ Route !t:!ͪͺ ==> !p:!ͪͺ is Illegal. #B! ͛ *.Q&*fz!e!]z#*]z&!E.Eͺ No files on *.Q&"*fz!& #B*-Q&*dz!0Q!\z#͛ͺ Working... *.Q&!$!"nz!e*]z&+!0Q*\z&+!e!]z6-!0Q!\z6-!e!0Q*]z&!\zͫ.K&!}2_z*_z&*]z&͸EH!e*_z&+))))Ͱ1͛!e*_z&+))))^#V02!&ͺk  ! }2,Q!ͩ!,QD *,Q&}2,Q*,Q&BRNF-RžF*_z&!R}2_z*,Q&͛" *_z&!EʒF͛ *]z&}2_z͛ HCRF!e*_z&+))))5HDRF!e*_z&+))));3HKRcG! ! n@E`G!e*_z&+))))Ͱ1͛!e*_z&+))))^#V02!&ͺk  !e*_z&+))));3HNR€G!<!?n@E}GHOR­G͛ !0Q*\z&MTARGET'HRRḦ́͛ͺ Reverse directories /EH*.Q&}2/Q*-Q&}2.Q*/Q&}2-Q*fz"hz*dz"fz*hz"dz̈́DHYHWRCHK&!e*]z&MSOURCE'HVRgH!e*_z&+))))?HQR{HXRžH*]z&!}2_z*,Q&͛" HTRH!e*_z&+))))W:HHRH/RH?RH͛ (Hs1÷E#B *]z& Documentation for CHECK version 2.8 February 24, 1987 By Carson R. Wilson [ This program may be freely copied and distributed for non- profit purposes as long as it is accompanied by this documentation and its terminal installer. The author takes no responsibility for the use or inability to use this program. ] FILES ===== CHECK28.LBR should include the following files: * CHECK28.CZM - version 2.8 of the program itself * CHECK28.DZC - this file PDTINS.CZN - Turbo terminal installer PDTINS.DZA - data for installer * WHATSFOR.CHK - short description of the library Only files marked with '*' have been altered since version 2.7. The files with Z's in them need to be decompressed with UNCR.COM version 2.0 or later. UPDATE ====== Changes from version 2.7: - Now automatically warm boots on exit in low TPA (BDOS begins below B300 hex) systems. - Copying files of over 7k is significantly faster. - Testing files of over 6k is slightly slower. - Whole tagged file names are highlighted, instead of just their flags. - 1.75k more Transient Program Area (TPA) is now required, moving the ending address up to AB00 hex from A400 hex. - The maximum amount of directory entries has been raised to 310 from 192 per directory. (Note--this is greater than or equal to the actual number of files, because large files can take up more than one directory entry). - CHECK now aborts with an error message if over the maximum number of directory entries are present on either the Source or  the Target directory. - The delete command now removes file names from the display. - Shows proper disk space remaining for hard disks. - New "K" command added (see "Commands," below). - Several other cosmetic changes have been made. CHECK version 2.8 - Copyright 1987 by Carson Wilson page 1 IN BRIEF == ===== 1. What's it for? CHECK compares the contents of two disk directories, providing an alphabetized display of the filenames occurring on one. These filenames are marked with "flag" characters reflecting which of the files are present on the other directory. Thereafter, you step through the list, performing a variety of functions (below). 2. System Requirements You will need a CP/M or ZCPR computer with an 80-column display screen. CHECK assumes that memory addresses from 100h to AB00h will be available. All 64k CP/M systems have more than enough memory. 3. Installation Try the program on your machine. You may not need to install CHECK at all. Otherwise, use the terminal installer chain file PDTINS.CHN and its data file PDTINS.DTA (included in CHECK28.LBR) to install CHECK for your terminal. Simply make sure all three files are on the current disk directory and type "CHECK INSTALL" at your command line. PDTINS takes over from here, allowing you to install any Turbo Pascal .COM file for your terminal. 4. Functions This program has five major functions: 1) compare the contents of disk directories 2) compare the contents of individual files 3) copy files 4) delete files 5) display files. By combining all of these functions into an integrated package, CHECK simplifies the task of maintaining backup copies of important files on another directory. USING CHECK ===== ===== 1. Terminology CHECK uses its own terminology to describe the pair of disk directories (drive/user combinations) it is comparing. The "Source" is the directory CHECK normally displays. The "Target" directory is the one being compared with the Source directory. The "Route" describes the direction CHECK assumes any copies you make will travel in. That is, the program assumes that you want to use one directory as your work directory, and another as your backup, copying files from the Source to the Target directory CHECK version 2.8 - Copyright 1987 by Carson Wilson page 2 periodically as a safety measure. A valid Route describes two different disk directories with drive letters from A to P and  user numbers from 0 to 15. 2. Starting CHECK There are two ways of calling up CHECK from your command line. If you simply enter the word CHECK, the program will load and then prompt you for Source and Target directories. Alternatively, exactly two command line parameters may be entered when calling up CHECK. The first stands for the Source and the second stands for the Target directory. For example, the command line entry "CHECK A2 B15" (no colons allowed) causes CHECK to load and run using the Route A2 ==> B15, regardless of the currently logged drive/user. 3. Operation Once CHECK has loaded and received a valid Route, it resets the disk system, and compares the directories. It then clears the screen and displays the status line and the name of the first entry in the Source directory. The status line displays the current Route, space left on one or both drives, and the HELP command. Thereafter, CHECK operates much like NewSweep, stepping through an alphabetized list of filenames. 3a. Flag Characters Flag characters flag filenames from the Source disk directory, indicating what the status of these files on the Target directory is. Flagged filenames are highlighted, if possible. Flagged filenames appear as: FILENAME.TYP Unflagged - no matching filename was found on the Target directory. ?FILENAME.TYP? Question marks - a matching filename was found on the Target directory. Unequal marks - a matching filename was found on the Target directory, and the two files are unequal. =FILENAME.TYP= Equal marks - an equal file was found on the Target directory. Equal ("=") flags are only produced after the user explicitly commands CHECK to compare two files, and they are found to be equal. Unequal signs may be generated as a consequence of differences in two files' sizes, or as the result of an explicit command by the user to compare files. Question marks indicate that no test has yet been performed on the files, but that they do contain the same number of records. CHECK version 2.8 - Copyright 1987 by Carson Wilson page 3 3b. Commands Command keys are simply keyboard characters to which CHECK assigns special meanings. Commands acting on individual files are always applied to the filename to the left of the cursor. COMMAND: RESULT: ======= ====== H, h, ?, / Display the help screen. -, B, b Step back one filename in list. C, c Copy file from the Source directory to the Target directory. D, d Delete file from Source directory. K, k Go to the next unflagged file in the list and delete it. This command enables the user to easily remove all unmatched files from a backup directory. N, n Go to next filename flagged with ?? or <>. Using the 'N' command to step through CHECK's list of files, the user can test all sets of matching filenames to determine which files are equal. O, o Display other (Target) directory. R, r Reverse Source and Target directories. Target directory becomes Source and Source becomes Target. T, t Test a match by comparing a file on the Target directory with the file on the Source directory. If the files don't match, tell where the first difference is and display it on the screen. V, v View a file. Use ^S or space bar to pause scrolling, other keys to resume scrolling, and ^X or ^C to abort viewing. W, w Display wide directory. Q, q, X, x Exit from the current Route and prompt user to enter another Route or exit the program. All other keys Step forwards one filename in list. All commands that cause disk space to change result in immediate re-calculation and display of the space remaining on one or both CHECK version 2.8 - Copyright 1987 by Carson Wilson page 4 disk drives. The Help, Reverse, and Wide directory commands also cause CHECK to redisplay the status line. ERROR PREVENTION ===== ========== CHECK has various internal procedures designed to prevent unintended or unnecessary actions: 1) If the user tells CHECK to copy files which have already been copied or proven equal, CHECK cancels the operation. 2) Whenever an erase or copy command would cause a file without a backup to be erased, CHECK prompts the user before proceeding. Therefore files which have no match on the Target directory are copied immediately, but CHECK prompts the user whenever a copy operation will overwrite another file. CHECK also ensures that there is sufficient room on the Target directory for the new copy before proceeding. 3) If a Source directory containing no files is specified, CHECK immediately re-prompts the user for another Route. 4) The delete command works immediately if there is an equal backup of the Source file, but warns the user otherwise. SPECIFICATIONS ============== CHECK will accommodate disk directories with up to 310 filename entries at one drive/user combination. If you have more entries than this on one directory, CHECK aborts with an error message. The buffer size used for comparing files is 48 records, making CHECK significantly faster than some other file comparing utilities. SPECIAL PATCHES ======= ======= Several locations of CHECK's code may be patched to provide more secure or compatible operation. Normally, patching should be unnecessary. 1. Legal Drives and User Areas As distributed, CHECK allows routes with drives from A: through P: and user areas from 1 thorough 15. Other drive/user combinations generate an error message when the Route is first specified. These values may be changed to match your system in high-security or novice-user situations. The bytes at addresses 20FF hex through 2102 hex contain CHECK's CHECK version 2.8 - Copyright 1987 by Carson Wilson page 5 legal drive/user values. The first two bytes are the legal low drive followed by the legal high drive, and the second pair are the legal low user followed by the legal high user. To patch CHECK to allow only drives A: through E: and users 0 through 5, for example, use DDT as follows (excluding comments): A>ddt check.com DDT VERS 2.2 NEXT PC 4900 0100 -s20ff 20FF 41 ; this is low drive letter "A" 2100 50 45 ; change max. drive letter from "P" to "E" 2101 00 ; this is low user area zero 2102 0F 5 ; change max. user from 15 hex to 5 hex 2103 01 . -g0 A>save 72 check.com 2) Copying Attributes and File Archiving As distributed, CHECK will copy file tags and attributes when making copies of files. This means that if you copy a read-only or system file, the copy on the other directory will also be read-only, etc. To turn this feature off, change the byte at address 2103 hex (right after the max. user byte above) from one to zero, and save the memory image as above. Thereafter, all copies made by CHECK will be "read-only, directory" files. When it copies a file, CHECK sets the "archive" attribute of the source file. This function may be de-activated by changing the byte at 2104 hex (one after the "copy attributes" byte) from one to zero, and save the memory image as above. This will de- activate the function, and CHECK will now say "file copied" instead of "file copied and archived" after copying files. ACKNOWLEDGEMENT =============== Thanks go to Rick Charnes of San Francisco for finding a new way to use CHECK.COM to assist in backing up hard disks (see his HD- ARCxx.LBR for more on this). Rick also made several recommendations which have been incorporated into version 2.8 of CHECK, and tested version 2.8 on a hard disk. CHECK version 2.8 - Copyright 1987 by Carson Wilson page 6 DEDICATION ========== I enjoyed designing this program, and hope you find it useful. While Turbo Pascal does not provide the tight, efficient code permitted by assembly language, it is a fertile medium for trying new ideas. While this program is a useful utility of itself, I hope that the ideas it expresses will be adopted by others. If you have any questions, comments, or suggestions about CHECK.COM, please leave me a message at Richard Jacobson's Lillipute Z-Node, Chicago, (312) 664-1730 or (312) 649-1730. CHECK version 2.8 - Copyright 1987 by Carson Wilson page 7 ----------------------------------- 1!d!)[/>!!/!}/!/:p!}/p!}2/!}/Ͱ */&"{/!*{/:ͣfzʊ!}2r/*{/*r/&*{/*r/&n&s*r/&#U!!c/͛ ͛!"ͺ Error - file !c/:!ͪͺ missing. ͛ͺ Aborting. ͛ ͛ͺ?Public Domain Turbo Pascal Terminal Installer (PDTINS) version ͺ1.2ͺ.  ͛ͺBy ͺCarson Wilson ͺ Dec. 5, 1986ͺ.  !o&"\1͛ͺReset..  ! !*\1͛ M PDTINS.DTA }oE"M PDTINS.DTA͋!͛ͺCEnter Control-C to quit, or name of Turbo Pascal program to install ͛ͺ*as "filename.COM" (no drivespec allowed):  !i͎ ͛ !i" mean files are unequal, " " mean no match. Thereafter, step through list and compare, copy, delete, or view files, or reverse directories. Built-in help display. Terminal installer included. 1 '********************************************************************** 2 '* PROGRAM FUNCTION: Touch Typing Tutor. * 3 '* VERSION : 3.0 (Remove all references to I/O ports.) * 4 '* DATE WRITTEN : 16th April 1982. * 5 '* BY : Tim Pearce & Richard Berthet. * 6 '* * 7 '* ADDRESS : 15/5 Cottonwood Cr., North Ryde 2113. * 8 '* PHONE : (61-2)-88-1640. * 12 '* * 13 '* Please leave this notice on the programme. * 14 '********************************************************************** 15 ' 20 ' ######################## 21 ' ###### SECTION 1 ###### 22 ' ######################## 23 ' 48 '>>>>>>>>>>>>>>>>>>>>> ADM-31 ASCII CONTROL CODES <<<<<<<<<<<<<<<<<<<<< 49 ' 50 ' *************************************************************** 51 ' FUNCTION NAME STRING NAME ASCII CODE 52 ' *************************************************************** 53 ' 72 ' Return 73  RET$ = CHR$ (13) 74 ' 75 ' Escape 76 ESC$ = CHR$ (27) 77 ' 85 ' ------ DYNAMIC VIDEO ATTRIBUTE CONTROL STRINGS ------ 86 ' 87 ' *************************************************************** 88 ' FUNCTION NAME STANDARD CHAR. GEN. ALT. CHAR. GEN. 89 ' *************************************************************** 90 ' 91 ' Reset to Normal Video 92 STDVID$ = ESC$+"k" 94 ' 110 ' Reversing of Area 111 REVSTD$ = ESC$+"j" 113 ' 126 ' ------ DYNAMIC EDITING CONTROL STRINGS ------ 127 ' 128 ' *************************************************************** 129 ' OPERATION HOW TO EXECUTE DESCRIPTION 130 ' *************************************************************** 131 ' 132 ' Clear Screen Clears to SPACES 133 CLRSCR$ = ESC$+"Z" 134 ' 157 ' Line Erase 158 LINERA$ = ESC$+"T" 159 ' 160 ' Character Delete 170 CHRDEL$ = ESC$+"W" 180 ' 181 ' Definition of CURSOR LOAD Function. i.e. Pushing the Cursor Around Onscreen. 182 DEF FNCSRLD$ (ROW%,COLUMN%) = ESC$+"="+CHR$ (ROW%+31)+CHR$ (COLUMN%+31) 183 ' 200 ' Write Protect Mode On 201 WRTPRTON$ = ESC$+")" 203 ' Write Protect Mode Off 204 WRTPRTOFF$ = ESC$+"(" 205 ' 900 '********************************************************************** 910 ' 915 ' ######################## 920 ' ###### SECTION 2 ###### 925 ' ######################## 930 ' 1000 '>>>>>>>>>>>>>>>>>>>>>>>>>> ALTERATIONS <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1010 ' 1020 ' Date. Description. 1030 ' 1040 ' 28/06/82 Reformat HELP presentation. RB 3950 ' 29/06/82 Added SECTION headings. RB 3951 ' 03/07/82 Added [%] to PARAGRAPH variable in Paragraph 3952 ' read portion of Section 5. 3953 ' Subroutine [9]: Added missing <"> on string. 3954 ' Erase line before End of Exercise printed. 3955 ' Replace NEWLINE% variable in PARAGRAPH check, 3956 ' with LINESINPARA% RB 3957 ' 04/07/82 Moved "End of Exercise" message to Exercise 3958 ' Row. 3959 ' Renovated Subroutine [7] to print 5 COMMENT 3960 ' lines each call, I found the scrolling NG. RB 3961 ' 10/05/86 Removed all references to I/O ports in order 3962 ' to make program system-independant. 3963 ' (Keith Petersen, W8SDZ) KBP 4000 '********************************************************************** 4010 ' 4012 ' ######################## 4015 ' ###### SECTION 3 ###### 4017 ' ######################## 4020 ' 4050 '>>>>>>>>>>>>>>>>>>>>>>> INITIALISING BLOCK <<<<<<<<<<<<<<<<<<<<<<<<<<< 4100 ' 4150 ' 4160 DIM PARAGRAPHIN$ (20),ADDRESS% (140,2) 4170 DIM DISPLAYCHAR% (127),COMMENT$(5) 4180 ' 4200 'The following addresses and values are system dependant. 4250 ' 4300 ' 4400 ' 4450 ESCTYPE% = 27 'ASCII escape character from typing exercise mode. 4500 ESCCHR$ = "" 'String to print name of above character. 4660 FILENUM1% = 1 'Filenumber for exercise files. 4670 FILENUM2% = 2 'Filenumber for help files. 4680 FILENUM3% = 3 'Filenumber for keyboard data. 4700 EXLINELENGTH% = 80 4750 COMMENTSTACK% = 0 4800 NUMOFREPEATS% = 0 4850 PARAGRAPH% = 0 4900 ARRAYROWS% = 1 4950 ARRAYCOLUMNS% = 2 5100 ' 5150 WIDTH 255 'Remove 's from long lines 5160 ON ERROR GOTO 40000 'Error handling department. 5170 DELAY% = 50 'Time delay factor (See 34100) 5180 ' 5200 ' SCREEN ADDRESSES 5250 ' 5300 LHS% = 1 'Set the left hand side of the screen 5310 RHS% = 80 5350 TOP% = 1 'Set the top of the screen 5400 ROWOFFSET% = TOP%+15 'Keyboard display 5450 COLUMNOFFSET% = LHS%+10 'Keyboard display 5500 EXERCISEROW% = ROWOFFSET%+5 'Exercise line 5550 EXERCISECOLUMN% = LHS% 'Exercise line 5600 ECHOROW% = EXERCISEROW%+1 'Typing Echo 5650 ECHOCOLUMN% = EXERCISECOLUMN% 'Typing Echo 5700 COMMENTROW% = ROWOFFSET%-7 'Comment area 5710 COMMENTCOLUMN% = EXERCISECOLUMN% 'Comment area 5850 ' 5900 '********************************************************************** 5950 ' 5951 ' ######################## 5952 ' ###### SECTION 4 ###### 5953 ' ######################## 5954 ' 5955 '>>>>>>>>>>>>>>>>>>>> START OF ACTIVE PROGRAM CODE <<<<<<<<<<<<<<<<<<<< 6050 '###### 4a ###### 6100 ' 6150 ' First Screenful of instructions 6200 ' 6250 PRINT CLRSCR$ 6260 IF CHARACTER$ = "N" THEN 6760 6300 HELPNUM$ = "0": GOSUB 23300 6550 GOSUB 21400 '[1]:CAPITAL LETTER 6600 IF CHARACTER$ = "N" THEN 65529 ELSE IF CHARACTER$ = "?" THEN HELPNUM$ = "1": GOSUB 23300: GOTO 6550 6650 ' 6700 '---------------------------------------------------------------------- 6750 '###### 4b ###### 6752 ' 6760 GOSUB 39500 '[9]:PRINT HELP MENU 6800 PRINT FNCSRLD$ (ROWOFFSET%,10); LINERA$; "Error break ?"; 6810 GOSUB 23385 ' GET CHARACTER 6900 GOSUB 21400 '[1]:CAPITAL LETTER 6950 IF CHARACTER$ = "Y" THEN ERRORFLAG% = 1 ELSE IF CHARACTER$ = "?" THEN HELPNUM$ = "2": GOSUB 23300: GOTO 6900 ELSE ERRORFLAG% = 0 7000 ' 7050 '---------------------------------------------------------------------- 7100 '###### 4c ###### 7105 ' 7110 'GOSUB 39500 '[9]:PRINT HELP MENU 7111 PRINT CLRSCR$ 7115 PRINT FNCSRLD$ (COMMENTROW%,COMMENTCOLUMN%); LINERA$; "Any LETTER is a valid exercise but presently (28/06/82) only A-J exist." 7150 PRINT FNCSRLD$ (ROWOFFSET%,10); LINERA$; "Which Exercise ?"; 7200 GOSUB 23385 ' GET CHARACTER 7250 GOSUB 21400 '[1]:CAPITAL LETTER 7300 IF CHARACTER$ < "A" OR CHARACTER$ > "J" THEN 7150 7400 PRINT FNCSRLD$ (COMMENTROW%,COMMENTCOLUMN%); LINERA$; 8050 FILE$ = "TTYPEX"+CHARACTER$+".DAT" 8051 ' 8052 '---------------------------------------------------------------------- 8053 '###### 4d ###### 8054 ' 8060 GOSUB 39500 '[9]:PRINT HELP MENU 8100 PRINT FNCSRLD$ (13,1); LINERA$; FNCSRLD$ (ROWOFFSET%,10);  LINERA$; "Echo ?"; 8110 GOSUB 23385 ' GET CHARACTER 8200 GOSUB 21400 '[1]:CAPITAL LETTER 8250 ECHOFLAG% = 0 8300 IF CHARACTER$ = "N" THEN ECHOFLAG% = 1 ELSE IF CHARACTER$ = "?" THEN HELPNUM$ = "3": GOSUB 23300: GOTO 8200 8350 ' 8400 '********************************************************************** 8450 ' 8451 ' ######################## 8452 ' ###### SECTION 5 ###### 8453 ' ######################## 8454 ' 8460 '>>>>>>>>>>>>>>>>>>> SET UP & CHECK EXERCISE FILE <<<<<<<<<<<<<<<<<<<< 8465 ' 8500 PRINT CLRSCR$ 8550 ' 8600 GOSUB 29500 '[5]:PRINT KEYBOARD 10950 ' 11300 ' set up input file. 11400 OPEN "I",#FILENUM1%,FILE$ 11500 ' 11550 ' Remove old line 11600 ECHOCOLUMN% = LHS% 11650 LINEFLAG% = 0 11700 PRINT FNCSRLD$ (EXERCISEROW%,EXERCISECOLUMN%); LINERA$; FNCSRLD$ (ECHOROW%,ECHOCOLUMN%); LINERA$; 11750 TYPEDIN$ = "" 11800 ' Check that it is not a paragraph 11850 IF PARAGRAPH% = 0 THEN 12300 11900 ALINE$ = PARAGRAPHIN$ (NUMOFTEXTLINES%): NUMOFTEXTLINES% = NUMOFTEXTLINES% +1: IF NUMOFTEXTLINES% = LINESINPARA%+1 THEN NUMOFREPEATS% = NUMOFREPEATS%-1: NUMOFTEXTLINES% = 1: IF NUMOFREPEATS% = 0 THEN PARAGRAPH% = 0 12150 ' 12200 GOTO 12700 12250 ' 12300 IF NUMOFREPEATS% = 0 THEN 12550 12350 NUMOFREPEATS% = NUMOFREPEATS% -1: GOTO 14050 12500 ' 12550 IF EOF (FILENUM1%) THEN PRINT FNCSRLD$(EXERCISEROW%,EXERCISECOLUMN%+15); LINERA$; "END of EXERCISE, Please WAIT for MENU.";: GOSUB 34100: GOTO 17200 12600 ' 12650 LINE INPUT# FILENUM1%,ALINE$ 12700 ALINE$ = ALINE$+CHR$ (13) 12750 IF PARAGRAPH% = 0 THEN NEWLINE% = NEWLINE%+1 12800 EXLINELENGTH% = LEN (ALINE$) 12850 ' CHECK for repeated line. 12900 IF LEFT$ (ALINE$,1) <> "|" THEN 13950 12950 CHARACTER$ = MID$ (ALINE$,2,1) 13000 GOSUB 21400 '[1]:CAPITAL LETTER 13050 IF CHARACTER$ = "P" THEN 13400 13100 NUMOFREPEATS% = VAL (CHARACTER$)-1 13150 EXLINELENGTH% = EXLINELENGTH%-2 13200 ALINE$ = RIGHT$ (ALINE$,EXLINELENGTH%) 13250 ' 13300 GOTO 13950 13350 ' 13400 ' Paragraph Read In. 13450 NUMOFREPEATS% = VAL (MID$ (ALINE$,3,1)) 13500 LINESINPARA% = VAL (MID$ (ALINE$,5,2)) 13550 PARAGRAPH% = 1 13600 NUMOFTEXTLINES% = 1 13650 FOR ILOOP% = 1 TO LINESINPARA% 13660 'PARAGRAPHIN$ contains up to 20 lines of input for repeating whole paragraphs. 13700 LINE INPUT# FILENUM1%,PARAGRAPHIN$ (ILOOP%) 13750 NEXT ILOOP% 13800 ' 13850 GOTO 11550 13900 ' 13950 ' CHECK FOR COMMENT 14000 IF LEFT$ (ALINE$,2) = "!#" THEN GOSUB 33020: GOTO 11550 14050 CHARCOUNT% = EXLINELENGTH% 14100 PRINT FNCSRLD$ (EXERCISEROW%,EXERCISECOLUMN%) 14150 PRINT FNCSRLD$ (EXERCISEROW%,EXERCISECOLUMN%); LEFT$ (ALINE$,EXLINELENGTH%-1) 14200 ' 14201 '********************************************************************** 14202 ' 14203 ' ######################## 14204 ' ###### SECTION 6 ###### 14205 ' ######################## 14206 ' 14250 '>>>>>>>>>>>>>>>>>>>>>>>> KEYBOARD SCAN SECTION <<<<<<<<<<<<<<<<<<<<<<< 14300 ' I.E. The actual exercise begins here 14350 ' 14400 FOR ILOOP% = 1 TO EXLINELENGTH% 14450 IF ILOOP% = EXLINELENGTH% THEN LINEFLAG% = 1 14500 CHARACTER$ = MID$ (ALINE$,ILOOP%,1) 14550 ASCIINUMBER% = ASC (CHARACTER$) 14600 ' Change ROW% and COLUMN% for different Direct Cursor Addressing. 14650 ROW% = ADDRESS% (ASCIINUMBER%,ARRAYROWS%) 14700 COLUMN% = ADDRESS% (ASCIINUMBER%,ARRAYCOLUMNS%) 14750 PRINT FNCSRLD$ (ROW%,COLUMN%); REVSTD$; CHARACTER$; STDVID$; 14760 PRINT FNCSRLD$ (ECHOROW%,ECHOCOLUMN%); 14800 ' Program waits for change of input status. 14850 WAITCHR$ = INKEY$ : IF WAITCHR$="" THEN 14850 14900 NUMOFWORDS = NUMOFWORDS+.2 14950 ' Program reads data from dataport. 15000 KEYBDCHAR% = ASC(WAITCHR$) 15050 PRINT FNCSRLD$ (ROW%,COLUMN%-1); WRTPRTON$; STDVID$; CHR$ (DISPLAYCHAR% (ASCIINUMBER%)); WRTPRTOFF$ 15100 IF KEYBDCHAR% = ESCTYPE% THEN 17200 15150 IF KEYBDCHAR% = 13 THEN LINEFLAG% = 1: GOTO 16250 15200 ' 15300 ' 15350 IF ECHOFLAG% = 1 THEN TYPEDIN$ = TYPEDIN$+CHR$ (KEYBDCHAR%): IF KEYBDCHAR% = ASCIINUMBER% THEN 16250 ELSE 15700 15450 ' Change the typing Echo definition in the next line for different Dir Cus Adr. 15550 PRINT FNCSRLD$ (ECHOROW%,ECHOCOLUMN%); CHR$ (KEYBDCHAR%); 15600 ECHOCOLUMN% = ECHOCOLUMN%+1 15650 IF KEYBDCHAR% = ASCIINUMBER% THEN 16250 15700 ' Error 15750 ERRORCOUNT% = ERRORCOUNT%+1 15800 CHARCOUNT% = CHARCOUNT%+1 15850 IF ERRORFLAG% = 0 THEN 16250 15900 ECHOCOLUMN% = ECHOCOLUMN%-1 15950 PRINT CHR$ (7) 16100 IF ECHOCOLUMN% < 0 THEN ECHOCOLUMN% = 0 16150 ' 16200 GOTO 14750 16250 ' 16300 IF LINEFLAG% = 0 THEN 16950 16350 IF ECHOFLAG% = 0 THEN 11550 16400 ' Display line that was typed in but not echoed previously 16450 PRINT FNCSRLD$ (ECHOROW%,ECHOCOLUMN%); TYPEDIN$ 16500 ' Program waits for change of input status. 16550 WAITCHR$ = INKEY$ : IF WAITCHR$="" THEN 16500 16600 ' Program reads data from dataport. 16650 KEYBDCHR% = ASC(INKEY$) 16700 IF KEYBDCHAR% = 13 THEN 11550 16750 IF KEYBDCHAR% = ESCTYPE% THEN 17200 16800 ' 16850 GOTO 16550 16900 ' 16950 NEXT ILOOP% 17000 ' 17050 ' End of keyboard scan 17100 ' 17150 GOTO 11550 17151 ' 17160 '********************************************************************** 17200 ' 17201 ' ######################## 17202 ' ###### SECTION 7 ###### 17203 ' ######################## 17204 ' 17210 '>>>>>>>>>>>>>>>>>>> SECTION PROVIDES POSSIBILITIES <<<<<<<<<<<<<<<<<<< 17220 ' TO ESCAPE OR ALTER PROGRAM FLOW. 17230 ' 17250 HELPNUM$ = "4": GOSUB 23300: GOTO 17450 17450 CHARACTER$ = CHARACTER$+"e" 17500 GOSUB 21400 '[1]:CAPITAL LETTER 17510 ' 17550 IF CHARACTER$ = "N" THEN CLOSE FILENUM1%: GOTO 4300 17560 ' 17760 ' 17800 IF CHARACTER$ = "R" THEN NUMOFREPEATS% = NUMOFREPEATS% +1: GOSUB 29500: GOTO 11550 17850 ' 17900 IF CHARACTER$ = CHR$(13) THEN GOSUB 29500: GOTO 11550 17930 ' 17990 ' 18000 IF CHARACTER$ = "M" THEN HELPNUM$ = "5": GOSUB 23300: GOTO 17450 18040 ' 18050 IF CHARACTER$ = "S" THEN GOSUB 32110: GOSUB 29500: GOTO 11550 18090 ' 18100 IF CHARACTER$ = "L" THEN PRINT FNCSRLD$(COMMENTROW%,COMMENTCOLUMN%+10); " Exercise line Number is; "; NEWLINE%;: GOSUB 34100: GOTO 17250 18145 ' 18150 IF CHARACTER$ = "W" THEN 18160 ELSE 18250 18160 GOSUB 21900 '[2]:ERROR COUNT 18165 PRINT FNCSRLD$(COMMENTROW%,COMMENTCOLUMN%+10); LINERA$; "Reset ERROR count (Y/N) ?"; 18166 GOSUB 23385 ' GET CHARACTER 18170 GOSUB 21400 '[1]:CAPITAL LETTER 18190 IF CHARACTER$ = "Y" THEN NUMOFWORDS = 0: ERRORCOUNT% = 0: GOTO 17250 18196 ' 18197 ' 18198 ' 18250 IF CHARACTER$ = "Q" THEN SYSTEM 18300 ' 18320 IF CHARACTER$ = "E" THEN GOTO 65529 18350 GOTO 17250 'IF NOT MATCHED, RETURN TO MENU 20800 ' 21150 ' 21200 '********************************************************************** 21250 ' 21251 ' ######################## 21252 ' ###### SECTION 8 ###### 21253 ' ######################## 21254 ' 21255 '>>>>>>>>>>>>>>>>>>>>>>>>>>>> SUBROUTINES <<<<<<<<<<<<<<<<<<<<<<<<<<<<< 21300 ' 21350 ' 21400 ' Subroutine [1]: Returns first letter of a string as a CAPITAL. 21450 ' 21500 CHARACTER$ = LEFT$ (CHARACTER$,1) 21550 IF CHARACTER$ > "`" THEN IF CHARACTER$ < "{" THEN 21650 21600 RETURN 21650 CHARACTER$ = CHR$ (ASC (CHARACTER$)-32) 21700 RETURN 21750 ' 21800 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 21850 ' 21900 ' Subroutine [2]: Prints ERROR COUNT message and total. 21950 ' 22000 PRINT CLRSCR$ 22050 PRINT FNCSRLD$(COMMENTROW%,COMMENTCOLUMN%+10); ERRORCOUNT%; " ERRORS in"; NUMOFWORDS; " Words ";: GOSUB 34100 22100 IF ERRORCOUNT% = 0 THEN RETURN 22150 PRINT " I.E."; NUMOFWORDS/ERRORCOUNT%; " Words per error": GOSUB 34100 22200 RETURN 22250 ' 22300 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 22350 ' 22400 ' Subroutine [3]: Changes the INSTRUCTION line ADDRESS. 22450 ' 22460 ' +++++ THIS SUBROUTINE NOT USED IN THIS VERSION +++++ 22470 ' 22500 'IF INSTCOLUMN% < 70 THEN RETURN 22550 'INSTCOLUMN% = LHS% 22600 'INSTROW% = INSTROW%+1 22650 'PRINT 22700 'IF INSTROW% >= TOP%+6 THEN INSTROW% = TOP% 22750 'RETURN 22800 ' 22850 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 23270 ' 23300 ' Subroutine [4]: Access and PRINT HELP Files. 23310 ' 23320 PRINT CLRSCR$ 23330 OPEN "I", # FILENUM2%, "TTHELP"+HELPNUM$+".DAT" 23340 IF EOF (FILENUM2%) THEN GOSUB 23385: CLOSE # FILENUM2%: PRINT CLRSCR$: RETURN 23350 LINE INPUT # FILENUM2%, LINES$ 23360 IF LEFT$ (LINES$,1) = "#" THEN WHILE INKEY$ <> RET$: WEND: PRINT CLRSCR$: GOTO 23340 23370 PRINT LINES$ 23380 GOTO 23340 23382 ' 23385 CHARACTER$ = INKEY$ : IF CHARACTER$="" THEN 23385 23390 RETURN 23400 ' 29450 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 29460 ' 29500 ' Subroutine [5]: Set up Addresses & Keyboard locations 29550 ' and PRINT KEYBOARD. 29600 ' 29605 PRINT FNCSRLD$ (1,25); LINERA$; WRTPRTON$; "Hit "+ESCCHR$+" key for MENU"; 29606 ' 29610 OPEN "I",# FILENUM3%,"TTKEYBD.DAT" 29620 ' 29650 ROW% = ROWOFFSET% 29700 COLUMN% = COLUMNOFFSET% 29750 FOR ILOOP%= 1 TO 140 29800 ADDRESS% (ILOOP%, 1) = 1 29850 ADDRESS% (ILOOP%, 2) = 1 29900 NEXT ILOOP% 29950 ' ADDRESS% contains the character addresses. DISPLAYCHAR% 30000 ' contains the displayed character corresponding to that address. 30050 ' 30100 FOR JLOOP% = 1 TO 5 30150 INPUT # FILENUM3%, NUMOFKEYS% 30250 ADDCHAR$ = "" 30300 FOR ILOOP% = 1 TO NUMOFKEYS% 30350 INPUT # FILENUM3%, CHARACTER$ 30400 ASCIINUMBER% = ASC (CHARACTER$) 30450 ' Save character address 30500 ADDRESS% (ASCIINUMBER%,ARRAYROWS%) = ROW% 30550 ADDRESS% (ASCIINUMBER%,ARRAYCOLUMNS%) = COLUMN% 30600 PRINT FNCSRLD$ (ROW%,COLUMN%); CHARACTER$; 30650 ' Keep record of character corresponding to this address 30700 ADDCHAR$ = ADDCHAR$+CHARACTER$ 30750 DISPLAYCHAR% (ASCIINUMBER%) = ASCIINUMBER% 30800 COLUMN% = COLUMN%+4 30850 NEXT ILOOP% 30900 COLUMN% = COLUMN%-4*NUMOFKEYS% 30950 FOR ILOOP% = 1 TO NUMOFKEYS% 31000 INPUT # FILENUM3%, CHARACTER$ 31050 ' SAVE shift character address (BASIC can't get  a " from data) 31100 IF ILOOP% = 2 THEN IF JLOOP% = 1 THEN CHARACTER$ = CHR$ (34) 31150 ASCIINUMBER% = ASC (CHARACTER$) 31200 ADDRESS% (ASCIINUMBER%,ARRAYROWS%) = ROW% 31250 ADDRESS% (ASCIINUMBER%,ARRAYCOLUMNS%) = COLUMN% 31300 DISPLAYCHAR% (ASCIINUMBER%) = ASC (MID$ (ADDCHAR$,ILOOP%,1)) 31350 ' DISPLAYCHAR% (ASCIINUMBER%) now contains the normally displayed char. at the pos'n of l$ 31400 COLUMN% = COLUMN%+4 31450 NEXT ILOOP% 31500 COLUMN% = COLUMN%-4*NUMOFKEYS%+2 31550 ROW% = ROW%+1 31600 NEXT JLOOP% 31610 PRINT WRTPRTOFF$ 31620 CLOSE FILENUM3% 31650 ' End of keyboard setup 31700 ' 31750 RETURN 31760 ' 32000 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 32100 ' 32110 ' Subroutine [6]: SKIP Exercise LINES. 32120 ' 32130 PRINT FNCSRLD$(COMMENTROW%,COMMENTCOLUMN%+10); "Number of lines to SKIP ?"; 32135 WAITCHR$ = INKEY$ : IF WAITCHR$="" THEN 32135 32136 NUMOFLINES% = ASC(WAITCHR$) 32140 FOR ILOOP% = 1 TO NUMOFLINES% 32150 IF EOF (FILENUM1%) THEN 12550 32160 LINE INPUT# FILENUM1%,INPCHAR$ 32170 NEXT ILOOP% 32180 NUMOFREPEATS% = 0 32190 NEWLINE% = NEWLINE%+NUMOFLINES% 32200 ' 32210 PRINT FNCSRLD$ (COMMENTROW%,COMMENTCOLUMN%+10); LINERA$; 32220 RETURN 32230 ' 33000 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 33002 ' 33020 ' Subroutine [7]: COMMENT PRINT 33025 ' 33070 IF EOF(FILENUM1%) THEN RETURN 33080 ' 33082 COMMENT$(0) = MID$(ALINE$,3) 33084 FOR ILOOP% = 1 TO 4 33090 LINE INPUT #FILENUM1%,ALINE$ 33095 COMMENT$(ILOOP%) = MID$(ALINE$,3) 33100 NEXT ILOOP% 33101 ' 33105 FOR ILOOP% = 0 TO 4 33110 PRINT FNCSRLD$(COMMENTROW%+ILOOP%,COMMENTCOLUMN%); LINERA$; COMMENT$(ILOOP%) 33120 NEXT ILOOP% 33130 ' 33180 RETURN 33190 ' 34000 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 34050 ' 34100 ' Subroutine [8]: TIME DELAY. 34150 ' 34200 FOR TIMEOUT% = 1 TO DELAY% 34210  FOR MORE% = DELAY% TO 1 STEP -1 34220 WASTE% = WASTE%+1 34230 NEXT MORE% 34300 NEXT TIMEOUT% 34350 RETURN 39000 ' 39010 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 39020 ' 39500 ' Subroutine [9]: PRINT HELP MENU. 39510 ' 39520 PRINT FNCSRLD$ (TOP%,10); " - Will PRINT an explanation of the question. " 39530 PRINT FNCSRLD$ (TOP%+2,10); " - ENABLES the function." 39540 PRINT FNCSRLD$ (TOP%+4,10); " - DISABLES the function." 39550 PRINT FNCSRLD$ (TOP%+6,10); " - Is the DEFAULT condition." 39900 ' 39905 RETURN 39910 ' 39999 '********************************************************************** 40000 ' 40001 ' ######################## 40002 ' ###### SECTION 9 ###### 40003 ' ######################## 40004 ' 40005 '>>>>>>>>>>>>>>>>>>>>>>>>>> ERROR TRAPPING <<<<<<<<<<<<<<<<<<<<<<<<<<<< 40020 ' 40030 DRIVE$ ="B:" 40100 IF ERR = 53 AND ERL = 11400 THEN CLOSE #FILENUM1%:  OPEN "I",#FILENUM1%,DRIVE$+FILE$: RESUME 11600 40400 ' 40410 IF ERR = 53 AND ERL = 29610 THEN CLOSE #FILENUM3%: OPEN "I",#FILENUM3%,DRIVE$+"TTKEYBD.DAT": RESUME 29650 40500 ' 40510 IF ERR = 53 AND ERL = 23330 THEN CLOSE #FILENUM2%: OPEN "I",#FILENUM2%,DRIVE$+"TTHELP"+HELPNUM$+".DAT": RESUME 23340 65500 '********************************************************************** 65529 END PNUM$+".DAT": RESUME 23340 65500 '************************ Probably the best way to see what this program does is to run it but I shall attempt to give you a brief description. The program is designed to be easy to use by people unfamiliar with computers, hence: (Carriage Return) after most prompts produces reasonable starting DEFAULTS. after a prompt will print a description of each option on the screen. Hit RETURN for more HELP. # SET UP The screen is divided into THREE areas: 1. COMMENTS containing instructions relevant to each typing exercise. 2. Keyboard DISPLAY duplicating the QWERTY keyboard on the screen. 3. EXERCISES near the bottom of the screen containing the line you should type and ECHOING the typed keys underneath it. Hit RETURN for more HELP. # OPERATION After initialisation the student types the exercises as shown. Each letter that you are to type is highlighted on the Keyboard Display. To bypass a line or part thereof, a moves you to the next line. To escape from this `EXERCISE MODE' to `COMMAND MODE' type the escape key shown at the top of the screen. You also enter command mode at the end of an exercise, to be prompted for a command. *** NB *** MAKE & USE a cover for your keyboard - A piece of stiff cardboard will usually work. You will learn faster in the end; though a bit frustrating at first. PS. Most HELPs are not this long!! Hit to return to program or to end. y. Terminal installer included.  TOUCHTYPE TUTOR Version 2.0 16th April 1982 Direct Cursor Addressing Concept By: Tim Pearce 7 Bannerman St, Cremorne, N.S.W. Reworked By: R. Berthet 15/5 Cottonwood Cr. North Ryde, 2113. SYDNEY. (61-2)-88-1640 This document is entered into the public domain by its author, Richard Berthet. Please do not remove this notice. INTRODUCTION TTYPE (TOUCHTYPE TUTOR) is an application programme designed to aid the user to quickly gain touch typing skills using the computer keyboard and the computer, of course. Some of the features are: * Lots of HELP, which you can expand. * Onscreen representation of a 'QWERTY' keyboard to give visual feedback. * Graduated exercises with prompts (or comments) throughout. The objective of this document is to assist you, the programmer to get the programme up and running on your system as fast as possible, whereupon, it is fairly obvious what it is supposed to do and how it is supposed to do it. For the impatient, I propose to first discuss what to alter to make it go straightaway, and for those who may wish to tinker, I will launch into a discourse about the programme itself . QUICK INSTALLATION Hardware This version, (2.0), of TTYPE is written for Direct Cursor Addressing terminals, so if yours isn't, then you may either do a complete rewrite or wait for the Non-Cursor Addressing version. Software Following is a list of FILES that must accompany the main programme. It is necessary to have SOME exercise files, A to J are presently included. TTYPE .BAS MBASIC Source Code TTKEYBD .DAT KEYBOARD Datafile TTHELP0 .DAT HELP File 0 TTHELP1 .DAT HELP file 1 TTHELP2 .DAT HELP file 2 TTHELP3 .DAT HELP file 3 TTHELP4 .DAT HELP file 4 TTHELP5 .DAT HELP file 5 TTYPEXA .DAT | through to | Present EXERCISE Datafiles TTYPEXJ .DAT | Before running, the software will need to be altered to suit your terminal and computer. Here is a list of changes that may need to be made to get you on the road: 1. Refer to SECTION 1: 'ASCII CONTROL CODES' of Main Program In this section you will find the function to DEFine direct cursor addressing- ????? DEF FNCSRLD$(ROW,COLUMN) = ESC$+"="+CHR$(ROW+31)+CHR$(COLUMN+31) The constant '31' is the offset to correct the argument of the function from absolute ASCII values to ROW and COLUMN numbers for a 24 line X 80 column screen. If yours is different insert the correct constant. (A visual result of the function not having the proper values as its argument will be "haywire" printing on-screen.) 2. Refer to SECTION 3: 'INITIALISING BLOCK' of Main Program. You may need to change the following constants- DATAPORT% = 0 Decimal address of system dataport. STATUSPORT% = DATAPORT%+1 Decimal address of system status port. ESCTYPE% = 127 ASCII value of character used to escape to command level of programme. ESCCHAR$ = "RUB" String to print name of key for the above character (ESCTYPE%). Those few changes should at least make it look like it's going to run, if not you'll have to read the full description to ascertain where your problem is. EXPLANATION OF THE FILES TTYPE.BAS TTYPE.BAS is the MBASIC source code which contains the body of the programme and its assorted subroutines. This is the one that you will have to alter to suit your system. (See either Quick Installation or Programme Guide.) TTKEYBD.DAT TTKEYBD.DAT contains the data for the onscreen representation of your terminals KEYBOARD. It will probably require alteration of some of the minor keys that always differ between terminals. You will need the aid of a text editor(i). Following is what the file looks like and an explanation of its format- 13,1,2,3,4,5,6,7,8,9,0,-,^,\ !,,#,$,%,&,',(,),_,=,~,| 13,Q,W,E,R,T,Y,U,I,O,P,{,}," " q,w,e,r,t,y,u,i,o,p,[,]," " 12,A,S,D,F,G,H,J,K,L,+,*,` a,s,d,f,g,h,j,k,l,;,":",@ 10,Z,X,C,V,B,N,M,<,>,? z,x,c,v,b,n,m,",",.,/ 1," "," " Notice that some of the characters are between double quotes (e.g.",") this is because MBASIC interprets the comma character as a separator of the data. If you forget to put certain characters between quotes the READ statement gets "out of step" and will eventually generate an error message. (Read the MBASIC manual about the READ statement if you are not sure.) (i) Avoid use of the WORDSTAR (R) word processor in document mode on DATAFILES. It has the nasty habit of putting 'invisible' control characters in where you don't want them, for its own nefarious purposes. The net effect is that these control characters send the programme berserk! (Bit 8 of the Carriage Return is set high.) KEYBOARD DATAFILE FORMAT n,D,D,D,D,D,D,D,D N,N,N,N,N,N,N,N WHERE: n = Number of keys in the row. D = Characters DISPLAYED as the keyboard. (There should be 'n' of these.) N = NON-DISPLAY characters that corres- pond to DISPLAY characters when shifted.  i.e. You may choose to DISPLAY upper-case and shift to lower- case,which will therefore be the NON-DISPLAY characters. TTYPEX? .DAT Files of the genre TTYPEX? .DAT contain exercises and COMMENTs and are called by the main programme when required. (TTYPEXn.DAT where 'n' is a letter) * Any single exercise line can be entered. * Any line to be repeated is preceded by '|n' where 'n' is the number of repeats. * A COMMENT is preceded by '!#' and there may be up to 80 characters per line. For the COMMENT to print correctly there must 5 lines of COMMENT, even if you only want one. (See example following.) * A PARAGRAPH is specified by '|pn,ll' on a line by itself where 'p' indicates to the program this is a PARAGRAPH;'n' is the number of times to repeat it and 'll' is a 2 digit specification of the number of lines in the PARAGRAPH. EXAMPLE OF EXERCISE DATAFILE !#Exercise A. !# !# Left hand on the [A] [S] [D] [F] keys. !# !# Right hand on the [J] [K] [L] [;] keys. |3fff fff jjj jjj fff jjj ff jj ff jj f j |3ddd ddd kkk kkk ddd kkk dd kk dd kk d k !# !# !# RETURN the carriage without looking up. !# !# |3sss sss lll lll sss lll ss ll ss ll s l |3aaa aaa ;;; ;;; aaa ;;; aa ;; aa ;; a ; |2aaa ddd add add aaa lll all all add all |3aaa sss kkk ask jjj aaa lll jal ask jal |3ddd aaa aaa dad lll aaa ddd lad dad lad |3a as ask asks asks; f fa fal fall falls |3a al ala alas alas; f fl fla flas flask |3a ad add adds adds; s sa sal sala salad !# !# !# GOAL: Finish next two lines in one minute. !# !# |2a sad fad; a lass falls; dad asks a lad; TTHELP? .DAT Again these are a family of files and contain the HELP text (TTHELPn .DAT where 'n' is a number, presently in the range 0 to 5). They are designed with one special character (#) in them which, when read by the programme halts further input until receipt of a carriage return (See SECTION 8 Subroutine [4] for full explanation). This is TTHELP5 .DAT - - Continues with next line in the exercise. M - You've found this one! E - End the running of this program. Q - Quit to operating system. Hit for more HELP. # N - Start a NEW exercise. R - REPEAT last line, when you can't get it right! S - SKIP lines in this exercise. You will be prompted for the number of lines to SKIP. Note that printed comments have already been skipped. W - Print the number of WORDS so far and the ERROR count. Then the RESET option resets the ERROR COUNT to zero. L - Print the number of LINES read from the current exercise file. Used in combination with this command  tells you roughly how many lines to Skip to restart in the middle of an exercise. HIT key for MENU selection. PROGRAMME GUIDE You've heard of the Hitch Hiker's Guide to the Galaxy, well this is the Programmer's Guide to Touch Typing. The Plot is to take you section by boring section through the main programme. Do not adjust your seat. We are in complete control. STANDBY ! (Oh, by the way, the programme listing is liberally dotted with remarks, so these notes are a companion to them.) SECTION 1 TERMINAL ATTRIBUTES Contained herein are all the onscreen pretty bits, originally from a larger MBASIC utility called UTILSCRN.BAS, written for the Lear Seigler ADM-31 terminal. The remarks tell all (I hope !). Things to look out for: * Check the ESCAPE sequences for your terminal and alter them to suit it. * As mentioned earlier, FNCSRLD$(ROW,COLUMN) is the fun- ction defining direct cursor addressing, you will probably have to change the offset for the origin. * The string variables WRTPRTON$ and WRTPRTOFF$ are used to switch the video between full and half amplitude. If your terminal has an equivalent function use it, it'll make it prettier. SECTION 2 ALTERATIONS LOG Just a little bit of info to keep track of the programme's metamorphosis. SECTION 3 INITIALISING BLOCK Ahhhhh now we come to an important bit. In amongst this lot the numeric and string constants are assigned to their appropriate variables. Things to look out for: * DATAPORT% will probably be different in your machine. * ESCTYPE% sets the ASCII value of a key to strike to enter COMMAND mode. I chose a key which is not used often and was readily available. * ESCCHR$ assigns a string to print the name of the key you have chosen. (In my case it was "RUB".)  * DELAY% sets the length of a time delay. The use of the time delay is explained in the section dealing with Subroutines. As a guide I've used 25 when running under the interpreter and 500 when compiled. The system has a 6MHz clock. (Don't forget to change it when compiling, as I always do, forget that is; or some text will be just a figtree of your imagination.) * Next you'll find a sub-headins "SCREEN ADDRESSES". These and their associated remarks are self explanatory. You can fiddle with these to your hearts content if you want to achieve a different screen layout. SECTION 4 START OF ACTIVE CODE & INPUT MENU This is the first bit of code that actually does something on- screen. Essentially, it presents menu questions to initialise flags and will print HELP if it is requested. It is broken into 4 sub-sections which are the 4 questions that the programme seeks answers to. SECTION 5 SET UP & CHECK EXERCISE FILE My first reaction upon reading this code was unprintable; it still is. I haven't done much to it, apart from annotations, because the flow is so tortuous that any changes cause it to bomb. Anyway, it works, even if it is messy ! The aim is to open the exercise file and perform the following checks to each line as it is input: * If End Of File (EOF), then go to menu. * If it is an EXERCISE, how many repeats ? * If it is a COMMENT, then go to COMMENT processor. * If it is a PARAGRAPH, then input additional lines of the paragraph. The programme loops back through this section at the end of each exercise, starting below the line where the file is opened. SECTION 6 KEYBOARD SCAN You'll notice that this is one large FOR NEXT loop which is controlled by the number of letters in each exercise. A summary of the functions performed: * Assign, from previously stored array, an address of the exercise character, that corresponds to its position on the onscreen keyboard. * Print and highlight the exercise character on the key- board. * Wait until response to exercise character is typed from terminal keyboard. * Print resultant input on ECHOROW or store it until end of exercise if ECHO OPTION is off. * Check for ESCAPE character or RETURN and take appropriate action. * Check input character to see if it corresponds to exercise character, if not increment ERRORCOUNT and CHARCOUNT. That is basically what occurs, minus a few embellishments. SECTION 7 ESCAPE OR ALTER PROGRAMME FLOW A series of IF THEN statements sort out suitable action in response to the character input by the user, after he/she has read the MENU. If no match is made the MENU is presented again until a match is made. SECTION 8 SUBROUTINES The subroutines are numbered; 1 to 9. I shall briefly describe the essence what each does: 1. CAPITAL. If the character falls within the range of the lower case alphabet it is converted to upper case. 2. ERROR COUNT. Prints the number of errors in the number of words typed so far. 3. INSTRUCTION LINE ADDRESS. Adjusts the address for instructions to be printed on the screen after the last instruction was printed. Not used in this version. 4. PRINT HELP. * Clears screen. * Opens TTHELP? .DAT, which is checked for end of file(EOF). * If (EOF) the program waits for any character to be input, on character input the file is closed, the screen cleared and a return made to the main programme. * If it is'nt (EOF) a line is input from the file, the left-most character is checked for the page de-limiter (#). * If "#" is present the programme waits for a input, whereupon the screen is cleared and flow returns to check for end of file etc. * Otherwise the line is printed and flow returned to check for end of line etc. 5. PRINT KEYBOARD. The objective is to print on the screen, a representation of the terminals' keyboard. The method may not appear to be too clear, but I shall attempt a description; * The file TTKYBD.DAT is opened. * The array, ADDRESS%(X,Y) has its contents initialised to 1. * The loop JLOOP% cycles through the 5 lines in the keyboard data that contain the NUMber OF KEYS in the upper and lower case rows. * The loop(s) ILOOP% cycle through unshifted characters and then the shifted characters. The first ILOOP is essentially th same as the second. Inside this first  loop the programme reads a character converts it to an integer and assigns it to an array. The ROW and COLUMN addresses are stored in ADDDRESS%(X,Y). The character is printed at its correct position and an intger representation is also stored in DISPLAYCHAR%(X). COLUMN% is incremented by 4 or whatever spacing you wish. Inside the second ILOOP the same occurs except with one difference; The programme tests for certain ILOOP and JLOOP values that should correspond to the position on the keyboard of the double quote character ("). This character cannot be put in a BASIC data statement. It is assigned to the array by CHR$(34). 6.SKIP LINES. * The number of exercise lines to skip is input and the loop inputs the required number from the exercise file and end of file is tested for in each pass. 7. COMMENT PRINT. When the COMMENT indicators are detected in the exercise file the programme branches to here. The next 4 lines are input from the file and stored in COMMENT$(X), these are then printed in the next loop. 8. TIME DELAY. The two loops just give a predetermined time delay. I now have a more sophisticated version that will give the number of seconds delay that you input to the subroutine, to be addded at a later date. 9. PRINT HELP MENU. Prints a basic help for the input MENU. SECTION 9 ERROR TRAPPING These few lines are the minimum of error trapping, a lot more could be done. If the programme is on the "A" drive and can't find a file, the file is closed and "B:" appended to the filename and another attempt is made to open the file. If it is not on the B drive forget it !. If the programme is on the B drive it does not look for files on the A drive if they aren't on the B.  THE END HINTS, HELP AND APOLOGIES Well that's a load of(sic) my mind. Don't think that you'll turn into an ace typist overnight, I typed this blurb in using the "Three Finger Technique". Brickbats and boquets may be addressed to the author, (preferably enclosed with $50 notes). My sincerest apologies for any errors in the document, but as we all know documenting a programme is the PITS!!!!. Now an idea from the programme originator, Mr Tim Pearce; It would be easy to interface a real time clock to measure typing speed. (e.g. using a Godbout SYSTEM SUPPORT 1 BOARD with a real time clock etc etc.) Just a little something for you to work on................... ............................HAPPY TYPING Richard Berthet. PDTINS CHN S PDTINS DTA VWHATSFORCHK ZTTYPE3 BAS [VTTYPE3.LBR is a comprehensive touchtyping tutor in MBASIC which was originally released in November 1982 as part of SIG/M volume 83. This LBR is revision 3.0, dated May 10, 1986. All references to specific I/O ports have been removed in order to make the program more portable. A terminal or computer with direct cursor addressing is required. Although presently set up for an ADM-3A or Televideo 925 terminal, the program is well commented and easily changed. MBASIC 5.2 or later is required to run this program. Earlier versions may not have the INKEY$ function required. --Keith Petersen, W8SDZ Copyright (c) 1986 by Sig/M-Amateur Computer Group of New Jersey Inc., Box 97, Iselin NJ 08830-0097 May not be sold for profit. ght (c) 1986ARK02PATAZM Z1 COM $1CHECK28 COM 1HCHECK28 DOC C?PDTINS CHN S PDTINS DTA VWHATSFORCHK ZTTYPE3 BAS [V------------------------------------------------------------------------------- | | | Hi there my name is: | | | | JUDY COMPUTER ! | | | | YOU TOO can learn to TOUCHTYPE in only eight hours. | | | | | | Will set programme to DEFAULT values. | | | | | | Will further explain the question being asked. | | (HELP!!!!!) | | | | ENABLES the function. | | | | | | DISABLES the function. | | | | | |HIT appropriate key to CONTINUE. | ------------------------------------------------------------------------------- PDTINS CHN S PDTINS DTA VWHATSFORCHK ZTTYPE3 BAS [V ERROR BREAK OPTION During an exercise, if the wrong key is typed and the ERROR BREAK option is ON, the console BELL will chime and the program will expect you to type in the correct character. This process is repeated until you get it right. With the ERROR BREAK option OFF the errors are still counted but you are to continue on with the rest of the line. This option can be selected when you are making too many errors. It is not anticipated that you would use it a lot. Hit for ERROR BREAK ON. Hit for ERROR BREAK OFF.ARK02PATAZM Z1 COM $1CHECK28 COM 1HCHECK28 DOC C?PDTINS CHN S PDTINS DTA VWHATSFORCHK ZTTYPE3 BAS [V ECHO OPTION With ECHO ON the keys are ECHOED as soon as they are typed, during the exercises (DEFAULT). If this option is OFF then the entered line is not displayed until it is finished. The line is considered finished either when all the characters in the line are typed or you hit . To get the next line of the exercise type again. This option should be used quite often and reproduces the normal typing situation where the typing is done from a separate sheet and therefore the typed page is not seen. With the ECHO option OFF it pushes you to watch the keyboard display to keep track of where you are up to. This is especially the case when ERROR breaks are selected. Hit for ECHO OFF. Hit for ECHO ON. PDTINS CHN S PDTINS DTA VWHATSFORCHK ZTTYPE3 BAS [V - To Continue where you left off M - For MORE Help N - NEW Exercise L - Print LINE Number E - END to Basic W - Print number of WORDS S - SKIP lines Q - QUIT to System R - REPEAT line HIT Required Key for Selection. - Continues with next line in the exercise. M - You've found this one! E - End the running of this program. Q - Quit to operating system. Hit for more HELP. # N - Start a NEW exercise. R - REPEAT last line again for when you can't get it right! S - SKIP lines in this exercise. You will be prompted for the number of lines to SKIP. Note that printed comments have already been skipped. W - Print the number of WORDS so far and the ERROR count. Then the RESET option resets the ERROR COUNT to zero. L - Print the number of LINES read from the current exercise file. Used in combination with this command tells you roughly how many lines to Skip to restart in the middle of an exercise. HIT key for MENU selection. 13,1,2,3,4,5,6,7,8,9,0,-,^,\ !,,#,$,%,&,',(,),_,=,~,| 13,Q,W,E,R,T,Y,U,I,O,P,{,}," " q,w,e,r,t,y,u,i,o,p,[,]," " 12,A,S,D,F,G,H,J,K,L,+,*,` a,s,d,f,g,h,j,k,l,;,":",@ 10,Z,X,C,V,B,N,M,<,>,? z,x,c,v,b,n,m,",",.,/ 1," "," " c W - Print number of WORDS S - SKIP lines Q - QUIT to System R - REPEAT line HIT Required Key for Selection.!#Exercise A. !# !# Left hand on the [A] [S] [D] [F] keys. !# !# Right hand on the [J] [K] [L] [;] keys. |3fff fff jjj jjj fff jjj ff jj ff jj f j |3ddd ddd kkk kkk ddd kkk dd kk dd kk d k !# !# !# RETURN the carriage without looking up. !# !# |3sss sss lll lll sss lll ss ll ss ll s l |3aaa aaa ;;; ;;; aaa ;;; aa ;; aa ;; a ; |2aaa ddd add add aaa lll all all add all |3aaa sss kkk ask jjj aaa lll jal ask jal |3ddd aaa aaa dad lll aaa ddd lad dad lad |3a as ask asks asks; f fa fal fall falls |3a al ala alas alas; f fl fla flas flask |3a ad add adds adds; s sa sal sala salad !# !# !# GOAL: Finish next two lines in one minute. !# !# |2a sad fad; a lass falls; dad asks a lad; ARK02PATAZM Z1 COM $1CHECK28 COM 1HCHECK28 DOC C?PDTINS CHN S PDTINS DTA VWHATSFORCHK ZTTYPE3 BAS [V!#Exercise B. !# !# REVISION. !# !# |2fff jjj ddd kkk sss lll aaa ;;; fff jjj |2sss aaa ddd sad sad aaa sss kkk ask ask !# !# The [E] key. !# Use the [D] finger. Keep the [A] finger at home. !# !# Try the DED reach first. |3ddd ded eee ddd ded eee ddd ded eee ded |3ded see see ded fee fee ded lee lee ded |3ded led led ded fed fed ded fee fee ded |3ded sea sea ded elk elk ded elf elf ded !# !# The [U] key. !# Use [J] finger. Keep [K] [L] [;] at home. !# !# Try the JUJ reach first. |2jjj juj uuu jjj juj uuu jjj juj uuu juj !# !# !# SPEED up on repetitions. !# !# |2jjj juj uuu jjj juj uuu jjj juj uuu juj |3juj dud dud juj due due juj sue sue juj |3juj us; us; juj use use juj uke uke juj |3juj due due juj sue sue juj use use juj !# !# The [G] key. !# Use [F] finger and try the FGF reach first. !# !# Keep [A] [S] [D] home. |3fff fgf ggg fff fgf ggg fff fgf ggg fgf |3fgf lag lag fgf jag jag fgf sag sag fgf |3fgf dug dug fgf lug lug fgf jug jug fgf |3fgf leg leg fgf keg keg fgf egg egg fgf !# The right hand SHIFT key. !# !# Keep [J] at home and press and hold SHIFT key with [;] finger. !# Strike the left side key to be capitalised. Release SHIFT key. !# Return all fingers to their home position. |4;;; A;; A;; ;;; S;; S;; ;;; D;; D;; ;;; |4;;; Ask Ask ;;; Alf Alf ;;; Ada Ada ;;; |4;;; See See ;;; Sal Sal ;;; Del Del ;;; |4;;; Elk Elk ;;; Fae Fae ;;; Gae Gae ;;; !# !# Note the pattern of each line. Speed up and sustain an even !# pace on the repetitions. !# !# |2Dell fell jell ell; fads gads lads dads |2Flag slag skag lag; fuse uses used use; |2Gale kale sale ale; full dull gull lull !# !# !# GOAL: finish 2 copies of this line in one minute. !# !# |2Sue fed a sad lad a salad; Ask a judge;PDTINS CHN S PDTINS DTA VWHATSFORCHK ZTTYPE3 BAS [V !#Exercise C. !# !# New keys: [R] [H] [.] and left hand shift. !# REVISION. Type these evenly & rapidly. !# |2aaa ;;; sss lll ddd kkk fff jjj aaa ;;; |2ded led fed fgf leg keg juj jug lug dug !# The [R] key. !# !# Us th finger Kee [A [S [D finger a hom mov !# onl th finger !# Typ RAPIDLY. |3fff frf rrr fff frf rrr fff frf rrr frf |3frf fur fur frf far far frf jar jar frf |3frf err err frf ere ere frf are are frf |3frf red red frf rug rug frf are are frf !# Th [. key !# !# Us [L finger !# Kee [; finge anchore a home. !# |3lll l.l ... lll l.l ... lll l.l ... l.l !# !# You arm shoul no fla aroun lik pidgeo comin i !# on strafin run. !# !# |3l.l dr. dr. l.l sr. sr. l.l fr. fr. l.l |3l.l Dr. Dr. l.l Sr. Sr. l.l Fr. Fr. l.l |3Dad fed us. See us. See Al. Ask Red. !# The [H] key. !# !# Us th [J finger Ancho th finger the rac !# throug th exercises. !# |3jjj jhj hhh jjj jhj hhh jjj jhj hhh jhj |3jhj had had jhj hag hag jhj has has jhj |3jhj he; he; jhj she she jhj her her jhj |3jhj ash ash jhj hue hue jhj hug hug jhj !# The left [SHIFT] key. !# !# T capitalis letter o th RH o th keyboard Kee [F !# finge hom hol dow lef shif ke wit [A finger.Strik !# th lette ke retur al finger t thei hom position. |3aaa Jaa Jaa aaa Kaa Kaa aaa Laa Laa aaa |3aaa Jed Jed aaa Lea Lea aaa Hal Hal aaa |3aaa Her Her aaa Has Has aaa Had Had aaa |4aaa Use Use aaa Led Led aaa Les Les aaa !# !# !# MEASURE your progress. !# !# |2Hear dear gear ear; hues rues sues dues |2Hare dare fare are; reed reel reek reef |2Rash sash hash ash; Jake lake fake sake !# !# !# FINISH 2 copies of this line in less than 1 minute. !# !# |2Jed has a glue jar; Alf has a red desk. !# !# !# Bu you'v go keyboard..(an blood fingers) luck you  !# !# ARKDATERHEX ARKDATERSUB ARKDATERASM ARK02PATFOR ARK02PATAZM Z1 COM $1CHECK28 COM 1HCHECK28 DOC C?PDTINS CHN S PDTINS DTA VWHATSFORCHK ZTTYPE3 BAS [V!#Exercise D. !# The [T] [I] [O] keys. !# !# Keep the [A] [&] [;] fingers anchored. !# REVISION. Keep an even and rapid pace. |2aaa ;;; sss lll ddd kkk fff jjj fgf jhj |2a;a ded l.l frf juj fgf jhj a;a Les Sue !# The [I] key. !# !# Use [K] finger. Keep [;] [&] [L] fingers anchored. !# !# |3kkk kik iii kkk kik iii kkk kik iii kik |3kik air air kik fir fir kik sir sir kik |3kik kid kid kik did did kik rid rid kik |3kik dig dig kik jig jig kik rig rig kik !# Th [O key !# !# Us [Lݠ finger Kee eithe [J o [;ݠ finge a home !# or whicheve i easie, a home. !# |3lll lol ooo lll lol ooo lll lol ooo lol |3lol log log lol jog jog lol dog dog lol |3lol off off lol odd odd lol old old lol |3lol oar oar lol our our lol oil oil lol !# The [T] key. !# !# Use [F] finger. Keep the [A] [S] [D] fingers at home. !# !# Return the carriage without looking down even once. |3fff ftf ttt fff ftf ttt fff ftf ttt ftf |3ftf aft aft ftf its its ftf hat hat ftf |3ftf foo foo ftf toe toe ftf the the ftf |3ftf let let ftf lot lot ftf got got ftf !# PRACTICE on word families. !# !# Analys eac line the typ thes withou lookin dow !# once. !# |2to toe tog tot too; it sit fit hit kit; |2ut jut hut rut out; ot got rot lot hot; |2ig fig dig rig jig; et let jet set get; |2at sat hat fat eat; ir ire sir fir air; !# TOϠ man ERROR mean tha yo ar pushin to har fo !# spee o bein careless no enoug mean th opposite. !# !# Don' sto o loo dow o th followin lines. !# |2The red shoe is his. It is a good fit. |2All of us like Sue; she has good taste. |2Ask Al to see that all of us get to go. !# !# !# GOAL: Type this in one minute. !# !# |2Joe fell off a ladder; he hurt his leg. He asked Dr Todd to look at it. !!#Exercise E. !# !# REVIEWING the keys you know. !# Se goo pac o eas lin 1 The kee i o th nex !# lines. |2aaa sss ddd fff fgf jhj jjj kkk lll ;;; |2ded lol frf kik ftf juj fgf jhj ded l.l |2Alf Sue Del Flo Gae Joe Kit Lil Ted Her !# !# !# Not th pattern Spee u kee steady smoot pac o !# repitions. !# |2Ada ade are art aft ;;; to; so; do; go; |2Sal sat set sit sir Lou lot log lug lag |2Dee due dug dog dig Kit elk ilk irk ark |2Fil fir far fur for Joe jog jag jug jig |2Go; go; got get gat gag Hal hat hit hut hot !# !# !# Kee pac stead an increas spee o th repetitions. !# !# |2Ira ire irk ilk ill Tat hat oat eat fat |2Rue rug rut rot rod Era ere err ear eat |2Our oar oat out oft l.l Jr. Sr. Dr. Fr. |2Ted tee toe tie the Usa use uke ute ure |P2,03 The goal for this task is to do it just as fast as is safe. Look out for a lot of errors if too great a rush is tried. !# !# !# GOAL: To type this paragraph once in 1 minute. !# !# |P2,02 The three of us took a good ride out to the lake to fish. Jake got us a trout. UNARC EXE ;CHKDSK EXE@DVOPT EXE@omPKXARC COM /PCBOSS COM=TitQ COM g ՁCLEAN COMdW OFASTCOPYEXEr \C!#Exercise F. !# !# CRITICAL REVIEW. Keep eyes on the screen!! !# REVISION. !# Get off to a racing start. |2aaa ;;; sss lll ddd kkk fff jjj ggg hhh |2lol ded kik frf juj ftf jhj fgf l.l aaa |2a d e f g h i j k l o r s t u . ; a d e !# !# !# PRESS for speed and don't look up. !# !# self jail late just good felt dogs joke huge took dust jade tiff hulk flag jigs tuft jerk high furl drag judo ajar kite lake fork held risk hair fish jugs hard !# !# On whic letter di yo mak th mos mistakes !# !# REPEAT appropriat exercise i th followin section. !# aa alas aa ajar aa area aa gala aa data dd deed dd died dd dude dd duds dd dead ee seek ee free ee feel ee flee ee edge ff ruff ff gaff ff doff ff guff ff huff gg eggs gg flag gg gags gg gift gg grog hh high hh hush hh hath hh hoot hh hash ii idea ii irks ii ills ii idol ii idle jj jell jj joss jj just jj jolt jj jilt kk kale kk kill kk silk kk disk kk talk ll loll ll doll ll lilt ll sell ll lull oo food oo hood oo odor oo door oo oleo rr roar rr errs rr rare rr risk rr rear ss sees ss sits ss sirs ss toss ss sets tt trot tt taut tt tuft tt that tt test uu used uu dull uu uses uu full uu true !# !# !# REPEAT this testing routine. !# !# self jail late just good felt dogs joke huge took dust jade tiff hulk flag jigs tuft jerk high furl drag judo ajar kite lake fork held risk hair fish jugs hard !# !# !# Type this sentence easily, in less than 1 minute. !# !# |P2,02 Jud is to go to the edge of the lake to see if the old oak tree is still there. !# !# !# Well aren't we progressing!. !# !# ARK02PATAZM Z1 COM $1CHECK28 COM 1HCHECK28 DOC C?PDTINS CHN S PDTINS DTA VWHATSFORCHK ZTTYPE3 BAS [V!#Exercise G. !# !# Keep wrists close together. !# REVISION. Keep fingers moving. !# |2if it is; to go to; or to us; or if it. |2Joe is; Kit is; Let us; For Al; His dog !# The [,] key. !# !# Us [K finger kee [; [& [l a home cur [K finger !# t eas reach. !# |3kkk k,k ,,, kkk k,k ,,, kkk k,k ,,, k,k |3k,k as, as, k,k is, is, k,k us, us, k,k |3k,k to, to, k,k do, do, k,k so, so, k,k |3k,k of, of, k,k if, if, k,k it, it, k,k !# The [C] key. !# !# Us [D finger Kee [A [S finger anchored cur [D !# finge fo eas reach Repeat thes line i necessary. !# |3ddd dcd ccc ddd dcd ccc ddd dcd ccc dcd |3dcd cad cad dcd cod cod dcd cud cud dcd |3dcd ice ice dcd ace ace dcd act act dcd |3dcd cue cue dcd cut cut dcd cur cur dcd !# !# !# Ca yo finis thi sentenc i on minute Not spac afte !# comma. !# |P2,02 Get Carol, Charles, or Cathie to act as a guide; the others are to check co"ats. !# The [M] key. !# !# Us [J finger Kee [K [L [; a home Spee u o !# repetitions. !# |3jjj jmj mmm jjj jmj mmm jjj jmj mmm jmj |3jmj jam jam jmj ham ham jmj him him jmj |3jmj mar mar jmj mat mat jmj mad mad jmj |3jmj sum sum jmj gum gum jmj hum hum jmj !# The [:] key. !# !# Kee [Jݠ [K [L anchored Not spac afte Perio Tw !# space afte colon. !# |3;;; ;:; ::: ;;; ;:; ::: ;;; ;:; ::: ;:; |3Dear Al: Dear Jo: Dear Lu: Dear Sir: |3Mr. Em: Dr. Doe: Miss Ree: Mrs. Mor: |3To Mr. Ulm: To Mrs. Ulm: To Miss Ulm: !# !# GOAL finis eac Not followin i on minut o les an !# finis bot i two. !# !# |P2,04 Dear Mack: I heard that Carl, Jack, or Cedric might come to see our last game. Dear Harold: Either Cora or Jack is to go home for the game. Dick is too ill. !# !# !# Ma yo mus fee lik jer sittin her typin thi junk! !# !# !#Exercise H. !# !# The [W] [Y] [V] and [N] keys. !# Keep arms motionless. !# REVISION. Type with sharp biting strokes. |2aaa ;;; sss lll ddd kkk fff jjj fgf jhj |2lol ded kik frf juj ftf jmj dcd k,k !# The [W] key. !# !# Us [S finge ancho eithe [F o [A finger whicheve !# i easier !# |3sss sws www sss sws www sss sws www sws |3sws sow sow sws sew sew sws saw saw sws |3sws low low sws mow mow sws wow wow sws |3sws we, we, sws who who sws was was sws !# The [Y] key. !# !# Us [J finger Kee [K [L [; finger anchored Don' !# pause. !# |3jjj jyj yyy jjj jyj yyy jjj jyj yyy jyj |3jyj sly sly jyj shy shy jyj sky sky jyj |3jyj yes yes jyj yet yet jyj you you jyj |3jyj jay jay jyj way way jyj may may jyj !# !# MEASURE you progres typ cop o thi lin not i !# minut o less. !# !# |P2,02 Dear Mary: We wish you would tell Judy how to get her team to work like yours. !# B curlin you finger fo botto reache lik D- J- !# th hand ca b kep still Givin bette accurac !# greate speed Wrist ar bes kep lo an righ thum wel !# abov th spac ba an pointin toward B. !# |1This isn't an exercise, it's just a break, hit RETURN when ready. !# The [V] key. !# !# Use the [F] finger & keep [A] [S] [D] fingers anchored. !# !# |3fff fvf vvv fff fvf vvv fff fvf vvv fvf |3fvf vie vie fvf vim vim fvf via via fvf |3fvf vet vet fvf vat vat fvf eve eve fvf |3fvf velvet, fvf valves, fvf vividly fvf !# Th [N key !# !# Us th [J finge kee [K [Lݠ [;ݠ key !# anchored. Mov onl [J finge spee u o repitions. !# |3jjj jnj nnn jjj jnj nnn jjj jnj nnn jnj |3jnj nun nun jnj run run jnj sun sun jnj |3jnj not not jnj now now jnj nor nor jnj |3jnj and and jnj one one jnj can can jnj !# !# MEASUR you progress Typ eac not i les tha minut  !# bot i two. !# !# |P3,04 Dear Vic: When we see Jay, we will ask him to give Wally a list of five names. Dear Roy: I may have to see Amy today; if so, I will try to run over at seven. Z SPt F6\\k^vu*Pu _*F>dt==|=D P*롋Fl =P*P'Htu0=Yth0!0P)0Pd/ ]9<!#Exercise I. !# The [X] [P] and [B] keys. !# !# Keep the elbows in. !# REVISION. Try and double your speed on each repetition. |2led vet ice due kit rim jay aft fan jam |2for how joy fog cod sow gum jug sum log !# The [X] key. !# !# Use the [S] finger & keep either [A] or [F] finger anchored. !# Speed up on repetitions. !# |3sss sxs xxx sss sxs xxx sss sxs xxx sxs |3sxs six six sxs nix nix sxs fix fix sxs |3sxs wax wax sxs tax tax sxs lax lax sxs |3sxs fox fox sxs sox sox sxs axe axe sxs !# The [P] key. !# !# Use the [;] finger & anchor [J] [K] [L] fingers. !# !# |3;;; ;p; ppp ;;; ;p; ppp ;;; ;p; ppp ;p; |3;p; lap lap ;p; nap nap ;p; map map ;p; |3;p; pin pin ;p; pen pen ;p; pan pan ;p; |3;p; pox pox ;p; pot pot ;p; put put ;p; !# !# !# MEASURE your progress. Type this note in 1 minute. !# !# |P2,02 Dear Rex: Please pay Max for the sixty papers I lost; I can pay you next week. !# The [B] key. !# !# # Us th [F finge kee [A [S finger a hom ( [D !# to i possible) !# Spee u o repetitions. |3fff fbf bbb fff fbf bbb fff fbf bbb fbf |4fbf fob fob fbf job job fbf rob rob fbf |4fbf bud bud fbf but but fbf bug bug fbf |4fbf be, be, fbf box box fbf by, by, fbf !# The [/] key. !# !# Use the [;] finger & keep [J] finger at home & [K] [L] if possible. !# Gradually speed up on repitions. !# |3;;; ;/; /// ;;; ;/; /// ;;; ;/; /// ;/; |3;/; his/her ;/; him/her ;/; we/they ;/; !# !# !# Keep ELBOWS IN and EYES ON THE SCREEN at all times. !# !# |3Two kinds of current: the a/c and d/c. |3There is no charge. Mark the bill n/c. !# PRACTISŠ these !# !# Typ eac not i minut bot i minutes. !# !# |P2,04 Dear Bill: We will plan on your taking five or six boys to the game on Friday. Dear Pat: My car may be in the garage; so I will get Jack to bring those boys. !# !# Ge prett soo you'l b read fo tha wel pai positio !# a Doctor receptioniste !# !# ARKDATERHEX ARKDATERSUB ARKDATERASM ARK02PATFOR ARK02PATAZM Z1 COM $1CHECK28 COM 1HCHECK28 DOC C?PDTINS CHN S PDTINS DTA VWHATSFORCHK ZTTYPE3 BAS [V!#Exercise J. !# !# The [?],[Q],[Z] & [-] !# REVISION. !# Type these evenly & unhesitatingly. |2ask lad met sue jam dig rub hog sir boy |2fog the jet six ice cup gum now via sow |2Rex Ned Von Kay Alf Joe Con Jan Gay Pam !# The [?] and [,] keys. !# !# !# !# |3;;; ;/; ;/?; ;??; ;;; ;/; ;/?; ;??; ;?; |3;/; ;?; who? who? ;/; ;?; how? how? ;?; |3KKK K,K K,?K K? ?K KKK K,K K,?K K??K |3K,K K?K who? who? k,k k?K how? !# The [Z] key. !# !# Kee [F a hom us th [A finge durle tightly Kee !# elbow still. !# |3aaa aza zzz aaa aza zzz aaa aza zzz aza |3aza zip zip aza zig zig aza zag zag aza |3aza zoo zoo aza zed zed aza zee zee aza |3aza buzzers aza zestful aza dizzily aza !# !# !# Do a copy of this note in 1 minute. !# !# |p2,02 Dear Blaze: Would you and/or Buzz like to hear our new jazz records? Tonight? !# Your ELBOWS should be STILL! !# The [-] key. !# !# Us th [; finger Kee [J ke a hom bu [K [L wil !# roc forwar a yo reac fo [-]. |3;;; ;p; ;p-; ;-- ;;; ;p; ;p-; ;--; ;-; |3;p- ;-; blue-gray ;p- ;-; one-third ;-; |3;p- ;-; one-fifth ;p- ;-; part-time ;-; |3;p- ;-; left-hand ;p- ;p- ;-; one-sixth ;-; !# The [Q] key. !# !# Use the [A] finger. Keep [F] anchored. !# !# |3aaa aqa aqqa aqqa aaa aqa aqqa aqqa aqa |3aqa aqa quit quit aqa aqa quip quip aqa |3aqa aqa quiz quiz aqa aqa quay quay aqa |3aqa quick quick aqa quiet quietly asqa |p3,06 Dear Jacqueline, Do you know the equa- tion Mr. Zelt quoted? Is it a new one? Dear Zoe, My family is planning for an eight-day trip to Zion Park next month. Dear Buzz. Was the quiz--the one about the mazes--very hard? Were you amazed? !# CONGRATULATIONS I yo hav com thi fa withou acciden !# the yo wil b awarde th JUD COMPUTEҠ CERTIFICATŠ O !# EXELLENCE Thi entitle yo th firs jo tha come u a !# Doctor receptionist o perhap fo Dentist Goo Luc !# an Good-Bye........................................ ARKDATERHEX ARKDATERSUB ARKDATERASM ARK02PATFOR ARK02PATAZM Z1 COM $1CHECK28 COM 1HCHECK28 DOC C?PDTINS CHN S PDTINS DTA VWHATSFORCHK ZTTYPE3 BAS [V$ This is the release date of the disk. WHATSFORCHK ZTTYPE3 BAS [VTYPE3 BAS kTTHELP1 DAT qTTYPE DOC sKTYPE DOC TTYPE3 NOT TTHELP0 DAT TTHELP2 DAT TTHELP3 DAT TTHELP4 DAT TTHELP5 DAT TTKEYBD DAT TTYPEXA DAT CHECK28 .COM 65 13 18432 144 CHECK28 .DOC 17 E5 16128 126 PDTINS .CHN 54 CE 2304 18 PDTINS .DTA DC 01 3840 30 WHATSFOR.CHK D3 21 512 4 TTYPE3 .BAS 5A E5 22016 172 TTHELP1 .DAT E3 1E 1920 15 TTYPE .DOC C0 B4 19328 151 TTYPE3 .NOT 9C C3 768 6 TTHELP0 .DAT 9C 5B 1920 15 TTHELP2 .DAT BF 81 768 6 TTHELP3 .DAT 2C 4E 896 7 TTHELP4  Fog Library Disk FOG-CPM.199 Copyright (1988) by Fog International Computer Users Group to the extent not copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distribution for profit or personal gain is strictly forbidden. For information, contact FOG, P. O. Box 3474, Daly City, CA. 94015-0474. as part of the description of a file indicates that the program is distributed on a "try first, pay if you like it" basis. If you find the program(s) meet your need, please refer to the author's documentation for information on becoming a registered user. Only by registering and paying for the programs you like and use will the authors of such programs continue development. Often, more complete documentation, additional modules, and new releases are available only to registered users. A typing tutor, a directory comparison program, and (at long last) a program to create archive files. Filename  Description -06-21 .88 This is the release date of the disk. -CPM199 .DOC This is the description of the disk contents. ARK .COM D421 18K ver. 0.2 [ARKive utility 1 of 9] At long last, a program which allow CP/M users to create archive (.ARK) files. Included here are a couple patches to handle the dating problems and the Z1 compiler. This is not as fast nor as small (it requires 55-60K TPA) as the author would like but it does a fine job on systems with large TPA. -READ .ME A153 3K ver. 0.2 [ARKive utility 2 of 9] ARKDATER.DOC D3B1 2K ver. 0.2 [ARKive utility 3 of 9] ARKDATER.HEX 2CEE 1K ver. 0.2 [ARKive utility 4 of 9] ARKDATER.SUB D2C4 1K ver. 0.2 [ARKive utility 5 of 9] ARKDATER.ASM B927 1K ver. 0.2 [ARKive utility 6 of 9] ARK02PAT.FOR C196 1K ver. 0.2 [ARKive utility 7 of 9] ARK02PAT.AZM E826 6K ver. 0.2 [ARKive utility 8 of 9] Z1 .COM 4364 13K ver. 0.2 [ARKive utility 9 of 9] CHECK28 .COM 6513 18K ver. 2.8 [Check Directories 1 of 5] Compares the contents of two disk directories. You must have a CP/M or ZCPR computer with an 80-column display. CHECK28 .DOC 17E5 16K ver. 2.8 [Check Directories 2 of 5] PDTINS .CHN 54CE 3K ver. 2.8 [Check Directories 3 of 5] PDTINS .DTA DC01 4K ver. 2.8 [Check Directories 4 of 5] WHATSFOR.CHK D321 1K ver. 2.8 [Check Directories 5 of 5] TTYPE3 .BAS 5AE5 22K ver. 3.0 [Touch Typing Tutor 1 of 20] Requires MBasic (a compiled version ran too fast to be useful for most users) but this typing tutor should help all users learn to type faster on their keyboard. TTHELP1 .DAT E31E 2K ver. 3.0 [Touch Typing Tutor 2 of 20] TTYPE .DOC C0B4 19K ver. 3.0 [Touch Typing Tutor 3 of 20] TTYPE3 .NOT 9CC3 1K ver. 3.0 [Touch Typing Tutor 4 of 20] TTHELP0 .DAT 9C5B 2K ver. 3.0 [Touch Typing Tutor 5 of 20] TTHELP2 .DAT BF81 1K ver. 3.0 [Touch Typing Tutor 6 of 20] TTHELP3 .DAT 2C4E 1K ver. 3.0 [Touch Typing Tutor 7 of 20] TTHELP4 .DAT 8AC4 1K ver. 3.0 [Touch Typing Tutor 8 of 20] TTHELP5 .DAT 9869 1K ver. 3.0 [Touch Typing Tutor 9 of 20] TTKEYBD .DAT F8E4 1K ver. 3.0 [Touch Typing Tutor 10 of 20] TTYPEXA .DAT EF02 1K ver. 3.0 [Touch Typing Tutor 11 of 20] TTYPEXB .DAT 546C 2K ver. 3.0 [Touch Typing Tutor 12 of 20] TTYPEXC .DAT BE50 3K ver. 3.0 [Touch Typing Tutor 13 of 20] TTYPEXD .DAT AA2C 2K ver. 3.0 [Touch Typing Tutor 14 of 20] TTYPEXE .DAT ABAC 2K ver. 3.0 [Touch Typing Tutor 15 of 20] TTYPEXF .DAT 76C5 2K ver. 3.0 [Touch Typing Tutor 16 of 20] TTYPEXG .DAT 6781 2K ver. 3.0 [Touch Typing Tutor 17 of 20] TTYPEXH .DAT 293B 3K ver. 3.0 [Touch Typing Tutor 18 of 20] TTYPEXI .DAT 96CA 3K ver. 3.0 [Touch Typing Tutor 19 of 20] TTYPEXJ .DAT 2247 3K ver. 3.0 [Touch Typing Tutor 20 of 20] COM 4364 13K ver. 0.2 [ARK%&'