10 CLS:PRINT@66,"KEYPAINT V1.0" 20 PRINT@258,"INITALIZING..." 30 PRINT@98,"(C)COPYRIGHT 1984-10 M LOWE" 40 PRINT@130,"ALL RIGHTS RESERVED" 50 PRINT@322,"PRESS -H- FOR HELP" 60 PRINT@162,"MARK@ZEROGGAMES.COM" 70 REM 80 REM ----- INIT SEQUENCE 90 REM 100 DIM A(16),B(24),C(20),D(16),E(16),F(12),G(24),H(12),I(12) 110 DIM J(16),K(12),L(8),M(16),N(20),O(16),P(16),Q(20),R(24) 120 DIM S(24),T(8),U(12),V(20),W(28),X(28),Y(20),Z(12),LL(26) 130 REM 140 PRINT@275,"FONT SETUP":GOSUB 2520 150 P$="ON" 160 CLS:PMODE 4,1:SCREEN 1,1:PCLS 170 X=10:Y=13:TAG$="KEYPAINT H FOR HELP" 180 FOR Q=1 TO LEN(TAG$):L = ASC(MID$(TAG$,Q,1))-64:G=L 190 IF L < 1 THEN GOTO 210 200 ON L GOSUB 3390,3410,3430,3450,3470,3490,3510,3530,3550,3570,3590,3610,3630,3650,3670,3690,3710,3730,3750,3770,3790,3810,3830,3850,3870,3890 210 X=X+8:NEXT Q 215 X=INT(256/2):Y=INT(191/2):NX=X:NY=Y:MX=X:MY=Y 220 REM 230 REM ----- CLEAR/PREP SCREEN 240 REM 250 COLOR 1,0:LINE(10,15)-(246,181),PSET,B 290 REM 295 REM 300 SCREEN 1,1 310 PSET(X,Y) 320 REM 330 REM ----- KEYBOARD LOOP 340 REM 350 A$=INKEY$ 360 IF A$="" THEN 350 370 REM ----- START FONT 380 IF A$="W" THEN 2380 390 IF A$="H" THEN GOSUB 1750:GOTO 350 400 IF A$="I" THEN Y=Y-1:D$=A$:GOTO 620 410 IF A$="K" THEN Y=Y+1:D$=A$:GOTO 620 420 IF A$="J" THEN X=X-1:D$=A$:GOTO 620 430 IF A$="L" THEN X=X+1:D$=A$:GOTO 620 440 REM ----- STATUS UPDATE 450 IF A$="S" THEN 1010 460 REM ----- PIXEL ON / OFF 470 IF A$="P" AND P$="OFF" THEN P$="ON":GOTO 620 480 IF A$="P" AND P$="ON" THEN P$="OFF":GOTO 620 490 REM ----- CLEAR SCREEN 500 IF A$="Z" AND D$="Z" THEN PCLS:D$=A$:GOTO 250 510 IF A$="1" THEN X=X-1:Y=Y-1:D$=A$:GOTO 620 520 IF A$="2" THEN X=X+1:Y=Y-1:D$=A$:GOTO 620 530 IF A$="3" THEN X=X-1:Y=Y+1:D$=A$:GOTO 620 540 IF A$="4" THEN X=X+1:Y=Y+1:D$=A$:GOTO 620 550 IF A$="Q" THEN CLS:PCLS:GOTO 5000 560 REM ----- SAVE DRAWING 570 IF A$="*" THEN 1130 580 REM ----- LOAD DRAWING 590 IF A$="-" THEN 1940 600 REM ----- REPEAT 610 IF A$="8" THEN 700 620 REM ----- CHECK REPEAT 630 IF P$="OFF" THEN COLOR 0,0:PSET(X1,Y1):COLOR 1,1 640 IF P$="ON" THEN ND=ND+1 650 PSET(X,Y):GOSUB 4030 660 X1=X:Y1=Y:GOTO 350 670 REM 680 REM ----- REPEAT CODE 690 REM 700 IF D$="I" THEN 710 ELSE 730 710 Y=Y-1:IF Y<15 THEN Y=181 720 PSET(X,Y):GOSUB 4030:X1=X:Y1=Y:A$=INKEY$:ΩIF A$="0" THEN 350 ELSE 710 730 IF D$="K" THEN 740 ELSE 760 740 Y=Y+1:IF Y>180 THEN Y=11 750 PSET(X,Y):GOSUB 4030:X1=X:Y1=Y:A$=INKEY$:IF A$="0" THEN 350 ELSE 740 760 IF D$="J" THEN 770 ELSE 790 770 X=X-1:IF X<11 THEN X=244 780 PSET(X,Y):GOSUB 4030:X1=X:Y1=Y:A$=INKEY$:IF A$="0" THEN 350 ELSE 770 790 IF D$="L" THEN 800 ELSE 820 800 X=X+1:IF X>244 THEN X=11 810 PSET(X,Y):GOSUB 4030:X1=X:Y1=Y:A$=INKEY$:IF A$="0" THEN 350 ELSE 800 820 IF D$="1" THEN 830 ELSE 860 830 X=X-1:Y=Y-1:IF X<11 THEN X=244 840 IF Y<11 THEN Y=180 850 PSET(X,Y):GOSUB 4030:X1=X:Y1=Y:A$=INKEY$:IF A$="0" THEN 350 ELSE 830 860 IF D$="2" THEN 870 ELSE 900 870 X=X+1:Y=Y-1:IF X>244 THEN X=11 880 IF Y<11 THEN Y=180 890 PSET(X,Y):GOSUB 4030:X1=X:Y1=Y:A$=INKEY$:IF A$="0" THEN 350 ELSE 870 900 IF D$="3" THEN 910 ELSE 940 910 X=X-1:Y=Y+1:IF X<11 THEN X=244 920 IF Y>180 THEN Y=16 930 PSET(X,Y):GOSUB 4030:X1=X:Y1=Y:A$=INKEY$:IF A$="0" THEN 350 ELSE 910 940 IF D$="4" THEN 950 ELSE 300 950 X=X+1:Y=Y+1:IF X>244 THEN X=11 960 IF Y>180 THEN Y=16 970 PSET(X,Y):GOSUB 4030:X1=X:Y1=Y:A$=INKEY$:IF A$="0" THEN 350 ELSE 950 980 REM 990 REM ----- STATUS SCREEN 1000 REM 1010 CLS:PRINT "-------- STATUS ---------------" 1020 PRINT " LAST COMMAND -";D$;"-" 1030 PRINT:PRINT " X-AXIS = ";X-10 1040 PRINT:PRINT " Y-AXIS = ";Y-15 1050 PRINT:PRINT " NUMBER OF DOTS:";ND 1055 PRINT:PRINT " X MIN/MAX:";NX-10;"/";MX-10 1058 PRINT:PRINT " Y MIN/MAX:";NY-15;"/";MY-15 1060 PRINT 1070 PRINT " <>" 1080 IF INKEY$=" " THEN 1090 ELSE 1080 1090 SCREEN 1,1:GOTO 350 1100 REM 1110 REM ----- SAVE SCREEN 1120 REM 1130 CLS:PRINT "-------- SAVING ---------------" 1140 LINE INPUT " NAME OF PIC:";N$ 1150 PRINT " SAVE TYPE: 1160 LINE INPUT " (H)ORIZONTAL OR (V)ERTICAL:";K$ 1170 PRINT " <>" 1180 IF INKEY$="" THEN 1180 1190 PRINT:PRINT "SAVING..." 1200 IF K$="H" OR K$="" THEN 1240 ELSE 1530 1210 REM 1220 REM ----- HORIZONTAL SAVE SEQUENCE 1230 REM 1240 OPEN "O",#1,N$ 1250 SCREEN 1,1:COLOR 1,0 1260 PRINT #1,"H" 1270 LINE(200,5)-(245,8),PSET,BF:CN=0 1280 TT = (MX-NX)*(MY-NY) 1290 FOR Y=NY TO MY 1300 FOR X=NX TO MX 1310 IF INKEY$="Q" THEN 1470 1320 GOSUB 4240 1330 IF PPOINT(X,Y) THEN X1=X+1 ELSE 1390 1340 IF PPOINT(X1,Y)=0 THEN 1370 1350 X1=X1+1:GOTO 1340 1370 X1=X1-1:PRINT #1,X,X1,Y:X=X1 1390 GOSUB 4130 1450 NEXT X 1460 NEXT Y 1470 CLOSE #1 1480 PRINT:PRINT "SAVED!" 1490 INPUT "WOULD YOU LIKE TO CONTINUE";Y$: 1495 IF LEFT$(Y$,1)="Y" THEN 300 ELSE 5000 1500 REM 1510 REM ----- VERTICAL SAVE SEQUENCE 1520 REM 1530 SCREEN 1,1:COLOR 1,0 1540 OPEN "O",#1,N$ 1550 LINE(200,5)-(245,8),PSET,BF:CN=0 1560 TT = (MX-NX)*(MY-NY) 1570 PRINT #1,"V" 1580 FOR X=NX TO MX STEP 1 1590 FOR Y=NY TO MY STEP 1 1600 IF INKEY$="Q" THEN 1470 1610 GOSUB 4240 1620 IF PPOINT(X,Y) THEN Y1=Y+1 ELSE 1660 1630 IF PPOINT(X,Y1)=0 THEN 1640 1635 Y1=Y1+1:GOTO 1630 1640 Y1=Y1-1:PRINT #1,Y,Y1,X:Y=Y1 1660 GOSUB 4130 1720 NEXT Y 1730 NEXT X 1740 CLOSE #1:GOTO 1480 1750 CLS 1760 PRINT "------------ HELP -----------" 1770 PRINT " I UP" 1780 PRINT " J L LEFT RIGHT" 1790 PRINT " K DOWN" 1800 PRINT 1810 PRINT " 1 2 DIAGNALS" 1820 PRINT " 4 3 " 1830 PRINT " P .... TOGGLE DRAWING" 1840 PRINT " W/! ... FONT ON/OFF" 1850 PRINT 1860 PRINT " */- ... SAVE/LOAD PIC" 1870 PRINT 1880 PRINT " Z .... (TWO TIMES CLS)" 1890 PRINT " 8/0 ... REPEAT/STOP" 1900 PRINT " Q .... QUIT" 1910 PRINT " <>" 1920 IF INKEY$="" THEN 1920 1930 SCREEN 1,1:RETURN 1940 REM 1950 REM ----- LOAD SCREEN 1960 REM 1970 CLS:PRINT "--------- LOADING -----------" 1980 LINE INPUT "NAME OF PIC:";N$ 1990 PRINT:PRINT " <>" 2000 IF INKEY$="" THEN 2000 2010 OPEN"I",#1,N$ 2020 SCREEN 1,1:COLOR 0,0:LINE(11,16)-(245,180),PSET,BF:COLOR 1,0 2030 INPUT #1,S$ 2040 IF S$="H" OR S$="" THEN 2080 ELSE 2230 2050 REM 2060 REM ----- LOAD HORIZONTAL SEQUENCE 2070 REM 2080 IF EOF(1) THEN 2190 2090 INPUT #1,RX,XR,RY 2100 LINE(RX,RY)-(XR,RY),PSET 2110 IF INKEY$="Q" THEN 350 2120 GOSUB 4130 2180 GOTO 2080 2190 CLOSE #1:GOTO 350 2200 REM 2210 REM ----- LOAD VERTICAL SEQUENCE 2220 REM 2230 IF EOF(1) THEN 2340 2240 INPUT #1,RY,YR,RX 2250 LINE(RX,RY)-(RX,YR),PSET 2260 IF INKEY$="Q" THEN 350 2270 GOSUB 4130 2330 GOTO 2230 2340 CLOSE #1:GOTO 350 2350 REM 2360 REM ----- TYPING FONT LOOP 2370 REM 2380 COLOR 0,0:PSET(X,Y):COLOR 1,1 2390 W$=INKEY$:LINE(X+1,Y-1)-(X+8,Y-8),PSET,B:IF W$="" THEN 2390 2400 COLOR 0,0:LINE(X+1,Y-1)-(X+8,Y-8),PSET,B:IF A$="!" THEN 300 2410 COLOR 1,1:GOSUB 4090 2420 IF W$=" " THEN 2480 2430 IF W$="!" THEN 300 2440 L=ASC(W$)-64:G=L 2450 IF L > 26 THEN GOTO 2390 2460 IF L < 1 THEN GOTO 2390 2470 ON L GOSUB 3390,3410,3430,3450,3470,3490,3510,3530,3550,3570,3590,3610,3630,3650,3670,3690,3710,3730,3750,3770,3790,3810,3830,3850,3870,3890 2480 X=X+8:GOTO 2390 2490 REM 2500 REM FONT IMPORT LOOPS 2510 REM 2520 PRINT@275,"A":FOR T=1 TO 16:READ A(T):NEXT T 2530 PRINT@275,"B":FOR T=1 TO 24:READ B(T):NEXT T 2540 PRINT@275,"C":FOR T=1 TO 20:READ C(T):NEXT T 2550 PRINT@275,"D":FOR T=1 TO 16:READ D(T):NEXT T 2560 PRINT@275,"E":FOR T=1 TO 16:READ E(T):NEXT T 2570 PRINT@275,"F":FOR T=1 TO 12:READ F(T):NEXT T 2580 PRINT@275,"G":FOR T=1 TO 24:READ G(T):NEXT T 2590 PRINT@275,"H":FOR T=1 TO 12:READ H(T):NEXT T 2600 PRINT@275,"I":FOR T=1 TO 12:READ I(T):NEXT T 2610 PRINT@275,"J":FOR T=1 TO 16:READ J(T):NEXT T 2620 PRINT@275,"K":FOR T=1 TO 12:READ K(T):NEXT T 2630 PRINT@275,"L":FOR T=1 TO 8:READ L(T):NEXT T 2640 PRINT@275,"M":FOR T=1 TO 16:READ M(T):NEXT T 2650 PRINT@275,"N":FOR T=1 TO 20:READ N(T):NEXT T 2660 PRINT@275,"O":FOR T=1 TO 16:READ O(T):NEXT T 2670 PRINT@275,"P":FOR T=1 TO 16:READ P(T):NEXT T 2680 PRINT@275,"O":FOR T=1 TO 20:READ Q(T):NEXT T 2690 PRINT@275,"Q":FOR T=1 TO 24:READ R(T):NEXT T 2700 PRINT@275,"S":FOR T=1 TO 24:READ S(T):NEXT T 2710 PRINT@275,"T":FOR T=1 TO 8:READ T(T):NEXT T 2720 PRINT@275,"U":FOR T=1 TO 12:READ U(T):NEXT T 2730 PRINT@275,"V":FOR T=1 TO 20:READ V(T):NEXT T 2740 PRINT@275,"W":FOR T=1 TO 28:READ W(T):NEXT T 2750 PRINT@275,"X":FOR T=1 TO 24:READ X(T):NEXT T 2760 PRINT@275,"Y":FOR T=1 TO 20:READ Y(T):NEXT T 2770 PRINT@275,"Z":FOR T=1 TO 12:READ Z(T):NEXT T 2780 PRINT@275,"DONE":FOR T=1 TO 26:READ LL(T):NEXT T 2790 RETURN 2800 REM 2810 REM ----- FONT LINE DATA 2820 REM 2830 REM A 2840 DATA -8,4,-8,5,-7,3,-2,3,-5,5,-5,4,-7,6,-2,6 2850 REM B 2860 DATA -8,3,-2,3,-8,3,-8,5,-7,6,-6,6,-5,4,-5,5,-4,6,-2,6,-2,3,-2,6 2870 REM C 2880 DATA -8,4,-8,6,-7,3,-3,3,-2,4,-2,6,-3,7,-4,7,-7,7,-6,7 2890 REM D 2900 DATA -8,3,-2,3,-2,3,-2,5,-8,3,-8,5,-7,6,-3,6 2910 REM E 2920 DATA -8,3,-8,6,-8,3,-2,3,-2,3,-2,6,-5,3,-5,5 2930 REM F 2940 DATA -8,3,-8,6,-8,3,-2,3,-5,3,-5,5 2950 REM G 2960 DATA -8,4,-8,5,-7,3,-3,3,-2,4,-2,5,-3,6,-4,6,-4,6,-4,5,-7,6,-6,6 2970 REM H 2980 DATA -8,3,-2,3,-5,3,-5,6,-8,6,-2,6 2990 REM I 3000 DATA -8,3,-8,7,-7,5,-3,5,-2,3,-2,7 3010 REM J 3020 DATA -8,3,-8,6,-7,5,-3,5,-2,3,-2,5,-2,3,-4,3 3030 REM K 3040 DATA -8,3,-2,3,-5,2,-8,7,-5,2,-2,7 3050 REM L 3060 DATA -8,3,-2,3,-2,3,-2,6 3070 REM M 3080 DATA -8,2,-2,2,-8,2,-5,5,-5,5,-8,8,-8,8,-2,8 3090 REM N 3100 DATA -8,3,-2,3,-7,3,-7,4,-6,5,-4,5,-3,6,-3,7,-8,7,-2,7 3110 REM O 3120 DATA -8,4,-8,6,-7,3,-3,3,-2,4,-2,6,-7,7,-3,7 3130 REM P 3140 DATA -8,3,-8,5,-8,3,-2,3,-5,3,-5,5,-7,6,-6,6 3150 REM Q 3160 DATA -8,4,-8,6,-7,3,-3,3,-7,7,-1,7,-2,4,-2,6,-3,6,-4,5 3170 REM R 3180 DATA -8,3,-2,3,-8,3,-8,5,-7,6,-6,6,-5,3,-5,5,-5,5,-4,5,-3,6,-2,6 3190 REM S 3200 DATA -8,4,-8,5,-7,3,-6,3,-7,6,-6,6,-6,3,-3,6,-2,6,-2,4,-2,4,-3,3 3210 REM T 3220 DATA -8,3,-8,7,-8,5,-2,5 3230 REM U 3240 DATA -8,3,-3,3,-8,6,-3,6,-2,4,-2,5 3250 REM V 3260 DATA -8,3,-6,3,-5,4,-3,4,-2,5,-3,6,-3,6,-5,6,-6,7,-8,7 3270 REM W 3280 DATA -8,2,-6,2,-5,3,-4,3,-3,4,-2,4,-5,5,-4,5,-3,6,-2,6,-4,7,-5,7,-8,8,-6,8 3290 REM X 3300 DATA -8,3,-7,3,-6,4,-4,6,-3,3,-2,3,-8,7,-7,7,-3,7,-2,7,-4,4,-6,6 3310 REM Y 3320 DATA -8,3,-7,3,-7,3,-5,5,-5,5,-7,7,-8,7,-7,7,-5,5,-2,5 3330 REM Z 3340 DATA -8,3,-8,7,-7,7,-3,3,-2,3,-2,7 3350 REM 3360 REM ----- CHAR LINE COUNT ARRAY 3370 REM 3380 DATA 4,6,5,4,4,3,6,3,3,4,3,2,4,5,4,4,5,6,6,2,3,5,7,6,5,3 3390 FOR T=1 TO LL(G)*4 STEP 4:LINE(X+A(T+1),Y+A(T))-(X+A(T+3),Y+A(T+2)),PSET:NEXT T 3400 RETURN 3410 FOR T=1 TO LL(G)*4 STEP 4:LINE(X+B(T+1),Y+B(T))-(X+B(T+3),Y+B(T+2)),PSET:NEXT T 3420 RETURN 3430 FOR T=1 TO LL(G)*4 STEP 4:LINE(X+C(T+1),Y+C(T))-(X+C(T+3),Y+C(T+2)),PSET:NEXT T 3440 RETURN 3450 FOR T=1 TO LL(G)*4 STEP 4:LINE(X+D(T+1),Y+D(T))-(X+D(T+3),Y+D(T+2)),PSET:NEXT T 3460 RETURN 3470 FOR T=1 TO LL(G)*4 STEP 4:LINE(X+E(T+1),Y+E(T))-(X+E(T+3),Y+E(T+2)),PSET:NEXT T 3480 RETURN 3490 FOR T=1 TO LL(G)*4 STEP 4:LINE(X+F(T+1),Y+F(T))-(X+F(T+3),Y+F(T+2)),PSET:NEXT T 3500 RETURN 3510 FOR T=1 TO LL(G)*4 STEP 4:LINE(X+G(T+1),Y+G(T))-(X+G(T+3),Y+G(T+2)),PSET:NEXT T 3520 RETURN 3530 FOR T=1 TO LL(G)*4 STEP 4:LINE(X+H(T+1),Y+H(T))-(X+H(T+3),Y+H(T+2)),PSET:NEXT T 3540 RETURN 3550 FOR T=1 TO LL(G)*4 STEP 4:LINE(X+I(T+1),Y+I(T))-(X+I(T+3),Y+I(T+2)),PSET:NEXT T 3560 RETURN 3570 FOR T=1 TO LL(G)*4 STEP 4:LINE(X+J(T+1),Y+J(T))-(X+J(T+3),Y+J(T+2)),PSET:NEXT T 3580 RETURN 3590 FOR T=1 TO LL(G)*4 STEP 4:LINE(X+K(T+1),Y+K(T))-(X+K(T+3),Y+K(T+2)),PSET:NEXT T 3600 RETURN 3610 FOR T=1 TO LL(G)*4 STEP 4:LINE(X+L(T+1),Y+L(T))-(X+K(T+3),Y+L(T+2)),PSET:NEXT T 3620 RETURN 3630 FOR T=1 TO LL(G)*4 STEP 4:LINE(X+M(T+1),Y+M(T))-(X+M(T+3),Y+M(T+2)),PSET:NEXT T 3640 RETURN 3650 FOR T=1 TO LL(G)*4 STEP 4:LINE(X+N(T+1),Y+N(T))-(X+N(T+3),Y+N(T+2)),PSET:NEXT T 3660 RETURN 3670 FOR T=1 TO LL(G)*4 STEP 4:LINE(X+O(T+1),Y+O(T))-(X+O(T+3),Y+O(T+2)),PSET:NEXT T 3680 RETURN 3690 FOR T=1 TO LL(G)*4 STEP 4:LINE(X+P(T+1),Y+P(T))-(X+P(T+3),Y+P(T+2)),PSET:NEXT T 3700 RETURN 3710 FOR T=1 TO LL(G)*4 STEP 4:LINE(X+Q(T+1),Y+Q(T))-(X+Q(T+3),Y+Q(T+2)),PSET:NEXT T 3720 RETURN 3730 FOR T=1 TO LL(G)*4 STEP 4:LINE(X+R(T+1),Y+R(T))-(X+R(T+3),Y+R(T+2)),PSET:NEXT T 3740 RETURN 3750 FOR T=1 TO LL(G)*4 STEP 4:LINE(X+S(T+1),Y+S(T))-(X+S(T+3),Y+S(T+2)),PSET:NEXT T 3760 RETURN 3770 FOR T=1 TO LL(G)*4 STEP 4:LINE(X+T(T+1),Y+T(T))-(X+T(T+3),Y+T(T+2)),PSET:NEXT T 3780 RETURN 3790 FOR T=1 TO LL(G)*4 STEP 4:LINE(X+U(T+1),Y+U(T))-(X+U(T+3),Y+U(T+2)),PSET:NEXT T 3800 RETURN 3810 FOR T=1 TO LL(G)*4 STEP 4:LINE(X+V(T+1),Y+V(T))-(X+V(T+3),Y+V(T+2)),PSET:NEXT T 3820 RETURN 3830 FOR T=1 TO LL(G)*4 STEP 4:LINE(X+W(T+1),Y+W(T))-(X+W(T+3),Y+W(T+2)),PSET:NEXT T 3840 RETURN 3850 FOR T=1 TO LL(G)*4 STEP 4:LINE(X+X(T+1),Y+X(T))-(X+X(T+3),Y+X(T+2)),PSET:NEXT T 3860 RETURN 3870 FOR T=1 TO LL(G)*4 STEP 4:LINE(X+Y(T+1),Y+Y(T))-(X+Y(T+3),Y+Y(T+2)),PSET:NEXT T 3880 RETURN 3890 FOR T=1 TO LL(G)*4 STEP 4:LINE(X+Z(T+1),Y+Z(T))-(X+Z(T+3),Y+Z(T+2)),PSET:NEXT T 3900 RETURN 4000 REM 4010 REM ----- CHECKING MAX AND MIN POSITIONS 4020 REM 4030 IF X>MX THEN MX = X+1 4035 IF XMY THEN MY = Y+1 4045 IF YMX THEN MX = (X+9) 4095 IF XMY THEN MY = Y 4105 IF (Y-10) 43 THEN PC = 43 4240 LINE(201,6)-(201+PC,7),PSET,BF 4250 RETURN 5000 REM END OF LINE