10  REM**C.A.I.**CHEM2**CHEMISTRY DRILL**MAY 19, 1972
15  REM HP 36878A, 6/74
20  K2=T=1
30  S=S2=K1=T1=0
40  S3=100
50  S4=100
60  T2=0
70  G=0
80  MAT Q=ZER
90  FILES REC1,EX1,EX2,EX3,CHEM
100  DIM I$[10],R$[72],O$[20],P$[20],A$[72],E$[72]
110  DIM N$[20],B$[20],C$[20],Q[200],F$[72]
120  Z0=TIM(0)
130  Z1=TIM(1)
140  Z2=TIM(2)
150  PRINT "GENERAL IDENTIFICATION PROGRAM"
160  PRINT "------------------------------"
170  PRINT 
180  PRINT "     IF YOU WANT INSTRUCTIONS TYPE 'STOP' AFTER THE QUESTION"
190  PRINT "     MARK AND CONSULT DOCUMENTATION.  OTHERWISE, INPUT 'GO'"
200  PRINT "     AFTER THE QUESTION MARK";
210  INPUT I$
220  IF I$="STOP" THEN 3300
230  PRINT 
240  PRINT 
250  PRINT 
260  PRINT "STUDENT INFORMATION"
270  PRINT "-------------------"
280  PRINT 
290  PRINT "YOUR NAME :";
300  INPUT R$
310  PRINT "CHOOSE TOPIC 2 OR 3 OR 4.  WHICH DO YOU WANT";
320  INPUT D
330  READ #D,1
340  READ #D;O$
350  K1=K1+1
360  IF O$#"ORDER" THEN 390
370  READ #D;N$,P$
380  K1=K1+2
390  READ #D;A
400  K1=K1+1
410  FOR I=1 TO A
420  READ #D;A[I]
430  K1=K1+1
440  NEXT I
450  IF O$="ORDER" THEN 480
460  B$="NONE"
470  GOTO 510
480  PRINT "ORDER ("N$" OR ""):";
490  INPUT B$
500  IF B$=P$ THEN 530
510  C=1
520  GOTO 540
530  C=2
540  L1=A[A]
550  PRINT "LEVEL -- (1 TO "A") --";
560  INPUT D1
570  LET D1=INT(D1)
580  IF D1 <= A THEN 610
590  PRINT "LEVEL NUMBER IS TOO LARGE -- RETYPE IT"
600  GOTO 550
610  IF D1#1 THEN 640
620  H1=1
630  GOTO 650
640  H1=A[D1-1]+1
650  LET H2=A[D1]
660  PRINT "LIST OF COMMANDS:"
670  FOR I=1 TO 11
680  READ C$
690  PRINT C$;"--";
700  NEXT I
710  DATA "WRONG","END","STOP","LEVEL","SCORE","TIME"
720  DATA "NUMBER","ORDER","RTIME","REPEAT","IDENT"
730  PRINT 
740  RESTORE 
750  PRINT 
760  REM
770  PRINT 
780  PRINT 
790  PRINT "MAIN EXERCISE"
800  PRINT "-------------"
810  PRINT 
820  IF K2>H2-H1+1 THEN 4020
830  I=INT(RND(0)*(H2-H1+1))+H1
840  FOR J=1 TO K2-1
850  IF ABS(Q[J])=I THEN 830
860  NEXT J
870  Q[K2]=I
880  K2=K2+1
890  READ #D,1
900  IF K1-A>2 THEN 930
910  READ #D;A$,A1
920  GOTO 940
930  READ #D;A$,A$,A$,A1
940  FOR J=1 TO A
950  READ #D;A1
960  NEXT J
970  FOR J=1 TO I-1
980  READ #D;A$,A1
990  FOR J1=1 TO A1
1000  READ #D;A$
1010  NEXT J1
1020  NEXT J
1030  IF G=1 THEN 1330
1040  IF C=2 THEN 1070
1050  READ #D;F$,A1
1060  GOTO 1100
1070  READ #D;E$,A1
1080  GOSUB 3590
1090  GOTO 1120
1100  IF T1#0 THEN 1120
1110  PRINT "QUEST. #"T":";F$;
1120  INPUT A$
1130  IF C=2 THEN 1170
1140  GOSUB 3310
1150  IF F=1 THEN 1200
1160  GOTO 1250
1170  GOSUB 3720
1180  IF F=1 THEN 1200
1190  GOTO 1250
1200  REM
1210  LET S=S+1
1220  T1=0
1230  T=T+1
1240  GOTO 820
1250  REM
1260  GOTO 1430
1270  REM
1280  LET T1=T1+1
1290  IF T1<3 THEN 1410
1300  T=T+1
1310  G=1
1320  GOTO 890
1330  LET T1=0
1340  Q[K2-1]=-1*Q[K2-1]
1350  GOSUB 3900
1360  PRINT '13;"                 ";
1370  PRINT "AAAAAAAAAAAAAAAAAAAAAAAAA";'13;
1380  PRINT "                 BBBBBBBBBBBBBBBBBBBBBBBBB"
1390  G=0
1400  GOTO 820
1410  PRINT "     TRY AGAIN";
1420  GOTO 890
1430  REM
1440  FOR J=1 TO 11
1450  READ C$
1460  IF C$=A$ THEN 1500
1470  NEXT J
1480  RESTORE 
1490  GOTO 1270
1500  RESTORE 
1510  GOTO J OF 1520,1540,1570,1600,1850,1900,1960,2030,2270,2310,2350
1520  REM
1530  GOTO 1300
1540  REM
1550  LET T=T-1
1560  GOTO 2520
1570  REM
1580  LET T=T-1
1590  GOTO 3120
1600  REM
1610  IF A>1 THEN 1640
1620  PRINT "LEVEL CAN'T BE CHANGED -- SORRY"
1630  GOTO 890
1640  LET T=T-1
1650  IF T=0 THEN 1690
1660  LET S3=INT(S/T*100+.5)
1670  PRINT #1;R$,D,B$,D1,Z0,Z1,Z2,T,S3
1680  PRINT #1;TIM(0),TIM(1),TIM(2)
1690  K2=T=1
1700  S3=100
1710  S=T1=0
1720  PRINT 
1730  PRINT "NEW LEVEL --";
1740  INPUT D1
1750  IF D1 <= A THEN 1780
1760  PRINT "LEVEL NUMBER IS TOO LARGE -- RETYPE IT"
1770  GOTO 1730
1780  IF D1#1 THEN 1810
1790  H1=1
1800  GOTO 1820
1810  H1=A[D1-1]+1
1820  LET H2=A[D1]
1830  PRINT "LEVEL CHANGED -- NEW BALL GAME"
1840  GOTO 770
1850  REM
1860  PRINT 
1870  PRINT S;" OUT OF";T-1;" ";INT(S/(T-1)*100+.5);"%"
1880  PRINT 
1890  GOTO 890
1900  REM
1910  PRINT 
1920  PRINT "BEGAN AT:"Z0"MIN."Z1"HRS."Z2"DAYS."
1930  PRINT "TIME NOW IS: "TIM(0)"MIN."TIM(1)"HRS."TIM(2)"DAYS."
1940  PRINT 
1950  GOTO 890
1960  REM
1970  PRINT 
1980  PRINT "TOTAL # OF QUESTIONS :";L1
1990  PRINT "# OF QUESTIONS IN LEVEL "D1": ";H2-H1+1
2000  PRINT "# OF QUESTIONS ASKED :";T
2010  PRINT 
2020  GOTO 890
2030  REM
2040  IF O$="ORDER" THEN 2070
2050  PRINT "ORDER CAN'T BE CHANGED -- SORRY"
2060  GOTO 890
2070  LET T=T-1
2080  IF T=0 THEN 2110
2090  LET S3=INT(S/T*100+.5)
2100  PRINT #1;R$,D,B$,D1,Z0,Z1,Z2,T,S3,TIM(0),TIM(1),TIM(2)
2110  PRINT "NEW ORDER --";
2120  INPUT B$
2130  IF B$=N$ THEN 2170
2140  IF B$=P$ THEN 2190
2150  PRINT "ILLEGAL ORDER -- CHECK ORDER LIST ABOVE AND RETYPE IT"
2160  GOTO 2110
2170  C=1
2180  GOTO 2200
2190  C=2
2200  MAT Q=ZER
2210  PRINT "ORDER CHANGED -- NEW BALL GAME"
2220  PRINT 
2230  S=T1=0
2240  S3=100
2250  K2=T=1
2260  GOTO 760
2270  REM
2280  PRINT 
2290  PRINT "ELAPSED RUN TIME :"TIM(1)*60+TIM(0)-Z1*60-Z0"MIN."
2300  GOTO 890
2310  REM
2320  IF T1=0 THEN 890
2330  PRINT "QUEST. #";T;": ";F$
2340  GOTO 890
2350  REM
2360  PRINT 
2370  PRINT "NAME : ";R$
2380  PRINT "TOPIC: ";D
2390  PRINT "ORDER : ";B$
2400  PRINT "LEVEL : ";D1
2410  PRINT "# OF QUESTIONS ASKED : "T
2420  IF T=1 THEN 2450
2430  LET S3=INT(S/(T-1)*100+.5)
2440  GOTO 2460
2450  S3=100
2460  PRINT "SCORE :"S3
2470  PRINT "BEGAN AT :"Z0"MIN."Z1"HRS."Z2"DAYS."
2480  PRINT "TIME IS: "TIM(0)"MIN."TIM(1)"HRS."TIM(2)"DAYS."
2490  PRINT "ELAPSED RUN TIME :"TIM(1)*60+TIM(0)-Z1*60-Z0"MIN."
2500  PRINT 
2510  GOTO 890
2520  REM
2530  FOR J=1 TO A[A]
2540  IF Q[J]<0 THEN 2580
2550  NEXT J
2560  PRINT "YOU MISSED NO QUESTIONS -- PERFECT SCORE"
2570  GOTO 3120
2580  REM
2590  PRINT 
2600  S4=100
2610  PRINT "RETEST"
2620  PRINT "------"
2630  S2=T2=0
2640  PRINT 
2650  PRINT "FINISHING UP -- ONLY ONE TRY ON THE FOLLOWING QUESTIONS"
2660  PRINT 
2670  FOR U=1 TO L1
2680  IF Q[U] >= 0 THEN 3080
2690  LET T2=T2+1
2700  READ #D,1
2710  IF K1-A>2 THEN 2740
2720  READ #D;A$,A1
2730  GOTO 2750
2740  READ #D;A$,A$,A$,A1
2750  FOR K=1 TO A
2760  READ #D;A1
2770  NEXT K
2780  FOR K=1 TO ABS(Q[U])-1
2790  READ #D;A$,A1
2800  FOR J1=1 TO A1
2810  READ #D;A$
2820  NEXT J1
2830  NEXT K
2840  IF G=1 THEN 3060
2850  IF C=2 THEN 2880
2860  READ #D;F$,A1
2870  GOTO 2910
2880  READ #D;E$,A1
2890  GOSUB 3620
2900  GOTO 2920
2910  PRINT "QUEST. # "T2": ";F$;
2920  INPUT A$
2930  IF C=2 THEN 2970
2940  GOSUB 3310
2950  IF F=1 THEN 3010
2960  GOTO 2990
2970  GOSUB 3720
2980  IF F=1 THEN 3010
2990  IF A$="STOP" THEN 3100
3000  GOTO 3040
3010  PRINT "CORRECT"
3020  S2=S2+1
3030  GOTO 3080
3040  G=1
3050  GOTO 2700
3060  GOSUB 3890
3070  PRINT 
3080  NEXT U
3090  GOTO 3120
3100  REM
3110  LET T2=T2-1
3120  REM
3130  S4=100
3140  IF T=0 THEN 3160
3150  LET S3=INT(S/T*100+.5)
3160  IF T2=0 THEN 3180
3170  LET S4=INT(S2/T2*100+.5)
3180  REM
3190  PRINT #1;R$,D,B$,D1,Z0,Z1,Z2,T,S3,TIM(0),TIM(1),TIM(2)
3200  PRINT #1;T2,S4
3210  PRINT 
3220  PRINT 
3230  PRINT "THE DRILL IS OVER"
3240  PRINT 
3250  PRINT "MAIN DRILL ";S;" CORRECT OUT OF ";T;" FOR SCORE OF";S3;"%"
3260  PRINT 
3270  PRINT "REDRILL: ";S2;" CORRECT OUT OF";T2;" FOR SCORE OF";S4"%"
3280  PRINT 
3290  PRINT "GOODBYE"
3300  STOP 
3310  F1=F=F2=0
3320  F9=D
3330  F8=A1
3340  FOR L=1 TO LEN(A$)-2
3350  IF A$[L,L+2]#" + " THEN 3370
3360  F1=F1+1
3370  NEXT L
3380  FOR J=1 TO F8
3390  READ #F9;E$
3400  IF LEN(E$)>LEN(A$) THEN 3510
3410  FOR L=1 TO LEN(A$)-LEN(E$)+1
3420  IF E$#A$[L,LEN(E$)+L-1] THEN 3500
3430  IF L=1 THEN 3460
3440  IF L<4 THEN 3500
3450  IF A$[L-3,L-1]#" + " THEN 3500
3460  IF LEN(E$)+L-1=LEN(A$) THEN 3490
3470  IF LEN(E$)+L-1>LEN(A$)-3 THEN 3500
3480  IF A$[LEN(E$)+L,LEN(E$)+L+2]#" + " THEN 3500
3490  F2=F2+1
3500  NEXT L
3510  NEXT J
3520  IF F2=F8 AND F1+1>F8 THEN 3550
3530  IF F2=F8 AND F1+1=F8 THEN 3570
3540  GOTO 3580
3550  PRINT "WRONG NUMBER OF TERMS."
3560  GOTO 3580
3570  F=1
3580  RETURN 
3590  IF T1#0 THEN 3710
3600  M2=T
3610  GOTO 3630
3620  M2=T2
3630  PRINT "QUESTION # "M2" : ";
3640  FOR L2=1 TO A1
3650  READ #D;F$
3660  IF A1=L2 THEN 3690
3670  PRINT F$;" + ";
3680  GOTO 3700
3690  PRINT F$;
3700  NEXT L2
3710  RETURN 
3720  F9=5
3730  F=F8=F2=F1=0
3740  READ #5,1
3750  F3=1
3760  FOR L=1 TO LEN(E$)-2
3770  IF E$[L,L+2]#" + " THEN 3820
3780  F8=F8+1
3790  IF L=1 OR F3>L-1 THEN 3820
3800  PRINT #5;E$[F3,L-1]
3810  F3=L+3
3820  NEXT L
3830  IF F3>LEN(E$) THEN 3860
3840  PRINT #5;E$[F3,LEN(E$)]
3850  F8=F8+1
3860  READ #5,1
3870  GOSUB 3340
3880  RETURN 
3890  G=0
3900  PRINT "CORRECT ANSWER --";
3910  IF C=2 THEN 4000
3920  READ #D;F$,A1
3930  FOR L=1 TO A1-1
3940  READ #D;E$
3950  PRINT E$" + ";
3960  NEXT L
3970  READ #D;E$
3980  PRINT E$;
3990  RETURN 
4000  READ #D;E$
4010  GOTO 3980
4020  T=T-1
4030  GOTO 2520
4040  END 
