v12i096: kterm - kanji xterm, Part15/18

mleisher at NMSU.Edu mleisher at NMSU.Edu
Sat May 11 10:51:44 AEST 1991


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

#!/bin/sh
# this is kt412.15 (part 15 of kterm-4.1.2)
# do not concatenate these parts, unpack them in order with /bin/sh
# file kterm-4.1.2/menu.c continued
#
if test ! -r _shar_seq_.tmp; then
	echo 'Please unpack part 1 first!'
	exit 1
fi
(read Scheck
 if test "$Scheck" != 15; 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/menu.c'
else
echo 'x - continuing file kterm-4.1.2/menu.c'
sed 's/^X//' << 'SHAR_EOF' >> 'kterm-4.1.2/menu.c' &&
X    String *params;
X    Cardinal *param_count;
{
X    do_quit(w, NULL, NULL);
}
X
void HandleScrollbar(w, event, params, param_count)
X    Widget w;
X    XEvent *event;
X    String *params;
X    Cardinal *param_count;
{
X    handle_toggle (do_scrollbar, (int) term->screen.scrollbar,
X		   params, *param_count, w, NULL, NULL);
}
X
void HandleJumpscroll(w, event, params, param_count)
X    Widget w;
X    XEvent *event;
X    String *params;
X    Cardinal *param_count;
{
X    handle_toggle (do_jumpscroll, (int) term->screen.jumpscroll,
X		   params, *param_count, w, NULL, NULL);
}
X
void HandleReverseVideo(w, event, params, param_count)
X    Widget w;
X    XEvent *event;
X    String *params;
X    Cardinal *param_count;
{
X    handle_toggle (do_reversevideo, (int) (term->flags & REVERSE_VIDEO),
X		   params, *param_count, w, NULL, NULL);
}
X
void HandleAutoWrap(w, event, params, param_count)
X    Widget w;
X    XEvent *event;
X    String *params;
X    Cardinal *param_count;
{
X    handle_toggle (do_autowrap, (int) (term->flags & WRAPAROUND),
X		   params, *param_count, w, NULL, NULL);
}
X
void HandleReverseWrap(w, event, params, param_count)
X    Widget w;
X    XEvent *event;
X    String *params;
X    Cardinal *param_count;
{
X    handle_toggle (do_reversewrap, (int) (term->flags & REVERSEWRAP),
X		   params, *param_count, w, NULL, NULL);
}
X
void HandleAutoLineFeed(w, event, params, param_count)
X    Widget w;
X    XEvent *event;
X    String *params;
X    Cardinal *param_count;
{
X    handle_toggle (do_autolinefeed, (int) (term->flags & LINEFEED),
X		   params, *param_count, w, NULL, NULL);
}
X
void HandleAppCursor(w, event, params, param_count)
X    Widget w;
X    XEvent *event;
X    String *params;
X    Cardinal *param_count;
{
X    handle_toggle (do_appcursor, (int) (term->keyboard.flags & CURSOR_APL),
X		   params, *param_count, w, NULL, NULL);
}
X
void HandleAppKeypad(w, event, params, param_count)
X    Widget w;
X    XEvent *event;
X    String *params;
X    Cardinal *param_count;
{
X    handle_toggle (do_appkeypad, (int) (term->keyboard.flags & KYPD_APL),
X		   params, *param_count, w, NULL, NULL);
}
X
void HandleScrollKey(w, event, params, param_count)
X    Widget w;
X    XEvent *event;
X    String *params;
X    Cardinal *param_count;
{
X    handle_toggle (do_scrollkey, (int) term->screen.scrollkey,
X		   params, *param_count, w, NULL, NULL);
}
X
void HandleScrollTtyOutput(w, event, params, param_count)
X    Widget w;
X    XEvent *event;
X    String *params;
X    Cardinal *param_count;
{
X    handle_toggle (do_scrollttyoutput, (int) term->screen.scrollttyoutput,
X		   params, *param_count, w, NULL, NULL);
}
X
void HandleAllow132(w, event, params, param_count)
X    Widget w;
X    XEvent *event;
X    String *params;
X    Cardinal *param_count;
{
X    handle_toggle (do_allow132, (int) term->screen.c132,
X		   params, *param_count, w, NULL, NULL);
}
X
void HandleCursesEmul(w, event, params, param_count)
X    Widget w;
X    XEvent *event;
X    String *params;
X    Cardinal *param_count;
{
X    handle_toggle (do_cursesemul, (int) term->screen.curses,
X		   params, *param_count, w, NULL, NULL);
}
X
void HandleMarginBell(w, event, params, param_count)
X    Widget w;
X    XEvent *event;
X    String *params;
X    Cardinal *param_count;
{
X    handle_toggle (do_marginbell, (int) term->screen.marginbell,
X		   params, *param_count, w, NULL, NULL);
}
X
void HandleAltScreen(w, event, params, param_count)
X    Widget w;
X    XEvent *event;
X    String *params;
X    Cardinal *param_count;
{
X    /* eventually want to see if sensitive or not */
X    handle_toggle (do_altscreen, (int) term->screen.alternate,
X		   params, *param_count, w, NULL, NULL);
}
X
void HandleSoftReset(w, event, params, param_count)
X    Widget w;
X    XEvent *event;
X    String *params;
X    Cardinal *param_count;
{
X    do_softreset(w, NULL, NULL);
}
X
void HandleHardReset(w, event, params, param_count)
X    Widget w;
X    XEvent *event;
X    String *params;
X    Cardinal *param_count;
{
X    do_hardreset(w, NULL, NULL);
}
X
void HandleSetTerminalType(w, event, params, param_count)
X    Widget w;
X    XEvent *event;
X    String *params;
X    Cardinal *param_count;
{
X    if (*param_count == 1) {
X	switch (params[0][0]) {
X	  case 'v': case 'V':
X	    if (term->screen.TekEmu) do_vtmode (w, NULL, NULL);
X	    break;
X	  case 't': case 'T':
X	    if (!term->screen.TekEmu) do_tekmode (w, NULL, NULL);
X	    break;
X	  default:
X	    Bell();
X	}
X    } else {
X	Bell();
X    }
}
X
void HandleVisibility(w, event, params, param_count)
X    Widget w;
X    XEvent *event;
X    String *params;
X    Cardinal *param_count;
{
X    if (*param_count == 2) {
X	switch (params[0][0]) {
X	  case 'v': case 'V':
X	    handle_toggle (do_vtonoff, (int) term->screen.Vshow,
X			   params+1, (*param_count) - 1, w, NULL, NULL);
X	    break;
X	  case 't': case 'T':
X	    handle_toggle (do_tekonoff, (int) term->screen.Tshow,
X			   params+1, (*param_count) - 1, w, NULL, NULL);
X	    break;
X	  default:
X	    Bell();
X	}
X    } else {
X	Bell();
X    }
}
X
void HandleSetTekText(w, event, params, param_count)
X    Widget w;
X    XEvent *event;
X    String *params;
X    Cardinal *param_count;
{
X    void (*proc)() = NULL;
X
X    switch (*param_count) {
X      case 0:
X	proc = do_tektextlarge;
X	break;
X      case 1:
X	switch (params[0][0]) {
X	  case 'l': case 'L': proc = do_tektextlarge; break;
X	  case '2': proc = do_tektext2; break;
X	  case '3': proc = do_tektext3; break;
X	  case 's': case 'S': proc = do_tektextsmall; break;
X	}
X	break;
X    }
X    if (proc) (*proc) (w, NULL, NULL);
X    else Bell();
}
X
void HandleTekPage(w, event, params, param_count)
X    Widget w;
X    XEvent *event;
X    String *params;
X    Cardinal *param_count;
{
X    do_tekpage(w, NULL, NULL);
}
X
void HandleTekReset(w, event, params, param_count)
X    Widget w;
X    XEvent *event;
X    String *params;
X    Cardinal *param_count;
{
X    do_tekreset(w, NULL, NULL);
}
X
void HandleTekCopy(w, event, params, param_count)
X    Widget w;
X    XEvent *event;
X    String *params;
X    Cardinal *param_count;
{
X    do_tekcopy(w, NULL, NULL);
}
X
X
#ifdef STATUSLINE
void HandleStatusLine(w, event, params, param_count)
X    Widget w;
X    XEvent *event;
X    String *params;
X    Cardinal *param_count;
{
X    /* eventually want to see if sensitive or not */
X    handle_toggle (do_statusline, (int) term->screen.statusline,
X		   params, *param_count, w, NULL, NULL);
}
X
void HandleStatusReverse(w, event, params, param_count)
X    Widget w;
X    XEvent *event;
X    String *params;
X    Cardinal *param_count;
{
X    /* eventually want to see if sensitive or not */
X    handle_toggle (do_reversestatus, (int) term->screen.reversestatus,
X		   params, *param_count, w, NULL, NULL);
}
#endif /* STATUSLINE */
#ifdef KTERM_KANJI
void HandleSetKanjiMode(w, event, params, param_count)
X    Widget w;
X    XEvent *event;
X    String *params;
X    Cardinal *param_count;
{
X    char lang = term->misc.lang[0];
X
X    if (!lang)
X      lang = 'j';
X
X    /* eventually want to see if sensitive or not */
X    handle_toggle (do_reversestatus, (int) term->screen.reversestatus,
X		   params, *param_count, w, NULL, NULL);
X    if (*param_count == 1) {
#if defined(KTERM_HANZI) || defined(KTERM_HANGUL)
X	switch (params[0][0]) {
X	  case 'j': case 'J':
X	    do_jismode (w, NULL, NULL);
X	    break;
X	  case 'e': case 'E': case 'x': case 'X': case 'u': case 'U':
X	    term->flags &= ~EUC_KANJI;
X	    do_eucmode (w, NULL, NULL);
X	    break;
X	  case 'g': case 'G':
X	    term->flags &= ~GUOBIAO_HANZI;
X	    do_gbmode (w, NULL, NULL);
X	    break;
X	  case 's': case 'S': case 'm': case 'M':
X            switch(lang) {
X              case 'c': case 'C':
X                term->flags &= ~SGB_HANZI;
X                do_sgbmode (w, NULL, NULL);
X                break;
X              default:
X                term->flags &= ~SJIS_KANJI;
X                do_sjismode (w, NULL, NULL);
X                break;
X            }
X	    break;
X	  case 'b': case 'B':
X	    term->flags &= ~BIG5_HANZI;
X	    do_big5mode (w, NULL, NULL);
X	    break;
X          case 'k': case 'K':
X            term->flags &= ~KS_HANGUL;
X            do_ksmode(w, NULL, NULL);
X            break;
X          case 'n': case 'N':
X            term->flags &= ~NBYTE_HANGUL;
X            do_nbmode(w, NULL, NULL);
X            break;
#else /* !KTERM_HANZI || !KTERM_HANGUL */
X	switch (params[0][0]) {
X	  case 'j': case 'J':
X	    do_jismode (w, NULL, NULL);
X	    break;
X	  case 'e': case 'E': case 'x': case 'X': case 'u': case 'U':
X	    term->flags &= ~EUC_KANJI;
X	    do_eucmode (w, NULL, NULL);
X	    break;
X	  case 's': case 'S': case 'm': case 'M':
X	    term->flags &= ~SJIS_KANJI;
X	    do_sjismode (w, NULL, NULL);
X	    break;
#endif /* KTERM_HANZI || KTERM_HANGUL */
X	  default:
X	    Bell();
X	}
X    } else {
X	Bell();
X    }
}
#endif /* KTERM_KANJI */
SHAR_EOF
echo 'File kterm-4.1.2/menu.c is complete' &&
chmod 0664 kterm-4.1.2/menu.c ||
echo 'restore of kterm-4.1.2/menu.c failed'
Wc_c="`wc -c < 'kterm-4.1.2/menu.c'`"
test 36692 -eq "$Wc_c" ||
	echo 'kterm-4.1.2/menu.c: original size 36692, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= kterm-4.1.2/menu.h ==============
if test -f 'kterm-4.1.2/menu.h' -a X"$1" != X"-c"; then
	echo 'x - skipping kterm-4.1.2/menu.h (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting kterm-4.1.2/menu.h (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'kterm-4.1.2/menu.h' &&
/* Copyright 1989 Massachusetts Institute of Technology */
/*
X *	$Kagotani: /usr/src.yoshi/X/KTerm/4.1.0/RCS/menu.h,v 1.1 90/06/27 09:39:23 kagotani Rel $
X *
X * $Header: /usr/local/src/X11/contrib/clients/kterm-4.1.2/RCS/menu.h,v 1.4 1991/01/30 00:10:54 mleisher Exp $
X */
X
/*
X * Modified for Hanzi support:
X * Mark Leisher mleisher at nmsu.edu Fri Nov  9 09:22:33 1990
X */
X
typedef struct _MenuEntry {
X    char *name;
X    void (*function)();
X    Widget widget;
} MenuEntry;
X
extern MenuEntry mainMenuEntries[], vtMenuEntries[], tekMenuEntries[];
extern MenuEntry fontMenuEntries[];
extern Arg menuArgs[];
X
extern void HandleAllowSends(), HandleVisualBell(),
X  HandleLogging(), HandleRedraw(), HandleSendSignal(), 
X  HandleQuit(), HandleScrollbar(), HandleJumpscroll(), HandleReverseVideo(),
X  HandleAutoWrap(), HandleReverseWrap(), HandleAutoLineFeed(), 
X  HandleAppCursor(), HandleAppKeypad(), HandleScrollKey(), 
X  HandleScrollTtyOutput(), HandleAllow132(), HandleCursesEmul(), 
X  HandleMarginBell(), HandleAltScreen(), HandleSoftReset(), 
X  HandleHardReset(), HandleSetTerminalType(), HandleVisibility(), 
X  HandleSetTekText(), HandleTekPage(), HandleTekReset(), HandleTekCopy();
#ifdef STATUSLINE
extern void HandleStatusLine(), HandleStatusReverse();
#endif /* STATUSLINE */
#ifdef KTERM_KANJI
extern void HandleSetKanjiMode();
#endif /* KTERM_KANJI */
X
X
X
/*
X * The following definitions MUST match the order of entries given in 
X * the mainMenuEntries, vtMenuEntries, and tekMenuEntries arrays in menu.c.
X */
X
/*
X * items in primary menu
X */
#define mainMenu_securekbd 0
#define mainMenu_allowsends 1
#define mainMenu_logging 2
#define mainMenu_redraw 3
#define mainMenu_line1 4
#define mainMenu_suspend 5
#define mainMenu_continue 6
#define mainMenu_interrupt 7
#define mainMenu_hangup 8
#define mainMenu_terminate 9
#define mainMenu_kill 10
#define mainMenu_line2 11
#define mainMenu_quit 12
X
X
/*
X * items in vt100 mode menu
X */
#define vtMenu_scrollbar 0
#define vtMenu_jumpscroll 1
#define vtMenu_reversevideo 2
#define vtMenu_autowrap 3
#define vtMenu_reversewrap 4
#define vtMenu_autolinefeed 5
#define vtMenu_appcursor 6
#define vtMenu_appkeypad 7
#define vtMenu_scrollkey 8
#define vtMenu_scrollttyoutput 9
#define vtMenu_allow132 10
#define vtMenu_cursesemul 11
#define vtMenu_visualbell 12
#define vtMenu_marginbell 13
#define vtMenu_altscreen 14
#define vtMenu_line1 15
#define vtMenu_softreset 16
#define vtMenu_hardreset 17
#define vtMenu_line2 18
#define vtMenu_tekshow 19
#define vtMenu_tekmode 20
#define vtMenu_vthide 21
#if defined(STATUSLINE) || defined(KTERM_KANJI)
# define vtMenu_line3 22
#endif /* STATUSLINE || KTERM_KANJI */
#ifdef STATUSLINE
#  define vtMenu_statusline (vtMenu_line3+1)
#  define vtMenu_reversestatus (vtMenu_statusline+1)
#endif /* STATUSLINE */
#ifdef KTERM_KANJI
#  ifdef STATUSLINE
#   define vtMenu_eucmode (vtMenu_reversestatus+1)
#   define vtMenu_sjismode (vtMenu_eucmode+1)
#  else
#   define vtMenu_eucmode (vtMenu_line3+1)
#   define vtMenu_sjismode (vtMenu_eucmode+1)
#  endif
#define vtMenu_jmodestart vtMenu_eucmode
#define vtMenu_jmodeend   vtMenu_sjismode
#endif /* KTERM_KANJI */
X
#ifdef KTERM_HANZI
#define vtMenu_hzmodestart (vtMenu_sjismode+1)
#define vtMenu_sgbmode     vtMenu_hzmodestart
#define vtMenu_big5mode    (vtMenu_sgbmode+1)
#define vtMenu_hzmodeend   vtMenu_big5mode
#endif /* KTERM_HANZI */
X
#ifdef KTERM_HANGUL
# ifdef KTERM_HANZI
#define vtMenu_hgmodestart (vtMenu_big5mode+1)
#define vtMenu_ksmode      vtMenu_hgmodestart
# else /* !KTERM_HANZI */
#define vtMenu_hgmodestart (vtMenu_sjismode+1)
#define vtMenu_ksmode      vtMenu_hgmodestart
# endif /* KTERM_HANZI */
#define vtMenu_nbmode      (vtMenu_ksmode+1)
#define vtMenu_hgmodeend   vtMenu_nbmode
#endif /* KTERM_HANGUL */
X
/*
X * items in vt100 font menu
X */
#define fontMenu_fontdefault 0
#define fontMenu_font1 1
#define fontMenu_font2 2
#define fontMenu_font3 3
#define fontMenu_font4 4
#define fontMenu_fontescape 5
#define fontMenu_fontsel 6
/* number of non-line items should match NMENUFONTS in ptyx.h */
X
X
/*
X * items in tek4014 mode menu
X */
#define tekMenu_tektextlarge 0
#define tekMenu_tektext2 1
#define tekMenu_tektext3 2
#define tekMenu_tektextsmall 3
#define tekMenu_line1 4
#define tekMenu_tekpage 5
#define tekMenu_tekreset 6
#define tekMenu_tekcopy 7
#define tekMenu_line2 8
#define tekMenu_vtshow 9
#define tekMenu_vtmode 10
#define tekMenu_tekhide 11
X
X
/*
X * macros for updating menus
X */
X
#define update_menu_item(w,mi,val) { if (mi) { \
X    menuArgs[0].value = (XtArgVal) ((val) ? term->screen.menu_item_bitmap \
X				          : None); \
X    XtSetValues (mi, menuArgs, (Cardinal) 1); }}
X
X
#define set_sensitivity(w,mi,val) { if (mi) { \
X    menuArgs[1].value = (XtArgVal) (val); \
X    XtSetValues (mi, menuArgs+1, (Cardinal) 1);  }}
X
X
X
/*
X * there should be one of each of the following for each checkable item
X */
X
X
#define update_securekbd() \
X  update_menu_item (term->screen.mainMenu, \
X		    mainMenuEntries[mainMenu_securekbd].widget, \
X		    term->screen.grabbedKbd)
X
#define update_allowsends() \
X  update_menu_item (term->screen.mainMenu, \
X		    mainMenuEntries[mainMenu_allowsends].widget, \
X		    term->screen.allowSendEvents)
X
#define update_logging() \
X  update_menu_item (term->screen.mainMenu, \
X		    mainMenuEntries[mainMenu_logging].widget, \
X		    term->screen.logging)
X
#define update_scrollbar() \
X  update_menu_item (term->screen.vtMenu, \
X		    vtMenuEntries[vtMenu_scrollbar].widget, \
X		    term->screen.scrollbar)
X
#define update_jumpscroll() \
X  update_menu_item (term->screen.vtMenu, \
X		    vtMenuEntries[vtMenu_jumpscroll].widget, \
X		    term->screen.jumpscroll)
X
#define update_reversevideo() \
X  update_menu_item (term->screen.vtMenu, \
X		    vtMenuEntries[vtMenu_reversevideo].widget, \
X		    (term->flags & REVERSE_VIDEO))
X
#define update_autowrap() \
X  update_menu_item (term->screen.vtMenu, \
X		    vtMenuEntries[vtMenu_autowrap].widget, \
X		    (term->flags & WRAPAROUND))
X
#define update_reversewrap() \
X  update_menu_item (term->screen.vtMenu, \
X		    vtMenuEntries[vtMenu_reversewrap].widget, \
X		    (term->flags & REVERSEWRAP))
X
#define update_autolinefeed() \
X  update_menu_item (term->screen.vtMenu, \
X		    vtMenuEntries[vtMenu_autolinefeed].widget, \
X		    (term->flags & LINEFEED))
X
#define update_appcursor() \
X  update_menu_item (term->screen.vtMenu, \
X		    vtMenuEntries[vtMenu_appcursor].widget, \
X		    (term->keyboard.flags & CURSOR_APL))
X
#define update_appkeypad() \
X  update_menu_item (term->screen.vtMenu, \
X		    vtMenuEntries[vtMenu_appkeypad].widget, \
X		    (term->keyboard.flags & KYPD_APL))
X
#define update_scrollkey() \
X  update_menu_item (term->screen.vtMenu, \
X		    vtMenuEntries[vtMenu_scrollkey].widget,  \
X		    term->screen.scrollkey)
X
#define update_scrollttyoutput() \
X  update_menu_item (term->screen.vtMenu, \
X		    vtMenuEntries[vtMenu_scrollttyoutput].widget, \
X		    term->screen.scrollttyoutput)
X
#define update_allow132() \
X  update_menu_item (term->screen.vtMenu, \
X		    vtMenuEntries[vtMenu_allow132].widget, \
X		    term->screen.c132)
X  
#define update_cursesemul() \
X  update_menu_item (term->screen.vtMenu, \
X		    vtMenuEntries[vtMenu_cursesemul].widget, \
X		    term->screen.curses)
X
#define update_visualbell() \
X  update_menu_item (term->screen.vtMenu, \
X		    vtMenuEntries[vtMenu_visualbell].widget, \
X		    term->screen.visualbell)
X
#define update_marginbell() \
X  update_menu_item (term->screen.vtMenu, \
X		    vtMenuEntries[vtMenu_marginbell].widget, \
X		    term->screen.marginbell)
X
#define update_altscreen() \
X  update_menu_item (term->screen.vtMenu, \
X		    vtMenuEntries[vtMenu_altscreen].widget, \
X		    term->screen.alternate)
X
#define update_tekshow() \
X  update_menu_item (term->screen.vtMenu, \
X		    vtMenuEntries[vtMenu_tekshow].widget, \
X		    term->screen.Tshow)
X
#define update_vttekmode() { \
X    update_menu_item (term->screen.vtMenu, \
X		      vtMenuEntries[vtMenu_tekmode].widget, \
X		      term->screen.TekEmu) \
X    update_menu_item (term->screen.tekMenu, \
X		      tekMenuEntries[tekMenu_vtmode].widget, \
X		      !term->screen.TekEmu) }
X
#define update_vtshow() \
X  update_menu_item (term->screen.tekMenu, \
X		    tekMenuEntries[tekMenu_vtshow].widget, \
X		    term->screen.Vshow)
#ifdef STATUSLINE
#define update_statusline() \
X  update_menu_item (term->screen.vtMenu, \
X		    vtMenuEntries[vtMenu_statusline].widget, \
X		    term->screen.statusline)
#define update_reversestatus() \
X  update_menu_item (term->screen.vtMenu, \
X		    vtMenuEntries[vtMenu_reversestatus].widget, \
X		    term->screen.reversestatus)
#endif /* STATUSLINE */
#ifdef KTERM_KANJI
#define update_eucmode() \
X  update_menu_item (term->screen.vtMenu, \
X		    vtMenuEntries[vtMenu_eucmode].widget, \
X		    term->flags & EUC_KANJI)
X
#define update_sjismode() \
X  update_menu_item (term->screen.vtMenu, \
X		    vtMenuEntries[vtMenu_sjismode].widget, \
X		    term->flags & SJIS_KANJI)
X
#endif /* KTERM_KANJI */
#ifdef KTERM_HANZI
#define update_sgbmode() \
X  update_menu_item (term->screen.vtMenu, \
X                    vtMenuEntries[vtMenu_sgbmode].widget, \
X                    term->flags & SGB_HANZI)
X
#define update_big5mode() \
X  update_menu_item (term->screen.vtMenu, \
X                    vtMenuEntries[vtMenu_big5mode].widget, \
X                    term->flags & BIG5_HANZI)
#endif /* KTERM_HANZI */
#ifdef KTERM_HANGUL
#define update_ksmode() \
X  update_menu_item (term->screen.vtMenu, \
X                    vtMenuEntries[vtMenu_ksmode].widget, \
X                    term->flags & KS_HANGUL)
X
#define update_nbmode() \
X  update_menu_item (term->screen.vtMenu, \
X                    vtMenuEntries[vtMenu_nbmode].widget, \
X                    term->flags & NBYTE_HANGUL)
#endif /* KTERM_HANGUL */
X
X
#define set_vthide_sensitivity() \
X  set_sensitivity (term->screen.vtMenu, \
X		   vtMenuEntries[vtMenu_vthide].widget, \
X		   term->screen.Tshow)
X
#define set_tekhide_sensitivity() \
X  set_sensitivity (term->screen.tekMenu, \
X		   tekMenuEntries[tekMenu_tekhide].widget, \
X		   term->screen.Vshow)
X
#define set_altscreen_sensitivity(val) \
X  set_sensitivity (term->screen.vtMenu,\
X		   vtMenuEntries[vtMenu_altscreen].widget, (val))
#ifdef STATUSLINE
#define set_reversestatus_sensitivity() \
X  set_sensitivity (term->screen.vtMenu, \
X		   vtMenuEntries[vtMenu_reversestatus].widget, \
X		   term->screen.statusline)
#endif /* STATUSLINE */
X
X
/*
X * macros for mapping font size to tekMenu placement
X */
#define FS2MI(n) (n)			/* font_size_to_menu_item */
#define MI2FS(n) (n)			/* menu_item_to_font_size */
X
#define set_tekfont_menu_item(n,val) \
X  update_menu_item (term->screen.tekMenu, \
X		    tekMenuEntries[FS2MI(n)].widget, \
X		    (val))
X
#define set_menu_font(val) \
X  update_menu_item (term->screen.fontMenu, \
X		    fontMenuEntries[term->screen.menu_font_number].widget, \
X		    (val))
SHAR_EOF
chmod 0664 kterm-4.1.2/menu.h ||
echo 'restore of kterm-4.1.2/menu.h failed'
Wc_c="`wc -c < 'kterm-4.1.2/menu.h'`"
test 10856 -eq "$Wc_c" ||
	echo 'kterm-4.1.2/menu.h: original size 10856, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= kterm-4.1.2/misc.c ==============
