home *** CD-ROM | disk | FTP | other *** search
Wrap
1 rem Canvas.bas by Charles Adams 5 DIM O$(5) : O$(0) = "SKETCH" : O$(1) = "LINES" : O$(2) = "LINES..." : O$(3) = "BOXES" : O$(4) = "CIRCLES" : O$ (5) = "ERASE" 10 DIM C$(2),C%(2) : C$(0) = "RED" : C$(1) = "GREEN" : C$(2) = "BLUE" 11 CL = 1 : BR = 0 15 SCREEN 0,5,0 : PENO 1 : OUTLINE 1 20 PENO 1 : FOR A = 0 TO 31 : PENA A 30 BOX (9 * A,0;8 + 9 * A,19),1 40 NEXT A : BOX (287,0;302,19) : PENO 2 : BOX (9*CL,0;8+9*CL,19) 45 FOR A = 1 TO 18 : PENA A : DRAW (288,A TO 301,A) : NEXT A 47 PENO 1 : PENA 0 : OUTLINE 1 : BOX (296,0;301,8),1: OUTLINE 0 50 PENO CL : PENA CL 100 ASK MOUSE X%,Y%,B% : IF B% = 0 THEN LX = -1 :LB = 0: GOTO 100 ELSE IF LB = 1 THEN 100 ELSE IF Y% < 20 THEN 150 110 IF MD > 0 THEN 1000 ELSE IF LX < 0 THEN AREA (X%,Y% TO X%+BR,Y% TO X%+BR,Y%+BR TO X%,Y%+BR) : GOTO 120 112 IF LX < X% THEN GOSUB 2000: GOTO 120 115 IF LX = X% THEN GOSUB 2100: GOTO 120 117 GOSUB 2200 120 LX = X% : LY = Y% : GOTO 100 150 IF X% > 287 THEN 200 ELSE CH = INT (X%/9) : IF CH > 31 THEN 100 160 PENO 1 : BOX (9 * CL,0;8 + 9 * CL,19) : PENO 2 : BOX (9 * CH,0;8 + 9 * CH,19) : CL = CH : PENA CL :PENO CL : GOTO 100 200 IF X% > 296 AND Y% < 8 THEN GOTO 500 : PENA CL : GOTO 100 ELSE WINDOW 4,0,0,130,56,"COLOR" : CMD 4 : ASK RGB CL,C%(0),C%(1),C%(2) : C = 0 205 LC = 9 : O = 1 210 OUTLINE 0 : PRINT "R:" : PRINT "G:" : PRINT "B:" : PRINT "EXIT:" : PENO 1 : BOX (81,24;89,31) : FOR A = 0 TO 2 : C = A : LN = 4 * C%(A) : GOSUB 290 : NEXT A 220 ASK MOUSE X%,Y%,B% : IF B% = 0 THEN 220 ELSE IF X% > 81 AND X% < 89 AND Y% > 24 AND Y% < 31 THEN LB = 1 : GOTO 300 230 C = INT (Y%/8) : IF C > 2 OR C < 0 THEN 220 ELSE GOSUB 295 : LN = X% - 24 : IF LN < 1 THEN LN = 1 ELSE IF LN > 63 THEN LN = 63 235 C%(C) = INT (LN/4) : O = 2 : GOSUB 290 240 RGB CL,C%(0),C%(1),C%(2) : GOTO 220 290 OUTLINE 1 : PENO O : PENA 1 : BOX (24,8*C;24+LN,7+8*C),1 : PENO 1 : PENA 0 : BOX (25+LN,8*C;89,7+8*C),1 : OUTLINE 0 : RETURN 295 IF C = LC THEN RETURN ELSE LC = C : OUTLINE 1 : FOR A = 0 TO 2 : PENO (1 - (A=C)) : BOX (24,8*A;89,7+8*A) : NEXT A : OUTLINE 0 : RETURN 300 CLOSE 4 : CMD 0 : GOTO 100 500 CLOSE 4 : OX = 0 : OY = 0 : WINDOW 4,0,0,108,124,"OPTIONS" : CMD 4 : PENA 1: PENO 1 : OUTLINE 1 510 FOR A = 0 TO 5 : PRINT O$(A) : NEXT A : PRINT : PRINT "FILL?": BOX (73,56;81,64),FL : GOSUB 590 515 PRINT "BRUSH:" BR+1 : BOX (73,64;81,72) : PRINT "LOAD." : BOX (73,72;81,80) : PRINT "SAVE." : BOX (73,80;81,88) : PRINT "EXIT." : BOX (73,88;81,96) 520 ASK MOUSE X%,Y%,B% : IF B% = 0 THEN LC = 0 : GOTO 520 ELSE IF X% < 74 OR X% > 80 THEN 520 530 IF Y% > 56 AND Y% < 64 THEN IF LC = 1 THEN 520 ELSE FL = - (FL = 0) : PENA FL : BOX (73,56;81,64),1 : LC = 1 : GOTO 520 540 Z = INT (Y%/8) : IF Z = 11 THEN 595 ELSE IF Z = 8 THEN 550 ELSE IF Z = 9 THEN 3000 ELSE IF Z = 10 THEN 4000 ELSE IF Z > 5 THEN 520 ELSE MD = Z : GOSUB 590 : GOTO 520 550 IF LC = 1 THEN 520 ELSE LC = 1 : BR = BR + 1 + 5 * (BR = 4 ) : PRINT AT (7,9);BR+1 : PRINT : PRINT : PRINT : GOTO 520 590 FOR A = 0 TO 5 : F = - (MD = A) : PENA F : BOX (73,8*A;81,8*A+8),1 : NEXT A : RETURN 595 CLOSE 4 : CMD 0 : OUTLINE 0 : PENA CL : LB = 1 : GOTO 100 1000 IF OX = 0 AND OY = 0 THEN OX = X% : OY = Y% : LB = 1 : OC = PIXEL (X%,Y%) : DRAW (X%,Y%) : GOTO 100 1005 ON MD GOTO 1050,1010,1020,1030,1040 1010 LX = OX : LY = OY : OX = X% : OY = Y% : LB = 1 : IF LX < X% THEN GOSUB 2000: GOTO 1015 1012 IF LX = X% THEN GOSUB 2100 : GOTO 1015 ELSE GOSUB 2200 1015 GOTO 120 1020 PENO CL : FOR A = 0 TO BR : BOX (OX+A,OY;X%+A,Y%),FL : BOX (OX,OY+A;X%,Y%+A) 1025 BOX (OX+A,OY+A;X%+A,Y%+A) : NEXT A : OX = 0 : OY = 0 : LB = 1 : GOTO 100 1030 R = SQR ((OX - X%)^2 + (OY - Y%)^2) : FOR A = 0 TO BR : CIRCLE (OX,OY),R+A : NEXT A : LB = 1 1035 PENA OC : DRAW (OX,OY) : PENA CL : PENO CL : IF FL = 1 THEN PAINT (OX,OY),0 1037 OX = 0 : Z = OY-R-A+1 : OY = 0 : IF Z < 20 THEN 20 ELSE 100 1040 PENO 0 : PENA 0 : BOX (OX,OY;X%,Y%),1 : PENA CL : OX = 0 : OY = 0 : LB = 1 : GOTO 100 1050 LB = 1 : LX = OX : LY = OY : IF LX < X% THEN GOSUB 2000 : GOTO 1055 1052 IF LX = X% THEN GOSUB 2100 : GOTO 1055 ELSE GOSUB 2200 1055 OX = 0 : OY = 0 : GOTO 120 2000 IF LY < Y% THEN X1 = LX : X2 = LX : X3 = LX + BR : X4 = X% + BR : X5 = X4 : X6 = X% ELSE X1 = LX + BR : X2 = LX : X3 = LX : X4 = X% : X5 = X% + BR : X6 = X5 2010 IF LY < Y% THEN Y1 = LY + BR : Y2 = LY : Y3 = LY : Y4 = Y% : Y5 = Y% + BR : Y6 = Y5 ELSE Y1 = LY + BR : Y2 = Y1 : Y3 = LY : Y4 = Y% : Y5 = Y% : Y6 = Y% + BR 2020 GOTO 2500 2100 IF LY < Y% THEN Y1 = LY : Y2 = LY : Y3 = LY + BR : Y4 = Y% : Y5 = Y% + BR : Y6 = Y5 ELSE Y1 = LY + BR : Y2 = Y1 : Y3 = LY : Y4 = Y% + BR : Y5 = Y% : Y6 = Y% 2110 X1 = LX + BR : X2 = LX : X3 = LX : X4 = X% : X5 = X% : X6 = X% + BR 2120 GOTO 2500 2200 IF LY < Y% THEN X1 = LX : X2 = LX + BR : X3 = X2 : X4 = X% + BR : X5 = X% : X6 = X% ELSE X1 = LX + BR : X2 = X1 : X3 = LX : X4 = X% : X5 = X% : X6 = X% + BR 2210 IF LY < Y% THEN Y1 = LY : Y2 = LY : Y3 = LY + BR : Y4 = Y% + BR : Y5 = Y4 : Y6 = Y% ELSE Y1 = LY : Y2 = LY + BR : Y3 = Y2 : Y4 = Y% + BR : Y5 = Y% : Y6 = Y% 2500 AREA (X1,Y1 TO X2,Y2 TO X3,Y3 TO X4,Y4 TO X5,Y5 TO X6,Y6) : RETURN 3000 SCNCLR : PRINT "PICTURE TO" : PRINT "LOAD:" : PRINT "<CR> = EXIT" : INPUT N$ : IF N$ = "" THEN 500 ELSE OPEN "I",2,N$ 3005 PRINT "LOADING..." : CMD 0 3010 FOR A = 0 TO 31 : INPUT #2,R%,G%,B% : RGB A,R%,G%,B% : NEXT A 3020 FOR A = 20 TO 199 : FOR B = 0 TO 319 : INPUT #2,P% : IF P% > -1 THEN DRAW (B,A),P% 3030 NEXT B : NEXT A : CLOSE 2 : GOTO 500 4000 SCNCLR : PRINT "PICTURE TO" : PRINT "SAVE:" : PRINT "<CR> = EXIT" : INPUT N$ : IF N$ = "" THEN 500 ELSE OPEN "O",2,N$ 4005 PRINT "SAVING...": CMD 0 4010 FOR A = 0 TO 31 : ASK RGB A,R%,G%,B% : PRINT #2,R%,G%,B% : NEXT A 4020 FOR A = 20 TO 199 : FOR B = 0 TO 319 : P% = PIXEL (B,A) : PRINT #2,P% : NEXT B : NEXT A : CLOSE 2 : GOTO 500