/*

01234567890123456789012345678901234567890123456789012345678901234567890123456789--------------------------------------------------------------------------------|                                                xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxx||xxxxxxxxxxxxxx||xxxxxxxxxxxxxx||xxxxxxxxxxxxxx||xxxxxxxxxxxxxx| 条件くりあっ☆  見たいなぁ○  印刷しませう(^_^)  こぴっちゃお(^_^;  またねっ♪
 もどろ〜ねっ☆
--------------------------------------------------------------------------------|                        お好みのメニュ−をどうぞ                              |                                   なにがいい？
|xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxx|--------------------------------------------------------------------------------|          作    品    名           ||         作    者    名        ||ＴＭＢＤ|--------------------------------------------------------------------------------|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||☆☆☆☆||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||☆☆☆☆|
0	  1         2         3         4         5         6         7
01234567890123456789012345678901234567890123456789012345678901234567890123456789|               作    品    名                ||         作    者    名        |          　    た・い・と・る                           つくったひと☆
--------------------------------------------------------------------------------|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx||xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|--------------------------------------------------------------------------------| 0123 プログラムがあるよ     | 前  項 | | 次  項 | 
       作品あるよっ♪            まえ      うしろ
--------------------------------------------------------------------------------
*********************/

#include    <stdio.h>
#include    <stdlib.h>
#include    <stdarg.h>
#include    <mos.h>
#include    "keyword.h"
#include    "graphic.h"
#include    "scrn.h"
#include    "coldef.h"
#include    "bitmap.h"

#define	MSG_X	    (38*8)
#define	MSG_Y	    4
#define	MSG_X1	    (MSG_X-4)
#define	MSG_Y1	    (MSG_Y-2)
#define	MSG_X2	    (MSG_X+41*8+3)
#define	MSG_Y2	    (MSG_Y+17)

#define CLER_X      (1*8)
#define CLER_Y      26
#define	CLER_X1	    (CLER_X-4)
#define	CLER_Y1	    (CLER_Y-2)
#define	CLER_X2	    (CLER_X+14*8+3)
#define	CLER_Y2	    (CLER_Y+17)

#define LIST_X      (17*8)
#define LIST_Y      26
#define	LIST_X1	    (LIST_X-4)
#define	LIST_Y1	    (LIST_Y-2)
#define	LIST_X2	    (LIST_X+14*8+3)
#define	LIST_Y2	    (LIST_Y+17)

#define PRNT_X      (33*8)
#define PRNT_Y      26
#define	PRNT_X1	    (PRNT_X-4)
#define	PRNT_Y1	    (PRNT_Y-2)
#define	PRNT_X2	    (PRNT_X+14*8+3)
#define	PRNT_Y2	    (PRNT_Y+17)

#define INST_X      (49*8)
#define INST_Y      26
#define	INST_X1	    (INST_X-4)
#define	INST_Y1	    (INST_Y-2)
#define	INST_X2	    (INST_X+14*8+3)
#define	INST_Y2	    (INST_Y+17)

#define EXIT_X      (65*8)
#define EXIT_Y      26
#define	EXIT_X1	    (EXIT_X-4)
#define	EXIT_Y1	    (EXIT_Y-2)
#define	EXIT_X2	    (EXIT_X+14*8+3)
#define	EXIT_Y2	    (EXIT_Y+17)

#define KEY_X		8
#define KEY_Y		69
#define KEY_L		(18*8)
#define KEY_S		(20*8)
#define KEY_POS_X(n)	((n%4)*KEY_S+KEY_X)
#define KEY_POS_Y(n)	((n/4)*23+KEY_Y)

#define	PRG_NAME_X	8
#define	PRG_MAKE_X	(47*8)
#define	PRG_BITS_X	(71*8)
#define	PRG_NAME_L	(44*8+6)
#define	PRG_MAKE_L	(31*8+6)
#define	PRG_BITS_L	(8*8)
#define	PRG_Y	    	252
#define PRG_POS_Y(n)	((n)*23+PRG_Y)

