              ˣϣ      ----- Kanji ON Linux console -----

  Υե KON ¤ɥȲΤǤޤ̤Ǥ
Х¤κݤλͤˤƲ

ʸϤή

  KON Ǥϲۥƥ VRAM ̤Ʋ̽ϤԤäƤޤPTY νϤ
BUFSIZ ñ̤ǥե饰Ȳ VT ߥ졼˰ϤޤVT ߥ
졼ϣʸĲϤƲۥƥȤ˽ϤޤĤΥե饰Ȥ
줿ǥ󥽡뤬ƥ֤ʤвۥƥȤƤ򤽤Τޤ VGA ̤˽
ߤޤ

.ü

.VT ߥ졼

¤ con

  VT ߥ졼˱ƥȾ־ con ¤Τ˵Ƥޤ
VT ߥ졼ǤϥƥȺɸϤϺü[0, 0]ȤƷ׻Ƥޤ

struct _con_info {
	char	x,		ߤ X ɸ
		y,		ߤ Y ɸ
		xmax,		X ɸ
		ymin,		Y ɸǾ
		ymax,		Y ɸ
		tab;		TAB Ŀ
	u_char	fcol,		եɥ顼
		bcol,		Хåɥ顼
		attr,		ʸ°ե饰
		sfonth,		ȾѥեȤι⤵
		wfonth,		ѥեȤι⤵
		knj1;		裱Х
	enum {
		ESC_NEUTRAL,	ESC 
		ESC_START,	'\x1B' 
		ESC_BRA,	'[' 
		ESC_SI,		'$' 
		ESC_SO,		'(' 
		ESC_QUESTION,	'?' 
	}	esc;		ץ󥹤ξѿ
	bool	knj,		JIS ⡼ɥե饰
		soft,		եȥե饰
		ins,		⡼ɥե饰
		active,		ƥ֥󥽡ե饰
		saved,		Ƥդɻ߾
		wrap;		wrap ֥ե饰
};

ѿ scrollLine

  con.y ꡼(con.ymincon.ymax ϰ)ˤʤХ뤹ɬפ
ͭޤuum ʤɤ FEP Ǥϥƥ饤ʸϤݤɬ꡼
󳰤ˤʤޤǡ\Ey:xH ˤ륫ưФƤϥ뤷ʤ
褦ˤޤʳˡ con.y ꡼󳰤˽Фϡѿ
scrollLine ŬʥԿûޤcon.ymin 꾮
con.ymax 礭줾ûޤ楳(ɽԲǽ
ʸ)Ϥ줿ѿ scrollLine ºݤΥȿǤޤ

.ۥƥ

  ۥƥȤϣĤΥХåեʤޤ

ƥȥХåե

  ƥȤΥ饯ɤǼޤȾʸϤ ASCII ɤΤ
޳Ǽޤξ EUC/SJIS Ȥ JIS ɤѴƳǼޤ
ޤBIG5 Ǥ Mule ĥ "ESC$(0"  BIG5  16bit ɤѴ
ǼޤޤEUC ξϤɤθǤƱͤ 8bit ƳǼ
ޤΤǡBIG5  EUC ˤȾޤ

°Хåե

  °ξ󤬳Ǽޤʸξϼ㤤ɥ쥹ˤǼ
ޤ󡣳ƥӥåȤΰ̣ϰʲͤʤΤˤʤäƤޤ

	MSB                   LSB
	|b7|b6|b5|b4|b3|b2|b1|b0|

	b2b0:	եɿ
	b3:	̤
	b6b4:	Хåɿ
	b7:	°

ե饰Хåե

  ե饰ХåեϳƥȤѹȸäƤޤMSBѹ
ǡƥȤؤν񤭹ߤ 0 ˤʤꡢ줬²̤ȿǤ 1 
ʤޤ 2bit  Double Byte ɤ̣Ƥꡢ 1 ХȤʤ b5
 2 ХȤʤ b6  1 Ȥʤޤ 1 ХȤ b3-b0 ˤϸ
ޤ塢б줬 b4 뤤  2 ХȤζӥåȤ
ƤͽǤ롣ϡ

	enum {
	    DF_GB2312,
	    DF_JISX0208,
	    DF_KSC5601,
	    DF_JISX0212,
	    DF_BIG5_0,
	    DF_BIG5_1
	    };

Ƥޤ

	MSB                                   LSB
	|     b7|     b6|     b5|b4||b3|b2|b1|b0|
	|CLEAN_S|LATCH_2|LATCH_1|  ||<--------->|
	|0=latch|  byte2|  byte1|  ||       LANG|

  80x30  ɸ VGA ̤ǥƥȺɸ[5, 3]([0, 0])ˡ1פطʿ
