menu.c revision 04b94745
104b94745Smrg/* $XTermId: menu.c,v 1.375 2023/12/01 21:39:31 tom Exp $ */
2d522f475Smrg
3d522f475Smrg/*
404b94745Smrg * Copyright 1999-2022,2023 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 *
33f2e35a3aSmrg * Copyright 1989  X Consortium
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 *
51f2e35a3aSmrg * Except as contained in this notice, the name of the X Consortium shall not be
5220d2c4d2Smrg * used in advertising or otherwise to promote the sale, use or other dealings
53f2e35a3aSmrg * in this Software without prior written authorization from the X Consortium.
5420d2c4d2Smrg */
55d522f475Smrg
56d522f475Smrg#include <xterm.h>
57d522f475Smrg#include <data.h>
5804b94745Smrg#include <error.h>
59d522f475Smrg#include <menu.h>
60d522f475Smrg#include <fontutils.h>
61d522f475Smrg#include <xstrings.h>
62d522f475Smrg
63d522f475Smrg#include <X11/Xmu/CharSet.h>
64d522f475Smrg
65d522f475Smrg#define app_con Xaw_app_con	/* quiet a warning from SimpleMenu.h */
66d522f475Smrg
67d522f475Smrg#if defined(HAVE_LIB_XAW)
68d522f475Smrg
69d522f475Smrg#include <X11/Xaw/SimpleMenu.h>
70d522f475Smrg#include <X11/Xaw/Box.h>
71d522f475Smrg#include <X11/Xaw/SmeBSB.h>
72d522f475Smrg#include <X11/Xaw/SmeLine.h>
73d522f475Smrg
74d522f475Smrg#if OPT_TOOLBAR
75d522f475Smrg#include <X11/Xaw/MenuButton.h>
76d522f475Smrg#include <X11/Xaw/Form.h>
77d522f475Smrg#endif
78d522f475Smrg
79d522f475Smrg#elif defined(HAVE_LIB_XAW3D)
80d522f475Smrg
81d522f475Smrg#include <X11/Xaw3d/SimpleMenu.h>
82d522f475Smrg#include <X11/Xaw3d/Box.h>
83d522f475Smrg#include <X11/Xaw3d/SmeBSB.h>
84d522f475Smrg#include <X11/Xaw3d/SmeLine.h>
85d522f475Smrg
86d522f475Smrg#if OPT_TOOLBAR
87d522f475Smrg#include <X11/Xaw3d/MenuButton.h>
88d522f475Smrg#include <X11/Xaw3d/Form.h>
89d522f475Smrg#endif
90d522f475Smrg
9101037d57Smrg#elif defined(HAVE_LIB_XAW3DXFT)
9201037d57Smrg
9301037d57Smrg#include <X11/Xaw3dxft/SimpleMenu.h>
9401037d57Smrg#include <X11/Xaw3dxft/Box.h>
9501037d57Smrg#include <X11/Xaw3dxft/SmeBSB.h>
9601037d57Smrg#include <X11/Xaw3dxft/SmeLine.h>
9701037d57Smrg
9801037d57Smrg#if OPT_TOOLBAR
9901037d57Smrg#include <X11/Xaw3dxft/MenuButton.h>
10001037d57Smrg#include <X11/Xaw3dxft/Form.h>
10101037d57Smrg#endif
10201037d57Smrg
103d522f475Smrg#elif defined(HAVE_LIB_NEXTAW)
104d522f475Smrg
105d522f475Smrg#include <X11/neXtaw/SimpleMenu.h>
106d522f475Smrg#include <X11/neXtaw/Box.h>
107d522f475Smrg#include <X11/neXtaw/SmeBSB.h>
108d522f475Smrg#include <X11/neXtaw/SmeLine.h>
109d522f475Smrg
110d522f475Smrg#if OPT_TOOLBAR
111d522f475Smrg#include <X11/neXtaw/MenuButton.h>
112d522f475Smrg#include <X11/neXtaw/Form.h>
113d522f475Smrg#endif
114d522f475Smrg
115d522f475Smrg#elif defined(HAVE_LIB_XAWPLUS)
116d522f475Smrg
117d522f475Smrg#include <X11/XawPlus/SimpleMenu.h>
118d522f475Smrg#include <X11/XawPlus/Box.h>
119d522f475Smrg#include <X11/XawPlus/SmeBSB.h>
120d522f475Smrg#include <X11/XawPlus/SmeLine.h>
121d522f475Smrg
122d522f475Smrg#if OPT_TOOLBAR
123d522f475Smrg#include <X11/XawPlus/MenuButton.h>
124d522f475Smrg#include <X11/XawPlus/Form.h>
125d522f475Smrg#endif
126d522f475Smrg
127d522f475Smrg#endif
128d522f475Smrg
129d522f475Smrg#undef app_con
130d522f475Smrg
131d522f475Smrg#include <stdio.h>
132d522f475Smrg#include <signal.h>
133956cc18dSsnj
134a1f3da82Smrg#if OPT_TRACE
135a1f3da82Smrg#define UpdateCheckbox(func, mn, mi, val) UpdateMenuItem(func, mn, mi, val)
136a1f3da82Smrg#else
137a1f3da82Smrg#define UpdateCheckbox(func, mn, mi, val) UpdateMenuItem(mn, mi, val)
138a1f3da82Smrg#endif
139a1f3da82Smrg
140956cc18dSsnj#define ToggleFlag(flag) flag = (Boolean) !flag
141d522f475Smrg/* *INDENT-OFF* */
142d522f475Smrgstatic void do_8bit_control    PROTO_XT_CALLBACK_ARGS;
143d522f475Smrgstatic void do_allow132        PROTO_XT_CALLBACK_ARGS;
144e39b573cSmrgstatic void do_allowBoldFonts  PROTO_XT_CALLBACK_ARGS;
145d522f475Smrgstatic void do_allowsends      PROTO_XT_CALLBACK_ARGS;
146d522f475Smrgstatic void do_altscreen       PROTO_XT_CALLBACK_ARGS;
147d522f475Smrgstatic void do_appcursor       PROTO_XT_CALLBACK_ARGS;
148d522f475Smrgstatic void do_appkeypad       PROTO_XT_CALLBACK_ARGS;
149d522f475Smrgstatic void do_autolinefeed    PROTO_XT_CALLBACK_ARGS;
150d522f475Smrgstatic void do_autowrap        PROTO_XT_CALLBACK_ARGS;
151d522f475Smrgstatic void do_backarrow       PROTO_XT_CALLBACK_ARGS;
152d522f475Smrgstatic void do_bellIsUrgent    PROTO_XT_CALLBACK_ARGS;
153d522f475Smrgstatic void do_continue        PROTO_XT_CALLBACK_ARGS;
154d522f475Smrgstatic void do_delete_del      PROTO_XT_CALLBACK_ARGS;
1552e4f8982Smrg#if OPT_SCREEN_DUMPS
1562e4f8982Smrgstatic void do_dump_html       PROTO_XT_CALLBACK_ARGS;
1572e4f8982Smrgstatic void do_dump_svg        PROTO_XT_CALLBACK_ARGS;
1582e4f8982Smrg#endif
159d522f475Smrgstatic void do_interrupt       PROTO_XT_CALLBACK_ARGS;
160d522f475Smrgstatic void do_jumpscroll      PROTO_XT_CALLBACK_ARGS;
1612e4f8982Smrgstatic void do_keepClipboard   PROTO_XT_CALLBACK_ARGS;
162e39b573cSmrgstatic void do_keepSelection   PROTO_XT_CALLBACK_ARGS;
163d522f475Smrgstatic void do_kill            PROTO_XT_CALLBACK_ARGS;
164d522f475Smrgstatic void do_old_fkeys       PROTO_XT_CALLBACK_ARGS;
165d522f475Smrgstatic void do_poponbell       PROTO_XT_CALLBACK_ARGS;
166d522f475Smrgstatic void do_print           PROTO_XT_CALLBACK_ARGS;
167d522f475Smrgstatic void do_print_redir     PROTO_XT_CALLBACK_ARGS;
168d522f475Smrgstatic void do_redraw          PROTO_XT_CALLBACK_ARGS;
169d522f475Smrgstatic void do_reversevideo    PROTO_XT_CALLBACK_ARGS;
170d522f475Smrgstatic void do_reversewrap     PROTO_XT_CALLBACK_ARGS;
171d522f475Smrgstatic void do_scrollbar       PROTO_XT_CALLBACK_ARGS;
172d522f475Smrgstatic void do_scrollkey       PROTO_XT_CALLBACK_ARGS;
173d522f475Smrgstatic void do_scrollttyoutput PROTO_XT_CALLBACK_ARGS;
174d522f475Smrgstatic void do_securekbd       PROTO_XT_CALLBACK_ARGS;
175d522f475Smrgstatic void do_selectClipboard PROTO_XT_CALLBACK_ARGS;
176d522f475Smrgstatic void do_suspend         PROTO_XT_CALLBACK_ARGS;
177d522f475Smrgstatic void do_terminate       PROTO_XT_CALLBACK_ARGS;
178d522f475Smrgstatic void do_titeInhibit     PROTO_XT_CALLBACK_ARGS;
179d522f475Smrgstatic void do_visualbell      PROTO_XT_CALLBACK_ARGS;
180d522f475Smrgstatic void do_vtfont          PROTO_XT_CALLBACK_ARGS;
181d522f475Smrg
182ad37e533Smrgstatic GCC_NORETURN void do_clearsavedlines PROTO_XT_CALLBACK_ARGS;
183ad37e533Smrgstatic GCC_NORETURN void do_hardreset       PROTO_XT_CALLBACK_ARGS;
184ad37e533Smrgstatic GCC_NORETURN void do_quit            PROTO_XT_CALLBACK_ARGS;
185ad37e533Smrgstatic GCC_NORETURN void do_softreset       PROTO_XT_CALLBACK_ARGS;
186ad37e533Smrg
187d522f475Smrg#ifdef ALLOWLOGGING
188d522f475Smrgstatic void do_logging         PROTO_XT_CALLBACK_ARGS;
189d522f475Smrg#endif
190d522f475Smrg
191d522f475Smrg#ifndef NO_ACTIVE_ICON
192d522f475Smrgstatic void do_activeicon      PROTO_XT_CALLBACK_ARGS;
193d522f475Smrg#endif /* NO_ACTIVE_ICON */
194d522f475Smrg
195956cc18dSsnj#if OPT_ALLOW_XXX_OPS
196956cc18dSsnjstatic void enable_allow_xxx_ops (Bool);
19720d2c4d2Smrgstatic void do_allowColorOps   PROTO_XT_CALLBACK_ARGS;
198956cc18dSsnjstatic void do_allowFontOps    PROTO_XT_CALLBACK_ARGS;
199913cc679Smrgstatic void do_allowMouseOps   PROTO_XT_CALLBACK_ARGS;
20020d2c4d2Smrgstatic void do_allowTcapOps    PROTO_XT_CALLBACK_ARGS;
201956cc18dSsnjstatic void do_allowTitleOps   PROTO_XT_CALLBACK_ARGS;
202956cc18dSsnjstatic void do_allowWindowOps  PROTO_XT_CALLBACK_ARGS;
203956cc18dSsnj#endif
204956cc18dSsnj
205d522f475Smrg#if OPT_BLINK_CURS
206d522f475Smrgstatic void do_cursorblink     PROTO_XT_CALLBACK_ARGS;
207d522f475Smrg#endif
208d522f475Smrg
209d522f475Smrg#if OPT_BOX_CHARS
210d522f475Smrgstatic void do_font_boxchars   PROTO_XT_CALLBACK_ARGS;
21120d2c4d2Smrgstatic void do_font_packed     PROTO_XT_CALLBACK_ARGS;
212d522f475Smrg#endif
213d522f475Smrg
214d522f475Smrg#if OPT_DEC_CHRSET
215d522f475Smrgstatic void do_font_doublesize PROTO_XT_CALLBACK_ARGS;
216d522f475Smrg#endif
217d522f475Smrg
218d522f475Smrg#if OPT_DEC_SOFTFONT
219d522f475Smrgstatic void do_font_loadable   PROTO_XT_CALLBACK_ARGS;
220d522f475Smrg#endif
221d522f475Smrg
222d522f475Smrg#if OPT_HP_FUNC_KEYS
223d522f475Smrgstatic void do_hp_fkeys        PROTO_XT_CALLBACK_ARGS;
224d522f475Smrg#endif
225d522f475Smrg
226a1f3da82Smrg#if OPT_MAXIMIZE
227a1f3da82Smrgstatic void do_fullscreen      PROTO_XT_CALLBACK_ARGS;
228a1f3da82Smrg#endif
229a1f3da82Smrg
230d522f475Smrg#if OPT_NUM_LOCK
231d522f475Smrgstatic void do_alt_esc         PROTO_XT_CALLBACK_ARGS;
232d522f475Smrgstatic void do_num_lock        PROTO_XT_CALLBACK_ARGS;
233d522f475Smrgstatic void do_meta_esc        PROTO_XT_CALLBACK_ARGS;
234d522f475Smrg#endif
235d522f475Smrg
236e39b573cSmrg#if OPT_PRINT_ON_EXIT
237e39b573cSmrgstatic void do_write_now       PROTO_XT_CALLBACK_ARGS;
238e39b573cSmrgstatic void do_write_error     PROTO_XT_CALLBACK_ARGS;
239e39b573cSmrg#endif
240e39b573cSmrg
241d522f475Smrg#if OPT_RENDERFONT
242d522f475Smrgstatic void do_font_renderfont PROTO_XT_CALLBACK_ARGS;
243d522f475Smrg#endif
244d522f475Smrg
245d522f475Smrg#if OPT_SCO_FUNC_KEYS
246d522f475Smrgstatic void do_sco_fkeys       PROTO_XT_CALLBACK_ARGS;
247d522f475Smrg#endif
248d522f475Smrg
249e0a2b6dfSmrg#if OPT_SIXEL_GRAPHICS
250e0a2b6dfSmrgstatic void do_sixelscrolling  PROTO_XT_CALLBACK_ARGS;
251e0a2b6dfSmrg#endif
252e0a2b6dfSmrg
253894e0ac8Smrg#if OPT_GRAPHICS
254894e0ac8Smrgstatic void do_privatecolorregisters PROTO_XT_CALLBACK_ARGS;
255894e0ac8Smrg#endif
256894e0ac8Smrg
257d522f475Smrg#if OPT_SUN_FUNC_KEYS
258d522f475Smrgstatic void do_sun_fkeys       PROTO_XT_CALLBACK_ARGS;
259d522f475Smrg#endif
260d522f475Smrg
261d522f475Smrg#if OPT_SUNPC_KBD
262d522f475Smrgstatic void do_sun_kbd         PROTO_XT_CALLBACK_ARGS;
263d522f475Smrg#endif
264d522f475Smrg
265d522f475Smrg#if OPT_TCAP_FKEYS
266d522f475Smrgstatic void do_tcap_fkeys      PROTO_XT_CALLBACK_ARGS;
267d522f475Smrg#endif
268d522f475Smrg
269d522f475Smrg#if OPT_TEK4014
270d522f475Smrgstatic void do_tekcopy         PROTO_XT_CALLBACK_ARGS;
271d522f475Smrgstatic void do_tekhide         PROTO_XT_CALLBACK_ARGS;
272d522f475Smrgstatic void do_tekmode         PROTO_XT_CALLBACK_ARGS;
273d522f475Smrgstatic void do_tekonoff        PROTO_XT_CALLBACK_ARGS;
274d522f475Smrgstatic void do_tekpage         PROTO_XT_CALLBACK_ARGS;
275d522f475Smrgstatic void do_tekreset        PROTO_XT_CALLBACK_ARGS;
276d522f475Smrgstatic void do_tekshow         PROTO_XT_CALLBACK_ARGS;
277d522f475Smrgstatic void do_tektext2        PROTO_XT_CALLBACK_ARGS;
278d522f475Smrgstatic void do_tektext3        PROTO_XT_CALLBACK_ARGS;
279d522f475Smrgstatic void do_tektextlarge    PROTO_XT_CALLBACK_ARGS;
280d522f475Smrgstatic void do_tektextsmall    PROTO_XT_CALLBACK_ARGS;
281d522f475Smrgstatic void do_vthide          PROTO_XT_CALLBACK_ARGS;
282d522f475Smrgstatic void do_vtmode          PROTO_XT_CALLBACK_ARGS;
283d522f475Smrgstatic void do_vtonoff         PROTO_XT_CALLBACK_ARGS;
284d522f475Smrgstatic void do_vtshow          PROTO_XT_CALLBACK_ARGS;
285d522f475Smrgstatic void handle_tekshow     (Widget gw, Bool allowswitch);
286d522f475Smrgstatic void handle_vtshow      (Widget gw, Bool allowswitch);
287d522f475Smrg#endif
288d522f475Smrg
289d522f475Smrg#if OPT_TOOLBAR
290d522f475Smrgstatic void do_toolbar         PROTO_XT_CALLBACK_ARGS;
291d522f475Smrg#endif
292d522f475Smrg
293d522f475Smrg#if OPT_WIDE_CHARS
294d522f475Smrgstatic void do_font_utf8_mode  PROTO_XT_CALLBACK_ARGS;
295e39b573cSmrgstatic void do_font_utf8_fonts PROTO_XT_CALLBACK_ARGS;
296d522f475Smrgstatic void do_font_utf8_title PROTO_XT_CALLBACK_ARGS;
297d522f475Smrg#endif
298d522f475Smrg
299d522f475Smrg/*
300d522f475Smrg * The order of entries MUST match the values given in menu.h
301d522f475Smrg */
302d522f475SmrgMenuEntry mainMenuEntries[] = {
303d522f475Smrg#if OPT_TOOLBAR
304d522f475Smrg    { "toolbar",	do_toolbar,	NULL },
305a1f3da82Smrg#endif
306a1f3da82Smrg#if OPT_MAXIMIZE
307a1f3da82Smrg    { "fullscreen",	do_fullscreen,	NULL },
308d522f475Smrg#endif
309d522f475Smrg    { "securekbd",	do_securekbd,	NULL },
310d522f475Smrg    { "allowsends",	do_allowsends,	NULL },
311d522f475Smrg    { "redraw",		do_redraw,	NULL },
312d522f475Smrg    { "line1",		NULL,		NULL },
313d522f475Smrg#ifdef ALLOWLOGGING
314d522f475Smrg    { "logging",	do_logging,	NULL },
315e39b573cSmrg#endif
3165307cd1aSmrg#if OPT_PRINT_ON_EXIT
317e39b573cSmrg    { "print-immediate", do_write_now,	NULL },
318e39b573cSmrg    { "print-on-error",	do_write_error,	NULL },
319d522f475Smrg#endif
320d522f475Smrg    { "print",		do_print,	NULL },
321d522f475Smrg    { "print-redir",	do_print_redir,	NULL },
3222e4f8982Smrg#if OPT_SCREEN_DUMPS
3232e4f8982Smrg    { "dump-html",	do_dump_html,	NULL },
3242e4f8982Smrg    { "dump-svg",	do_dump_svg,	NULL },
3252e4f8982Smrg#endif
326d522f475Smrg    { "line2",		NULL,		NULL },
327d522f475Smrg    { "8-bit control",	do_8bit_control,NULL },
328d522f475Smrg    { "backarrow key",	do_backarrow,	NULL },
329d522f475Smrg#if OPT_NUM_LOCK
330d522f475Smrg    { "num-lock",	do_num_lock,	NULL },
331d522f475Smrg    { "alt-esc",	do_alt_esc,	NULL },
332d522f475Smrg    { "meta-esc",	do_meta_esc,	NULL },
333d522f475Smrg#endif
334d522f475Smrg    { "delete-is-del",	do_delete_del,	NULL },
335d522f475Smrg    { "oldFunctionKeys",do_old_fkeys,	NULL },
336d522f475Smrg#if OPT_TCAP_FKEYS
337d522f475Smrg    { "tcapFunctionKeys",do_tcap_fkeys,	NULL },
338d522f475Smrg#endif
339d522f475Smrg#if OPT_HP_FUNC_KEYS
340d522f475Smrg    { "hpFunctionKeys",	do_hp_fkeys,	NULL },
341d522f475Smrg#endif
342d522f475Smrg#if OPT_SCO_FUNC_KEYS
343d522f475Smrg    { "scoFunctionKeys",do_sco_fkeys,	NULL },
344d522f475Smrg#endif
345d522f475Smrg#if OPT_SUN_FUNC_KEYS
346d522f475Smrg    { "sunFunctionKeys",do_sun_fkeys,	NULL },
347d522f475Smrg#endif
348d522f475Smrg#if OPT_SUNPC_KBD
349d522f475Smrg    { "sunKeyboard",	do_sun_kbd,	NULL },
350d522f475Smrg#endif
351d522f475Smrg    { "line3",		NULL,		NULL },
352d522f475Smrg    { "suspend",	do_suspend,	NULL },
353d522f475Smrg    { "continue",	do_continue,	NULL },
354d522f475Smrg    { "interrupt",	do_interrupt,	NULL },
355d522f475Smrg    { "hangup",		do_hangup,	NULL },
356d522f475Smrg    { "terminate",	do_terminate,	NULL },
357d522f475Smrg    { "kill",		do_kill,	NULL },
358d522f475Smrg    { "line4",		NULL,		NULL },
359d522f475Smrg    { "quit",		do_quit,	NULL }};
360d522f475Smrg
361d522f475SmrgMenuEntry vtMenuEntries[] = {
362d522f475Smrg    { "scrollbar",	do_scrollbar,	NULL },
363d522f475Smrg    { "jumpscroll",	do_jumpscroll,	NULL },
364d522f475Smrg    { "reversevideo",	do_reversevideo, NULL },
365d522f475Smrg    { "autowrap",	do_autowrap,	NULL },
366d522f475Smrg    { "reversewrap",	do_reversewrap, NULL },
367d522f475Smrg    { "autolinefeed",	do_autolinefeed, NULL },
368d522f475Smrg    { "appcursor",	do_appcursor,	NULL },
369d522f475Smrg    { "appkeypad",	do_appkeypad,	NULL },
370d522f475Smrg    { "scrollkey",	do_scrollkey,	NULL },
371d522f475Smrg    { "scrollttyoutput",do_scrollttyoutput, NULL },
372d522f475Smrg    { "allow132",	do_allow132,	NULL },
373d522f475Smrg    { "keepSelection",	do_keepSelection, NULL },
374f2e35a3aSmrg#if OPT_MENU_KEEPCLIPBOARD
375f2e35a3aSmrg    { "keepClipboard",	do_keepClipboard, NULL },
376f2e35a3aSmrg#endif
377d522f475Smrg    { "selectToClipboard",do_selectClipboard, NULL },
378d522f475Smrg    { "visualbell",	do_visualbell,	NULL },
379d522f475Smrg    { "bellIsUrgent",	do_bellIsUrgent, NULL },
380d522f475Smrg    { "poponbell",	do_poponbell,	NULL },
381d522f475Smrg#if OPT_BLINK_CURS
382d522f475Smrg    { "cursorblink",	do_cursorblink,	NULL },
383d522f475Smrg#endif
384d522f475Smrg    { "titeInhibit",	do_titeInhibit,	NULL },
385d522f475Smrg#ifndef NO_ACTIVE_ICON
386d522f475Smrg    { "activeicon",	do_activeicon,	NULL },
387d522f475Smrg#endif /* NO_ACTIVE_ICON */
388d522f475Smrg    { "line1",		NULL,		NULL },
389d522f475Smrg    { "softreset",	do_softreset,	NULL },
390d522f475Smrg    { "hardreset",	do_hardreset,	NULL },
391d522f475Smrg    { "clearsavedlines",do_clearsavedlines, NULL },
392d522f475Smrg    { "line2",		NULL,		NULL },
393d522f475Smrg#if OPT_TEK4014
394d522f475Smrg    { "tekshow",	do_tekshow,	NULL },
395d522f475Smrg    { "tekmode",	do_tekmode,	NULL },
396d522f475Smrg    { "vthide",		do_vthide,	NULL },
397d522f475Smrg#endif
398d522f475Smrg    { "altscreen",	do_altscreen,	NULL },
399e0a2b6dfSmrg#if OPT_SIXEL_GRAPHICS
400e0a2b6dfSmrg    { "sixelScrolling",	do_sixelscrolling,	NULL },
401894e0ac8Smrg#endif
402894e0ac8Smrg#if OPT_GRAPHICS
403e0a2b6dfSmrg    { "privateColorRegisters", do_privatecolorregisters, NULL },
404e0a2b6dfSmrg#endif
405d522f475Smrg    };
406d522f475Smrg
407d522f475SmrgMenuEntry fontMenuEntries[] = {
408d522f475Smrg    { "fontdefault",	do_vtfont,	NULL },
409d522f475Smrg    { "font1",		do_vtfont,	NULL },
410d522f475Smrg    { "font2",		do_vtfont,	NULL },
411d522f475Smrg    { "font3",		do_vtfont,	NULL },
412d522f475Smrg    { "font4",		do_vtfont,	NULL },
413d522f475Smrg    { "font5",		do_vtfont,	NULL },
414d522f475Smrg    { "font6",		do_vtfont,	NULL },
415f2e35a3aSmrg    { "font7",		do_vtfont,	NULL },
416d522f475Smrg    /* this is after the last builtin font; the other entries are special */
417d522f475Smrg    { "fontescape",	do_vtfont,	NULL },
418d522f475Smrg    { "fontsel",	do_vtfont,	NULL },
419d522f475Smrg    /* down to here should match NMENUFONTS in ptyx.h */
420d522f475Smrg
421d522f475Smrg#if OPT_DEC_CHRSET || OPT_BOX_CHARS || OPT_DEC_SOFTFONT
422d522f475Smrg    { "line1",		NULL,		NULL },
423e39b573cSmrg    { "allow-bold-fonts", do_allowBoldFonts, NULL },
424d522f475Smrg#if OPT_BOX_CHARS
425d522f475Smrg    { "font-linedrawing",do_font_boxchars,NULL },
42620d2c4d2Smrg    { "font-packed",	do_font_packed,NULL },
427d522f475Smrg#endif
428d522f475Smrg#if OPT_DEC_CHRSET
429d522f475Smrg    { "font-doublesize",do_font_doublesize,NULL },
430d522f475Smrg#endif
431d522f475Smrg#if OPT_DEC_SOFTFONT
432d522f475Smrg    { "font-loadable",	do_font_loadable,NULL },
433d522f475Smrg#endif
434d522f475Smrg#endif /* toggles for DEC font extensions */
435d522f475Smrg
436d522f475Smrg#if OPT_RENDERFONT || OPT_WIDE_CHARS
437d522f475Smrg    { "line2",		NULL,		NULL },
438d522f475Smrg#if OPT_RENDERFONT
439d522f475Smrg    { "render-font",	do_font_renderfont,NULL },
440d522f475Smrg#endif
441d522f475Smrg#if OPT_WIDE_CHARS
442d522f475Smrg    { "utf8-mode",	do_font_utf8_mode,NULL },
443e39b573cSmrg    { "utf8-fonts",	do_font_utf8_fonts,NULL },
444d522f475Smrg    { "utf8-title",	do_font_utf8_title,NULL },
445d522f475Smrg#endif
446d522f475Smrg#endif /* toggles for other font extensions */
447d522f475Smrg
448956cc18dSsnj#if OPT_ALLOW_XXX_OPS
449956cc18dSsnj    { "line3",		NULL,		NULL },
45020d2c4d2Smrg    { "allow-color-ops",do_allowColorOps,NULL },
451956cc18dSsnj    { "allow-font-ops",	do_allowFontOps,NULL },
452913cc679Smrg    { "allow-mouse-ops",do_allowMouseOps,NULL },
45320d2c4d2Smrg    { "allow-tcap-ops",	do_allowTcapOps,NULL },
454956cc18dSsnj    { "allow-title-ops",do_allowTitleOps,NULL },
455956cc18dSsnj    { "allow-window-ops",do_allowWindowOps,NULL },
456956cc18dSsnj#endif
457956cc18dSsnj
458d522f475Smrg    };
459d522f475Smrg
460d522f475Smrg#if OPT_TEK4014
461d522f475SmrgMenuEntry tekMenuEntries[] = {
462d522f475Smrg    { "tektextlarge",	do_tektextlarge, NULL },
463d522f475Smrg    { "tektext2",	do_tektext2,	NULL },
464d522f475Smrg    { "tektext3",	do_tektext3,	NULL },
465d522f475Smrg    { "tektextsmall",	do_tektextsmall, NULL },
466d522f475Smrg    { "line1",		NULL,		NULL },
467d522f475Smrg    { "tekpage",	do_tekpage,	NULL },
468d522f475Smrg    { "tekreset",	do_tekreset,	NULL },
469d522f475Smrg    { "tekcopy",	do_tekcopy,	NULL },
470d522f475Smrg    { "line2",		NULL,		NULL },
471d522f475Smrg    { "vtshow",		do_vtshow,	NULL },
472d522f475Smrg    { "vtmode",		do_vtmode,	NULL },
473d522f475Smrg    { "tekhide",	do_tekhide,	NULL }};
474d522f475Smrg#endif
475d522f475Smrg
476d522f475Smrgtypedef struct {
477d522f475Smrg    char *internal_name;
478d522f475Smrg    MenuEntry *entry_list;
479d522f475Smrg    Cardinal entry_len;
480d522f475Smrg} MenuHeader;
481d522f475Smrg
482d522f475Smrg    /* This table is ordered to correspond with MenuIndex */
483f2e35a3aSmrg#define DATA(name) { (char *)#name, name ## Entries, XtNumber(name ## Entries ) }
48401037d57Smrgstatic const MenuHeader menu_names[] = {
485f2e35a3aSmrg    DATA( mainMenu),
486f2e35a3aSmrg    DATA( vtMenu),
487f2e35a3aSmrg    DATA( fontMenu),
488d522f475Smrg#if OPT_TEK4014
489f2e35a3aSmrg    DATA( tekMenu),
490d522f475Smrg#endif
491f2e35a3aSmrg    { NULL, 0, 0 },
492d522f475Smrg};
493f2e35a3aSmrg#undef DATA
494d522f475Smrg/* *INDENT-ON* */
495d522f475Smrg
496d522f475Smrg/*
497d522f475Smrg * FIXME:  These are global data rather than in the xterm widget because they
498d522f475Smrg * are initialized before the widget is created.
499d522f475Smrg */
500d522f475Smrgtypedef struct {
501d522f475Smrg    Widget b;			/* the toolbar's buttons */
502d522f475Smrg    Widget w;			/* the popup shell activated by the button */
503d522f475Smrg    Cardinal entries;
504d522f475Smrg} MenuList;
505d522f475Smrg
506d522f475Smrgstatic MenuList vt_shell[NUM_POPUP_MENUS];
507d522f475Smrg
508d522f475Smrg#if OPT_TEK4014 && OPT_TOOLBAR
509d522f475Smrgstatic MenuList tek_shell[NUM_POPUP_MENUS];
510d522f475Smrg#endif
511d522f475Smrg
512d522f475Smrg/*
513d522f475Smrg * Returns a pointer to the MenuList entry that matches the popup menu.
514d522f475Smrg */
515d522f475Smrgstatic MenuList *
516f2e35a3aSmrgselect_menu(Widget w, MenuIndex num)
517d522f475Smrg{
518d522f475Smrg#if OPT_TEK4014 && OPT_TOOLBAR
519d522f475Smrg    while (w != 0) {
520d522f475Smrg	if (w == tekshellwidget) {
521d522f475Smrg	    return &tek_shell[num];
522d522f475Smrg	}
523d522f475Smrg	w = XtParent(w);
524d522f475Smrg    }
525f2e35a3aSmrg#else
526f2e35a3aSmrg    (void) w;
527d522f475Smrg#endif
528d522f475Smrg    return &vt_shell[num];
529d522f475Smrg}
530d522f475Smrg
531d522f475Smrg/*
532d522f475Smrg * Returns a pointer to the given popup menu shell
533d522f475Smrg */
534d522f475Smrgstatic Widget
535d522f475Smrgobtain_menu(Widget w, MenuIndex num)
536d522f475Smrg{
537d522f475Smrg    return select_menu(w, num)->w;
538d522f475Smrg}
539d522f475Smrg
540d522f475Smrg/*
541d522f475Smrg * Returns the number of entries in the given popup menu shell
542d522f475Smrg */
543d522f475Smrgstatic Cardinal
544d522f475Smrgsizeof_menu(Widget w, MenuIndex num)
545d522f475Smrg{
546d522f475Smrg    return select_menu(w, num)->entries;
547d522f475Smrg}
548d522f475Smrg
549d522f475Smrg/*
550e39b573cSmrg * Return an array of flags telling if a given menu item is never going to
551e39b573cSmrg * be used, so we can reduce the size of menus.
552d522f475Smrg */
553e39b573cSmrgstatic Boolean *
554e39b573cSmrgunusedEntries(XtermWidget xw, MenuIndex num)
555e39b573cSmrg{
556e39b573cSmrg    static Boolean result[XtNumber(mainMenuEntries)
557e39b573cSmrg			  + XtNumber(vtMenuEntries)
558e39b573cSmrg			  + XtNumber(fontMenuEntries)
559e39b573cSmrg#if OPT_TEK4014
560e39b573cSmrg			  + XtNumber(tekMenuEntries)
561e39b573cSmrg#endif
562e39b573cSmrg    ];
563e39b573cSmrg    TScreen *screen = TScreenOf(xw);
564d522f475Smrg
565e39b573cSmrg    memset(result, 0, sizeof(result));
566e39b573cSmrg    switch (num) {
567e39b573cSmrg    case mainMenu:
5680bd37d32Smrg#if OPT_MAXIMIZE
569e39b573cSmrg	if (resource.fullscreen > 1) {
570e39b573cSmrg	    result[mainMenu_fullscreen] = True;
571e39b573cSmrg	}
5720bd37d32Smrg#endif
573e39b573cSmrg#if OPT_NUM_LOCK
574e39b573cSmrg	if (!screen->alt_is_not_meta) {
575e39b573cSmrg	    result[mainMenu_alt_esc] = True;
576e39b573cSmrg	}
577e39b573cSmrg#endif
578e39b573cSmrg	if (!xtermHasPrinter(xw)) {
579e39b573cSmrg	    result[mainMenu_print] = True;
580e39b573cSmrg	    result[mainMenu_print_redir] = True;
581e39b573cSmrg	}
582e39b573cSmrg	if (screen->terminal_id < 200) {
583e39b573cSmrg	    result[mainMenu_8bit_ctrl] = True;
584e39b573cSmrg	}
585e39b573cSmrg#if !defined(SIGTSTP)
586e39b573cSmrg	result[mainMenu_suspend] = True;
587e39b573cSmrg#endif
588e39b573cSmrg#if !defined(SIGCONT)
589e39b573cSmrg	result[mainMenu_continue] = True;
590e39b573cSmrg#endif
591e39b573cSmrg#ifdef ALLOWLOGGING
592e39b573cSmrg	if (screen->inhibit & I_LOG) {
593e39b573cSmrg	    result[mainMenu_logging] = True;
594e39b573cSmrg	}
595e39b573cSmrg#endif
596e39b573cSmrg	if (screen->inhibit & I_SIGNAL) {
597e39b573cSmrg	    int n;
598e39b573cSmrg	    for (n = (int) mainMenu_suspend; n <= (int) mainMenu_quit; ++n) {
599e39b573cSmrg		result[n] = True;
600e39b573cSmrg	    }
601e39b573cSmrg	}
602e39b573cSmrg	break;
603e39b573cSmrg    case vtMenu:
604f2e35a3aSmrg#if !defined(NO_ACTIVE_ICON) && !OPT_TOOLBAR
605913cc679Smrg	if (!getIconicFont(screen)->fs || !screen->iconVwin.window) {
606e39b573cSmrg	    result[vtMenu_activeicon] = True;
607e39b573cSmrg	}
608e39b573cSmrg#endif /* NO_ACTIVE_ICON */
609e39b573cSmrg#if OPT_TEK4014
610e39b573cSmrg	if (screen->inhibit & I_TEK) {
611e39b573cSmrg	    int n;
612e39b573cSmrg	    for (n = (int) vtMenu_tekshow; n <= (int) vtMenu_vthide; ++n) {
613e39b573cSmrg		result[n] = True;
614e39b573cSmrg	    }
615e39b573cSmrg	}
616e39b573cSmrg#endif
617e39b573cSmrg	break;
618e39b573cSmrg    case fontMenu:
619e39b573cSmrg	break;
620e39b573cSmrg#if OPT_TEK4014
621e39b573cSmrg    case tekMenu:
622e39b573cSmrg	break;
623e39b573cSmrg#endif
624e39b573cSmrg    case noMenu:
625e39b573cSmrg	break;
626e39b573cSmrg    }
627e39b573cSmrg    return result;
628e39b573cSmrg}
629e39b573cSmrg
630f2e35a3aSmrg/*
631f2e35a3aSmrg * When using the toolbar configuration, some systems (seen with Solaris 11)
632f2e35a3aSmrg * give a warning that (Xt) cannot find a usable font-set.  This does not stop
633f2e35a3aSmrg * the toolbars from working - ignore for now.
634f2e35a3aSmrg */
635f2e35a3aSmrg#if OPT_TOOLBAR
636f2e35a3aSmrgstatic void
637f2e35a3aSmrgignoreWarning(
638f2e35a3aSmrg		 String p_name,
639f2e35a3aSmrg		 String p_type,
640f2e35a3aSmrg		 String p_class,
641f2e35a3aSmrg		 String p_default,
642f2e35a3aSmrg		 String *p_params,
643f2e35a3aSmrg		 Cardinal *p_num_params)
644f2e35a3aSmrg{
645f2e35a3aSmrg    (void) p_name;
646f2e35a3aSmrg    (void) p_type;
647f2e35a3aSmrg    (void) p_class;
648f2e35a3aSmrg    (void) p_default;
649f2e35a3aSmrg    (void) p_params;
650f2e35a3aSmrg    (void) p_num_params;
651f2e35a3aSmrg}
652f2e35a3aSmrg#endif
653f2e35a3aSmrg
654e39b573cSmrg/*
655e39b573cSmrg * create_menu - create a popup shell and stuff the menu into it.
656e39b573cSmrg */
657d522f475Smrgstatic Widget
658e39b573cSmrgcreate_menu(Widget w, XtermWidget xw, MenuIndex num)
659d522f475Smrg{
660d522f475Smrg    static XtCallbackRec cb[2] =
661d522f475Smrg    {
662d522f475Smrg	{NULL, NULL},
663d522f475Smrg	{NULL, NULL}};
664d522f475Smrg    static Arg arg =
665d522f475Smrg    {XtNcallback, (XtArgVal) cb};
666d522f475Smrg
667e39b573cSmrg    TScreen *screen = TScreenOf(xw);
66801037d57Smrg    const MenuHeader *data = &menu_names[num];
669d522f475Smrg    MenuList *list = select_menu(w, num);
670d522f475Smrg    struct _MenuEntry *entries = data->entry_list;
671956cc18dSsnj    Cardinal nentries = data->entry_len;
672d522f475Smrg#if !OPT_TOOLBAR
673f2e35a3aSmrg    char *saveLocale;
674d522f475Smrg#endif
675d522f475Smrg
676d522f475Smrg    if (screen->menu_item_bitmap == None) {
677d522f475Smrg	/*
678d522f475Smrg	 * we really want to do these dynamically
679d522f475Smrg	 */
680d522f475Smrg#define check_width 9
681d522f475Smrg#define check_height 8
682d522f475Smrg	static unsigned char check_bits[] =
683d522f475Smrg	{
684d522f475Smrg	    0x00, 0x01, 0x80, 0x01, 0xc0, 0x00, 0x60, 0x00,
685d522f475Smrg	    0x31, 0x00, 0x1b, 0x00, 0x0e, 0x00, 0x04, 0x00
686d522f475Smrg	};
687d522f475Smrg
688d522f475Smrg	screen->menu_item_bitmap =
689e39b573cSmrg	    XCreateBitmapFromData(XtDisplay(xw),
690e39b573cSmrg				  RootWindowOfScreen(XtScreen(xw)),
691d522f475Smrg				  (char *) check_bits, check_width, check_height);
692d522f475Smrg    }
693d522f475Smrg#if !OPT_TOOLBAR
694f2e35a3aSmrg    saveLocale = xtermSetLocale(LC_CTYPE, resource.menuLocale);
695d522f475Smrg    list->w = XtCreatePopupShell(data->internal_name,
696d522f475Smrg				 simpleMenuWidgetClass,
697d522f475Smrg				 toplevel,
698d522f475Smrg				 NULL, 0);
699ae137402Smrg    TRACE(("created popupShell(%s) widget %p, window %#lx\n",
70004b94745Smrg	   data->internal_name, (void *) list->w, XtWindow(list->w)));
701d522f475Smrg#endif
702d522f475Smrg    if (list->w != 0) {
703e39b573cSmrg	Boolean *unused = unusedEntries(xw, num);
704e39b573cSmrg	Cardinal n;
705f2e35a3aSmrg#if OPT_TOOLBAR
706f2e35a3aSmrg	Boolean useLocale = !strcmp(resource.menuLocale, "");
707f2e35a3aSmrg	XtErrorMsgHandler warningHandler = 0;
708f2e35a3aSmrg	if (!useLocale)
709f2e35a3aSmrg	    warningHandler = XtAppSetWarningMsgHandler(app_con, ignoreWarning);
710f2e35a3aSmrg#endif
711e39b573cSmrg
712e39b573cSmrg	list->entries = 0;
713e39b573cSmrg
714e39b573cSmrg	for (n = 0; n < nentries; ++n) {
715e39b573cSmrg	    if (!unused[n]) {
716e39b573cSmrg		cb[0].callback = (XtCallbackProc) entries[n].function;
7170bd37d32Smrg		cb[0].closure = (XtPointer) entries[n].name;
718e39b573cSmrg		entries[n].widget = XtCreateManagedWidget(entries[n].name,
719e39b573cSmrg							  (entries[n].function
720e39b573cSmrg							   ? smeBSBObjectClass
721e39b573cSmrg							   : smeLineObjectClass),
722e39b573cSmrg							  list->w,
723e39b573cSmrg							  &arg, (Cardinal) 1);
724ae137402Smrg		TRACE(("created menuEntry[%d] widget %p, window %#lx\n",
725ae137402Smrg		       n, (void *) entries[n].widget, XtWindow(entries[n].widget)));
726e39b573cSmrg		list->entries++;
727e39b573cSmrg	    }
728d522f475Smrg	}
729f2e35a3aSmrg#if OPT_TOOLBAR
730f2e35a3aSmrg	if (!useLocale)
731f2e35a3aSmrg	    XtAppSetWarningMsgHandler(app_con, warningHandler);
732f2e35a3aSmrg#endif
733d522f475Smrg    }
734d522f475Smrg#if !OPT_TOOLBAR
735f2e35a3aSmrg    xtermResetLocale(LC_CTYPE, saveLocale);
736d522f475Smrg#endif
737d522f475Smrg
738d522f475Smrg    /* do not realize at this point */
739d522f475Smrg    return list->w;
740d522f475Smrg}
741d522f475Smrg
742d522f475Smrgstatic MenuIndex
743d522f475SmrgindexOfMenu(String menuName)
744d522f475Smrg{
745d522f475Smrg    MenuIndex me;
746d522f475Smrg    switch (*menuName) {
747d522f475Smrg    case 'm':
748d522f475Smrg	me = mainMenu;
749d522f475Smrg	break;
750d522f475Smrg    case 'v':
751d522f475Smrg	me = vtMenu;
752d522f475Smrg	break;
753d522f475Smrg    case 'f':
754d522f475Smrg	me = fontMenu;
755d522f475Smrg	break;
756d522f475Smrg#if OPT_TEK4014
757d522f475Smrg    case 't':
758d522f475Smrg	me = tekMenu;
759d522f475Smrg	break;
760d522f475Smrg#endif
761d522f475Smrg    default:
762d522f475Smrg	me = noMenu;
763d522f475Smrg    }
764d522f475Smrg    return (me);
765d522f475Smrg}
766d522f475Smrg
767d522f475Smrg/* ARGSUSED */
768d522f475Smrgstatic Bool
769d522f475Smrgdomenu(Widget w,
770894e0ac8Smrg       XEvent *event GCC_UNUSED,
771894e0ac8Smrg       String *params,		/* mainMenu, vtMenu, or tekMenu */
772d522f475Smrg       Cardinal *param_count)	/* 0 or 1 */
773d522f475Smrg{
77420d2c4d2Smrg    XtermWidget xw = term;
77520d2c4d2Smrg    TScreen *screen = TScreenOf(xw);
776d522f475Smrg    MenuIndex me;
777d522f475Smrg    Bool created = False;
778d522f475Smrg    Widget mw;
779d522f475Smrg
780d522f475Smrg    if (*param_count != 1) {
78120d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
782d522f475Smrg	return False;
783d522f475Smrg    }
784d522f475Smrg
785d522f475Smrg    if ((me = indexOfMenu(params[0])) == noMenu) {
78620d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
787d522f475Smrg	return False;
788d522f475Smrg    }
789d522f475Smrg
790d522f475Smrg    if ((mw = obtain_menu(w, me)) == 0
791d522f475Smrg	|| sizeof_menu(w, me) == 0) {
79220d2c4d2Smrg	mw = create_menu(w, xw, me);
793d522f475Smrg	created = (mw != 0);
794d522f475Smrg    }
795d522f475Smrg    if (mw == 0)
796d522f475Smrg	return False;
797d522f475Smrg
798d522f475Smrg    TRACE(("domenu(%s) %s\n", params[0], created ? "create" : "update"));
799d522f475Smrg    switch (me) {
800d522f475Smrg    case mainMenu:
801d522f475Smrg	if (created) {
802d522f475Smrg	    update_toolbar();
803a1f3da82Smrg	    update_fullscreen();
804d522f475Smrg	    update_securekbd();
805d522f475Smrg	    update_allowsends();
806d522f475Smrg	    update_logging();
807d522f475Smrg	    update_print_redir();
808d522f475Smrg	    update_8bit_control();
809d522f475Smrg	    update_decbkm();
810d522f475Smrg	    update_num_lock();
811d522f475Smrg	    update_alt_esc();
812d522f475Smrg	    update_meta_esc();
813d522f475Smrg	    update_delete_del();
814d522f475Smrg	    update_keyboard_type();
8155307cd1aSmrg#if OPT_PRINT_ON_EXIT
8162e4f8982Smrg	    screen->write_error = !IsEmpty(resource.printFileOnXError);
817f2e35a3aSmrg	    SetItemSensitivity(mainMenuEntries[mainMenu_write_now].widget, True);
818e39b573cSmrg	    SetItemSensitivity(mainMenuEntries[mainMenu_write_error].widget, screen->write_error);
819d522f475Smrg#endif
820d522f475Smrg	}
821d522f475Smrg	break;
822d522f475Smrg
823d522f475Smrg    case vtMenu:
824d522f475Smrg	if (created) {
825d522f475Smrg	    update_scrollbar();
826d522f475Smrg	    update_jumpscroll();
827d522f475Smrg	    update_reversevideo();
828d522f475Smrg	    update_autowrap();
829d522f475Smrg	    update_reversewrap();
830d522f475Smrg	    update_autolinefeed();
831d522f475Smrg	    update_appcursor();
832d522f475Smrg	    update_appkeypad();
833d522f475Smrg	    update_scrollkey();
834d522f475Smrg	    update_scrollttyoutput();
835d522f475Smrg	    update_allow132();
836d522f475Smrg	    update_cursesemul();
837d522f475Smrg	    update_keepSelection();
838d522f475Smrg	    update_selectToClipboard();
839d522f475Smrg	    update_visualbell();
840d522f475Smrg	    update_poponbell();
841d522f475Smrg	    update_bellIsUrgent();
842d522f475Smrg	    update_cursorblink();
843d522f475Smrg	    update_altscreen();
844e0a2b6dfSmrg	    update_decsdm();	/* Sixel Display Mode */
845d522f475Smrg	    update_titeInhibit();
846d522f475Smrg#ifndef NO_ACTIVE_ICON
847e39b573cSmrg	    update_activeicon();
848d522f475Smrg#endif /* NO_ACTIVE_ICON */
849e0a2b6dfSmrg	    update_privatecolorregisters();
850d522f475Smrg	}
851d522f475Smrg	break;
852d522f475Smrg
853d522f475Smrg    case fontMenu:
854d522f475Smrg	if (created) {
855e39b573cSmrg	    int n;
856e39b573cSmrg
857d522f475Smrg	    set_menu_font(True);
858f2e35a3aSmrg	    for (n = fontMenu_font1; n <= fontMenu_font7; ++n) {
859e39b573cSmrg		if (IsEmpty(screen->menu_font_names[n][fNorm]))
860e39b573cSmrg		    SetItemSensitivity(fontMenuEntries[n].widget, False);
861e39b573cSmrg	    }
86201037d57Smrg	    update_font_escape();
863e39b573cSmrg	    update_menu_allowBoldFonts();
864d522f475Smrg#if OPT_BOX_CHARS
865d522f475Smrg	    update_font_boxchars();
86620d2c4d2Smrg	    update_font_packed();
86720d2c4d2Smrg	    SetItemSensitivity(
86820d2c4d2Smrg				  fontMenuEntries[fontMenu_font_packedfont].widget,
86920d2c4d2Smrg				  True);
870d522f475Smrg#endif
871d522f475Smrg#if OPT_DEC_SOFTFONT		/* FIXME: not implemented */
872d522f475Smrg	    update_font_loadable();
873d522f475Smrg	    SetItemSensitivity(
874d522f475Smrg				  fontMenuEntries[fontMenu_font_loadable].widget,
875d522f475Smrg				  False);
876d522f475Smrg#endif
877d522f475Smrg#if OPT_DEC_CHRSET
878d522f475Smrg	    update_font_doublesize();
87920d2c4d2Smrg	    if (TScreenOf(xw)->cache_doublesize == 0)
880d522f475Smrg		SetItemSensitivity(
881d522f475Smrg				      fontMenuEntries[fontMenu_font_doublesize].widget,
882d522f475Smrg				      False);
883d522f475Smrg#endif
884d522f475Smrg#if OPT_RENDERFONT
885d522f475Smrg	    update_font_renderfont();
886d522f475Smrg#endif
887d522f475Smrg#if OPT_WIDE_CHARS
888d522f475Smrg	    update_font_utf8_mode();
889e39b573cSmrg	    update_font_utf8_fonts();
890d522f475Smrg	    update_font_utf8_title();
891956cc18dSsnj#endif
892956cc18dSsnj#if OPT_ALLOW_XXX_OPS
89320d2c4d2Smrg	    update_menu_allowColorOps();
894956cc18dSsnj	    update_menu_allowFontOps();
895913cc679Smrg	    update_menu_allowMouseOps();
89620d2c4d2Smrg	    update_menu_allowTcapOps();
897956cc18dSsnj	    update_menu_allowTitleOps();
898956cc18dSsnj	    update_menu_allowWindowOps();
899956cc18dSsnj	    enable_allow_xxx_ops(!(screen->allowSendEvents));
900d522f475Smrg#endif
901d522f475Smrg	}
902894e0ac8Smrg#if OPT_TOOLBAR
903894e0ac8Smrg	/* menus for toolbar are initialized once only */
904894e0ac8Smrg	SetItemSensitivity(fontMenuEntries[fontMenu_fontsel].widget, True);
905894e0ac8Smrg#else
90620d2c4d2Smrg	FindFontSelection(xw, NULL, True);
90701037d57Smrg	SetItemSensitivity(fontMenuEntries[fontMenu_fontsel].widget,
90801037d57Smrg			   (screen->SelectFontName()
90901037d57Smrg			    ? True
91001037d57Smrg			    : False));
911894e0ac8Smrg#endif
912d522f475Smrg	break;
913d522f475Smrg
914d522f475Smrg#if OPT_TEK4014
915d522f475Smrg    case tekMenu:
916d522f475Smrg	if (created && tekWidget) {
91720d2c4d2Smrg	    set_tekfont_menu_item(TekScreenOf(tekWidget)->cur.fontsize, True);
918d522f475Smrg	    update_vtshow();
919d522f475Smrg	}
920d522f475Smrg	break;
921d522f475Smrg#endif
922d522f475Smrg    case noMenu:
923d522f475Smrg    default:
924d522f475Smrg	break;
925d522f475Smrg    }
926d522f475Smrg
927d522f475Smrg    return True;
928d522f475Smrg}
929d522f475Smrg
930d522f475Smrg/*
931d522f475Smrg * public interfaces
932d522f475Smrg */
933d522f475Smrg
934d522f475Smrgvoid
935d522f475SmrgHandleCreateMenu(Widget w,
936894e0ac8Smrg		 XEvent *event,
937894e0ac8Smrg		 String *params,	/* mainMenu, vtMenu, or tekMenu */
938d522f475Smrg		 Cardinal *param_count)		/* 0 or 1 */
939d522f475Smrg{
940d522f475Smrg    TRACE(("HandleCreateMenu\n"));
941d522f475Smrg    (void) domenu(w, event, params, param_count);
942d522f475Smrg}
943d522f475Smrg
944d522f475Smrgvoid
945d522f475SmrgHandlePopupMenu(Widget w,
946894e0ac8Smrg		XEvent *event,
947894e0ac8Smrg		String *params,	/* mainMenu, vtMenu, or tekMenu */
948d522f475Smrg		Cardinal *param_count)	/* 0 or 1 */
949d522f475Smrg{
950d522f475Smrg    TRACE(("HandlePopupMenu\n"));
951d522f475Smrg    if (domenu(w, event, params, param_count)) {
952e39b573cSmrg	XtermWidget xw = term;
953e39b573cSmrg	TScreen *screen = TScreenOf(xw);
954e39b573cSmrg
955d522f475Smrg#if OPT_TOOLBAR
956d522f475Smrg	w = select_menu(w, mainMenu)->w;
957d522f475Smrg#endif
958e39b573cSmrg	/*
959e39b573cSmrg	 * The action procedure in SimpleMenu.c, PositionMenu does not expect a
960e39b573cSmrg	 * key translation event when we are popping up a menu.  In particular,
961e39b573cSmrg	 * if the pointer is outside the menu, then the action procedure will
962e39b573cSmrg	 * fail in its attempt to determine the location of the pointer within
963e39b573cSmrg	 * the menu.  Anticipate that by warping the pointer into the menu when
964e39b573cSmrg	 * a key event is detected.
965e39b573cSmrg	 */
966e39b573cSmrg	switch (event->type) {
967e39b573cSmrg	case KeyPress:
968e39b573cSmrg	case KeyRelease:
969e39b573cSmrg	    XWarpPointer(screen->display, None, XtWindow(w), 0, 0, 0, 0, 0, 0);
970e39b573cSmrg	    break;
971e39b573cSmrg	default:
972e39b573cSmrg	    XtCallActionProc(w, "XawPositionSimpleMenu", event, params, 1);
973e39b573cSmrg	    break;
974e39b573cSmrg	}
975d522f475Smrg	XtCallActionProc(w, "MenuPopup", event, params, 1);
976d522f475Smrg    }
977d522f475Smrg}
978d522f475Smrg
979d522f475Smrg/*
980d522f475Smrg * private interfaces - keep out!
981d522f475Smrg */
982d522f475Smrg
983d522f475Smrg/* ARGSUSED */
984d522f475Smrgstatic void
985d522f475Smrghandle_send_signal(Widget gw GCC_UNUSED, int sig)
986d522f475Smrg{
987d522f475Smrg#ifndef VMS
988d522f475Smrg    TScreen *screen = TScreenOf(term);
989d522f475Smrg
990d522f475Smrg    if (hold_screen > 1)
991d522f475Smrg	hold_screen = 0;
992d522f475Smrg    if (screen->pid > 1)
993d522f475Smrg	kill_process_group(screen->pid, sig);
994d522f475Smrg#endif
995d522f475Smrg}
996d522f475Smrg
997f2e35a3aSmrg#if OPT_VT52_MODE
998f2e35a3aSmrgstatic void
999f2e35a3aSmrgDisableIfVT52(MenuEntry * menu, int which)
1000f2e35a3aSmrg{
1001f2e35a3aSmrg    Widget mi = menu[which].widget;
1002f2e35a3aSmrg    SetItemSensitivity(mi, TScreenOf(term)->vtXX_level != 0);
1003f2e35a3aSmrg}
1004f2e35a3aSmrg
1005f2e35a3aSmrg#else
1006f2e35a3aSmrg#define DisableIfVT52(which,val)	/* nothing */
1007f2e35a3aSmrg#endif
1008f2e35a3aSmrg
1009a1f3da82Smrgstatic void
1010a1f3da82SmrgUpdateMenuItem(
1011a1f3da82Smrg#if OPT_TRACE
1012a1f3da82Smrg		  const char *func,
1013a1f3da82Smrg#endif
1014a1f3da82Smrg		  MenuEntry * menu,
1015a1f3da82Smrg		  int which,
1016a1f3da82Smrg		  Bool val)
1017a1f3da82Smrg{
1018a1f3da82Smrg    static Arg menuArgs =
1019a1f3da82Smrg    {XtNleftBitmap, (XtArgVal) 0};
1020a1f3da82Smrg    Widget mi = menu[which].widget;
1021a1f3da82Smrg
1022a1f3da82Smrg    if (mi) {
1023a1f3da82Smrg	menuArgs.value = (XtArgVal) ((val)
1024a1f3da82Smrg				     ? TScreenOf(term)->menu_item_bitmap
1025a1f3da82Smrg				     : None);
1026a1f3da82Smrg	XtSetValues(mi, &menuArgs, (Cardinal) 1);
1027a1f3da82Smrg    }
102801037d57Smrg    TRACE(("%s(%d): %s\n", func, which, MtoS(val)));
1029a1f3da82Smrg}
1030a1f3da82Smrg
1031a1f3da82Smrgvoid
1032a1f3da82SmrgSetItemSensitivity(Widget mi, Bool val)
1033a1f3da82Smrg{
1034a1f3da82Smrg    static Arg menuArgs =
1035a1f3da82Smrg    {XtNsensitive, (XtArgVal) 0};
1036a1f3da82Smrg
1037a1f3da82Smrg    if (mi) {
1038a1f3da82Smrg	menuArgs.value = (XtArgVal) (val);
1039a1f3da82Smrg	XtSetValues(mi, &menuArgs, (Cardinal) 1);
1040a1f3da82Smrg    }
1041a1f3da82Smrg}
1042a1f3da82Smrg
1043d522f475Smrg/*
1044d522f475Smrg * action routines
1045d522f475Smrg */
1046d522f475Smrg
1047d522f475Smrgstatic void
1048d522f475Smrgdo_securekbd(Widget gw GCC_UNUSED,
1049d522f475Smrg	     XtPointer closure GCC_UNUSED,
1050d522f475Smrg	     XtPointer data GCC_UNUSED)
1051d522f475Smrg{
105220d2c4d2Smrg    XtermWidget xw = term;
105320d2c4d2Smrg    TScreen *screen = TScreenOf(xw);
1054d522f475Smrg    Time now = CurrentTime;	/* XXX - wrong */
1055d522f475Smrg
1056d522f475Smrg    if (screen->grabbedKbd) {
1057d522f475Smrg	XUngrabKeyboard(screen->display, now);
105820d2c4d2Smrg	ReverseVideo(xw);
1059d522f475Smrg	screen->grabbedKbd = False;
1060d522f475Smrg    } else {
1061d522f475Smrg	if (XGrabKeyboard(screen->display, XtWindow(CURRENT_EMU()),
1062d522f475Smrg			  True, GrabModeAsync, GrabModeAsync, now)
1063d522f475Smrg	    != GrabSuccess) {
106420d2c4d2Smrg	    Bell(xw, XkbBI_MinorError, 100);
1065d522f475Smrg	} else {
106620d2c4d2Smrg	    ReverseVideo(xw);
1067d522f475Smrg	    screen->grabbedKbd = True;
1068d522f475Smrg	}
1069d522f475Smrg    }
1070d522f475Smrg    update_securekbd();
1071d522f475Smrg}
1072d522f475Smrg
1073d522f475Smrg/* ARGSUSED */
1074d522f475Smrgvoid
1075d522f475SmrgHandleSecure(Widget w GCC_UNUSED,
1076894e0ac8Smrg	     XEvent *event GCC_UNUSED,	/* unused */
1077894e0ac8Smrg	     String *params GCC_UNUSED,		/* [0] = volume */
1078d522f475Smrg	     Cardinal *param_count GCC_UNUSED)	/* 0 or 1 */
1079d522f475Smrg{
1080d522f475Smrg    do_securekbd(vt_shell[mainMenu].w, (XtPointer) 0, (XtPointer) 0);
1081d522f475Smrg}
1082d522f475Smrg
1083d522f475Smrgstatic void
1084d522f475Smrgdo_allowsends(Widget gw GCC_UNUSED,
1085d522f475Smrg	      XtPointer closure GCC_UNUSED,
1086d522f475Smrg	      XtPointer data GCC_UNUSED)
1087d522f475Smrg{
1088d522f475Smrg    TScreen *screen = TScreenOf(term);
1089d522f475Smrg
1090956cc18dSsnj    ToggleFlag(screen->allowSendEvents);
1091d522f475Smrg    update_allowsends();
1092956cc18dSsnj#if OPT_ALLOW_XXX_OPS
1093956cc18dSsnj    enable_allow_xxx_ops(!(screen->allowSendEvents));
1094956cc18dSsnj#endif
1095d522f475Smrg}
1096d522f475Smrg
1097d522f475Smrgstatic void
1098d522f475Smrgdo_visualbell(Widget gw GCC_UNUSED,
1099d522f475Smrg	      XtPointer closure GCC_UNUSED,
1100d522f475Smrg	      XtPointer data GCC_UNUSED)
1101d522f475Smrg{
1102d522f475Smrg    TScreen *screen = TScreenOf(term);
1103d522f475Smrg
1104956cc18dSsnj    ToggleFlag(screen->visualbell);
1105d522f475Smrg    update_visualbell();
1106d522f475Smrg}
1107d522f475Smrg
1108d522f475Smrgstatic void
1109d522f475Smrgdo_bellIsUrgent(Widget gw GCC_UNUSED,
1110d522f475Smrg		XtPointer closure GCC_UNUSED,
1111d522f475Smrg		XtPointer data GCC_UNUSED)
1112d522f475Smrg{
1113d522f475Smrg    TScreen *screen = TScreenOf(term);
1114d522f475Smrg
1115956cc18dSsnj    ToggleFlag(screen->bellIsUrgent);
1116d522f475Smrg    update_bellIsUrgent();
1117d522f475Smrg}
1118d522f475Smrg
1119d522f475Smrgstatic void
1120d522f475Smrgdo_poponbell(Widget gw GCC_UNUSED,
1121d522f475Smrg	     XtPointer closure GCC_UNUSED,
1122d522f475Smrg	     XtPointer data GCC_UNUSED)
1123d522f475Smrg{
1124d522f475Smrg    TScreen *screen = TScreenOf(term);
1125d522f475Smrg
1126956cc18dSsnj    ToggleFlag(screen->poponbell);
1127d522f475Smrg    update_poponbell();
1128d522f475Smrg}
1129d522f475Smrg
1130d522f475Smrg#ifdef ALLOWLOGGING
1131d522f475Smrgstatic void
1132d522f475Smrgdo_logging(Widget gw GCC_UNUSED,
1133d522f475Smrg	   XtPointer closure GCC_UNUSED,
1134d522f475Smrg	   XtPointer data GCC_UNUSED)
1135d522f475Smrg{
113620d2c4d2Smrg    XtermWidget xw = term;
113720d2c4d2Smrg    TScreen *screen = TScreenOf(xw);
1138d522f475Smrg
1139d522f475Smrg    if (screen->logging) {
114020d2c4d2Smrg	CloseLog(xw);
1141d522f475Smrg    } else {
114220d2c4d2Smrg	StartLog(xw);
1143d522f475Smrg    }
1144d522f475Smrg    /* update_logging done by CloseLog and StartLog */
1145d522f475Smrg}
1146d522f475Smrg#endif
1147d522f475Smrg
11485307cd1aSmrg#if OPT_PRINT_ON_EXIT
1149e39b573cSmrgstatic void
1150e39b573cSmrgdo_write_now(Widget gw GCC_UNUSED,
1151e39b573cSmrg	     XtPointer closure GCC_UNUSED,
1152e39b573cSmrg	     XtPointer data GCC_UNUSED)
1153e39b573cSmrg{
1154e39b573cSmrg    XtermWidget xw = term;
1155e39b573cSmrg
1156e39b573cSmrg    xtermPrintImmediately(xw,
1157e39b573cSmrg			  (IsEmpty(resource.printFileNow)
1158894e0ac8Smrg			   ? (String) "XTerm"
1159e39b573cSmrg			   : resource.printFileNow),
1160e39b573cSmrg			  resource.printOptsNow,
1161e39b573cSmrg			  resource.printModeNow);
1162e39b573cSmrg}
1163e39b573cSmrg
1164f2e35a3aSmrgvoid
1165f2e35a3aSmrgHandlePrintImmediate(Widget w GCC_UNUSED,
1166f2e35a3aSmrg		     XEvent *event GCC_UNUSED,
1167f2e35a3aSmrg		     String *params GCC_UNUSED,
1168f2e35a3aSmrg		     Cardinal *param_count GCC_UNUSED)
1169f2e35a3aSmrg{
1170f2e35a3aSmrg    do_write_now((Widget) 0, (XtPointer) 0, (XtPointer) 0);
1171f2e35a3aSmrg}
1172f2e35a3aSmrg
1173e39b573cSmrgstatic void
1174e39b573cSmrgdo_write_error(Widget gw GCC_UNUSED,
1175e39b573cSmrg	       XtPointer closure GCC_UNUSED,
1176e39b573cSmrg	       XtPointer data GCC_UNUSED)
1177e39b573cSmrg{
1178e39b573cSmrg    XtermWidget xw = term;
1179e39b573cSmrg
1180e39b573cSmrg    if (IsEmpty(resource.printFileOnXError)) {
1181e39b573cSmrg	resource.printFileOnXError = "XTermError";
1182e39b573cSmrg    }
1183e39b573cSmrg    TScreenOf(xw)->write_error = (Boolean) (!TScreenOf(xw)->write_error);
1184e39b573cSmrg    update_write_error();
1185e39b573cSmrg}
1186f2e35a3aSmrg
1187f2e35a3aSmrgvoid
1188f2e35a3aSmrgHandlePrintOnError(Widget w GCC_UNUSED,
1189f2e35a3aSmrg		   XEvent *event GCC_UNUSED,
1190f2e35a3aSmrg		   String *params GCC_UNUSED,
1191f2e35a3aSmrg		   Cardinal *param_count GCC_UNUSED)
1192f2e35a3aSmrg{
1193f2e35a3aSmrg    do_write_error((Widget) 0, (XtPointer) 0, (XtPointer) 0);
1194f2e35a3aSmrg}
1195e39b573cSmrg#endif
1196e39b573cSmrg
1197d522f475Smrgstatic void
1198d522f475Smrgdo_print(Widget gw GCC_UNUSED,
1199d522f475Smrg	 XtPointer closure GCC_UNUSED,
1200d522f475Smrg	 XtPointer data GCC_UNUSED)
1201d522f475Smrg{
120220d2c4d2Smrg    xtermPrintScreen(term, True, getPrinterFlags(term, NULL, 0));
1203d522f475Smrg}
1204d522f475Smrg
1205d522f475Smrgstatic void
1206d522f475Smrgdo_print_redir(Widget gw GCC_UNUSED,
1207d522f475Smrg	       XtPointer closure GCC_UNUSED,
1208d522f475Smrg	       XtPointer data GCC_UNUSED)
1209d522f475Smrg{
1210e39b573cSmrg    setPrinterControlMode(term,
1211e39b573cSmrg			  (PrinterOf(TScreenOf(term)).printer_controlmode
1212e39b573cSmrg			   ? 0
1213e39b573cSmrg			   : 2));
1214d522f475Smrg}
1215d522f475Smrg
12162e4f8982Smrg#if OPT_SCREEN_DUMPS
12172e4f8982Smrgstatic void
12182e4f8982Smrgdo_dump_html(Widget gw GCC_UNUSED,
12192e4f8982Smrg	     XtPointer closure GCC_UNUSED,
12202e4f8982Smrg	     XtPointer data GCC_UNUSED)
12212e4f8982Smrg{
12222e4f8982Smrg    xtermDumpHtml(term);
12232e4f8982Smrg}
12242e4f8982Smrg
12252e4f8982Smrgstatic void
12262e4f8982Smrgdo_dump_svg(Widget gw GCC_UNUSED,
12272e4f8982Smrg	    XtPointer closure GCC_UNUSED,
12282e4f8982Smrg	    XtPointer data GCC_UNUSED)
12292e4f8982Smrg{
12302e4f8982Smrg    xtermDumpSvg(term);
12312e4f8982Smrg}
12322e4f8982Smrg#endif
12332e4f8982Smrg
1234d522f475Smrgstatic void
1235d522f475Smrgdo_redraw(Widget gw GCC_UNUSED,
1236d522f475Smrg	  XtPointer closure GCC_UNUSED,
1237d522f475Smrg	  XtPointer data GCC_UNUSED)
1238d522f475Smrg{
1239d522f475Smrg    Redraw();
1240d522f475Smrg}
1241d522f475Smrg
1242d522f475Smrgvoid
1243d522f475Smrgshow_8bit_control(Bool value)
1244d522f475Smrg{
124520d2c4d2Smrg    if (TScreenOf(term)->control_eight_bits != value) {
124620d2c4d2Smrg	TScreenOf(term)->control_eight_bits = (Boolean) value;
1247d522f475Smrg	update_8bit_control();
1248d522f475Smrg    }
1249d522f475Smrg}
1250d522f475Smrg
1251d522f475Smrgstatic void
1252d522f475Smrgdo_8bit_control(Widget gw GCC_UNUSED,
1253d522f475Smrg		XtPointer closure GCC_UNUSED,
1254d522f475Smrg		XtPointer data GCC_UNUSED)
1255d522f475Smrg{
125620d2c4d2Smrg    show_8bit_control(!TScreenOf(term)->control_eight_bits);
1257d522f475Smrg}
1258d522f475Smrg
1259d522f475Smrgstatic void
1260d522f475Smrgdo_backarrow(Widget gw GCC_UNUSED,
1261d522f475Smrg	     XtPointer closure GCC_UNUSED,
1262d522f475Smrg	     XtPointer data GCC_UNUSED)
1263d522f475Smrg{
1264d522f475Smrg    term->keyboard.flags ^= MODE_DECBKM;
1265d522f475Smrg    update_decbkm();
1266d522f475Smrg}
1267d522f475Smrg
1268d522f475Smrg#if OPT_NUM_LOCK
1269d522f475Smrgstatic void
1270d522f475Smrgdo_num_lock(Widget gw GCC_UNUSED,
1271d522f475Smrg	    XtPointer closure GCC_UNUSED,
1272d522f475Smrg	    XtPointer data GCC_UNUSED)
1273d522f475Smrg{
1274956cc18dSsnj    ToggleFlag(term->misc.real_NumLock);
1275d522f475Smrg    update_num_lock();
1276d522f475Smrg}
1277d522f475Smrg
1278d522f475Smrgstatic void
1279d522f475Smrgdo_alt_esc(Widget gw GCC_UNUSED,
1280d522f475Smrg	   XtPointer closure GCC_UNUSED,
1281d522f475Smrg	   XtPointer data GCC_UNUSED)
1282d522f475Smrg{
128320d2c4d2Smrg    ToggleFlag(TScreenOf(term)->alt_sends_esc);
1284d522f475Smrg    update_alt_esc();
1285d522f475Smrg}
1286d522f475Smrg
1287d522f475Smrgstatic void
1288d522f475Smrgdo_meta_esc(Widget gw GCC_UNUSED,
1289d522f475Smrg	    XtPointer closure GCC_UNUSED,
1290d522f475Smrg	    XtPointer data GCC_UNUSED)
1291d522f475Smrg{
129220d2c4d2Smrg    ToggleFlag(TScreenOf(term)->meta_sends_esc);
1293d522f475Smrg    update_meta_esc();
1294d522f475Smrg}
1295d522f475Smrg#endif
1296d522f475Smrg
1297d522f475Smrgstatic void
1298d522f475Smrgdo_delete_del(Widget gw GCC_UNUSED,
1299d522f475Smrg	      XtPointer closure GCC_UNUSED,
1300d522f475Smrg	      XtPointer data GCC_UNUSED)
1301d522f475Smrg{
1302d522f475Smrg    if (xtermDeleteIsDEL(term))
130320d2c4d2Smrg	TScreenOf(term)->delete_is_del = False;
1304d522f475Smrg    else
130520d2c4d2Smrg	TScreenOf(term)->delete_is_del = True;
1306d522f475Smrg    update_delete_del();
1307d522f475Smrg}
1308d522f475Smrg
1309d522f475Smrgstatic void
1310d522f475Smrgdo_old_fkeys(Widget gw GCC_UNUSED,
1311d522f475Smrg	     XtPointer closure GCC_UNUSED,
1312d522f475Smrg	     XtPointer data GCC_UNUSED)
1313d522f475Smrg{
1314d522f475Smrg    toggle_keyboard_type(term, keyboardIsLegacy);
1315d522f475Smrg}
1316d522f475Smrg
1317d522f475Smrg#if OPT_HP_FUNC_KEYS
1318d522f475Smrgstatic void
1319d522f475Smrgdo_hp_fkeys(Widget gw GCC_UNUSED,
1320d522f475Smrg	    XtPointer closure GCC_UNUSED,
1321d522f475Smrg	    XtPointer data GCC_UNUSED)
1322d522f475Smrg{
1323d522f475Smrg    toggle_keyboard_type(term, keyboardIsHP);
1324d522f475Smrg}
1325d522f475Smrg#endif
1326d522f475Smrg
1327d522f475Smrg#if OPT_SCO_FUNC_KEYS
1328d522f475Smrgstatic void
1329d522f475Smrgdo_sco_fkeys(Widget gw GCC_UNUSED,
1330d522f475Smrg	     XtPointer closure GCC_UNUSED,
1331d522f475Smrg	     XtPointer data GCC_UNUSED)
1332d522f475Smrg{
1333d522f475Smrg    toggle_keyboard_type(term, keyboardIsSCO);
1334d522f475Smrg}
1335d522f475Smrg#endif
1336d522f475Smrg
1337d522f475Smrg#if OPT_SUN_FUNC_KEYS
1338d522f475Smrgstatic void
1339d522f475Smrgdo_sun_fkeys(Widget gw GCC_UNUSED,
1340d522f475Smrg	     XtPointer closure GCC_UNUSED,
1341d522f475Smrg	     XtPointer data GCC_UNUSED)
1342d522f475Smrg{
1343d522f475Smrg    toggle_keyboard_type(term, keyboardIsSun);
1344d522f475Smrg}
1345d522f475Smrg#endif
1346d522f475Smrg
1347d522f475Smrg#if OPT_SUNPC_KBD
1348d522f475Smrg/*
1349d522f475Smrg * This really means "Sun/PC keyboard emulating VT220".
1350d522f475Smrg */
1351d522f475Smrgstatic void
1352d522f475Smrgdo_sun_kbd(Widget gw GCC_UNUSED,
1353d522f475Smrg	   XtPointer closure GCC_UNUSED,
1354d522f475Smrg	   XtPointer data GCC_UNUSED)
1355d522f475Smrg{
1356d522f475Smrg    toggle_keyboard_type(term, keyboardIsVT220);
1357d522f475Smrg}
1358d522f475Smrg#endif
1359d522f475Smrg
1360d522f475Smrg#if OPT_TCAP_FKEYS
1361d522f475Smrgstatic void
1362d522f475Smrgdo_tcap_fkeys(Widget gw GCC_UNUSED,
1363d522f475Smrg	      XtPointer closure GCC_UNUSED,
1364d522f475Smrg	      XtPointer data GCC_UNUSED)
1365d522f475Smrg{
1366d522f475Smrg    toggle_keyboard_type(term, keyboardIsTermcap);
1367d522f475Smrg}
1368d522f475Smrg#endif
1369d522f475Smrg
1370d522f475Smrg/*
1371d522f475Smrg * The following cases use the pid instead of the process group so that we
1372d522f475Smrg * don't get hosed by programs that change their process group
1373d522f475Smrg */
1374d522f475Smrg
1375d522f475Smrg/* ARGSUSED */
1376d522f475Smrgstatic void
1377d522f475Smrgdo_suspend(Widget gw,
1378d522f475Smrg	   XtPointer closure GCC_UNUSED,
1379d522f475Smrg	   XtPointer data GCC_UNUSED)
1380d522f475Smrg{
1381d522f475Smrg#if defined(SIGTSTP)
1382d522f475Smrg    handle_send_signal(gw, SIGTSTP);
1383d522f475Smrg#endif
1384d522f475Smrg}
1385d522f475Smrg
1386d522f475Smrg/* ARGSUSED */
1387d522f475Smrgstatic void
1388d522f475Smrgdo_continue(Widget gw,
1389d522f475Smrg	    XtPointer closure GCC_UNUSED,
1390d522f475Smrg	    XtPointer data GCC_UNUSED)
1391d522f475Smrg{
1392d522f475Smrg#if defined(SIGCONT)
1393d522f475Smrg    handle_send_signal(gw, SIGCONT);
1394d522f475Smrg#endif
1395d522f475Smrg}
1396d522f475Smrg
1397d522f475Smrg/* ARGSUSED */
1398d522f475Smrgstatic void
1399d522f475Smrgdo_interrupt(Widget gw,
1400d522f475Smrg	     XtPointer closure GCC_UNUSED,
1401d522f475Smrg	     XtPointer data GCC_UNUSED)
1402d522f475Smrg{
1403d522f475Smrg    handle_send_signal(gw, SIGINT);
1404d522f475Smrg}
1405d522f475Smrg
1406d522f475Smrg/* ARGSUSED */
1407d522f475Smrgvoid
1408d522f475Smrgdo_hangup(Widget gw,
1409d522f475Smrg	  XtPointer closure GCC_UNUSED,
1410d522f475Smrg	  XtPointer data GCC_UNUSED)
1411d522f475Smrg{
1412d522f475Smrg    handle_send_signal(gw, SIGHUP);
1413d522f475Smrg}
1414d522f475Smrg
1415d522f475Smrg/* ARGSUSED */
1416d522f475Smrgstatic void
1417d522f475Smrgdo_terminate(Widget gw,
1418d522f475Smrg	     XtPointer closure GCC_UNUSED,
1419d522f475Smrg	     XtPointer data GCC_UNUSED)
1420d522f475Smrg{
1421d522f475Smrg    handle_send_signal(gw, SIGTERM);
1422d522f475Smrg}
1423d522f475Smrg
1424d522f475Smrg/* ARGSUSED */
1425d522f475Smrgstatic void
1426d522f475Smrgdo_kill(Widget gw,
1427d522f475Smrg	XtPointer closure GCC_UNUSED,
1428d522f475Smrg	XtPointer data GCC_UNUSED)
1429d522f475Smrg{
1430d522f475Smrg    handle_send_signal(gw, SIGKILL);
1431d522f475Smrg}
1432d522f475Smrg
1433d522f475Smrgstatic void
1434d522f475Smrgdo_quit(Widget gw GCC_UNUSED,
1435d522f475Smrg	XtPointer closure GCC_UNUSED,
1436d522f475Smrg	XtPointer data GCC_UNUSED)
1437d522f475Smrg{
143804b94745Smrg    Cleanup(ERROR_MISC);
1439d522f475Smrg}
1440d522f475Smrg
1441d522f475Smrg/*
1442d522f475Smrg * vt menu callbacks
1443d522f475Smrg */
1444d522f475Smrg
1445d522f475Smrgstatic void
1446d522f475Smrgdo_scrollbar(Widget gw GCC_UNUSED,
1447d522f475Smrg	     XtPointer closure GCC_UNUSED,
1448d522f475Smrg	     XtPointer data GCC_UNUSED)
1449d522f475Smrg{
1450d522f475Smrg    ToggleScrollBar(term);
1451d522f475Smrg}
1452d522f475Smrg
1453d522f475Smrgstatic void
1454d522f475Smrgdo_jumpscroll(Widget gw GCC_UNUSED,
1455d522f475Smrg	      XtPointer closure GCC_UNUSED,
1456d522f475Smrg	      XtPointer data GCC_UNUSED)
1457d522f475Smrg{
1458d522f475Smrg    TScreen *screen = TScreenOf(term);
1459d522f475Smrg
1460d522f475Smrg    term->flags ^= SMOOTHSCROLL;
1461d522f475Smrg    if (term->flags & SMOOTHSCROLL) {
1462d522f475Smrg	screen->jumpscroll = False;
1463d522f475Smrg	if (screen->scroll_amt)
1464d522f475Smrg	    FlushScroll(term);
1465d522f475Smrg    } else {
1466d522f475Smrg	screen->jumpscroll = True;
1467d522f475Smrg    }
1468d522f475Smrg    update_jumpscroll();
1469d522f475Smrg}
1470d522f475Smrg
1471d522f475Smrgstatic void
1472d522f475Smrgdo_reversevideo(Widget gw GCC_UNUSED,
1473d522f475Smrg		XtPointer closure GCC_UNUSED,
1474d522f475Smrg		XtPointer data GCC_UNUSED)
1475d522f475Smrg{
1476d522f475Smrg    ReverseVideo(term);
1477d522f475Smrg}
1478d522f475Smrg
1479d522f475Smrgstatic void
1480d522f475Smrgdo_autowrap(Widget gw GCC_UNUSED,
1481d522f475Smrg	    XtPointer closure GCC_UNUSED,
1482d522f475Smrg	    XtPointer data GCC_UNUSED)
1483d522f475Smrg{
1484d522f475Smrg    term->flags ^= WRAPAROUND;
1485d522f475Smrg    update_autowrap();
1486d522f475Smrg}
1487d522f475Smrg
1488d522f475Smrgstatic void
1489d522f475Smrgdo_reversewrap(Widget gw GCC_UNUSED,
1490d522f475Smrg	       XtPointer closure GCC_UNUSED,
1491d522f475Smrg	       XtPointer data GCC_UNUSED)
1492d522f475Smrg{
1493d522f475Smrg    term->flags ^= REVERSEWRAP;
1494d522f475Smrg    update_reversewrap();
1495d522f475Smrg}
1496d522f475Smrg
1497d522f475Smrgstatic void
1498d522f475Smrgdo_autolinefeed(Widget gw GCC_UNUSED,
1499d522f475Smrg		XtPointer closure GCC_UNUSED,
1500d522f475Smrg		XtPointer data GCC_UNUSED)
1501d522f475Smrg{
1502d522f475Smrg    term->flags ^= LINEFEED;
1503d522f475Smrg    update_autolinefeed();
1504d522f475Smrg}
1505d522f475Smrg
1506d522f475Smrgstatic void
1507d522f475Smrgdo_appcursor(Widget gw GCC_UNUSED,
1508d522f475Smrg	     XtPointer closure GCC_UNUSED,
1509d522f475Smrg	     XtPointer data GCC_UNUSED)
1510d522f475Smrg{
1511d522f475Smrg    term->keyboard.flags ^= MODE_DECCKM;
1512d522f475Smrg    update_appcursor();
1513d522f475Smrg}
1514d522f475Smrg
1515d522f475Smrgstatic void
1516d522f475Smrgdo_appkeypad(Widget gw GCC_UNUSED,
1517d522f475Smrg	     XtPointer closure GCC_UNUSED,
1518d522f475Smrg	     XtPointer data GCC_UNUSED)
1519d522f475Smrg{
1520d522f475Smrg    term->keyboard.flags ^= MODE_DECKPAM;
1521d522f475Smrg    update_appkeypad();
1522d522f475Smrg}
1523d522f475Smrg
1524d522f475Smrgstatic void
1525d522f475Smrgdo_scrollkey(Widget gw GCC_UNUSED,
1526d522f475Smrg	     XtPointer closure GCC_UNUSED,
1527d522f475Smrg	     XtPointer data GCC_UNUSED)
1528d522f475Smrg{
1529d522f475Smrg    TScreen *screen = TScreenOf(term);
1530d522f475Smrg
1531956cc18dSsnj    ToggleFlag(screen->scrollkey);
1532d522f475Smrg    update_scrollkey();
1533d522f475Smrg}
1534d522f475Smrg
1535d522f475Smrgstatic void
1536d522f475Smrgdo_scrollttyoutput(Widget gw GCC_UNUSED,
1537d522f475Smrg		   XtPointer closure GCC_UNUSED,
1538d522f475Smrg		   XtPointer data GCC_UNUSED)
1539d522f475Smrg{
1540d522f475Smrg    TScreen *screen = TScreenOf(term);
1541d522f475Smrg
1542956cc18dSsnj    ToggleFlag(screen->scrollttyoutput);
1543d522f475Smrg    update_scrollttyoutput();
1544d522f475Smrg}
1545d522f475Smrg
1546f2e35a3aSmrg#if OPT_MENU_KEEPCLIPBOARD
1547f2e35a3aSmrgvoid
1548f2e35a3aSmrgupdate_keepClipboard(void)
1549f2e35a3aSmrg{
1550f2e35a3aSmrg    UpdateCheckbox("update_keepClipboard",
1551f2e35a3aSmrg		   vtMenuEntries,
1552f2e35a3aSmrg		   vtMenu_keepClipboard,
1553f2e35a3aSmrg		   TScreenOf(term)->keepClipboard);
1554f2e35a3aSmrg}
1555f2e35a3aSmrg#endif
1556f2e35a3aSmrg
15572e4f8982Smrgstatic void
15582e4f8982Smrgdo_keepClipboard(Widget gw GCC_UNUSED,
15592e4f8982Smrg		 XtPointer closure GCC_UNUSED,
15602e4f8982Smrg		 XtPointer data GCC_UNUSED)
15612e4f8982Smrg{
15622e4f8982Smrg    TScreen *screen = TScreenOf(term);
15632e4f8982Smrg
15642e4f8982Smrg    ToggleFlag(screen->keepClipboard);
15652e4f8982Smrg    update_keepClipboard();
15662e4f8982Smrg}
15672e4f8982Smrg
1568d522f475Smrgstatic void
1569d522f475Smrgdo_keepSelection(Widget gw GCC_UNUSED,
1570d522f475Smrg		 XtPointer closure GCC_UNUSED,
1571d522f475Smrg		 XtPointer data GCC_UNUSED)
1572d522f475Smrg{
1573d522f475Smrg    TScreen *screen = TScreenOf(term);
1574d522f475Smrg
1575956cc18dSsnj    ToggleFlag(screen->keepSelection);
1576d522f475Smrg    update_keepSelection();
1577d522f475Smrg}
1578d522f475Smrg
1579d522f475Smrgstatic void
1580d522f475Smrgdo_selectClipboard(Widget gw GCC_UNUSED,
1581d522f475Smrg		   XtPointer closure GCC_UNUSED,
1582d522f475Smrg		   XtPointer data GCC_UNUSED)
1583d522f475Smrg{
1584d522f475Smrg    TScreen *screen = TScreenOf(term);
1585d522f475Smrg
1586956cc18dSsnj    ToggleFlag(screen->selectToClipboard);
1587d522f475Smrg    update_selectToClipboard();
1588d522f475Smrg}
1589d522f475Smrg
1590d522f475Smrgstatic void
1591d522f475Smrgdo_allow132(Widget gw GCC_UNUSED,
1592d522f475Smrg	    XtPointer closure GCC_UNUSED,
1593d522f475Smrg	    XtPointer data GCC_UNUSED)
1594d522f475Smrg{
1595d522f475Smrg    TScreen *screen = TScreenOf(term);
1596d522f475Smrg
1597956cc18dSsnj    ToggleFlag(screen->c132);
1598d522f475Smrg    update_allow132();
1599d522f475Smrg}
1600d522f475Smrg
1601d522f475Smrgstatic void
1602d522f475Smrgdo_cursesemul(Widget gw GCC_UNUSED,
1603d522f475Smrg	      XtPointer closure GCC_UNUSED,
1604d522f475Smrg	      XtPointer data GCC_UNUSED)
1605d522f475Smrg{
1606d522f475Smrg    TScreen *screen = TScreenOf(term);
1607d522f475Smrg
1608956cc18dSsnj    ToggleFlag(screen->curses);
1609d522f475Smrg    update_cursesemul();
1610d522f475Smrg}
1611d522f475Smrg
1612d522f475Smrgstatic void
1613d522f475Smrgdo_marginbell(Widget gw GCC_UNUSED,
1614d522f475Smrg	      XtPointer closure GCC_UNUSED,
1615d522f475Smrg	      XtPointer data GCC_UNUSED)
1616d522f475Smrg{
1617d522f475Smrg    TScreen *screen = TScreenOf(term);
1618d522f475Smrg
1619a1f3da82Smrg    if ((ToggleFlag(screen->marginbell)) == 0)
162020d2c4d2Smrg	screen->bellArmed = -1;
1621d522f475Smrg    update_marginbell();
1622d522f475Smrg}
1623d522f475Smrg
1624d522f475Smrg#if OPT_TEK4014
1625d522f475Smrgstatic void
1626d522f475Smrghandle_tekshow(Widget gw GCC_UNUSED, Bool allowswitch)
1627d522f475Smrg{
162820d2c4d2Smrg    XtermWidget xw = term;
162920d2c4d2Smrg    TScreen *screen = TScreenOf(xw);
1630d522f475Smrg
1631d522f475Smrg    TRACE(("Show tek-window\n"));
163220d2c4d2Smrg    if (!TEK4014_SHOWN(xw)) {	/* not showing, turn on */
1633d522f475Smrg	set_tek_visibility(True);
1634d522f475Smrg    } else if (screen->Vshow || allowswitch) {	/* is showing, turn off */
1635d522f475Smrg	set_tek_visibility(False);
1636d522f475Smrg	end_tek_mode();		/* WARNING: this does a longjmp */
1637d522f475Smrg    } else
163820d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
1639d522f475Smrg}
1640d522f475Smrg
1641d522f475Smrg/* ARGSUSED */
1642d522f475Smrgstatic void
1643d522f475Smrgdo_tekshow(Widget gw,
1644d522f475Smrg	   XtPointer closure GCC_UNUSED,
1645d522f475Smrg	   XtPointer data GCC_UNUSED)
1646d522f475Smrg{
1647d522f475Smrg    handle_tekshow(gw, True);
1648d522f475Smrg}
1649d522f475Smrg
1650d522f475Smrg/* ARGSUSED */
1651d522f475Smrgstatic void
1652d522f475Smrgdo_tekonoff(Widget gw,
1653d522f475Smrg	    XtPointer closure GCC_UNUSED,
1654d522f475Smrg	    XtPointer data GCC_UNUSED)
1655d522f475Smrg{
1656d522f475Smrg    handle_tekshow(gw, False);
1657d522f475Smrg}
1658d522f475Smrg#endif /* OPT_TEK4014 */
1659d522f475Smrg
1660d522f475Smrg#if OPT_BLINK_CURS
1661d522f475Smrg/* ARGSUSED */
1662d522f475Smrgstatic void
1663d522f475Smrgdo_cursorblink(Widget gw GCC_UNUSED,
1664d522f475Smrg	       XtPointer closure GCC_UNUSED,
1665d522f475Smrg	       XtPointer data GCC_UNUSED)
1666d522f475Smrg{
1667f2e35a3aSmrg    ToggleCursorBlink(term);
1668d522f475Smrg}
1669d522f475Smrg#endif
1670d522f475Smrg
1671d522f475Smrg/* ARGSUSED */
1672d522f475Smrgstatic void
1673d522f475Smrgdo_altscreen(Widget gw GCC_UNUSED,
1674d522f475Smrg	     XtPointer closure GCC_UNUSED,
1675d522f475Smrg	     XtPointer data GCC_UNUSED)
1676d522f475Smrg{
1677d522f475Smrg    ToggleAlternate(term);
1678d522f475Smrg}
1679d522f475Smrg
1680d522f475Smrg/* ARGSUSED */
1681d522f475Smrgstatic void
1682d522f475Smrgdo_titeInhibit(Widget gw GCC_UNUSED,
1683d522f475Smrg	       XtPointer closure GCC_UNUSED,
1684d522f475Smrg	       XtPointer data GCC_UNUSED)
1685d522f475Smrg{
1686956cc18dSsnj    ToggleFlag(term->misc.titeInhibit);
1687d522f475Smrg    update_titeInhibit();
1688d522f475Smrg}
1689d522f475Smrg
1690d522f475Smrg#ifndef NO_ACTIVE_ICON
1691d522f475Smrg/* ARGSUSED */
1692d522f475Smrgstatic void
1693d522f475Smrgdo_activeicon(Widget gw GCC_UNUSED,
1694d522f475Smrg	      XtPointer closure GCC_UNUSED,
1695d522f475Smrg	      XtPointer data GCC_UNUSED)
1696d522f475Smrg{
1697d522f475Smrg    TScreen *screen = TScreenOf(term);
1698d522f475Smrg
1699d522f475Smrg    if (screen->iconVwin.window) {
1700d522f475Smrg	Widget shell = XtParent(term);
17010bd37d32Smrg	ToggleFlag(term->work.active_icon);
1702d522f475Smrg	XtVaSetValues(shell, XtNiconWindow,
17030bd37d32Smrg		      term->work.active_icon ? screen->iconVwin.window : None,
1704d522f475Smrg		      (XtPointer) 0);
1705d522f475Smrg	update_activeicon();
1706d522f475Smrg    }
1707d522f475Smrg}
1708d522f475Smrg#endif /* NO_ACTIVE_ICON */
1709d522f475Smrg
1710d522f475Smrgstatic void
1711d522f475Smrgdo_softreset(Widget gw GCC_UNUSED,
1712d522f475Smrg	     XtPointer closure GCC_UNUSED,
1713d522f475Smrg	     XtPointer data GCC_UNUSED)
1714d522f475Smrg{
1715d522f475Smrg    VTReset(term, False, False);
1716d522f475Smrg}
1717d522f475Smrg
1718d522f475Smrgstatic void
1719d522f475Smrgdo_hardreset(Widget gw GCC_UNUSED,
1720d522f475Smrg	     XtPointer closure GCC_UNUSED,
1721d522f475Smrg	     XtPointer data GCC_UNUSED)
1722d522f475Smrg{
1723d522f475Smrg    VTReset(term, True, False);
1724d522f475Smrg}
1725d522f475Smrg
1726d522f475Smrgstatic void
1727d522f475Smrgdo_clearsavedlines(Widget gw GCC_UNUSED,
1728d522f475Smrg		   XtPointer closure GCC_UNUSED,
1729d522f475Smrg		   XtPointer data GCC_UNUSED)
1730d522f475Smrg{
1731d522f475Smrg    VTReset(term, True, True);
1732d522f475Smrg}
1733d522f475Smrg
1734d522f475Smrg#if OPT_TEK4014
1735d522f475Smrgstatic void
1736d522f475Smrgdo_tekmode(Widget gw GCC_UNUSED,
1737d522f475Smrg	   XtPointer closure GCC_UNUSED,
1738d522f475Smrg	   XtPointer data GCC_UNUSED)
1739d522f475Smrg{
1740d522f475Smrg    switch_modes(TEK4014_ACTIVE(term));		/* switch to tek mode */
1741d522f475Smrg}
1742d522f475Smrg
1743d522f475Smrg/* ARGSUSED */
1744d522f475Smrgstatic void
1745d522f475Smrgdo_vthide(Widget gw GCC_UNUSED,
1746d522f475Smrg	  XtPointer closure GCC_UNUSED,
1747d522f475Smrg	  XtPointer data GCC_UNUSED)
1748d522f475Smrg{
1749d522f475Smrg    hide_vt_window();
1750d522f475Smrg}
1751d522f475Smrg#endif /* OPT_TEK4014 */
1752d522f475Smrg
1753d522f475Smrg/*
1754d522f475Smrg * vtfont menu
1755d522f475Smrg */
1756d522f475Smrg
1757d522f475Smrgstatic void
1758d522f475Smrgdo_vtfont(Widget gw GCC_UNUSED,
1759d522f475Smrg	  XtPointer closure,
1760d522f475Smrg	  XtPointer data GCC_UNUSED)
1761d522f475Smrg{
176220d2c4d2Smrg    XtermWidget xw = term;
1763d522f475Smrg    char *entryname = (char *) closure;
1764d522f475Smrg    int i;
1765d522f475Smrg
17660bd37d32Smrg    TRACE(("do_vtfont(%s)\n", entryname));
1767d522f475Smrg    for (i = 0; i < NMENUFONTS; i++) {
1768d522f475Smrg	if (strcmp(entryname, fontMenuEntries[i].name) == 0) {
176920d2c4d2Smrg	    SetVTFont(xw, i, True, NULL);
1770d522f475Smrg	    return;
1771d522f475Smrg	}
1772d522f475Smrg    }
177320d2c4d2Smrg    Bell(xw, XkbBI_MinorError, 0);
1774d522f475Smrg}
1775d522f475Smrg
1776d522f475Smrg#if OPT_DEC_CHRSET
1777d522f475Smrgstatic void
1778d522f475Smrgdo_font_doublesize(Widget gw GCC_UNUSED,
1779d522f475Smrg		   XtPointer closure GCC_UNUSED,
1780d522f475Smrg		   XtPointer data GCC_UNUSED)
1781d522f475Smrg{
178220d2c4d2Smrg    XtermWidget xw = term;
178320d2c4d2Smrg
178420d2c4d2Smrg    if (TScreenOf(xw)->cache_doublesize != 0)
178520d2c4d2Smrg	ToggleFlag(TScreenOf(xw)->font_doublesize);
1786d522f475Smrg    update_font_doublesize();
1787d522f475Smrg    Redraw();
1788d522f475Smrg}
1789d522f475Smrg#endif
1790d522f475Smrg
1791d522f475Smrg#if OPT_BOX_CHARS
1792d522f475Smrgstatic void
1793d522f475Smrgdo_font_boxchars(Widget gw GCC_UNUSED,
1794d522f475Smrg		 XtPointer closure GCC_UNUSED,
1795d522f475Smrg		 XtPointer data GCC_UNUSED)
1796d522f475Smrg{
179720d2c4d2Smrg    ToggleFlag(TScreenOf(term)->force_box_chars);
1798d522f475Smrg    update_font_boxchars();
1799d522f475Smrg    Redraw();
1800d522f475Smrg}
180120d2c4d2Smrg
180220d2c4d2Smrgstatic void
180320d2c4d2Smrgdo_font_packed(Widget gw GCC_UNUSED,
180420d2c4d2Smrg	       XtPointer closure GCC_UNUSED,
180520d2c4d2Smrg	       XtPointer data GCC_UNUSED)
180620d2c4d2Smrg{
180720d2c4d2Smrg    ToggleFlag(TScreenOf(term)->force_packed);
180820d2c4d2Smrg    update_font_packed();
180920d2c4d2Smrg    SetVTFont(term, TScreenOf(term)->menu_font_number, True, NULL);
181020d2c4d2Smrg}
1811d522f475Smrg#endif
1812d522f475Smrg
1813d522f475Smrg#if OPT_DEC_SOFTFONT
1814d522f475Smrgstatic void
1815d522f475Smrgdo_font_loadable(Widget gw GCC_UNUSED,
1816d522f475Smrg		 XtPointer closure GCC_UNUSED,
1817d522f475Smrg		 XtPointer data GCC_UNUSED)
1818d522f475Smrg{
1819956cc18dSsnj    ToggleFlag(term->misc.font_loadable);
1820d522f475Smrg    update_font_loadable();
1821d522f475Smrg}
1822d522f475Smrg#endif
1823d522f475Smrg
1824d522f475Smrg#if OPT_RENDERFONT
1825d522f475Smrgstatic void
1826d522f475Smrgdo_font_renderfont(Widget gw GCC_UNUSED,
1827d522f475Smrg		   XtPointer closure GCC_UNUSED,
1828d522f475Smrg		   XtPointer data GCC_UNUSED)
1829d522f475Smrg{
183020d2c4d2Smrg    XtermWidget xw = (XtermWidget) term;
183120d2c4d2Smrg    TScreen *screen = TScreenOf(xw);
1832d522f475Smrg    int fontnum = screen->menu_font_number;
183320d2c4d2Smrg    String name = TScreenOf(xw)->MenuFontName(fontnum);
1834d522f475Smrg
183520d2c4d2Smrg    DefaultRenderFont(xw);
18360bd37d32Smrg    ToggleFlag(xw->work.render_font);
1837d522f475Smrg    update_font_renderfont();
183820d2c4d2Smrg    xtermLoadFont(xw, xtermFontName(name), True, fontnum);
1839d522f475Smrg    ScrnRefresh(term, 0, 0,
1840d522f475Smrg		MaxRows(screen),
1841d522f475Smrg		MaxCols(screen), True);
1842d522f475Smrg}
1843d522f475Smrg#endif
1844d522f475Smrg
1845d522f475Smrg#if OPT_WIDE_CHARS
1846e39b573cSmrgstatic void
1847e39b573cSmrgsetup_wide_fonts(XtermWidget xw)
1848e39b573cSmrg{
1849e39b573cSmrg    TScreen *screen = TScreenOf(xw);
1850e39b573cSmrg
1851e39b573cSmrg    if (screen->wide_chars) {
1852e39b573cSmrg	if (xtermLoadWideFonts(xw, True)) {
1853e39b573cSmrg	    SetVTFont(xw, screen->menu_font_number, True, NULL);
1854e39b573cSmrg	}
1855e39b573cSmrg    } else {
1856e39b573cSmrg	ChangeToWide(xw);
1857e39b573cSmrg    }
1858e39b573cSmrg}
1859e39b573cSmrg
1860e39b573cSmrgstatic void
1861e39b573cSmrgsetup_narrow_fonts(XtermWidget xw)
1862e39b573cSmrg{
1863e39b573cSmrg    TScreen *screen = TScreenOf(xw);
1864e39b573cSmrg
1865e39b573cSmrg    if (xtermLoadDefaultFonts(xw)) {
1866e39b573cSmrg	SetVTFont(xw, screen->menu_font_number, True, NULL);
1867e39b573cSmrg    }
1868e39b573cSmrg}
1869e39b573cSmrg
1870d522f475Smrgstatic void
1871d522f475Smrgdo_font_utf8_mode(Widget gw GCC_UNUSED,
1872d522f475Smrg		  XtPointer closure GCC_UNUSED,
1873d522f475Smrg		  XtPointer data GCC_UNUSED)
1874d522f475Smrg{
1875e39b573cSmrg    XtermWidget xw = term;
1876e39b573cSmrg    TScreen *screen = TScreenOf(xw);
1877d522f475Smrg
1878d522f475Smrg    /*
1879d522f475Smrg     * If xterm was started with -wc option, it might not have the wide fonts.
1880d522f475Smrg     * If xterm was not started with -wc, it might not have wide cells.
1881d522f475Smrg     */
1882d522f475Smrg    if (!screen->utf8_mode) {
1883e39b573cSmrg	setup_wide_fonts(xw);
1884d522f475Smrg    }
1885d522f475Smrg    switchPtyData(screen, !screen->utf8_mode);
1886d522f475Smrg    /*
1887d522f475Smrg     * We don't repaint the screen when switching UTF-8 on/off.  When switching
1888d522f475Smrg     * on - the Latin-1 codes should paint as-is.  When switching off, that's
1889d522f475Smrg     * hard to do properly.
1890d522f475Smrg     */
1891d522f475Smrg}
1892d522f475Smrg
1893e39b573cSmrgstatic void
1894e39b573cSmrgdo_font_utf8_fonts(Widget gw GCC_UNUSED,
1895e39b573cSmrg		   XtPointer closure GCC_UNUSED,
1896e39b573cSmrg		   XtPointer data GCC_UNUSED)
1897e39b573cSmrg{
1898e39b573cSmrg    XtermWidget xw = term;
1899e39b573cSmrg    TScreen *screen = TScreenOf(xw);
1900e39b573cSmrg
1901e39b573cSmrg    ToggleFlag(screen->utf8_fonts);
1902e39b573cSmrg    update_font_utf8_fonts();
1903e39b573cSmrg
1904e39b573cSmrg    if (screen->utf8_fonts) {
1905e39b573cSmrg	setup_wide_fonts(xw);
1906e39b573cSmrg    } else {
1907e39b573cSmrg	setup_narrow_fonts(xw);
1908e39b573cSmrg    }
1909e39b573cSmrg}
1910e39b573cSmrg
1911d522f475Smrgstatic void
1912d522f475Smrgdo_font_utf8_title(Widget gw GCC_UNUSED,
1913d522f475Smrg		   XtPointer closure GCC_UNUSED,
1914d522f475Smrg		   XtPointer data GCC_UNUSED)
1915d522f475Smrg{
1916d522f475Smrg    TScreen *screen = TScreenOf(term);
1917d522f475Smrg
1918956cc18dSsnj    ToggleFlag(screen->utf8_title);
1919d522f475Smrg    update_font_utf8_title();
1920d522f475Smrg}
1921d522f475Smrg#endif
1922d522f475Smrg
1923d522f475Smrg/*
1924d522f475Smrg * tek menu
1925d522f475Smrg */
1926d522f475Smrg
1927d522f475Smrg#if OPT_TEK4014
1928d522f475Smrgstatic void
1929956cc18dSsnjdo_tektextlarge(Widget gw,
1930d522f475Smrg		XtPointer closure GCC_UNUSED,
1931d522f475Smrg		XtPointer data GCC_UNUSED)
1932d522f475Smrg{
1933956cc18dSsnj    TekSetFontSize(getTekWidget(gw), True, tekMenu_tektextlarge);
1934d522f475Smrg}
1935d522f475Smrg
1936d522f475Smrgstatic void
1937956cc18dSsnjdo_tektext2(Widget gw,
1938d522f475Smrg	    XtPointer closure GCC_UNUSED,
1939d522f475Smrg	    XtPointer data GCC_UNUSED)
1940d522f475Smrg{
1941956cc18dSsnj    TekSetFontSize(getTekWidget(gw), True, tekMenu_tektext2);
1942d522f475Smrg}
1943d522f475Smrg
1944d522f475Smrgstatic void
1945956cc18dSsnjdo_tektext3(Widget gw,
1946d522f475Smrg	    XtPointer closure GCC_UNUSED,
1947d522f475Smrg	    XtPointer data GCC_UNUSED)
1948d522f475Smrg{
1949956cc18dSsnj    TekSetFontSize(getTekWidget(gw), True, tekMenu_tektext3);
1950d522f475Smrg}
1951d522f475Smrg
1952d522f475Smrgstatic void
1953956cc18dSsnjdo_tektextsmall(Widget gw,
1954d522f475Smrg		XtPointer closure GCC_UNUSED,
1955d522f475Smrg		XtPointer data GCC_UNUSED)
1956d522f475Smrg{
1957956cc18dSsnj    TekSetFontSize(getTekWidget(gw), True, tekMenu_tektextsmall);
1958d522f475Smrg}
1959d522f475Smrg
1960d522f475Smrgstatic void
1961956cc18dSsnjdo_tekpage(Widget gw,
1962d522f475Smrg	   XtPointer closure GCC_UNUSED,
1963d522f475Smrg	   XtPointer data GCC_UNUSED)
1964d522f475Smrg{
1965956cc18dSsnj    TekSimulatePageButton(getTekWidget(gw), False);
1966d522f475Smrg}
1967d522f475Smrg
1968d522f475Smrgstatic void
1969956cc18dSsnjdo_tekreset(Widget gw,
1970d522f475Smrg	    XtPointer closure GCC_UNUSED,
1971d522f475Smrg	    XtPointer data GCC_UNUSED)
1972d522f475Smrg{
1973956cc18dSsnj    TekSimulatePageButton(getTekWidget(gw), True);
1974d522f475Smrg}
1975d522f475Smrg
1976d522f475Smrgstatic void
1977956cc18dSsnjdo_tekcopy(Widget gw,
1978d522f475Smrg	   XtPointer closure GCC_UNUSED,
1979d522f475Smrg	   XtPointer data GCC_UNUSED)
1980d522f475Smrg{
1981956cc18dSsnj    TekCopy(getTekWidget(gw));
1982d522f475Smrg}
1983d522f475Smrg
1984d522f475Smrgstatic void
1985d522f475Smrghandle_vtshow(Widget gw GCC_UNUSED, Bool allowswitch)
1986d522f475Smrg{
198720d2c4d2Smrg    XtermWidget xw = term;
198820d2c4d2Smrg    TScreen *screen = TScreenOf(xw);
1989d522f475Smrg
1990d522f475Smrg    TRACE(("Show vt-window\n"));
1991d522f475Smrg    if (!screen->Vshow) {	/* not showing, turn on */
1992d522f475Smrg	set_vt_visibility(True);
199320d2c4d2Smrg    } else if (TEK4014_SHOWN(xw) || allowswitch) {	/* is showing, turn off */
1994d522f475Smrg	set_vt_visibility(False);
199520d2c4d2Smrg	if (!TEK4014_ACTIVE(xw) && tekRefreshList)
1996d522f475Smrg	    TekRefresh(tekWidget);
1997d522f475Smrg	end_vt_mode();		/* WARNING: this does a longjmp... */
1998d522f475Smrg    } else
199920d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
2000d522f475Smrg}
2001d522f475Smrg
2002d522f475Smrgstatic void
2003d522f475Smrgdo_vtshow(Widget gw,
2004d522f475Smrg	  XtPointer closure GCC_UNUSED,
2005d522f475Smrg	  XtPointer data GCC_UNUSED)
2006d522f475Smrg{
2007d522f475Smrg    handle_vtshow(gw, True);
2008d522f475Smrg}
2009d522f475Smrg
2010d522f475Smrgstatic void
2011d522f475Smrgdo_vtonoff(Widget gw,
2012d522f475Smrg	   XtPointer closure GCC_UNUSED,
2013d522f475Smrg	   XtPointer data GCC_UNUSED)
2014d522f475Smrg{
2015d522f475Smrg    handle_vtshow(gw, False);
2016d522f475Smrg}
2017d522f475Smrg
2018d522f475Smrgstatic void
2019d522f475Smrgdo_vtmode(Widget gw GCC_UNUSED,
2020d522f475Smrg	  XtPointer closure GCC_UNUSED,
2021d522f475Smrg	  XtPointer data GCC_UNUSED)
2022d522f475Smrg{
2023d522f475Smrg    switch_modes(TEK4014_ACTIVE(term));		/* switch to vt, or from */
2024d522f475Smrg}
2025d522f475Smrg
2026d522f475Smrg/* ARGSUSED */
2027d522f475Smrgstatic void
2028d522f475Smrgdo_tekhide(Widget gw GCC_UNUSED,
2029d522f475Smrg	   XtPointer closure GCC_UNUSED,
2030d522f475Smrg	   XtPointer data GCC_UNUSED)
2031d522f475Smrg{
2032d522f475Smrg    hide_tek_window();
2033d522f475Smrg}
2034d522f475Smrg#endif /* OPT_TEK4014 */
2035d522f475Smrg
2036d522f475Smrg/*
2037d522f475Smrg * public handler routines
2038d522f475Smrg */
20390bd37d32Smrgint
2040894e0ac8SmrgdecodeToggle(XtermWidget xw, String *params, Cardinal nparams)
2041d522f475Smrg{
20420bd37d32Smrg    int dir = toggleErr;
2043d522f475Smrg
2044d522f475Smrg    switch (nparams) {
2045d522f475Smrg    case 0:
20460bd37d32Smrg	dir = toggleAll;
2047d522f475Smrg	break;
2048d522f475Smrg    case 1:
2049d522f475Smrg	if (XmuCompareISOLatin1(params[0], "on") == 0)
20500bd37d32Smrg	    dir = toggleOn;
2051d522f475Smrg	else if (XmuCompareISOLatin1(params[0], "off") == 0)
20520bd37d32Smrg	    dir = toggleOff;
2053d522f475Smrg	else if (XmuCompareISOLatin1(params[0], "toggle") == 0)
20540bd37d32Smrg	    dir = toggleAll;
2055d522f475Smrg	break;
2056d522f475Smrg    }
2057d522f475Smrg
20580bd37d32Smrg    if (dir == toggleErr) {
205920d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
20600bd37d32Smrg    }
20610bd37d32Smrg
20620bd37d32Smrg    return dir;
20630bd37d32Smrg}
2064d522f475Smrg
20650bd37d32Smrgstatic void
20660bd37d32Smrghandle_toggle(void (*proc) PROTO_XT_CALLBACK_ARGS,
20670bd37d32Smrg	      int var,
2068894e0ac8Smrg	      String *params,
20690bd37d32Smrg	      Cardinal nparams,
20700bd37d32Smrg	      Widget w,
20710bd37d32Smrg	      XtPointer closure,
20720bd37d32Smrg	      XtPointer data)
20730bd37d32Smrg{
20740bd37d32Smrg    XtermWidget xw = term;
20750bd37d32Smrg
20760bd37d32Smrg    switch (decodeToggle(xw, params, nparams)) {
20770bd37d32Smrg
20780bd37d32Smrg    case toggleAll:
2079d522f475Smrg	(*proc) (w, closure, data);
2080d522f475Smrg	break;
2081d522f475Smrg
20820bd37d32Smrg    case toggleOff:
2083d522f475Smrg	if (var)
2084d522f475Smrg	    (*proc) (w, closure, data);
2085d522f475Smrg	else
208620d2c4d2Smrg	    Bell(xw, XkbBI_MinorError, 0);
2087d522f475Smrg	break;
2088d522f475Smrg
20890bd37d32Smrg    case toggleOn:
2090d522f475Smrg	if (!var)
2091d522f475Smrg	    (*proc) (w, closure, data);
2092d522f475Smrg	else
209320d2c4d2Smrg	    Bell(xw, XkbBI_MinorError, 0);
2094d522f475Smrg	break;
2095d522f475Smrg    }
2096d522f475Smrg    return;
2097d522f475Smrg}
2098d522f475Smrg
2099d522f475Smrg#define handle_vt_toggle(proc, var, params, nparams, w) \
2100d522f475Smrg	handle_toggle(proc, (int) (var), params, nparams, w, (XtPointer)0, (XtPointer)0)
2101d522f475Smrg
210220d2c4d2Smrg#define HANDLE_VT_TOGGLE(name) \
210320d2c4d2Smrg	handle_vt_toggle(do_##name, TScreenOf(term)->name, params, *param_count, w)
210420d2c4d2Smrg
2105d522f475Smrg#define handle_tek_toggle(proc, var, params, nparams, w) \
2106d522f475Smrg	handle_toggle(proc, (int) (var), params, nparams, w, (XtPointer)0, (XtPointer)0)
2107d522f475Smrg
2108d522f475Smrgvoid
2109d522f475SmrgHandleAllowSends(Widget w,
2110894e0ac8Smrg		 XEvent *event GCC_UNUSED,
2111894e0ac8Smrg		 String *params,
2112d522f475Smrg		 Cardinal *param_count)
2113d522f475Smrg{
211420d2c4d2Smrg    handle_vt_toggle(do_allowsends, TScreenOf(term)->allowSendEvents,
2115d522f475Smrg		     params, *param_count, w);
2116d522f475Smrg}
2117d522f475Smrg
2118d522f475Smrgvoid
2119d522f475SmrgHandleSetVisualBell(Widget w,
2120894e0ac8Smrg		    XEvent *event GCC_UNUSED,
2121894e0ac8Smrg		    String *params,
2122d522f475Smrg		    Cardinal *param_count)
2123d522f475Smrg{
212420d2c4d2Smrg    HANDLE_VT_TOGGLE(visualbell);
2125d522f475Smrg}
2126d522f475Smrg
2127d522f475Smrgvoid
2128d522f475SmrgHandleSetPopOnBell(Widget w,
2129894e0ac8Smrg		   XEvent *event GCC_UNUSED,
2130894e0ac8Smrg		   String *params,
2131d522f475Smrg		   Cardinal *param_count)
2132d522f475Smrg{
213320d2c4d2Smrg    HANDLE_VT_TOGGLE(poponbell);
2134d522f475Smrg}
2135d522f475Smrg
2136d522f475Smrg#ifdef ALLOWLOGGING
2137d522f475Smrgvoid
2138d522f475SmrgHandleLogging(Widget w,
2139894e0ac8Smrg	      XEvent *event GCC_UNUSED,
2140894e0ac8Smrg	      String *params,
2141d522f475Smrg	      Cardinal *param_count)
2142d522f475Smrg{
214320d2c4d2Smrg    HANDLE_VT_TOGGLE(logging);
2144d522f475Smrg}
2145d522f475Smrg#endif
2146d522f475Smrg
2147e39b573cSmrg#if OPT_PRINT_ON_EXIT
2148e39b573cSmrgvoid
2149e39b573cSmrgHandleWriteNow(Widget w,
2150894e0ac8Smrg	       XEvent *event GCC_UNUSED,
2151894e0ac8Smrg	       String *params GCC_UNUSED,
2152e39b573cSmrg	       Cardinal *param_count GCC_UNUSED)
2153e39b573cSmrg{
2154e39b573cSmrg    do_write_now(w, 0, 0);
2155e39b573cSmrg}
2156e39b573cSmrg
2157e39b573cSmrgvoid
2158e39b573cSmrgHandleWriteError(Widget w,
2159894e0ac8Smrg		 XEvent *event GCC_UNUSED,
2160894e0ac8Smrg		 String *params,
2161e39b573cSmrg		 Cardinal *param_count)
2162e39b573cSmrg{
2163e39b573cSmrg    HANDLE_VT_TOGGLE(write_error);
2164e39b573cSmrg}
2165e39b573cSmrg#endif
2166e39b573cSmrg
2167d522f475Smrg/* ARGSUSED */
2168d522f475Smrgvoid
216920d2c4d2SmrgHandlePrintScreen(Widget w GCC_UNUSED,
2170894e0ac8Smrg		  XEvent *event GCC_UNUSED,
2171f2e35a3aSmrg		  String *params,
2172f2e35a3aSmrg		  Cardinal *param_count)
2173d522f475Smrg{
217420d2c4d2Smrg    xtermPrintScreen(term, True, getPrinterFlags(term, params, param_count));
2175d522f475Smrg}
2176d522f475Smrg
2177956cc18dSsnj/* ARGSUSED */
2178956cc18dSsnjvoid
217920d2c4d2SmrgHandlePrintEverything(Widget w GCC_UNUSED,
2180894e0ac8Smrg		      XEvent *event GCC_UNUSED,
2181894e0ac8Smrg		      String *params,
218220d2c4d2Smrg		      Cardinal *param_count)
2183956cc18dSsnj{
218420d2c4d2Smrg    xtermPrintEverything(term, getPrinterFlags(term, params, param_count));
2185956cc18dSsnj}
2186956cc18dSsnj
2187d522f475Smrg/* ARGSUSED */
2188d522f475Smrgvoid
2189d522f475SmrgHandlePrintControlMode(Widget w,
2190894e0ac8Smrg		       XEvent *event GCC_UNUSED,
2191894e0ac8Smrg		       String *params GCC_UNUSED,
2192d522f475Smrg		       Cardinal *param_count GCC_UNUSED)
2193d522f475Smrg{
2194d522f475Smrg    do_print_redir(w, (XtPointer) 0, (XtPointer) 0);
2195d522f475Smrg}
2196d522f475Smrg
2197d522f475Smrg/* ARGSUSED */
2198d522f475Smrgvoid
2199d522f475SmrgHandleRedraw(Widget w,
2200894e0ac8Smrg	     XEvent *event GCC_UNUSED,
2201894e0ac8Smrg	     String *params GCC_UNUSED,
2202d522f475Smrg	     Cardinal *param_count GCC_UNUSED)
2203d522f475Smrg{
2204d522f475Smrg    do_redraw(w, (XtPointer) 0, (XtPointer) 0);
2205d522f475Smrg}
2206d522f475Smrg
2207d522f475Smrg/* ARGSUSED */
2208d522f475Smrgvoid
2209d522f475SmrgHandleSendSignal(Widget w,
2210894e0ac8Smrg		 XEvent *event GCC_UNUSED,
2211894e0ac8Smrg		 String *params,
2212d522f475Smrg		 Cardinal *param_count)
2213d522f475Smrg{
2214d522f475Smrg    /* *INDENT-OFF* */
221501037d57Smrg    static const struct sigtab {
221620d2c4d2Smrg	const char *name;
2217d522f475Smrg	int sig;
2218d522f475Smrg    } signals[] = {
2219d522f475Smrg#ifdef SIGTSTP
2220d522f475Smrg	{ "suspend",	SIGTSTP },
2221d522f475Smrg	{ "tstp",	SIGTSTP },
2222d522f475Smrg#endif
2223d522f475Smrg#ifdef SIGCONT
2224d522f475Smrg	{ "cont",	SIGCONT },
2225d522f475Smrg#endif
2226d522f475Smrg	{ "int",	SIGINT },
2227d522f475Smrg	{ "hup",	SIGHUP },
2228d522f475Smrg	{ "quit",	SIGQUIT },
2229d522f475Smrg	{ "alrm",	SIGALRM },
2230d522f475Smrg	{ "alarm",	SIGALRM },
2231d522f475Smrg	{ "term",	SIGTERM },
2232d522f475Smrg	{ "kill",	SIGKILL },
2233d522f475Smrg	{ NULL, 0 },
2234d522f475Smrg    };
2235d522f475Smrg    /* *INDENT-ON* */
2236d522f475Smrg
2237d522f475Smrg    if (*param_count == 1) {
223801037d57Smrg	const struct sigtab *st;
2239d522f475Smrg
2240d522f475Smrg	for (st = signals; st->name; st++) {
2241d522f475Smrg	    if (XmuCompareISOLatin1(st->name, params[0]) == 0) {
2242d522f475Smrg		handle_send_signal(w, st->sig);
2243d522f475Smrg		return;
2244d522f475Smrg	    }
2245d522f475Smrg	}
2246d522f475Smrg	/* one could allow numeric values, but that would be a security hole */
2247d522f475Smrg    }
2248d522f475Smrg
224920d2c4d2Smrg    Bell(term, XkbBI_MinorError, 0);
2250d522f475Smrg}
2251d522f475Smrg
2252d522f475Smrg/* ARGSUSED */
2253d522f475Smrgvoid
2254d522f475SmrgHandleQuit(Widget w,
2255894e0ac8Smrg	   XEvent *event GCC_UNUSED,
2256894e0ac8Smrg	   String *params GCC_UNUSED,
2257d522f475Smrg	   Cardinal *param_count GCC_UNUSED)
2258d522f475Smrg{
2259d522f475Smrg    do_quit(w, (XtPointer) 0, (XtPointer) 0);
2260d522f475Smrg}
2261d522f475Smrg
2262d522f475Smrgvoid
2263d522f475SmrgHandle8BitControl(Widget w,
2264894e0ac8Smrg		  XEvent *event GCC_UNUSED,
2265894e0ac8Smrg		  String *params,
2266d522f475Smrg		  Cardinal *param_count)
2267d522f475Smrg{
226820d2c4d2Smrg    handle_vt_toggle(do_8bit_control, TScreenOf(term)->control_eight_bits,
2269d522f475Smrg		     params, *param_count, w);
2270d522f475Smrg}
2271d522f475Smrg
2272d522f475Smrgvoid
2273d522f475SmrgHandleBackarrow(Widget w,
2274894e0ac8Smrg		XEvent *event GCC_UNUSED,
2275894e0ac8Smrg		String *params,
2276d522f475Smrg		Cardinal *param_count)
2277d522f475Smrg{
2278d522f475Smrg    handle_vt_toggle(do_backarrow, term->keyboard.flags & MODE_DECBKM,
2279d522f475Smrg		     params, *param_count, w);
2280d522f475Smrg}
2281d522f475Smrg
22820bd37d32Smrg#if OPT_MAXIMIZE
22830bd37d32Smrg#if OPT_TEK4014
22840bd37d32Smrg#define WhichEWMH (TEK4014_ACTIVE(xw) != 0)
22850bd37d32Smrg#else
22860bd37d32Smrg#define WhichEWMH 0
22870bd37d32Smrg#endif
22880bd37d32Smrgstatic void
22890bd37d32Smrgdo_fullscreen(Widget gw GCC_UNUSED,
22900bd37d32Smrg	      XtPointer closure GCC_UNUSED,
22910bd37d32Smrg	      XtPointer data GCC_UNUSED)
22920bd37d32Smrg{
22930bd37d32Smrg    XtermWidget xw = term;
22940bd37d32Smrg
22950bd37d32Smrg    if (resource.fullscreen != esNever)
22960bd37d32Smrg	FullScreen(xw, !xw->work.ewmh[WhichEWMH].mode);
22970bd37d32Smrg}
22980bd37d32Smrg
22990bd37d32Smrg/* ARGSUSED */
23000bd37d32Smrgvoid
23010bd37d32SmrgHandleFullscreen(Widget w,
2302894e0ac8Smrg		 XEvent *event GCC_UNUSED,
2303f2e35a3aSmrg		 String *params,
2304f2e35a3aSmrg		 Cardinal *param_count)
23050bd37d32Smrg{
23060bd37d32Smrg    XtermWidget xw = term;
23070bd37d32Smrg
23080bd37d32Smrg    if (resource.fullscreen != esNever) {
23090bd37d32Smrg	handle_vt_toggle(do_fullscreen, xw->work.ewmh[WhichEWMH].mode,
23100bd37d32Smrg			 params, *param_count, w);
23110bd37d32Smrg    }
23120bd37d32Smrg}
23130bd37d32Smrg
23140bd37d32Smrgvoid
23150bd37d32Smrgupdate_fullscreen(void)
23160bd37d32Smrg{
23170bd37d32Smrg    XtermWidget xw = term;
23180bd37d32Smrg
23190bd37d32Smrg    if (resource.fullscreen <= 1) {
23200bd37d32Smrg	UpdateCheckbox("update_fullscreen",
23210bd37d32Smrg		       mainMenuEntries,
23220bd37d32Smrg		       mainMenu_fullscreen,
23230bd37d32Smrg		       xw->work.ewmh[WhichEWMH].mode);
23240bd37d32Smrg    } else {
23250bd37d32Smrg	SetItemSensitivity(mainMenuEntries[mainMenu_fullscreen].widget,
23260bd37d32Smrg			   False);
23270bd37d32Smrg    }
23280bd37d32Smrg}
23290bd37d32Smrg
23300bd37d32Smrg#endif /* OPT_MAXIMIZE */
23310bd37d32Smrg
2332e0a2b6dfSmrg#if OPT_SIXEL_GRAPHICS
2333e0a2b6dfSmrgstatic void
2334e0a2b6dfSmrgdo_sixelscrolling(Widget gw GCC_UNUSED,
2335e0a2b6dfSmrg		  XtPointer closure GCC_UNUSED,
2336e0a2b6dfSmrg		  XtPointer data GCC_UNUSED)
2337e0a2b6dfSmrg{
2338e0a2b6dfSmrg    term->keyboard.flags ^= MODE_DECSDM;
2339e0a2b6dfSmrg    update_decsdm();
2340e0a2b6dfSmrg}
2341e0a2b6dfSmrg
2342894e0ac8Smrgvoid
2343894e0ac8Smrgupdate_decsdm(void)
2344894e0ac8Smrg{
2345894e0ac8Smrg    UpdateCheckbox("update_decsdm",
2346894e0ac8Smrg		   vtMenuEntries,
2347894e0ac8Smrg		   vtMenu_sixelscrolling,
23485307cd1aSmrg		   (term->keyboard.flags & MODE_DECSDM) == 0);
2349894e0ac8Smrg}
2350894e0ac8Smrg
2351894e0ac8Smrgvoid
2352894e0ac8SmrgHandleSixelScrolling(Widget w,
2353894e0ac8Smrg		     XEvent *event GCC_UNUSED,
2354894e0ac8Smrg		     String *params,
2355894e0ac8Smrg		     Cardinal *param_count)
2356894e0ac8Smrg{
2357894e0ac8Smrg    handle_vt_toggle(do_sixelscrolling, term->keyboard.flags & MODE_DECSDM,
2358894e0ac8Smrg		     params, *param_count, w);
2359894e0ac8Smrg}
2360894e0ac8Smrg#endif
2361894e0ac8Smrg
2362894e0ac8Smrg#if OPT_GRAPHICS
2363e0a2b6dfSmrgstatic void
2364e0a2b6dfSmrgdo_privatecolorregisters(Widget gw GCC_UNUSED,
2365e0a2b6dfSmrg			 XtPointer closure GCC_UNUSED,
2366e0a2b6dfSmrg			 XtPointer data GCC_UNUSED)
2367e0a2b6dfSmrg{
2368e0a2b6dfSmrg    TScreen *screen = TScreenOf(term);
2369e0a2b6dfSmrg
2370e0a2b6dfSmrg    ToggleFlag(screen->privatecolorregisters);
2371e0a2b6dfSmrg    update_privatecolorregisters();
2372e0a2b6dfSmrg}
2373e0a2b6dfSmrg
2374e0a2b6dfSmrgvoid
2375e0a2b6dfSmrgupdate_privatecolorregisters(void)
2376e0a2b6dfSmrg{
2377e0a2b6dfSmrg    UpdateCheckbox("update_privatecolorregisters",
2378e0a2b6dfSmrg		   vtMenuEntries,
2379e0a2b6dfSmrg		   vtMenu_privatecolorregisters,
2380e0a2b6dfSmrg		   TScreenOf(term)->privatecolorregisters);
2381e0a2b6dfSmrg}
2382e0a2b6dfSmrg
2383e0a2b6dfSmrgvoid
2384e0a2b6dfSmrgHandleSetPrivateColorRegisters(Widget w,
2385894e0ac8Smrg			       XEvent *event GCC_UNUSED,
2386894e0ac8Smrg			       String *params,
2387e0a2b6dfSmrg			       Cardinal *param_count)
2388e0a2b6dfSmrg{
2389e0a2b6dfSmrg    HANDLE_VT_TOGGLE(privatecolorregisters);
2390e0a2b6dfSmrg}
2391e0a2b6dfSmrg#endif
2392e0a2b6dfSmrg
2393d522f475Smrg#if OPT_SUN_FUNC_KEYS
2394d522f475Smrgvoid
2395d522f475SmrgHandleSunFunctionKeys(Widget w,
2396894e0ac8Smrg		      XEvent *event GCC_UNUSED,
2397894e0ac8Smrg		      String *params,
2398d522f475Smrg		      Cardinal *param_count)
2399d522f475Smrg{
2400d522f475Smrg    handle_vt_toggle(do_sun_fkeys, term->keyboard.type == keyboardIsSun,
2401d522f475Smrg		     params, *param_count, w);
2402d522f475Smrg}
2403d522f475Smrg#endif
2404d522f475Smrg
2405d522f475Smrg#if OPT_NUM_LOCK
2406d522f475Smrgvoid
2407d522f475SmrgHandleNumLock(Widget w,
2408894e0ac8Smrg	      XEvent *event GCC_UNUSED,
2409894e0ac8Smrg	      String *params,
2410d522f475Smrg	      Cardinal *param_count)
2411d522f475Smrg{
2412d522f475Smrg    handle_vt_toggle(do_num_lock, term->misc.real_NumLock,
2413d522f475Smrg		     params, *param_count, w);
2414d522f475Smrg}
2415d522f475Smrg
2416d522f475Smrgvoid
2417d522f475SmrgHandleAltEsc(Widget w,
2418894e0ac8Smrg	     XEvent *event GCC_UNUSED,
2419894e0ac8Smrg	     String *params,
2420d522f475Smrg	     Cardinal *param_count)
2421d522f475Smrg{
24220bd37d32Smrg    handle_vt_toggle(do_alt_esc, !TScreenOf(term)->alt_sends_esc,
2423d522f475Smrg		     params, *param_count, w);
2424d522f475Smrg}
2425d522f475Smrg
2426d522f475Smrgvoid
2427d522f475SmrgHandleMetaEsc(Widget w,
2428894e0ac8Smrg	      XEvent *event GCC_UNUSED,
2429894e0ac8Smrg	      String *params,
2430d522f475Smrg	      Cardinal *param_count)
2431d522f475Smrg{
243220d2c4d2Smrg    handle_vt_toggle(do_meta_esc, TScreenOf(term)->meta_sends_esc,
2433d522f475Smrg		     params, *param_count, w);
2434d522f475Smrg}
2435d522f475Smrg#endif
2436d522f475Smrg
2437d522f475Smrgvoid
2438d522f475SmrgHandleDeleteIsDEL(Widget w,
2439894e0ac8Smrg		  XEvent *event GCC_UNUSED,
2440894e0ac8Smrg		  String *params,
2441d522f475Smrg		  Cardinal *param_count)
2442d522f475Smrg{
244320d2c4d2Smrg    handle_vt_toggle(do_delete_del, TScreenOf(term)->delete_is_del,
2444d522f475Smrg		     params, *param_count, w);
2445d522f475Smrg}
2446d522f475Smrg
2447d522f475Smrgvoid
2448d522f475SmrgHandleOldFunctionKeys(Widget w,
2449894e0ac8Smrg		      XEvent *event GCC_UNUSED,
2450894e0ac8Smrg		      String *params,
2451d522f475Smrg		      Cardinal *param_count)
2452d522f475Smrg{
2453d522f475Smrg    handle_vt_toggle(do_old_fkeys, term->keyboard.type == keyboardIsLegacy,
2454d522f475Smrg		     params, *param_count, w);
2455d522f475Smrg}
2456d522f475Smrg
2457d522f475Smrg#if OPT_SUNPC_KBD
2458d522f475Smrgvoid
2459d522f475SmrgHandleSunKeyboard(Widget w,
2460894e0ac8Smrg		  XEvent *event GCC_UNUSED,
2461894e0ac8Smrg		  String *params,
2462d522f475Smrg		  Cardinal *param_count)
2463d522f475Smrg{
2464d522f475Smrg    handle_vt_toggle(do_sun_kbd, term->keyboard.type == keyboardIsVT220,
2465d522f475Smrg		     params, *param_count, w);
2466d522f475Smrg}
2467d522f475Smrg#endif
2468d522f475Smrg
2469d522f475Smrg#if OPT_HP_FUNC_KEYS
2470d522f475Smrgvoid
2471d522f475SmrgHandleHpFunctionKeys(Widget w,
2472894e0ac8Smrg		     XEvent *event GCC_UNUSED,
2473894e0ac8Smrg		     String *params,
2474d522f475Smrg		     Cardinal *param_count)
2475d522f475Smrg{
2476d522f475Smrg    handle_vt_toggle(do_hp_fkeys, term->keyboard.type == keyboardIsHP,
2477d522f475Smrg		     params, *param_count, w);
2478d522f475Smrg}
2479d522f475Smrg#endif
2480d522f475Smrg
2481d522f475Smrg#if OPT_SCO_FUNC_KEYS
2482d522f475Smrgvoid
2483d522f475SmrgHandleScoFunctionKeys(Widget w,
2484894e0ac8Smrg		      XEvent *event GCC_UNUSED,
2485894e0ac8Smrg		      String *params,
2486d522f475Smrg		      Cardinal *param_count)
2487d522f475Smrg{
2488d522f475Smrg    handle_vt_toggle(do_sco_fkeys, term->keyboard.type == keyboardIsSCO,
2489d522f475Smrg		     params, *param_count, w);
2490d522f475Smrg}
2491d522f475Smrg#endif
2492d522f475Smrg
2493d522f475Smrgvoid
2494d522f475SmrgHandleScrollbar(Widget w,
2495894e0ac8Smrg		XEvent *event GCC_UNUSED,
2496894e0ac8Smrg		String *params,
2497d522f475Smrg		Cardinal *param_count)
2498d522f475Smrg{
249920d2c4d2Smrg    XtermWidget xw = term;
250020d2c4d2Smrg
250120d2c4d2Smrg    if (IsIcon(TScreenOf(xw))) {
250220d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
2503d522f475Smrg    } else {
250420d2c4d2Smrg	handle_vt_toggle(do_scrollbar, TScreenOf(xw)->fullVwin.sb_info.width,
2505d522f475Smrg			 params, *param_count, w);
2506d522f475Smrg    }
2507d522f475Smrg}
2508d522f475Smrg
2509d522f475Smrgvoid
2510d522f475SmrgHandleJumpscroll(Widget w,
2511894e0ac8Smrg		 XEvent *event GCC_UNUSED,
2512894e0ac8Smrg		 String *params,
2513d522f475Smrg		 Cardinal *param_count)
2514d522f475Smrg{
251520d2c4d2Smrg    HANDLE_VT_TOGGLE(jumpscroll);
2516d522f475Smrg}
2517d522f475Smrg
25182e4f8982Smrgvoid
25192e4f8982SmrgHandleKeepClipboard(Widget w,
25202e4f8982Smrg		    XEvent *event GCC_UNUSED,
25212e4f8982Smrg		    String *params,
25222e4f8982Smrg		    Cardinal *param_count)
25232e4f8982Smrg{
25242e4f8982Smrg    HANDLE_VT_TOGGLE(keepClipboard);
25252e4f8982Smrg}
25262e4f8982Smrg
2527d522f475Smrgvoid
2528d522f475SmrgHandleKeepSelection(Widget w,
2529894e0ac8Smrg		    XEvent *event GCC_UNUSED,
2530894e0ac8Smrg		    String *params,
2531d522f475Smrg		    Cardinal *param_count)
2532d522f475Smrg{
253320d2c4d2Smrg    HANDLE_VT_TOGGLE(keepSelection);
2534d522f475Smrg}
2535d522f475Smrg
2536d522f475Smrgvoid
2537d522f475SmrgHandleSetSelect(Widget w,
2538894e0ac8Smrg		XEvent *event GCC_UNUSED,
2539894e0ac8Smrg		String *params,
2540d522f475Smrg		Cardinal *param_count)
2541d522f475Smrg{
254220d2c4d2Smrg    handle_vt_toggle(do_selectClipboard, TScreenOf(term)->selectToClipboard,
2543d522f475Smrg		     params, *param_count, w);
2544d522f475Smrg}
2545d522f475Smrg
2546d522f475Smrgvoid
2547d522f475SmrgHandleReverseVideo(Widget w,
2548894e0ac8Smrg		   XEvent *event GCC_UNUSED,
2549894e0ac8Smrg		   String *params,
2550d522f475Smrg		   Cardinal *param_count)
2551d522f475Smrg{
2552d522f475Smrg    handle_vt_toggle(do_reversevideo, (term->misc.re_verse0),
2553d522f475Smrg		     params, *param_count, w);
2554d522f475Smrg}
2555d522f475Smrg
2556d522f475Smrgvoid
2557d522f475SmrgHandleAutoWrap(Widget w,
2558894e0ac8Smrg	       XEvent *event GCC_UNUSED,
2559894e0ac8Smrg	       String *params,
2560d522f475Smrg	       Cardinal *param_count)
2561d522f475Smrg{
2562d522f475Smrg    handle_vt_toggle(do_autowrap, (term->flags & WRAPAROUND),
2563d522f475Smrg		     params, *param_count, w);
2564d522f475Smrg}
2565d522f475Smrg
2566d522f475Smrgvoid
2567d522f475SmrgHandleReverseWrap(Widget w,
2568894e0ac8Smrg		  XEvent *event GCC_UNUSED,
2569894e0ac8Smrg		  String *params,
2570d522f475Smrg		  Cardinal *param_count)
2571d522f475Smrg{
2572d522f475Smrg    handle_vt_toggle(do_reversewrap, (term->flags & REVERSEWRAP),
2573d522f475Smrg		     params, *param_count, w);
2574d522f475Smrg}
2575d522f475Smrg
2576d522f475Smrgvoid
2577d522f475SmrgHandleAutoLineFeed(Widget w,
2578894e0ac8Smrg		   XEvent *event GCC_UNUSED,
2579894e0ac8Smrg		   String *params,
2580d522f475Smrg		   Cardinal *param_count)
2581d522f475Smrg{
2582d522f475Smrg    handle_vt_toggle(do_autolinefeed, (term->flags & LINEFEED),
2583d522f475Smrg		     params, *param_count, w);
2584d522f475Smrg}
2585d522f475Smrg
2586d522f475Smrgvoid
2587d522f475SmrgHandleAppCursor(Widget w,
2588894e0ac8Smrg		XEvent *event GCC_UNUSED,
2589894e0ac8Smrg		String *params,
2590d522f475Smrg		Cardinal *param_count)
2591d522f475Smrg{
2592d522f475Smrg    handle_vt_toggle(do_appcursor, (term->keyboard.flags & MODE_DECCKM),
2593d522f475Smrg		     params, *param_count, w);
2594d522f475Smrg}
2595d522f475Smrg
2596d522f475Smrgvoid
2597d522f475SmrgHandleAppKeypad(Widget w,
2598894e0ac8Smrg		XEvent *event GCC_UNUSED,
2599894e0ac8Smrg		String *params,
2600d522f475Smrg		Cardinal *param_count)
2601d522f475Smrg{
2602d522f475Smrg    handle_vt_toggle(do_appkeypad, (term->keyboard.flags & MODE_DECKPAM),
2603d522f475Smrg		     params, *param_count, w);
2604d522f475Smrg}
2605d522f475Smrg
2606d522f475Smrgvoid
2607d522f475SmrgHandleScrollKey(Widget w,
2608894e0ac8Smrg		XEvent *event GCC_UNUSED,
2609894e0ac8Smrg		String *params,
2610d522f475Smrg		Cardinal *param_count)
2611d522f475Smrg{
261220d2c4d2Smrg    HANDLE_VT_TOGGLE(scrollkey);
2613d522f475Smrg}
2614d522f475Smrg
2615d522f475Smrgvoid
2616d522f475SmrgHandleScrollTtyOutput(Widget w,
2617894e0ac8Smrg		      XEvent *event GCC_UNUSED,
2618894e0ac8Smrg		      String *params,
2619d522f475Smrg		      Cardinal *param_count)
2620d522f475Smrg{
262120d2c4d2Smrg    HANDLE_VT_TOGGLE(scrollttyoutput);
2622d522f475Smrg}
2623d522f475Smrg
2624d522f475Smrgvoid
2625d522f475SmrgHandleAllow132(Widget w,
2626894e0ac8Smrg	       XEvent *event GCC_UNUSED,
2627894e0ac8Smrg	       String *params,
2628d522f475Smrg	       Cardinal *param_count)
2629d522f475Smrg{
263020d2c4d2Smrg    handle_vt_toggle(do_allow132, TScreenOf(term)->c132,
2631d522f475Smrg		     params, *param_count, w);
2632d522f475Smrg}
2633d522f475Smrg
2634d522f475Smrgvoid
2635d522f475SmrgHandleCursesEmul(Widget w,
2636894e0ac8Smrg		 XEvent *event GCC_UNUSED,
2637894e0ac8Smrg		 String *params,
2638d522f475Smrg		 Cardinal *param_count)
2639d522f475Smrg{
264020d2c4d2Smrg    handle_vt_toggle(do_cursesemul, TScreenOf(term)->curses,
2641d522f475Smrg		     params, *param_count, w);
2642d522f475Smrg}
2643d522f475Smrg
2644d522f475Smrgvoid
2645d522f475SmrgHandleBellIsUrgent(Widget w,
2646894e0ac8Smrg		   XEvent *event GCC_UNUSED,
2647894e0ac8Smrg		   String *params,
2648d522f475Smrg		   Cardinal *param_count)
2649d522f475Smrg{
265020d2c4d2Smrg    HANDLE_VT_TOGGLE(bellIsUrgent);
2651d522f475Smrg}
2652d522f475Smrg
2653d522f475Smrgvoid
2654d522f475SmrgHandleMarginBell(Widget w,
2655894e0ac8Smrg		 XEvent *event GCC_UNUSED,
2656894e0ac8Smrg		 String *params,
2657d522f475Smrg		 Cardinal *param_count)
2658d522f475Smrg{
265920d2c4d2Smrg    HANDLE_VT_TOGGLE(marginbell);
2660d522f475Smrg}
2661d522f475Smrg
2662d522f475Smrg#if OPT_BLINK_CURS
2663d522f475Smrgvoid
2664d522f475SmrgHandleCursorBlink(Widget w,
2665894e0ac8Smrg		  XEvent *event GCC_UNUSED,
2666894e0ac8Smrg		  String *params,
2667d522f475Smrg		  Cardinal *param_count)
2668d522f475Smrg{
266920d2c4d2Smrg    handle_vt_toggle(do_cursorblink, TScreenOf(term)->cursor_blink,
2670d522f475Smrg		     params, *param_count, w);
2671d522f475Smrg}
2672d522f475Smrg#endif
2673d522f475Smrg
2674d522f475Smrgvoid
2675d522f475SmrgHandleAltScreen(Widget w,
2676894e0ac8Smrg		XEvent *event GCC_UNUSED,
2677894e0ac8Smrg		String *params,
2678d522f475Smrg		Cardinal *param_count)
2679d522f475Smrg{
2680d522f475Smrg    /* eventually want to see if sensitive or not */
268120d2c4d2Smrg    handle_vt_toggle(do_altscreen, TScreenOf(term)->whichBuf,
2682d522f475Smrg		     params, *param_count, w);
2683d522f475Smrg}
2684d522f475Smrg
2685d522f475Smrgvoid
2686d522f475SmrgHandleTiteInhibit(Widget w,
2687894e0ac8Smrg		  XEvent *event GCC_UNUSED,
2688894e0ac8Smrg		  String *params,
2689d522f475Smrg		  Cardinal *param_count)
2690d522f475Smrg{
2691d522f475Smrg    /* eventually want to see if sensitive or not */
2692d522f475Smrg    handle_vt_toggle(do_titeInhibit, !(term->misc.titeInhibit),
2693d522f475Smrg		     params, *param_count, w);
2694d522f475Smrg}
2695d522f475Smrg
2696d522f475Smrg/* ARGSUSED */
2697d522f475Smrgvoid
2698d522f475SmrgHandleSoftReset(Widget w,
2699894e0ac8Smrg		XEvent *event GCC_UNUSED,
2700894e0ac8Smrg		String *params GCC_UNUSED,
2701d522f475Smrg		Cardinal *param_count GCC_UNUSED)
2702d522f475Smrg{
2703d522f475Smrg    do_softreset(w, (XtPointer) 0, (XtPointer) 0);
2704d522f475Smrg}
2705d522f475Smrg
2706d522f475Smrg/* ARGSUSED */
2707d522f475Smrgvoid
2708d522f475SmrgHandleHardReset(Widget w,
2709894e0ac8Smrg		XEvent *event GCC_UNUSED,
2710894e0ac8Smrg		String *params GCC_UNUSED,
2711d522f475Smrg		Cardinal *param_count GCC_UNUSED)
2712d522f475Smrg{
2713d522f475Smrg    do_hardreset(w, (XtPointer) 0, (XtPointer) 0);
2714d522f475Smrg}
2715d522f475Smrg
2716d522f475Smrg/* ARGSUSED */
2717d522f475Smrgvoid
2718d522f475SmrgHandleClearSavedLines(Widget w,
2719894e0ac8Smrg		      XEvent *event GCC_UNUSED,
2720894e0ac8Smrg		      String *params GCC_UNUSED,
2721d522f475Smrg		      Cardinal *param_count GCC_UNUSED)
2722d522f475Smrg{
2723d522f475Smrg    do_clearsavedlines(w, (XtPointer) 0, (XtPointer) 0);
2724d522f475Smrg}
2725d522f475Smrg
2726e39b573cSmrgvoid
2727e39b573cSmrgHandleAllowBoldFonts(Widget w,
2728894e0ac8Smrg		     XEvent *event GCC_UNUSED,
2729894e0ac8Smrg		     String *params,
2730e39b573cSmrg		     Cardinal *param_count)
2731e39b573cSmrg{
2732e39b573cSmrg    HANDLE_VT_TOGGLE(allowBoldFonts);
2733e39b573cSmrg}
2734e39b573cSmrg
273501037d57Smrg#if OPT_LOAD_VTFONTS
273601037d57Smrgvoid
273701037d57Smrgupdate_font_escape(void)
273801037d57Smrg{
273901037d57Smrg    TScreen *screen = TScreenOf(term);
274001037d57Smrg
274101037d57Smrg    SetItemSensitivity(fontMenuEntries[fontMenu_fontescape].widget,
274201037d57Smrg		       ((screen->allowFontOps &&
274301037d57Smrg			 screen->EscapeFontName())
274401037d57Smrg			? True : False));
274501037d57Smrg}
274601037d57Smrg#endif
274701037d57Smrg
2748d522f475Smrg#if OPT_DEC_CHRSET
2749d522f475Smrgvoid
2750d522f475SmrgHandleFontDoublesize(Widget w,
2751894e0ac8Smrg		     XEvent *event GCC_UNUSED,
2752894e0ac8Smrg		     String *params,
2753d522f475Smrg		     Cardinal *param_count)
2754d522f475Smrg{
275520d2c4d2Smrg    HANDLE_VT_TOGGLE(font_doublesize);
2756d522f475Smrg}
2757d522f475Smrg#endif
2758d522f475Smrg
2759d522f475Smrg#if OPT_BOX_CHARS
2760d522f475Smrgvoid
2761d522f475SmrgHandleFontBoxChars(Widget w,
2762894e0ac8Smrg		   XEvent *event GCC_UNUSED,
2763894e0ac8Smrg		   String *params,
2764d522f475Smrg		   Cardinal *param_count)
2765d522f475Smrg{
276620d2c4d2Smrg    handle_vt_toggle(do_font_boxchars, TScreenOf(term)->force_box_chars,
276720d2c4d2Smrg		     params, *param_count, w);
276820d2c4d2Smrg}
276920d2c4d2Smrg
277020d2c4d2Smrgvoid
277120d2c4d2SmrgHandleFontPacked(Widget w,
2772894e0ac8Smrg		 XEvent *event GCC_UNUSED,
2773894e0ac8Smrg		 String *params,
277420d2c4d2Smrg		 Cardinal *param_count)
277520d2c4d2Smrg{
277620d2c4d2Smrg    handle_vt_toggle(do_font_packed, TScreenOf(term)->force_packed,
2777d522f475Smrg		     params, *param_count, w);
2778d522f475Smrg}
2779d522f475Smrg#endif
2780d522f475Smrg
2781d522f475Smrg#if OPT_DEC_SOFTFONT
2782d522f475Smrgvoid
2783d522f475SmrgHandleFontLoading(Widget w,
2784894e0ac8Smrg		  XEvent *event GCC_UNUSED,
2785894e0ac8Smrg		  String *params,
2786d522f475Smrg		  Cardinal *param_count)
2787d522f475Smrg{
2788d522f475Smrg    handle_vt_toggle(do_font_loadable, term->misc.font_loadable,
2789d522f475Smrg		     params, *param_count, w);
2790d522f475Smrg}
2791d522f475Smrg#endif
2792d522f475Smrg
2793d522f475Smrg#if OPT_RENDERFONT
27940bd37d32Smrgstatic void
27950bd37d32Smrgupdate_fontmenu(XtermWidget xw)
27960bd37d32Smrg{
27970bd37d32Smrg    TScreen *screen = TScreenOf(xw);
27980bd37d32Smrg    int n;
27990bd37d32Smrg
28000bd37d32Smrg    for (n = 0; n <= fontMenu_lastBuiltin; ++n) {
28010bd37d32Smrg	Boolean active = (Boolean) (xw->work.render_font ||
28020bd37d32Smrg				    (screen->menu_font_sizes[n] >= 0));
28030bd37d32Smrg	SetItemSensitivity(fontMenuEntries[n].widget, active);
28040bd37d32Smrg    }
28050bd37d32Smrg}
28060bd37d32Smrg
2807d522f475Smrgvoid
2808d522f475SmrgHandleRenderFont(Widget w,
2809894e0ac8Smrg		 XEvent *event GCC_UNUSED,
2810894e0ac8Smrg		 String *params,
2811d522f475Smrg		 Cardinal *param_count)
2812d522f475Smrg{
281320d2c4d2Smrg    XtermWidget xw = (XtermWidget) term;
281420d2c4d2Smrg
281520d2c4d2Smrg    DefaultRenderFont(xw);
281620d2c4d2Smrg
28170bd37d32Smrg    handle_vt_toggle(do_font_renderfont, xw->work.render_font,
2818d522f475Smrg		     params, *param_count, w);
28190bd37d32Smrg
28200bd37d32Smrg    update_fontmenu(xw);
2821d522f475Smrg}
2822d522f475Smrg#endif
2823d522f475Smrg
2824d522f475Smrg#if OPT_WIDE_CHARS
2825d522f475Smrgvoid
2826d522f475SmrgHandleUTF8Mode(Widget w,
2827894e0ac8Smrg	       XEvent *event GCC_UNUSED,
2828894e0ac8Smrg	       String *params,
2829d522f475Smrg	       Cardinal *param_count)
2830d522f475Smrg{
283120d2c4d2Smrg    handle_vt_toggle(do_font_utf8_mode, TScreenOf(term)->utf8_mode,
2832d522f475Smrg		     params, *param_count, w);
2833d522f475Smrg}
2834d522f475Smrg
2835e39b573cSmrgvoid
2836e39b573cSmrgHandleUTF8Fonts(Widget w,
2837894e0ac8Smrg		XEvent *event GCC_UNUSED,
2838894e0ac8Smrg		String *params,
2839e39b573cSmrg		Cardinal *param_count)
2840e39b573cSmrg{
2841e39b573cSmrg    handle_vt_toggle(do_font_utf8_fonts, TScreenOf(term)->utf8_fonts,
2842e39b573cSmrg		     params, *param_count, w);
2843e39b573cSmrg}
2844e39b573cSmrg
2845d522f475Smrgvoid
2846d522f475SmrgHandleUTF8Title(Widget w,
2847894e0ac8Smrg		XEvent *event GCC_UNUSED,
2848894e0ac8Smrg		String *params,
2849d522f475Smrg		Cardinal *param_count)
2850d522f475Smrg{
285120d2c4d2Smrg    handle_vt_toggle(do_font_utf8_title, TScreenOf(term)->utf8_title,
2852d522f475Smrg		     params, *param_count, w);
2853d522f475Smrg}
2854d522f475Smrg#endif
2855d522f475Smrg
28562e4f8982Smrg#if OPT_SCREEN_DUMPS
28572e4f8982Smrgvoid
28582e4f8982SmrgHandleDumpHtml(Widget w GCC_UNUSED,
28592e4f8982Smrg	       XEvent *event GCC_UNUSED,
28602e4f8982Smrg	       String *params GCC_UNUSED,
28612e4f8982Smrg	       Cardinal *param_count GCC_UNUSED)
28622e4f8982Smrg{
28632e4f8982Smrg    xtermDumpHtml(term);
28642e4f8982Smrg}
28652e4f8982Smrg
28662e4f8982Smrgvoid
28672e4f8982SmrgHandleDumpSvg(Widget w GCC_UNUSED,
28682e4f8982Smrg	      XEvent *event GCC_UNUSED,
28692e4f8982Smrg	      String *params GCC_UNUSED,
28702e4f8982Smrg	      Cardinal *param_count GCC_UNUSED)
28712e4f8982Smrg{
28722e4f8982Smrg    xtermDumpSvg(term);
28732e4f8982Smrg}
28742e4f8982Smrg#endif
28752e4f8982Smrg
2876d522f475Smrg#if OPT_TEK4014
2877d522f475Smrgvoid
2878d522f475SmrgHandleSetTerminalType(Widget w,
2879894e0ac8Smrg		      XEvent *event GCC_UNUSED,
2880894e0ac8Smrg		      String *params,
2881d522f475Smrg		      Cardinal *param_count)
2882d522f475Smrg{
288320d2c4d2Smrg    XtermWidget xw = term;
288420d2c4d2Smrg
2885d522f475Smrg    if (*param_count == 1) {
2886d522f475Smrg	switch (params[0][0]) {
2887d522f475Smrg	case 'v':
2888d522f475Smrg	case 'V':
288920d2c4d2Smrg	    if (TEK4014_ACTIVE(xw))
2890d522f475Smrg		do_vtmode(w, (XtPointer) 0, (XtPointer) 0);
2891d522f475Smrg	    break;
2892d522f475Smrg	case 't':
2893d522f475Smrg	case 'T':
289420d2c4d2Smrg	    if (!TEK4014_ACTIVE(xw))
2895d522f475Smrg		do_tekmode(w, (XtPointer) 0, (XtPointer) 0);
2896d522f475Smrg	    break;
2897d522f475Smrg	default:
289820d2c4d2Smrg	    Bell(xw, XkbBI_MinorError, 0);
2899d522f475Smrg	}
2900d522f475Smrg    } else {
290120d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
2902d522f475Smrg    }
2903d522f475Smrg}
2904d522f475Smrg
2905d522f475Smrgvoid
2906d522f475SmrgHandleVisibility(Widget w,
2907894e0ac8Smrg		 XEvent *event GCC_UNUSED,
2908894e0ac8Smrg		 String *params,
2909d522f475Smrg		 Cardinal *param_count)
2910d522f475Smrg{
291120d2c4d2Smrg    XtermWidget xw = term;
291220d2c4d2Smrg
2913d522f475Smrg    if (*param_count == 2) {
2914d522f475Smrg	switch (params[0][0]) {
2915d522f475Smrg	case 'v':
2916d522f475Smrg	case 'V':
291720d2c4d2Smrg	    handle_tek_toggle(do_vtonoff, (int) TScreenOf(xw)->Vshow,
2918d522f475Smrg			      params + 1, (*param_count) - 1, w);
2919d522f475Smrg	    break;
2920d522f475Smrg	case 't':
2921d522f475Smrg	case 'T':
292220d2c4d2Smrg	    handle_tek_toggle(do_tekonoff, (int) TEK4014_SHOWN(xw),
2923d522f475Smrg			      params + 1, (*param_count) - 1, w);
2924d522f475Smrg	    break;
2925d522f475Smrg	default:
292620d2c4d2Smrg	    Bell(xw, XkbBI_MinorError, 0);
2927d522f475Smrg	}
2928d522f475Smrg    } else {
292920d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
2930d522f475Smrg    }
2931d522f475Smrg}
2932d522f475Smrg
2933d522f475Smrg/* ARGSUSED */
2934d522f475Smrgvoid
2935d522f475SmrgHandleSetTekText(Widget w,
2936894e0ac8Smrg		 XEvent *event GCC_UNUSED,
2937894e0ac8Smrg		 String *params,
2938d522f475Smrg		 Cardinal *param_count)
2939d522f475Smrg{
294020d2c4d2Smrg    XtermWidget xw = term;
2941d522f475Smrg    void (*proc) PROTO_XT_CALLBACK_ARGS = 0;
2942d522f475Smrg
2943d522f475Smrg    switch (*param_count) {
2944d522f475Smrg    case 0:
2945d522f475Smrg	proc = do_tektextlarge;
2946d522f475Smrg	break;
2947d522f475Smrg    case 1:
2948d522f475Smrg	switch (TekGetFontSize(params[0])) {
2949d522f475Smrg	case TEK_FONT_LARGE:
2950d522f475Smrg	    proc = do_tektextlarge;
2951d522f475Smrg	    break;
2952d522f475Smrg	case TEK_FONT_2:
2953d522f475Smrg	    proc = do_tektext2;
2954d522f475Smrg	    break;
2955d522f475Smrg	case TEK_FONT_3:
2956d522f475Smrg	    proc = do_tektext3;
2957d522f475Smrg	    break;
2958d522f475Smrg	case TEK_FONT_SMALL:
2959d522f475Smrg	    proc = do_tektextsmall;
2960d522f475Smrg	    break;
2961d522f475Smrg	}
2962d522f475Smrg	break;
2963d522f475Smrg    }
2964d522f475Smrg    if (proc)
2965d522f475Smrg	(*proc) (w, (XtPointer) 0, (XtPointer) 0);
2966d522f475Smrg    else
296720d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
2968d522f475Smrg}
2969d522f475Smrg
2970d522f475Smrg/* ARGSUSED */
2971d522f475Smrgvoid
2972d522f475SmrgHandleTekPage(Widget w,
2973894e0ac8Smrg	      XEvent *event GCC_UNUSED,
2974894e0ac8Smrg	      String *params GCC_UNUSED,
2975d522f475Smrg	      Cardinal *param_count GCC_UNUSED)
2976d522f475Smrg{
2977d522f475Smrg    do_tekpage(w, (XtPointer) 0, (XtPointer) 0);
2978d522f475Smrg}
2979d522f475Smrg
2980d522f475Smrg/* ARGSUSED */
2981d522f475Smrgvoid
2982d522f475SmrgHandleTekReset(Widget w,
2983894e0ac8Smrg	       XEvent *event GCC_UNUSED,
2984894e0ac8Smrg	       String *params GCC_UNUSED,
2985d522f475Smrg	       Cardinal *param_count GCC_UNUSED)
2986d522f475Smrg{
2987d522f475Smrg    do_tekreset(w, (XtPointer) 0, (XtPointer) 0);
2988d522f475Smrg}
2989d522f475Smrg
2990d522f475Smrg/* ARGSUSED */
2991d522f475Smrgvoid
2992d522f475SmrgHandleTekCopy(Widget w,
2993894e0ac8Smrg	      XEvent *event GCC_UNUSED,
2994894e0ac8Smrg	      String *params GCC_UNUSED,
2995d522f475Smrg	      Cardinal *param_count GCC_UNUSED)
2996d522f475Smrg{
2997d522f475Smrg    do_tekcopy(w, (XtPointer) 0, (XtPointer) 0);
2998d522f475Smrg}
2999d522f475Smrg#endif /* OPT_TEK4014 */
3000d522f475Smrg
3001d522f475Smrg#if OPT_TOOLBAR
3002d522f475Smrg/*
3003d522f475Smrg * The normal style of xterm popup menu delays initialization until the menu is
3004d522f475Smrg * first requested.  When using a toolbar, we can use the same initialization,
3005d522f475Smrg * though on the first popup there will be a little geometry layout jitter,
3006d522f475Smrg * since the menu is already managed when this callback is invoked.
3007d522f475Smrg */
3008d522f475Smrgstatic void
3009d522f475SmrgInitPopup(Widget gw,
3010d522f475Smrg	  XtPointer closure,
3011d522f475Smrg	  XtPointer data GCC_UNUSED)
3012d522f475Smrg{
3013d522f475Smrg    String params[2];
3014d522f475Smrg    Cardinal count = 1;
3015d522f475Smrg
3016d522f475Smrg    params[0] = (char *) closure;
3017d522f475Smrg    params[1] = 0;
3018d522f475Smrg    TRACE(("InitPopup(%s)\n", params[0]));
3019d522f475Smrg
3020d522f475Smrg    domenu(gw, (XEvent *) 0, params, &count);
3021d522f475Smrg
3022894e0ac8Smrg    XtRemoveCallback(gw, XtNpopupCallback, InitPopup, closure);
3023d522f475Smrg}
3024d522f475Smrg
3025d522f475Smrgstatic Dimension
3026d522f475SmrgSetupShell(Widget *menus, MenuList * shell, int n, int m)
3027d522f475Smrg{
3028d522f475Smrg    char temp[80];
3029d522f475Smrg    char *external_name = 0;
3030d522f475Smrg    Dimension button_height;
3031d522f475Smrg    Dimension button_border;
3032f2e35a3aSmrg    char *saveLocale = xtermSetLocale(LC_CTYPE, resource.menuLocale);
3033d522f475Smrg
3034d522f475Smrg    shell[n].w = XtVaCreatePopupShell(menu_names[n].internal_name,
3035d522f475Smrg				      simpleMenuWidgetClass,
3036d522f475Smrg				      *menus,
3037d522f475Smrg				      XtNgeometry, NULL,
3038d522f475Smrg				      (XtPointer) 0);
3039ae137402Smrg    TRACE(("created popupShel widget %p, window %#lx\n",
3040ae137402Smrg	   (void *) shell[n].w, XtWindow(shell[n].w)));
3041d522f475Smrg
3042d522f475Smrg    XtAddCallback(shell[n].w, XtNpopupCallback, InitPopup, menu_names[n].internal_name);
3043d522f475Smrg    XtVaGetValues(shell[n].w,
3044d522f475Smrg		  XtNlabel, &external_name,
3045d522f475Smrg		  (XtPointer) 0);
3046d522f475Smrg
3047d522f475Smrg    TRACE(("...SetupShell(%s) -> %s -> %#lx\n",
3048d522f475Smrg	   menu_names[n].internal_name,
3049d522f475Smrg	   external_name,
3050d522f475Smrg	   (long) shell[n].w));
3051d522f475Smrg
3052d522f475Smrg    sprintf(temp, "%sButton", menu_names[n].internal_name);
3053d522f475Smrg    shell[n].b = XtVaCreateManagedWidget(temp,
3054d522f475Smrg					 menuButtonWidgetClass,
3055d522f475Smrg					 *menus,
3056d522f475Smrg					 XtNfromHoriz, ((m >= 0)
3057d522f475Smrg							? shell[m].b
3058d522f475Smrg							: 0),
3059d522f475Smrg					 XtNmenuName, menu_names[n].internal_name,
3060d522f475Smrg					 XtNlabel, external_name,
3061d522f475Smrg					 (XtPointer) 0);
3062ae137402Smrg    TRACE(("created menuButton[%d] widget %p, window %#lx\n",
3063ae137402Smrg	   n, (void *) shell[n].b, XtWindow(shell[n].b)));
3064d522f475Smrg    XtVaGetValues(shell[n].b,
3065d522f475Smrg		  XtNheight, &button_height,
3066d522f475Smrg		  XtNborderWidth, &button_border,
3067d522f475Smrg		  (XtPointer) 0);
3068d522f475Smrg
3069f2e35a3aSmrg    xtermResetLocale(LC_CTYPE, saveLocale);
3070956cc18dSsnj    return (Dimension) (button_height + (button_border * 2));
3071d522f475Smrg}
3072d522f475Smrg#endif /* OPT_TOOLBAR */
3073d522f475Smrg
3074d522f475Smrgvoid
3075894e0ac8SmrgSetupMenus(Widget shell, Widget *forms, Widget *menus, Dimension *menu_high)
3076d522f475Smrg{
3077d522f475Smrg#if OPT_TOOLBAR
3078d522f475Smrg    Dimension button_height = 0;
3079d522f475Smrg    Dimension toolbar_hSpace;
3080d522f475Smrg    Arg args[10];
3081d522f475Smrg#endif
3082d522f475Smrg
3083d522f475Smrg    TRACE(("SetupMenus(%s)\n", shell == toplevel ? "vt100" : "tek4014"));
3084d522f475Smrg
3085d522f475Smrg    *menu_high = 0;
3086d522f475Smrg
3087d522f475Smrg    if (shell == toplevel) {
3088d522f475Smrg	XawSimpleMenuAddGlobalActions(app_con);
3089d522f475Smrg	XtRegisterGrabAction(HandlePopupMenu, True,
30900bd37d32Smrg			     (unsigned) (ButtonPressMask | ButtonReleaseMask),
3091d522f475Smrg			     GrabModeAsync, GrabModeAsync);
3092d522f475Smrg    }
3093d522f475Smrg#if OPT_TOOLBAR
3094d522f475Smrg    *forms = XtVaCreateManagedWidget("form",
3095d522f475Smrg				     formWidgetClass, shell,
3096d522f475Smrg				     (XtPointer) 0);
3097ae137402Smrg    TRACE(("created form widget %p, window %#lx\n",
3098ae137402Smrg	   (void *) *forms, XtWindow(*forms)));
3099d522f475Smrg    xtermAddInput(*forms);
3100d522f475Smrg
3101d522f475Smrg    /*
3102d522f475Smrg     * Set a nominal value for the preferred pane size, which lets the
3103d522f475Smrg     * buttons determine the actual height of the menu bar.  We don't show
3104d522f475Smrg     * the grip, because it's too easy to make the toolbar look bad that
3105d522f475Smrg     * way.
3106d522f475Smrg     */
3107d522f475Smrg    XtSetArg(args[0], XtNorientation, XtorientHorizontal);
3108d522f475Smrg    XtSetArg(args[1], XtNtop, XawChainTop);
3109d522f475Smrg    XtSetArg(args[2], XtNbottom, XawChainTop);
3110d522f475Smrg    XtSetArg(args[3], XtNleft, XawChainLeft);
3111d522f475Smrg    XtSetArg(args[4], XtNright, XawChainLeft);
3112d522f475Smrg
3113d522f475Smrg    if (resource.toolBar) {
3114d522f475Smrg	*menus = XtCreateManagedWidget("menubar", boxWidgetClass, *forms,
3115d522f475Smrg				       args, 5);
3116d522f475Smrg    } else {
3117d522f475Smrg	*menus = XtCreateWidget("menubar", boxWidgetClass, *forms, args, 5);
3118d522f475Smrg    }
3119ae137402Smrg    TRACE(("created menubar widget %p, window %#lx\n",
3120ae137402Smrg	   (void *) *menus, XtWindow(*menus)));
3121d522f475Smrg
3122d522f475Smrg    /*
3123d522f475Smrg     * The toolbar widget's height is not necessarily known yet.  If the
3124d522f475Smrg     * toolbar is not created as a managed widget, we can still make a good
3125d522f475Smrg     * guess about its height by collecting the widget's other resource values.
3126d522f475Smrg     */
3127d522f475Smrg    XtVaGetValues(*menus,
3128d522f475Smrg		  XtNhSpace, &toolbar_hSpace,
3129d522f475Smrg		  (XtPointer) 0);
3130d522f475Smrg
3131d522f475Smrg    if (shell == toplevel) {	/* vt100 */
3132d522f475Smrg	int j;
3133d522f475Smrg	for (j = mainMenu; j <= fontMenu; j++) {
3134d522f475Smrg	    button_height = SetupShell(menus, vt_shell, j, j - 1);
3135d522f475Smrg	}
3136d522f475Smrg    }
3137d522f475Smrg#if OPT_TEK4014
3138d522f475Smrg    else {			/* tek4014 */
313920d2c4d2Smrg	(void) SetupShell(menus, tek_shell, mainMenu, -1);
3140d522f475Smrg	button_height = SetupShell(menus, tek_shell, tekMenu, mainMenu);
3141d522f475Smrg    }
3142d522f475Smrg#endif
3143d522f475Smrg
3144d522f475Smrg    /*
3145d522f475Smrg     * Tell the main program how high the toolbar is, to help with the initial
3146d522f475Smrg     * layout.
3147d522f475Smrg     */
3148956cc18dSsnj    *menu_high = (Dimension) (button_height + 2 * (toolbar_hSpace));
31492eaa94a1Schristos    TRACE(("...menuHeight:%d = (%d + 2 * %d)\n",
31502eaa94a1Schristos	   *menu_high, button_height, toolbar_hSpace));
3151d522f475Smrg
3152d522f475Smrg#else /* !OPT_TOOLBAR */
3153d522f475Smrg    *forms = shell;
3154d522f475Smrg    *menus = shell;
3155d522f475Smrg#endif
3156d522f475Smrg
3157d522f475Smrg    TRACE(("...shell=%#lx\n", (long) shell));
3158d522f475Smrg    TRACE(("...forms=%#lx\n", (long) *forms));
3159d522f475Smrg    TRACE(("...menus=%#lx\n", (long) *menus));
3160d522f475Smrg}
3161d522f475Smrg
3162d522f475Smrgvoid
3163d522f475SmrgrepairSizeHints(void)
3164d522f475Smrg{
3165a1f3da82Smrg    XtermWidget xw = term;
3166a1f3da82Smrg    TScreen *screen = TScreenOf(xw);
3167d522f475Smrg
3168a1f3da82Smrg    if (XtIsRealized((Widget) xw)) {
3169a1f3da82Smrg	getXtermSizeHints(xw);
3170a1f3da82Smrg	xtermSizeHints(xw, ScrollbarWidth(screen));
3171d522f475Smrg
3172a1f3da82Smrg	XSetWMNormalHints(screen->display, VShellWindow(xw), &xw->hints);
3173d522f475Smrg    }
3174d522f475Smrg}
3175d522f475Smrg
3176d522f475Smrg#if OPT_TOOLBAR
3177d522f475Smrg#define INIT_POPUP(s, n) InitPopup(s[n].w, menu_names[n].internal_name, 0)
3178d522f475Smrg
3179d522f475Smrgstatic Bool
3180d522f475SmrgInitWidgetMenu(Widget shell)
3181d522f475Smrg{
3182d522f475Smrg    Bool result = False;
3183d522f475Smrg
318420d2c4d2Smrg    TRACE(("InitWidgetMenu(%p)\n", (void *) shell));
3185d522f475Smrg    if (term != 0) {
3186d522f475Smrg	if (shell == toplevel) {	/* vt100 */
3187d522f475Smrg	    if (!term->init_menu) {
3188d522f475Smrg		INIT_POPUP(vt_shell, mainMenu);
3189d522f475Smrg		INIT_POPUP(vt_shell, vtMenu);
3190d522f475Smrg		INIT_POPUP(vt_shell, fontMenu);
3191d522f475Smrg		term->init_menu = True;
3192d522f475Smrg		TRACE(("...InitWidgetMenu(vt)\n"));
3193d522f475Smrg	    }
3194d522f475Smrg	    result = term->init_menu;
3195d522f475Smrg	}
3196d522f475Smrg#if OPT_TEK4014
3197d522f475Smrg	else if (tekWidget) {	/* tek4014 */
3198d522f475Smrg	    if (!tekWidget->init_menu) {
3199d522f475Smrg		INIT_POPUP(tek_shell, mainMenu);
3200d522f475Smrg		INIT_POPUP(tek_shell, tekMenu);
3201d522f475Smrg		tekWidget->init_menu = True;
3202d522f475Smrg		TRACE(("...InitWidgetMenu(tek)\n"));
3203d522f475Smrg	    }
3204d522f475Smrg	    result = tekWidget->init_menu;
3205d522f475Smrg	}
3206d522f475Smrg#endif
3207d522f475Smrg    }
3208d522f475Smrg    TRACE(("...InitWidgetMenu ->%d\n", result));
3209d522f475Smrg    return result;
3210d522f475Smrg}
3211d522f475Smrg
3212d522f475Smrgstatic TbInfo *
3213d522f475Smrgtoolbar_info(Widget w)
3214d522f475Smrg{
3215d522f475Smrg    TRACE(("...getting toolbar_info\n"));
3216d522f475Smrg#if OPT_TEK4014
3217d522f475Smrg    if (w != (Widget) term)
3218d522f475Smrg	return &(tekWidget->tek.tb_info);
3219d522f475Smrg#else
3220d522f475Smrg    (void) w;
3221d522f475Smrg#endif
322220d2c4d2Smrg    return &(WhichVWin(TScreenOf(term))->tb_info);
3223d522f475Smrg}
3224d522f475Smrg
3225d522f475Smrgstatic void
3226d522f475Smrghide_toolbar(Widget w)
3227d522f475Smrg{
3228d522f475Smrg    if (w != 0) {
3229d522f475Smrg	TbInfo *info = toolbar_info(w);
3230d522f475Smrg
3231d522f475Smrg	TRACE(("hiding toolbar\n"));
3232d522f475Smrg	XtVaSetValues(w,
3233d522f475Smrg		      XtNfromVert, (Widget) 0,
3234d522f475Smrg		      (XtPointer) 0);
3235d522f475Smrg
3236d522f475Smrg	if (info->menu_bar != 0) {
3237d522f475Smrg	    repairSizeHints();
3238d522f475Smrg	    XtUnmanageChild(info->menu_bar);
3239d522f475Smrg	    if (XtIsRealized(info->menu_bar)) {
3240d522f475Smrg		XtUnmapWidget(info->menu_bar);
3241d522f475Smrg	    }
3242d522f475Smrg	}
3243d522f475Smrg	TRACE(("...hiding toolbar (done)\n"));
3244d522f475Smrg    }
3245d522f475Smrg}
3246d522f475Smrg
3247d522f475Smrgstatic void
3248d522f475Smrgshow_toolbar(Widget w)
3249d522f475Smrg{
3250d522f475Smrg    if (w != 0) {
3251d522f475Smrg	TbInfo *info = toolbar_info(w);
3252d522f475Smrg
3253d522f475Smrg	TRACE(("showing toolbar\n"));
3254d522f475Smrg	if (info->menu_bar != 0) {
3255d522f475Smrg	    XtVaSetValues(w,
3256d522f475Smrg			  XtNfromVert, info->menu_bar,
3257d522f475Smrg			  (XtPointer) 0);
3258d522f475Smrg	    if (XtIsRealized(info->menu_bar))
3259d522f475Smrg		repairSizeHints();
3260d522f475Smrg	    XtManageChild(info->menu_bar);
3261d522f475Smrg	    if (XtIsRealized(info->menu_bar)) {
3262d522f475Smrg		XtMapWidget(info->menu_bar);
3263d522f475Smrg	    }
3264d522f475Smrg	}
3265d522f475Smrg	/*
3266d522f475Smrg	 * This is needed to make the terminal widget move down below the
3267d522f475Smrg	 * toolbar.
3268d522f475Smrg	 */
3269d522f475Smrg	XawFormDoLayout(XtParent(w), True);
3270d522f475Smrg	TRACE(("...showing toolbar (done)\n"));
3271d522f475Smrg    }
3272d522f475Smrg}
3273d522f475Smrg
3274d522f475Smrg/*
3275d522f475Smrg * Make the toolbar visible or invisible in the current window(s).
3276d522f475Smrg */
3277d522f475Smrgvoid
3278d522f475SmrgShowToolbar(Bool enable)
3279d522f475Smrg{
328020d2c4d2Smrg    XtermWidget xw = term;
328120d2c4d2Smrg
3282d522f475Smrg    TRACE(("ShowToolbar(%d)\n", enable));
3283d522f475Smrg
328420d2c4d2Smrg    if (IsIcon(TScreenOf(xw))) {
328520d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
3286d522f475Smrg    } else {
3287d522f475Smrg	if (enable) {
3288d522f475Smrg	    if (InitWidgetMenu(toplevel))
328920d2c4d2Smrg		show_toolbar((Widget) xw);
3290d522f475Smrg#if OPT_TEK4014
3291d522f475Smrg	    if (InitWidgetMenu(tekshellwidget))
3292d522f475Smrg		show_toolbar((Widget) tekWidget);
3293d522f475Smrg#endif
3294d522f475Smrg	} else {
329520d2c4d2Smrg	    hide_toolbar((Widget) xw);
3296d522f475Smrg#if OPT_TEK4014
3297d522f475Smrg	    hide_toolbar((Widget) tekWidget);
3298d522f475Smrg#endif
3299d522f475Smrg	}
3300956cc18dSsnj	resource.toolBar = (Boolean) enable;
3301d522f475Smrg	update_toolbar();
3302d522f475Smrg    }
3303f2e35a3aSmrg#if OPT_TOOLBAR
3304f2e35a3aSmrg    /*
3305f2e35a3aSmrg     * Layout for the toolbar confuses the Shell widget.  Remind it that we
3306f2e35a3aSmrg     * would like to be iconified if the corresponding resource was set.
3307f2e35a3aSmrg     */
3308f2e35a3aSmrg    {
3309f2e35a3aSmrg	static Bool first = True;
3310f2e35a3aSmrg	if (first && XtIsRealized(toplevel)) {
3311f2e35a3aSmrg	    Boolean iconic = 0;
3312f2e35a3aSmrg
3313f2e35a3aSmrg	    XtVaGetValues(toplevel,
3314f2e35a3aSmrg			  XtNiconic, &iconic,
3315f2e35a3aSmrg			  (XtPointer) 0);
3316f2e35a3aSmrg
3317f2e35a3aSmrg	    if (iconic) {
3318f2e35a3aSmrg		TRACE(("...please iconify window %#lx\n", XtWindow(toplevel)));
3319f2e35a3aSmrg		xtermIconify(xw);
3320f2e35a3aSmrg	    }
3321f2e35a3aSmrg	    first = False;
3322f2e35a3aSmrg	}
3323f2e35a3aSmrg    }
3324f2e35a3aSmrg#endif
3325d522f475Smrg}
3326d522f475Smrg
3327d522f475Smrgvoid
3328d522f475SmrgHandleToolbar(Widget w,
3329894e0ac8Smrg	      XEvent *event GCC_UNUSED,
3330f2e35a3aSmrg	      String *params,
3331f2e35a3aSmrg	      Cardinal *param_count)
3332d522f475Smrg{
333320d2c4d2Smrg    XtermWidget xw = term;
333420d2c4d2Smrg
333520d2c4d2Smrg    if (IsIcon(TScreenOf(xw))) {
333620d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
3337d522f475Smrg    } else {
3338d522f475Smrg	handle_vt_toggle(do_toolbar, resource.toolBar,
3339d522f475Smrg			 params, *param_count, w);
3340d522f475Smrg    }
3341d522f475Smrg}
3342d522f475Smrg
3343d522f475Smrg/* ARGSUSED */
3344d522f475Smrgstatic void
3345d522f475Smrgdo_toolbar(Widget gw GCC_UNUSED,
3346d522f475Smrg	   XtPointer closure GCC_UNUSED,
3347d522f475Smrg	   XtPointer data GCC_UNUSED)
3348d522f475Smrg{
334920d2c4d2Smrg    XtermWidget xw = term;
335020d2c4d2Smrg
3351d522f475Smrg    /*
3352d522f475Smrg     * Toggle toolbars for both vt100 and tek windows, since they share the
3353d522f475Smrg     * menu which contains the checkbox indicating whether the toolbar is
3354d522f475Smrg     * active.
3355d522f475Smrg     */
335620d2c4d2Smrg    if (IsIcon(TScreenOf(xw))) {
335720d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
3358d522f475Smrg    } else {
3359956cc18dSsnj	ShowToolbar(ToggleFlag(resource.toolBar));
3360d522f475Smrg    }
3361d522f475Smrg}
3362d522f475Smrg
3363d522f475Smrgvoid
3364d522f475Smrgupdate_toolbar(void)
3365d522f475Smrg{
3366d522f475Smrg    UpdateCheckbox("update_toolbar",
3367d522f475Smrg		   mainMenuEntries,
3368d522f475Smrg		   mainMenu_toolbar,
3369d522f475Smrg		   resource.toolBar);
3370d522f475Smrg}
3371d522f475Smrg#endif /* OPT_TOOLBAR */
3372d522f475Smrg
3373d522f475Smrgvoid
3374d522f475Smrgupdate_securekbd(void)
3375d522f475Smrg{
3376d522f475Smrg    UpdateCheckbox("update_securekbd",
3377d522f475Smrg		   mainMenuEntries,
3378d522f475Smrg		   mainMenu_securekbd,
337920d2c4d2Smrg		   TScreenOf(term)->grabbedKbd);
3380d522f475Smrg}
3381d522f475Smrg
3382d522f475Smrgvoid
3383d522f475Smrgupdate_allowsends(void)
3384d522f475Smrg{
3385d522f475Smrg    UpdateCheckbox("update_allowsends",
3386d522f475Smrg		   mainMenuEntries,
3387d522f475Smrg		   mainMenu_allowsends,
338820d2c4d2Smrg		   TScreenOf(term)->allowSendEvents);
3389d522f475Smrg}
3390d522f475Smrg
3391d522f475Smrg#ifdef ALLOWLOGGING
3392d522f475Smrgvoid
3393d522f475Smrgupdate_logging(void)
3394d522f475Smrg{
3395d522f475Smrg    UpdateCheckbox("update_logging",
3396d522f475Smrg		   mainMenuEntries,
3397d522f475Smrg		   mainMenu_logging,
339820d2c4d2Smrg		   TScreenOf(term)->logging);
3399d522f475Smrg}
3400d522f475Smrg#endif
3401d522f475Smrg
3402e39b573cSmrg#if OPT_PRINT_ON_EXIT
3403e39b573cSmrgvoid
3404e39b573cSmrgupdate_write_error(void)
3405e39b573cSmrg{
3406e39b573cSmrg    UpdateCheckbox("update_write_error",
3407e39b573cSmrg		   mainMenuEntries,
3408e39b573cSmrg		   mainMenu_write_error,
3409e39b573cSmrg		   TScreenOf(term)->write_error);
3410e39b573cSmrg}
3411e39b573cSmrg#endif
3412e39b573cSmrg
3413d522f475Smrgvoid
3414d522f475Smrgupdate_print_redir(void)
3415d522f475Smrg{
3416d522f475Smrg    UpdateCheckbox("update_print_redir",
3417d522f475Smrg		   mainMenuEntries,
3418d522f475Smrg		   mainMenu_print_redir,
3419e39b573cSmrg		   PrinterOf(TScreenOf(term)).printer_controlmode);
3420d522f475Smrg}
3421d522f475Smrg
3422d522f475Smrgvoid
3423d522f475Smrgupdate_8bit_control(void)
3424d522f475Smrg{
3425d522f475Smrg    UpdateCheckbox("update_8bit_control",
3426d522f475Smrg		   mainMenuEntries,
3427d522f475Smrg		   mainMenu_8bit_ctrl,
342820d2c4d2Smrg		   TScreenOf(term)->control_eight_bits);
3429d522f475Smrg}
3430d522f475Smrg
3431d522f475Smrgvoid
3432d522f475Smrgupdate_decbkm(void)
3433d522f475Smrg{
3434d522f475Smrg    UpdateCheckbox("update_decbkm",
3435d522f475Smrg		   mainMenuEntries,
3436d522f475Smrg		   mainMenu_backarrow,
3437d522f475Smrg		   (term->keyboard.flags & MODE_DECBKM) != 0);
3438d522f475Smrg}
3439d522f475Smrg
3440d522f475Smrg#if OPT_NUM_LOCK
3441d522f475Smrgvoid
3442d522f475Smrgupdate_num_lock(void)
3443d522f475Smrg{
3444d522f475Smrg    UpdateCheckbox("update_num_lock",
3445d522f475Smrg		   mainMenuEntries,
3446d522f475Smrg		   mainMenu_num_lock,
3447d522f475Smrg		   term->misc.real_NumLock);
3448d522f475Smrg}
3449d522f475Smrg
3450d522f475Smrgvoid
3451d522f475Smrgupdate_alt_esc(void)
3452d522f475Smrg{
3453d522f475Smrg    UpdateCheckbox("update_alt_esc",
3454d522f475Smrg		   mainMenuEntries,
3455d522f475Smrg		   mainMenu_alt_esc,
345620d2c4d2Smrg		   TScreenOf(term)->alt_sends_esc);
3457d522f475Smrg}
3458d522f475Smrg
3459d522f475Smrgvoid
3460d522f475Smrgupdate_meta_esc(void)
3461d522f475Smrg{
3462d522f475Smrg    UpdateCheckbox("update_meta_esc",
3463d522f475Smrg		   mainMenuEntries,
3464d522f475Smrg		   mainMenu_meta_esc,
346520d2c4d2Smrg		   TScreenOf(term)->meta_sends_esc);
3466d522f475Smrg}
3467d522f475Smrg#endif
3468d522f475Smrg
3469d522f475Smrg#if OPT_SUN_FUNC_KEYS
3470d522f475Smrgvoid
3471d522f475Smrgupdate_sun_fkeys(void)
3472d522f475Smrg{
3473d522f475Smrg    UpdateCheckbox("update_sun_fkeys",
3474d522f475Smrg		   mainMenuEntries,
3475d522f475Smrg		   mainMenu_sun_fkeys,
3476d522f475Smrg		   term->keyboard.type == keyboardIsSun);
3477d522f475Smrg}
3478d522f475Smrg#endif
3479d522f475Smrg
3480d522f475Smrg#if OPT_TCAP_FKEYS
3481d522f475Smrgvoid
3482d522f475Smrgupdate_tcap_fkeys(void)
3483d522f475Smrg{
3484d522f475Smrg    UpdateCheckbox("update_tcap_fkeys",
3485d522f475Smrg		   mainMenuEntries,
3486d522f475Smrg		   mainMenu_tcap_fkeys,
3487d522f475Smrg		   term->keyboard.type == keyboardIsTermcap);
3488d522f475Smrg}
3489d522f475Smrg#endif
3490d522f475Smrg
3491d522f475Smrgvoid
3492d522f475Smrgupdate_old_fkeys(void)
3493d522f475Smrg{
3494d522f475Smrg    UpdateCheckbox("update_old_fkeys",
3495d522f475Smrg		   mainMenuEntries,
3496d522f475Smrg		   mainMenu_old_fkeys,
3497d522f475Smrg		   term->keyboard.type == keyboardIsLegacy);
3498d522f475Smrg}
3499d522f475Smrg
3500d522f475Smrgvoid
3501d522f475Smrgupdate_delete_del(void)
3502d522f475Smrg{
3503d522f475Smrg    UpdateCheckbox("update_delete_del",
3504d522f475Smrg		   mainMenuEntries,
3505d522f475Smrg		   mainMenu_delete_del,
3506d522f475Smrg		   xtermDeleteIsDEL(term));
3507d522f475Smrg}
3508d522f475Smrg
3509d522f475Smrg#if OPT_SUNPC_KBD
3510d522f475Smrgvoid
3511d522f475Smrgupdate_sun_kbd(void)
3512d522f475Smrg{
3513d522f475Smrg    UpdateCheckbox("update_sun_kbd",
3514d522f475Smrg		   mainMenuEntries,
3515d522f475Smrg		   mainMenu_sun_kbd,
3516d522f475Smrg		   term->keyboard.type == keyboardIsVT220);
3517d522f475Smrg}
3518d522f475Smrg#endif
3519d522f475Smrg
3520d522f475Smrg#if OPT_HP_FUNC_KEYS
3521d522f475Smrgvoid
3522d522f475Smrgupdate_hp_fkeys(void)
3523d522f475Smrg{
3524d522f475Smrg    UpdateCheckbox("update_hp_fkeys",
3525d522f475Smrg		   mainMenuEntries,
3526d522f475Smrg		   mainMenu_hp_fkeys,
3527d522f475Smrg		   term->keyboard.type == keyboardIsHP);
3528d522f475Smrg}
3529d522f475Smrg#endif
3530d522f475Smrg
3531d522f475Smrg#if OPT_SCO_FUNC_KEYS
3532d522f475Smrgvoid
3533d522f475Smrgupdate_sco_fkeys(void)
3534d522f475Smrg{
3535d522f475Smrg    UpdateCheckbox("update_sco_fkeys",
3536d522f475Smrg		   mainMenuEntries,
3537d522f475Smrg		   mainMenu_sco_fkeys,
3538d522f475Smrg		   term->keyboard.type == keyboardIsSCO);
3539d522f475Smrg}
3540d522f475Smrg#endif
3541d522f475Smrg
3542d522f475Smrgvoid
3543d522f475Smrgupdate_scrollbar(void)
3544d522f475Smrg{
3545d522f475Smrg    UpdateCheckbox("update_scrollbar",
3546d522f475Smrg		   vtMenuEntries,
3547d522f475Smrg		   vtMenu_scrollbar,
3548d522f475Smrg		   ScrollbarWidth(TScreenOf(term)));
3549d522f475Smrg}
3550d522f475Smrg
3551d522f475Smrgvoid
3552d522f475Smrgupdate_jumpscroll(void)
3553d522f475Smrg{
3554d522f475Smrg    UpdateCheckbox("update_jumpscroll",
3555d522f475Smrg		   vtMenuEntries,
3556d522f475Smrg		   vtMenu_jumpscroll,
355720d2c4d2Smrg		   TScreenOf(term)->jumpscroll);
3558d522f475Smrg}
3559d522f475Smrg
3560d522f475Smrgvoid
3561d522f475Smrgupdate_reversevideo(void)
3562d522f475Smrg{
3563d522f475Smrg    UpdateCheckbox("update_reversevideo",
3564d522f475Smrg		   vtMenuEntries,
3565d522f475Smrg		   vtMenu_reversevideo,
3566d522f475Smrg		   (term->misc.re_verse));
3567d522f475Smrg}
3568d522f475Smrg
3569d522f475Smrgvoid
3570d522f475Smrgupdate_autowrap(void)
3571d522f475Smrg{
3572f2e35a3aSmrg    DisableIfVT52(vtMenuEntries,
3573f2e35a3aSmrg		  vtMenu_autowrap);
3574d522f475Smrg    UpdateCheckbox("update_autowrap",
3575d522f475Smrg		   vtMenuEntries,
3576d522f475Smrg		   vtMenu_autowrap,
3577d522f475Smrg		   (term->flags & WRAPAROUND) != 0);
3578d522f475Smrg}
3579d522f475Smrg
3580d522f475Smrgvoid
3581d522f475Smrgupdate_reversewrap(void)
3582d522f475Smrg{
3583f2e35a3aSmrg    DisableIfVT52(vtMenuEntries,
3584f2e35a3aSmrg		  vtMenu_reversewrap);
3585d522f475Smrg    UpdateCheckbox("update_reversewrap",
3586d522f475Smrg		   vtMenuEntries,
3587d522f475Smrg		   vtMenu_reversewrap,
3588d522f475Smrg		   (term->flags & REVERSEWRAP) != 0);
3589d522f475Smrg}
3590d522f475Smrg
3591d522f475Smrgvoid
3592d522f475Smrgupdate_autolinefeed(void)
3593d522f475Smrg{
3594f2e35a3aSmrg    DisableIfVT52(vtMenuEntries,
3595f2e35a3aSmrg		  vtMenu_autolinefeed);
3596d522f475Smrg    UpdateCheckbox("update_autolinefeed",
3597d522f475Smrg		   vtMenuEntries,
3598d522f475Smrg		   vtMenu_autolinefeed,
3599d522f475Smrg		   (term->flags & LINEFEED) != 0);
3600d522f475Smrg}
3601d522f475Smrg
3602d522f475Smrgvoid
3603d522f475Smrgupdate_appcursor(void)
3604d522f475Smrg{
3605f2e35a3aSmrg    DisableIfVT52(vtMenuEntries,
3606f2e35a3aSmrg		  vtMenu_appcursor);
3607d522f475Smrg    UpdateCheckbox("update_appcursor",
3608d522f475Smrg		   vtMenuEntries,
3609d522f475Smrg		   vtMenu_appcursor,
3610d522f475Smrg		   (term->keyboard.flags & MODE_DECCKM) != 0);
3611d522f475Smrg}
3612d522f475Smrg
3613d522f475Smrgvoid
3614d522f475Smrgupdate_appkeypad(void)
3615d522f475Smrg{
3616d522f475Smrg    UpdateCheckbox("update_appkeypad",
3617d522f475Smrg		   vtMenuEntries,
3618d522f475Smrg		   vtMenu_appkeypad,
3619d522f475Smrg		   (term->keyboard.flags & MODE_DECKPAM) != 0);
3620d522f475Smrg}
3621d522f475Smrg
3622d522f475Smrgvoid
3623d522f475Smrgupdate_scrollkey(void)
3624d522f475Smrg{
3625d522f475Smrg    UpdateCheckbox("update_scrollkey",
3626d522f475Smrg		   vtMenuEntries,
3627d522f475Smrg		   vtMenu_scrollkey,
362820d2c4d2Smrg		   TScreenOf(term)->scrollkey);
3629d522f475Smrg}
3630d522f475Smrg
3631d522f475Smrgvoid
3632d522f475Smrgupdate_scrollttyoutput(void)
3633d522f475Smrg{
3634d522f475Smrg    UpdateCheckbox("update_scrollttyoutput",
3635d522f475Smrg		   vtMenuEntries,
3636d522f475Smrg		   vtMenu_scrollttyoutput,
363720d2c4d2Smrg		   TScreenOf(term)->scrollttyoutput);
3638d522f475Smrg}
3639d522f475Smrg
3640d522f475Smrgvoid
3641d522f475Smrgupdate_keepSelection(void)
3642d522f475Smrg{
3643d522f475Smrg    UpdateCheckbox("update_keepSelection",
3644d522f475Smrg		   vtMenuEntries,
3645d522f475Smrg		   vtMenu_keepSelection,
364620d2c4d2Smrg		   TScreenOf(term)->keepSelection);
3647d522f475Smrg}
3648d522f475Smrg
3649d522f475Smrgvoid
3650d522f475Smrgupdate_selectToClipboard(void)
3651d522f475Smrg{
3652d522f475Smrg    UpdateCheckbox("update_selectToClipboard",
3653d522f475Smrg		   vtMenuEntries,
3654d522f475Smrg		   vtMenu_selectToClipboard,
365520d2c4d2Smrg		   TScreenOf(term)->selectToClipboard);
3656d522f475Smrg}
3657d522f475Smrg
3658d522f475Smrgvoid
3659d522f475Smrgupdate_allow132(void)
3660d522f475Smrg{
3661f2e35a3aSmrg    DisableIfVT52(vtMenuEntries,
3662f2e35a3aSmrg		  vtMenu_allow132);
3663d522f475Smrg    UpdateCheckbox("update_allow132",
3664d522f475Smrg		   vtMenuEntries,
3665d522f475Smrg		   vtMenu_allow132,
366620d2c4d2Smrg		   TScreenOf(term)->c132);
3667d522f475Smrg}
3668d522f475Smrg
3669d522f475Smrgvoid
3670d522f475Smrgupdate_cursesemul(void)
3671d522f475Smrg{
3672d522f475Smrg#if 0				/* 2006-2-12: no longer menu entry */
3673d522f475Smrg    UpdateMenuItem("update_cursesemul", vtMenuEntries, vtMenu_cursesemul,
367420d2c4d2Smrg		   TScreenOf(term)->curses);
3675d522f475Smrg#endif
3676d522f475Smrg}
3677d522f475Smrg
3678d522f475Smrgvoid
3679d522f475Smrgupdate_visualbell(void)
3680d522f475Smrg{
3681d522f475Smrg    UpdateCheckbox("update_visualbell",
3682d522f475Smrg		   vtMenuEntries,
3683d522f475Smrg		   vtMenu_visualbell,
368420d2c4d2Smrg		   TScreenOf(term)->visualbell);
3685d522f475Smrg}
3686d522f475Smrg
3687d522f475Smrgvoid
3688d522f475Smrgupdate_bellIsUrgent(void)
3689d522f475Smrg{
3690d522f475Smrg    UpdateCheckbox("update_bellIsUrgent",
3691d522f475Smrg		   vtMenuEntries,
3692d522f475Smrg		   vtMenu_bellIsUrgent,
369320d2c4d2Smrg		   TScreenOf(term)->bellIsUrgent);
3694d522f475Smrg}
3695d522f475Smrg
3696d522f475Smrgvoid
3697d522f475Smrgupdate_poponbell(void)
3698d522f475Smrg{
3699d522f475Smrg    UpdateCheckbox("update_poponbell",
3700d522f475Smrg		   vtMenuEntries,
3701d522f475Smrg		   vtMenu_poponbell,
370220d2c4d2Smrg		   TScreenOf(term)->poponbell);
3703d522f475Smrg}
3704d522f475Smrg
3705d522f475Smrg#ifndef update_marginbell	/* 2007-3-7: no longer menu entry */
3706d522f475Smrgvoid
3707d522f475Smrgupdate_marginbell(void)
3708d522f475Smrg{
3709d522f475Smrg    UpdateCheckbox("update_marginbell",
3710d522f475Smrg		   vtMenuEntries,
3711d522f475Smrg		   vtMenu_marginbell,
371220d2c4d2Smrg		   TScreenOf(term)->marginbell);
3713d522f475Smrg}
3714d522f475Smrg#endif
3715d522f475Smrg
3716d522f475Smrg#if OPT_BLINK_CURS
3717d522f475Smrgvoid
3718d522f475Smrgupdate_cursorblink(void)
3719d522f475Smrg{
3720f2e35a3aSmrg    BlinkOps check = TScreenOf(term)->cursor_blink;
3721f2e35a3aSmrg
3722f2e35a3aSmrg    if (check == cbAlways ||
3723f2e35a3aSmrg	check == cbNever) {
3724f2e35a3aSmrg	SetItemSensitivity(vtMenuEntries[vtMenu_cursorblink].widget, False);
3725f2e35a3aSmrg    }
3726d522f475Smrg    UpdateCheckbox("update_cursorblink",
3727d522f475Smrg		   vtMenuEntries,
3728d522f475Smrg		   vtMenu_cursorblink,
3729f2e35a3aSmrg		   (check == cbTrue ||
3730f2e35a3aSmrg		    check == cbAlways));
3731d522f475Smrg}
3732d522f475Smrg#endif
3733d522f475Smrg
3734d522f475Smrgvoid
3735d522f475Smrgupdate_altscreen(void)
3736d522f475Smrg{
3737d522f475Smrg    UpdateCheckbox("update_altscreen",
3738d522f475Smrg		   vtMenuEntries,
3739d522f475Smrg		   vtMenu_altscreen,
374020d2c4d2Smrg		   TScreenOf(term)->whichBuf);
3741d522f475Smrg}
3742d522f475Smrg
3743d522f475Smrgvoid
3744d522f475Smrgupdate_titeInhibit(void)
3745d522f475Smrg{
3746d522f475Smrg    UpdateCheckbox("update_titeInhibit",
3747d522f475Smrg		   vtMenuEntries,
3748d522f475Smrg		   vtMenu_titeInhibit,
3749d522f475Smrg		   !(term->misc.titeInhibit));
3750d522f475Smrg}
3751d522f475Smrg
3752d522f475Smrg#ifndef NO_ACTIVE_ICON
3753d522f475Smrgvoid
3754d522f475Smrgupdate_activeicon(void)
3755d522f475Smrg{
375604b94745Smrg    SetItemSensitivity(vtMenuEntries[vtMenu_activeicon].widget, False);
3757d522f475Smrg    UpdateCheckbox("update_activeicon",
3758d522f475Smrg		   vtMenuEntries,
3759d522f475Smrg		   vtMenu_activeicon,
37600bd37d32Smrg		   term->work.active_icon);
3761d522f475Smrg}
3762d522f475Smrg#endif /* NO_ACTIVE_ICON */
3763d522f475Smrg
3764e39b573cSmrgstatic void
3765e39b573cSmrgdo_allowBoldFonts(Widget w,
3766e39b573cSmrg		  XtPointer closure GCC_UNUSED,
3767e39b573cSmrg		  XtPointer data GCC_UNUSED)
3768e39b573cSmrg{
3769e39b573cSmrg    XtermWidget xw = getXtermWidget(w);
3770e39b573cSmrg    if (xw != 0) {
3771e39b573cSmrg	ToggleFlag(TScreenOf(xw)->allowBoldFonts);
3772e39b573cSmrg	update_menu_allowBoldFonts();
3773e39b573cSmrg	Redraw();
3774e39b573cSmrg    }
3775e39b573cSmrg}
3776e39b573cSmrg
3777d522f475Smrg#if OPT_DEC_CHRSET
3778d522f475Smrgvoid
3779d522f475Smrgupdate_font_doublesize(void)
3780d522f475Smrg{
3781d522f475Smrg    UpdateCheckbox("update_font_doublesize",
3782d522f475Smrg		   fontMenuEntries,
3783d522f475Smrg		   fontMenu_font_doublesize,
378420d2c4d2Smrg		   TScreenOf(term)->font_doublesize);
3785d522f475Smrg}
3786d522f475Smrg#endif
3787d522f475Smrg
3788d522f475Smrg#if OPT_BOX_CHARS
3789d522f475Smrgvoid
3790d522f475Smrgupdate_font_boxchars(void)
3791d522f475Smrg{
3792f2e35a3aSmrg    SetItemSensitivity(fontMenuEntries[fontMenu_font_boxchars].widget,
3793f2e35a3aSmrg		       !TScreenOf(term)->broken_box_chars);
3794d522f475Smrg    UpdateCheckbox("update_font_boxchars",
3795d522f475Smrg		   fontMenuEntries,
3796d522f475Smrg		   fontMenu_font_boxchars,
3797f2e35a3aSmrg		   TScreenOf(term)->force_box_chars ||
3798f2e35a3aSmrg		   TScreenOf(term)->broken_box_chars);
379920d2c4d2Smrg}
380020d2c4d2Smrg
380120d2c4d2Smrgvoid
380220d2c4d2Smrgupdate_font_packed(void)
380320d2c4d2Smrg{
380420d2c4d2Smrg    UpdateCheckbox("update_font_packed",
380520d2c4d2Smrg		   fontMenuEntries,
380620d2c4d2Smrg		   fontMenu_font_packedfont,
380720d2c4d2Smrg		   TScreenOf(term)->force_packed);
3808d522f475Smrg}
3809d522f475Smrg#endif
3810d522f475Smrg
3811d522f475Smrg#if OPT_DEC_SOFTFONT
3812d522f475Smrgvoid
3813d522f475Smrgupdate_font_loadable(void)
3814d522f475Smrg{
3815d522f475Smrg    UpdateCheckbox("update_font_loadable",
3816d522f475Smrg		   fontMenuEntries,
3817d522f475Smrg		   fontMenu_font_loadable,
3818d522f475Smrg		   term->misc.font_loadable);
3819d522f475Smrg}
3820d522f475Smrg#endif
3821d522f475Smrg
3822d522f475Smrg#if OPT_RENDERFONT
3823d522f475Smrgvoid
3824d522f475Smrgupdate_font_renderfont(void)
3825d522f475Smrg{
3826d522f475Smrg    UpdateCheckbox("update_font_renderfont",
3827d522f475Smrg		   fontMenuEntries,
3828d522f475Smrg		   fontMenu_render_font,
38290bd37d32Smrg		   (term->work.render_font == True));
383020d2c4d2Smrg    SetItemSensitivity(fontMenuEntries[fontMenu_render_font].widget,
3831913cc679Smrg		       !IsEmpty(CurrentXftFont(term)));
3832f2e35a3aSmrg
3833f2e35a3aSmrg#if OPT_BOX_CHARS
3834f2e35a3aSmrg    if (term->work.render_font) {
3835f2e35a3aSmrg	TScreenOf(term)->broken_box_chars = term->work.broken_box_chars;
3836f2e35a3aSmrg    } else {
3837f2e35a3aSmrg	TScreenOf(term)->broken_box_chars = False;
3838f2e35a3aSmrg    }
3839f2e35a3aSmrg#endif
3840f2e35a3aSmrg    update_font_boxchars();
3841f2e35a3aSmrg
38420bd37d32Smrg    update_fontmenu(term);
3843d522f475Smrg}
3844d522f475Smrg#endif
3845d522f475Smrg
3846d522f475Smrg#if OPT_WIDE_CHARS
3847d522f475Smrgvoid
3848d522f475Smrgupdate_font_utf8_mode(void)
3849d522f475Smrg{
385020d2c4d2Smrg    Bool active = (TScreenOf(term)->utf8_mode != uAlways);
385120d2c4d2Smrg    Bool enable = (TScreenOf(term)->utf8_mode != uFalse);
3852d522f475Smrg
3853d522f475Smrg    TRACE(("update_font_utf8_mode active %d, enable %d\n", active, enable));
3854e39b573cSmrg    SetItemSensitivity(fontMenuEntries[fontMenu_utf8_mode].widget, active);
3855d522f475Smrg    UpdateCheckbox("update_font_utf8_mode",
3856d522f475Smrg		   fontMenuEntries,
3857e39b573cSmrg		   fontMenu_utf8_mode,
3858e39b573cSmrg		   enable);
3859e39b573cSmrg}
3860e39b573cSmrg
3861e39b573cSmrgvoid
3862e39b573cSmrgupdate_font_utf8_fonts(void)
3863e39b573cSmrg{
3864e39b573cSmrg    Bool active = (TScreenOf(term)->utf8_fonts != uAlways);
3865e39b573cSmrg    Bool enable = (TScreenOf(term)->utf8_fonts != uFalse);
3866e39b573cSmrg
3867e39b573cSmrg    TRACE(("update_font_utf8_fonts active %d, enable %d\n", active, enable));
3868e39b573cSmrg    SetItemSensitivity(fontMenuEntries[fontMenu_utf8_fonts].widget, active);
3869e39b573cSmrg    UpdateCheckbox("update_font_utf8_fonts",
3870e39b573cSmrg		   fontMenuEntries,
3871e39b573cSmrg		   fontMenu_utf8_fonts,
3872d522f475Smrg		   enable);
3873d522f475Smrg}
3874d522f475Smrg
3875d522f475Smrgvoid
3876d522f475Smrgupdate_font_utf8_title(void)
3877d522f475Smrg{
3878f2e35a3aSmrg    Bool active = (TScreenOf(term)->utf8_mode != uAlways);
3879f2e35a3aSmrg    Bool enable = (TScreenOf(term)->utf8_mode != uFalse);
3880d522f475Smrg
3881d522f475Smrg    TRACE(("update_font_utf8_title active %d, enable %d\n", active, enable));
3882e39b573cSmrg    SetItemSensitivity(fontMenuEntries[fontMenu_utf8_title].widget, active);
3883d522f475Smrg    UpdateCheckbox("update_font_utf8_title",
3884d522f475Smrg		   fontMenuEntries,
3885e39b573cSmrg		   fontMenu_utf8_title,
3886d522f475Smrg		   enable);
3887d522f475Smrg}
3888d522f475Smrg#endif
3889d522f475Smrg
38900bd37d32Smrg#if OPT_DEC_CHRSET || OPT_BOX_CHARS || OPT_DEC_SOFTFONT
3891e39b573cSmrgvoid
3892e39b573cSmrgupdate_menu_allowBoldFonts(void)
3893e39b573cSmrg{
3894e39b573cSmrg    UpdateCheckbox("update_menu_allowBoldFonts",
3895e39b573cSmrg		   fontMenuEntries,
3896e39b573cSmrg		   fontMenu_allowBoldFonts,
3897e39b573cSmrg		   TScreenOf(term)->allowBoldFonts);
3898e39b573cSmrg}
38990bd37d32Smrg#endif
3900e39b573cSmrg
3901956cc18dSsnj#if OPT_ALLOW_XXX_OPS
3902956cc18dSsnjstatic void
3903956cc18dSsnjenable_allow_xxx_ops(Bool enable)
3904956cc18dSsnj{
3905956cc18dSsnj    SetItemSensitivity(fontMenuEntries[fontMenu_allowFontOps].widget, enable);
3906913cc679Smrg    SetItemSensitivity(fontMenuEntries[fontMenu_allowMouseOps].widget, enable);
3907956cc18dSsnj    SetItemSensitivity(fontMenuEntries[fontMenu_allowTcapOps].widget, enable);
3908956cc18dSsnj    SetItemSensitivity(fontMenuEntries[fontMenu_allowTitleOps].widget, enable);
3909956cc18dSsnj    SetItemSensitivity(fontMenuEntries[fontMenu_allowWindowOps].widget, enable);
3910956cc18dSsnj}
3911956cc18dSsnj
391220d2c4d2Smrgstatic void
391320d2c4d2Smrgdo_allowColorOps(Widget w,
391420d2c4d2Smrg		 XtPointer closure GCC_UNUSED,
391520d2c4d2Smrg		 XtPointer data GCC_UNUSED)
391620d2c4d2Smrg{
391720d2c4d2Smrg    XtermWidget xw = getXtermWidget(w);
391820d2c4d2Smrg    if (xw != 0) {
391920d2c4d2Smrg	ToggleFlag(TScreenOf(xw)->allowColorOps);
392020d2c4d2Smrg	update_menu_allowColorOps();
392120d2c4d2Smrg    }
392220d2c4d2Smrg}
392320d2c4d2Smrg
3924956cc18dSsnjstatic void
3925956cc18dSsnjdo_allowFontOps(Widget w,
3926956cc18dSsnj		XtPointer closure GCC_UNUSED,
3927956cc18dSsnj		XtPointer data GCC_UNUSED)
3928956cc18dSsnj{
3929956cc18dSsnj    XtermWidget xw = getXtermWidget(w);
3930956cc18dSsnj    if (xw != 0) {
393120d2c4d2Smrg	ToggleFlag(TScreenOf(xw)->allowFontOps);
3932956cc18dSsnj	update_menu_allowFontOps();
3933956cc18dSsnj    }
3934956cc18dSsnj}
3935956cc18dSsnj
3936913cc679Smrgstatic void
3937913cc679Smrgdo_allowMouseOps(Widget w,
3938913cc679Smrg		 XtPointer closure GCC_UNUSED,
3939913cc679Smrg		 XtPointer data GCC_UNUSED)
3940913cc679Smrg{
3941913cc679Smrg    XtermWidget xw = getXtermWidget(w);
3942913cc679Smrg    if (xw != 0) {
3943913cc679Smrg	ToggleFlag(TScreenOf(xw)->allowMouseOps);
3944913cc679Smrg	update_menu_allowMouseOps();
3945913cc679Smrg    }
3946913cc679Smrg}
3947913cc679Smrg
3948956cc18dSsnjstatic void
3949956cc18dSsnjdo_allowTcapOps(Widget w,
3950956cc18dSsnj		XtPointer closure GCC_UNUSED,
3951956cc18dSsnj		XtPointer data GCC_UNUSED)
3952956cc18dSsnj{
3953956cc18dSsnj    XtermWidget xw = getXtermWidget(w);
3954956cc18dSsnj    if (xw != 0) {
395520d2c4d2Smrg	ToggleFlag(TScreenOf(xw)->allowTcapOps);
3956956cc18dSsnj	update_menu_allowTcapOps();
3957956cc18dSsnj    }
3958956cc18dSsnj}
3959956cc18dSsnj
3960956cc18dSsnjstatic void
3961956cc18dSsnjdo_allowTitleOps(Widget w,
3962956cc18dSsnj		 XtPointer closure GCC_UNUSED,
3963956cc18dSsnj		 XtPointer data GCC_UNUSED)
3964956cc18dSsnj{
3965956cc18dSsnj    XtermWidget xw = getXtermWidget(w);
3966956cc18dSsnj    if (xw != 0) {
396720d2c4d2Smrg	ToggleFlag(TScreenOf(xw)->allowTitleOps);
3968956cc18dSsnj	update_menu_allowTitleOps();
3969956cc18dSsnj    }
3970956cc18dSsnj}
3971956cc18dSsnj
3972956cc18dSsnjstatic void
3973956cc18dSsnjdo_allowWindowOps(Widget w,
3974956cc18dSsnj		  XtPointer closure GCC_UNUSED,
3975956cc18dSsnj		  XtPointer data GCC_UNUSED)
3976956cc18dSsnj{
3977956cc18dSsnj    XtermWidget xw = getXtermWidget(w);
3978956cc18dSsnj    if (xw != 0) {
397920d2c4d2Smrg	ToggleFlag(TScreenOf(xw)->allowWindowOps);
3980956cc18dSsnj	update_menu_allowWindowOps();
3981956cc18dSsnj    }
3982956cc18dSsnj}
3983956cc18dSsnj
398420d2c4d2Smrgvoid
398520d2c4d2SmrgHandleAllowColorOps(Widget w,
3986894e0ac8Smrg		    XEvent *event GCC_UNUSED,
3987894e0ac8Smrg		    String *params,
398820d2c4d2Smrg		    Cardinal *param_count)
398920d2c4d2Smrg{
399020d2c4d2Smrg    HANDLE_VT_TOGGLE(allowColorOps);
399120d2c4d2Smrg}
399220d2c4d2Smrg
3993956cc18dSsnjvoid
3994956cc18dSsnjHandleAllowFontOps(Widget w,
3995894e0ac8Smrg		   XEvent *event GCC_UNUSED,
3996894e0ac8Smrg		   String *params,
3997956cc18dSsnj		   Cardinal *param_count)
3998956cc18dSsnj{
399920d2c4d2Smrg    HANDLE_VT_TOGGLE(allowFontOps);
4000956cc18dSsnj}
4001956cc18dSsnj
4002913cc679Smrgvoid
4003913cc679SmrgHandleAllowMouseOps(Widget w,
4004913cc679Smrg		    XEvent *event GCC_UNUSED,
4005913cc679Smrg		    String *params,
4006913cc679Smrg		    Cardinal *param_count)
4007913cc679Smrg{
4008913cc679Smrg    HANDLE_VT_TOGGLE(allowMouseOps);
4009913cc679Smrg}
4010913cc679Smrg
4011956cc18dSsnjvoid
4012956cc18dSsnjHandleAllowTcapOps(Widget w,
4013894e0ac8Smrg		   XEvent *event GCC_UNUSED,
4014894e0ac8Smrg		   String *params,
4015956cc18dSsnj		   Cardinal *param_count)
4016956cc18dSsnj{
401720d2c4d2Smrg    HANDLE_VT_TOGGLE(allowTcapOps);
4018956cc18dSsnj}
4019956cc18dSsnj
4020956cc18dSsnjvoid
4021956cc18dSsnjHandleAllowTitleOps(Widget w,
4022894e0ac8Smrg		    XEvent *event GCC_UNUSED,
4023894e0ac8Smrg		    String *params,
4024956cc18dSsnj		    Cardinal *param_count)
4025956cc18dSsnj{
402620d2c4d2Smrg    HANDLE_VT_TOGGLE(allowTitleOps);
4027956cc18dSsnj}
4028956cc18dSsnj
4029956cc18dSsnjvoid
4030956cc18dSsnjHandleAllowWindowOps(Widget w,
4031894e0ac8Smrg		     XEvent *event GCC_UNUSED,
4032894e0ac8Smrg		     String *params,
4033956cc18dSsnj		     Cardinal *param_count)
4034956cc18dSsnj{
403520d2c4d2Smrg    HANDLE_VT_TOGGLE(allowWindowOps);
4036956cc18dSsnj}
4037956cc18dSsnj
4038956cc18dSsnjvoid
403920d2c4d2Smrgupdate_menu_allowColorOps(void)
4040956cc18dSsnj{
404120d2c4d2Smrg    UpdateCheckbox("update_menu_allowColorOps",
4042956cc18dSsnj		   fontMenuEntries,
404320d2c4d2Smrg		   fontMenu_allowColorOps,
404420d2c4d2Smrg		   TScreenOf(term)->allowColorOps);
4045956cc18dSsnj}
4046956cc18dSsnj
4047956cc18dSsnjvoid
4048956cc18dSsnjupdate_menu_allowFontOps(void)
4049956cc18dSsnj{
4050956cc18dSsnj    UpdateCheckbox("update_menu_allowFontOps",
4051956cc18dSsnj		   fontMenuEntries,
4052956cc18dSsnj		   fontMenu_allowFontOps,
405320d2c4d2Smrg		   TScreenOf(term)->allowFontOps);
405420d2c4d2Smrg}
405520d2c4d2Smrg
4056913cc679Smrgvoid
4057913cc679Smrgupdate_menu_allowMouseOps(void)
4058913cc679Smrg{
4059913cc679Smrg    UpdateCheckbox("update_menu_allowMouseOps",
4060913cc679Smrg		   fontMenuEntries,
4061913cc679Smrg		   fontMenu_allowMouseOps,
4062913cc679Smrg		   TScreenOf(term)->allowMouseOps);
4063913cc679Smrg}
4064913cc679Smrg
406520d2c4d2Smrgvoid
406620d2c4d2Smrgupdate_menu_allowTcapOps(void)
406720d2c4d2Smrg{
406820d2c4d2Smrg    UpdateCheckbox("update_menu_allowTcapOps",
406920d2c4d2Smrg		   fontMenuEntries,
407020d2c4d2Smrg		   fontMenu_allowTcapOps,
407120d2c4d2Smrg		   TScreenOf(term)->allowTcapOps);
4072956cc18dSsnj}
4073956cc18dSsnj
4074956cc18dSsnjvoid
4075956cc18dSsnjupdate_menu_allowTitleOps(void)
4076956cc18dSsnj{
4077956cc18dSsnj    UpdateCheckbox("update_menu_allowTitleOps",
4078956cc18dSsnj		   fontMenuEntries,
4079956cc18dSsnj		   fontMenu_allowTitleOps,
408020d2c4d2Smrg		   TScreenOf(term)->allowTitleOps);
4081956cc18dSsnj}
4082956cc18dSsnj
4083956cc18dSsnjvoid
4084956cc18dSsnjupdate_menu_allowWindowOps(void)
4085956cc18dSsnj{
4086956cc18dSsnj    UpdateCheckbox("update_menu_allowWindowOps",
4087956cc18dSsnj		   fontMenuEntries,
4088956cc18dSsnj		   fontMenu_allowWindowOps,
408920d2c4d2Smrg		   TScreenOf(term)->allowWindowOps);
4090956cc18dSsnj}
4091956cc18dSsnj#endif
4092956cc18dSsnj
4093d522f475Smrg#if OPT_TEK4014
4094d522f475Smrgvoid
4095d522f475Smrgupdate_tekshow(void)
4096d522f475Smrg{
409720d2c4d2Smrg    if (!(TScreenOf(term)->inhibit & I_TEK)) {
4098d522f475Smrg	UpdateCheckbox("update_tekshow",
4099d522f475Smrg		       vtMenuEntries,
4100d522f475Smrg		       vtMenu_tekshow,
4101d522f475Smrg		       TEK4014_SHOWN(term));
4102d522f475Smrg    }
4103d522f475Smrg}
4104d522f475Smrg
4105d522f475Smrgvoid
4106d522f475Smrgupdate_vttekmode(void)
4107d522f475Smrg{
41080bd37d32Smrg    XtermWidget xw = term;
41090bd37d32Smrg
41100bd37d32Smrg    if (!(TScreenOf(xw)->inhibit & I_TEK)) {
4111d522f475Smrg	UpdateCheckbox("update_vtmode",
4112d522f475Smrg		       vtMenuEntries,
4113d522f475Smrg		       vtMenu_tekmode,
41140bd37d32Smrg		       TEK4014_ACTIVE(xw));
4115d522f475Smrg	UpdateCheckbox("update_tekmode",
4116d522f475Smrg		       tekMenuEntries,
4117d522f475Smrg		       tekMenu_vtmode,
41180bd37d32Smrg		       !TEK4014_ACTIVE(xw));
41190bd37d32Smrg	update_fullscreen();
4120d522f475Smrg    }
4121d522f475Smrg}
4122d522f475Smrg
4123d522f475Smrgvoid
4124d522f475Smrgupdate_vtshow(void)
4125d522f475Smrg{
412620d2c4d2Smrg    if (!(TScreenOf(term)->inhibit & I_TEK)) {
4127d522f475Smrg	UpdateCheckbox("update_vtshow",
4128d522f475Smrg		       tekMenuEntries,
4129d522f475Smrg		       tekMenu_vtshow,
413020d2c4d2Smrg		       TScreenOf(term)->Vshow);
4131d522f475Smrg    }
4132d522f475Smrg}
4133d522f475Smrg
4134d522f475Smrgvoid
4135d522f475Smrgset_vthide_sensitivity(void)
4136d522f475Smrg{
413720d2c4d2Smrg    if (!(TScreenOf(term)->inhibit & I_TEK)) {
4138d522f475Smrg	SetItemSensitivity(
4139d522f475Smrg			      vtMenuEntries[vtMenu_vthide].widget,
4140d522f475Smrg			      TEK4014_SHOWN(term));
4141d522f475Smrg    }
4142d522f475Smrg}
4143d522f475Smrg
4144d522f475Smrgvoid
4145d522f475Smrgset_tekhide_sensitivity(void)
4146d522f475Smrg{
414720d2c4d2Smrg    if (!(TScreenOf(term)->inhibit & I_TEK)) {
4148d522f475Smrg	SetItemSensitivity(
4149d522f475Smrg			      tekMenuEntries[tekMenu_tekhide].widget,
415020d2c4d2Smrg			      TScreenOf(term)->Vshow);
4151d522f475Smrg    }
4152d522f475Smrg}
4153d522f475Smrg
4154d522f475Smrgvoid
4155d522f475Smrgset_tekfont_menu_item(int n, int val)
4156d522f475Smrg{
415720d2c4d2Smrg    if (!(TScreenOf(term)->inhibit & I_TEK)) {
4158d522f475Smrg	UpdateCheckbox("set_tekfont_menu_item", tekMenuEntries, FS2MI(n),
4159d522f475Smrg		       (val));
4160d522f475Smrg    }
4161d522f475Smrg}
4162d522f475Smrg#endif /* OPT_TEK4014 */
4163d522f475Smrg
4164d522f475Smrgvoid
4165d522f475Smrgset_menu_font(int val)
4166d522f475Smrg{
4167d522f475Smrg    UpdateCheckbox("set_menu_font",
4168d522f475Smrg		   fontMenuEntries,
416920d2c4d2Smrg		   TScreenOf(term)->menu_font_number,
4170d522f475Smrg		   (val));
4171d522f475Smrg}
4172