Sophie

Sophie

distrib > Mandriva > 2008.1 > x86_64 > media > main-release > by-pkgid > f500feda780059dbc2227b2aa7d4b56e > files > 18

kon2-0.3.9b-8mdv2008.1.x86_64.rpm

              £Ë£Ï£Î      ----- 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.ymin¡Ácon.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|

	b2¡Áb0:	¥Õ¥©¥¢¥°¥é¥ó¥É¿§
	b3:	̤»ÈÍÑ
	b6¡Áb4:	¥Ð¥Ã¥¯¥°¥é¥ó¥É¿§
	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

  ¥«¡¼¥½¥ë¤Ë´Ø¤¹¤ë¾ðÊó¤Ç¤¹¡£ÅÀÌDzó¿ô¤Ï¶ö¿ô¤Ê¤éɽ¼¨Ãæ¤ò°ÕÌ£¤·¤Æ¤ª¤ê¡¢¥¹¥¯¥ê¡¼¥ó
¥»¥¤¥Ð¡¼¤Î¥«¥¦¥ó¥¿¡¼¤Ë¤â»È¤ï¤ì¤Æ¤¤¤Þ¤¹¡£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 ¹½Â¤ÂΤؤΥݥ¤¥ó¥¿¤òÊÖ¤¹¡£