/***   [icn.c]
*
*	アイコン各種		(C)ささがわ
*
*	For GNU C Compiler (GCC)   Version 1.39
*
***/

#include "graph.h"
#include <mos.h>

extern int	PAL_Black;

extern int	SROM_mos(int, int, int, int);

void ICN_drive(int no, int x, int y) {
	static const unsigned char	icn[][48] = { {
			0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x7f,
			0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x7f,
			0x00, 0xff, 0x80, 0x7f, 0x3f, 0xff, 0xfe, 0x7f,
			0x00, 0xff, 0x80, 0x7f, 0x00, 0xff, 0x80, 0x7f,
			0x00, 0x00, 0x1c, 0x7f, 0x0c, 0x00, 0x1c, 0x7f,
			0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x7f
		}, {
			0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x7f,
			0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x78, 0x7f,
			0x0f, 0xc0, 0x78, 0x7f, 0x00, 0x00, 0x78, 0x7f,
			0x0f, 0xc0, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x7f,
			0x0f, 0xc0, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x7f,
			0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x7f
		}, {
			0x00, 0x00, 0x00, 0x7f, 0x01, 0xff, 0xc0, 0x7f,
			0x0e, 0x00, 0x38, 0x7f, 0x30, 0x00, 0x06, 0x7f,
			0x40, 0x7f, 0x01, 0x7f, 0x40, 0x80, 0x81, 0x7f,
			0x40, 0x80, 0x95, 0x7f, 0x40, 0x7f, 0x29, 0x7f,
			0x30, 0x00, 0x06, 0x7f, 0x0e, 0x00, 0x38, 0x7f,
			0x01, 0xff, 0xc0, 0x7f, 0x00, 0x00, 0x00, 0x7f
		}, {
			0x00, 0x00, 0x00, 0x7f, 0x12, 0x49, 0x24, 0x7f,
			0x3f, 0xff, 0xfe, 0x7f, 0x20, 0x00, 0x02, 0x7f,
			0x20, 0x7f, 0x02, 0x7f, 0x30, 0x41, 0x02, 0x7f,
			0x30, 0x41, 0x02, 0x7f, 0x20, 0x7f, 0x02, 0x7f,
			0x20, 0x00, 0x02, 0x7f, 0x3f, 0xff, 0xfe, 0x7f,
			0x12, 0x49, 0x24, 0x7f, 0x00, 0x00, 0x00, 0x7f
		}
	};
	
	if (no < 0 || 3 < no)
		return;
	EGB_putC(0, icn[no], x, y, x + 24, y + 11, PAL_Black);
}

void ICN_ya(int no, int x, int y) {
	static const unsigned char	icn[][26] = { {
			0x00, 0x07, 0x00, 0x07, 0x02, 0x07, 0x07, 0x07,
			0x0f, 0x87, 0x1f, 0xc7, 0x3f, 0xe7, 0x07, 0x07,
			0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x00, 0x07,
			0x00, 0x07
		}, {
			0x00, 0x07, 0x00, 0x07, 0x07, 0x07, 0x07, 0x07,
			0x07, 0x07, 0x07, 0x07, 0x3f, 0xe7, 0x1f, 0xc7,
			0x0f, 0x87, 0x07, 0x07, 0x02, 0x07, 0x00, 0x07,
			0x00, 0x07
		}, {
			0x00, 0x07, 0x00, 0x07, 0x02, 0x07, 0x06, 0x07,
			0x0e, 0x07, 0x1f, 0xe7, 0x3f, 0xe7, 0x1f, 0xe7,
			0x0e, 0x07, 0x06, 0x07, 0x02, 0x07, 0x00, 0x07,
			0x00, 0x07
		}, {
			0x00, 0x07, 0x00, 0x07, 0x02, 0x07, 0x03, 0x07,
			0x03, 0x87, 0x3f, 0xc7, 0x3f, 0xe7, 0x3f, 0xc7,
			0x03, 0x87, 0x03, 0x07, 0x02, 0x07, 0x00, 0x07,
			0x00, 0x07
		}
	};
	
	if (no < 0 || 3 < no)
		return;
	EGB_putC(1, icn[no], x, y, x + 12, y + 12, PAL_Black);
}

