10 REM" [0x16] [0x07] [0x0E] 20 REM" [0x08] [0x08] [0x08] [0x08] [0x08] [0x08] Self test program 30 REM" [0x08] [0x08] [0x08] [0x08] [0x08] [0x08] Self test program 40 REM" [0x08] [0x08] [0x08] [0x08] [0x08] [0x08] By C.J.Richardson. 50 REM" [0x08] [0x08] [0x08] [0x08] [0x08] [0x08] By C.J.Richardson. 60 REM" [0x08] [0x08] [0x08] [0x08] [0x08] [0x08] For Laura Davison. 3 hours work. 70 REM" [0x08] [0x08] [0x08] [0x08] [0x08] [0x08] -------------------------------- 80 REM" [0x08] [0x08] [0x08] [0x08] [0x08] [0x08] This program is Public domain. 90 REM" [0x08] [0x08] [0x08] [0x08] [0x08] [0x08] [0x08] Please do not alter it in any 100 REM" [0x08] [0x08] [0x08] [0x08] [0x08] [0x08] [0x08] way. If you use any of the 110 REM" [0x08] [0x08] [0x08] [0x08] [0x08] [0x08] [0x08] routines, please mention me 120 REM" [0x08] [0x08] [0x08] [0x08] [0x08] [0x08] [0x08] in the titles. Thanks, CJR. 130 REM" [0x08] [0x08] [0x08] [0x08] [0x08] [0x08] [0x08] -------------------------------- 140 DEFFNS="selftes" 150 IF PAGE<>&1900:PAGE=&1900:CHAIN"selftes" 155 ONERROR IF ERR=17 END ELSE CLOSE#0:REPORT:PRINTERL:PRINT"PRESS A KEY":REPEATUNTILGET 160 OSCLI"K.0":OSCLI"K.1":OSCLI"K.2":OSCLI"K.3":OSCLI"K.4":OSCLI"K.5":OSCLI"K.6":OSCLI"K.7":OSCLI"K.8" 170 MODE7:S%=0 180 PROCd("Self test program for L.Davison"):PROCd("By C.J.Richardson") 190 OSCLI".":PRINT 200 PROCd("Enter a filename"):PROCd("or press RETURN to continue") 210 INPUT$&900:IF$&900<>"":F%=OPENIN$&900:INPUT#F%,Q%:DIMQ$(Q%):FORL%=1TOQ%:INPUT#F%,Q$(L%):NEXT:CLOSE#F% 220 IF$&900="" Q%=100:DIMQ$(Q%): REM"Q% IS THE NUMBER OF QUESTIONS 230 ONERRORVDU3:CLOSE#0:REPORT:PRINTERL:PRINT"PRESS A KEY":REPEATUNTILGET 240 REPEAT:*FX21 250 CLS:PRINT':PROCd("Self test"):PRINT'' 260 PROCd("(L)oad"):PROCd("(S)ave"):PROCd("(A)dd"):PROCd("(E)dit"):PROCd("(R)ead"):PROCd("(T)est. Best so far="+STR$S%) 270 I$=GET$:CLS 280 IFASCI$>96 I$=CHR$(ASC(I$)-32) 290 IF I$="L" PROCd("RESTART. Are you sure? Y/N"):IF GET$="Y" RUN 300 IF I$="S":OSCLI".":INPUT"Filename to save "$&900:F%=OPENOUT$&900:PRINT#F%,Q%:FORL%=1TOQ%:PRINT#F%,Q$(L%):NEXT:CLOSE#F% 310 IF I$="A" PROCadd 320 IF I$="E" PROCedit 330 IF I$="R" PROCread 340 IF I$="T" PROCplay 350 UNTILFALSE 360 END 370 DEFPROCadd:L%=0:REPEAT:L%=L%+1:UNTILL%=Q% OR Q$(L%)="" 380 IF Q$(L%)<>"":PROCd("NO ROOM! Press a key"):REPEATUNTILGET:ENDPROC 390 PROCd("Add number:"+STR$L%) 400 PROCget:ENDPROC 410 DEFPROCedit:PROCd("Enter question number to edit"):INPUT L% 420 PROCsplit 430 PROCd("Question:"):PRINTQ$ 440 PROCd("Answer:"):PRINTA$ 450 PROCget:ENDPROC 460 DEFPROCread:PROCd("To Printer? Y/N"):IFGET$="Y"VDU2 ELSE VDU14:PROCd("Shift to scroll") 470 FORL%=1TOQ%:IF Q$(L%)<>"" PROCsplit:PRINT"Question:";STR$L%'Q$'"Answer:";STR$L%'A$:NEXT ELSE NEXT 480 VDU15,3:PROCd("Press a key"):REPEATUNTILGET:ENDPROC 490 DEFPROCget:PROCd("Enter the question and answer"):PROCd("Use the format:") 500 PROCd("Question**Answer") 510 T$="":C%=0:REPEAT 520 T%=GET:IF T%<>127VDUT% 530 IF T%=127 IF C%<>0 IF RIGHT$(T$,1)<>"*" T$=LEFT$(T$,LENT$-1):C%=C%-1:VDU127 ELSE IF T%<>13 IF T%<>127 T$=T$+CHR$T%:C%=C%+1 540 IFRIGHT$(T$,2)="**"IFT%<>127PRINT:PROCd("Answer:") 550 UNTILT%=13 OR C%=255 560 Q$(L%)=T$:IF T$<>"" IF INSTR(T$,"**")=0PROCd("The format is incorrect!"):PROCd("Press a key"):REPEATUNTILGET 570 ENDPROC 580 DEFPROCplay 590 S%=0:L%=0 600 PRINT':PROCd("Test"):PROCd("(R)andom or "):PROCd("(S)equential") 610 IF INSTR("Rr",GET$) T%=1 ELSE T%=0 620 REPEAT:CLS:PROCd("Score:"+STR$S%) 630 IF T%=1 Q$(L%)="":PROCgetnext ELSE L%=L%+1 640 PROCsplit:PROCd("Question "+STR$L%):PRINTQ$ 650 INPUT'T$:A$=FNcase(A$):T$=FNcase(T$) 660 IF T$=A$:S%=S%+2:PROCd("FULLY CORRECT!") 670 IF T$<>A$ IF LENT$>LENA$/2 S%=S%+1:IF INSTR(A$,T$)ORINSTR(T$,A$):PROCd("PARTLY CORRECT! Answer is:"):PRINT'A$ ELSE IF T$<>A$ PROCd("WRONG! Answer is:"):PRINT'A$ 680 PRINT:PROCd("PRESS A KEY"):REPEATUNTILGET 690 UNTILL%=Q% 700 ENDPROC 710 DEFFNcase(I$):FORI%=1TOLENI$:J%=ASC(MID$(I$,I%)) 720 IFJ%>96 I$=LEFT$(I$,I%-1)+CHR$(J%-32)+MID$(I$,I%+1) 730 NEXT:=I$ 740 DEFPROCgetnext:Z%=0:REPEAT:Z%=Z%+1:L%=RND(Q%-1):UNTILQ$(L%)<>""OR Z%=30 750 IFZ%=30:L%=0:REPEAT:L%=L%+1:UNTILL%=Q% OR Q$(L%)<>"" 760 ENDPROC 770 DEFPROCsplit:Q$=LEFT$(Q$(L%),INSTR(Q$(L%),"**")-1):A$=MID$(Q$(L%),INSTR(Q$(L%),"**")+2):ENDPROC 780 DEFPROCd(D$):PRINTTAB(16-LEN(D$)/2);"";D$;TAB(16-LEN(D$)/2);"";D$:ENDPROC