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