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 2810 220 REM XY 0,0 230 REM T HP;VP;STATE 240 IF STATE=1 AND CV=4 THEN SUBS=1 250 IF CV=4 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 3050 280 IF STATE=2 THEN CV=CV+1 290 IF CV=5 THEN CV=0 300 IF STATE=2 AND CV<>4 THEN GOSUB 3390 310 IF STATE=1 AND CV<>4 THEN GOSUB 3130 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 B0PNT=8:B1PNT=128:A=0 1610 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=3 THEN B0=1:B1=1 1680 IF E=2 THEN B0=0:B1=1 1690 IF E=1 THEN B0=1:B1=0 1700 IF E=0 THEN B0=0:B1=0 1710 D=(B0*B0PNT)+(B1*B1PNT) 1720 B0PNT=B0PNT/2:B1PNT=B1PNT/2 1730 A=A+D 1740 C=C+1 1750 NEXT H 1760 B0PNT=8:B1PNT=128 1770 REM *** SETUP HEX *** 1780 J=INT(A/16):H$="" 1790 S=A-(J*16) 1800 H=J 1810 GOSUB 1940 1820 T$=H$ 1830 H=S 1840 GOSUB 1940 1850 H$="$"+T$+H$+"," 1860 X$=X$+H$:A=0 1870 IF L=8 THEN GOSUB 3550:L=0 1880 L=L+1 1890 NEXT G 1900 GOSUB 3450:L=1 1910 NEXT F 1920 CLOSE #1 1930 RETURN 1940 REM *** HEX CONVERSION *** 1950 IF H<10 THEN H$=STR$(H):H$=MID$(H$,2,1) 1960 IF H=10 THEN H$="A" 1970 IF H=11 THEN H$="B" 1980 IF H=12 THEN H$="C" 1990 IF H=13 THEN H$="D" 2000 IF H=14 THEN H$="E" 2010 IF H=15 THEN H$="F" 2020 RETURN 2030 REM *** DISPLAY PRVIOUS *** 2040 AT=(((VT-1)*HM)+HT) 2050 T=B(AT) 2060 IF T=0 THEN T=C0:GOTO 2110 2070 IF T=1 THEN T=C1:GOTO 2110 2080 IF T=2 THEN T=C2:GOTO 2110 2090 IF T=3 THEN T=C3:GOTO 2110 2100 IF T=4 THEN T=C4:GOTO 2110 2110 HG=HS*HT:HE=HG+(HS-1) 2120 VG=VS*VT 2130 COLOR 1,6,T,0,0 2140 GOSUB 680 2150 RETURN 2160 REM *** COLOR CHANGE *** 2170 GOTOXY 0,16 2180 INPUT"GRAY/BLUE=Y - GREEN/BROWN=N";T$ 2190 GOTOXY 0,16:PRINT" " 2200 IF T$<>"Y" THEN 2280 2210 RESTORE 2220 2220 DATA 642,555,000,006,005,000,004,000 2230 DATA 000,000,000,000,000,000,000,000 2240 FOR A=0 TO 15 2250 READ P$(A) 2260 NEXT A 2270 GOTO 2360 2280 REM ********************* 2290 RESTORE 2300 2300 DATA 642,555,420,060,050,000,777,000 2310 DATA 000,000,000,000,000,000,000,000 2320 FOR V=0 TO 15 2330 READ P$(V) 2340 NEXT V 2350 REM ****************** 2360 RESTORE 2370 2370 DATA 0,15,1,2,4,6,3,5,7,8,9,10,12,14,11,13 2380 FOR Z=0 TO 15 STEP 1 2390 READ B 2400 GOSUB 2460 2410 NEXT Z 2420 DEFDBL X:X=1114 2430 POKE X,VARPTR(P%(0)) 2440 RETURN 2450 REM *** CONVERT SUB *** 2460 P1%=VAL(LEFT$(P$(Z),1))*256 2470 P2%=VAL(MID$(P$(Z),2,1))*16 2480 P3%=VAL(RIGHT$(P$(Z),1)) 2490 P%(B)=P1%+P2%+P3% 2500 RETURN 2510 REM *** IINS/DEL HOR *** 2520 FOR L=E TO S STEP C 2530 FOR P=1 TO HM 2540 Y=(L*HM)+P:Z=Y+OFF 2550 A=B(Y):B(Z)=A 2560 NEXT P 2570 NEXT L 2580 FOR O= 1 TO HM 2590 X=((L+N)*HM)+O 2600 B(X)=0 2610 NEXT O:GOSUB 340:RETURN 2620 REM *** INSERT *** 2630 E=VP:S=VM-1:OFF=-HM:C=1:N=-1 2640 GOSUB 2510 2650 RETURN 2660 REM *** DELETE *** 2670 E=VM-1:S=VP-1:OFF=HM:C=-1:N=1 2680 GOSUB 2510 2690 RETURN 2700 REM *** XCHANGE *** 2710 GOTOXY 0,16 2720 INPUT"CHANGE VALUE ";R 2730 GOTOXY 0,16:PRINT" " 2740 GOTOXY 0,16 2750 INPUT"TO VALUE";W 2760 GOTOXY 0, 16:PRINT" " 2770 N=HM*VM 2780 FOR U=1 TO N 2790 IF B(U)=R THEN B(U)=W 2800 NEXT U:GOSUB 330:RETURN 2810 REM *** READ MOUSE *** 2820 HT=HP:VT=HP 2830 POKE CONTRL,124 2840 POKE CONTRL+2,0 2850 POKE CONTRL+6,0 2860 VDISYS(0) 2870 STATE=PEEK(INTOUT) 2880 HP=PEEK(PTSOUT) 2890 VP=PEEK(PTSOUT+2) 2900 IF VP < 28 THEN VP=28 2910 IF VP > 160 THEN VP=160 2920 VP=VP-27 2930 IF HP>300 THEN HP=300 2940 IF HP<2 THEN HP=2 2950 HP=HP-1 2960 VP=VP/2 2970 T=VP-INT(VP) 2980 IF T>0 THEN VP=INT(VP)+1 2990 HP=HP/2:T=HP-INT(HP) 3000 IF T>0 THEN HP=INT(HP)+1 3010 REM P+1:VP=VP+1 3020 IF HP>HM THEN HP=HM 3030 IF VP>VM THEN VP=VM 3040 RETURN 3050 REM *** SUBS **** 3060 IF D=11 THEN D=1 3070 IF STATE=1 THEN GOTOXY 0,16:D=D+1:PRINT" " 3080 GOTOXY 0,16 3090 ON D GOSUB 3190,3200,3210,3220,3230,3240,3250,3260,3270,3280 3100 IF STATE=2 THEN ON D GOSUB 1110,940,1270,1590,2160,2660,2620,2700,3290,580 3110 IF STATE=2 THEN D=0:SUBS=0 3120 RETURN 3130 REM *** PLOT *** 3140 HG=HS*HP:VG=VS*VP 3150 HE=HG+(HS-1) 3160 A=(((VP-1)*HM)+HP) 3170 B(A)=CV:COLOR 1,6,CV,0,0:GOSUB 680 3180 RETURN 3190 PRINT"SAVE FILE":RETURN 3200 PRINT"LOAD FILE":RETURN 3210 PRINT"ACTUAL SIZE":RETURN 3220 PRINT"7800 CONVERT":RETURN 3230 PRINT"COLOR CHANGE":RETURN 3240 PRINT"INSERT":RETURN 3250 PRINT"DELETE":RETURN 3260 PRINT"EXCHANGE VALUES":RETURN 3270 PRINT"DIMENSIONS":RETURN 3280 PRINT"EXIT":RETURN 3290 REM *** DIMENSIONS *** 3300 GOTOXY 0,16 3310 PRINT"HSIZE,VSIZE";HM;VM 3320 X=INP(2):GOTOXY 0,16 3330 INPUT"HORIZONTAL SIZE ";HM 3340 GOTOXY 0,16:PRINT" " 3350 GOTOXY 0,16 3360 INPUT"VERTICAL SIZE";VM 3370 GOTOXY 0,16:PRINT" " 3380 RETURN 3390 REM *** COLOR BAR *** 3400 COLOR 1,6,CV,0,0 3410 LINEF 0,160,300,160 3420 LINEF 0,161,300,161 3430 RETURN 3440 REM *** WRITE FILE *** 3450 IF (F+1)>9 THEN GOSUB 3590:GOTO 3470 3460 Z$=STR$(F+1):Z$=MID$(Z$,2,1) 3470 Z$=F$+Z$ 3480 IF G=9 OR G=17 OR G=25 THEN GOTO 3500 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