/***   [whelp.c]
*
*	ヘルプウィンドウ		(C)ささがわ
*
*	For GNU C Compiler (GCC)   Version 1.39
*
***/

#include <mos.h>
#include "graph.h"
#include "window.h"
#include "others.h"

#define WH_CAN		1
#define WH_TITLE	2
#define WH_BACK		3
#define WH_NEXT		4
#define WH_OTHER	0

extern int	PAL_Black, PAL_Button;
static int	wx, wy;
static int	nPage = 8, Page;
const static char	*help[][8] = {
	{
	/*	"                  40桁                  "	*/
		"",
		"       ＷＳＴｙｐｅ   Version 1.0",
		"",
		"",
		"           補  足  説  明  書",
		"",
		"",
		"  Copyright (C)ささがわ   Aug. 18, 1991 "
	}, {
		"・影付きのウィンドウは特別な扱いに",
		"  なっています  他を操作したい場合は",
		"  それを消してから行ってください",
		"",
		"・ワイド型ファイルセレクタを操作中",
		"  ツリー表示を中断させたい場合は",
		"  マウスの右ボタンをクリックして",
		"  ください                           1/7"
	}, {
		"・警告音のＰＣＭサウンドには",
		"  再生できる音程に限界があります",
		"",
		"・スコープを移動する場合は 画面左上の",
		"  ボタン上で左ボタンを押し １秒ほど",
		"  待ってからドラッグさせ ボタンから手を",
		"  放してください",
		"                                     2/7"
	}, {
		"《起動時オプション》",
		"  ◆表示方法",
		"    /tabm {0|1}        ﾀﾌﾞ記号の表示(0)",
		"    /crm {0|1}        改行記号の表示(1)",
		"    /tab {1|2|4|8}             ﾀﾌﾞ長(8)",
		"    /lg {0〜4}                行間隔(2)",
		"    /lc {0|20〜500}            横幅(80)",
		"                                     3/7"
	}, {
		"  ◆背景画",
		"    /bg-tiff <ﾌｧｲﾙ名>          TIFFﾌｧｲﾙ",
		"    /bg-tile <ﾌｧｲﾙ名> <番号>     ﾀｲﾘﾝｸﾞ",
		"    /bg-beta <色番号>           ﾍﾞﾀ塗り",
		"",
		"  ◆スクロール",
		"    /scspd {0〜4}       ｽｸﾛｰﾙ･ｽﾋﾟｰﾄﾞ(2)",
		"                                     4/7"
	}, {
		"  ◆警告音",
		"    /wa-beep                    ﾋﾞｰﾌﾟ音",
		"    /wa-pcm <ﾌｧｲﾙ名>           pcmｻｳﾝﾄﾞ",
		"",
		"  ◆ファイルセレクタ",
		"    /fcap {0|1}       0:小文字 1:大文字",
		"    /fsort {0〜3}               ｿｰﾄ方法",
		"                                     5/7"
	}, {
		"    /fwide {0|1}          0:標準 1:ﾜｲﾄﾞ",
		"",
		"  ◆その他",
		"    /m             終了時にMS-DOS画面へ",
		"",
		"    頭に / の付かないものは",
		"              ﾃｷｽﾄﾌｧｲﾙ名と見なします",
		"                                     6/7"
	}, {
		"《作者からの一言》",
		"",
		"    その他、質問・要望等がありましたら",
		"    作者までご連絡ください。",
		"    （感想・バグの報告などもお待ち）",
		"    （しています。                ）",
		"",
		"                                     7/7"
	}
};

static void	Open_window(void);
static int	Where(int, int);
static void	DrawHelp(void);
static void	SUB_page(int);
static int	SUB_page_sub(int);
static void	Indicate(int, int);

