/*
	猫の目ビュア for WonderWitch (on WonderSwan, WonderSwanColor)
			
		Copyright (c) 2000,2001, B-soft. All rights reserved.
		Programmed by KAKKO
*/


#include <stdio.h>
#include <sys/bios.h>
#include <string.h>
#include <sys/libwwc.h>

#include "neko_view.h"

extern void ini_font(void);
extern void ini_palette(void);
extern void set_screen_mode1(void);

void set_default_color(void)
{
	text_set_palette(0);
	font_set_color(1);
}

void set_header_color(void)
{
	text_set_palette(3);
	font_set_color(0x0b);
}

void drw_neko(int n)
{
	int i, j;
	int data[16];
	int st;
	static int stat = 0;
	
	set_header_color();
	
	if(n < 0){
		n = stat;
	}
	
	st = 149;
	if((n % 2)!= 0){
		st += 10;
		stat = 1;
	}
	else {
		stat = 0;
	}
	for(j = 0; j < 3; j++){
		for(i = 0; i < 3; i++){
			data[i] = st + NEKO_COLOR;
			st++;
		}
		screen_set_char(0, 0, j, 3, 1, data);
	}
	
	set_default_color();
}

void clr_header(void)
{
	static char buff[] = "                         ";
	int i;
	static int data[28];
	
	set_header_color();
	
	text_set_screen(0);
	text_put_string(3, 0, buff);
	text_put_string(3, 1, buff);
	text_put_string(3, 2, buff);

	ini_font();
	for(i = 0; i < 28; i++){
		data[i] = 1 + PALETTE_NO5;
	}
	screen_set_char(0, 3, 2, 28, 1, data);	
	
	set_default_color();
}

void drw_page(char far *buff)
{
	static char stat[10];
	
	if(buff == NULL){
		buff = stat;
	}
	else {
		strcpy(stat, buff);
	}
	set_header_color();

	text_set_screen(0);
	text_put_string(17 - 3, 1, "   ");
	text_put_string(17 - strlen(buff), 1, buff);

	set_default_color();
}

void drw_fname(char *fname)
{
	static char stat[100];
	
	set_header_color();
	
	if(fname == NULL){
		fname = stat;
	}
	else {
		strcpy(stat, fname);
	}
	
	text_set_screen(0);
	text_put_string(3, 0, fname);
	
	set_default_color();
}

void drw_date(void)
{
    int year, month, date;
	char buff[9];

    year  = rtc_get_year();
    month = rtc_get_month();
    date  = rtc_get_date();

	set_header_color();

	sprintf(buff, "%02d/%02d/%02d", year, month, date);
	text_set_screen(0);
	text_put_string(19, 0, buff);
	
	set_default_color();

}

void drw_time(void)
{
    int hour, min, sec;
	char buff[9];

	set_header_color();

    hour  = rtc_get_hour();
    min = rtc_get_minute();
    sec  = rtc_get_second();

	sprintf(buff, "%02d:%02d:%02d", hour, min, sec);
	text_set_screen(0);
	text_put_string(19, 1, buff);

	set_default_color();
}


#define		ITEM0_POS	6
#define		ITEM1_POS	12
#define		ITEM2_POS	19

void drw_sel(int n)
{
	set_header_color();
	text_set_screen(0);

	text_put_string(ITEM0_POS, 0, "File");
	text_put_string(ITEM1_POS, 0, "Trans");
	text_put_string(ITEM2_POS, 0, "End");

	text_set_palette(MAIN_COLOR);
	font_set_color(0x7);
	font_set_color(0xe);
	
	switch(n){
		case 0 : 
			text_put_string(ITEM0_POS, 0, "File");
			break;
		case 1 : 
			text_put_string(ITEM1_POS, 0, "Trans");
			break;
		case 2 : 
			text_put_string(ITEM2_POS, 0, "End");
			break;
	}
	
	set_default_color();
	
}

void drw_header(void)
{
	ini_font();
	clr_header();
	drw_neko(-1);
	drw_date();
	drw_time();
	drw_page(NULL);
	drw_fname(NULL);
}

#define	MAX_SEL_NUM		2

int drw_menu(void)
{
	int key;
	int sel = 0;
	int i;
	static int data[28];
	int end_flg = 0;
	
	clr_header();
	set_header_color();
	
	for(i = 0; i < 28; i++){
		data[i] = 2 + PALETTE_NO5;
	}
	screen_set_char(0, 3, 2, 28, 1, data);	
	for(i = 0; i < 28; i++){
		data[i] = 1 + PALETTE_NO5;
	}
	screen_set_char(0, 3, 1, 28, 1, data);	
	
	if(wwc_get_hardarch() == HARDARCH_WS){
		palette_set_color(3, 0x047f);
	}
	else{
		wwc_palette_set_color(3, 2, 0x0f0);
	}
	
	drw_sel(sel);
	while(1){
		drw_neko(sel);
		key = key_wait();
		if((key & KEY_X2) != 0){		/* right */
			if(sel < MAX_SEL_NUM){
				sel++;
			}
			else{
				sel = 0;
			}
			drw_sel(sel);
		}
		else if((key & KEY_X4) != 0){	/* left  */
			if(sel > 0){
				sel--;
			}
			else{
				sel = MAX_SEL_NUM;
			}
			drw_sel(sel);
		}
		else if((key & KEY_A) != 0){
			switch(sel){
				case 0 :		/* File		*/
					end_flg = SELECT_FILE;
					break;
				case 1 :		/* Trans	*/
					end_flg = SELECT_TRANS;
					break;
				case 2 :		/* End		*/
					end_flg = SELECT_END;
					break;
			}
		}
		else if((key & KEY_B) != 0){
			set_screen_mode1();
			drw_header();
			break;
		}
		else if((key & KEY_START) != 0){
			end_flg = SELECT_END;
		}
		
		if(end_flg != 0){
			break;
		}
	}
	
	ini_palette();
	set_default_color();
	
	return end_flg;
}

