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 >
Wrap
Text File
|
1989-09-24
|
9KB
|
303 lines
' -- 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