v12i088: kterm - kanji xterm, Part07/18

mleisher at NMSU.Edu mleisher at NMSU.Edu
Wed May 8 12:39:29 AEST 1991


Submitted-by: mleisher at NMSU.Edu
Posting-number: Volume 12, Issue 88
Archive-name: kterm/part07

#!/bin/sh
# this is kt412.07 (part 7 of kterm-4.1.2)
# do not concatenate these parts, unpack them in order with /bin/sh
# file kterm-4.1.2/charproc.c continued
#
if test ! -r _shar_seq_.tmp; then
	echo 'Please unpack part 1 first!'
	exit 1
fi
(read Scheck
 if test "$Scheck" != 7; then
	echo Please unpack part "$Scheck" next!
	exit 1
 else
	exit 0
 fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
	echo 'x - still skipping kterm-4.1.2/charproc.c'
else
echo 'x - continuing file kterm-4.1.2/charproc.c'
sed 's/^X//' << 'SHAR_EOF' >> 'kterm-4.1.2/charproc.c' &&
X	XtOffset(XtermWidget, misc.hg_m), XtRString,
X	(caddr_t) NULL},
{XtNhangulNtoKSTable, XtCHangulNtoKSTable, XtRString, sizeof(char *),
X   XtOffset(XtermWidget, misc.hg_n2ks_tbl), XtRString,
X   (caddr_t) NULL},
#  endif /* KTERM_HANGUL */
{XtNlineSpace, XtCLineSpace, XtRInt, sizeof(int),
X	XtOffset(XtermWidget, screen.linespace),
X	XtRInt, (caddr_t) &defaultLineSpace},
#else /* !KTERM */
{XtNfont, XtCFont, XtRString, sizeof(char *),
X	XtOffset(XtermWidget, misc.f_n), XtRString,
X	DEFFONT},
{XtNboldFont, XtCFont, XtRString, sizeof(char *),
X	XtOffset(XtermWidget, misc.f_b), XtRString,
X	DEFBOLDFONT},
#endif /* !KTERM */
{XtNc132, XtCC132, XtRBoolean, sizeof(Boolean),
X	XtOffset(XtermWidget, screen.c132),
X	XtRBoolean, (caddr_t) &defaultFALSE},
{XtNcharClass, XtCCharClass, XtRString, sizeof(char *),
X	XtOffset(XtermWidget, screen.charClass),
X	XtRString, (caddr_t) NULL},
{XtNcurses, XtCCurses, XtRBoolean, sizeof(Boolean),
X	XtOffset(XtermWidget, screen.curses),
X	XtRBoolean, (caddr_t) &defaultFALSE},
{XtNcutNewline, XtCCutNewline, XtRBoolean, sizeof(Boolean),
X	XtOffset(XtermWidget, screen.cutNewline),
X	XtRBoolean, (caddr_t) &defaultTRUE},
{XtNcutToBeginningOfLine, XtCCutToBeginningOfLine, XtRBoolean, sizeof(Boolean),
X	XtOffset(XtermWidget, screen.cutToBeginningOfLine),
X	XtRBoolean, (caddr_t) &defaultTRUE},
{XtNbackground, XtCBackground, XtRPixel, sizeof(Pixel),
X	XtOffset(XtermWidget, core.background_pixel),
X	XtRString, "XtDefaultBackground"},
{XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel),
X	XtOffset(XtermWidget, screen.foreground),
X	XtRString, "XtDefaultForeground"},
{XtNcursorColor, XtCForeground, XtRPixel, sizeof(Pixel),
X	XtOffset(XtermWidget, screen.cursorcolor),
X	XtRString, "XtDefaultForeground"},
#ifdef	COLOR_TEXT	/* mukawa */
{XtNcolor0, XtCForeground, XtRPixel, sizeof(Pixel),
X	XtOffset(XtermWidget, screen.textcolor[0]),
X	XtRString, "XtDefaultForeground"},
{XtNcolor1, XtCForeground, XtRPixel, sizeof(Pixel),
X	XtOffset(XtermWidget, screen.textcolor[1]),
X	XtRString, "XtDefaultForeground"},
{XtNcolor2, XtCForeground, XtRPixel, sizeof(Pixel),
X	XtOffset(XtermWidget, screen.textcolor[2]),
X	XtRString, "XtDefaultForeground"},
{XtNcolor3, XtCForeground, XtRPixel, sizeof(Pixel),
X	XtOffset(XtermWidget, screen.textcolor[3]),
X	XtRString, "XtDefaultForeground"},
{XtNcolor4, XtCForeground, XtRPixel, sizeof(Pixel),
X	XtOffset(XtermWidget, screen.textcolor[4]),
X	XtRString, "XtDefaultForeground"},
{XtNcolor5, XtCForeground, XtRPixel, sizeof(Pixel),
X	XtOffset(XtermWidget, screen.textcolor[5]),
X	XtRString, "XtDefaultForeground"},
{XtNcolor6, XtCForeground, XtRPixel, sizeof(Pixel),
X	XtOffset(XtermWidget, screen.textcolor[6]),
X	XtRString, "XtDefaultForeground"},
{XtNcolor7, XtCForeground, XtRPixel, sizeof(Pixel),
X	XtOffset(XtermWidget, screen.textcolor[7]),
X	XtRString, "XtDefaultForeground"},
#endif	/* COLOR_TEXT */
{XtNeightBitInput, XtCEightBitInput, XtRBoolean, sizeof(Boolean),
X	XtOffset(XtermWidget, screen.eight_bits), 
X	XtRBoolean, (caddr_t) &defaultTRUE},
{XtNgeometry,XtCGeometry, XtRString, sizeof(char *),
X	XtOffset(XtermWidget, misc.geo_metry),
X	XtRString, (caddr_t) NULL},
{XtNalwaysHighlight,XtCAlwaysHighlight,XtRBoolean,
X        sizeof(Boolean),XtOffset(XtermWidget, screen.always_highlight),
X        XtRBoolean, (caddr_t) &defaultFALSE},
{XtNtekGeometry,XtCGeometry, XtRString, sizeof(char *),
X	XtOffset(XtermWidget, misc.T_geometry),
X	XtRString, (caddr_t) NULL},
{XtNinternalBorder,XtCBorderWidth,XtRInt, sizeof(int),
X	XtOffset(XtermWidget, screen.border),
X	XtRInt, (caddr_t) &defaultIntBorder},
{XtNjumpScroll, XtCJumpScroll, XtRBoolean, sizeof(Boolean),
X	XtOffset(XtermWidget, screen.jumpscroll),
X	XtRBoolean, (caddr_t) &defaultTRUE},
{XtNlogFile, XtCLogfile, XtRString, sizeof(char *),
X	XtOffset(XtermWidget, screen.logfile),
X	XtRString, (caddr_t) NULL},
{XtNlogging, XtCLogging, XtRBoolean, sizeof(Boolean),
X	XtOffset(XtermWidget, misc.log_on),
X	XtRBoolean, (caddr_t) &defaultFALSE},
{XtNlogInhibit, XtCLogInhibit, XtRBoolean, sizeof(Boolean),
X	XtOffset(XtermWidget, misc.logInhibit),
X	XtRBoolean, (caddr_t) &defaultFALSE},
{XtNloginShell, XtCLoginShell, XtRBoolean, sizeof(Boolean),
X	XtOffset(XtermWidget, misc.login_shell),
X	XtRBoolean, (caddr_t) &defaultFALSE},
{XtNmarginBell, XtCMarginBell, XtRBoolean, sizeof(Boolean),
X	XtOffset(XtermWidget, screen.marginbell),
X	XtRBoolean, (caddr_t) &defaultFALSE},
{XtNpointerColor, XtCForeground, XtRPixel, sizeof(Pixel),
X	XtOffset(XtermWidget, screen.mousecolor),
X	XtRString, "XtDefaultForeground"},
{XtNpointerColorBackground, XtCBackground, XtRPixel, sizeof(Pixel),
X	XtOffset(XtermWidget, screen.mousecolorback),
X	XtRString, "XtDefaultBackground"},
{XtNpointerShape,XtCCursor, XtRCursor, sizeof(Cursor),
X	XtOffset(XtermWidget, screen.pointer_cursor),
X	XtRString, (caddr_t) "xterm"},
{XtNmultiClickTime,XtCMultiClickTime, XtRInt, sizeof(int),
X	XtOffset(XtermWidget, screen.multiClickTime),
X	XtRInt, (caddr_t) &defaultMultiClickTime},
{XtNmultiScroll,XtCMultiScroll, XtRBoolean, sizeof(Boolean),
X	XtOffset(XtermWidget, screen.multiscroll),
X	XtRBoolean, (caddr_t) &defaultFALSE},
{XtNnMarginBell,XtCColumn, XtRInt, sizeof(int),
X	XtOffset(XtermWidget, screen.nmarginbell),
X	XtRInt, (caddr_t) &defaultNMarginBell},
{XtNreverseVideo,XtCReverseVideo,XtRBoolean, sizeof(Boolean),
X	XtOffset(XtermWidget, misc.re_verse),
X	XtRBoolean, (caddr_t) &defaultFALSE},
{XtNreverseWrap,XtCReverseWrap, XtRBoolean, sizeof(Boolean),
X	XtOffset(XtermWidget, misc.reverseWrap),
X	XtRBoolean, (caddr_t) &defaultFALSE},
{XtNsaveLines, XtCSaveLines, XtRInt, sizeof(int),
X	XtOffset(XtermWidget, screen.savelines),
X	XtRInt, (caddr_t) &defaultSaveLines},
{XtNscrollBar, XtCScrollBar, XtRBoolean, sizeof(Boolean),
X	XtOffset(XtermWidget, misc.scrollbar),
X	XtRBoolean, (caddr_t) &defaultFALSE},
{XtNscrollTtyOutput,XtCScrollCond, XtRBoolean, sizeof(Boolean),
X	XtOffset(XtermWidget, screen.scrollttyoutput),
X	XtRBoolean, (caddr_t) &defaultTRUE},
{XtNscrollKey, XtCScrollCond, XtRBoolean, sizeof(Boolean),
X	XtOffset(XtermWidget, screen.scrollkey),
X	XtRBoolean, (caddr_t) &defaultFALSE},
{XtNscrollLines, XtCScrollLines, XtRInt, sizeof(int),
X	XtOffset(XtermWidget, screen.scrolllines),
X	XtRInt, (caddr_t) &defaultScrollLines},
{XtNsignalInhibit,XtCSignalInhibit,XtRBoolean, sizeof(Boolean),
X	XtOffset(XtermWidget, misc.signalInhibit),
X	XtRBoolean, (caddr_t) &defaultFALSE},
#ifdef STATUSLINE
{XtNstatusLine, XtCStatusLine, XtRBoolean, sizeof(Boolean),
X	XtOffset(XtermWidget, screen.statusline),
X	XtRBoolean, (caddr_t) &defaultFALSE},
{XtNstatusNormal, XtCStatusNormal, XtRBoolean, sizeof(Boolean),
X	XtOffset(XtermWidget, misc.statusnormal),
X	XtRBoolean, (caddr_t) &defaultFALSE},
#endif /* STATUSLINE */
{XtNtekInhibit, XtCTekInhibit, XtRBoolean, sizeof(Boolean),
X	XtOffset(XtermWidget, misc.tekInhibit),
X	XtRBoolean, (caddr_t) &defaultFALSE},
{XtNtekSmall, XtCTekSmall, XtRBoolean, sizeof(Boolean),
X	XtOffset(XtermWidget, misc.tekSmall),
X	XtRBoolean, (caddr_t) &defaultFALSE},
{XtNtekStartup, XtCTekStartup, XtRBoolean, sizeof(Boolean),
X	XtOffset(XtermWidget, screen.TekEmu),
X	XtRBoolean, (caddr_t) &defaultFALSE},
{XtNtiteInhibit, XtCTiteInhibit, XtRBoolean, sizeof(Boolean),
X	XtOffset(XtermWidget, misc.titeInhibit),
X	XtRBoolean, (caddr_t) &defaultFALSE},
{XtNvisualBell, XtCVisualBell, XtRBoolean, sizeof(Boolean),
X	XtOffset(XtermWidget, screen.visualbell),
X	XtRBoolean, (caddr_t) &defaultFALSE},
{XtNallowSendEvents, XtCAllowSendEvents, XtRBoolean, sizeof(Boolean),
X	XtOffset(XtermWidget, screen.allowSendEvents),
X	XtRBoolean, (caddr_t) &defaultFALSE},
#ifdef KTERM
{"fontList1", "FontList1", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen.menu_font_list[fontMenu_font1]),
X	XtRString, (caddr_t) NULL},
{"fontList2", "FontList2", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen.menu_font_list[fontMenu_font2]),
X	XtRString, (caddr_t) NULL},
{"fontList3", "FontList3", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen.menu_font_list[fontMenu_font3]),
X	XtRString, (caddr_t) NULL},
{"fontList4", "FontList4", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen.menu_font_list[fontMenu_font4]),
X	XtRString, (caddr_t) NULL},
{"boldFontList1", "FontList1", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen.menu_bfont_list[fontMenu_font1]),
X	XtRString, (caddr_t) NULL},
{"boldFontList2", "FontList2", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen.menu_bfont_list[fontMenu_font2]),
X	XtRString, (caddr_t) NULL},
{"boldFontList3", "FontList3", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen.menu_bfont_list[fontMenu_font3]),
X	XtRString, (caddr_t) NULL},
{"boldFontList4", "FontList4", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen.menu_bfont_list[fontMenu_font4]),
X	XtRString, (caddr_t) NULL},
{"font1", "Font1", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_font_names[F_ISO8859_1][fontMenu_font1]),
X	XtRString, (caddr_t) NULL},
{"font2", "Font2", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_font_names[F_ISO8859_1][fontMenu_font2]),
X	XtRString, (caddr_t) NULL},
{"font3", "Font3", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_font_names[F_ISO8859_1][fontMenu_font3]),
X	XtRString, (caddr_t) NULL},
{"font4", "Font4", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_font_names[F_ISO8859_1][fontMenu_font4]),
X	XtRString, (caddr_t) NULL},
{"boldFont1", "Font1", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_bfont_names[F_ISO8859_1][fontMenu_font1]),
X	XtRString, (caddr_t) NULL},
{"boldFont2", "Font2", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_bfont_names[F_ISO8859_1][fontMenu_font2]),
X	XtRString, (caddr_t) NULL},
{"boldFont3", "Font3", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_bfont_names[F_ISO8859_1][fontMenu_font3]),
X	XtRString, (caddr_t) NULL},
{"boldFont4", "Font4", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_bfont_names[F_ISO8859_1][fontMenu_font4]),
X	XtRString, (caddr_t) NULL},
{"romanKanaFont1", "RomanKanaFont1", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_font_names[F_JISX0201_0][fontMenu_font1]),
X	XtRString, (caddr_t) NULL},
{"romanKanaFont2", "RomanKanaFont2", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_font_names[F_JISX0201_0][fontMenu_font2]),
X	XtRString, (caddr_t) NULL},
{"romanKanaFont3", "RomanKanaFont3", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_font_names[F_JISX0201_0][fontMenu_font3]),
X	XtRString, (caddr_t) NULL},
{"romanKanaFont4", "RomanKanaFont4", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_font_names[F_JISX0201_0][fontMenu_font4]),
X	XtRString, (caddr_t) NULL},
{"romanKanaBoldFont1", "RomanKanaFont1", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_bfont_names[F_JISX0201_0][fontMenu_font1]),
X	XtRString, (caddr_t) NULL},
{"romanKanaBoldFont2", "RomanKanaFont2", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_bfont_names[F_JISX0201_0][fontMenu_font2]),
X	XtRString, (caddr_t) NULL},
{"romanKanaBoldFont3", "RomanKanaFont3", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_bfont_names[F_JISX0201_0][fontMenu_font3]),
X	XtRString, (caddr_t) NULL},
{"romanKanaBoldFont4", "RomanKanaFont4", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_bfont_names[F_JISX0201_0][fontMenu_font4]),
X	XtRString, (caddr_t) NULL},
# ifdef KTERM_KANJI
{"kanjiFont1", "KanjiFont1", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_font_names[F_JISX0208_0][fontMenu_font1]),
X	XtRString, (caddr_t) NULL},
{"kanjiFont2", "KanjiFont2", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_font_names[F_JISX0208_0][fontMenu_font2]),
X	XtRString, (caddr_t) NULL},
{"kanjiFont3", "KanjiFont3", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_font_names[F_JISX0208_0][fontMenu_font3]),
X	XtRString, (caddr_t) NULL},
{"kanjiFont4", "KanjiFont4", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_font_names[F_JISX0208_0][fontMenu_font4]),
X	XtRString, (caddr_t) NULL},
{"kanjiBoldFont1", "KanjiFont1", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_bfont_names[F_JISX0208_0][fontMenu_font1]),
X	XtRString, (caddr_t) NULL},
{"kanjiBoldFont2", "KanjiFont2", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_bfont_names[F_JISX0208_0][fontMenu_font2]),
X	XtRString, (caddr_t) NULL},
{"kanjiBoldFont3", "KanjiFont3", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_bfont_names[F_JISX0208_0][fontMenu_font3]),
X	XtRString, (caddr_t) NULL},
{"kanjiBoldFont4", "KanjiFont4", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_bfont_names[F_JISX0208_0][fontMenu_font4]),
X	XtRString, (caddr_t) NULL},
# endif /* KTERM_KANJI */
# ifdef KTERM_HANZI
{"hanziFont1", "HanziFont1", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_font_names[F_GB2312_0][fontMenu_font1]),
X	XtRString, (caddr_t) NULL},
{"hanziFont2", "HanziFont2", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_font_names[F_GB2312_0][fontMenu_font2]),
X	XtRString, (caddr_t) NULL},
{"hanziFont3", "HanziFont3", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_font_names[F_GB2312_0][fontMenu_font3]),
X	XtRString, (caddr_t) NULL},
{"hanziFont4", "HanziFont4", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_font_names[F_GB2312_0][fontMenu_font4]),
X	XtRString, (caddr_t) NULL},
{"hanziBoldFont1", "HanziFont1", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_bfont_names[F_GB2312_0][fontMenu_font1]),
X	XtRString, (caddr_t) NULL},
{"hanziBoldFont2", "HanziFont2", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_bfont_names[F_GB2312_0][fontMenu_font2]),
X	XtRString, (caddr_t) NULL},
{"hanziBoldFont3", "HanziFont3", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_bfont_names[F_GB2312_0][fontMenu_font3]),
X	XtRString, (caddr_t) NULL},
{"hanziBoldFont4", "HanziFont4", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_bfont_names[F_GB2312_0][fontMenu_font4]),
X	XtRString, (caddr_t) NULL},
# endif /* KTERM_HANZI */
# ifdef KTERM_HANGUL
{"hangulFont1", "HangulFont1", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_font_names[F_KSC5601_0][fontMenu_font1]),
X	XtRString, (caddr_t) NULL},
{"hangulFont2", "HangulFont2", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_font_names[F_KSC5601_0][fontMenu_font2]),
X	XtRString, (caddr_t) NULL},
{"hangulFont3", "HangulFont3", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_font_names[F_KSC5601_0][fontMenu_font3]),
X	XtRString, (caddr_t) NULL},
{"hangulFont4", "HangulFont4", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_font_names[F_KSC5601_0][fontMenu_font4]),
X	XtRString, (caddr_t) NULL},
{"hangulBoldFont1", "HangulFont1", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_bfont_names[F_KSC5601_0][fontMenu_font1]),
X	XtRString, (caddr_t) NULL},
{"hangulBoldFont2", "HangulFont2", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_bfont_names[F_KSC5601_0][fontMenu_font2]),
X	XtRString, (caddr_t) NULL},
{"hangulBoldFont3", "HangulFont3", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_bfont_names[F_KSC5601_0][fontMenu_font3]),
X	XtRString, (caddr_t) NULL},
{"hangulBoldFont4", "HangulFont4", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen._menu_bfont_names[F_KSC5601_0][fontMenu_font4]),
X	XtRString, (caddr_t) NULL},
# endif /* KTERM_HANGUL */
#else /* !KTERM */
{"font1", "Font1", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen.menu_font_names[fontMenu_font1]),
X	XtRString, (caddr_t) NULL},
{"font2", "Font2", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen.menu_font_names[fontMenu_font2]),
X	XtRString, (caddr_t) NULL},
{"font3", "Font3", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen.menu_font_names[fontMenu_font3]),
X	XtRString, (caddr_t) NULL},
{"font4", "Font4", XtRString, sizeof(String),
X	XtOffset(XtermWidget, screen.menu_font_names[fontMenu_font4]),
X	XtRString, (caddr_t) NULL},
#endif /* !KTERM */
};
X
X
static void VTInitialize(), VTRealize(), VTExpose(), VTResize();
static void VTDestroy();
X
WidgetClassRec xtermClassRec = {
X  {
/* core_class fields */	
X    /* superclass	  */	(WidgetClass) &widgetClassRec,
X    /* class_name	  */	"VT100",
X    /* widget_size	  */	sizeof(XtermWidgetRec),
X    /* class_initialize   */    NULL,
X    /* class_part_initialize */ NULL,
X    /* class_inited       */	FALSE,
X    /* initialize	  */	VTInitialize,
X    /* initialize_hook    */    NULL,				
X    /* realize		  */	VTRealize,
X    /* actions		  */	actionsList,
X    /* num_actions	  */	XtNumber(actionsList),
X    /* resources	  */	resources,
X    /* num_resources	  */	XtNumber(resources),
X    /* xrm_class	  */	NULLQUARK,
X    /* compress_motion	  */	TRUE,
X    /* compress_exposure  */	FALSE,
X    /* compress_enterleave */   TRUE,
X    /* visible_interest	  */	FALSE,
X    /* destroy		  */	VTDestroy,
X    /* resize		  */	VTResize,
X    /* expose		  */	VTExpose,
X    /* set_values	  */	NULL,
X    /* set_values_hook    */    NULL,
X    /* set_values_almost  */    NULL,
X    /* get_values_hook    */    NULL,
X    /* accept_focus	  */	NULL,
X    /* version            */    XtVersion,
X    /* callback_offsets   */    NULL,
X    /* tm_table           */    defaultTranslations,
X    /* query_geometry     */    XtInheritQueryGeometry,
X    /* display_accelerator*/    XtInheritDisplayAccelerator,
X    /* extension          */    NULL
X  }
};
X
WidgetClass xtermWidgetClass = (WidgetClass)&xtermClassRec;
X
#ifdef KTERM
X
/*
X * Added as replacement for FNUM(gs) define in ptyx.h.
X * M. Leisher
X */
int fontno(gs)
int gs;
{
X    switch(gs) {
#ifdef KTERM_KANJI
X      case GSET_KANJI:
X      case GSET_OLDKANJI:
X        return(F_JISX0208_0);
X        break;
#endif /* KTERM_KANJI */
X      case GSET_JISROMAN:
X      case GSET_KANA:
X        return(F_JISX0201_0);
X        break;
#ifdef KTERM_HANZI
X      case GSET_HANZI:
X        return(F_GB2312_0);
X        break;
#endif /* KTERM_HANZI */
#ifdef KTERM_HANGUL
X      case GSET_HANGUL:
X        return(F_KSC5601_0);
X        break;
#endif /* KTERM_HANGUL */
X    }
X    return(F_ISO8859_1);
}
X
/*
X * screen - screen
X * fnum   - font number
X * type   - BOLD or 0
X */
int
FontType(screen, fnum, bold)
TScreen *screen;
int fnum, bold;
{
X    XFontStruct *ft;
X
X    if (bold)
X      ft = screen->_fnt_bold[fnum];
X    else
X      ft = screen->_fnt_norm[fnum];
X
X    if (!ft)
X      return(NONE);
X    if (!ft->min_byte1 && !ft->max_byte1)
X      return(NONE);
X    if (ft->min_byte1 < 0x80 && ft->min_char_or_byte2 < 0x80)
X      return(LOW);
X    if (ft->min_byte1 > 0x80 && ft->min_char_or_byte2 > 0x80)
X      return(HIGH);
X    if (ft->min_byte1 > 0x80 && ft->min_char_or_byte2 < 0x80)
X      return(MIXED);
}
X
doSS(gset)
short gset;
{
X	Char dotextbuf[2];
X	register Char c, min, max;
X	register Char *cp = bptr;
X	register Char *dcp = dotextbuf;
X
X	if (gset & CS96) {
X		min = 0x20; max = 0x7f;
X	} else {
X		min = 0x21; max = 0x7e;
X	}
X	if (*cp & 0x80) {
X		min |= 0x80; max |= 0x80;
X	}
# ifdef KTERM_KANJI
X	if (gset & MBCS) {
X		if (bcnt == 1) {
X			c = *cp;
X			if (min <= c && c <= max) {
X				pending_byte = c;
X				bcnt = 0;
X				return;
X			}
X		} else {
X			/* first byte */
X			c = *cp++;
X			if (c < min || max < c) {
X				cp--;
X				goto end;
X			}
X			*dcp++ = c;
X			/* second byte */
X			c = *cp++;
X			if (c < min || max < c) {
X				/*
X				 * Incomplete multi-byte character.
X				 * Skip its first byte.
X				 */
X				dcp--;
X				cp--;
X				goto end;
X			}
X			*dcp++ = c;
X			dotext(&term->screen, term->flags, gset, dotextbuf, dcp);
X		}
X	} else
# endif /* KTERM_KANJI */
X	{
X		min &= 0xa0;
X		c = *cp++;
X		if (c < min || max < c) {
X			cp--;
X			goto end;
X		}
X		*dcp++ = c;
X		dotext(&term->screen, term->flags, gset, dotextbuf, dcp);
X	}
X    end:
X	/*
X	 * process SPACE or DEL characters in 94chars gset string.
X	 */
X	if (c < min || max < c) {
X	    if ((c & ~0x80) == 0x20) {
X		dcp = dotextbuf;
X		cp++;
X		*dcp++ = c;
X		dotext(&term->screen, term->flags, gset, dotextbuf, dcp);
X	    } else if ((c & ~0x80) == 0x7f) {
X		cp++;
X	    }
X	}
X	bcnt -= cp - bptr;
X	bptr = cp;
}
X
# if defined(KTERM_HANZI) || defined(KTERM_HANGUL)
X
doLS(gset)
short gset;
{
X	Char dotextbuf[TEXT_BUF_SIZE];
X	register int top;
X	register Char c, c1, min, max, min2, max1;
X	register Char *cp = bptr;
X	register Char *dcp = dotextbuf;
X        Char oc, oc1;
X        char lang = term->misc.lang[0];
X        int hzftype = FontType(&term->screen, F_GB2312_0, 0);
X        int ftype = FontType(&term->screen, FNUM(gset), 0);
X
X        switch(lang) {
#ifdef KTERM_HANZI
X          case 'c': case 'C':
X            if ((gset & MBCS) && (gset != GSET_HANZI))
X              gset &= ~MBCS;
X            break;
#endif /* KTERM_HANZI */
#ifdef KTERM_HANGUL
X          case 'k': case 'K':
X            if ((gset & MBCS) && (gset != GSET_HANGUL))
X              gset &= ~MBCS;
X            break;
#endif /* KTERM_HANGUL */
X          default:
X            if ((gset & MBCS) && (gset != GSET_KANJI && gset != GSET_OLDKANJI))
X              gset &= ~MBCS;
X            break;
X        }
X
X	if (gset & CS96) {
X		min = 0x20; max = 0x7f;
X	} else {
X		min = 0x21; max = 0x7e;
X	}
X	if (*cp & 0x80) {
X		min |= 0x80; max |= 0x80;
X	}
X
X        min2 = min;
X        max1 = max;
X        if ((term->flags & BIG5_HANZI) || hzftype == MIXED) {
X            max1 = 0xf9;       /* Max byte1 for BIG5 */
X            min2 = 0x40;       /* Min byte2 for BIG5 */
X        }
X
X	if (gset & MBCS) {
X            if (bcnt == 1) {
X                c = *cp;
X                if (min <= c && c <= max) {
X                    pending_byte = c;
X                    bcnt = 0;
X                    return;
X                }
X            } else {
X                top = (bcnt >TEXT_BUF_SIZE ? TEXT_BUF_SIZE : bcnt) / 2;
X                while (top > 0) {
X                    /* first byte */
X                    c = *cp++;
X
X                    /*
X                     * Handle BIG5 special case by allowing out of range
X                     * first bytes through so it gets converted to box
X                     * char in converter() stage
X                     */
X                    if (c < min || max1 < c && !(term->flags & BIG5_HANZI)) {
X                        cp--;
X                        break;
X                    }
X                    /* second byte */
X                    c1 = *cp++;
X                    if (c1 < min2 || max < c1) {
X                        /*
X                         * Incomplete multi-byte character.
X                         * Skip its first byte.
X                         */
X                        *dcp = c;
X                        cp--;
X                        break;
X                    }
X
X                    /*
X                     * Catch 7-bit stuff using an 8-bit font.
X                     * Example:
X                     *    7-bit GuoBiao text
X                     *    JIS Kanji with EUC encoded font.
X                     */
X                    if (ftype == HIGH) {
X                        c  |= 0x80;
X                        c1 |= 0x80;
X                    }
X
X                    oc = c; oc1 = c1;
X                    if (hzftype == MIXED && !(term->flags & BIG5_HANZI))
X
X                      hzconvert(GBtoBIG,c,c1,&oc,&oc1);
X
X                    else if (hzftype != MIXED && (term->flags & BIG5_HANZI))
X
X                      /* We know we have a GB font and
X                         BIG5 format chars */
X                      hzconvert(BIGtoGB,c,c1,&oc,&oc1);
X
X                    *dcp++ = oc;
X                    *dcp++ = oc1;
X                    top--;
X                }
X                dotext(&term->screen, term->flags, gset, dotextbuf, dcp);
X            }
X        } else {
X            min &= 0xa0;
X            top = bcnt > TEXT_BUF_SIZE ? TEXT_BUF_SIZE : bcnt;
X            while (top > 0) {
X                c = *cp++;
X                if (c < min || max < c) {
X                    cp--;
X                    break;
X                }
X                *dcp++ = c;
X                top--;
X            }
X            dotext(&term->screen, term->flags, gset, dotextbuf, dcp);
X        }
X	/*
X	 * process SPACE or DEL characters in 94chars gset string.
X	 */
X	if (c < min || max < c) {
X	    if ((c & ~0x80) == 0x20) {
X		dcp = dotextbuf;
X		top = bcnt > TEXT_BUF_SIZE ? TEXT_BUF_SIZE : bcnt;
X		while (top > 0 && *cp == c) {
X			*dcp++ = c;
X			cp++; top--;
X		}
X		dotext(&term->screen, term->flags, GSET_ASCII, dotextbuf, dcp);
X	    } else if ((c & ~0x80) == 0x7f) {
X		top = bcnt > TEXT_BUF_SIZE ? TEXT_BUF_SIZE : bcnt;
X		while (top > 0 && *cp == c) {
X			cp++; top--;
X		}
X	    }
X	}
X	bcnt -= cp - bptr;
X	bptr = cp;
}
X
#ifdef KTERM_HANGUL
doKSH()
{
X	Char dotextbuf[TEXT_BUF_SIZE];
X	register int top;
X	register Char HI, LO;
X	register Char *cp = bptr;
X	register Char *dcp = dotextbuf;
X        unsigned char c1, c2, oc1, oc2;
X
#  define KSH1(c) ((c == 0xA4 || (0xB0 <= c && c <= 0xC8)))
#  define KSH2(c) (0xA1 <= c && c <= 0xFE)
X	if (bcnt == 1) {
X		pending_byte = *cp;
X		bcnt = 0;
X		return;
X	}
X	top = (bcnt > TEXT_BUF_SIZE ? TEXT_BUF_SIZE : bcnt) / 2;
X	while (top > 0) {
X		HI = *cp++;
X		if (!KSH1(HI)) {
X			cp--;
X			break;
X		}
X		LO = *cp++;
X		if (!KSH2(LO)) {
X			/*
X			 * Incomplete shift-gb character.
X			 * Skip its first byte.
X			 */
X			cp--;
X			break;
X		}
X		*dcp++ = HI;
X		*dcp++ = LO;
X		top--;
X	}
X	dotext(&term->screen, term->flags, GSET_HANGUL, dotextbuf, dcp);
X	bcnt -= cp - bptr;
X	bptr = cp;
}
X
doNBH()
{
X	Char dotextbuf[TEXT_BUF_SIZE];
X	register int top, kslen;
X	register Char *cp = bptr;
X	unsigned char *dcp = dotextbuf;
X        int nblen;
X
X	if (bcnt == 1) {
X		pending_byte = *cp;
X		bcnt = 0;
X		return;
X	}
X	top = (bcnt > TEXT_BUF_SIZE ? TEXT_BUF_SIZE : bcnt);
X        kslen = hgconvert(cp, &dcp, &nblen);
X        dcp += kslen;
X        cp += nblen;
X	dotext(&term->screen, term->flags, GSET_HANGUL, dotextbuf, dcp);
X	bcnt -= cp - bptr;
X	bptr = cp;
}
#endif /* KTERM_HANGUL */
X
doSGB()
{
X	Char dotextbuf[TEXT_BUF_SIZE];
X	register int top;
X	register Char HI, LO;
X	register Char *cp = bptr;
X	register Char *dcp = dotextbuf;
X        unsigned char c1, c2, oc1, oc2;
X
#  define SGB1(c) ((0x81 <= c && c <= 0xAF))
#  define SGB2(c) (0x40 <= c && c <= 0xFC && c != 0x7F)
X	if (bcnt == 1) {
X		pending_byte = *cp;
X		bcnt = 0;
X		return;
X	}
X	top = (bcnt > TEXT_BUF_SIZE ? TEXT_BUF_SIZE : bcnt) / 2;
X	while (top > 0) {
X		HI = *cp++;
X		if (!SGB1(HI)) {
X			cp--;
X			break;
X		}
X		LO = *cp++;
X		if (!SGB2(LO)) {
X			/*
X			 * Incomplete shift-gb character.
X			 * Skip its first byte.
X			 */
X			cp--;
X			break;
X		}
X                c1 = HI;
X                c2 = LO;
X                if (FontType(&term->screen, F_GB2312_0, 0) == MIXED)
X                  hzconvert(SGBtoBIG,c1,c2,&oc1,&oc2);
X                else
X                  hzconvert(SGBtoGB,c1,c2,&oc1,&oc2);
X		*dcp++ = oc1;
X		*dcp++ = oc2;
X		top--;
X	}
X	dotext(&term->screen, term->flags, GSET_HANZI, dotextbuf, dcp);
X	bcnt -= cp - bptr;
X	bptr = cp;
}
#  else /* !KTERM_HANZI && !KTERM_HANGUL */
X
doLS(gset)
short gset;
{
X	Char dotextbuf[TEXT_BUF_SIZE];
X	register int top;
X	register Char c, min, max;
X	register Char *cp = bptr;
X	register Char *dcp = dotextbuf;
X
X	if (gset & CS96) {
X		min = 0x20; max = 0x7f;
X	} else {
X		min = 0x21; max = 0x7e;
X	}
X	if (*cp & 0x80) {
X		min |= 0x80; max |= 0x80;
X	}
# ifdef KTERM_KANJI
X	if (gset & MBCS) {
X		if (bcnt == 1) {
X			c = *cp;
X			if (min <= c && c <= max) {
X				pending_byte = c;
X				bcnt = 0;
X				return;
X			}
X		} else {
X			top = (bcnt >TEXT_BUF_SIZE ? TEXT_BUF_SIZE : bcnt) / 2;
X			while (top > 0) {
X				/* first byte */
X				c = *cp++;
X				if (c < min || max < c) {
X					cp--;
X					break;
X				}
X				*dcp++ = c;
X				/* second byte */
X				c = *cp++;
X				if (c < min || max < c) {
X					/*
X					 * Incomplete multi-byte character.
X					 * Skip its first byte.
X					 */
X					dcp--;
X					cp--;
X					break;
X				}
X				*dcp++ = c;
X				top--;
X			}
X			dotext(&term->screen, term->flags, gset, dotextbuf, dcp);
X		}
X	} else
# endif /* KTERM_KANJI */
X	{
X		min &= 0xa0;
X		top = bcnt > TEXT_BUF_SIZE ? TEXT_BUF_SIZE : bcnt;
X		while (top > 0) {
X			c = *cp++;
X			if (c < min || max < c) {
X				cp--;
X				break;
X			}
X			*dcp++ = c;
X			top--;
X		}
X		dotext(&term->screen, term->flags, gset, dotextbuf, dcp);
X	}
X	/*
X	 * process SPACE or DEL characters in 94chars gset string.
X	 */
X	if (c < min || max < c) {
X	    if ((c & ~0x80) == 0x20) {
X		dcp = dotextbuf;
X		top = bcnt > TEXT_BUF_SIZE ? TEXT_BUF_SIZE : bcnt;
X		while (top > 0 && *cp == c) {
X			*dcp++ = c;
X			cp++; top--;
X		}
X		dotext(&term->screen, term->flags, GSET_ASCII, dotextbuf, dcp);
X	    } else if ((c & ~0x80) == 0x7f) {
X		top = bcnt > TEXT_BUF_SIZE ? TEXT_BUF_SIZE : bcnt;
X		while (top > 0 && *cp == c) {
X			cp++; top--;
X		}
X	    }
X	}
X	bcnt -= cp - bptr;
X	bptr = cp;
}
#  endif /* !KTERM_HANZI && !KTERM_HANGUL */
X
# ifdef KTERM_KANJI
doSJIS()
{
X	Char dotextbuf[TEXT_BUF_SIZE];
X	register int top;
X	register Char HI, LO;
X	register Char *cp = bptr;
X	register Char *dcp = dotextbuf;
X
#  define SJIS1(c) ((0x81 <= c && c <= 0x9F) || (0xE0 <= c && c <= 0xEF))
#  define SJIS2(c) (0x40 <= c && c <= 0xFC && c != 0x7F)
X	if (bcnt == 1) {
X		pending_byte = *cp;
X		bcnt = 0;
X		return;
X	}
X	top = (bcnt > TEXT_BUF_SIZE ? TEXT_BUF_SIZE : bcnt) / 2;
X	while (top > 0) {
X		HI = *cp++;
X		if (!SJIS1(HI)) {
X			cp--;
X			break;
X		}
X		LO = *cp++;
X		if (!SJIS2(LO)) {
X			/*
X			 * Incomplete shift-jis character.
X			 * Skip its first byte.
X			 */
X			cp--;
X			break;
X		}
X		/*
X		 * SJIS to JIS code conversion:
X		 */
X		if (HI <= 0x9f)	HI = (HI-0x81)*2 + 0x21;
X		else		HI = (HI-0xc1)*2 + 0x21;
X		if (LO <= 0x7e)	     LO -= 0x1f;
X		else if (LO <= 0x9e) LO -= 0x20;
X		else		     LO -= 0x7e, HI += 1;
X		*dcp++ = HI;
X		*dcp++ = LO;
X		top--;
X	}
X	dotext(&term->screen, term->flags, GSET_KANJI, dotextbuf, dcp);
X	bcnt -= cp - bptr;
X	bptr = cp;
}
# endif /* KTERM_KANJI */
#endif /* KTERM */
X
X
VTparse()
{
X	register TScreen *screen = &term->screen;
X	register int *parsestate = groundtable;
X	register unsigned int c;
X	register unsigned char *cp;
X	register int row, col, top, bot, scstype;
#ifdef KTERM
X	register Bchr *xp;
X	int cs96 = 0;
#endif /* KTERM */
#ifdef KTERM_KANJI
X	int mbcs = 0;
X	register int ps;
#endif /* KTERM_KANJI */
X	extern int bitset(), bitclr(), finput(), TrackMouse();
X
X	if(setjmp(vtjmpbuf))
X		parsestate = groundtable;
#ifdef KTERM_KANJI
X	pending_byte = 0;
#endif /* KTERM_KANJI */
X	for( ; ; ) {
#ifdef KTERM_KANJI
X	        ps = parsestate[c = doinput()];
X		if (term->flags & SJIS_KANJI && SJIS1(c)) {
X			bcnt++;
X			*--bptr = c;
X			doSJIS();
X			screen->curss = 0;
X			continue;
X		}
#ifdef KTERM_HANZI
X                if (term->flags & SGB_HANZI && SGB1(c)) {
X                    bcnt++;
X                    *--bptr = c;
X                    doSGB();
X                    screen->curss = 0;
X                    continue;
X                }
#endif /* KTERM_HANZI */
#ifdef KTERM_HANGUL
X                if (term->flags & KS_HANGUL && KSH1(c)) {
X                    bcnt++;
X                    *--bptr = c;
X                    doKSH();
X                    screen->curss = 0;
X                    continue;
X                }
X                if (term->flags & NBYTE_HANGUL && screen->curgl) {
X                    bcnt++;
X                    *--bptr = c;
X                    doNBH();
X                    screen->curss = screen->curgl = 0;
X                    continue;
X                }
#endif /* KTERM_HANGUL */
X
X	        switch (ps) {
#else /* !KTERM_KANJI */
X	        switch (parsestate[c = doinput()]) {
#endif /* !KTERM_KANJI */
X		 case CASE_PRINT:
X			/* printable characters */
#ifdef KTERM
X			bcnt++;
X			*--bptr = c;
X			if(screen->curss) {
X				doSS(screen->gsets[screen->curss]);
# ifdef KTERM_KANJI
X				if (pending_byte == 0)
# endif /* KTERM_KANJI */
X					screen->curss = 0;
X                                continue;
X			}
X			doLS(screen->gsets[c & 0x80 ? screen->curgr
X						    : screen->curgl]);
#else /* KTERM */
X			top = bcnt > TEXT_BUF_SIZE ? TEXT_BUF_SIZE : bcnt;
X			cp = bptr;
X			*--bptr = c;
X			while(top > 0 && isprint(*cp & 0x7f)) {
X				top--;
X				bcnt--;
X				cp++;
X			}
X			if(screen->curss) {
X				dotext(screen, term->flags,
X				 screen->gsets[screen->curss], bptr, bptr + 1);
X				screen->curss = 0;
X				bptr++;
X			}
X			if(bptr < cp)
X				dotext(screen, term->flags,
X				 screen->gsets[screen->curgl], bptr, cp);
X			bptr = cp;
#endif /* !KTERM */
X			break;
X
X		 case CASE_GROUND_STATE:
X			/* exit ignore mode */
X			parsestate = groundtable;
X			break;
X
X		 case CASE_IGNORE_STATE:
X			/* Ies: ignore anything else */
X			parsestate = igntable;
X			break;
X
X		 case CASE_IGNORE_ESC:
X			/* Ign: escape */
X			parsestate = iestable;
X			break;
X
X		 case CASE_IGNORE:
X			/* Ignore character */
X			break;
X
X		 case CASE_BELL:
X			/* bell */
X			Bell();
X			break;
X
X		 case CASE_BS:
X			/* backspace */
X			CursorBack(screen, 1);
X			break;
X
X		 case CASE_CR:
X			/* carriage return */
X			/*
X			 * Tag only real new lines for selections.
X			 */
X			screen->buf[screen->cur_row][screen->cur_col].attr |=
X			  NL_TAG;
X			CarriageReturn(screen);
X			break;
X
X		 case CASE_ESC:
X			/* escape */
X			parsestate = esctable;
X			break;
X
X		 case CASE_VMOT:
X			/*
X			 * form feed, line feed, vertical tab
X			 */
#ifdef STATUSLINE
X		      if (!screen->instatus)
#endif /* STATUSLINE */
X			Index(screen, 1);
X			if (term->flags & LINEFEED) {
X			    /*
X			     * Tag only real new lines for selections.
X			     */
X			    screen->buf[screen->cur_row][screen->cur_col].attr
X			      |= NL_TAG;
X			    CarriageReturn(screen);
X			}
X			if (screen->display->qlen > 0 ||
X			    GetBytesAvailable (screen->display->fd) > 0)
X			  xevents();
X			break;
X
X		 case CASE_TAB:
X			/* tab */
X			/*
X			 * Tag tabs for preservation in selections.
X			 */
X			screen->buf[screen->cur_row][screen->cur_col].attr |=
X			  TAB_TAG;
X			screen->cur_col = TabNext(term->tabs, screen->cur_col);
X			if (screen->cur_col > screen->max_col)
X				screen->cur_col = screen->max_col;
X			break;
X
X		 case CASE_SI:
X			screen->curgl = 0;
X			break;
X
X		 case CASE_SO:
X			screen->curgl = 1;
X			break;
X
X		 case CASE_SCR_STATE:
X			/* enter scr state */
X			parsestate = scrtable;
X			break;
X
X		 case CASE_SCS0_STATE:
X			/* enter scs state 0 */
#ifdef KTERM_CTEXT
X                        /*
X                         * For X11 Compound Text encoding, a multi-byte
X                         * character set is introduced in this way:
X                         *     ESC-$-(-{A,B,C}      G0/GL designation
X                         *     ESC-$-)-{A,B,C}      G1/GR designation
X                         *
X                         * G0/GL triggers an MBCS state in the SCS0 state and
X                         * G1/GR triggers an MBCS state in the SCS1 state.
X                         *
X                         * The {A,B,C} are currently the only X11 Consortium
X                         * registered multi-byte character set compound text
X                         * sequences.  These character sets are currently
X                         * defined in GL only.
X                         *     'A' indicates Chinese GB2312-1980 encoding
X                         *     'B' indicates Japanese JISX0208-1983 encoding
X                         *     'C' indicates Korean KSC5601-1987 encoding
X                         */
X
X                        if (parsestate == mbcstable && c == '(') mbcs = 1;
#endif /* KTERM_CTEXT */
X
X			scstype = 0;
X			parsestate = scstable;
X			break;
X
X		 case CASE_SCS1_STATE:
X			/* enter scs state 1 */
#ifdef KTERM
X			if (c == '-') cs96 = 1;
#endif /* KTERM */
X			scstype = 1;
X			parsestate = scstable;
X			break;
X
X		 case CASE_SCS2_STATE:
X			/* enter scs state 2 */
#ifdef KTERM
X			if (c == '.') cs96 = 1;
#endif /* KTERM */
X			scstype = 2;
X			parsestate = scstable;
X			break;
X
X		 case CASE_SCS3_STATE:
X			/* enter scs state 3 */
#ifdef KTERM
X			if (c == '/') cs96 = 1;
#endif /* KTERM */
X			scstype = 3;
X			parsestate = scstable;
X			break;
X
#ifdef KTERM_KANJI
X		 case CASE_MBCS:
X			/* enter mbcs state */
X			mbcs = 1;
X			scstype = 0;
X			parsestate = mbcstable;
X			break;
#endif /* KTERM_KANJI */
X
X		 case CASE_ESC_IGNORE:
X			/* unknown escape sequence */
X			parsestate = eigtable;
X			break;
X
X		 case CASE_ESC_DIGIT:
X			/* digit in csi or dec mode */
X			if((row = param[nparam - 1]) == DEFAULT)
X				row = 0;
X			param[nparam - 1] = 10 * row + (c - '0');
X			break;
X
X		 case CASE_ESC_SEMI:
X			/* semicolon in csi or dec mode */
X			param[nparam++] = DEFAULT;
X			break;
X
X		 case CASE_DEC_STATE:
X			/* enter dec mode */
X			parsestate = dectable;
X			break;
X
X		 case CASE_ICH:
X			/* ICH */
X			if((row = param[0]) < 1)
X				row = 1;
X			InsertChar(screen, row);
X			parsestate = groundtable;
X			break;
X
X		 case CASE_CUU:
X			/* CUU */
X			if((row = param[0]) < 1)
X				row = 1;
#ifdef STATUSLINE
X		      if (!screen->instatus)
#endif /* STATUSLINE */
X			CursorUp(screen, row);
X			parsestate = groundtable;
X			break;
X
X		 case CASE_CUD:
X			/* CUD */
X			if((row = param[0]) < 1)
X				row = 1;
#ifdef STATUSLINE
X		      if (!screen->instatus)
#endif /* STATUSLINE */
X			CursorDown(screen, row);
X			parsestate = groundtable;
X			break;
X
X		 case CASE_CUF:
X			/* CUF */
X			if((row = param[0]) < 1)
X				row = 1;
X			CursorForward(screen, row);
X			parsestate = groundtable;
X			break;
X
X		 case CASE_CUB:
X			/* CUB */
X			if((row = param[0]) < 1)
X				row = 1;
X			CursorBack(screen, row);
X			parsestate = groundtable;
X			break;
X
X		 case CASE_CUP:
X			/* CUP | HVP */
X			if((row = param[0]) < 1)
X				row = 1;
X			if(nparam < 2 || (col = param[1]) < 1)
X				col = 1;
#ifdef STATUSLINE
X		      if (!screen->instatus)
#endif /* STATUSLINE */
X			CursorSet(screen, row-1, col-1, term->flags);
X			parsestate = groundtable;
X			break;
X
X		 case CASE_ED:
X			/* ED */
X			switch (param[0]) {
X			 case DEFAULT:
X			 case 0:
#ifdef STATUSLINE
X			      if (screen->instatus)
X				ClearRight(screen);
X			      else
#endif /* STATUSLINE */
X				ClearBelow(screen);
X				break;
X
X			 case 1:
#ifdef STATUSLINE
X			      if (screen->instatus)
X				ClearLeft(screen);
X			      else
#endif /* STATUSLINE */
X				ClearAbove(screen);
X				break;
X
X			 case 2:
#ifdef STATUSLINE
X			      if (screen->instatus)
X				ClearLine(screen);
X			      else
#endif /* STATUSLINE */
X				ClearScreen(screen);
X				break;
X			}
X			parsestate = groundtable;
X			break;
X
X		 case CASE_EL:
X			/* EL */
X			switch (param[0]) {
X			 case DEFAULT:
X			 case 0:
X				ClearRight(screen);
X				break;
X			 case 1:
X				ClearLeft(screen);
X				break;
X			 case 2:
X				ClearLine(screen);
X				break;
X			}
X			parsestate = groundtable;
X			break;
X
X		 case CASE_IL:
X			/* IL */
X			if((row = param[0]) < 1)
X				row = 1;
#ifdef STATUSLINE
X		      if (!screen->instatus)
#endif /* STATUSLINE */
X			InsertLine(screen, row);
X			parsestate = groundtable;
X			break;
X
X		 case CASE_DL:
X			/* DL */
X			if((row = param[0]) < 1)
X				row = 1;
#ifdef STATUSLINE
X		      if (!screen->instatus)
#endif /* STATUSLINE */
X			DeleteLine(screen, row);
X			parsestate = groundtable;
X			break;
X
X		 case CASE_DCH:
X			/* DCH */
X			if((row = param[0]) < 1)
X				row = 1;
X			DeleteChar(screen, row);
X			parsestate = groundtable;
X			break;
X
X		 case CASE_TRACK_MOUSE:
X		 	/* Track mouse as long as in window and between
X			   specified rows */
X			TrackMouse(param[0], param[2]-1, param[1]-1,
X			 param[3]-1, param[4]-2);
X			break;
X
X		 case CASE_DECID:
X			param[0] = -1;		/* Default ID parameter */
X			/* Fall through into ... */
X		 case CASE_DA1:
X			/* DA1 */
X			if (param[0] <= 0) {	/* less than means DEFAULT */
X				reply.a_type   = CSI;
X				reply.a_pintro = '?';
X				reply.a_nparam = 2;
X				reply.a_param[0] = 1;		/* VT102 */
X				reply.a_param[1] = 2;		/* VT102 */
X				reply.a_inters = 0;
X				reply.a_final  = 'c';
X				unparseseq(&reply, screen->respond);
X			}
X			parsestate = groundtable;
X			break;
X
X		 case CASE_TBC:
X			/* TBC */
X			if ((row = param[0]) <= 0) /* less than means default */
X				TabClear(term->tabs, screen->cur_col);
X			else if (row == 3)
X				TabZonk(term->tabs);
X			parsestate = groundtable;
X			break;
X
X		 case CASE_SET:
X			/* SET */
X			modes(term, bitset);
X			parsestate = groundtable;
X			break;
X
X		 case CASE_RST:
X			/* RST */
X			modes(term, bitclr);
X			parsestate = groundtable;
X			break;
X
X		 case CASE_SGR:
X			/* SGR */
X			for (row=0; row<nparam; ++row) {
X				switch (param[row]) {
X				 case DEFAULT:
X				 case 0:
X					term->flags &= ~(INVERSE|BOLD|UNDERLINE
#ifdef  COLOR_TEXT /* mukawa */
X						|COLOR_TEXT0|COLOR_TEXT1
X						|COLOR_TEXT2|COLOR_TEXT3
X                                                |COLOR_TEXT4|COLOR_TEXT5
X						|COLOR_TEXT6|COLOR_TEXT7
#endif  /* COLOR_TEXT */
X                                                         );
X					break;
X				 case 1:
X				 case 5:	/* Blink, really.	*/
X					term->flags |= BOLD;
X					break;
X				 case 4:	/* Underscore		*/
X					term->flags |= UNDERLINE;
X					break;
X				 case 7:
X					term->flags |= INVERSE;
X                                        break;
#ifdef  COLOR_TEXT /* mukawa */
X                                 case 30:
X					term->flags &= ~(COLOR_TEXT_MASK|INVERSE);
X					term->flags |= COLOR_TEXT0;
X					break;
X                                 case 31:
X					term->flags &= ~(COLOR_TEXT_MASK|INVERSE);
X					term->flags |= COLOR_TEXT1;
X					break;
X                                 case 32:
X					term->flags &= ~(COLOR_TEXT_MASK|INVERSE);
X					term->flags |= COLOR_TEXT2;
X					break;
X                                 case 33:
X					term->flags &= ~(COLOR_TEXT_MASK|INVERSE);
X					term->flags |= COLOR_TEXT3;
X					break;
X                                 case 34:
X					term->flags &= ~(COLOR_TEXT_MASK|INVERSE);
X					term->flags |= COLOR_TEXT4;
X					break;
X                                 case 35:
X					term->flags &= ~(COLOR_TEXT_MASK|INVERSE);
X					term->flags |= COLOR_TEXT5;
X					break;
X                                 case 36:
X					term->flags &= ~(COLOR_TEXT_MASK|INVERSE);
X					term->flags |= COLOR_TEXT6;
X					break;
X                                 case 37:
X					term->flags &= ~(COLOR_TEXT_MASK|INVERSE);
X					term->flags |= COLOR_TEXT7;
X					break;
X                                 case 40:
X					term->flags &= ~COLOR_TEXT_MASK;
X					term->flags |= (COLOR_TEXT0|INVERSE);
X					break;
X                                 case 41:
X					term->flags &= ~COLOR_TEXT_MASK;
X 					term->flags |= (COLOR_TEXT1|INVERSE);
X					break;
X                                 case 42:
X					term->flags &= ~COLOR_TEXT_MASK;
X					term->flags |= (COLOR_TEXT2|INVERSE);
X					break;
X                                 case 43:
X					term->flags &= ~COLOR_TEXT_MASK;
X					term->flags |= (COLOR_TEXT3|INVERSE);
X					break;
X                                 case 44:
X					term->flags &= ~COLOR_TEXT_MASK;
X					term->flags |= (COLOR_TEXT4|INVERSE);
X					break;
X                                 case 45:
X					term->flags &= ~COLOR_TEXT_MASK;
X					term->flags |= (COLOR_TEXT5|INVERSE);
X					break;
X                                 case 46:
X					term->flags &= ~COLOR_TEXT_MASK;
X					term->flags |= (COLOR_TEXT6|INVERSE);
X					break;
X                                 case 47:
X					term->flags &= ~COLOR_TEXT_MASK;
X					term->flags |= (COLOR_TEXT7|INVERSE);
X					break;
#endif  /* COLOR_TEXT */
X				}
X			}
X			parsestate = groundtable;
X			break;
X
X		 case CASE_CPR:
X			/* CPR */
X			if ((row = param[0]) == 5) {
X				reply.a_type = CSI;
X				reply.a_pintro = 0;
X				reply.a_nparam = 1;
X				reply.a_param[0] = 0;
X				reply.a_inters = 0;
X				reply.a_final  = 'n';
X				unparseseq(&reply, screen->respond);
X			} else if (row == 6) {
X				reply.a_type = CSI;
X				reply.a_pintro = 0;
X				reply.a_nparam = 2;
X				reply.a_param[0] = screen->cur_row+1;
X				reply.a_param[1] = screen->cur_col+1;
X				reply.a_inters = 0;
X				reply.a_final  = 'R';
X				unparseseq(&reply, screen->respond);
X			}
X			parsestate = groundtable;
X			break;
X
X		 case CASE_DECSTBM:
X			/* DECSTBM */
X			if((top = param[0]) < 1)
X				top = 1;
X			if(nparam < 2 || (bot = param[1]) == DEFAULT
X			   || bot > screen->max_row + 1
X			   || bot == 0)
X				bot = screen->max_row+1;
#ifdef STATUSLINE
X		      if (!screen->instatus)
#endif /* STATUSLINE */
X			if (bot > top) {
X				if(screen->scroll_amt)
X					FlushScroll(screen);
X				screen->top_marg = top-1;
X				screen->bot_marg = bot-1;
X				CursorSet(screen, 0, 0, term->flags);
X			}
X			parsestate = groundtable;
X			break;
X
X		 case CASE_DECREQTPARM:
X			/* DECREQTPARM */
X			if ((row = param[0]) == DEFAULT)
X				row = 0;
X			if (row == 0 || row == 1) {
X				reply.a_type = CSI;
X				reply.a_pintro = 0;
X				reply.a_nparam = 7;
X				reply.a_param[0] = row + 2;
X				reply.a_param[1] = 1;	/* no parity */
X				reply.a_param[2] = 1;	/* eight bits */
X				reply.a_param[3] = 112;	/* transmit 9600 baud */
X				reply.a_param[4] = 112;	/* receive 9600 baud */
X				reply.a_param[5] = 1;	/* clock multiplier ? */
X				reply.a_param[6] = 0;	/* STP flags ? */
X				reply.a_inters = 0;
X				reply.a_final  = 'x';
X				unparseseq(&reply, screen->respond);
X			}
X			parsestate = groundtable;
X			break;
X
X		 case CASE_DECSET:
X			/* DECSET */
X			dpmodes(term, bitset);
X			parsestate = groundtable;
X			if(screen->TekEmu)
X				return;
X			break;
X
X		 case CASE_DECRST:
X			/* DECRST */
X			dpmodes(term, bitclr);
X			parsestate = groundtable;
X			break;
X
X		 case CASE_DECALN:
X			/* DECALN */
X			if(screen->cursor_state)
X				HideCursor();
X			for(row = screen->max_row ; row >= 0 ; row--) {
#ifdef KTERM
X				for(xp = screen->buf[row] ; col > 0 ; col--) {
X					xp++->code = (unsigned char) 'E';
X					xp++->gset = GSET_ASCII;
X					xp++->attr = 0;
X				}
#else /* !KTERM */
X				bzero(screen->buf[2 * row + 1],
X				 col = screen->max_col + 1);
X				for(cp = (unsigned char *)screen->buf[2 * row] ; col > 0 ; col--)
X					*cp++ = (unsigned char) 'E';
#endif /* !KTERM */
X			}
X			ScrnRefresh(screen, 0, 0, screen->max_row + 1,
X			 screen->max_col + 1, False);
X			parsestate = groundtable;
X			break;
X
X		 case CASE_GSETS:
#ifdef KTERM
X			c = GSET(c);
X			if (cs96) {
X				c |= CS96;
X				cs96 = 0;
X			}
# ifdef KTERM_KANJI
X			if (mbcs) {
X				c |= MBCS;
X				mbcs = 0;
X			}
# endif /* KTERM_KANJI */
#endif /* KTERM */
X			screen->gsets[scstype] = c;
X			parsestate = groundtable;
X			break;
X
X		 case CASE_DECSC:
X			/* DECSC */
X			CursorSave(term, &screen->sc);
X			parsestate = groundtable;
X			break;
X
X		 case CASE_DECRC:
X			/* DECRC */
X			CursorRestore(term, &screen->sc);
X			parsestate = groundtable;
X			break;
X
X		 case CASE_DECKPAM:
X			/* DECKPAM */
X			term->keyboard.flags |= KYPD_APL;
X			update_appkeypad();
X			parsestate = groundtable;
X			break;
X
X		 case CASE_DECKPNM:
X			/* DECKPNM */
X			term->keyboard.flags &= ~KYPD_APL;
X			update_appkeypad();
X			parsestate = groundtable;
X			break;
X
X		 case CASE_IND:
X			/* IND */
#ifdef STATUSLINE
X		      if (!screen->instatus)
#endif /* STATUSLINE */
X			Index(screen, 1);
X			if (screen->display->qlen > 0 ||
X			    GetBytesAvailable (screen->display->fd) > 0)
X			  xevents();
X			parsestate = groundtable;
X			break;
X
X		 case CASE_NEL:
X			/* NEL */
#ifdef STATUSLINE
X		      if (!screen->instatus)
#endif /* STATUSLINE */
X			Index(screen, 1);
X			/*
X			 * Tag only real new lines for selections.
X			 */
X			screen->buf[screen->cur_row][screen->cur_col].attr |=
X			  NL_TAG;
X			CarriageReturn(screen);
X			
X			if (screen->display->qlen > 0 ||
X			    GetBytesAvailable (screen->display->fd) > 0)
X			  xevents();
X			parsestate = groundtable;
X			break;
X
X		 case CASE_HTS:
X			/* HTS */
X			TabSet(term->tabs, screen->cur_col);
X			parsestate = groundtable;
X			break;
X
X		 case CASE_RI:
X			/* RI */
#ifdef STATUSLINE
X		      if (!screen->instatus)
#endif /* STATUSLINE */
X			RevIndex(screen, 1);
X			parsestate = groundtable;
X			break;
X
X		 case CASE_SS2:
X			/* SS2 */
X			screen->curss = 2;
X			/*
X			dosingleshift();
X			screen->curss = 0;
X			*/
X			parsestate = groundtable;
X			break;
X
X		 case CASE_SS3:
X			/* SS3 */
X			screen->curss = 3;
X			/*
X			dosingleshift();
X			screen->curss = 0;
X			*/
X			parsestate = groundtable;
X			break;
X
X		 case CASE_CSI_STATE:
X			/* enter csi state */
X			nparam = 1;
X			param[0] = DEFAULT;
X			parsestate = csitable;
X			break;
X
X		 case CASE_OSC:
X			/* do osc escapes */
X			do_osc(finput);
X			parsestate = groundtable;
X			break;
X
X		 case CASE_RIS:
X			/* RIS */
X			VTReset(TRUE);
X			parsestate = groundtable;
X			break;
X
X		 case CASE_LS2:
X			/* LS2 */
X			screen->curgl = 2;
X			parsestate = groundtable;
X			break;
X
X		 case CASE_LS3:
X			/* LS3 */
X			screen->curgl = 3;
X			parsestate = groundtable;
X			break;
X
X		 case CASE_LS3R:
X			/* LS3R */
X			screen->curgr = 3;
X			parsestate = groundtable;
X			break;
X
X		 case CASE_LS2R:
X			/* LS2R */
X			screen->curgr = 2;
X			parsestate = groundtable;
X			break;
X
X		 case CASE_LS1R:
X			/* LS1R */
X			screen->curgr = 1;
X			parsestate = groundtable;
X			break;
X
#ifdef STATUSLINE
X		 case CASE_TO_STATUS:
X			if ((c = param[0]) < 1)
X				c = 1;
X			ToStatus(c - 1);
X			parsestate = groundtable;
X			break;
X
X		 case CASE_FROM_STATUS:
X			FromStatus();
X			parsestate = groundtable;
X			break;
X
X		 case CASE_SHOW_STATUS:
X			ShowStatus();
X			parsestate = groundtable;
SHAR_EOF
true || echo 'restore of kterm-4.1.2/charproc.c failed'
fi
echo 'End of kterm-4.1.2 part 7'
echo 'File kterm-4.1.2/charproc.c is continued in part 8'
echo 8 > _shar_seq_.tmp
exit 0


-----------------------------------------------------------------------------
mleisher at nmsu.edu                      "I laughed.
Mark Leisher                                I cried.
Computing Research Lab                          I fell down.
New Mexico State University                        It changed my life."
Las Cruces, NM                     - Rich [Cowboy Feng's Space Bar and Grille]

--
Dan Heller
O'Reilly && Associates       Z-Code Software    Comp-sources-x:
Senior Writer                President          comp-sources.x at uunet.uu.net
argv at ora.com                 argv at zipcode.com



More information about the Comp.sources.x mailing list