̵ɽȡ

	Хɥ쥹: 80 x 3 + 5 = 245
	1פ ASCII : 0x31
	֤פ JIS : 0x2422
	طʿʤ: 00000111(B) = 0x07

	textBuff[245] = 0x31
	attrBuff[245] = 0x07
	flagBuff[245] = 0x00

	textBuff[246] = 0xA2
	textBuff[247] = 0x24
	attrBuff[246] = 0x07
	attrBuff[247] = 0x07
	flagBuff[246] = 0x22
	flagBuff[247] = 0x40

Ȥʤޤ	

VGA

  ۥƥȤѤ뤳Ȥˤ VGA ʬ򾮤뤳ȤǤޤ
EGA ʤɤؤΰܿڤˤʤäȻפޤ

.쥸

.

¤ dInfo

  ɽǽϤ򼨤¸Ƥޤͤ kon.cfg ɤ߹ޤ줿Ρ
뤤Ϥˤ껻Ф줿ΤǤ

struct dispInfo {
	int	gsize;		եåꥵ
				= glineByte * gydim
	short	gxdim,		եå X ɥåȿ
				glineChar ܤˤʤ褦줿
		gydim,		եå Y 饤
		txmax,		ƥ X (con.xmax ν)
		tymax,		ƥ Y (con.ymax ν)
		glineChar,	ƥȣʬΥեå饤
				= gydim / (tymax + 1)
		glineByte,      եåʬΥХȿ
				= gxdim / 8
		tlineByte;      ƥȣʬΥեåХȿ
				= glineChar * glineByte
};

¤ cInfo

  ˴ؤǤǲ϶ʤɽ̣Ƥꡢ꡼
СΥ󥿡ˤȤƤޤaddr  VgaSetCursorAddress ˤä
׻ޤkanji ϥ֤ѤʤͤȤʤޤɽå
ESC 󥹤ˤäޤ

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

.WideText

  KON Ǥ VGA ٥⡼ɤ˰ܹԤ뤿 VGA  CRT 쥸 MISC
쥸 kon.cfg եǻǤͤˤƤޤVGA εʤ餹
800x600 ޤǤβ٤Ǥ CRT 쥸 MISC 쥸Τߤˤä VGA
β٤ѹǤ褦˻פΤǤSVGA ɤʣΥ⡼ɤؤ
¾Υ쥸˰¸Ƥ褦Ǥ

¤ regText, regGraph

  VGA Υ쥸ǤregGraph ξ CRT 쥸misc 쥸
kon.cfg ɤ߹ޤޤCRT 쥸Ϲ˷׻ܤޤdInfo.gydim
 kon.cfg ɤ߹ޤɽͭͤѴޤͤ VGA ¦
ɽ饤ѹɬפޤɽ饤 CRT 쥸ˤꡢ
	0x12 ӥå  : 16ӥå
	0x07 裲ӥå: 裹ӥå
	0x07 裷ӥå: 10ӥå
ȤʤäƤޤΤǡ
        regGraph.crt[0x12] = (dInfo.gydim - 1) & 0xFF;
        regGraph.crt[7] &= 0xBD;
        regGraph.crt[7] |= ((dInfo.gydim - 1) & 0x100) >> 7;
        regGraph.crt[7] |= ((dInfo.gydim - 1) & 0x200) >> 3;
ȤܤƤޤ

struct vgaRegs {
	u_char  crt[VGACRT_CNT],	CRT 쥸
		att[VGAATTR_CNT],	°쥸
		gra[VGAGRP_CNT],	եå쥸
		seq[VGASEQ_CNT],	
		mis;			misc 쥸
};

ѿ LineComp8, LineComp9

  饤ӥ쥸 0x18 ˤޤ裹ӥåȤ10ӥåȤϤ줾
0x07  0x09 ˤޤΥӥåȰʳͤȥ쥸ֹޤȤ᤿ʪ
LineComp8  LineComp9 Ǥ

åȤˤ̿

  ͡ʳĥͤƥåȤѰդΤǤޤեȥɤˤȤ
Ƥޤ󡣤ޤȤʥץȥμ֤ʤΤ̿
øʤΤˤʤäƤޤ

.å̾

  KON ΥåȤ /tmp ˺ޤ̾ .kon θ˿ʸʸ
ʤäƤޤο KON ѤƤ뵿ü̾οʸ
ޤޤGON 饤֥ SocketClientOpen ؿѤмưŪŬ
å̾ȤΤǡ̾ռ뤳̵åȤ򥪡ץ󤹤뤳ȤǤ


.Ū̿

  ̿ messageHeader ¤ΤѤƹԤޤ

	struct  messageHeader   {
		u_char  cno,	饤ֹ(̤)
			cmd;	ǽ
	};

  饤Ȥǽɤꤹ뤳Ȥˤä̿Ϥޤǽ
ȾʸʸǤ

	S: Ⱦʸեȥ
	W: ʸեȥ