void ICN_file(int no, int x, int y) {
	static const unsigned char	icn[][64] = { {
			0x0e, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00,
			0x31, 0x80, 0x00, 0x00, 0x60, 0x81, 0x80, 0x00,
			0x31, 0x83, 0xc0, 0x00, 0x1b, 0x86, 0x78, 0x00,
			0x0e, 0xec, 0x28, 0x00, 0x00, 0x38, 0x38, 0x00,
			0x38, 0x7e, 0x00, 0x00, 0x28, 0xc3, 0xe0, 0x00,
			0x39, 0x86, 0x30, 0x00, 0x0f, 0x04, 0x90, 0x00,
			0x06, 0x05, 0x30, 0x00, 0x00, 0x04, 0xe0, 0x00,
			0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0xf2, 0xa0
		}, {
			0x60, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00,
			0x43, 0x80, 0x00, 0x00, 0x40, 0x7f, 0xff, 0xe0,
			0x40, 0x20, 0x00, 0x20, 0x40, 0x2e, 0x00, 0x20,
			0x40, 0x29, 0x00, 0x20, 0x40, 0x29, 0x70, 0x20,
			0x40, 0x29, 0x20, 0x20, 0x40, 0x2e, 0x27, 0x20,
			0x40, 0x20, 0x24, 0xa0, 0x40, 0x20, 0x77, 0x20,
			0x60, 0x20, 0x05, 0x20, 0x3c, 0x20, 0x04, 0xa0,
			0x57, 0xa0, 0x00, 0x20, 0x2a, 0xff, 0xff, 0xe0
		}, {
			0x7f, 0xff, 0xfe, 0x00, 0x40, 0x00, 0x03, 0x00,
			0x40, 0x00, 0x02, 0x80, 0x40, 0x00, 0x02, 0x40,
			0x4f, 0xfe, 0x03, 0xe0, 0x40, 0x00, 0x00, 0x20,
			0x40, 0x00, 0x00, 0x20, 0x40, 0x00, 0x1c, 0x20,
			0x4f, 0xfe, 0x22, 0x20, 0x40, 0x00, 0x41, 0x20,
			0x40, 0x00, 0x41, 0x20, 0x40, 0x00, 0x41, 0x20,
			0x4f, 0xfe, 0x22, 0x20, 0x40, 0x00, 0x1c, 0x20,
			0x40, 0x00, 0x00, 0x20, 0x7f, 0xff, 0xff, 0xe0
		}
	};
	
	if (no < 0 || 2 < no)
		return;
	EGB_putC(1, icn[no], x, y, x + 31, y + 15, PAL_Black);
}

void ICN_opt(int no, int x, int y) {
	static const unsigned char	icn[][32] = { {
			0x00, 0x00, 0x00, 0x00,
			0xff, 0xff, 0x80, 0x11,
			0x80, 0x11, 0x80, 0x11,
			0x80, 0x11, 0x80, 0x11,
			0x80, 0x15, 0xff, 0xf5,
			0x80, 0x05, 0x80, 0x3d,
			0x80, 0x01, 0xff, 0xff,
			0x00, 0x00, 0x00, 0x00
		}
	};
	
	if (no < 0 || 0 < no)
		return;
	EGB_putC(1, icn[no], x, y, x + 15, y + 15, PAL_Black);
}

void ICN_tree(int x, int y) {
	static const unsigned char	icn[] = {
		0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00,
		0x00, 0x01, 0x80, 0x00, 0x00, 0x03, 0xc0, 0x00,
		0x00, 0x07, 0xe0, 0x00, 0x00, 0x03, 0xc0, 0x00,
		0x00, 0x07, 0xe0, 0x00, 0x00, 0x0f, 0xf0, 0x00,
		0x00, 0x1f, 0xb8, 0x00, 0x00, 0x7f, 0x5e, 0x00,
		0x00, 0x0f, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x00,
		0x00, 0x1f, 0xf8, 0x00, 0x00, 0x3b, 0xfc, 0x00,
		0x00, 0x75, 0xce, 0x00, 0x00, 0xfb, 0xcf, 0x00,
		0x07, 0xff, 0xff, 0xc0, 0x03, 0xfc, 0xff, 0x80,
		0x00, 0x3c, 0xfc, 0x00, 0x00, 0x7f, 0xce, 0x00,
		0x00, 0xdf, 0x87, 0x00, 0x01, 0xaf, 0x87, 0x80,
		0x1f, 0xdf, 0xcf, 0xf8, 0x07, 0xff, 0xff, 0xe0,
		0x01, 0xff, 0xff, 0x80, 0x00, 0x1f, 0xf8, 0x00,
		0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00,
		0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00,
		0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00
	};
	
	EGB_putC(0, icn, x, y, x + 31, y + 31, PAL_Black);
}

void ICN_mos(int no) {
	if (no < 0 || 4 < no)
		return;
	switch (no) {
		case 1:
			SROM_mos(82, 15, 15, 15);
			break;
		case 2:
			SROM_mos(87, 1, 1, 15);
			break;
		case 3:
			SROM_mos(84, 9, 9, 15);
			break;
		case 4:
			SROM_mos(85, 4, 27, 15);
			break;
		default:
			SROM_mos(81, 1, 1, 15);
			break;
	}
}

void ICN_put(int no, int x, int y, int c) {
	char	par[14];
	
	EGB_color(EGB_work, EGB_COL_FORE, c);
	*((void **)par) = (void *)(0x28000 + 256 * (no - 1));
	*((unsigned short *)(par + 4)) = 0x0108;
	*((short *)(par + 6)) = x;
	*((short *)(par + 8)) = y;
	*((short *)(par + 10)) = x + 31;
	*((short *)(par + 12)) = y + 31;
	EGB_putBlockColor(EGB_work, 0, par);
}
