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 '* MALLARD BASIC VERSION FOR AMSTRAD PCW 14th Feb. 1988 * 14 '* BY : Oliver Pretzel 15 '* Please leave this notice on the programme. * 16 '********************************************************************** 17 ' 20 ' ######################## 21 ' ###### SECTION 1 ###### 22 ' ######################## 23 ' 48 '>>>>>>>>>>>>>>>>>>>>> ADM-31 ASCII CONTROL CODES <<<<<<<<<<<<<<<<<<<<< 49 ' 50 ' *************************************************************** 51 ' FUNCTION NAME STRING NAME ASCII CODE 52 ' *************************************************************** 53 ' 72 ' Return 73 RET$ = CHR$ (13) 74 ' 75 ' Escape 76 ESC$ = CHR$ (27) 77 ' 78 ' Bleep 79 BEL$ = CHR$(7) 80 ' 81 ' Carriage Return 82 RET$ = CHR$(13) 85 ' ------ DYNAMIC VIDEO ATTRIBUTE CONTROL STRINGS ------ 86 ' 87 ' *************************************************************** 88 ' FUNCTION NAME STANDARD CHAR. GEN. ALT. CHAR. GEN. 89 ' *************************************************************** 90 ' 91 ' Reset to Normal Video 92 STDVID$ = ESC$ + "q" 94 ' 110 ' Reversing of Area 111 REVSTD$ = ESC$ + "p" 113 ' 126 ' ------ DYNAMIC EDITING CONTROL STRINGS ------ 127 ' 128 ' *************************************************************** 129 ' OPERATION HOW TO EXECUTE DESCRIPTION 130 ' *************************************************************** 131 ' 132 ' Clear Screen Clears to SPACES 133 CLRSCR$ = ESC$+"E"+ESC$+"H" 134 ' 157 ' Line Erase 158 LINERA$ = ESC$+"K" 159 ' 160 ' Character Delete 170 CHRDEL$ = CHR$(127) 180 ' 181 ' Definition of CURSOR LOAD Function. i.e. Pushing the Cursor Around Onscreen. 182 DEF FNCSRLD$ (ROW%,COLUMN%) =ESC$+"Y"+CHR$ (ROW%+32)+CHR$ (COLUMN%+32) 183 ' 200 ' Write Protect Mode On 201 ' WRTPRTON$ = "" 203 ' Write Protect Mode Off 204 ' WRTPRTOFF$ = "" 205 ' 900 '********************************************************************** 910 ' 915 ' ######################## 920 ' ###### SECTION 2 ###### 925 ' ######################## 930 ' 1000 '>>>>>>>>>>>>>>>>>>>>>>>>>>>>> EDITING <<<<<<<<<<<<<<<<<<<<<<<<<<<< 1010 ' This program uses the character combination 1020 ' Ascii 10,13 to introduce a line feed into multiple 1030 ' statement lines. Most screen editors will reverse these 1040 ' characters and then BASIC will NOT load the program. If you 3950 ' want to edit the program. Either remove these statements 3951 ' or mark the line starts with a special character, and use 3952 ' SANDR to reinsert there. OP 3953 ' I have replaced the "Statusport" and "Dataport" statements 3954 ' by subroutine [3] which uses INKEY$, changed the error handling 3956 ' to ask for the drive the data reides in, if it is not the default, 3957 ' but otherwise revert to BASIC's error messages, and adapted the 3958 ' display to the PCW screen (removing a few bugs in the process). 3959 ' Otherwise the program is unchanged. 3960 ' 4000 '********************************************************************** 4010 ' 4012 ' ######################## 4015 ' ###### SECTION 3 ###### 4017 ' ######################## 4020 ' 4050 '>>>>>>>>>>>>>>>>>>>>>>> INITIALISING BLOCK <<<<<<<<<<<<<<<<<<<<<<<<<<< 4100 ' 4150 ' 4160 DIM PARAGRAPHIN$ (20),ADDRESS% (140,2) 4170 DIM DISPLAYCHAR% (127),COMMENT$(5) 4180 ' 4200 'The following addresses and values are system dependant. 4250 ' 4400 ' 4500 ESCCHR$ = "EXIT" 'String to print name escape key 4660 EXFIL% = 1 'Filenumber for exercise files. 4670 HLPFIL% = 2 'Filenumber for help files. 4680 KBDFIL% = 3 'Filenumber for keyboard data. 4690 MAXX$ = "J" 'Maximum Exercise Letter 4700 EXLINELENGTH% = 70 4750 COMMENTSTACK% = 0 4800 NUMOFREPEATS% = 0 4850 PARAGRAPH% = 0 4900 ARRAYROWS% = 1 4950 ARRAYCOLUMNS% = 2 5100 ' 5150 WIDTH 255 'Remove 's from long lines 5160 ON ERROR GOTO 40000 'Error handling department. 5170 DELAY% = 50 'Time delay factor (See 34100) 5200 ' SCREEN ADDRESSES 5250 ' 5300 LHS% = 1 'Set the left hand side of the screen 5310 RHS% = 90 5350 TOP% = 1 'Set the top of the screen 5400 ROWOFFSET% = TOP%+15 'Keyboard display 5450 COLUMNOFFSET% = LHS%+15 'Keyboard display 5500 EXERCISEROW% = ROWOFFSET%+7 'Exercise line 5550 EXERCISECOLUMN% = COLUMNOFFSET% 'Exercise line 5600 ECHOROW% = EXERCISEROW%+2 'Typing Echo 5650 ECHOCOLUMN% = EXERCISECOLUMN% 'Typing Echo 5700 COMMENTROW% = ROWOFFSET%-7 'Comment area 5710 COMMENTCOLUMN% = LHS% 'Comment area 5850 ' 6370 ' 6400 '********************************************************************** 6401 ' 6402 ' ######################## 6403 ' ###### SECTION 4 ###### 6404 ' ######################## 6405 ' 6406 '>>>>>>>>>>>>>>>>>>>> START OF ACTIVE PROGRAM CODE <<<<<<<<<<<<<<<<<<<< 6500 '###### 4a ###### 6510 ' 6520 ' First Screenful of instructions 6530 ' 6540 PRINT CLRSCR$ 6550 IF CHARACTER$ = "N" THEN 6760 6560 HELPNUM$ = "0": GOSUB 23300 6570 GOSUB 21400 '[1]:CAPITAL LETTER 6600 IF CHARACTER$ = "N" THEN 65529 ELSE IF CHARACTER$ = "?" THEN HELPNUM$ = "1":GOSUB 23300: GOTO 6540 6650 ' 6700 '---------------------------------------------------------------------- 6750 '###### 4b ###### 6752 ' 6760 GOSUB 39500 '[9]:PRINT HELP MENU 6800 PRINT FNCSRLD$ (ROWOFFSET%,10); LINERA$; "Error break ?"; 6810 GOSUB 22400 '[3]:GET CHARACTER 6900 GOSUB 21400 '[1]:CAPITAL LETTER 6950 IF CHARACTER$ = "Y" THEN ERRORFLAG% = 1 ELSE IF CHARACTER$ = "?" THEN HELPNUM$ = "2": GOSUB 23300: GOTO 6900 ELSE ERRORFLAG% = 0 7000 ' 7050 '---------------------------------------------------------------------- 7100 '###### 4c ###### 7105 ' 7110 GOSUB 39500 '[9]:PRINT HELP MENU 7115 PRINT FNCSRLD$ (COMMENTROW%,COMMENTCOLUMN%); LINERA$; "Any LETTER is a valid exercise but presently (28/06/82) only A-";MAXX$;" exist." 7150 PRINT FNCSRLD$ (ROWOFFSET%,10); LINERA$; "Which Exercise ?"; 7200 GOSUB 22400 '[3]:GET CHARACTER 7250 GOSUB 21400 '[1]:CAPITAL LETTER 7300 IF CHARACTER$ < "A" OR CHARACTER$ > MAXX$ THEN 7150 7400 PRINT FNCSRLD$ (COMMENTROW%,COMMENTCOLUMN%); LINERA$; 8010 FILE$ = "TTYPEX"+CHARACTER$+".DAT" 8051 ' 8052 '---------------------------------------------------------------------- 8053 '###### 4d ###### 8054 ' 8060 GOSUB 39500 '[9]:PRINT HELP MENU 8100 PRINT FNCSRLD$ (13,1); LINERA$; FNCSRLD$ (ROWOFFSET%,10); LINERA$; "Echo ?"; 8110 GOSUB 22400 '[3] GET CHARACTER 8200 GOSUB 21400 '[1]:CAPITAL LETTER 8250 ECHOFLAG% = 0 8300 IF CHARACTER$ = "N" THEN ECHOFLAG% = 1 ELSE IF CHARACTER$ = "?" THEN HELPNUM$ = "3": GOSUB 23300: GOTO 8200 8350 ' 8400 '********************************************************************** 8450 ' 8451 ' ######################## 8452 ' ###### SECTION 5 ###### 8453 ' ######################## 8454 ' 8460 '>>>>>>>>>>>>>>>>>>> SET UP & CHECK EXERCISE FILE <<<<<<<<<<<<<<<<<<<< 8465 ' 8500 PRINT CLRSCR$ 8550 ' 8600 GOSUB 29500 '[5]:PRINT KEYBOARD 10950 ' 11300 ' set up input file. 11400 OPEN "I",#EXFIL%,FILE$ 11410 PARAGRAH% = 0 11420 NUMOFREPEATS% = 0 11500 ' 11550 ' Remove old line 11600 ECHOCOLUMN% = EXERCISECOLUMN% 11650 LINEFLAG% = 0 11700 PRINT FNCSRLD$ (EXERCISEROW%,EXERCISECOLUMN%); LINERA$; FNCSRLD$ (ECHOROW%,ECHOCOLUMN%); LINERA$; 11750 TYPEDIN$ = "" 11800 ' Check that it is not a paragraph 11850 IF PARAGRAPH% = 0 THEN 12300 11900 ALINE$ = PARAGRAPHIN$ (NUMOFTEXTLINES%): NUMOFTEXTLINES% = NUMOFTEXTLINES% +1: IF NUMOFTEXTLINES% = LINESINPARA%+1 THEN NUMOFREPEATS% = NUMOFREPEATS%-1: NUMOFTEXTLINES% = 1: IF NUMOFREPEATS% = 0 THEN PARAGRAPH% = 0 12150 ' 12200 GOTO 12700 12250 ' 12300 IF NUMOFREPEATS% = 0 THEN 12550 12350 NUMOFREPEATS% = NUMOFREPEATS% -1: GOTO 14050 12500 ' 12550 IF EOF (EXFIL%) THEN PRINT FNCSRLD$(EXERCISEROW%,EXERCISECOLUMN%+15); LINERA$; "END of EXERCISE, Please WAIT for MENU.";: GOSUB 34100: GOTO 17200 12600 ' 12650 LINE INPUT # EXFIL%,ALINE$ 12700 ALINE$ = ALINE$+CHR$ (13) 12750 IF PARAGRAPH% = 0 THEN NEWLINE% = NEWLINE%+1 12800 EXLINELENGTH% = LEN (ALINE$) 12850 ' CHECK for repeated line. 12900 IF LEFT$ (ALINE$,1) <> "|" THEN 13950 12950 CHARACTER$ = MID$ (ALINE$,2,1) 13000 GOSUB 21400 '[1]:CAPITAL LETTER 13050 IF CHARACTER$ = "P" THEN 13400 13100 NUMOFREPEATS% = VAL (CHARACTER$)-1 13150 EXLINELENGTH% = EXLINELENGTH%-2 13200 ALINE$ = RIGHT$ (ALINE$,EXLINELENGTH%) 13250 ' 13300 GOTO 13950 13350 ' 13400 ' Paragraph Read In. 13450 NUMOFREPEATS% = VAL (MID$ (ALINE$,3,1)) 13500 LINESINPARA% = VAL (MID$ (ALINE$,5,2)) 13550 PARAGRAPH% = 1 13600 NUMOFTEXTLINES% = 1 13650 FOR ILOOP% = 1 TO LINESINPARA% 13660 'PARAGRAPHIN$ contains up to 20 lines of input for repeating whole paragraphs. 13700 LINE INPUT # EXFIL%,PARAGRAPHIN$ (ILOOP%) 13750 NEXT ILOOP% 13800 ' 13850 GOTO 11550 13900 ' 13950 ' CHECK FOR COMMENT 14000 IF LEFT$ (ALINE$,2) = "!#" THEN GOSUB 33020: GOTO 11550 14050 CHARCOUNT% = EXLINELENGTH% 14100 PRINT FNCSRLD$ (EXERCISEROW%,EXERCISECOLUMN%) LEFT$ (ALINE$,EXLINELENGTH%-1) 14200 ' 14201 '********************************************************************** 14202 ' 14203 ' ######################## 14204 ' ###### SECTION 6 ###### 14205 ' ######################## 14206 ' 14250 '>>>>>>>>>>>>>>>>>>>>>>>> KEYBOARD SCAN SECTION <<<<<<<<<<<<<<<<<<<<<<< 14300 ' I.E. The actual exercise begins here 14350 ' 14400 FOR ILOOP% = 1 TO EXLINELENGTH% 14450 IF ILOOP% = EXLINELENGTH% THEN LINEFLAG% = 1 14500 KEY$ = MID$ (ALINE$,ILOOP%,1) 14550 ASCIINUMBER% = ASC (KEY$) 14600 ' Change ROW% and COLUMN% for different Direct Cursor Addressing. 14650 ROW% = ADDRESS% (ASCIINUMBER%,ARRAYROWS%) 14700 COLUMN% = ADDRESS% (ASCIINUMBER%,ARRAYCOLUMNS%) 14750 PRINT FNCSRLD$ (ROW%,COLUMN%); REVSTD$; KEY$; STDVID$; 14760 PRINT FNCSRLD$ (ECHOROW%,ECHOCOLUMN%); 14770 GOSUB 22400 '[3]:GET CHARACTER 14900 NUMOFWORDS = NUMOFWORDS+0.2 15050 PRINT FNCSRLD$ (ROW%,COLUMN%); STDVID$; CHR$ (DISPLAYCHAR% (ASCIINUMBER%)); 15100 IF CHARACTER$ = ESC$ THEN 17200 15150 IF CHARACTER$ = RET$ THEN LINEFLAG% = 1: GOTO 16250 15200 ' 15300 ' 15350 IF ECHOFLAG% = 1 THEN TYPEDIN$ = TYPEDIN$+CHARACTER$: IF CHRACTER$ = CHR$ (ASCIINUMBER%) THEN 16250 ELSE 15700 15450 ' Change the typing Echo definition in the next line for different Dir Cus Adr. 15550 PRINT FNCSRLD$ (ECHOROW%,ECHOCOLUMN%); CHARACTER$; 15600 ECHOCOLUMN% = ECHOCOLUMN%+1 15650 IF CHARACTER$ = CHR$(ASCIINUMBER%) THEN 16250 15700 ' Error 15750 ERRORCOUNT% = ERRORCOUNT%+1 15800 CHARCOUNT% = CHARCOUNT%+1 15850 IF ERRORFLAG% = 0 THEN 16250 15900 ECHOCOLUMN% = ECHOCOLUMN%-1 15950 PRINT BEL$ 16100 IF ECHOCOLUMN% < EXERCISECOLUMN% THEN ECHOCOLUMN% = EXERCISECOLUMN% 16150 ' 16200 GOTO 14750 16250 ' 16300 IF LINEFLAG% = 0 THEN 16950 16350 IF ECHOFLAG% = 0 THEN 11550 16400 ' Display line that was typed in but not echoed previously 16450 PRINT FNCSRLD$ (ECHOROW%,ECHOCOLUMN%); TYPEDIN$; 16500 GOSUB 22400 '[3]:GET CHARACTER 16700 IF CHARACTER$ = RET$ THEN 11550 16750 IF CHARACTER$ = ESC$ THEN 17200 16800 ' 16850 GOTO 16500 16900 ' 16950 NEXT ILOOP% 17000 ' 17050 ' End of keyboard scan 17100 ' 17150 GOTO 11550 17151 ' 17160 '********************************************************************** 17200 ' 17201 ' ######################## 17202 ' ###### SECTION 7 ###### 17203 ' ######################## 17204 ' 17210 '>>>>>>>>>>>>>>>>>>> SECTION PROVIDES POSSIBILITIES <<<<<<<<<<<<<<<<<<< 17220 ' TO ESCAPE OR ALTER PROGRAM FLOW. 17230 ' 17250 HELPNUM$ = "4": GOSUB 23300: GOTO 17450 17450 CHARACTER$ = CHARACTER$+"e" 17500 GOSUB 21400 '[1]:CAPITAL LETTER 17510 ' 17550 IF CHARACTER$ = "N" THEN CLOSE EXFIL%: GOTO 6550 17560 ' 17760 ' 17800 IF CHARACTER$ = "R" THEN NUMOFREPEATS% = NUMOFREPEATS% +1: GOSUB 29500: GOTO 11550 17850 ' 17900 IF CHARACTER$ = RET$ THEN GOSUB 29500: GOTO 11550 17930 ' 17990 ' 18000 IF CHARACTER$ = "M" THEN HELPNUM$ = "5": GOSUB 23300: GOTO 17450 18040 ' 18050 IF CHARACTER$ = "S" THEN GOSUB 32110: GOSUB 29500: GOTO 11550 18090 ' 18100 IF CHARACTER$ = "L" THEN PRINT FNCSRLD$(COMMENTROW%,COMMENTCOLUMN%+10); " Exercise line Number is; "; NEWLINE%;: GOSUB 34100: GOTO 17250 18145 ' 18150 IF CHARACTER$ = "W" THEN 18160 ELSE 18250 18160 GOSUB 21900 '[2]:ERROR COUNT 18165 PRINT FNCSRLD$(COMMENTROW%,COMMENTCOLUMN%+10); LINERA$; "Reset ERROR count (Y/N) ?"; 18166 GOSUB 22400 '[3]:GET CHARACTER 18170 GOSUB 21400 '[1]:CAPITAL LETTER 18190 IF CHARACTER$ = "Y" THEN NUMOFWORDS = 0: ERRORCOUNT% = 0: GOTO 17250 18196 ' 18197 ' 18198 ' 18250 IF CHARACTER$ = "Q" THEN SYSTEM 18300 ' 18320 IF CHARACTER$ = "E" THEN GOTO 65529 18350 GOTO 17250 'IF NOT MATCHED, RETURN TO MENU 20800 ' 21150 ' 21200 '********************************************************************** 21250 ' 21251 ' ######################## 21252 ' ###### SECTION 8 ###### 21253 ' ######################## 21254 ' 21255 '>>>>>>>>>>>>>>>>>>>>>>>>>>>> SUBROUTINES <<<<<<<<<<<<<<<<<<<<<<<<<<<<< 21300 ' 21350 ' 21400 ' Subroutine [1]: Returns first letter of a string as a CAPITAL. 21450 ' 21500 CHARACTER$ = LEFT$ (CHARACTER$,1) 21550 IF CHARACTER$ > "`" THEN IF CHARACTER$ < "{" THEN 21650 21600 RETURN 21650 CHARACTER$ = CHR$ (ASC (CHARACTER$)-32) 21700 RETURN 21750 ' 21800 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 21850 ' 21900 ' Subroutine [2]: Prints ERROR COUNT message and total. 21950 ' 22000 PRINT CLRSCR$ 22050 PRINT FNCSRLD$(COMMENTROW%,COMMENTCOLUMN%+10); ERRORCOUNT%; " ERRORS in"; NUMOFWORDS; " Words ";: GOSUB 34100 22100 IF ERRORCOUNT% = 0 THEN RETURN 22150 PRINT " I.E."; NUMOFWORDS/ERRORCOUNT%; " Words per error": GOSUB 34100 22200 RETURN 22250 ' 22300 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 22350 ' 22400 ' Subroutine [3]: GETS CHARACTER 22450 ' 22460 CHARACTER$ = INKEY$ 22470 WHILE CHARACTER$ = "" 22500 CHARACTER$ = INKEY$ 22550 WEND 22600 RETURN 22800 ' 22850 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 23270 ' 23300 ' Subroutine [4]: Access and PRINT HELP Files. 23310 ' 23320 PRINT CLRSCR$ 23330 OPEN "I", # HLPFIL%, "TTHELP"+HELPNUM$+".DAT" 23340 IF EOF (HLPFIL%) THEN GOSUB 22400: CLOSE # HLPFIL%: PRINT CLRSCR$: RETURN 23350 LINE INPUT # HLPFIL%, LINES$ 23360 IF LEFT$ (LINES$,1) = "#" THEN CHARACTER$ = "": WHILE CHARACTER$ <> RET$: GOSUB 22400: WEND: PRINT CLRSCR$: GOTO 23340 23370 PRINT LINES$ 23380 GOTO 23340 23400 ' 29450 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 29460 ' 29500 ' Subroutine [5]: Set up Addresses & Keyboard locations 29550 ' and PRINT KEYBOARD. 29600 ' 29605 PRINT FNCSRLD$ (1,25); LINERA$; WRTPRTON$; "Hit ";ESCCHR$;" key for MENU"; 29610 OPEN "I",# KBDFIL%,"TTKEYBD.DAT" 29620 ' 29650 ROW% = ROWOFFSET% 29700 COLUMN% = COLUMNOFFSET% 29750 FOR ILOOP%= 1 TO 140 29800 ADDRESS% (ILOOP%, 1) = 1 29850 ADDRESS% (ILOOP%, 2) = 1 29900 NEXT ILOOP% 29950 ' ADDRESS% contains the character addresses. DISPLAYCHAR% 30000 ' contains the displayed character corresponding to that address. 30050 ' 30100 FOR JLOOP% = 1 TO 5 30150 INPUT # KBDFIL%, NUMOFKEYS% 30250 ADDCHAR$ = "" 30300 FOR ILOOP% = 1 TO NUMOFKEYS% 30350 INPUT # KBDFIL%, CHARACTER$ 30400 ASCIINUMBER% = ASC (CHARACTER$) 30450 ' Save character address 30500 ADDRESS% (ASCIINUMBER%,ARRAYROWS%) = ROW% 30550 ADDRESS% (ASCIINUMBER%,ARRAYCOLUMNS%) = COLUMN% 30600 PRINT FNCSRLD$ (ROW%,COLUMN%); CHARACTER$; 30650 ' Keep record of character corresponding to this address 30700 ADDCHAR$ = ADDCHAR$+CHARACTER$ 30750 DISPLAYCHAR% (ASCIINUMBER%) = ASCIINUMBER% 30800 COLUMN% = COLUMN%+4 30850 NEXT ILOOP% 30900 COLUMN% = COLUMN%-4*NUMOFKEYS% 30950 FOR ILOOP% = 1 TO NUMOFKEYS% 31000 INPUT # KBDFIL%, CHARACTER$ 31050 ' SAVE shift character address (BASIC can't get a " from data) 31100 IF ILOOP% = 2 THEN IF JLOOP% = 1 THEN CHARACTER$ = CHR$ (34) 31150 ASCIINUMBER% = ASC (CHARACTER$) 31200 ADDRESS% (ASCIINUMBER%,ARRAYROWS%) = ROW% 31250 ADDRESS% (ASCIINUMBER%,ARRAYCOLUMNS%) = COLUMN% 31300 DISPLAYCHAR% (ASCIINUMBER%) = ASC (MID$ (ADDCHAR$,ILOOP%,1)) 31350 ' DISPLAYCHAR% (ASCIINUMBER%) now contains the normally displayed char. at the pos'n of l$ 31400 COLUMN% = COLUMN%+4 31450 NEXT ILOOP% 31500 COLUMN% = COLUMN%-4*NUMOFKEYS%+2 31550 ROW% = ROW%+1 31600 NEXT JLOOP% 31610 PRINT WRTPRTOFF$ 31620 CLOSE KBDFIL% 31650 ' End of keyboard setup 31700 ' 31750 RETURN 31800 ' 32000 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 32100 ' 32110 ' Subroutine [6]: SKIP Exercise LINES. 32120 ' 32130 PRINT FNCSRLD$(COMMENTROW%,COMMENTCOLUMN%+10); "Number of lines to SKIP ?"; 32135 GOSUB 22400: NUMOFLINES% = VAL(CHARACTER$) 32140 FOR ILOOP% = 1 TO NUMOFLINES% 32150 IF EOF (EXFIL%) THEN 12550 32160 LINE INPUT # EXFIL%,INPCHAR$ 32170 NEXT ILOOP% 32180 NUMOFREPEATS% = 0 32190 NEWLINE% = NEWLINE%+NUMOFLINES% 32200 ' 32210 PRINT FNCSRLD$ (COMMENTROW%,COMMENTCOLUMN%+10); LINERA$; 32220 RETURN 32230 ' 33000 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 33002 ' 33020 ' Subroutine [7]: COMMENT PRINT 33025 ' 33070 IF EOF(EXFIL%) THEN RETURN 33080 ' 33082 COMMENT$(0) = MID$(ALINE$,3) 33084 FOR ILOOP% = 1 TO 4 33090 LINE INPUT #EXFIL%,ALINE$ 33095 COMMENT$(ILOOP%) = MID$(ALINE$,3) 33100 NEXT ILOOP% 33101 ' 33105 FOR ILOOP% = 0 TO 4 33110 PRINT FNCSRLD$(COMMENTROW%+ILOOP%,COMMENTCOLUMN%); LINERA$; COMMENT$(ILOOP%) 33120 NEXT ILOOP% 33130 ' 33180 RETURN 33190 ' 34000 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 34050 ' 34100 ' Subroutine [8]: TIME DELAY. 34150 ' 34200 FOR TIMEOUT% = 1 TO DELAY% 34210 FOR MORE% = DELAY% TO 1 STEP -1 34220 WASTE% = WASTE%+1 34230 NEXT MORE% 34300 NEXT TIMEOUT% 34350 RETURN 39000 ' 39010 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 39020 ' 39500 ' Subroutine [9]: PRINT HELP MENU. 39510 ' 39520 PRINT FNCSRLD$ (TOP%,COLUMNOFFSET%); " - Will PRINT an explanation of the question. " 39530 PRINT FNCSRLD$ (TOP%+2,COLUMNOFFSET%); " - ENABLES the function." 39540 PRINT FNCSRLD$ (TOP%+4,COLUMNOFFSET%); " - DISABLES the function." 39550 PRINT FNCSRLD$ (TOP%+6,COLUMNOFFSET); " - Is the DEFAULT condition." 39900 ' 39905 RETURN 39910 ' 39999 '********************************************************************** 40000 ' 40001 ' ######################## 40002 ' ###### SECTION 9 ###### 40003 ' ######################## 40004 ' 40005 '>>>>>>>>>>>>>>>>>>>>>>>>>> ERROR TRAPPING <<<<<<<<<<<<<<<<<<<<<<<<<<<< 40020 ' 40100 IF ERR <> 53 THEN 40200 40110 PRINT FNCSRLD$(COMMENTROW%,COMMENTCOLUMN%); 40120 INPUT "WHICH DRIVE FOR FILES"; DR$ 40130 OPTION FILES DR$ 40140 RESUME 40200 PRINT CLRSCR$; "ERROR NUMBER",ERR, "AT LINE",ERL 65500 '********************************************************************** 65529 END