   10REM SAVE"SELFTEST2"
   15MODE 12
   20 PRINT''CHR$(7)"PROGRAM SELFTEST2 / PBIBLE,"'''"by don.mcdonald@welcom.gen.nz, 16.2.1989,"''" 10.06.90, 18.07.97 , PH. 64(NZ) +4(-WN-) +389 6820." '' "ACORN ARCHIMEDES,   SET DIRECTORY "
   25PRINT '' "DO NOT RENUM.,  GOTOS.     CONTIN. IN 10 SEC."
   30*FX21,0
   40E$=INKEY$(1000)
   50NDIM=550  :  REM  WAS 255 SENTENCES, CHANGE IF NEEDED FOR MEMORY
   60DIM SENTENCE$(NDIM),PNTR%(NDIM)
   70DIM TBL%(8,5),TBL$(8)
   80FOR CAN=1TO8:TBL$(CAN)="AAAAAAAA":NEXT CAN
   90MODE7:REM VDU14
  100PROCTITLEINTRO
  110PROCLEARN
  120IF N%=0THEN PRINT''"ZERO SENTENCES, ENTER R OR Q.":GOTO 190
  130PROCREVIEWEDIT
  140PROCTEST
  150A$=""
  160PROCRESULTS
  170IF A$="P"THEN
  172 PRINT'"TURN PRINTER ON, PRESS ANY KEY //*TXCOPY ";GET$
  174: VDU 2  : PROCRESULTS :
  176ENDIF
  180ON ERROR REPORT:PRINT'CHR$(7)" at line ";ERL'
  184REPEAT
  190PRINT'"TYPE T.EST/REVIEW/EDIT"'"R.UN /CLEAR MEMORY & INPUT NEW DATA"'"P,RINT RESULTS,"'"O.UTPUT SENTENCES TO DATAFILE"'"/OR SPOOL FILE,      Q.UIT."
  200REPEAT
  210A$=GET$
  220UNTIL INSTR("TRPOQ",A$)
  230ON INSTR("TRPOQ",A$) GOTO 140,260,170,240,250
  240PROCOWTPUT:
  244UNTIL A$ = "Q" :  REM GOTO 180
  250PRINT'"PROGRAM SELFTEST2 /PBIBLE   E N D. CLOSE# ALL.": CLOSE#0
  254:STOP: GOTO 180
  260RUN
  270:
  280DEF PROCTITLEINTRO
  290DATA BOOKS OF THE BIBLE (CAPS LOCK.),DON S. MCDONALD,5,PENTATEUCH?GENESIS EXODUS LEVITICUS NUMBERS DEUTERONOMY,HISTORICAL BOOKS?JOSHUA JUDGES RUTH SAMUEL 2 KINGS 2 CHRONICLES 2 EZRA NEHEMIAH ESTHER
  300DATA POETICAL BOOKS?JOB PSALMS PROVERBS ECCLESIASTES SONG OF SOLOMON
  310DATA PROPHETICAL BOOKS?ISAIAH JEREMIAH LAMENTATIONS EZEKIEL DANIEL HOSEA JOEL AMOS OBADIAH JONAH MICAH NAHUM HABAKKUK ZEPHANIAH HAGGAI ZECHARIAH MALACHI
  320DATA NEW TESTAMENT?MATTHEW MARK LUKE JOHN ACTS ROMANS CORINTHIANS 2 GALATIANS EPHESIANS PHILIPPIANS COLOSSIANS THESSALONIANS 2 TIMOTHY 2 TITUS PHILEMON HEBREWS JAMES PETER 2 JOHN 3 JUDE REVELATION/APOCALYPSE
  330FOR E=1TO2:VDU132,157,129,141:PRINT"S E L F - T E S T":NEXT E
  340PRINT''CHR$(7)"BBC-BASIC V PROGRAM ""PBIBLE/SELFTEST2"""'"BY DS MCDONALD, WGTN, New Zld.,"'"Ph: 64(nz)+4(-wn-)-389 6820"''STRING$(40,"-")''
  350PRINT"TESTS PERSON(S) ON A TEXT QUIZ WHICH THE USER ENTERS."'''"MAY BE QUESTION AND ANSWER, MULTI-CHOICE, OR MEMORY."
  360FOR I=1TONDIM:PNTR%(I)=I:NEXT I
  370PROCSPACECONTINUE(5,20)
  380ENDPROC
  390:
  400DEF PROCSPACECONTINUE(COL,ROW)
  410PRINT TAB(COL,ROW);:PRINT CHR$(130)"PRESS SPACE BAR TO CONTINUE :"
  420PROCDELAY(.7)
  430*FX 21,0
  440REPEAT UNTIL GET$=" "
  450CLS
  460ENDPROC
  470:
  480DEF PROCDELAY(N)
  490FOR DELAY=1TO N*2000:NEXT DELAY
  500ENDPROC
  510:
  520DEF PROCLEARN
  521  
  530INPUT"ENTER SUBJECT OF TEST, (KEYBOARD)"''"OR RETURN (STORED DATA)";SUBJECT$
  540IF SUBJECT$<>""THEN PROCKEYIP:GOTO 600
  544MODE 12
  545VDU 14
  550CLS:PRINT"STORED DATA,    SHIFT"''"ENTER FILE NAME WHERE QUESTIONS ARE STORED,"''"OR (RETURN):USE BIBLE BOOKS DATA -INTERNAL TO PROGRAM."
  555*CAT
  560INPUT "FILENAME  (NULL = BOOKS OF OT/NT BIBLE)  "; FI$
  565VDU 15
  570IF FI$<>""THEN
  572 PROCFILEIP:  REM GOTO 600
  575 ELSE
  580READ SUBJECT$,TYPIST$,N%
  590FOR N=1TON%:READ SENTENCE$(N):NEXT N
  595ENDIF
  600MODE 7  : PRINT';N%" SENTENCES. CONTIN." GET$
  610NAME$=""
  620CAND=0 :SCORE=0
  630NSTART%=1:NFIN%=N%
  640FOR I=NSTART%TONFIN%:PNTR%(I)=I:NEXT I
  650REM PROCSPACECONTINUE(5,24)
  660ENDPROC
  670:
  680DEF PROCKEYIP:
  685PRINT"KEY INPUT,  SET  CAPS LOCK"
  690INPUT''"ENTER NAME",TYPIST$
  700REM KEYBOARD INPUT ONLY
  710CLS:PRINT CHR$(129)"SELF-TEST  --";SUBJECT$'TYPIST$
  720REM PEAT PRINT'"10K OF MEMORY (10,000 CHARS) AVAILABLE  FOR SENTENCES, E.G. ""QUEST?ANSWER"""'
  730REM INPUT"ENTER MAX NO. OF CHARS PER SENTENCE"'"(20-255)",LGTH
  740REM IF LGTH>255THEN LGTH=255
  750REM N%=1E4/LGTH
  760REM IF N%>255THEN N%=255
  770REM PRINT"ENTER MAX NO. OF SENTENCES, (MAX= ";N%" )";
  780REM INPUT N%
  790REM IF N%>255THEN N%=255
  800REM CLS:PRINT'"PROGRAM WILL RESERVE ";N%" SENTENCES"'"OF "LGTH" CHARS, + ALLOWANCE."'"IF YOU AGREE ENTER: Y-YES, (N - NO)";
  810REM INPUT Y$:UNTIL Y$="Y"
  820REM FOR I=1TON%:SENTENCE$(I)=STRING$(LGTH,"."):NEXT I
  830REM FREE=HIMEM-?2-?3*&100:PRINT;FREE" CHARS FREE !":VDU7,7,7:E$=INKEY$(600)
  840PRINT'"ENTER MEMORY TEXT :-"''"ONE SENTENCE AT A TIME, (MAX 6.\ LINES).  PRESS RETURN"'
  850PRINT"TYPE ? (OPTIONAL) AFTER PART OF SENTENCE WHICH IS TO BE GIVEN AS A CUE, OR QUESTION -- FOLLOW-ON ANSWER."''"E.G.  -QUESTION?ANSWER.  (RETURN)"'
  860PRINT"LIMIT ";NDIM" SENTENCES."''
  870PRINT CHR$(129)"ENTER NULL LINE (RETURN)"'CHR$(129)"TO END INPUT OF MEMORY TEXT."'
  880PROCSPACECONTINUE(3,22)
  890:
  900N=1
  910REPEAT
  920PROCSENTENCE
  930N=N+1
  940UNTIL N>NDIM OR SENTENCE$(N-1)=""  :  REM
  950N%=N-2
  960IF N>NDIM THEN N%=NDIM
  970ENDPROC
  980:
  990DEF PROCFILEIP:
  995PRINT"FILE INPUT  (Shift.)" : VDU 14
 1000REM INPUT"ENTER FILENAME TO READ SUBJECT/ SENTENCES FROM";FI$
 1010FI%=OPENIN(FI$):PRINT"TO INPUT FROM CHANNEL ";FI%"FILE """FI$""" ==="
 1020INPUT#FI%,FF$,D$,SUBJECT$,TYPIST$,N%
 1030PRINT'"FILE **"""FF$"   "D$'"SUBJECT: "SUBJECT$".. TYPIST: "TYPIST$"  N% SENTENCES=";N%
 1040REM PROCSPACECONTINUE(5,24)
 1050N%=0:  REM VDU14
 1060REPEAT N%=N%+1:INPUT#FI%,SENTENCE$(N%)
 1070PRINT;N%"  "SENTENCE$(N%)
 1080UNTIL EOF#FI%
 1090CLOSE#FI%:PRINT"CLOSED """FI$"""*** contin"GET$
 1100VDU15
 1110ENDPROC
 1120:
 1130DEF PROCSENTENCE
 1140REM  FREE=HIMEM-?2-?3*&100:IF FREE<800THEN PRINT"CAUTION..ONLY ";FREE"CHARS FREE !!"'"PRESS ANY KEY."CHR$(7);CHR$(7);GET$
 1150FOR L=1TO 7:PRINT; L:NEXT L
 1160PRINT"QUEST?ANSWER  ( RETURN )";TAB(0,VPOS-7);CHR$(129);"SENTC.";PNTR%(N);
 1170VDU135:INPUT LINE SENTENCE$(PNTR%(N))
 1180PRINT STRING$(240," ");STRING$(32," "),TAB(0,VPOS-5);
 1190ENDPROC
 1200:
 1210DEF PROCREVIEWEDIT
 1220CLS:PRINT CHR$(129)"REVIEW/EDIT"'''"PRESS SPACE BAR TO CONFIRM EACH","SENTENCE OF TEXT"'''"OR E - TO EDIT(TYPE IN AGAIN IF WRONG.)"'''"L - TO SKIP TO LAST."''
 1230FOR N=NSTART%TONFIN%
 1240 PRINT'';PNTR%(N)"  "SENTENCE$(PNTR%(N))''"SPACE CONT, E(DIT),  L(AST)"
 1250REPEAT E=INSTR(" LE",GET$)
 1260UNTIL E>0
 1270PROCDELAY(0.15):*FX21,0
 1280ON E GOTO 1310,1300,1290
 1290VDU7:PROCSENTENCE:GOTO 1240
 1300IF E=2THEN N=N%-1
 1310NEXT N
 1320PRINT''
 1330PROCSPACECONTINUE(5,24)
 1340ENDPROC
 1350:
 1360DEF PROCTEST
 1370CLS:PRINT CHR$(129)"TEST"
 1372REPEAT
 1380PRINT''"NO. OF QUESTIONS "N%
 1390INPUT''"START TEST AT SENTENCE NO. (RET = 1 )"; NST$
 1392IF NST$ = "" THEN NSTART% = 1  ELSE NSTART% = EVAL(NST$)
 1395PRINT NSTART%
 1397UNTIL NSTART% > 0 AND NSTART% <= N%
 1398
 1400REM IF NSTART%<1ORNSTART%>N%PRINT"WRONG NO.":GOTO 1380
 1404REPEAT
 1406NFIN% = N%
 1410PRINT''"FINISH TEST AT SENTENCE NO. (RET = ",NFIN% ")" ;
 1412INPUT ; NF$
 1414IF NF$ <> "" THEN NFIN% =  EVAL(NF$)
 1420IF NFIN%<NSTART% THEN PRINT"WRONG NO.":REM  GOTO 1410
 1430IF NFIN%>N%THEN N%=NFIN%:PRINT CHR$(7)"INCREASE SENTENCES TO ";N%:E$=INKEY$(700)
 1432UNTIL NFIN% >= NSTART% :  REM 1
 1440FOR I=1TONDIM:PNTR%(I)=I:NEXT I
 1450REPEAT
 1460PRINT''"TYPE SPACE - TAKE SENTENCES IN ORDER"''"OR    R (CAP) - RANDOM ORDER."
 1470O$=GET$
 1480UNTIL O$=" " OR O$="R"
 1490REM  VDU7:PROCDELAY(1):*FX21,0
 1500IF O$="R" THEN PROCMIX
 1510PRINT''"LAST CANDIDATE ";CAND"  "NAME$'"..SCORE ="SCORE
 1520INPUT LINE'"SELECT TEST - ENTER CANDIDATE NAME"''"OR REVIEW - PRESS RETURN",NAME$
 1530REM HEADING
 1540CLS:PRINT"SUBJECT OF TEST -"SUBJECT$''"BY -"TYPIST$
 1550PRINT''"START SENTENCE ";NSTART%" FINISH "NFIN%
 1560IF O$="R" PRINT'"SENTENCES IN RANDOM ORDER."
 1570IF NAME$=""THEN
 1575 PROCREVIEWEDIT:  REM GOTO 1670
 1577ELSE
 1580PRINT''"CANDIDATE -"NAME$''"PRESS SPACE EACH SENTENCE TO"'" START/RESUME CLOCK."''"READY    ..  T H I N K !!!"
 1590REPEAT UNTIL GET$=" "
 1600HOLD=0
 1610CAND=CAND+1
 1620IF CAND=9THEN CAND=3 :  REM 5
 1630SCORE=0:MAXSCORE=0
 1640FOR I=NSTART%TONFIN%
 1650PROCQUESTION
 1660NEXT I
 1665 ENDIF
 1670ENDPROC
 1680:
 1690DEF PROCMIX
 1700REM SORT SENTENCES IN RANDOM ORDER
 1710IF NSTART% < NFIN% THEN
 1712REM GOTO 1780
 1720FOR I=NSTART%TONFIN%
 1730J=(NSTART%-1)+RND(NFIN%-NSTART%+1)
 1740TEMP=PNTR%(I)
 1750PNTR%(I)=PNTR%(J)
 1760PNTR%(J)=TEMP
 1770NEXT I
 1775ENDIF
 1780ENDPROC
 1790:
 1800DEF PROCQUESTION
 1810S$=SENTENCE$(PNTR%(I))
 1820CLS
 1830NOW=TIME
 1840X=INSTR(S$,"?")
 1850IF X THEN PRINT LEFT$(S$,X);
 1860MAX=LEN(S$)-X
 1870IF X=LEN(S$)THEN
 1872 PRINT''"NOTHING TO ANSWER."
 1874ELSE:  REM  GOTO 2070
 1880CHARS=0
 1890FOR X=X+1TOLEN(S$)
 1900A$=GET$
 1910IF A$=MID$(S$,X,1) PRINT A$;:CHARS=CHARS+1:GOTO 1930
 1920VDU7,129,157,135:PRINT A$;CHR$(156);MID$(S$,X,1);
 1930NEXT X
 1940HOLD=HOLD+(TIME-NOW)
 1950SOUND1,-5,CHARS,20
 1960PRINT'''"CORRECT ";CHARS;" MAX. ";MAX;" %= ";INT(CHARS/MAX*100+.5);" TIME ";INT(HOLD*.01)
 1970IF MAX-CHARS<7 THEN 2050
 1980PRINT CHR$(129)"    OOO OOO"
 1990PRINT"__________"
 2000PRINT"|/     !"
 2010PRINT"|      O"
 2020PRINT"|     -|-"
 2030PRINT"|     / \"
 2040PRINT"|_________"
 2050SCORE=SCORE+CHARS
 2060MAXSCORE=MAXSCORE+MAX
 2065ENDIF
 2070PROCSPACECONTINUE(5,21)
 2080ENDPROC
 2090:
 2100DEF PROCRESULTS
 2110:PRINT CHR$(129)"RESULTS...";SUBJECT$'"CANDIDATE. "NAME$"  "CAND
 2120IF LEN(NAME$) > 0 THEN
 2125REM GOTO 2230
 2130PRINT"NO. OF QUESTIONS ";NFIN%-NSTART%+1
 2140PRINT"SCORE",SCORE
 2150PRINT"MAXSCORE. ",MAXSCORE
 2160PRINT"PERCENT=",.1*INT(SCORE*1000/MAXSCORE+.5)
 2170PRINT"TIME ",HOLD*.01
 2180TBL%(CAND,1)=NSTART%
 2190TBL%(CAND,2)=NFIN%
 2200TBL%(CAND,3)=SCORE
 2210TBL%(CAND,4)=INT(HOLD*.01+.5)
 2220TBL$(CAND)=LEFT$(NAME$,8)
 2225ENDIF
 2230PRINT'"CAND NAME  Q/START-FIN  SCORE TIME"'STRING$(35,"-");
 2240FOR CAN=1TO8:PRINT';CAN"  "TBL$(CAN);
 2250FOR T=1TO4:PRINT TAB(T*5+10);TBL%(CAN,T);:NEXT T:NEXT CAN
 2255VDU 3
 2260ENDPROC
 2270:
 2280DEF PROCOWTPUT:
 2284MODE 12
 2286:PRINT"OUTPUT DATA TO DISK."
 2290REPEAT
 2300PRINT'"SELECT: S - SPOOL SENTENCES TO ""SPTEMP"""''"OR F - SAVE TEST SENTENCES TO DATAFILE ""DATEMP""etc."
 2310INPUT FO$;
 2320UNTIL INSTR("SF",FO$) > 0
 2330IF FO$ = "S"THEN *SP. SPTEMP
 2340IF FO$ = "F"THEN
 2341*CAT
 2342INPUT" ENTER FILENAME FOR OUTPUT,  NULL = DATEMP.";FO$
 2344IF FO$ = "" THEN FO$ = "DATEMP"
 2346PRINT "FILE OUT =  "FO$  "  O.K.? Yy/n"
 2347IF INSTR("Yy",GET$) > 0 THEN FO%=OPENOUT(FO$):PRINT"OPENED FILE "FO$ " CHAN.";FO%  "CONTIN. "GET$
 2348ENDIF
 2349MODE 7
 2350INPUT LINE"ENTER DATE DD.MM.YYYY, AND TIME HH:MM ";D$
 2360IF FO$="S"THEN PRINT"SPTEMP  , ";D$'SUBJECT$'TYPIST$,N%  : ELSE PRINT#FO%, FO$, D$,SUBJECT$,TYPIST$,N%:PRINT'""""FO$""" ";D$'SUBJECT$'TYPIST$"  ";N%
 2370FOR I%=1TON%
 2380PRINT;I%"/ "SENTENCE$(I%):IF FO$ <> "S" THEN PRINT#FO%,SENTENCE$(I%)
 2390NEXT I%
 2400PRINT TIME/6000;" mins."'"END===": IF FO$="S" THEN  *SP.
 2410 IF FO$ <> "S"THEN  CLOSE#FO%: PRINT"** CLOSED """FO$""" CHAN. ";FO%
 2420PRINT''CHR$(7)"OWTPUT FINISHED."
 2430ENDPROC
 2440: