/*---------------------------------------------------------------------------
 * BMPSAVER 画面保存 (XMODEM版)
 * bsscrxm.c (2000/07/19 - 2000/12/13)
 * Copyright (c) 2000, Kazuhide Hatsuyama, All rights reserved.
 *   mail    : hat@lares.dti.ne.jp
 *   HomePage: http://www.lares.dti.ne.jp/~hat/
 *---------------------------------------------------------------------------*/

#define BIOS_INLINE

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

#include "bsbmp_u.h"
#include "bsscr_u.h"
#include "bmpsaver.h"

/* Bits Per Pixel */
#define KH_BS_BPP_MONO	4
#define KH_BS_BPP_COLOR	8

/*--------------------------------------------------------------------*/
/* BMPファイルに保存 (XMODEM版) */
int bs_save_screen_xmodem(const char far *fn, int x, int y, int w, int h)
{
	static BMPFILEINFO bfi;
	int src_x, src_y;
	unsigned short lcd_indicator = 0x0020;

	/* インジケータ点灯 */
	lcd_set_segments(lcd_indicator);

	/* BMPファイルヘッダー初期化 */
	bs_bmp_init_header(w, h);

	/* 開く */
	bfi.fn = fn;
	bfi.w = w;
	bfi.h = h;
	bfi.bpp = KH_BS_BPP_MONO;
	if(bs_open_xmodem(&bfi)!=KH_BS_OK)
	{
		return KH_BS_ERROR;
	}

	/* 画面情報取得 */
	bs_screen_init_info();

	/* 画像データ書き込み */
	for(src_y=y+h-1;src_y>=y;src_y--)
	{
		/* インジケータ点滅 */
		lcd_indicator = (lcd_indicator+0x0020)&0x0020;
		lcd_set_segments(lcd_indicator);
		for(src_x=x;src_x<x+w;src_x++)
		{
			if(bs_putcolor_xmodem(bs_screen_get_color(src_x, src_y))!=KH_BS_OK)
				goto error;
		}
	}

	/* 終了 */
	lcd_set_segments(0);
	bs_close_xmodem();
	return KH_BS_OK;
error:
	lcd_set_segments(0);
	comm_close();
	return KH_BS_ERROR;
}

