home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 11 Util / 11-Util.zip / tktools.zip / turkish / teacher.bas < prev    next >
BASIC Source File  |  1996-08-18  |  10KB  |  408 lines

  1. ' Code by Turgut Kalfaoglu 
  2. ' Elementary Turkish Teacher with incomplete lessons.
  3. ' If you like this program, PLEASE send $20 to:
  4. '    Turgut Kalfaoglu
  5. '    1378 Sok, 8/10
  6. '    Alsancak, Izmir
  7. ' Version 2... released 18 august 1996
  8.  
  9. REM $INCLUDE: 'bsedospc.bi'
  10. DEFINT A-Z
  11. DECLARE SUB GRABKEY (V$)
  12. declare sub os2sound(freq,dur)
  13.  
  14. 100     OPTION BASE 1
  15.     DIM TURK$(500), ENG$(500), FOUND%(500), SCR(2000)
  16. 110 CLS
  17.     RANDOMIZE TIMER
  18.     COLOR 3
  19.     PRINT "                   Turkish Tutor Version 2.0"
  20.     PRINT "                 A program by Turgut Kalfaoglu"
  21.     PRINT "                 1378 Sok. 8/10, Izmir, Turkey"
  22.     PRINT
  23.     PRINT "Special Key assignments: See bottom of screen."
  24.     KEY ON
  25.     KEY 1, CHR$(153)
  26.     KEY 2, CHR$(154)
  27.     KEY 3, CHR$(143)
  28.     KEY 4, CHR$(128)
  29.     KEY 5, CHR$(36)
  30.     PRINT
  31.     COLOR 9
  32.     PRINT "Choose lesson number(s) -separated by commas&dashes- to begin:"
  33.     PRINT
  34.     COLOR 4
  35.         CLOSE 1
  36.     OPEN "TEACHER.DAT" FOR RANDOM AS 1 LEN = 34
  37.     FIELD #1, 2 AS LES.NO$, 16 AS WORD$, 16 AS CORR$
  38.     PR$ = ""
  39.         MINLESS = 9999
  40.         MAXLESS = 0
  41.     WHILE NOT EOF(1)
  42.         GET #1
  43.                 VLN = VAL(LES.NO$)
  44.                 IF VLN <> 0 THEN
  45.                    IF INSTR(PR$, "\" + (LES.NO$) + "\") = 0 THEN PRINT LES.NO$, : PR$ = PR$ + "\" + LES.NO$ + "\"
  46.                    IF VLN > MAXLESS THEN MAXLESS = VLN
  47.                    IF VLN < MINLESS THEN MINLESS = VLN
  48.         END IF
  49.     WEND
  50.     COLOR 3
  51. ASK.AGAIN:
  52.     LOCATE 20, 1, 1
  53.     PRINT "Other commands:"
  54.     PRINT
  55.     COLOR 31: PRINT "A"; : COLOR 11: PRINT "dd words ";
  56.     COLOR 31: PRINT "E"; : COLOR 11: PRINT "dit words ";
  57.     COLOR 31: PRINT "R"; : COLOR 11: PRINT "andom ";
  58.     COLOR 31: PRINT "S"; : COLOR 11: PRINT "earch ";
  59.     COLOR 31: PRINT "H"; : COLOR 11: PRINT "elp   ";
  60.     COLOR 31: PRINT "Q"; : COLOR 11: PRINT "uit   ";
  61. t$ = ""
  62. AG:
  63.     CALL GRABKEY(Q$)
  64.     PRINT Q$;
  65.     IF (Q$ >= "0" AND Q$ <= "9") OR (Q$ = ",") OR Q$ = "-" THEN t$ = t$ + Q$: GOTO AG
  66. GotInput:        
  67.     A$ = t$
  68.     IF Q$ = "A" THEN GOSUB ADD: CLOSE : GOTO 100
  69.     IF Q$ = "E" THEN GOSUB EDIT: CLOSE : GOTO 100
  70.     IF Q$ = "R" THEN GOSUB RANDIT : Q$=CHR$(13): GOTO GotInput
  71.     IF Q$ = "S" THEN GOSUB SEARCH: CLOSE : GOTO 100
  72.     IF Q$ = "Q" THEN CLOSE : PRINT : LOCATE 24, 1: PRINT "Hope you had fun!": END
  73.     IF VAL(A$) = 0 THEN t$ = "": GOSUB EXPLAIN: GOTO 110
  74.  
  75.     WHILE (INSTR(A$, "-"))  'resolving dashes
  76.     I = INSTR(A$, "-")
  77.     IF t > 0 THEN
  78.         L$ = LEFT$(A$, I - 1)
  79.         r$ = MID$(A$, I + 1)
  80.         FROM$ = ""
  81.         FOR t = LEN(L$) TO 1 STEP -1
  82.         t$ = MID$(L$, t, 1)
  83.         IF t$ < "0" OR t$ > "9" THEN EXIT FOR
  84.         FROM$ = t$ + FROM$
  85.         NEXT
  86.         FROM = VAL(FROM$)
  87.         L$ = LEFT$(L$, t)
  88.  
  89.         FOR t = 1 TO LEN(r$)
  90.         t$ = MID$(r$, t, 1)
  91.         IF t$ < "0" OR t$ > "9" THEN EXIT FOR
  92.         NEXT
  93.         till = VAL(LEFT$(r$, t - 1))
  94.         r$ = MID$(r$, t)
  95.  
  96.         IF till < FROM THEN SWAP till, FROM
  97.         n$ = ""
  98.         FOR t = FROM TO till
  99.         n$ = n$ + "," + MID$(STR$(t), 2)
  100.         NEXT
  101.         n$ = MID$(n$, 2)
  102.         A$ = L$ + n$ + r$
  103.     END IF 'does - exist here?
  104.     WEND
  105.  
  106.     A$ = "," + A$ + ","
  107.     GET #1, 1
  108.     I = 1
  109.     COLOR 7
  110.     WHILE NOT EOF(1) AND I < 501
  111.        GET #1 'read a record
  112.        t$ = "," + RTRIM$(LES.NO$) + ","
  113.        IF INSTR(A$, t$) > 0 THEN
  114.             LOCATE 24, 1
  115.             PRINT "Loading lesson #"; LES.NO$; "                    ";
  116.             TURK$(I) = WORD$
  117.             ENG$(I) = CORR$ + LES.NO$
  118.             FOUND%(I) = 0
  119.             I = I + 1
  120.        END IF
  121.     WEND
  122.         COLOR 9
  123.     TOTAL.WORDS = I - 1
  124.     IF TOTAL.WORDS = 0 THEN 100
  125. WORDS:
  126.     COLOR 9
  127.     QUEST = QUEST + 1
  128.  CLS
  129.     RN = INT(RND * 2) + 1
  130.     PRINT "What does this word mean in ";
  131.     IF RN = 2 THEN PRINT "Turkish?";  ELSE PRINT "English?";
  132.  
  133.     DONE = 0
  134.     COUNTER = 0
  135.  
  136.     WHILE COUNTER < 100 AND NOT DONE
  137.             Q = INT(RND * TOTAL.WORDS) + 1
  138.             IF FOUND%(Q) = 0 THEN DONE = -1
  139.             COUNTER = COUNTER + 1
  140.     WEND
  141.  
  142.     FROM.LESSON = VAL(MID$(ENG$(Q), 17))
  143.     TMP$ = ENG$(Q)
  144.     ENG$(Q) = LEFT$(ENG$(Q), 16)
  145.  
  146.     IF FROM.LESSON > 0 THEN PRINT "  ( from lesson"; FROM.LESSON; " )" ELSE PRINT
  147.         IF RN = 1 THEN
  148.             ASKFOR$ = TURK$(Q)
  149.             ANSWER$ = ENG$(Q)
  150.         ELSE
  151.             ASKFOR$ = ENG$(Q)
  152.             ANSWER$ = TURK$(Q)
  153.         END IF
  154.  
  155.         LOCATE 10, 25
  156.         COLOR 5
  157.         PRINT ASKFOR$
  158.         t = INSTR(ANSWER$, "  ")
  159.         IF t > 0 THEN ANS$ = LEFT$(ANSWER$, t - 1) ELSE ANS$ = ANSWER$
  160.         FAUL = 0
  161. AGAIN:  LOCATE 12, 25
  162.         PRINT SPACE$(40);
  163.         LOCATE , 25
  164.         COLOR 7
  165.                 INPUT "", GUESS$
  166.         GUESS$ = UCASE$(GUESS$)
  167.         COLOR 9
  168.         G = LEN(GUESS$)
  169.         IF G = 0 THEN FAUL = 5
  170.         IF ANS$ <> GUESS$ THEN
  171.                 IF INSTR(ANS$, GUESS$ + "/") > 0 AND LEN(GUESS$) > 1 THEN GOTO NEWPAT
  172.                 IF INSTR(ANS$, "/" + GUESS$) > 0 AND LEN(GUESS$) > 1 THEN GOTO NEWPAT
  173.                 FAUL = FAUL + 1
  174.                 IF FAUL < 3 THEN
  175.                     LOCATE 24, 1
  176.                     COLOR 31
  177.                     PRINT "Try again!";
  178.                                         OS2SOUND 40, 40
  179.                     COLOR 9
  180.                     GOTO AGAIN
  181.                 ELSE
  182.                     LOCATE 24, 1
  183.                     COLOR 6
  184.                     PRINT "The word was:";
  185.                     FOR KK = 80 TO 40 STEP -20
  186.                                                 OS2SOUND KK, 40
  187.                     NEXT KK
  188.                     LOCATE 11, 27
  189.                     PRINT "is";
  190.                     LOCATE 12, 25
  191.                     COLOR 7
  192.                     PRINT ANS$; SPACE$(30);
  193.                     COLOR 9
  194.                     CALL GRABKEY(Q$)
  195.                 END IF
  196.         ELSE
  197. NEWPAT:         LOCATE 12, 25
  198.                 COLOR 7, 0
  199.                 PRINT ANS$; SPACE$(30);
  200.                 LOCATE 24, 1
  201.                 COLOR 31
  202.                 PRINT "Correct!  ";
  203.                 FOR KK = 1 TO 2
  204.                                         OS2SOUND 2500, 40
  205.                                         OS2SOUND 40, 40
  206.                 NEXT
  207.                 COLOR 9
  208.                 SCORE = SCORE + 1
  209.                 IF GEN < 5 THEN sleep 1
  210.                 FOUND%(Q) = FOUND%(Q) + 1
  211.         END IF
  212.         
  213.         ENG$(Q) = TMP$
  214.         LOCATE 20, 1
  215.         COLOR 3
  216.         IF GEN < 5 THEN GEN = GEN + 1: GOTO WORDS
  217.         PRINT "More words? "
  218.         GEN = 0
  219.         COLOR 9
  220. AGAINST:
  221.         CALL GRABKEY(Q$)
  222.         IF Q$ = "Y" OR Q$ = "y" THEN GOTO WORDS
  223.         IF Q$ <> "N" AND Q$ <> "n" THEN GOTO AGAINST
  224.                 FOR I = 0 TO 5
  225.             PRINT
  226.         NEXT
  227.         PRINT
  228.         COLOR 2
  229.         PRINT "Your score after "; QUEST; " questions is:"
  230.         PRINT
  231.         COLOR 12
  232.         SLEEP 2
  233.         GRADE = SCORE / QUEST * 100
  234.  
  235.                 IF GRADE > 89 THEN L$ = "A" ELSE IF GRADE > 79 THEN L$ = "B" ELSE IF GRADE > 69 THEN L$ = "C" ELSE IF GRADE > 59 THEN L$ = "D" ELSE L$ = "F"
  236.  
  237.         L$ = "(" + L$ + ")"
  238.         PRINT USING "###.##\              \ \ \"; GRADE; "% correct"; L$
  239.         CALL GRABKEY(Q$)
  240.         CLOSE : GOTO 100
  241. ADD:
  242.     CLS
  243.     PRINT
  244.     COLOR 3
  245.     PRINT "Locating free space..";
  246.     GET #1, 1
  247.     I = 1
  248.     WHILE NOT EOF(1)
  249.         GET #1, I
  250.         I = I + 1
  251.     WEND
  252.     I = I - 1
  253.     LOCATE , 1
  254.     PRINT SPACE$(70);
  255.     PRINT
  256.     PRINT "Enter lesson number to be entered: ";
  257.     INPUT LN
  258.     IF LN < 1 THEN RETURN
  259.     LSET LES.NO$ = MID$(STR$(LN), 2)
  260.     DONE = 0
  261.     WHILE NOT DONE
  262.           CLS
  263.           PRINT "Lesson number:"; LES.NO$
  264.           PRINT
  265.           PRINT "Enter word in Turkish, or blank return to save and exit."
  266.           INPUT W$
  267.                   w$=ucase$(w$)
  268.           IF W$ = "" THEN DONE = -1
  269.           IF NOT DONE THEN
  270.                 LSET WORD$ = W$
  271.                 PRINT "Enter the corresponding English word for "; W$
  272.                 INPUT W$
  273.                                 w$=ucase$(w$)
  274.                 LSET CORR$ = W$
  275.                 PUT #1, I
  276.                 I = I + 1
  277.           END IF
  278.     WEND
  279.     RETURN
  280.  
  281.  
  282. EDIT:
  283.     CLS
  284.     PRINT
  285.     COLOR 3
  286.         PRINT "Enter lesson number to be edited: ";
  287.     INPUT LN
  288.     IF LN < 1 THEN RETURN
  289.     LSET LES.NO$ = MID$(STR$(LN), 2)
  290.         GET #1,1
  291.         I=1
  292.         WHILE NOT EOF(1)
  293.           GET#1,I
  294.           IF VAL(LES.NO$)<> LN THEN GOTO EdNextword
  295.           PRINT WORD$ , CORR$
  296.           PRINT "<E>dit, <D>elete, <ENTER> to keep " ;
  297. zz:       AA$=ucase$(INPUT$(1))
  298.           IF AA$<>"E" and AA$<>"D" and AA$<>CHR$(13) THEN goto zz
  299.           PRINT AA$
  300.           IF AA$="D" THEN 
  301.              LSET LES.NO$=""
  302.              LSET WORD$=""
  303.              LSET CORR$=""
  304.              PUT #1,I
  305.              GOTO EdNextWord
  306.           END IF
  307.           IF AA$="E" THEN
  308.              PRINT "Type in new word, or ENTER to keep "; WORD$
  309.              INPUT AH$
  310.              IF AH$<>"" THEN LSET WORD$=LTRIM$(RTRIM$(UCASE$(AH$)))
  311.              PRINT "Type in its equivalent, or ENTER to keep "; CORR$
  312.              INPUT AH$             
  313.              IF AH$<>"" THEN LSET CORR$=LTRIM$(RTRIM$(UCASE$(AH$)))
  314.              PUT #1,I
  315.              GOTO EdNextWord
  316.           END IF
  317. EdNextWord:
  318.           I=I+1         
  319.     WEND
  320.         RETURN
  321.  
  322.  
  323.  
  324.  
  325.  
  326. SEARCH:
  327.     CLS
  328.     LOCATE 5, 1
  329.     TITLE = 0
  330.     PRINT "Enter word to be searched, or blank RETURN to get back."
  331.     LOCATE 12, 25
  332.     COLOR 7
  333.     INPUT W$
  334.         w$=ucase$(w$)
  335.     COLOR 3
  336.     W = LEN(W$)
  337.     IF W$ > "" THEN
  338.         GET #1, 1
  339.         WHILE NOT EOF(1)
  340.             IF INSTR(WORD$, W$) > 0 THEN GOSUB ECHO
  341.             IF INSTR(CORR$, W$) > 0 THEN GOSUB ECHO
  342.             IF INSTR(LES.NO$, W$) > 0 THEN GOSUB ECHO
  343.             GET #1
  344.         WEND
  345.         GET #1, 1
  346.         PRINT "Search complete. Hit any key"
  347.         CALL GRABKEY(Q$)
  348.     END IF
  349.     RETURN
  350.  
  351. RANDIT:
  352.    TT = INT(RND*(MAXLESS-MINLESS))+MINLESS+1
  353.    T$ = MID$(STR$(TT),2)
  354.    RETURN
  355.  
  356. ECHO:
  357.     IF TITLE = 0 THEN PRINT "Lesson #", "Turkish        ", "English      ": TITLE = -1
  358.     PRINT LES.NO$, WORD$, CORR$
  359.     RETURN
  360.  
  361.  
  362. EXPLAIN:
  363.     CLS
  364.     RESTORE INFO
  365.     READ Q$
  366.     IZ = 1
  367.     WHILE Q$ <> "*"
  368.         IZ = IZ + 1
  369.         LOCATE LROW + IZ, LCOL + (70 - LEN(Q$)) / 2
  370.         PRINT Q$;
  371.         READ Q$
  372.     WEND
  373.  
  374.     CALL GRABKEY(Q$)
  375.     RETURN
  376. INFO:
  377.     DATA "User-Supported Software"," "
  378.     DATA "Instructions:"
  379.     DATA "This program has a rather large dictionary that contains both"
  380.     DATA "Turkish and English equivalents of every word. You may choose"
  381.     DATA "to be drilled on one or more chapters. If you wish to be quizzed"
  382.     DATA "on just one chapter, enter the number of the chapter, then hit"
  383.     DATA "SPACE BAR to begin. If you wish to combine several chapters into"
  384.     DATA "the quiz, then separate the chapter numbers by commas or dashes."
  385.     DATA "The program will keep asking the questions that you missed"
  386.         DATA "previously, mixing them with the unasked questions."
  387.     DATA "(A)dd option allows you to enter new words, even chapters."
  388.     DATA "(S)earch provides a quick look-up for unknown words."
  389.     DATA " ","If you like this program please send $20 to the address"
  390.         DATA "shown on the title screen. Thank you for supporting shareware!"
  391.     DATA "*"
  392.  
  393. SUB GRABKEY (V$) STATIC
  394.     V$ = ""
  395.     LOCATE , , 1,1,30
  396.     WHILE V$ = ""
  397.         V$ = INKEY$
  398.     WEND
  399.     V$ = UCASE$(V$)
  400.     END SUB
  401.  
  402.  
  403. sub OS2SOUND(FREQ,DUR) STATIC
  404.         x = DOSBEEP(FREQ,DUR)
  405.         END SUB
  406.  
  407.  
  408.