gosub init_program
getmouse x,y,nw,nb
do
temp$ = inkey$
if temp$ <> "" then brush$ = temp$ : gosub show_brush
getmouse x,y,nw,nb
if nb = 1 and y < (sy-17) and x >= 0 and x < sx then gosub do_brush_stroke
if nb = 1 and y > (sy-9) and x < menu_name_pxw then gosub toggle_menu
if nb = 1 and y > (sy-9) and x > (menu_name_pxw + 7) and x < (((11 + 32) * 8) -1) THEN GOSUB set_brush_color
loop
'
toggle_menu:
color 15,0
if menu$ = "foreground:" then
menu$ = "background:"
else
menu$ = "foreground:"
end if
locate (sy/8),1 : print menu$ : sleep 0.125
color f_color, b_color
return
show_color_picks:
for i = 0 to 15
locate (sy/8),12+(i*2) : color i, 0 : print chr$(219) + chr$(219)
next i
color 15,0
locate (sy/8), (11 + (16 * 2) + 3) : print "brush:"
color f_color, b_color
return
set_brush_color:
if menu$ = "foreground:" then f_color = int(((x-87)/16)) else b_color = int(((x-87)/16))
color f_color,b_color
SetLocalStorageItem( "draw:f_color", f_color)
SetLocalStorageItem( "draw:b_color", b_color)
gosub show_brush
return
do_brush_stroke:
new_y = (int(y/8)+1) : new_x = (int(x/8)+1)
locate new_y, new_x
print brush$
SetLocalStorageItem( "draw:stroke:" + new_y + "," + new_x, brush$ + " " + f_color + "," + b_color)
return
show_brush:
locate (sy/8), (11 + (16 * 2) + 3 + 6) : print brush$
SetLocalStorageItem( "draw:brush", brush$ )
return
do_grid:
for i = 7 to sx - 1 step 8
line (i,0)-(i,(sy-17)), 7
next i
for i = 7 to sy - 17 step 8
line (0,i)-((sx-1),i), 7
next i
return
init_program:
menu_name_pxw = 8 * 10 ' 8 pixels * 10 characters
c_width% = GetLocalStorageItem( "draw:width" )
c_height% = GetLocalStorageItem( "draw:height" )
screen 2
print "ASCII DRAW"
If c_width% >= 52 and c_width% <= 260 and c_height% >= 1 and c_height% <= 51 then
locate 3,1
print "Press N and enter to start a new drawing.", continue$
input "Press enter to continue last drawing.", continue$
if ucase$(continue$) <> "N" then gosub continue_drawing else gosub blank_drawing
else
gosub blank_drawing
end if
gosub toggle_menu : gosub show_color_picks : gosub show_brush
return
continue_drawing:
gosub do_screen
for this_y = 1 to c_height%
for this_x = 1 to c_width%
this_stroke$ = GetLocalStorageItem( "draw:stroke:" + this_y + "," + this_x)
if this_stroke$ <> "" then
this_brush$ = left$(this_stroke$, 1) : this_stroke$ = right$(this_stroke$, len(this_stroke$) - 2)
this_f_color = val(left$(this_stroke$, instr(this_stroke$, ",") - 1))
this_b_color = val(right$(this_stroke$, len(this_stroke$) - instr(this_stroke$, ",")))
color this_f_color, this_b_color
locate this_y, this_x : print this_brush$
end if
next this_x
next this_y
brush$ = GetLocalStorageItem( "draw:brush" )
f_color = GetLocalStorageItem( "draw:f_color" )
b_color = GetLocalStorageItem( "draw:b_color" )
return
blank_drawing:
f_color = 15 : b_color = 0 : brush$ = " "
c_width% = 0 : c_height% = 0
screen 2
print "ASCII DRAW"
while c_width% < 52 or c_width% > 260
locate 3,1
input "how many characters wide? (min of 52, max of 260)", c_width%
if c_width% < 52 or c_width% > 260 then beep
wend
SetLocalStorageItem( "draw:width", c_width%)
print : print "Ok, canvas will be " + c_width% + " characters wide." : print
while c_height% < 1 OR c_height% > 51
locate 7,1
input "how many characters high? (min of 1, max of 51)", c_height%
if c_height% < 1 OR c_height% > 51 then beep
wend
SetLocalStorageItem( "draw:height", c_height%)
print : print "Ok, canvas will be " + c_height% + " characters high." : print
print "Preparing canvas.";
for this_y = 1 to c_height%
for this_x = 1 to c_width%
SetLocalStorageItem( "draw:stroke:" + this_y + "," + this_x, "")
next this_x
print ".";
next this_y
gosub do_screen
return
do_screen:
sx = c_width% * 8
sy = (c_height%+2) * 8
screen _newimage(sx,sy,0)
gosub do_grid
return