IMD 1.18: 22/01/1996 7:25:33 micro cornucopia kaypro user group disk 27 typing tutorial     27DISK DOC&CRC COM CRCKLISTCRC CRT DEFEATYPE BASEATYPE BAS2 !"#$%EATYPE COM&'()*+,-./012345EATYPE COM86789:;<ENVELOPEBAS=>?@ENVELOPECOM2ABCDEFGENVELOPEDOCHFOGINDEXCOMRIJKLMNOPQRSFOGINDEXDOC TUTDRILL BAS(VWXYZTDRILL COMo[\]^_`abcdefghTTHELP0 DATi Kaypro User Disk #27 Typing Tutorial Micro Cornucopia PO Box 223 Bend OR 97709 503-382-8048 =========================================================================== Typing Tutorial Files This series of programs will teach a person to touch type. It can also be used to improve speed and accuracy. The programs were originally submitted by Software Tools of Australia. Configuration sensitive parameters were separated into a file by ElTTHELP1 DAT jkTTHELP2 DATlTTHELP3 DATmTTHELP4 DATnTTHELP5 DAToTTKEYBD DATpTTYPE BASqrstuvwxyz{|}~TTYPE BASTTYPE DOCTTYPE DOCTTYPEXA DATTTYPEXB DATTTYPEXC DATTTYPEXD DATTTYPEXE DAT TTYPEXF DATliam Associates. This version was set up for a Kaypro 2, 4, or 10 format screen by Barry Cole for the West Los Angeles Kaypro Users Group(WLAKUG). I recommend using EATYPE.COM. Other files are included for reference or customizing. The following is the documentation that I received with the disk. --Barry A. Cole ============================================================================ TTYPE.DOC Documentation file for EATYPE typing tutorial. Read this file first! =================TTYPEXG DATTTYPEXH DATTTYPEXI DATTTYPEXJ DAT  ========================================================== EATYPE.BAS EATYPE.COM *.DAT EATYPE.BAS and EATYPE.COM are modified versions of the TTYPE program. They use the same data files and instructions but are much easier to list and install. *.DAT are the data files used by EATYPE. =========================================================================== TTYPE.BAS TTYPE.BAS may drive your printer nuts because of the carriage returns without line feeds. Most of these have bOND OFFSET ............................................ =========================================================================== ENVELOPE.* This program will allow you to use your newly acquired tying skills to type addresses on envelopes. Envelopes are inserted in your printer one at a time. The program is written for the Epson but has been run on other printers without problems. Source in Sbasic is included for those who like to tinker; however, all you need to do is type ENVELOPE *.#".ɯ22)! ",". <  NO FILECRC FILE$!   >. @ Checking wieen removed in EATYPE. =========================================================================== TDRILL.BAS TDRILL.COM More typing drills. =========================================================================== CRT.DEF TTYPE required that the program be modified to match your CRT and that you use the computer's STATUS and INPUT port values. The use of STATUS and INPUT ports has been eliminated and the CRT controls are read from a data file CRT.DEF. You will probably havern> to use the program. Happy "Hunting and Pecking!" =========================================================================== FOGINDEX.DOC FOGINDEX.COM This program calculates the Gunning-Mueller Clear Writing Institute Fog Index of a ASCII file based on sentence and word length. It's useful for determining whether you are writing over or under your audience (now that you're typing novels and magazine articles). Submitted by Mike Perry. ==============================================T ON 2,27,40, WRITE PROTECT OFF 2,27,61, CURSOR POSITION LEAD IN CHARACTERS 1,1, ROW FIRST - USE 1,2 FOR COLUMN FIRST 1,31, FIRST OFFSET 1,31, SECOND OFFSET .............sample 2...................... Teleray Model 10 / VT52 2,27,106, CLEAR SCREEN 2,27,75, CLEAR TO END OF LINE 2,27,87, CHARACTER DELETE 0, NORMAL VIDEO 0, REVERSE VIDEO 0, WRITE PROTECT ON 0, WRITE PROTECT OFF 2,27,89, CURSOR POSITION LEAD IN CHARACTERS 1,1, ROW FIRST - USE 1,2 FOR COLUMN FIRST 1,31, FIRST OFFSET 1,31, SECth file - ! ~T #M M 2 2 2 2 ! >2 3o: : @ ***No CRC Files found***$> ʉ ʉw#: <2 P6: .6@ Can not parse string ! ~ʽT #ñM ! > 6 #6^#6! ~T #! 4M #x] #e w~ T #>2 @ - s M@ File not found ! 4 >2 o: G: „: G: „@ *Match* 2 ! 4@ <-- is, was --> : ) > T : ) M 2 ! 4<2 ~# @ Not a space between CRC values<2 G-CATALOG??? to modify the CRT.DEF file unless you are using a VT52 terminal. If you are using an ADM-31 then do some renaming. MODIFYING CRT.DEF: See sample CRT.DEF's below. All numbers are decimal numbers. Leave in a title line - program needs it - Change OK. Leave in a line description - program needs them - Change OK. Do not delete or add lines - Line count is set. Change the number count to match the number of CRT Control Sequences used. Note the difference in the Normal Video etc in both samp============================= Type CRC and hit to verify the files on this disk. ==========================================================================   @ ++ Now searching for "-CATALOG" file++ !  ) .) ! ”>.”#””͡”››tK››͸›* =: =͔="  ʳ ª~#.  ¿~  #~  .+~#0:0~#!A.O.Gy~#0M0 K MMɷ:m2 FSÄCRCKLIST$$$››tK›, › **}|!"*{z*~]*"Ü  DISK FULL: CRCFILE$!"*~XJ .DAT CRC = 97 01 --> FILE: CRC .COM CRC = B2 07 --> FILE: TTKEYBD .DAT CRC = 7D AA --> FILE: TDRILL .BAS CRC = 04 42 --> FILE: TTYPE .BAS CRC = 41 45 --> FILE: TTYPE .DOC CRC = 73 6D --> FILE: EATYPE .COM CRC = 31 44 --> FILE: TDRILL .COM CRC = 3B 25 --> FILE: TTHELP2 .DAT CRC = AF A7 --> FILE: TTHELP3 .DAT CRC = 01 5E --> FILE: TTHELP4 .DAT CRC = 77 68 --> FILE: TTHELP5 .DAT CRC = 89 1B --> FILE: TTHELP0 .DAT CRC = 0E 2B --> FILE: FOGINDEX.DOC CRC = 75  match - : ̓ : J M @ Quantity of lines failed parse test - : ̓ : ~ M @ Quantity of file(s) not found - : ̓ * d͔  ͔ 0T  Җ Wyʩ 0T 0ztiilKaypro II or IV computer 1,26, CLEAR SCREEN 1,24, CLEAR TO END OF LINE 0, CHARACTER DELETE 0, NORMAL VIDEO 0, REVERSE VIDEO 0, WRITE PROTECT ON 0, WRITE PROTECT OFF 2,27,61, CURSOR POSITION LEAD IN CHARACTERS 1,1, ROW FIRST - USE 1,2 FOR COLUMN FIRST 1,31, FIRST OFFSET 1,31, SECOND OFFSET 1,400, DELAY USE 500 IF COMPILED PROGRAM *#"ɯ2i2}! "!"]]2 s : ~# ++FILE NOT FOUND++$: F*}’">͇†]<  CANNOT CLOSE CRCFILE$CRCKLISTCRCSK FULL: CRCFILE$  w# !]͐ DONE$!e S!]Q !eZ @ --> FILE: XXXXXXXX.XXX CRC = oS) \<‘@ ++OPEN FAILED++ !" !" * | ʹ) \!~2 #" Ý: ) > T : ) @ ++FILE READ EF0 --> FILE: ENVELOPE.COM CRC = 6E 8C --> FILE: ENVELOPE.BAS CRC = D4 CC --> FILE: ENVELOPE.DOC CRC = F1 7F --> FILE: 27DISK .DOC CRC = 85 64 --> FILE: CRT .DEF CRC = 55 BD --> FILE: EATYPE .BAS CRC = C8 4A --> FILE: FOGINDEX.COM CRC = 3F B6 --> FILE: TTYPEXA .DAT CRC = DE 58 --> FILE: TTHELP1 .DAT CRC = D0 90 --> FILE: TTYPEXB .DAT CRC = 17 A9 --> FILE: TTYPEXC .DAT CRC = 99 9C --> FILE: TTYPEXD .DAT CRC = D3 3A --> FILE: TTYPEXE .DAT CRC = 45 B2 --> FILE: TTYPEXF .DAT CRC = CA 6E --> FILE: TTYPEXG .DAT CRC = 64 F4 --> FILE: TTYPEXH .DAT CRC = C6 C8 --> FILE: TTYPEXI .DAT CRC = A3 F5 --> FILE: TTYPERROR++ <* |): o% |g}o" 2  ; 0T ~T #~A > T > _h : F{͇2h2|: ʲ !\   :\2 ! \  \ ! \  \! \  \<7=Ɓo&   ]  2h2|2   ~$#~# x  : F} *}= ">͇1 ] on string. 3954' Erase line before End of Exercise printed. 3955' Replace NEWLINE%SET2% = ASC(CHR.STRING$) 224GOSUB 300:DELAY%= A% 226 'DELAY%= Time delay factor (See 34100) 230' 240'Definition of CURSOR LOAD Function. 250' i.e. Pushing the Cursor Around On screen. 260IF ROW.COLUMN% = 2 GOTO 278 274DEF FNCSRLD$(ROW%,COLUMN%)=CLEAD.IN$+CHR$(ROW%+OFSET1%)+CHR$(COLUMN%+OFSET2%) 276GOTO 280 278DEF FNP$(COLUMN%,ROW%)=CLEAD.IN$+CHR$(COLUMN%+OFSET1%)+CHR$(ROW%+OFSET2%) 280CLOSE #1:GOTO 4160 290' 300CHR.STRING$="" 310INPUT #1,NO.CHARS% 320FOR K%=1 TO NO.CHARS% 330INPUT #1,A%:IF A%NGTH% = 80 4750 COMMENTSTACK% = 0 4800 NUMOFREPEATS%= 0 4850 PARAGRAPH% = 0 4900ARRAYROWS% = 1 4950ARRAYCOLUMNS%= 2 5100' 5150WIDTH 255'Remove 's from long lines 5160ON ERROR GOTO 40000'Error handling department. 5200' SCREEN ADDRESSES 5250' 5300LHS% = 1'Set the left hand side of the 5304' screen 5310RHS%= 80 5350TOP% = 1'Set the top of the screen 5400ROWOFFSET% = TOP%+15 'Keyboard display 5450COLUMNOFFSET% = LHS%+10 'Keyboard display 5500E*************************************************************** 15' 20'######################## 21'###### SECTION 1 ###### 22'######################## 23' 48'>>>>>>>>>>>>>>>>>>>>> ADM-31 ASCII CONTROL CODES <<<<<<<<<<<<<<<<<<<<< 49' 50'*************************************************************** 51'FUNCTION NAMESTRING NAMEASCII CODE 52'*************************************************************** 53' 72'Return 73RET$=CHR$ (13) 74' 75'Escape 76ESC$=CHR$ (27) 77' 85'-------- SET UP  variable in PARAGRAPH check, 3956'with LINESINPARA% RB 3957' 04/07/82Moved "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 4000'********************************************************************** 4010' 4012'######################## 4015'###### SECTION 3 ###### 4017'######################## 4020' 4050'>>>>>>>>>>>>>>>>>>>>>>> INITIALISING BLOCK <<<<<<<<<<<<<<<<<<<<<<<<<<< 4100' >127 GOTO 350 340CHR.STRING$=CHR.STRING$+CHR$(A%) 350NEXT 360LINE INPUT #1,Z$'Get & throw away line desc. 370RETURN 390' 900'********************************************************************** 910' 915'######################## 920'###### SECTION 2 ###### 925'######################## 930' 1000 '>>>>>>>>>>>>>>>>>>>>>>>>>> ALTERATIONS <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1010 ' 1020 'Date.Description. 1030' 3800' 10/11/82Changed to line numbers on each line so WR 3801' XERCISEROW% = ROWOFFSET%+5'Exercise line 5550EXERCISECOLUMN% = LHS% 'Exercise line 5600ECHOROW% = EXERCISEROW%+1 'Typing Echo 5650ECHOCOLUMN% = EXERCISECOLUMN% 'Typing Echo 5700COMMENTROW% = ROWOFFSET%-7 'Comment area 5710COMMENTCOLUMN%= EXERCISECOLUMN%'Comment area 5850' 5900'********************************************************************** 5950' 5951'######################## 5952'###### SECTION 4 ###### 5953'######################## 5954' 5955'>>>>>>>>>>>>>>>>>>>> CTR ESCAPE CODE SEQUENCES --------- 86' 100OPEN "I",1,"CRT.DEF" 110LINE INPUT #1,Z$'Get & throw away first record 120GOSUB 300:CLRSCR$= CHR.STRING$ 130GOSUB 300:LINERA$= CHR.STRING$ 140GOSUB 300:CHRDEL$ = CHR.STRING$ 150GOSUB 300:STDVID$ = CHR.STRING$ 160GOSUB 300:REVSTD$ = CHR.STRING$ 170GOSUB 300:WRTPRTON$ = CHR.STRING$ 180GOSUB 300:WRTPRTOFF$ = CHR.STRING$ 190GOSUB 300:CLEAD.IN$ = CHR.STRING$ 200GOSUB 300:ROW.COLUMN%= ASC(CHR.STRING$) 210GOSUB 300:OFSET1% = ASC(CHR.STRING$) 220GOSUB 300:OF 4150' 4160DIM PARAGRAPHIN$(20),ADDRESS%(140,2) 4170DIM DISPLAYCHAR%(127),COMMENT$(5) 4180' 4200'The following addresses and values are system dependant. 4250' 4300TRU%=-1 4350FALS%=0 4400' 4450ESCTYPE% = 127'ASCII escape character from 4460' typing exercise mode. 4500ESCCHR$ = "RUB"'String to print name of above 4510' character. 4660FILENUM1% = 1'Filenumber for exercise files. 4670FILENUM2%= 2'Filenumber for help files. 4680FILENUM3%= 3'Filenumber for keyboard data. 4700EXLINELE  START OF ACTIVE PROGRAM CODE <<<<<<<<<<<<<<<<<<<< 6050'###### 4a ###### 6100' 6150'First Screenful of instructions 6200' 6250PRINTCLRSCR$ 6260IF CHARACTER$ = "N" GOTO 6760 6300HELPNUM$= "0": GOSUB 23300 6550GOSUB 21400'[1]:CAPITAL LETTER 6600IF CHARACTER$= "N"GOTO 65529 6610IF CHARACTER$ = "?" THEN HELPNUM$ = "1": GOSUB 23300: GOTO 6550 6650' 6700'---------------------------------------------------------------------- 6750'###### 4b ###### 6752' 6760GOSUB39500'[9]:PRINT HELP MENU 6800IF>>>>>>>>>>> SET UP & CHECK EXERCISE FILE <<<<<<<<<<<<<<<<<<<< 8465' 8500PRINTCLRSCR$ 8550' 8600GOSUB 29500'[5]:PRINT KEYBOARD 10950' 11300'set up input file. 11400OPEN "I",#FILENUM1%,FILE$ 11500' 11550'Remove old line 11600ECHOCOLUMN% = LHS% 11650LINEFLAG% = 0 11700 IF ROW.COLUMN% = 2 GOTO 11740 11710PRINTFNCSRLD$ (EXERCISEROW%,EXERCISECOLUMN%); LINERA$; 11720PRINTFNP$ (ECHOROW%,ECHOCOLUMN%);LINERA$; 11730GOTO 11750 11740PRINTFNCSRLD$ (EXERCISECOLUMN%,EXE = A$ 7300 IF CHARACTER$ < "A" OR CHARACTER$ > "J" GOTO 7150 7400IF ROW.COLUMN% = 2 GOTO 7440 7410PRINTFNCSRLD$ (COMMENTROW%,COMMENTCOLUMN%); LINERA$; 7420GOTO 8050 7440PRINTFNP$ (COMMENTCOLUMN%,COMMENTROW%); LINERA$; 8050FILE$ = "TTYPEX"+CHARACTER$+".DAT" 8051' 8052'---------------------------------------------------------------------- 8053'###### 4d ###### 8054' 8060GOSUB39500'[9]:PRINT HELP MENU 8100IF ROW.COLUMN% = 2 GOTO 8104 8101PRINTFNCSRLD$ (13,1); LINERA$; FNCSRLD$ (ROWOFFSET%,10ine. 12900IF LEFT$ (ALINE$,1) <> "|" GOTO 13950 12950CHARACTER$ = MID$ (ALINE$,2,1) 13000GOSUB 21400'[1]:CAPITAL LETTER 13050IF CHARACTER$ = "P" GOTO 13400 13100NUMOFREPEATS%= VAL (CHARACTER$)-1 13150EXLINELENGTH% = EXLINELENGTH%-2 13200ALINE$ = RIGHT$ (ALINE$,EXLINELENGTH%) 13250' 13300GOTO 13950 13350' 13400'Paragraph Read In. 13450NUMOFREPEATS%= VAL (MID$ (ALINE$,3,1)) 13500LINESINPARA% = VAL (MID$ (ALINE$,5,2)) 13550PARAGRAPH% = 1 13600NUMOFTEXTLINES%= 1 13650FOR ILOOP% = 1 TO LIN ROW.COLUMN% = 2 GOTO 6808 6804PRINTFNCSRLD$ (ROWOFFSET%,10);LINERA$; "Error break ?"; 6806GOTO 6810 6808PRINTFNP$ (10,ROWOFFSET%);LINERA$; "Error break ?"; 6810GOSUB 50000'Get key 6820CHARACTER$ = A$ 6900GOSUB 21400'[1]:CAPITAL LETTER 6950IF CHARACTER$="Y" THEN ERRORFLAG%=1:GOTO 7000 6960IF CHARACTER$="?" THEN HELPNUM$="2":GOSUB 23300:GOTO 6900 6970IF CHARACTER$<> "Y" THEN ERRORFLAG%=0 7000' 7050'---------------------------------------------------------------------- 7100'###### 4c ###### 7105'RCISEROW%); LINERA$; 11744PRINTFNP$ (ECHOCOLUMN%,ECHOROW%);LINERA$; 11750TYPEDIN$= "" 11800'Check that it is not a paragraph 11850IF PARAGRAPH%= 0GOTO 12300 11900ALINE$ = PARAGRAPHIN$(NUMOFTEXTLINES%) 11910NUMOFTEXTLINES% = NUMOFTEXTLINES% +1 11920IF NUMOFTEXTLINES% <> LINESINPARA%+1 GOTO 12200 11930NUMOFREPEATS% = NUMOFREPEATS%-1 11940NUMOFTEXTLINES% = 1 11950IF NUMOFREPEATS%= 0 THEN PARAGRAPH% = 0 12150' 12200GOTO 12700 12250' 12300IF NUMOFREPEATS%= 0GOTO 12550 12350NUMOFREPEATS%= NUMOFREP); 8103GOTO 8105 8104PRINTFNP$ (1,13); LINERA$; FNP$ (10,ROWOFFSET%); 8105PRINTLINERA$; "Echo ?"; 8110GOSUB 50000'Get Key 8200CHARACTER$ = A$ 8250ECHOFLAG% = 0 8300IF CHARACTER$= "N" THEN ECHOFLAG% = 1:GOTO 8500 8310IF CHARACTER$="?" THEN HELPNUM$ = "3":GOSUB 23300:GOTO 8200 8350' 8400'********************************************************************** 8450' 8451'######################## 8452' ###### SECTION 5 ###### 8453'######################## 8454' 8460'>>>>>>>>ESINPARA% 13660'PARAGRAPHIN$ contains up to 20 lines of input for repeating 13670'whole paragraphs. 13700LINE INPUT# FILENUM1%,PARAGRAPHIN$(ILOOP%) 13750NEXT ILOOP% 13800' 13850GOTO 11550 13900' 13950'CHECK FOR COMMENT 14000IF LEFT$ (ALINE$,2) = "!#" THEN GOSUB 33020:GOTO 11550 14050CHARCOUNT% = EXLINELENGTH% 14100IF ROW.COLUMN% = 2 GOTO 14140 14110PRINT FNCSRLD$ (EXERCISEROW%,EXERCISECOLUMN%) 14120PRINT FNP$ (EXERCISEROW%,EXERCISECOLUMN%); 14130GOTO 14160 14140PRINT FNCSRLD$ (EXERCISECOLUM 7110GOSUB39500'[9]:PRINT HELP MENU 7115IF ROW.COLUMN% = 2 GOTO 7119 7116PRINTFNCSRLD$ (COMMENTROW%,COMMENTCOLUMN%); LINERA$; 7118GOTO 7120 7119PRINTFNP$ (COMMENTCOLUMN%,COMMENTROW%); LINERA$; 7120PRINT "Any LETTER is a valid exercise but presently "; 7130PRINT "(28/06/82) only A-J exist." 7150IF ROR.COLMN% = 2 GOTO 7180 7160PRINTFNCSRLD$ (ROWOFFSET%,10); LINERA$; "Which Exercise ?"; 7170GOTO 7200 7180PRINTFNP$ (10,ROWOFFSET%); LINERA$; "Which Exercise ?"; 7200GOSUB 50000'Get Key 7210CHARACTER$EATS% -1: GOTO 14050 12500' 12550IF NOT EOF (FILENUM1%) GOTO 12650 12560IF ROW.COLNM% = 2 GOTO 12566 12564PRINT FNCSRLD$(EXERCISEROW%,EXERCISECOLUMN%+15);LINERA$; 12565GOTO 12570 12566PRINT FNP$(EXERCISECOLUMN%,EXERCISEROW%+15);LINERA$; 12570PRINT"END of EXERCISE, Please WAIT for MENU."; 12580GOSUB 34100:GOTO 17200 12600' 12650LINE INPUT# FILENUM1%,ALINE$ 12700ALINE$ = ALINE$+CHR$ (13) 12750IF PARAGRAPH% = 0THENNEWLINE% = NEWLINE%+1 12800EXLINELENGTH% = LEN (ALINE$) 12850'CHECK for repeated l  N%,EXERCISEROW%) 14150PRINT FNP$ (EXERCISECOLUMN%,EXERCISEROW%); 14160PRINT 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' 14400FOR ILOOP% = 1T FNCSRLD$ (ECHOROW%,ECHOCOLUMN%);TYPEDIN$ 16470GOTO 16550 16480PRINT FNP$ (ECHOCOLUMN%,ECHOROW%);TYPEDIN$ 16500'Program waits for change of input status. 16550GOSUB 50010 16650KEYBDCHAR%= A% 16700IF KEYBDCHAR%= 13THEN11550 16750IF KEYBDCHAR%= ESCTYPE%THEN17200 16800' 16850GOTO 16550 16900' 16950NEXT ILOOP% 17000' 17050'End of keyboard scan 17100' 17150GOTO 11550 17151' 17160'********************************************************************** 17200' 17201'########################THEN17200 15150IF KEYBDCHAR%= 13THENLINEFLAG% = 1:GOTO 16250 15200' 15300' 15310IF ECHOFLAG% = 1THEN 15350 15320IF ROW.COLUMN% = 2 GOTO 15326 15322 PRINT FNCSRLD$ (ECHOROW%,ECHOCOLUMN%);CHR$ (KEYBDCHAR%); 15324GOTO 15330 15326 PRINT FNP$ (ECHOCOLUMN%,ECHOROW%);CHR$ (KEYBDCHAR%); 15330ECHOCOLUMN% = ECHOCOLUMN%+1:GOTO 15360 15350IF ECHOFLAG% = 1 THEN TYPEDIN$ = TYPEDIN$+CHR$ (KEYBDCHAR%) 15360IF KEYBDCHAR%= ASCIINUMBER%THEN16250ELSE15700 15450'Change the typing Echo definition in the next lineNE%; 18130GOSUB 34100:GOTO 17250 18145' 18150IF CHARACTER$ = "W"THEN18160ELSE18250 18160GOSUB 21900'[2]:ERROR COUNT 18162IF ROW.COLUMN% = 2 GOTO 18165 18163PRINT FNCSRLD$(COMMENTROW%,COMMENTCOLUMN%+10); 18164GOTO 18166 18165PRINT FNP$(COMMENTCOLUMN%+10%,COMMENTROW%); 18166PRINT LINERA$;"Reset ERROR count (Y/N) ?"; 18168GOSUB 50010:CHARACTER$ = A$ 18170GOSUB 21400'[1]:CAPITAL LETTER 18190IF CHARACTER$ <> "Y" GOTO 18250 18192NUMOFWORDS = 0:ERRORCOUNT% = 0:GOTO 17250 18196' 18197' 18198' 1825 TO EXLINELENGTH% 14450IF ILOOP% = EXLINELENGTH% THEN LINEFLAG% = 1 14500CHARACTER$ = MID$ (ALINE$,ILOOP%,1) 14550ASCIINUMBER% = ASC (CHARACTER$) 14600'Change ROW% and COLUMN% for different 14610'Direct Cursor Addressing. 14650ROW% = ADDRESS%(ASCIINUMBER%,ARRAYROWS%) 14700 COLUMN% = ADDRESS%(ASCIINUMBER%,ARRAYCOLUMNS%) 14750IF ROW.COLUMN% = 2 GOTO 14780 14760PRINTFNCSRLD$ (ROW%,COLUMN%-1);REVSTD$;CHARACTER$;STDVID$; 14770PRINT FNP$ (ECHOROW%,ECHOCOLUMN%); 14774GOTO 14850 14780PRINTFNCSR 17202' ###### SECTION 7 ###### 17203' ######################## 17204' 17210'>>>>>>>>>>>>>>>>>>> SECTION PROVIDES POSSIBILITIES <<<<<<<<<<<<<<<<<<< 17220' TO ESCAPE OR ALTER PROGRAM FLOW. 17230' 17250HELPNUM$ = "4":GOSUB 23300:GOTO 17450 17450CHARACTER$ = CHARACTER$+"e" 17500 GOSUB 21400'[1]:CAPITAL LETTER 17510' 17550IF CHARACTER$ = "N"THENCLOSE FILENUM1%:GOTO 4300 17560' 17760' 17800IF CHARACTER$ <> "R"THEN17900 17810NUMOFREPEATS% for 15460'different Dir Cus Adr. 15650IF KEYBDCHAR%= ASCIINUMBER%THEN16250 15700'Error 15750ERRORCOUNT% = ERRORCOUNT%+1 15800 CHARCOUNT% = CHARCOUNT%+1 15850IF ERRORFLAG% = 0THEN16250 15900ECHOCOLUMN% = ECHOCOLUMN%-1 15950PRINT CHR$ (7) 16100IF ECHOCOLUMN% < 0THENECHOCOLUMN% = 0 16150' 16200GOTO 14750 16250' 16300IF LINEFLAG% = 0THEN16950 16350IF ECHOFLAG% = 0THEN11550 16400'Display line that was typed in but not echoed 16410'previously 16450IF ROW.COLUMN% = 2 GOTO 16480 16460PRIN0IF CHARACTER$ = "Q"THENSYSTEM 18300' 18320IF CHARACTER$= "E"THENGOTO 65529 18350GOTO 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 leLD$ (COLUMN%-1,ROW%);REVSTD$;CHARACTER$;STDVID$; 14790PRINT FNP$ (ECHOCOLUMN%,ECHOROW%); 14800'Program waits for change of input status. 14850GOSUB 50010'Get Key 14900NUMOFWORDS = NUMOFWORDS+.2 14950'Program reads data from dataport. 15000KEYBDCHAR%= A% 15050IF ROW.COLUMN% = 2 GOTO 15058 15054PRINT FNCSRLD$ (ROW%,COLUMN%-1);WRTPRTON$;STDVID$; 15056GOTO 15060 15058PRINT FNP$ (ROW%,COLUMN%-1);WRTPRTON$;STDVID$; 15060PRINTCHR$ (DISPLAYCHAR%(ASCIINUMBER%));WRTPRTOFF$ 15100IF KEYBDCHAR%= ESCTYPE% = NUMOFREPEATS% +1:GOSUB 29500:GOTO 11550 17850' 17900IF CHARACTER$ = CHR$(13)THENGOSUB 29500:GOTO 11550 17930' 17990' 18000IF CHARACTER$ = "M"THENHELPNUM$ = "5":GOSUB 23300:GOTO 17450 18040' 18050IF CHARACTER$ = "S"THENGOSUB 32110:GOSUB 29500:GOTO 11550 18090' 18100IF CHARACTER$ <> "L" GOTO 18150 18110IF ROW.COLUMN% = 2 GOTO 18118 18112PRINT FNCSRLD$(COMMENTROW%,COMMENTCOLUMN%+10); 18114GOTO 18120 18118PRINT FNP$(COMMENTCOLUMN%+10,COMMENTROW%); 18120PRINT" Exercise line Number is; "; NEWLI  tter of a string as a CAPITAL. 21450' 21500CHARACTER$ = LEFT$ (CHARACTER$,1) 21550IF CHARACTER$ > "`" AND CHARACTER$ < "{"THEN21650 21600RETURN 21650CHARACTER$ = CHR$ (ASC (CHARACTER$)-32) 21700RETURN 21750' 21800'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 21850' 21900'Subroutine [2]: Prints ERROR COUNT message and total. 21950' 22000PRINT CLRSCR$ 22050IF ROW.COLUMN% = 2 GOTO 22056 22052PRINT FNCSRLD$(COMMENTROW%,COMMENTCOLUMN%+10); 22054GOTO 22060 22056PRINT FNP$% = ASC (CHARACTER$) 30450'Save character address 30500ADDRESS%(ASCIINUMBER%,ARRAYROWS%) = ROW% 30550ADDRESS%(ASCIINUMBER%,ARRAYCOLUMNS%) = COLUMN% 30600IF ROW.COLUMN% = 2 GOTO 30640 30610PRINT FNCSRLD$ (ROW%,COLUMN%);CHARACTER$; 30620GOTO 30700 30640PRINT FNP$ (COLUMN%,ROW%);CHARACTER$; 30650'Keep record of character corresponding to this 30660'address 30700ADDCHAR$ = ADDCHAR$+CHARACTER$ 30750DISPLAYCHAR%(ASCIINUMBER%) = ASCIINUMBER% 30800 COLUMN% = COLUMN%+4 30850NEXT ILOOP% 30900COLUM000:GOTO 23340 23390GOSUB 50000:CHARACTER$ = A$:CLOSE # FILENUM2% 23394PRINT CLRSCR$:RETURN 23400' 29450'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 29460' 29500'Subroutine [5]: Set up Addresses & Keyboard locations 29550' and PRINT KEYBOARD. 29600' 29604IF ROW.COLUMN% = 2 GOTO 29607 29605PRINTFNCSRLD$ (1,25);LINERA$;WRTPRTON$; 29606GOTO 29608 29607PRINTFNP$ (25,1);LINERA$;WRTPRTON$; 29608PRINT"Hit "+ESCCHR$+" key for MENU"; 29609' 29610OPEN 2134 32133PRINT FNP$(COMMENTCOLUMN%+10,COMMENTROW%); 32134PRINT"Number of lines to SKIP ?"; 32135GOSUB 50010'Get Key 32137NUMOFLINES% = VAL(A$) 32140FOR ILOOP% = 1 TO NUMOFLINES% 32150IF EOF (FILENUM1%)THEN12550 32160LINE INPUT# FILENUM1%,INPCHAR$ 32170NEXT ILOOP% 32180NUMOFREPEATS%= 0 32190NEWLINE% = NEWLINE%+NUMOFLINES% 32200' 32210IF ROW.COLUMN% = 2 GOTO 32216 32212PRINTFNCSRLD$ (COMMENTROW%,COMMENTCOLUMN%+10);LINERA$; 32214GOTO 32220 32216PRINTFNP$ (COMMENTCOLUMN%+10,COMMENTROW%);LINE(COMMENTCOLUMN%+10,COMMENTROW%); 22060PRINTERRORCOUNT%;" ERRORS in";NUMOFWORDS;" Words "; 22070GOSUB 34100 22100IF ERRORCOUNT% = 0THENRETURN 22150PRINT " I.E.";NUMOFWORDS/ERRORCOUNT%;" Words per error": GOSUB 34100 22200RETURN 22250' 22300'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 22350' 22400'Subroutine [3]: Changes the INSTRUCTION line ADDRESS. 22450' 22460'+++++ THIS SUBROUTINE NOT USED IN THIS VERSION +++++ 22470' 22500'IF INSTCOLUMN% < 70THENRETURN 22550'INSTN% = COLUMN%-4*NUMOFKEYS% 30950FOR ILOOP% = 1 TO NUMOFKEYS% 31000INPUT # FILENUM3%, CHARACTER$ 31050'SAVE shift character address (BASIC can't get 31060'a " from data) 31100IF ILOOP% <> 2 GOTO 31150 31110IF JLOOP% = 1THENCHARACTER$ = CHR$ (34) 31150ASCIINUMBER% = ASC (CHARACTER$) 31200ADDRESS%(ASCIINUMBER%,ARRAYROWS%) = ROW% 31250ADDRESS%(ASCIINUMBER%,ARRAYCOLUMNS%) = COLUMN% 31300DISPLAYCHAR%(ASCIINUMBER%) =ASC (MID$ (ADDCHAR$,ILOOP%,1)) 31350'DISPLAYCHAR% (ASCIINUMBER%) now contains the 3136"I",# FILENUM3%,"TTKEYBD.DAT" 29620' 29650ROW% = ROWOFFSET% 29700COLUMN% = COLUMNOFFSET% 29750FOR ILOOP%= 1 TO 140 29800ADDRESS%(ILOOP%, 1) = 1 29850ADDRESS%(ILOOP%, 2) = 1 29900NEXT ILOOP% 29950 'ADDRESS% contains the character addresses. DISPLAYCHAR% 30000' contains the displayed character corresponding to that address. 30050' 30100FOR JLOOP% = 1 TO 5 30150INPUT # FILENUM3%, NUMOFKEYS% 30250ADDCHAR$ = "" 30300FOR ILOOP% = 1 TO NUMOFKEYS% 30350INPUT # FILENUM3%, CHARACTER$ 30400ASCIINUMBERRA$; 32220RETURN 32230' 33000'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 33002' 33020'Subroutine [7]: COMMENT PRINT 33025' 33070IF EOF(FILENUM1%)THENRETURN 33080' 33082COMMENT$(0)= MID$(ALINE$,3) 33084FOR ILOOP%= 1 TO 4 33090LINE INPUT #FILENUM1%,ALINE$ 33095COMMENT$(ILOOP%)= MID$(ALINE$,3) 33100NEXT ILOOP% 33101' 33105FOR ILOOP%= 0 TO 4 33108IF ROW.COLUMN% = 2 GOTO 33116 33110PRINT FNCSRLD$(COMMENTROW%+ILOOP%,COMMENTCOLUMN%); 33112GOTO 33118 33116PRINT FNP$(COCOLUMN% = LHS% 22600'INSTROW% = INSTROW%+1 22650'PRINT 22700'IF INSTROW% >= TOP%+6THENINSTROW% = TOP% 22750'RETURN 22800' 22850'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 23270' 23300'Subroutine [4]: Access and PRINT HELP Files. 23310' 23320PRINT CLRSCR$ 23330OPEN "I", # FILENUM2%, "TTHELP"+HELPNUM$+".DAT" 23340IF EOF (FILENUM2%) GOTO 23390 23350LINE INPUT # FILENUM2%, LINES$ 23360IF LEFT$ (LINES$,1) = "#" GOTO 23380 23370PRINT LINES$:GOTO 23340 23380GOSUB 500'normally displayed char. at the pos'n of l$ 31400COLUMN% = COLUMN%+4 31450NEXT ILOOP% 31500COLUMN% = COLUMN%-4*NUMOFKEYS%+2 31550ROW% = ROW%+1 31600NEXT JLOOP% 31610PRINT WRTPRTOFF$ 31620CLOSE FILENUM3% 31650'End of keyboard setup 31700' 31750RETURN 31760' 32000'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 32100' 32110'Subroutine [6]: SKIP Exercise LINES. 32120' 32130IF ROW.COLUMN% = 2 GOTO 32133 32131PRINT FNCSRLD$(COMMENTROW%,COMMENTCOLUMN%+10); 32132GOTO 3  MMENTCOLUMN%,COMMENTROW%+ILOOP%); 33118PRINT LINERA$;COMMENT$(ILOOP%) 33120NEXT ILOOP% 33130' 33180RETURN 33190' 34000'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 34050' 34100'Subroutine [8]: TIME DELAY. 34150' 34200FOR TIMEOUT% = 1 TO DELAY% 34210FOR MORE% = DELAY% TO 1 STEP -1 34220WASTE% = WASTE%+1 34230NEXT MORE% 34300NEXT TIMEOUT% 34350RETURN 39000' 39010'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 39020' 39500'Subroutine [9]: PRI<<<<<<<<<<<<<<<<<<<<<<<<<<< 40020' 40030DRIVE$="B:" 40100IF ERR = 53 AND ERL = 11400 THEN CLOSE #FILENUM1%: OPEN "I",#FILENUM1%,DRIVE$+FILE$: RESUME 11600 40400' 40410IF ERR = 53 AND ERL = 29610 THEN CLOSE #FILENUM3%: OPEN "I",#FILENUM3%,DRIVE$+"TTKEYBD.DAT": RESUME 29650 40500' 40510IF ERR= 53 AND ERL = 23330 THEN CLOSE #FILENUM2%: OPEN "I",#FILENUM2%,DRIVE$+"TTHELP"+HELPNUM$+".DAT": RESUME 23340 49980' 49990 '********************* KEY INPUT ******************************LIBAEREXIT LIBAFCB LIBAFILHST LIBAOLDBIOSLIBASCII LIBASELDSK LIBASIGNON LIBAVERSEL LIBAZLP LIBBASCOM COMBASLIB RELCBAS2 COMCCP ASMCCP COMCHARCNT COMCOMPARE COMCON/23 COMCONLOG COMCREF80 COMCRUN2 COMDDBLO COMDUU COMFASCII LIBFDCNT LIBFF LIBFMONITORLIBFSIGNON LIBFV LIBHZF L!(*)pz! 47 6!47 6!͇H!ͯH!2!_00!60!60!60!60NT HELP MENU. 39510' 39520IF ROW.COLUMN% = 2 GOTO 39620 39522PRINT FNCSRLD$ (TOP%,10); 39524PRINT" - Will PRINT an explanation of the question. " 39530PRINTFNCSRLD$ (TOP%+2,10); 39534PRINT" - ENABLES the function." 39540PRINTFNCSRLD$ (TOP%+4,10); 39544PRINT" - DISABLES the function." 39550PRINTFNCSRLD$ (TOP%+6,10); 39554PRINT" - Is the DEFAULT condition." 39556RETURN 39620PRINT FNP$ (10,TOP%); 39624PRINT" - Will PRINT an explanation of the question. " 39630PRINTFNP$ (10,TOPz) ? r  ++ Function requires CP/M Ver 2.2 ++ ++ Not Found ++ -z{}o|g~#~O#t `_ _5=5:5;5<5>57#7Nwy#A0:?0 >2 m {0:=ʋ2g" C ^ _ LBASL****** 50000UC%=TRU% 50010A$=INPUT$(1):A%=ASC(A$) 50020WHILE UC% 50030 IF A%=>97 AND A%<122 THEN A%=A%-32:A$=CHR$(A%) 50040 UC%=FALS% 50050WEND:RETURN 65500'********************************************************************** 65529END "!60%!60(!60+!60!)1".0!)1"00!)1"20*4"6*.|ʝÚ*8*047+0*:*2470*<*047+0*>*2470!ͿER!6!2h5!@͒6*@"B!"D.!2h5!4͒6*4|)'*44706*D#"D*D*Bz|?}|!2!_0 1!"!"!"!y6!"!"!"!P"!"!"!"!"!"!͙0L2!"!P"!"*" *"*" *" * #"* "*"* "%+2); 39634PRINT" - ENABLES the function." 39640PRINTFNP$ (10,TOP%+4); 39644PRINT" - DISABLES the function." 39650PRINTFNP$ (10,TOP%+6); 39654PRINT" - Is the DEFAULT condition." 39900' 39905RETURN 39910' 39999'********************************************************************** 40000' 40001'######################## 40002' ###### SECTION 9 ###### 40003' ######################## 40004' 40005'>>>>>>>>>>>>>>>>>>>>>>>>>> ERROR TRAPPING <IB REL>#"BASLIB REL +~GO#^#Vz>R>/"xG ^#"%%%Q+ }X R+͜)C)!m)#6+>0"s#r>w+͜)*%͜)>#>#"ʘ#ʘ##ʃ!] ʔ! ʔ!4!ʞ!ʤ! ?f"͜)ڑ!7My%U)ç! >"s#r%`C%#512COPY COM512DT COM512FMT COM512SGEN ASM512SGEN COMAA LIBACCPGO LIBACOMNT   ͩ0!ͪ.!uͭ1O !q600!uͭ1!mͨ1O !i60# 0s*.|ʄ ͩ0*"8! ":x͒.!͒.!Y͒.å ͩ0! "<*">͒͠.!͒.!Y͒.0!60!Uͨ1 !" !mͨ1 !Q60ó !Uͭ1 !"0s*.|( ͩ0*"8*":x͒.!͒.C ͩ0*"<*">͒͠.!͒.ͩ0!!͒.ͩ0!ͪ.*!|ʅ ͩ0*"8! ":x͒.!͒.!͒.æ ͩ0! "<*">͒͠.!͒.!͒.0!6!p1!u1|g}o|U *.| ͩ0*"8*":x͒.!͒. ͩ0ͩ0 *"<*">͒͠.ͩ0!Y͒.*6͌.02!Uͭ1A0'*.|nͩ0*"8 *":x͒.Çͩ0 *"<*">͒͠.ͩ0!͒.!9͒.0!60!Uͨ1E7F!"L2!5ͨ1v+!1ͭ12!v26!-u1!)p1|g}o| 1!)1476 1ͩ0!ͪ.*.|Xͩ0*"8 *":x͒.qͩ0 *"<*">͒͠.ͩ0*L͌.!͒.!F̀.!͒.0*L|œ 1ͩ0! ͒.*Lj7=2F!kR̀.!ͪ.0 1ͩ0!ͪ.!͇H*!0!0!ͯH*GE|,*2͒.ͩ0*+/v2ͪ.*">!":*:*}o|8!"(/*:!ͨ26!)1"@*͋7*@)^#V"B*͋7*@)^#V"D*.|ͩ0*B"8*D+":x͒.!"͒.!͒.!͒.ͩ0*"<*">͒͠.ͩ0*D+"8*B":x͒.!"͒.!͒.!͒.ͩ0*"<*">͒͠.01FX7F*4"J*.|Wͩ0*B"8*D+":x͒.!%͒.!͒.yͩ0*B"<*D+">͒͠.!%͒.!͒.ͩ0*@)^#V47͒.!(ͪ.*J*}o|2*J|¹!"(Ô*&|*.|ͩ0*"8*":x͒.*J47͒.ͩ0*"<*">":x͒.!͒.3ͩ0 *"<*">͒͠.!͒. 1*GE|D 1/!ͨ26!":Ð*2!/_0*:͋7/!ͨ2"7*:#":*:|ڝ)_!": *.|ͩ0**:"8*":x͒.ͩ0*"<**:">͒͠.ͩ0!͒.*:͋7ͪ.*:#":*:|)ک 1*6"c!"e[*6"gD*i#"i*g+"g*g|Q)6*e#"e*e*cz|l}|- 1*.|ͩ0*"8! ":x͒.ͩ0!rͪ.ͩ0*##"8! ":x͒.ͩ0!Tͪ.ͩ0*####"8! ":x͒.ͩ0!5ͪ.ͩ0*"8! ":x͒.ͩ0!ͪ*"<*">͒͠.!͒.!0!0#60s*.|o ͩ0! "8!":x͒.!͒.*"8! ":x͒.Ü ͩ0!"<! ">͒͠.!͒.! "<*">͒͠.ͩ0!͒.!͒.0!6!"&!uͨ1 !"& !mͨ1 !60ð ͩ0!ͪ.0L!͇H*DM#!ͯH*"!"(*.|b ͩ0* "8* ":x͒.!͒.ͩ0*"<*">͒͠.!͒.Ø ͩ0* "8* ":x͒.!͒.ͩ0*"<*">͒͠.!͒.*!6*| *-͋7F/6*-#"-*2#*-}o| *+"!"-*| !"~ *| *+"!N_0N!v2!ͭ1$ͩ0!Nͪ.00!6*ͿEͩ0!ͪ. 1*.||ͩ0!"8!":x͒.!͒.!%͒.Ýͩ0!"<!">͒͠.!͒.!%͒.ͩ0!0!0͒.!͇H*DM!ͯH*"B*"D!":*:)s#r*:)s#r*:#":*:s| )!"Q*2h5!S͒6U!6*S"X!":*2h5!͒6!)1"@*͋7*@)*Bs#r*͋7*@)*Ds#r*.|ʻͩ0*B"8*D":x͒.!͒.ͩ0*D"<*B">͒͠.!͒.U!0U6*@)*@s#r*D####"D͒͠.*J47͒.*#"8*&|8*J47*0*6*J*@}o|ʔ[*J*@}o|ʔ*L#"L*<#"<*|ʔ*+"ͩ0!47ͪ.*)ґ!"Æ*(|*&| *.|ͩ0*"8*":x͒.!*ͪ.ͩ0*"<*">͒͠.!*ͪ.0*4"J*J| *J*}o|2*:#":*:*>z|+}|" !60C!060!uͨ1k*ͿER!ͨ1*#"0L ! 47!ͨ10L !ͨ1!60C!{ͨ1080L !wͨ13*.|ͩ0*"8 *":x͒.. 1ͩ0! "<*">͒͠.ͩ0!rͪ.ͩ0! "<*##">͒͠.ͩ0!Tͪ.ͩ0! "<*####">͒͠.ͩ0!5ͪ.ͩ0! "<*">͒͠.ͩ0!ͪ. 1k! 6*|go*x|go|g}o|*ͿE!͇H*k!#0!ͯH0 *|go*V|go|g}o|0*ͿE!͇H*k!0!ͯH0*|go*ޤ|go|g}o|ʍ*ͿE!͇H*k!0!0!0!ͯH0*"n!͢M6!)1"4*n|*4|)?go*4|)go|g}o|*4"4*4476*"nëÚ*GE|/g}/o|r *4|B ͩ0* "8* ":x͒.!͒.a ͩ0* "<* ">͒͠.!͒.ͩ0!͒.02*2!/_0! 47/0/6*|Ÿ *6#"6!/1"/!v2!ͨ1/!ͨ260!ͭ1!@12t7"*++"/*͋2/6À/!ͨ2@1t7"/!ͨ2@1t7"2!"!"-*2"8!":h*2*:͋7F_0*:#":*:*8z|y}|L /!v2!ͨ106 *"<*.|ͩ0* "8* ":xͪ.ͩ0* "<* ">͒͠.ͩ0* "8* ":xͪ.ͩ0* "<* ">͠*:#":*:*Xz|}|A*S))*D}o|g"D*S"Z!":*2h5!͒6*:|r*Q|r!"476!)1"@*͋7*@)*Bs#r*͋7*@)*Ds#rU*:!ͨ2)1*@)s#r*D####"D*:#":*:*Zz|}|=*S))*D}o|g##"D*B#"B*Q#"Q*Q|#)ͩ0!(ͪ.*ͿE 1*.|`ͩ0*"8 *":x͒.yͩ0 *"<*">͒͠.ͩ0!͒.0!@1t7"\*\"^!":*GE| *2!`_0*:#":*:*^z|}|Ң!"*6*\"6*.|ͩ0*"8 *   1v+v+ B:$ - Is the DEFAULT condition.8 - DISABLES the function.W - ENABLES the function.1u - Will PRINT an explanation of the question. Number of lines to SKIP ? TTKEYBD.DAT  key for MENUHit #TTHELP Words per error  I.E. Words  ERRORS in,{0`4E8Q<Reset ERROR count (Y/N) ?XW\ Exercise line Number is; zL~S5MRe4!#P|&END of EXERCISE, Please WAIT for MENU.3Echo ?.DATTTYPEXJAWhich ExerciNWWWWWWXHXzXXXYBYZ[["[,[,^[6[@[$T[J[@b[Lh[L sLsLnsLsLs|sXsysssssst6thtttt0ubuuu)*v2\vAvRv[v[$wvVwwwwwwwwxPxxx.x=yNJyNTyN|yryZy{yzDzvzzzz {>{p{&z{/{5{5{5|8|8}8d}8x}8}`}D}]}y}}}}}}}}}}}}}}3}6}6666.D8D:V<_BkGLMQT\VX ! ! ! ! ! ! ! f! !L06 0r j1 1B 1 1? 1a 1j $1420Cr 81 1 2 22 d2~6 2 2 2X4 ,3 ^3 333&444147 5=R5L\5Lf5L5a5}5}6L6667<77(727P7F7x7y7z7{7|7}7~7778@8"r888K8T9T9T:9ml999999:99Z4: f: :&:W:2:T:y::.;z?`;;ield Overflo3Internal Erro4Bad File Numbe5File Not Foun6Bad File Mod7File Already Ope:File Already Exist=Disk Ful>Input Past En?Bad Record Numbe@Bad File NamCToo Many FileUnprintable Erro!9N#F*~#~-~+.~#~-+^#V###-###-~#fo*~#&./ at lin-ͩ0ͤ./ at address|͂0}͂0D.> P> P!9"***Ͱ.Ñ/ͻ.Ñ/.Ñ/͒.Ñ/Ͱ.î/ͻ.î/.î//ü/Ͱ.a/ͻ.a/.a//a/kR.gR."kR.H~# .x2';:*ˆ/X//?͌9</~/5P#se ?(28/06/82) only A-J exist.-$Any LETTER is a valid exercise but presently T2XY \Error break ?l1p?t0xN|RUBCRT.DEFIL~  012345HIJKLMUVdnx, &4BP^iiiiiuR@"6@J'^TChOrRRRRRRRRRRRRRRRRRmRnRoRpRqRrRsRtRu^`jЄf-6=Tp.sXsbslsVs`Ěbdjntx~Ț"Κ9ҚBؚ[ܚd}暆ܛᛉ曉?ABCDET^Нڝ040><ÍFëdónx[[[[ BASLIB #900111 5.01 - OWNED BY MICROSOFT, 1979 <2*2*CzDM*"7*:##"7*>2,*2/**^#V"-*##^#V"0*!*"*6#6P>2*>2*>2*,*í*/*í*ä*_JI2ÂI!~5#G!xH>)ڸ)H ڸ=H|G!9"**;;;;;;;8<[T=KZxN>>?H??6B?@@B@`@L@V@@t@ A2';:*ˆ/F#~#foxX//O/F/~#5P:/O/ì9X/>"5PG:*xX/)P**+~<ʄ/=ʄ/###~„/**)P!/****~=Ҙ//</ͷ/=ä/ͼ/:*> 5PX/>,5PW**#^ //+/)Pz{/{_/0~P#0:*ʔ+^#V2*~!80M0N/0X.i&ë+ G~#]0#O0++N.**|~0!h4͌9͛96**͋00:ږ0P| +}ڠ+!*w!*"*!"*2*Ϳ0!*~6#wڠ+N.I900ͬ9ͬ9~#~#fo]Q!*4!RvRwRxRRRRRRRRR6RJRTRhRRX^0^bdldmm4s>yH\$V(@PJ|DN   > ? @ A B C    8 j tO h [# S( 3 O O ,O ^O `sLT  `   Pê   & X 0 :     (  % C L U  a    *      r. s. t. u. v. |3 o ? l     : l 4! v * +!6#} +| +3!*6#z +*|A+> +6#s#r#=6+>2*>2*>2*2*"*!*"*K*ë:/ * STOP .Ã+/ * END D.**.. . ........Ͷ9**|Š+:*+**|+-* s#r* {w#6"*****>2*D./Error -!",~<,=,#~#,,#0p+Syntax Error in DATRETURN without GOSU Type MismatcOut of DatIllegal Function CalFloating OverfloInteger OverfloOut of Memor Subscript Out of Rang Division By ZerOut of String SpacRESUME without Erro2F  9"*^#V#!*~wڋ+!9"*~ͬ9o&~ʠ+#^#V++ͬ9o&N.~<ʠ+I9~#~#fo]Q6O=s;ͬ9ì9>Ë1>Ë1>Ë1>Ë1>Ë1>ͣ7!+>ï1>ï1>ï1>ï1>ï1>ͣ7ʾ1~#fo##P^#V#N.bX1^#P1P^#V#N.T1^#P1P^#V#N.X2^#PF2^#V#.Q 2^#V#"*!"*:**** në+|N. +BKͰ2PY| +N.BK ҡ2 o_Ä2z +N.zʸ2 Ҿ2_2o _ W}͛9ͬ9DM[E| +N.}͉JʭN2ªN`i"*!b##~ʣTúT*qb##5£TúT*qb##~w###^#V#~s_#~r^DO;*kR}/o|/g#"kR|̀;BZO;!mR~wɯ2nR^Dj;͓V̀;*kR̀;BZ^Dj;sV>>%=~͙*#Å;Ù*;!qRã;>!qRgR2;# ©;!qRT!qR͊<ͅR>>;>|}+!@=SR6V2fR!<=X!8=S!qRS~_#~W#~O\eX!CbXZ%<ɇ<o&̀;BZ*kR*mRU<"kR`i"mR!kR^#V#N#F#!<=cY\x{[!oR6Zwg>^\\Î<:';Gw#Ž<<ã]Q+V+^++r+s[:6~#^#VÛ9| +!9>͛9^#V#^#V# Q^#V#kR QBZN.7!`.TBSÊV^#V#͛7ͮZGN7y7#~#fo~#fo7#7 ¾7 y7y<.7)7)ͬ9ͬ9ZW 778U8 8> 8G 8U828b_!74%85*7"7~#N#F#e8?8 XQ(8yxJ8 (8+++6@#yw#xw+++6###!7~6v8͋8%88*7#~#~%8X.Ú+!*7"7~#^#V#88XQØ8|½8Ø8++~_w#~Ww#Ø8͋8*7DM~#^#V#/988+z9+{9##@ND-+$0(A#ND(A++wA@(A6%ALAC͹;ZA?+6%A6>A{_xABBùAͮByBOͮBGOCA*(;=BP@j;ѯÁ<7;By4>OzWO6>AB/<bB6>͑B^DBt#<éBC͹;B=60#ïB¾BB60#=úB{ë+ͨ3͌9͛96͚Gڇ3 ¸3¨3"3G{,x3PX͚G4!h4Oz"y4 ;4 4O{,yU4͚G4 4{ 4,> 4444U4͚G3"&4 N4͚GN4 &4,N4 F4͚GN4 N4**% 46!h4ɷw#O4wb~!o"sb*ub2xbQ~cO!Q N#FØR"ub"wb"sb*qb"qb dd1dcbbbbbbbb_eedWd?edccc1cscccVfcfpf deeIfNfCfFf"f f5f=ff= =|/g}/o =!;E:nR)=d<"kR>2';2;`h =~&yD-w=+w=+NDI>.=eʉ=E¨=NDlʡ=Lʡ=qʡ=Q>=~%>#>!>d=D=>NDoDNDڼ>=_{_&>6>=.;^D!,<)=^D =>w=^D5E#=> >\;s;^D^<;=^D;;*kR ;~>T])))O ||>"kRw=yj;7Ҟ>t$<>^<ͱ>v>z;;͝<.7<.<<{ >0_=?!mR^D>:wR>y?:oR?:mR?:oR{z~#q#p_8y$9x$9DM8~#$98YP+++"76@###{_zW+r+s*7|X9X.Ú+^#V+"78#s#r+++r+s##*:{z*:?Ҋ9}|~# 9yGI9x]Qu9%:[:*:*:kQ9͔:9#^#V+V+^kQ9%:[:###ü9/ BASIC System Error - String Space Corrupt v9#N#F*7yxV:*7yxV:6+6+~6  >@++*7"7s#r+8*7#~_#~W҄:X.æ+r+s##6"7###!7~#foʨ:kQ˜:<*7"7*7}o|g6@#s#r#6"7*:*:"7}w>#w##kQ:++6+678\~P#=:^DPC͝ B/>͠;*C>͠;p#=!C!gRD<]C<>dD?BR</{_#zW#yO++qC<#GßCDD>BN#F#*kR/}o|gҲC"kRp#=ŸCBw1_cƤ~@zZrN vH Tʚ;@B''d #~: ND0?<=:';kD7-++NDEOʊDHʊD+͖DڟD =H#DåDX.×+M!ͷDڵD}0?)))صo÷DM!DD}E0? D? ))))صo@feSf:dDdgVg\gehhEhhnh,hggg hhggggggggggghgggffwgsgagjg>gc:g-g0gggfRgffN#N."d4!9"_4"a4y2c4**|ʌ5**!c6"*A~#*f4LQ~c66·5H=ú5O="f455s;*mR*kR*iR*gR5<*kR5\;*mR*kR*f4LQ6~#"f4,c6Ô5~c6!"*~,")6#"~=6=6# ,6c6"C6#"f4x"X6 X6+~ M6y͛95/?Redo from Start X.Ͷ9!66*d4:c4OÓ5*a4+~+ʽ6ʯ6ʯ6 +w ±66++~#fo6"a4!c45*_4~26#~#^#V:++ͬ9Nb+N.u9)/?;E͑??6+ͯ<%?6-.;#60:*;W:';ڶ@ʮ@Қ?͙C!;F :*;_ ^?x*^?{^?AqND~?E~?D~?0^?,^?.?+60{ʊ?+6${+p2*;!;6 7<*gR*iR2;E@E~?:?0? #~·?>DGµ?"gR`i"iR#~+-@-@0OxG-@#~?`xE"@y ?>2;2@|?@?"gR`i"iRG<#W;B:;`@j@n@n@B60\<C+~0}@.\<ʯ@^D>"w#6+@6-/</ Ң@:#p#w#6!;#z0AABzB͙C{;=BA?@p#6!;#:(;~ @*@+  Da{ <^D:nR:mR<:;2;2;X.×+X.Ý+N.}͉JʭNʪN!$ ~~E#~sE`iYGXE>O #~goPY!$ 6͉GN®EѯóNgF!$ ~ĉE͉GK**|F##nEF.E*AEN.}͉JʭN!#6F! ~+ngN.}͉JʭN! n&**~ʧN MDM$~̆E4~O#V pʌFzw w+s#r#6#6DM! {zVFMw\2OONO++O~O?O+O?OOO!h42OBO#POO:OXO>\O2OyOO7 O O |ONOONšONO> O>$O¤O>#+O½O6O!h4 P?O ?Ox<>Oyq#O ?O> O#PO ?OBO:6Ow1D.P>^O@OO~ P> OO# P͐*> 5P> 5P** LP#~+ 5P~=´P**!*"*5P"*> ͠*> ͠**3P&)))p^#V#!kR Q^#V#Mj:s#r#>*|R !*T]~#foʭNxKyK~#~+**"*s#r3. *EE|cK! s#r#wmK2OKN.:OK§K"PKçK2OKN.:OK¨K"PKèK2NK}͉JªN! ^#V:OKK*PK{ʰN+s#r! w#w! ~#fo!͘NK8LBK>!) L)#L))L L#=L}_}la)N3L#xN"HK! "JK!& "LK!}o|g͘NbLbk:NKʨL͘NwLLDM*LK*JKL"JKPYL}o|g*HK#"HKELLDM*JK*LKL"JKPYÍL2N*HK! ~#fo͘Ns#rL:NL!L!# ÓF~#S9\:wROZG2pR!wR6V:pR2fRx!qRgRUmUVV!0\ W\!oR6Zg>^\|ԗZ>!& G͆EGÞN~# G**~7M% ~CG+~#5O ~+~PGVG%G7>**T]" N#F+q#p###6 nG͉G=ʃG>w+w!%#G7?**$ 6#67~N#^#fk_GN#~:G++@Ny@NNtN #'H~.HH7G#G2Nͬ9z NN> HH> ,HHN.͵GMtN<ʼN!dNtN> ]Q͵G:tN!dNNtN<¶NdN"CE>2*!rM"*:*<2***"AE!F"*"EEN.ͿH*CE~ʪN#N#F++ͬ9 OHIHRªN*EE|H!"EE}_͉!gR Q Qw#w#w#w##V+^#>gR4Q>kRQ ~#=8Q!Q#~ KQ KQɅo$ɧGw#aQ{zɲrUs#^) r*bTr*h#"b:~<AMr!#*hr+s:jn!~+nKB~#W_:j"oKBDBFUs~#r{ʲrKB oFUs#"o{Mr*hUsUs"s2s`p:jZo~#Oo>òr rip)q:`ͥo~pr:sYs>2srYs6#yRͨVxRʴR\OʹR!"\!mRy#±R+¤R\?"\͜S[sVR͜SjVS!qRͨV>S:nR\:xR/ë+N.| +,ʼM-:*ʭN**!*"*{I9f$%M!M**MɎlDjxKBINRÄlxKBDCRÄlxAjKBMVḮlKBAjxÜk6>4>?>=>:>7>5>2>3>@>C>X.o&ë+!"*!h4"f4N:6N/?Np#PVak[]WY]W\ \kW\sWZ;WYZ|[GW!]WXWZWiYzW>O!nR~+>w\QY[Z\:nRұWhکWZYƁʱWͥZX!W7XJmYQY[\[à[|Yt&wz^Pc|u~r1[W!0>2nR!W7XZogBZhX }}{(qnz Z\iY7XiYZ~#[=xfY \hXBXTZeX \\:nR[xX/<ͥZ\Zg^\!kRX~_#~W#~Oұ[#4ʠ[.t\ñ[G~_#~W#~OܑZZTZX \\>OhXTZX \ʅZ\ȯGͻY"TRy2VRFo͜ZͥZ!D*kJ IK{͉J¹Nz͵GRK"*#tN w# *Iqq͉G~YI.O :J:* W:*iJ> OOOtN*J~*6?# JɧʭN<ʭN=_!*~#foʭJ##{J++ÙJ**J"*q#p#s#4#5++###DM !*~#foJ+V+^##*EE{zJ^#V+"* K*EE DRwU?SQ!qRjU:mR<=6VPU2fR:gR͝U\x/F+N+=¼S!qRS!gR>q#p#=S!gRS"QSͶS͢S*QͨV[:nR[!wRN#FͻYVq2TGdUbVx TTÝU!mR>V*Tj0 TeB׳]h!I.k ͜S[sVyT͜SjV!qRS!0!nRq#~++w+q”T\DNn"~`35zr1{r1h!IͨV\yO2wRTͨV\:nRSU/<  R:mROYnR4ʠ[/Y?Yg.*TR:VROzY?Yg.*kR:mR%Yx<=VY{_zWxG)yOHGñ[TZfY \[\ͻYy+F+F+Fw`h|ʳYgyҗY:kRO|g}oxG-|‹Y}†YZElaOÅY!nR~GxYƀ[wZw+ɷ[[\x{[!oR6ZwgYzY >^\|[{>2nRZ/))Z =¼Z!mR~7w?##wy7O*kR*mR"mR"kRajSX:[[Jset up the printer console print clr for i = 1 to 5 print ' ' next i text 0,` This program prints names and addresses, on the Epson MX-80 attached to the Kaypro. To put envelopes in the printer, it will be easiest to pull the wire paper guide from the back. For a lot of envelopes, pull the Tractor Feed Guides as well. ` input2 " HIT ANY KEY TO CONTINUE.";RSP end of startup rem now do envelopes startup rem the main loop repeat begin console print clr for i = 1 to 5 wise rem get alternate and print it. print "The normal return address is:" print " " print "Your name" print "Your address" print "Your City, State, ZIP " input2 "Is that OK? (y/n) ";rsp if rsp = 'y' then begin lprinter print "Your name" print "Your address" print "Your City, State, ZIP" end else begin console print "Enter name: " input2 txtline print #1;txtline print "Enter street address: " input2 txtline print #1;txtline print "Enter Cityant to print another envelope? (y/n)"; rsp end until rsp <> 'y' rem set printer back to power on mode print #1; esc;'@'; stop  of the knob. Then put an envelope in the carriage, with the top edge of the envelope just above the print heS\E!nR[/E\ D\7>{_zW}o|g=;\|g}om\CZQ`\ o-yOzW{_xGp\kR*mRDM^#V#N#F#xy"\:nR:mR7|/G}/O!>E\ D\7>{_zW}o|g=;\|g}om\CZQ`\ o-yOzW{_xGprint ' ' next i text 0,` First, turn the power to the printer OFF, if not so already. The printer does not like to fight over control of the knob. Then put an envelope in the carriage, with the top edge of the envelope just above the print head. Turn the printer back on. ` input2 "When you are finished, hit any key to continue.";rsp lprinter rem Tell printer to ignore "Paper Out"; other printers may rem need different code: print esc;'8'; rem Tell printer to print Boldfac, State, Zip: " input2 txtline print #1;txtline end end procedure address console print ' ' print "Enter name being addressed: " input2 txtline print #1; tab(n);txtline print "Enter street address (or apt. no, dept name...):" input2 txtline print #1; tab(n);txtline print "Enter City, State, Zip (or street address):" input2 txtline print #1; tab(n);txtline print "Enter RET (or city, state, Zip):" input2 txtline print #1; tab(n);txtline end procedure startup rem  $lines rem ENVELOPE.BAS rem prints addresses on envelopes with the Epson var esc; ASCII ESCAPE clr; clears screen ff; ASCII FORM FEED rsp; single character console response width; width of envelope = char clr = chr(26) esc = chr(27) ff = chr(12) var txtline = string var n; position of address i; loop index = integer procedure return_add console print clr var k = integer for k = 1 to 5 print ' ' next k rem Check to see if Default return address is wanted; othere; (other printers may need rem different code, or just not have Boldface): print esc;'E' console rem rem a little loop to get envelope width repeat begin print clr for i = 1 to 5 print ' ' next i input2 "Is this a (n)arrow or a (w)ide envelope? Hit n or w.";width end until width = 'n' or width = 'w' if width = 'n' then n = 23 if width = 'w' then n = 35 return_add for i = 1 to 5 print #1;' ' next i address print #1;ff console input2 "Do you w  $*' >,,+*):  >!B*@:  >!Y *W:  >!\]*l͍Æ*>!DQÞ*ç!>ͫ]ù *&l͍!͘ ]The normal return address is:!Sl͍]  ! Sl͍]- Your name!#Sl͍]P Your address!CSl͍]}Your City, State, ZIP !fSl͍]lIs that OK? (y/n) l͝2ly͍þy**&z C] Your name!Sl͍] Your  w** &z - ! #* >!n5 *3 >!DQM *K V !T >ͫc *a ]n *m &l͍!^ ͘ _Ë * ]*l͍]lDo you want to print another envelope? (y/n)l͝2ly͍ y** &͇  * ]* @* &Copyright (C) 1979, By Topaz programming. All rights reserved. From here on protected by End User License.  " " " " " " " " * *"* : ͚ * * * !** n "!͚  MX-80 attached to the Kaypro. To put envelopes in the printer, it will be easiest to pull the wire paper guide from the back. For a lot of envelopes, pull the Tractor Feed Guides as well. ]l HIT ANY KEY TO CONTINUE.l͝2ly͍c]*l͍*>!DQ5*3>!<>ͫ]P *O&l͍!F͘  First, turn the power to the printer OFF, if not so already. The printer does not like to fight over control of the knob. Then put an envelopeN# 6~#6#^"#:)!:͍***2~2#~2#:!p:O>[ͦ>]ͦ> ͦ:=2p>2y͍‹:/2Ž^"#!,:͍ WARNING ONL:O͍,!,:!, ERRO IN LINE*|0address!Sl͍]3Your City, State, ZIP!Sl͍[]Y Enter name: !LSl͍]ly͌!oly͍Å*]!Sl͍]ùEnter street address: !Sl͍]ly͌!oly͍*]!Sl͍]Enter City, State, Zip: !Sl͍]ly͌!oly͍G*E]!Sl͍`]i *h&l͍]ÞEnter name being addressed: !Sl͍]ly͌!oly͍*]* "!Sl͍]"0Enter street a " !6&:o!"7 l! N{1 OG !>"` "}!6 #=S !zW{_}o|gy>ʓ Ñ y>“ >Ͷ z z> 7zµ {&.T .F" ! !!|>}TtYy>>}22!6::O>;"Q͆2!:_!6!:O>;*Q"͆2!:_!6:ʄ!:O>;*O>BʏO2!"2 4Nw\:~ͦ~#©>26:> in the carriage, with the top edge of the envelope just above the print head. Turn the printer back on. ]lWhen you are finished, hit any key to continue.l͝2ly͍]* 8* &]* E* &l͍]*l͍ * >!DQ* *( 3 !1 >ͫ]E *D &l͍!; ͘ ]lIs this a (n)arrow or a (w)ide envelope? Hit n or w.l͝2ly͍ð nô w** &z ** &z c n** &z  * >!ͦ|0ͦ}0ͦ}0ͦ!>w~>ͦ!4#,ͦ* s#r#" * +V+^" y2 :O! ~x> ͦ<O> ͦ> ͦ2>B^#V>!!::ͦ^#V#"~2#ͫ:!!"mz'OFx>y#6>#w>> #6>O~D9 #6#y*m"k|X}Xq)!y2*ko>FO #6 wwzʐddress (or apt. no, dept name...):!Sl͍]ly͌!oly͍N*L]* "!Sl͍]á+Enter City, State, Zip (or street address):!uSl͍]ly͌!oly͍*]* "!Sl͍] Enter RET (or city, state, Zip):!Sl͍]ly͌!oly͍A*?]* "!Sl͍]*l͍{*y>!DQÓ*Ü!>ͫ]î *&l͍!͘  This program prints names and addresses, on the Epsonxʩ+~ͦéxʩ+>ͦ> ͦ>ͦé>#͍ͦ!>;é>#͍ͦ:Ì!o͜:Om:ÌTOO MANY CHARECTERS. MAX IS 252!"2^#V" >!* **~ #":2ҩ!>!* **6!"#":2>2-ASCII FIL~'#ͦ#~#y̍q2l~\2k#~\ͦ!k5\F:lqyʍ!s,?2"ʠ͆2!!"!:!*~#.,-$*^+/&!\#~:O~ͦ#ã    ! 4 6!! 4 6y2>B2^#V!!>:O:`!A Ny#~#^#VN#!A ly~#y>]T#~#~#~^#VɷGOG># K)F&glp= pOگo####W‘60#÷E˜>ew#.¢e©xʷ ‘GZ+y=x=0 60$w +6.$y=x=ixg9x /4 T Tw#Qگ=s<ү<_ʯKگ oW##K04 ڰ0_4 °4K0w# ½x šGZ+wx"^#=V#=³**"__{s+=r+=s+=!,J> !D !%BAD CHANNEL NUMBEt,,èÿð,,,1k#,,,,,,,,_|*:Ÿʔ2É!u:|*7>|22ͤ"R"J >͵ !e%>͔z "!\$>G!3!`%6!\$>G!]RZJ >͵ !%>͔z "#!>G!ãRJ >͵ !%>͔z "RJ >͵ !%>͔z "#!%>͔G3!N!e!\$: !Y'6:`%b!\$O !K%͵U!U&ͽ "*Z%#"Z%!"T'!U&n&*T'-_!U&*T']G!['>!]'!_'!a%{['*^%#"^%!%['x,]*X%#"X%!%['x,!%['x,!%['x,eí:Y'­!Y'6*\%#"\%!a'*T%#"T%*R%#"R%!"R%*R%++|*T%+"T%!"R%!%a%>!%a%>ENVELOPE.DOC This program addresses envelopes. For one or two envelopes it just doesn't make any sense to call up a database or a word processor program, and STAT LST: = CON: doesn't make my printer do boldface or take care of the tabs. I am told that several printer manufacturers have adopted the same control codes, so other printers besides the Epson may find the program useful. The general program structure would apply in any case. -Frank T. Snivlely- x4o>g9##/4   4`C!c'Ϳ> ͹ \G`P nxh>ͦG wGʤx!$Ҍͤw:$ʗڤ:$`Ì>2q'!o'þ !r'ÿ^^i^#Vù#F#N#^#r+s#^#V++r+s~ʹ5¹^5^iq#pùO^4~ ;_is#r#s#r#q!AÿIJ$KM Format Overflow*$-&$!'áO:$y!9Gʚ~#'‹ËyáO:$, {*$|j& *$*$-#-> 4 > 4 , > 4 {=>'4 !9*|! "__7:|N\!}>2|:{m\!}_<2{!~ɀ&INPUT FILE REAP>t/!%a%>&*T%+"T%!%a%>!%a%>|U*T%+"T%*T'#"T'Ð*T%+++|/:Y'ր*V%#"V%!Y'6!"T%RJ >͵ !%>͔z*X%> ͵͞ "RJ >͵ !%>͔z*Z%> ͵͞ "RJ >͵ !&>͔z*\%> ͵͞ "R,J >͵ !-&>͔z*^%> ͵͞ "*\%> > *X%> !D&>M*V%> > *\%> > !F&>M!G&>M>x!V'>tRJ >͵ !I&> ͔z!V'>M>͞ "#~a{_w~AEIOU   =~#' {>'4 4 {=>'4 {>b4 *$++|25(!3(T ɯQ >Q >2@("A("C(`i"E(!9"G(!6(m ( ~# r *(~ *(~¶ !(>͔G3!!!$: !$"(!( !(>͔G3!R.!!$: !$"(!( *("(!( !(Y *(^#V!$s#r*(^#V!$s#r*(^#V|*$|G8 !(͛ *(^#V}*$}G[ !(͛ :$ *(^#V}*$}G !(͛ :$ *(^#V} !(͛ ^#V"(!$"(*("(!(Ϳ2(!(þ ^#V"(:$ :$ *( *(5!(6:( & % !(T *(w# *!~#*!2#>*w#wͮ-͸qͮ͸Nf*!~" 4#4#4ͮ~…ͻD>ͮ~>*!~ʲ>ͻI*!!*~!/2%*!|(^#V{zzV2 z!:%-qNf#*!|V*~V=! S:%͡PLw3W>ͮ|}~> <ͮ|*w=*!I#*^#V6+6++ͮ>"N#F#~͸q#p#w>ͮ>*~!=>!*!" s.:;<>[]y * !$1C o&))))\xH  `#w `*!#ʏAҏG:ʔ 6Ùp4+-ʾ##*¶6?úw¥þ#6 .  - #*6?w#6  %#6*!##^ ~?*# #xCON CON RDR PUN LST M!E ~$1Ҏ\ul$!~ !2© ʷ#Öx=GÓ>ɯ*!+^#V#{#z6#6 r+s!8)F#~#!8)  >-3T]))寕iO>`G>0 ;<3 DM0 > mw#m O~#ƒGxږʢ > ʮ#â!9!97>?'w#¾!9!'w#!9͡! 9͡! yFͅ!9o>g~7Gxl:!9!w# R!9!9!'#y!9^{w{W#~W~+¼ð7>?'w# !9~#!9 (% *(5!$6!(T :$" *(6 `2(:(S !$"(!"(!(Ϳ!$6#6!(6 ^#V"(!$"(*("(!(D !$"(!"(!(Ϳ + :$+ *(~ ڤ *$#"$+ *(~ ¸ !$6#6+ :$+ *(~ *$#"$!$6#6+ *(~ + *$#"$!$# !$6#6*$*$#-|+ !$"(!"(!(Ϳ& , !$6:$9 !(T "(!9"(!(Y ! 9^)~# ^ *)^#V|s *)*) *) nb *) ! )> !)>͔*)Z! )ͧ*)~# *)^#V)))| *)6P#6*)~#( *)#r#w=* }!)6 4>2)*)!4#4#4~#N#F#y#x#:)*)!!:)ʁV@:)~G~#~O?#~! p! y! q<<@ɯ~#N#F#w#q#p7'~#!!! 6?<)= _!x#FNwxG>O>G!$q#p#6K")")2)x2)'2)7!)~5fʑ=¼:)¼*)<‘͒)ü*):)O*):)­y O:)@*)w# G:)*)!V*)")`:)/g.>Gx|6P  ͊" ͊"!9)^r+s6 #6 !9)4^N*!|S}=@OKKO>~__>͡N*!|‹YK=xy„͊"Ç>~ʗ=ʗ>͡q2&*!/"#{*#*!#:&O#s#rںár+s{ ! 4*#+>|+}oͮ͸~2͸":'TZG:'*pT4#6:u*++"~}+ʂ}|2""1k|'##"!6*s#ro“{ ʓ*!:w6*"<:“<ʓ!"*!#>T!9͇ "!9͇!9!9ͷ!4,5!9ͩ$ d!9! 9ܘ! 9w#w!9~͘<7>?'w#›'w#¬7>?'w##º^{w{W#!ÿȇ)yw# ~#~#W #PF#")x͔n*)!9G_>WObk++ʎ~+†y~#/2 )*)^#V} *)~# *)6#6*)"#)*)")*)"!)!)!*)^#V| *)"-)!"/)!%)Ϳ^#V^#Vt":$!@Ϳ2$O!$*6/ +~#w!$ s#r!$4,"HI$JL I/O Stack Overflow:$€!$"6)!2)1}!1)6Ë:$21)!$6:1) ښ*$#"$:1) ª!$6#6:1)""*^#V#"^#V͸""!||~͸yaA =g}o9!9VzwzO#5! 9/GO~O~q+]!96#=pO!9Fxyҧ! 9~WwzO+”_ /!9~#=»og9##z%|xK{w#qO!9 w#'60#60! 9~ V!97>?'w#G-!9~͛o~#͛\! 9~.+60Í06 #u+r>o&9y>o&90w+²6./G! >0  x>T!>) =#) ɯo>g{ozg!:ÿBCDFH Conversion2f!]ÿefgi#}OD*)~ҭ##~#fot!ÿ Free Space Exhausted##^#V#{_zWv{_zWy4z{##^#V# ##s#rs#r#s#r+++~sw#r####}*)}|p*{zp+F+N+V+5^{v{zv}|v{PPi`~sw#r##q#p i`N#F#^#V~vq4#p+i`##s#r|$$ FREE Request Out-of-Range$ Free Space Overwrite$GKMbkͤ Fͣ Nͣ N#Fͣ ^#V"&%y2%%xi&!!x>['a%['k'l'$m'q'z'{'$|'~' Invalid Format Item5(@(A(C(E(G( Stream/Record Sequen/Direct Input/Output Keyed Access P< $con(($(I(W(e(s((((( (((((((((((( (*}o|#$$+w+w+r+s4w#w#s#r<2)++*)s#r")*)#")*)DM!)x~##~+#+F+Nq#p*)+")##=”#!+~O~#~G!>w!/x¼#y# >O6# ³# ʣ#=ɯ ~#fo++R#!)~#$*)I##&$$8$  Insufficient Memory$ Invalid I/O List End of Execution$M$ ;z ; SOURCEFILESYSIN FOGINDEX.COM - written in PLI by Les Bell, 11/04/82 - compiled by George Blat, 6/17/84 Calculates the 'Fog Index' developed by the Gunning-Mueller Clear Writing Institute. The fog index is roughly equal to the number of years of (US) schooling required to read a piece of writing. The fog index is the average sentence length plus the percentage of words having three or more syllables, all multiplied by 0.4. To run, type FOGINDEX . FOGINDEX.COM is confused by $!${#z*$*$ "xyx0͈_! ^#V͂>(̈́yͻ>)̈́|ewL |qw#>,̈́͂> _Ê" ͊" Ê"0:ڄÄ͒Ò͂|͠}à d x͒N #~̈́! *)!9{_z { & $ ͂>#̈́*)>=^#V#ͬ& = >: G >?̈́! >=̈́^#V|| }s .))+!#F>A8 > #— ~ >.= ~ = =È ^#V# File: Traceback: !!&! ERROR FIXED OVERFLOW OVERFLOW UNDERFLOW ZER.dat ) )#)))-)/)6)1))SYSPRINT Fog Index Calculator, Rev 1.2Usage : fogindex No sentences or words in file.Can't calculate fog index$1.$1. EDDEDTEDELENumber of sentences = Number of lines = Number of words = Number of characters = Fog Index = some word processor files, such as Spellbinder text files, which use unconventional carriage returns. In such cases, create a CPM version of your Spell- binder file with the following command sequence from the Spellbinder command line: COMMAND:GD (to save your file) WRITE FILENAME>YOURFILE.EXT COMMAND:G (to recall your file) READ FILENAME>YOURFILE.EXT COMMAND:GD (to create CP/M file) WRITE FILENAME>FOGTEST.O DIVIDE END OF FILE UNDEFINED FILE KEYNULCONCONRDRPUNLSTBADG!(%~s!X!$ Condition Stack Overflow$4Ox!) w#s#r#s#r!9!)% s#r!(%N!) +++++¬!#{!#z!++~ì!++!(%5!~# !!!(%N!) +++++!#~#"+{"#z"++~!#^#V=!$~t"5:$_!$^#V"$$.~# F"*$)))))$ )| ["*$|}*I%"$:$*$$w# "*I%{ қ" Ÿ"!#"I%"Copyright (c) 1980 Digital Research, v1.3 !")")")2(%2$*) #")q#p##}o")  TXT/1/2 (NOTICE "/1/2") Then return to the operating system and give the command: A>FOGINDEX FOGTEST.TXT Or from Spellbinder give the command: COMMAND:C/FOGINDEX FOGTEST.TXT FOGINDEX.COM will respond with a report something like this, which is FOGINDEX's analysis of FOGINDEX.DOC: Fog Index Calculator, Rev 1.2 Number of sentences = 17 Number of lines = 58 Number of words = 205 Number of cha a sad lass; ask a dad; as a salad falls 490 DATA a al ala alas alas; f fa fal fall falls 500 DATA a as ask asks asks; s sa sal sala salad 510 DATA a ad add adds adds; f fl fla flas flask 520 DATA a lass falls; ask a lad; a salad falls; 530 DATA END 540 DATA sad dad adds; ask a dad; a flask falls; 550 DATA alas a salad; lass asks; add a sad lad; 560 DATA a sad dad asks a sad lass; add a salad; 570 ' -- HERE WE START OFF HOME KEYS WITH E. 580 DATA ddd ded ded dea dea ddd ded ded dea dea 590 DATA fD" ELSE 240 210 R=R+1 220 C=C+1 230 IF C=1 THEN 170 ELSE 140 240 PRINT "NO, try again" 250 GOTO 170 260 PRINT "END OF DRILL. ";R;" LINES RIGHT IN";T;"TRIES." 270 R1=R1+R 280 T1=T1+T 290 GOTO 30 300 PRINT "END OF LESSON TOTALS:";R1;" LINES RIGHT ON";T1;" TRIES." 310 PRINT "Practice your drills often and you will" 320 PRINT "soon become a fantastic typist." 330 DATA fff fff fff ff ff ff f f f f 340 DATA jjj jjj jjj jj jj jj j j j j 350 DATA fff jjj fff jj ff jj f j f j 360 DATA ddd ddd kkk kkkj kik iii lll ;;; 830 DATA a jade jar; ask a kid; a full fir falls 840 DATA if a fire is red; see if a deer is red; 850 DATA END 860 ' -- DRILL8. REVIEW AND START LETTER G. 870 DATA ask a lad if a deer is fed a leaf salad 880 DATA frf juj ded kik ddd kkk sss lll aaa ;;; 890 DATA ask a fair lad if a fire is fed a leaf; 900 DATA fff fgf ggg fga fga fff fgf ggg fga fga 910 DATA fff iii ggg fig fig ggg aaa ggg gag gag 920 DATA lug flag; keg gull; leg gall; fug glad; 930 DATA END 940 ' -- DRILL9. INracters = 1481 Fog Index = 5.21 End of Execution ff eee ddd fed fed lll eee ddd led led 600 DATA fed seed; led sled; see elks; sea fall; 610 DATA END 620 ' -- HERE WE START THE LETTER U. 630 DATA jjj juj juj ju; ju; jjj juj juj ju; ju; 640 DATA uuu sss eee use use ddd uuu eee due due 650 DATA use dues; full fee; used fuse; sues us; 660 DATA aaa sss ddd ded fff jjj juj kkk lll ;;; 670 DATA led a sled; a dull elf; see us; ask us; 680 DATA see a used desk; a lad sees a sad duel; 690 DATA END 700 DATA a lad sells fuses as a lass sells sleds 710 DA ddd kkk ddd kkk ddd kkk 370 DATA sss sss lll lll sss lll sss lll sss lll 380 DATA aaa aaa ;;; ;;; aaa ;;; aaa ;;; aaa ;;; 390 DATA END 400 DATA fff jjj ddd kkk sss lll aaa ;;; fff jjj 410 DATA aaa lll lll all all ddd aaa ddd dad dad 420 DATA fff aaa ddd fad fad aaa sss kkk ask ask 430 DATA jjj aaa lll jal jal aaa sss ;;; as; as; 440 DATA dad dad lad lad sad sad fad fad add add 450 DATA fall fall dads dads asks asks lass lass 460 DATA END 470 DATA lads lads fads fads adds adds sass sass 480 DATATRODUCE LETTER O. 950 DATA lll lol lol loj loj lll lol lol loj loj 960 DATA lll ooo ggg log log ooo lll ddd old old 970 DATA odd rose; old gold; sold oil; rose for; 980 DATA a red flag; a glad gull; red roses fall 990 DATA see if a gull is glad; sells four roses 1000 DATA girls sold lads red jugs for salad oils 1010 DATA END 1020 ' -- DRILL 10. REVIEW E,R,U,I,O AND HOME KEYS. 1030 DATA fgf frf juj ded kik lol sss lll aaa ;;; 1040 DATA lads seek four gold rugs for glad girls 1050 DATA jail glad r10 ' Typing drill program by J. Kennedy 20 ' Rev. 1.1 July 14, 1981 30 PRINT "TO END DRILL, TYPE A 0. DRILLS ARE NUMBERED 1-12." 40 INPUT "WHAT TYPING DRILL DO YOU WANT";N 50 IF N=0 THEN 300 60 IF N=1 THEN 140 70 FOR I=1 TO 7*(N-1) 80 READ A$ 90 NEXT I 100 PRINT "DRILL ";N 110 PRINT "INSTRUCTIONS: RETYPE EACH LINE EXACTLY" 120 PRINT "THEN HIT RETURN KEY." 130 T=0:R=0 140 READ A$ 150 IF A$="END" THEN 260 160 C=0 170 PRINT " ";A$ 180 T=T+1 190 LINE INPUT B$ 200 IF A$=B$ THEN PRINT "G O O TA fff jjj juj ddd ded kkk sss lll aaa ;;; 720 DATA a sad lass fed us a salad as a lad fled 730 ' -- HERE WE START THE LETTER R. 740 DATA fff frf frf fra fra fff frf frf fra fra 750 DATA fff uuu rrr fur fur rrr eee ddd red red 760 DATA red deer; real red; read red; red jars; 770 DATA END 780 ' -- DRILL7. START LETTER I. 790 DATA kkk kik kik ki; ki; kkk kik kik ki; ki; 800 DATA kkk iii ddd kid kid sss iii rrr sir sir 810 DATA kid skid; lid slid; fir fire; rise ride 820 DATA aaa sss ded frf rrr ju  ugs skid gold fire juke fair 1060 DATA dark joke flag lids four jugs deer oils 1070 DATA a lad seeks four red rugs for a sad lad 1080 DATA a lass sells salad oils for a glad girl 1090 DATA END 1100 ' -- DRILL11. INTRODUCE V AND H. 1110 DATA fff fvf fvf fva fva fff fvf fvf fva fva 1120 DATA vvv iii aaa via via vvv iii eee vie vie 1130 DATA eve ever; vase gave; five veil; via vie 1140 DATA jjj jhj jhj jh; jh; jjj jhj jhj jh; jh; 1150 DATA hhh aaa ddd had had hhh eee rrr her her 1160 DATA has hash;seed; led sled; see elks; sea fall;.3 END\a jjj juj juj ju; ju; jjj juj juj ju; ju;Ê uuu sss eee use use ddd uuu eee due dueø use dues; full fee; used fuse; sues us; aaa sss ddd ded fff jjj juj kkk lll ;;; led a sled; a dull elf; see us; ask us;BG see a used desk; a lad sees a sad duel;LQ ENDz a lad sells fuses as a lass sells sledsè fff jjj juj ddd ded kkk sss lll aaa ;;; a sad lass fed us a salad as a lad fled fff frf frf fra fra fff frf frf fra jjj jjj jjj jj jj jj j j j j@E fff jjj fff jj ff jj f j f jns ddd ddd kkk kkk ddd kkk ddd kkk ddd kkkÜ sss sss lll lll sss lll sss lll sss lll aaa aaa ;;; ;;; aaa ;;; aaa ;;; aaa ;;; END fff jjj ddd kkk sss lll aaa ;;; fff jjj05 aaa lll lll all all ddd aaa ddd dad dad^c fff aaa ddd fad fad aaa sss kkk ask askÌ jjj aaa lll jal jal aaa sss ;;; as; as;ú dad dad lad lad sad sad fad fad add add fall fall dads dads asks asks lass lass END % lads ladk four gold rugs for glad girlsN S jail glad rugs skid gold fire juke fair| dark joke flag lids four jugs deer oilsê a lad seeks four red rugs for a sad lad a lass sells salad oils for a glad girl END fff fvf fvf fva fva fff fvf fvf fva fva>C vvv iii aaa via via vvv iii eee vie vielq eve ever; vase gave; five veil; via vieÚ jjj jhj jhj jh; jh; jjj jhj jhj jh; jh; hhh aaa ddd had had hhh eee rrr her her has hash; hold hoe; had hall; has held; END hold hoe; had hall; has held; 1170 DATA END 1180 ' -- DRILL12. REVIEW INCL. V AND H. 1190 DATA aaa sss ded frf fgf fvf jhj juj kik lol 1200 DATA have a hoe; has a vase; she held a veil 1210 DATA he has a valve; he has a villa for sale 1220 DATA she has saved five valves for his villa 1230 DATA fvf jhj fgf juj frf kik ded lol sss ;;; 1240 DATA see if five elves have held four valves 1250 DATA END fra2 7 fff uuu rrr fur fur rrr eee ddd red red` e red deer; real red; read red; red jars;j o ENDØ kkk kik kik ki; ki; kkk kik kik ki; ki; kkk iii ddd kid kid sss iii rrr sir sir kid skid; lid slid; fir fire; rise ride" ' aaa sss ded frf rrr juj kik iii lll ;;;P U a jade jar; ask a kid; a full fir falls~ if a fire is red; see if a deer is red;È ENDö ask a lad if a deer is fed a leaf salad frf juj ded kik ddd kkk sss lll aaa ;;;  ask a fair lad if a fis fads fads adds adds sass sassNS a sad lass; ask a dad; as a salad falls| a al ala alas alas; f fa fal fall fallsê a as ask asks asks; s sa sal sala salad a ad add adds adds; f fl fla flas flask  a lass falls; ask a lad; a salad falls; END>C sad dad adds; ask a dad; a flask falls;lq alas a salad; lass asks; add a sad lad;Ú a sad dad asks a sad lass; add a salad; ddd ded ded dea dea ddd ded ded dea dea fff eee ddd fed fed lll eee ddd led led$) fed .3 aaa sss ded frf fgf fvf jhj juj kik lol\a have a hoe; has a vase; she held a veilÊ he has a valve; he has a villa for saleø she has saved five valves for his villa fvf jhj fgf juj frf kik ded lol sss ;;; see if five elves have held four valves END/$soon become a fantastic typist.'FPractice your drills often and you willp TRIES.z LINES RIGHT ONEND OF LESSON TOTALS:TRIES. LINES RIGHT INEND OF DRILL. NO, try againG O O D ENDTHEN HIT RE:!N0:A![c!;ͩ9! c͠ v  æ!͢gA!2K! QA! cA!c!͢!h!A!K!c!ͩ!%!%5A!c8\!!v!A!cA!K!9!K!9!c((,,NA!K!(9!wK!,9!mcA!CcA!!c fff fff fff ff ff ff f f f f" re is fed a leaf;@ E fff fgf ggg fga fga fff fgf ggg fga fgan s fff iii ggg fig fig ggg aaa ggg gag gagÜ lug flag; keg gull; leg gall; fug glad;æ END lll lol lol loj loj lll lol lol loj loj  lll ooo ggg log log ooo lll ddd old old0 5 odd rose; old gold; sold oil; rose for;^ c a red flag; a glad gull; red roses fallÌ see if a gull is glad; sells four rosesú girls sold lads red jugs for salad oils END fgf frf juj ded kik lol sss lll aaa ;;; % lads see  TURN KEY.& INSTRUCTIONS: RETYPE EACH LINE EXACTLY5DRILL >WHAT TYPING DRILL DO YOU WANT1^TO END DRILL, TYPE A 0. DRILLS ARE NUMBERED 1-12.`/[[[[ BASLIB #900111 5.01 - OWNED BY MICROSOFT, 1979 < ~#DM*"}*w ##"{î>22*^#V"##^#V"!"6#6P>2>2>2ff]_#~#fo"/2/!/<1s#r6F >E,>"s#r!9"u*L*F!6#}|3!{6#z*J|> Y6#s#r#=>2o> has hash; hold hoe; had halN#"5!9"0"2y24*|]*!4"A~#*7a-~4ˆ"Ë""7ʱʽ *.*.*~.*|.H"*. *.*.*7a-~#"7,4e~4!"~,"#"~# 4"#"7x") )+~ y"ͷ?Redo from Start =!`ͩ*5:4Od*2+~+ʎʀʀ +w ‚Ù++~#fo"2!45*0o~2#~#^#Vy ++3*~##++Ĭ>r-+V+^++r+s~#^#V3>"',G:x,*+~<===###~=*,!**~=Q/<́p=]u:> ',>,',W*#^ ̣ʝ+ڝ,z{ڵ{_çͽ~ʹ,#ý~!Ni&d G~##++*|&!9"*30:>ô,!"!"2W!~6#w .>Ù |.>ÙH".>r- ~,"¶#"~# ¹Y"#6y"*B^#V#"|"~^#V#! 2>>ì"~R# !R !.*!>!.|.21!# 0!!.0!."͑.>>S!>|}+!"0!ͺ6+6!.>B22{.!"4!"0!.0~_#~W#~O8q4!s)n4!6¬!ɇ<o&!N6*.*.!".`i".!.^#V#N#F#!"o57x{7!.66wg>O8 8": Gw#""*"!.".)|.)"*.||<)*.d"$"!o)":! g"͞!:.2.:.*!:.ˆ"Í""|/g}/oç"!*:.Ұ"!".>2 ͤ!ajæ" L} !*>2 `ḩ"~&*-"+"+2r>2q2t"w!j"2 ͷ * STOP <ͷ * END *.. . ........=*|C:®*|ʮ̓*F s#r*F {w#6"*u*>2ͷError -!~<=#~##ͽ)Syntax Error in DATRETURN without GOSU Type MismatcOut of DatIllegal Function CalFloating OverfloInteger OverfloOut of Memor Subscript Out of Rang Division By ZerOut of String SpacRESUME without Erro2Field Overflo3Internal Erro4Bad File Numbe5File Not Foun6Bad File Mo"^#V#^#V#O-^#V#.O-GNVyV#~#fo~#fo_#U E y_y<.i)i)33 errorln uatnr_!x4¬5*y"y~#N#F# m-ïyx ï+++6@#yw#xw+++6###!x~6ì\*y#~#~ҬS!*{"y~#^#V#Y8m-|D++~_w#~Ww#*{DM~#^#V#ڶve+zw+{w##{z~#q#p_ey«x«DMe~#«eYP+++"y6@###{_zW+r+s*|S^#V+"͜#s#r+++r+s##*s"|+V+^"~>2 "6:*|a-~=\a-~,D#"|ɧW*~"|+V+^"~b>x>x>x>x>x>^#V#^#V#,>â>â>â>â>â>^#V#!,>>>>>>*~#fo##?-^#V#n4^#4-?-^#V#o5 ^#4-)#.ʀ#e#E/#)l(#L(#q(#Q>H#~%ʍ##ʗ#!ʘ#dH#D_#͞#)))C$_#_{_##c#̵ )!!Ͱ") _#ܞ#")*#_#͞#Ó# )!!=)z!]!Input Past En?Bad Record Numbe@Bad File NamCToo Many FileUnprintable Erro!9N#F*@~#~Ҵ~+ʺ~#~ڴ+^#V###Ò###Ò~#fo*@~#ͷ at lin̓A]ͷ at address|*}*> ʹ,> ô,!9"m*miJtJJKJigtgguit.Ê|.Ê".ÓH~# ‹x2 :A͏$<́~ʼ',#ð͏$~ʼ ',#>2 :AF#~#fox́~#', {z*u ?}|~# yGxr-ͬ*s *u ̀-s m#^#V+V+^̀-wͬ###Cͷ BASIC System Error - String Space Corrupt vw#N#F*{yx*}yx6+6+~6  >@++*"s#r+\*y#~_#~W _r+s##6"}###!~#fo/ ̀- <*{"y*}}o|g6@#s#r#6"}*u *s "}w>#w##̀-Z ++6+6Ɂs8~ʹ,#={ =#~ ¼=î=E:x+#=~=24=24:4) *.}/o|/g#".|!N6 !.~wɯ2.) ͟2!*.!N6)  .%+60{%+6${+p2 ! 6 ;!*|.*~.2 %E~m%:M%0M% #~>%>DG<%"|.`i"~.#~+ʴ%-ʋ%0OxGҴ%#~r%`xE©%y ]%>2 ù%|]%á%]%"|.`i"~.!#W': %%%%a(60!͈(+~0&.!6&)>"w#6+'&6-/</ )&:#p#w#6! #zҷ&T'Y(z5( ){[!=5($l&p#6! #: ~ q&*q&+&)-+$0¯&#)ү&++wʥ&r&ʯ&6%['&w)@!&͏$+6%ͤ!&"''_x5(L(͈(E(+2!-qA-!.̓1?!/-!.v1:.<=H1!|.1!-1x/!.5/Ë0!.N#Fͺ6+6/!.>B2\12{.:|.ͩ1 8x/F+N+=/!./!|.>q#p#=/!|.0"-//ͮ/*-ʹ27:.7!.N#F5+2q>0Gp1n2x '00é1!.J260j0 TeB׳]h!I.k ͨ/72Å0ͨ/v2!.0!.q#~++w+q 0 8DNn"~`35zr1{r1h!Iʹ2 8yO2.0ʹ2 8:+*+++~+1+++1+++!92+4+,O*:+J+>\+2+yʴ++7 + ʴ+ n+*ô++*Œ+*+> +>+–+>#+¯+6+!9+1+ 1+x<>ʿ+yq#+ 1+> +,+ 1+4+:+wô,>^+@++~ ,> ++#+I> ',> ',G* >,#~+<=,=, ̞,̡, ʥ, T,4+~<},=š,R :Gz,Rm,:”,<2*"%,!,"Y*654> ',~=¦,*!"',"> Y> Y*%,, G,,~#fo,##->6ͱ6!D*.:.O#5.4ʑ7;5K5g.*i.:k.Oz$5K5g.*.:.15x<=b5{_zWxG)yOHGâ7`6r577 85y+F+F+Fw`h|ʿ5gyң5:.O|g}oxG-|—5}’56ElaOÑ5!.~Gx5ƀ7wͺ6w+ɷ777x{7!.66wg6z6 >O8|Դ7{>2.6/(t(²'[!~.!" ڹ'&b&կ)':.'W)!."͆! '()'COͤ!(_)@!(ͮ#'ͽ#()*(t#ͤ!0(g)@! (=60#6(E(t(60#=A({ t(/>'!ұ(>'!p#=¨(!|.!(͞!>!!)?t(!/{_#zW.ʋ/1/<͋/9 8:.Oͺ6G2.!.B2:.2{.x!.|.1y1H14n2:{.\1!.~++w 8!|.4#a14ʋ0+6!.|.# y1ɯ# †1͆1ҩ1/!{.Oyw#¡1G:.1!{.Vwz# ·1xª17!{.11xH1!.w7H1~w# 1ͨ/722ͨ/v2!.0ͨ/72"2ͨ/v2͋/!.0y2.!.-~q+82qY2NsY+N2D2 W~w+c2\2!.`2N627!|.w#…2 8͖2}2͟222ͺ6!.F#^#V#Nâ72}.~#¹2G++Ny8|.÷2!.7>32837!.66g>O-~+~?~-+#)-+ )-&)))0^#V#!.O-O-w#w#w#w##~ `- `-Ʌo$ɧGw#v-{z} :AJJ!͹EUJ:J!dEK!͹EKI!͹E>K*KI!;K=JKKK!5C!>5=#K>!N#F#=0K>!p+q+=AK:ʋM͇D4M͝K!qA>I?tK>I:<=I!LJ!JJxbK!5bKCy2+~q+¨KEʹ2.. 8O.!8!.y#½.+°. 8?8ͨ/72.ͨ/v2͋/!.ʹ2J/:. 8:./68 587>{_zW}o|g=,8|g}o^8CZQQ8 o-yOzW{_xGa8.*.DM^#V##yO++(͌!#!p#(>&))>t(N#F#*./}o|g9)".p#=&)t(w1_cƤ~@zZrN vH Tʚ;@B''d #~: )0?<=: )7-++)͈*O*H*+*&*ͧ"H#R*,*PM!>*<*}0?)))صo>*M!d*b*}͈*0? z*? ))))صod*a{ H"):.:.Ø!: 2 2 PV!"!9"7*:*ͷ?*p,#+:+>\2+ 8|ԣ6>2ak7i35i3 87w3 836G35!6|7S3!i3d363u5Æ3>O!.~+>w 8QY76 8:.ҽ3hڵ365Ɓʽ3ͱ64!3C4Jy5QY7 87Ñ7|Yt&wz^Pc|u~r173>2.! 4C46ogN6t4 }}{(qnz 67u5C4u56~#7=xr57t4N4`6q47 8:.7҄4/<ͱ6 8ͺ6gO8!.4~_#~W#~OҢ7#4ʑ7.e8â7G~_#~W#~Oܝ66`647 8>Ot4`647ʑ6 8ȯG5"i.y2k.Fo  ------------------------------------------------------------------------------- | | | Hi there my name is: | | | | JUDY COMPUTER ! | | | | YOU TOO can learn to TOUCHTYPE in only eight hours. | | | | | | Will set program to DEFAULT values. | | | | | | Will further explain the question being asked. | | (HELP!!!!!)  frustrating at first. PS. Most HELPs are not this long!! Hit to return to program or to end. n 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 yo 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 t | | | | ENABLES the function. | | | | | | DISABLES the function. | | | | | | HIT appropriate key to CONTINUE. | -------------------------------------------------------------------------------  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 anticipu 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 yping 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. Type for ECHO OFF. Type for ECHO ON.  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 screeated that you would use it a lot. Type for ERROR BREAK ON. Type for ERROR BREAK OFF.    - 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. rint 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. DEO ATTRIBUTE CONTROL STRINGS ------ 86' 87'*************************************************************** 88' FUNCTION NAME STANDARD CHAR. GEN. ALT. CHAR. GEN. 89'*************************************************************** 90' 91'Reset to Normal Video 92STDVID$=ESC$+"G"+"0" 94' 110'Reversing of Area 111REVSTD$=ESC$+"G"+"4" 113' 126'------ DYNAMIC EDITING CONTROL STRINGS ------ 127' 128'*************************************************************1'********************************************************************** 2'* PROGRAM FUNCTION: Touch Typing Tutor. * 3'* VERSION : 2.0 (Direct Cursor Addressing & Help.) * 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'*******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," "," " ** 129'OPERATIONHOW TO EXECUTEDESCRIPTION 130'*************************************************************** 131' 132'Clear Screen Clears to SPACES 133CLRSCR$=ESC$+"+" 134' 157'Line Erase 158LINERA$=ESC$+"T" 159' 160'Character Delete 170CHRDEL$=ESC$+"W" 180' 181'Definition of CURSOR LOAD Function. i.e. Pushing the Cursor Around Onscreen. 182DEF FNCSRLD$ (ROW%,COLUMN%) = ESC$+"="+CHR$ (ROW%+31)+CHR$ (COLUMN%+31) 183' 200'Write Protect Mode On 201WRTPRTON$=ESC$+")" 203'Write Protect - 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 - P*************************************************************** 15' 20'######################## 21'###### SECTION 1 ###### 22'######################## 23' 48'>>>>>>>>>>>>>>>>>>>>> ADM-31 ASCII CONTROL CODES <<<<<<<<<<<<<<<<<<<<< 49' 50'*************************************************************** 51'FUNCTION NAMESTRING NAMEASCII CODE 52'*************************************************************** 53' 72'Return 73RET$=CHR$ (13) 74' 75'Escape 76ESC$=CHR$ (27) 77' 85'------ DYNAMIC VI   Mode Off 204WRTPRTOFF$=ESC$+"(" 205' 900'********************************************************************** 910' 915'######################## 920'###### SECTION 2 ###### 925'######################## 930' 1000 '>>>>>>>>>>>>>>>>>>>>>>>>>> ALTERATIONS <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1010 ' 1020 'Date.Description. 1030' 1040' 28/06/82Reformat HELP presentation. RB 3950' 29/06/82Added SECTION headings. RB 3951' 03/07/82Added [%] to PARAGRAPH variable in Paragrho 5700COMMENTROW% = ROWOFFSET%-7 'Comment area 5710COMMENTCOLUMN%= 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' 6250PRINTCLRSCR$ 6260IF CHARACTER$ = "N" THEN 6760 63 127'ASCII escape character from typing exercise mode. 4500ESCCHR$ = "RUB"'String to print name of above character. 4660FILENUM1% = 1'Filenumber for exercise files. 4670FILENUM2%= 2'Filenumber for help files. 4680FILENUM3%= 3'Filenumber for keyboard data. 4700EXLINELENGTH% = 80 4750 COMMENTSTACK% = 0 4800 NUMOFREPEATS%= 0 4850 PARAGRAPH% = 0 4900ARRAYROWS% = 1 4950ARRAYCOLUMNS%= 2 5100' 5150WIDTH 255'Remove 's from long lines 5160ON ERROR GOTO 40000'Error hanORT%,2: CHARACTER$ = CHR$(INP(DATAPORT%)) 7250GOSUB 21400'[1]:CAPITAL LETTER 7300 IF CHARACTER$ < "A" OR CHARACTER$ > "J" THEN 7150 7400PRINTFNCSRLD$ (COMMENTROW%,COMMENTCOLUMN%); LINERA$; 8050FILE$ = "TTYPEX"+CHARACTER$+".DAT" 8051' 8052'---------------------------------------------------------------------- 8053'###### 4d ###### 8054' 8060GOSUB39500'[9]:PRINT HELP MENU 8100PRINTFNCSRLD$ (13,1); LINERA$; FNCSRLD$ (ROWOFFSET%,10); LINERA$; "Echo ?"; 8110WAIT STATUSPORT%,2: CHaph 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/82Moved "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 4000'********************************************************************** 4010' 00HELPNUM$= "0": GOSUB 23300 6550GOSUB 21400'[1]:CAPITAL LETTER 6600IF CHARACTER$= "N" THEN 65529 ELSE IF CHARACTER$ = "?" THEN HELPNUM$ = "1": GOSUB 23300: GOTO 6550 6650' 6700'---------------------------------------------------------------------- 6750'###### 4b ###### 6752' 6760GOSUB39500'[9]:PRINT HELP MENU 6800PRINTFNCSRLD$ (ROWOFFSET%,10); LINERA$; "Error break ?"; 6810WAIT STATUSPORT%,2: CHARACTER$ = CHR$(INP(DATAPORT%)) 6900GOSUB 21400'[1]:CAPITAL LETTER 6950IF CHARAdling department. 5170DELAY%= 500'Time delay factor (See 34100) 5200' SCREEN ADDRESSES 5250' 5300LHS% = 1'Set the left hand side of the screen 5310RHS%= 80 5350TOP% = 1'Set the top of the screen 5400ROWOFFSET% = TOP%+15 'Keyboard display 5450COLUMNOFFSET% = LHS%+10 'Keyboard display 5500EXERCISEROW% = ROWOFFSET%+5'Exercise line 5550EXERCISECOLUMN% = LHS% 'Exercise line 5600ECHOROW% = EXERCISEROW%+1 'Typing Echo 5650ECHOCOLUMN% = EXERCISECOLUMN% 'Typing EcARACTER$ = CHR$(INP(DATAPORT%)) 8200GOSUB 21400'[1]:CAPITAL LETTER 8250ECHOFLAG% = 0 8300IF 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'4012'######################## 4015'###### SECTION 3 ###### 4017'######################## 4020' 4050'>>>>>>>>>>>>>>>>>>>>>>> INITIALISING BLOCK <<<<<<<<<<<<<<<<<<<<<<<<<<< 4100' 4150' 4160DIM PARAGRAPHIN$ (20),ADDRESS% (140,2) 4170DIM DISPLAYCHAR% (127),COMMENT$(5) 4180' 4200'The following addresses and values are system dependant. 4250' 4300DATAPORT% = 0'Decimal address of system dataport. 4350STATUSPORT% = DATAPORT%+1'Decimal address of system statusport. 4400' 4450ESCTYPE% =CTER$= "Y" THEN ERRORFLAG% = 1 ELSE IF CHARACTER$ = "?" THEN HELPNUM$ = "2": GOSUB 23300: GOTO 6900 ELSE ERRORFLAG% = 0 7000' 7050'---------------------------------------------------------------------- 7100'###### 4c ###### 7105' 7110GOSUB39500'[9]:PRINT HELP MENU 7115PRINTFNCSRLD$ (COMMENTROW%,COMMENTCOLUMN%); LINERA$; "Any LETTER is a valid exercise but presently (28/06/82) only A-J exist." 7150PRINTFNCSRLD$ (ROWOFFSET%,10); LINERA$; "Which Exercise ?"; 7200WAIT STATUSP   8500PRINTCLRSCR$ 8550' 8600GOSUB 29500'[5]:PRINT KEYBOARD 10950' 11300'set up input file. 11400OPEN "I",#FILENUM1%,FILE$ 11500' 11550'Remove old line 11600ECHOCOLUMN% = LHS% 11650LINEFLAG% = 0 11700PRINTFNCSRLD$ (EXERCISEROW%,EXERCISECOLUMN%); LINERA$; FNCSRLD$ (ECHOROW%,ECHOCOLUMN%); LINERA$; 11750TYPEDIN$= "" 11800'Check that it is not a paragraph 11850IF PARAGRAPH%= 0 THEN 12300 11900ALINE$ = PARAGRAPHIN$ (NUMOFTEXTLINES%): NUMOFTEXTLINES% = NU TO EXLINELENGTH% 14450IF ILOOP% = EXLINELENGTH% THEN LINEFLAG% = 1 14500CHARACTER$ = MID$ (ALINE$,ILOOP%,1) 14550ASCIINUMBER% = ASC (CHARACTER$) 14600'Change ROW% and COLUMN% for different Direct Cursor Addressing. 14650ROW% = ADDRESS% (ASCIINUMBER%,ARRAYROWS%) 14700 COLUMN% = ADDRESS% (ASCIINUMBER%,ARRAYCOLUMNS%) 14750PRINTFNCSRLD$ (ROW%,COLUMN%-1); REVSTD$; CHARACTER$; STDVID$; 14760PRINT FNCSRLD$ (ECHOROW%,ECHOCOLUMN%); 14800'Program waits for change of input status. 14850FREPEATS%= VAL (MID$ (ALINE$,3,1)) 13500LINESINPARA% = VAL (MID$ (ALINE$,5,2)) 13550PARAGRAPH% = 1 13600NUMOFTEXTLINES%= 1 13650FOR ILOOP% = 1 TO LINESINPARA% 13660'PARAGRAPHIN$ contains up to 20 lines of input for repeating whole paragraphs. 13700LINE INPUT# FILENUM1%,PARAGRAPHIN$ (ILOOP%) 13750NEXT ILOOP% 13800' 13850GOTO 11550 13900' 13950'CHECK FOR COMMENT 14000IF LEFT$ (ALINE$,2) = "!#" THEN GOSUB 33020: GOTO 11550 14050CHARCOUNT% = EXLINELENGTH% 14100PRINT FNCSRLD$ (EXERCISE 0 THEN 16950 16350IF ECHOFLAG% = 0 THEN 11550 16400'Display line that was typed in but not echoed previously 16450PRINT FNCSRLD$ (ECHOROW%,ECHOCOLUMN%); TYPEDIN$ 16500'Program waits for change of input status. 16550WAIT STATUSPORT%,2 16600'Program reads data from dataport. 16650KEYBDCHAR%= INP (DATAPORT%) 16700IF KEYBDCHAR%= 13 THEN 11550 16750IF KEYBDCHAR%= ESCTYPE% THEN 17200 16800' 16850GOTO 16550 16900' 16950NEXT ILOOP% 17000' 17050'End of keyboard scan 17100'MOFTEXTLINES% +1: IF NUMOFTEXTLINES% = LINESINPARA%+1 THEN NUMOFREPEATS% = NUMOFREPEATS%-1: NUMOFTEXTLINES% = 1: IF NUMOFREPEATS%= 0 THEN PARAGRAPH% = 0 12150' 12200GOTO 12700 12250' 12300IF NUMOFREPEATS%= 0 THEN 12550 12350NUMOFREPEATS%= NUMOFREPEATS% -1: GOTO 14050 12500' 12550IF EOF (FILENUM1%) THEN PRINT FNCSRLD$(EXERCISEROW%,EXERCISECOLUMN%+15); LINERA$; "END of EXERCISE, Please WAIT for MENU.";: GOSUB 34100: GOTO 17200 12600' 12650LINE INPUT# FILENUM1%,ALINE$ WAIT STATUSPORT%,2 14900NUMOFWORDS = NUMOFWORDS+.2 14950'Program reads data from dataport. 15000KEYBDCHAR%= INP (DATAPORT%) 15050PRINT FNCSRLD$ (ROW%,COLUMN%-1); WRTPRTON$; STDVID$; CHR$ (DISPLAYCHAR% (ASCIINUMBER%)); WRTPRTOFF$ 15100IF KEYBDCHAR%= ESCTYPE% THEN 17200 15150IF KEYBDCHAR%= 13 THEN LINEFLAG% = 1: GOTO 16250 15200' 15300' 15350IF ECHOFLAG% = 1 THEN TYPEDIN$ = TYPEDIN$+CHR$ (KEYBDCHAR%): IF KEYBDCHAR%= ASCIINUMBER% THEN 16250 ELSE 15700 15450'ChanROW%,EXERCISECOLUMN%) 14150PRINT 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' 14400FOR ILOOP% = 1 17150GOTO 11550 17151' 17160'********************************************************************** 17200' 17201'######################## 17202' ###### SECTION 7 ###### 17203' ######################## 17204' 17210'>>>>>>>>>>>>>>>>>>> SECTION PROVIDES POSSIBILITIES <<<<<<<<<<<<<<<<<<< 17220' TO ESCAPE OR ALTER PROGRAM FLOW. 17230' 17250HELPNUM$ = "4": GOSUB 23300: GOTO 17450 17450CHARACTER$ = CHARACTER$+"e" 17500 GOSUB 21400'[1]:C12700ALINE$ = ALINE$+CHR$ (13) 12750IF PARAGRAPH% = 0 THEN NEWLINE% = NEWLINE%+1 12800EXLINELENGTH% = LEN (ALINE$) 12850'CHECK for repeated line. 12900IF LEFT$ (ALINE$,1) <> "|" THEN 13950 12950CHARACTER$ = MID$ (ALINE$,2,1) 13000GOSUB 21400'[1]:CAPITAL LETTER 13050IF CHARACTER$ = "P" THEN 13400 13100NUMOFREPEATS%= VAL (CHARACTER$)-1 13150EXLINELENGTH% = EXLINELENGTH%-2 13200ALINE$ = RIGHT$ (ALINE$,EXLINELENGTH%) 13250' 13300GOTO 13950 13350' 13400'Paragraph Read In. 13450NUMOge the typing Echo definition in the next line for different Dir Cus Adr. 15550 PRINT FNCSRLD$ (ECHOROW%,ECHOCOLUMN%); CHR$ (KEYBDCHAR%); 15600ECHOCOLUMN% = ECHOCOLUMN%+1 15650IF KEYBDCHAR%= ASCIINUMBER% THEN 16250 15700'Error 15750ERRORCOUNT% = ERRORCOUNT%+1 15800 CHARCOUNT% = CHARCOUNT%+1 15850IF ERRORFLAG% = 0 THEN 16250 15900ECHOCOLUMN% = ECHOCOLUMN%-1 15950PRINT CHR$ (7) 16100IF ECHOCOLUMN% < 0 THEN ECHOCOLUMN% = 0 16150' 16200GOTO 14750 16250' 16300IF LINEFLAG% =   APITAL LETTER 17510' 17550IF CHARACTER$ = "N" THEN CLOSE FILENUM1%: GOTO 4300 17560' 17760' 17800IF CHARACTER$ = "R" THEN NUMOFREPEATS% = NUMOFREPEATS% +1: GOSUB 29500: GOTO 11550 17850' 17900IF CHARACTER$ = CHR$(13) THEN GOSUB 29500: GOTO 11550 17930' 17990' 18000IF CHARACTER$ = "M" THEN HELPNUM$ = "5": GOSUB 23300: GOTO 17450 18040' 18050IF CHARACTER$ = "S" THEN GOSUB 32110: GOSUB 29500: GOTO 11550 18090' 18100IF CHARACTER$ = "L" THEN PRINT FNCSRLD$( 22700'IF INSTROW% >= TOP%+6 THEN INSTROW% = TOP% 22750'RETURN 22800' 22850'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 23270' 23300'Subroutine [4]: Access and PRINT HELP Files. 23310' 23320PRINT CLRSCR$ 23330OPEN "I", # FILENUM2%, "TTHELP"+HELPNUM$+".DAT" 23340IF EOF (FILENUM2%) THEN WAIT STATUSPORT%, 2: CHARACTER$ = CHR$ (INP (DATAPORT%)): CLOSE # FILENUM2%: PRINT CLRSCR$: RETURN 23350LINE INPUT # FILENUM2%, LINES$ 23360IF LEFT$ (LINES$,1) = "#" rns first letter of a string as a CAPITAL. 21450' 21500CHARACTER$ = LEFT$ (CHARACTER$,1) 21550IF CHARACTER$ > "`" THEN IF CHARACTER$ < "{" THEN 21650 21600RETURN 21650CHARACTER$ = CHR$ (ASC (CHARACTER$)-32) 21700RETURN 21750' 21800'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 21850' 21900'Subroutine [2]: Prints ERROR COUNT message and total. 21950' 22000PRINT CLRSCR$ 22050PRINT FNCSRLD$(COMMENTROW%,COMMENTCOLUMN%+10); ERRORCOUNT%; " ERRORS in"; NUMOFWORDOWS%) = ROW% 30550ADDRESS% (ASCIINUMBER%,ARRAYCOLUMNS%) = COLUMN% 30600PRINT FNCSRLD$ (ROW%,COLUMN%); CHARACTER$; 30650'Keep record of character corresponding to this address 30700ADDCHAR$ = ADDCHAR$+CHARACTER$ 30750DISPLAYCHAR% (ASCIINUMBER%) = ASCIINUMBER% 30800 COLUMN% = COLUMN%+4 30850NEXT ILOOP% 30900COLUMN% = COLUMN%-4*NUMOFKEYS% 30950FOR ILOOP% = 1 TO NUMOFKEYS% 31000INPUT # FILENUM3%, CHARACTER$ 31050'SAVE shift character address (BASIC can't get a " from data) 31100IF ILOOCOMMENTROW%,COMMENTCOLUMN%+10); " Exercise line Number is; "; NEWLINE%;: GOSUB 34100: GOTO 17250 18145' 18150IF CHARACTER$ = "W" THEN 18160 ELSE 18250 18160GOSUB 21900'[2]:ERROR COUNT 18165PRINT FNCSRLD$(COMMENTROW%,COMMENTCOLUMN%+10); LINERA$; "Reset ERROR count (Y/N) ?"; 18166WAIT STATUSPORT%,2: CHARACTER$ = CHR$(INP(DATAPORT%)) 18170GOSUB 21400'[1]:CAPITAL LETTER 18190IF CHARACTER$ = "Y" THEN NUMOFWORDS = 0: ERRORCOUNT% = 0: GOTO 17250 18196' 18197' 18198' 18THEN WHILE INKEY$ <> RET$: WEND: PRINT CLRSCR$: GOTO 23340 23370PRINT LINES$ 23380GOTO 23340 23400' 29450'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 29460' 29500'Subroutine [5]: Set up Addresses & Keyboard locations 29550' and PRINT KEYBOARD. 29600' 29605PRINTFNCSRLD$ (1,25); LINERA$; WRTPRTON$; "Hit "+ESCCHR$+" key for MENU"; 29606' 29610OPEN "I",# FILENUM3%,"TTKEYBD.DAT" 29620' 29650ROW% = ROWOFFSET% 29700COLUMN% = COLUMNOFFSS; " Words ";: GOSUB 34100 22100IF ERRORCOUNT% = 0 THEN RETURN 22150PRINT " I.E."; NUMOFWORDS/ERRORCOUNT%; " Words per error": GOSUB 34100 22200RETURN 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 P% = 2 THEN IF JLOOP% = 1 THEN CHARACTER$ = CHR$ (34) 31150ASCIINUMBER% = ASC (CHARACTER$) 31200ADDRESS% (ASCIINUMBER%,ARRAYROWS%) = ROW% 31250ADDRESS% (ASCIINUMBER%,ARRAYCOLUMNS%) = COLUMN% 31300DISPLAYCHAR% (ASCIINUMBER%) = ASC (MID$ (ADDCHAR$,ILOOP%,1)) 31350'DISPLAYCHAR% (ASCIINUMBER%) now contains the normally displayed char. at the pos'n of l$ 31400COLUMN% = COLUMN%+4 31450NEXT ILOOP% 31500COLUMN% = COLUMN%-4*NUMOFKEYS%+2 31550ROW% = ROW%+1 31600NEXT JLOOP% 31610PRINT WRTPRTO250IF CHARACTER$ = "Q" THEN SYSTEM 18300' 18320IF CHARACTER$= "E" THEN GOTO 65529 18350GOTO 17250'IF NOT MATCHED, RETURN TO MENU 20800' 21150' 21200'********************************************************************** 21250' 21251'######################## 21252' ###### SECTION 8 ###### 21253' ######################## 21254' 21255'>>>>>>>>>>>>>>>>>>>>>>>>>>>> SUBROUTINES <<<<<<<<<<<<<<<<<<<<<<<<<<<<< 21300' 21350' 21400'Subroutine [1]: RetuET% 29750FOR ILOOP%= 1 TO 140 29800ADDRESS% (ILOOP%, 1) = 1 29850ADDRESS% (ILOOP%, 2) = 1 29900NEXT ILOOP% 29950 'ADDRESS% contains the character addresses. DISPLAYCHAR% 30000' contains the displayed character corresponding to that address. 30050' 30100FOR JLOOP% = 1 TO 5 30150INPUT # FILENUM3%, NUMOFKEYS% 30250ADDCHAR$ = "" 30300FOR ILOOP% = 1 TO NUMOFKEYS% 30350INPUT # FILENUM3%, CHARACTER$ 30400ASCIINUMBER% = ASC (CHARACTER$) 30450'Save character address 30500ADDRESS% (ASCIINUMBER%,ARRAYR  FF$ 31620CLOSE FILENUM3% 31650'End of keyboard setup 31700' 31750RETURN 31760' 32000'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 32100' 32110'Subroutine [6]: SKIP Exercise LINES. 32120' 32130PRINT FNCSRLD$(COMMENTROW%,COMMENTCOLUMN%+10); "Number of lines to SKIP ?"; 32135WAIT STATUSPORT%,2: NUMOFLINES% = VAL(CHR$(INP(DATAPORT%))) 32140FOR ILOOP% = 1 TO NUMOFLINES% 32150IF EOF (FILENUM1%) THEN 12550 32160LINE INPUT# FILENUM1%,INPCHAR$ 32170NEXT ILOOP% 32180FILENUM2%,DRIVE$+"TTHELP"+HELPNUM$+".DAT": RESUME 23340 65500'********************************************************************** 65529END 39500'Subroutine [9]: PRINT HELP MENU. 39510' 39520PRINT FNCSRLD$ (TOP%,10); " - Will PRINT an explanation of the question. " 39530PRINTFNCSRLD$ (TOP%+2,10); " - ENABLES the function." 39540PRINTFNCSRLD$ (TOP%+4,10); " - DISABLES the function." 39550PRINTFNCSRLD$ (TOP%+6,10); " - Is the DEFAULT condition." 39900' 39905RETURN 39910' 39999'********************************************************************** 40000' 40001'######################## 40002'  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 . NUMOFREPEATS%= 0 32190NEWLINE% = NEWLINE%+NUMOFLINES% 32200' 32210PRINTFNCSRLD$ (COMMENTROW%,COMMENTCOLUMN%+10); LINERA$; 32220RETURN 32230' 33000'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 33002' 33020'Subroutine [7]: COMMENT PRINT 33025' 33070IF EOF(FILENUM1%) THEN RETURN 33080' 33082COMMENT$(0)= MID$(ALINE$,3) 33084FOR ILOOP%= 1 TO 4 33090LINE INPUT #FILENUM1%,ALINE$ 33095COMMENT$(ILOOP%)= MID$(ALINE$,3) 33100NEXT ILOOP% 33101' 33105FOR ILOOP%= 0 TO 4 33 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 pub ###### SECTION 9 ###### 40003' ######################## 40004' 40005'>>>>>>>>>>>>>>>>>>>>>>>>>> ERROR TRAPPING <<<<<<<<<<<<<<<<<<<<<<<<<<<< 40020' 40030DRIVE$="B:" 40100IF ERR = 53 AND ERL = 11400 THEN CLOSE #FILENUM1%: OPEN "I",#FILENUM1%,DRIVE$+FILE$: RESUME 11600 40400' 40410IF ERR = 53 AND ERL = 29610 THEN CLOSE #FILENUM3%: OPEN "I",#FILENUM3%,DRIVE$+"TTKEYBD.DAT": RESUME 29650 40500' 40510IF ERR= 53 AND ERL = 23330 THEN CLOSE #FILENUM2%: OPEN "I",# 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 110PRINT FNCSRLD$(COMMENTROW%+ILOOP%,COMMENTCOLUMN%); LINERA$; COMMENT$(ILOOP%) 33120NEXT ILOOP% 33130' 33180RETURN 33190' 34000'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 34050' 34100'Subroutine [8]: TIME DELAY. 34150' 34200FOR TIMEOUT% = 1 TO DELAY% 34210FOR MORE% = DELAY% TO 1 STEP -1 34220WASTE% = WASTE%+1 34230NEXT MORE% 34300NEXT TIMEOUT% 34350RETURN 39000' 39010'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 39020' lic 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  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 termlowing 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 cCII 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  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 inal 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 coluertain 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 berserMBASIC 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). Fol 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 digimn 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 ASk! (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.   t 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 |3o 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 cursorEAT 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 te 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".aaa 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 on 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 bills 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, s 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 quee 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 - REPt. 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".) *  stions 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 ater 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 cter 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 agp 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 cen 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 perffor 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 dain 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 afrtain 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 COMMEormed: * 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 charaescription; * 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 loo  NT 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. Prins; 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;  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. 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 ;;; !#ts 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. !#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!#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 ask !# 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; 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; . !# !# 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   !#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. !# !# Use the F finger. Keep [A] [S] [D] fingers at home & move !# only the F finger. !# Type 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 fa |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. !# !# !# But you've got a keyboard..(and bloody fingers), lucky you! tt 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. !# !# Analyse each line, then type these without looking down !# 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; !# TOO many ERRORS means that you are pushing too hard forf rug rug frf are are frf !# The [.] key. !# !# Use [L] finger. !# Keep [;] finger anchored at home. !# |3lll l.l ... lll l.l ... lll l.l ... l.l !# !# Your arms should not flap around like a pidgeon coming in !# on a strafing 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. !# !# Use the [J] finger. Anchor the K L ; fingers then !#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 !#  !# !# r !# speed or being careless, not enough means the opposite. !# !# Don't stop or look down on the following 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. race !# through the 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. !# !# To capitalise letters on the RHS of the keyboard. Keep [F] !# finger home & hold down left shift key with [A] finger.Strike !# the letter key & return all fingers to their home position. |3aaa Jaa Jaa aaa Kaa Kaa aaa Laa Laa aa The [O] key. !# !# Use [L] finger. Keep either [J] or [;] finger at home, !# or whichever is easier, at 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 t!  !#Exercise E. !# !# REVIEWING the keys you know. !# Set a good pace on easy line 1. Then keep it on the next !# 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 !# !# !# Note the pattern. Speed up & keep a steady, smooth pace on !# 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 arkch letters did you make the most mistakes? !# !# REPEAT appropriate exercises in the following 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!#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. !# !# Use [K] finger, keep [;] [&] [l] at home; curl [K] finger, !# to ease 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] k |2Fil fir far fur for Joe jog jag jug jig |2Go; go; got get gat gag Hal hat hit hut hot !# !# !# Keep pace steady and increase speed on the 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 th 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 minu!#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 whiey. !# !# Use [D] finger. Keep [A] & [S] fingers anchored; curl [D] !# finger for easy reach. Repeate these lines if 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 !# !# !# Can you finish this sentence in one minute. Note space after !# comma. !# |P2,02 Get Carol, Charles, or Cathie to act as a guide; the others are to check cois 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. te. !# !# |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!. !# !# "  ats. !# The [M] key. !# !# Use [J] finger. Keep [K] [L] [;] at home. Speed up on !# 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. !# !# Keep [J] [K] [L] anchored. Note space after Period Two !# spaces after colon. !# |3;;; ;:; ::: ;;; ;:; ::: ;;; ;:; ::: ;:; |3Dear Al: Dear Jo: Dear Lvim fvf via via fvf |3fvf vet vet fvf vat vat fvf eve eve fvf |3fvf velvet, fvf valves, fvf vividly fvf !# The [N] key. !# !# Use the [J] finger & keep [K] [L] [;] keys !# anchored. Move only [J] finger & speed up on 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 !# !# MEASURE your progress. Type each note in less than 1 minute ws was was sws !# The [Y] key. !# !# Use [J] finger. Keep [K] [L] [;] fingers anchored. Don't !# 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 your progress type a copy of this 2 line note in 1 !# minute or less. !# !# |P2,02 Dear Mary: We wish you would tell Judy how to get her team to work like yours. !!#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 |3su: Dear Sir: |3Mr. Em: Dr. Doe: Miss Ree: Mrs. Mor: |3To Mr. Ulm: To Mrs. Ulm: To Miss Ulm: !# !# GOAL: finish each Note following in one minute or less and !# finish both in 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. !# !# !# Man you must feel like a jerk sitting here typing this junk! !# !#  !# & both in 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. # By curling your fingers for bottom reaches like D-C & J-M !# the hands can be kept still: Giving better accuracy & !# greater speed. Wrists are best kept low and right thumb well !# above the space bar and pointing towards 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 xs 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. !# !# !#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. !# !# Use [S] finger & anchor either [F] or [A] finger, whichever !# is 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 s#   Use the [F] finger & keep [A] & [S] fingers at home (& [D] !# too if possible). !# Speed up on 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/hert home & use the [A] finger durled tightly. Keep !# elbows 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. !# !# Use the [;] finger. Keep [Jiste or perhaps for a Dentist. Good Luck !# and Good-Bye........................................  ;/; 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. !# PRACTISE these. !# !# Type each note in 1 minute & both in 2 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. !# !# Gee pretty soon you'll be r] key at home but [K] & [L] will !# rock forward as you reach for [-]. |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 !#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. !# !# Keep [F] aeady for that well paid position !# as a Doctors receptioniste. !# !#  |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. If you have come this far without accident !# then you will be awarded the JUDY COMPUTER CERTIFICATE OF !# EXELLENCE. This entitles you the first job that comes up as !# a Doctors reception$  %  &  '