ǽɤǧ KON  ACK ǽɤȤ֤ޤǧǤ
ʤä NAK ֤ޤʸ塢ǡ뤴Ȥ KON  ACK 뤤
 NAK ޤ饤¦ NAK ľߤʤ
Фʤޤ

.եȥɤ

  եȥ KON ˥եȥǡݤμˤĤޤ

	եȥ (fld.*) <-- /usr/tmp/.kon? --> KON

	Function: S|W          -------------------->
		S = Ⱦѥե
		W = ե
	                       <--------------------  (ACK)
	fontInfo ¤        -------------------->
	                       <--------------------  (ACK)
	եȥǡ BUFSIZ ǥե饰Ȳưʲ򷫤֤:
	ǡ           -------------------->
	                       <--------------------  (ACK)

ޥɥ饤

  ޥɥ饤Ф selection-1.4 򻲹ͤ˽񤭤ޤäƣбȤʤ
ƤޤǥƥȤƤΤ MircoSoft  Mouse Systems ΤߤǤ

¤ mInfo

  ޥ˴ؤƤޤɸƥƥȺɸϤɽ
ޤɽ̿ϥ뤬Ǥ뤴Ȥ˥ǥȤ졢ˤʤä
ǥޥ뤬ɽʤʤޤޥξ֤ѲϾˤ
ͤ MOUSE_LIFETIME(ǥե 22) ǽ褦ˤʤäƤޤ

struct mouseInfo {
	char    x, y,		ޥ
		dx, dy,		ޥư
		sx, sy,		ܥ󥯥å
		sw,		ɽ̿
		stat;		ܥ
};

ѿ dx, dy

  ؿ MouseAnalyzePacket ǻȤƤ static ѿ dx, dy ϥեå
ɸϤΥޥưͤǤޥäưǤȿǤ
ͤˤ뤿Ѱդޤ

ѿ oldstat

  ؿ MouseAnalyzePacket ǻȤƤ static ѿ oldstat  mInfo.stat 
ξ֤Ǥ

ե /tmp/.kontmp

  ޥǥåȤХåեǼեǤ

¿˴ؤ밷

  եȤ lib/coding.c ϿƤΤѤǤޤʥե
Ͽ Single Byte ξ coding.c:fSRegs, coding.c:fldSRegs ˡ
Double Byte ξ coding.c:fDRegs, coding.c:fldDRegs,  vt.h 
DF_?????? ˵ҤƲ줾ξ 1  1 ˤʤäƤޤΤǡ
äƲ

GON 饤֥

  KON Ȥ̿ưפ˹ԤѰդ饤֥Ǥ

.ؿ

void PortOutw(u_short value, u_short port)

  I/O ݡȤأХñ̤νϤԤޤ

void PortOutb(char value, u_short port)

  I/O ݡȤأХñ̤νϤԤޤ

u_char PortInb(unsigned short port)

  I/O ݡȤ飱Хñ̤ϤԤޤ

void bzero2(void *buff, int n)

  stosb Ȥä®ʥؿǤ̤ bzero ƱǤ

void wzero(void *buff, int n)

  stosw Ȥä®ʥؿǤn ХȤ򥼥᤹뤳Ȥդ


void lzero(void *buff, int n)

  stosl Ȥä®ʥؿǤn ХȤ򥼥᤹뤳Ȥդ


void bmove(void *dst, void *src, int n)

  movsb Ȥä®ʥХåեžؿǤ

void brmove(void *dst, void *src, int n)

  movsb Ȥä®ʵХåեžؿǤsrc, dst  n
ХȤžԤޤ

void wmove(void *dst, void *src, int n)

  movsw Ȥä®ʥХåեžؿǤn Хž뤳ȤդƲ


void lmove(void *dst, void *src, int n)

  movsl Ȥä®ʥХåեžؿǤn Хž뤳ȤդƲ


.åؿ

void SocketKill(int fd)

  եǥץ꥿ǻꤵ줿åȤ򥯥KON ΥåȤ
롣

int SocketRecCommand(int fd, struct messageHeader *mh)

  åȤ顢messageHeader ¤Τɤ߹

int SocketSendCommand(int fd, char *cmd)

  饤Ȥ顢KON ˵ǽɤޤ

int SocketClientOpen()

  KON ΥåȤ򥪡ץ󤷤ޤ

int SocketSendData(u_char *buff, int size, int fd)

  ǡХåե BUFSIZ ǥե饰Ȳʤ饽åȤФޤ

char socketName[MAX_SOCKET_NAME+1]

  ؿ SocketClientOpen Ǻ줿å̾ХåեǤ

.¾

FILE *CapSearchLabel(char *label)

  kon.cfg ꤵ줿٥򸡺ؿ٥̾Ĵ٤롣פ
٥򸫤Ĥ FILE ¤ΤؤΥݥ󥿤֤
