10 ! ABCPAINT Ver 3 Program av Magnus <8042> f|r utom HRLOAD,HRSAVE rutinerna 20 ! Det h{r {r ett ritprogram f|r ABC806 512*240 punkers mode 30 ! Tyv{r s} finns ingen Dokmentation, s} det {r bara att lista och prova 40 ! 50 ! [ndrar man variabeln "Start" (rad 1010, 1120) till 120 fungerar 60 ! "LOAD"- och "SAVE"-rutinerna med 512 kB RAM internt <7759> 70 ! 80 EXTEND : FLOAT 85 ATTRIBUTE 0% 90 FGCTL BLK+BLK+BLK+BLK : FGPICTURE 0%,0%,2% 100 ; CHR$(12) : ; CUR(0,22);RED DBLE "ABC PAINT" 110 PRINT " " : PRINT " " 120 FOR Q=0 TO 7 130 IF Q=0 THEN F=7 ELSE F=Q 140 READ A$ : ; TAB(25);CHR$(128+F);" Skriv";Q;"F|r ";A$;" " 150 NEXT Q : PRINT " " 160 PRINT "Skriv 4 f{rg nummer med ";CHR$(44);" i mellan." 170 INPUT "F{rg: "F(0),F(1),F(2),F(3) 180 FOR Q=0 TO 3 190 F(Q)=F(Q)+128 : NEXT Q 200 INPUT "Vill du rensa sk{rmen j/n ";A$ 210 F$=CHR$(F(0))+CHR$(F(1))+CHR$(F(2))+CHR$(F(3)) 220 FGCTL F$ 230 IF A$="j" THEN FGPOINT 0,0,0 : FGFILL 511,239 240 X=255 : Y=120 : F=1 : E=1 : ; CHR$(12) 250 DATA BLK,RED,GRN,YEL,BLU,MAG,CYA,WHT 260 IF SYS(5)<>0 THEN 310 270 O=FGPOINT(X,Y) 280 FOR W=0 TO 3 : FGPOINT X,Y,W : NEXT W 290 IF SYS(5)=0 THEN 280 300 FGPOINT X,Y,O 310 GET A$ 320 IF A$="8" THEN Y=Y+1 330 IF A$="2" THEN Y=Y-1 340 IF A$="4" THEN X=X-1 350 IF A$="6" THEN X=X+1 360 IF A$="1" THEN X=X-1 : Y=Y-1 370 IF A$="7" THEN X=X-1 : Y=Y+1 380 IF A$="9" THEN X=X+1 : Y=Y+1 390 IF A$="3" THEN X=X+1 : Y=Y-1 400 IF A$="p" THEN 530 410 IF A$="f" THEN 1200 420 IF A$="z" THEN 1710 430 IF A$="m" THEN 870 440 IF A$="c" THEN 770 450 IF X=-1 THEN X=0 460 IF X=512 THEN X=511 470 IF Y=-1 THEN Y=0 480 IF Y=240 THEN Y=239 490 ; CUR(0,55);"x";X;" y";Y;" F{rg";F 500 IF E=0 THEN 260 510 FGPOINT X,Y,F : GOTO 260 520 ! ---------- pensel meny --------------- 530 FGCTL BLK+BLK+BLK+BLK : ; CHR$(12) : ; " " 540 ; TAB(20);"**********";RED;"Pensel meny";WHT;"**********" 550 ; TAB(20);"* *" 560 FOR Q=0 TO 3 570 IF F(Q)=128 THEN ; TAB(20);"* ";WHT NWBG BLK;Q;" F|r f{rg val";Q;" ";BLBG WHT;" *" : GOTO 590 580 ; TAB(20);"* ";CHR$(F(Q));Q;" F|r f{rg val";Q;WHT;" *" 590 NEXT Q 600 ; TAB(20);"* p f|r pensel p} *" 610 ; TAB(20);"* a f|r pensel av *" 620 ; TAB(20);"* *" 630 ; TAB(20);"*********************************" 640 ; " " : ; " " 650 ; TAB(17);"F{rg val {r";F, 660 IF E=0 THEN ; "Penseln {r av." 670 IF E=1 THEN ; "Penseln {r p}." 680 ; TAB(20);"Kommando:"; : GET A$ 690 IF A$="0" THEN F=0 700 IF A$="1" THEN F=1 710 IF A$="2" THEN F=2 720 IF A$="3" THEN F=3 730 IF A$="p" THEN E=1 740 IF A$="a" THEN E=0 750 FGCTL F$ : ; CHR$(12) 760 GOTO 260 770 ! ---------------- Cirklar ------------------ 780 FGCTL BLK+BLK+BLK+BLK 790 ; CHR$(12);RED "Cirkel" 800 INPUT "Radie,X%,Y%,F{rg";Ra,Xp,Yp,F 810 Fi=0 : FGCTL F$ : Xp=Xp/100 : Yp=Yp/100 820 E=(2*PI/36) : FGPOINT X+Xp*(2*Ra),Y,F 830 WHILE Fi<2*PI 840 Fi=Fi+E : FGLINE X+Xp*(2*(Ra*COS(Fi))),Y+Yp*(1.2*(Ra*SIN(Fi))) 850 WEND 860 GOTO 260 870 ! ------------------ load save meny -------------------- 880 FGCTL BLK+BLK+BLK+BLK 890 POKE 64256%,243%,213%,197%,245%,229%,123%,6%,192%,203%,255%,14%,52%,237%,121%,225%,241% 900 POKE 64272%,193%,209%,251%,201%,0%,0%,0%,0%,243%,213%,197%,245%,229%,123%,6%,192% 910 POKE 64288%,203%,191%,14%,52%,237%,121%,225%,241%,193%,209%,251%,201% 920 DIM Graf$=0% 930 POKE VAROOT(Graf$),4096%,SWAP%(4096%),49152%,SWAP%(49152%),4096%,SWAP%(4096%) 940 ; CHR$(12%);"******";RED;"Load/Save Meny";WHT;"******" 950 INPUT "Load/Save Program eller Exit L/S/E ";A$ 960 IF A$="e" THEN FGCTL F$ : ; CHR$(12%) : GOTO 260 970 IF A$="s" THEN FGCTL F$ : GOTO 1090 980 INPUT "Load. Enhet:namn > ";N$ 990 FGCTL F$ 1000 OPEN N$+".PIC" AS FILE 1% 1010 Start%=24% 1020 FOR X%=Start%+7% TO Start% STEP -1% 1030 Z%=CALL(64256%,X%) 1040 GET #1%,Graf$ COUNT 4096% 1050 Z%=CALL(64280%,X%) 1060 NEXT X% 1070 CLOSE 1% 1080 GOTO 260 1090 ! ------ Save ----------- 1100 INPUT "Save Enhet:namn > ";N$ 1110 PREPARE N$+".PIC" AS FILE 1% 1120 Start%=24% 1130 FOR X%=Start%+7% TO Start% STEP -1% 1140 Z%=CALL(64256%,X%) 1150 PUT #1,Graf$ 1160 Z%=CALL(64280%,X%) 1170 NEXT X% 1180 CLOSE 1% 1190 ; CHR$(12%); : GOTO 260 1200 ; CHR$(12) : FGCTL BLK+BLK+BLK+BLK 1210 INPUT "Vill du fylla med rutnet j/n ";A$ : IF A$="n" THEN 1270 1220 INPUT "Rutnet mellan vilka f{rger (f1 komma f2 f3 f4) :";F1,F2,F5,F4 1230 INPUT "Vilken f{rg {r kannten ";F3 1240 ; CHR$(12) : FGCTL F$ 1250 Z=FNPaint(X,Y,F1,F2,F5,F4,F3) 1260 ; CHR$(12) : FGCTL F$ : GOTO 260 1270 FGPAINT X,Y,F : ; CHR$(12) : FGCTL F$ : GOTO 260 1280 DEF FNPaint(X,Y,F{,F{1,F{2,F{3,Fk) LOCAL A,E,Nx,F 1290 GOSUB 1610 1300 GOSUB 1650 1310 A=Y/2 : E=INT(Y/2) : IF A=E THEN 1320 ELSE 1420 1320 ! y j{mn 1330 A=X/2 : E=INT(X/2) : IF A<>E THEN X=X+1 : GOTO 1330 1340 IF FGPOINT(X,Y)=Fk THEN 1690 1350 FGPOINT X,Y,F{ : IF FGPOINT(X,Y+1)<>Fk THEN Nx=X-1 : GOTO 1380 1360 X=X+1 : IF FGPOINT(X,Y)=Fk THEN 1690 1370 X=X+1 : IF FGPOINT(X,Y)=Fk THEN 1690 ELSE 1350 1380 X=X+1 : IF FGPOINT(X,Y)=Fk THEN 1520 1390 FGPOINT X,Y,F{1 1400 X=X+1 : IF FGPOINT(X,Y)=Fk THEN 1520 1410 FGPOINT X,Y,F{2 : GOTO 1380 1420 ! y oj{mn 1430 A=X/2 : E=INT(X/2) : IF A<>E THEN 1440 ELSE X=X+1 : GOTO 1430 1440 IF FGPOINT(X,Y)=Fk THEN 1690 1450 FGPOINT X,Y,F{ : IF FGPOINT(X,Y+1)<>Fk THEN Nx=X-1 : GOTO 1480 1460 X=X+1 : IF FGPOINT(X,Y)=Fk THEN 1690 1470 X=X+1 : IF FGPOINT(X,Y)=Fk THEN 1690 ELSE 1450 1480 X=X+1 : IF FGPOINT(X,Y)=Fk THEN 1520 1490 FGPOINT X,Y,F{3 1500 X=X+1 : IF FGPOINT(X,Y)=Fk THEN 1520 1510 FGPOINT X,Y,F{ : GOTO 1480 1520 Y=Y+1 : X=Nx 1530 IF Nx=0 THEN 1560 ELSE 1540 1540 IF FGPOINT(Nx+2,Y)=Fk THEN 1690 ELSE 1300 1550 IF FGPOINT(Nx,Y)=Then 1300 ELSE 1540 1560 WHILE F<>0 1570 X=X-1 1580 F=FGPOINT(X,Y) 1590 WEND 1600 X=X+1 : GOTO 1300 1610 IF FGPOINT(X,Y)=Fk THEN 1690 1620 Y=Y-1 1630 F=FGPOINT(X,Y) 1640 IF F=Fk THEN Y=Y+1 : RETURN ELSE 1620 1650 X=X+1 1660 X=X-1 1670 F=FGPOINT(X,Y) 1680 IF F=Fk THEN X=X+1 : RETURN ELSE 1660 1690 RETURN 0 1700 FNEND 1710 ! ----------- Zoom --------------- 1720 FGPICTURE 1,1,2 : FGPOINT 0,0,0 : FGFILL 511,239 : F{rg=F 1730 INPUT "Zoom Hur m}nga g}nger ";U 1740 Xvid=INT(511%/U)-1% : Yvid=INT(239%/U)-1% 1750 IF X+Xvid>511% THEN X=511%-Xvid 1760 IF Y+Yvid>239% THEN Y=239%-Yvid 1770 FOR Sx=0 TO Xvid 1780 FOR Sy=0 TO Yvid 1790 FGPICTURE 0,1,2 : F=FGPOINT(X+Sx,Y+Sy) 1800 FGPICTURE 1,1,2 : Nx=Sx*U : Ny=Sy*U : FGPOINT Nx,Ny,F : FGFILL Nx+U,Ny+U 1810 NEXT Sy : NEXT Sx 1820 Sx=INT(Xvid/2%) : Sy=INT(Yvid/2%) 1830 F=F{rg 1840 Nx=Sx*U : Ny=Sy*U 1850 IF SYS(5%)<>0% THEN 1890 1860 F{%=FGPOINT(Nx,Ny) : FOR Q%=0% TO 3% : FGPOINT Nx,Ny,Q% : FGFILL Nx+(U-1%),Ny+(U-1%) 1870 NEXT Q% : FGPOINT Nx,Ny,F{% : FGFILL Nx+(U-1%),Ny+(U-1%) 1880 GOTO 1840 1890 GET A$ 1900 IF A$="4" THEN Sx=Sx-1% : IF Sx<0% THEN Sx=0% 1910 IF A$="6" THEN Sx=Sx+1% : IF Sx>Xvid THEN Sx=Xvid 1920 IF A$="2" THEN Sy=Sy-1% : IF Sy<0% THEN Sy=0% 1930 IF A$="8" THEN Sy=Sy+1% : IF Sy>Yvid THEN Sy=Yvid 1940 IF A$=" " THEN FGPOINT Nx,Ny,F : FGFILL Nx+(U-1%),Ny+(U-1%) : FGPICTURE 0%,1%,2% : FGPOINT X+Sx,Y+Sy,F : FGPICTURE 1%,1%,2% 1950 IF A$="`" THEN FGPOINT Nx,Ny,0% : FGFILL Nx+(U-1%),Ny+(U-1%) : FGPICTURE 0%,1%,2% : FGPOINT X+Sx,Y+Sy,0% : FGPICTURE 1%,1%,2% 1960 IF A$="e" THEN FGPICTURE 0%,0%,2% : ; CHR$(12%); : GOTO 260 1970 GOTO 1840