/*
 * term.h
 *
 * Copyright 2004, Minoru Murashima. All rights reserved.
 * Distributed under the terms of the BSD License.
 */


#ifndef term_h
#define term_h


#include<sys/types.h>
#include<proc.h>
#include<share/stropts.h>
#include<sys/termios.h>
#include<sys/time.h>


#ifndef ASM_FILE


enum{
	LINE_BUF_SIZE=90,	/* Line buffer size. */
	TERM_EOF=0xff,		/* EOF character. */

	/* マップコード。 */
	MIN_MAPKEY	= 0x7f,		/* 付加キー最小値。 */
	TRM_UP,					/* ↑キー。 */
	TRM_LFT,				/* ←キー。 */
	TRM_RHT,				/* →キー。 */
	TRM_DWN,				/* ↓キー。 */
};


typedef struct{
	uchar crt;					/* カレントポジション */
	uchar last;					/* ラストポジション */
	uchar lineTop;				/* ライントップポジション */
	uchar pastCrt;				/* 直前のカレントポジション */
	uchar pastLast;				/* 直前のラストポジション */
	char buf[LINE_BUF_SIZE];	/* コンソールバッファ。 */
}LINE_BUF;

typedef struct{
	PROC *ctlProc;				/* 端末制御プロセス。 */
	gid_t foregrnd;				/* フォアグラウンドプロセスグループ。 */
	void (*leftCursor)(int);
	void (*rightCursor)(int);
	void (*inputStr)();
	void (*newLine)();
	void (*carriageRetun)();
	void (*eraseLine)();
	void (*delete)();
	void (*backSpace)();
	void (*tab)();
}TERM_CTL;


extern int isForeground(PROC*);
extern int isCtlproc(PROC*);
extern void releaseTerm(PROC*);
extern int handlTermChr(uchar,struct termios*,TERM_CTL*,LINE_BUF*);
extern int readTermBuf(uchar*,size_t,struct termios*,LINE_BUF*);
extern int isExistTermBuf(struct termios*,LINE_BUF*);


#endif


#endif
