1 !LIST OF VARIABLES USED IN PROGRAM WITH A BRIEF SUMMARY OF WHAT THEY ARE USED FOR AND WHERE THEY ARE FOUND. MAIN = MAIN PROGRAM 1 = CREATE (START 330) 2 = ADD QUESTIONS (START 640) 3 = DELETE QUESTIONS (START 1050) 4 = EDIT QUESTIONS (START 1250) 5 = ADD ANSWERS (START 2150) 6 = PRINT TEST (START 2350) 7 = PRINT MASTER FILE (START 3260) SUB = VARIOUS SUBROUTINES AT END OF PROGRAM 2! A$ QUERY RESPONSE 1,6 A1$ QUERY RESPONSE 6 B% FOR-NEXT LOOP CONTROL 4,6,7 C$ CORE COMMON FOR CHAINING BACK TO PROGRAM MAIN C% \DUMMIES USED IN BREAKING C1% /DOWN QUESTION STRING 2,3,4,6, C8% COPIES OF TEST WANTED 6 C9% FOR-NEXT LOOP CONTROL 6 D% DIRECTORY ARRAY MAIN,1,2,3,4,5,6,7,SUB D1% DIRECTORY ARRAY 6 D5$ CARRIAGE RETURN LINE FEED SUB D7% DUMMY INDEX POINTER 6 F$ FILE NAME 1,2,3,4,5,6,7 F% SWITCH FOR END OF SORT 2 F1$ FILE NAME WITH EXT QST 6 H% HOLE DIRECTORY ARRAY MAIN,1,2,3,4 H1% HOLE DIRECTORY ARRAY 6 I% QUESTION NUMBER 1,2,3,5,6,7 J% FOR-NEXT LOOP CONTROL 2,4 K% STORAGE POINTER 1,2,3,5,6,7 L$ LINES OF QUESTION 4,5,6,7,SUB L1$\ L2$= PARTS OF L$ 4 L3$/ L2$ NEW LINE IN EDIT 4 L% LENGTH OF QUESTION(BLOCKS) 1,2,6,7,SUB L% LINE NUMBER IN EDIT 4 L1 LINE COUNT(FOR TOP OF PAGE)6 M% FOR-NEXT LOOP CONTROL 2,3,SUB N% QUESTION NUMBER 4,6 N1% EDIT ROUTINE NUMBER 4 N2% EDIT LINE NUMBER 4 Q$ QUESTION STORAGE STRING MAIN,1,4,5,6,7,SUB Q1$ QUESTION STORAGE STRING 6 Q9% QUESTION # IN OUTPUT FILE 6 R% FUNCTION NUMBER MAIN S$ TEMPORARY STORAGE OF L$ 4,6 T% SORT STORAGE 2 X1% FOR-NEXT LOOP CONTROL 6 Y$ DUMMY-STOPS PROGRAM MAIN Y5$ DUMMY-64 NULL CHARACTERS MAIN,SUB Z% EXIT SWITCH 1,2,SUB 99!*************************************************************************************************** &&&&**&*&*&*&**&&*&*&*&*&*&*&*&*&*&*&*&*&*&*&***&****&*&*&*&*&*&**&*&**&*&*&*&*&*&*&*****&***&*&*&**&*&* 100 !MAIN PROGRAM 110 ! 120 C$ = 'EQSRS1' + CHR$(13) + CVT%$(120) + 'Q LP1:/PR:128=PRINT.' + CHR$(13) 130 C$ = SYS(CHR$(8%) + C$) 135 OPEN 'KB:' AS FILE 11 140 PRINT 'THIS PROGRAM STORES AND RETREIVES TEST QUESTIONS FROM': PRINT 'A FILE.' 150 PRINT 'SELECT THE FUNCTION YOU WANT FROM THE FOLLOWING LIST:' 160 PRINT ' 1 CREATE MASTER FILE': PRINT ' 2 ADD QUESTIONS': PRINT ' 3 DELETE QUESTIONS': PRINT ' 4 EDIT QUESTIONS' 170 PRINT ' 5 ADD ANSWERS TO EXISTING QUESTIONS': PRINT ' 6 PRINT TEST ON DITTO': PRINT ' 7 LIST ENTIRE TEST FILE': PRINT ' 8 EXIT' 175 PRINT ' ' 180 ON ERROR GOTO 310 190 INPUT 'ENTER FUNCTION NUMBER'; R% 200 IF R% > 8% OR R% < 1% THEN 150 210 IF R% = 8% THEN Y$ = SYS(CHR$(9%)) 220 Y5$ = STRING$(64%,0%) 230 DIM #1%, D%(767%), H%(255%): DIM #2%, Q$(2500%) = 64% 240 IF R% = 1% THEN 330 250 IF R% = 2% THEN 640 260 IF R% = 3% THEN 1050 270 IF R% = 4% THEN 1250 280 IF R% = 5% THEN 2150 290 IF R% = 6% THEN 2330 300 IF R% = 7% THEN 3260 310 RESUME 150 320 ! 330 ! THIS ROUTINE CREATES THE MASTER FILE 340 ! 345 PRINT ' ' 350 ! 360 ON ERROR GOTO 580 370 INPUT 'ENTER FILE NAME' ;F$ 375 IF F$ = 'TEST9' GO TO 430 376 IF F$ = 'TEST91' GO TO 430 380 OPEN F$ FOR INPUT AS FILE #1% 390 PRINT 'FILE '; F$; ' ALREADY EXISTS. THE CREATE FUNCTION': PRINT 'WILL DESTROY THIS FILE. IF YOU REALLY WANT TO DESTROY': PRINT 'THIS EXISTING FILE, ENTER YES. OTHERWISE ENTER NO.' 400 INPUT A$ 410 IF A$ <> 'YES' THEN 345 420 CLOSE #1% 430 OPEN F$ FOR OUTPUT AS FILE #1% 440 F$ = F$ + '.QST' 450 OPEN F$ FOR OUTPUT AS FILE #2% 460 MAT D% = ZER(767%) 470 MAT H% = ZER(255%) 480 Q$(100%) = ' ' 490 I% = 1%: K% = 1% 500 GOSUB 3550 510 PRINT 'ENTER QUESTION' 520 GOSUB 3690 530 IF Z% = 9% THEN 150 540 D%(2%*I%-1%) = K%: D%(2%*I%) = L% 550 GOSUB 3830 560 I% = I% + 1%: K% = K% + L% 570 GOTO 510 580 IF ERR = 2% OR ERR = 6% THEN PRINT 'INVALID FILE NAME.': RESUME 350 590 IF ERR = 10 THEN PRINT F$; 'ALREADY EXISTS AND CANNOT BE USED': PRINT 'AS A FILE NAME. PLEASE SELECT ANOTHER FILE NAME.': RESUME 350 600 IF ERR = 5 THEN RESUME 420 610 CLOSE #1%,#2% 620 ON ERROR GOTO 0 630 ! 640 !THIS ROUTINE ADDS QUESTIONS TO THE MASTER FILE 650 ! 660 ON ERROR GOTO 3930 670 PRINT 'ENTER FILE NAME': INPUT F$ 680 OPEN F$ FOR INPUT AS FILE #1% 690 F$ = F$ + '.QST' 700 OPEN F$ FOR INPUT AS FILE #2% 710 IF H%(0%) < 2% THEN 820 720 M% = 2%*H%(0%)! SORT OF HOLE DIRECTORY 730 F% = 0% 740 FOR I% = 2% TO M% STEP 2% 750 IF H%(I%) < H%(I%+2%) THEN T% = H%(I%): H%(I%) = H%(I%+2%): H%(I%+2%) = T%: F% = 1%: T% = H%(I%-1%): H%(I%-1%) = H%(I%+1%): H%(I%+1%) = T% 760 NEXT I% 770 M% = M% - 2% 780 IF F% <> 0% THEN 730 790 FOR I% = 2% TO 254% STEP 2% 800 IF H%(I%) = 0% THEN H%(0%) = (I% / 2%) - 1%: GOTO 820 810 NEXT I% 820 K% = D%(0%) 821 FOR C% = 6% TO 766% STEP 2% 822 IF D%(C%) = 0% THEN 829 823 NEXT C% 829 I% = C% 830 GOSUB 3550 840 PRINT ' ': PRINT 'ENTER QUESTION' 850 GOSUB 3690 860 IF Z% = 9% THEN 150 870 IF D%(C%) = 0% THEN 900 880 C% = C% + 2% 890 GOTO 870 900 M% = 2% * H%(0%) 910 IF H%(0%) = 0% THEN 990 920 IF H%(2%) < L% THEN 990 930 ! 940 !FIND QUESTION STORAGE LOCATION 950 ! 960 FOR J% = M% TO 2% STEP (-2%) 970 IF H%(J%) >= L% THEN H%(J%) = H%(J%) - L%: K% = H%(J%-1%): D%(C%-1%) = K%: D%(C%) = L%: H%(J%-1%) = K% + L%: GO TO 1010 980 NEXT J% 990 D%(C%) = L%: D%(C%-1%) = K% 1000 D%(0%) = K% + L% 1010 GOSUB 3830 1020 K% = D%(0%) 1030 GOTO 840 1040 ! 1050 !THIS ROUTINE DELETES QUESTION FROM THE MASTER FILE 1060 !BY REPLACING LENGTH OF QUESTION WITH 0. 1070 ! 1080 ON ERROR GO TO 3930 1090 PRINT 'ENTER FILE NAME:': INPUT F$ 1100 OPEN F$ FOR INPUT AS FILE #1% 1110 C% = H%(0%) 1120 PRINT 'TO DELETE A QUESTION, ENTER QUESTION NUMBER TO BE': PRINT 'DELETED. WHEN YOU ARE FINISHED, ENTER 0 (ZERO).' 1130 ON ERROR GO TO 1220 1140 PRINT 'QUESTION TO BE DELETED': INPUT I% 1150 IF I% <> 0% THEN 1170 1160 H%(0%) = C%: CLOSE #1%: GOTO 150 1170 IF I% < 1% OR I% > 384 THEN PRINT 'INVALID QUESTION NUMBER.': GOTO 1140 1180 FOR M% = 2% TO 254% STEP 2% 1190 IF H%(M%) = 0% THEN H%(M%) = D%(2%*I%): H%(M%-1%) = D%(2%*I%-1%): D%(2%*I%) = 0%: C% = C% + 1%: GOTO 1140 1200 NEXT M% 1210 PRINT 'DELETING QUESTIONS AT THIS TIME WOULD BE HIGHLY': PRINT 'WASTEFUL. PLEASE ADD SOME QUESTIONS.': GOTO 1160 1220 IF ERR = 50% THEN PRINT 'DATA FORMAT ERROR':RESUME 1140 1230 GO TO 3930 1240 ! 1250 !THIS ROUTINE EDITS QUESTIONS IN A MASTER FILE 1260 ! 1270 PRINT 'ENTER FILE NAME' 1280 ON ERROR GO TO 3930 1290 INPUT F$ 1300 OPEN F$ FOR INPUT AS FILE #1% 1310 F$ = F$ + '.QST' 1320 OPEN F$ AS FILE #2% 1330 ON ERROR GO TO 2120 1340 PRINT 'WHAT QUESTION DO YOU WANT TO EDIT? AFTER LAST QUESTION ENTER 0.' 1350 PRINT 'QUESTION NUMBER (END=0)': INPUT N% 1360 IF N% = 0% THEN CLOSE #1,#2: GO TO 150 1370 IF D%(2%*N%) = 0% THEN PRINT 'QUESTION'; N%; ' DOES NOT EXIST. PLEASE TRY AGAIN.': GOTO 1350 1380 L$ = '' 1390 FOR B% = D%(2%*N%-1%) TO ((D%(2%*N%-1%)+D%(2%*N%))-1%) 1400 L$ = L$ + Q$(B%) 1410 NEXT B% 1420 PRINT 'QUESTION'; N%; ' NOW READS' 1430 C% = 6% 1440 L% = 1% 1450 C1% = INSTR(C%,L$,CHR$(13%)) 1460 IF C1% = 0% THEN PRINT L%; TAB(9); RIGHT (L$,C%): GOTO 1500 1470 PRINT L%; TAB(9); MID(L$,C%,C1%-C%) 1480 C% = C1% + 2%: L% = L% + 1% 1490 GOTO 1450 1500 PRINT 'EDIT ROUTINE: END OF QUESTION=0, CHANGE LINE=1, INSERT LINE=2, DELETE LINE=3':INPUT N1% 1510 IF N1% = 0% THEN 1990 1520 IF N1% = 1% THEN 1670 1530 IF N1% = 2% THEN 1830 1540 IF N1% <> 3% THEN 1500 1550 ! 1560 !DELETES LINE 1570 ! 1580 PRINT 'LINE NUMBER TO BE DELETED': INPUT N2% 1590 IF N2% < 1% OR N2% > L% THEN PRINT 'INCORRECT LINE NUMBER. TRY AGAIN.': GOTO 1560 1600 C% = 6%: L% = 1% 1610 C1% = INSTR(C%,L$,CHR$(13%)) 1620 IF C1% = 0% THEN L$ = LEFT(L$, C%-1%): GO TO 1420 1630 IF L% = N2% THEN L$ = LEFT(L$,C%-1%) + RIGHT(L$,C1%+2%): GOTO 1420 1640 C% = C1% + 2%: L% = L% + 1% 1650 GOTO 1610 1660 ! 1670 !CHANGE LINE 1680 ! 1690 PRINT 'LINE NUMBER TO BE CHANGED': INPUT N2% 1700 IF N2% < 1% OR N2% > L% THEN PRINT 'INCORRECT LINE NUMBER, TRY AGAIN': GOTO 1690 1710 C% = 6%: L% = 1% 1720 C1% = INSTR(C%,L$,CHR$(13%)) 1730 IF C1% = 0% THEN PRINT 'LINE'; N2%; ' WAS BLANK.': L1$ = LEFT(L$,C%-1%): L3$ = '': GOTO 1770 1740 IF L% = N2% THEN L1$ = LEFT(L$,C%-1%): L3$ = RIGHT(L$,C1% + 2%): PRINT 'LINE NUMBER '; N2%; ' READS': PRINT ' '; MID(L$,C%,C1%-C%): GO TO 1770 1750 C% = C1% + 2%: L% = L% + 1% 1760 GOTO 1720 1770 PRINT 'ENTER NEW LINE' 1780 INPUT LINE L2$ 1790 IF LEN(L2$) > 76% THEN PRINT 'LINE TOO LONG, TRY AGAIN': GOTO 1770 1800 L$ = L1$ + L2$ + L3$ 1810 GOTO 1420 1820 ! 1830 !INSERTS NEW LINE 1840 ! 1850 PRINT 'LINE NUMBER PRECEEDING INSERTED LINE': INPUT N2% 1860 IF N2% < 0% OR N2% > L% THEN PRINT 'INCORRECT LINE NUMBER, TRY AGAIN': GOTO 1850 1870 IF N2% = 0% THEN L1$ = LEFT(L$,5%): L3$ = RIGHT(L$,6%): GOTO 1940 1880 C% = 2%: L% = 1% 1890 C1% = INSTR(C%,L$,CHR$(13%)) 1900 IF C1% = 0% THEN L1$ = L$: L3$ = '': GO TO 1940 1910 IF L% = N2% THEN L1$ = LEFT(L$,C1% + 1%): L3$ = RIGHT(L$,C1% + 2%): GO TO 1940 1920 C% = C1% +2%: L% = L% + 1% 1930 GO TO 1890 1940 PRINT 'LINE PRECEEDING INSERTED LINE IS:':PRINT' '; 1941 IF N2% = 0% THEN PRINT 'BLANK': GO TO 1950 1942 C% = 2%: L% = 1% 1943 C1% = INSTR(C%,L$,CHR$(13%)) 1944 IF C1% = 0% THEN PRINT 'BLANK': L1$ = LEFT(L$,C%-1%): L3$ = '': GO TO 1950 1945 IF L% = N2% THEN L1$ = LEFT(L$,C1% + 1%): L3$ = RIGHT(L$,C1% + 2%): PRINT MID(L$,C%,C1%-C%): GO TO 1950 1946 C% = C1% + 2%: L% = L% + 1% 1947 GO TO 1943 1950 INPUT LINE L2$: IF LEN(L2$) > 76 THEN PRINT 'LINE TOO LONG, TRY AGAIN.': GO TO 1380 1960 L$ = L1$ + L2$ + L3$ 1970 GO TO 1420 1980 ! 1990 !STORES EDITED QUESTION 2000 ! 2010 S$ = L$ 2020 L% = ((LEN(S$) -1%)/64%) + 1% 2030 IF L% <= D%(2%*N%) THEN D%(2%*N%) = L%: K% = D%(2%*N% - 1%): GO TO 2100 2040 IF H%(0%) = 0 THEN 2090 2050 M% = 2% * H%(0) 2060 FOR J% = M% TO 2% STEP -2% 2070 IF H%(J%) >= L% THEN H%(J%) = H%(J%) - L%: K% = H%(J% - 1%): D%(2%*N%-1%) = K%: H%(J%-1%) = K% + L%: GO TO 2100 2080 NEXT J% 2090 K% = D%(0%): D%(2%*N%) = L%: D%(2%*N%-1%) = K%: D%(0) = K% + L% 2100 GO SUB 3830 2110 GO TO 1350 2120 IF ERR = 50% THEN PRINT 'DATA FORMAT ERROR.': RESUME 2130 GO TO 3930 2140 ! 2150 !THIS ROUTINE ADDS ANSWERS TO EXISTING QUESTIONS' 2160 ! 2170 ON ERROR GOTO 3930 2180 PRINT 'ENTER FILE NAME': INPUT F$ 2190 OPEN F$ FOR INPUT AS FILE #1% 2200 F$ = F$ + '.QST' 2210 OPEN F$ FOR INPUT AS FILE #2% 2220 PRINT 'UPON PROMPTING BY COMPUTER, ENTER QUESTION NUMBER': PRINT 'FOLLOWED BY UP TO A FIVE CHARACTER ANSWER. WHEN FINISHED,': PRINT 'ENTER THE DIGIT 0 (ZERO).' 2230 ON ERROR GOTO 2300 2240 PRINT 'NEXT QUESTION NUMBER': INPUT I% 2250 IF I% = 0% THEN CLOSE #1%, #2%: GOTO 150 2260 PRINT 'ENTER ANSWER': INPUT L$ 2270 IF LEN(L$) > 5% THEN PRINT'ANSWER TOO LONG. TRY AGAIN.': GO TO 2240 2275 L$ = L$ + ' ' 2280 Q$(D%(2%*I%-1%)) = LEFT(L$,5%) + RIGHT(Q$(D%(2%*I%-1%)),6%) 2290 GOTO 2240 2300 IF ERR = 50% THEN PRINT 'DATA FORMAT ERROR': RESUME 2310 GO TO 3930 2320 ! 2330 ! THIS ROUTINT CREATES AND STORES TEST IN FILE LP0 2340 ! 2350 ON ERROR GO TO 3930 2360 PRINT 'ENTER FILE NAME:': INPUT F$ 2370 OPEN F$ FOR INPUT AS FILE #1% 2380 F1$ = F$ + '.QST' 2390 OPEN F1$ FOR INPUT AS FILE #2% 2400 PRINT 'DO YOU WANT THIS TEST SAVED (YES, NO).IF THIS IS': PRINT 'AN OLD TEST, ENTER OLD.' 2410 INPUT A1$ 2420 IF A1$ = 'OLD' THEN 2800 2430 IF A1$ = 'NO' THEN F$ = 'TEMP': F1$ = F$ + '.QST': GOTO 2540 2440 PRINT 'NAME OF TEST FILE' 2450 INPUT F$ 2455 IF F$ = 'TEST9' GO TO 2530 2456 IF F$ = 'TEST91' GO TO 2530 2460 ON ERROR GOTO 2510 2470 OPEN F$ FOR INPUT AS FILE #10% 2480 PRINT 'FILE '; F$; 'ALREADY EXISTS. THIS ROUTINE WILL DESTROY': PRINT 'THE FILE WHICH ALREADY EXISTS. IF YOU REALLY WANT TO': PRINT 'DESTROY THE EXISTING FILE, TYPE YES. OTHERWISE TYPE NO.' 2490 INPUT A$ 2500 IF A$ <> 'YES' GOTO 2440 2510 IF ERR <> 5% THEN 3930 2520 CLOSE #10% 2530 F1$ = F$ + '.QST' 2540 OPEN F$ FOR OUTPUT AS FILE #11% 2550 OPEN F1$ FOR OUTPUT AS FILE #12% 2560 DIM #11%, D1%(767%), H1%(255%) 2570 DIM #12%, Q1$(2500%) = 64% 2580 MAT D1% = ZER(767%) 2590 MAT H1% = ZER(255%) 2600 Q1$(20%) = ' ' 2610 I% = 1%: K% = 1% 2620 PRINT 'WHAT QUESTION DO YOU WANT PRINTED? AFTER LAST QUESTION ENTER 0.' 2630 ON ERROR GO TO 3230 2640 PRINT 'QUESTION NUMBER (END=0)': INPUT N% 2650 IF N% = 0% THEN 2760 2660 IF D%(2%*N%) = 0% THEN PRINT 'QUESTION DOES NOT EXIST.': PRINT ' PLEASE TRY AGAIN.': GOTO 2640 2670 D1%(2%*I%) = D%(2%*N%) 2680 D1%(2%*I%-1%) = K% 2690 I% = I% + 1% 2700 D7% = D%(2%*N%-1%) 2710 FOR X1% = 1% TO D%(2%*N%) 2720 Q1$(K%) = Q$(D7%) 2730 K% = K% + 1%: D7% = D7% + 1% 2740 NEXT X1% 2750 GOTO 2640 2760 D1%(0%) = K% 2770 CLOSE #1%, #2%, #11%, #12% 2780 OPEN F$ AS FILE #1% 2790 OPEN F1$ AS FILE #2% 2800 PRINT 'HOW MANY COPIES (1 _ 4)': INPUT C8% 2810 IF C8% > 4% OR C8% < 1% THEN PRINT 'HOW MANY COPIES!!!!': GO TO 2800 2820 OPEN 'PRINT' FOR OUTPUT AS FILE #3% 2830 FOR C9% = 1% TO C8% 2840 L1% = 1% 2850 Q9% = -1% 2860 I% = 0% 2870 I% = I% + 1%: Q9% = Q9% + 1% 2880 IF D%(2%*I%) <> 0% THEN 2910 2890 IF D%(2%*I%-1%) = 0% THEN 3180 2900 GOTO 2870 2910 L$ = '' 2920 FOR B% = D%(2%*I%-1%) TO ((D%(2%*I%-1%)+D%(2%*I%))-1%) 2930 L$ = L$ + Q$(B%) 2940 NEXT B% 2950 IF Q9% = 0% THEN 3110 2960 C% = 6% 2970 L% = 1% 2980 C1% = INSTR(C%,L$,CHR$(13)) 2990 IF C1% <> 0% THEN C% = C1% + 2%: L% = L% + 1%: GOTO 2980 3000 L1% = L1% + L% 3010 IF L1% > 60% THEN L1% = L%: PRINT #3%, CHR$(12) 3020 C% = 6% 3030 C1% = INSTR(C%,L$,CHR$(13)) 3040 PRINT #3%, TAB(3); Q9%; TAB(9); MID(L$,C%,C1%-C%) 3050 C% = C1% + 2% 3060 C1% = INSTR(C%,L$,CHR$(13)) 3070 IF C1% = 0% THEN PRINT #3%; TAB(9); RIGHT(L$,C%): GOTO 2870 3080 PRINT #3%, TAB(9); MID(L$,C%,C1%-C%) 3090 C% = C1% + 2% 3100 GOTO 3060 3110 C% = 2% 3120 C1% = INSTR(C%,L$,CHR$(13)) 3130 IF C1% = 0% THEN PRINT #3%, RIGHT(L$,C%): GOTO 2870 3140 PRINT #3%, MID(L$,C%,C1%-C%) 3150 L1% = L1% + 1% 3160 C% = C1% + 2% 3170 GOTO 3120 3180 IF C8% > 1% THEN PRINT #3%, CHR$(12) 3190 NEXT C9% 3200 CLOSE #1%, #2%, #3% 3210 CHAIN '$QUE' 31000 3220 GOTO 150 3230 IF ERR = 50% THEN PRINT 'DATA FORMAT ERROR': RESUME 3240 GO TO 3930 3250 ! 3260 !THIS ROUTINE FORMATS MASTER QUESTION FILE AND MOVES IT TO FILE LP0 3270 ! 3280 ON ERROR GO TO 3930 3290 PRINT 'ENTER FILE NAME': INPUT F$ 3300 OPEN F$ FOR INPUT AS FILE #1% 3310 F$ = F$ + '.QST' 3320 OPEN F$ FOR INPUT AS FILE #2% 3330 OPEN 'PRINT' FOR OUTPUT AS FILE #3% 3335 PRINT #3%, 'QUESTION LINE' 3336 PRINT #3%, 'NO. NO.' 3340 I% = 0% 3350 I% = I% + 1% 3360 IF D%(2%*I%) <> 0% THEN 3390 3370 IF D%(2%*I%-1%) = 0% THEN 3510 3380 GOTO 3350 3390 L$ = '' 3400 FOR B% = D%(2%*I%-1%) TO ((D%(2%*I%-1%)+D%(2%*I%))-1%) 3410 L$ = L$ + Q$(B%) 3420 NEXT B% 3430 PRINT #3%, I%; TAB(5); 'ANS '; LEFT(L$,5%) 3440 C% = 6% 3450 L% = 1% 3460 C1% = INSTR(C%,L$,CHR$(13%)) 3470 IF C1% = 0% THEN PRINT #3%,TAB(10); L%; TAB(15); RIGHT (L$,C%): GOTO 3350 3480 PRINT #3%, TAB(10); L%, TAB(15); MID(L$,C%,C1%-C%) 3490 C% = C1% + 2%: L% = L% +1% 3500 GOTO 3460 3510 CLOSE #1%, #2%, #3% 3515 PRINT 'THE TEST FILE WILL BE PRINTED ON THE PRINTER.' 3516 PRINT ' PICK UP YOUR COPY AT THE PRINTER.' 3520 CHAIN '$QUE' 31000 3530 GOTO 150 3540 ! 3550 !PRINTS INSTRUCTIONS FOR INPUTTING QUESTIONS 3560 ! 3565 PRINT ' ' 3570 PRINT ' QUESTIONS ONLY' 3580 PRINT' ' 3590 PRINT '1. QUESTIONS ARE ENTERED ONE LINE AT A TIME.' 3600 PRINT '2. BE SURE TO HIT THE RETURN KEY AFTER ENTERING A LINE.' 3610 PRINT '3. AFTER ENTERING THE LAST LINE OF A QUESTION, ENTER END.' 3620 PRINT '4. AFTER THE LAST QUESTION HAS BEEN ENTERED, ENTER STOP.' 3625 PRINT ' ' 3630 PRINT ' QUESTIONS AND ANSWERS' 3635 PRINT ' ' 3640 PRINT '1. QUESTIONS ARE ENTERED ONE LINE AT A TIME.' 3645 PRINT '2. BE SURE TO HIT THE RETURN KEY AFTER ENTERING A LINE.' 3650 PRINT '3. AFTER ENTERING THE LAST LINE OF QUESTION,' 3655 PRINT ' ENTER ANS.' 3660 PRINT '4. WHEN THE COMPUTER ASKS FOR THE ANSWER, YOU MAY ENTER' 3665 PRINT ' FROM 1-5 CHARACTERS, E.G., ABCDE OR 12345.' 3666 PRINT ' ' 3670 RETURN 3680 ! 3690 !ASSEMBLES LINES INTO QUESTION STRING 3700 ! 3710 S$ = '': Z% = 0% 3720 D5$ = CHR$(13) + CHR$(10) 3730 INPUT LINE L$ 3740 IF LEN(L$) > 76 THEN PRINT 'LINE TOO LONG. ENTER A SHORTER LINE.': GOTO 3730 3750 IF L$ = 'ANS' +D5$ THEN INPUT 'ANSWER';L$: L$=L$+' ': S$ = LEFT(L$,5%) + S$: GO TO 3790 3760 IF L$ = 'END' + D5$ THEN S$ = ' ' + S$ +' ': Z% = 1%: GOTO 3790 3765 IF L$ = 'STOP' + D5$ AND LEN(S$) > 0% THEN S$ = ' ' + S$ + ' ': L% = ((LEN(S$)-1%) / 64%) + 1%: D%(2%*I%-1%) = K%: D%(2%*I%) = L%: GOSUB 3830: D%(0%) = K%: CLOSE #1%,#2%: Z% = 9%: RETURN 3770 IF L$ = 'STOP' + D5$ THEN D%(0%) = K%: CLOSE #1%, #2%: Z% = 9%: RETURN 3780 S$ = S$ + L$: GOTO 3730 3790 S$ = S$ + ' ' 3800 L% = ((LEN(S$)-1%) / 64%) + 1% 3810 RETURN 3820 ! 3830 !STORES QUESTION IN Q$ 3840 ! 3850 IF L% = 1% THEN LSET Y5$ = S$: Q$(K%) = Y5$: RETURN 3860 FOR M% = 0% TO (L%-2%) STEP 1% 3870 LSET Y5$ = MID(S$,M%*64%+1%,64%): Q$(K%+M%) = Y5$ 3880 NEXT M% 3890 M% = L% - 1% 3900 LSET Y5$ = RIGHT(S$,M%*64%+1%): Q$(K%+M%) = Y5$ 3910 RETURN 3920 ! 3930 !ERROR ROUTINE 3940 ! 3950 CLOSE #1%,#2%,#10%,#11%,#12% 3960 IF ERR = 2% THEN PRINT F$; ' IS AN INVALID FILE NAME. START AGAIN.': RESUME 150 3970 IF ERR = 5% THEN PRINT F$; ' DOES NOT EXIST. START AGAIN.': RESUME 150 3980 IF ERR = 6% THEN PRINT F$; ' IS AN INVALID FILE NAME. START AGAIN.': RESUME 150 3990 IF ERR = 10% THEN PRINT F$; ' IS A PROTECTED FILE. START AGAIN.': RESUME 150 4000 ON ERROR GO TO 0 4010 END