/*---------------------------------------------------------------------------
 * BMPSAVER 画面保存
 * bsscr.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ファイルに保存 （前バージョンとの互換性）*/
int bs_save_bmp(const char far *fn, int x, int y, int w, int h)
{
	return bs_save_screen(fn, x, y, w, h);
}

/*--------------------------------------------------------------------*/
/* BMPファイルに保存 */
int bs_save_screen(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(&bfi))
	{
		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++)
		{
			bs_putcolor(bs_screen_get_color(src_x, src_y));
		}
	}

	/* 終了 */
	lcd_set_segments(0);
	bs_close();
	return KH_BS_OK;
}