void WIND_help(void) {
	int		ret = 0;
	
	wx = 152;
	wy = 142;
	{
		struct RECT	a, b;
		
		a.x1 = 319;	a.y1 = 259;
		a.x2 = 320;	a.y2 = 260;
		b.x1 = wx;	b.y1 = wy;
		b.x2 = wx + 335;	b.y2 = wy + 196;
		afterImage(&a, &b);
	}
	
	Page = 0;
	Open_window();
	while (!ret) {
		char	mb;
		int		mx, my;
		
		CLOCK(0);
		if (MOS_rdpos(&mb, &mx, &my), !(mb & 1))
			continue;
		
		switch (Where(mx, my)) {
			case WH_CAN:
				if (Button(wx + 6, wy + 6, wx + 25, wy + 25))
					ret = -1;
				break;
			
			case WH_TITLE:
				{
					struct RECT	w, s;
					
					s.x1 = 0;	s.y1 = 40;
					s.x2 = 639;	s.y2 = 463;
					w.x1 = wx;	w.y1 = wy;
					w.x2 = wx + 335;	w.y2 = wy + 196;
					if (dragWindow(mx, my, &w, &s, 0, 0)) {
						wx = w.x1;	wy = w.y1;
						MOS_disp(0);
						EGB_cls(0);
						MOS_disp(1);
						Open_window();
					}
				}
				break;
			
			case WH_BACK:	SUB_page(0);	break;
			case WH_NEXT:	SUB_page(1);	break;
			
			default:
				while (MOS_rdpos(&mb, &mx, &my), mb & 1);
				break;
		}
	}
	
	return;
}

static void Open_window(void) {
	int		a[2] = {4, 4};
	struct opnwin_t	opw;
	
	opw.title = "ヘ ル プ";
	opw.x1 = wx;
	opw.y1 = wy;
	opw.x2 = opw.x1 + 335;
	opw.y2 = opw.y1 + 196;
	opw.shdw = 1;
	opw.canb = 1;
	opw.nopt = 2;
	opw.wopt = a;
	opw.expb = 0;
	opw.ord = 0;
	
	MOS_disp(0);
	drawWindow(&opw);
	Indicate(1, 1);
	DrawHelp();
	MOS_disp(1);
}

static int Where(int x, int y) {
	int		ret;
	
	x -= wx;
	y -= wy;
	if (5 < x && x < 26 && 5 < y && y < 26)
		ret = WH_CAN;
	else if (26 < x && x < 256 && 5 < y && y < 26)
		ret = WH_TITLE;
	else if (256 < x && x < 293 && 5 < y && y < 26)
		ret = WH_BACK;
	else if (293 < x && x < 330 && 5 < y && y < 26)
		ret = WH_NEXT;
	else
		ret = WH_OTHER;
	
	return ret;
}

static void Indicate(int a, int b) {
	if (a)
		EGB_str("前頁", wx + 259, wy + 23, Page > 0 ? PAL_Black : 7);
	if (b)
		EGB_str("次頁", wx + 296, wy + 23, Page < nPage - 1 ? PAL_Black : 7);
}

static void DrawHelp(void) {
	int		i;
	
	EGB_boxf(wx + 8, wy + 29, wx + 327, wy + 188, 7, 7);
	for (i = 0; i < 8; i++)
		EGB_str3(help[Page][i], wx + 8, wy + 46 + i * 20, PAL_Black, 7);
}

static void SUB_page(int mode) {
	int		flpush = 1, fllast = 0;
	int		lx, ly, mx, my;
	char	mb;
	
	if (mode && Page >= nPage - 1 || !mode && Page <= 0) {
		while (MOS_rdpos(&mb, &mx, &my), mb & 1);
		return;
	}
	
	lx = wx + (mode ? 294 : 257);
	ly = wy + 6;
	
	EGB_rev(1, lx, ly, lx + 35, ly + 19);
	fllast = SUB_page_sub(mode);
	TIMER_set(30);
	while (MOS_rdpos(&mb, &mx, &my), mb & 1 && !fllast) {
		int		whres;
		
		whres = Where(mx, my) == (mode ? WH_NEXT : WH_BACK);
		if (!whres && flpush || whres && !flpush) {
			EGB_rev(1, lx, ly, lx + 35, ly + 19);
			flpush = !flpush;
		}
		
		if (flpush && TIMER())
			fllast = SUB_page_sub(mode);
	}
	
	MOS_disp(0);
	Indicate(1, 1);
	MOS_disp(1);
	if (fllast)
		while (MOS_rdpos(&mb, &mx, &my), mb & 1);
}

static int SUB_page_sub(int mode) {
	int		result = 1;
	
	if (mode && Page < nPage - 1 || !mode && Page > 0) {
		mode ? Page++ : Page--;
		MOS_disp(0);
		DrawHelp();
		Indicate(mode ? 1 : 0, mode ? 0 : 1);
		MOS_disp(1);
		result = 0;
	}
	
	return result;
}