#define	MSG2_X		(1*8)
#define	MSG2_Y		460

#define	BACK_X		(29*8)
#define	BACK_Y		460
#define	BACK_X1		(BACK_X-4)
#define	BACK_Y1		(BACK_Y-2)
#define	BACK_X2		(BACK_X+8*8+3)
#define	BACK_Y2		(BACK_Y+17)

#define	NEXT_X		(39*8)
#define	NEXT_Y		460
#define	NEXT_X1		(NEXT_X-4)
#define	NEXT_Y1		(NEXT_Y-2)
#define	NEXT_X2		(NEXT_X+8*8+3)
#define	NEXT_Y2		(NEXT_Y+17)

#define	TITL_X1		(18 * 8)
#define	TITL_Y1		232
#define	TITL_X2		(TITL_X1 + 8 * 8)
#define	TITL_Y2		(TITL_Y1 + 15)

#define	WRIT_X1		(59 * 8)
#define	WRIT_Y1		232
#define	WRIT_X2		(WRIT_X1 + 8 * 8)
#define	WRIT_Y2		(WRIT_Y1 + 15)

static	int	sw_flg[16];
static	char	*sw_img[16];

int	MOS_stei(int x1, int y1, int x2, int y2, int rp)
{
    int stat=0;
    int cl, sw, x, y;
    int tk;

    for ( ; ; ) {
	MOS_rdpos(&sw,&x,&y);
	if ( x >= x1 && x <= x2 && y >= y1 && y <= y2 )
	    cl = 1;
	else
	    cl = 0;

	switch(stat) {
	case 0:
	    if ( cl == 0 || sw == 0 )
		return 0;
	    MOS_disp(OFF);
	    DSP_box(x1,y1,x2,y2,8,M_XOR);
	    MOS_disp(ON);
	    stat = 1;
	    tk = tick_timer + 50;
	    break;

	case 1:
	    if ( sw == 0 || cl == 0 ) {
		MOS_disp(OFF);
		DSP_box(x1,y1,x2,y2,8,M_XOR);
		MOS_disp(ON);
	        if ( sw == 0 && cl != 0 )
		    return 1;
		else
		    return 0;

	    } else if ( rp != 0 && tk <= tick_timer &&
			sw != 0 && cl != 0 ) {
		MOS_disp(OFF);
		DSP_box(x1,y1,x2,y2,8,M_XOR);
		MOS_disp(ON);
		return 1;
	    }
	    break;
	}
    }
}
int	MENU_no(int rc)
{
    int     i,sw,x,y;
    static struct {
	int	x1,y1,x2,y2;
	int	no;
	int	*sw;
	int	rp;
    } event_tbl[]={
	{ CLER_X1,CLER_Y1,CLER_X2,CLER_Y2,CLER_NO,&sw_flg[0],0 },
	{ LIST_X1,LIST_Y1,LIST_X2,LIST_Y2,LIST_NO,&sw_flg[1],0 },
	{ PRNT_X1,PRNT_Y1,PRNT_X2,PRNT_Y2,PRNT_NO,&sw_flg[2],0 },
	{ INST_X1,INST_Y1,INST_X2,INST_Y2,INST_NO,&sw_flg[3],0 },
	{ EXIT_X1,EXIT_Y1,EXIT_X2,EXIT_Y2,EXIT_NO,&sw_flg[4],0 },
	{ BACK_X1,BACK_Y1,BACK_X2,BACK_Y2,BACK_NO,&sw_flg[5],1 },
	{ NEXT_X1,NEXT_Y1,NEXT_X2,NEXT_Y2,NEXT_NO,&sw_flg[6],1 },
	{ 0,0,0,0,NON_NO }
    };

    MOS_rdpos(&sw,&x,&y);
    if ( sw == 0 )
	return NON_NO;

    for ( i = 0 ; event_tbl[i].no != NON_NO ; i++ ) {
	if ( *event_tbl[i].sw != 0 &&
	     MOS_stei(event_tbl[i].x1,event_tbl[i].y1,
		      event_tbl[i].x2,event_tbl[i].y2,
		      event_tbl[i].rp) != 0 )
	    return event_tbl[i].no;
    }

    if ( rc == 0 )
	return NON_NO;

    if ( MOS_stei(TITL_X1, TITL_Y1, TITL_X2, TITL_Y2, 0) != 0 )
	return TITL_NO;

    if ( MOS_stei(WRIT_X1, WRIT_Y1, WRIT_X2, WRIT_Y2, 0) != 0 )
	return WRIT_NO;

    for ( i = 0 ; i < 28 ; i++ ) {
	if ( MOS_stei(KEY_POS_X(i) - 4, KEY_POS_Y(i) - 2,
		KEY_POS_X(i) + KEY_L + 3, KEY_POS_Y(i) + 17, 0) != 0 )
/*******************************************
	if ( x >= (KEY_POS_X(i)-4) && y >= (KEY_POS_Y(i)-2) &&
	     x <= (KEY_POS_X(i)+KEY_L+3) && y <= (KEY_POS_Y(i)+17) )
********************************************/
	    return (KEY_NO + i);
    }

    for ( i = 0 ; i < 9 ; i++ ) {
	if ( prg_tbl[i] != NULL &&
	     ( MOS_stei(PRG_NAME_X-4,PRG_POS_Y(i)-2,
	              PRG_NAME_X+PRG_NAME_L+3,PRG_POS_Y(i)+17,0) != 0 ||
	       MOS_stei(PRG_MAKE_X-4,PRG_POS_Y(i)-2,
	              PRG_MAKE_X+PRG_MAKE_L+3,PRG_POS_Y(i)+17,0) != 0 ) )
/**********************************************************************
	       MOS_stei(PRG_BITS_X-4,PRG_POS_Y(i)-2,
	              PRG_BITS_X+PRG_BITS_L+3,PRG_POS_Y(i)+17,0) != 0 ) )
***********************************************************************/
	    return (PRG_NO+i);
    }

    return NON_NO;
}
void	KEY_disp(int no)
{
    MOS_disp(OFF);
    DSP_box(KEY_POS_X(no)-4,KEY_POS_Y(no)-2,
	    KEY_POS_X(no)+KEY_L+3,KEY_POS_Y(no)+17,
	    8,M_XOR);
    MOS_disp(ON);
}
void	KEY_putstr(int no,char *key)
{
    MOS_disp(OFF);
    gprintf(KEY_POS_X(no),KEY_POS_Y(no),CHR_COL,KEY_COL,"%-18.18s",key);
    MOS_disp(ON);
}
void	PRG_disp(int no,char *prog,char *make,int bits)
{
    MOS_disp(OFF);
    gprintf(PRG_NAME_X,PRG_POS_Y(no),CHR_COL,PRG_COL,"%-44.44s",prog);
    gprintf(PRG_MAKE_X,PRG_POS_Y(no),CHR_COL,PRG_COL,"%-31.31s",make);
/*****************************************************************
    gprintf(PRG_BITS_X,PRG_POS_Y(no),ACT_COL,PRG_COL,"%s%s%s%s",
	(bits & 1) ? "☆":"  ",
	(bits & 2) ? "☆":"  ",
	(bits & 4) ? "☆":"  ",
	(bits & 8) ? "☆":"  ");
********************************************************************/
    MOS_disp(ON);
}
void	MSG_disp(char *form,...)
{
    va_list arg;
    char    tmp[256];

    va_start(arg,form);
    vsprintf((char *)tmp,form,arg);
    MOS_disp(OFF);
    gputs(MSG_X,MSG_Y,CHR_COL,MENU_COL,tmp);
    MOS_disp(ON);
    va_end(arg);
}
void	MSG2_disp(char *form,...)
{
    va_list arg;
    char    tmp[256];

    va_start(arg,form);
    vsprintf((char *)tmp,form,arg);
    MOS_disp(OFF);
    gputs(MSG2_X,MSG2_Y,CHR_COL,PRG_COL,tmp);
    MOS_disp(ON);
    va_end(arg);
}
/***********************************************
void	MENU_mask(int no,int sw)
{
    static struct {
	int	x,y;
	int	back;
	char	*str;
	int	*sw;
    } menu_tbl[]={
	{ CLER_X,CLER_Y,MENU_COL,"    CANCEL    ",&sw_flg[0] },
	{ LIST_X,LIST_Y,MENU_COL,"     LOOK     ",&sw_flg[1] },
	{ PRNT_X,PRNT_Y,MENU_COL,"    PRINT     ",&sw_flg[2] },
	{ INST_X,INST_Y,MENU_COL,"   INSTALL    ",&sw_flg[3] },
	{ EXIT_X,EXIT_Y,MENU_COL,"     EXIT     ",&sw_flg[4] },
	{ BACK_X,BACK_Y,PRG_COL, "  BACK  "      ,&sw_flg[5] },
	{ NEXT_X,NEXT_Y,PRG_COL, "  NEXT  "      ,&sw_flg[6] },
	{ CLER_X,CLER_Y,MENU_COL,"    CANCEL    ",&sw_flg[0] },
	{ LIST_X,LIST_Y,MENU_COL,"     LOOK     ",&sw_flg[1] },
    };

    MOS_disp(OFF);
    gputs(menu_tbl[no].x,menu_tbl[no].y,
	sw == ON ? CHR_COL:XCHR_COL, menu_tbl[no].back,
	menu_tbl[no].str);
    MOS_disp(ON);
    *menu_tbl[no].sw = sw;
}
*********************************************************/
void	MENU_mask(int no,int sw)
{
    static struct {
	int	x,y;
	int	back;
	char	*str;
	int	sw;
    } menu_tbl[]={
	{ CLER_X+28,CLER_Y+3,MENU_COL,cancel_img, 0 },
	{ LIST_X+36,LIST_Y+3,MENU_COL,look_img,   1 },
	{ PRNT_X+34,PRNT_Y+3,MENU_COL,print_img,  2 },
	{ INST_X+28,INST_Y+3,MENU_COL,install_img,3 },
	{ EXIT_X+38,EXIT_Y+3,MENU_COL,exit_img,   4 },
	{ BACK_X+14,BACK_Y+3,PRG_COL, back_img,   5 },
	{ NEXT_X+14,NEXT_Y+3,PRG_COL, next_img,   6 },
	{ CLER_X+28,CLER_Y+3,MENU_COL,cancel_img, 0 },
	{ LIST_X+36,LIST_Y+3,MENU_COL,look_img,   1 },
	{ EXIT_X+38,EXIT_Y+3,MENU_COL,exec_img,   4 },
    };

    MOS_disp(OFF);
    if ( sw_img[menu_tbl[no].sw] != NULL &&
	 sw_img[menu_tbl[no].sw] != menu_tbl[no].str )
	DSP_strcls(sw_img[menu_tbl[no].sw],
		menu_tbl[no].x,menu_tbl[no].y,
		menu_tbl[no].back, M_PSET);
    DSP_strimg(menu_tbl[no].str,
	menu_tbl[no].x,menu_tbl[no].y,
	(sw == ON ? XCHR_COL:CHR_COL), menu_tbl[no].back, M_PSET);
    MOS_disp(ON);
    sw_flg[menu_tbl[no].sw] = sw;
    sw_img[menu_tbl[no].sw] = menu_tbl[no].str;
}
void	SCRN_init(void)
{
    int     i;

    MOS_disp(OFF);
    DSP_rbox(0,0,639,47,LINE_COL,MENU_COL,M_PSET);	/* Main Menu Back */
    DSP_rbox(0,47,639,230,LINE_COL,KEY_COL,M_PSET);	/* KeyWord Menu Back */
    DSP_rbox(0,230,639,479,LINE_COL,PRG_COL,M_PSET);	/* Prog Menu Back */

    DSP_wbox(CLER_X1,CLER_Y1,CLER_X2,CLER_Y2,LINE_COL,MENU_COL,M_PSET);
    DSP_wbox(LIST_X1,LIST_Y1,LIST_X2,LIST_Y2,LINE_COL,MENU_COL,M_PSET);
    DSP_wbox(PRNT_X1,PRNT_Y1,PRNT_X2,PRNT_Y2,LINE_COL,MENU_COL,M_PSET);
    DSP_wbox(INST_X1,INST_Y1,INST_X2,INST_Y2,LINE_COL,MENU_COL,M_PSET);
    DSP_wbox(EXIT_X1,EXIT_Y1,EXIT_X2,EXIT_Y2,LINE_COL,MENU_COL,M_PSET);

    DSP_wbox(BACK_X1,BACK_Y1,BACK_X2,BACK_Y2,LINE_COL,PRG_COL,M_PSET);
    DSP_wbox(NEXT_X1,NEXT_Y1,NEXT_X2,NEXT_Y2,LINE_COL,PRG_COL,M_PSET);

    for ( i = 0 ; i < 28 ; i++ ) {
	DSP_wbox(KEY_POS_X(i)-4,KEY_POS_Y(i)-2,
		 KEY_POS_X(i)+KEY_L+3,KEY_POS_Y(i)+17,
		 LINE_COL,KEY_COL,M_PSET);
    }
    for ( i = 0 ; i < 9 ; i++ ) {
	DSP_wbox(PRG_NAME_X-4,PRG_POS_Y(i)-2,
		 PRG_NAME_X+PRG_NAME_L+3,PRG_POS_Y(i)+17,
		 LINE_COL,PRG_COL,M_PSET);
	DSP_wbox(PRG_MAKE_X-4,PRG_POS_Y(i)-2,
		 PRG_MAKE_X+PRG_MAKE_L+3,PRG_POS_Y(i)+17,
		 LINE_COL,PRG_COL,M_PSET);
/**********************************************************
	DSP_wbox(PRG_BITS_X-4,PRG_POS_Y(i)-2,
		 PRG_BITS_X+PRG_BITS_L+3,PRG_POS_Y(i)+17,
		 LINE_COL,PRG_COL,M_PSET);
***********************************************************/
    }

/********
    DSP_msg("Free Software Collection Helper",
		8,4,5,ERR_COL,MENU_COL,M_PSET);
    gputs((35*8),50,CHR_COL,KEY_COL,"MEMU SELECT");
    gputs((16*8),232,CHR_COL,PRG_COL,"TITLE");
    gputs((57*8),232,CHR_COL,PRG_COL,"WRITER");
*********/

    DSP_strimg(helper_img,
		8, 6, ERR_COL, MENU_COL, M_PSET);
    DSP_strimg(menu_img,
		35 * 8, 53, CHR_COL, KEY_COL, M_PSET);

    DSP_strimg(title_img,
		20 * 8, 235, CHR_COL, PRG_COL, M_PSET);
    DSP_strimg(writer_img,
		60 * 8, 235, CHR_COL, PRG_COL, M_PSET);

/******************************************
    gputs((71*8),242,XPRG_COL,PRG_COL,"ＴＭＢＤ");
*******************************************/
    MOS_disp(ON);

    MENU_mask(CLER_NO,OFF);
    MENU_mask(LIST_NO,OFF);
    MENU_mask(PRNT_NO,OFF);
    MENU_mask(INST_NO,OFF);
    MENU_mask(EXIT_NO,OFF);
    MENU_mask(BACK_NO,OFF);
    MENU_mask(NEXT_NO,OFF);
}
