10  COM A$[72],B$[72],C$[72],D$[72]
20  COM I$[72],J$[72],K$[72],L$[72],M$[72],N$[72]
30  COM E,H,O,R,S,T,A,B,G,F,D,C,P,Q
40  REM:  FILENAME CHANGE IN LINE 2370, WAS:  2370  A$="$TYPE0102030405"
50  REM:  MIKE SCHWEIZER 10/7/75
60  REM: SCR FILES RENAMED IN LINE 130, CURRENT SCR FILES:
65  REM:       TYPEF1, TYPEF2, TYPEF3, TYPEF4 IN A001
70  DIM Q$[72],Z$[20]
75  IF  ERROR  THEN 2890
80  REM *  FILES MUST BE IN 'A001' BUT PROGRAM MAY BE IN ANOTHER ACCOUNT
90  REM*   UPDATED BY M.MUELLER EDP RESOURCE CENTER 1/25/77
100  FILES *,*
110  DATA "MORNING","AFTERNOON","EVENING"
120  DATA "*TYPEF1","*TYPEF2","*TYPEF3","*TYPEF4"
130  RESTORE 110
140  FOR E=1 TO 1+(TIM(1)>11)+(TIM(1)>16)
150  READ B$
160  NEXT E
170  PRINT "GOOD "B$". ";
180  RESTORE 120
190  FOR E=1 TO 4
200  READ B$
220  ASSIGN B$,2,R
230  IF R=0 THEN 270
240  NEXT E
250  PRINT "ALL SCRATCH FILES ARE IN USE AT THE MOMENT. PLEASE TRY AGAIN LATER."
260  GOTO 2890
270  PRINT "WELCOME TO TYPE."
280  PRINT "WHAT IS YOUR NAME";
290  INPUT Z$
300  PRINT LIN(2);
310  GOSUB 1980
320  IF G THEN 340
330  PRINT LIN(-2)"PLEASE TYPE THE FOLLOWING LINES:"LIN(4)
340  IF  END #1 THEN 400
350  FOR H=1 TO 100
360  READ #1;A$
370  IF G THEN 390
380  PRINT A$'10
390  NEXT H
400  IF G THEN 450
410  PRINT LIN(-12)"PLEASE TEAR OFF THE ABOVE LINES AND PLACE WHERE"
420  PRINT "YOU CAN EASILY READ THEM.  PRESS 'RETURN' WHEN"
430  PRINT "YOU HAVE FINISHED DOING WHAT I ASKED."
440  ENTER 255,F,D$
450  PRINT LIN(5)"REMEMBER IF YOU WISH TO QUIT BEFORE COMPLETING THE ENTIRE TIMING,"
460  PRINT "JUST PRESS 'RETURN' AND TYPE IN THE WORD 'SCORE'."
470  PRINT LIN(-2)"YOU MAY NOW BEGIN, GOOD LUCK"LIN(11)
480  R=S=T=0
490  FOR O=1 TO H
500  ENTER 255,F,A$
510  PRINT LIN(2);
520  IF F>0 THEN 560
530  T=T-F
540  PRINT LIN(2)"TRY THAT LINE AGAIN."LIN(2);
550  GOTO 500
560  IF A$="" THEN 540
570  IF A$="SCORE" THEN 630
580  PRINT #2;A$, END 
590  T=T+F
600  IF T>299 AND E THEN 630
610  NEXT O
620  IF E THEN 490
630  IF  END #1 THEN 680
640  IF  END #2 THEN 1310
650  P=1
660  READ #2,1
670  PRINT LIN(-4)"*** ERROR *** ANALYSIS ***"LIN(5)
680  READ #1,1
690  A=B=1
700  G=Q=R
710  READ #1;A$
720  READ #2;B$
730  P=P+1
740  IF A$[1,1]#'10 THEN 770
750  A$=A$[2]
760  GOTO 740
770  FOR D=LEN(B$) TO 1 STEP -1
780  IF B$[D,D]#" " THEN 810
790  B$[D,D]=""
800  NEXT D
810  S=S+LEN(B$)
820  IF A$=B$ THEN 710
830  FOR F=1 TO LEN(A$)
840  IF A$[F,F]#" " THEN 860
850  NEXT F
860  B$[2]=B$
870  B$[1,1]=" "
880  FOR D=1 TO LEN(B$)
890  IF B$[D,D]#" " THEN 910
900  NEXT D
910  C$=B$
920  GOSUB SGN(D-F-1)+2 OF 1780,1880,1810
930  FOR F=1 TO 3
940  GOSUB 1490
950  GOSUB 1630
960  NEXT F
970  IF I$=L$ THEN 1240
980  IF L$="" THEN 1150
990  IF I$=M$ THEN 1220
1000  IF I$=N$ THEN 1200
1010  IF I$[1,LEN(L$)]#L$ THEN 1090
1020  IF I$[LEN(L$)+2]=M$ THEN 1040
1030  IF I$[LEN(L$)+1]#M$ THEN 1090
1040  GOSUB 1430
1050  GOSUB 1570
1060  R=R+1
1070  GOSUB 1570
1080  GOTO 1260
1090  IF L$[1,LEN(I$)]#I$ THEN 1150
1100  IF L$[LEN(I$)+2]=J$ THEN 1120
1110  IF L$[LEN(I$)+1]#J$ THEN 1150
1120  GOSUB 1430
1130  GOSUB 1430
1140  GOTO 1060
1150  GOSUB 1430
1160  R=R+1
1170  IF L$=I$ THEN 1240
1180  IF L$=J$ THEN 1150
1190  GOTO 1070
1200  GOSUB 1570
1210  R=R+1
1220  GOSUB 1570
1230  R=R+1
1240  GOSUB 1490
1250  GOSUB 1630
1260  IF I$#"" THEN 970
1270  IF L$#"" THEN 1060
1280  IF G=R THEN 1300
1290  PRINT '10
1300  GOTO 690
1310  PRINT LIN(-5)"*** PROFICIENCY *** ANALYSIS ***"LIN(4)
1320  PRINT LIN(2)"NAME: "Z$;LIN(2)
1330  PRINT INT(12*(S-5*R)/T);TAB(10)"= TYPING SPEED"
1340  PRINT LIN(1);INT(60*R/T);TAB(10)"= ERRORS PER MINUTE"
1350  PRINT LIN(1);R;TAB(10)"= TOTAL ERRORS DETECTED"
1360  T1=INT(T/60)
1370  T2=(T-(T1*60))*(T1<5)
1380  PRINT LIN(1);TAB(10)"  TIME:"T1"MINUTES AND"T2"SECONDS."
1390  PRINT LIN(11)
1400  GOTO 2880
1410  READ #2,1
1420  GOTO 320
1430  IF I$="" THEN 1560
1440  GOSUB 2840
1450  D$="     ["
1460  D$[7]=I$
1470  D$[LEN(D$)+1]="]"
1480  PRINT D$;
1490  C$=A$
1500  C=A
1510  GOSUB 1890
1520  I$=J$
1530  J$=K$
1540  K$=D$
1550  A=D
1560  RETURN 
1570  IF L$="" THEN 1880
1580  GOSUB 2840
1590  D$="     >"
1600  D$[7]=L$
1610  D$[LEN(D$)+1]="<"
1620  PRINT D$;
1630  C$=B$
1640  C=B
1650  GOSUB 1890
1660  L$=M$
1670  M$=N$
1680  N$=D$
1690  IF N$="" THEN 1870
1700  F=LEN(M$)
1710  IF F=0 THEN 1870
1720  IF M$[F,F]="." THEN 1760
1730  IF M$[F,F]="?" THEN 1760
1740  IF M$[F,F]="!" THEN 1760
1750  IF M$[F,F]#":" THEN 1800
1760  IF B+2=C THEN 1870
1770  IF B+2<C THEN 1810
1780  D$="     -"
1790  GOTO 1820
1800  IF B+1=C THEN 1870
1810  D$="     +"
1820  D$[7]=C$[B,D-1]
1830  D$[LEN(D$)+1]=D$[6,6]
1840  GOSUB 2840
1850  PRINT D$;
1860  R=R+1
1870  B=D
1880  RETURN 
1890  FOR D=C TO LEN(C$)
1900  IF C$[D,D]#" " THEN 1920
1910  NEXT D
1920  C=D
1930  FOR D=C TO LEN(C$)
1940  IF C$[D,D]=" " THEN 1960
1950  NEXT D
1960  D$=C$[C,D-1]
1970  RETURN 
1980  PRINT "DO YOU WANT AN INTRODUCTION AND EXPLANATION";
1990  INPUT C$
2000  IF C$[1,1]="N" THEN 2340
2010  PRINT LIN(2)
2020  PRINT "     THE COMPUTER HAS BEEN PROGRAMMED TO LET"
2030  PRINT "YOU TAKE A FIVE MINUTE TIMED WRITING."
2040  PRINT 
2050  PRINT "*NOTE:  DIFFERENCES BETWEEN A TYPEWRITER AND A TERMINAL."
2060  PRINT 
2070  PRINT "         (1)  DO NOT SHIFT FOR CAPITALS."
2080  PRINT "              ALL LETTERS ARE ALREADY UPPERCASE."
2090  PRINT "         (2)  PRESS THE 'RETURN' KEY TO"
2100  PRINT "              MAKE THE CARRIAGE RETURN TO THE LEFT MARGIN."
2110  PRINT 
2120  PRINT "         (3)  WAIT UNTIL THE TERMINAL HAS MADE A COMPLETE"
2130  PRINT "              RETURN BEFORE YOU START TYPING."
2140  PRINT "         (4)  THERE IS NO TAB KEY.  YOU HAVE TO SPACE 5 TIMES"
2150  PRINT "              TO INDENT A PARAGRAPH."
2160  PRINT '10'10"*TESTS:  (1)  YOU WILL BE TIMED AUTOMATICALLY FOR 5 MINUTES"
2170  PRINT "              BY THE COMPUTER."
2180  PRINT 
2190  PRINT "         (2)  YOU CAN STOP BEFORE 5 MINUTES IF YOU PRESS"
2200  PRINT "              THE 'RETURN' KEY AND TYPE THE WORD 'SCORE'."
2210  PRINT '10"         (3)  DO EACH LINE ONLY ONCE UNLESS YOU FINISH THE"
2220  PRINT "              ENTIRE PARAGRAPH.  IN THIS CASE, REPEAT THE"
2230  PRINT "              PARAGRAPH UNTIL THE TIME RUNS OUT."
2240  PRINT '10"         (4)  WHEN YOU HAVE FINISHED, THE COMPUTER WILL LIST"
2250  PRINT "              ALL THE ERRORS THAT YOU MADE."
2260  PRINT '10"         (5)  AN 'ERROR ANALYSIS' WILL LIST YOUR:"
2270  PRINT "              NAME"
2280  PRINT "              TYPING SPEED "
2290  PRINT "              ERRORS PER MINUTE"
2300  PRINT "              TOTAL ERRORS DETECTED"
2310  PRINT "              TIME YOU USED"
2320  PRINT '10"         DON'T BE NERVOUS.  THERE IS NO ONE WATCHING YOU,"
2330  PRINT '10"AND NO CLOCK IS TICKING MADLY AWAY.  HAVE FUN AND TEST YOURSELF"
2340  PRINT '10"WOULD YOU LIKE A LIST OF ERROR SYMBOLS (YES/NO)";
2350  INPUT Q$
2360  IF Q$[1,1]="N" THEN 2430
2370  PRINT '10"     SYMBOL               MEANS"
2380  PRINT "     ------               -----"
2390  PRINT '10"     [    ]      CORRECT WAY TO TYPE IT!"
2400  PRINT '10"     >    <      INCORRECT WAY IT WAS TYPED!"
2410  PRINT "     "'10"-    -      SPACES LEFT OUT IN TYPING!"
2420  PRINT '10"     +    +      EXTRA SPACES PUT IN WHILE TYPING!"
2430  PRINT LIN(2)"WOULD YOU LIKE TO PRACTICE FIRST";
2440  INPUT Q$
2450  A$="*TYPF0102030405"
2460  PRINT '10"DO YOU HAVE THE READY PRINTED PARAGRAPHS FOR THIS PROGRAM";
2470  INPUT C$
2480  LET C$=UOS$(C$[1,1])
2490  G=0
2500  IF C$="N" THEN 2560
2510  G=1
2520  PRINT '10"NUMBER OF THE PARAGRAPH THAT YOU WANT";
2530  INPUT F
2540  IF F>0 AND F<6 AND F=INT(F) THEN 2580
2550  GOTO 2520
2560  PRINT "PARAGRAPH YOU WANT PRINTED (1-5) ";
2561  INPUT F
2562  IF ABS(F)#INT(F) OR F>5 THEN 2560
2570  IF F>5 THEN 2560
2580  A$[6]=A$[F+F+4,F+F+5]
2590  ASSIGN A$,1,R
2600  IF  END #2 THEN 650
2610  IF G THEN 2690
2620  READ #1,1
2630  IF  END #1 THEN 2680
2640  PRINT LIN(2)"PARAGRAPH"F;LIN(1)
2650  READ #1;A$
2660  PRINT A$
2670  GOTO 2650
2680  PRINT LIN(2)
2690  IF Q$[1,1]="N" THEN 2770
2700  INPUT Z
2710  Z=((ABS(INT(Z)) MAX 1) MIN 2)*60
2720  ENTER 255,Z1,C$
2730  PRINT 
2740  IF ABS(Z1) >= Z THEN 2770
2750  Z=Z-Z1
2760  GOTO 2720
2770  PRINT LIN(2)"ARE YOU READY TO TAKE THE TIMED TEST";
2780  INPUT C$
2790  IF C$[1,1]="Y" THEN 2830
2800  PRINT LIN(2)"SORRY, MAYBE NEXT TIME."
2810  GOTO 2880
2820  E=1
2830  RETURN 
2840  IF Q<0 THEN 2870
2850  Q=-1
2860  PRINT "LINE"P-1"("B$[2]")"
2870  RETURN 
2880  PRINT LIN(2)"GOOD-BYE "Z$
2890  CHAIN R,"*HELP"
2900  SYSTEM X,"BYE"
2910  END 
