10 GOTO 210 30 'Изображение дополнительных координат 40 ' (подпрограмма) 60 PUT SPRITE 0,(16,P),1,H 70 PUT SPRITE 1,(22,P),1,T 80 PUT SPRITE 2,(28,P),1,U 90 PUT SPRITE 3,(16,P+8),1,H1 100 PUT SPRITE 4,(22,P+8),1,T1 110 PUT SPRITE 5,(28,P+8),1,U1 120 RETURN 130 ' О с н о в н а я программа 210 SCREEN 0:KEY OFF:WIDTH 38 220 DEFINT A-Z 230 MAXFILES=2 240 DIM BUF(100,5) 260 ' Открытие файла 280 PRINT"ЭКРАННЫЙ ГЕНЕРАТОР" 290 PRINT 300 PRINT"Включите на всякий случай принтер!" 310 PRINT:PRINT 320 PRINT"Введите имя файла:"; 330 A$=INPUT$(1) 340 IF A$=CHR$(13) AND F$<>""THEN 390 350 IF A$=CHR$(8) AND POS(0)-1>16 THEN LOCATE POS(0)-1:PRINT CHR$(32);:LOCATE POS(0)-1:F$=LEFT$(F$,LEN(F$)-1):GOTO 330 360 IF LEN(F$)=6 THEN GOTO 330 370 IF (A$>="A"AND A$<="Z")OR (A$>="a" AND A$<="z")THEN F$=F$+A$ ELSE GOTO 330 380 PRINT A$;:GOTO 330 390 PRINT:PRINT 400 PRINTUSING"Открывается файл:&";F$ 410 PRINT:PRINT 420 OPEN F$ FOR OUTPUT AS#2 430 PRINT USING"Файл'&'Открыт";F$ 440 PRINT:PRINT 450 PRINT"Для продолжения нажмите любую клавишу" 460 A$=INPUT$(1) 470 SCREEN 2,0,0 480 GOSUB 800 490 IX=-1:P=8:Q=168:X=128:Y=96 500 H=1:T=2:U=8:H1=0:T1=9:U1=6 510 MX=1:MY=1:HX=8:HY=8:LX=0:LY=0 520 ON SPRITE GOSUB 1780:SPRITE ON 530 PUT SPRITE 6,(X,Y),1,10 540 GOSUB 60 550 A$=INKEY$:IF A$=""THEN 550 560 IF A$=CHR$(127)THEN IX=-1:CLS 570 IF A$=CHR$(27)THEN GOTO 1320 580 IF A$="P"THEN GOSUB 910 590 IF A$="L"THEN GOSUB 1000 600 IF A$="U"THEN GOSUB 1160 610 D=STICK(0):IF D=0 THEN 550 620 IF D=1 THEN Y=Y-MY 630 IF D=2 THEN Y=Y-MY:X=X+MX 640 IF D=3 THEN X=X+MX 650 IF D=4 THEN X=X+MX:Y=Y+MY 660 IF D=5 THEN Y=Y+MY 670 IF D=6 THEN Y=Y+MY:X=X-MX 680 IF D=7 THEN X=X-MX 690 IF D=8 THEN X=X-MX:Y=Y-MY 700 IF X>255 THEN X=255 710 IF Y>191 THEN Y=191 720 IF X<0 THEN X=0 730 IF Y<0 THEN Y=0 740 H=INT(X/100):T=(XMOD100)/10:U=X MOD10 750 H1=INT(Y/100):T1=(YMOD100)/10:U1=Y MOD10 760 GOTO 530 780 ' О п и с а н и е спрайтов 800 FOR I=0 TO 11 810 S$="" 820 FOR J=1 TO 8 830 READ A$:S$=S$+CHR$(VAL("&h"+A$)) 840 NEXT 850 SPRITE$(I)=S$ 860 NEXT 870 RETURN 890 ' Подпрограмма закраски 910 IF POINT(X,Y)=15 THEN RETURN 920 IF IX+1=500 THEN RETURN 930 IX=IX+1 940 PAINT(X,Y) 950 BUF(IX,0)=1:BUF(IX,1)=X:BUF(IX,2)=Y 960 RETURN 980 ' Изображение п р я м о й 1000 IF L=0 THEN 1070 1010 L=0 1020 LINE(X,Y)-(BUF(IX,1),BUF(IX,2)) 1030 IF(X=BUF(IX,1))AND(Y=BUF(IX,2))THEN BUF(IX,0)=2:PUT SPRITE 7,(0,209):SPRITE ON:RETURN 1040 BUF(IX,3)=X:BUF(IX,4)=Y 1050 PUT SPRITE 7,(0,209) 1060 BUF(IX,0)=3:SPRITE ON:RETURN 1070 IF IX+1=100 THEN RETURN 1080 IX=IX+1 1090 L=1:SPRITE OFF 1100 BUF(IX,1)=X:BUF(IX,2)=Y 1110 PUT SPRITE 7,(X-1,Y-2),1,11 1120 RETURN 1140 'Отмена предыдущего действия 1160 IX=IX-1 1170 CLS 1180 IF IX<=-1 THEN IX=-1:BUF(0,0)=0:RETURN 1190 FOR I=0 TO IX 1200 ON BUF(I,0) GOSUB 1230,1250,1270 1210 NEXT 1220 RETURN 1230 PAINT(BUF(I,1),BUF(I,2)) 1240 RETURN 1250 PSET(BUF(I,1),BUF(I,2)) 1260 RETURN 1270 LINE(BUF(I,1),BUF(I,2))-(BUF(I,3),BUF(I,4)) 1280 RETURN 1300 'Генерация программы 1320 SPRITE OFF:SCREEN 0'В оригинале оператор SPRITE OFF отсутствует! 1330 PRINT"Вывод на принтер(P)" 1340 PRINT"Вывод на экран(S)" 1350 PRINT:PRINT 1360 PRINT"Выбирайте скорее режим:" 1370 LOCATE 23,4 1382 A$=INPUT$(1) 1390 PRINT A$ 1400 IF A$<>"P"ANDA$<>"S" THEN BEEP:GOTO 1370 1410 IF A$="P"THEN OPEN"LPT:"AS#1 1420 IF A$="S"THEN OPEN"CRT:"AS#1 1430 CLS 1450 'З а п и с ь п р о г р а м м ы 1470 FOR D=1 TO 2 1480 PRINT#D,"10 REM*" 1490 PRINT#D,USING"20 REM*Имя программы:&";F$ 1500 PRINT#D,"30 REM*" 1510 PRINT#D,"40 SCREEN 2" 1520 LN=50 1530 FOR I=0 TO IX 1540 PRINT#D,MID$(STR$(LN),2);SPC(1) 1550 ON BUF(I,0)GOSUB 1610,1650,1690 1560 LN=LN+10 1570 NEXT 1580 PRINT#D,MID$(STR$(LN),2);SPC(1);"GOTO";MID$(STR$(LN),2) 1590 NEXT 1600 END 1610 T$=MID$(STR$(BUF(I,1)),2) 1620 U$=MID$(STR$(BUF(I,2)),2) 1630 PRINT#D,USING"PAINT(&,&)";T$;U$ 1640 RETURN 1650 T$=MID$(STR$(BUF(I,1)),2) 1660 U$=MID$(STR$(BUF(I,2)),2) 1670 PRINT#D,USING"PSET(&,&)";T$;U$ 1680 RETURN 1690 T$=MID$(STR$(BUF(I,1)),2) 1700 U$=MID$(STR$(BUF(I,2)),2) 1710 V$=MID$(STR$(BUF(I,3)),2) 1720 W$=MID$(STR$(BUF(I,4)),2) 1730 PRINT#D,USING"LINE(&,&)-(&,&)";T$;U$,V$,W$ 1740 RETURN 1760 'Подпрограмма обработка прерываний 1780 SPRITE OFF 1790 SWAP P,Q 1800 GOSUB 60 1810 FOR D=1 TO 100:NEXT 1820 SPRITE ON 1830 RETURN 1840 DATA 70,88,98,A8,C8,88,70,0 1850 DATA 20,60,20,20,20,20,70,0 1860 DATA 70,88,08,30,40,80,F8,0 1870 DATA F8,08,10,30,08,88,70,0 1880 DATA 10,20,50,90,F8,10,10,0 1890 DATA F8,80,F0,08,08,88,70,0 1900 DATA 38,40,80,F0,88,88,70,0 1910 DATA F8,08,10,20,40,40,40,0 1920 DATA 70,88,88,70,88,88,70,0 1930 DATA 70,88,88,78,08,10,E0,0 1940 DATA 80,40,20,10, 8, 4, 2,1 1950 DATA 40,E0,40, 0, 0, 0, 0,0