/*
 * KON2 - Kanji ON Console -
 * Copyright (C) 1992-1996 Takashi MANABE (manabe@papilio.tutics.tut.ac.jp)
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY TAKASHI MANABE ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE TERRENCE R. LAMBERT BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 * 
 */

/* vc -- high-level console driver */

#ifndef VC_H
#define VC_H

#define	ATTR_ULINE	0x80	/* under line */
#define	ATTR_REVERSE	0x40	/* reverse */
#define	ATTR_HIGH	0x20	/* high */

#define	LATCH_S		0x0 /* single byte char */
#define	LATCH_1		0x20 /* double byte char 1st byte */
#define	LATCH_2		0x40 /* double byte char 2nd byte */

#define	CLEAN_S		0x80
#define	CODEIS_1	LATCH_1
#define	CODEIS_2	LATCH_2
#define	LANG_CODE	0x0F
/*
#define	LANG_DCODE	LANG_CODE|CODEIS_1
#define	LANG_SCODE	LANG_CODE
*/

extern void	ConsoleInit(const char *video_type);
extern void	ConsoleStart(void);
extern void	ConsoleCleanup(void);
extern void	TextClearAll(void);
extern void	TextClearEol(u_char);
extern void	TextClearEos(u_char);
extern void	TextDeleteChar(int);
extern void	TextInsertChar(int);
extern void	TextMoveDown(int top, int btm, int line);
extern void	TextMoveUp(int top, int btm, int line);
extern void	TextMode(void);
extern void	GraphMode(void);
extern void	ScrollUp(int);
extern void	ScrollDown(int);
extern void	TextWput(u_char ch1, u_char ch2);
extern void	TextSput(u_char ch);
extern void	TextReverse(int fx, int fy, int tx, int ty);
extern void	TextRefresh(void);
extern void	TextInvalidate(void);
extern void	TextCopy(int fx, int fy, int tx, int ty);
extern void	TextPaste(void);
extern void	PollCursor(bool wakeup); /* Called to wakeup, or every 0.1 sec when idle */
extern void	Beep(void);

struct cursorInfo {
    short kanji;	 /* �����ξ�ˤ���� TRUE */
    u_int addr;		 /* VRAM ���ɥ쥹 */
    bool sw;		 /* FALSE �ʤ�ɽ���ػ� */
    int	interval;	 /* ���Ǵֳ� */
    int	count;		 /* �����ѥ������ */
    bool shown;		 /* ɽ����ե饰 */
};

/* video driver interface */
struct videoInfo {
    bool
	has_hard_scroll;	 /* �ϡ��ɥ��������뤬�Ȥ��뤫�ɤ��� */
    void
	(*init)(void),		 /* ����� */
	(*text_mode)(void),	 /* �ƥ����ȥ⡼�ɤ����ؤ� */
	(*graph_mode)(void),	 /* ����ե��å��⡼�ɤ����ؤ� */
	(*wput)(u_char *code, u_char fc, u_char bc), /* �������� */
	(*sput)(u_char *code, u_char fc, u_char bc), /* ANK���� */
	(*set_cursor_address)(struct cursorInfo *c, u_int x, u_int y),
	/* �������� c �Υ��ɥ쥹�� (x,y) ������ */
	(*set_address)(u_int i),
	/* ʸ���񤭹��ߥ��ɥ쥹�� i ʸ���ܤ����� */
	(*cursor)(struct cursorInfo *),	/* ���������ȥ��� */
	(*clear_all)(void),	 /* ���̥��ꥢ */
	(*screen_saver)(bool),	 /* �����꡼��֥��/����֥�� */
	(*detatch)(void),	 /* �ɥ饤�в��� */
	/* �ϡ��ɥ��������뤬�Ȥ��ʤ���аʲ���NULL */
	(*set_start_address)(void),	/* ɽ�����ϥ��ɥ쥹���� */
	(*hard_scroll_up)(int lines), 	/* �ϡ��ɥ��������륢�å� */
	(*hard_scroll_down)(int lines);	/* �ϡ��ɥ�������������� */
};

struct dispInfo {
    int
	gsize;
    short
	gxdim,
	gydim,
	txmax,
	tymax,
	glineChar,	/* text ����ʬ�� graph �Կ� */
	glineByte,	/* graph ����ʬ�ΥХ��ȿ� */
	tlineByte;	/* text ����ʬ�ΥХ��ȿ� */
};

extern struct dispInfo		dInfo;
extern struct cursorInfo	cInfo;
extern struct videoInfo		vInfo;

#endif