home *** CD-ROM | disk | FTP | other *** search
Wrap
GW-BASIC | 1994-02-04 | 9.4 KB | 225 lines
1000 ON ERROR GOTO 9000 1001 COMMON UMSEG%() 1005 DEFINT A-Z:COLOR 0,0,0:KEY OFF:FOR I=1 TO 10:KEY I,"":NEXT 1010 COLOR 7,0:OPTION BASE 1 1020 DIM LESSON$(45),GNUM(45),PCT(45),HFLAG(45),QNUM(45),QUES$(50),ANS$(50) 1025 DIM QUSED(45),WTITLE$(45),TTITLE$(45),HINT$(45) 1030 DIM FDPOS(5,2),FDLEN(5),FDTYPE$(5),FDINBUF$(5) 1080 OPEN "MMHOME.dir" AS #1 LEN = 95 1090 FIELD #1, 8 AS F1$, 2 AS F2$, 2 AS F3$, 2 AS F4$, 2 AS F5$, 2 AS F6$, 15 AS F7$, 30 AS F8$, 32 AS F9$ 1170 FOR I=1 TO 45 1180 GET #1,I:LESSON$(I)=F1$ 1190 GNUM(I)=1:PCT(I)=75:QNUM(I)=0:QUSED(I)=1:HFLAG(I)=1 1195 WTITLE$(I)=SPACE$(15):TTITLE$(I)=SPACE$(30):HINT$(I)=SPACE$(32) 1200 NEXT 1230 COLOR 0,0,0:CLS:WIDTH 80:COLOR 0,15,0:LOCATE ,,0 1250 LOCATE 1,6:PRINT SPACE$(25)+"M A T C H M A K E R"+SPACE$(26) 1260 LOCATE 2,6:PRINT " "+STRING$(19,205)+" LESSON DIRECTORY "+STRING$(19,205)+SPACE$(6) 1270 LOCATE 3,6:PRINT SPACE$(70) 1280 FOR I=1 TO 15 1290 LOCATE I+3,6:PRINT USING " ##. ";I;:PRINT USING "\ \";LESSON$(I); 1300 PRINT SPACE$(10);:PRINT USING "##. ";I+15;:PRINT USING "\ \";LESSON$(I+15); 1310 PRINT SPACE$(10);:PRINT USING "##. ";I+30;:PRINT USING "\ \";LESSON$(I+30); 1320 PRINT SPACE$(6) 1330 NEXT 1350 IK$=INKEY$:IF IK$<>"" GOTO 1350 1360 LOCATE 20,6:COLOR 15,0:PRINT "CHOOSE A LESSON NUMBER THEN "; 1380 COLOR 7:PRINT "Press "+CHR$(17)+STRING$(2,196)+CHR$(217);:COLOR 15:PRINT " :" 1385 LOCATE 22,6:PRINT "(I WILL ";:COLOR 0,15:PRINT " CREATE ";:COLOR 15,0:PRINT " THE LESSON YOU SELECT)" 1387 NUMFD=1:FDINBUF$(1)=SPACE$(2) 1390 DATA 20,48,"I",2 1400 GOSUB 8000 1500 IF FDINBUF$(1)=" " THEN CLOSE:CHAIN "MMEDITOR",1000 1620 LESN=VAL(FDINBUF$(1)) 1630 IF LESN>45 OR LESN<1 THEN BEEP:RESTORE 1390:GOTO 1400 1700 IF LEFT$(LESSON$(LESN),1)="-" GOTO 2000 1710 BEEP:FOR I=0 TO 25:COLOR 12,0:LOCATE 23,6,0:PRINT "LESSON ALREADY EXISTS, PLEASE RE-ENTER!":NEXT I:GOTO 1720 1720 LOCATE 23,6:PRINT SPACE$(70):COLOR 15,0:RESTORE 1390:GOTO 1400 2000 COLOR 0,0,0:CLS:SCREEN 0,1:WIDTH 40:NAMEFLAG=1 2010 COLOR 9,0,0:LOCATE 1,1,0:PRINT "****** MATCHMAKER E D I T O R ******"; 2015 LOCATE 3,11:COLOR 11,0:PRINT "CREATE ";:COLOR 11,1:PRINT " NEW ";:COLOR 11,0:PRINT " LESSON" 2020 COLOR 15,0:LOCATE 6,5:PRINT "~ ENTER LESSON NAME: ";:COLOR 7:PRINT "(MAX 8 CHAR)" 2025 COLOR 15,0:LOCATE 10,5:PRINT "~ ENTER WORD TITLE: ";:COLOR 7:PRINT "(MAX 15 CHAR)" 2026 COLOR 15,0:LOCATE 14,5:PRINT "~ ENTER TEXT TITLE: ";:COLOR 7:PRINT "(MAX 30 CHAR)" 2030 COLOR 15,0:LOCATE 18,5:PRINT "~ ENTER HINT: ";:COLOR 7:PRINT "(MAX 32 CHAR)" 2040 NUMFD=4:FDINBUF$(1)=SPACE$(8):FDINBUF$(2)=SPACE$(15):FDINBUF$(3)=SPACE$(30):FDINBUF$(4)=SPACE$(32) 2050 DATA 7,7,"AN",8,11,7,"ANY",15,15,7,"ANY",30,19,7,"ANY",32 2060 GOSUB 8000 2070 MSG$="ARE ALL ENTRIES CORRECT ? (Y/N) ":R$=" Y ":GOSUB 7000 2080 IF REDO=1 THEN COLOR 0,0:LOCATE 22,2:PRINT SPACE$(38):RESTORE 2050:GOTO 2060 2100 NAMERR=0:GOSUB 2210:IF NAMERR=1 THEN LOCATE 22,2:PRINT SPACE$(38):RESTORE 2050:GOTO 2060 2120 LESSON$(LESN)=FDINBUF$(1) 2160 WTITLE$(LESN)=FDINBUF$(2):TITLE1$=WTITLE$(LESN) 2165 L=LEN(TITLE1$):IF RIGHT$(TITLE1$,1)=" " THEN TITLE1$=LEFT$(TITLE1$,L-1):GOTO 2165 2170 TTITLE$(LESN)=FDINBUF$(3):TITLE2$=TTITLE$(LESN) 2175 L=LEN(TITLE2$):IF RIGHT$(TITLE2$,1)=" " THEN TITLE2$=LEFT$(TITLE2$,L-1):GOTO 2175 2180 HINT$(LESN)=FDINBUF$(4):NAMEFLAG=0:GOTO 2300 2210 N$=FDINBUF$(1):L=LEN(N$) 2215 FOR I=1 TO L 2217 C$=MID$(N$,I,1):IF C$>="a" AND C$<="z" THEN MID$(N$,I,1)=CHR$(ASC(C$)-32) 2220 NEXT 2225 IF LEFT$(N$,1)<="9" AND LEFT$(N$,1)>="0" THEN MSG$="LESSON NAME MUST BEGIN WITH A LETTER!":GOTO 2270 ELSE L=LEN(N$) 2230 FOR I=1 TO 45 2231 IF LEFT$(LESSON$(I),1)="-" GOTO 2240 ELSE N1$=LESSON$(I):L=LEN(N1$) 2232 FOR J=1 TO L 2233 C$=MID$(N1$,J,1):IF C$>="a" AND C$<="z" THEN MID$(N1$,J,1)=CHR$(ASC(C$)-32) 2234 NEXT J 2239 IF I<>LESN THEN IF N1$=N$ THEN MSG$="DUPLICATE LESSON NAME!":GOTO 2270 2240 NEXT I 2250 RETURN 2270 BEEP:NAMERR=1:COLOR 12,0:FOR I=1 TO 30:LOCATE 23,2,0:PRINT MSG$:NEXT I 2280 COLOR 0,0:LOCATE 23,2:PRINT SPACE$(38);:COLOR 14,0:RETURN 2300 COLOR 0,0,0:CLS:SCREEN 0,1:WIDTH 40:CNT=1 2310 COLOR 9,0,0:LOCATE 1,1,0:PRINT "****** MATCHMAKER E D I T O R ******"; 2315 LOCATE 3,11:COLOR 11,0:PRINT "CREATE ";:COLOR 11,1:PRINT " NEW ";:COLOR 11,0:PRINT " LESSON" 2320 COLOR 7,0:LOCATE 5,10:PRINT "LESSON NAME: ";:COLOR 15,0:PRINT " "+LESSON$(LESN)+" " 2325 COLOR 7,0:LOCATE 7,10:PRINT "WORD ";:PRINT "# ";:COLOR 0,6:PRINT USING "##";CNT;:COLOR 7,0:PRINT " OF ";:COLOR 0,6:PRINT USING "##";CNT;:COLOR 7,0:PRINT " WORDS" 2326 COLOR 15,0:LOCATE 9,2:PRINT TITLE1$+":" 2330 COLOR 15,0:LOCATE 13,2:PRINT TITLE2$+":" 2332 COLOR 15,0:LOCATE 14,2:PRINT " " 2333 COLOR 15,0:LOCATE 16,2:PRINT "+ " 2334 COLOR 15,0:LOCATE 18,2:PRINT "+ " 2335 COLOR 15,0:LOCATE 20,2:PRINT "+ " 2340 DATA 10,5,"ANY",20,14,5,"ANY",30,16,5,"ANY",30,18,5,"ANY",30,20,5,"ANY",30 2350 NUMFD=5:FDINBUF$(1)=SPACE$(20):FOR I=2 TO 5:FDINBUF$(I)=SPACE$(30):NEXT 2360 GOSUB 8000 2370 MSG$="ARE ALL ENTRIES CORRECT ? (Y/N) ":R$=" Y ":GOSUB 7000 2380 IF REDO=1 THEN RESTORE 2340:GOTO 2360 2450 ANS$(CNT)=FDINBUF$(1) 2460 D$=CHR$(94):QUES$(CNT)=FDINBUF$(2)+D$+FDINBUF$(3)+D$+FDINBUF$(4)+D$+FDINBUF$(5)+D$ 2470 MSG$="MORE TO ADD ? (Y/N) ":R$=" Y ":COLOR 0,0:LOCATE 22,2:PRINT SPACE$(38):GOSUB 7000 2480 IF REDO=1 THEN QNUM(LESN)=CNT:GOTO 4000 2490 CNT=CNT+1:COLOR 0,6:LOCATE 7,18:PRINT USING "##";CNT:LOCATE 7,26:PRINT USING "##";CNT 2500 COLOR 0,0:LOCATE 22,2:PRINT SPACE$(38):RESTORE 2340:GOTO 2350 4000 COLOR 0,0,0:CLS:SCREEN 0,1:WIDTH 40 4010 COLOR 9,0,0:LOCATE 1,1,0:PRINT "****** MATCHMAKER E D I T O R ******"; 4015 LOCATE 3,11:COLOR 11,0:PRINT "CREATE ";:COLOR 11,1:PRINT " NEW ";:COLOR 11,0:PRINT " LESSON" 4020 COLOR 15,0:LOCATE 7,2:PRINT "GUESSES ALLOWED PER QUESTION (1-9)..." 4025 COLOR 15,0:LOCATE 12,2:PRINT "NUMBER OF QUESTIONS TO BE USED......" 4026 COLOR 7,0:LOCATE 13,2:PRINT "(THIS LESSON HAS ";:COLOR 15:PRINT USING "##";QNUM(LESN);:COLOR 7:PRINT " QUESTIONS)" 4030 COLOR 15,0:LOCATE 17,2:PRINT "PERCENT (%) CORRECT TO GET REWARD.." 4040 NUMFD=3:FDINBUF$(1)=MID$(STR$(GNUM(LESN)),2) 4041 FDINBUF$(2)=MID$(STR$(QUSED(LESN)),2) 4042 FDINBUF$(3)=MID$(STR$(PCT(LESN)),2) 4050 DATA 7,39,"I",1,12,38,"I",2,17,37,"I",3 4060 GOSUB 8000 4070 MSG$="ARE ALL ENTRIES CORRECT ? (Y/N) ":R$=" Y ":GOSUB 7000 4080 IF REDO=1 THEN COLOR 0,0:LOCATE 22,2:PRINT SPACE$(38):RESTORE 4050:GOTO 4060 4150 GNUM(LESN)=VAL(FDINBUF$(1)):IF GNUM(LESN)<1 GOTO 4180 4160 QUSED(LESN)=VAL(FDINBUF$(2)):IF QUSED(LESN)>QNUM(LESN) OR QUSED(LESN)=0 GOTO 4180 4170 PCT(LESN)=VAL(FDINBUF$(3)):IF PCT(LESN)>100 OR PCT(LESN)=0 GOTO 4180 4175 GOTO 5000 4180 COLOR 0,0:LOCATE 22,2:PRINT SPACE$(38) 4185 BEEP:COLOR 12,0,0:FOR I=0 TO 35:LOCATE 23,2,0:PRINT "ERROR IN ENTRIES!!! RE-ENTER.":NEXT I 4190 COLOR 0,0:LOCATE 23,2:PRINT SPACE$(38):RESTORE 4050:GOTO 4060 5000 COLOR 0,0:LOCATE 22,2:PRINT SPACE$(38) 5010 COLOR 14,0:LOCATE 22,2:PRINT "SAVING LESSON ..." 5020 OPEN LESSON$(LESN)+".LES" AS #2 LEN = 144 5030 FIELD #2, 20 AS LF1$, 124 AS LF2$ 5040 FOR I=1 TO QNUM(LESN) 5050 IF LEFT$(ANS$(I),1)=" " THEN ANS$(I)=MID$(ANS$(I),2):GOTO 5050 5060 LSET LF1$=ANS$(I):LSET LF2$=QUES$(I) 5070 PUT #2,I 5080 NEXT 5085 CLOSE #2 5090 LSET F1$=LESSON$(LESN) 5100 LSET F2$=MKI$(GNUM(LESN)) 5110 LSET F3$=MKI$(PCT(LESN)) 5120 LSET F4$=MKI$(QNUM(LESN)) 5130 LSET F5$=MKI$(QUSED(LESN)) 5140 LSET F7$=WTITLE$(LESN) 5150 LSET F8$=TTITLE$(LESN) 5160 LSET F9$=HINT$(LESN) 5170 PUT #1,LESN 5520 COLOR 0,0,0:CLS:WIDTH 40 5530 LOCATE 6,3,0:COLOR 14,0:PRINT "CREATE ANOTHER LESSON ? (Y/N) "+SPACE$(5) 5535 COLOR 0,14:LOCATE 6,34:PRINT " Y " 5540 K$=INKEY$:IF K$<>"" GOTO 5540 5550 COLOR 0,14:LOCATE 6,35,1,7,0 5560 K$=INKEY$:IF K$="" GOTO 5560 5570 IF K$="N" OR K$="n" THEN LOCATE 6,35,0:PRINT K$ 5580 IF K$="N" OR K$="n" THEN CLOSE:CHAIN "MMEDITOR",1000 5590 IF K$="Y" OR K$="y" OR K$=CHR$(13) THEN RESTORE 1390:GOTO 1230 ELSE BEEP:GOTO 5530 7000 LOCATE 22,2:COLOR 14,0:PRINT MSG$+SPACE$(5) 7070 COLOR 0,14:LOCATE 22,35:PRINT R$ 7090 K$=INKEY$:IF K$<>"" GOTO 7090 7100 COLOR 0,14:LOCATE 22,36,1,7,0 7110 K$=INKEY$:IF K$="" GOTO 7110 7127 IF K$="N" OR K$="n" THEN LOCATE 22,36,0:PRINT K$ 7130 IF K$="N" OR K$="n" THEN COLOR 0,0:LOCATE 22,2:PRINT SPACE$(38):REDO=1:RETURN 7140 IF K$="Y" OR K$="y" OR K$=CHR$(13) THEN REDO=0:RETURN ELSE BEEP:GOTO 7070 8000 FOR I=1 TO NUMFD 8110 READ FDPOS(I,1),FDPOS(I,2),FDTYPE$(I),FDLEN(I) 8115 IF LEN(FDINBUF$(I))<FDLEN(I) THEN FDINBUF$(I)=FDINBUF$(I)+SPACE$(FDLEN(I)-LEN(FDINBUF$(I))) 8120 COLOR 6,0:LOCATE FDPOS(I,1),FDPOS(I,2),0:PRINT FDINBUF$(I) 8180 COLOR 7,0:LOCATE FDPOS(I,1)+1,FDPOS(I,2),0:PRINT STRING$(FDLEN(I),45); 8200 NEXT I 8210 CFD=1:COLOR 14,0:IF NAMEFLAG=1 THEN TYPERR=1 ELSE TYPERR=0 8220 CPOS=FDPOS(CFD,2):RPOS=FDPOS(CFD,1):LOCATE RPOS,CPOS,0 8230 CPOSMAX=CPOS+FDLEN(CFD)-1:CPOSMIN=CPOS 8240 LOCATE RPOS,CPOS,1,0,7 8250 A$=INKEY$ 8260 IF A$="" THEN GOTO 8250 8270 L=LEN(A$):IF L=2 THEN A$=RIGHT$(A$,1) 8273 IF A$=CHR$(27) THEN CLOSE:CHAIN "mmeditor",1000 8275 IF A$=CHR$(8) THEN GOSUB 8350:GOTO 8240 8280 IF L=2 THEN IF A$="K" THEN GOSUB 8340:GOTO 8240 ELSE IF A$="M" THEN GOSUB 8380:GOTO 8240 8290 IF L=2 THEN IF A$="H" THEN GOSUB 8420:GOTO 8220 ELSE IF A$="P" THEN GOSUB 8460:GOTO 8220 8300 IF L=2 THEN IF A$="S" THEN GOSUB 8500:GOTO 8240 ELSE IF A$="R" THEN GOSUB 8560:GOTO 8240 8310 IF A$=CHR$(13) THEN IF TYPERR=0 THEN IF CFD=NUMFD THEN GOSUB 8670:RETURN ELSE GOSUB 8670:CFD=CFD+1:GOTO 8220 ELSE BEEP:GOTO 8240 8320 GOSUB 8710 : IF CPOS < CPOSMAX THEN CPOS=CPOS+1 8330 GOTO 8240 8340 IF CPOS-CPOSMIN+1 > 0 THEN CPOS=CPOS-1 8342 IF CPOS-CPOSMIN+1 < 1 THEN BEEP:CPOS=CPOS+1 8343 RETURN 8350 IF CPOS-CPOSMIN+1 > 0 THEN CPOS=CPOS-1 8351 IF CPOS>=CPOSMIN THEN LOCATE RPOS,CPOS+1,0:PRINT " ":MID$(FDINBUF$(CFD),CPOS-CPOSMIN+2,1)=" " 8352 IF CPOS-CPOSMIN+1 < 1 THEN BEEP:CPOS=CPOS+1 8353 RETURN 8380 IF CPOS<=CPOSMAX THEN CPOS=CPOS+1 8400 IF CPOS>CPOSMAX THEN BEEP:CPOS=CPOS-1 8410 RETURN 8420 REM ====================================== TAB BACKWARD -- CURSOR UP KEY 8430 GOSUB 8670 8440 IF CFD=1 THEN CFD=NUMFD ELSE CFD=CFD-1 8450 RETURN 8460 REM ====================================== TAB FORWARD -- CURSOR DOWN KEY 8470 GOSUB 8670 8480 IF CFD=NUMFD THEN CFD=1 ELSE CFD=CFD+1 8490 RETURN 8500 REM ======================================= DELETE A CHARACTER -- DEL KEY 8510 PTR=CPOS-CPOSMIN+1:RESTBUF$=MID$(FDINBUF$(CFD),PTR+1)+SPACE$(1) 8520 LOCATE ,,0 8530 PRINT RESTBUF$;:FDINBUF$(CFD)=LEFT$(FDINBUF$(CFD),PTR-1)+RESTBUF$ 8550 RETURN 8560 REM ======================================= INSERT A CHARACTER -- INS KEY 8570 LOCATE RPOS,CPOS,1,4,7 8575 A$=INKEY$:IF A$="" THEN GOTO 8575 8580 L=LEN(A$):IF L=2 THEN A$=RIGHT$(A$,1) 8585 IF A$=CHR$(8) THEN GOTO 8275 8590 IF L=2 THEN IF A$="K" OR A$="M" THEN GOTO 8280 ELSE IF A$="H" OR A$="P" THEN GOTO 8290 ELSE IF A$="S" THEN GOTO 8300 ELSE IF A$="R" THEN RETURN 8600 IF A$=CHR$(13) THEN GOTO 8310 8610 PTR=CPOS-CPOSMIN+1:RESTBUF$=MID$(FDINBUF$(CFD),PTR,FDLEN(CFD)-PTR) 8620 GOSUB 8700:LOCATE ,,0:PRINT RESTBUF$;:CPOS=CPOS+1 8630 IF CPOS>CPOSMAX THEN BEEP:CPOS=CPOS-1:RETURN 8640 FDINBUF$(CFD)=LEFT$(FDINBUF$(CFD),PTR)+RESTBUF$ 8650 GOTO 8570 8660 REM ======================================== DEACTIVATE CURRENT FIELD 8670 CPOS=FDPOS(CFD,2):RPOS=FDPOS(CFD,1):LOCATE RPOS,CPOS,0 8680 COLOR 6,0:PRINT FDINBUF$(CFD);:COLOR 14,0 8690 RETURN 8700 REM ======================================== VALIDATE ENTERED DATA AND ECHO 8710 LOCATE ,,0 8720 IF FDTYPE$(CFD)="I" OR FDTYPE$(CFD)="i" THEN IF (A$>"9") OR (A$<"0") THEN GOTO 8770 ELSE GOTO 8760 8730 IF FDTYPE$(CFD)="D" OR FDTYPE$(CFD)="d" THEN IF (A$ > "9") OR (A$ < "0" AND A$ >".") OR (A$<"-") THEN GOTO 8770 ELSE GOTO 8760 8740 IF FDTYPE$(CFD)="A" OR FDTYPE$(CFD)="a" THEN IF (A$ < "A") OR (A$ > "Z" AND A$ < "a") OR (A$ > "z") THEN GOTO 8770 ELSE GOTO 8760 8750 IF FDTYPE$(CFD)="AN" OR FDTYPE$(CFD)="an" THEN IF (A$ <"0") OR (A$ <"A" AND A$ >"9") OR (A$ >"Z" AND A$ <"a") OR (A$ >"z") THEN GOTO 8770 ELSE GOTO 8760 8760 MID$(FDINBUF$(CFD),CPOS-CPOSMIN+1)=A$:PRINT A$;:TYPERR=0:RETURN 8770 BEEP:CPOS=CPOS-1:TYPERR=1:RETURN 9000 IF ERR=70 THEN MSG$="DISKETTE WRITE PROTECT!":GOTO 9030 9010 IF ERR=71 THEN MSG$="DISK DRIVE NOT READY!":GOTO 9030 9015 IF ERR=72 THEN MSG$="DISK MEDIA ERROR!":GOTO 9030 9020 IF ERR=61 THEN MSG$="DISKETTE SPACE FULL!" ELSE MSG$="ERROR DETECTED! ("+MID$(STR$(ERR),2)+")" 9030 BEEP:COLOR 12,0:FOR B=1 TO 40:LOCATE 23,2,0:PRINT MSG$:NEXT B 9040 CLOSE:CHAIN "MMEDITOR",1000