10 DIM P%(15),P$(15) 20 DIM B(7000):HM=8:VM=8 30 FULLW 2 40 CLEARW 2 50 PRINT" **** PLEASE WAIT ***** 60 GOSUB 490 70 CLEARW 2 80 HP=1:Z=1:Q=1 90 VP=1:SW=1:CN=0:XP=0 100 HS=2:CUR=1 110 VS=2:HT=1:VT=1 120 C0=0:C1=1:C2=2:C3=3:C4=4 130 GOSUB 820 140 GOSUB 560 150 HG=HS*HP 160 VG=VS*VP 170 HE=HG+(HS-1) 180 COLOR 1,6,CL,0,0 190 GOSUB 640 200 REM **** LOOP ********** 210 GOSUB 2710 220 REM XY 0,0 230 REM T HP;VP;STATE 240 IF STATE=3 THEN SUBS=1 250 IF SUBS=1 THEN GOSUB 2950 260 IF STATE=2 THEN CV=CV+1 270 IF CV=5 THEN CV=0 280 IF STATE=2 THEN GOSUB 3290 290 IF STATE=1 THEN GOSUB 3030 300 GOTO 200 310 REM *** REDRAW SCREEN *** 320 CLEARW 2 330 GOSUB 820 340 HP=0:VP=1:C=1 350 MC=B(C) 360 C=C+1:HP=HP+1 370 IF HP=HM+1 THEN HP=1:VP=VP+1 380 IF VP=VM+1 THEN HP=1:VP=1:CUR=1:RETURN 390 IF MC=0 THEN 350 400 HG=HP*HS:VG=VP*VS 410 HE=HG+(HS-1) 420 IF MC=1 THEN MC=C1:GOTO 460 430 IF MC=2 THEN MC=C2:GOTO 460 440 IF MC=3 THEN MC=C3:GOTO 460 450 IF MC=4 THEN MC=C4:GOTO 460 460 COLOR 1,6,MC,0,0 470 GOSUB 640 480 GOTO 350 490 REM *** CLEAR SCREEN *** 500 A=0 510 REM Y=HM*VM 520 FOR X=1 TO 6400 530 B(X)=A 540 NEXT X 550 RETURN 560 REM *** SET WIDTH *** 570 POKE CONTRL,16 580 POKE CONTRL+2,1 590 POKE CONTRL+6,0 600 POKE PTSIN,2 610 POKE PTSIN+2,0 620 VDISYS(0) 630 RETURN 640 REM *** DRAW LINES *** 650 POKE CONTRL,6 660 POKE CONTRL+2,2 670 POKE CONTRL+6,0 680 POKE PTSIN,HG 690 POKE PTSIN+2,VG+24 700 POKE PTSIN+4,HE 710 POKE PTSIN+6,VG+24 720 VDISYS(0) 730 POKE CONTRL,6 740 POKE CONTRL+2,2 750 POKE CONTRL+6,0 760 POKE PTSIN,HG 770 POKE PTSIN+2,VG+25 780 POKE PTSIN+4,HE 790 POKE PTSIN+6,VG+25 800 VDISYS(0) 810 RETURN 820 REM *** DRAW BACKGROUND *** 830 COLOR 1,C0,C0,1,1 840 LINEF 0,0,300,0 850 LINEF 0,0,0,160 860 LINEF 300,0,300,160 870 LINEF 0,160,300,160 880 FILL 150,80 890 RETURN 900 REM *** LOAD FILE *** 910 GOTOXY 0,16 920 INPUT"FILENAME";F$ 930 GOTOXY 0,16 940 S$="LOADING FILE "+F$ 950 PRINT S$ 960 OPEN "I",#1,F$+".DEF" 970 INPUT#1,HM 980 INPUT#1,VM 990 N=HM*VM 1000 FOR X=1 TO N 1010 INPUT#1,C 1020 B(X)=C 1030 NEXT 1040 CLOSE #1 1050 GOSUB 310 1060 RETURN 1070 REM *** SAVE FILE *** 1080 GOTOXY 0,16 1090 INPUT"FILENAME";F$ 1100 GOTOXY 0,16 1110 S$="SAVING FILE "+F$ 1120 PRINT S$ 1130 OPEN "O",#1,F$+".DEF" 1140 PRINT#1,HM 1150 PRINT#1,VM 1160 N=HM*VM 1170 FOR X=1 TO N 1180 C=B(X) 1190 PRINT#1,C 1200 NEXT 1210 CLOSE #1 1220 RETURN 1230 REM *** ACTUAL SCREEN *** 1240 CLEARW 2 1250 GOSUB 820 1260 HP=0:VP=1:C=1 1270 MC=B(C) 1280 C=C+1:HP=HP+1 1290 IF HP=HM+1 THEN HP=1:VP=VP+1 1300 IF VP=VM+1 THEN 1410 1310 IF MC=0 THEN 1270 1320 HG=HP:VG=VP 1330 HE=HG 1340 IF MC=1 THEN MC=C1:GOTO 1380 1350 IF MC=2 THEN MC=C2:GOTO 1380 1360 IF MC=3 THEN MC=C3:GOTO 1380 1370 IF MC=4 THEN MC=C4:GOTO 1380 1380 COLOR 1,6,MC,0,0 1390 GOSUB 1450 1400 GOTO 1270 1410 REM *** WAIT FOR CR SUB *** 1420 Z=INP(2) 1430 IF Z <> 13 THEN GOTO 1420 1440 GOSUB 310:RETURN 1450 REM *** DRAW LINE *** 1460 POKE CONTRL,6 1470 POKE CONTRL+2,2 1480 POKE CONTRL+6,0 1490 POKE PTSIN,HG 1500 POKE PTSIN+2,VG+24 1510 POKE PTSIN+4,HE 1520 POKE PTSIN+6,VG+24 1530 VDISYS(0) 1540 RETURN 1550 REM *** CONVERT TO 7800 *** 1560 PIXPNT=128:PALPNT=4:A=0 1570 D=0:D2=0:BS=HM/4:C=1:S=HM*VM:X$="":L=1 1580 FOR F=1 TO VM 1590 FOR G=1 TO BS 1600 FOR H=1 TO 4 1610 E=B(C) 1620 IF E=0 THEN D=0 ELSE D=PIXPNT:IF D2 <> E THEN D2=E-1 1630 IF PIXPNT=32 THEN PALPNT=1 1640 IF PIXPNT=64 OR PIXPNT=16 THEN D=D+(D2*PALPNT) 1650 PIXPNT=PIXPNT/2 1660 A=A+D 1670 C=C+1 1680 NEXT H 1690 D=0:D2=0:PIXPNT=128:PALPNT=4 1700 REM *** SETUP HEX *** 1710 J=INT(A/16):H$="" 1720 S=A-(J*16) 1730 H=J 1740 GOSUB 1870 1750 T$=H$ 1760 H=S 1770 GOSUB 1870 1780 H$=T$+H$ 1790 X$=X$+H$:A=0 1800 NEXT G 1810 PRINT X$ 1820 IF L=16 THEN PRINT:L=0 1830 L=L+1 1840 X$="" 1850 NEXT F 1860 RETURN 1870 REM *** HEX CONVERSION *** 1880 IF H<10 THEN H$=STR$(H):H$=MID$(H$,2,1) 1890 IF H=10 THEN H$="A" 1900 IF H=11 THEN H$="B" 1910 IF H=12 THEN H$="C" 1920 IF H=13 THEN H$="D" 1930 IF H=14 THEN H$="E" 1940 IF H=15 THEN H$="F" 1950 RETURN 1960 REM *** DISPLAY PRVIOUS *** 1970 AT=(((VT-1)*HM)+HT) 1980 T=B(AT) 1990 IF T=0 THEN T=C0:GOTO 2040 2000 IF T=1 THEN T=C1:GOTO 2040 2010 IF T=2 THEN T=C2:GOTO 2040 2020 IF T=3 THEN T=C3:GOTO 2040 2030 IF T=4 THEN T=C4:GOTO 2040 2040 HG=HS*HT:HE=HG+(HS-1) 2050 VG=VS*VT 2060 COLOR 1,6,T,0,0 2070 GOSUB 640 2080 RETURN 2090 REM *** COLOR CHANGE *** 2100 PRINT"GRAY/BLUE=Y - GREEN/BROWN=N" 2110 INPUT T$ 2120 IF T$<>"Y" THEN 2200 2130 RESTORE 2140 2140 DATA 320,000,764,222,007,000,004,000 2150 DATA 000,000,000,000,000,000,000,000 2160 FOR A=0 TO 15 2170 READ P$(A) 2180 NEXT A 2190 GOTO 2280 2200 REM ********************* 2210 RESTORE 2220 2220 DATA 320,000,764,200,070,000,777,000 2230 DATA 000,000,000,000,000,000,000,000 2240 FOR V=0 TO 15 2250 READ P$(V) 2260 NEXT V 2270 REM ****************** 2280 RESTORE 2290 2290 DATA 0,15,1,2,4,6,3,5,7,8,9,10,12,14,11,13 2300 FOR Z=0 TO 15 STEP 1 2310 READ B 2320 GOSUB 2380 2330 NEXT Z 2340 DEFDBL X:X=1114 2350 POKE X,VARPTR(P%(0)) 2360 RETURN 2370 REM *** CONVERT SUB *** 2380 P1%=VAL(LEFT$(P$(Z),1))*256 2390 P2%=VAL(MID$(P$(Z),2,1))*16 2400 P3%=VAL(RIGHT$(P$(Z),1)) 2410 P%(B)=P1%+P2%+P3% 2420 RETURN 2430 REM *** IINS/DEL HOR *** 2440 FOR L=E TO S STEP C 2450 FOR P=1 TO HM 2460 Y=(L*HM)+P:Z=Y+OFF 2470 A=B(Y):B(Z)=A 2480 NEXT P 2490 NEXT L 2500 FOR O= 1 TO HM 2510 X=((L+N)*HM)+O 2520 B(X)=0 2530 NEXT O:GOSUB 320:RETURN 2540 REM *** INSERT *** 2550 E=VP:S=VM-1:OFF=-HM:C=1:N=-1 2560 GOSUB 2430 2570 RETURN 2580 REM *** DELETE *** 2590 E=VM-1:S=VP-1:OFF=HM:C=-1:N=1 2600 GOSUB 2430 2610 RETURN 2620 REM *** XCHANGE *** 2630 GOTOXY 0,16 2640 INPUT"CHANGE VALUE ";R 2650 GOTOXY 0,16 2660 INPUT"TO VALUE";W 2670 N=HM*VM 2680 FOR U=1 TO N 2690 IF B(U)=R THEN B(U)=W 2700 NEXT U:GOSUB 310:RETURN 2710 REM *** READ MOUSE *** 2720 HT=HP:VT=HP 2730 POKE CONTRL,124 2740 POKE CONTRL+2,0 2750 POKE CONTRL+6,0 2760 VDISYS(0) 2770 STATE=PEEK(INTOUT) 2780 HP=PEEK(PTSOUT) 2790 VP=PEEK(PTSOUT+2) 2800 IF VP < 28 THEN VP=28 2810 IF VP > 160 THEN VP=160 2820 VP=VP-27 2830 IF HP>300 THEN HP=300 2840 IF HP<2 THEN HP=2 2850 HP=HP-1 2860 VP=VP/2 2870 T=VP-INT(VP) 2880 IF T>0 THEN VP=INT(VP)+1 2890 HP=HP/2:T=HP-INT(HP) 2900 IF T>0 THEN HP=INT(HP)+1 2910 REM P+1:VP=VP+1 2920 IF HP>HM THEN HP=HM 2930 IF VP>VM THEN VP=VM 2940 RETURN 2950 REM *** SUBS **** 2960 IF D=10 THEN D=1 2970 IF STATE=1 THEN GOTOXY 0,16:D=D+1:PRINT" " 2980 GOTOXY 0,16 2990 ON D GOSUB 3140,3150,3160,3170,3180,3190,3200,3210,3220 3000 IF STATE=2 THEN ON D GOSUB 1070,900,1230,1550,2090,2580,2540,2620,3230 3010 IF STATE=2 THEN D=0:SUBS=0 3020 RETURN 3030 REM *** PLOT *** 3040 HG=HS*HP:VG=VS*VP 3050 HE=HG+(HS-1) 3060 A=(((VP-1)*HM)+HP) 3070 K=A/2 3080 K=K-INT(K) 3090 BIT=0 3100 IF K>0 THEN IF B(A+1)=0 OR B(A+1)=CV THEN BIT=1 3110 IF K=0 THEN IF B(A-1)=0 OR B(A-1)=CV THEN BIT=1 3120 IF BIT=1 OR CV=0 THEN B(A)=CV:COLOR 1,6,CV,0,0:GOSUB 640 3130 RETURN 3140 PRINT"SAVE FILE":RETURN 3150 PRINT"LOAD FILE":RETURN 3160 PRINT"ACTUAL SIZE":RETURN 3170 PRINT"7800 CONVERT":RETURN 3180 PRINT"COLOR CHANGE":RETURN 3190 PRINT"INSERT":RETURN 3200 PRINT"DELETE":RETURN 3210 PRINT"EXCHANGE VALUES":RETURN 3220 PRINT"DIMENSIONS":RETURN 3230 REM *** DIMENSIONS *** 3240 GOTOXY 0,16 3250 INPUT"HORIZONTAL SIZE";HM 3260 GOTOXY 0,16 3270 INPUT"VERTICAL SIZE";VM 3280 RETURN 3290 REM *** COLOR BAR *** 3300 COLOR 1,6,CV,0,0 3310 LINEF 0,160,300,160 3320 LINEF 0,161,300,161 3330 RETURN