home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
CPM
/
EDUCATIN
/
HEBREW.LBR
/
DABAR.BZS
/
DABAR.BAS
Wrap
BASIC Source File
|
2000-06-30
|
30KB
|
905 lines
100 REM ***********************************************************
110 REM * DABAR 1.0 *
150 REM * HEBREW VOCABULARY DRILL SYSTEM *
200 REM * *
250 REM * COPYRIGHT 1986 BY DANIEL R. CRIDER *
300 REM * THIS PROGRAM IS RELEASED INTO THE PUBLIC DOMAIN *
350 REM * ON A SHAREWARE BASIS. PLEASE SEND $10 TO DANIEL CRIDER *
400 REM * FOR THE RIGHT TO USE THIS PROGRAM. THIS PROGRAM IS NOT *
450 REM * TO BE RE-SOLD OR RE-RELEASED WITH ANY COMMERCIAL *
470 REM * PACKAGE OR PROGRAM. *
500 REM * FOR NOTICE OF OTHER RIGHTS AND RESTRICTIONS PLEASE *
550 REM * SEE THE FILE DABAR.DOC WHICH SHOULD BE SUPPLIED WITH *
600 REM * THIS PROGRAM. PLEASE MAIL YOUR PAYMENT AND ANY COMMENTS *
950 REM * TO: *
1000 REM * *
1050 REM * DANIEL CRIDER *
1070 REM * 6604 CERVANTES AVE *
1100 REM * FT. WORTH, TEXAS 76133 *
1150 REM * *
1600 REM ************ SET UP ARRAYS
1650 DIM LI(30),US(30)
1700 ML=0
1750 DIM W$(9),W1$(9),W2$(9),WD(3,9)
1800 DIM CONS$(44,7), CN$(23)
1850 DIM VOW$(12,3)
1900 DIM FIN$(4,10)
1950 GOSUB 4750
2000 REM ************ LOAD ALPHABET
2005 PRINT
2010 PRINT TAB(36);"DABAR 1.0"
2014 PRINT
2015 PRINT TAB(18);" COPYRIGHT 1986 BY DANIEL R. CRIDER"
2020 PRINT
2050 OPEN "I",1,"LETTERS.BAS"
2100 FOR I=1 TO 44
2150 PRINT "PLEASE STANDBY.....LOADING HEBREW CONSONANTS ";I
2200 GOSUB 5150
2250 FOR J=1 TO 7
2300 LINE INPUT#1,AX$
2350 CONS$(I,J)=MID$(AX$,13,8)
2400 NEXT J
2450 NEXT I
2500 PRINT
2550 FOR I=1 TO 12
2600 PRINT "...................LOADING HEBREW VOWELS ";I
2650 GOSUB 5150
2700 FOR J=1 TO 3
2750 LINE INPUT#1,AX$
2800 VOW$(I,J)=MID$(AX$,13,8)
2850 NEXT J
2900 NEXT I
2950 PRINT
3000 FOR I=1 TO 4
3050 PRINT "...................LOADING SPECIAL CHARACTERS ";I
3100 GOSUB 5150
3150 FOR J=1 TO 10
3200 LINE INPUT#1,AX$
3250 FIN$(I,J)=MID$(AX$,13,8)
3300 NEXT J
3350 NEXT I
3400 CLOSE #1
3450 FOR I=1 TO 23:READ CN$(I):NEXT I
3500 PRINT
3550 PRINT
3600 PRINT "ENTER SOME NUMBER FOR THE RANDOM SEED"
3650 PRINT "THE SAME NUMBER USED EACH TIME WILL GIVE THE SAME DRILLS"
3700 RANDOMIZE
3750 REM ************ OPEN VOCABULARY FILE
3800 PRINT
3850 PRINT "PLEASE STANDBY...SCANNING VOCABULARY FILE"
3900 OPEN "R",#1,"VOCAB",124
3950 FIELD #1,2 AS W$(1),2 AS W$(2),2 AS W$(3),2 AS W$(4),2 AS W$(5),2 AS W$(6),2 AS W$(7),2 AS W$(8),2 AS W$(9),106 AS Y$
4000 FIELD #1,18 AS Y3$,2 AS W1$(1),2 AS W1$(2),2 AS W1$(3),2 AS W1$(4),2 AS W1$(5),2 AS W1$(6),2 AS W1$(7),2 AS W1$(8),2 AS W1$(9),88 AS Y5$
4050 FIELD #1,36 AS Y4$,2 AS W2$(1),2 AS W2$(2),2 AS W2$(3),2 AS W2$(4),2 AS W2$(5),2 AS W2$(6),2 AS W2$(7),2 AS W2$(8),2 AS W2$(9),70 AS DF$
4100 LR=1
4150 DL=0
4200 GET #1,LR
4250 IF EOF(1) GOTO 4500
4300 WD(2,1)=CVI(W1$(1))
4350 IF WD(2,1)=99 THEN DL=DL+1
4400 LR=LR+1
4450 GOTO 4200
4500 LR=LR-1
4550 GOTO 5850
4600 REM ************ RING BELL CODE
4650 PRINT CHR$(7);CHR$(7);
4700 RETURN
4750 REM ************ CLEAR SCREEN CODE
4850 PRINT CHR$(26)
4900 RETURN
5150 REM ************ CURSOR UP SCREEN CODE
5250 PRINT CHR$(11);
5300 RETURN
5500 REM ************ CURSOR DOWN SCREEN CODE
5600 PRINT CHR$(10);
5650 RETURN
5850 REM ************ DISPLAY MENU
5900 SU=0
5950 GOSUB 4750
6000 PRINT TAB(22);"CURRENTLY ";LR-DL;" VOCABULARY WORDS ON FILE"
6050 PRINT
6100 PRINT
6150 PRINT TAB(35);"DABAR 1.0"
6160 PRINT TAB(25);"HEBREW VOCABULARY DRILL SYSTEM"
6175 PRINT TAB(35);"MASTER MENU"
6200 PRINT
6250 PRINT TAB(25);"1-- ADD NEW WORDS TO VOCABULARY"
6300 PRINT TAB(25);"2-- REVIEW LAST X WORDS"
6350 PRINT TAB(25);"3-- REVIEW ENTIRE VOCABULARY"
6400 PRINT TAB(25);"4-- REVIEW ENTIRE VOCABULARY--"
6450 PRINT TAB(25);" --CONCENTRATE ON LAST X WORDS"
6500 PRINT TAB(25);"5-- PRINT VOCABULARY"
6550 PRINT TAB(25);"6-- CORRECT VOCABULARY"
6600 PRINT TAB(25);"7-- END PROGRAM"
6650 PRINT
6700 PRINT
6750 PRINT TAB(28);"PLEASE ENTER YOUR CHOICE ";
6800 INPUT M
6850 IF M>7 OR M<1 THEN 6750
6900 ON M GOTO 7300,17450,18650,22100,32200,25850,6950
6950 REM ************ END PROGRAM
7000 PRINT "READY TO QUIT? (Y OR N) ";
7050 INPUT X$
7100 IF X$<>"Y" AND X$<>"N" THEN 7000
7150 IF X$="N" THEN 5850
7200 CLOSE #1
7250 SYSTEM
7300 REM ************ ADD NEW WORDS TO VOCABULARY
7350 FZ$=""
7400 IF SU=1 THEN 7750
7450 INPUT "DO YOU WANT MENUS? (Y OR N) ";MX$
7500 MN$="ON"
7550 IF MX$<>"Y" AND MX$<>"N" THEN 7450
7600 IF MX$="N" THEN MN$="OFF"
7650 INPUT "DO YOU WANT QUICK LOAD? (Y OR N) ";QK$
7700 IF QK$<>"Y" AND QK$<>"N" THEN 7650
7750 GOSUB 4750
7800 SU=1
7850 REM ************ SET UP CONSONANTS
7900 PRINT "ENTER NUMBER OF CONSONANTS PLEASE (ENTER 0 TO RETURN TO MENU) ";
7950 INPUT WL
8000 IF WL=0 THEN 5850
8050 IF WL<10 THEN 9000
8100 PRINT "LIMIT IS 9 CONSONANTS"
8150 GOTO 7900
8200 REM ************ CONSONANT SELECT MENU
8250 GOSUB 4750
8300 PRINT "SELECT YOUR CONSONANTS BY NUMBER"
8350 IF MN$="OFF" THEN RETURN
8400 PRINT "1. ALEP ' 10. YOD Y 19. KOP Q"
8450 PRINT "2. BET B,BH 11. KAP K,KH 20. RES R"
8500 PRINT "3. GIMEL G,GH 12. LAMED L 21. SEEN S'"
8550 PRINT "4. DALET D,DH 13. MEM M 22. SHEEN SH"
8600 PRINT "5. HE H 14. NUN N 23. TAW T,TH"
8650 PRINT "6. WAW W 15. SAMEK S 24. MAQQEPH -"
8700 PRINT "7. ZAYIN Z 16. AYIN ' 25. BLANK (NO CONS)"
8750 PRINT "8. HET H 17. PE P,PH 26. CORRECT LAST CONSONANT"
8800 PRINT "9. TET T 18. SADE S"
8850 PRINT:PRINT
8900 PRINT
8950 RETURN
9000 REM ************ CONSONANT DRIVER
9050 IX=0
9100 FOR J=1 TO 9
9150 WD(2,J)=43
9200 NEXT J
9250 FOR J=0 TO 9
9300 WD(1,J)=12
9350 WD(3,J)=12
9400 NEXT J
9450 IF QK$="Y" THEN 9900
9500 FOR WX=WL TO 1 STEP -1
9550 IX=IX+1
9600 GOSUB 8200
9650 GOSUB 5150:GOSUB 5150:GOSUB 5150
9700 GOSUB 40200
9750 GOSUB 42650
9800 IF IZ=26 THEN 10600
9850 IF IZ<>26 THEN 11200
9900 REM QUICK LOAD CONSONANTS ********************************
9950 GOSUB 8200
10000 PRINT "ENTER ALL CONSONANTS BY NUMBER SEPARATED BY COMMAS."
10050 LINE INPUT L$
10100 IF LEN(L$)<>WL*3-1 THEN PRINT "WRONG NUMBER OF CONSONANTS":GOTO 10050
10150 IL=1
10200 FOR WX=WL TO 1 STEP -1
10250 IX=IX+1
10300 IZ$=MID$(L$,IL,2)
10350 IL=IL+3
10400 IZ=VAL(IZ$)
10450 GOSUB 43300
10500 NEXT WX
10550 GOTO 11250
10600 REM ************ FIX LAST CONSONANT
10650 IF IX=1 THEN PRINT "THIS IS YOUR FIRST CONSONANT":GOTO 9750
10700 PRINT "WOULD YOU LIKE TO CHANGE CONSONANT NUMBER ";IX-1;" WHICH IS NOW"
10750 FOR J=1 TO 7:Z=WD(2,WX+1):PRINT CONS$(Z,J)
10800 NEXT J
10850 INPUT "ENTER Y TO CHANGE, N TO KEEP ";AX$
10900 IF AX$<>"Y" AND AX$<>"N" THEN 10850
10950 IF AX$="N" THEN 9600
11000 WX=WX+1
11050 WD(2,WX)=43
11100 IX=IX-1
11150 GOTO 9600
11200 NEXT WX
11250 REM ************ CHECK ALL CONSONANTS
11300 WX=1
11350 IF IZ=13 THEN ID=24
11400 WD(2,WX)=ID
11450 GOSUB 4750
11500 GOSUB 39550
11550 PRINT "ARE CONSONANTS CORRECT? ";
11600 INPUT AX$
11650 IF AX$<>"Y" AND AX$<>"N" THEN 11550
11700 IF AX$="Y" THEN 14300
11750 REM ************ FIX SOME CONSONANT
11800 GOSUB 11900
11850 GOTO 11450
11900 REM ************ CONSONANT REPAIR SUBROUTINE
11950 PRINT "ENTER CONSONANT NUMBER TO FIX (1 IS FAR RIGHT ";WL;" IS FAR LEFT) ";
12000 INPUT IX
12050 WX=WL-IX+1
12100 PRINT "WOULD YOU LIKE TO CHANGE CONSONANT NUMBER ";IX;" WHICH IS NOW"
12150 FOR J=1 TO 7:Z=WD(2,WX):PRINT CONS$(Z,J)
12200 NEXT J
12250 INPUT "ENTER Y TO CHANGE, N TO KEEP ";AX$
12300 IF AX$<>"Y" AND AX$<>"N" THEN 12250
12350 IF AX$="N" THEN 11950
12400 WD(2,WX)=43
12450 GOSUB 8200
12500 GOSUB 5150
12550 IF MN$="ON" THEN GOSUB 5150:GOSUB 5150
12600 IF MN$="ON" THEN PRINT "9. TET T 18. SADE S " "
12650 PRINT
12700 GOSUB 42650
12750 IF WX=1 AND IZ=13 THEN ID=23
12800 WD(2,WX)=ID
12850 RETURN
12900 REM ************ SELECT VOWELS MENU
12950 GOSUB 4750
13000 PRINT "SELECT YOUR VOWELS BY NUMBER"
13050 IF MN$="OFF" THEN RETURN
13100 PRINT "1. HOLEM 5. PATHAH 9. HATEPH-PATHAH"
13150 PRINT "2. HIREQ 6. SEGHOL 10. HATEPH-SEGHOL"
13200 PRINT "3. SERE 7. QUIBBUS 11. HATEPH-QUAMES"
13250 PRINT "4. QUAMES 8. SHEWA 12. CORRECT LAST VOWEL"
13300 RETURN
13350 REM QUICK LOAD VOWELS *********************************************
13400 IF MN$="OFF" THEN 13550
13450 GOSUB 12900:PRINT " 13. BLANK (NO VOWEL)"
13500 GOSUB 39550
13550 PRINT "ENTER ALL VOWELS BY NUMBER"
13600 PRINT "SEPARATED BY COMMAS."
13650 LINE INPUT L$
13700 IF LEN(L$)<>WL*3-1 THEN PRINT "WRONG NUMBER OF VOWELS ":GOTO 13650
13750 IL=1
13800 FOR WX=WL TO 1 STEP -1
13850 IX=IX+1
13900 IZ$=MID$(L$,IL,2)
13950 IL=IL+3
14000 IZ=VAL(IZ$)
14050 IF IZ=1 THEN WD(1,WX)=1
14100 IF IZ=13 THEN IZ=12
14150 IF IZ<>1 THEN WD(3,WX)=IZ
14200 NEXT WX
14250 GOTO 16850
14300 REM ************ SELECT VOWELS
14350 FOR J=0 TO 9
14400 WD(1,J)=12
14450 WD(3,J)=12
14500 NEXT J
14550 IX=0
14600 IF QK$="Y" THEN 13350
14650 FOR WX=WL TO 1 STEP -1
14700 IX=IX+1
14750 GOSUB 12900
14800 PRINT " 13. BLANK (NO VOWEL)"
14850 PRINT
14900 GOSUB 39550
14950 PRINT "ENTER VOWEL NUMBER FOR CONSONANT NUMBER ";IX
15000 INPUT IZ
15050 IF IZ=0 AND MN$="OFF" THEN GOSUB 4750:GOSUB 13100:GOTO 14950
15100 IF IZ<1 OR IZ>13 THEN 15050
15150 IF IZ=12 THEN 15400
15200 IF IZ=1 THEN WD(1,WX)=1
15250 IF IZ=13 THEN IZ=12
15300 IF IZ<>1 THEN WD(3,WX)=IZ
15350 GOTO 16800
15400 REM ************ FIX LAST VOWEL
15450 IF IX=1 THEN PRINT "THIS IS YOUR FIRST VOWEL.":GOTO 15000
15500 PRINT "WOULD YOU LIKE TO CHANGE VOWEL NUMBER ";IX-1;"WHICH IS NOW:"
15550 Z=WD(3,WX+1):Z2=WD(1,WX+1)
15600 IF Z=12 THEN Z=Z2
15650 IF Z=12 THEN PRINT "UNASSIGNED (NO VOWEL YET)":GOTO 16300
15700 ON Z GOTO 15750,15800,15850,15900,15950,16000,16050,16100,16150,16200,16250
15750 PRINT "HOLEM":GOTO 16300
15800 PRINT "HIREQ":GOTO 16300
15850 PRINT "SERE":GOTO 16300
15900 PRINT "QUAMES":GOTO 16300
15950 PRINT "PATHAH":GOTO 16300
16000 PRINT "SEGHOL":GOTO 16300
16050 PRINT "QUIBBUS":GOTO 16300
16100 PRINT "SHEWA":GOTO 16300
16150 PRINT "HATEPH-PATHAH":GOTO 16300
16200 PRINT "HATEPH-SEGHOL":GOTO 16300
16250 PRINT "HATEPH-QUAMES":GOTO 16300
16300 FOR J=1 TO 3
16350 PRINT VOW$(Z,J)
16400 NEXT J
16450 INPUT "ENTER Y TO CHANGE, N TO KEEP ";AX$
16500 IF AX$<>"Y" AND AX$<>"N" THEN 16450
16550 IF AX$="N" THEN 14750
16600 WX=WX+1
16650 WD(3,WX)=12:WD(1,WX)=12
16700 IX=IX-1
16750 GOTO 14750
16800 NEXT WX
16850 REM ************ FINAL VOWEL CHECK
16900 GOSUB 39550
16950 PRINT
17000 PRINT "ARE ALL VOWELS CORRECT? (Y OR N) "
17050 INPUT AX$
17100 IF AX$<>"Y" AND AX$<>"N" THEN 17000
17150 IF AX$="N" THEN 17350
17200 GOSUB 38000
17250 IF FZ$="REPAIR" THEN RETURN
17300 GOTO 7300
17350 GOSUB 23750
17400 GOTO 16850
17450 REM ************ REVIEW LAST X WORDS
17500 GOSUB 4750
17550 PRINT "ENTER THE NUMBER OF YOUR MOST RECENT VOCABULARY WORDS YOU WISH TO REVIEW"
17600 INPUT "ENTER A 0 TO RETURN TO THE MAIN MENU ";RX
17650 IF RX=0 THEN 5850
17700 RZ=RX
17750 IF RX>30 THEN RZ=30
17800 FOR I=1 TO 30:US(I)=0:LI(I)=0:NEXT I:UL=0:ML=0
17850 SS=0:SR=0
17900 PRINT "ENTER HALT TO RETURN TO MAIN MENU"
17950 PRINT "ENTER SCORE FOR YOUR SCORE"
18000 I=INT(RND*15)+1
18050 IF I>4 AND I<8 THEN 18500
18100 TR=INT(RND*RX)+1
18150 TR=TR+(LR-RX)
18200 FOR I=1 TO RZ
18250 IF US(I)=TR THEN 18100
18300 NEXT I
18350 GOSUB 23300
18400 GOSUB 20250
18450 GOTO 18000
18500 REM ********** CALL MISS LIST ******
18550 GOSUB 19550
18600 GOTO 18000
18650 REM ************ REVIEW ENTIRE VOCABULARY
18700 FOR I=1 TO 30:US(I)=0:LI(I)=0:NEXT I:UL=0:ML=0
18750 SS=0:SR=0
18800 RZ=30
18850 PRINT "ENTER HALT TO RETURN TO MAIN MENU"
18900 PRINT "ENTER SCORE FOR YOUR SCORE"
18950 I=INT(RND*15)+1
19000 IF I>4 AND I<8 THEN 19400
19050 TR=INT(RND*LR)+1
19100 FOR I=1 TO 30
19150 IF US(I)=TR THEN 18950
19200 NEXT I
19250 GOSUB 23300
19300 GOSUB 20250
19350 GOTO 18950
19400 REM ********** CALL MISS LIST ******
19450 GOSUB 19550
19500 GOTO 18950
19550 REM ************ GET ONE OFF OF MISS LIST
19600 IF ML=0 THEN RETURN
19650 MM=1
19700 I=INT(RND*ML)+1
19750 TR=LI(I)
19800 MI=I
19850 GOSUB 23300
19900 GOSUB 20250
19950 MM=0
20000 RETURN
20050 REM SCORE **********************************************
20100 PRINT "OUT OF ";SS-1;" WORDS YOU HAVE GOTTEN ";SR;" RIGHT FOR A"
20150 PRINT "GRADE OF ";((SR/(SS-1))*100)
20200 RETURN
20250 REM ******************** TRY THE WORD **************************
20300 SS=SS+1
20350 UL=UL+1
20400 IF UL=LR THEN FOR I=1 TO 30:US(I-1)=0:NEXT I:UL=0
20450 IF UL=RZ THEN FOR I=2 TO RZ:US(I-1)=US(I):NEXT I:UL=UL-1
20500 US(UL)=TR
20550 GOSUB 4750
20600 IF SS<>1 THEN PRINT "GRADE CURRENTLY ";INT((SR/(SS-1))*100)
20650 GOSUB 39550
20700 PRINT
20750 PRINT "DEFINITION IS...";
20800 INPUT AX$
20810 IF AX$="OR" OR AX$="**OR**" THEN 20800
20850 IF AX$="SCORE" THEN GOSUB 20050:GOTO 20700
20900 IF AX$="HALT" THEN 5850
20950 IF AX$="" OR AX$=" " THEN 21550
21000 X=INSTR(DF$,AX$)
21050 IF X=0 THEN 21550
21100 PRINT "*** CORRECT *** ";DF$
21150 IF MA=0 THEN SR=SR+1
21200 IF MM=0 THEN 21350
21250 FOR IJ=MI TO ML-1:LI(IJ)=LI(IJ+1):NEXT IJ
21300 ML=ML-1
21350 FOR I=1 TO 500:NEXT I
21400 IF MA<>0 THEN MA=MA-1:GOTO 20550
21450 GOTO 21500
21500 RETURN
21550 PRINT "*** INCORRECT ANSWER ***"
21600 GOSUB 4600
21650 MA=2
21700 IF KY$="N" THEN MA=1
21750 PRINT "DEFINITION IS...";DF$
21800 ML=ML+1
21810 IF ML>30 THEN ML=30
21850 LI(ML)=TR
21900 PRINT "STRIKE ANY KEY TO CONTINUE"
21950 X$=INKEY$
22000 IF X$="" THEN 21950
22050 GOTO 20250
22100 REM ************ REVIEW ENTIRE VOCABULARY--CONCENTRATE ON LAST X WORDS
22150 GOSUB 4750
22200 PRINT "ENTER THE NUMBER OF YOUR MOST RECENT VOCABULARY WORDS YOU WISH TO REVIEW"
22250 INPUT "ENTER A 0 TO RETURN TO THE MAIN MENU ";RX
22300 IF RX=0 THEN 5850
22350 FOR I=1 TO 30:US(I)=0:LI(I)=0:NEXT I:UL=0:ML=0
22400 RZ=30
22450 SS=0:SR=0
22500 PRINT "ENTER HALT TO RETURN TO MAIN MENU"
22550 PRINT "ENTER SCORE FOR YOUR SCORE"
22600 I=INT(RND*15)+1
22650 IF I>4 AND I<8 THEN 23150
22700 IF I>7 AND I<10 THEN TR=INT(RND*LR)+1:GOTO 22850
22750 TR=INT(RND*RX)+1
22800 TR=TR+(LR-RX)
22850 FOR I=1 TO 30
22900 IF US(I)=TR THEN 22750
22950 NEXT I
23000 GOSUB 23300
23050 GOSUB 20250
23100 GOTO 22600
23150 REM ********** CALL MISS LIST ******
23200 GOSUB 19550
23250 GOTO 22600
23300 REM ************ READ A WORD
23350 GET #1, TR
23400 FOR I=1 TO 9
23450 WD(1,I)=CVI(W$(I))
23500 WD(2,I)=CVI(W1$(I))
23550 WD(3,I)=CVI(W2$(I))
23600 NEXT I
23650 IF WD(2,1)=99 THEN TR=TR+1:GOTO 23350
23700 RETURN
23750 REM ************ CORRECT VOWEL SUBROUTINE
23800 PRINT "ENTER THE NUMBER OF THE CONSONANT WHOSE VOWEL YOU WOULD LIKE"
23850 PRINT "TO CHANGE. (1 IS FAR RIGHT, ";WL;"IS FAR LEFT)"
23900 INPUT IX
23950 IF IX=0 THEN RETURN
24000 IF IX>WL OR IX<1 THEN 23800
24050 WX=WL-IX+1
24100 PRINT "WOULD YOU LIKE TO CHANGE VOWEL NUMBER ";IX;"WHICH IS NOW:"
24150 Z=WD(3,WX):Z2=WD(1,WX)
24200 IF Z=12 THEN Z=Z2
24250 IF Z=12 THEN PRINT "UNASSIGNED (NO VOWEL YET)":GOTO 24900
24300 ON Z GOTO 24350,24400,24450,24500,24550,24600,24650,24700,24750,24800,24850
24350 PRINT "HOLEM":GOTO 24900
24400 PRINT "HIREQ":GOTO 24900
24450 PRINT "SERE":GOTO 24900
24500 PRINT "QUAMES":GOTO 24900
24550 PRINT "PATHAH":GOTO 24900
24600 PRINT "SEGHOL":GOTO 24900
24650 PRINT "QUIBBUS":GOTO 24900
24700 PRINT "SHEWA":GOTO 24900
24750 PRINT "HATEPH-PATHAH":GOTO 24900
24800 PRINT "HATEPH-SEGHOL":GOTO 24900
24850 PRINT "HATEPH-QUAMES":GOTO 24900
24900 FOR J=1 TO 3
24950 PRINT VOW$(Z,J)
25000 NEXT J
25050 INPUT "ENTER Y TO CHANGE, N TO KEEP ";AX$
25100 IF AX$<>"Y" AND AX$<>"N" THEN 25050
25150 IF AX$="N" THEN 23750
25200 WD(3,WX)=12:WD(1,WX)=12
25250 GOSUB 12900
25300 GOSUB 5250
25350 IF MN$="ON" THEN PRINT "4. QUAMES 8. SHEWA 12. BLANK OUT VOWEL "
25400 PRINT
25450 GOSUB 39550
25500 PRINT "ENTER VOWEL NUMBER FOR CONSONANT NUMBER ";IX
25550 INPUT IZ
25600 IF IZ<1 OR IZ>12 THEN 25500
25650 IF IZ=1 THEN WD(1,WX)=1
25700 IF IZ>1 THEN WD(3,WX)=IZ
25750 IF IZ=12 THEN WD(1,WX)=12:WD(3,WX)=12
25800 RETURN
25850 REM ******************* CORRECT VOCABULARY *******************
25860 MN$="ON":QK$="N"
25900 GOSUB 4750
25950 PRINT "ENTER WORD NUMBER TO CORRECT (0 RETURNS TO MAIN MENU)"
26000 PRINT "(THE LETTER 'S' WILL SEARCH FOR A WORD) ";
26050 INPUT TR$
26100 IF TR$="S" THEN 27050
26150 TR=VAL(TR$)
26200 IF TR<0 OR TR>LR THEN 25850
26250 IF TR=0 THEN GOTO 5850
26300 GOSUB 23300
26350 DW$=DF$
26400 GOSUB 39550
26450 PRINT "WORD NUMBER ";TR
26500 PRINT "DEFINITION IS ";DW$
26550 PRINT
26600 PRINT " CHOOSE ONE OF THE FOLLOWING:"
26650 PRINT "1--- CORRECT CONSONANTS 5--- DELETE WORD"
26700 PRINT "2--- CORRECT VOWELS 6--- STORE CORRECTED WORD"
26750 PRINT "3--- CORRECT DEFINITION 7--- GET ANOTHER WORD"
26800 PRINT "4--- RE-ENTER WORD FROM SCRATCH 8--- RETURN TO MAIN MENU"
26850 PRINT
26900 INPUT " ENTER YOUR CHOICE ";FM
26950 IF FM>8 OR FM<1 THEN 26900
27000 ON FM GOTO 28050,29300,29650,30300,30900,31300,28400,28850
27050 REM ************* SEARCH FOR A WORD **************************
27100 GOSUB 4750
27150 PRINT "ENTER A DEFINITION TO SEARCH FOR (STRIKE ENTER KEY TO ESCAPE"
27200 INPUT "SEARCH MODE) ";AX$
27250 IF AX$="" THEN 25850
27300 PRINT "SEARCHING..... POSSIBLE WORD NUMBERS ARE:"
27350 H=0
27400 FOR TR=1 TO LR
27450 GOSUB 23300
27500 X=INSTR(DF$,AX$)
27550 IF X=0 THEN 27700
27600 H=H+1
27650 PRINT TR;" ";
27700 NEXT TR
27750 PRINT
27800 PRINT H;" MATCHES TO SEARCH FOUND "
27850 PRINT "STRIKE ANY KEY TO CONTINUE"
27900 X$=INKEY$
27950 IF X$="" THEN 27900
28000 GOTO 25850
28050 REM *********** CORRECT CONSONANTS
28100 GOSUB 39550
28150 INPUT "DO YOU WISH TO CORRECT THE CONSONANTS IN THIS WORD? ";AX$
28200 IF AX$<>"Y" AND AX$<>"N" THEN 28150
28250 IF AX$="N" THEN GOSUB 4750:GOTO 26400
28300 GOSUB 11900
28350 GOTO 28050
28400 REM *********** GET ANOTHER WORD *********************
28450 PRINT "DO YOU WISH TO GET SOME OTHER WORD? "
28500 PRINT "BE WARNED....ANY CHANGES YOU HAVE MADE TO THE "
28550 PRINT "CURRENT WORD WILL BE DROPPED UNLESS YOU HAVE TAKEN OPTION 6"
28600 PRINT "AND STORED YOUR CHANGES TO DISK. STILL WANT ANOTHER WORD?"
28650 INPUT "ENTER Y TO GET ANOTHER WORD, N TO KEEP CURRENT WORD";AX$
28700 IF AX$<>"Y" AND AX$<>"N" THEN 28650
28750 IF AX$="N" THEN GOSUB 4750:GOTO 26400
28800 GOTO 25850
28850 REM ********* RETURN TO MAIN MENU ***************
28900 PRINT "DO YOU WISH TO RETURN TO MAIN MENU? "
28950 PRINT "BE WARNED...ANY CHANGES YOU HAVE MADE TO THE "
29000 PRINT "CURRENT WORD WILL BE DROPPED UNLESS YOU HAVE TAKEN OPTION 6"
29050 PRINT "AND STORED YOUR CHANGES TO DISK. DO YOU STILL WISH TO RETURN"
29100 INPUT "TO THE MAIN MENU? ENTER Y TO RETURN, N TO STAY IN CORRECTION MODE ";AX$
29150 IF AX$<>"Y" AND AX$<>"N" THEN 28850
29200 IF AX$="N" THEN GOSUB 4750:GOTO 26400
29250 GOTO 5850
29300 REM *********** CORRECT VOWELS ***************************
29350 GOSUB 39550
29400 INPUT "DO YOU WISH TO CORRECT THE VOWELS IN THIS WORD? ";AX$
29450 IF AX$<>"Y" AND AX$<>"N" THEN 29400
29500 IF AX$="N" THEN GOSUB 4750:GOTO 26400
29550 GOSUB 23750
29600 GOTO 29300
29650 REM *********** CORRECT DEFINITION ****************
29700 INPUT "DO YOU WISH TO CORRECT THE DEFINITION OF THIS WORD? ";AX$
29750 IF AX$<>"Y" AND AX$<>"N" THEN 29700
29800 IF AX$="N" THEN GOSUB 4750:GOTO 26400
29850 PRINT "ENTER NEW DEFINITION "
29900 INPUT DW$
29950 IF LEN(DW$)>70 THEN PRINT "DEFINITION IS TOO LONG":GOTO 29850
30000 PRINT "DEFINITION OK? "
30050 INPUT AX$
30100 IF AX$<>"N" AND AX$<>"Y" THEN 30000
30150 IF AX$="N" THEN 29850
30200 LSET DF$=DW$
30250 GOSUB 4750:GOTO 26400
30300 REM ********** RE-ENTER WORD ****************************
30350 GOSUB 4750
30400 GOSUB 39550
30450 PRINT "WOULD YOU LIKE TO RE-ENTER THIS WORD FROM SCRATCH? "
30500 PRINT "THIS IS THE ONLY WAY TO CHANGE THE NUMBER OF CONSONANTS "
30550 INPUT "IN THIS WORD....(ENTER Y TO RE-ENTER, N TO KEEP) ";AX$
30600 IF AX$<>"Y" AND AX$<>"N" THEN 30300
30650 IF AX$="N" THEN 26300
30700 FZ$="REPAIR"
30750 GOSUB 7850
30800 FZ$=""
30850 GOTO 25850
30900 REM ******** DELETE WORD *********
30920 IF TR=LR THEN 31260
30950 PRINT "NOTE: DELETED WORDS MAKE DISK SPACE VERY INEFFICIENT"
31000 PRINT "IT IS BETTER TO RE-ENTER WORD FROM SCRATCH THAN TO DELETE"
31050 INPUT "DO YOU WISH TO DELETE THIS WORD? ";AX$
31100 IF AX$<>"N" AND AX$<>"Y" THEN 31050
31150 IF AX$="N" THEN GOSUB 4750:GOTO 26400
31200 WD(2,1)=99:PRINT "NOW DELETING WORD # ";TR
31220 LR=LR-1
31250 GOTO 31700
31260 PRINT "THIS IS CURRENTLY THE LAST WORD IN THE FILE"
31265 GOSUB 4600:GOSUB 4600:GOSUB 4600
31270 PRINT "THE LAST RECORD CANNOT BE DELETED"
31275 PRINT "WHY DON'T YOU TRY RE-ENTERING SOME OTHER"
31280 PRINT "WORD FROM SCRATCH IN ITS PLACE?"
31285 PRINT "STRIKE ANY KEY TO CONTINUE"
31290 X$=INKEY$
31292 IF X$="" THEN 31290
31294 GOTO 25850
31300 REM ******* WRITE CORRECTED WORD TO DISK **********
31350 GOSUB 4750
31400 GOSUB 39550
31450 PRINT "DEFINITION IS ";DF$
31500 INPUT "READY TO WRITE THIS CORRECTED WORD TO DISK? ";AX$
31550 IF AX$<>"Y" AND AX$<>"N" THEN 31500
31600 IF AX$="N" THEN GOSUB 4750:GOTO 26400
31650 PRINT "NOW STORING ON RECORD NUMBER ";TR
31700 ON ERROR GOTO 39200
31750 FOR I=1 TO 9
31800 LSET W$(I)=MKI$(WD(1,I))
31850 LSET W1$(I)=MKI$(WD(2,I))
31900 LSET W2$(I)=MKI$(WD(3,I))
31950 NEXT I
32000 LSET DF$=DW$
32050 PUT #1,TR
32100 ON ERROR GOTO 0
32150 GOTO 25850
32200 REM ************ PRINT ENTIRE VOCABULARY
32250 PRINT "DO YOU WISH TO PRINT OUT THE ENTIRE VOCABULARY? (Y OR N)";
32300 INPUT AX$
32350 IF AX$<>"Y" AND AX$<>"N" THEN 32250
32400 BV=1: LV=LR:IP=0
32450 IF AX$="Y" THEN 32850
32500 PRINT "DO YOU WISH TO PRINT OUT PART OF THE VOCABULARY? (Y OR N)";
32550 INPUT AX$
32600 IF AX$<>"Y" AND AX$<>"N" THEN 32500
32650 IF AX$="N" THEN 5850
32700 INPUT "ENTER FIRST WORD NUMBER TO LIST ";BV
32750 INPUT "ENTER LAST WORD NUMBER TO LIST ";LV
32760 IF BV<1 THEN BV=1
32770 IF LV>LR THEN LV=LR
32800 GOTO 33050
32850 PRINT "DO YOU WANT A SORTED LISTING? ";
32900 INPUT AX$
32950 IF AX$<>"Y" AND AX$<>"N" THEN 32850
33000 IF AX$="Y" THEN 33300
33050 FOR TR=BV TO LV
33100 GOSUB 23300
33150 GOSUB 34950
33200 NEXT TR
33250 GOTO 5850
33300 REM ************ SORT ROUTINE **********************
33350 GOSUB 4750:PRINT "STANDBY FOR SORT (THIS MAY TAKE A WHILE)"
33400 DIM SO$(LR), SO(LR)
33450 FOR TR=1 TO LR
33500 GOSUB 23300:PRINT "RECORD ";TR:GOSUB 5150
33550 FOR I=1 TO 8
33600 IF WD(2,I)=43 AND WD(2,I+1)=43 THEN WL=I-1:GOTO 33700
33650 NEXT I
33700 CD$="":FOR I=WL TO 1 STEP -1
33750 Z=WD(2,I)
33755 IF Z=24 THEN Z=22
33760 ZX=Z+65
33800 IF Z=43 THEN ZX=64
33850 CD$=CD$+CHR$(ZX)
33900 NEXT I
33950 SO$(TR)=CD$:SO(TR)=TR
34000 NEXT TR
34050 PRINT
34100 PRINT "FIRST PASS COMPLETE, BEGINNING SECOND PASS":PRINT
34150 FOR I=1 TO LR-1
34200 FOR J=1 TO LR-1
34250 IF SO$(J)<SO$(J+1) THEN 34500
34300 TP$=SO$(J):TP=SO(J)
34350 SO$(J)=SO$(J+1):SO(J)=SO(J+1)
34400 SO$(J+1)=TP$:SO(J+1)=TP
34450 GOSUB 5150:PRINT "I= ";I;" J= ";J
34500 NEXT J:NEXT I
34550 PRINT "SORT COMPLETE....BEGINNING PRINTOUT"
34600 FOR SI=1 TO LR
34650 TR=SO(SI)
34700 GOSUB 23300:GOSUB 34950
34750 NEXT SI
34800 LPRINT CHR$(12);CHR$(12)
34850 ERASE SO$, SO
34900 GOTO 5850
34950 REM ************ PRINT A WORD ROUTINE
35000 IP=IP+1
35050 IF IP<>4 THEN 35200
35100 IP=1:LPRINT STRING$(70,"*")
35150 FOR IZ=1 TO 17:LPRINT:NEXT IZ
35200 LPRINT STRING$(70,"*")
35250 LPRINT "WORD NUMBER ";TR;" DEFINITION IS "
35300 LPRINT DF$
35350 Z=WD(2,1)
35400 LPRINT " ";
35450 FOR I=1 TO 9
35500 Z=WD(1,I)
35550 LPRINT VOW$(Z,3);
35600 NEXT I
35650 LPRINT
35700 FOR J=1 TO 7
35750 FOR I=0 TO 9
35800 Z=WD(2,I)
35850 IF I<>0 THEN 36400
35900 Z2=WD(2,1)
35950 IF Z2<>18 AND Z2<>25 AND Z2<>30 AND Z2<>32 THEN 36350
36000 Z2=WD(3,1)
36050 IF J<4 OR J>6 THEN 36350
36100 Z3$=VOW$(Z2,J-3)
36150 Z4$=MID$(Z3$,4,3)
36200 LPRINT Z4$;
36250 GOTO 36400
36300 Z=WD(2,1)
36350 LPRINT " ";
36400 IF I<>1 THEN 36750
36450 IF Z<>18 AND Z<>25 AND Z<>30 AND Z<>32 THEN 36750
36500 IF Z=18 THEN LPRINT FIN$(1,J);
36550 IF Z=25 THEN LPRINT FIN$(2,J);
36600 IF Z=30 THEN LPRINT FIN$(3,J);
36650 IF Z=32 THEN LPRINT FIN$(4,J);
36700 GOTO 36800
36750 LPRINT CONS$(Z,J);
36800 NEXT I
36850 LPRINT
36900 NEXT J
36950 FOR J=0 TO 3
37000 FOR I=0 TO 9
37050 Z2=WD(3,I)
37100 IF I<>0 THEN 37250
37150 LPRINT " ";
37200 GOTO 37750
37250 IF I<>1 THEN GOTO 37650
37300 Z=WD(2,1)
37350 IF Z<>18 AND Z<>25 AND Z<>30 AND Z<>32 THEN 37650
37400 IF Z=18 THEN LPRINT FIN$(1,J+7);
37450 IF Z=25 THEN LPRINT FIN$(2,J+7);
37500 IF Z=30 THEN LPRINT FIN$(3,J+7);
37550 IF Z=32 THEN LPRINT FIN$(4,J+7);
37600 GOTO 37750
37650 IF J=0 THEN LPRINT " ";
37700 IF J<>0 THEN LPRINT VOW$(Z2,J);
37750 NEXT I
37800 LPRINT
37850 NEXT J
37900 LPRINT
37950 RETURN
38000 REM ************ WRITE RECORD TO DISK
38050 ON ERROR GOTO 39200
38100 PRINT "WHAT IS THE DEFINITION OF THIS WORD?"
38150 INPUT DW$
38200 IF LEN(DW$)>70 THEN PRINT "YOUR DEFINITION IS TOO LONG, PLEASE ENTER A SHORTER ONE":GOTO 38100
38250 INPUT "READY TO WRITE ON DISK? (Y OR N) ";AX$
38300 IF AX$<>"Y" AND AX$<>"N" THEN 38250
38350 IF AX$="N" THEN 38100
38400 IF FZ$<>"REPAIR" THEN 38550
38450 LHOLD=LR
38500 LR=TR-1
38550 PRINT "STORING ON DISK RECORD ";LR+1
38600 FOR I=1 TO 9
38650 LSET W$(I)=MKI$(WD(1,I))
38700 LSET W1$(I)=MKI$(WD(2,I))
38750 LSET W2$(I)=MKI$(WD(3,I))
38800 NEXT I
38850 LSET DF$=DW$
38900 LR=LR+1
38950 PUT #1,LR
39000 ON ERROR GOTO 0
39050 IF FZ$<>"REPAIR" THEN RETURN
39100 LR=LHOLD
39150 RETURN
39200 REM ************ ERROR CONTROL
39250 PRINT "ERROR IS ";ERR
39300 IF ERR=61 THEN PRINT "YOUR DISK IS OUT OF SPACE"
39350 PRINT "PRESS ANY KEY TO CONTINUE"
39400 X$=INKEY$
39450 IF X$="" THEN 39400
39500 RESUME NEXT
39550 REM ************ DISPLAY WORD ROUTINE
39600 FOR I = 1 TO 8
39650 IF WD(2,I)=43 AND WD(2,I+1)=43 THEN WL=I-1:GOTO 39750
39700 NEXT I
39750 Z=WD(2,1)
39800 TX=INT((9-WL)/2)*8
39850 PRINT TAB(TX);
39900 PRINT " ";
39950 FOR I=1 TO WL
40000 Z=WD(1,I)
40050 PRINT VOW$(Z,3);
40100 NEXT I
40150 PRINT
40200 REM CALL POINT FOR NEW WORD
40250 FOR J=1 TO 7
40300 PRINT TAB(TX);
40350 FOR I=0 TO WL
40400 Z=WD(2,I)
40450 IF I<>0 THEN 41000
40500 Z2=WD(2,1)
40550 IF Z2<>18 AND Z2<>25 AND Z2<>30 AND Z2<>32 THEN 40950
40600 Z2=WD(3,1)
40650 IF J<4 OR J>6 THEN 40950
40700 Z3$=VOW$(Z2,J-3)
40750 Z4$=MID$(Z3$,4,3)
40800 PRINT Z4$;
40850 GOTO 41000
40900 Z=WD(2,1)
40950 PRINT " ";
41000 IF I<>1 THEN 41350
41050 IF Z<>18 AND Z<>25 AND Z<>30 AND Z<>32 THEN 41350
41100 IF Z=18 THEN PRINT FIN$(1,J);
41150 IF Z=25 THEN PRINT FIN$(2,J);
41200 IF Z=30 THEN PRINT FIN$(3,J);
41250 IF Z=32 THEN PRINT FIN$(4,J);
41300 GOTO 41400
41350 PRINT CONS$(Z,J);
41400 NEXT I
41450 PRINT
41500 NEXT J
41550 FOR J=0 TO 3
41600 PRINT TAB(TX);
41650 FOR I=0 TO WL
41700 Z2=WD(3,I)
41750 IF I<>0 THEN 41900
41800 PRINT " ";
41850 GOTO 42400
41900 IF I<>1 THEN GOTO 42300
41950 Z=WD(2,1)
42000 IF Z<>18 AND Z<>25 AND Z<>30 AND Z<>32 THEN 42300
42050 IF Z=18 THEN PRINT FIN$(1,J+7);
42100 IF Z=25 THEN PRINT FIN$(2,J+7);
42150 IF Z=30 THEN PRINT FIN$(3,J+7);
42200 IF Z=32 THEN PRINT FIN$(4,J+7);
42250 GOTO 42400
42300 IF J=0 THEN PRINT " ";
42350 IF J<>0 THEN PRINT VOW$(Z2,J);
42400 NEXT I
42450 PRINT
42500 NEXT J
42550 PRINT
42600 RETURN
42650 REM ************ CONSONANT DATA MATCH SUBROUTINE
42700 PRINT "INPUT YOUR CHOICE FOR CONSONANT NUMBER ";IX
42750 INPUT IZ
42800 IF IX=1 OR IZ<>25 THEN 43150
42850 IF WD(2,WX+1)=43 THEN 43000
42900 IF WX>2 AND WD(2,WX-1)=43 AND WD(2,WX-2)<>43 THEN 43000
42950 GOTO 43150
43000 PRINT "DOUBLE BLANKS OR BLANKS AT THE BEGINNING OF A WORD"
43050 PRINT "ARE NOT ALLOWED, PLEASE TRY SOMETHING ELSE"
43100 GOTO 42700
43150 IF IZ=0 THEN GOSUB 4750:GOSUB 8400:GOSUB 39550:GOTO 42650
43200 IF IZ>26 OR IZ<1 THEN 42750
43250 IF IZ=26 THEN 45000
43300 DX$="N"
43350 IF IZ>23 THEN 43550
43400 IF WX=1 AND (IZ=11 OR IZ=13 OR IZ=14 OR IZ=18 OR IZ=19) THEN 43600
43450 IF QK$="Y" AND IZ<>1 AND IZ<>5 AND IZ<>8 AND IZ<>16 AND IZ<>21 THEN PRINT "FOR THE ";CN$(IZ);" IN CONS # ";IX;
43500 IF IZ<>1 AND IZ<>5 AND IZ<>8 AND IZ<>16 AND IZ<>21 THEN INPUT "DAGHES NEEDED IN LETTER? (Y OR N) ";DX$
43550 IF DX$<>"N" AND DX$<>"Y" THEN 43300
43600 ID=IZ
43650 IF IZ=3 THEN ID=4
43700 IF IZ=4 THEN ID=6
43750 IF IZ=5 THEN ID=8
43800 IF IZ=6 THEN ID=9
43850 IF IZ=6 AND DX$="N" THEN INPUT "IS THIS A SUREQ WAW? (Y OR N) ";DX$
43900 IF DX$<>"N" AND DX$<>"Y" AND IZ=6 THEN DX$="N":GOTO 43850
43950 IF IZ=7 THEN ID=11
44000 IF IZ=8 THEN ID=13
44050 IF IZ=9 THEN ID=14
44100 IF IZ=10 THEN ID=16
44150 IF IZ=11 THEN ID=18
44200 IF IZ=12 THEN ID=20
44250 IF IZ=13 THEN ID=22
44300 IF IZ=14 THEN ID=25
44350 IF IZ=15 THEN ID=27
44400 IF IZ=16 THEN ID=29
44450 IF IZ=17 THEN ID=30
44500 IF IZ=18 THEN ID=32
44550 IF IZ=19 THEN ID=34
44600 IF IZ=20 THEN ID=36
44650 IF IZ=21 THEN ID=37
44700 IF IZ=22 THEN ID=39
44750 IF IZ=23 THEN ID=41
44800 IF IZ=24 THEN ID=44
44850 IF IZ=25 THEN ID=43
44900 IF DX$="Y" THEN ID=ID+1
44950 WD(2,WX)=ID
45000 RETURN
45050 DATA "ALEP","BET","GIMEL","DALET","HE","WAW","ZAYIN","HET","TET","YOD"
45100 DATA "KAP","LAMED","MEM","NUN","SAMEK","AYIN","PE","SADE","KOP","RES"
45150 DATA "SEEN","SHEEN","TAW"
ET","TET","YOD"
45100 DATA "KAP","LAMED","