if test -f 'kterm-4.1.2/misc.c' -a X"$1" != X"-c"; then
	echo 'x - skipping kterm-4.1.2/misc.c (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting kterm-4.1.2/misc.c (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'kterm-4.1.2/misc.c' &&
/*
X *	$XConsortium: misc.c,v 1.65 90/03/12 10:30:17 jim Exp $
X */
X
X
#include <X11/copyright.h>
X
/*
X * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
X *
X *                         All Rights Reserved
X *
X * Permission to use, copy, modify, and distribute this software and its
X * documentation for any purpose and without fee is hereby granted,
X * provided that the above copyright notice appear in all copies and that
X * both that copyright notice and this permission notice appear in
X * supporting documentation, and that the name of Digital Equipment
X * Corporation not be used in advertising or publicity pertaining to
X * distribution of the software without specific, written prior permission.
X *
X *
X * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
X * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
X * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
X * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
X * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
X * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
X * SOFTWARE.
X */
X
#include "ptyx.h"		/* X headers included here. */
X
#include <stdio.h>
#include <X11/Xos.h>
#include <setjmp.h>
#include <ctype.h>
#include <pwd.h>
X
#include <X11/Xatom.h>
#include <X11/cursorfont.h>
X
#include <X11/Shell.h>
#include <X11/Xmu/Error.h>
#include <X11/Xmu/SysUtil.h>
#include <X11/Xmu/WinUtil.h>
X
#include "data.h"
#include "error.h"
#include "menu.h"
X
extern char *malloc();
extern char *mktemp();
extern void exit();
extern void perror();
extern void abort();
X
static void DoSpecialEnterNotify();
static void DoSpecialLeaveNotify();
X
#ifndef lint
static char rcs_id[] = "$XConsortium: misc.c,v 1.65 90/03/12 10:30:17 jim Exp $";
#endif	/* lint */
X
xevents()
{
X	XEvent event;
X	register TScreen *screen = &term->screen;
X
X	if(screen->scroll_amt)
X		FlushScroll(screen);
X	XPending (screen->display);
X	do {
X		if (waitingForTrackInfo)
X			return;
X		XNextEvent (screen->display, &event);
X		/*
X		 * Hack to get around problems with the toolkit throwing away
X		 * eventing during the exclusive grab of the menu popup.  By
X		 * looking at the event ourselves we make sure that we can
X		 * do the right thing.
X		 */
X		if (event.type == EnterNotify &&
X		    (event.xcrossing.window == XtWindow(XtParent(term))) ||
X		    (tekWidget &&
X		     event.xcrossing.window == XtWindow(XtParent(tekWidget))))
X		  DoSpecialEnterNotify (&event);
X		else 
X		if (event.type == LeaveNotify &&
X		    (event.xcrossing.window == XtWindow(XtParent(term))) ||
X		    (tekWidget &&
X		     event.xcrossing.window == XtWindow(XtParent(tekWidget))))
X		  DoSpecialLeaveNotify (&event);
X
X		if (!event.xany.send_event ||
X		    screen->allowSendEvents ||
X		    ((event.xany.type != KeyPress) &&
X		     (event.xany.type != KeyRelease) &&
X		     (event.xany.type != ButtonPress) &&
X		     (event.xany.type != ButtonRelease)))
X		    XtDispatchEvent(&event);
X	} while (QLength(screen->display) > 0);
}
X
X
Cursor make_colored_cursor (cursorindex, fg, bg)
X	int cursorindex;			/* index into font */
X	unsigned long fg, bg;			/* pixel value */
{
X	register TScreen *screen = &term->screen;
X	Cursor c;
X	register Display *dpy = screen->display;
X	
X	c = XCreateFontCursor (dpy, cursorindex);
X	if (c == (Cursor) 0) return (c);
X
X	recolor_cursor (c, fg, bg);
X	return (c);
}
X
/* ARGSUSED */
void HandleKeyPressed(w, event, params, nparams)
X    Widget w;
X    XEvent *event;
X    String *params;
X    Cardinal *nparams;
{
X    register TScreen *screen = &term->screen;
X
#ifdef ACTIVEWINDOWINPUTONLY
X    if (w == (screen->TekEmu ? (Widget)tekWidget : (Widget)term))
#endif
X	Input (&term->keyboard, screen, event, False);
}
/* ARGSUSED */
void HandleEightBitKeyPressed(w, event, params, nparams)
X    Widget w;
X    XEvent *event;
X    String *params;
X    Cardinal *nparams;
{
X    register TScreen *screen = &term->screen;
X
#ifdef ACTIVEWINDOWINPUTONLY
X    if (w == (screen->TekEmu ? (Widget)tekWidget : (Widget)term))
#endif
X	Input (&term->keyboard, screen, event, True);
}
X
/* ARGSUSED */
void HandleStringEvent(w, event, params, nparams)
X    Widget w;
X    XEvent *event;
X    String *params;
X    Cardinal *nparams;
{
X    register TScreen *screen = &term->screen;
X
#ifdef ACTIVEWINDOWINPUTONLY
X    if (w != (screen->TekEmu ? (Widget)tekWidget : (Widget)term)) return;
#endif
X
X    if (*nparams != 1) return;
X
X    if ((*params)[0] == '0' && (*params)[1] == 'x' && (*params)[2] != '\0') {
X	char c, *p, hexval[2];
X	hexval[0] = hexval[1] = 0;
X	for (p = *params+2; (c = *p); p++) {
X	    hexval[0] *= 16;
X	    if (isupper(c)) c = tolower(c);
X	    if (c >= '0' && c <= '9')
X		hexval[0] += c - '0';
X	    else if (c >= 'a' && c <= 'f')
X		hexval[0] += c - 'a' + 10;
X	    else break;
X	}
X	if (c == '\0')
X	    StringInput (screen, hexval);
X    }
X    else {
X	StringInput (screen, *params);
X    }
}
X
static void DoSpecialEnterNotify (ev)
X    register XEnterWindowEvent *ev;
{
X    register TScreen *screen = &term->screen;
X
#ifdef ACTIVEWINDOWINPUTONLY
X    if (ev->window == XtWindow(XtParent(screen->TekEmu ?
X					(Widget)tekWidget : (Widget)term)))
#endif
X      if (((ev->detail) != NotifyInferior) &&
X	  ev->focus &&
X	  !(screen->select & FOCUS))
X	selectwindow(screen, INWINDOW);
}
X
/*ARGSUSED*/
void HandleEnterWindow(w, eventdata, event)
Widget w;
register XEnterWindowEvent *event;
caddr_t eventdata;
{
X    /* NOP since we handled it above */
}
X
X
static void DoSpecialLeaveNotify (ev)
X    register XEnterWindowEvent *ev;
{
X    register TScreen *screen = &term->screen;
X
#ifdef ACTIVEWINDOWINPUTONLY
X    if (ev->window == XtWindow(XtParent(screen->TekEmu ?
X					(Widget)tekWidget : (Widget)term)))
#endif
X      if (((ev->detail) != NotifyInferior) &&
X	  ev->focus &&
X	  !(screen->select & FOCUS))
X	unselectwindow(screen, INWINDOW);
}
X
X
/*ARGSUSED*/
void HandleLeaveWindow(w, eventdata, event)
Widget w;
register XEnterWindowEvent *event;
caddr_t eventdata;
{
X    /* NOP since we handled it above */
}
X
X
/*ARGSUSED*/
void HandleFocusChange(w, eventdata, event)
Widget w;
register XFocusChangeEvent *event;
caddr_t eventdata;
{
X        register TScreen *screen = &term->screen;
X
X        if(event->type == FocusIn)
X                selectwindow(screen,
X			     (event->detail == NotifyPointer) ? INWINDOW :
X								FOCUS);
X        else {
X                unselectwindow(screen,
X			       (event->detail == NotifyPointer) ? INWINDOW :
X								  FOCUS);
X		if (screen->grabbedKbd && (event->mode == NotifyUngrab)) {
X		    screen->grabbedKbd = FALSE;
X		    ReverseVideo(term);
X		    XBell(screen->display, 100);
X		}
X	}
}
X
X
X
selectwindow(screen, flag)
register TScreen *screen;
register int flag;
{
X	if(screen->TekEmu) {
X		if(!Ttoggled)
X			TCursorToggle(TOGGLE);
X		screen->select |= flag;
X		if(!Ttoggled)
X			TCursorToggle(TOGGLE);
X		return;
X	} else {
X		if(screen->cursor_state &&
X		   (screen->cursor_col != screen->cur_col ||
X		    screen->cursor_row != screen->cur_row))
X		    HideCursor();
X		screen->select |= flag;
X		if(screen->cursor_state)
X			ShowCursor();
X		return;
X	}
}
X
unselectwindow(screen, flag)
register TScreen *screen;
register int flag;
{
X    if (screen->always_highlight) return;
X
X    if(screen->TekEmu) {
X	if(!Ttoggled) TCursorToggle(TOGGLE);
X	screen->select &= ~flag;
X	if(!Ttoggled) TCursorToggle(TOGGLE);
X    } else {
X	screen->select &= ~flag;
X	if(screen->cursor_state &&
X	   (screen->cursor_col != screen->cur_col ||
X	    screen->cursor_row != screen->cur_row))
X	      HideCursor();
X	if(screen->cursor_state)
X	  ShowCursor();
X    }
}
X
X
Bell()
{
X	extern XtermWidget term;
X	register TScreen *screen = &term->screen;
X	register Pixel xorPixel = screen->foreground ^ term->core.background_pixel;
X	XGCValues gcval;
X	GC visualGC;
X
X	if(screen->visualbell) {
X		gcval.function = GXxor;
X		gcval.foreground = xorPixel;
X		visualGC = XtGetGC((Widget)term, GCFunction+GCForeground, &gcval);
X		if(screen->TekEmu) {
X			XFillRectangle(
X			    screen->display,
X			    TWindow(screen), 
X			    visualGC,
X			    0, 0,
X			    (unsigned) TFullWidth(screen),
X			    (unsigned) TFullHeight(screen));
X			XFlush(screen->display);
X			XFillRectangle(
X			    screen->display,
X			    TWindow(screen), 
X			    visualGC,
X			    0, 0,
X			    (unsigned) TFullWidth(screen),
X			    (unsigned) TFullHeight(screen));
X		} else {
X			XFillRectangle(
X			    screen->display,
X			    VWindow(screen), 
X			    visualGC,
X			    0, 0,
X			    (unsigned) FullWidth(screen),
X			    (unsigned) FullHeight(screen));
X			XFlush(screen->display);
X			XFillRectangle(
X			    screen->display,
X			    VWindow(screen), 
X			    visualGC,
X			    0, 0,
X			    (unsigned) FullWidth(screen),
X			    (unsigned) FullHeight(screen));
X		}
X	} else
X		XBell(screen->display, 0);
}
X
Redraw()
{
X	extern XtermWidget term;
X	register TScreen *screen = &term->screen;
X	XExposeEvent event;
X
X	event.type = Expose;
X	event.display = screen->display;
X	event.x = 0;
X	event.y = 0;
X	event.count = 0; 
X	
X	if(VWindow(screen)) {
X	        event.window = VWindow(screen);
X		event.width = term->core.width;
X		event.height = term->core.height;
X		(*term->core.widget_class->core_class.expose)(term, &event, NULL);
X		if(screen->scrollbar) 
X			(*screen->scrollWidget->core.widget_class->core_class.expose)(screen->scrollWidget, &event, NULL);
X		}
X
X	if(TWindow(screen) && screen->Tshow) {
X	        event.window = TWindow(screen);
X		event.width = tekWidget->core.width;
X		event.height = tekWidget->core.height;
X		TekExpose (tekWidget, &event, NULL);
X	}
}
X
StartLog(screen)
register TScreen *screen;
{
X	register char *cp;
X	register int i;
X	static char *log_default;
X	char *malloc(), *rindex();
#ifdef ALLOWLOGFILEEXEC
X	void logpipe();
#ifdef SYSV
X	/* SYSV has another pointer which should be part of the
X	** FILE structure but is actually a separate array.
X	*/
X	unsigned char *old_bufend;
#endif	/* SYSV */
#endif /* ALLOWLOGFILEEXEC */
X
X	if(screen->logging || (screen->inhibit & I_LOG))
X		return;
X	if(screen->logfile == NULL || *screen->logfile == 0) {
X		if(screen->logfile)
X			free(screen->logfile);
X		if(log_default == NULL)
X			mktemp(log_default = log_def_name);
X		if((screen->logfile = malloc((unsigned)strlen(log_default) + 1)) == NULL)
X			return;
X		strcpy(screen->logfile, log_default);
X	}
X	if(*screen->logfile == '|') {	/* exec command */
#ifdef ALLOWLOGFILEEXEC
X		/*
X		 * Warning, enabling this "feature" allows arbitrary programs
X		 * to be run.  If ALLOWLOGFILECHANGES is enabled, this can be
X		 * done through escape sequences....  You have been warned.
X		 */
X		int p[2];
X		static char *shell;
X
X		if(pipe(p) < 0 || (i = fork()) < 0)
X			return;
X		if(i == 0) {	/* child */
X			close(p[1]);
X			dup2(p[0], 0);
X			close(p[0]);
X			dup2(fileno(stderr), 1);
X			dup2(fileno(stderr), 2);
#ifdef SYSV
X			old_bufend = _bufend(stderr);
#endif	/* SYSV */
X			close(fileno(stderr));
X			fileno(stderr) = 2;
#ifdef SYSV
X			_bufend(stderr) = old_bufend;
#endif	/* SYSV */
X			close(screen->display->fd);
X			close(screen->respond);
X			if(!shell) {
X				register struct passwd *pw;
X				char *getenv(), *malloc();
X				struct passwd *getpwuid();
X
X				if(((cp = getenv("SHELL")) == NULL || *cp == 0)
X				 && ((pw = getpwuid(screen->uid)) == NULL ||
X				 *(cp = pw->pw_shell) == 0) ||
X				 (shell = malloc((unsigned) strlen(cp) + 1)) == NULL)
X					shell = "/bin/sh";
X				else
X					strcpy(shell, cp);
X			}
X			signal(SIGHUP, SIG_DFL);
X			signal(SIGCHLD, SIG_DFL);
X			setgid(screen->gid);
X			setuid(screen->uid);
X			execl(shell, shell, "-c", &screen->logfile[1], 0);
X			fprintf(stderr, "%s: Can't exec `%s'\n", xterm_name,
X			 &screen->logfile[1]);
X			exit(ERROR_LOGEXEC);
X		}
X		close(p[0]);
X		screen->logfd = p[1];
X		signal(SIGPIPE, logpipe);
#else
X		Bell();
X		Bell();
X		return;
#endif
X	} else {
X		if(access(screen->logfile, F_OK) == 0) {
X			if(access(screen->logfile, W_OK) < 0)
X				return;
X		} else if(cp = rindex(screen->logfile, '/')) {
X			*cp = 0;
X			i = access(screen->logfile, W_OK);
X			*cp = '/';
X			if(i < 0)
X				return;
X		} else if(access(".", W_OK) < 0)
X			return;
X		if((screen->logfd = open(screen->logfile, O_WRONLY | O_APPEND |
X		 O_CREAT, 0644)) < 0)
X			return;
X		chown(screen->logfile, screen->uid, screen->gid);
X
X	}
X	screen->logstart = screen->TekEmu ? Tbptr : bptr;
X	screen->logging = TRUE;
X	update_logging();
}
X
CloseLog(screen)
register TScreen *screen;
{
X	if(!screen->logging || (screen->inhibit & I_LOG))
X		return;
X	FlushLog(screen);
X	close(screen->logfd);
X	screen->logging = FALSE;
X	update_logging();
}
X
FlushLog(screen)
register TScreen *screen;
{
X	register Char *cp;
X	register int i;
X
X	cp = screen->TekEmu ? Tbptr : bptr;
X	if((i = cp - screen->logstart) > 0)
X		write(screen->logfd, screen->logstart, i);
X	screen->logstart = screen->TekEmu ? Tbuffer : buffer;
}
X
#ifdef ALLOWLOGFILEEXEC
void logpipe()
{
X	register TScreen *screen = &term->screen;
X
#ifdef SYSV
X	(void) signal(SIGPIPE, SIG_IGN);
#endif	/* SYSV */
X	if(screen->logging)
X		CloseLog(screen);
}
#endif /* ALLOWLOGFILEEXEC */
X
X
do_osc(func)
int (*func)();
{
X	register TScreen *screen = &term->screen;
X	register int mode, c;
X	register char *cp;
X	char buf[512];
X	char *bufend = &buf[(sizeof buf) - 1];	/* leave room for null */
X	extern char *malloc();
X	Bool okay = True;
X
X	/* 
X	 * lines should be of the form <ESC> ] number ; string <BEL>
X	 *
X	 * where number is one of 0, 1, 2, or 46
X	 */
X	mode = 0;
X	while(isdigit(c = (*func)()))
X		mode = 10 * mode + (c - '0');
X	if (c != ';') okay = False;
X	cp = buf;
X	while(isprint((c = (*func)()) & 0x7f) && cp < bufend)
X		*cp++ = c;
X	if (c != 7) okay = False;
X	*cp = 0;
X	if (okay) switch(mode) {
X	 case 0:	/* new icon name and title*/
X		Changename(buf);
X		Changetitle(buf);
X		break;
X
X	 case 1:	/* new icon name only */
X		Changename(buf);
X		break;
X
X	 case 2:	/* new title only */
X		Changetitle(buf);
X		break;
X
X	 case 46:	/* new log file */
#ifdef ALLOWLOGFILECHANGES
X		/*
X		 * Warning, enabling this feature allows people to overwrite
X		 * arbitrary files accessible to the person running xterm.
X		 */
X		if((cp = malloc((unsigned)strlen(buf) + 1)) == NULL)
X			break;
X		strcpy(cp, buf);
X		if(screen->logfile)
X			free(screen->logfile);
X		screen->logfile = cp;
#else
X		Bell();
X		Bell();
#endif
X		break;
X
X	case 50:
X		SetVTFont (fontMenu_fontescape, True, buf, NULL);
X		break;
X
X	/*
X	 * One could write code to send back the display and host names,
X	 * but that could potentially open a fairly nasty security hole.
X	 */
X	}
}
X
static ChangeGroup(attribute, value)
X     String attribute;
X     XtArgVal value;
{
X	extern Widget toplevel;
X	Arg args[1];
X
X	XtSetArg( args[0], attribute, value );
X	XtSetValues( toplevel, args, 1 );
}
X
Changename(name)
register char *name;
{
X    ChangeGroup( XtNiconName, (XtArgVal)name );
}
X
Changetitle(name)
register char *name;
{
X    ChangeGroup( XtNtitle, (XtArgVal)name );
}
X
#ifndef DEBUG
/* ARGSUSED */
#endif
Panic(s, a)
char	*s;
int a;
{
#ifdef DEBUG
X	if(debug) {
X		fprintf(stderr, "%s: PANIC!	", xterm_name);
X		fprintf(stderr, s, a);
X		fputs("\r\n", stderr);
X		fflush(stderr);
X	}
#endif	/* DEBUG */
}
X
char *SysErrorMsg (n)
X    int n;
{
X    extern char *sys_errlist[];
X    extern int sys_nerr;
X
X    return ((n >= 0 && n < sys_nerr) ? sys_errlist[n] : "unknown error");
}
X
X
SysError (i)
int i;
{
X	int oerrno;
X
X	oerrno = errno;
X	/* perror(3) write(2)s to file descriptor 2 */
X	fprintf (stderr, "%s: Error %d, errno %d: ", xterm_name, i, oerrno);
X	fprintf (stderr, "%s\n", SysErrorMsg (oerrno));
X	Cleanup(i);
}
X
Error (i)
int i;
{
X	fprintf (stderr, "%s: Error %d\n", xterm_name, i);
X	Cleanup(i);
}
X
X
/*
X * cleanup by sending SIGHUP to client processes
X */
Cleanup (code)
int code;
{
X	extern XtermWidget term;
X	register TScreen *screen;
X
X	screen = &term->screen;
X	if (screen->pid > 1) {
X	    (void) killpg (screen->pid, SIGHUP);
X	}
X	Exit (code);
}
X
/*
X * sets the value of var to be arg in the Unix 4.2 BSD environment env.
X * Var should end with '=' (bindings are of the form "var=value").
X * This procedure assumes the memory for the first level of environ
X * was allocated using calloc, with enough extra room at the end so not
X * to have to do a realloc().
X */
Setenv (var, value)
register char *var, *value;
{
X	extern char **environ;
X	register int index = 0;
X	register int len = strlen(var);
X
X	while (environ [index] != NULL) {
X	    if (strncmp (environ [index], var, len) == 0) {
X		/* found it */
X		environ[index] = (char *)malloc ((unsigned)len + strlen (value) + 1);
X		strcpy (environ [index], var);
X		strcat (environ [index], value);
X		return;
X	    }
X	    index ++;
X	}
X
#ifdef DEBUG
X	if (debug) fputs ("expanding env\n", stderr);
#endif	/* DEBUG */
X
X	environ [index] = (char *) malloc ((unsigned)len + strlen (value) + 1);
X	(void) strcpy (environ [index], var);
X	strcat (environ [index], value);
X	environ [++index] = NULL;
}
X
/*
X * returns a pointer to the first occurrence of s2 in s1,
X * or NULL if there are none.
X */
char *strindex (s1, s2)
register char	*s1, *s2;
{
X	register char	*s3;
X	char		*index();
X	int s2len = strlen (s2);
X
X	while ((s3=index(s1, *s2)) != NULL) {
X		if (strncmp(s3, s2, s2len) == 0)
X			return (s3);
X		s1 = ++s3;
X	}
X	return (NULL);
}
X
/*ARGSUSED*/
xerror(d, ev)
Display *d;
register XErrorEvent *ev;
{
X    fprintf (stderr, "%s:  warning, error event receieved:\n", xterm_name);
X    (void) XmuPrintDefaultErrorMessage (d, ev, stderr);
X    Exit (ERROR_XERROR);
}
X
/*ARGSUSED*/
xioerror(dpy)
Display *dpy;
{
X    (void) fprintf (stderr, 
X		    "%s:  fatal IO error %d (%s) or KillClient on X server \"%s\"\r\n",
X		    xterm_name, errno, SysErrorMsg (errno),
X		    DisplayString (dpy));
X
X    Exit(ERROR_XIOERROR);
}
X
XXStrCmp(s1, s2)
char *s1, *s2;
{
X  if (s1 && s2) return(strcmp(s1, s2));
X  if (s1 && *s1) return(1);
X  if (s2 && *s2) return(-1);
X  return(0);
}
X
static void withdraw_window (dpy, w, scr)
X    Display *dpy;
X    Window w;
X    int scr;
{
X    (void) XmuUpdateMapHints (dpy, w, NULL);
X    XWithdrawWindow (dpy, w, scr);
X    return;
}
X
X
void set_vt_visibility (on)
X    Boolean on;
{
X    register TScreen *screen = &term->screen;
X
X    if (on) {
X	if (!screen->Vshow && term) {
X	    VTInit ();
X	    XtMapWidget (term->core.parent);
X	    screen->Vshow = TRUE;
X	}
X    } else {
X	if (screen->Vshow && term) {
X	    withdraw_window (XtDisplay (term), 
X			     XtWindow(XtParent(term)),
X			     XScreenNumberOfScreen(XtScreen(term)));
X	    screen->Vshow = FALSE;
X	}
X    }
X    set_vthide_sensitivity();
X    set_tekhide_sensitivity();
X    update_vttekmode();
X    update_tekshow();
X    update_vtshow();
X    return;
}
X
void set_tek_visibility (on)
X    Boolean on;
{
X    register TScreen *screen = &term->screen;
X
X    if (on) {
X	if (!screen->Tshow && (tekWidget || TekInit())) {
X	    XtRealizeWidget (tekWidget->core.parent);
X	    XtMapWidget (tekWidget->core.parent);
X	    screen->Tshow = TRUE;
X	}
X    } else {
X	if (screen->Tshow && tekWidget) {
X	    withdraw_window (XtDisplay (tekWidget), 
X			     XtWindow(XtParent(tekWidget)),
X			     XScreenNumberOfScreen(XtScreen(tekWidget)));
X	    screen->Tshow = FALSE;
X	}
X    }
X    set_tekhide_sensitivity();
X    set_vthide_sensitivity();
X    update_vtshow();
X    update_tekshow();
X    update_vttekmode();
X    return;
}
X
void end_tek_mode ()
{
X    register TScreen *screen = &term->screen;
X
X    if (screen->TekEmu) {
X	if (screen->logging) {
X	    FlushLog (screen);
X	    screen->logstart = buffer;
X	}
X	longjmp(Tekend, 1);
X    } 
X    return;
}
X
void end_vt_mode ()
{
X    register TScreen *screen = &term->screen;
X
X    if (!screen->TekEmu) {
X	if(screen->logging) {
X	    FlushLog(screen);
X	    screen->logstart = Tbuffer;
X	}
X	screen->TekEmu = TRUE;
X	longjmp(VTend, 1);
X    } 
X    return;
}
SHAR_EOF
chmod 0664 kterm-4.1.2/misc.c ||
echo 'restore of kterm-4.1.2/misc.c failed'
Wc_c="`wc -c < 'kterm-4.1.2/misc.c'`"
test 19514 -eq "$Wc_c" ||
	echo 'kterm-4.1.2/misc.c: original size 19514, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= kterm-4.1.2/n2ks ==============
