10 REM 20 REM %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 30 REM % GRAFEDIT % 40 REM % % 50 REM % (c) Benny L|fgren % 60 REM % T{by 821125 % 70 REM % Ver 3.22 % 80 REM %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 90 REM ** Initiering ** 100 DIM P$(23%)=0%,P$=80%,A$=42% 110 DIM P1$(23%)=40%,Y%(2%),X%(2%) 120 Y%=35% : X%=40% : Y0%=Y% : X0%=X% 130 R1%=1% : R%=R1% : D%=2% : Z%=0% 140 REM ** L{gg vektorn P$() ** 150 REM ** i bildminnet. ** 160 REM ** P$(0)=rad 0 osv. ** 170 V0%=FNP2%(65065%)+4% 180 V0%=FNP2%(V0%) 190 FOR I%=0% TO 2%*23% STEP 2% 200 POKE V0%+I%*3%,40%,0%,PEEK(884%+I%),PEEK(885%+I%),40%,0% : NEXT I% 210 DEFFNP2%(I%)=PEEK(I%)+SWAP%(PEEK(I%+1%)) 220 REM ** Kolla om grafikbild ** 230 FOR I%=0% TO 23% : A%=ASC(P$(I%)) 240 IF A%>16% AND A%<24% GOTO 260 250 IF A%<145% OR A%>151% GOTO 280 260 NEXT I% : GOTO 380 : REM ** JA ** 270 REM ** Nej, rensa sk{rmen ** 280 FOR I%=0% TO 23% 290 P$(I%)=CHR$(20%)+SPACE$(39%) 300 NEXT I% 310 FOR I%=0% TO 23% : P1$(I%)=P$(I%) 320 NEXT I% : ; CHR$(12%)CUR(11%,0%); 330 ; "F|r hj{lp skriv '?'" 340 FOR I%=0% TO 10000% : NEXT I% 350 FOR I%=0% TO 23% : P$(I%)=P1$(I%) 360 NEXT I% 370 REM ** MAIN LOOP ** 380 A%=INP(56%)-128% 390 IF A%=63% GOSUB 2780 : GOTO 380 400 IF A%=33% GOSUB 3020 : GOTO 380 410 IF A%>95% AND A%<127% A%=A%-32% 420 A$='WASZ'+CHR$(23%,1%,19%,26%) 430 A$=A$+']\[-' 440 I%=INSTR(1%,A$,CHR$(A%)) 450 GOSUB 2300 : IF I%=0% GOTO 810 460 IF C% GOSUB 2300 470 IF D1%=0% GOTO 510 480 IF I%>4% I%=I%-4% 490 Y1%=Y% : X1%=X% : GOSUB 2710 500 R1%=1% : R%=R1% 510 ON I% GOTO 520,540,560,580,600,610,620,630,640,680,720,750 520 Y%=Y%-R% : IF Y%<0% Y%=71% 530 GOTO 790 540 X%=X%-R% : IF X%<2% X%=79% 550 GOTO 790 560 X%=X%+R% : IF X%>79% X%=2% 570 GOTO 790 580 Y%=Y%+R% : IF Y%>71% Y%=0% 590 GOTO 790 600 Y%=0% : GOTO 810 610 X%=2% : GOTO 810 620 X%=79% : GOTO 810 630 Y%=71% : GOTO 810 640 GOSUB 780 650 FOR I%=Y% TO 0% STEP -1% 660 IF DOT(I%,X%)=J% Y%=I% : GOTO 790 670 NEXT I% : Y%=0% : GOTO 790 680 GOSUB 780 690 FOR I%=X% TO 2% STEP -1% 700 IF DOT(Y%,I%)=J% X%=I% : GOTO 790 710 NEXT I% : X%=2% : GOTO 790 720 GOSUB 780 : FOR I%=X% TO 79% 730 IF DOT(Y%,I%)=J% X%=I% : GOTO 790 740 NEXT I% : X%=79% : GOTO 790 750 GOSUB 780 : FOR I%=Y% TO 71% 760 IF DOT(I%,X%)=J% Y%=I% : GOTO 790 770 NEXT I% : Y%=71% : GOTO 790 780 J%=-DOT(Y%,X%)-1% : RETURN 790 R1%=R1%+1% : R%=R1%/8%+1% 800 GOTO 380 810 R%=1% : R1%=R% 820 REM ** Kommandotabell ** 830 A$='BFLPHJMI '+CHR$(0%,13%,8%,9%) 840 A$=A$+CHR$(18%) 850 I%=INSTR(1%,A$,CHR$(A%)) 860 IF I%=0% GOTO 380 ELSE GOSUB 2640 870 ON I% GOSUB 950,1010,1100,1240,1520,1540,1560,2270,2150,1580,1980,2180,2230,2250,900 880 GOTO 380 890 REM ** Radera sk{rmen ** 900 FOR I%=0% TO 23% 910 P$(I%)=CHR$(20%)+SPACE$(39%) 920 NEXT I% : Y%=35% : X%=40% 925 D1%=0% : D%=2% 930 Y0%=Y% : X0%=X% : RETURN 940 REM ** Box ** 950 IF Y0%=Y% OR X0%=X% RETURN 960 FOR Y1%=Y% TO Y0% STEP SGN(Y0%-Y%) 970 FOR X1%=X% TO X0% STEP SGN(X0%-X%) 980 GOSUB 2710 : NEXT X1% : NEXT Y1% 990 GOTO 2690 1000 REM ** Frame (ram) ** 1010 IF Y0%=Y% OR X0%=X% RETURN 1020 FOR Y1%=Y% TO Y0% STEP SGN(Y0%-Y%) 1030 X1%=X% : GOSUB 2710 1040 X1%=X0% : GOSUB 2710 : NEXT Y1% 1050 FOR X1%=X%+SGN(X0%-X%) TO X0%-SGN(X0%-X%) STEP SGN(X0%-X%) 1060 Y1%=Y% : GOSUB 2710 1070 Y1%=Y0% : GOSUB 2710 : NEXT X1% 1080 GOTO 2690 1090 REM ** Line ** 1100 IF Y0%=Y% AND X0%=X% RETURN 1110 Y1=Y% : X1=X% : Y2=Y0% : X2=X0% 1120 D1=ABS(X1-X2) : D2=ABS(Y1-Y2) 1130 IF D1'N' GOTO 1600 ELSE B%=0% 1650 ; CUR(0%,1%)'Save: Filnamn '; 1660 INPUT F$ : IF F$='<' RETURN 1670 IF INSTR(1%,F$,'.')=0% AND LEN(F$)<>0% AND B%=0% F$=F$+'.PIC' 1680 IF INSTR(1%,F$,'.')=0% AND LEN(F$)<>0% AND B%=1% F$=F$+'.BAS' 1690 IF F$='' F$=F1$ ELSE F1$=F$ 1700 ; CUR(0%,16%)F$;TAB(39%); 1710 IF F1%=1% F1%=0% : GOTO 1790 1720 ONERRORGOTO 1760 : GOTO 1750 1730 ; CUR(0%,28%)'Filen finns!'CHR$(7%); 1740 F1%=1% : GOTO 1650 1750 OPEN F$ ASFILE 1% : GOTO 1730 1760 ONERRORGOTO 1770 : GOTO 1790 1770 ; CUR(0%,32%)'Err';ERRCODE'!';CHR$(7%); 1780 F1%=1% : GOTO 1650 1790 ONERRORGOTO 1770 1800 PREPARE F$ ASFILE 1% 1810 IF B%=0% GOTO 1940 1820 ; #1%,'10 ; CHR$(12%);' 1830 P$(0%)=P$ : FOR I%=0% TO 22% 1840 ; #1%,RIGHT$(NUM$((I%+2%)*10%),2%)' ; CUR('RIGHT$(NUM$(I%),2%)"%,0%)'"; 1850 IF INSTR(1%,P$(I%),"'")=0% P$=P$(I%) : GOTO 1880 1860 FOR J%=1% TO 40% : IF MID$(P$(I%),J%,1%)="'" P$=P$+"''" ELSE P$=P$+MID$(P$(I%),J%,1%) 1870 NEXT J% 1880 ; #1%,P$;"';" : P$='' : NEXT I% 1890 FOR J%=1% TO 39% : IF MID$(P$(23%),J%,1%)="'" P$=P$+"''" ELSE P$=P$+MID$(P$(23%),J%,1%) 1900 NEXT J% : ; #1%,"250 ; CUR(23%,0%)'"P$"';" 1910 IF RIGHT$(P$(23%),40%)<>' ' ; #1%,'260 POKE 32759%,';RIGHT$(NUM$(ASC(RIGHT$(P$(23%),40%))),2%)'%' 1920 ; #1%,'270 GOTO 270' : ; #1%,"280 ; CUR(0%,0%); : CHAIN 'grafedit'" 1930 CLOSE 1% : P$='' : RETURN 1940 P$(0%)=P$ : FOR I%=0% TO 23% 1950 ; #1%,P$(I%) : NEXT I% 1960 CLOSE 1% : P$='' : RETURN 1970 REM ** Load (Ctrl-@) ** 1980 P$=P$(0%) : P$(0%)=SPACE$(40%) 1990 POKE 65013%,0% 2000 ; CUR(0%,1%)'Load: Filnamn '; 2010 INPUT F$ : IF F$='<' RETURN 2020 IF INSTR(1%,F$,'.')=0% AND LEN(F$)<>0% F$=F$+'.PIC' 2030 IF F$='' F$=F1$ ELSE F1$=F$ 2040 ; CUR(0%,16%)F$;TAB(39%); 2050 ONERRORGOTO 2060 : GOTO 2080 2060 ; CUR(0%,32%)'Err';ERRCODE'!'; 2070 GOTO 2000 2080 OPEN F$ ASFILE 1% 2085 P$(0%)=P$ : P$='' 2090 FOR I%=0% TO 23% 2100 INPUTLINE #1%,A$ 2101 FOR J%=2% TO LEN(A$)-2% 2102 P$(I%)=LEFT$(P$(I%),J%-1%)+CHR$((ASC(MID$(P$(I%),J%,1%))) OR (ASC(MID$(A$,J%,1%))))+RIGHT$(P$(I%),J%+1%) 2120 NEXT J% : NEXT I% : CLOSE 1% 2130 P$='' : RETURN 2140 REM ** Draw ( ) ** 2150 IF D1%=0% AND C% GOSUB 2300 2160 D1%=1% : RETURN 2170 REM ** Move (CR) ** 2180 IF D1%=1% AND C% GOSUB 2300 2190 IF D1%=0% RETURN 2200 Y1%=Y% : X1%=X% : GOSUB 2710 2210 D1%=0% : RETURN 2220 REM ** Clear ( <- ) ** 2230 D%=1% : RETURN 2240 REM ** Set ( -> ) ** 2250 D%=2% : RETURN 2260 REM ** Inverse ** 2270 D%=3% : RETURN 2280 REM ** Draw cursor and ** 2290 REM ** top line ** 2300 IF C% C%=0% ELSE C%=1% 2310 IF Y%<4% OR Y0%<3% OR F% GOTO 2450 2320 IF LEN(P$)=0% P$=P$(Z%) 2330 P$(Z%)=' Y='+RIGHT$(NUM$(Y%),2%) 2340 P$(Z%)=P$(Z%)+' X='+RIGHT$(NUM$(X%),2%) 2350 P$(Z%)=P$(Z%)+" Y'="+RIGHT$(NUM$(Y0%),2%) 2360 P$(Z%)=P$(Z%)+" X'="+RIGHT$(NUM$(X0%),2%) 2370 ON D% GOTO 2380,2390,2400 2380 P$(Z%)=P$(Z%)+' Clear' : GOTO 2410 2390 P$(Z%)=P$(Z%)+' Set' : GOTO 2410 2400 P$(Z%)=P$(Z%)+' Inverse' 2410 P$(Z%)=P$(Z%)+CHR$(20%) 2420 P$(Z%)=P$(Z%)+RIGHT$(P$,LEN(P$(Z%))+1%) 2430 P$(Z%)=P$(Z%)+SPACE$(40%-LEN(P$(Z%))) 2440 GOTO 2470 2450 IF LEN(P$) P$(Z%)=P$ : P$='' 2460 FOR I1%=0% TO 50% : NEXT I1% 2470 IF D1%=0% GOTO 2510 2480 IF DOT(Y%,X%) CLRDOT Y%,X% ELSE SETDOT Y%,X% 2490 FOR I1%=0% TO 50% : NEXT I1% 2500 GOTO 2600 2510 FOR I1%=Y%-1% TO Y%+1% 2520 IF I1%<0% OR I1%>71% GOTO 2550 2530 IF I1%=Y% GOTO 2550 2540 IF DOT(I1%,X%) CLRDOT I1%,X% ELSE SETDOT I1%,X% 2550 NEXT I1% : FOR I1%=X%-1% TO X%+1% 2560 IF I1%<2% OR I1%>79% GOTO 2590 2570 IF I1%=X% GOTO 2590 2580 IF DOT(Y%,I1%) CLRDOT Y%,I1% ELSE SETDOT Y%,I1% 2590 NEXT I1% 2600 IF DOT(Y0%,X0%) CLRDOT Y0%,X0% ELSE SETDOT Y0%,X0% 2610 RETURN 2620 REM ** Clear cursor and ** 2630 REM ** top line ** 2640 F%=1% : GOSUB 2300 2650 IF C% GOSUB 2300 2660 F%=0% : RETURN 2670 REM ** Set Last point to ** 2680 REM ** Present point ** 2690 Y0%=Y% : X0%=X% : RETURN 2700 REM ** Set, Clear or Invert dot ** 2710 ON D% GOTO 2720,2730,2740 2720 CLRDOT Y1%,X1% : RETURN 2730 SETDOT Y1%,X1% : RETURN 2740 IF DOT(Y1%,X1%) CLRDOT Y1%,X1% ELSE SETDOT Y1%,X1% 2750 RETURN 2760 REM ****************************** 2770 REM ** K|rinstruktioner ** 2780 FOR I%=0% TO 23% 2790 P1$(I%)=P$(I%) : NEXT I% 2800 ; CHR$(12%)TAB(6%)'Instruktioner, GRAFEDIT' : ; TAB(5%)CHR$(20%)STRING$(23%,35%)CUR(1%,0%) 2810 ONERRORGOTO 2820 : GOTO 2850 2820 ; : ; : ; "Jag kan inte hitta 'GRAFEDIT.HLP'!" 2830 ; 'Unders|k!!!' : GOTO 2990 2840 GOTO 2900 2850 OPEN 'grafedit.hlp' ASFILE 1% 2860 ONERRORGOTO 2900 2870 FOR I%=2% TO 22% 2880 INPUTLINE #1%,A$ : ; CUR(I%,0%)A$; 2890 NEXT I% : GOSUB 2930 : GOTO 2870 2900 IF ERRCODE=34% GOTO 2920 2910 ; 'Err'ERRCODE'!'CHR$(7%); 2920 CLOSE 1% : GOTO 2990 2930 ; CUR(23%,0%)'Tryck p} RETURN !'; 2940 ; CHR$(8%); : GET A$ 2950 IF A$<>CHR$(13%) GOTO 2930 2960 FOR I%=2% TO 23% 2970 P$(I%)=SPACE$(40%) : NEXT I% 2980 ; CUR(2%,0%); : RETURN 2990 GOSUB 2930 3000 FOR I%=0% TO 23% : P$(I%)=P1$(I%) 3010 NEXT I% : RETURN 3020 FOR I%=0% TO 23% : P1$(I%)=P$(I%) 3030 NEXT I% : ; CHR$(12%); 3040 ; ' Snabbinstruktioner, GRAFEDIT' 3050 ; 3060 ; 'Kommandon: L=Line' 3070 ; ' F=Frame (Ramritning)' 3080 ; ' B=Box (Fylld rektangel)' 3090 ; ' P=Paint (Fyll yta)' 3100 ; ' H=Home' 3110 ; ' J=Jump (Till f|rra punkten)'; 3120 ; ' M=Mark (Flytta f|rra pkt.)' 3130 ; ' Ctrl-R=Radera sk{rmen' 3140 ; ' Ctrl-<>=Save' 3150 ; ' Ctrl-@=Load' 3160 ; 3170 ; 'Cursor: W=Cursor upp' 3180 ; ' A & S=Cursor v{ & h|' 3190 ; ' Z=Cursor ner' 3200 ; ' =Ritmod' 3210 ; ' =Flyttmod' 3220 ; ' I=Inverse' 3230 ; ' ->=Set' 3240 ; ' <-=Clear' 3250 ; ' ?=Instruktioner' 3260 GOTO 2990