10 PROGRAM "TINY.BAS" 100 SET INTERRUPTSTOPOFF 105 CLEAR SCREEN 110 TEXT 40 115 FOR F=1TO16 120 SET FKEYF" " 125 NEXT 130 PRINT AT10,1:"TINY TOUCH'N' GO";CHR$(241) 135 PRINT AT13,1:" a Studio";CHR$(241) 140 PRINT AT15,1:" FISO+NEWSY";CHR$(241) 145 CALL INIT1 150 CLEAR SCREEN 155 PRINT AT10,1:" Ha nincs távvezérlő bemenet a magnóján, akkor most állítsa le!" 160 PRINT AT15,8:"NYOMJA LE AZ ENTER GOMBOT!" 165 DO 170 GET Y$ 175 LOOP UNTILY$=CHR$(13) 180 CLEAR SCREEN 185 PRINT AT10,4:"Angol vagy német gépe van (a/n)?"; 190 DO 195 GET ANG$ 200 LET ANG$=UCASE$(ANG$) 205 LOOP UNTILANG$="A"ORANG$="N" 210 PRINT ANG$ 215 IF ANG$="N"THEN 220 EXT "uk" 225 CALL INIT1 230 END IF 235 LET FALSE=0:LET TRUE=-1 240 LET CHAN,YES,NO=0 245 LET REMOTE=0 250 CLEAR SCREEN 255 PRINT AT17,1:" A TINY TOUCH'N'GO tudja kezelni a magnó távvezérlőt. Kíván élni ezzel";CHR$(13);TAB(9);"a lehetőséggel (i/n) ? "; 260 LET REMOTE=1 265 DO 270 CALL YESNO 275 IF YESTHENLET REMOTE=-1 280 IF NOTHENLET REMOTE=0 285 LOOP UNTILREMOTE<>1 290 PRINT Y$ 295 CLEAR SCREEN 300 PRINT AT21,9:"Egy kis türelmet kérek !" 305 LET C_LESSON=0 310 DIM ROW(1TO4) 315 STRING KEY$(1TO4)*13 320 CALL KEYBOARD_DRAW 325 STRING A$(1TO10)*42 330 STRING B$(1TO10)*42 335 STRING DATA$(1TO170)*41 340 STRING TEMP$*41 345 STRING TEMP1$*41,TEMP2$*41 350 STRING KEY_FLASH$*90 355 STRING SPLIT$*71 360 STRING LINE$*40,QUESTION$*40 365 STRING C$*41,DEL$*3,OPTION$*1 370 STRING Q1$*41,Q2$*41 375 STRING TEMP_T$*8 380 STRING FIN$*200 385 ! 390 ! 395 ! initialize variables 400 ! 405 ! 410 LET CHAN=2:LET CHAN3=3 415 LET CR,Y,NUM,C_LESSON=0 420 LET PERFECT,N_LESSON,P_LESSON=0 425 LET R_ACC,ACC,WPM,RWPM,L_PTR,PTR=0 430 LET P_BLOCK,P1,Q1=0 435 ! 440 LET FALSE=0:LET TRUE=-1 445 LET LONG,FOUND=FALSE 450 LET EXERCISE_NEXT=FALSE 455 LET LESSON_NEXT=FALSE 460 LET FIRST=TRUE 465 LET Y$="" 470 LET CONST=6 475 ! 480 LET QUESTION$="????????????????????????????????????????" 485 LET SPLIT$=";9;11;15;19;22;24;28;33" 490 LET SPLIT$=SPLIT$&";37;40;41;46;50;51;53;55;57;58;69;70;73;74;75;76" 495 LET LINE$="----------------------------------------" 500 LET KEY_FLASH$="jfkdlsÉa/i/mr,/vío/Ág/e/upt/nchű" 505 LET KEY_FLASH$=KEY_FLASH$&"/őúy/bü//qxwz/ö./*+//ó/-//123456" 510 LET KEY_FLASH$=KEY_FLASH$&"789o//?;////" 515 LET DEL$=CHR$(8)&" "&CHR$(8) 520 LET CUR_ON$=CHR$(27)&CHR$(79) 525 LET CUR_OFF$=CHR$(27)&CHR$(111) 530 LET LFCR$=CHR$(10)&CHR$(13) 535 ! 540 ! 545 WHEN EXCEPTIONUSEERROR 550 ! 555 ! 560 ! 565 CALL SET_SCREEN_1 570 CALL SET_SCREEN_2 575 SET BORDERBLACK 580 CLEAR SCREEN 585 SET STATUSOFF 590 CALL COLOUR_SET_1 595 CALL COLOUR_SET_3 600 SET #CHAN:INK3 605 PRINT #CHAN:CUR_OFF$ 610 ! 615 ! 620 CALL INSTRUCTIONS 625 CALL LESSON_DETAILS 630 ! 635 ! 640 ! start of main program 645 ! 650 ! get lesson number required 655 ! 660 LET VALID=TRUE 665 DO 670 DO 675 CLEAR #CHAN 680 CALL BANNER 685 IF C_LESSON>0THEN 690 PRINT #CHAN,AT6,10:"Kéri a főmenüt (i/n)?"; 695 CALL YESNO 700 IF YESTHEN 705 CALL INSTRUCTIONS 710 CALL LESSON_DETAILS 715 CLEAR #CHAN 720 CALL BANNER 725 END IF 730 PRINT #CHAN,AT6,1:" " 735 PRINT #CHAN,AT6,1:"Az előző lecke száma: ";P_LESSON;" " 740 END IF 745 PRINT #CHAN:CUR_ON$; 750 CALL GET_LESSON 755 PRINT #CHAN:CUR_OFF$; 760 IF C_LESSON<1ORC_LESSON>76THEN 765 PRINT #CHAN,AT14,12:"Nincs ilyen lecke!"; 770 LET VALID=FALSE 775 WAIT DELAY4 780 ELSE 785 LET VALID=TRUE 790 END IF 795 LOOP UNTILVALID 800 ! 805 ! load lesson data block 810 ! 815 SELECT CASEC_LESSON 820 CASE 1TO9 825 LET BLOCK=1 830 CASE 10TO17 835 LET BLOCK=2 840 CASE 18TO26 845 LET BLOCK=3 850 CASE 27TO35 855 LET BLOCK=4 860 CASE 36TO44 865 LET BLOCK=5 870 CASE 45TO53 875 LET BLOCK=6 880 CASE 54TO63 885 LET BLOCK=7 890 CASE 64TO72 895 LET BLOCK=8 900 CASE 73TO76 905 LET BLOCK=9 910 END SELECT 915 SET STATUSON 920 ! 925 IF BLOCKP_BLOCKTHEN 960 LET FILE_ID$="blokk"&STR$(BLOCK) 965 LET FILE_ID$=FILE_ID$ 970 IF NOT(REMOTE)THEN 975 PRINT #CHAN,AT14,11:"Indítsa el a magnót!" 980 ELSE 985 PRINT #CHAN,AT14,12:"Egy kis türelmet !"; 990 END IF 995 OPEN #106:FILE_ID$ACCESSINPUT 1000 LET P_BLOCK=BLOCK 1005 LET EL=0 1010 DO 1015 LET EL=EL+1 1020 LINE INPUT#106:DATA$(EL) 1025 LOOP UNTILDATA$(EL)="EOB" 1030 CLOSE #106 1035 SET STATUSOFF 1040 PRINT #CHAN,AT14,10:" " 1045 IF NOT(REMOTE)THEN 1050 PRINT #CHAN,AT16,10:"Állítsa meg a magnót !" 1055 CALL PRESS_ENTER(18,0) 1060 END IF 1065 END IF 1070 ! 1075 ! find lesson in data 1080 ! and set pointer 1085 ! 1090 LET PTR=0 1095 LET FOUND=FALSE 1100 DO 1105 LET PTR=PTR+1 1110 IF DATA$(PTR)(1)="£"THEN 1115 LET TEMP$=DATA$(PTR)(2:3) 1120 IF C_LESSON=VAL(TEMP$)THEN 1125 LET FOUND=TRUE 1130 END IF 1135 END IF 1140 LOOP UNTILFOUND 1145 ! 1150 ! Display lesson instructions 1155 ! 1160 CALL LESSON_INSTRUCTIONS 1165 ! 1170 ! control lesson 1175 ! 1180 DO 1185 LET PERFECT=TRUE 1190 LET IA=0 1195 ! 1200 ! get exercise 1205 ! 1210 DO 1215 LET PTR=PTR+1 1220 LET IA=IA+1 1225 LET TEMP$=DATA$(PTR)(LEN(DATA$(PTR))) 1230 IF TEMP$="£"THEN 1235 LET A$(IA)=DATA$(PTR)(1:LEN(DATA$(PTR))-1) 1240 ELSE 1245 LET A$(IA)=DATA$(PTR) 1250 END IF 1255 LOOP UNTILTEMP$<>"£" 1260 IF A$(1)<>"$"THEN 1265 ! 1270 ! do exercise 1275 ! 1280 CALL LESSON 1285 LET N_LESSON=C_LESSON 1290 END IF 1295 IF OPTION$="B"THEN 1300 CALL BANNER 1305 PRINT #CHAN,AT6,1:"Biztosan be akarja fejezni (i/n)? "; 1310 CALL YESNO 1315 IF NOTHENLET OPTION$="" 1320 END IF 1325 LOOP UNTILOPTION$="B"ORA$(1)="$" 1330 ! 1335 ! end of lesson or quit 1340 ! 1345 IF A$(1)<>"$"THENLET C_LESSON=76 1350 LET P_LESSON=C_LESSON 1355 LET P_BLOCK=BLOCK 1360 LOOP UNTILC_LESSON=76 1365 CLEAR #CHAN 1370 ! 1375 ! print end of program messages 1380 ! 1. congratulations 1385 ! 2. go on to lesson+1 1390 ! 3. repeat lesson 1395 ! 1400 IF NOT(PERFECT)THEN 1405 LET FIN$=" A következő alkalommal a(z) " 1410 LET FIN$=FIN$&STR$(N_LESSON)&" számú"&LFCR$ 1415 LET FIN$=FIN$&" leckével folytassa a tanulást!" 1420 ELSE IF N_LESSON<76THEN 1425 LET FIN$=" A következő alkalommal a(z) " 1430 LET FIN$=FIN$&STR$(N_LESSON+1)&" számú"&LFCR$ 1435 LET FIN$=FIN$&" leckével folytassa a tanulást!" 1440 ELSE 1445 LET FIN$="GRATULÁLUNK! ön eredményesen végzett a"&LFCR$ 1450 LET FIN$=FIN$&" TINY TOUCH'N'GO tanfolyamán. Mostmár"&LFCR$ 1455 LET FIN$=FIN$&"gyorsan és a megadott hibakereten belül"&LFCR$ 1460 LET FIN$=FIN$&"maradva tud gépelni." 1465 END IF 1470 ! 1475 ! display end message 1480 ! 1485 CLEAR #CHAN 1490 CALL BANNER 1495 PRINT #CHAN,AT3,15:"PROGRAM VÉGE" 1500 PRINT #CHAN,AT5,1:FIN$; 1505 PRINT #CHAN,AT12,13:"VISZONTLÁTÁSRA !" 1510 ! 1515 ! 1520 ! end of main program code 1525 ! 1530 ! 1535 END WHEN 1536 WAIT 6 1537 IF ANG$="N"THENEXT "brd" 1538 SET 8,0:CLEAR FKEYS 1539 TEXT 1540 END 1545 DEF LESSON 1550 DO 1555 DISPLAY #CHAN:AT1FROM1TO25 1560 CLEAR #CHAN 1565 CALL COLOUR_SET_2 1570 SET BORDERBLACK 1575 PRINT #CHAN:CUR_OFF$; 1580 ! 1585 CALL SPEED_ACCURACY 1590 PRINT #CHAN,AT13,1:LINE$; 1595 PRINT #CHAN,AT14,1:"Ebben a gyakorlatban a követelmény :" 1600 PRINT #CHAN:" ";STR$(R_ACC);"% pontosság és ";5*RWPM;"L/P" 1605 PRINT #CHAN,AT1,6:"Most gépelje be a következőt :" 1610 ! 1615 ! 1620 PRINT #CHAN: 1625 ! 1630 FOR I=1TOIA 1635 PRINT #CHAN:A$(I) 1640 NEXT 1645 PRINT #CHAN,AT6,1:LINE$; 1650 ! 1655 LET CHAR_TOT=0 1660 LET LONG=FALSE 1665 SET #CHAN3:CURSORCHARACTER142 1670 SET #CHAN3:CURSORCOLOR1 1675 SET #CHAN3:INK3 1680 CLEAR #CHAN3 1685 DISPLAY #CHAN3:AT7FROM1TO6 1690 PRINT #CHAN3:CUR_ON$; 1695 PRINT #CHAN3:" " 1700 CALL KEYBOARD 1705 FOR I=1TOIA 1710 CALL FIRST_CHAR 1715 IF I=1THENTIME "00:00:00" 1720 CALL REMAINING_CHAR 1725 LET B$(I)=C$ 1730 PRINT #CHAN3::PRINT #CHAN3: 1735 LET L=LEN(B$(I)) 1740 LET CHAR_TOT=CHAR_TOT+L 1745 NEXT 1750 PRINT #CHAN3:CUR_OFF$; 1755 SET #CHAN3:CURSORCHARACTER32 1760 DISPLAY #CHAN:AT16FROM16TO25 1765 ! 1770 ! calculate time taken 1775 ! and number of errors 1780 ! 1785 LET MIN$=TEMP_T$(4:5) 1790 LET SEC$=TEMP_T$(7:8) 1795 IF VAL(SEC$)=0THENLET SEC$="01" 1800 LET T=VAL(MIN$)*60+VAL(SEC$) 1805 LET WPM=2*INT((CHAR_TOT+IA)/T*CONST+.5) 1810 LET M=0 1815 SET #CHAN3:INK1 1820 FOR I=1TOIA 1825 ! LET B$(I)=RTRIM$(B$(I)) 1830 LET S=(I-1)*80 1835 LET L=LEN(B$(I)) 1840 LET NENT=FALSE 1845 FOR J=1TOL 1850 IF A$(I)(J:J)<>B$(I)(J:J)THEN 1855 LET XP=MOD(S,40)+1:LET YP=INT(S/40)+1 1860 PRINT #CHAN3,ATYP,XP:"!"; 1865 LET M=M+1 1870 END IF 1875 LET S=S+1 1880 NEXT 1885 ! 1890 ! line too short 1895 ! 1900 IF L>LEN(A$(I))THEN 1905 LET LONG=TRUE 1910 IF B$(I)(LEN(B$(I)))=" "THENLET NENT=TRUE 1915 ELSE IF L"$"THEN 2035 LET EXERCISE_NEXT=TRUE 2040 LET LESSON_NEXT=FALSE 2045 ELSE 2050 LET LESSON_NEXT=TRUE 2055 LET EXERCISE_NEXT=FALSE 2060 END IF 2065 LET PERFECT=TRUE 2070 IF ACC"" 2235 LET OPTION$=UCASE$(OPTION$) 2240 IF OPTION$="I"THENLET VALID=TRUE 2245 IF OPTION$="L"THENLET VALID=TRUE 2250 IF OPTION$="B"THENLET VALID=TRUE 2255 IF PERFECTANDORD(OPTION$)=13THENLET VALID=TRUE 2260 LOOP UNTILVALID 2265 IF OPTION$="L"THEN 2270 CLEAR #CHAN 2275 CALL COLOUR_SET_1 2280 SET #CHAN:INK3 2285 DISPLAY #CHAN:AT1FROM1TO25 2290 LET TEMP_PTR=PTR 2295 LET PTR=L_PTR 2300 CALL LESSON_INSTRUCTIONS 2305 LET PTR=TEMP_PTR 2310 DISPLAY #CHAN:AT1FROM1TO25 2315 CALL COLOUR_SET_2 2320 CLEAR #CHAN 2325 END IF 2330 LOOP UNTILOPTION$<>"L" 2335 LOOP UNTILOPTION$<>"I" 2340 CLEAR #CHAN 2345 CALL COLOUR_SET_1 2350 DISPLAY #CHAN:AT1FROM1TO25 2355 END DEF 2360 ! 2365 ! determines required 2370 ! speed and accuracy 2375 ! 2380 DEF SPEED_ACCURACY 2385 LET P1$=";"&STR$(C_LESSON)&";" 2390 LET P1=POS(SPLIT$,P1$) 2395 LET Q1=POS(A$(1)," ") 2400 LET Q1$=A$(1)(1:Q1) 2405 LET Q2$=A$(1)(Q1+1:POS(A$(1)," ",Q1+1)-Q1) 2410 LET Q1=1 2415 IF Q1$=Q2$THENLET Q1=Q1+1 2420 LET R_ACC=100 2425 LET RWPM=30 2430 IF C_LESSON>22THENLET RWPM=RWPM+5 2435 IF C_LESSON>47THENLET RWPM=RWPM+5 2440 IF C_LESSON>62THENLET RWPM=RWPM+5 2445 IF P1<>0THEN 2450 IF Q1<>1THENLET RWPM=RWPM+5 2455 IF C_LESSON=53ORC_LESSON=58THENLET RWPM=RWPM-5 2460 ELSE 2465 LET R_ACC=95 2470 LET RWPM=RWPM-5 2475 IF Q1<>1ANDC_LESSON>10THENLET RWPM=RWPM+5 2480 END IF 2485 END DEF 2490 ! 2495 ! 2500 ! 2505 HANDLER ERROR 2510 !IF EXTYPE>999 THEN 2515 PRINT AT1,1:"extype = ";EXTYPE 2520 PRINT AT2,1:"exline = ";EXLINE 2525 PRINT AT3,1:"exstring = ";EXSTRING$(EXTYPE) 2530 EXIT HANDLER 2535 !ELSE 2540 ! 2545 ! write this routine later 2550 ! 2555 EXIT HANDLER 2560 !END IF 2565 END HANDLER 2570 ! 2575 ! 2580 ! 2585 ! 2590 DEF PRESS_ENTER(Y_POS,FLAG) 2595 GET C$ 2600 CALL HIGHLIGHT(" A folytatáshoz nyomja le az ENTER-t! ;",Y_POS) 2605 DO 2610 GET C$ 2615 LOOP UNTILC$=CHR$(13)ORFLAG 2620 END DEF 2625 ! 2630 ! 2635 DEF BANNER 2640 CLEAR #CHAN 2645 IF FIRSTTHEN 2650 LET TEMP$=" - - - üDVöZLI A TINY TOUCH'N'GO - - - " 2655 ELSE 2660 LET TEMP$=" - - - TINY TOUCH'N'GO - - - " 2665 END IF 2670 CALL HIGHLIGHT(TEMP$,1) 2675 END DEF 2680 ! 2685 ! 2690 DEF COLOUR_SET_1 2695 SET #CHAN:COLOUR0,BLUE 2700 SET #CHAN:COLOUR1,YELLOW 2705 SET #CHAN:COLOUR2,BLACK 2710 SET #CHAN:COLOUR3,GREEN 2715 SET BORDERBLACK 2720 END DEF 2725 ! 2730 DEF COLOUR_SET_2 2735 SET #CHAN:COLOUR0,BLUE 2740 SET #CHAN:COLOUR1,CYAN 2745 SET #CHAN:COLOUR2,GREEN 2750 SET #CHAN:COLOUR3,BLACK 2755 END DEF 2760 ! 2765 ! 2770 DEF COLOUR_SET_3 2775 SET #CHAN3:COLOUR0,BLACK 2780 SET #CHAN3:COLOUR1,YELLOW 2785 SET #CHAN3:COLOUR2,BLACK 2790 SET #CHAN3:COLOUR3,GREEN 2795 END DEF 2800 ! 2805 DEF SET_SCREEN_1 2810 SET VIDEOMODE0 2815 SET VIDEOCOLOUR0 2820 SET VIDEOX41 2825 SET VIDEOY25 2830 OPEN #2:"video:" 2835 END DEF 2840 ! 2845 ! 2850 DEF SET_SCREEN_2 2855 SET VIDEOMODE0 2860 SET VIDEOCOLOUR0 2865 SET VIDEOX41 2870 SET VIDEOY8 2875 OPEN #3:"video:" 2880 END DEF 2885 ! 2890 ! 2895 DEF YESNO 2900 LET VALID,NO,YES=FALSE 2905 DO 2910 GET C$ 2915 LET C$=UCASE$(C$) 2920 IF C$="I"THEN 2925 PRINT #CHAN:C$; 2930 LET VALID=TRUE 2935 LET YES=TRUE 2940 ELSE IF C$="N"THEN 2945 PRINT #CHAN:C$; 2950 LET VALID=TRUE 2955 LET NO=TRUE 2960 ELSE 2965 LET VALID=FALSE 2970 END IF 2975 LOOP UNTILVALID 2980 END DEF 2985 ! 2990 ! 2995 DEF DETAILS_BANNER 3000 CLEAR #CHAN 3005 PRINT #CHAN:" "; 3010 CALL HIGHLIGHT(" - - - LECKE TARTALOMJEGYZÉK - - - ",1) 3015 END DEF 3020 ! 3025 ! the following routines are used 3030 ! to get keyboard input for the 3035 ! lessons by the main program. 3040 ! 3045 DEF FIRST_CHAR 3050 ! 3055 GET C$ 3060 CALL INPUT_CHAR 3065 LET C$="" 3070 LET C$=C$&Y$ 3075 PRINT #CHAN3:Y$; 3080 LET TEMP_T$=TIME$ 3085 END DEF 3090 ! 3095 ! 3100 DEF INPUT_CHAR 3105 DO 3110 DO 3115 GET Y$ 3120 LOOP UNTILY$<>"" 3125 LET Y=ORD(Y$) 3130 LOOP UNTILY>31ANDY<128ORY=13ORY=164 3135 SELECT CASEY$ 3140 CASE "*" 3145 LET Y$="Á" 3150 CASE ":" 3155 LET Y$="á" 3160 CASE "+" 3165 LET Y$="É" 3170 CASE ";" 3175 LET Y$="é" 3180 CASE "|" 3185 LET Y$="í" 3190 CASE "\" 3195 LET Y$="í" 3200 CASE "~" 3205 LET Y$="ó" 3210 CASE "^" 3215 LET Y$="ó" 3220 CASE "_" 3225 LET Y$="ö" 3230 CASE "0" 3235 LET Y$="ö" 3240 CASE "`" 3245 LET Y$="ő" 3250 CASE "@" 3255 LET Y$="ő" 3260 CASE "=" 3265 LET Y$="ü" 3270 CASE "-" 3275 LET Y$="ü" 3280 CASE "}" 3285 LET Y$="ű" 3290 CASE "]" 3295 LET Y$="ű" 3300 CASE "{" 3305 LET Y$="ú" 3310 CASE "[" 3315 LET Y$="ú" 3320 CASE "<" 3325 LET Y$="?" 3330 CASE ">" 3335 LET Y$=";" 3340 CASE "/" 3345 LET Y$="-" 3350 CASE "?" 3355 LET Y$="_" 3360 CASE "y" 3365 LET Y$="z" 3370 CASE "z" 3375 LET Y$="y" 3380 CASE "Y" 3385 LET Y$="Z" 3390 CASE "Z" 3395 LET Y$="Y" 3400 CASE ELSE 3405 LET Y$=Y$ 3410 END SELECT 3415 END DEF 3420 ! 3425 ! 3430 DEF GET_LESSON 3435 LET CR=FALSE:LET TEMP$="" 3440 PRINT #CHAN,AT8,1:"írja be a következő kiválasztott lecke" 3445 PRINT #CHAN,AT10,1:"számát és üsse le az ENTER-t >>"; 3450 DO 3455 DO 3460 GET Y$ 3465 LOOP UNTILY$<>"" 3470 LET Y=ORD(Y$) 3475 SELECT CASEY 3480 CASE 13 3485 IF TEMP$<>""THEN 3490 LET CR=TRUE 3495 ELSE 3500 LET Y$="" 3505 END IF 3510 CASE 48TO57 3515 LET TEMP$=TEMP$&Y$ 3520 CASE 164 3525 IF TEMP$<>""THEN 3530 LET TEMP$=TEMP$(1:LEN(TEMP$)-1) 3535 LET Y$=DEL$ 3540 END IF 3545 CASE ELSE 3550 LET Y$="" 3555 END SELECT 3560 PRINT #CHAN:Y$; 3565 LOOP UNTILCR 3570 LET C_LESSON=VAL(TEMP$) 3575 ! 3580 END DEF 3585 ! 3590 ! 3595 DEF REMAINING_CHAR 3600 NUMERIC K 3605 LET LE=LEN(A$(I)) 3610 FOR K=1TOLE 3615 CALL INPUT_CHAR 3620 IF Y$=CHR$(13)THEN 3625 LET K=LE 3630 ELSE IF Y$<>CHR$(164)THEN 3635 LET C$=C$&Y$ 3640 IF K" "THENPRINT #CHAN3:Y$; 3645 ELSE IF Y$=CHR$(164)ANDLEN(C$)>=1THEN 3650 LET C$=C$(1:LEN(C$)-1) 3655 LET K=K-2 3660 PRINT #CHAN3:DEL$; 3665 END IF 3670 IF LE-1=KTHENLET TEMP_T$=TIME$ 3675 NEXT K 3680 END DEF 3685 DEF INSTRUCTIONS 3690 ! 3695 ! Introduction and program 3700 ! Instructions 3705 ! 3710 SET BORDERBLACK 3715 CALL BANNER 3720 LET FIRST=FALSE 3725 DISPLAY #CHAN:AT1FROM1TO25 3730 PRINT #CHAN,AT4,1:"Ez a program 76 fokozatosan nehezedő " 3735 PRINT #CHAN:LFCR$;"gyakorlat segítségével megtanítja önt a" 3740 PRINT #CHAN:LFCR$;"magyar írógépen történő tízujjas vakí-" 3745 PRINT #CHAN:LFCR$;"rásra. A tanfolyam egy-egy betű leüté-" 3750 PRINT #CHAN:LFCR$;"sével kezdődik és értelmes szavak, mon-" 3755 PRINT #CHAN:LFCR$;"datok, bekezdések leírásával fejeződik" 3760 PRINT #CHAN:LFCR$;"be." 3765 CALL PRESS_ENTER(24,0) 3770 CALL BANNER 3775 PRINT #CHAN,AT4,1:"A gyakorlatokban a feladatokat pontosan" 3780 PRINT #CHAN:LFCR$;"úgy kell begépelni, ahogy azok a képer-" 3785 PRINT #CHAN:LFCR$;"nyőn megjelennek. Hiba esetén az 'ERASE'" 3790 PRINT #CHAN:LFCR$;"billentyűvel lehet javítani. Minden sor" 3795 PRINT #CHAN:LFCR$;"végén le kell ütni az 'ENTER'-t." 3800 CALL PRESS_ENTER(14,1) 3805 CALL KEYBOARD 3810 CALL ERSENT 3815 DISPLAY #CHAN:AT1FROM1TO25 3820 ! 3825 CALL BANNER 3830 PRINT #CHAN,AT3,1:"Az 'ENTER' lenyomása után a Touch'N'Go" 3835 PRINT #CHAN:LFCR$;"kiírja a végrehajtott gyakorlat eredmé-" 3840 PRINT #CHAN:LFCR$;"nyét. Megjelenik a hibák száma és a gé-" 3845 PRINT #CHAN:LFCR$;"pelési sebesség leütés/perc-ben (ezentúl" 3850 PRINT #CHAN:LFCR$;"a jelölése: L/P). Az elérendő sebesség" 3855 PRINT #CHAN:LFCR$;"125 és 250 L/P közt változik." 3860 PRINT #CHAN:LFCR$;"A gyakorló leckék feladatait hibátlanul" 3865 PRINT #CHAN:LFCR$;"kell begépelni, az új anyagokét pedig" 3870 PRINT #CHAN:LFCR$;"maximum 5% hibával." 3875 CALL PRESS_ENTER(25,0) 3880 CALL BANNER 3885 PRINT #CHAN,AT3,1:"Azt javasoljuk, hogy a következő gyakor-" 3890 PRINT #CHAN:LFCR$;"latra csak a kitűzött követelmény eléré-" 3895 PRINT #CHAN:LFCR$;"se után térjen át, egyébként addig ismé-" 3900 PRINT #CHAN:LFCR$;"telje a feladatot amíg nem tökéletes." 3905 PRINT #CHAN:LFCR$;"A tévesen begépelt betű felett egy '!'," 3910 PRINT #CHAN:LFCR$;"kihagyott felett pedig '?' jelenik meg." 3915 PRINT #CHAN:LFCR$;"Ha vissza akar térni egy előző blokkban" 3920 PRINT #CHAN:LFCR$;"található leckére, akkor a szalagot" 3925 PRINT #CHAN:LFCR$;"vissza kell tekerni." 3930 CALL PRESS_ENTER(25,0) 3935 CALL BANNER 3940 PRINT #CHAN,AT3,1:"A gyakorlatok alatt végig legyenek az" 3945 PRINT #CHAN:LFCR$;"ujjai az ALAP SORon - a billentyűzet kö-" 3950 PRINT #CHAN:LFCR$;"zépső sora - és a jobb kéz hüvelykujja" 3955 PRINT #CHAN:LFCR$;"pedig a szóközön. A balkezesek természe-" 3960 PRINT #CHAN:LFCR$;"tesen a bal hüvelykujjukat használják." 3965 CALL PRESS_ENTER(14,1) 3970 CALL KEYBOARD 3975 CALL HOME 3980 DISPLAY #CHAN:AT1FROM1TO25 3985 END DEF 3990 ! 3995 ! 4000 ! 4005 DEF LESSON_DETAILS 4010 CALL BANNER 4015 PRINT #CHAN,AT3,3:"A leckéket 1-től 76-ig számoztuk." 4020 PRINT #CHAN:LFCR$;"Kér részletes ismertetőt (i/n)? "; 4025 CALL YESNO 4030 IF YESTHEN 4035 CALL DETAILS_BANNER 4040 CALL HIGHLIGHT(" 1. BLOKK ",3) 4045 PRINT #CHAN:LFCR$;"1-8........J, F, K, D, L, S, É, A" 4050 PRINT #CHAN:LFCR$;"9..........Alap sor gyakorlása" 4055 CALL HIGHLIGHT(" 2. BLOKK ",9) 4060 PRINT #CHAN:LFCR$;"10-11......I, I - gyakorlása" 4065 PRINT #CHAN:LFCR$;"12-13......M, R" 4070 PRINT #CHAN:LFCR$;"14.........Vessző (,)" 4075 PRINT #CHAN:LFCR$;"15.........Gyakorlás" 4080 PRINT #CHAN:LFCR$;"16-17......V, í" 4085 CALL PRESS_ENTER(25,0) 4090 CALL DETAILS_BANNER 4095 CALL HIGHLIGHT(" 3. BLOKK ",3) 4100 PRINT #CHAN:LFCR$;"18-19......O, Kifejezések" 4105 PRINT #CHAN:LFCR$;"20-21......Á, G" 4110 PRINT #CHAN:LFCR$;"22.........Gyakorlás" 4115 PRINT #CHAN:LFCR$;"23-24......E, E - gyakorlás" 4120 PRINT #CHAN:LFCR$;"25-26......U, P" 4125 CALL HIGHLIGHT(" 4. BLOKK ",15) 4130 PRINT #CHAN:LFCR$;"27-28......T, Kifejezések" 4135 PRINT #CHAN:LFCR$;"29-33......N, C, H, ű, Kifejezések" 4140 PRINT #CHAN:LFCR$;"34-35......ő, ú" 4145 CALL PRESS_ENTER(25,0) 4150 CALL DETAILS_BANNER 4155 CALL HIGHLIGHT(" 5. BLOKK ",3) 4160 PRINT #CHAN:LFCR$;"36-39......Y, Kifejezések, B, ü" 4165 PRINT #CHAN:LFCR$;"40.........Kifejezések" 4170 PRINT #CHAN:LFCR$;"41.........Kifejezések" 4175 PRINT #CHAN:LFCR$;"42-44......Q, X, W" 4180 CALL HIGHLIGHT(" 6. BLOKK ",15) 4185 PRINT #CHAN:LFCR$;"45-47......Z, Z-folyt., ö" 4190 PRINT #CHAN:LFCR$;"48-49......Pont (.), Váltóbillentyűk" 4195 PRINT #CHAN:LFCR$;"50-51......Gyakorlás: bal és jobb váltó" 4200 PRINT #CHAN:LFCR$;"52-53......Római számok, Mondatok" 4205 CALL PRESS_ENTER(25,0) 4210 CALL DETAILS_BANNER 4215 CALL HIGHLIGHT(" 7. BLOKK ",3) 4220 PRINT #CHAN:LFCR$;"54-56......ó, Mondatok, Kötőjel (-)" 4225 PRINT #CHAN:LFCR$;"57-58......Mondatok, Bekezdések" 4230 PRINT #CHAN:LFCR$;"59-63......1, 2, 3, 4, 5" 4235 CALL HIGHLIGHT(" 8. BLOKK ",15) 4240 PRINT #CHAN:LFCR$;"64-68......6, 7, 8, 9, 0" 4245 PRINT #CHAN:LFCR$;"69-70......Számok, Bekezdések" 4250 PRINT #CHAN:LFCR$;"71-72......Kérdőjel (?), Pontosvessző (;)" 4255 CALL PRESS_ENTER(25,0) 4260 CALL DETAILS_BANNER 4265 CALL HIGHLIGHT(" 9. BLOKK ",3) 4270 PRINT #CHAN:LFCR$;"73.........Mondatok" 4275 PRINT #CHAN:LFCR$;"74.........Bekezdések" 4280 PRINT #CHAN:LFCR$;"75.........Bekezdések" 4285 PRINT #CHAN:LFCR$;"76.........Bekezdések" 4290 CALL PRESS_ENTER(25,0) 4295 END IF 4300 END DEF 4305 ! 4310 ! 4315 DEF LESSON_INSTRUCTIONS 4320 LET L_PTR=PTR 4325 PRINT #CHAN:CUR_OFF$; 4330 CLEAR #CHAN 4335 LET TEMP$=STR$(C_LESSON)&". Lecke " 4340 CALL HIGHLIGHT(TEMP$&" ",1) 4345 LET PTR=PTR+1 4350 LET TEMP$=DATA$(PTR) 4355 IF LEN(TEMP$)<25THEN 4360 LET TEMP$=TEMP$&" - Magyarázat " 4365 END IF 4370 CALL HIGHLIGHT(TEMP$&" ",3) 4375 PRINT #CHAN: 4380 DO 4385 LET PTR=PTR+1 4390 LET TEMP$=DATA$(PTR) 4395 IF TEMP$<>"*"THENPRINT #CHAN:TEMP$ 4400 LOOP UNTILTEMP$="*" 4405 ! 4410 ! display keyboard and 4415 ! flash key required 4420 ! 4425 LET TEMP1$=KEY_FLASH$(C_LESSON) 4430 IF TEMP1$<>"/"THEN 4435 CALL KEYBOARD 4440 CALL PRESS_ENTER(14,TRUE) 4445 CALL DOT(TEMP1$) 4450 ELSE 4455 CALL PRESS_ENTER(24,FALSE) 4460 END IF 4465 END DEF 4470 DEF HIGHLIGHT(TITLE$,YPOS) 4475 NUMERIC L,XPOS 4480 SET #CHAN:INK1 4485 LET L=LEN(TITLE$) 4490 LET TEMP$=TITLE$(L:L) 4495 LET XPOS=INT(41-L)/2 4500 IF TEMP$=" "THEN 4505 PRINT #CHAN,ATYPOS,XPOS:TITLE$(1:L-1) 4510 ELSE 4515 PRINT #CHAN,ATYPOS,XPOS:TITLE$(1:L-1); 4520 END IF 4525 SET #CHAN:INK3 4530 END DEF 4535 DEF KEYBOARD_DRAW 4540 CALL INIT 4545 SET VIDEOMODE1 4550 SET VIDEOCOLOUR1 4555 SET VIDEOX38 4560 SET VIDEOY10 4565 OPEN #1:"video:" 4570 SET #1:PALETTE56,WHITE,199,194,1,2,3,4 4575 CALL SHKEY 4580 SET #1:INK1 4585 CALL ROWS 4590 CALL LETTKEY 4595 SET #1:INK3 4600 PLOT #1:65,150,PAINT 4605 PLOT #1:125,150,PAINT 4610 PLOT #1:65,295,PAINT 4615 CALL JOYSTICK 4620 END DEF 4625 DEF ROWS 4630 PRINT #1,AT8,3:"SH í Y X C V B N M ";CHR$(141);" ";CHR$(143);" - SH A" 4635 PRINT #1,AT6,3:"C L A S D F G H J K L É Á ű T" 4640 PRINT #1,AT4,3:CHR$(139);CHR$(140);" Q W E R T Z U I O P ő ú E" 4645 PRINT #1,AT5,31:"N" 4650 PRINT #1,AT2,3:"E 1 2 3 4 5 6 7 8 9 ö ü ó ER ";CHR$(137);CHR$(138);" I" 4655 PRINT #1,AT10,16:"SZóKöZ" 4660 END DEF 4665 DEF LONGKEYS(LENGTH,X,Y) 4670 LET LENG=LENGTH-10 4675 LET LENGTH=LENGTH-4 4680 PLOT #1:X+10,Y;X+LENG,Y;X+LENGTH,Y+10;X+LENGTH,Y+40;X+LENG,Y+50;X+10,Y+50;X,Y+40;X,Y+10;X+10,Y 4685 END DEF 4690 DEF KEY(X,Y) 4695 PLOT #1:X+10,Y;X+40,Y;X+50,Y+10;X+50,Y+40;X+40,Y+50;X+10,Y+50;X,Y+40;X,Y+10;X+10,Y 4700 END DEF 4705 DEF LETTKEY 4710 FOR X=56TO900STEP64 4715 CALL KEY(X,140) 4720 NEXT X 4725 FOR X=152TO800STEP64 4730 CALL KEY(X,68) 4735 NEXT X 4740 FOR X=152TO900STEP64 4745 CALL KEY(X,212) 4750 NEXT X 4755 FOR X=56TO840STEP64 4760 CALL KEY(X,285) 4765 NEXT X 4770 END DEF 4775 DEF SHKEY 4780 CALL LONGKEYS(500,304,0) 4785 CALL LONGKEYS(80,56,68) 4790 CALL LONGKEYS(80,56,213) 4795 CALL LONGKEYS(80,856,68) 4800 CALL LONGKEYS(80,888,285) 4805 CALL LONGKEYS(80,980,285) 4810 CALL KEY(1076,285) 4815 CALL KEY(952,68) 4820 PLOT #1:960,140;992,140;1002,150;1002,250;992,260;932,260;922,250;922,220;952,200;952,150;960,140 4825 SET #1:INK3 4830 PLOT #1:960,160,PAINT 4835 PLOT #1:960,78,PAINT 4840 PLOT #1:1090,295,PAINT 4845 PLOT #1:990,295,PAINT 4850 PLOT #1:895,295,PAINT 4855 PLOT #1:864,78,PAINT 4860 PLOT #1:65,223,PAINT 4865 PLOT #1:65,78,PAINT 4870 END DEF 4875 DEF JOYSTICK 4880 SET #1:INK1 4885 FOR N=20TO80STEP20 4890 PLOT #1:1104,144,ELLIPSEN,N, 4895 NEXT N 4900 SET #1:INK3 4905 IF C_LESSON=43THENPLOT #1:90,80,PAINT 4910 PLOT #1:1104,144,PAINT 4915 END DEF 4920 DEF FLASH(X,Y,FLAG) 4925 LOOK #1,ATX,Y:V 4930 SET #1:INK2 4935 PLOT #1:X,Y,PAINT 4940 IF C_LESSON=71ORC_LESSON=72THENPLOT #1:90,80,PAINT 4945 CALL FLASH1(FLAG) 4950 SET #1:INKV 4955 SET #1:COLOUR2,56 4960 PLOT #1:X,Y,PAINT 4965 END DEF 4970 DEF FLASH1(FLAG) 4975 DO 4980 SET #1:COLOUR2,RED 4985 FOR N=0TO75*FLAG 4990 NEXT N 4995 IF INKEY$=CHR$(13)THENEXIT DO 5000 SET #1:COLOUR2,CYAN 5005 FOR N=0TO75*FLAG 5010 NEXT N 5015 LOOP WHILEINKEY$<>CHR$(13)ANDFLAG=1 5020 END DEF 5025 DEF HOME 5030 SET #1:INK2 5035 FOR XT=224TO608STEP384 5040 FOR X=XTTOXT+192STEP64 5045 PLOT #1:X,150,PAINT 5050 NEXT X 5055 NEXT XT 5060 CALL FLASH1(1) 5065 SET #1:INK0 5070 SET #1:COLOUR2,56 5075 FOR XT=224TO608STEP384 5080 FOR X=XTTOXT+192STEP64 5085 PLOT #1:X,150,PAINT 5090 NEXT X 5095 NEXT XT 5100 END DEF 5105 DEF INIT1 5110 NUMERIC N(1TO10),I,R 5115 RESTORE 5150 5120 FOR I=1TO25 5125 FOR R=1TO10 5130 READ N(R) 5135 NEXT R 5140 SET CHARACTER(N(1)),N(2),N(3),N(4),N(5),N(6),N(7),N(8),N(9),N(10) 5145 NEXT I 5150 DATA 137,241,217,205,205,205,217,241,0,0,138,236,140,140,204,140,140,239,0,0 5155 DATA 139,243,102,102,102,103,102,102,0,0,140,158,89,89,94,217,89,94,0,0 5160 DATA 141,48,72,16,16,0,16,4,4,8 5165 DATA 142,255,255,255,255,255,255,255,255,255 5170 DATA 143,8,0,8,16,0,0,24,24,0 5175 DATA 128,12,8,60,102,126,102,102,0,0 5180 DATA 129,12,8,126,96,124,96,126,0,0 5185 DATA 130,12,8,60,24,24,24,60,0,0 5190 DATA 131,12,60,110,102,102,102,60,0,0 5195 DATA 132,102,60,102,102,102,102,60,0,0 5200 DATA 133,54,60,110,102,102,102,60,0,0 5205 DATA 134,12,110,102,102,102,102,60,0,0 5210 DATA 135,102,66,102,102,102,102,60,0,0 5215 DATA 136,54,108,102,102,102,102,60,0,0 5220 DATA 144,12,8,60,6,62,102,62,0,0 5225 DATA 145,12,8,60,102,126,96,60,0,0 5230 DATA 146,12,8,56,24,24,24,60,0,0 5235 DATA 147,12,8,60,102,102,102,60,0,0 5240 DATA 148,102,0,60,102,102,102,60,0,0 5245 DATA 149,54,36,60,102,102,102,60,0,0 5250 DATA 150,12,8,0,102,102,102,63,0,0 5255 DATA 151,102,0,102,102,102,102,63,0,0 5260 DATA 152,54,36,102,102,102,102,63,0,0 5265 END DEF 5270 DEF INIT 5275 LET KEY$(1)="íYXCVBNM,.-?;" 5280 LET KEY$(2)="ASDFGHJKLÉÁű" 5285 LET KEY$(3)="QWERTZUIOPőú" 5290 LET KEY$(4)="123456789öüó" 5295 LET ROW(1)=257-64 5300 LET ROW(2)=220 5305 LET ROW(3)=195 5310 LET ROW(4)=257-64*2 5315 SET CURSORCHARACTER142 5320 END DEF 5325 DEF DOT(LET$) 5330 NUMERIC CDE,N,X,Y 5335 IF ORD(LET$)<128ANDORD(LET$)>63THEN 5340 LET LET$=UCASE$(LET$) 5345 END IF 5350 LET CDE=ORD(LET$) 5355 SELECT CASECDE 5360 CASE ORD("?") 5365 LET Y=80 5370 LET X=705 5375 CASE ORD(";") 5380 LET Y=80 5385 LET X=769 5390 CASE ORD("*") 5395 LET Y=80 5400 LET X=90 5405 CASE ORD("+") 5410 LET Y=80 5415 LET X=890 5420 CASE 13 5425 LET X=960 5430 LET Y=160 5435 CASE 32 5440 LET X=315 5445 LET Y=15 5450 CASE 44TO46,49TO57,58,59,63,65TO90,128TO136 5455 FOR N=1TO4 5460 LET POSITION=POS(KEY$(N),LET$) 5465 IF POSITION<>0THENEXIT FOR 5470 NEXT N 5475 LET X=ROW(N)+((POSITION-1)*64) 5480 LET Y=75*N+15 5485 CASE ELSE 5490 EXIT DEF 5495 END SELECT 5500 CALL FLASH(X,Y,1) 5505 END DEF 5510 DEF ERSENT 5515 SET #1:INK2 5520 PLOT #1:960,160,PAINT 5525 PLOT #1:910,300,PAINT 5530 CALL FLASH1(1) 5535 SET #1:INK3 5540 SET #1:COLOUR2,56 5545 PLOT #1:960,160,PAINT 5550 PLOT #1:910,300,PAINT 5555 END DEF 5560 DEF KEYBOARD 5565 DISPLAY #1:AT16FROM1TO10 5570 END DEF