home *** CD-ROM | disk | FTP | other *** search
- ' -- TALKING SPELLER TUTOR Program --
- ' -- Written by James W. Kummer --
- ' -- COPYRIGHT 1987 --
- DIM WORDS$(4,90),INDX(90),PQ$(3),MA1%(8),MA2%(8),MA3%(8)
- DATA 110,0,150,0,22200,64,10,1,0
- DATA 100,1,180,0,22200,64,10,1,0
- DATA 145,0,140,1,23500,64,10,1,0
- FOR I=0 TO 8 : READ MA1%(I) : NEXT I
- FOR I=0 TO 8 : READ MA2%(I) : NEXT I
- FOR I=0 TO 8 : READ MA3%(I) : NEXT I
- BOXT=79
- PQ$(1)="NOW FOR THE NEXT PHRASE"
- PQ$(2)="THE NEXT ONE IS"
- PQ$(3)="AND THE NEXT IS"
- ON MOUSE GOSUB HITMOUSE
- MOUSE OFF
- LPQ=0
- PRINT "TALKING SPELLER TUTOR - SHAREWARE"
- PRINT "COPYRIGHT 1987 - NOT FOR RESALE - MAY BE GIVEN FREELY"
- PRINT "PLEASE PAY FOR USE OF TUTOR, TAILOR & FILES - SEND $5 TO:"
- PRINT "JAMES W. KUMMER "
- PRINT "784 S. HOYT STREET, LAKEWOOD CO 80226"
- PRINT
- Q$="WELCOME TO TALKING SPELLER TUTOR"
- SAY TRANSLATE$(Q$),MA1%
- PRINT Q$
- Q$="SPECIFY YOUR FILE NAME BY PATH (e.g. GERMAN1 - IF YOU BOOT WITH THIS DISK)"
- PRINT Q$
- Q$="SPECIHFY YOUR FILE NAME BY PATH"
- SAY TRANSLATE$(Q$),MA3%
- ON ERROR GOTO GOOF
- STARTER:
- PRINT "File Name? "
- INPUT AME$
- OPEN "I",#1,AME$
- DBL=0 ' ------ TWO-PHRASE/ONE-PHRASE FLAG
- NWORD=0
- ILOOP:
- IF EOF(1) THEN CEOF
- INPUT #1,A$
- LA=LEN(A$)
- IF LA=0 THEN CEOF
- Q$=SPACE$(LA)
- IF A$=Q$ THEN CEOF
- NWORD=NWORD+1
- FOR I=1 TO 4 : WORDS$(I,NWORD)="" : NEXT I
- LEQ=INSTR(A$,"=") ' ------------ LOCATION OF EQUAL-SIGN
- LSEM=INSTR(A$,";") ' ----------- LOCATION OF SEMICOLON
- IF LEQ=0 THEN SIDE1
- IF LSEM>LEQ THEN LSEM=0
- DBL=1 ' ------------ FILE IS TWO-PHRASE
- LSEM2=INSTR(LEQ,A$,";") ' ---------LOCATION OF 2nd SEMICOLON
- IF LSEM2=0 THEN YEQ
- L2=LA-LSEM2
- WORDS$(4,NWORD)=MID$(A$,LSEM2+1,L2) ' ---- EXTRACT 4th FIELD
- YEQ:
- IF LSEM2=0 THEN LSEM2=LA+1
- L2=LSEM2-LEQ-1
- WORDS$(3,NWORD)=MID$(A$,LEQ+1,L2) ' ---- EXTRACT 3rd FIELD
- SIDE1:
- IF LSEM=0 THEN PART1
- IF LEQ=0 THEN LEQ=LA+1
- L2=LEQ-LSEM-1
- WORDS$(2,NWORD)=MID$(A$,LSEM+1,L2) ' ---- EXTRACT 2nd FIELD
- PART1:
- IF LEQ=0 THEN LEQ=LA+1
- IF LSEM=0 THEN LSEM=LEQ
- L2=LSEM-1
- WORDS$(1,NWORD)=MID$(A$,1,L2) ' ------------------ EXTRACT 1st FIELD
- IF WORDS$(3,NWORD)="" THEN WORDS$(4,NWORD)=WORDS$(2,NWORD)
- IF WORDS$(2,NWORD)="" THEN WORDS$(2,NWORD)=WORDS$(1,NWORD)
- IF WORDS$(3,NWORD)="" THEN WORDS$(3,NWORD)=WORDS$(1,NWORD)
- IF WORDS$(4,NWORD)="" THEN WORDS$(4,NWORD)=WORDS$(3,NWORD)
- FOR J=1 TO 4 : WORDS$(J,NWORD)=UCASE$(WORDS$(J,NWORD)) : NEXT J
- GOTO ILOOP
- CEOF:
- ON ERROR GOTO 0
- MOUSE ON
- CLOSE #1
- L1=1 : L2=3
- IF DBL=0 THEN PNEXT
- Q$="DO YOU WANT TO BE PROMPTED WITH THE FIRST"
- PRINT Q$;" (1)"
- SAY TRANSLATE$(Q$),MA1%
- Q$="OR THE SECOND PHRASE?"
- PRINT Q$;" (2)"
- SAY TRANSLATE$(Q$),MA1%
- INPUT I
- IF I=1 THEN PNEXT
- L1=3 : L2=1
- PNEXT:
- WR=0 ' ------------------- WRITTEN TEST FLAG
- Q$="DO YOU WANT A WRITTEN TEST?"
- PRINT Q$;" (Y or N)"
- SAY TRANSLATE$(Q$),MA3%
- INPUT Q$
- IF UCASE$(Q$)="Y" THEN WR=1
- Q$="DO YOU WANT THE LIST RANDOMIZED?"
- PRINT Q$;" (Y or N)"
- SAY TRANSLATE$(Q$),MA2%
- INPUT Q$
- FOR I=1 TO NWORD : INDX(I)=I :NEXT I ' ----- INDEX TO WORDS
- IF UCASE$(Q$)<>"Y" THEN QNEXT
- RANDOMIZE TIMER ' ------------- SEED THE RANDOM NUMBER GENERATOR
- LWORD=NWORD
- RLOOP:
- J=INT(LWORD*RND+.99999) ' ------------ RANDOMLY RESHUFFLE THE INDEX
- I=INDX(J) : INDX(J)=INDX(LWORD) : INDX(LWORD)=I
- LWORD=LWORD-1
- IF LWORD>1 THEN RLOOP
- QNEXT:
- LINE (0,0)-(625,184),0,BF ' ------ DRAW NON-SCROLLING AREA BOX
- IF WR=0 THEN
- LINE (5,5)-(280,70),3,BF ' ---- DRAW LEFT MOUSE BOX
- LOCATE 5,9
- PRINT "NEXT PHRASE"
- ELSE
- Q$="AFTER I SAY THE PHRASE, TYPE IN THE MEANING"
- SAY TRANSLATE$(Q$),MA1%
- END IF
- LINE (320,5)-(600,70),3,BF ' -------- DRAW RIGHT MOUSE BOX
- LOCATE 5,55
- PRINT "SAY AGAIN"
- LOCATE 21,1
- J=0 : NRITE=0
- LOOPSAY:
- J=J+1 : I=INDX(J) : TIMEE=0 ' ------- MAIN LOOP THRU PHRASES
- REVERBALIZE:
- Q$=WORDS$(L1+1,I)
- SAY TRANSLATE$(Q$),MA1%
- IF DBL=1 AND TIMEE=0 THEN
- PRINT "<?> ";WORDS$(L1,I)
- SCROLL (0,BOXT)-(605,380),0,-8
- LOCATE 21,1
- END IF
- IF WR=0 THEN
- WHERAT=0
- GETAKEY1:
- TCHAR$=INKEY$ ' --------- LOOP, WAITING FOR FUNCTION-KEY OR
- IF TCHAR$="" THEN GETAKEY1 ' -------- MOUSE EVENT
- TC=ASC(TCHAR$)
- IF TC=133 THEN SHOWWR0 ' F5 TO GO TO NEXT
- IF TC=138 THEN REVERBALIZE ELSE BEEP ' F10 TO SAY AGAIN
- GOTO GETAKEY1
- SHOWWR0:
- Q$=WORDS$(L2+1,I)
- SAY TRANSLATE$(Q$),MA3% ' ---- SAY PHRASE OR MEANING
- PRINT WORDS$(L2,I)
- SCROLL (0,BOXT)-(605,380),0,-8
- LOCATE 21,1
- WHERAT=1
- GETAKEY2:
- TCHAR$=INKEY$ ' --------- LOOP, WAITING FOR FUNCTION-KEY OR
- IF TCHAR$="" THEN GETAKEY2 ' -------- MOUSE EVENT
- TC=ASC(TCHAR$)
- IF TC=133 THEN SHOWLOOP ' F5 TO GO TO NEXT
- IF TC=138 THEN SHOWWR0 ELSE BEEP ' F10 TO SAY AGAIN
- GOTO GETAKEY2
- ELSE
- GOTO ACCEPT ' ----- GET THE TYPED-IN RESPONSE
- RECEPT:
- QW$=UCASE$(QW$)
- IF QW$=WORDS$(L2,I) THEN ' ------ COMPARE TO EXPECTED
- Q$="THAT IS CORRECT"
- PRINT " "
- SCROLL (0,83)-(605,380),0,-8
- LOCATE 21,1
- PRINT " "
- SCROLL (0,BOXT)-(605,380),0,-8
- LOCATE 21,1
- SAY TRANSLATE$(Q$),MA2% : NRITE=NRITE+1
- ELSE
- Q$="WRONG. IT SHOULD BE"
- SAY TRANSLATE$(Q$),MA2%
- PRINT " "
- SCROLL (0,BOXT)-(605,380),0,-8
- LOCATE 21,1
- PRINT WORDS$(L2,I)
- SCROLL (0,BOXT)-(605,380),0,-8
- LOCATE 21,1
- PRINT " "
- SCROLL (0,BOXT)-(605,380),0,-8
- LOCATE 21,1
- END IF
- Q$=WORDS$(L2+1,I)
- SAY TRANSLATE$(Q$),MA3%
- END IF
- SHOWLOOP:
- IF J=NWORD THEN WRAPUP
- LPQ=LPQ+1 : IF LPQ>3 THEN LPQ=1
- SAY TRANSLATE$(PQ$(LPQ)),MA2%
- GOTO LOOPSAY
- WRAPUP:
- Q$="THAT IS ALL THE WORDS"
- SAY TRANSLATE$(Q$),MA2%
- IF WR=1 THEN
- Q$="YOU GOT " + STR$(NRITE) + " OUT OF " + STR$(NWORD) + " CORRECT"
- PRINT Q$
- SAY TRANSLATE$(Q$),MA3%
- END IF
- END
- HITMOUSE:
- IF MOUSE(0)=0 THEN RETURN
- IF MOUSE(0)>1 THEN RETURN
- IF MOUSE(2)>75 THEN RETURN
- IF MOUSE(1)>300 THEN ' -------- RIGHT BOX WAS MOUSED
- IF WHEREAT=0 THEN
- RETURN REVERBALIZE
- ELSE
- RETURN SHOWWR0
- END IF
- ELSE
- IF WR=1 THEN RETURN
- END IF
- IF WHERAT=1 THEN RETURN SHOWLOOP ' ----------LEFT BOX WAS MOUSED
- IF WHERAT=0 THEN RETURN SHOWWR0
- RETURN
- ACCEPT:
- IF TIMEE=1 THEN TYPE2 ' ------- CHECK IF ROUTINE ENTERED BEFORE
- KLINE=21 : KCHAR=1 : QW$="" : COUNT=0 : TIMEE=1 : COLOR 1,0
- PRINT " "
- SCROLL (0,83)-(605,380),0,-8
- TYPE2:
- LOCATE KLINE,KCHAR
- IF COUNT>0 THEN ICHAR$=MID$(QW$,KCHAR,1) ELSE ICHAR$=" "
- IF KCHAR=COUNT THEN ICHAR$=ICHAR$+" " : COLOR 1,0
- IF ICHAR$="" THEN PRINT " " ELSE PRINT ICHAR$
- FLASH=0
- TYPER:
- TCHAR$=INKEY$
- '-- FLASH-CURSOR LOGIC --
- FLASH=FLASH+1
- IF FLASH=40 THEN ' --- 20/60 OF THE TIME, THE CURSOR CHAR IS RED
- LOCATE KLINE,KCHAR
- COLOR 3,0
- IF ICHAR$=" " OR ICHAR$="" THEN PRINT CHR$(140) ELSE PRINT ICHAR$
- ELSEIF FLASH=60 THEN
- LOCATE KLINE,KCHAR : COLOR 1,0 ' --- CHANGE CURSOR CHARACTER COLOR
- IF ICHAR$="" THEN PRINT " " ELSE PRINT ICHAR$
- FLASH=0
- END IF
- IF TCHAR$="" THEN TYPER
- COLOR 1,0
- LOCATE KLINE,KCHAR '-------------- RESTORE CHAR AT CURSOR --
- IF ICHAR$="" THEN PRINT " " ELSE PRINT ICHAR$
- TC=ASC(TCHAR$)
- IF TC=13 THEN RECEPT ' ------- INPUT IS CARRIAGE RETURN
- IF TC=30 THEN ' -------- INPUT IS RIGHT ARROW
- IF KCHAR>=COUNT+1 THEN
- BEEP : GOTO TYPER
- ELSE
- KCHAR=KCHAR+1 : GOTO TYPE2
- END IF
- ELSEIF TC=31 THEN ' ---------- INPUT IS LEFT ARROW
- IF KCHAR=1 THEN
- BEEP : GOTO TYPER
- ELSE
- KCHAR=KCHAR-1 : GOTO TYPE2
- END IF
- ELSEIF TC=8 THEN ' ---------------- INPUT IS A BACKSPACE
- IF KCHAR=1 THEN
- BEEP : GOTO TYPER
- ELSE
- KCHAR=KCHAR-1
- GOSUB REMOVE
- GOTO TYPE2
- END IF
- ELSEIF TC=127 THEN ' ----------- INPUT IS A DELETE
- GOSUB REMOVE
- GOTO TYPE2
- ELSEIF TC=138 THEN ' ----------- INPUT IS F10
- Q$=WORDS$(L1+1,I)
- SAY TRANSLATE$(Q$) : GOTO TYPER
- ELSEIF TC>31 AND TC<127 THEN ' ----------- INPUT IS A VALID CHARACTER
- IF KCHAR=COUNT+1 THEN ' -------- ADD TO END OF INPUT FIELD
- QW$=QW$+TCHAR$
- LOCATE KLINE,KCHAR : PRINT TCHAR$
- ELSE
- TL$=LEFT$(QW$,KCHAR-1) ' --------- INSERT IN MIDDLE OF INPUT FIELD
- TR$=RIGHT$(QW$,COUNT-KCHAR+1)
- A$=TCHAR$+TR$
- LOCATE KLINE,KCHAR : PRINT A$
- QW$=TL$+A$
- END IF
- KCHAR=KCHAR+1
- COUNT=LEN(QW$) : GOTO TYPE2
- END IF
- GOTO RECEPT
- REMOVE:
- IF KCHAR>COUNT THEN ' ------------- BLANK RIGHT-MOST CHARACTER
- LOCATE KLINE,KCHAR : PRINT " "
- ELSE
- TL$=LEFT$(QW$,KCHAR-1) ' ------- DELETE CHARACTER FROM MIDDLE
- TR$=RIGHT$(QW$,COUNT-KCHAR)
- QW$=TL$+TR$
- LOCATE KLINE,KCHAR : PRINT TR$+" "
- END IF
- COUNT=LEN(QW$)
- RETURN
- GOOF:
- PRINT "YOU HAVE SPECIFIED A NON-EXISTENT FILE NAME - TRY AGAIN"
- GOTO STARTER
-