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