if test -f 'kterm-4.1.2/n2ks' -a X"$1" != X"-c"; then
	echo 'x - skipping kterm-4.1.2/n2ks (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting kterm-4.1.2/n2ks (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'kterm-4.1.2/n2ks' &&
xbtoa Begin
EhoC,UnVq+Uh-@"7AQkoUo at duYmPKHZ;IF(FJQ<DUpag0[s+XX=/<A6A#-\^Uq:lI]QU*aB;E7WUq^
iD^^=eO_,$lDC8AadUr7DO`DEAMBV`ZU9;KX"Urc<+b'Bf+DPYKKUs2Z1c3cn6cXN]sD5>QRUsa(Td
rK6.TlP(UZO1_eYe5!PYekEqYf1X%Ygd]9YhX7qYip+ at YjDd<9<e858?o"39X1X=H*O\rDR$]l9!Q?
U:9htLE^I%UEal<'Ec&)5E_WgtEbr#?;JWQ*;K&i:$;tTDV,D'6W)@T?Z;PhN\5H//^/AXM^J[_1ap
M$;ZHlEBZI2WrZIi&mZIr,JZK"hXZKG+PZL/&t@^>T'D6ie3CpTjWCU:$^DmR&sBsYa!C9u%iF)\J;
F*4hIF&94-F(hoGF%`k5F%iq:F*Y-e$?L*lWH1\=Z?&dJZu\R@[<#fa\oV_q^iN5WbR/E-[*N<![+T
#/[-M:;[.IpE[.S!L[A at GW[B9jJ:pmW at BXP6Z9=;WJ8@?EJ9XVoPH*tn.DRIasAP0A]APTYcAO<fYA
R`(*ASnj:APKT$ASedD$:Sa<qaGG3VaY@/YXNN>]L?tO`C4IKa$iY0bR-d0[a%<8[a.B[[a at N=[b+#
8[b4)d[bjMJ[c[udCpr\BCUWhHDmuEPBt(*SC:CBYE4<AiFgo0oAl,tZAn\[!AkTVaAk]\fApLlEAo
>*@AkKQ$$>*&BnRb+snn)@?q.=KRULn>PY$l+U[UF*a`<p$f\BeSu\C4l*\DCY:\E at 9s\F3j>\F<p"
\G?P at 9Xt(1H+Be\DRlfV9"DK@::\)I6Fjj>@_'>_@;WQq@;NKuEGN,<EGrDOEG;uSEGE&XEH&La$?:
4"X`71K[W,ul\8b0Q_/W#W`,SJ^`c6:8bR/?-]$>:f]%_4"]&%En]&.L:]&[jJ]'=9O]($,)CV'F at D
nDuGBtLZJC:glNE4`h]Fh>FdBY2:l;,"UI;0fe";/X"n;.@/i;/Nr!;/El%FDJMO$?U3uolOo[rcCr
KW,udeX`SNp]QA;/`H4qhc3eZ,][Cmp]\R[#]]+$,]]aH_]^BlZ]_6G>]qc!W:;*NH6G9IB at _K-jD8
!N&Cq[_cCVA"mDnXd1<,0,*<,fP9<+ru5<(jq!<(O_"<(t"(<-c3R$<1oWV,U($XAhs/Y#Ia%Y>fAQ
Z;aQ4\l<L[^'\Cd^;a]%^=Hh/^>EHs^?T6D^@#NN^S,1\^SqQN:qsPOBYV>n9>A_^8AE_d9Y]@nH,&
ENDSPNFA4jW1A59o=A4")0A7E?XA8T,lA50k[A8K'*$?p:$g37JNkBCXUn97[DpNLAfqKHnpVK[1!X
pTAL_6nK#_7"P\_8:Ce_8pgo_97%J_:!OF_:As;9#9G0:;Pq66G_]+ at _q>RD8GXaCr,gHCVlnT=)Ys
[=)#O^=),Ub=)c$q=*;C#=(oIm=%gEY$<Kd8elPP^fN2t-hH*=dj]=dckZ;61kuV`=l3^U/_X:oL_Y
7PY_k^dV_l[E`_m<il_n9K%_o)ml:rC=`BZ%u&9>f1f9Z,FkH,JHJDSt at A9#Kg!@nsr+ at m\*!@q*@H
@r9-X at r0)WH>CI"H>ga.$@6F)]R">2^Nsk;aa/*Jd<\X-fm7>Mg3QE1iX1!&`9;M@`9MYo`9_ef`9h
kC`:\FO`;+^G`;9mf@`>0iD8iK#CrNW'CW3f.DoKS<BuS8?C;nF)G]:XRG]h!_GYlB=G\G(WGY?$CG
Y#gBGYH*G$@$j8oQY8mols*JrHM)WTm/oDU3L.eWH`:"XpTDJ`j^2/`k6J1`l*%=`mAmC`n>NM`nPZ
U`oIJMFiNck:r`*MBZBdi9?3`L9ZNoOH,lb)DTAaaG"Tf^G!a6XG%/M(G&>:9G&54>B5>Q6B5biC$>
4(niFcoGj(E>Olt:I]oOh"@rF]fbUM!6 at XU8]3aKoMQaLGl.aM2A*aM_^`aNS9laO+WeaOU]2@`[D=
D91gO9uuj;Crl?kCN?YREbfa#UN1-]YbVVHCM'fIEbe1LVK-HHYbuMW at Bc\NCN6SXEbe%HWcDlsYcA
+OCK.O>Ebf3iX`A3$Yc`"^A$E.WCO!(fEbfj&Z#XVmYd+UVDfW(hEc6$'[;p1tYdSRj at Bd4]DfN"kE
c6'(\T2UfYdt0^De-)aEbTQu]lIh.YeG-lB!B$jBlpSpEbT'g_/`=mYepfg:M-iLEb]X!`c>g8YfCd
!A['6rC1a]lEb\=Qb&V6*YfdAoC2pK%Eb]^#c#RPuYg.9(A?aC#C3Qo/Eb]j'd;iuFYgNl!C1jd"Ec
?*(eT,V at Yh!i6 at Be@(E,i,7Ec?-)flD%2YhBG)E+H3-EclE,h/[X9YhjDCF0OPBF_.f8EckuuiGs'L
Yi6"1F`FYGEclK.jDoBBYiTnJA?b3:Fa1.RE_ph]l#KU4Yj)R9:iW`*E_pk^luHc[YjQOFF0P+RBP"
F;EbK'hnT&;;Yjr-ABMPf'EbIqHoQ"VRYk<$MENo.WBQUKQEbK!fpi:%lYk\WH96.96E_CJXr,PGBY
l/T89sFV;94>*!E_CDWU2inKZ(hYH94Y<'E_(8VVK,4>Z);V5ENuH_85ujnE_'`GWcCdRZ)e:Q9QRJ
@E_L)MY&[3EZ*/1AENu`g9Q[PEE_L#KZ>t53Z*XjYH"O=hEd;Z0[W6Y8Z+"akEj</qDKE(oEc,Hn]5
he$Z+LEaDF^tFEc+UV^2e*\Z+k<s at BmUgDK2qtEc-!(_K'O)Z,6ohDKiA(E_:AW`c=[mZ,^lWB!KEt
8lW(;E_9lIb&U7!Z-3Pq6?9?VE^FiPcZ2?aZ-[MX at Bn4#6?09YE^FlQdrJo=Z.02%@V2mrEc#j%fQ(
hMZ.X/7A[0s0D.^'-Ec"=Ogi at 7?Z/#b-D/li;Ec#p'hf<REZ/BY=Ej=YFCiclBEbo<lj`50LZ/uC6C
e_1tEbo0hk]1KZZ0?:FFKt+OCh0g:Ebos)luHocZ0_lrCN?]K;JT18n5=%CZ11_-B!Lo)CJD)*;JT^
GoMTIEZ1SH%CNQiT;JT7:pJPd;Z1q44Gd7'BDfW,[;K$W]r).HFZ2G#-DdfpM;K$Q\Ti,fNZD(68<3
i8sDe-/L;JC0WVG_,?ZDS%-C3$VZ;JK+8W`!SQZE$l<B!SL9C14EM;JL3WY#9"VZEFU5C/hLC;JKaJ
Yu5O]ZEmGJF0`/NE+-&[;K-``[Sh'TZF:0=F`Xk!;KZTW\l*ZmZFa"W<3j/7Fa14*;J:*V^f"ieZG?
lGBLoGG;J9[J_bt/VZG]XSEO*P]BQUQ";J9UHa&6SpZH*ANBOe?i;G2&9b>LuFZHQ3><3jbH94Y?R;
Fki6cr*DFZI'"W9QRMg;G:].e5AtKZIMiHEO+.n9OtH\;JpN\g/;g0ZJ,^aDJ$30;Jnt0h,8-!ZJJJ
sEO+J"DKN2B;Jp$NiDOQ;ZJl3h8nPBi;G'ooj\e]]ZK>%[EjFn,:33`*;GLi0l;CAcZKhiq:3!T+;G
L2sm8?8lZL:[XB!Uo(6=I1i;F5B/nks=FZLnQ&D0*#V;Jet1pJPj?ZM7=79sXRmD+:i-;JfjJqbh9N
ZMY&-D03)^;JfsMr_dTXZ_:95EjMN=CicqY;J]sOV,D,<Z_e(-CiQeZ;J^H]W)@GBZ`/"]EjMffCJq
L?F),j'X`J8hZ`XXVCM'oVF)+:PY]FSSZa"Re at C*7\CN6\eF),m(Zu^"^ZaC-]CLjc[F)-!+[rZ=pZ
ab'lGdFr%CM0ubF)Q**]Q8"4Zb6]eDe?>iF)PKn^N4=5ZbUX#FL/f)DcF'[F)PTq_fKO4Zc*8mBlgW
#F(o6ma)bs'ZcI3%A@'C!C3$Z(F)"X[b]@N?ZcrhuC1aftF)"FUcZ<heZd<c. at C+@&C2pT.F)#g'dr
T8'Zd]>'C1O[$F)#?oeoPeNZe0><F0jP at E+ZH1F)YQogN.=RZePn/E-/GBF)Y*bhK*XHZeohHEjO_G
F`XnKF*2*$j)]?OZfDI7F`FbLF*1Hgk&YZUZfcCPHF)gV:iiu.F(fU#luQi]ZgA*@BP+U=F(e:SmrN
/NZg`$LEO51VBQUTOF(f*jo5eSgZh+TGBP4[EF%^S\pN&u>ZhST7<3uCA9QRQ;F%g2Pr,YP?Zi(5P9
Q at E<F%g\_TlYL"[%h\fF0q`aH"OF[F*Vc4VK7$)[&47PH"=:\F)H$*WcN'![&\7cA[JO[DJ$8XF)GE
nY&eK#[''gXDKN7iF)GNqZ#`N:['Og?F0rAs6>!U6F$a<B\8suV[(-Nb at WJifF(/ag]Q7Oj[(UNiEO
<H$@Uuj\F)>s)_/jI7[)*/kD.^/mF)=FS`,fci[)I*'@C4$qD/lr'F)?$+aE)3/[)iYrD0NA0F)?*-
bB$C![*<YdB!fj)CiZo0F)5p)d;s,9[*f;&Ce_:cF)59le8oGG[+056FL9V?Ch0p)F)6$,fO\i=[+Y
juCJqOoASZ at oggt84[,#;/B!gE+CIbbhASY#Ii+6[i[,D@'CIY\jASY_]j(3"G[,be6FL:. at CK.\'A
SYh`k at JFQ[-.j.CLaa9ASYqcl=FmS[-V at BF0t=GDe?BEAT)"amq$EW[."E6DfiAVAT(PTnmu`M[. at j
DEjYOOC/VG5ASQ:npgn2O[.t&?C1ajLASOrHqdjM.[/=KM at C5uEC2pW[ASQ=pTk.tL[A"">C1FZHAS
QCrUh+Lc[AIMSF1%oWE+ZMVAT2(cWF^$g[AjRFE-/LgAT1VVXCZ?][B4"_F1&2_F_8%cAT^t[Z"8&g
[B^-N:ij%OAS?+l[Uj,n[C9^\A[T$ZBP+Z_AS=fG\n,PM[CZcWBOS<]AS?(k]k(l![D$3cA at 90`BOe
HcAS?=r_.?8\[DN>_94kTMAOoe.`aqhb[E)oQB!o`l9OY?OAP@*Ob at O@h[EJthDK</2ASuRsct.*,[
F&Q'@C=NpDK3)5ASuUte7EN.[FGUq8lW4MAPQdDfk!Kk[G,7ZB!pE*6?0EhAO:LHhIT#a[GM=&@WSs
9AR]8ZialS-[Gth-A@:K0D0!&HASlLrk at JLA[HIs/D.^3?ASk/Ll=Fg@[HhC at EOG.ED032QASktcmU
^3T[IFT8Cid#TASbqco4;`M[Ie$H at C>c>CiQlVAScIrpLS/?[J1)?Ch0sLAScRuqF,1?[JWI/F1(s8
CM(!R7;H>?Tg`a:[\=*tCNR"[7;Gl2Ud]'0[\ZE.B==[+DfW:b7;m7UWC:`;[]0['Ddg)T7;m1SX at 7
&L[]Mu:<48quDe-;[7;?kOYsiDK[^$6/C1ao\7;>Q*Zpe^q[^AP=@CEU5C2p\k7;?qQ\4(.3[^c`6C
1Oca7;?JD]1$[Z[_5+KF1/eOE+ZPn7;u\D^dW3^[_W;>E-/P*7;u57_aSNT[_tUW<49e8BQCQ&7;-b
Na[KlT[`SqGBOnQp78%7$bsb<I[a7H\EjjCbDKE887;c_Ge4"7E[ab^RDIL!)7;cYEf0r#I[b=/:B"
$G_6=I=X77)"&h*jY@[b_?[D0!)C7;[+SiC.Tp[c0_mB"$_gD.0m67;[%Qj[F$.[cRoc9lmc,787C&
ks\<T[d$:UEOP1%Cid&P7;QSEmR:r#[dOPlCiQoQ7;R(SnO78)[dn$GEjkUPCNHrWAnu"ep1A)K[eC
, at CN6fXAnuLsq.=DA[eaTOA at DAICNm5bAnuRurFThX[f-VGDfW=]AoDb"ULnFV\"mVS at CN(FDfN7`A
oDe#Ve0jH\#9XGDe->VAnc:pX(H'e\#a1UFLSAaBk4]UAnl at qY\%Wk\$69PC1ar\Ankb`ZY!rl\$Ta
^FLSYiC/h[NAnkkc[q9Af\$ucWE,rG!AoMh#]4Q"o\%H<l at CNp^E,iA$AoMk$^LhFq\%i>_F`Ot.Ap
&1(_e+%'\&;m$@CO3fF`Fn1Ap&4)a(BHn\&\ngF_%u'Al*QXb at XRj\'/G\FLTM,BQCT.AnZ7pct6s'
\'YOpBOSBuAnZ1ndq398\(##'A at L*$967SoAkQ[DfOdZR\(M+#9QR\tAkZgGgh'5g\(tXiEOXe:9Q[
c$AkZaEi+ at 7U\)Ia,H"OPGApJC*jCW[Z\)h4IA at L]5DK<5MAo;\!l"4gF\*=<4DIL$?Ao;Utlt1-W\
*[dFA at Lu=8lW:hAjUOIo4C=1\+C#>6>!_"AjTq8p1?X5\+aK$A at M>G at WJsSAn#hjqds;L\,6SF at UZb
EAn#bhraoV]\=mMDA at S@GD0!.^Ao2V!V.ORV\>BUFD.0rPAo2OtW+Kmg\>a(WA at SXOD0NLjAo2e&XC
c<m\?-*MCi[%hAo)OuY\%]`\?TX^@CWUTCiQtkAo)S!Zt=,b\?uZPCN?qo@;Bqo\7'/D\@H$`A[o<[
CM()g@;ABC]O>SM\@i5XCLO`e@;Bkm^L:o"\A2NgA at THaCNm;*@;C+t_dR=n\AS__DfWA-@;g4sa'i
mu\B&)s at CXEfDfN;0@;g7tb@,<g\BG:gDe-B&@;gA"c=(F-\BnYuB"65sBk4a%@;9hme7!*5\CCppC
1b!,@;8NHf3rE&\Cb5)EOa\1C36u>@;9>_gL4i@\D.F"C1k'4@;p7shdLJF\DUe7B"6f.E+-99@;p4
rj'cnK\E"!*E)a@/@;obek$`CQ\EI at DF1CICF_8/K@<H\%lX=p8\EjQ2F_&#L@<H(imU9dL\FF!@;n
2C,BQL]T@;'8_oO2E-\Fg2;BOSFE@;'YjpL.`W\G0KGA at VGD967W?@7sS0r*`6/\GZbC9QRb<@8(:D
U1$`8\YES,FLe2U9Ot]1@<lq)VdXj_\YojDH#^Bo@<lt*WaTdc\ZB4W;Rro<DKE at k@;]YeY at 2<\\Zc
ELDF_7B@;\fMZ=.WZ\[,^^EOiGbDKNFs@;]Vd[UF&u\[MoSDJ-Mi at 7kUO\m\3C\[u9BEOi_j8p%VW@
7#%G^gTQA\\SV]@WT)t@:EiZ`*m+`\]%udFLfD"D0*8/@;TVea^K$p\]P7fD03>3@;Ktpc!bF0\^"W
"A\$,qChC6)@;JZKd:$j"\^CgnCiR#7@;L%re7!/m\^b,)A@^9"Ch($-@;L2!fPt\I\_7C1CJq^tEG
JL`gi7+N\_V7 at A\$Z;CM(-7EGJ(Ti,NO,\`!m8CI,MjEGK!nj)JjS\`@aGFLgLQCLk!<EGKg0kAbE\
\`jH at Df`JSEGoI"lZ$iO\a4<SEOkIVDfiPXEGngemr<8V\aTrGDg8h_EG9I(o5SJc\b'lUEOka^C3$
lZEGBR*pi1%[\bQSPC1b$QEGA4Yqf- at Z\bpG^EOl$fC37#cEGB$qTlFgk\tTOOE,rOcEH$!1V/^Hc\
u'IdB"Fm[E+->VEH#p/WGum!\uH*WE)aELEH#I"XDrB'\up$qF1SPpF_84hEHQ94Z#Oo.]!;Z_F]>r
YEHPg'ZuL55]!ZNSF1Si#BQC\pEG/7]\oDD)]"8;hBP+igEG/dl]l at _*]"W/tFLo5,BOn]iED(Aa_J
r4J]#+kp86!1>ED1Daa)Odo]#\kbB"H*(9OYNTED1A`bAhfK]$1S%DK<>7EGfj/cuEr7]$YM8B"HE1
DF_:eEGeL^e8]A7]%%.-DK38=EGfm0f5Y\=]%D"?Ge2RJDK`VFECsiSgi5qc]%m^56?9ZqEC+`XiGh
1r]&I]rA at gf@@WT-BEFNOkk&Fj=]&sE?@W]3FEFNIil#CQ\]'F?QF1U^XD.^BHEG]-qmW!)`]'fuGD
03AYEGT[,no8Je](9oXB"IVSCe_M6EGT'pp2Ong](ZPOCim8`EGT0sq/L4p])$D_A%MP7CN@#b;/:6
ar_[HC]:fR/CJDF8;/9UPUJYfH];/;>FM"AHCK.pC;/9^SVbq5B];Q'6DfWIi;/^NfX&3eI]<"kJ at C
rX=DfNCl;/^QgY>K4;]<DW>De-Jb;/('_ZVbFF]<kFMEkAbWC3."r;/0[S\5@!Q]=A8GC14`c;/13b
]2<<B]=_!UA at oNPE+HSq;0?ok_,5>`]>=nPF`G%2;0?um`)1YV]>[WiA at oiYBQC`+;.t$_a\c_`]?1
SHAR_EOF
true || echo 'restore of kterm-4.1.2/n2ks failed'
fi
echo 'End of kterm-4.1.2 part 15'
echo 'File kterm-4.1.2/n2ks is continued in part 16'
echo 16 > _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