menu.c revision 0bd37d32
10bd37d32Smrg/* $XTermId: menu.c,v 1.313 2013/02/03 21:53:58 tom Exp $ */
2d522f475Smrg
3d522f475Smrg/*
40bd37d32Smrg * Copyright 1999-2012,2013 by Thomas E. Dickey
520d2c4d2Smrg *
620d2c4d2Smrg *                         All Rights Reserved
720d2c4d2Smrg *
820d2c4d2Smrg * Permission is hereby granted, free of charge, to any person obtaining a
920d2c4d2Smrg * copy of this software and associated documentation files (the
1020d2c4d2Smrg * "Software"), to deal in the Software without restriction, including
1120d2c4d2Smrg * without limitation the rights to use, copy, modify, merge, publish,
1220d2c4d2Smrg * distribute, sublicense, and/or sell copies of the Software, and to
1320d2c4d2Smrg * permit persons to whom the Software is furnished to do so, subject to
1420d2c4d2Smrg * the following conditions:
1520d2c4d2Smrg *
1620d2c4d2Smrg * The above copyright notice and this permission notice shall be included
1720d2c4d2Smrg * in all copies or substantial portions of the Software.
1820d2c4d2Smrg *
1920d2c4d2Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
2020d2c4d2Smrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
2120d2c4d2Smrg * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
2220d2c4d2Smrg * IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
2320d2c4d2Smrg * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
2420d2c4d2Smrg * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
2520d2c4d2Smrg * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2620d2c4d2Smrg *
2720d2c4d2Smrg * Except as contained in this notice, the name(s) of the above copyright
2820d2c4d2Smrg * holders shall not be used in advertising or otherwise to promote the
2920d2c4d2Smrg * sale, use or other dealings in this Software without prior written
3020d2c4d2Smrg * authorization.
3120d2c4d2Smrg *
32a1f3da82Smrg *
3320d2c4d2Smrg * Copyright 1989  The Open Group
3420d2c4d2Smrg *
3520d2c4d2Smrg * Permission to use, copy, modify, distribute, and sell this software and its
3620d2c4d2Smrg * documentation for any purpose is hereby granted without fee, provided that
3720d2c4d2Smrg * the above copyright notice appear in all copies and that both that
3820d2c4d2Smrg * copyright notice and this permission notice appear in supporting
3920d2c4d2Smrg * documentation.
4020d2c4d2Smrg *
4120d2c4d2Smrg * The above copyright notice and this permission notice shall be included in
4220d2c4d2Smrg * all copies or substantial portions of the Software.
4320d2c4d2Smrg *
4420d2c4d2Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
4520d2c4d2Smrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
4620d2c4d2Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
4720d2c4d2Smrg * OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
4820d2c4d2Smrg * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
4920d2c4d2Smrg * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
5020d2c4d2Smrg *
5120d2c4d2Smrg * Except as contained in this notice, the name of The Open Group shall not be
5220d2c4d2Smrg * used in advertising or otherwise to promote the sale, use or other dealings
5320d2c4d2Smrg * in this Software without prior written authorization from The Open Group.
5420d2c4d2Smrg */
55d522f475Smrg
56d522f475Smrg#include <xterm.h>
57d522f475Smrg#include <data.h>
58d522f475Smrg#include <menu.h>
59d522f475Smrg#include <fontutils.h>
60d522f475Smrg#include <xstrings.h>
61d522f475Smrg
62d522f475Smrg#include <locale.h>
63d522f475Smrg
64d522f475Smrg#include <X11/Xmu/CharSet.h>
65d522f475Smrg
66d522f475Smrg#define app_con Xaw_app_con	/* quiet a warning from SimpleMenu.h */
67d522f475Smrg
68d522f475Smrg#if defined(HAVE_LIB_XAW)
69d522f475Smrg
70d522f475Smrg#include <X11/Xaw/SimpleMenu.h>
71d522f475Smrg#include <X11/Xaw/Box.h>
72d522f475Smrg#include <X11/Xaw/SmeBSB.h>
73d522f475Smrg#include <X11/Xaw/SmeLine.h>
74d522f475Smrg
75d522f475Smrg#if OPT_TOOLBAR
76d522f475Smrg#include <X11/Xaw/MenuButton.h>
77d522f475Smrg#include <X11/Xaw/Form.h>
78d522f475Smrg#endif
79d522f475Smrg
80d522f475Smrg#elif defined(HAVE_LIB_XAW3D)
81d522f475Smrg
82d522f475Smrg#include <X11/Xaw3d/SimpleMenu.h>
83d522f475Smrg#include <X11/Xaw3d/Box.h>
84d522f475Smrg#include <X11/Xaw3d/SmeBSB.h>
85d522f475Smrg#include <X11/Xaw3d/SmeLine.h>
86d522f475Smrg
87d522f475Smrg#if OPT_TOOLBAR
88d522f475Smrg#include <X11/Xaw3d/MenuButton.h>
89d522f475Smrg#include <X11/Xaw3d/Form.h>
90d522f475Smrg#endif
91d522f475Smrg
92d522f475Smrg#elif defined(HAVE_LIB_NEXTAW)
93d522f475Smrg
94d522f475Smrg#include <X11/neXtaw/SimpleMenu.h>
95d522f475Smrg#include <X11/neXtaw/Box.h>
96d522f475Smrg#include <X11/neXtaw/SmeBSB.h>
97d522f475Smrg#include <X11/neXtaw/SmeLine.h>
98d522f475Smrg
99d522f475Smrg#if OPT_TOOLBAR
100d522f475Smrg#include <X11/neXtaw/MenuButton.h>
101d522f475Smrg#include <X11/neXtaw/Form.h>
102d522f475Smrg#endif
103d522f475Smrg
104d522f475Smrg#elif defined(HAVE_LIB_XAWPLUS)
105d522f475Smrg
106d522f475Smrg#include <X11/XawPlus/SimpleMenu.h>
107d522f475Smrg#include <X11/XawPlus/Box.h>
108d522f475Smrg#include <X11/XawPlus/SmeBSB.h>
109d522f475Smrg#include <X11/XawPlus/SmeLine.h>
110d522f475Smrg
111d522f475Smrg#if OPT_TOOLBAR
112d522f475Smrg#include <X11/XawPlus/MenuButton.h>
113d522f475Smrg#include <X11/XawPlus/Form.h>
114d522f475Smrg#endif
115d522f475Smrg
116d522f475Smrg#endif
117d522f475Smrg
118d522f475Smrg#undef app_con
119d522f475Smrg
120d522f475Smrg#include <stdio.h>
121d522f475Smrg#include <signal.h>
122956cc18dSsnj
123a1f3da82Smrg#if OPT_TRACE
124a1f3da82Smrg#define UpdateCheckbox(func, mn, mi, val) UpdateMenuItem(func, mn, mi, val)
125a1f3da82Smrg#else
126a1f3da82Smrg#define UpdateCheckbox(func, mn, mi, val) UpdateMenuItem(mn, mi, val)
127a1f3da82Smrg#endif
128a1f3da82Smrg
129956cc18dSsnj#define ToggleFlag(flag) flag = (Boolean) !flag
130d522f475Smrg/* *INDENT-OFF* */
131d522f475Smrgstatic void do_8bit_control    PROTO_XT_CALLBACK_ARGS;
132d522f475Smrgstatic void do_allow132        PROTO_XT_CALLBACK_ARGS;
133e39b573cSmrgstatic void do_allowBoldFonts  PROTO_XT_CALLBACK_ARGS;
134d522f475Smrgstatic void do_allowsends      PROTO_XT_CALLBACK_ARGS;
135d522f475Smrgstatic void do_altscreen       PROTO_XT_CALLBACK_ARGS;
136d522f475Smrgstatic void do_appcursor       PROTO_XT_CALLBACK_ARGS;
137d522f475Smrgstatic void do_appkeypad       PROTO_XT_CALLBACK_ARGS;
138d522f475Smrgstatic void do_autolinefeed    PROTO_XT_CALLBACK_ARGS;
139d522f475Smrgstatic void do_autowrap        PROTO_XT_CALLBACK_ARGS;
140d522f475Smrgstatic void do_backarrow       PROTO_XT_CALLBACK_ARGS;
141d522f475Smrgstatic void do_bellIsUrgent    PROTO_XT_CALLBACK_ARGS;
142d522f475Smrgstatic void do_clearsavedlines PROTO_XT_CALLBACK_ARGS;
143d522f475Smrgstatic void do_continue        PROTO_XT_CALLBACK_ARGS;
144d522f475Smrgstatic void do_delete_del      PROTO_XT_CALLBACK_ARGS;
145d522f475Smrgstatic void do_hardreset       PROTO_XT_CALLBACK_ARGS;
146d522f475Smrgstatic void do_interrupt       PROTO_XT_CALLBACK_ARGS;
147d522f475Smrgstatic void do_jumpscroll      PROTO_XT_CALLBACK_ARGS;
148e39b573cSmrgstatic void do_keepSelection   PROTO_XT_CALLBACK_ARGS;
149d522f475Smrgstatic void do_kill            PROTO_XT_CALLBACK_ARGS;
150d522f475Smrgstatic void do_old_fkeys       PROTO_XT_CALLBACK_ARGS;
151d522f475Smrgstatic void do_poponbell       PROTO_XT_CALLBACK_ARGS;
152d522f475Smrgstatic void do_print           PROTO_XT_CALLBACK_ARGS;
153d522f475Smrgstatic void do_print_redir     PROTO_XT_CALLBACK_ARGS;
154d522f475Smrgstatic void do_quit            PROTO_XT_CALLBACK_ARGS;
155d522f475Smrgstatic void do_redraw          PROTO_XT_CALLBACK_ARGS;
156d522f475Smrgstatic void do_reversevideo    PROTO_XT_CALLBACK_ARGS;
157d522f475Smrgstatic void do_reversewrap     PROTO_XT_CALLBACK_ARGS;
158d522f475Smrgstatic void do_scrollbar       PROTO_XT_CALLBACK_ARGS;
159d522f475Smrgstatic void do_scrollkey       PROTO_XT_CALLBACK_ARGS;
160d522f475Smrgstatic void do_scrollttyoutput PROTO_XT_CALLBACK_ARGS;
161d522f475Smrgstatic void do_securekbd       PROTO_XT_CALLBACK_ARGS;
162d522f475Smrgstatic void do_selectClipboard PROTO_XT_CALLBACK_ARGS;
163d522f475Smrgstatic void do_softreset       PROTO_XT_CALLBACK_ARGS;
164d522f475Smrgstatic void do_suspend         PROTO_XT_CALLBACK_ARGS;
165d522f475Smrgstatic void do_terminate       PROTO_XT_CALLBACK_ARGS;
166d522f475Smrgstatic void do_titeInhibit     PROTO_XT_CALLBACK_ARGS;
167d522f475Smrgstatic void do_visualbell      PROTO_XT_CALLBACK_ARGS;
168d522f475Smrgstatic void do_vtfont          PROTO_XT_CALLBACK_ARGS;
169d522f475Smrg
170d522f475Smrg#ifdef ALLOWLOGGING
171d522f475Smrgstatic void do_logging         PROTO_XT_CALLBACK_ARGS;
172d522f475Smrg#endif
173d522f475Smrg
174d522f475Smrg#ifndef NO_ACTIVE_ICON
175d522f475Smrgstatic void do_activeicon      PROTO_XT_CALLBACK_ARGS;
176d522f475Smrg#endif /* NO_ACTIVE_ICON */
177d522f475Smrg
178956cc18dSsnj#if OPT_ALLOW_XXX_OPS
179956cc18dSsnjstatic void enable_allow_xxx_ops (Bool);
18020d2c4d2Smrgstatic void do_allowColorOps   PROTO_XT_CALLBACK_ARGS;
181956cc18dSsnjstatic void do_allowFontOps    PROTO_XT_CALLBACK_ARGS;
18220d2c4d2Smrgstatic void do_allowTcapOps    PROTO_XT_CALLBACK_ARGS;
183956cc18dSsnjstatic void do_allowTitleOps   PROTO_XT_CALLBACK_ARGS;
184956cc18dSsnjstatic void do_allowWindowOps  PROTO_XT_CALLBACK_ARGS;
185956cc18dSsnj#endif
186956cc18dSsnj
187d522f475Smrg#if OPT_BLINK_CURS
188d522f475Smrgstatic void do_cursorblink     PROTO_XT_CALLBACK_ARGS;
189d522f475Smrg#endif
190d522f475Smrg
191d522f475Smrg#if OPT_BOX_CHARS
192d522f475Smrgstatic void do_font_boxchars   PROTO_XT_CALLBACK_ARGS;
19320d2c4d2Smrgstatic void do_font_packed     PROTO_XT_CALLBACK_ARGS;
194d522f475Smrg#endif
195d522f475Smrg
196d522f475Smrg#if OPT_DEC_CHRSET
197d522f475Smrgstatic void do_font_doublesize PROTO_XT_CALLBACK_ARGS;
198d522f475Smrg#endif
199d522f475Smrg
200d522f475Smrg#if OPT_DEC_SOFTFONT
201d522f475Smrgstatic void do_font_loadable   PROTO_XT_CALLBACK_ARGS;
202d522f475Smrg#endif
203d522f475Smrg
204d522f475Smrg#if OPT_HP_FUNC_KEYS
205d522f475Smrgstatic void do_hp_fkeys        PROTO_XT_CALLBACK_ARGS;
206d522f475Smrg#endif
207d522f475Smrg
208a1f3da82Smrg#if OPT_MAXIMIZE
209a1f3da82Smrgstatic void do_fullscreen      PROTO_XT_CALLBACK_ARGS;
210a1f3da82Smrg#endif
211a1f3da82Smrg
212d522f475Smrg#if OPT_NUM_LOCK
213d522f475Smrgstatic void do_alt_esc         PROTO_XT_CALLBACK_ARGS;
214d522f475Smrgstatic void do_num_lock        PROTO_XT_CALLBACK_ARGS;
215d522f475Smrgstatic void do_meta_esc        PROTO_XT_CALLBACK_ARGS;
216d522f475Smrg#endif
217d522f475Smrg
218e39b573cSmrg#if OPT_PRINT_ON_EXIT
219e39b573cSmrgstatic void do_write_now       PROTO_XT_CALLBACK_ARGS;
220e39b573cSmrgstatic void do_write_error     PROTO_XT_CALLBACK_ARGS;
221e39b573cSmrg#endif
222e39b573cSmrg
223d522f475Smrg#if OPT_RENDERFONT
224d522f475Smrgstatic void do_font_renderfont PROTO_XT_CALLBACK_ARGS;
225d522f475Smrg#endif
226d522f475Smrg
227d522f475Smrg#if OPT_SCO_FUNC_KEYS
228d522f475Smrgstatic void do_sco_fkeys       PROTO_XT_CALLBACK_ARGS;
229d522f475Smrg#endif
230d522f475Smrg
231d522f475Smrg#if OPT_SUN_FUNC_KEYS
232d522f475Smrgstatic void do_sun_fkeys       PROTO_XT_CALLBACK_ARGS;
233d522f475Smrg#endif
234d522f475Smrg
235d522f475Smrg#if OPT_SUNPC_KBD
236d522f475Smrgstatic void do_sun_kbd         PROTO_XT_CALLBACK_ARGS;
237d522f475Smrg#endif
238d522f475Smrg
239d522f475Smrg#if OPT_TCAP_FKEYS
240d522f475Smrgstatic void do_tcap_fkeys      PROTO_XT_CALLBACK_ARGS;
241d522f475Smrg#endif
242d522f475Smrg
243d522f475Smrg#if OPT_TEK4014
244d522f475Smrgstatic void do_tekcopy         PROTO_XT_CALLBACK_ARGS;
245d522f475Smrgstatic void do_tekhide         PROTO_XT_CALLBACK_ARGS;
246d522f475Smrgstatic void do_tekmode         PROTO_XT_CALLBACK_ARGS;
247d522f475Smrgstatic void do_tekonoff        PROTO_XT_CALLBACK_ARGS;
248d522f475Smrgstatic void do_tekpage         PROTO_XT_CALLBACK_ARGS;
249d522f475Smrgstatic void do_tekreset        PROTO_XT_CALLBACK_ARGS;
250d522f475Smrgstatic void do_tekshow         PROTO_XT_CALLBACK_ARGS;
251d522f475Smrgstatic void do_tektext2        PROTO_XT_CALLBACK_ARGS;
252d522f475Smrgstatic void do_tektext3        PROTO_XT_CALLBACK_ARGS;
253d522f475Smrgstatic void do_tektextlarge    PROTO_XT_CALLBACK_ARGS;
254d522f475Smrgstatic void do_tektextsmall    PROTO_XT_CALLBACK_ARGS;
255d522f475Smrgstatic void do_vthide          PROTO_XT_CALLBACK_ARGS;
256d522f475Smrgstatic void do_vtmode          PROTO_XT_CALLBACK_ARGS;
257d522f475Smrgstatic void do_vtonoff         PROTO_XT_CALLBACK_ARGS;
258d522f475Smrgstatic void do_vtshow          PROTO_XT_CALLBACK_ARGS;
259d522f475Smrgstatic void handle_tekshow     (Widget gw, Bool allowswitch);
260d522f475Smrgstatic void handle_vtshow      (Widget gw, Bool allowswitch);
261d522f475Smrg#endif
262d522f475Smrg
263d522f475Smrg#if OPT_TOOLBAR
264d522f475Smrgstatic void do_toolbar         PROTO_XT_CALLBACK_ARGS;
265d522f475Smrg#endif
266d522f475Smrg
267d522f475Smrg#if OPT_WIDE_CHARS
268d522f475Smrgstatic void do_font_utf8_mode  PROTO_XT_CALLBACK_ARGS;
269e39b573cSmrgstatic void do_font_utf8_fonts PROTO_XT_CALLBACK_ARGS;
270d522f475Smrgstatic void do_font_utf8_title PROTO_XT_CALLBACK_ARGS;
271d522f475Smrg#endif
272d522f475Smrg
273d522f475Smrg/*
274d522f475Smrg * The order of entries MUST match the values given in menu.h
275d522f475Smrg */
276d522f475SmrgMenuEntry mainMenuEntries[] = {
277d522f475Smrg#if OPT_TOOLBAR
278d522f475Smrg    { "toolbar",	do_toolbar,	NULL },
279a1f3da82Smrg#endif
280a1f3da82Smrg#if OPT_MAXIMIZE
281a1f3da82Smrg    { "fullscreen",	do_fullscreen,	NULL },
282d522f475Smrg#endif
283d522f475Smrg    { "securekbd",	do_securekbd,	NULL },
284d522f475Smrg    { "allowsends",	do_allowsends,	NULL },
285d522f475Smrg    { "redraw",		do_redraw,	NULL },
286d522f475Smrg    { "line1",		NULL,		NULL },
287d522f475Smrg#ifdef ALLOWLOGGING
288d522f475Smrg    { "logging",	do_logging,	NULL },
289e39b573cSmrg#endif
290e39b573cSmrg#ifdef OPT_PRINT_ON_EXIT
291e39b573cSmrg    { "print-immediate", do_write_now,	NULL },
292e39b573cSmrg    { "print-on-error",	do_write_error,	NULL },
293d522f475Smrg#endif
294d522f475Smrg    { "print",		do_print,	NULL },
295d522f475Smrg    { "print-redir",	do_print_redir,	NULL },
296d522f475Smrg    { "line2",		NULL,		NULL },
297d522f475Smrg    { "8-bit control",	do_8bit_control,NULL },
298d522f475Smrg    { "backarrow key",	do_backarrow,	NULL },
299d522f475Smrg#if OPT_NUM_LOCK
300d522f475Smrg    { "num-lock",	do_num_lock,	NULL },
301d522f475Smrg    { "alt-esc",	do_alt_esc,	NULL },
302d522f475Smrg    { "meta-esc",	do_meta_esc,	NULL },
303d522f475Smrg#endif
304d522f475Smrg    { "delete-is-del",	do_delete_del,	NULL },
305d522f475Smrg    { "oldFunctionKeys",do_old_fkeys,	NULL },
306d522f475Smrg#if OPT_TCAP_FKEYS
307d522f475Smrg    { "tcapFunctionKeys",do_tcap_fkeys,	NULL },
308d522f475Smrg#endif
309d522f475Smrg#if OPT_HP_FUNC_KEYS
310d522f475Smrg    { "hpFunctionKeys",	do_hp_fkeys,	NULL },
311d522f475Smrg#endif
312d522f475Smrg#if OPT_SCO_FUNC_KEYS
313d522f475Smrg    { "scoFunctionKeys",do_sco_fkeys,	NULL },
314d522f475Smrg#endif
315d522f475Smrg#if OPT_SUN_FUNC_KEYS
316d522f475Smrg    { "sunFunctionKeys",do_sun_fkeys,	NULL },
317d522f475Smrg#endif
318d522f475Smrg#if OPT_SUNPC_KBD
319d522f475Smrg    { "sunKeyboard",	do_sun_kbd,	NULL },
320d522f475Smrg#endif
321d522f475Smrg    { "line3",		NULL,		NULL },
322d522f475Smrg    { "suspend",	do_suspend,	NULL },
323d522f475Smrg    { "continue",	do_continue,	NULL },
324d522f475Smrg    { "interrupt",	do_interrupt,	NULL },
325d522f475Smrg    { "hangup",		do_hangup,	NULL },
326d522f475Smrg    { "terminate",	do_terminate,	NULL },
327d522f475Smrg    { "kill",		do_kill,	NULL },
328d522f475Smrg    { "line4",		NULL,		NULL },
329d522f475Smrg    { "quit",		do_quit,	NULL }};
330d522f475Smrg
331d522f475SmrgMenuEntry vtMenuEntries[] = {
332d522f475Smrg    { "scrollbar",	do_scrollbar,	NULL },
333d522f475Smrg    { "jumpscroll",	do_jumpscroll,	NULL },
334d522f475Smrg    { "reversevideo",	do_reversevideo, NULL },
335d522f475Smrg    { "autowrap",	do_autowrap,	NULL },
336d522f475Smrg    { "reversewrap",	do_reversewrap, NULL },
337d522f475Smrg    { "autolinefeed",	do_autolinefeed, NULL },
338d522f475Smrg    { "appcursor",	do_appcursor,	NULL },
339d522f475Smrg    { "appkeypad",	do_appkeypad,	NULL },
340d522f475Smrg    { "scrollkey",	do_scrollkey,	NULL },
341d522f475Smrg    { "scrollttyoutput",do_scrollttyoutput, NULL },
342d522f475Smrg    { "allow132",	do_allow132,	NULL },
343d522f475Smrg    { "keepSelection",	do_keepSelection, NULL },
344d522f475Smrg    { "selectToClipboard",do_selectClipboard, NULL },
345d522f475Smrg    { "visualbell",	do_visualbell,	NULL },
346d522f475Smrg    { "bellIsUrgent",	do_bellIsUrgent, NULL },
347d522f475Smrg    { "poponbell",	do_poponbell,	NULL },
348d522f475Smrg#if OPT_BLINK_CURS
349d522f475Smrg    { "cursorblink",	do_cursorblink,	NULL },
350d522f475Smrg#endif
351d522f475Smrg    { "titeInhibit",	do_titeInhibit,	NULL },
352d522f475Smrg#ifndef NO_ACTIVE_ICON
353d522f475Smrg    { "activeicon",	do_activeicon,	NULL },
354d522f475Smrg#endif /* NO_ACTIVE_ICON */
355d522f475Smrg    { "line1",		NULL,		NULL },
356d522f475Smrg    { "softreset",	do_softreset,	NULL },
357d522f475Smrg    { "hardreset",	do_hardreset,	NULL },
358d522f475Smrg    { "clearsavedlines",do_clearsavedlines, NULL },
359d522f475Smrg    { "line2",		NULL,		NULL },
360d522f475Smrg#if OPT_TEK4014
361d522f475Smrg    { "tekshow",	do_tekshow,	NULL },
362d522f475Smrg    { "tekmode",	do_tekmode,	NULL },
363d522f475Smrg    { "vthide",		do_vthide,	NULL },
364d522f475Smrg#endif
365d522f475Smrg    { "altscreen",	do_altscreen,	NULL },
366d522f475Smrg    };
367d522f475Smrg
368d522f475SmrgMenuEntry fontMenuEntries[] = {
369d522f475Smrg    { "fontdefault",	do_vtfont,	NULL },
370d522f475Smrg    { "font1",		do_vtfont,	NULL },
371d522f475Smrg    { "font2",		do_vtfont,	NULL },
372d522f475Smrg    { "font3",		do_vtfont,	NULL },
373d522f475Smrg    { "font4",		do_vtfont,	NULL },
374d522f475Smrg    { "font5",		do_vtfont,	NULL },
375d522f475Smrg    { "font6",		do_vtfont,	NULL },
376d522f475Smrg    /* this is after the last builtin font; the other entries are special */
377d522f475Smrg    { "fontescape",	do_vtfont,	NULL },
378d522f475Smrg    { "fontsel",	do_vtfont,	NULL },
379d522f475Smrg    /* down to here should match NMENUFONTS in ptyx.h */
380d522f475Smrg
381d522f475Smrg#if OPT_DEC_CHRSET || OPT_BOX_CHARS || OPT_DEC_SOFTFONT
382d522f475Smrg    { "line1",		NULL,		NULL },
383e39b573cSmrg    { "allow-bold-fonts", do_allowBoldFonts, NULL },
384d522f475Smrg#if OPT_BOX_CHARS
385d522f475Smrg    { "font-linedrawing",do_font_boxchars,NULL },
38620d2c4d2Smrg    { "font-packed",	do_font_packed,NULL },
387d522f475Smrg#endif
388d522f475Smrg#if OPT_DEC_CHRSET
389d522f475Smrg    { "font-doublesize",do_font_doublesize,NULL },
390d522f475Smrg#endif
391d522f475Smrg#if OPT_DEC_SOFTFONT
392d522f475Smrg    { "font-loadable",	do_font_loadable,NULL },
393d522f475Smrg#endif
394d522f475Smrg#endif /* toggles for DEC font extensions */
395d522f475Smrg
396d522f475Smrg#if OPT_RENDERFONT || OPT_WIDE_CHARS
397d522f475Smrg    { "line2",		NULL,		NULL },
398d522f475Smrg#if OPT_RENDERFONT
399d522f475Smrg    { "render-font",	do_font_renderfont,NULL },
400d522f475Smrg#endif
401d522f475Smrg#if OPT_WIDE_CHARS
402d522f475Smrg    { "utf8-mode",	do_font_utf8_mode,NULL },
403e39b573cSmrg    { "utf8-fonts",	do_font_utf8_fonts,NULL },
404d522f475Smrg    { "utf8-title",	do_font_utf8_title,NULL },
405d522f475Smrg#endif
406d522f475Smrg#endif /* toggles for other font extensions */
407d522f475Smrg
408956cc18dSsnj#if OPT_ALLOW_XXX_OPS
409956cc18dSsnj    { "line3",		NULL,		NULL },
41020d2c4d2Smrg    { "allow-color-ops",do_allowColorOps,NULL },
411956cc18dSsnj    { "allow-font-ops",	do_allowFontOps,NULL },
41220d2c4d2Smrg    { "allow-tcap-ops",	do_allowTcapOps,NULL },
413956cc18dSsnj    { "allow-title-ops",do_allowTitleOps,NULL },
414956cc18dSsnj    { "allow-window-ops",do_allowWindowOps,NULL },
415956cc18dSsnj#endif
416956cc18dSsnj
417d522f475Smrg    };
418d522f475Smrg
419d522f475Smrg#if OPT_TEK4014
420d522f475SmrgMenuEntry tekMenuEntries[] = {
421d522f475Smrg    { "tektextlarge",	do_tektextlarge, NULL },
422d522f475Smrg    { "tektext2",	do_tektext2,	NULL },
423d522f475Smrg    { "tektext3",	do_tektext3,	NULL },
424d522f475Smrg    { "tektextsmall",	do_tektextsmall, NULL },
425d522f475Smrg    { "line1",		NULL,		NULL },
426d522f475Smrg    { "tekpage",	do_tekpage,	NULL },
427d522f475Smrg    { "tekreset",	do_tekreset,	NULL },
428d522f475Smrg    { "tekcopy",	do_tekcopy,	NULL },
429d522f475Smrg    { "line2",		NULL,		NULL },
430d522f475Smrg    { "vtshow",		do_vtshow,	NULL },
431d522f475Smrg    { "vtmode",		do_vtmode,	NULL },
432d522f475Smrg    { "tekhide",	do_tekhide,	NULL }};
433d522f475Smrg#endif
434d522f475Smrg
435d522f475Smrgtypedef struct {
436d522f475Smrg    char *internal_name;
437d522f475Smrg    MenuEntry *entry_list;
438d522f475Smrg    Cardinal entry_len;
439d522f475Smrg} MenuHeader;
440d522f475Smrg
441d522f475Smrg    /* This table is ordered to correspond with MenuIndex */
442d522f475Smrgstatic MenuHeader menu_names[] = {
443d522f475Smrg    { "mainMenu", mainMenuEntries, XtNumber(mainMenuEntries) },
444d522f475Smrg    { "vtMenu",   vtMenuEntries,   XtNumber(vtMenuEntries)   },
445d522f475Smrg    { "fontMenu", fontMenuEntries, XtNumber(fontMenuEntries) },
446d522f475Smrg#if OPT_TEK4014
447d522f475Smrg    { "tekMenu",  tekMenuEntries,  XtNumber(tekMenuEntries)  },
448d522f475Smrg#endif
449d522f475Smrg    { 0,          0,               0 },
450d522f475Smrg};
451d522f475Smrg/* *INDENT-ON* */
452d522f475Smrg
453d522f475Smrg/*
454d522f475Smrg * FIXME:  These are global data rather than in the xterm widget because they
455d522f475Smrg * are initialized before the widget is created.
456d522f475Smrg */
457d522f475Smrgtypedef struct {
458d522f475Smrg    Widget b;			/* the toolbar's buttons */
459d522f475Smrg    Widget w;			/* the popup shell activated by the button */
460d522f475Smrg    Cardinal entries;
461d522f475Smrg} MenuList;
462d522f475Smrg
463d522f475Smrgstatic MenuList vt_shell[NUM_POPUP_MENUS];
464d522f475Smrg
465d522f475Smrg#if OPT_TEK4014 && OPT_TOOLBAR
466d522f475Smrgstatic MenuList tek_shell[NUM_POPUP_MENUS];
467d522f475Smrg#endif
468d522f475Smrg
469d522f475Smrgstatic String
470d522f475SmrgsetMenuLocale(Bool before, String substitute)
471d522f475Smrg{
47220d2c4d2Smrg    String result = setlocale(LC_CTYPE, 0);
473d522f475Smrg
474d522f475Smrg    if (before) {
475d522f475Smrg	result = x_strdup(result);
47620d2c4d2Smrg    }
47720d2c4d2Smrg    (void) setlocale(LC_CTYPE, substitute);
47820d2c4d2Smrg    TRACE(("setMenuLocale %s:%s\n",
47920d2c4d2Smrg	   (before
48020d2c4d2Smrg	    ? "before"
48120d2c4d2Smrg	    : "after"),
48220d2c4d2Smrg	   NonNull(result)));
48320d2c4d2Smrg    if (!before) {
48420d2c4d2Smrg	free((void *) substitute);
485d522f475Smrg    }
486d522f475Smrg    return result;
487d522f475Smrg}
488d522f475Smrg
489d522f475Smrg/*
490d522f475Smrg * Returns a pointer to the MenuList entry that matches the popup menu.
491d522f475Smrg */
492d522f475Smrgstatic MenuList *
493d522f475Smrgselect_menu(Widget w GCC_UNUSED, MenuIndex num)
494d522f475Smrg{
495d522f475Smrg#if OPT_TEK4014 && OPT_TOOLBAR
496d522f475Smrg    while (w != 0) {
497d522f475Smrg	if (w == tekshellwidget) {
498d522f475Smrg	    return &tek_shell[num];
499d522f475Smrg	}
500d522f475Smrg	w = XtParent(w);
501d522f475Smrg    }
502d522f475Smrg#endif
503d522f475Smrg    return &vt_shell[num];
504d522f475Smrg}
505d522f475Smrg
506d522f475Smrg/*
507d522f475Smrg * Returns a pointer to the given popup menu shell
508d522f475Smrg */
509d522f475Smrgstatic Widget
510d522f475Smrgobtain_menu(Widget w, MenuIndex num)
511d522f475Smrg{
512d522f475Smrg    return select_menu(w, num)->w;
513d522f475Smrg}
514d522f475Smrg
515d522f475Smrg/*
516d522f475Smrg * Returns the number of entries in the given popup menu shell
517d522f475Smrg */
518d522f475Smrgstatic Cardinal
519d522f475Smrgsizeof_menu(Widget w, MenuIndex num)
520d522f475Smrg{
521d522f475Smrg    return select_menu(w, num)->entries;
522d522f475Smrg}
523d522f475Smrg
524d522f475Smrg/*
525e39b573cSmrg * Return an array of flags telling if a given menu item is never going to
526e39b573cSmrg * be used, so we can reduce the size of menus.
527d522f475Smrg */
528e39b573cSmrgstatic Boolean *
529e39b573cSmrgunusedEntries(XtermWidget xw, MenuIndex num)
530e39b573cSmrg{
531e39b573cSmrg    static Boolean result[XtNumber(mainMenuEntries)
532e39b573cSmrg			  + XtNumber(vtMenuEntries)
533e39b573cSmrg			  + XtNumber(fontMenuEntries)
534e39b573cSmrg#if OPT_TEK4014
535e39b573cSmrg			  + XtNumber(tekMenuEntries)
536e39b573cSmrg#endif
537e39b573cSmrg    ];
538e39b573cSmrg    TScreen *screen = TScreenOf(xw);
539d522f475Smrg
540e39b573cSmrg    memset(result, 0, sizeof(result));
541e39b573cSmrg    switch (num) {
542e39b573cSmrg    case mainMenu:
5430bd37d32Smrg#if OPT_MAXIMIZE
544e39b573cSmrg	if (resource.fullscreen > 1) {
545e39b573cSmrg	    result[mainMenu_fullscreen] = True;
546e39b573cSmrg	}
5470bd37d32Smrg#endif
548e39b573cSmrg#if OPT_NUM_LOCK
549e39b573cSmrg	if (!screen->alt_is_not_meta) {
550e39b573cSmrg	    result[mainMenu_alt_esc] = True;
551e39b573cSmrg	}
552e39b573cSmrg#endif
553e39b573cSmrg	if (!xtermHasPrinter(xw)) {
554e39b573cSmrg	    result[mainMenu_print] = True;
555e39b573cSmrg	    result[mainMenu_print_redir] = True;
556e39b573cSmrg	}
557e39b573cSmrg	if (screen->terminal_id < 200) {
558e39b573cSmrg	    result[mainMenu_8bit_ctrl] = True;
559e39b573cSmrg	}
560e39b573cSmrg#if !defined(SIGTSTP)
561e39b573cSmrg	result[mainMenu_suspend] = True;
562e39b573cSmrg#endif
563e39b573cSmrg#if !defined(SIGCONT)
564e39b573cSmrg	result[mainMenu_continue] = True;
565e39b573cSmrg#endif
566e39b573cSmrg#ifdef ALLOWLOGGING
567e39b573cSmrg	if (screen->inhibit & I_LOG) {
568e39b573cSmrg	    result[mainMenu_logging] = True;
569e39b573cSmrg	}
570e39b573cSmrg#endif
571e39b573cSmrg	if (screen->inhibit & I_SIGNAL) {
572e39b573cSmrg	    int n;
573e39b573cSmrg	    for (n = (int) mainMenu_suspend; n <= (int) mainMenu_quit; ++n) {
574e39b573cSmrg		result[n] = True;
575e39b573cSmrg	    }
576e39b573cSmrg	}
577e39b573cSmrg	break;
578e39b573cSmrg    case vtMenu:
579e39b573cSmrg#ifndef NO_ACTIVE_ICON
580e39b573cSmrg	if (!screen->fnt_icon.fs || !screen->iconVwin.window) {
581e39b573cSmrg	    result[vtMenu_activeicon] = True;
582e39b573cSmrg	}
583e39b573cSmrg#endif /* NO_ACTIVE_ICON */
584e39b573cSmrg#if OPT_TEK4014
585e39b573cSmrg	if (screen->inhibit & I_TEK) {
586e39b573cSmrg	    int n;
587e39b573cSmrg	    for (n = (int) vtMenu_tekshow; n <= (int) vtMenu_vthide; ++n) {
588e39b573cSmrg		result[n] = True;
589e39b573cSmrg	    }
590e39b573cSmrg	}
591e39b573cSmrg#endif
592e39b573cSmrg	break;
593e39b573cSmrg    case fontMenu:
594e39b573cSmrg	break;
595e39b573cSmrg#if OPT_TEK4014
596e39b573cSmrg    case tekMenu:
597e39b573cSmrg	break;
598e39b573cSmrg#endif
599e39b573cSmrg    case noMenu:
600e39b573cSmrg	break;
601e39b573cSmrg    }
602e39b573cSmrg    return result;
603e39b573cSmrg}
604e39b573cSmrg
605e39b573cSmrg/*
606e39b573cSmrg * create_menu - create a popup shell and stuff the menu into it.
607e39b573cSmrg */
608d522f475Smrgstatic Widget
609e39b573cSmrgcreate_menu(Widget w, XtermWidget xw, MenuIndex num)
610d522f475Smrg{
611d522f475Smrg    static XtCallbackRec cb[2] =
612d522f475Smrg    {
613d522f475Smrg	{NULL, NULL},
614d522f475Smrg	{NULL, NULL}};
615d522f475Smrg    static Arg arg =
616d522f475Smrg    {XtNcallback, (XtArgVal) cb};
617d522f475Smrg
618e39b573cSmrg    TScreen *screen = TScreenOf(xw);
619d522f475Smrg    MenuHeader *data = &menu_names[num];
620d522f475Smrg    MenuList *list = select_menu(w, num);
621d522f475Smrg    struct _MenuEntry *entries = data->entry_list;
622956cc18dSsnj    Cardinal nentries = data->entry_len;
623d522f475Smrg#if !OPT_TOOLBAR
624d522f475Smrg    String saveLocale;
625d522f475Smrg#endif
626d522f475Smrg
627d522f475Smrg    if (screen->menu_item_bitmap == None) {
628d522f475Smrg	/*
629d522f475Smrg	 * we really want to do these dynamically
630d522f475Smrg	 */
631d522f475Smrg#define check_width 9
632d522f475Smrg#define check_height 8
633d522f475Smrg	static unsigned char check_bits[] =
634d522f475Smrg	{
635d522f475Smrg	    0x00, 0x01, 0x80, 0x01, 0xc0, 0x00, 0x60, 0x00,
636d522f475Smrg	    0x31, 0x00, 0x1b, 0x00, 0x0e, 0x00, 0x04, 0x00
637d522f475Smrg	};
638d522f475Smrg
639d522f475Smrg	screen->menu_item_bitmap =
640e39b573cSmrg	    XCreateBitmapFromData(XtDisplay(xw),
641e39b573cSmrg				  RootWindowOfScreen(XtScreen(xw)),
642d522f475Smrg				  (char *) check_bits, check_width, check_height);
643d522f475Smrg    }
644d522f475Smrg#if !OPT_TOOLBAR
645d522f475Smrg    saveLocale = setMenuLocale(True, resource.menuLocale);
646d522f475Smrg    list->w = XtCreatePopupShell(data->internal_name,
647d522f475Smrg				 simpleMenuWidgetClass,
648d522f475Smrg				 toplevel,
649d522f475Smrg				 NULL, 0);
650d522f475Smrg#endif
651d522f475Smrg    if (list->w != 0) {
652e39b573cSmrg	Boolean *unused = unusedEntries(xw, num);
653e39b573cSmrg	Cardinal n;
654e39b573cSmrg
655e39b573cSmrg	list->entries = 0;
656e39b573cSmrg
657e39b573cSmrg	for (n = 0; n < nentries; ++n) {
658e39b573cSmrg	    if (!unused[n]) {
659e39b573cSmrg		cb[0].callback = (XtCallbackProc) entries[n].function;
6600bd37d32Smrg		cb[0].closure = (XtPointer) entries[n].name;
661e39b573cSmrg		entries[n].widget = XtCreateManagedWidget(entries[n].name,
662e39b573cSmrg							  (entries[n].function
663e39b573cSmrg							   ? smeBSBObjectClass
664e39b573cSmrg							   : smeLineObjectClass),
665e39b573cSmrg							  list->w,
666e39b573cSmrg							  &arg, (Cardinal) 1);
667e39b573cSmrg		list->entries++;
668e39b573cSmrg	    }
669d522f475Smrg	}
670d522f475Smrg    }
671d522f475Smrg#if !OPT_TOOLBAR
672d522f475Smrg    (void) setMenuLocale(False, saveLocale);
673d522f475Smrg#endif
674d522f475Smrg
675d522f475Smrg    /* do not realize at this point */
676d522f475Smrg    return list->w;
677d522f475Smrg}
678d522f475Smrg
679d522f475Smrgstatic MenuIndex
680d522f475SmrgindexOfMenu(String menuName)
681d522f475Smrg{
682d522f475Smrg    MenuIndex me;
683d522f475Smrg    switch (*menuName) {
684d522f475Smrg    case 'm':
685d522f475Smrg	me = mainMenu;
686d522f475Smrg	break;
687d522f475Smrg    case 'v':
688d522f475Smrg	me = vtMenu;
689d522f475Smrg	break;
690d522f475Smrg    case 'f':
691d522f475Smrg	me = fontMenu;
692d522f475Smrg	break;
693d522f475Smrg#if OPT_TEK4014
694d522f475Smrg    case 't':
695d522f475Smrg	me = tekMenu;
696d522f475Smrg	break;
697d522f475Smrg#endif
698d522f475Smrg    default:
699d522f475Smrg	me = noMenu;
700d522f475Smrg    }
701d522f475Smrg    return (me);
702d522f475Smrg}
703d522f475Smrg
704d522f475Smrg/* ARGSUSED */
705d522f475Smrgstatic Bool
706d522f475Smrgdomenu(Widget w,
707d522f475Smrg       XEvent * event GCC_UNUSED,
708d522f475Smrg       String * params,		/* mainMenu, vtMenu, or tekMenu */
709d522f475Smrg       Cardinal *param_count)	/* 0 or 1 */
710d522f475Smrg{
71120d2c4d2Smrg    XtermWidget xw = term;
71220d2c4d2Smrg    TScreen *screen = TScreenOf(xw);
713d522f475Smrg    MenuIndex me;
714d522f475Smrg    Bool created = False;
715d522f475Smrg    Widget mw;
716d522f475Smrg
717d522f475Smrg    if (*param_count != 1) {
71820d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
719d522f475Smrg	return False;
720d522f475Smrg    }
721d522f475Smrg
722d522f475Smrg    if ((me = indexOfMenu(params[0])) == noMenu) {
72320d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
724d522f475Smrg	return False;
725d522f475Smrg    }
726d522f475Smrg
727d522f475Smrg    if ((mw = obtain_menu(w, me)) == 0
728d522f475Smrg	|| sizeof_menu(w, me) == 0) {
72920d2c4d2Smrg	mw = create_menu(w, xw, me);
730d522f475Smrg	created = (mw != 0);
731d522f475Smrg    }
732d522f475Smrg    if (mw == 0)
733d522f475Smrg	return False;
734d522f475Smrg
735d522f475Smrg    TRACE(("domenu(%s) %s\n", params[0], created ? "create" : "update"));
736d522f475Smrg    switch (me) {
737d522f475Smrg    case mainMenu:
738d522f475Smrg	if (created) {
739d522f475Smrg	    update_toolbar();
740a1f3da82Smrg	    update_fullscreen();
741d522f475Smrg	    update_securekbd();
742d522f475Smrg	    update_allowsends();
743d522f475Smrg	    update_logging();
744d522f475Smrg	    update_print_redir();
745d522f475Smrg	    update_8bit_control();
746d522f475Smrg	    update_decbkm();
747d522f475Smrg	    update_num_lock();
748d522f475Smrg	    update_alt_esc();
749d522f475Smrg	    update_meta_esc();
750d522f475Smrg	    update_delete_del();
751d522f475Smrg	    update_keyboard_type();
752e39b573cSmrg#ifdef PRINT_ON_EXIT
753e39b573cSmrg	    screen->write_error = !IsEmpty(resource.printOnXError);
754e39b573cSmrg	    SetItemSensitivity(mainMenuEntries[mainMenu_write_now].widget, False);
755e39b573cSmrg	    SetItemSensitivity(mainMenuEntries[mainMenu_write_error].widget, screen->write_error);
756d522f475Smrg#endif
757d522f475Smrg	}
758d522f475Smrg	break;
759d522f475Smrg
760d522f475Smrg    case vtMenu:
761d522f475Smrg	if (created) {
762d522f475Smrg	    update_scrollbar();
763d522f475Smrg	    update_jumpscroll();
764d522f475Smrg	    update_reversevideo();
765d522f475Smrg	    update_autowrap();
766d522f475Smrg	    update_reversewrap();
767d522f475Smrg	    update_autolinefeed();
768d522f475Smrg	    update_appcursor();
769d522f475Smrg	    update_appkeypad();
770d522f475Smrg	    update_scrollkey();
771d522f475Smrg	    update_scrollttyoutput();
772d522f475Smrg	    update_allow132();
773d522f475Smrg	    update_cursesemul();
774d522f475Smrg	    update_keepSelection();
775d522f475Smrg	    update_selectToClipboard();
776d522f475Smrg	    update_visualbell();
777d522f475Smrg	    update_poponbell();
778d522f475Smrg	    update_bellIsUrgent();
779d522f475Smrg	    update_cursorblink();
780d522f475Smrg	    update_altscreen();
781d522f475Smrg	    update_titeInhibit();
782d522f475Smrg#ifndef NO_ACTIVE_ICON
783e39b573cSmrg	    update_activeicon();
784d522f475Smrg#endif /* NO_ACTIVE_ICON */
785d522f475Smrg	}
786d522f475Smrg	break;
787d522f475Smrg
788d522f475Smrg    case fontMenu:
789d522f475Smrg	if (created) {
790e39b573cSmrg	    int n;
791e39b573cSmrg
792d522f475Smrg	    set_menu_font(True);
793e39b573cSmrg	    for (n = fontMenu_font1; n <= fontMenu_font6; ++n) {
794e39b573cSmrg		if (IsEmpty(screen->menu_font_names[n][fNorm]))
795e39b573cSmrg		    SetItemSensitivity(fontMenuEntries[n].widget, False);
796e39b573cSmrg	    }
797d522f475Smrg	    SetItemSensitivity(
798d522f475Smrg				  fontMenuEntries[fontMenu_fontescape].widget,
799d522f475Smrg				  (screen->menu_font_names[fontMenu_fontescape][fNorm]
800d522f475Smrg				   ? True : False));
801e39b573cSmrg	    update_menu_allowBoldFonts();
802d522f475Smrg#if OPT_BOX_CHARS
803d522f475Smrg	    update_font_boxchars();
804d522f475Smrg	    SetItemSensitivity(
805d522f475Smrg				  fontMenuEntries[fontMenu_font_boxchars].widget,
806d522f475Smrg				  True);
80720d2c4d2Smrg	    update_font_packed();
80820d2c4d2Smrg	    SetItemSensitivity(
80920d2c4d2Smrg				  fontMenuEntries[fontMenu_font_packedfont].widget,
81020d2c4d2Smrg				  True);
811d522f475Smrg#endif
812d522f475Smrg#if OPT_DEC_SOFTFONT		/* FIXME: not implemented */
813d522f475Smrg	    update_font_loadable();
814d522f475Smrg	    SetItemSensitivity(
815d522f475Smrg				  fontMenuEntries[fontMenu_font_loadable].widget,
816d522f475Smrg				  False);
817d522f475Smrg#endif
818d522f475Smrg#if OPT_DEC_CHRSET
819d522f475Smrg	    update_font_doublesize();
82020d2c4d2Smrg	    if (TScreenOf(xw)->cache_doublesize == 0)
821d522f475Smrg		SetItemSensitivity(
822d522f475Smrg				      fontMenuEntries[fontMenu_font_doublesize].widget,
823d522f475Smrg				      False);
824d522f475Smrg#endif
825d522f475Smrg#if OPT_RENDERFONT
826d522f475Smrg	    update_font_renderfont();
827d522f475Smrg#endif
828d522f475Smrg#if OPT_WIDE_CHARS
829d522f475Smrg	    update_font_utf8_mode();
830e39b573cSmrg	    update_font_utf8_fonts();
831d522f475Smrg	    update_font_utf8_title();
832956cc18dSsnj#endif
833956cc18dSsnj#if OPT_ALLOW_XXX_OPS
83420d2c4d2Smrg	    update_menu_allowColorOps();
835956cc18dSsnj	    update_menu_allowFontOps();
83620d2c4d2Smrg	    update_menu_allowTcapOps();
837956cc18dSsnj	    update_menu_allowTitleOps();
838956cc18dSsnj	    update_menu_allowWindowOps();
839956cc18dSsnj	    enable_allow_xxx_ops(!(screen->allowSendEvents));
840d522f475Smrg#endif
841d522f475Smrg	}
84220d2c4d2Smrg	FindFontSelection(xw, NULL, True);
843d522f475Smrg	SetItemSensitivity(
844d522f475Smrg			      fontMenuEntries[fontMenu_fontsel].widget,
8450bd37d32Smrg			      (screen->menu_font_names[fontMenu_fontsel][fNorm]
846d522f475Smrg			       ? True : False));
847d522f475Smrg	break;
848d522f475Smrg
849d522f475Smrg#if OPT_TEK4014
850d522f475Smrg    case tekMenu:
851d522f475Smrg	if (created && tekWidget) {
85220d2c4d2Smrg	    set_tekfont_menu_item(TekScreenOf(tekWidget)->cur.fontsize, True);
853d522f475Smrg	    update_vtshow();
854d522f475Smrg	}
855d522f475Smrg	break;
856d522f475Smrg#endif
857d522f475Smrg    case noMenu:
858d522f475Smrg    default:
859d522f475Smrg	break;
860d522f475Smrg    }
861d522f475Smrg
862d522f475Smrg    return True;
863d522f475Smrg}
864d522f475Smrg
865d522f475Smrg/*
866d522f475Smrg * public interfaces
867d522f475Smrg */
868d522f475Smrg
869d522f475Smrgvoid
870d522f475SmrgHandleCreateMenu(Widget w,
871d522f475Smrg		 XEvent * event,
872d522f475Smrg		 String * params,	/* mainMenu, vtMenu, or tekMenu */
873d522f475Smrg		 Cardinal *param_count)		/* 0 or 1 */
874d522f475Smrg{
875d522f475Smrg    TRACE(("HandleCreateMenu\n"));
876d522f475Smrg    (void) domenu(w, event, params, param_count);
877d522f475Smrg}
878d522f475Smrg
879d522f475Smrgvoid
880d522f475SmrgHandlePopupMenu(Widget w,
881d522f475Smrg		XEvent * event,
882d522f475Smrg		String * params,	/* mainMenu, vtMenu, or tekMenu */
883d522f475Smrg		Cardinal *param_count)	/* 0 or 1 */
884d522f475Smrg{
885d522f475Smrg    TRACE(("HandlePopupMenu\n"));
886d522f475Smrg    if (domenu(w, event, params, param_count)) {
887e39b573cSmrg	XtermWidget xw = term;
888e39b573cSmrg	TScreen *screen = TScreenOf(xw);
889e39b573cSmrg
890d522f475Smrg#if OPT_TOOLBAR
891d522f475Smrg	w = select_menu(w, mainMenu)->w;
892d522f475Smrg#endif
893e39b573cSmrg	/*
894e39b573cSmrg	 * The action procedure in SimpleMenu.c, PositionMenu does not expect a
895e39b573cSmrg	 * key translation event when we are popping up a menu.  In particular,
896e39b573cSmrg	 * if the pointer is outside the menu, then the action procedure will
897e39b573cSmrg	 * fail in its attempt to determine the location of the pointer within
898e39b573cSmrg	 * the menu.  Anticipate that by warping the pointer into the menu when
899e39b573cSmrg	 * a key event is detected.
900e39b573cSmrg	 */
901e39b573cSmrg	switch (event->type) {
902e39b573cSmrg	case KeyPress:
903e39b573cSmrg	case KeyRelease:
904e39b573cSmrg	    XWarpPointer(screen->display, None, XtWindow(w), 0, 0, 0, 0, 0, 0);
905e39b573cSmrg	    break;
906e39b573cSmrg	default:
907e39b573cSmrg	    XtCallActionProc(w, "XawPositionSimpleMenu", event, params, 1);
908e39b573cSmrg	    break;
909e39b573cSmrg	}
910d522f475Smrg	XtCallActionProc(w, "MenuPopup", event, params, 1);
911d522f475Smrg    }
912d522f475Smrg}
913d522f475Smrg
914d522f475Smrg/*
915d522f475Smrg * private interfaces - keep out!
916d522f475Smrg */
917d522f475Smrg
918d522f475Smrg/* ARGSUSED */
919d522f475Smrgstatic void
920d522f475Smrghandle_send_signal(Widget gw GCC_UNUSED, int sig)
921d522f475Smrg{
922d522f475Smrg#ifndef VMS
923d522f475Smrg    TScreen *screen = TScreenOf(term);
924d522f475Smrg
925d522f475Smrg    if (hold_screen > 1)
926d522f475Smrg	hold_screen = 0;
927d522f475Smrg    if (screen->pid > 1)
928d522f475Smrg	kill_process_group(screen->pid, sig);
929d522f475Smrg#endif
930d522f475Smrg}
931d522f475Smrg
932a1f3da82Smrgstatic void
933a1f3da82SmrgUpdateMenuItem(
934a1f3da82Smrg#if OPT_TRACE
935a1f3da82Smrg		  const char *func,
936a1f3da82Smrg#endif
937a1f3da82Smrg		  MenuEntry * menu,
938a1f3da82Smrg		  int which,
939a1f3da82Smrg		  Bool val)
940a1f3da82Smrg{
941a1f3da82Smrg    static Arg menuArgs =
942a1f3da82Smrg    {XtNleftBitmap, (XtArgVal) 0};
943a1f3da82Smrg    Widget mi = menu[which].widget;
944a1f3da82Smrg
945a1f3da82Smrg    if (mi) {
946a1f3da82Smrg	menuArgs.value = (XtArgVal) ((val)
947a1f3da82Smrg				     ? TScreenOf(term)->menu_item_bitmap
948a1f3da82Smrg				     : None);
949a1f3da82Smrg	XtSetValues(mi, &menuArgs, (Cardinal) 1);
950a1f3da82Smrg    }
951a1f3da82Smrg    TRACE(("%s(%d): %s\n", func, which, BtoS(val)));
952a1f3da82Smrg}
953a1f3da82Smrg
954a1f3da82Smrgvoid
955a1f3da82SmrgSetItemSensitivity(Widget mi, Bool val)
956a1f3da82Smrg{
957a1f3da82Smrg    static Arg menuArgs =
958a1f3da82Smrg    {XtNsensitive, (XtArgVal) 0};
959a1f3da82Smrg
960a1f3da82Smrg    if (mi) {
961a1f3da82Smrg	menuArgs.value = (XtArgVal) (val);
962a1f3da82Smrg	XtSetValues(mi, &menuArgs, (Cardinal) 1);
963a1f3da82Smrg    }
964a1f3da82Smrg}
965a1f3da82Smrg
966d522f475Smrg/*
967d522f475Smrg * action routines
968d522f475Smrg */
969d522f475Smrg
970d522f475Smrgstatic void
971d522f475Smrgdo_securekbd(Widget gw GCC_UNUSED,
972d522f475Smrg	     XtPointer closure GCC_UNUSED,
973d522f475Smrg	     XtPointer data GCC_UNUSED)
974d522f475Smrg{
97520d2c4d2Smrg    XtermWidget xw = term;
97620d2c4d2Smrg    TScreen *screen = TScreenOf(xw);
977d522f475Smrg    Time now = CurrentTime;	/* XXX - wrong */
978d522f475Smrg
979d522f475Smrg    if (screen->grabbedKbd) {
980d522f475Smrg	XUngrabKeyboard(screen->display, now);
98120d2c4d2Smrg	ReverseVideo(xw);
982d522f475Smrg	screen->grabbedKbd = False;
983d522f475Smrg    } else {
984d522f475Smrg	if (XGrabKeyboard(screen->display, XtWindow(CURRENT_EMU()),
985d522f475Smrg			  True, GrabModeAsync, GrabModeAsync, now)
986d522f475Smrg	    != GrabSuccess) {
98720d2c4d2Smrg	    Bell(xw, XkbBI_MinorError, 100);
988d522f475Smrg	} else {
98920d2c4d2Smrg	    ReverseVideo(xw);
990d522f475Smrg	    screen->grabbedKbd = True;
991d522f475Smrg	}
992d522f475Smrg    }
993d522f475Smrg    update_securekbd();
994d522f475Smrg}
995d522f475Smrg
996d522f475Smrg/* ARGSUSED */
997d522f475Smrgvoid
998d522f475SmrgHandleSecure(Widget w GCC_UNUSED,
999d522f475Smrg	     XEvent * event GCC_UNUSED,		/* unused */
1000d522f475Smrg	     String * params GCC_UNUSED,	/* [0] = volume */
1001d522f475Smrg	     Cardinal *param_count GCC_UNUSED)	/* 0 or 1 */
1002d522f475Smrg{
1003d522f475Smrg#if 0
1004d522f475Smrg    Time ev_time = CurrentTime;
1005d522f475Smrg
1006d522f475Smrg    if ((event->xany.type == KeyPress) ||
1007d522f475Smrg	(event->xany.type == KeyRelease))
1008d522f475Smrg	ev_time = event->xkey.time;
1009d522f475Smrg    else if ((event->xany.type == ButtonPress) ||
1010d522f475Smrg	     (event->xany.type == ButtonRelease))
1011d522f475Smrg	ev_time = event->xbutton.time;
1012d522f475Smrg#endif
1013d522f475Smrg    do_securekbd(vt_shell[mainMenu].w, (XtPointer) 0, (XtPointer) 0);
1014d522f475Smrg}
1015d522f475Smrg
1016d522f475Smrgstatic void
1017d522f475Smrgdo_allowsends(Widget gw GCC_UNUSED,
1018d522f475Smrg	      XtPointer closure GCC_UNUSED,
1019d522f475Smrg	      XtPointer data GCC_UNUSED)
1020d522f475Smrg{
1021d522f475Smrg    TScreen *screen = TScreenOf(term);
1022d522f475Smrg
1023956cc18dSsnj    ToggleFlag(screen->allowSendEvents);
1024d522f475Smrg    update_allowsends();
1025956cc18dSsnj#if OPT_ALLOW_XXX_OPS
1026956cc18dSsnj    enable_allow_xxx_ops(!(screen->allowSendEvents));
1027956cc18dSsnj#endif
1028d522f475Smrg}
1029d522f475Smrg
1030d522f475Smrgstatic void
1031d522f475Smrgdo_visualbell(Widget gw GCC_UNUSED,
1032d522f475Smrg	      XtPointer closure GCC_UNUSED,
1033d522f475Smrg	      XtPointer data GCC_UNUSED)
1034d522f475Smrg{
1035d522f475Smrg    TScreen *screen = TScreenOf(term);
1036d522f475Smrg
1037956cc18dSsnj    ToggleFlag(screen->visualbell);
1038d522f475Smrg    update_visualbell();
1039d522f475Smrg}
1040d522f475Smrg
1041d522f475Smrgstatic void
1042d522f475Smrgdo_bellIsUrgent(Widget gw GCC_UNUSED,
1043d522f475Smrg		XtPointer closure GCC_UNUSED,
1044d522f475Smrg		XtPointer data GCC_UNUSED)
1045d522f475Smrg{
1046d522f475Smrg    TScreen *screen = TScreenOf(term);
1047d522f475Smrg
1048956cc18dSsnj    ToggleFlag(screen->bellIsUrgent);
1049d522f475Smrg    update_bellIsUrgent();
1050d522f475Smrg}
1051d522f475Smrg
1052d522f475Smrgstatic void
1053d522f475Smrgdo_poponbell(Widget gw GCC_UNUSED,
1054d522f475Smrg	     XtPointer closure GCC_UNUSED,
1055d522f475Smrg	     XtPointer data GCC_UNUSED)
1056d522f475Smrg{
1057d522f475Smrg    TScreen *screen = TScreenOf(term);
1058d522f475Smrg
1059956cc18dSsnj    ToggleFlag(screen->poponbell);
1060d522f475Smrg    update_poponbell();
1061d522f475Smrg}
1062d522f475Smrg
1063d522f475Smrg#ifdef ALLOWLOGGING
1064d522f475Smrgstatic void
1065d522f475Smrgdo_logging(Widget gw GCC_UNUSED,
1066d522f475Smrg	   XtPointer closure GCC_UNUSED,
1067d522f475Smrg	   XtPointer data GCC_UNUSED)
1068d522f475Smrg{
106920d2c4d2Smrg    XtermWidget xw = term;
107020d2c4d2Smrg    TScreen *screen = TScreenOf(xw);
1071d522f475Smrg
1072d522f475Smrg    if (screen->logging) {
107320d2c4d2Smrg	CloseLog(xw);
1074d522f475Smrg    } else {
107520d2c4d2Smrg	StartLog(xw);
1076d522f475Smrg    }
1077d522f475Smrg    /* update_logging done by CloseLog and StartLog */
1078d522f475Smrg}
1079d522f475Smrg#endif
1080d522f475Smrg
1081e39b573cSmrg#ifdef OPT_PRINT_ON_EXIT
1082e39b573cSmrgstatic void
1083e39b573cSmrgdo_write_now(Widget gw GCC_UNUSED,
1084e39b573cSmrg	     XtPointer closure GCC_UNUSED,
1085e39b573cSmrg	     XtPointer data GCC_UNUSED)
1086e39b573cSmrg{
1087e39b573cSmrg    XtermWidget xw = term;
1088e39b573cSmrg
1089e39b573cSmrg    xtermPrintImmediately(xw,
1090e39b573cSmrg			  (IsEmpty(resource.printFileNow)
1091e39b573cSmrg			   ? "XTerm"
1092e39b573cSmrg			   : resource.printFileNow),
1093e39b573cSmrg			  resource.printOptsNow,
1094e39b573cSmrg			  resource.printModeNow);
1095e39b573cSmrg}
1096e39b573cSmrg
1097e39b573cSmrgstatic void
1098e39b573cSmrgdo_write_error(Widget gw GCC_UNUSED,
1099e39b573cSmrg	       XtPointer closure GCC_UNUSED,
1100e39b573cSmrg	       XtPointer data GCC_UNUSED)
1101e39b573cSmrg{
1102e39b573cSmrg    XtermWidget xw = term;
1103e39b573cSmrg
1104e39b573cSmrg    if (IsEmpty(resource.printFileOnXError)) {
1105e39b573cSmrg	resource.printFileOnXError = "XTermError";
1106e39b573cSmrg    }
1107e39b573cSmrg    TScreenOf(xw)->write_error = (Boolean) (!TScreenOf(xw)->write_error);
1108e39b573cSmrg    update_write_error();
1109e39b573cSmrg}
1110e39b573cSmrg#endif
1111e39b573cSmrg
1112d522f475Smrgstatic void
1113d522f475Smrgdo_print(Widget gw GCC_UNUSED,
1114d522f475Smrg	 XtPointer closure GCC_UNUSED,
1115d522f475Smrg	 XtPointer data GCC_UNUSED)
1116d522f475Smrg{
111720d2c4d2Smrg    xtermPrintScreen(term, True, getPrinterFlags(term, NULL, 0));
1118d522f475Smrg}
1119d522f475Smrg
1120d522f475Smrgstatic void
1121d522f475Smrgdo_print_redir(Widget gw GCC_UNUSED,
1122d522f475Smrg	       XtPointer closure GCC_UNUSED,
1123d522f475Smrg	       XtPointer data GCC_UNUSED)
1124d522f475Smrg{
1125e39b573cSmrg    setPrinterControlMode(term,
1126e39b573cSmrg			  (PrinterOf(TScreenOf(term)).printer_controlmode
1127e39b573cSmrg			   ? 0
1128e39b573cSmrg			   : 2));
1129d522f475Smrg}
1130d522f475Smrg
1131d522f475Smrgstatic void
1132d522f475Smrgdo_redraw(Widget gw GCC_UNUSED,
1133d522f475Smrg	  XtPointer closure GCC_UNUSED,
1134d522f475Smrg	  XtPointer data GCC_UNUSED)
1135d522f475Smrg{
1136d522f475Smrg    Redraw();
1137d522f475Smrg}
1138d522f475Smrg
1139d522f475Smrgvoid
1140d522f475Smrgshow_8bit_control(Bool value)
1141d522f475Smrg{
114220d2c4d2Smrg    if (TScreenOf(term)->control_eight_bits != value) {
114320d2c4d2Smrg	TScreenOf(term)->control_eight_bits = (Boolean) value;
1144d522f475Smrg	update_8bit_control();
1145d522f475Smrg    }
1146d522f475Smrg}
1147d522f475Smrg
1148d522f475Smrgstatic void
1149d522f475Smrgdo_8bit_control(Widget gw GCC_UNUSED,
1150d522f475Smrg		XtPointer closure GCC_UNUSED,
1151d522f475Smrg		XtPointer data GCC_UNUSED)
1152d522f475Smrg{
115320d2c4d2Smrg    show_8bit_control(!TScreenOf(term)->control_eight_bits);
1154d522f475Smrg}
1155d522f475Smrg
1156d522f475Smrgstatic void
1157d522f475Smrgdo_backarrow(Widget gw GCC_UNUSED,
1158d522f475Smrg	     XtPointer closure GCC_UNUSED,
1159d522f475Smrg	     XtPointer data GCC_UNUSED)
1160d522f475Smrg{
1161d522f475Smrg    term->keyboard.flags ^= MODE_DECBKM;
1162d522f475Smrg    update_decbkm();
1163d522f475Smrg}
1164d522f475Smrg
1165d522f475Smrg#if OPT_NUM_LOCK
1166d522f475Smrgstatic void
1167d522f475Smrgdo_num_lock(Widget gw GCC_UNUSED,
1168d522f475Smrg	    XtPointer closure GCC_UNUSED,
1169d522f475Smrg	    XtPointer data GCC_UNUSED)
1170d522f475Smrg{
1171956cc18dSsnj    ToggleFlag(term->misc.real_NumLock);
1172d522f475Smrg    update_num_lock();
1173d522f475Smrg}
1174d522f475Smrg
1175d522f475Smrgstatic void
1176d522f475Smrgdo_alt_esc(Widget gw GCC_UNUSED,
1177d522f475Smrg	   XtPointer closure GCC_UNUSED,
1178d522f475Smrg	   XtPointer data GCC_UNUSED)
1179d522f475Smrg{
118020d2c4d2Smrg    ToggleFlag(TScreenOf(term)->alt_sends_esc);
1181d522f475Smrg    update_alt_esc();
1182d522f475Smrg}
1183d522f475Smrg
1184d522f475Smrgstatic void
1185d522f475Smrgdo_meta_esc(Widget gw GCC_UNUSED,
1186d522f475Smrg	    XtPointer closure GCC_UNUSED,
1187d522f475Smrg	    XtPointer data GCC_UNUSED)
1188d522f475Smrg{
118920d2c4d2Smrg    ToggleFlag(TScreenOf(term)->meta_sends_esc);
1190d522f475Smrg    update_meta_esc();
1191d522f475Smrg}
1192d522f475Smrg#endif
1193d522f475Smrg
1194d522f475Smrgstatic void
1195d522f475Smrgdo_delete_del(Widget gw GCC_UNUSED,
1196d522f475Smrg	      XtPointer closure GCC_UNUSED,
1197d522f475Smrg	      XtPointer data GCC_UNUSED)
1198d522f475Smrg{
1199d522f475Smrg    if (xtermDeleteIsDEL(term))
120020d2c4d2Smrg	TScreenOf(term)->delete_is_del = False;
1201d522f475Smrg    else
120220d2c4d2Smrg	TScreenOf(term)->delete_is_del = True;
1203d522f475Smrg    update_delete_del();
1204d522f475Smrg}
1205d522f475Smrg
1206d522f475Smrgstatic void
1207d522f475Smrgdo_old_fkeys(Widget gw GCC_UNUSED,
1208d522f475Smrg	     XtPointer closure GCC_UNUSED,
1209d522f475Smrg	     XtPointer data GCC_UNUSED)
1210d522f475Smrg{
1211d522f475Smrg    toggle_keyboard_type(term, keyboardIsLegacy);
1212d522f475Smrg}
1213d522f475Smrg
1214d522f475Smrg#if OPT_HP_FUNC_KEYS
1215d522f475Smrgstatic void
1216d522f475Smrgdo_hp_fkeys(Widget gw GCC_UNUSED,
1217d522f475Smrg	    XtPointer closure GCC_UNUSED,
1218d522f475Smrg	    XtPointer data GCC_UNUSED)
1219d522f475Smrg{
1220d522f475Smrg    toggle_keyboard_type(term, keyboardIsHP);
1221d522f475Smrg}
1222d522f475Smrg#endif
1223d522f475Smrg
1224d522f475Smrg#if OPT_SCO_FUNC_KEYS
1225d522f475Smrgstatic void
1226d522f475Smrgdo_sco_fkeys(Widget gw GCC_UNUSED,
1227d522f475Smrg	     XtPointer closure GCC_UNUSED,
1228d522f475Smrg	     XtPointer data GCC_UNUSED)
1229d522f475Smrg{
1230d522f475Smrg    toggle_keyboard_type(term, keyboardIsSCO);
1231d522f475Smrg}
1232d522f475Smrg#endif
1233d522f475Smrg
1234d522f475Smrg#if OPT_SUN_FUNC_KEYS
1235d522f475Smrgstatic void
1236d522f475Smrgdo_sun_fkeys(Widget gw GCC_UNUSED,
1237d522f475Smrg	     XtPointer closure GCC_UNUSED,
1238d522f475Smrg	     XtPointer data GCC_UNUSED)
1239d522f475Smrg{
1240d522f475Smrg    toggle_keyboard_type(term, keyboardIsSun);
1241d522f475Smrg}
1242d522f475Smrg#endif
1243d522f475Smrg
1244d522f475Smrg#if OPT_SUNPC_KBD
1245d522f475Smrg/*
1246d522f475Smrg * This really means "Sun/PC keyboard emulating VT220".
1247d522f475Smrg */
1248d522f475Smrgstatic void
1249d522f475Smrgdo_sun_kbd(Widget gw GCC_UNUSED,
1250d522f475Smrg	   XtPointer closure GCC_UNUSED,
1251d522f475Smrg	   XtPointer data GCC_UNUSED)
1252d522f475Smrg{
1253d522f475Smrg    toggle_keyboard_type(term, keyboardIsVT220);
1254d522f475Smrg}
1255d522f475Smrg#endif
1256d522f475Smrg
1257d522f475Smrg#if OPT_TCAP_FKEYS
1258d522f475Smrgstatic void
1259d522f475Smrgdo_tcap_fkeys(Widget gw GCC_UNUSED,
1260d522f475Smrg	      XtPointer closure GCC_UNUSED,
1261d522f475Smrg	      XtPointer data GCC_UNUSED)
1262d522f475Smrg{
1263d522f475Smrg    toggle_keyboard_type(term, keyboardIsTermcap);
1264d522f475Smrg}
1265d522f475Smrg#endif
1266d522f475Smrg
1267d522f475Smrg/*
1268d522f475Smrg * The following cases use the pid instead of the process group so that we
1269d522f475Smrg * don't get hosed by programs that change their process group
1270d522f475Smrg */
1271d522f475Smrg
1272d522f475Smrg/* ARGSUSED */
1273d522f475Smrgstatic void
1274d522f475Smrgdo_suspend(Widget gw,
1275d522f475Smrg	   XtPointer closure GCC_UNUSED,
1276d522f475Smrg	   XtPointer data GCC_UNUSED)
1277d522f475Smrg{
1278d522f475Smrg#if defined(SIGTSTP)
1279d522f475Smrg    handle_send_signal(gw, SIGTSTP);
1280d522f475Smrg#endif
1281d522f475Smrg}
1282d522f475Smrg
1283d522f475Smrg/* ARGSUSED */
1284d522f475Smrgstatic void
1285d522f475Smrgdo_continue(Widget gw,
1286d522f475Smrg	    XtPointer closure GCC_UNUSED,
1287d522f475Smrg	    XtPointer data GCC_UNUSED)
1288d522f475Smrg{
1289d522f475Smrg#if defined(SIGCONT)
1290d522f475Smrg    handle_send_signal(gw, SIGCONT);
1291d522f475Smrg#endif
1292d522f475Smrg}
1293d522f475Smrg
1294d522f475Smrg/* ARGSUSED */
1295d522f475Smrgstatic void
1296d522f475Smrgdo_interrupt(Widget gw,
1297d522f475Smrg	     XtPointer closure GCC_UNUSED,
1298d522f475Smrg	     XtPointer data GCC_UNUSED)
1299d522f475Smrg{
1300d522f475Smrg    handle_send_signal(gw, SIGINT);
1301d522f475Smrg}
1302d522f475Smrg
1303d522f475Smrg/* ARGSUSED */
1304d522f475Smrgvoid
1305d522f475Smrgdo_hangup(Widget gw,
1306d522f475Smrg	  XtPointer closure GCC_UNUSED,
1307d522f475Smrg	  XtPointer data GCC_UNUSED)
1308d522f475Smrg{
1309d522f475Smrg    handle_send_signal(gw, SIGHUP);
1310d522f475Smrg}
1311d522f475Smrg
1312d522f475Smrg/* ARGSUSED */
1313d522f475Smrgstatic void
1314d522f475Smrgdo_terminate(Widget gw,
1315d522f475Smrg	     XtPointer closure GCC_UNUSED,
1316d522f475Smrg	     XtPointer data GCC_UNUSED)
1317d522f475Smrg{
1318d522f475Smrg    handle_send_signal(gw, SIGTERM);
1319d522f475Smrg}
1320d522f475Smrg
1321d522f475Smrg/* ARGSUSED */
1322d522f475Smrgstatic void
1323d522f475Smrgdo_kill(Widget gw,
1324d522f475Smrg	XtPointer closure GCC_UNUSED,
1325d522f475Smrg	XtPointer data GCC_UNUSED)
1326d522f475Smrg{
1327d522f475Smrg    handle_send_signal(gw, SIGKILL);
1328d522f475Smrg}
1329d522f475Smrg
1330d522f475Smrgstatic void
1331d522f475Smrgdo_quit(Widget gw GCC_UNUSED,
1332d522f475Smrg	XtPointer closure GCC_UNUSED,
1333d522f475Smrg	XtPointer data GCC_UNUSED)
1334d522f475Smrg{
1335d522f475Smrg    Cleanup(SIGHUP);
1336d522f475Smrg}
1337d522f475Smrg
1338d522f475Smrg/*
1339d522f475Smrg * vt menu callbacks
1340d522f475Smrg */
1341d522f475Smrg
1342d522f475Smrgstatic void
1343d522f475Smrgdo_scrollbar(Widget gw GCC_UNUSED,
1344d522f475Smrg	     XtPointer closure GCC_UNUSED,
1345d522f475Smrg	     XtPointer data GCC_UNUSED)
1346d522f475Smrg{
1347d522f475Smrg    ToggleScrollBar(term);
1348d522f475Smrg}
1349d522f475Smrg
1350d522f475Smrgstatic void
1351d522f475Smrgdo_jumpscroll(Widget gw GCC_UNUSED,
1352d522f475Smrg	      XtPointer closure GCC_UNUSED,
1353d522f475Smrg	      XtPointer data GCC_UNUSED)
1354d522f475Smrg{
1355d522f475Smrg    TScreen *screen = TScreenOf(term);
1356d522f475Smrg
1357d522f475Smrg    term->flags ^= SMOOTHSCROLL;
1358d522f475Smrg    if (term->flags & SMOOTHSCROLL) {
1359d522f475Smrg	screen->jumpscroll = False;
1360d522f475Smrg	if (screen->scroll_amt)
1361d522f475Smrg	    FlushScroll(term);
1362d522f475Smrg    } else {
1363d522f475Smrg	screen->jumpscroll = True;
1364d522f475Smrg    }
1365d522f475Smrg    update_jumpscroll();
1366d522f475Smrg}
1367d522f475Smrg
1368d522f475Smrgstatic void
1369d522f475Smrgdo_reversevideo(Widget gw GCC_UNUSED,
1370d522f475Smrg		XtPointer closure GCC_UNUSED,
1371d522f475Smrg		XtPointer data GCC_UNUSED)
1372d522f475Smrg{
1373d522f475Smrg    ReverseVideo(term);
1374d522f475Smrg}
1375d522f475Smrg
1376d522f475Smrgstatic void
1377d522f475Smrgdo_autowrap(Widget gw GCC_UNUSED,
1378d522f475Smrg	    XtPointer closure GCC_UNUSED,
1379d522f475Smrg	    XtPointer data GCC_UNUSED)
1380d522f475Smrg{
1381d522f475Smrg    term->flags ^= WRAPAROUND;
1382d522f475Smrg    update_autowrap();
1383d522f475Smrg}
1384d522f475Smrg
1385d522f475Smrgstatic void
1386d522f475Smrgdo_reversewrap(Widget gw GCC_UNUSED,
1387d522f475Smrg	       XtPointer closure GCC_UNUSED,
1388d522f475Smrg	       XtPointer data GCC_UNUSED)
1389d522f475Smrg{
1390d522f475Smrg    term->flags ^= REVERSEWRAP;
1391d522f475Smrg    update_reversewrap();
1392d522f475Smrg}
1393d522f475Smrg
1394d522f475Smrgstatic void
1395d522f475Smrgdo_autolinefeed(Widget gw GCC_UNUSED,
1396d522f475Smrg		XtPointer closure GCC_UNUSED,
1397d522f475Smrg		XtPointer data GCC_UNUSED)
1398d522f475Smrg{
1399d522f475Smrg    term->flags ^= LINEFEED;
1400d522f475Smrg    update_autolinefeed();
1401d522f475Smrg}
1402d522f475Smrg
1403d522f475Smrgstatic void
1404d522f475Smrgdo_appcursor(Widget gw GCC_UNUSED,
1405d522f475Smrg	     XtPointer closure GCC_UNUSED,
1406d522f475Smrg	     XtPointer data GCC_UNUSED)
1407d522f475Smrg{
1408d522f475Smrg    term->keyboard.flags ^= MODE_DECCKM;
1409d522f475Smrg    update_appcursor();
1410d522f475Smrg}
1411d522f475Smrg
1412d522f475Smrgstatic void
1413d522f475Smrgdo_appkeypad(Widget gw GCC_UNUSED,
1414d522f475Smrg	     XtPointer closure GCC_UNUSED,
1415d522f475Smrg	     XtPointer data GCC_UNUSED)
1416d522f475Smrg{
1417d522f475Smrg    term->keyboard.flags ^= MODE_DECKPAM;
1418d522f475Smrg    update_appkeypad();
1419d522f475Smrg}
1420d522f475Smrg
1421d522f475Smrgstatic void
1422d522f475Smrgdo_scrollkey(Widget gw GCC_UNUSED,
1423d522f475Smrg	     XtPointer closure GCC_UNUSED,
1424d522f475Smrg	     XtPointer data GCC_UNUSED)
1425d522f475Smrg{
1426d522f475Smrg    TScreen *screen = TScreenOf(term);
1427d522f475Smrg
1428956cc18dSsnj    ToggleFlag(screen->scrollkey);
1429d522f475Smrg    update_scrollkey();
1430d522f475Smrg}
1431d522f475Smrg
1432d522f475Smrgstatic void
1433d522f475Smrgdo_scrollttyoutput(Widget gw GCC_UNUSED,
1434d522f475Smrg		   XtPointer closure GCC_UNUSED,
1435d522f475Smrg		   XtPointer data GCC_UNUSED)
1436d522f475Smrg{
1437d522f475Smrg    TScreen *screen = TScreenOf(term);
1438d522f475Smrg
1439956cc18dSsnj    ToggleFlag(screen->scrollttyoutput);
1440d522f475Smrg    update_scrollttyoutput();
1441d522f475Smrg}
1442d522f475Smrg
1443d522f475Smrgstatic void
1444d522f475Smrgdo_keepSelection(Widget gw GCC_UNUSED,
1445d522f475Smrg		 XtPointer closure GCC_UNUSED,
1446d522f475Smrg		 XtPointer data GCC_UNUSED)
1447d522f475Smrg{
1448d522f475Smrg    TScreen *screen = TScreenOf(term);
1449d522f475Smrg
1450956cc18dSsnj    ToggleFlag(screen->keepSelection);
1451d522f475Smrg    update_keepSelection();
1452d522f475Smrg}
1453d522f475Smrg
1454d522f475Smrgstatic void
1455d522f475Smrgdo_selectClipboard(Widget gw GCC_UNUSED,
1456d522f475Smrg		   XtPointer closure GCC_UNUSED,
1457d522f475Smrg		   XtPointer data GCC_UNUSED)
1458d522f475Smrg{
1459d522f475Smrg    TScreen *screen = TScreenOf(term);
1460d522f475Smrg
1461956cc18dSsnj    ToggleFlag(screen->selectToClipboard);
1462d522f475Smrg    update_selectToClipboard();
1463d522f475Smrg}
1464d522f475Smrg
1465d522f475Smrgstatic void
1466d522f475Smrgdo_allow132(Widget gw GCC_UNUSED,
1467d522f475Smrg	    XtPointer closure GCC_UNUSED,
1468d522f475Smrg	    XtPointer data GCC_UNUSED)
1469d522f475Smrg{
1470d522f475Smrg    TScreen *screen = TScreenOf(term);
1471d522f475Smrg
1472956cc18dSsnj    ToggleFlag(screen->c132);
1473d522f475Smrg    update_allow132();
1474d522f475Smrg}
1475d522f475Smrg
1476d522f475Smrgstatic void
1477d522f475Smrgdo_cursesemul(Widget gw GCC_UNUSED,
1478d522f475Smrg	      XtPointer closure GCC_UNUSED,
1479d522f475Smrg	      XtPointer data GCC_UNUSED)
1480d522f475Smrg{
1481d522f475Smrg    TScreen *screen = TScreenOf(term);
1482d522f475Smrg
1483956cc18dSsnj    ToggleFlag(screen->curses);
1484d522f475Smrg    update_cursesemul();
1485d522f475Smrg}
1486d522f475Smrg
1487d522f475Smrgstatic void
1488d522f475Smrgdo_marginbell(Widget gw GCC_UNUSED,
1489d522f475Smrg	      XtPointer closure GCC_UNUSED,
1490d522f475Smrg	      XtPointer data GCC_UNUSED)
1491d522f475Smrg{
1492d522f475Smrg    TScreen *screen = TScreenOf(term);
1493d522f475Smrg
1494a1f3da82Smrg    if ((ToggleFlag(screen->marginbell)) == 0)
149520d2c4d2Smrg	screen->bellArmed = -1;
1496d522f475Smrg    update_marginbell();
1497d522f475Smrg}
1498d522f475Smrg
1499d522f475Smrg#if OPT_TEK4014
1500d522f475Smrgstatic void
1501d522f475Smrghandle_tekshow(Widget gw GCC_UNUSED, Bool allowswitch)
1502d522f475Smrg{
150320d2c4d2Smrg    XtermWidget xw = term;
150420d2c4d2Smrg    TScreen *screen = TScreenOf(xw);
1505d522f475Smrg
1506d522f475Smrg    TRACE(("Show tek-window\n"));
150720d2c4d2Smrg    if (!TEK4014_SHOWN(xw)) {	/* not showing, turn on */
1508d522f475Smrg	set_tek_visibility(True);
1509d522f475Smrg    } else if (screen->Vshow || allowswitch) {	/* is showing, turn off */
1510d522f475Smrg	set_tek_visibility(False);
1511d522f475Smrg	end_tek_mode();		/* WARNING: this does a longjmp */
1512d522f475Smrg    } else
151320d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
1514d522f475Smrg}
1515d522f475Smrg
1516d522f475Smrg/* ARGSUSED */
1517d522f475Smrgstatic void
1518d522f475Smrgdo_tekshow(Widget gw,
1519d522f475Smrg	   XtPointer closure GCC_UNUSED,
1520d522f475Smrg	   XtPointer data GCC_UNUSED)
1521d522f475Smrg{
1522d522f475Smrg    handle_tekshow(gw, True);
1523d522f475Smrg}
1524d522f475Smrg
1525d522f475Smrg/* ARGSUSED */
1526d522f475Smrgstatic void
1527d522f475Smrgdo_tekonoff(Widget gw,
1528d522f475Smrg	    XtPointer closure GCC_UNUSED,
1529d522f475Smrg	    XtPointer data GCC_UNUSED)
1530d522f475Smrg{
1531d522f475Smrg    handle_tekshow(gw, False);
1532d522f475Smrg}
1533d522f475Smrg#endif /* OPT_TEK4014 */
1534d522f475Smrg
1535d522f475Smrg#if OPT_BLINK_CURS
1536d522f475Smrg/* ARGSUSED */
1537d522f475Smrgstatic void
1538d522f475Smrgdo_cursorblink(Widget gw GCC_UNUSED,
1539d522f475Smrg	       XtPointer closure GCC_UNUSED,
1540d522f475Smrg	       XtPointer data GCC_UNUSED)
1541d522f475Smrg{
1542d522f475Smrg    TScreen *screen = TScreenOf(term);
1543d522f475Smrg    ToggleCursorBlink(screen);
1544d522f475Smrg}
1545d522f475Smrg#endif
1546d522f475Smrg
1547d522f475Smrg/* ARGSUSED */
1548d522f475Smrgstatic void
1549d522f475Smrgdo_altscreen(Widget gw GCC_UNUSED,
1550d522f475Smrg	     XtPointer closure GCC_UNUSED,
1551d522f475Smrg	     XtPointer data GCC_UNUSED)
1552d522f475Smrg{
1553d522f475Smrg    ToggleAlternate(term);
1554d522f475Smrg}
1555d522f475Smrg
1556d522f475Smrg/* ARGSUSED */
1557d522f475Smrgstatic void
1558d522f475Smrgdo_titeInhibit(Widget gw GCC_UNUSED,
1559d522f475Smrg	       XtPointer closure GCC_UNUSED,
1560d522f475Smrg	       XtPointer data GCC_UNUSED)
1561d522f475Smrg{
1562956cc18dSsnj    ToggleFlag(term->misc.titeInhibit);
1563d522f475Smrg    update_titeInhibit();
1564d522f475Smrg}
1565d522f475Smrg
1566d522f475Smrg#ifndef NO_ACTIVE_ICON
1567d522f475Smrg/* ARGSUSED */
1568d522f475Smrgstatic void
1569d522f475Smrgdo_activeicon(Widget gw GCC_UNUSED,
1570d522f475Smrg	      XtPointer closure GCC_UNUSED,
1571d522f475Smrg	      XtPointer data GCC_UNUSED)
1572d522f475Smrg{
1573d522f475Smrg    TScreen *screen = TScreenOf(term);
1574d522f475Smrg
1575d522f475Smrg    if (screen->iconVwin.window) {
1576d522f475Smrg	Widget shell = XtParent(term);
15770bd37d32Smrg	ToggleFlag(term->work.active_icon);
1578d522f475Smrg	XtVaSetValues(shell, XtNiconWindow,
15790bd37d32Smrg		      term->work.active_icon ? screen->iconVwin.window : None,
1580d522f475Smrg		      (XtPointer) 0);
1581d522f475Smrg	update_activeicon();
1582d522f475Smrg    }
1583d522f475Smrg}
1584d522f475Smrg#endif /* NO_ACTIVE_ICON */
1585d522f475Smrg
1586d522f475Smrgstatic void
1587d522f475Smrgdo_softreset(Widget gw GCC_UNUSED,
1588d522f475Smrg	     XtPointer closure GCC_UNUSED,
1589d522f475Smrg	     XtPointer data GCC_UNUSED)
1590d522f475Smrg{
1591d522f475Smrg    VTReset(term, False, False);
1592d522f475Smrg}
1593d522f475Smrg
1594d522f475Smrgstatic void
1595d522f475Smrgdo_hardreset(Widget gw GCC_UNUSED,
1596d522f475Smrg	     XtPointer closure GCC_UNUSED,
1597d522f475Smrg	     XtPointer data GCC_UNUSED)
1598d522f475Smrg{
1599d522f475Smrg    VTReset(term, True, False);
1600d522f475Smrg}
1601d522f475Smrg
1602d522f475Smrgstatic void
1603d522f475Smrgdo_clearsavedlines(Widget gw GCC_UNUSED,
1604d522f475Smrg		   XtPointer closure GCC_UNUSED,
1605d522f475Smrg		   XtPointer data GCC_UNUSED)
1606d522f475Smrg{
1607d522f475Smrg    VTReset(term, True, True);
1608d522f475Smrg}
1609d522f475Smrg
1610d522f475Smrg#if OPT_TEK4014
1611d522f475Smrgstatic void
1612d522f475Smrgdo_tekmode(Widget gw GCC_UNUSED,
1613d522f475Smrg	   XtPointer closure GCC_UNUSED,
1614d522f475Smrg	   XtPointer data GCC_UNUSED)
1615d522f475Smrg{
1616d522f475Smrg    switch_modes(TEK4014_ACTIVE(term));		/* switch to tek mode */
1617d522f475Smrg}
1618d522f475Smrg
1619d522f475Smrg/* ARGSUSED */
1620d522f475Smrgstatic void
1621d522f475Smrgdo_vthide(Widget gw GCC_UNUSED,
1622d522f475Smrg	  XtPointer closure GCC_UNUSED,
1623d522f475Smrg	  XtPointer data GCC_UNUSED)
1624d522f475Smrg{
1625d522f475Smrg    hide_vt_window();
1626d522f475Smrg}
1627d522f475Smrg#endif /* OPT_TEK4014 */
1628d522f475Smrg
1629d522f475Smrg/*
1630d522f475Smrg * vtfont menu
1631d522f475Smrg */
1632d522f475Smrg
1633d522f475Smrgstatic void
1634d522f475Smrgdo_vtfont(Widget gw GCC_UNUSED,
1635d522f475Smrg	  XtPointer closure,
1636d522f475Smrg	  XtPointer data GCC_UNUSED)
1637d522f475Smrg{
163820d2c4d2Smrg    XtermWidget xw = term;
1639d522f475Smrg    char *entryname = (char *) closure;
1640d522f475Smrg    int i;
1641d522f475Smrg
16420bd37d32Smrg    TRACE(("do_vtfont(%s)\n", entryname));
1643d522f475Smrg    for (i = 0; i < NMENUFONTS; i++) {
1644d522f475Smrg	if (strcmp(entryname, fontMenuEntries[i].name) == 0) {
164520d2c4d2Smrg	    SetVTFont(xw, i, True, NULL);
1646d522f475Smrg	    return;
1647d522f475Smrg	}
1648d522f475Smrg    }
164920d2c4d2Smrg    Bell(xw, XkbBI_MinorError, 0);
1650d522f475Smrg}
1651d522f475Smrg
1652d522f475Smrg#if OPT_DEC_CHRSET
1653d522f475Smrgstatic void
1654d522f475Smrgdo_font_doublesize(Widget gw GCC_UNUSED,
1655d522f475Smrg		   XtPointer closure GCC_UNUSED,
1656d522f475Smrg		   XtPointer data GCC_UNUSED)
1657d522f475Smrg{
165820d2c4d2Smrg    XtermWidget xw = term;
165920d2c4d2Smrg
166020d2c4d2Smrg    if (TScreenOf(xw)->cache_doublesize != 0)
166120d2c4d2Smrg	ToggleFlag(TScreenOf(xw)->font_doublesize);
1662d522f475Smrg    update_font_doublesize();
1663d522f475Smrg    Redraw();
1664d522f475Smrg}
1665d522f475Smrg#endif
1666d522f475Smrg
1667d522f475Smrg#if OPT_BOX_CHARS
1668d522f475Smrgstatic void
1669d522f475Smrgdo_font_boxchars(Widget gw GCC_UNUSED,
1670d522f475Smrg		 XtPointer closure GCC_UNUSED,
1671d522f475Smrg		 XtPointer data GCC_UNUSED)
1672d522f475Smrg{
167320d2c4d2Smrg    ToggleFlag(TScreenOf(term)->force_box_chars);
1674d522f475Smrg    update_font_boxchars();
1675d522f475Smrg    Redraw();
1676d522f475Smrg}
167720d2c4d2Smrg
167820d2c4d2Smrgstatic void
167920d2c4d2Smrgdo_font_packed(Widget gw GCC_UNUSED,
168020d2c4d2Smrg	       XtPointer closure GCC_UNUSED,
168120d2c4d2Smrg	       XtPointer data GCC_UNUSED)
168220d2c4d2Smrg{
168320d2c4d2Smrg    ToggleFlag(TScreenOf(term)->force_packed);
168420d2c4d2Smrg    update_font_packed();
168520d2c4d2Smrg    SetVTFont(term, TScreenOf(term)->menu_font_number, True, NULL);
168620d2c4d2Smrg}
1687d522f475Smrg#endif
1688d522f475Smrg
1689d522f475Smrg#if OPT_DEC_SOFTFONT
1690d522f475Smrgstatic void
1691d522f475Smrgdo_font_loadable(Widget gw GCC_UNUSED,
1692d522f475Smrg		 XtPointer closure GCC_UNUSED,
1693d522f475Smrg		 XtPointer data GCC_UNUSED)
1694d522f475Smrg{
1695956cc18dSsnj    ToggleFlag(term->misc.font_loadable);
1696d522f475Smrg    update_font_loadable();
1697d522f475Smrg}
1698d522f475Smrg#endif
1699d522f475Smrg
1700d522f475Smrg#if OPT_RENDERFONT
1701d522f475Smrgstatic void
1702d522f475Smrgdo_font_renderfont(Widget gw GCC_UNUSED,
1703d522f475Smrg		   XtPointer closure GCC_UNUSED,
1704d522f475Smrg		   XtPointer data GCC_UNUSED)
1705d522f475Smrg{
170620d2c4d2Smrg    XtermWidget xw = (XtermWidget) term;
170720d2c4d2Smrg    TScreen *screen = TScreenOf(xw);
1708d522f475Smrg    int fontnum = screen->menu_font_number;
170920d2c4d2Smrg    String name = TScreenOf(xw)->MenuFontName(fontnum);
1710d522f475Smrg
171120d2c4d2Smrg    DefaultRenderFont(xw);
17120bd37d32Smrg    ToggleFlag(xw->work.render_font);
1713d522f475Smrg    update_font_renderfont();
171420d2c4d2Smrg    xtermLoadFont(xw, xtermFontName(name), True, fontnum);
1715d522f475Smrg    ScrnRefresh(term, 0, 0,
1716d522f475Smrg		MaxRows(screen),
1717d522f475Smrg		MaxCols(screen), True);
1718d522f475Smrg}
1719d522f475Smrg#endif
1720d522f475Smrg
1721d522f475Smrg#if OPT_WIDE_CHARS
1722e39b573cSmrgstatic void
1723e39b573cSmrgsetup_wide_fonts(XtermWidget xw)
1724e39b573cSmrg{
1725e39b573cSmrg    TScreen *screen = TScreenOf(xw);
1726e39b573cSmrg
1727e39b573cSmrg    if (screen->wide_chars) {
1728e39b573cSmrg	if (xtermLoadWideFonts(xw, True)) {
1729e39b573cSmrg	    SetVTFont(xw, screen->menu_font_number, True, NULL);
1730e39b573cSmrg	}
1731e39b573cSmrg    } else {
1732e39b573cSmrg	ChangeToWide(xw);
1733e39b573cSmrg    }
1734e39b573cSmrg}
1735e39b573cSmrg
1736e39b573cSmrgstatic void
1737e39b573cSmrgsetup_narrow_fonts(XtermWidget xw)
1738e39b573cSmrg{
1739e39b573cSmrg    TScreen *screen = TScreenOf(xw);
1740e39b573cSmrg
1741e39b573cSmrg    if (xtermLoadDefaultFonts(xw)) {
1742e39b573cSmrg	SetVTFont(xw, screen->menu_font_number, True, NULL);
1743e39b573cSmrg    }
1744e39b573cSmrg}
1745e39b573cSmrg
1746d522f475Smrgstatic void
1747d522f475Smrgdo_font_utf8_mode(Widget gw GCC_UNUSED,
1748d522f475Smrg		  XtPointer closure GCC_UNUSED,
1749d522f475Smrg		  XtPointer data GCC_UNUSED)
1750d522f475Smrg{
1751e39b573cSmrg    XtermWidget xw = term;
1752e39b573cSmrg    TScreen *screen = TScreenOf(xw);
1753d522f475Smrg
1754d522f475Smrg    /*
1755d522f475Smrg     * If xterm was started with -wc option, it might not have the wide fonts.
1756d522f475Smrg     * If xterm was not started with -wc, it might not have wide cells.
1757d522f475Smrg     */
1758d522f475Smrg    if (!screen->utf8_mode) {
1759e39b573cSmrg	setup_wide_fonts(xw);
1760d522f475Smrg    }
1761d522f475Smrg    switchPtyData(screen, !screen->utf8_mode);
1762d522f475Smrg    /*
1763d522f475Smrg     * We don't repaint the screen when switching UTF-8 on/off.  When switching
1764d522f475Smrg     * on - the Latin-1 codes should paint as-is.  When switching off, that's
1765d522f475Smrg     * hard to do properly.
1766d522f475Smrg     */
1767d522f475Smrg}
1768d522f475Smrg
1769e39b573cSmrgstatic void
1770e39b573cSmrgdo_font_utf8_fonts(Widget gw GCC_UNUSED,
1771e39b573cSmrg		   XtPointer closure GCC_UNUSED,
1772e39b573cSmrg		   XtPointer data GCC_UNUSED)
1773e39b573cSmrg{
1774e39b573cSmrg    XtermWidget xw = term;
1775e39b573cSmrg    TScreen *screen = TScreenOf(xw);
1776e39b573cSmrg
1777e39b573cSmrg    ToggleFlag(screen->utf8_fonts);
1778e39b573cSmrg    update_font_utf8_fonts();
1779e39b573cSmrg
1780e39b573cSmrg    if (screen->utf8_fonts) {
1781e39b573cSmrg	setup_wide_fonts(xw);
1782e39b573cSmrg    } else {
1783e39b573cSmrg	setup_narrow_fonts(xw);
1784e39b573cSmrg    }
1785e39b573cSmrg}
1786e39b573cSmrg
1787d522f475Smrgstatic void
1788d522f475Smrgdo_font_utf8_title(Widget gw GCC_UNUSED,
1789d522f475Smrg		   XtPointer closure GCC_UNUSED,
1790d522f475Smrg		   XtPointer data GCC_UNUSED)
1791d522f475Smrg{
1792d522f475Smrg    TScreen *screen = TScreenOf(term);
1793d522f475Smrg
1794956cc18dSsnj    ToggleFlag(screen->utf8_title);
1795d522f475Smrg    update_font_utf8_title();
1796d522f475Smrg}
1797d522f475Smrg#endif
1798d522f475Smrg
1799d522f475Smrg/*
1800d522f475Smrg * tek menu
1801d522f475Smrg */
1802d522f475Smrg
1803d522f475Smrg#if OPT_TEK4014
1804d522f475Smrgstatic void
1805956cc18dSsnjdo_tektextlarge(Widget gw,
1806d522f475Smrg		XtPointer closure GCC_UNUSED,
1807d522f475Smrg		XtPointer data GCC_UNUSED)
1808d522f475Smrg{
1809956cc18dSsnj    TekSetFontSize(getTekWidget(gw), True, tekMenu_tektextlarge);
1810d522f475Smrg}
1811d522f475Smrg
1812d522f475Smrgstatic void
1813956cc18dSsnjdo_tektext2(Widget gw,
1814d522f475Smrg	    XtPointer closure GCC_UNUSED,
1815d522f475Smrg	    XtPointer data GCC_UNUSED)
1816d522f475Smrg{
1817956cc18dSsnj    TekSetFontSize(getTekWidget(gw), True, tekMenu_tektext2);
1818d522f475Smrg}
1819d522f475Smrg
1820d522f475Smrgstatic void
1821956cc18dSsnjdo_tektext3(Widget gw,
1822d522f475Smrg	    XtPointer closure GCC_UNUSED,
1823d522f475Smrg	    XtPointer data GCC_UNUSED)
1824d522f475Smrg{
1825956cc18dSsnj    TekSetFontSize(getTekWidget(gw), True, tekMenu_tektext3);
1826d522f475Smrg}
1827d522f475Smrg
1828d522f475Smrgstatic void
1829956cc18dSsnjdo_tektextsmall(Widget gw,
1830d522f475Smrg		XtPointer closure GCC_UNUSED,
1831d522f475Smrg		XtPointer data GCC_UNUSED)
1832d522f475Smrg{
1833956cc18dSsnj    TekSetFontSize(getTekWidget(gw), True, tekMenu_tektextsmall);
1834d522f475Smrg}
1835d522f475Smrg
1836d522f475Smrgstatic void
1837956cc18dSsnjdo_tekpage(Widget gw,
1838d522f475Smrg	   XtPointer closure GCC_UNUSED,
1839d522f475Smrg	   XtPointer data GCC_UNUSED)
1840d522f475Smrg{
1841956cc18dSsnj    TekSimulatePageButton(getTekWidget(gw), False);
1842d522f475Smrg}
1843d522f475Smrg
1844d522f475Smrgstatic void
1845956cc18dSsnjdo_tekreset(Widget gw,
1846d522f475Smrg	    XtPointer closure GCC_UNUSED,
1847d522f475Smrg	    XtPointer data GCC_UNUSED)
1848d522f475Smrg{
1849956cc18dSsnj    TekSimulatePageButton(getTekWidget(gw), True);
1850d522f475Smrg}
1851d522f475Smrg
1852d522f475Smrgstatic void
1853956cc18dSsnjdo_tekcopy(Widget gw,
1854d522f475Smrg	   XtPointer closure GCC_UNUSED,
1855d522f475Smrg	   XtPointer data GCC_UNUSED)
1856d522f475Smrg{
1857956cc18dSsnj    TekCopy(getTekWidget(gw));
1858d522f475Smrg}
1859d522f475Smrg
1860d522f475Smrgstatic void
1861d522f475Smrghandle_vtshow(Widget gw GCC_UNUSED, Bool allowswitch)
1862d522f475Smrg{
186320d2c4d2Smrg    XtermWidget xw = term;
186420d2c4d2Smrg    TScreen *screen = TScreenOf(xw);
1865d522f475Smrg
1866d522f475Smrg    TRACE(("Show vt-window\n"));
1867d522f475Smrg    if (!screen->Vshow) {	/* not showing, turn on */
1868d522f475Smrg	set_vt_visibility(True);
186920d2c4d2Smrg    } else if (TEK4014_SHOWN(xw) || allowswitch) {	/* is showing, turn off */
1870d522f475Smrg	set_vt_visibility(False);
187120d2c4d2Smrg	if (!TEK4014_ACTIVE(xw) && tekRefreshList)
1872d522f475Smrg	    TekRefresh(tekWidget);
1873d522f475Smrg	end_vt_mode();		/* WARNING: this does a longjmp... */
1874d522f475Smrg    } else
187520d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
1876d522f475Smrg}
1877d522f475Smrg
1878d522f475Smrgstatic void
1879d522f475Smrgdo_vtshow(Widget gw,
1880d522f475Smrg	  XtPointer closure GCC_UNUSED,
1881d522f475Smrg	  XtPointer data GCC_UNUSED)
1882d522f475Smrg{
1883d522f475Smrg    handle_vtshow(gw, True);
1884d522f475Smrg}
1885d522f475Smrg
1886d522f475Smrgstatic void
1887d522f475Smrgdo_vtonoff(Widget gw,
1888d522f475Smrg	   XtPointer closure GCC_UNUSED,
1889d522f475Smrg	   XtPointer data GCC_UNUSED)
1890d522f475Smrg{
1891d522f475Smrg    handle_vtshow(gw, False);
1892d522f475Smrg}
1893d522f475Smrg
1894d522f475Smrgstatic void
1895d522f475Smrgdo_vtmode(Widget gw GCC_UNUSED,
1896d522f475Smrg	  XtPointer closure GCC_UNUSED,
1897d522f475Smrg	  XtPointer data GCC_UNUSED)
1898d522f475Smrg{
1899d522f475Smrg    switch_modes(TEK4014_ACTIVE(term));		/* switch to vt, or from */
1900d522f475Smrg}
1901d522f475Smrg
1902d522f475Smrg/* ARGSUSED */
1903d522f475Smrgstatic void
1904d522f475Smrgdo_tekhide(Widget gw GCC_UNUSED,
1905d522f475Smrg	   XtPointer closure GCC_UNUSED,
1906d522f475Smrg	   XtPointer data GCC_UNUSED)
1907d522f475Smrg{
1908d522f475Smrg    hide_tek_window();
1909d522f475Smrg}
1910d522f475Smrg#endif /* OPT_TEK4014 */
1911d522f475Smrg
1912d522f475Smrg/*
1913d522f475Smrg * public handler routines
1914d522f475Smrg */
19150bd37d32Smrgint
19160bd37d32SmrgdecodeToggle(XtermWidget xw, String * params, Cardinal nparams)
1917d522f475Smrg{
19180bd37d32Smrg    int dir = toggleErr;
1919d522f475Smrg
1920d522f475Smrg    switch (nparams) {
1921d522f475Smrg    case 0:
19220bd37d32Smrg	dir = toggleAll;
1923d522f475Smrg	break;
1924d522f475Smrg    case 1:
1925d522f475Smrg	if (XmuCompareISOLatin1(params[0], "on") == 0)
19260bd37d32Smrg	    dir = toggleOn;
1927d522f475Smrg	else if (XmuCompareISOLatin1(params[0], "off") == 0)
19280bd37d32Smrg	    dir = toggleOff;
1929d522f475Smrg	else if (XmuCompareISOLatin1(params[0], "toggle") == 0)
19300bd37d32Smrg	    dir = toggleAll;
1931d522f475Smrg	break;
1932d522f475Smrg    }
1933d522f475Smrg
19340bd37d32Smrg    if (dir == toggleErr) {
193520d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
19360bd37d32Smrg    }
19370bd37d32Smrg
19380bd37d32Smrg    return dir;
19390bd37d32Smrg}
1940d522f475Smrg
19410bd37d32Smrgstatic void
19420bd37d32Smrghandle_toggle(void (*proc) PROTO_XT_CALLBACK_ARGS,
19430bd37d32Smrg	      int var,
19440bd37d32Smrg	      String * params,
19450bd37d32Smrg	      Cardinal nparams,
19460bd37d32Smrg	      Widget w,
19470bd37d32Smrg	      XtPointer closure,
19480bd37d32Smrg	      XtPointer data)
19490bd37d32Smrg{
19500bd37d32Smrg    XtermWidget xw = term;
19510bd37d32Smrg
19520bd37d32Smrg    switch (decodeToggle(xw, params, nparams)) {
19530bd37d32Smrg
19540bd37d32Smrg    case toggleAll:
1955d522f475Smrg	(*proc) (w, closure, data);
1956d522f475Smrg	break;
1957d522f475Smrg
19580bd37d32Smrg    case toggleOff:
1959d522f475Smrg	if (var)
1960d522f475Smrg	    (*proc) (w, closure, data);
1961d522f475Smrg	else
196220d2c4d2Smrg	    Bell(xw, XkbBI_MinorError, 0);
1963d522f475Smrg	break;
1964d522f475Smrg
19650bd37d32Smrg    case toggleOn:
1966d522f475Smrg	if (!var)
1967d522f475Smrg	    (*proc) (w, closure, data);
1968d522f475Smrg	else
196920d2c4d2Smrg	    Bell(xw, XkbBI_MinorError, 0);
1970d522f475Smrg	break;
1971d522f475Smrg    }
1972d522f475Smrg    return;
1973d522f475Smrg}
1974d522f475Smrg
1975d522f475Smrg#define handle_vt_toggle(proc, var, params, nparams, w) \
1976d522f475Smrg	handle_toggle(proc, (int) (var), params, nparams, w, (XtPointer)0, (XtPointer)0)
1977d522f475Smrg
197820d2c4d2Smrg#define HANDLE_VT_TOGGLE(name) \
197920d2c4d2Smrg	handle_vt_toggle(do_##name, TScreenOf(term)->name, params, *param_count, w)
198020d2c4d2Smrg
1981d522f475Smrg#define handle_tek_toggle(proc, var, params, nparams, w) \
1982d522f475Smrg	handle_toggle(proc, (int) (var), params, nparams, w, (XtPointer)0, (XtPointer)0)
1983d522f475Smrg
1984d522f475Smrgvoid
1985d522f475SmrgHandleAllowSends(Widget w,
1986d522f475Smrg		 XEvent * event GCC_UNUSED,
1987d522f475Smrg		 String * params,
1988d522f475Smrg		 Cardinal *param_count)
1989d522f475Smrg{
199020d2c4d2Smrg    handle_vt_toggle(do_allowsends, TScreenOf(term)->allowSendEvents,
1991d522f475Smrg		     params, *param_count, w);
1992d522f475Smrg}
1993d522f475Smrg
1994d522f475Smrgvoid
1995d522f475SmrgHandleSetVisualBell(Widget w,
1996d522f475Smrg		    XEvent * event GCC_UNUSED,
1997d522f475Smrg		    String * params,
1998d522f475Smrg		    Cardinal *param_count)
1999d522f475Smrg{
200020d2c4d2Smrg    HANDLE_VT_TOGGLE(visualbell);
2001d522f475Smrg}
2002d522f475Smrg
2003d522f475Smrgvoid
2004d522f475SmrgHandleSetPopOnBell(Widget w,
2005d522f475Smrg		   XEvent * event GCC_UNUSED,
2006d522f475Smrg		   String * params,
2007d522f475Smrg		   Cardinal *param_count)
2008d522f475Smrg{
200920d2c4d2Smrg    HANDLE_VT_TOGGLE(poponbell);
2010d522f475Smrg}
2011d522f475Smrg
2012d522f475Smrg#ifdef ALLOWLOGGING
2013d522f475Smrgvoid
2014d522f475SmrgHandleLogging(Widget w,
2015d522f475Smrg	      XEvent * event GCC_UNUSED,
2016d522f475Smrg	      String * params,
2017d522f475Smrg	      Cardinal *param_count)
2018d522f475Smrg{
201920d2c4d2Smrg    HANDLE_VT_TOGGLE(logging);
2020d522f475Smrg}
2021d522f475Smrg#endif
2022d522f475Smrg
2023e39b573cSmrg#if OPT_PRINT_ON_EXIT
2024e39b573cSmrgvoid
2025e39b573cSmrgHandleWriteNow(Widget w,
2026e39b573cSmrg	       XEvent * event GCC_UNUSED,
2027e39b573cSmrg	       String * params GCC_UNUSED,
2028e39b573cSmrg	       Cardinal *param_count GCC_UNUSED)
2029e39b573cSmrg{
2030e39b573cSmrg    do_write_now(w, 0, 0);
2031e39b573cSmrg}
2032e39b573cSmrg
2033e39b573cSmrgvoid
2034e39b573cSmrgHandleWriteError(Widget w,
2035e39b573cSmrg		 XEvent * event GCC_UNUSED,
2036e39b573cSmrg		 String * params,
2037e39b573cSmrg		 Cardinal *param_count)
2038e39b573cSmrg{
2039e39b573cSmrg    HANDLE_VT_TOGGLE(write_error);
2040e39b573cSmrg}
2041e39b573cSmrg#endif
2042e39b573cSmrg
2043d522f475Smrg/* ARGSUSED */
2044d522f475Smrgvoid
204520d2c4d2SmrgHandlePrintScreen(Widget w GCC_UNUSED,
2046d522f475Smrg		  XEvent * event GCC_UNUSED,
2047d522f475Smrg		  String * params GCC_UNUSED,
2048d522f475Smrg		  Cardinal *param_count GCC_UNUSED)
2049d522f475Smrg{
205020d2c4d2Smrg    xtermPrintScreen(term, True, getPrinterFlags(term, params, param_count));
2051d522f475Smrg}
2052d522f475Smrg
2053956cc18dSsnj/* ARGSUSED */
2054956cc18dSsnjvoid
205520d2c4d2SmrgHandlePrintEverything(Widget w GCC_UNUSED,
2056956cc18dSsnj		      XEvent * event GCC_UNUSED,
205720d2c4d2Smrg		      String * params,
205820d2c4d2Smrg		      Cardinal *param_count)
2059956cc18dSsnj{
206020d2c4d2Smrg    xtermPrintEverything(term, getPrinterFlags(term, params, param_count));
2061956cc18dSsnj}
2062956cc18dSsnj
2063d522f475Smrg/* ARGSUSED */
2064d522f475Smrgvoid
2065d522f475SmrgHandlePrintControlMode(Widget w,
2066d522f475Smrg		       XEvent * event GCC_UNUSED,
2067d522f475Smrg		       String * params GCC_UNUSED,
2068d522f475Smrg		       Cardinal *param_count GCC_UNUSED)
2069d522f475Smrg{
2070d522f475Smrg    do_print_redir(w, (XtPointer) 0, (XtPointer) 0);
2071d522f475Smrg}
2072d522f475Smrg
2073d522f475Smrg/* ARGSUSED */
2074d522f475Smrgvoid
2075d522f475SmrgHandleRedraw(Widget w,
2076d522f475Smrg	     XEvent * event GCC_UNUSED,
2077d522f475Smrg	     String * params GCC_UNUSED,
2078d522f475Smrg	     Cardinal *param_count GCC_UNUSED)
2079d522f475Smrg{
2080d522f475Smrg    do_redraw(w, (XtPointer) 0, (XtPointer) 0);
2081d522f475Smrg}
2082d522f475Smrg
2083d522f475Smrg/* ARGSUSED */
2084d522f475Smrgvoid
2085d522f475SmrgHandleSendSignal(Widget w,
2086d522f475Smrg		 XEvent * event GCC_UNUSED,
2087d522f475Smrg		 String * params,
2088d522f475Smrg		 Cardinal *param_count)
2089d522f475Smrg{
2090d522f475Smrg    /* *INDENT-OFF* */
2091d522f475Smrg    static struct sigtab {
209220d2c4d2Smrg	const char *name;
2093d522f475Smrg	int sig;
2094d522f475Smrg    } signals[] = {
2095d522f475Smrg#ifdef SIGTSTP
2096d522f475Smrg	{ "suspend",	SIGTSTP },
2097d522f475Smrg	{ "tstp",	SIGTSTP },
2098d522f475Smrg#endif
2099d522f475Smrg#ifdef SIGCONT
2100d522f475Smrg	{ "cont",	SIGCONT },
2101d522f475Smrg#endif
2102d522f475Smrg	{ "int",	SIGINT },
2103d522f475Smrg	{ "hup",	SIGHUP },
2104d522f475Smrg	{ "quit",	SIGQUIT },
2105d522f475Smrg	{ "alrm",	SIGALRM },
2106d522f475Smrg	{ "alarm",	SIGALRM },
2107d522f475Smrg	{ "term",	SIGTERM },
2108d522f475Smrg	{ "kill",	SIGKILL },
2109d522f475Smrg	{ NULL, 0 },
2110d522f475Smrg    };
2111d522f475Smrg    /* *INDENT-ON* */
2112d522f475Smrg
2113d522f475Smrg    if (*param_count == 1) {
2114d522f475Smrg	struct sigtab *st;
2115d522f475Smrg
2116d522f475Smrg	for (st = signals; st->name; st++) {
2117d522f475Smrg	    if (XmuCompareISOLatin1(st->name, params[0]) == 0) {
2118d522f475Smrg		handle_send_signal(w, st->sig);
2119d522f475Smrg		return;
2120d522f475Smrg	    }
2121d522f475Smrg	}
2122d522f475Smrg	/* one could allow numeric values, but that would be a security hole */
2123d522f475Smrg    }
2124d522f475Smrg
212520d2c4d2Smrg    Bell(term, XkbBI_MinorError, 0);
2126d522f475Smrg}
2127d522f475Smrg
2128d522f475Smrg/* ARGSUSED */
2129d522f475Smrgvoid
2130d522f475SmrgHandleQuit(Widget w,
2131d522f475Smrg	   XEvent * event GCC_UNUSED,
2132d522f475Smrg	   String * params GCC_UNUSED,
2133d522f475Smrg	   Cardinal *param_count GCC_UNUSED)
2134d522f475Smrg{
2135d522f475Smrg    do_quit(w, (XtPointer) 0, (XtPointer) 0);
2136d522f475Smrg}
2137d522f475Smrg
2138d522f475Smrgvoid
2139d522f475SmrgHandle8BitControl(Widget w,
2140d522f475Smrg		  XEvent * event GCC_UNUSED,
2141d522f475Smrg		  String * params,
2142d522f475Smrg		  Cardinal *param_count)
2143d522f475Smrg{
214420d2c4d2Smrg    handle_vt_toggle(do_8bit_control, TScreenOf(term)->control_eight_bits,
2145d522f475Smrg		     params, *param_count, w);
2146d522f475Smrg}
2147d522f475Smrg
2148d522f475Smrgvoid
2149d522f475SmrgHandleBackarrow(Widget w,
2150d522f475Smrg		XEvent * event GCC_UNUSED,
2151d522f475Smrg		String * params,
2152d522f475Smrg		Cardinal *param_count)
2153d522f475Smrg{
2154d522f475Smrg    handle_vt_toggle(do_backarrow, term->keyboard.flags & MODE_DECBKM,
2155d522f475Smrg		     params, *param_count, w);
2156d522f475Smrg}
2157d522f475Smrg
21580bd37d32Smrg#if OPT_MAXIMIZE
21590bd37d32Smrg#if OPT_TEK4014
21600bd37d32Smrg#define WhichEWMH (TEK4014_ACTIVE(xw) != 0)
21610bd37d32Smrg#else
21620bd37d32Smrg#define WhichEWMH 0
21630bd37d32Smrg#endif
21640bd37d32Smrgstatic void
21650bd37d32Smrgdo_fullscreen(Widget gw GCC_UNUSED,
21660bd37d32Smrg	      XtPointer closure GCC_UNUSED,
21670bd37d32Smrg	      XtPointer data GCC_UNUSED)
21680bd37d32Smrg{
21690bd37d32Smrg    XtermWidget xw = term;
21700bd37d32Smrg
21710bd37d32Smrg    if (resource.fullscreen != esNever)
21720bd37d32Smrg	FullScreen(xw, !xw->work.ewmh[WhichEWMH].mode);
21730bd37d32Smrg}
21740bd37d32Smrg
21750bd37d32Smrg/* ARGSUSED */
21760bd37d32Smrgvoid
21770bd37d32SmrgHandleFullscreen(Widget w,
21780bd37d32Smrg		 XEvent * event GCC_UNUSED,
21790bd37d32Smrg		 String * params GCC_UNUSED,
21800bd37d32Smrg		 Cardinal *param_count GCC_UNUSED)
21810bd37d32Smrg{
21820bd37d32Smrg    XtermWidget xw = term;
21830bd37d32Smrg
21840bd37d32Smrg    if (resource.fullscreen != esNever) {
21850bd37d32Smrg	handle_vt_toggle(do_fullscreen, xw->work.ewmh[WhichEWMH].mode,
21860bd37d32Smrg			 params, *param_count, w);
21870bd37d32Smrg    }
21880bd37d32Smrg}
21890bd37d32Smrg
21900bd37d32Smrgvoid
21910bd37d32Smrgupdate_fullscreen(void)
21920bd37d32Smrg{
21930bd37d32Smrg    XtermWidget xw = term;
21940bd37d32Smrg
21950bd37d32Smrg    if (resource.fullscreen <= 1) {
21960bd37d32Smrg	UpdateCheckbox("update_fullscreen",
21970bd37d32Smrg		       mainMenuEntries,
21980bd37d32Smrg		       mainMenu_fullscreen,
21990bd37d32Smrg		       xw->work.ewmh[WhichEWMH].mode);
22000bd37d32Smrg    } else {
22010bd37d32Smrg	SetItemSensitivity(mainMenuEntries[mainMenu_fullscreen].widget,
22020bd37d32Smrg			   False);
22030bd37d32Smrg    }
22040bd37d32Smrg}
22050bd37d32Smrg
22060bd37d32Smrg#endif /* OPT_MAXIMIZE */
22070bd37d32Smrg
2208d522f475Smrg#if OPT_SUN_FUNC_KEYS
2209d522f475Smrgvoid
2210d522f475SmrgHandleSunFunctionKeys(Widget w,
2211d522f475Smrg		      XEvent * event GCC_UNUSED,
2212d522f475Smrg		      String * params,
2213d522f475Smrg		      Cardinal *param_count)
2214d522f475Smrg{
2215d522f475Smrg    handle_vt_toggle(do_sun_fkeys, term->keyboard.type == keyboardIsSun,
2216d522f475Smrg		     params, *param_count, w);
2217d522f475Smrg}
2218d522f475Smrg#endif
2219d522f475Smrg
2220d522f475Smrg#if OPT_NUM_LOCK
2221d522f475Smrgvoid
2222d522f475SmrgHandleNumLock(Widget w,
2223d522f475Smrg	      XEvent * event GCC_UNUSED,
2224d522f475Smrg	      String * params,
2225d522f475Smrg	      Cardinal *param_count)
2226d522f475Smrg{
2227d522f475Smrg    handle_vt_toggle(do_num_lock, term->misc.real_NumLock,
2228d522f475Smrg		     params, *param_count, w);
2229d522f475Smrg}
2230d522f475Smrg
2231d522f475Smrgvoid
2232d522f475SmrgHandleAltEsc(Widget w,
2233d522f475Smrg	     XEvent * event GCC_UNUSED,
2234d522f475Smrg	     String * params,
2235d522f475Smrg	     Cardinal *param_count)
2236d522f475Smrg{
22370bd37d32Smrg    handle_vt_toggle(do_alt_esc, !TScreenOf(term)->alt_sends_esc,
2238d522f475Smrg		     params, *param_count, w);
2239d522f475Smrg}
2240d522f475Smrg
2241d522f475Smrgvoid
2242d522f475SmrgHandleMetaEsc(Widget w,
2243d522f475Smrg	      XEvent * event GCC_UNUSED,
2244d522f475Smrg	      String * params,
2245d522f475Smrg	      Cardinal *param_count)
2246d522f475Smrg{
224720d2c4d2Smrg    handle_vt_toggle(do_meta_esc, TScreenOf(term)->meta_sends_esc,
2248d522f475Smrg		     params, *param_count, w);
2249d522f475Smrg}
2250d522f475Smrg#endif
2251d522f475Smrg
2252d522f475Smrgvoid
2253d522f475SmrgHandleDeleteIsDEL(Widget w,
2254d522f475Smrg		  XEvent * event GCC_UNUSED,
2255d522f475Smrg		  String * params,
2256d522f475Smrg		  Cardinal *param_count)
2257d522f475Smrg{
225820d2c4d2Smrg    handle_vt_toggle(do_delete_del, TScreenOf(term)->delete_is_del,
2259d522f475Smrg		     params, *param_count, w);
2260d522f475Smrg}
2261d522f475Smrg
2262d522f475Smrgvoid
2263d522f475SmrgHandleOldFunctionKeys(Widget w,
2264d522f475Smrg		      XEvent * event GCC_UNUSED,
2265d522f475Smrg		      String * params,
2266d522f475Smrg		      Cardinal *param_count)
2267d522f475Smrg{
2268d522f475Smrg    handle_vt_toggle(do_old_fkeys, term->keyboard.type == keyboardIsLegacy,
2269d522f475Smrg		     params, *param_count, w);
2270d522f475Smrg}
2271d522f475Smrg
2272d522f475Smrg#if OPT_SUNPC_KBD
2273d522f475Smrgvoid
2274d522f475SmrgHandleSunKeyboard(Widget w,
2275d522f475Smrg		  XEvent * event GCC_UNUSED,
2276d522f475Smrg		  String * params,
2277d522f475Smrg		  Cardinal *param_count)
2278d522f475Smrg{
2279d522f475Smrg    handle_vt_toggle(do_sun_kbd, term->keyboard.type == keyboardIsVT220,
2280d522f475Smrg		     params, *param_count, w);
2281d522f475Smrg}
2282d522f475Smrg#endif
2283d522f475Smrg
2284d522f475Smrg#if OPT_HP_FUNC_KEYS
2285d522f475Smrgvoid
2286d522f475SmrgHandleHpFunctionKeys(Widget w,
2287d522f475Smrg		     XEvent * event GCC_UNUSED,
2288d522f475Smrg		     String * params,
2289d522f475Smrg		     Cardinal *param_count)
2290d522f475Smrg{
2291d522f475Smrg    handle_vt_toggle(do_hp_fkeys, term->keyboard.type == keyboardIsHP,
2292d522f475Smrg		     params, *param_count, w);
2293d522f475Smrg}
2294d522f475Smrg#endif
2295d522f475Smrg
2296d522f475Smrg#if OPT_SCO_FUNC_KEYS
2297d522f475Smrgvoid
2298d522f475SmrgHandleScoFunctionKeys(Widget w,
2299d522f475Smrg		      XEvent * event GCC_UNUSED,
2300d522f475Smrg		      String * params,
2301d522f475Smrg		      Cardinal *param_count)
2302d522f475Smrg{
2303d522f475Smrg    handle_vt_toggle(do_sco_fkeys, term->keyboard.type == keyboardIsSCO,
2304d522f475Smrg		     params, *param_count, w);
2305d522f475Smrg}
2306d522f475Smrg#endif
2307d522f475Smrg
2308d522f475Smrgvoid
2309d522f475SmrgHandleScrollbar(Widget w,
2310d522f475Smrg		XEvent * event GCC_UNUSED,
2311d522f475Smrg		String * params,
2312d522f475Smrg		Cardinal *param_count)
2313d522f475Smrg{
231420d2c4d2Smrg    XtermWidget xw = term;
231520d2c4d2Smrg
231620d2c4d2Smrg    if (IsIcon(TScreenOf(xw))) {
231720d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
2318d522f475Smrg    } else {
231920d2c4d2Smrg	handle_vt_toggle(do_scrollbar, TScreenOf(xw)->fullVwin.sb_info.width,
2320d522f475Smrg			 params, *param_count, w);
2321d522f475Smrg    }
2322d522f475Smrg}
2323d522f475Smrg
2324d522f475Smrgvoid
2325d522f475SmrgHandleJumpscroll(Widget w,
2326d522f475Smrg		 XEvent * event GCC_UNUSED,
2327d522f475Smrg		 String * params,
2328d522f475Smrg		 Cardinal *param_count)
2329d522f475Smrg{
233020d2c4d2Smrg    HANDLE_VT_TOGGLE(jumpscroll);
2331d522f475Smrg}
2332d522f475Smrg
2333d522f475Smrgvoid
2334d522f475SmrgHandleKeepSelection(Widget w,
2335d522f475Smrg		    XEvent * event GCC_UNUSED,
2336d522f475Smrg		    String * params,
2337d522f475Smrg		    Cardinal *param_count)
2338d522f475Smrg{
233920d2c4d2Smrg    HANDLE_VT_TOGGLE(keepSelection);
2340d522f475Smrg}
2341d522f475Smrg
2342d522f475Smrgvoid
2343d522f475SmrgHandleSetSelect(Widget w,
2344d522f475Smrg		XEvent * event GCC_UNUSED,
2345d522f475Smrg		String * params,
2346d522f475Smrg		Cardinal *param_count)
2347d522f475Smrg{
234820d2c4d2Smrg    handle_vt_toggle(do_selectClipboard, TScreenOf(term)->selectToClipboard,
2349d522f475Smrg		     params, *param_count, w);
2350d522f475Smrg}
2351d522f475Smrg
2352d522f475Smrgvoid
2353d522f475SmrgHandleReverseVideo(Widget w,
2354d522f475Smrg		   XEvent * event GCC_UNUSED,
2355d522f475Smrg		   String * params,
2356d522f475Smrg		   Cardinal *param_count)
2357d522f475Smrg{
2358d522f475Smrg    handle_vt_toggle(do_reversevideo, (term->misc.re_verse0),
2359d522f475Smrg		     params, *param_count, w);
2360d522f475Smrg}
2361d522f475Smrg
2362d522f475Smrgvoid
2363d522f475SmrgHandleAutoWrap(Widget w,
2364d522f475Smrg	       XEvent * event GCC_UNUSED,
2365d522f475Smrg	       String * params,
2366d522f475Smrg	       Cardinal *param_count)
2367d522f475Smrg{
2368d522f475Smrg    handle_vt_toggle(do_autowrap, (term->flags & WRAPAROUND),
2369d522f475Smrg		     params, *param_count, w);
2370d522f475Smrg}
2371d522f475Smrg
2372d522f475Smrgvoid
2373d522f475SmrgHandleReverseWrap(Widget w,
2374d522f475Smrg		  XEvent * event GCC_UNUSED,
2375d522f475Smrg		  String * params,
2376d522f475Smrg		  Cardinal *param_count)
2377d522f475Smrg{
2378d522f475Smrg    handle_vt_toggle(do_reversewrap, (term->flags & REVERSEWRAP),
2379d522f475Smrg		     params, *param_count, w);
2380d522f475Smrg}
2381d522f475Smrg
2382d522f475Smrgvoid
2383d522f475SmrgHandleAutoLineFeed(Widget w,
2384d522f475Smrg		   XEvent * event GCC_UNUSED,
2385d522f475Smrg		   String * params,
2386d522f475Smrg		   Cardinal *param_count)
2387d522f475Smrg{
2388d522f475Smrg    handle_vt_toggle(do_autolinefeed, (term->flags & LINEFEED),
2389d522f475Smrg		     params, *param_count, w);
2390d522f475Smrg}
2391d522f475Smrg
2392d522f475Smrgvoid
2393d522f475SmrgHandleAppCursor(Widget w,
2394d522f475Smrg		XEvent * event GCC_UNUSED,
2395d522f475Smrg		String * params,
2396d522f475Smrg		Cardinal *param_count)
2397d522f475Smrg{
2398d522f475Smrg    handle_vt_toggle(do_appcursor, (term->keyboard.flags & MODE_DECCKM),
2399d522f475Smrg		     params, *param_count, w);
2400d522f475Smrg}
2401d522f475Smrg
2402d522f475Smrgvoid
2403d522f475SmrgHandleAppKeypad(Widget w,
2404d522f475Smrg		XEvent * event GCC_UNUSED,
2405d522f475Smrg		String * params,
2406d522f475Smrg		Cardinal *param_count)
2407d522f475Smrg{
2408d522f475Smrg    handle_vt_toggle(do_appkeypad, (term->keyboard.flags & MODE_DECKPAM),
2409d522f475Smrg		     params, *param_count, w);
2410d522f475Smrg}
2411d522f475Smrg
2412d522f475Smrgvoid
2413d522f475SmrgHandleScrollKey(Widget w,
2414d522f475Smrg		XEvent * event GCC_UNUSED,
2415d522f475Smrg		String * params,
2416d522f475Smrg		Cardinal *param_count)
2417d522f475Smrg{
241820d2c4d2Smrg    HANDLE_VT_TOGGLE(scrollkey);
2419d522f475Smrg}
2420d522f475Smrg
2421d522f475Smrgvoid
2422d522f475SmrgHandleScrollTtyOutput(Widget w,
2423d522f475Smrg		      XEvent * event GCC_UNUSED,
2424d522f475Smrg		      String * params,
2425d522f475Smrg		      Cardinal *param_count)
2426d522f475Smrg{
242720d2c4d2Smrg    HANDLE_VT_TOGGLE(scrollttyoutput);
2428d522f475Smrg}
2429d522f475Smrg
2430d522f475Smrgvoid
2431d522f475SmrgHandleAllow132(Widget w,
2432d522f475Smrg	       XEvent * event GCC_UNUSED,
2433d522f475Smrg	       String * params,
2434d522f475Smrg	       Cardinal *param_count)
2435d522f475Smrg{
243620d2c4d2Smrg    handle_vt_toggle(do_allow132, TScreenOf(term)->c132,
2437d522f475Smrg		     params, *param_count, w);
2438d522f475Smrg}
2439d522f475Smrg
2440d522f475Smrgvoid
2441d522f475SmrgHandleCursesEmul(Widget w,
2442d522f475Smrg		 XEvent * event GCC_UNUSED,
2443d522f475Smrg		 String * params,
2444d522f475Smrg		 Cardinal *param_count)
2445d522f475Smrg{
244620d2c4d2Smrg    handle_vt_toggle(do_cursesemul, TScreenOf(term)->curses,
2447d522f475Smrg		     params, *param_count, w);
2448d522f475Smrg}
2449d522f475Smrg
2450d522f475Smrgvoid
2451d522f475SmrgHandleBellIsUrgent(Widget w,
2452d522f475Smrg		   XEvent * event GCC_UNUSED,
2453d522f475Smrg		   String * params,
2454d522f475Smrg		   Cardinal *param_count)
2455d522f475Smrg{
245620d2c4d2Smrg    HANDLE_VT_TOGGLE(bellIsUrgent);
2457d522f475Smrg}
2458d522f475Smrg
2459d522f475Smrgvoid
2460d522f475SmrgHandleMarginBell(Widget w,
2461d522f475Smrg		 XEvent * event GCC_UNUSED,
2462d522f475Smrg		 String * params,
2463d522f475Smrg		 Cardinal *param_count)
2464d522f475Smrg{
246520d2c4d2Smrg    HANDLE_VT_TOGGLE(marginbell);
2466d522f475Smrg}
2467d522f475Smrg
2468d522f475Smrg#if OPT_BLINK_CURS
2469d522f475Smrgvoid
2470d522f475SmrgHandleCursorBlink(Widget w,
2471d522f475Smrg		  XEvent * event GCC_UNUSED,
2472d522f475Smrg		  String * params,
2473d522f475Smrg		  Cardinal *param_count)
2474d522f475Smrg{
2475d522f475Smrg    /* eventually want to see if sensitive or not */
247620d2c4d2Smrg    handle_vt_toggle(do_cursorblink, TScreenOf(term)->cursor_blink,
2477d522f475Smrg		     params, *param_count, w);
2478d522f475Smrg}
2479d522f475Smrg#endif
2480d522f475Smrg
2481d522f475Smrgvoid
2482d522f475SmrgHandleAltScreen(Widget w,
2483d522f475Smrg		XEvent * event GCC_UNUSED,
2484d522f475Smrg		String * params,
2485d522f475Smrg		Cardinal *param_count)
2486d522f475Smrg{
2487d522f475Smrg    /* eventually want to see if sensitive or not */
248820d2c4d2Smrg    handle_vt_toggle(do_altscreen, TScreenOf(term)->whichBuf,
2489d522f475Smrg		     params, *param_count, w);
2490d522f475Smrg}
2491d522f475Smrg
2492d522f475Smrgvoid
2493d522f475SmrgHandleTiteInhibit(Widget w,
2494d522f475Smrg		  XEvent * event GCC_UNUSED,
2495d522f475Smrg		  String * params,
2496d522f475Smrg		  Cardinal *param_count)
2497d522f475Smrg{
2498d522f475Smrg    /* eventually want to see if sensitive or not */
2499d522f475Smrg    handle_vt_toggle(do_titeInhibit, !(term->misc.titeInhibit),
2500d522f475Smrg		     params, *param_count, w);
2501d522f475Smrg}
2502d522f475Smrg
2503d522f475Smrg/* ARGSUSED */
2504d522f475Smrgvoid
2505d522f475SmrgHandleSoftReset(Widget w,
2506d522f475Smrg		XEvent * event GCC_UNUSED,
2507d522f475Smrg		String * params GCC_UNUSED,
2508d522f475Smrg		Cardinal *param_count GCC_UNUSED)
2509d522f475Smrg{
2510d522f475Smrg    do_softreset(w, (XtPointer) 0, (XtPointer) 0);
2511d522f475Smrg}
2512d522f475Smrg
2513d522f475Smrg/* ARGSUSED */
2514d522f475Smrgvoid
2515d522f475SmrgHandleHardReset(Widget w,
2516d522f475Smrg		XEvent * event GCC_UNUSED,
2517d522f475Smrg		String * params GCC_UNUSED,
2518d522f475Smrg		Cardinal *param_count GCC_UNUSED)
2519d522f475Smrg{
2520d522f475Smrg    do_hardreset(w, (XtPointer) 0, (XtPointer) 0);
2521d522f475Smrg}
2522d522f475Smrg
2523d522f475Smrg/* ARGSUSED */
2524d522f475Smrgvoid
2525d522f475SmrgHandleClearSavedLines(Widget w,
2526d522f475Smrg		      XEvent * event GCC_UNUSED,
2527d522f475Smrg		      String * params GCC_UNUSED,
2528d522f475Smrg		      Cardinal *param_count GCC_UNUSED)
2529d522f475Smrg{
2530d522f475Smrg    do_clearsavedlines(w, (XtPointer) 0, (XtPointer) 0);
2531d522f475Smrg}
2532d522f475Smrg
2533e39b573cSmrgvoid
2534e39b573cSmrgHandleAllowBoldFonts(Widget w,
2535e39b573cSmrg		     XEvent * event GCC_UNUSED,
2536e39b573cSmrg		     String * params,
2537e39b573cSmrg		     Cardinal *param_count)
2538e39b573cSmrg{
2539e39b573cSmrg    HANDLE_VT_TOGGLE(allowBoldFonts);
2540e39b573cSmrg}
2541e39b573cSmrg
2542d522f475Smrg#if OPT_DEC_CHRSET
2543d522f475Smrgvoid
2544d522f475SmrgHandleFontDoublesize(Widget w,
2545d522f475Smrg		     XEvent * event GCC_UNUSED,
2546d522f475Smrg		     String * params,
2547d522f475Smrg		     Cardinal *param_count)
2548d522f475Smrg{
254920d2c4d2Smrg    HANDLE_VT_TOGGLE(font_doublesize);
2550d522f475Smrg}
2551d522f475Smrg#endif
2552d522f475Smrg
2553d522f475Smrg#if OPT_BOX_CHARS
2554d522f475Smrgvoid
2555d522f475SmrgHandleFontBoxChars(Widget w,
2556d522f475Smrg		   XEvent * event GCC_UNUSED,
2557d522f475Smrg		   String * params,
2558d522f475Smrg		   Cardinal *param_count)
2559d522f475Smrg{
256020d2c4d2Smrg    handle_vt_toggle(do_font_boxchars, TScreenOf(term)->force_box_chars,
256120d2c4d2Smrg		     params, *param_count, w);
256220d2c4d2Smrg}
256320d2c4d2Smrg
256420d2c4d2Smrgvoid
256520d2c4d2SmrgHandleFontPacked(Widget w,
256620d2c4d2Smrg		 XEvent * event GCC_UNUSED,
256720d2c4d2Smrg		 String * params,
256820d2c4d2Smrg		 Cardinal *param_count)
256920d2c4d2Smrg{
257020d2c4d2Smrg    handle_vt_toggle(do_font_packed, TScreenOf(term)->force_packed,
2571d522f475Smrg		     params, *param_count, w);
2572d522f475Smrg}
2573d522f475Smrg#endif
2574d522f475Smrg
2575d522f475Smrg#if OPT_DEC_SOFTFONT
2576d522f475Smrgvoid
2577d522f475SmrgHandleFontLoading(Widget w,
2578d522f475Smrg		  XEvent * event GCC_UNUSED,
2579d522f475Smrg		  String * params,
2580d522f475Smrg		  Cardinal *param_count)
2581d522f475Smrg{
2582d522f475Smrg    handle_vt_toggle(do_font_loadable, term->misc.font_loadable,
2583d522f475Smrg		     params, *param_count, w);
2584d522f475Smrg}
2585d522f475Smrg#endif
2586d522f475Smrg
2587d522f475Smrg#if OPT_RENDERFONT
25880bd37d32Smrgstatic void
25890bd37d32Smrgupdate_fontmenu(XtermWidget xw)
25900bd37d32Smrg{
25910bd37d32Smrg    TScreen *screen = TScreenOf(xw);
25920bd37d32Smrg    int n;
25930bd37d32Smrg
25940bd37d32Smrg    for (n = 0; n <= fontMenu_lastBuiltin; ++n) {
25950bd37d32Smrg	Boolean active = (Boolean) (xw->work.render_font ||
25960bd37d32Smrg				    (screen->menu_font_sizes[n] >= 0));
25970bd37d32Smrg	SetItemSensitivity(fontMenuEntries[n].widget, active);
25980bd37d32Smrg    }
25990bd37d32Smrg}
26000bd37d32Smrg
2601d522f475Smrgvoid
2602d522f475SmrgHandleRenderFont(Widget w,
2603d522f475Smrg		 XEvent * event GCC_UNUSED,
2604d522f475Smrg		 String * params,
2605d522f475Smrg		 Cardinal *param_count)
2606d522f475Smrg{
260720d2c4d2Smrg    XtermWidget xw = (XtermWidget) term;
260820d2c4d2Smrg
260920d2c4d2Smrg    DefaultRenderFont(xw);
261020d2c4d2Smrg
26110bd37d32Smrg    handle_vt_toggle(do_font_renderfont, xw->work.render_font,
2612d522f475Smrg		     params, *param_count, w);
26130bd37d32Smrg
26140bd37d32Smrg    update_fontmenu(xw);
2615d522f475Smrg}
2616d522f475Smrg#endif
2617d522f475Smrg
2618d522f475Smrg#if OPT_WIDE_CHARS
2619d522f475Smrgvoid
2620d522f475SmrgHandleUTF8Mode(Widget w,
2621d522f475Smrg	       XEvent * event GCC_UNUSED,
2622d522f475Smrg	       String * params,
2623d522f475Smrg	       Cardinal *param_count)
2624d522f475Smrg{
262520d2c4d2Smrg    handle_vt_toggle(do_font_utf8_mode, TScreenOf(term)->utf8_mode,
2626d522f475Smrg		     params, *param_count, w);
2627d522f475Smrg}
2628d522f475Smrg
2629e39b573cSmrgvoid
2630e39b573cSmrgHandleUTF8Fonts(Widget w,
2631e39b573cSmrg		XEvent * event GCC_UNUSED,
2632e39b573cSmrg		String * params,
2633e39b573cSmrg		Cardinal *param_count)
2634e39b573cSmrg{
2635e39b573cSmrg    handle_vt_toggle(do_font_utf8_fonts, TScreenOf(term)->utf8_fonts,
2636e39b573cSmrg		     params, *param_count, w);
2637e39b573cSmrg}
2638e39b573cSmrg
2639d522f475Smrgvoid
2640d522f475SmrgHandleUTF8Title(Widget w,
2641d522f475Smrg		XEvent * event GCC_UNUSED,
2642d522f475Smrg		String * params,
2643d522f475Smrg		Cardinal *param_count)
2644d522f475Smrg{
264520d2c4d2Smrg    handle_vt_toggle(do_font_utf8_title, TScreenOf(term)->utf8_title,
2646d522f475Smrg		     params, *param_count, w);
2647d522f475Smrg}
2648d522f475Smrg#endif
2649d522f475Smrg
2650d522f475Smrg#if OPT_TEK4014
2651d522f475Smrgvoid
2652d522f475SmrgHandleSetTerminalType(Widget w,
2653d522f475Smrg		      XEvent * event GCC_UNUSED,
2654d522f475Smrg		      String * params,
2655d522f475Smrg		      Cardinal *param_count)
2656d522f475Smrg{
265720d2c4d2Smrg    XtermWidget xw = term;
265820d2c4d2Smrg
2659d522f475Smrg    if (*param_count == 1) {
2660d522f475Smrg	switch (params[0][0]) {
2661d522f475Smrg	case 'v':
2662d522f475Smrg	case 'V':
266320d2c4d2Smrg	    if (TEK4014_ACTIVE(xw))
2664d522f475Smrg		do_vtmode(w, (XtPointer) 0, (XtPointer) 0);
2665d522f475Smrg	    break;
2666d522f475Smrg	case 't':
2667d522f475Smrg	case 'T':
266820d2c4d2Smrg	    if (!TEK4014_ACTIVE(xw))
2669d522f475Smrg		do_tekmode(w, (XtPointer) 0, (XtPointer) 0);
2670d522f475Smrg	    break;
2671d522f475Smrg	default:
267220d2c4d2Smrg	    Bell(xw, XkbBI_MinorError, 0);
2673d522f475Smrg	}
2674d522f475Smrg    } else {
267520d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
2676d522f475Smrg    }
2677d522f475Smrg}
2678d522f475Smrg
2679d522f475Smrgvoid
2680d522f475SmrgHandleVisibility(Widget w,
2681d522f475Smrg		 XEvent * event GCC_UNUSED,
2682d522f475Smrg		 String * params,
2683d522f475Smrg		 Cardinal *param_count)
2684d522f475Smrg{
268520d2c4d2Smrg    XtermWidget xw = term;
268620d2c4d2Smrg
2687d522f475Smrg    if (*param_count == 2) {
2688d522f475Smrg	switch (params[0][0]) {
2689d522f475Smrg	case 'v':
2690d522f475Smrg	case 'V':
269120d2c4d2Smrg	    handle_tek_toggle(do_vtonoff, (int) TScreenOf(xw)->Vshow,
2692d522f475Smrg			      params + 1, (*param_count) - 1, w);
2693d522f475Smrg	    break;
2694d522f475Smrg	case 't':
2695d522f475Smrg	case 'T':
269620d2c4d2Smrg	    handle_tek_toggle(do_tekonoff, (int) TEK4014_SHOWN(xw),
2697d522f475Smrg			      params + 1, (*param_count) - 1, w);
2698d522f475Smrg	    break;
2699d522f475Smrg	default:
270020d2c4d2Smrg	    Bell(xw, XkbBI_MinorError, 0);
2701d522f475Smrg	}
2702d522f475Smrg    } else {
270320d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
2704d522f475Smrg    }
2705d522f475Smrg}
2706d522f475Smrg
2707d522f475Smrg/* ARGSUSED */
2708d522f475Smrgvoid
2709d522f475SmrgHandleSetTekText(Widget w,
2710d522f475Smrg		 XEvent * event GCC_UNUSED,
2711d522f475Smrg		 String * params,
2712d522f475Smrg		 Cardinal *param_count)
2713d522f475Smrg{
271420d2c4d2Smrg    XtermWidget xw = term;
2715d522f475Smrg    void (*proc) PROTO_XT_CALLBACK_ARGS = 0;
2716d522f475Smrg
2717d522f475Smrg    switch (*param_count) {
2718d522f475Smrg    case 0:
2719d522f475Smrg	proc = do_tektextlarge;
2720d522f475Smrg	break;
2721d522f475Smrg    case 1:
2722d522f475Smrg	switch (TekGetFontSize(params[0])) {
2723d522f475Smrg	case TEK_FONT_LARGE:
2724d522f475Smrg	    proc = do_tektextlarge;
2725d522f475Smrg	    break;
2726d522f475Smrg	case TEK_FONT_2:
2727d522f475Smrg	    proc = do_tektext2;
2728d522f475Smrg	    break;
2729d522f475Smrg	case TEK_FONT_3:
2730d522f475Smrg	    proc = do_tektext3;
2731d522f475Smrg	    break;
2732d522f475Smrg	case TEK_FONT_SMALL:
2733d522f475Smrg	    proc = do_tektextsmall;
2734d522f475Smrg	    break;
2735d522f475Smrg	}
2736d522f475Smrg	break;
2737d522f475Smrg    }
2738d522f475Smrg    if (proc)
2739d522f475Smrg	(*proc) (w, (XtPointer) 0, (XtPointer) 0);
2740d522f475Smrg    else
274120d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
2742d522f475Smrg}
2743d522f475Smrg
2744d522f475Smrg/* ARGSUSED */
2745d522f475Smrgvoid
2746d522f475SmrgHandleTekPage(Widget w,
2747d522f475Smrg	      XEvent * event GCC_UNUSED,
2748d522f475Smrg	      String * params GCC_UNUSED,
2749d522f475Smrg	      Cardinal *param_count GCC_UNUSED)
2750d522f475Smrg{
2751d522f475Smrg    do_tekpage(w, (XtPointer) 0, (XtPointer) 0);
2752d522f475Smrg}
2753d522f475Smrg
2754d522f475Smrg/* ARGSUSED */
2755d522f475Smrgvoid
2756d522f475SmrgHandleTekReset(Widget w,
2757d522f475Smrg	       XEvent * event GCC_UNUSED,
2758d522f475Smrg	       String * params GCC_UNUSED,
2759d522f475Smrg	       Cardinal *param_count GCC_UNUSED)
2760d522f475Smrg{
2761d522f475Smrg    do_tekreset(w, (XtPointer) 0, (XtPointer) 0);
2762d522f475Smrg}
2763d522f475Smrg
2764d522f475Smrg/* ARGSUSED */
2765d522f475Smrgvoid
2766d522f475SmrgHandleTekCopy(Widget w,
2767d522f475Smrg	      XEvent * event GCC_UNUSED,
2768d522f475Smrg	      String * params GCC_UNUSED,
2769d522f475Smrg	      Cardinal *param_count GCC_UNUSED)
2770d522f475Smrg{
2771d522f475Smrg    do_tekcopy(w, (XtPointer) 0, (XtPointer) 0);
2772d522f475Smrg}
2773d522f475Smrg#endif /* OPT_TEK4014 */
2774d522f475Smrg
2775d522f475Smrg#if OPT_TOOLBAR
2776d522f475Smrg/*
2777d522f475Smrg * The normal style of xterm popup menu delays initialization until the menu is
2778d522f475Smrg * first requested.  When using a toolbar, we can use the same initialization,
2779d522f475Smrg * though on the first popup there will be a little geometry layout jitter,
2780d522f475Smrg * since the menu is already managed when this callback is invoked.
2781d522f475Smrg */
2782d522f475Smrgstatic void
2783d522f475SmrgInitPopup(Widget gw,
2784d522f475Smrg	  XtPointer closure,
2785d522f475Smrg	  XtPointer data GCC_UNUSED)
2786d522f475Smrg{
2787d522f475Smrg    String params[2];
2788d522f475Smrg    Cardinal count = 1;
2789d522f475Smrg
2790d522f475Smrg    params[0] = (char *) closure;
2791d522f475Smrg    params[1] = 0;
2792d522f475Smrg    TRACE(("InitPopup(%s)\n", params[0]));
2793d522f475Smrg
2794d522f475Smrg    domenu(gw, (XEvent *) 0, params, &count);
2795d522f475Smrg
2796d522f475Smrg    if (gw)
2797d522f475Smrg	XtRemoveCallback(gw, XtNpopupCallback, InitPopup, closure);
2798d522f475Smrg}
2799d522f475Smrg
2800d522f475Smrgstatic Dimension
2801d522f475SmrgSetupShell(Widget *menus, MenuList * shell, int n, int m)
2802d522f475Smrg{
2803d522f475Smrg    char temp[80];
2804d522f475Smrg    char *external_name = 0;
2805d522f475Smrg    Dimension button_height;
2806d522f475Smrg    Dimension button_border;
2807d522f475Smrg    String saveLocale = setMenuLocale(True, resource.menuLocale);
2808d522f475Smrg
2809d522f475Smrg    shell[n].w = XtVaCreatePopupShell(menu_names[n].internal_name,
2810d522f475Smrg				      simpleMenuWidgetClass,
2811d522f475Smrg				      *menus,
2812d522f475Smrg				      XtNgeometry, NULL,
2813d522f475Smrg				      (XtPointer) 0);
2814d522f475Smrg
2815d522f475Smrg    XtAddCallback(shell[n].w, XtNpopupCallback, InitPopup, menu_names[n].internal_name);
2816d522f475Smrg    XtVaGetValues(shell[n].w,
2817d522f475Smrg		  XtNlabel, &external_name,
2818d522f475Smrg		  (XtPointer) 0);
2819d522f475Smrg
2820d522f475Smrg    TRACE(("...SetupShell(%s) -> %s -> %#lx\n",
2821d522f475Smrg	   menu_names[n].internal_name,
2822d522f475Smrg	   external_name,
2823d522f475Smrg	   (long) shell[n].w));
2824d522f475Smrg
2825d522f475Smrg    sprintf(temp, "%sButton", menu_names[n].internal_name);
2826d522f475Smrg    shell[n].b = XtVaCreateManagedWidget(temp,
2827d522f475Smrg					 menuButtonWidgetClass,
2828d522f475Smrg					 *menus,
2829d522f475Smrg					 XtNfromHoriz, ((m >= 0)
2830d522f475Smrg							? shell[m].b
2831d522f475Smrg							: 0),
2832d522f475Smrg					 XtNmenuName, menu_names[n].internal_name,
2833d522f475Smrg					 XtNlabel, external_name,
2834d522f475Smrg					 (XtPointer) 0);
2835d522f475Smrg    XtVaGetValues(shell[n].b,
2836d522f475Smrg		  XtNheight, &button_height,
2837d522f475Smrg		  XtNborderWidth, &button_border,
2838d522f475Smrg		  (XtPointer) 0);
2839d522f475Smrg
2840956cc18dSsnj    (void) setMenuLocale(False, saveLocale);
2841956cc18dSsnj    return (Dimension) (button_height + (button_border * 2));
2842d522f475Smrg}
2843d522f475Smrg#endif /* OPT_TOOLBAR */
2844d522f475Smrg
2845d522f475Smrgvoid
2846d522f475SmrgSetupMenus(Widget shell, Widget *forms, Widget *menus, Dimension * menu_high)
2847d522f475Smrg{
2848d522f475Smrg#if OPT_TOOLBAR
2849d522f475Smrg    Dimension button_height = 0;
2850d522f475Smrg    Dimension toolbar_hSpace;
2851d522f475Smrg    Arg args[10];
2852d522f475Smrg#endif
2853d522f475Smrg
2854d522f475Smrg    TRACE(("SetupMenus(%s)\n", shell == toplevel ? "vt100" : "tek4014"));
2855d522f475Smrg
2856d522f475Smrg    *menu_high = 0;
2857d522f475Smrg
2858d522f475Smrg    if (shell == toplevel) {
2859d522f475Smrg	XawSimpleMenuAddGlobalActions(app_con);
2860d522f475Smrg	XtRegisterGrabAction(HandlePopupMenu, True,
28610bd37d32Smrg			     (unsigned) (ButtonPressMask | ButtonReleaseMask),
2862d522f475Smrg			     GrabModeAsync, GrabModeAsync);
2863d522f475Smrg    }
2864d522f475Smrg#if OPT_TOOLBAR
2865d522f475Smrg    *forms = XtVaCreateManagedWidget("form",
2866d522f475Smrg				     formWidgetClass, shell,
2867d522f475Smrg				     (XtPointer) 0);
2868d522f475Smrg    xtermAddInput(*forms);
2869d522f475Smrg
2870d522f475Smrg    /*
2871d522f475Smrg     * Set a nominal value for the preferred pane size, which lets the
2872d522f475Smrg     * buttons determine the actual height of the menu bar.  We don't show
2873d522f475Smrg     * the grip, because it's too easy to make the toolbar look bad that
2874d522f475Smrg     * way.
2875d522f475Smrg     */
2876d522f475Smrg    XtSetArg(args[0], XtNorientation, XtorientHorizontal);
2877d522f475Smrg    XtSetArg(args[1], XtNtop, XawChainTop);
2878d522f475Smrg    XtSetArg(args[2], XtNbottom, XawChainTop);
2879d522f475Smrg    XtSetArg(args[3], XtNleft, XawChainLeft);
2880d522f475Smrg    XtSetArg(args[4], XtNright, XawChainLeft);
2881d522f475Smrg
2882d522f475Smrg    if (resource.toolBar) {
2883d522f475Smrg	*menus = XtCreateManagedWidget("menubar", boxWidgetClass, *forms,
2884d522f475Smrg				       args, 5);
2885d522f475Smrg    } else {
2886d522f475Smrg	*menus = XtCreateWidget("menubar", boxWidgetClass, *forms, args, 5);
2887d522f475Smrg    }
2888d522f475Smrg
2889d522f475Smrg    /*
2890d522f475Smrg     * The toolbar widget's height is not necessarily known yet.  If the
2891d522f475Smrg     * toolbar is not created as a managed widget, we can still make a good
2892d522f475Smrg     * guess about its height by collecting the widget's other resource values.
2893d522f475Smrg     */
2894d522f475Smrg    XtVaGetValues(*menus,
2895d522f475Smrg		  XtNhSpace, &toolbar_hSpace,
2896d522f475Smrg		  (XtPointer) 0);
2897d522f475Smrg
2898d522f475Smrg    if (shell == toplevel) {	/* vt100 */
2899d522f475Smrg	int j;
2900d522f475Smrg	for (j = mainMenu; j <= fontMenu; j++) {
2901d522f475Smrg	    button_height = SetupShell(menus, vt_shell, j, j - 1);
2902d522f475Smrg	}
2903d522f475Smrg    }
2904d522f475Smrg#if OPT_TEK4014
2905d522f475Smrg    else {			/* tek4014 */
290620d2c4d2Smrg	(void) SetupShell(menus, tek_shell, mainMenu, -1);
2907d522f475Smrg	button_height = SetupShell(menus, tek_shell, tekMenu, mainMenu);
2908d522f475Smrg    }
2909d522f475Smrg#endif
2910d522f475Smrg
2911d522f475Smrg    /*
2912d522f475Smrg     * Tell the main program how high the toolbar is, to help with the initial
2913d522f475Smrg     * layout.
2914d522f475Smrg     */
2915956cc18dSsnj    *menu_high = (Dimension) (button_height + 2 * (toolbar_hSpace));
29162eaa94a1Schristos    TRACE(("...menuHeight:%d = (%d + 2 * %d)\n",
29172eaa94a1Schristos	   *menu_high, button_height, toolbar_hSpace));
2918d522f475Smrg
2919d522f475Smrg#else /* !OPT_TOOLBAR */
2920d522f475Smrg    *forms = shell;
2921d522f475Smrg    *menus = shell;
2922d522f475Smrg#endif
2923d522f475Smrg
2924d522f475Smrg    TRACE(("...shell=%#lx\n", (long) shell));
2925d522f475Smrg    TRACE(("...forms=%#lx\n", (long) *forms));
2926d522f475Smrg    TRACE(("...menus=%#lx\n", (long) *menus));
2927d522f475Smrg}
2928d522f475Smrg
2929d522f475Smrgvoid
2930d522f475SmrgrepairSizeHints(void)
2931d522f475Smrg{
2932a1f3da82Smrg    XtermWidget xw = term;
2933a1f3da82Smrg    TScreen *screen = TScreenOf(xw);
2934d522f475Smrg
2935a1f3da82Smrg    if (XtIsRealized((Widget) xw)) {
2936a1f3da82Smrg	getXtermSizeHints(xw);
2937a1f3da82Smrg	xtermSizeHints(xw, ScrollbarWidth(screen));
2938d522f475Smrg
2939a1f3da82Smrg	XSetWMNormalHints(screen->display, VShellWindow(xw), &xw->hints);
2940d522f475Smrg    }
2941d522f475Smrg}
2942d522f475Smrg
2943d522f475Smrg#if OPT_TOOLBAR
2944d522f475Smrg#define INIT_POPUP(s, n) InitPopup(s[n].w, menu_names[n].internal_name, 0)
2945d522f475Smrg
2946d522f475Smrgstatic Bool
2947d522f475SmrgInitWidgetMenu(Widget shell)
2948d522f475Smrg{
2949d522f475Smrg    Bool result = False;
2950d522f475Smrg
295120d2c4d2Smrg    TRACE(("InitWidgetMenu(%p)\n", (void *) shell));
2952d522f475Smrg    if (term != 0) {
2953d522f475Smrg	if (shell == toplevel) {	/* vt100 */
2954d522f475Smrg	    if (!term->init_menu) {
2955d522f475Smrg		INIT_POPUP(vt_shell, mainMenu);
2956d522f475Smrg		INIT_POPUP(vt_shell, vtMenu);
2957d522f475Smrg		INIT_POPUP(vt_shell, fontMenu);
2958d522f475Smrg		term->init_menu = True;
2959d522f475Smrg		TRACE(("...InitWidgetMenu(vt)\n"));
2960d522f475Smrg	    }
2961d522f475Smrg	    result = term->init_menu;
2962d522f475Smrg	}
2963d522f475Smrg#if OPT_TEK4014
2964d522f475Smrg	else if (tekWidget) {	/* tek4014 */
2965d522f475Smrg	    if (!tekWidget->init_menu) {
2966d522f475Smrg		INIT_POPUP(tek_shell, mainMenu);
2967d522f475Smrg		INIT_POPUP(tek_shell, tekMenu);
2968d522f475Smrg		tekWidget->init_menu = True;
2969d522f475Smrg		TRACE(("...InitWidgetMenu(tek)\n"));
2970d522f475Smrg	    }
2971d522f475Smrg	    result = tekWidget->init_menu;
2972d522f475Smrg	}
2973d522f475Smrg#endif
2974d522f475Smrg    }
2975d522f475Smrg    TRACE(("...InitWidgetMenu ->%d\n", result));
2976d522f475Smrg    return result;
2977d522f475Smrg}
2978d522f475Smrg
2979d522f475Smrgstatic TbInfo *
2980d522f475Smrgtoolbar_info(Widget w)
2981d522f475Smrg{
2982d522f475Smrg    TRACE(("...getting toolbar_info\n"));
2983d522f475Smrg#if OPT_TEK4014
2984d522f475Smrg    if (w != (Widget) term)
2985d522f475Smrg	return &(tekWidget->tek.tb_info);
2986d522f475Smrg#else
2987d522f475Smrg    (void) w;
2988d522f475Smrg#endif
298920d2c4d2Smrg    return &(WhichVWin(TScreenOf(term))->tb_info);
2990d522f475Smrg}
2991d522f475Smrg
2992d522f475Smrgstatic void
2993d522f475Smrghide_toolbar(Widget w)
2994d522f475Smrg{
2995d522f475Smrg    if (w != 0) {
2996d522f475Smrg	TbInfo *info = toolbar_info(w);
2997d522f475Smrg
2998d522f475Smrg	TRACE(("hiding toolbar\n"));
2999d522f475Smrg	XtVaSetValues(w,
3000d522f475Smrg		      XtNfromVert, (Widget) 0,
3001d522f475Smrg		      (XtPointer) 0);
3002d522f475Smrg
3003d522f475Smrg	if (info->menu_bar != 0) {
3004d522f475Smrg	    repairSizeHints();
3005d522f475Smrg	    XtUnmanageChild(info->menu_bar);
3006d522f475Smrg	    if (XtIsRealized(info->menu_bar)) {
3007d522f475Smrg		XtUnmapWidget(info->menu_bar);
3008d522f475Smrg	    }
3009d522f475Smrg	}
3010d522f475Smrg	TRACE(("...hiding toolbar (done)\n"));
3011d522f475Smrg    }
3012d522f475Smrg}
3013d522f475Smrg
3014d522f475Smrgstatic void
3015d522f475Smrgshow_toolbar(Widget w)
3016d522f475Smrg{
3017d522f475Smrg    if (w != 0) {
3018d522f475Smrg	TbInfo *info = toolbar_info(w);
3019d522f475Smrg
3020d522f475Smrg	TRACE(("showing toolbar\n"));
3021d522f475Smrg	if (info->menu_bar != 0) {
3022d522f475Smrg	    XtVaSetValues(w,
3023d522f475Smrg			  XtNfromVert, info->menu_bar,
3024d522f475Smrg			  (XtPointer) 0);
3025d522f475Smrg	    if (XtIsRealized(info->menu_bar))
3026d522f475Smrg		repairSizeHints();
3027d522f475Smrg	    XtManageChild(info->menu_bar);
3028d522f475Smrg	    if (XtIsRealized(info->menu_bar)) {
3029d522f475Smrg		XtMapWidget(info->menu_bar);
3030d522f475Smrg	    }
3031d522f475Smrg	}
3032d522f475Smrg	/*
3033d522f475Smrg	 * This is needed to make the terminal widget move down below the
3034d522f475Smrg	 * toolbar.
3035d522f475Smrg	 */
3036d522f475Smrg	XawFormDoLayout(XtParent(w), True);
3037d522f475Smrg	TRACE(("...showing toolbar (done)\n"));
3038d522f475Smrg    }
3039d522f475Smrg}
3040d522f475Smrg
3041d522f475Smrg/*
3042d522f475Smrg * Make the toolbar visible or invisible in the current window(s).
3043d522f475Smrg */
3044d522f475Smrgvoid
3045d522f475SmrgShowToolbar(Bool enable)
3046d522f475Smrg{
304720d2c4d2Smrg    XtermWidget xw = term;
304820d2c4d2Smrg
3049d522f475Smrg    TRACE(("ShowToolbar(%d)\n", enable));
3050d522f475Smrg
305120d2c4d2Smrg    if (IsIcon(TScreenOf(xw))) {
305220d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
3053d522f475Smrg    } else {
3054d522f475Smrg	if (enable) {
3055d522f475Smrg	    if (InitWidgetMenu(toplevel))
305620d2c4d2Smrg		show_toolbar((Widget) xw);
3057d522f475Smrg#if OPT_TEK4014
3058d522f475Smrg	    if (InitWidgetMenu(tekshellwidget))
3059d522f475Smrg		show_toolbar((Widget) tekWidget);
3060d522f475Smrg#endif
3061d522f475Smrg	} else {
306220d2c4d2Smrg	    hide_toolbar((Widget) xw);
3063d522f475Smrg#if OPT_TEK4014
3064d522f475Smrg	    hide_toolbar((Widget) tekWidget);
3065d522f475Smrg#endif
3066d522f475Smrg	}
3067956cc18dSsnj	resource.toolBar = (Boolean) enable;
3068d522f475Smrg	update_toolbar();
3069d522f475Smrg    }
3070d522f475Smrg}
3071d522f475Smrg
3072d522f475Smrgvoid
3073d522f475SmrgHandleToolbar(Widget w,
3074d522f475Smrg	      XEvent * event GCC_UNUSED,
3075d522f475Smrg	      String * params GCC_UNUSED,
3076d522f475Smrg	      Cardinal *param_count GCC_UNUSED)
3077d522f475Smrg{
307820d2c4d2Smrg    XtermWidget xw = term;
307920d2c4d2Smrg
308020d2c4d2Smrg    if (IsIcon(TScreenOf(xw))) {
308120d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
3082d522f475Smrg    } else {
3083d522f475Smrg	handle_vt_toggle(do_toolbar, resource.toolBar,
3084d522f475Smrg			 params, *param_count, w);
3085d522f475Smrg    }
3086d522f475Smrg}
3087d522f475Smrg
3088d522f475Smrg/* ARGSUSED */
3089d522f475Smrgstatic void
3090d522f475Smrgdo_toolbar(Widget gw GCC_UNUSED,
3091d522f475Smrg	   XtPointer closure GCC_UNUSED,
3092d522f475Smrg	   XtPointer data GCC_UNUSED)
3093d522f475Smrg{
309420d2c4d2Smrg    XtermWidget xw = term;
309520d2c4d2Smrg
3096d522f475Smrg    /*
3097d522f475Smrg     * Toggle toolbars for both vt100 and tek windows, since they share the
3098d522f475Smrg     * menu which contains the checkbox indicating whether the toolbar is
3099d522f475Smrg     * active.
3100d522f475Smrg     */
310120d2c4d2Smrg    if (IsIcon(TScreenOf(xw))) {
310220d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
3103d522f475Smrg    } else {
3104956cc18dSsnj	ShowToolbar(ToggleFlag(resource.toolBar));
3105d522f475Smrg    }
3106d522f475Smrg}
3107d522f475Smrg
3108d522f475Smrgvoid
3109d522f475Smrgupdate_toolbar(void)
3110d522f475Smrg{
3111d522f475Smrg    UpdateCheckbox("update_toolbar",
3112d522f475Smrg		   mainMenuEntries,
3113d522f475Smrg		   mainMenu_toolbar,
3114d522f475Smrg		   resource.toolBar);
3115d522f475Smrg}
3116d522f475Smrg#endif /* OPT_TOOLBAR */
3117d522f475Smrg
3118d522f475Smrgvoid
3119d522f475Smrgupdate_securekbd(void)
3120d522f475Smrg{
3121d522f475Smrg    UpdateCheckbox("update_securekbd",
3122d522f475Smrg		   mainMenuEntries,
3123d522f475Smrg		   mainMenu_securekbd,
312420d2c4d2Smrg		   TScreenOf(term)->grabbedKbd);
3125d522f475Smrg}
3126d522f475Smrg
3127d522f475Smrgvoid
3128d522f475Smrgupdate_allowsends(void)
3129d522f475Smrg{
3130d522f475Smrg    UpdateCheckbox("update_allowsends",
3131d522f475Smrg		   mainMenuEntries,
3132d522f475Smrg		   mainMenu_allowsends,
313320d2c4d2Smrg		   TScreenOf(term)->allowSendEvents);
3134d522f475Smrg}
3135d522f475Smrg
3136d522f475Smrg#ifdef ALLOWLOGGING
3137d522f475Smrgvoid
3138d522f475Smrgupdate_logging(void)
3139d522f475Smrg{
3140d522f475Smrg    UpdateCheckbox("update_logging",
3141d522f475Smrg		   mainMenuEntries,
3142d522f475Smrg		   mainMenu_logging,
314320d2c4d2Smrg		   TScreenOf(term)->logging);
3144d522f475Smrg}
3145d522f475Smrg#endif
3146d522f475Smrg
3147e39b573cSmrg#if OPT_PRINT_ON_EXIT
3148e39b573cSmrgvoid
3149e39b573cSmrgupdate_write_error(void)
3150e39b573cSmrg{
3151e39b573cSmrg    UpdateCheckbox("update_write_error",
3152e39b573cSmrg		   mainMenuEntries,
3153e39b573cSmrg		   mainMenu_write_error,
3154e39b573cSmrg		   TScreenOf(term)->write_error);
3155e39b573cSmrg}
3156e39b573cSmrg#endif
3157e39b573cSmrg
3158d522f475Smrgvoid
3159d522f475Smrgupdate_print_redir(void)
3160d522f475Smrg{
3161d522f475Smrg    UpdateCheckbox("update_print_redir",
3162d522f475Smrg		   mainMenuEntries,
3163d522f475Smrg		   mainMenu_print_redir,
3164e39b573cSmrg		   PrinterOf(TScreenOf(term)).printer_controlmode);
3165d522f475Smrg}
3166d522f475Smrg
3167d522f475Smrgvoid
3168d522f475Smrgupdate_8bit_control(void)
3169d522f475Smrg{
3170d522f475Smrg    UpdateCheckbox("update_8bit_control",
3171d522f475Smrg		   mainMenuEntries,
3172d522f475Smrg		   mainMenu_8bit_ctrl,
317320d2c4d2Smrg		   TScreenOf(term)->control_eight_bits);
3174d522f475Smrg}
3175d522f475Smrg
3176d522f475Smrgvoid
3177d522f475Smrgupdate_decbkm(void)
3178d522f475Smrg{
3179d522f475Smrg    UpdateCheckbox("update_decbkm",
3180d522f475Smrg		   mainMenuEntries,
3181d522f475Smrg		   mainMenu_backarrow,
3182d522f475Smrg		   (term->keyboard.flags & MODE_DECBKM) != 0);
3183d522f475Smrg}
3184d522f475Smrg
3185d522f475Smrg#if OPT_NUM_LOCK
3186d522f475Smrgvoid
3187d522f475Smrgupdate_num_lock(void)
3188d522f475Smrg{
3189d522f475Smrg    UpdateCheckbox("update_num_lock",
3190d522f475Smrg		   mainMenuEntries,
3191d522f475Smrg		   mainMenu_num_lock,
3192d522f475Smrg		   term->misc.real_NumLock);
3193d522f475Smrg}
3194d522f475Smrg
3195d522f475Smrgvoid
3196d522f475Smrgupdate_alt_esc(void)
3197d522f475Smrg{
3198d522f475Smrg    UpdateCheckbox("update_alt_esc",
3199d522f475Smrg		   mainMenuEntries,
3200d522f475Smrg		   mainMenu_alt_esc,
320120d2c4d2Smrg		   TScreenOf(term)->alt_sends_esc);
3202d522f475Smrg}
3203d522f475Smrg
3204d522f475Smrgvoid
3205d522f475Smrgupdate_meta_esc(void)
3206d522f475Smrg{
3207d522f475Smrg    UpdateCheckbox("update_meta_esc",
3208d522f475Smrg		   mainMenuEntries,
3209d522f475Smrg		   mainMenu_meta_esc,
321020d2c4d2Smrg		   TScreenOf(term)->meta_sends_esc);
3211d522f475Smrg}
3212d522f475Smrg#endif
3213d522f475Smrg
3214d522f475Smrg#if OPT_SUN_FUNC_KEYS
3215d522f475Smrgvoid
3216d522f475Smrgupdate_sun_fkeys(void)
3217d522f475Smrg{
3218d522f475Smrg    UpdateCheckbox("update_sun_fkeys",
3219d522f475Smrg		   mainMenuEntries,
3220d522f475Smrg		   mainMenu_sun_fkeys,
3221d522f475Smrg		   term->keyboard.type == keyboardIsSun);
3222d522f475Smrg}
3223d522f475Smrg#endif
3224d522f475Smrg
3225d522f475Smrg#if OPT_TCAP_FKEYS
3226d522f475Smrgvoid
3227d522f475Smrgupdate_tcap_fkeys(void)
3228d522f475Smrg{
3229d522f475Smrg    UpdateCheckbox("update_tcap_fkeys",
3230d522f475Smrg		   mainMenuEntries,
3231d522f475Smrg		   mainMenu_tcap_fkeys,
3232d522f475Smrg		   term->keyboard.type == keyboardIsTermcap);
3233d522f475Smrg}
3234d522f475Smrg#endif
3235d522f475Smrg
3236d522f475Smrgvoid
3237d522f475Smrgupdate_old_fkeys(void)
3238d522f475Smrg{
3239d522f475Smrg    UpdateCheckbox("update_old_fkeys",
3240d522f475Smrg		   mainMenuEntries,
3241d522f475Smrg		   mainMenu_old_fkeys,
3242d522f475Smrg		   term->keyboard.type == keyboardIsLegacy);
3243d522f475Smrg}
3244d522f475Smrg
3245d522f475Smrgvoid
3246d522f475Smrgupdate_delete_del(void)
3247d522f475Smrg{
3248d522f475Smrg    UpdateCheckbox("update_delete_del",
3249d522f475Smrg		   mainMenuEntries,
3250d522f475Smrg		   mainMenu_delete_del,
3251d522f475Smrg		   xtermDeleteIsDEL(term));
3252d522f475Smrg}
3253d522f475Smrg
3254d522f475Smrg#if OPT_SUNPC_KBD
3255d522f475Smrgvoid
3256d522f475Smrgupdate_sun_kbd(void)
3257d522f475Smrg{
3258d522f475Smrg    UpdateCheckbox("update_sun_kbd",
3259d522f475Smrg		   mainMenuEntries,
3260d522f475Smrg		   mainMenu_sun_kbd,
3261d522f475Smrg		   term->keyboard.type == keyboardIsVT220);
3262d522f475Smrg}
3263d522f475Smrg#endif
3264d522f475Smrg
3265d522f475Smrg#if OPT_HP_FUNC_KEYS
3266d522f475Smrgvoid
3267d522f475Smrgupdate_hp_fkeys(void)
3268d522f475Smrg{
3269d522f475Smrg    UpdateCheckbox("update_hp_fkeys",
3270d522f475Smrg		   mainMenuEntries,
3271d522f475Smrg		   mainMenu_hp_fkeys,
3272d522f475Smrg		   term->keyboard.type == keyboardIsHP);
3273d522f475Smrg}
3274d522f475Smrg#endif
3275d522f475Smrg
3276d522f475Smrg#if OPT_SCO_FUNC_KEYS
3277d522f475Smrgvoid
3278d522f475Smrgupdate_sco_fkeys(void)
3279d522f475Smrg{
3280d522f475Smrg    UpdateCheckbox("update_sco_fkeys",
3281d522f475Smrg		   mainMenuEntries,
3282d522f475Smrg		   mainMenu_sco_fkeys,
3283d522f475Smrg		   term->keyboard.type == keyboardIsSCO);
3284d522f475Smrg}
3285d522f475Smrg#endif
3286d522f475Smrg
3287d522f475Smrgvoid
3288d522f475Smrgupdate_scrollbar(void)
3289d522f475Smrg{
3290d522f475Smrg    UpdateCheckbox("update_scrollbar",
3291d522f475Smrg		   vtMenuEntries,
3292d522f475Smrg		   vtMenu_scrollbar,
3293d522f475Smrg		   ScrollbarWidth(TScreenOf(term)));
3294d522f475Smrg}
3295d522f475Smrg
3296d522f475Smrgvoid
3297d522f475Smrgupdate_jumpscroll(void)
3298d522f475Smrg{
3299d522f475Smrg    UpdateCheckbox("update_jumpscroll",
3300d522f475Smrg		   vtMenuEntries,
3301d522f475Smrg		   vtMenu_jumpscroll,
330220d2c4d2Smrg		   TScreenOf(term)->jumpscroll);
3303d522f475Smrg}
3304d522f475Smrg
3305d522f475Smrgvoid
3306d522f475Smrgupdate_reversevideo(void)
3307d522f475Smrg{
3308d522f475Smrg    UpdateCheckbox("update_reversevideo",
3309d522f475Smrg		   vtMenuEntries,
3310d522f475Smrg		   vtMenu_reversevideo,
3311d522f475Smrg		   (term->misc.re_verse));
3312d522f475Smrg}
3313d522f475Smrg
3314d522f475Smrgvoid
3315d522f475Smrgupdate_autowrap(void)
3316d522f475Smrg{
3317d522f475Smrg    UpdateCheckbox("update_autowrap",
3318d522f475Smrg		   vtMenuEntries,
3319d522f475Smrg		   vtMenu_autowrap,
3320d522f475Smrg		   (term->flags & WRAPAROUND) != 0);
3321d522f475Smrg}
3322d522f475Smrg
3323d522f475Smrgvoid
3324d522f475Smrgupdate_reversewrap(void)
3325d522f475Smrg{
3326d522f475Smrg    UpdateCheckbox("update_reversewrap",
3327d522f475Smrg		   vtMenuEntries,
3328d522f475Smrg		   vtMenu_reversewrap,
3329d522f475Smrg		   (term->flags & REVERSEWRAP) != 0);
3330d522f475Smrg}
3331d522f475Smrg
3332d522f475Smrgvoid
3333d522f475Smrgupdate_autolinefeed(void)
3334d522f475Smrg{
3335d522f475Smrg    UpdateCheckbox("update_autolinefeed",
3336d522f475Smrg		   vtMenuEntries,
3337d522f475Smrg		   vtMenu_autolinefeed,
3338d522f475Smrg		   (term->flags & LINEFEED) != 0);
3339d522f475Smrg}
3340d522f475Smrg
3341d522f475Smrgvoid
3342d522f475Smrgupdate_appcursor(void)
3343d522f475Smrg{
3344d522f475Smrg    UpdateCheckbox("update_appcursor",
3345d522f475Smrg		   vtMenuEntries,
3346d522f475Smrg		   vtMenu_appcursor,
3347d522f475Smrg		   (term->keyboard.flags & MODE_DECCKM) != 0);
3348d522f475Smrg}
3349d522f475Smrg
3350d522f475Smrgvoid
3351d522f475Smrgupdate_appkeypad(void)
3352d522f475Smrg{
3353d522f475Smrg    UpdateCheckbox("update_appkeypad",
3354d522f475Smrg		   vtMenuEntries,
3355d522f475Smrg		   vtMenu_appkeypad,
3356d522f475Smrg		   (term->keyboard.flags & MODE_DECKPAM) != 0);
3357d522f475Smrg}
3358d522f475Smrg
3359d522f475Smrgvoid
3360d522f475Smrgupdate_scrollkey(void)
3361d522f475Smrg{
3362d522f475Smrg    UpdateCheckbox("update_scrollkey",
3363d522f475Smrg		   vtMenuEntries,
3364d522f475Smrg		   vtMenu_scrollkey,
336520d2c4d2Smrg		   TScreenOf(term)->scrollkey);
3366d522f475Smrg}
3367d522f475Smrg
3368d522f475Smrgvoid
3369d522f475Smrgupdate_scrollttyoutput(void)
3370d522f475Smrg{
3371d522f475Smrg    UpdateCheckbox("update_scrollttyoutput",
3372d522f475Smrg		   vtMenuEntries,
3373d522f475Smrg		   vtMenu_scrollttyoutput,
337420d2c4d2Smrg		   TScreenOf(term)->scrollttyoutput);
3375d522f475Smrg}
3376d522f475Smrg
3377d522f475Smrgvoid
3378d522f475Smrgupdate_keepSelection(void)
3379d522f475Smrg{
3380d522f475Smrg    UpdateCheckbox("update_keepSelection",
3381d522f475Smrg		   vtMenuEntries,
3382d522f475Smrg		   vtMenu_keepSelection,
338320d2c4d2Smrg		   TScreenOf(term)->keepSelection);
3384d522f475Smrg}
3385d522f475Smrg
3386d522f475Smrgvoid
3387d522f475Smrgupdate_selectToClipboard(void)
3388d522f475Smrg{
3389d522f475Smrg    UpdateCheckbox("update_selectToClipboard",
3390d522f475Smrg		   vtMenuEntries,
3391d522f475Smrg		   vtMenu_selectToClipboard,
339220d2c4d2Smrg		   TScreenOf(term)->selectToClipboard);
3393d522f475Smrg}
3394d522f475Smrg
3395d522f475Smrgvoid
3396d522f475Smrgupdate_allow132(void)
3397d522f475Smrg{
3398d522f475Smrg    UpdateCheckbox("update_allow132",
3399d522f475Smrg		   vtMenuEntries,
3400d522f475Smrg		   vtMenu_allow132,
340120d2c4d2Smrg		   TScreenOf(term)->c132);
3402d522f475Smrg}
3403d522f475Smrg
3404d522f475Smrgvoid
3405d522f475Smrgupdate_cursesemul(void)
3406d522f475Smrg{
3407d522f475Smrg#if 0				/* 2006-2-12: no longer menu entry */
3408d522f475Smrg    UpdateMenuItem("update_cursesemul", vtMenuEntries, vtMenu_cursesemul,
340920d2c4d2Smrg		   TScreenOf(term)->curses);
3410d522f475Smrg#endif
3411d522f475Smrg}
3412d522f475Smrg
3413d522f475Smrgvoid
3414d522f475Smrgupdate_visualbell(void)
3415d522f475Smrg{
3416d522f475Smrg    UpdateCheckbox("update_visualbell",
3417d522f475Smrg		   vtMenuEntries,
3418d522f475Smrg		   vtMenu_visualbell,
341920d2c4d2Smrg		   TScreenOf(term)->visualbell);
3420d522f475Smrg}
3421d522f475Smrg
3422d522f475Smrgvoid
3423d522f475Smrgupdate_bellIsUrgent(void)
3424d522f475Smrg{
3425d522f475Smrg    UpdateCheckbox("update_bellIsUrgent",
3426d522f475Smrg		   vtMenuEntries,
3427d522f475Smrg		   vtMenu_bellIsUrgent,
342820d2c4d2Smrg		   TScreenOf(term)->bellIsUrgent);
3429d522f475Smrg}
3430d522f475Smrg
3431d522f475Smrgvoid
3432d522f475Smrgupdate_poponbell(void)
3433d522f475Smrg{
3434d522f475Smrg    UpdateCheckbox("update_poponbell",
3435d522f475Smrg		   vtMenuEntries,
3436d522f475Smrg		   vtMenu_poponbell,
343720d2c4d2Smrg		   TScreenOf(term)->poponbell);
3438d522f475Smrg}
3439d522f475Smrg
3440d522f475Smrg#ifndef update_marginbell	/* 2007-3-7: no longer menu entry */
3441d522f475Smrgvoid
3442d522f475Smrgupdate_marginbell(void)
3443d522f475Smrg{
3444d522f475Smrg    UpdateCheckbox("update_marginbell",
3445d522f475Smrg		   vtMenuEntries,
3446d522f475Smrg		   vtMenu_marginbell,
344720d2c4d2Smrg		   TScreenOf(term)->marginbell);
3448d522f475Smrg}
3449d522f475Smrg#endif
3450d522f475Smrg
3451d522f475Smrg#if OPT_BLINK_CURS
3452d522f475Smrgvoid
3453d522f475Smrgupdate_cursorblink(void)
3454d522f475Smrg{
3455d522f475Smrg    UpdateCheckbox("update_cursorblink",
3456d522f475Smrg		   vtMenuEntries,
3457d522f475Smrg		   vtMenu_cursorblink,
345820d2c4d2Smrg		   TScreenOf(term)->cursor_blink);
3459d522f475Smrg}
3460d522f475Smrg#endif
3461d522f475Smrg
3462d522f475Smrgvoid
3463d522f475Smrgupdate_altscreen(void)
3464d522f475Smrg{
3465d522f475Smrg    UpdateCheckbox("update_altscreen",
3466d522f475Smrg		   vtMenuEntries,
3467d522f475Smrg		   vtMenu_altscreen,
346820d2c4d2Smrg		   TScreenOf(term)->whichBuf);
3469d522f475Smrg}
3470d522f475Smrg
3471d522f475Smrgvoid
3472d522f475Smrgupdate_titeInhibit(void)
3473d522f475Smrg{
3474d522f475Smrg    UpdateCheckbox("update_titeInhibit",
3475d522f475Smrg		   vtMenuEntries,
3476d522f475Smrg		   vtMenu_titeInhibit,
3477d522f475Smrg		   !(term->misc.titeInhibit));
3478d522f475Smrg}
3479d522f475Smrg
3480d522f475Smrg#ifndef NO_ACTIVE_ICON
3481d522f475Smrgvoid
3482d522f475Smrgupdate_activeicon(void)
3483d522f475Smrg{
3484d522f475Smrg    UpdateCheckbox("update_activeicon",
3485d522f475Smrg		   vtMenuEntries,
3486d522f475Smrg		   vtMenu_activeicon,
34870bd37d32Smrg		   term->work.active_icon);
3488d522f475Smrg}
3489d522f475Smrg#endif /* NO_ACTIVE_ICON */
3490d522f475Smrg
3491e39b573cSmrgstatic void
3492e39b573cSmrgdo_allowBoldFonts(Widget w,
3493e39b573cSmrg		  XtPointer closure GCC_UNUSED,
3494e39b573cSmrg		  XtPointer data GCC_UNUSED)
3495e39b573cSmrg{
3496e39b573cSmrg    XtermWidget xw = getXtermWidget(w);
3497e39b573cSmrg    if (xw != 0) {
3498e39b573cSmrg	ToggleFlag(TScreenOf(xw)->allowBoldFonts);
3499e39b573cSmrg	update_menu_allowBoldFonts();
3500e39b573cSmrg	Redraw();
3501e39b573cSmrg    }
3502e39b573cSmrg}
3503e39b573cSmrg
3504d522f475Smrg#if OPT_DEC_CHRSET
3505d522f475Smrgvoid
3506d522f475Smrgupdate_font_doublesize(void)
3507d522f475Smrg{
3508d522f475Smrg    UpdateCheckbox("update_font_doublesize",
3509d522f475Smrg		   fontMenuEntries,
3510d522f475Smrg		   fontMenu_font_doublesize,
351120d2c4d2Smrg		   TScreenOf(term)->font_doublesize);
3512d522f475Smrg}
3513d522f475Smrg#endif
3514d522f475Smrg
3515d522f475Smrg#if OPT_BOX_CHARS
3516d522f475Smrgvoid
3517d522f475Smrgupdate_font_boxchars(void)
3518d522f475Smrg{
3519d522f475Smrg    UpdateCheckbox("update_font_boxchars",
3520d522f475Smrg		   fontMenuEntries,
3521d522f475Smrg		   fontMenu_font_boxchars,
352220d2c4d2Smrg		   TScreenOf(term)->force_box_chars);
352320d2c4d2Smrg}
352420d2c4d2Smrg
352520d2c4d2Smrgvoid
352620d2c4d2Smrgupdate_font_packed(void)
352720d2c4d2Smrg{
352820d2c4d2Smrg    UpdateCheckbox("update_font_packed",
352920d2c4d2Smrg		   fontMenuEntries,
353020d2c4d2Smrg		   fontMenu_font_packedfont,
353120d2c4d2Smrg		   TScreenOf(term)->force_packed);
3532d522f475Smrg}
3533d522f475Smrg#endif
3534d522f475Smrg
3535d522f475Smrg#if OPT_DEC_SOFTFONT
3536d522f475Smrgvoid
3537d522f475Smrgupdate_font_loadable(void)
3538d522f475Smrg{
3539d522f475Smrg    UpdateCheckbox("update_font_loadable",
3540d522f475Smrg		   fontMenuEntries,
3541d522f475Smrg		   fontMenu_font_loadable,
3542d522f475Smrg		   term->misc.font_loadable);
3543d522f475Smrg}
3544d522f475Smrg#endif
3545d522f475Smrg
3546d522f475Smrg#if OPT_RENDERFONT
3547d522f475Smrgvoid
3548d522f475Smrgupdate_font_renderfont(void)
3549d522f475Smrg{
3550d522f475Smrg    UpdateCheckbox("update_font_renderfont",
3551d522f475Smrg		   fontMenuEntries,
3552d522f475Smrg		   fontMenu_render_font,
35530bd37d32Smrg		   (term->work.render_font == True));
355420d2c4d2Smrg    SetItemSensitivity(fontMenuEntries[fontMenu_render_font].widget,
355520d2c4d2Smrg		       !IsEmpty(term->misc.face_name));
35560bd37d32Smrg    update_fontmenu(term);
3557d522f475Smrg}
3558d522f475Smrg#endif
3559d522f475Smrg
3560d522f475Smrg#if OPT_WIDE_CHARS
3561d522f475Smrgvoid
3562d522f475Smrgupdate_font_utf8_mode(void)
3563d522f475Smrg{
356420d2c4d2Smrg    Bool active = (TScreenOf(term)->utf8_mode != uAlways);
356520d2c4d2Smrg    Bool enable = (TScreenOf(term)->utf8_mode != uFalse);
3566d522f475Smrg
3567d522f475Smrg    TRACE(("update_font_utf8_mode active %d, enable %d\n", active, enable));
3568e39b573cSmrg    SetItemSensitivity(fontMenuEntries[fontMenu_utf8_mode].widget, active);
3569d522f475Smrg    UpdateCheckbox("update_font_utf8_mode",
3570d522f475Smrg		   fontMenuEntries,
3571e39b573cSmrg		   fontMenu_utf8_mode,
3572e39b573cSmrg		   enable);
3573e39b573cSmrg}
3574e39b573cSmrg
3575e39b573cSmrgvoid
3576e39b573cSmrgupdate_font_utf8_fonts(void)
3577e39b573cSmrg{
3578e39b573cSmrg    Bool active = (TScreenOf(term)->utf8_fonts != uAlways);
3579e39b573cSmrg    Bool enable = (TScreenOf(term)->utf8_fonts != uFalse);
3580e39b573cSmrg
3581e39b573cSmrg    TRACE(("update_font_utf8_fonts active %d, enable %d\n", active, enable));
3582e39b573cSmrg    SetItemSensitivity(fontMenuEntries[fontMenu_utf8_fonts].widget, active);
3583e39b573cSmrg    UpdateCheckbox("update_font_utf8_fonts",
3584e39b573cSmrg		   fontMenuEntries,
3585e39b573cSmrg		   fontMenu_utf8_fonts,
3586d522f475Smrg		   enable);
3587d522f475Smrg}
3588d522f475Smrg
3589d522f475Smrgvoid
3590d522f475Smrgupdate_font_utf8_title(void)
3591d522f475Smrg{
359220d2c4d2Smrg    Bool active = (TScreenOf(term)->utf8_mode != uFalse);
359320d2c4d2Smrg    Bool enable = (TScreenOf(term)->utf8_title);
3594d522f475Smrg
3595d522f475Smrg    TRACE(("update_font_utf8_title active %d, enable %d\n", active, enable));
3596e39b573cSmrg    SetItemSensitivity(fontMenuEntries[fontMenu_utf8_title].widget, active);
3597d522f475Smrg    UpdateCheckbox("update_font_utf8_title",
3598d522f475Smrg		   fontMenuEntries,
3599e39b573cSmrg		   fontMenu_utf8_title,
3600d522f475Smrg		   enable);
3601d522f475Smrg}
3602d522f475Smrg#endif
3603d522f475Smrg
36040bd37d32Smrg#if OPT_DEC_CHRSET || OPT_BOX_CHARS || OPT_DEC_SOFTFONT
3605e39b573cSmrgvoid
3606e39b573cSmrgupdate_menu_allowBoldFonts(void)
3607e39b573cSmrg{
3608e39b573cSmrg    UpdateCheckbox("update_menu_allowBoldFonts",
3609e39b573cSmrg		   fontMenuEntries,
3610e39b573cSmrg		   fontMenu_allowBoldFonts,
3611e39b573cSmrg		   TScreenOf(term)->allowBoldFonts);
3612e39b573cSmrg}
36130bd37d32Smrg#endif
3614e39b573cSmrg
3615956cc18dSsnj#if OPT_ALLOW_XXX_OPS
3616956cc18dSsnjstatic void
3617956cc18dSsnjenable_allow_xxx_ops(Bool enable)
3618956cc18dSsnj{
3619956cc18dSsnj    SetItemSensitivity(fontMenuEntries[fontMenu_allowFontOps].widget, enable);
3620956cc18dSsnj    SetItemSensitivity(fontMenuEntries[fontMenu_allowTcapOps].widget, enable);
3621956cc18dSsnj    SetItemSensitivity(fontMenuEntries[fontMenu_allowTitleOps].widget, enable);
3622956cc18dSsnj    SetItemSensitivity(fontMenuEntries[fontMenu_allowWindowOps].widget, enable);
3623956cc18dSsnj}
3624956cc18dSsnj
362520d2c4d2Smrgstatic void
362620d2c4d2Smrgdo_allowColorOps(Widget w,
362720d2c4d2Smrg		 XtPointer closure GCC_UNUSED,
362820d2c4d2Smrg		 XtPointer data GCC_UNUSED)
362920d2c4d2Smrg{
363020d2c4d2Smrg    XtermWidget xw = getXtermWidget(w);
363120d2c4d2Smrg    if (xw != 0) {
363220d2c4d2Smrg	ToggleFlag(TScreenOf(xw)->allowColorOps);
363320d2c4d2Smrg	update_menu_allowColorOps();
363420d2c4d2Smrg    }
363520d2c4d2Smrg}
363620d2c4d2Smrg
3637956cc18dSsnjstatic void
3638956cc18dSsnjdo_allowFontOps(Widget w,
3639956cc18dSsnj		XtPointer closure GCC_UNUSED,
3640956cc18dSsnj		XtPointer data GCC_UNUSED)
3641956cc18dSsnj{
3642956cc18dSsnj    XtermWidget xw = getXtermWidget(w);
3643956cc18dSsnj    if (xw != 0) {
364420d2c4d2Smrg	ToggleFlag(TScreenOf(xw)->allowFontOps);
3645956cc18dSsnj	update_menu_allowFontOps();
3646956cc18dSsnj    }
3647956cc18dSsnj}
3648956cc18dSsnj
3649956cc18dSsnjstatic void
3650956cc18dSsnjdo_allowTcapOps(Widget w,
3651956cc18dSsnj		XtPointer closure GCC_UNUSED,
3652956cc18dSsnj		XtPointer data GCC_UNUSED)
3653956cc18dSsnj{
3654956cc18dSsnj    XtermWidget xw = getXtermWidget(w);
3655956cc18dSsnj    if (xw != 0) {
365620d2c4d2Smrg	ToggleFlag(TScreenOf(xw)->allowTcapOps);
3657956cc18dSsnj	update_menu_allowTcapOps();
3658956cc18dSsnj    }
3659956cc18dSsnj}
3660956cc18dSsnj
3661956cc18dSsnjstatic void
3662956cc18dSsnjdo_allowTitleOps(Widget w,
3663956cc18dSsnj		 XtPointer closure GCC_UNUSED,
3664956cc18dSsnj		 XtPointer data GCC_UNUSED)
3665956cc18dSsnj{
3666956cc18dSsnj    XtermWidget xw = getXtermWidget(w);
3667956cc18dSsnj    if (xw != 0) {
366820d2c4d2Smrg	ToggleFlag(TScreenOf(xw)->allowTitleOps);
3669956cc18dSsnj	update_menu_allowTitleOps();
3670956cc18dSsnj    }
3671956cc18dSsnj}
3672956cc18dSsnj
3673956cc18dSsnjstatic void
3674956cc18dSsnjdo_allowWindowOps(Widget w,
3675956cc18dSsnj		  XtPointer closure GCC_UNUSED,
3676956cc18dSsnj		  XtPointer data GCC_UNUSED)
3677956cc18dSsnj{
3678956cc18dSsnj    XtermWidget xw = getXtermWidget(w);
3679956cc18dSsnj    if (xw != 0) {
368020d2c4d2Smrg	ToggleFlag(TScreenOf(xw)->allowWindowOps);
3681956cc18dSsnj	update_menu_allowWindowOps();
3682956cc18dSsnj    }
3683956cc18dSsnj}
3684956cc18dSsnj
368520d2c4d2Smrgvoid
368620d2c4d2SmrgHandleAllowColorOps(Widget w,
368720d2c4d2Smrg		    XEvent * event GCC_UNUSED,
368820d2c4d2Smrg		    String * params,
368920d2c4d2Smrg		    Cardinal *param_count)
369020d2c4d2Smrg{
369120d2c4d2Smrg    HANDLE_VT_TOGGLE(allowColorOps);
369220d2c4d2Smrg}
369320d2c4d2Smrg
3694956cc18dSsnjvoid
3695956cc18dSsnjHandleAllowFontOps(Widget w,
3696956cc18dSsnj		   XEvent * event GCC_UNUSED,
3697956cc18dSsnj		   String * params,
3698956cc18dSsnj		   Cardinal *param_count)
3699956cc18dSsnj{
370020d2c4d2Smrg    HANDLE_VT_TOGGLE(allowFontOps);
3701956cc18dSsnj}
3702956cc18dSsnj
3703956cc18dSsnjvoid
3704956cc18dSsnjHandleAllowTcapOps(Widget w,
3705956cc18dSsnj		   XEvent * event GCC_UNUSED,
3706956cc18dSsnj		   String * params,
3707956cc18dSsnj		   Cardinal *param_count)
3708956cc18dSsnj{
370920d2c4d2Smrg    HANDLE_VT_TOGGLE(allowTcapOps);
3710956cc18dSsnj}
3711956cc18dSsnj
3712956cc18dSsnjvoid
3713956cc18dSsnjHandleAllowTitleOps(Widget w,
3714956cc18dSsnj		    XEvent * event GCC_UNUSED,
3715956cc18dSsnj		    String * params,
3716956cc18dSsnj		    Cardinal *param_count)
3717956cc18dSsnj{
371820d2c4d2Smrg    HANDLE_VT_TOGGLE(allowTitleOps);
3719956cc18dSsnj}
3720956cc18dSsnj
3721956cc18dSsnjvoid
3722956cc18dSsnjHandleAllowWindowOps(Widget w,
3723956cc18dSsnj		     XEvent * event GCC_UNUSED,
3724956cc18dSsnj		     String * params,
3725956cc18dSsnj		     Cardinal *param_count)
3726956cc18dSsnj{
372720d2c4d2Smrg    HANDLE_VT_TOGGLE(allowWindowOps);
3728956cc18dSsnj}
3729956cc18dSsnj
3730956cc18dSsnjvoid
373120d2c4d2Smrgupdate_menu_allowColorOps(void)
3732956cc18dSsnj{
373320d2c4d2Smrg    UpdateCheckbox("update_menu_allowColorOps",
3734956cc18dSsnj		   fontMenuEntries,
373520d2c4d2Smrg		   fontMenu_allowColorOps,
373620d2c4d2Smrg		   TScreenOf(term)->allowColorOps);
3737956cc18dSsnj}
3738956cc18dSsnj
3739956cc18dSsnjvoid
3740956cc18dSsnjupdate_menu_allowFontOps(void)
3741956cc18dSsnj{
3742956cc18dSsnj    UpdateCheckbox("update_menu_allowFontOps",
3743956cc18dSsnj		   fontMenuEntries,
3744956cc18dSsnj		   fontMenu_allowFontOps,
374520d2c4d2Smrg		   TScreenOf(term)->allowFontOps);
374620d2c4d2Smrg}
374720d2c4d2Smrg
374820d2c4d2Smrgvoid
374920d2c4d2Smrgupdate_menu_allowTcapOps(void)
375020d2c4d2Smrg{
375120d2c4d2Smrg    UpdateCheckbox("update_menu_allowTcapOps",
375220d2c4d2Smrg		   fontMenuEntries,
375320d2c4d2Smrg		   fontMenu_allowTcapOps,
375420d2c4d2Smrg		   TScreenOf(term)->allowTcapOps);
3755956cc18dSsnj}
3756956cc18dSsnj
3757956cc18dSsnjvoid
3758956cc18dSsnjupdate_menu_allowTitleOps(void)
3759956cc18dSsnj{
3760956cc18dSsnj    UpdateCheckbox("update_menu_allowTitleOps",
3761956cc18dSsnj		   fontMenuEntries,
3762956cc18dSsnj		   fontMenu_allowTitleOps,
376320d2c4d2Smrg		   TScreenOf(term)->allowTitleOps);
3764956cc18dSsnj}
3765956cc18dSsnj
3766956cc18dSsnjvoid
3767956cc18dSsnjupdate_menu_allowWindowOps(void)
3768956cc18dSsnj{
3769956cc18dSsnj    UpdateCheckbox("update_menu_allowWindowOps",
3770956cc18dSsnj		   fontMenuEntries,
3771956cc18dSsnj		   fontMenu_allowWindowOps,
377220d2c4d2Smrg		   TScreenOf(term)->allowWindowOps);
3773956cc18dSsnj}
3774956cc18dSsnj#endif
3775956cc18dSsnj
3776d522f475Smrg#if OPT_TEK4014
3777d522f475Smrgvoid
3778d522f475Smrgupdate_tekshow(void)
3779d522f475Smrg{
378020d2c4d2Smrg    if (!(TScreenOf(term)->inhibit & I_TEK)) {
3781d522f475Smrg	UpdateCheckbox("update_tekshow",
3782d522f475Smrg		       vtMenuEntries,
3783d522f475Smrg		       vtMenu_tekshow,
3784d522f475Smrg		       TEK4014_SHOWN(term));
3785d522f475Smrg    }
3786d522f475Smrg}
3787d522f475Smrg
3788d522f475Smrgvoid
3789d522f475Smrgupdate_vttekmode(void)
3790d522f475Smrg{
37910bd37d32Smrg    XtermWidget xw = term;
37920bd37d32Smrg
37930bd37d32Smrg    if (!(TScreenOf(xw)->inhibit & I_TEK)) {
3794d522f475Smrg	UpdateCheckbox("update_vtmode",
3795d522f475Smrg		       vtMenuEntries,
3796d522f475Smrg		       vtMenu_tekmode,
37970bd37d32Smrg		       TEK4014_ACTIVE(xw));
3798d522f475Smrg	UpdateCheckbox("update_tekmode",
3799d522f475Smrg		       tekMenuEntries,
3800d522f475Smrg		       tekMenu_vtmode,
38010bd37d32Smrg		       !TEK4014_ACTIVE(xw));
38020bd37d32Smrg	update_fullscreen();
3803d522f475Smrg    }
3804d522f475Smrg}
3805d522f475Smrg
3806d522f475Smrgvoid
3807d522f475Smrgupdate_vtshow(void)
3808d522f475Smrg{
380920d2c4d2Smrg    if (!(TScreenOf(term)->inhibit & I_TEK)) {
3810d522f475Smrg	UpdateCheckbox("update_vtshow",
3811d522f475Smrg		       tekMenuEntries,
3812d522f475Smrg		       tekMenu_vtshow,
381320d2c4d2Smrg		       TScreenOf(term)->Vshow);
3814d522f475Smrg    }
3815d522f475Smrg}
3816d522f475Smrg
3817d522f475Smrgvoid
3818d522f475Smrgset_vthide_sensitivity(void)
3819d522f475Smrg{
382020d2c4d2Smrg    if (!(TScreenOf(term)->inhibit & I_TEK)) {
3821d522f475Smrg	SetItemSensitivity(
3822d522f475Smrg			      vtMenuEntries[vtMenu_vthide].widget,
3823d522f475Smrg			      TEK4014_SHOWN(term));
3824d522f475Smrg    }
3825d522f475Smrg}
3826d522f475Smrg
3827d522f475Smrgvoid
3828d522f475Smrgset_tekhide_sensitivity(void)
3829d522f475Smrg{
383020d2c4d2Smrg    if (!(TScreenOf(term)->inhibit & I_TEK)) {
3831d522f475Smrg	SetItemSensitivity(
3832d522f475Smrg			      tekMenuEntries[tekMenu_tekhide].widget,
383320d2c4d2Smrg			      TScreenOf(term)->Vshow);
3834d522f475Smrg    }
3835d522f475Smrg}
3836d522f475Smrg
3837d522f475Smrgvoid
3838d522f475Smrgset_tekfont_menu_item(int n, int val)
3839d522f475Smrg{
384020d2c4d2Smrg    if (!(TScreenOf(term)->inhibit & I_TEK)) {
3841d522f475Smrg	UpdateCheckbox("set_tekfont_menu_item", tekMenuEntries, FS2MI(n),
3842d522f475Smrg		       (val));
3843d522f475Smrg    }
3844d522f475Smrg}
3845d522f475Smrg#endif /* OPT_TEK4014 */
3846d522f475Smrg
3847d522f475Smrgvoid
3848d522f475Smrgset_menu_font(int val)
3849d522f475Smrg{
3850d522f475Smrg    UpdateCheckbox("set_menu_font",
3851d522f475Smrg		   fontMenuEntries,
385220d2c4d2Smrg		   TScreenOf(term)->menu_font_number,
3853d522f475Smrg		   (val));
3854d522f475Smrg}
3855