; this is sample script
; 2002/06/07 by Gaku - bitmap editer

load("img")

back_color =  0
curs_color =  8

win = null
scr = null
bmp = null

mode = 0

sel_clr = 0
sel_x   = 0
sel_y   = 0

cur_x = 0
cur_y = 0
cur_w = 16
cur_h = 16

bmp_x = 0
bmp_y = 0
bmp_w = 0
bmp_h = 0

RET   = 10
LEFT  = 12
RIGHT = 13
UP    = 14
DOWN  = 15
SPACE = 32

main()

sub main()
{
	if (2 > arg) {
		print("few arg\n")
		return
	}

	if (0 != init())
		return

	loop {
		if (0 != work())
			break
	}

	img.save(bmp, arg[1])
}

sub init()
{
	win = img.window()
	scr = img.image(img.width(win), img.height(win))

	img.fill(scr, back_color)

	bmp = img.image(arg[1])
	if (null == bmp) {
		bmp_w = 32
		if (2 < arg)
			bmp_w = int(arg[2])

		bmp_h = 32
		if (3 < arg)
			bmp_h = int(arg[3])

		bmp = img.image(bmp_w, bmp_h)
		if (null == bmp) {
			print("cannot create image\n")
			return 1
		}
		img.fill(bmp, back_color)
	}

	bmp_w = img.width(bmp)
	bmp_h = img.height(bmp)

	if (cur_w > bmp_w)
		cur_w = bmp_w
	if (cur_h > bmp_h)
		cur_h = bmp_h

	draw_palette()
	draw_select()
	draw_bitmap()
	draw_cursor()

	return 0
}

sub work()
{
	wait()
	key = inkey()

	if (key != UP & key != DOWN
		& key != LEFT & key != RIGHT
		& key != RET & key != SPACE)
		return 0

	if (0 == mode) {
		if (key == RET)
			mode = 1
		else
			edit(key)
	} else {
		if (key == RET)
			return 1

		if (key == SPACE)
			mode = 0
		else
			palette(key)
	}

	return 0
}

sub edit(key)
{
	if (key == SPACE)
		img.put(bmp, bmp_x+cur_x, bmp_y+cur_y, sel_clr)

	hide_cursor()

	if (key == UP)
		if (0 <= cur_y-1) {
			cur_y = cur_y - 1
		} else {
			if (0 <= bmp_y-8) {
				cur_y = 8
				cur_h = 16
				bmp_y = bmp_y - 8
				draw_bitmap()
			}
		}

	if (key == DOWN)
		if (cur_h > cur_y+1) {
			cur_y = cur_y + 1
		} else {
			if (bmp_h > bmp_y+16) {
				cur_y = 8
				bmp_y = bmp_y + 8

				if (bmp_h <= bmp_y+16)
					cur_h = bmp_h - bmp_y
				draw_bitmap()
			}
		}

	if (key == LEFT)
		if (0 <= cur_x-1) {
			cur_x = cur_x - 1
		} else {
			if (0 <= bmp_x-8) {
				cur_x = 8
				cur_w = 16
				bmp_x = bmp_x - 8
				draw_bitmap()
			}
		}

	if (key == RIGHT)
		if (cur_w > cur_x+1) {
			cur_x = cur_x + 1
		} else {
			if (bmp_w > bmp_x+16) {
				cur_x = 8
				bmp_x = bmp_x+8

				if (bmp_w <= bmp_x+16)
					cur_w = bmp_w - bmp_x

				draw_bitmap()
			}
		}

	draw_cursor()
}

sub palette(key)
{
	hide_select()

	if (key == UP) {
		if (0 <= sel_y-1)
			sel_y = sel_y - 1
	}

	if (key == DOWN) {
		if (8 > sel_y+1)
			sel_y = sel_y + 1
	}

	if (key == LEFT) {
		if (0 <= sel_x-1)
			sel_x = sel_x - 1
	}

	if (key == RIGHT) {
		if (2 > sel_x+1)
			sel_x = sel_x + 1
	}

	sel_clr = 8*sel_x + sel_y

	draw_select()
}

sub draw_bitmap()
{
	for (y = 0; y < 16; y = y + 1)
		for (x = 0; x < 16; x = x + 1) {
			clr = img.get(bmp, bmp_x+x, bmp_y+y)
			img.fill(scr, clr, 2+15*x, 1+15*y, 13, 13)
		}
}

sub draw_cursor()
{
	x = 15*cur_x+1
	y = 15*cur_y

	img.fill(scr, curs_color, x,    y,    5, 2)
	img.fill(scr, curs_color, x+10, y,    5, 2)
	img.fill(scr, curs_color, x,    y+13, 5, 2)
	img.fill(scr, curs_color, x+10, y+13, 5, 2)
	img.fill(scr, curs_color, x,    y,    2, 5)
	img.fill(scr, curs_color, x,    y+10, 2, 5)
	img.fill(scr, curs_color, x+13, y,    2, 5)
	img.fill(scr, curs_color, x+13, y+10, 2, 5)

	img.copy(win, scr)
}

sub hide_cursor()
{
	x = 15*cur_x+1
	y = 15*cur_y

	img.fill(scr, back_color, x, y, 15, 15)
	clr = img.get(bmp, bmp_x+cur_x, bmp_y+cur_y)
	img.fill(scr, clr, 1+x, 1+y, 13, 13)
}

sub draw_palette()
{
	for (x = 0; x < 2; x = x + 1)
		for (y = 0; y < 8; y = y + 1)
			img.fill(scr, 8*x+y, 242+x*30, 1+y*30, 28, 28)
}

sub draw_select()
{
	x = 30*sel_x+241
	y = 30*sel_y

	img.fill(scr, curs_color, x,    y,    8, 2)
	img.fill(scr, curs_color, x+22, y,    8, 2)
	img.fill(scr, curs_color, x,    y+28, 8, 2)
	img.fill(scr, curs_color, x+22, y+28, 8, 2)
	img.fill(scr, curs_color, x,    y,    2, 8)
	img.fill(scr, curs_color, x,    y+22, 2, 8)
	img.fill(scr, curs_color, x+28, y,    2, 8)
	img.fill(scr, curs_color, x+28, y+22, 2, 8)

	img.copy(win, scr)
}

sub hide_select()
{
	x = 30*sel_x+241
	y = 30*sel_y

	img.fill(scr, back_color, x, y, 30, 30)
	img.fill(scr, sel_clr, 1+x, 1+y, 28, 28)
}
