home *** CD-ROM | disk | FTP | other *** search
/ 17 Bit Software 1: Collection A / 17Bit_Collection_A.iso / files / 983.dms / 983.adf / Tutor / TUTOR < prev    next >
Text File  |  1989-09-24  |  9KB  |  303 lines

  1. ' -- TALKING SPELLER TUTOR Program --
  2. ' --  Written by James W. Kummer   --
  3. ' --       COPYRIGHT 1987          --
  4.  DIM WORDS$(4,90),INDX(90),PQ$(3),MA1%(8),MA2%(8),MA3%(8)
  5.  DATA 110,0,150,0,22200,64,10,1,0
  6.  DATA 100,1,180,0,22200,64,10,1,0
  7.  DATA 145,0,140,1,23500,64,10,1,0
  8.  FOR I=0 TO 8 : READ MA1%(I) : NEXT I
  9.  FOR I=0 TO 8 : READ MA2%(I) : NEXT I
  10.  FOR I=0 TO 8 : READ MA3%(I) : NEXT I
  11.  BOXT=79
  12.  PQ$(1)="NOW FOR THE NEXT PHRASE"
  13.  PQ$(2)="THE NEXT ONE IS"
  14.  PQ$(3)="AND THE NEXT IS"
  15.  ON MOUSE GOSUB HITMOUSE
  16.  MOUSE OFF
  17.  LPQ=0
  18.  PRINT "TALKING SPELLER TUTOR - SHAREWARE"
  19.  PRINT "COPYRIGHT 1987 - NOT FOR RESALE - MAY BE GIVEN FREELY"
  20.  PRINT "PLEASE PAY FOR USE OF TUTOR, TAILOR & FILES - SEND $5 TO:"
  21.  PRINT "JAMES W. KUMMER "
  22.  PRINT "784 S. HOYT STREET, LAKEWOOD CO 80226"
  23.  PRINT
  24.  Q$="WELCOME TO TALKING SPELLER TUTOR"
  25.  SAY TRANSLATE$(Q$),MA1%
  26.  PRINT Q$
  27.  Q$="SPECIFY YOUR FILE NAME BY PATH (e.g. GERMAN1 - IF YOU BOOT WITH THIS DISK)"
  28.  PRINT Q$
  29.  Q$="SPECIHFY YOUR FILE NAME BY PATH"
  30.  SAY TRANSLATE$(Q$),MA3%
  31.  ON ERROR GOTO GOOF
  32. STARTER: 
  33.  PRINT "File Name? "
  34.  INPUT AME$
  35.  OPEN "I",#1,AME$
  36.  DBL=0   '               ------ TWO-PHRASE/ONE-PHRASE FLAG
  37.  NWORD=0
  38. ILOOP:
  39.  IF EOF(1) THEN CEOF           
  40.  INPUT #1,A$
  41.  LA=LEN(A$)
  42.  IF LA=0 THEN CEOF
  43.  Q$=SPACE$(LA)
  44.  IF A$=Q$ THEN CEOF
  45.  NWORD=NWORD+1
  46.  FOR I=1 TO 4 : WORDS$(I,NWORD)="" : NEXT I 
  47.  LEQ=INSTR(A$,"=")  '          ------------ LOCATION OF EQUAL-SIGN
  48.  LSEM=INSTR(A$,";") '         ----------- LOCATION OF SEMICOLON
  49.  IF LEQ=0 THEN SIDE1
  50.    IF LSEM>LEQ THEN LSEM=0
  51.    DBL=1 '                  ------------ FILE IS TWO-PHRASE
  52.    LSEM2=INSTR(LEQ,A$,";") '     ---------LOCATION OF 2nd SEMICOLON
  53.    IF LSEM2=0 THEN YEQ
  54.      L2=LA-LSEM2
  55.      WORDS$(4,NWORD)=MID$(A$,LSEM2+1,L2) '  ---- EXTRACT 4th FIELD
  56. YEQ:
  57.    IF LSEM2=0 THEN LSEM2=LA+1
  58.    L2=LSEM2-LEQ-1
  59.    WORDS$(3,NWORD)=MID$(A$,LEQ+1,L2) '  ---- EXTRACT 3rd FIELD
  60. SIDE1:
  61.    IF LSEM=0 THEN PART1
  62.      IF LEQ=0 THEN LEQ=LA+1
  63.      L2=LEQ-LSEM-1
  64.      WORDS$(2,NWORD)=MID$(A$,LSEM+1,L2) '  ---- EXTRACT 2nd FIELD
  65. PART1:
  66.   IF LEQ=0 THEN LEQ=LA+1
  67.   IF LSEM=0 THEN LSEM=LEQ
  68.   L2=LSEM-1
  69.   WORDS$(1,NWORD)=MID$(A$,1,L2)  '     ------------------ EXTRACT 1st FIELD
  70.  IF WORDS$(3,NWORD)="" THEN WORDS$(4,NWORD)=WORDS$(2,NWORD)
  71.  IF WORDS$(2,NWORD)="" THEN WORDS$(2,NWORD)=WORDS$(1,NWORD)
  72.  IF WORDS$(3,NWORD)="" THEN WORDS$(3,NWORD)=WORDS$(1,NWORD)
  73.  IF WORDS$(4,NWORD)="" THEN WORDS$(4,NWORD)=WORDS$(3,NWORD)
  74.  FOR J=1 TO 4 : WORDS$(J,NWORD)=UCASE$(WORDS$(J,NWORD)) : NEXT J
  75.  GOTO ILOOP
  76. CEOF:
  77.  ON ERROR GOTO 0
  78.  MOUSE ON
  79.  CLOSE #1
  80.  L1=1 : L2=3
  81.  IF DBL=0 THEN PNEXT
  82.  Q$="DO YOU WANT TO BE PROMPTED WITH THE FIRST"
  83.  PRINT Q$;" (1)"
  84.  SAY TRANSLATE$(Q$),MA1%
  85.  Q$="OR THE SECOND PHRASE?"
  86.  PRINT Q$;" (2)"
  87.  SAY TRANSLATE$(Q$),MA1%
  88.  INPUT I
  89.  IF I=1 THEN PNEXT
  90.  L1=3 : L2=1
  91. PNEXT:
  92.  WR=0 '                ------------------- WRITTEN TEST FLAG
  93.  Q$="DO YOU WANT A WRITTEN TEST?"
  94.  PRINT Q$;" (Y or N)"
  95.  SAY TRANSLATE$(Q$),MA3%
  96.  INPUT Q$
  97.  IF UCASE$(Q$)="Y" THEN WR=1
  98.  Q$="DO YOU WANT THE LIST RANDOMIZED?"
  99.  PRINT Q$;" (Y or N)"
  100.  SAY TRANSLATE$(Q$),MA2%
  101.  INPUT Q$
  102.  FOR I=1 TO NWORD : INDX(I)=I :NEXT I  '  ----- INDEX TO WORDS
  103.  IF UCASE$(Q$)<>"Y" THEN QNEXT
  104.    RANDOMIZE TIMER  '   ------------- SEED THE RANDOM NUMBER GENERATOR
  105.    LWORD=NWORD
  106. RLOOP:
  107.    J=INT(LWORD*RND+.99999) '    ------------  RANDOMLY RESHUFFLE THE INDEX 
  108.    I=INDX(J) : INDX(J)=INDX(LWORD) : INDX(LWORD)=I
  109.    LWORD=LWORD-1
  110.    IF LWORD>1 THEN RLOOP
  111. QNEXT:
  112.     LINE (0,0)-(625,184),0,BF '  ------ DRAW NON-SCROLLING AREA BOX
  113.  IF WR=0 THEN
  114.     LINE (5,5)-(280,70),3,BF '  ---- DRAW LEFT MOUSE BOX
  115.     LOCATE 5,9
  116.     PRINT "NEXT PHRASE"
  117.  ELSE     
  118.     Q$="AFTER I SAY THE PHRASE, TYPE IN THE MEANING"
  119.     SAY TRANSLATE$(Q$),MA1%
  120.  END IF
  121.     LINE (320,5)-(600,70),3,BF  '  -------- DRAW RIGHT MOUSE BOX
  122.     LOCATE 5,55
  123.     PRINT "SAY AGAIN"
  124.     LOCATE 21,1
  125.   J=0 : NRITE=0
  126. LOOPSAY:
  127.    J=J+1 : I=INDX(J) : TIMEE=0  '  ------- MAIN LOOP THRU PHRASES
  128. REVERBALIZE:
  129.    Q$=WORDS$(L1+1,I)
  130.    SAY TRANSLATE$(Q$),MA1%
  131.    IF DBL=1 AND TIMEE=0 THEN 
  132.        PRINT "<?> ";WORDS$(L1,I)
  133.        SCROLL (0,BOXT)-(605,380),0,-8
  134.        LOCATE 21,1
  135.    END IF
  136.    IF WR=0 THEN
  137.        WHERAT=0
  138. GETAKEY1:
  139.        TCHAR$=INKEY$ '      --------- LOOP, WAITING FOR FUNCTION-KEY OR
  140.        IF TCHAR$="" THEN GETAKEY1 '  --------               MOUSE EVENT
  141.        TC=ASC(TCHAR$)
  142.        IF TC=133 THEN SHOWWR0  ' F5 TO GO TO NEXT
  143.        IF TC=138 THEN REVERBALIZE ELSE BEEP  ' F10 TO SAY AGAIN
  144.        GOTO GETAKEY1
  145. SHOWWR0:       
  146.      Q$=WORDS$(L2+1,I)
  147.      SAY TRANSLATE$(Q$),MA3%   '  ----  SAY PHRASE OR MEANING
  148.      PRINT WORDS$(L2,I)
  149.      SCROLL (0,BOXT)-(605,380),0,-8
  150.      LOCATE 21,1
  151.      WHERAT=1
  152. GETAKEY2:
  153.        TCHAR$=INKEY$ '      --------- LOOP, WAITING FOR FUNCTION-KEY OR
  154.        IF TCHAR$="" THEN GETAKEY2 '  --------               MOUSE EVENT
  155.        TC=ASC(TCHAR$)
  156.        IF TC=133 THEN SHOWLOOP  ' F5 TO GO TO NEXT
  157.        IF TC=138 THEN SHOWWR0 ELSE BEEP  ' F10 TO SAY AGAIN
  158.        GOTO GETAKEY2
  159.    ELSE
  160.      GOTO ACCEPT '  ----- GET THE TYPED-IN RESPONSE
  161. RECEPT:
  162.      QW$=UCASE$(QW$) 
  163.      IF QW$=WORDS$(L2,I) THEN ' ------ COMPARE TO EXPECTED
  164.        Q$="THAT IS CORRECT"
  165.        PRINT " "
  166.        SCROLL (0,83)-(605,380),0,-8
  167.        LOCATE 21,1
  168.        PRINT " "
  169.        SCROLL (0,BOXT)-(605,380),0,-8
  170.        LOCATE 21,1
  171.        SAY TRANSLATE$(Q$),MA2% : NRITE=NRITE+1
  172.      ELSE
  173.        Q$="WRONG.  IT SHOULD BE"
  174.        SAY TRANSLATE$(Q$),MA2%
  175.        PRINT " "
  176.        SCROLL (0,BOXT)-(605,380),0,-8
  177.        LOCATE 21,1
  178.        PRINT WORDS$(L2,I)
  179.        SCROLL (0,BOXT)-(605,380),0,-8
  180.        LOCATE 21,1
  181.        PRINT " "
  182.        SCROLL (0,BOXT)-(605,380),0,-8
  183.        LOCATE 21,1
  184.      END IF
  185.      Q$=WORDS$(L2+1,I)
  186.      SAY TRANSLATE$(Q$),MA3%
  187.    END IF
  188. SHOWLOOP:
  189.  IF J=NWORD THEN WRAPUP
  190.    LPQ=LPQ+1 : IF LPQ>3 THEN LPQ=1
  191.    SAY TRANSLATE$(PQ$(LPQ)),MA2%
  192.    GOTO LOOPSAY
  193. WRAPUP:
  194.   Q$="THAT IS ALL THE WORDS"
  195.   SAY TRANSLATE$(Q$),MA2%
  196.   IF WR=1 THEN
  197.     Q$="YOU GOT " + STR$(NRITE) + " OUT OF " + STR$(NWORD) + " CORRECT"
  198.     PRINT Q$
  199.     SAY TRANSLATE$(Q$),MA3%
  200.   END IF
  201.  END 
  202. HITMOUSE:
  203.   IF MOUSE(0)=0 THEN RETURN
  204.   IF MOUSE(0)>1 THEN RETURN
  205.   IF MOUSE(2)>75 THEN RETURN
  206.   IF MOUSE(1)>300 THEN  ' -------- RIGHT BOX WAS MOUSED
  207.     IF WHEREAT=0 THEN
  208.       RETURN REVERBALIZE 
  209.     ELSE
  210.       RETURN SHOWWR0 
  211.     END IF
  212.   ELSE
  213.     IF WR=1 THEN RETURN
  214.   END IF
  215.   IF WHERAT=1 THEN RETURN SHOWLOOP   ' ----------LEFT BOX WAS MOUSED
  216.   IF WHERAT=0 THEN RETURN SHOWWR0
  217.   RETURN
  218. ACCEPT:
  219.     IF TIMEE=1 THEN TYPE2   ' -------  CHECK IF ROUTINE ENTERED BEFORE
  220.     KLINE=21 : KCHAR=1 : QW$="" : COUNT=0 : TIMEE=1 : COLOR 1,0
  221.     PRINT "                                  "
  222.     SCROLL (0,83)-(605,380),0,-8
  223. TYPE2:
  224.     LOCATE KLINE,KCHAR
  225.     IF COUNT>0 THEN ICHAR$=MID$(QW$,KCHAR,1) ELSE ICHAR$=" " 
  226.     IF KCHAR=COUNT THEN ICHAR$=ICHAR$+" "  : COLOR 1,0
  227.     IF ICHAR$="" THEN PRINT " " ELSE PRINT ICHAR$
  228.     FLASH=0 
  229. TYPER:
  230.     TCHAR$=INKEY$
  231. '-- FLASH-CURSOR LOGIC --
  232.     FLASH=FLASH+1
  233.     IF FLASH=40 THEN   '  ---  20/60 OF THE TIME, THE CURSOR CHAR IS RED
  234.       LOCATE KLINE,KCHAR
  235.       COLOR 3,0
  236.       IF ICHAR$=" " OR ICHAR$="" THEN PRINT CHR$(140) ELSE PRINT ICHAR$
  237.     ELSEIF FLASH=60 THEN
  238.       LOCATE KLINE,KCHAR : COLOR 1,0  ' --- CHANGE CURSOR CHARACTER COLOR
  239.       IF ICHAR$="" THEN PRINT " " ELSE PRINT ICHAR$
  240.       FLASH=0
  241.     END IF
  242.     IF TCHAR$="" THEN TYPER
  243.     COLOR 1,0
  244.     LOCATE KLINE,KCHAR  '-------------- RESTORE CHAR AT CURSOR --
  245.     IF ICHAR$="" THEN PRINT " " ELSE PRINT ICHAR$  
  246.     TC=ASC(TCHAR$)
  247.     IF TC=13 THEN RECEPT ' ------- INPUT IS CARRIAGE RETURN
  248.     IF TC=30 THEN ' -------- INPUT IS RIGHT ARROW
  249.       IF KCHAR>=COUNT+1 THEN
  250.         BEEP : GOTO TYPER
  251.       ELSE
  252.         KCHAR=KCHAR+1 : GOTO TYPE2
  253.       END IF
  254.     ELSEIF TC=31 THEN ' ---------- INPUT IS LEFT ARROW
  255.       IF KCHAR=1 THEN
  256.         BEEP :  GOTO TYPER
  257.       ELSE
  258.         KCHAR=KCHAR-1 : GOTO TYPE2
  259.       END IF
  260.     ELSEIF TC=8 THEN ' ---------------- INPUT IS A BACKSPACE
  261.       IF KCHAR=1 THEN
  262.         BEEP : GOTO TYPER
  263.       ELSE
  264.         KCHAR=KCHAR-1 
  265.         GOSUB REMOVE
  266.         GOTO TYPE2
  267.       END IF
  268.     ELSEIF TC=127 THEN ' ----------- INPUT IS A DELETE
  269.       GOSUB REMOVE
  270.       GOTO TYPE2
  271.     ELSEIF TC=138 THEN ' ----------- INPUT IS F10
  272.       Q$=WORDS$(L1+1,I)
  273.       SAY TRANSLATE$(Q$)  :  GOTO TYPER
  274.     ELSEIF TC>31 AND TC<127 THEN ' ----------- INPUT IS A VALID CHARACTER
  275.       IF KCHAR=COUNT+1 THEN ' -------- ADD TO END OF INPUT FIELD
  276.         QW$=QW$+TCHAR$
  277.         LOCATE KLINE,KCHAR :  PRINT TCHAR$
  278.       ELSE
  279.         TL$=LEFT$(QW$,KCHAR-1) ' --------- INSERT IN MIDDLE OF INPUT FIELD
  280.         TR$=RIGHT$(QW$,COUNT-KCHAR+1)
  281.         A$=TCHAR$+TR$
  282.         LOCATE KLINE,KCHAR : PRINT A$
  283.         QW$=TL$+A$
  284.       END IF
  285.       KCHAR=KCHAR+1 
  286.       COUNT=LEN(QW$) : GOTO TYPE2
  287.     END IF
  288.   GOTO RECEPT
  289. REMOVE:
  290.   IF KCHAR>COUNT THEN ' ------------- BLANK RIGHT-MOST CHARACTER
  291.     LOCATE KLINE,KCHAR  :  PRINT " "
  292.   ELSE
  293.     TL$=LEFT$(QW$,KCHAR-1) ' ------- DELETE CHARACTER FROM MIDDLE
  294.     TR$=RIGHT$(QW$,COUNT-KCHAR)
  295.     QW$=TL$+TR$
  296.     LOCATE KLINE,KCHAR  :  PRINT TR$+" "
  297.   END IF
  298.   COUNT=LEN(QW$)
  299.   RETURN
  300. GOOF:
  301.   PRINT "YOU HAVE SPECIFIED A NON-EXISTENT FILE NAME - TRY AGAIN"
  302.   GOTO STARTER
  303.