menu.c revision a1f3da82
1a1f3da82Smrg/* $XTermId: menu.c,v 1.284 2011/02/17 00:46:18 tom Exp $ */
2d522f475Smrg
3d522f475Smrg/*
4a1f3da82Smrg * Copyright 1999-2010,2011 by Thomas E. Dickey
520d2c4d2Smrg *
620d2c4d2Smrg *                         All Rights Reserved
720d2c4d2Smrg *
820d2c4d2Smrg * Permission is hereby granted, free of charge, to any person obtaining a
920d2c4d2Smrg * copy of this software and associated documentation files (the
1020d2c4d2Smrg * "Software"), to deal in the Software without restriction, including
1120d2c4d2Smrg * without limitation the rights to use, copy, modify, merge, publish,
1220d2c4d2Smrg * distribute, sublicense, and/or sell copies of the Software, and to
1320d2c4d2Smrg * permit persons to whom the Software is furnished to do so, subject to
1420d2c4d2Smrg * the following conditions:
1520d2c4d2Smrg *
1620d2c4d2Smrg * The above copyright notice and this permission notice shall be included
1720d2c4d2Smrg * in all copies or substantial portions of the Software.
1820d2c4d2Smrg *
1920d2c4d2Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
2020d2c4d2Smrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
2120d2c4d2Smrg * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
2220d2c4d2Smrg * IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
2320d2c4d2Smrg * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
2420d2c4d2Smrg * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
2520d2c4d2Smrg * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2620d2c4d2Smrg *
2720d2c4d2Smrg * Except as contained in this notice, the name(s) of the above copyright
2820d2c4d2Smrg * holders shall not be used in advertising or otherwise to promote the
2920d2c4d2Smrg * sale, use or other dealings in this Software without prior written
3020d2c4d2Smrg * authorization.
3120d2c4d2Smrg *
32a1f3da82Smrg *
3320d2c4d2Smrg * Copyright 1989  The Open Group
3420d2c4d2Smrg *
3520d2c4d2Smrg * Permission to use, copy, modify, distribute, and sell this software and its
3620d2c4d2Smrg * documentation for any purpose is hereby granted without fee, provided that
3720d2c4d2Smrg * the above copyright notice appear in all copies and that both that
3820d2c4d2Smrg * copyright notice and this permission notice appear in supporting
3920d2c4d2Smrg * documentation.
4020d2c4d2Smrg *
4120d2c4d2Smrg * The above copyright notice and this permission notice shall be included in
4220d2c4d2Smrg * all copies or substantial portions of the Software.
4320d2c4d2Smrg *
4420d2c4d2Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
4520d2c4d2Smrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
4620d2c4d2Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
4720d2c4d2Smrg * OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
4820d2c4d2Smrg * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
4920d2c4d2Smrg * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
5020d2c4d2Smrg *
5120d2c4d2Smrg * Except as contained in this notice, the name of The Open Group shall not be
5220d2c4d2Smrg * used in advertising or otherwise to promote the sale, use or other dealings
5320d2c4d2Smrg * in this Software without prior written authorization from The Open Group.
5420d2c4d2Smrg */
55d522f475Smrg
56d522f475Smrg#include <xterm.h>
57d522f475Smrg#include <data.h>
58d522f475Smrg#include <menu.h>
59d522f475Smrg#include <fontutils.h>
60d522f475Smrg#include <xstrings.h>
61d522f475Smrg
62d522f475Smrg#include <locale.h>
63d522f475Smrg
64d522f475Smrg#include <X11/Xmu/CharSet.h>
65d522f475Smrg
66d522f475Smrg#define app_con Xaw_app_con	/* quiet a warning from SimpleMenu.h */
67d522f475Smrg
68d522f475Smrg#if defined(HAVE_LIB_XAW)
69d522f475Smrg
70d522f475Smrg#include <X11/Xaw/SimpleMenu.h>
71d522f475Smrg#include <X11/Xaw/Box.h>
72d522f475Smrg#include <X11/Xaw/SmeBSB.h>
73d522f475Smrg#include <X11/Xaw/SmeLine.h>
74d522f475Smrg
75d522f475Smrg#if OPT_TOOLBAR
76d522f475Smrg#include <X11/Xaw/MenuButton.h>
77d522f475Smrg#include <X11/Xaw/Form.h>
78d522f475Smrg#endif
79d522f475Smrg
80d522f475Smrg#elif defined(HAVE_LIB_XAW3D)
81d522f475Smrg
82d522f475Smrg#include <X11/Xaw3d/SimpleMenu.h>
83d522f475Smrg#include <X11/Xaw3d/Box.h>
84d522f475Smrg#include <X11/Xaw3d/SmeBSB.h>
85d522f475Smrg#include <X11/Xaw3d/SmeLine.h>
86d522f475Smrg
87d522f475Smrg#if OPT_TOOLBAR
88d522f475Smrg#include <X11/Xaw3d/MenuButton.h>
89d522f475Smrg#include <X11/Xaw3d/Form.h>
90d522f475Smrg#endif
91d522f475Smrg
92d522f475Smrg#elif defined(HAVE_LIB_NEXTAW)
93d522f475Smrg
94d522f475Smrg#include <X11/neXtaw/SimpleMenu.h>
95d522f475Smrg#include <X11/neXtaw/Box.h>
96d522f475Smrg#include <X11/neXtaw/SmeBSB.h>
97d522f475Smrg#include <X11/neXtaw/SmeLine.h>
98d522f475Smrg
99d522f475Smrg#if OPT_TOOLBAR
100d522f475Smrg#include <X11/neXtaw/MenuButton.h>
101d522f475Smrg#include <X11/neXtaw/Form.h>
102d522f475Smrg#endif
103d522f475Smrg
104d522f475Smrg#elif defined(HAVE_LIB_XAWPLUS)
105d522f475Smrg
106d522f475Smrg#include <X11/XawPlus/SimpleMenu.h>
107d522f475Smrg#include <X11/XawPlus/Box.h>
108d522f475Smrg#include <X11/XawPlus/SmeBSB.h>
109d522f475Smrg#include <X11/XawPlus/SmeLine.h>
110d522f475Smrg
111d522f475Smrg#if OPT_TOOLBAR
112d522f475Smrg#include <X11/XawPlus/MenuButton.h>
113d522f475Smrg#include <X11/XawPlus/Form.h>
114d522f475Smrg#endif
115d522f475Smrg
116d522f475Smrg#endif
117d522f475Smrg
118d522f475Smrg#undef app_con
119d522f475Smrg
120d522f475Smrg#include <stdio.h>
121d522f475Smrg#include <signal.h>
122956cc18dSsnj
123a1f3da82Smrg#if OPT_TRACE
124a1f3da82Smrg#define UpdateCheckbox(func, mn, mi, val) UpdateMenuItem(func, mn, mi, val)
125a1f3da82Smrg#else
126a1f3da82Smrg#define UpdateCheckbox(func, mn, mi, val) UpdateMenuItem(mn, mi, val)
127a1f3da82Smrg#endif
128a1f3da82Smrg
129956cc18dSsnj#define ToggleFlag(flag) flag = (Boolean) !flag
130d522f475Smrg/* *INDENT-OFF* */
131d522f475Smrgstatic void do_8bit_control    PROTO_XT_CALLBACK_ARGS;
132d522f475Smrgstatic void do_allow132        PROTO_XT_CALLBACK_ARGS;
133d522f475Smrgstatic void do_allowsends      PROTO_XT_CALLBACK_ARGS;
134d522f475Smrgstatic void do_altscreen       PROTO_XT_CALLBACK_ARGS;
135d522f475Smrgstatic void do_appcursor       PROTO_XT_CALLBACK_ARGS;
136d522f475Smrgstatic void do_appkeypad       PROTO_XT_CALLBACK_ARGS;
137d522f475Smrgstatic void do_autolinefeed    PROTO_XT_CALLBACK_ARGS;
138d522f475Smrgstatic void do_autowrap        PROTO_XT_CALLBACK_ARGS;
139d522f475Smrgstatic void do_backarrow       PROTO_XT_CALLBACK_ARGS;
140d522f475Smrgstatic void do_bellIsUrgent    PROTO_XT_CALLBACK_ARGS;
141d522f475Smrgstatic void do_clearsavedlines PROTO_XT_CALLBACK_ARGS;
142d522f475Smrgstatic void do_continue        PROTO_XT_CALLBACK_ARGS;
143d522f475Smrgstatic void do_delete_del      PROTO_XT_CALLBACK_ARGS;
144d522f475Smrgstatic void do_hardreset       PROTO_XT_CALLBACK_ARGS;
145d522f475Smrgstatic void do_interrupt       PROTO_XT_CALLBACK_ARGS;
146d522f475Smrgstatic void do_jumpscroll      PROTO_XT_CALLBACK_ARGS;
147d522f475Smrgstatic void do_kill            PROTO_XT_CALLBACK_ARGS;
148d522f475Smrgstatic void do_old_fkeys       PROTO_XT_CALLBACK_ARGS;
149d522f475Smrgstatic void do_poponbell       PROTO_XT_CALLBACK_ARGS;
150d522f475Smrgstatic void do_print           PROTO_XT_CALLBACK_ARGS;
151d522f475Smrgstatic void do_print_redir     PROTO_XT_CALLBACK_ARGS;
152d522f475Smrgstatic void do_quit            PROTO_XT_CALLBACK_ARGS;
153d522f475Smrgstatic void do_redraw          PROTO_XT_CALLBACK_ARGS;
154d522f475Smrgstatic void do_reversevideo    PROTO_XT_CALLBACK_ARGS;
155d522f475Smrgstatic void do_reversewrap     PROTO_XT_CALLBACK_ARGS;
156d522f475Smrgstatic void do_scrollbar       PROTO_XT_CALLBACK_ARGS;
157d522f475Smrgstatic void do_scrollkey       PROTO_XT_CALLBACK_ARGS;
158d522f475Smrgstatic void do_scrollttyoutput PROTO_XT_CALLBACK_ARGS;
159d522f475Smrgstatic void do_securekbd       PROTO_XT_CALLBACK_ARGS;
160d522f475Smrgstatic void do_keepSelection   PROTO_XT_CALLBACK_ARGS;
161d522f475Smrgstatic void do_selectClipboard PROTO_XT_CALLBACK_ARGS;
162d522f475Smrgstatic void do_softreset       PROTO_XT_CALLBACK_ARGS;
163d522f475Smrgstatic void do_suspend         PROTO_XT_CALLBACK_ARGS;
164d522f475Smrgstatic void do_terminate       PROTO_XT_CALLBACK_ARGS;
165d522f475Smrgstatic void do_titeInhibit     PROTO_XT_CALLBACK_ARGS;
166d522f475Smrgstatic void do_visualbell      PROTO_XT_CALLBACK_ARGS;
167d522f475Smrgstatic void do_vtfont          PROTO_XT_CALLBACK_ARGS;
168d522f475Smrg
169d522f475Smrg#ifdef ALLOWLOGGING
170d522f475Smrgstatic void do_logging         PROTO_XT_CALLBACK_ARGS;
171d522f475Smrg#endif
172d522f475Smrg
173d522f475Smrg#ifndef NO_ACTIVE_ICON
174d522f475Smrgstatic void do_activeicon      PROTO_XT_CALLBACK_ARGS;
175d522f475Smrg#endif /* NO_ACTIVE_ICON */
176d522f475Smrg
177956cc18dSsnj#if OPT_ALLOW_XXX_OPS
178956cc18dSsnjstatic void enable_allow_xxx_ops (Bool);
17920d2c4d2Smrgstatic void do_allowColorOps   PROTO_XT_CALLBACK_ARGS;
180956cc18dSsnjstatic void do_allowFontOps    PROTO_XT_CALLBACK_ARGS;
18120d2c4d2Smrgstatic void do_allowTcapOps    PROTO_XT_CALLBACK_ARGS;
182956cc18dSsnjstatic void do_allowTitleOps   PROTO_XT_CALLBACK_ARGS;
183956cc18dSsnjstatic void do_allowWindowOps  PROTO_XT_CALLBACK_ARGS;
184956cc18dSsnj#endif
185956cc18dSsnj
186d522f475Smrg#if OPT_BLINK_CURS
187d522f475Smrgstatic void do_cursorblink     PROTO_XT_CALLBACK_ARGS;
188d522f475Smrg#endif
189d522f475Smrg
190d522f475Smrg#if OPT_BOX_CHARS
191d522f475Smrgstatic void do_font_boxchars   PROTO_XT_CALLBACK_ARGS;
19220d2c4d2Smrgstatic void do_font_packed     PROTO_XT_CALLBACK_ARGS;
193d522f475Smrg#endif
194d522f475Smrg
195d522f475Smrg#if OPT_DEC_CHRSET
196d522f475Smrgstatic void do_font_doublesize PROTO_XT_CALLBACK_ARGS;
197d522f475Smrg#endif
198d522f475Smrg
199d522f475Smrg#if OPT_DEC_SOFTFONT
200d522f475Smrgstatic void do_font_loadable   PROTO_XT_CALLBACK_ARGS;
201d522f475Smrg#endif
202d522f475Smrg
203d522f475Smrg#if OPT_HP_FUNC_KEYS
204d522f475Smrgstatic void do_hp_fkeys        PROTO_XT_CALLBACK_ARGS;
205d522f475Smrg#endif
206d522f475Smrg
207a1f3da82Smrg#if OPT_MAXIMIZE
208a1f3da82Smrgstatic void do_fullscreen      PROTO_XT_CALLBACK_ARGS;
209a1f3da82Smrg#endif
210a1f3da82Smrg
211d522f475Smrg#if OPT_NUM_LOCK
212d522f475Smrgstatic void do_alt_esc         PROTO_XT_CALLBACK_ARGS;
213d522f475Smrgstatic void do_num_lock        PROTO_XT_CALLBACK_ARGS;
214d522f475Smrgstatic void do_meta_esc        PROTO_XT_CALLBACK_ARGS;
215d522f475Smrg#endif
216d522f475Smrg
217d522f475Smrg#if OPT_RENDERFONT
218d522f475Smrgstatic void do_font_renderfont PROTO_XT_CALLBACK_ARGS;
219d522f475Smrg#endif
220d522f475Smrg
221d522f475Smrg#if OPT_SCO_FUNC_KEYS
222d522f475Smrgstatic void do_sco_fkeys       PROTO_XT_CALLBACK_ARGS;
223d522f475Smrg#endif
224d522f475Smrg
225d522f475Smrg#if OPT_SUN_FUNC_KEYS
226d522f475Smrgstatic void do_sun_fkeys       PROTO_XT_CALLBACK_ARGS;
227d522f475Smrg#endif
228d522f475Smrg
229d522f475Smrg#if OPT_SUNPC_KBD
230d522f475Smrgstatic void do_sun_kbd         PROTO_XT_CALLBACK_ARGS;
231d522f475Smrg#endif
232d522f475Smrg
233d522f475Smrg#if OPT_TCAP_FKEYS
234d522f475Smrgstatic void do_tcap_fkeys      PROTO_XT_CALLBACK_ARGS;
235d522f475Smrg#endif
236d522f475Smrg
237d522f475Smrg#if OPT_TEK4014
238d522f475Smrgstatic void do_tekcopy         PROTO_XT_CALLBACK_ARGS;
239d522f475Smrgstatic void do_tekhide         PROTO_XT_CALLBACK_ARGS;
240d522f475Smrgstatic void do_tekmode         PROTO_XT_CALLBACK_ARGS;
241d522f475Smrgstatic void do_tekonoff        PROTO_XT_CALLBACK_ARGS;
242d522f475Smrgstatic void do_tekpage         PROTO_XT_CALLBACK_ARGS;
243d522f475Smrgstatic void do_tekreset        PROTO_XT_CALLBACK_ARGS;
244d522f475Smrgstatic void do_tekshow         PROTO_XT_CALLBACK_ARGS;
245d522f475Smrgstatic void do_tektext2        PROTO_XT_CALLBACK_ARGS;
246d522f475Smrgstatic void do_tektext3        PROTO_XT_CALLBACK_ARGS;
247d522f475Smrgstatic void do_tektextlarge    PROTO_XT_CALLBACK_ARGS;
248d522f475Smrgstatic void do_tektextsmall    PROTO_XT_CALLBACK_ARGS;
249d522f475Smrgstatic void do_vthide          PROTO_XT_CALLBACK_ARGS;
250d522f475Smrgstatic void do_vtmode          PROTO_XT_CALLBACK_ARGS;
251d522f475Smrgstatic void do_vtonoff         PROTO_XT_CALLBACK_ARGS;
252d522f475Smrgstatic void do_vtshow          PROTO_XT_CALLBACK_ARGS;
253d522f475Smrgstatic void handle_tekshow     (Widget gw, Bool allowswitch);
254d522f475Smrgstatic void handle_vtshow      (Widget gw, Bool allowswitch);
255d522f475Smrg#endif
256d522f475Smrg
257d522f475Smrg#if OPT_TOOLBAR
258d522f475Smrgstatic void do_toolbar         PROTO_XT_CALLBACK_ARGS;
259d522f475Smrg#endif
260d522f475Smrg
261d522f475Smrg#if OPT_WIDE_CHARS
262d522f475Smrgstatic void do_font_utf8_mode  PROTO_XT_CALLBACK_ARGS;
263d522f475Smrgstatic void do_font_utf8_title PROTO_XT_CALLBACK_ARGS;
264d522f475Smrg#endif
265d522f475Smrg
266d522f475Smrg/*
267d522f475Smrg * The order of entries MUST match the values given in menu.h
268d522f475Smrg */
269d522f475SmrgMenuEntry mainMenuEntries[] = {
270d522f475Smrg#if OPT_TOOLBAR
271d522f475Smrg    { "toolbar",	do_toolbar,	NULL },
272a1f3da82Smrg#endif
273a1f3da82Smrg#if OPT_MAXIMIZE
274a1f3da82Smrg    { "fullscreen",	do_fullscreen,	NULL },
275d522f475Smrg#endif
276d522f475Smrg    { "securekbd",	do_securekbd,	NULL },
277d522f475Smrg    { "allowsends",	do_allowsends,	NULL },
278d522f475Smrg    { "redraw",		do_redraw,	NULL },
279d522f475Smrg    { "line1",		NULL,		NULL },
280d522f475Smrg#ifdef ALLOWLOGGING
281d522f475Smrg    { "logging",	do_logging,	NULL },
282d522f475Smrg#endif
283d522f475Smrg    { "print",		do_print,	NULL },
284d522f475Smrg    { "print-redir",	do_print_redir,	NULL },
285d522f475Smrg    { "line2",		NULL,		NULL },
286d522f475Smrg    { "8-bit control",	do_8bit_control,NULL },
287d522f475Smrg    { "backarrow key",	do_backarrow,	NULL },
288d522f475Smrg#if OPT_NUM_LOCK
289d522f475Smrg    { "num-lock",	do_num_lock,	NULL },
290d522f475Smrg    { "alt-esc",	do_alt_esc,	NULL },
291d522f475Smrg    { "meta-esc",	do_meta_esc,	NULL },
292d522f475Smrg#endif
293d522f475Smrg    { "delete-is-del",	do_delete_del,	NULL },
294d522f475Smrg    { "oldFunctionKeys",do_old_fkeys,	NULL },
295d522f475Smrg#if OPT_TCAP_FKEYS
296d522f475Smrg    { "tcapFunctionKeys",do_tcap_fkeys,	NULL },
297d522f475Smrg#endif
298d522f475Smrg#if OPT_HP_FUNC_KEYS
299d522f475Smrg    { "hpFunctionKeys",	do_hp_fkeys,	NULL },
300d522f475Smrg#endif
301d522f475Smrg#if OPT_SCO_FUNC_KEYS
302d522f475Smrg    { "scoFunctionKeys",do_sco_fkeys,	NULL },
303d522f475Smrg#endif
304d522f475Smrg#if OPT_SUN_FUNC_KEYS
305d522f475Smrg    { "sunFunctionKeys",do_sun_fkeys,	NULL },
306d522f475Smrg#endif
307d522f475Smrg#if OPT_SUNPC_KBD
308d522f475Smrg    { "sunKeyboard",	do_sun_kbd,	NULL },
309d522f475Smrg#endif
310d522f475Smrg    { "line3",		NULL,		NULL },
311d522f475Smrg    { "suspend",	do_suspend,	NULL },
312d522f475Smrg    { "continue",	do_continue,	NULL },
313d522f475Smrg    { "interrupt",	do_interrupt,	NULL },
314d522f475Smrg    { "hangup",		do_hangup,	NULL },
315d522f475Smrg    { "terminate",	do_terminate,	NULL },
316d522f475Smrg    { "kill",		do_kill,	NULL },
317d522f475Smrg    { "line4",		NULL,		NULL },
318d522f475Smrg    { "quit",		do_quit,	NULL }};
319d522f475Smrg
320d522f475SmrgMenuEntry vtMenuEntries[] = {
321d522f475Smrg    { "scrollbar",	do_scrollbar,	NULL },
322d522f475Smrg    { "jumpscroll",	do_jumpscroll,	NULL },
323d522f475Smrg    { "reversevideo",	do_reversevideo, NULL },
324d522f475Smrg    { "autowrap",	do_autowrap,	NULL },
325d522f475Smrg    { "reversewrap",	do_reversewrap, NULL },
326d522f475Smrg    { "autolinefeed",	do_autolinefeed, NULL },
327d522f475Smrg    { "appcursor",	do_appcursor,	NULL },
328d522f475Smrg    { "appkeypad",	do_appkeypad,	NULL },
329d522f475Smrg    { "scrollkey",	do_scrollkey,	NULL },
330d522f475Smrg    { "scrollttyoutput",do_scrollttyoutput, NULL },
331d522f475Smrg    { "allow132",	do_allow132,	NULL },
332d522f475Smrg    { "keepSelection",	do_keepSelection, NULL },
333d522f475Smrg    { "selectToClipboard",do_selectClipboard, NULL },
334d522f475Smrg    { "visualbell",	do_visualbell,	NULL },
335d522f475Smrg    { "bellIsUrgent",	do_bellIsUrgent, NULL },
336d522f475Smrg    { "poponbell",	do_poponbell,	NULL },
337d522f475Smrg#if OPT_BLINK_CURS
338d522f475Smrg    { "cursorblink",	do_cursorblink,	NULL },
339d522f475Smrg#endif
340d522f475Smrg    { "titeInhibit",	do_titeInhibit,	NULL },
341d522f475Smrg#ifndef NO_ACTIVE_ICON
342d522f475Smrg    { "activeicon",	do_activeicon,	NULL },
343d522f475Smrg#endif /* NO_ACTIVE_ICON */
344d522f475Smrg    { "line1",		NULL,		NULL },
345d522f475Smrg    { "softreset",	do_softreset,	NULL },
346d522f475Smrg    { "hardreset",	do_hardreset,	NULL },
347d522f475Smrg    { "clearsavedlines",do_clearsavedlines, NULL },
348d522f475Smrg    { "line2",		NULL,		NULL },
349d522f475Smrg#if OPT_TEK4014
350d522f475Smrg    { "tekshow",	do_tekshow,	NULL },
351d522f475Smrg    { "tekmode",	do_tekmode,	NULL },
352d522f475Smrg    { "vthide",		do_vthide,	NULL },
353d522f475Smrg#endif
354d522f475Smrg    { "altscreen",	do_altscreen,	NULL },
355d522f475Smrg    };
356d522f475Smrg
357d522f475SmrgMenuEntry fontMenuEntries[] = {
358d522f475Smrg    { "fontdefault",	do_vtfont,	NULL },
359d522f475Smrg    { "font1",		do_vtfont,	NULL },
360d522f475Smrg    { "font2",		do_vtfont,	NULL },
361d522f475Smrg    { "font3",		do_vtfont,	NULL },
362d522f475Smrg    { "font4",		do_vtfont,	NULL },
363d522f475Smrg    { "font5",		do_vtfont,	NULL },
364d522f475Smrg    { "font6",		do_vtfont,	NULL },
365d522f475Smrg    /* this is after the last builtin font; the other entries are special */
366d522f475Smrg    { "fontescape",	do_vtfont,	NULL },
367d522f475Smrg    { "fontsel",	do_vtfont,	NULL },
368d522f475Smrg    /* down to here should match NMENUFONTS in ptyx.h */
369d522f475Smrg
370d522f475Smrg#if OPT_DEC_CHRSET || OPT_BOX_CHARS || OPT_DEC_SOFTFONT
371d522f475Smrg    { "line1",		NULL,		NULL },
372d522f475Smrg#if OPT_BOX_CHARS
373d522f475Smrg    { "font-linedrawing",do_font_boxchars,NULL },
37420d2c4d2Smrg    { "font-packed",	do_font_packed,NULL },
375d522f475Smrg#endif
376d522f475Smrg#if OPT_DEC_CHRSET
377d522f475Smrg    { "font-doublesize",do_font_doublesize,NULL },
378d522f475Smrg#endif
379d522f475Smrg#if OPT_DEC_SOFTFONT
380d522f475Smrg    { "font-loadable",	do_font_loadable,NULL },
381d522f475Smrg#endif
382d522f475Smrg#endif /* toggles for DEC font extensions */
383d522f475Smrg
384d522f475Smrg#if OPT_RENDERFONT || OPT_WIDE_CHARS
385d522f475Smrg    { "line2",		NULL,		NULL },
386d522f475Smrg#if OPT_RENDERFONT
387d522f475Smrg    { "render-font",	do_font_renderfont,NULL },
388d522f475Smrg#endif
389d522f475Smrg#if OPT_WIDE_CHARS
390d522f475Smrg    { "utf8-mode",	do_font_utf8_mode,NULL },
391d522f475Smrg    { "utf8-title",	do_font_utf8_title,NULL },
392d522f475Smrg#endif
393d522f475Smrg#endif /* toggles for other font extensions */
394d522f475Smrg
395956cc18dSsnj#if OPT_ALLOW_XXX_OPS
396956cc18dSsnj    { "line3",		NULL,		NULL },
39720d2c4d2Smrg    { "allow-color-ops",do_allowColorOps,NULL },
398956cc18dSsnj    { "allow-font-ops",	do_allowFontOps,NULL },
39920d2c4d2Smrg    { "allow-tcap-ops",	do_allowTcapOps,NULL },
400956cc18dSsnj    { "allow-title-ops",do_allowTitleOps,NULL },
401956cc18dSsnj    { "allow-window-ops",do_allowWindowOps,NULL },
402956cc18dSsnj#endif
403956cc18dSsnj
404d522f475Smrg    };
405d522f475Smrg
406d522f475Smrg#if OPT_TEK4014
407d522f475SmrgMenuEntry tekMenuEntries[] = {
408d522f475Smrg    { "tektextlarge",	do_tektextlarge, NULL },
409d522f475Smrg    { "tektext2",	do_tektext2,	NULL },
410d522f475Smrg    { "tektext3",	do_tektext3,	NULL },
411d522f475Smrg    { "tektextsmall",	do_tektextsmall, NULL },
412d522f475Smrg    { "line1",		NULL,		NULL },
413d522f475Smrg    { "tekpage",	do_tekpage,	NULL },
414d522f475Smrg    { "tekreset",	do_tekreset,	NULL },
415d522f475Smrg    { "tekcopy",	do_tekcopy,	NULL },
416d522f475Smrg    { "line2",		NULL,		NULL },
417d522f475Smrg    { "vtshow",		do_vtshow,	NULL },
418d522f475Smrg    { "vtmode",		do_vtmode,	NULL },
419d522f475Smrg    { "tekhide",	do_tekhide,	NULL }};
420d522f475Smrg#endif
421d522f475Smrg
422d522f475Smrgtypedef struct {
423d522f475Smrg    char *internal_name;
424d522f475Smrg    MenuEntry *entry_list;
425d522f475Smrg    Cardinal entry_len;
426d522f475Smrg} MenuHeader;
427d522f475Smrg
428d522f475Smrg    /* This table is ordered to correspond with MenuIndex */
429d522f475Smrgstatic MenuHeader menu_names[] = {
430d522f475Smrg    { "mainMenu", mainMenuEntries, XtNumber(mainMenuEntries) },
431d522f475Smrg    { "vtMenu",   vtMenuEntries,   XtNumber(vtMenuEntries)   },
432d522f475Smrg    { "fontMenu", fontMenuEntries, XtNumber(fontMenuEntries) },
433d522f475Smrg#if OPT_TEK4014
434d522f475Smrg    { "tekMenu",  tekMenuEntries,  XtNumber(tekMenuEntries)  },
435d522f475Smrg#endif
436d522f475Smrg    { 0,          0,               0 },
437d522f475Smrg};
438d522f475Smrg/* *INDENT-ON* */
439d522f475Smrg
440d522f475Smrg/*
441d522f475Smrg * FIXME:  These are global data rather than in the xterm widget because they
442d522f475Smrg * are initialized before the widget is created.
443d522f475Smrg */
444d522f475Smrgtypedef struct {
445d522f475Smrg    Widget b;			/* the toolbar's buttons */
446d522f475Smrg    Widget w;			/* the popup shell activated by the button */
447d522f475Smrg    Cardinal entries;
448d522f475Smrg} MenuList;
449d522f475Smrg
450d522f475Smrgstatic MenuList vt_shell[NUM_POPUP_MENUS];
451d522f475Smrg
452d522f475Smrg#if OPT_TEK4014 && OPT_TOOLBAR
453d522f475Smrgstatic MenuList tek_shell[NUM_POPUP_MENUS];
454d522f475Smrg#endif
455d522f475Smrg
456d522f475Smrgstatic String
457d522f475SmrgsetMenuLocale(Bool before, String substitute)
458d522f475Smrg{
45920d2c4d2Smrg    String result = setlocale(LC_CTYPE, 0);
460d522f475Smrg
461d522f475Smrg    if (before) {
462d522f475Smrg	result = x_strdup(result);
46320d2c4d2Smrg    }
46420d2c4d2Smrg    (void) setlocale(LC_CTYPE, substitute);
46520d2c4d2Smrg    TRACE(("setMenuLocale %s:%s\n",
46620d2c4d2Smrg	   (before
46720d2c4d2Smrg	    ? "before"
46820d2c4d2Smrg	    : "after"),
46920d2c4d2Smrg	   NonNull(result)));
47020d2c4d2Smrg    if (!before) {
47120d2c4d2Smrg	free((void *) substitute);
472d522f475Smrg    }
473d522f475Smrg    return result;
474d522f475Smrg}
475d522f475Smrg
476d522f475Smrg/*
477d522f475Smrg * Returns a pointer to the MenuList entry that matches the popup menu.
478d522f475Smrg */
479d522f475Smrgstatic MenuList *
480d522f475Smrgselect_menu(Widget w GCC_UNUSED, MenuIndex num)
481d522f475Smrg{
482d522f475Smrg#if OPT_TEK4014 && OPT_TOOLBAR
483d522f475Smrg    while (w != 0) {
484d522f475Smrg	if (w == tekshellwidget) {
485d522f475Smrg	    return &tek_shell[num];
486d522f475Smrg	}
487d522f475Smrg	w = XtParent(w);
488d522f475Smrg    }
489d522f475Smrg#endif
490d522f475Smrg    return &vt_shell[num];
491d522f475Smrg}
492d522f475Smrg
493d522f475Smrg/*
494d522f475Smrg * Returns a pointer to the given popup menu shell
495d522f475Smrg */
496d522f475Smrgstatic Widget
497d522f475Smrgobtain_menu(Widget w, MenuIndex num)
498d522f475Smrg{
499d522f475Smrg    return select_menu(w, num)->w;
500d522f475Smrg}
501d522f475Smrg
502d522f475Smrg/*
503d522f475Smrg * Returns the number of entries in the given popup menu shell
504d522f475Smrg */
505d522f475Smrgstatic Cardinal
506d522f475Smrgsizeof_menu(Widget w, MenuIndex num)
507d522f475Smrg{
508d522f475Smrg    return select_menu(w, num)->entries;
509d522f475Smrg}
510d522f475Smrg
511d522f475Smrg/*
512d522f475Smrg * create_menu - create a popup shell and stuff the menu into it.
513d522f475Smrg */
514d522f475Smrg
515d522f475Smrgstatic Widget
516d522f475Smrgcreate_menu(Widget w, XtermWidget xtw, MenuIndex num)
517d522f475Smrg{
518d522f475Smrg    static XtCallbackRec cb[2] =
519d522f475Smrg    {
520d522f475Smrg	{NULL, NULL},
521d522f475Smrg	{NULL, NULL}};
522d522f475Smrg    static Arg arg =
523d522f475Smrg    {XtNcallback, (XtArgVal) cb};
524d522f475Smrg
52520d2c4d2Smrg    TScreen *screen = TScreenOf(xtw);
526d522f475Smrg    MenuHeader *data = &menu_names[num];
527d522f475Smrg    MenuList *list = select_menu(w, num);
528d522f475Smrg    struct _MenuEntry *entries = data->entry_list;
529956cc18dSsnj    Cardinal nentries = data->entry_len;
530d522f475Smrg#if !OPT_TOOLBAR
531d522f475Smrg    String saveLocale;
532d522f475Smrg#endif
533d522f475Smrg
534d522f475Smrg    if (screen->menu_item_bitmap == None) {
535d522f475Smrg	/*
536d522f475Smrg	 * we really want to do these dynamically
537d522f475Smrg	 */
538d522f475Smrg#define check_width 9
539d522f475Smrg#define check_height 8
540d522f475Smrg	static unsigned char check_bits[] =
541d522f475Smrg	{
542d522f475Smrg	    0x00, 0x01, 0x80, 0x01, 0xc0, 0x00, 0x60, 0x00,
543d522f475Smrg	    0x31, 0x00, 0x1b, 0x00, 0x0e, 0x00, 0x04, 0x00
544d522f475Smrg	};
545d522f475Smrg
546d522f475Smrg	screen->menu_item_bitmap =
547d522f475Smrg	    XCreateBitmapFromData(XtDisplay(xtw),
548d522f475Smrg				  RootWindowOfScreen(XtScreen(xtw)),
549d522f475Smrg				  (char *) check_bits, check_width, check_height);
550d522f475Smrg    }
551d522f475Smrg#if !OPT_TOOLBAR
552d522f475Smrg    saveLocale = setMenuLocale(True, resource.menuLocale);
553d522f475Smrg    list->w = XtCreatePopupShell(data->internal_name,
554d522f475Smrg				 simpleMenuWidgetClass,
555d522f475Smrg				 toplevel,
556d522f475Smrg				 NULL, 0);
557d522f475Smrg#endif
558d522f475Smrg    if (list->w != 0) {
559d522f475Smrg	list->entries = nentries;
560d522f475Smrg
561d522f475Smrg	for (; nentries > 0; nentries--, entries++) {
562d522f475Smrg	    cb[0].callback = (XtCallbackProc) entries->function;
563d522f475Smrg	    cb[0].closure = (caddr_t) entries->name;
564d522f475Smrg	    entries->widget = XtCreateManagedWidget(entries->name,
565d522f475Smrg						    (entries->function
566d522f475Smrg						     ? smeBSBObjectClass
567d522f475Smrg						     : smeLineObjectClass),
568d522f475Smrg						    list->w,
569d522f475Smrg						    &arg, (Cardinal) 1);
570d522f475Smrg	}
571d522f475Smrg    }
572d522f475Smrg#if !OPT_TOOLBAR
573d522f475Smrg    (void) setMenuLocale(False, saveLocale);
574d522f475Smrg#endif
575d522f475Smrg
576d522f475Smrg    /* do not realize at this point */
577d522f475Smrg    return list->w;
578d522f475Smrg}
579d522f475Smrg
580d522f475Smrgstatic MenuIndex
581d522f475SmrgindexOfMenu(String menuName)
582d522f475Smrg{
583d522f475Smrg    MenuIndex me;
584d522f475Smrg    switch (*menuName) {
585d522f475Smrg    case 'm':
586d522f475Smrg	me = mainMenu;
587d522f475Smrg	break;
588d522f475Smrg    case 'v':
589d522f475Smrg	me = vtMenu;
590d522f475Smrg	break;
591d522f475Smrg    case 'f':
592d522f475Smrg	me = fontMenu;
593d522f475Smrg	break;
594d522f475Smrg#if OPT_TEK4014
595d522f475Smrg    case 't':
596d522f475Smrg	me = tekMenu;
597d522f475Smrg	break;
598d522f475Smrg#endif
599d522f475Smrg    default:
600d522f475Smrg	me = noMenu;
601d522f475Smrg    }
602d522f475Smrg    return (me);
603d522f475Smrg}
604d522f475Smrg
605d522f475Smrg/* ARGSUSED */
606d522f475Smrgstatic Bool
607d522f475Smrgdomenu(Widget w,
608d522f475Smrg       XEvent * event GCC_UNUSED,
609d522f475Smrg       String * params,		/* mainMenu, vtMenu, or tekMenu */
610d522f475Smrg       Cardinal *param_count)	/* 0 or 1 */
611d522f475Smrg{
61220d2c4d2Smrg    XtermWidget xw = term;
61320d2c4d2Smrg    TScreen *screen = TScreenOf(xw);
614d522f475Smrg    MenuIndex me;
615d522f475Smrg    Bool created = False;
616d522f475Smrg    Widget mw;
617d522f475Smrg
618d522f475Smrg    if (*param_count != 1) {
61920d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
620d522f475Smrg	return False;
621d522f475Smrg    }
622d522f475Smrg
623d522f475Smrg    if ((me = indexOfMenu(params[0])) == noMenu) {
62420d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
625d522f475Smrg	return False;
626d522f475Smrg    }
627d522f475Smrg
628d522f475Smrg    if ((mw = obtain_menu(w, me)) == 0
629d522f475Smrg	|| sizeof_menu(w, me) == 0) {
63020d2c4d2Smrg	mw = create_menu(w, xw, me);
631d522f475Smrg	created = (mw != 0);
632d522f475Smrg    }
633d522f475Smrg    if (mw == 0)
634d522f475Smrg	return False;
635d522f475Smrg
636d522f475Smrg    TRACE(("domenu(%s) %s\n", params[0], created ? "create" : "update"));
637d522f475Smrg    switch (me) {
638d522f475Smrg    case mainMenu:
639d522f475Smrg	if (created) {
640d522f475Smrg	    update_toolbar();
641a1f3da82Smrg	    update_fullscreen();
642d522f475Smrg	    update_securekbd();
643d522f475Smrg	    update_allowsends();
644d522f475Smrg	    update_logging();
645d522f475Smrg	    update_print_redir();
646d522f475Smrg	    update_8bit_control();
647d522f475Smrg	    update_decbkm();
648d522f475Smrg	    update_num_lock();
649d522f475Smrg	    update_alt_esc();
650d522f475Smrg	    update_meta_esc();
651d522f475Smrg	    update_delete_del();
652d522f475Smrg	    update_keyboard_type();
653d522f475Smrg#if OPT_NUM_LOCK
654d522f475Smrg	    if (!screen->alt_is_not_meta) {
655d522f475Smrg		SetItemSensitivity(mainMenuEntries[mainMenu_alt_esc].widget,
656d522f475Smrg				   False);
657d522f475Smrg	    }
658d522f475Smrg#endif
65920d2c4d2Smrg	    if (!xtermHasPrinter(xw)) {
660d522f475Smrg		SetItemSensitivity(mainMenuEntries[mainMenu_print].widget,
661d522f475Smrg				   False);
662d522f475Smrg		SetItemSensitivity(mainMenuEntries[mainMenu_print_redir].widget,
663d522f475Smrg				   False);
664d522f475Smrg	    }
665d522f475Smrg	    if (screen->terminal_id < 200) {
666d522f475Smrg		SetItemSensitivity(
667d522f475Smrg				      mainMenuEntries[mainMenu_8bit_ctrl].widget,
668d522f475Smrg				      False);
669d522f475Smrg	    }
670d522f475Smrg#if !defined(SIGTSTP)
671d522f475Smrg	    SetItemSensitivity(
672d522f475Smrg				  mainMenuEntries[mainMenu_suspend].widget, False);
673d522f475Smrg#endif
674d522f475Smrg#if !defined(SIGCONT)
675d522f475Smrg	    SetItemSensitivity(
676d522f475Smrg				  mainMenuEntries[mainMenu_continue].widget, False);
677d522f475Smrg#endif
678d522f475Smrg#ifdef ALLOWLOGGING
679d522f475Smrg	    if (screen->inhibit & I_LOG) {
680d522f475Smrg		SetItemSensitivity(
681d522f475Smrg				      mainMenuEntries[mainMenu_logging].widget, False);
682d522f475Smrg	    }
683d522f475Smrg#endif
684d522f475Smrg	    if (screen->inhibit & I_SIGNAL) {
685d522f475Smrg		int n;
686d522f475Smrg		for (n = (int) mainMenu_suspend; n <= (int) mainMenu_quit; ++n) {
687d522f475Smrg		    SetItemSensitivity(mainMenuEntries[n].widget, False);
688d522f475Smrg		}
689d522f475Smrg	    }
690d522f475Smrg	}
691d522f475Smrg	break;
692d522f475Smrg
693d522f475Smrg    case vtMenu:
694d522f475Smrg	if (created) {
695d522f475Smrg	    update_scrollbar();
696d522f475Smrg	    update_jumpscroll();
697d522f475Smrg	    update_reversevideo();
698d522f475Smrg	    update_autowrap();
699d522f475Smrg	    update_reversewrap();
700d522f475Smrg	    update_autolinefeed();
701d522f475Smrg	    update_appcursor();
702d522f475Smrg	    update_appkeypad();
703d522f475Smrg	    update_scrollkey();
704d522f475Smrg	    update_scrollttyoutput();
705d522f475Smrg	    update_allow132();
706d522f475Smrg	    update_cursesemul();
707d522f475Smrg	    update_keepSelection();
708d522f475Smrg	    update_selectToClipboard();
709d522f475Smrg	    update_visualbell();
710d522f475Smrg	    update_poponbell();
711d522f475Smrg	    update_bellIsUrgent();
712d522f475Smrg	    update_cursorblink();
713d522f475Smrg	    update_altscreen();
714d522f475Smrg	    update_titeInhibit();
715d522f475Smrg#ifndef NO_ACTIVE_ICON
716d522f475Smrg	    if (!screen->fnt_icon.fs || !screen->iconVwin.window) {
717d522f475Smrg		SetItemSensitivity(
718d522f475Smrg				      vtMenuEntries[vtMenu_activeicon].widget,
719d522f475Smrg				      False);
720d522f475Smrg	    } else
721d522f475Smrg		update_activeicon();
722d522f475Smrg#endif /* NO_ACTIVE_ICON */
723d522f475Smrg#if OPT_TEK4014
724d522f475Smrg	    if (screen->inhibit & I_TEK) {
725d522f475Smrg		int n;
726d522f475Smrg		for (n = (int) vtMenu_tekshow; n <= (int) vtMenu_vthide; ++n) {
727d522f475Smrg		    SetItemSensitivity(vtMenuEntries[n].widget, False);
728d522f475Smrg		}
729d522f475Smrg	    }
730d522f475Smrg#endif
731d522f475Smrg	}
732d522f475Smrg	break;
733d522f475Smrg
734d522f475Smrg    case fontMenu:
735d522f475Smrg	if (created) {
736d522f475Smrg	    set_menu_font(True);
737d522f475Smrg	    SetItemSensitivity(
738d522f475Smrg				  fontMenuEntries[fontMenu_fontescape].widget,
739d522f475Smrg				  (screen->menu_font_names[fontMenu_fontescape][fNorm]
740d522f475Smrg				   ? True : False));
741d522f475Smrg#if OPT_BOX_CHARS
742d522f475Smrg	    update_font_boxchars();
743d522f475Smrg	    SetItemSensitivity(
744d522f475Smrg				  fontMenuEntries[fontMenu_font_boxchars].widget,
745d522f475Smrg				  True);
74620d2c4d2Smrg	    update_font_packed();
74720d2c4d2Smrg	    SetItemSensitivity(
74820d2c4d2Smrg				  fontMenuEntries[fontMenu_font_packedfont].widget,
74920d2c4d2Smrg				  True);
750d522f475Smrg#endif
751d522f475Smrg#if OPT_DEC_SOFTFONT		/* FIXME: not implemented */
752d522f475Smrg	    update_font_loadable();
753d522f475Smrg	    SetItemSensitivity(
754d522f475Smrg				  fontMenuEntries[fontMenu_font_loadable].widget,
755d522f475Smrg				  False);
756d522f475Smrg#endif
757d522f475Smrg#if OPT_DEC_CHRSET
758d522f475Smrg	    update_font_doublesize();
75920d2c4d2Smrg	    if (TScreenOf(xw)->cache_doublesize == 0)
760d522f475Smrg		SetItemSensitivity(
761d522f475Smrg				      fontMenuEntries[fontMenu_font_doublesize].widget,
762d522f475Smrg				      False);
763d522f475Smrg#endif
764d522f475Smrg#if OPT_RENDERFONT
765d522f475Smrg	    update_font_renderfont();
766d522f475Smrg#endif
767d522f475Smrg#if OPT_WIDE_CHARS
768d522f475Smrg	    update_font_utf8_mode();
769d522f475Smrg	    update_font_utf8_title();
770956cc18dSsnj#endif
771956cc18dSsnj#if OPT_ALLOW_XXX_OPS
77220d2c4d2Smrg	    update_menu_allowColorOps();
773956cc18dSsnj	    update_menu_allowFontOps();
77420d2c4d2Smrg	    update_menu_allowTcapOps();
775956cc18dSsnj	    update_menu_allowTitleOps();
776956cc18dSsnj	    update_menu_allowWindowOps();
777956cc18dSsnj	    enable_allow_xxx_ops(!(screen->allowSendEvents));
778d522f475Smrg#endif
779d522f475Smrg	}
78020d2c4d2Smrg	FindFontSelection(xw, NULL, True);
781d522f475Smrg	SetItemSensitivity(
782d522f475Smrg			      fontMenuEntries[fontMenu_fontsel].widget,
783d522f475Smrg			      (screen->menu_font_names[fontMenu_fontsel]
784d522f475Smrg			       ? True : False));
785d522f475Smrg	break;
786d522f475Smrg
787d522f475Smrg#if OPT_TEK4014
788d522f475Smrg    case tekMenu:
789d522f475Smrg	if (created && tekWidget) {
79020d2c4d2Smrg	    set_tekfont_menu_item(TekScreenOf(tekWidget)->cur.fontsize, True);
791d522f475Smrg	    update_vtshow();
792d522f475Smrg	}
793d522f475Smrg	break;
794d522f475Smrg#endif
795d522f475Smrg    case noMenu:
796d522f475Smrg    default:
797d522f475Smrg	break;
798d522f475Smrg    }
799d522f475Smrg
800d522f475Smrg    return True;
801d522f475Smrg}
802d522f475Smrg
803d522f475Smrg/*
804d522f475Smrg * public interfaces
805d522f475Smrg */
806d522f475Smrg
807d522f475Smrgvoid
808d522f475SmrgHandleCreateMenu(Widget w,
809d522f475Smrg		 XEvent * event,
810d522f475Smrg		 String * params,	/* mainMenu, vtMenu, or tekMenu */
811d522f475Smrg		 Cardinal *param_count)		/* 0 or 1 */
812d522f475Smrg{
813d522f475Smrg    TRACE(("HandleCreateMenu\n"));
814d522f475Smrg    (void) domenu(w, event, params, param_count);
815d522f475Smrg}
816d522f475Smrg
817d522f475Smrgvoid
818d522f475SmrgHandlePopupMenu(Widget w,
819d522f475Smrg		XEvent * event,
820d522f475Smrg		String * params,	/* mainMenu, vtMenu, or tekMenu */
821d522f475Smrg		Cardinal *param_count)	/* 0 or 1 */
822d522f475Smrg{
823d522f475Smrg    TRACE(("HandlePopupMenu\n"));
824d522f475Smrg    if (domenu(w, event, params, param_count)) {
825d522f475Smrg#if OPT_TOOLBAR
826d522f475Smrg	w = select_menu(w, mainMenu)->w;
827d522f475Smrg#endif
828d522f475Smrg	XtCallActionProc(w, "XawPositionSimpleMenu", event, params, 1);
829d522f475Smrg	XtCallActionProc(w, "MenuPopup", event, params, 1);
830d522f475Smrg    }
831d522f475Smrg}
832d522f475Smrg
833d522f475Smrg/*
834d522f475Smrg * private interfaces - keep out!
835d522f475Smrg */
836d522f475Smrg
837d522f475Smrg/* ARGSUSED */
838d522f475Smrgstatic void
839d522f475Smrghandle_send_signal(Widget gw GCC_UNUSED, int sig)
840d522f475Smrg{
841d522f475Smrg#ifndef VMS
842d522f475Smrg    TScreen *screen = TScreenOf(term);
843d522f475Smrg
844d522f475Smrg    if (hold_screen > 1)
845d522f475Smrg	hold_screen = 0;
846d522f475Smrg    if (screen->pid > 1)
847d522f475Smrg	kill_process_group(screen->pid, sig);
848d522f475Smrg#endif
849d522f475Smrg}
850d522f475Smrg
851a1f3da82Smrgstatic void
852a1f3da82SmrgUpdateMenuItem(
853a1f3da82Smrg#if OPT_TRACE
854a1f3da82Smrg		  const char *func,
855a1f3da82Smrg#endif
856a1f3da82Smrg		  MenuEntry * menu,
857a1f3da82Smrg		  int which,
858a1f3da82Smrg		  Bool val)
859a1f3da82Smrg{
860a1f3da82Smrg    static Arg menuArgs =
861a1f3da82Smrg    {XtNleftBitmap, (XtArgVal) 0};
862a1f3da82Smrg    Widget mi = menu[which].widget;
863a1f3da82Smrg
864a1f3da82Smrg    if (mi) {
865a1f3da82Smrg	menuArgs.value = (XtArgVal) ((val)
866a1f3da82Smrg				     ? TScreenOf(term)->menu_item_bitmap
867a1f3da82Smrg				     : None);
868a1f3da82Smrg	XtSetValues(mi, &menuArgs, (Cardinal) 1);
869a1f3da82Smrg    }
870a1f3da82Smrg    TRACE(("%s(%d): %s\n", func, which, BtoS(val)));
871a1f3da82Smrg}
872a1f3da82Smrg
873a1f3da82Smrgvoid
874a1f3da82SmrgSetItemSensitivity(Widget mi, Bool val)
875a1f3da82Smrg{
876a1f3da82Smrg    static Arg menuArgs =
877a1f3da82Smrg    {XtNsensitive, (XtArgVal) 0};
878a1f3da82Smrg
879a1f3da82Smrg    if (mi) {
880a1f3da82Smrg	menuArgs.value = (XtArgVal) (val);
881a1f3da82Smrg	XtSetValues(mi, &menuArgs, (Cardinal) 1);
882a1f3da82Smrg    }
883a1f3da82Smrg}
884a1f3da82Smrg
885d522f475Smrg/*
886d522f475Smrg * action routines
887d522f475Smrg */
888d522f475Smrg
889a1f3da82Smrg#if OPT_MAXIMIZE
890a1f3da82Smrgstatic void
891a1f3da82Smrgdo_fullscreen(Widget gw GCC_UNUSED,
892a1f3da82Smrg	      XtPointer closure GCC_UNUSED,
893a1f3da82Smrg	      XtPointer data GCC_UNUSED)
894a1f3da82Smrg{
895a1f3da82Smrg    XtermWidget xw = term;
896a1f3da82Smrg    TScreen *screen = TScreenOf(xw);
897a1f3da82Smrg
898a1f3da82Smrg    if (resource.fullscreen != esNever)
899a1f3da82Smrg	FullScreen(xw, !screen->fullscreen);
900a1f3da82Smrg}
901a1f3da82Smrg
902a1f3da82Smrg/* ARGSUSED */
903a1f3da82Smrgvoid
904a1f3da82SmrgHandleFullscreen(Widget w,
905a1f3da82Smrg		 XEvent * event GCC_UNUSED,
906a1f3da82Smrg		 String * params GCC_UNUSED,
907a1f3da82Smrg		 Cardinal *param_count GCC_UNUSED)
908a1f3da82Smrg{
909a1f3da82Smrg    do_fullscreen(w, (XtPointer) 0, (XtPointer) 0);
910a1f3da82Smrg}
911a1f3da82Smrg
912a1f3da82Smrgvoid
913a1f3da82Smrgupdate_fullscreen(void)
914a1f3da82Smrg{
915a1f3da82Smrg    if (resource.fullscreen <= 1) {
916a1f3da82Smrg	UpdateCheckbox("update_fullscreen",
917a1f3da82Smrg		       mainMenuEntries,
918a1f3da82Smrg		       mainMenu_fullscreen,
919a1f3da82Smrg		       TScreenOf(term)->fullscreen);
920a1f3da82Smrg    } else {
921a1f3da82Smrg	SetItemSensitivity(mainMenuEntries[mainMenu_fullscreen].widget,
922a1f3da82Smrg			   False);
923a1f3da82Smrg    }
924a1f3da82Smrg}
925a1f3da82Smrg
926a1f3da82Smrg#endif /* OPT_MAXIMIZE */
927a1f3da82Smrg
928d522f475Smrgstatic void
929d522f475Smrgdo_securekbd(Widget gw GCC_UNUSED,
930d522f475Smrg	     XtPointer closure GCC_UNUSED,
931d522f475Smrg	     XtPointer data GCC_UNUSED)
932d522f475Smrg{
93320d2c4d2Smrg    XtermWidget xw = term;
93420d2c4d2Smrg    TScreen *screen = TScreenOf(xw);
935d522f475Smrg    Time now = CurrentTime;	/* XXX - wrong */
936d522f475Smrg
937d522f475Smrg    if (screen->grabbedKbd) {
938d522f475Smrg	XUngrabKeyboard(screen->display, now);
93920d2c4d2Smrg	ReverseVideo(xw);
940d522f475Smrg	screen->grabbedKbd = False;
941d522f475Smrg    } else {
942d522f475Smrg	if (XGrabKeyboard(screen->display, XtWindow(CURRENT_EMU()),
943d522f475Smrg			  True, GrabModeAsync, GrabModeAsync, now)
944d522f475Smrg	    != GrabSuccess) {
94520d2c4d2Smrg	    Bell(xw, XkbBI_MinorError, 100);
946d522f475Smrg	} else {
94720d2c4d2Smrg	    ReverseVideo(xw);
948d522f475Smrg	    screen->grabbedKbd = True;
949d522f475Smrg	}
950d522f475Smrg    }
951d522f475Smrg    update_securekbd();
952d522f475Smrg}
953d522f475Smrg
954d522f475Smrg/* ARGSUSED */
955d522f475Smrgvoid
956d522f475SmrgHandleSecure(Widget w GCC_UNUSED,
957d522f475Smrg	     XEvent * event GCC_UNUSED,		/* unused */
958d522f475Smrg	     String * params GCC_UNUSED,	/* [0] = volume */
959d522f475Smrg	     Cardinal *param_count GCC_UNUSED)	/* 0 or 1 */
960d522f475Smrg{
961d522f475Smrg#if 0
962d522f475Smrg    Time ev_time = CurrentTime;
963d522f475Smrg
964d522f475Smrg    if ((event->xany.type == KeyPress) ||
965d522f475Smrg	(event->xany.type == KeyRelease))
966d522f475Smrg	ev_time = event->xkey.time;
967d522f475Smrg    else if ((event->xany.type == ButtonPress) ||
968d522f475Smrg	     (event->xany.type == ButtonRelease))
969d522f475Smrg	ev_time = event->xbutton.time;
970d522f475Smrg#endif
971d522f475Smrg    do_securekbd(vt_shell[mainMenu].w, (XtPointer) 0, (XtPointer) 0);
972d522f475Smrg}
973d522f475Smrg
974d522f475Smrgstatic void
975d522f475Smrgdo_allowsends(Widget gw GCC_UNUSED,
976d522f475Smrg	      XtPointer closure GCC_UNUSED,
977d522f475Smrg	      XtPointer data GCC_UNUSED)
978d522f475Smrg{
979d522f475Smrg    TScreen *screen = TScreenOf(term);
980d522f475Smrg
981956cc18dSsnj    ToggleFlag(screen->allowSendEvents);
982d522f475Smrg    update_allowsends();
983956cc18dSsnj#if OPT_ALLOW_XXX_OPS
984956cc18dSsnj    enable_allow_xxx_ops(!(screen->allowSendEvents));
985956cc18dSsnj#endif
986d522f475Smrg}
987d522f475Smrg
988d522f475Smrgstatic void
989d522f475Smrgdo_visualbell(Widget gw GCC_UNUSED,
990d522f475Smrg	      XtPointer closure GCC_UNUSED,
991d522f475Smrg	      XtPointer data GCC_UNUSED)
992d522f475Smrg{
993d522f475Smrg    TScreen *screen = TScreenOf(term);
994d522f475Smrg
995956cc18dSsnj    ToggleFlag(screen->visualbell);
996d522f475Smrg    update_visualbell();
997d522f475Smrg}
998d522f475Smrg
999d522f475Smrgstatic void
1000d522f475Smrgdo_bellIsUrgent(Widget gw GCC_UNUSED,
1001d522f475Smrg		XtPointer closure GCC_UNUSED,
1002d522f475Smrg		XtPointer data GCC_UNUSED)
1003d522f475Smrg{
1004d522f475Smrg    TScreen *screen = TScreenOf(term);
1005d522f475Smrg
1006956cc18dSsnj    ToggleFlag(screen->bellIsUrgent);
1007d522f475Smrg    update_bellIsUrgent();
1008d522f475Smrg}
1009d522f475Smrg
1010d522f475Smrgstatic void
1011d522f475Smrgdo_poponbell(Widget gw GCC_UNUSED,
1012d522f475Smrg	     XtPointer closure GCC_UNUSED,
1013d522f475Smrg	     XtPointer data GCC_UNUSED)
1014d522f475Smrg{
1015d522f475Smrg    TScreen *screen = TScreenOf(term);
1016d522f475Smrg
1017956cc18dSsnj    ToggleFlag(screen->poponbell);
1018d522f475Smrg    update_poponbell();
1019d522f475Smrg}
1020d522f475Smrg
1021d522f475Smrg#ifdef ALLOWLOGGING
1022d522f475Smrgstatic void
1023d522f475Smrgdo_logging(Widget gw GCC_UNUSED,
1024d522f475Smrg	   XtPointer closure GCC_UNUSED,
1025d522f475Smrg	   XtPointer data GCC_UNUSED)
1026d522f475Smrg{
102720d2c4d2Smrg    XtermWidget xw = term;
102820d2c4d2Smrg    TScreen *screen = TScreenOf(xw);
1029d522f475Smrg
1030d522f475Smrg    if (screen->logging) {
103120d2c4d2Smrg	CloseLog(xw);
1032d522f475Smrg    } else {
103320d2c4d2Smrg	StartLog(xw);
1034d522f475Smrg    }
1035d522f475Smrg    /* update_logging done by CloseLog and StartLog */
1036d522f475Smrg}
1037d522f475Smrg#endif
1038d522f475Smrg
1039d522f475Smrgstatic void
1040d522f475Smrgdo_print(Widget gw GCC_UNUSED,
1041d522f475Smrg	 XtPointer closure GCC_UNUSED,
1042d522f475Smrg	 XtPointer data GCC_UNUSED)
1043d522f475Smrg{
104420d2c4d2Smrg    xtermPrintScreen(term, True, getPrinterFlags(term, NULL, 0));
1045d522f475Smrg}
1046d522f475Smrg
1047d522f475Smrgstatic void
1048d522f475Smrgdo_print_redir(Widget gw GCC_UNUSED,
1049d522f475Smrg	       XtPointer closure GCC_UNUSED,
1050d522f475Smrg	       XtPointer data GCC_UNUSED)
1051d522f475Smrg{
105220d2c4d2Smrg    setPrinterControlMode(term, TScreenOf(term)->printer_controlmode ? 0 : 2);
1053d522f475Smrg}
1054d522f475Smrg
1055d522f475Smrgstatic void
1056d522f475Smrgdo_redraw(Widget gw GCC_UNUSED,
1057d522f475Smrg	  XtPointer closure GCC_UNUSED,
1058d522f475Smrg	  XtPointer data GCC_UNUSED)
1059d522f475Smrg{
1060d522f475Smrg    Redraw();
1061d522f475Smrg}
1062d522f475Smrg
1063d522f475Smrgvoid
1064d522f475Smrgshow_8bit_control(Bool value)
1065d522f475Smrg{
106620d2c4d2Smrg    if (TScreenOf(term)->control_eight_bits != value) {
106720d2c4d2Smrg	TScreenOf(term)->control_eight_bits = (Boolean) value;
1068d522f475Smrg	update_8bit_control();
1069d522f475Smrg    }
1070d522f475Smrg}
1071d522f475Smrg
1072d522f475Smrgstatic void
1073d522f475Smrgdo_8bit_control(Widget gw GCC_UNUSED,
1074d522f475Smrg		XtPointer closure GCC_UNUSED,
1075d522f475Smrg		XtPointer data GCC_UNUSED)
1076d522f475Smrg{
107720d2c4d2Smrg    show_8bit_control(!TScreenOf(term)->control_eight_bits);
1078d522f475Smrg}
1079d522f475Smrg
1080d522f475Smrgstatic void
1081d522f475Smrgdo_backarrow(Widget gw GCC_UNUSED,
1082d522f475Smrg	     XtPointer closure GCC_UNUSED,
1083d522f475Smrg	     XtPointer data GCC_UNUSED)
1084d522f475Smrg{
1085d522f475Smrg    term->keyboard.flags ^= MODE_DECBKM;
1086d522f475Smrg    update_decbkm();
1087d522f475Smrg}
1088d522f475Smrg
1089d522f475Smrg#if OPT_NUM_LOCK
1090d522f475Smrgstatic void
1091d522f475Smrgdo_num_lock(Widget gw GCC_UNUSED,
1092d522f475Smrg	    XtPointer closure GCC_UNUSED,
1093d522f475Smrg	    XtPointer data GCC_UNUSED)
1094d522f475Smrg{
1095956cc18dSsnj    ToggleFlag(term->misc.real_NumLock);
1096d522f475Smrg    update_num_lock();
1097d522f475Smrg}
1098d522f475Smrg
1099d522f475Smrgstatic void
1100d522f475Smrgdo_alt_esc(Widget gw GCC_UNUSED,
1101d522f475Smrg	   XtPointer closure GCC_UNUSED,
1102d522f475Smrg	   XtPointer data GCC_UNUSED)
1103d522f475Smrg{
110420d2c4d2Smrg    ToggleFlag(TScreenOf(term)->alt_sends_esc);
1105d522f475Smrg    update_alt_esc();
1106d522f475Smrg}
1107d522f475Smrg
1108d522f475Smrgstatic void
1109d522f475Smrgdo_meta_esc(Widget gw GCC_UNUSED,
1110d522f475Smrg	    XtPointer closure GCC_UNUSED,
1111d522f475Smrg	    XtPointer data GCC_UNUSED)
1112d522f475Smrg{
111320d2c4d2Smrg    ToggleFlag(TScreenOf(term)->meta_sends_esc);
1114d522f475Smrg    update_meta_esc();
1115d522f475Smrg}
1116d522f475Smrg#endif
1117d522f475Smrg
1118d522f475Smrgstatic void
1119d522f475Smrgdo_delete_del(Widget gw GCC_UNUSED,
1120d522f475Smrg	      XtPointer closure GCC_UNUSED,
1121d522f475Smrg	      XtPointer data GCC_UNUSED)
1122d522f475Smrg{
1123d522f475Smrg    if (xtermDeleteIsDEL(term))
112420d2c4d2Smrg	TScreenOf(term)->delete_is_del = False;
1125d522f475Smrg    else
112620d2c4d2Smrg	TScreenOf(term)->delete_is_del = True;
1127d522f475Smrg    update_delete_del();
1128d522f475Smrg}
1129d522f475Smrg
1130d522f475Smrgstatic void
1131d522f475Smrgdo_old_fkeys(Widget gw GCC_UNUSED,
1132d522f475Smrg	     XtPointer closure GCC_UNUSED,
1133d522f475Smrg	     XtPointer data GCC_UNUSED)
1134d522f475Smrg{
1135d522f475Smrg    toggle_keyboard_type(term, keyboardIsLegacy);
1136d522f475Smrg}
1137d522f475Smrg
1138d522f475Smrg#if OPT_HP_FUNC_KEYS
1139d522f475Smrgstatic void
1140d522f475Smrgdo_hp_fkeys(Widget gw GCC_UNUSED,
1141d522f475Smrg	    XtPointer closure GCC_UNUSED,
1142d522f475Smrg	    XtPointer data GCC_UNUSED)
1143d522f475Smrg{
1144d522f475Smrg    toggle_keyboard_type(term, keyboardIsHP);
1145d522f475Smrg}
1146d522f475Smrg#endif
1147d522f475Smrg
1148d522f475Smrg#if OPT_SCO_FUNC_KEYS
1149d522f475Smrgstatic void
1150d522f475Smrgdo_sco_fkeys(Widget gw GCC_UNUSED,
1151d522f475Smrg	     XtPointer closure GCC_UNUSED,
1152d522f475Smrg	     XtPointer data GCC_UNUSED)
1153d522f475Smrg{
1154d522f475Smrg    toggle_keyboard_type(term, keyboardIsSCO);
1155d522f475Smrg}
1156d522f475Smrg#endif
1157d522f475Smrg
1158d522f475Smrg#if OPT_SUN_FUNC_KEYS
1159d522f475Smrgstatic void
1160d522f475Smrgdo_sun_fkeys(Widget gw GCC_UNUSED,
1161d522f475Smrg	     XtPointer closure GCC_UNUSED,
1162d522f475Smrg	     XtPointer data GCC_UNUSED)
1163d522f475Smrg{
1164d522f475Smrg    toggle_keyboard_type(term, keyboardIsSun);
1165d522f475Smrg}
1166d522f475Smrg#endif
1167d522f475Smrg
1168d522f475Smrg#if OPT_SUNPC_KBD
1169d522f475Smrg/*
1170d522f475Smrg * This really means "Sun/PC keyboard emulating VT220".
1171d522f475Smrg */
1172d522f475Smrgstatic void
1173d522f475Smrgdo_sun_kbd(Widget gw GCC_UNUSED,
1174d522f475Smrg	   XtPointer closure GCC_UNUSED,
1175d522f475Smrg	   XtPointer data GCC_UNUSED)
1176d522f475Smrg{
1177d522f475Smrg    toggle_keyboard_type(term, keyboardIsVT220);
1178d522f475Smrg}
1179d522f475Smrg#endif
1180d522f475Smrg
1181d522f475Smrg#if OPT_TCAP_FKEYS
1182d522f475Smrgstatic void
1183d522f475Smrgdo_tcap_fkeys(Widget gw GCC_UNUSED,
1184d522f475Smrg	      XtPointer closure GCC_UNUSED,
1185d522f475Smrg	      XtPointer data GCC_UNUSED)
1186d522f475Smrg{
1187d522f475Smrg    toggle_keyboard_type(term, keyboardIsTermcap);
1188d522f475Smrg}
1189d522f475Smrg#endif
1190d522f475Smrg
1191d522f475Smrg/*
1192d522f475Smrg * The following cases use the pid instead of the process group so that we
1193d522f475Smrg * don't get hosed by programs that change their process group
1194d522f475Smrg */
1195d522f475Smrg
1196d522f475Smrg/* ARGSUSED */
1197d522f475Smrgstatic void
1198d522f475Smrgdo_suspend(Widget gw,
1199d522f475Smrg	   XtPointer closure GCC_UNUSED,
1200d522f475Smrg	   XtPointer data GCC_UNUSED)
1201d522f475Smrg{
1202d522f475Smrg#if defined(SIGTSTP)
1203d522f475Smrg    handle_send_signal(gw, SIGTSTP);
1204d522f475Smrg#endif
1205d522f475Smrg}
1206d522f475Smrg
1207d522f475Smrg/* ARGSUSED */
1208d522f475Smrgstatic void
1209d522f475Smrgdo_continue(Widget gw,
1210d522f475Smrg	    XtPointer closure GCC_UNUSED,
1211d522f475Smrg	    XtPointer data GCC_UNUSED)
1212d522f475Smrg{
1213d522f475Smrg#if defined(SIGCONT)
1214d522f475Smrg    handle_send_signal(gw, SIGCONT);
1215d522f475Smrg#endif
1216d522f475Smrg}
1217d522f475Smrg
1218d522f475Smrg/* ARGSUSED */
1219d522f475Smrgstatic void
1220d522f475Smrgdo_interrupt(Widget gw,
1221d522f475Smrg	     XtPointer closure GCC_UNUSED,
1222d522f475Smrg	     XtPointer data GCC_UNUSED)
1223d522f475Smrg{
1224d522f475Smrg    handle_send_signal(gw, SIGINT);
1225d522f475Smrg}
1226d522f475Smrg
1227d522f475Smrg/* ARGSUSED */
1228d522f475Smrgvoid
1229d522f475Smrgdo_hangup(Widget gw,
1230d522f475Smrg	  XtPointer closure GCC_UNUSED,
1231d522f475Smrg	  XtPointer data GCC_UNUSED)
1232d522f475Smrg{
1233d522f475Smrg    handle_send_signal(gw, SIGHUP);
1234d522f475Smrg}
1235d522f475Smrg
1236d522f475Smrg/* ARGSUSED */
1237d522f475Smrgstatic void
1238d522f475Smrgdo_terminate(Widget gw,
1239d522f475Smrg	     XtPointer closure GCC_UNUSED,
1240d522f475Smrg	     XtPointer data GCC_UNUSED)
1241d522f475Smrg{
1242d522f475Smrg    handle_send_signal(gw, SIGTERM);
1243d522f475Smrg}
1244d522f475Smrg
1245d522f475Smrg/* ARGSUSED */
1246d522f475Smrgstatic void
1247d522f475Smrgdo_kill(Widget gw,
1248d522f475Smrg	XtPointer closure GCC_UNUSED,
1249d522f475Smrg	XtPointer data GCC_UNUSED)
1250d522f475Smrg{
1251d522f475Smrg    handle_send_signal(gw, SIGKILL);
1252d522f475Smrg}
1253d522f475Smrg
1254d522f475Smrgstatic void
1255d522f475Smrgdo_quit(Widget gw GCC_UNUSED,
1256d522f475Smrg	XtPointer closure GCC_UNUSED,
1257d522f475Smrg	XtPointer data GCC_UNUSED)
1258d522f475Smrg{
1259d522f475Smrg    Cleanup(SIGHUP);
1260d522f475Smrg}
1261d522f475Smrg
1262d522f475Smrg/*
1263d522f475Smrg * vt menu callbacks
1264d522f475Smrg */
1265d522f475Smrg
1266d522f475Smrgstatic void
1267d522f475Smrgdo_scrollbar(Widget gw GCC_UNUSED,
1268d522f475Smrg	     XtPointer closure GCC_UNUSED,
1269d522f475Smrg	     XtPointer data GCC_UNUSED)
1270d522f475Smrg{
1271d522f475Smrg    ToggleScrollBar(term);
1272d522f475Smrg}
1273d522f475Smrg
1274d522f475Smrgstatic void
1275d522f475Smrgdo_jumpscroll(Widget gw GCC_UNUSED,
1276d522f475Smrg	      XtPointer closure GCC_UNUSED,
1277d522f475Smrg	      XtPointer data GCC_UNUSED)
1278d522f475Smrg{
1279d522f475Smrg    TScreen *screen = TScreenOf(term);
1280d522f475Smrg
1281d522f475Smrg    term->flags ^= SMOOTHSCROLL;
1282d522f475Smrg    if (term->flags & SMOOTHSCROLL) {
1283d522f475Smrg	screen->jumpscroll = False;
1284d522f475Smrg	if (screen->scroll_amt)
1285d522f475Smrg	    FlushScroll(term);
1286d522f475Smrg    } else {
1287d522f475Smrg	screen->jumpscroll = True;
1288d522f475Smrg    }
1289d522f475Smrg    update_jumpscroll();
1290d522f475Smrg}
1291d522f475Smrg
1292d522f475Smrgstatic void
1293d522f475Smrgdo_reversevideo(Widget gw GCC_UNUSED,
1294d522f475Smrg		XtPointer closure GCC_UNUSED,
1295d522f475Smrg		XtPointer data GCC_UNUSED)
1296d522f475Smrg{
1297d522f475Smrg    ReverseVideo(term);
1298d522f475Smrg}
1299d522f475Smrg
1300d522f475Smrgstatic void
1301d522f475Smrgdo_autowrap(Widget gw GCC_UNUSED,
1302d522f475Smrg	    XtPointer closure GCC_UNUSED,
1303d522f475Smrg	    XtPointer data GCC_UNUSED)
1304d522f475Smrg{
1305d522f475Smrg    term->flags ^= WRAPAROUND;
1306d522f475Smrg    update_autowrap();
1307d522f475Smrg}
1308d522f475Smrg
1309d522f475Smrgstatic void
1310d522f475Smrgdo_reversewrap(Widget gw GCC_UNUSED,
1311d522f475Smrg	       XtPointer closure GCC_UNUSED,
1312d522f475Smrg	       XtPointer data GCC_UNUSED)
1313d522f475Smrg{
1314d522f475Smrg    term->flags ^= REVERSEWRAP;
1315d522f475Smrg    update_reversewrap();
1316d522f475Smrg}
1317d522f475Smrg
1318d522f475Smrgstatic void
1319d522f475Smrgdo_autolinefeed(Widget gw GCC_UNUSED,
1320d522f475Smrg		XtPointer closure GCC_UNUSED,
1321d522f475Smrg		XtPointer data GCC_UNUSED)
1322d522f475Smrg{
1323d522f475Smrg    term->flags ^= LINEFEED;
1324d522f475Smrg    update_autolinefeed();
1325d522f475Smrg}
1326d522f475Smrg
1327d522f475Smrgstatic void
1328d522f475Smrgdo_appcursor(Widget gw GCC_UNUSED,
1329d522f475Smrg	     XtPointer closure GCC_UNUSED,
1330d522f475Smrg	     XtPointer data GCC_UNUSED)
1331d522f475Smrg{
1332d522f475Smrg    term->keyboard.flags ^= MODE_DECCKM;
1333d522f475Smrg    update_appcursor();
1334d522f475Smrg}
1335d522f475Smrg
1336d522f475Smrgstatic void
1337d522f475Smrgdo_appkeypad(Widget gw GCC_UNUSED,
1338d522f475Smrg	     XtPointer closure GCC_UNUSED,
1339d522f475Smrg	     XtPointer data GCC_UNUSED)
1340d522f475Smrg{
1341d522f475Smrg    term->keyboard.flags ^= MODE_DECKPAM;
1342d522f475Smrg    update_appkeypad();
1343d522f475Smrg}
1344d522f475Smrg
1345d522f475Smrgstatic void
1346d522f475Smrgdo_scrollkey(Widget gw GCC_UNUSED,
1347d522f475Smrg	     XtPointer closure GCC_UNUSED,
1348d522f475Smrg	     XtPointer data GCC_UNUSED)
1349d522f475Smrg{
1350d522f475Smrg    TScreen *screen = TScreenOf(term);
1351d522f475Smrg
1352956cc18dSsnj    ToggleFlag(screen->scrollkey);
1353d522f475Smrg    update_scrollkey();
1354d522f475Smrg}
1355d522f475Smrg
1356d522f475Smrgstatic void
1357d522f475Smrgdo_scrollttyoutput(Widget gw GCC_UNUSED,
1358d522f475Smrg		   XtPointer closure GCC_UNUSED,
1359d522f475Smrg		   XtPointer data GCC_UNUSED)
1360d522f475Smrg{
1361d522f475Smrg    TScreen *screen = TScreenOf(term);
1362d522f475Smrg
1363956cc18dSsnj    ToggleFlag(screen->scrollttyoutput);
1364d522f475Smrg    update_scrollttyoutput();
1365d522f475Smrg}
1366d522f475Smrg
1367d522f475Smrgstatic void
1368d522f475Smrgdo_keepSelection(Widget gw GCC_UNUSED,
1369d522f475Smrg		 XtPointer closure GCC_UNUSED,
1370d522f475Smrg		 XtPointer data GCC_UNUSED)
1371d522f475Smrg{
1372d522f475Smrg    TScreen *screen = TScreenOf(term);
1373d522f475Smrg
1374956cc18dSsnj    ToggleFlag(screen->keepSelection);
1375d522f475Smrg    update_keepSelection();
1376d522f475Smrg}
1377d522f475Smrg
1378d522f475Smrgstatic void
1379d522f475Smrgdo_selectClipboard(Widget gw GCC_UNUSED,
1380d522f475Smrg		   XtPointer closure GCC_UNUSED,
1381d522f475Smrg		   XtPointer data GCC_UNUSED)
1382d522f475Smrg{
1383d522f475Smrg    TScreen *screen = TScreenOf(term);
1384d522f475Smrg
1385956cc18dSsnj    ToggleFlag(screen->selectToClipboard);
1386d522f475Smrg    update_selectToClipboard();
1387d522f475Smrg}
1388d522f475Smrg
1389d522f475Smrgstatic void
1390d522f475Smrgdo_allow132(Widget gw GCC_UNUSED,
1391d522f475Smrg	    XtPointer closure GCC_UNUSED,
1392d522f475Smrg	    XtPointer data GCC_UNUSED)
1393d522f475Smrg{
1394d522f475Smrg    TScreen *screen = TScreenOf(term);
1395d522f475Smrg
1396956cc18dSsnj    ToggleFlag(screen->c132);
1397d522f475Smrg    update_allow132();
1398d522f475Smrg}
1399d522f475Smrg
1400d522f475Smrgstatic void
1401d522f475Smrgdo_cursesemul(Widget gw GCC_UNUSED,
1402d522f475Smrg	      XtPointer closure GCC_UNUSED,
1403d522f475Smrg	      XtPointer data GCC_UNUSED)
1404d522f475Smrg{
1405d522f475Smrg    TScreen *screen = TScreenOf(term);
1406d522f475Smrg
1407956cc18dSsnj    ToggleFlag(screen->curses);
1408d522f475Smrg    update_cursesemul();
1409d522f475Smrg}
1410d522f475Smrg
1411d522f475Smrgstatic void
1412d522f475Smrgdo_marginbell(Widget gw GCC_UNUSED,
1413d522f475Smrg	      XtPointer closure GCC_UNUSED,
1414d522f475Smrg	      XtPointer data GCC_UNUSED)
1415d522f475Smrg{
1416d522f475Smrg    TScreen *screen = TScreenOf(term);
1417d522f475Smrg
1418a1f3da82Smrg    if ((ToggleFlag(screen->marginbell)) == 0)
141920d2c4d2Smrg	screen->bellArmed = -1;
1420d522f475Smrg    update_marginbell();
1421d522f475Smrg}
1422d522f475Smrg
1423d522f475Smrg#if OPT_TEK4014
1424d522f475Smrgstatic void
1425d522f475Smrghandle_tekshow(Widget gw GCC_UNUSED, Bool allowswitch)
1426d522f475Smrg{
142720d2c4d2Smrg    XtermWidget xw = term;
142820d2c4d2Smrg    TScreen *screen = TScreenOf(xw);
1429d522f475Smrg
1430d522f475Smrg    TRACE(("Show tek-window\n"));
143120d2c4d2Smrg    if (!TEK4014_SHOWN(xw)) {	/* not showing, turn on */
1432d522f475Smrg	set_tek_visibility(True);
1433d522f475Smrg    } else if (screen->Vshow || allowswitch) {	/* is showing, turn off */
1434d522f475Smrg	set_tek_visibility(False);
1435d522f475Smrg	end_tek_mode();		/* WARNING: this does a longjmp */
1436d522f475Smrg    } else
143720d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
1438d522f475Smrg}
1439d522f475Smrg
1440d522f475Smrg/* ARGSUSED */
1441d522f475Smrgstatic void
1442d522f475Smrgdo_tekshow(Widget gw,
1443d522f475Smrg	   XtPointer closure GCC_UNUSED,
1444d522f475Smrg	   XtPointer data GCC_UNUSED)
1445d522f475Smrg{
1446d522f475Smrg    handle_tekshow(gw, True);
1447d522f475Smrg}
1448d522f475Smrg
1449d522f475Smrg/* ARGSUSED */
1450d522f475Smrgstatic void
1451d522f475Smrgdo_tekonoff(Widget gw,
1452d522f475Smrg	    XtPointer closure GCC_UNUSED,
1453d522f475Smrg	    XtPointer data GCC_UNUSED)
1454d522f475Smrg{
1455d522f475Smrg    handle_tekshow(gw, False);
1456d522f475Smrg}
1457d522f475Smrg#endif /* OPT_TEK4014 */
1458d522f475Smrg
1459d522f475Smrg#if OPT_BLINK_CURS
1460d522f475Smrg/* ARGSUSED */
1461d522f475Smrgstatic void
1462d522f475Smrgdo_cursorblink(Widget gw GCC_UNUSED,
1463d522f475Smrg	       XtPointer closure GCC_UNUSED,
1464d522f475Smrg	       XtPointer data GCC_UNUSED)
1465d522f475Smrg{
1466d522f475Smrg    TScreen *screen = TScreenOf(term);
1467d522f475Smrg    ToggleCursorBlink(screen);
1468d522f475Smrg}
1469d522f475Smrg#endif
1470d522f475Smrg
1471d522f475Smrg/* ARGSUSED */
1472d522f475Smrgstatic void
1473d522f475Smrgdo_altscreen(Widget gw GCC_UNUSED,
1474d522f475Smrg	     XtPointer closure GCC_UNUSED,
1475d522f475Smrg	     XtPointer data GCC_UNUSED)
1476d522f475Smrg{
1477d522f475Smrg    ToggleAlternate(term);
1478d522f475Smrg}
1479d522f475Smrg
1480d522f475Smrg/* ARGSUSED */
1481d522f475Smrgstatic void
1482d522f475Smrgdo_titeInhibit(Widget gw GCC_UNUSED,
1483d522f475Smrg	       XtPointer closure GCC_UNUSED,
1484d522f475Smrg	       XtPointer data GCC_UNUSED)
1485d522f475Smrg{
1486956cc18dSsnj    ToggleFlag(term->misc.titeInhibit);
1487d522f475Smrg    update_titeInhibit();
1488d522f475Smrg}
1489d522f475Smrg
1490d522f475Smrg#ifndef NO_ACTIVE_ICON
1491d522f475Smrg/* ARGSUSED */
1492d522f475Smrgstatic void
1493d522f475Smrgdo_activeicon(Widget gw GCC_UNUSED,
1494d522f475Smrg	      XtPointer closure GCC_UNUSED,
1495d522f475Smrg	      XtPointer data GCC_UNUSED)
1496d522f475Smrg{
1497d522f475Smrg    TScreen *screen = TScreenOf(term);
1498d522f475Smrg
1499d522f475Smrg    if (screen->iconVwin.window) {
1500d522f475Smrg	Widget shell = XtParent(term);
1501956cc18dSsnj	ToggleFlag(term->misc.active_icon);
1502d522f475Smrg	XtVaSetValues(shell, XtNiconWindow,
1503d522f475Smrg		      term->misc.active_icon ? screen->iconVwin.window : None,
1504d522f475Smrg		      (XtPointer) 0);
1505d522f475Smrg	update_activeicon();
1506d522f475Smrg    }
1507d522f475Smrg}
1508d522f475Smrg#endif /* NO_ACTIVE_ICON */
1509d522f475Smrg
1510d522f475Smrgstatic void
1511d522f475Smrgdo_softreset(Widget gw GCC_UNUSED,
1512d522f475Smrg	     XtPointer closure GCC_UNUSED,
1513d522f475Smrg	     XtPointer data GCC_UNUSED)
1514d522f475Smrg{
1515d522f475Smrg    VTReset(term, False, False);
1516d522f475Smrg}
1517d522f475Smrg
1518d522f475Smrgstatic void
1519d522f475Smrgdo_hardreset(Widget gw GCC_UNUSED,
1520d522f475Smrg	     XtPointer closure GCC_UNUSED,
1521d522f475Smrg	     XtPointer data GCC_UNUSED)
1522d522f475Smrg{
1523d522f475Smrg    VTReset(term, True, False);
1524d522f475Smrg}
1525d522f475Smrg
1526d522f475Smrgstatic void
1527d522f475Smrgdo_clearsavedlines(Widget gw GCC_UNUSED,
1528d522f475Smrg		   XtPointer closure GCC_UNUSED,
1529d522f475Smrg		   XtPointer data GCC_UNUSED)
1530d522f475Smrg{
1531d522f475Smrg    VTReset(term, True, True);
1532d522f475Smrg}
1533d522f475Smrg
1534d522f475Smrg#if OPT_TEK4014
1535d522f475Smrgstatic void
1536d522f475Smrgdo_tekmode(Widget gw GCC_UNUSED,
1537d522f475Smrg	   XtPointer closure GCC_UNUSED,
1538d522f475Smrg	   XtPointer data GCC_UNUSED)
1539d522f475Smrg{
1540d522f475Smrg    switch_modes(TEK4014_ACTIVE(term));		/* switch to tek mode */
1541d522f475Smrg}
1542d522f475Smrg
1543d522f475Smrg/* ARGSUSED */
1544d522f475Smrgstatic void
1545d522f475Smrgdo_vthide(Widget gw GCC_UNUSED,
1546d522f475Smrg	  XtPointer closure GCC_UNUSED,
1547d522f475Smrg	  XtPointer data GCC_UNUSED)
1548d522f475Smrg{
1549d522f475Smrg    hide_vt_window();
1550d522f475Smrg}
1551d522f475Smrg#endif /* OPT_TEK4014 */
1552d522f475Smrg
1553d522f475Smrg/*
1554d522f475Smrg * vtfont menu
1555d522f475Smrg */
1556d522f475Smrg
1557d522f475Smrgstatic void
1558d522f475Smrgdo_vtfont(Widget gw GCC_UNUSED,
1559d522f475Smrg	  XtPointer closure,
1560d522f475Smrg	  XtPointer data GCC_UNUSED)
1561d522f475Smrg{
156220d2c4d2Smrg    XtermWidget xw = term;
1563d522f475Smrg    char *entryname = (char *) closure;
1564d522f475Smrg    int i;
1565d522f475Smrg
1566d522f475Smrg    for (i = 0; i < NMENUFONTS; i++) {
1567d522f475Smrg	if (strcmp(entryname, fontMenuEntries[i].name) == 0) {
156820d2c4d2Smrg	    SetVTFont(xw, i, True, NULL);
1569d522f475Smrg	    return;
1570d522f475Smrg	}
1571d522f475Smrg    }
157220d2c4d2Smrg    Bell(xw, XkbBI_MinorError, 0);
1573d522f475Smrg}
1574d522f475Smrg
1575d522f475Smrg#if OPT_DEC_CHRSET
1576d522f475Smrgstatic void
1577d522f475Smrgdo_font_doublesize(Widget gw GCC_UNUSED,
1578d522f475Smrg		   XtPointer closure GCC_UNUSED,
1579d522f475Smrg		   XtPointer data GCC_UNUSED)
1580d522f475Smrg{
158120d2c4d2Smrg    XtermWidget xw = term;
158220d2c4d2Smrg
158320d2c4d2Smrg    if (TScreenOf(xw)->cache_doublesize != 0)
158420d2c4d2Smrg	ToggleFlag(TScreenOf(xw)->font_doublesize);
1585d522f475Smrg    update_font_doublesize();
1586d522f475Smrg    Redraw();
1587d522f475Smrg}
1588d522f475Smrg#endif
1589d522f475Smrg
1590d522f475Smrg#if OPT_BOX_CHARS
1591d522f475Smrgstatic void
1592d522f475Smrgdo_font_boxchars(Widget gw GCC_UNUSED,
1593d522f475Smrg		 XtPointer closure GCC_UNUSED,
1594d522f475Smrg		 XtPointer data GCC_UNUSED)
1595d522f475Smrg{
159620d2c4d2Smrg    ToggleFlag(TScreenOf(term)->force_box_chars);
1597d522f475Smrg    update_font_boxchars();
1598d522f475Smrg    Redraw();
1599d522f475Smrg}
160020d2c4d2Smrg
160120d2c4d2Smrgstatic void
160220d2c4d2Smrgdo_font_packed(Widget gw GCC_UNUSED,
160320d2c4d2Smrg	       XtPointer closure GCC_UNUSED,
160420d2c4d2Smrg	       XtPointer data GCC_UNUSED)
160520d2c4d2Smrg{
160620d2c4d2Smrg    ToggleFlag(TScreenOf(term)->force_packed);
160720d2c4d2Smrg    update_font_packed();
160820d2c4d2Smrg    SetVTFont(term, TScreenOf(term)->menu_font_number, True, NULL);
160920d2c4d2Smrg}
1610d522f475Smrg#endif
1611d522f475Smrg
1612d522f475Smrg#if OPT_DEC_SOFTFONT
1613d522f475Smrgstatic void
1614d522f475Smrgdo_font_loadable(Widget gw GCC_UNUSED,
1615d522f475Smrg		 XtPointer closure GCC_UNUSED,
1616d522f475Smrg		 XtPointer data GCC_UNUSED)
1617d522f475Smrg{
1618956cc18dSsnj    ToggleFlag(term->misc.font_loadable);
1619d522f475Smrg    update_font_loadable();
1620d522f475Smrg}
1621d522f475Smrg#endif
1622d522f475Smrg
1623d522f475Smrg#if OPT_RENDERFONT
1624d522f475Smrgstatic void
1625d522f475Smrgdo_font_renderfont(Widget gw GCC_UNUSED,
1626d522f475Smrg		   XtPointer closure GCC_UNUSED,
1627d522f475Smrg		   XtPointer data GCC_UNUSED)
1628d522f475Smrg{
162920d2c4d2Smrg    XtermWidget xw = (XtermWidget) term;
163020d2c4d2Smrg    TScreen *screen = TScreenOf(xw);
1631d522f475Smrg    int fontnum = screen->menu_font_number;
163220d2c4d2Smrg    String name = TScreenOf(xw)->MenuFontName(fontnum);
1633d522f475Smrg
163420d2c4d2Smrg    DefaultRenderFont(xw);
163520d2c4d2Smrg    ToggleFlag(xw->misc.render_font);
1636d522f475Smrg    update_font_renderfont();
163720d2c4d2Smrg    xtermLoadFont(xw, xtermFontName(name), True, fontnum);
1638d522f475Smrg    ScrnRefresh(term, 0, 0,
1639d522f475Smrg		MaxRows(screen),
1640d522f475Smrg		MaxCols(screen), True);
1641d522f475Smrg}
1642d522f475Smrg#endif
1643d522f475Smrg
1644d522f475Smrg#if OPT_WIDE_CHARS
1645d522f475Smrgstatic void
1646d522f475Smrgdo_font_utf8_mode(Widget gw GCC_UNUSED,
1647d522f475Smrg		  XtPointer closure GCC_UNUSED,
1648d522f475Smrg		  XtPointer data GCC_UNUSED)
1649d522f475Smrg{
1650d522f475Smrg    TScreen *screen = TScreenOf(term);
1651d522f475Smrg
1652d522f475Smrg    /*
1653d522f475Smrg     * If xterm was started with -wc option, it might not have the wide fonts.
1654d522f475Smrg     * If xterm was not started with -wc, it might not have wide cells.
1655d522f475Smrg     */
1656d522f475Smrg    if (!screen->utf8_mode) {
1657d522f475Smrg	if (screen->wide_chars) {
1658d522f475Smrg	    if (xtermLoadWideFonts(term, True)) {
1659d522f475Smrg		SetVTFont(term, screen->menu_font_number, True, NULL);
1660d522f475Smrg	    }
1661d522f475Smrg	} else {
1662d522f475Smrg	    ChangeToWide(term);
1663d522f475Smrg	}
1664d522f475Smrg    }
1665d522f475Smrg    switchPtyData(screen, !screen->utf8_mode);
1666d522f475Smrg    /*
1667d522f475Smrg     * We don't repaint the screen when switching UTF-8 on/off.  When switching
1668d522f475Smrg     * on - the Latin-1 codes should paint as-is.  When switching off, that's
1669d522f475Smrg     * hard to do properly.
1670d522f475Smrg     */
1671d522f475Smrg}
1672d522f475Smrg
1673d522f475Smrgstatic void
1674d522f475Smrgdo_font_utf8_title(Widget gw GCC_UNUSED,
1675d522f475Smrg		   XtPointer closure GCC_UNUSED,
1676d522f475Smrg		   XtPointer data GCC_UNUSED)
1677d522f475Smrg{
1678d522f475Smrg    TScreen *screen = TScreenOf(term);
1679d522f475Smrg
1680956cc18dSsnj    ToggleFlag(screen->utf8_title);
1681d522f475Smrg    update_font_utf8_title();
1682d522f475Smrg}
1683d522f475Smrg#endif
1684d522f475Smrg
1685d522f475Smrg/*
1686d522f475Smrg * tek menu
1687d522f475Smrg */
1688d522f475Smrg
1689d522f475Smrg#if OPT_TEK4014
1690d522f475Smrgstatic void
1691956cc18dSsnjdo_tektextlarge(Widget gw,
1692d522f475Smrg		XtPointer closure GCC_UNUSED,
1693d522f475Smrg		XtPointer data GCC_UNUSED)
1694d522f475Smrg{
1695956cc18dSsnj    TekSetFontSize(getTekWidget(gw), True, tekMenu_tektextlarge);
1696d522f475Smrg}
1697d522f475Smrg
1698d522f475Smrgstatic void
1699956cc18dSsnjdo_tektext2(Widget gw,
1700d522f475Smrg	    XtPointer closure GCC_UNUSED,
1701d522f475Smrg	    XtPointer data GCC_UNUSED)
1702d522f475Smrg{
1703956cc18dSsnj    TekSetFontSize(getTekWidget(gw), True, tekMenu_tektext2);
1704d522f475Smrg}
1705d522f475Smrg
1706d522f475Smrgstatic void
1707956cc18dSsnjdo_tektext3(Widget gw,
1708d522f475Smrg	    XtPointer closure GCC_UNUSED,
1709d522f475Smrg	    XtPointer data GCC_UNUSED)
1710d522f475Smrg{
1711956cc18dSsnj    TekSetFontSize(getTekWidget(gw), True, tekMenu_tektext3);
1712d522f475Smrg}
1713d522f475Smrg
1714d522f475Smrgstatic void
1715956cc18dSsnjdo_tektextsmall(Widget gw,
1716d522f475Smrg		XtPointer closure GCC_UNUSED,
1717d522f475Smrg		XtPointer data GCC_UNUSED)
1718d522f475Smrg{
1719956cc18dSsnj    TekSetFontSize(getTekWidget(gw), True, tekMenu_tektextsmall);
1720d522f475Smrg}
1721d522f475Smrg
1722d522f475Smrgstatic void
1723956cc18dSsnjdo_tekpage(Widget gw,
1724d522f475Smrg	   XtPointer closure GCC_UNUSED,
1725d522f475Smrg	   XtPointer data GCC_UNUSED)
1726d522f475Smrg{
1727956cc18dSsnj    TekSimulatePageButton(getTekWidget(gw), False);
1728d522f475Smrg}
1729d522f475Smrg
1730d522f475Smrgstatic void
1731956cc18dSsnjdo_tekreset(Widget gw,
1732d522f475Smrg	    XtPointer closure GCC_UNUSED,
1733d522f475Smrg	    XtPointer data GCC_UNUSED)
1734d522f475Smrg{
1735956cc18dSsnj    TekSimulatePageButton(getTekWidget(gw), True);
1736d522f475Smrg}
1737d522f475Smrg
1738d522f475Smrgstatic void
1739956cc18dSsnjdo_tekcopy(Widget gw,
1740d522f475Smrg	   XtPointer closure GCC_UNUSED,
1741d522f475Smrg	   XtPointer data GCC_UNUSED)
1742d522f475Smrg{
1743956cc18dSsnj    TekCopy(getTekWidget(gw));
1744d522f475Smrg}
1745d522f475Smrg
1746d522f475Smrgstatic void
1747d522f475Smrghandle_vtshow(Widget gw GCC_UNUSED, Bool allowswitch)
1748d522f475Smrg{
174920d2c4d2Smrg    XtermWidget xw = term;
175020d2c4d2Smrg    TScreen *screen = TScreenOf(xw);
1751d522f475Smrg
1752d522f475Smrg    TRACE(("Show vt-window\n"));
1753d522f475Smrg    if (!screen->Vshow) {	/* not showing, turn on */
1754d522f475Smrg	set_vt_visibility(True);
175520d2c4d2Smrg    } else if (TEK4014_SHOWN(xw) || allowswitch) {	/* is showing, turn off */
1756d522f475Smrg	set_vt_visibility(False);
175720d2c4d2Smrg	if (!TEK4014_ACTIVE(xw) && tekRefreshList)
1758d522f475Smrg	    TekRefresh(tekWidget);
1759d522f475Smrg	end_vt_mode();		/* WARNING: this does a longjmp... */
1760d522f475Smrg    } else
176120d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
1762d522f475Smrg}
1763d522f475Smrg
1764d522f475Smrgstatic void
1765d522f475Smrgdo_vtshow(Widget gw,
1766d522f475Smrg	  XtPointer closure GCC_UNUSED,
1767d522f475Smrg	  XtPointer data GCC_UNUSED)
1768d522f475Smrg{
1769d522f475Smrg    handle_vtshow(gw, True);
1770d522f475Smrg}
1771d522f475Smrg
1772d522f475Smrgstatic void
1773d522f475Smrgdo_vtonoff(Widget gw,
1774d522f475Smrg	   XtPointer closure GCC_UNUSED,
1775d522f475Smrg	   XtPointer data GCC_UNUSED)
1776d522f475Smrg{
1777d522f475Smrg    handle_vtshow(gw, False);
1778d522f475Smrg}
1779d522f475Smrg
1780d522f475Smrgstatic void
1781d522f475Smrgdo_vtmode(Widget gw GCC_UNUSED,
1782d522f475Smrg	  XtPointer closure GCC_UNUSED,
1783d522f475Smrg	  XtPointer data GCC_UNUSED)
1784d522f475Smrg{
1785d522f475Smrg    switch_modes(TEK4014_ACTIVE(term));		/* switch to vt, or from */
1786d522f475Smrg}
1787d522f475Smrg
1788d522f475Smrg/* ARGSUSED */
1789d522f475Smrgstatic void
1790d522f475Smrgdo_tekhide(Widget gw GCC_UNUSED,
1791d522f475Smrg	   XtPointer closure GCC_UNUSED,
1792d522f475Smrg	   XtPointer data GCC_UNUSED)
1793d522f475Smrg{
1794d522f475Smrg    hide_tek_window();
1795d522f475Smrg}
1796d522f475Smrg#endif /* OPT_TEK4014 */
1797d522f475Smrg
1798d522f475Smrg/*
1799d522f475Smrg * public handler routines
1800d522f475Smrg */
1801d522f475Smrg
1802d522f475Smrgstatic void
1803d522f475Smrghandle_toggle(void (*proc) PROTO_XT_CALLBACK_ARGS,
1804d522f475Smrg	      int var,
1805d522f475Smrg	      String * params,
1806d522f475Smrg	      Cardinal nparams,
1807d522f475Smrg	      Widget w,
1808d522f475Smrg	      XtPointer closure,
1809d522f475Smrg	      XtPointer data)
1810d522f475Smrg{
181120d2c4d2Smrg    XtermWidget xw = term;
1812d522f475Smrg    int dir = -2;
1813d522f475Smrg
1814d522f475Smrg    switch (nparams) {
1815d522f475Smrg    case 0:
1816d522f475Smrg	dir = -1;
1817d522f475Smrg	break;
1818d522f475Smrg    case 1:
1819d522f475Smrg	if (XmuCompareISOLatin1(params[0], "on") == 0)
1820d522f475Smrg	    dir = 1;
1821d522f475Smrg	else if (XmuCompareISOLatin1(params[0], "off") == 0)
1822d522f475Smrg	    dir = 0;
1823d522f475Smrg	else if (XmuCompareISOLatin1(params[0], "toggle") == 0)
1824d522f475Smrg	    dir = -1;
1825d522f475Smrg	break;
1826d522f475Smrg    }
1827d522f475Smrg
1828d522f475Smrg    switch (dir) {
1829d522f475Smrg    case -2:
183020d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
1831d522f475Smrg	break;
1832d522f475Smrg
1833d522f475Smrg    case -1:
1834d522f475Smrg	(*proc) (w, closure, data);
1835d522f475Smrg	break;
1836d522f475Smrg
1837d522f475Smrg    case 0:
1838d522f475Smrg	if (var)
1839d522f475Smrg	    (*proc) (w, closure, data);
1840d522f475Smrg	else
184120d2c4d2Smrg	    Bell(xw, XkbBI_MinorError, 0);
1842d522f475Smrg	break;
1843d522f475Smrg
1844d522f475Smrg    case 1:
1845d522f475Smrg	if (!var)
1846d522f475Smrg	    (*proc) (w, closure, data);
1847d522f475Smrg	else
184820d2c4d2Smrg	    Bell(xw, XkbBI_MinorError, 0);
1849d522f475Smrg	break;
1850d522f475Smrg    }
1851d522f475Smrg    return;
1852d522f475Smrg}
1853d522f475Smrg
1854d522f475Smrg#define handle_vt_toggle(proc, var, params, nparams, w) \
1855d522f475Smrg	handle_toggle(proc, (int) (var), params, nparams, w, (XtPointer)0, (XtPointer)0)
1856d522f475Smrg
185720d2c4d2Smrg#define HANDLE_VT_TOGGLE(name) \
185820d2c4d2Smrg	handle_vt_toggle(do_##name, TScreenOf(term)->name, params, *param_count, w)
185920d2c4d2Smrg
1860d522f475Smrg#define handle_tek_toggle(proc, var, params, nparams, w) \
1861d522f475Smrg	handle_toggle(proc, (int) (var), params, nparams, w, (XtPointer)0, (XtPointer)0)
1862d522f475Smrg
1863d522f475Smrgvoid
1864d522f475SmrgHandleAllowSends(Widget w,
1865d522f475Smrg		 XEvent * event GCC_UNUSED,
1866d522f475Smrg		 String * params,
1867d522f475Smrg		 Cardinal *param_count)
1868d522f475Smrg{
186920d2c4d2Smrg    handle_vt_toggle(do_allowsends, TScreenOf(term)->allowSendEvents,
1870d522f475Smrg		     params, *param_count, w);
1871d522f475Smrg}
1872d522f475Smrg
1873d522f475Smrgvoid
1874d522f475SmrgHandleSetVisualBell(Widget w,
1875d522f475Smrg		    XEvent * event GCC_UNUSED,
1876d522f475Smrg		    String * params,
1877d522f475Smrg		    Cardinal *param_count)
1878d522f475Smrg{
187920d2c4d2Smrg    HANDLE_VT_TOGGLE(visualbell);
1880d522f475Smrg}
1881d522f475Smrg
1882d522f475Smrgvoid
1883d522f475SmrgHandleSetPopOnBell(Widget w,
1884d522f475Smrg		   XEvent * event GCC_UNUSED,
1885d522f475Smrg		   String * params,
1886d522f475Smrg		   Cardinal *param_count)
1887d522f475Smrg{
188820d2c4d2Smrg    HANDLE_VT_TOGGLE(poponbell);
1889d522f475Smrg}
1890d522f475Smrg
1891d522f475Smrg#ifdef ALLOWLOGGING
1892d522f475Smrgvoid
1893d522f475SmrgHandleLogging(Widget w,
1894d522f475Smrg	      XEvent * event GCC_UNUSED,
1895d522f475Smrg	      String * params,
1896d522f475Smrg	      Cardinal *param_count)
1897d522f475Smrg{
189820d2c4d2Smrg    HANDLE_VT_TOGGLE(logging);
1899d522f475Smrg}
1900d522f475Smrg#endif
1901d522f475Smrg
1902d522f475Smrg/* ARGSUSED */
1903d522f475Smrgvoid
190420d2c4d2SmrgHandlePrintScreen(Widget w GCC_UNUSED,
1905d522f475Smrg		  XEvent * event GCC_UNUSED,
1906d522f475Smrg		  String * params GCC_UNUSED,
1907d522f475Smrg		  Cardinal *param_count GCC_UNUSED)
1908d522f475Smrg{
190920d2c4d2Smrg    xtermPrintScreen(term, True, getPrinterFlags(term, params, param_count));
1910d522f475Smrg}
1911d522f475Smrg
1912956cc18dSsnj/* ARGSUSED */
1913956cc18dSsnjvoid
191420d2c4d2SmrgHandlePrintEverything(Widget w GCC_UNUSED,
1915956cc18dSsnj		      XEvent * event GCC_UNUSED,
191620d2c4d2Smrg		      String * params,
191720d2c4d2Smrg		      Cardinal *param_count)
1918956cc18dSsnj{
191920d2c4d2Smrg    xtermPrintEverything(term, getPrinterFlags(term, params, param_count));
1920956cc18dSsnj}
1921956cc18dSsnj
1922d522f475Smrg/* ARGSUSED */
1923d522f475Smrgvoid
1924d522f475SmrgHandlePrintControlMode(Widget w,
1925d522f475Smrg		       XEvent * event GCC_UNUSED,
1926d522f475Smrg		       String * params GCC_UNUSED,
1927d522f475Smrg		       Cardinal *param_count GCC_UNUSED)
1928d522f475Smrg{
1929d522f475Smrg    do_print_redir(w, (XtPointer) 0, (XtPointer) 0);
1930d522f475Smrg}
1931d522f475Smrg
1932d522f475Smrg/* ARGSUSED */
1933d522f475Smrgvoid
1934d522f475SmrgHandleRedraw(Widget w,
1935d522f475Smrg	     XEvent * event GCC_UNUSED,
1936d522f475Smrg	     String * params GCC_UNUSED,
1937d522f475Smrg	     Cardinal *param_count GCC_UNUSED)
1938d522f475Smrg{
1939d522f475Smrg    do_redraw(w, (XtPointer) 0, (XtPointer) 0);
1940d522f475Smrg}
1941d522f475Smrg
1942d522f475Smrg/* ARGSUSED */
1943d522f475Smrgvoid
1944d522f475SmrgHandleSendSignal(Widget w,
1945d522f475Smrg		 XEvent * event GCC_UNUSED,
1946d522f475Smrg		 String * params,
1947d522f475Smrg		 Cardinal *param_count)
1948d522f475Smrg{
1949d522f475Smrg    /* *INDENT-OFF* */
1950d522f475Smrg    static struct sigtab {
195120d2c4d2Smrg	const char *name;
1952d522f475Smrg	int sig;
1953d522f475Smrg    } signals[] = {
1954d522f475Smrg#ifdef SIGTSTP
1955d522f475Smrg	{ "suspend",	SIGTSTP },
1956d522f475Smrg	{ "tstp",	SIGTSTP },
1957d522f475Smrg#endif
1958d522f475Smrg#ifdef SIGCONT
1959d522f475Smrg	{ "cont",	SIGCONT },
1960d522f475Smrg#endif
1961d522f475Smrg	{ "int",	SIGINT },
1962d522f475Smrg	{ "hup",	SIGHUP },
1963d522f475Smrg	{ "quit",	SIGQUIT },
1964d522f475Smrg	{ "alrm",	SIGALRM },
1965d522f475Smrg	{ "alarm",	SIGALRM },
1966d522f475Smrg	{ "term",	SIGTERM },
1967d522f475Smrg	{ "kill",	SIGKILL },
1968d522f475Smrg	{ NULL, 0 },
1969d522f475Smrg    };
1970d522f475Smrg    /* *INDENT-ON* */
1971d522f475Smrg
1972d522f475Smrg    if (*param_count == 1) {
1973d522f475Smrg	struct sigtab *st;
1974d522f475Smrg
1975d522f475Smrg	for (st = signals; st->name; st++) {
1976d522f475Smrg	    if (XmuCompareISOLatin1(st->name, params[0]) == 0) {
1977d522f475Smrg		handle_send_signal(w, st->sig);
1978d522f475Smrg		return;
1979d522f475Smrg	    }
1980d522f475Smrg	}
1981d522f475Smrg	/* one could allow numeric values, but that would be a security hole */
1982d522f475Smrg    }
1983d522f475Smrg
198420d2c4d2Smrg    Bell(term, XkbBI_MinorError, 0);
1985d522f475Smrg}
1986d522f475Smrg
1987d522f475Smrg/* ARGSUSED */
1988d522f475Smrgvoid
1989d522f475SmrgHandleQuit(Widget w,
1990d522f475Smrg	   XEvent * event GCC_UNUSED,
1991d522f475Smrg	   String * params GCC_UNUSED,
1992d522f475Smrg	   Cardinal *param_count GCC_UNUSED)
1993d522f475Smrg{
1994d522f475Smrg    do_quit(w, (XtPointer) 0, (XtPointer) 0);
1995d522f475Smrg}
1996d522f475Smrg
1997d522f475Smrgvoid
1998d522f475SmrgHandle8BitControl(Widget w,
1999d522f475Smrg		  XEvent * event GCC_UNUSED,
2000d522f475Smrg		  String * params,
2001d522f475Smrg		  Cardinal *param_count)
2002d522f475Smrg{
200320d2c4d2Smrg    handle_vt_toggle(do_8bit_control, TScreenOf(term)->control_eight_bits,
2004d522f475Smrg		     params, *param_count, w);
2005d522f475Smrg}
2006d522f475Smrg
2007d522f475Smrgvoid
2008d522f475SmrgHandleBackarrow(Widget w,
2009d522f475Smrg		XEvent * event GCC_UNUSED,
2010d522f475Smrg		String * params,
2011d522f475Smrg		Cardinal *param_count)
2012d522f475Smrg{
2013d522f475Smrg    handle_vt_toggle(do_backarrow, term->keyboard.flags & MODE_DECBKM,
2014d522f475Smrg		     params, *param_count, w);
2015d522f475Smrg}
2016d522f475Smrg
2017d522f475Smrg#if OPT_SUN_FUNC_KEYS
2018d522f475Smrgvoid
2019d522f475SmrgHandleSunFunctionKeys(Widget w,
2020d522f475Smrg		      XEvent * event GCC_UNUSED,
2021d522f475Smrg		      String * params,
2022d522f475Smrg		      Cardinal *param_count)
2023d522f475Smrg{
2024d522f475Smrg    handle_vt_toggle(do_sun_fkeys, term->keyboard.type == keyboardIsSun,
2025d522f475Smrg		     params, *param_count, w);
2026d522f475Smrg}
2027d522f475Smrg#endif
2028d522f475Smrg
2029d522f475Smrg#if OPT_NUM_LOCK
2030d522f475Smrgvoid
2031d522f475SmrgHandleNumLock(Widget w,
2032d522f475Smrg	      XEvent * event GCC_UNUSED,
2033d522f475Smrg	      String * params,
2034d522f475Smrg	      Cardinal *param_count)
2035d522f475Smrg{
2036d522f475Smrg    handle_vt_toggle(do_num_lock, term->misc.real_NumLock,
2037d522f475Smrg		     params, *param_count, w);
2038d522f475Smrg}
2039d522f475Smrg
2040d522f475Smrgvoid
2041d522f475SmrgHandleAltEsc(Widget w,
2042d522f475Smrg	     XEvent * event GCC_UNUSED,
2043d522f475Smrg	     String * params,
2044d522f475Smrg	     Cardinal *param_count)
2045d522f475Smrg{
204620d2c4d2Smrg    handle_vt_toggle(do_alt_esc, !TScreenOf(term)->input_eight_bits,
2047d522f475Smrg		     params, *param_count, w);
2048d522f475Smrg}
2049d522f475Smrg
2050d522f475Smrgvoid
2051d522f475SmrgHandleMetaEsc(Widget w,
2052d522f475Smrg	      XEvent * event GCC_UNUSED,
2053d522f475Smrg	      String * params,
2054d522f475Smrg	      Cardinal *param_count)
2055d522f475Smrg{
205620d2c4d2Smrg    handle_vt_toggle(do_meta_esc, TScreenOf(term)->meta_sends_esc,
2057d522f475Smrg		     params, *param_count, w);
2058d522f475Smrg}
2059d522f475Smrg#endif
2060d522f475Smrg
2061d522f475Smrgvoid
2062d522f475SmrgHandleDeleteIsDEL(Widget w,
2063d522f475Smrg		  XEvent * event GCC_UNUSED,
2064d522f475Smrg		  String * params,
2065d522f475Smrg		  Cardinal *param_count)
2066d522f475Smrg{
206720d2c4d2Smrg    handle_vt_toggle(do_delete_del, TScreenOf(term)->delete_is_del,
2068d522f475Smrg		     params, *param_count, w);
2069d522f475Smrg}
2070d522f475Smrg
2071d522f475Smrgvoid
2072d522f475SmrgHandleOldFunctionKeys(Widget w,
2073d522f475Smrg		      XEvent * event GCC_UNUSED,
2074d522f475Smrg		      String * params,
2075d522f475Smrg		      Cardinal *param_count)
2076d522f475Smrg{
2077d522f475Smrg    handle_vt_toggle(do_old_fkeys, term->keyboard.type == keyboardIsLegacy,
2078d522f475Smrg		     params, *param_count, w);
2079d522f475Smrg}
2080d522f475Smrg
2081d522f475Smrg#if OPT_SUNPC_KBD
2082d522f475Smrgvoid
2083d522f475SmrgHandleSunKeyboard(Widget w,
2084d522f475Smrg		  XEvent * event GCC_UNUSED,
2085d522f475Smrg		  String * params,
2086d522f475Smrg		  Cardinal *param_count)
2087d522f475Smrg{
2088d522f475Smrg    handle_vt_toggle(do_sun_kbd, term->keyboard.type == keyboardIsVT220,
2089d522f475Smrg		     params, *param_count, w);
2090d522f475Smrg}
2091d522f475Smrg#endif
2092d522f475Smrg
2093d522f475Smrg#if OPT_HP_FUNC_KEYS
2094d522f475Smrgvoid
2095d522f475SmrgHandleHpFunctionKeys(Widget w,
2096d522f475Smrg		     XEvent * event GCC_UNUSED,
2097d522f475Smrg		     String * params,
2098d522f475Smrg		     Cardinal *param_count)
2099d522f475Smrg{
2100d522f475Smrg    handle_vt_toggle(do_hp_fkeys, term->keyboard.type == keyboardIsHP,
2101d522f475Smrg		     params, *param_count, w);
2102d522f475Smrg}
2103d522f475Smrg#endif
2104d522f475Smrg
2105d522f475Smrg#if OPT_SCO_FUNC_KEYS
2106d522f475Smrgvoid
2107d522f475SmrgHandleScoFunctionKeys(Widget w,
2108d522f475Smrg		      XEvent * event GCC_UNUSED,
2109d522f475Smrg		      String * params,
2110d522f475Smrg		      Cardinal *param_count)
2111d522f475Smrg{
2112d522f475Smrg    handle_vt_toggle(do_sco_fkeys, term->keyboard.type == keyboardIsSCO,
2113d522f475Smrg		     params, *param_count, w);
2114d522f475Smrg}
2115d522f475Smrg#endif
2116d522f475Smrg
2117d522f475Smrgvoid
2118d522f475SmrgHandleScrollbar(Widget w,
2119d522f475Smrg		XEvent * event GCC_UNUSED,
2120d522f475Smrg		String * params,
2121d522f475Smrg		Cardinal *param_count)
2122d522f475Smrg{
212320d2c4d2Smrg    XtermWidget xw = term;
212420d2c4d2Smrg
212520d2c4d2Smrg    if (IsIcon(TScreenOf(xw))) {
212620d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
2127d522f475Smrg    } else {
212820d2c4d2Smrg	handle_vt_toggle(do_scrollbar, TScreenOf(xw)->fullVwin.sb_info.width,
2129d522f475Smrg			 params, *param_count, w);
2130d522f475Smrg    }
2131d522f475Smrg}
2132d522f475Smrg
2133d522f475Smrgvoid
2134d522f475SmrgHandleJumpscroll(Widget w,
2135d522f475Smrg		 XEvent * event GCC_UNUSED,
2136d522f475Smrg		 String * params,
2137d522f475Smrg		 Cardinal *param_count)
2138d522f475Smrg{
213920d2c4d2Smrg    HANDLE_VT_TOGGLE(jumpscroll);
2140d522f475Smrg}
2141d522f475Smrg
2142d522f475Smrgvoid
2143d522f475SmrgHandleKeepSelection(Widget w,
2144d522f475Smrg		    XEvent * event GCC_UNUSED,
2145d522f475Smrg		    String * params,
2146d522f475Smrg		    Cardinal *param_count)
2147d522f475Smrg{
214820d2c4d2Smrg    HANDLE_VT_TOGGLE(keepSelection);
2149d522f475Smrg}
2150d522f475Smrg
2151d522f475Smrgvoid
2152d522f475SmrgHandleSetSelect(Widget w,
2153d522f475Smrg		XEvent * event GCC_UNUSED,
2154d522f475Smrg		String * params,
2155d522f475Smrg		Cardinal *param_count)
2156d522f475Smrg{
215720d2c4d2Smrg    handle_vt_toggle(do_selectClipboard, TScreenOf(term)->selectToClipboard,
2158d522f475Smrg		     params, *param_count, w);
2159d522f475Smrg}
2160d522f475Smrg
2161d522f475Smrgvoid
2162d522f475SmrgHandleReverseVideo(Widget w,
2163d522f475Smrg		   XEvent * event GCC_UNUSED,
2164d522f475Smrg		   String * params,
2165d522f475Smrg		   Cardinal *param_count)
2166d522f475Smrg{
2167d522f475Smrg    handle_vt_toggle(do_reversevideo, (term->misc.re_verse0),
2168d522f475Smrg		     params, *param_count, w);
2169d522f475Smrg}
2170d522f475Smrg
2171d522f475Smrgvoid
2172d522f475SmrgHandleAutoWrap(Widget w,
2173d522f475Smrg	       XEvent * event GCC_UNUSED,
2174d522f475Smrg	       String * params,
2175d522f475Smrg	       Cardinal *param_count)
2176d522f475Smrg{
2177d522f475Smrg    handle_vt_toggle(do_autowrap, (term->flags & WRAPAROUND),
2178d522f475Smrg		     params, *param_count, w);
2179d522f475Smrg}
2180d522f475Smrg
2181d522f475Smrgvoid
2182d522f475SmrgHandleReverseWrap(Widget w,
2183d522f475Smrg		  XEvent * event GCC_UNUSED,
2184d522f475Smrg		  String * params,
2185d522f475Smrg		  Cardinal *param_count)
2186d522f475Smrg{
2187d522f475Smrg    handle_vt_toggle(do_reversewrap, (term->flags & REVERSEWRAP),
2188d522f475Smrg		     params, *param_count, w);
2189d522f475Smrg}
2190d522f475Smrg
2191d522f475Smrgvoid
2192d522f475SmrgHandleAutoLineFeed(Widget w,
2193d522f475Smrg		   XEvent * event GCC_UNUSED,
2194d522f475Smrg		   String * params,
2195d522f475Smrg		   Cardinal *param_count)
2196d522f475Smrg{
2197d522f475Smrg    handle_vt_toggle(do_autolinefeed, (term->flags & LINEFEED),
2198d522f475Smrg		     params, *param_count, w);
2199d522f475Smrg}
2200d522f475Smrg
2201d522f475Smrgvoid
2202d522f475SmrgHandleAppCursor(Widget w,
2203d522f475Smrg		XEvent * event GCC_UNUSED,
2204d522f475Smrg		String * params,
2205d522f475Smrg		Cardinal *param_count)
2206d522f475Smrg{
2207d522f475Smrg    handle_vt_toggle(do_appcursor, (term->keyboard.flags & MODE_DECCKM),
2208d522f475Smrg		     params, *param_count, w);
2209d522f475Smrg}
2210d522f475Smrg
2211d522f475Smrgvoid
2212d522f475SmrgHandleAppKeypad(Widget w,
2213d522f475Smrg		XEvent * event GCC_UNUSED,
2214d522f475Smrg		String * params,
2215d522f475Smrg		Cardinal *param_count)
2216d522f475Smrg{
2217d522f475Smrg    handle_vt_toggle(do_appkeypad, (term->keyboard.flags & MODE_DECKPAM),
2218d522f475Smrg		     params, *param_count, w);
2219d522f475Smrg}
2220d522f475Smrg
2221d522f475Smrgvoid
2222d522f475SmrgHandleScrollKey(Widget w,
2223d522f475Smrg		XEvent * event GCC_UNUSED,
2224d522f475Smrg		String * params,
2225d522f475Smrg		Cardinal *param_count)
2226d522f475Smrg{
222720d2c4d2Smrg    HANDLE_VT_TOGGLE(scrollkey);
2228d522f475Smrg}
2229d522f475Smrg
2230d522f475Smrgvoid
2231d522f475SmrgHandleScrollTtyOutput(Widget w,
2232d522f475Smrg		      XEvent * event GCC_UNUSED,
2233d522f475Smrg		      String * params,
2234d522f475Smrg		      Cardinal *param_count)
2235d522f475Smrg{
223620d2c4d2Smrg    HANDLE_VT_TOGGLE(scrollttyoutput);
2237d522f475Smrg}
2238d522f475Smrg
2239d522f475Smrgvoid
2240d522f475SmrgHandleAllow132(Widget w,
2241d522f475Smrg	       XEvent * event GCC_UNUSED,
2242d522f475Smrg	       String * params,
2243d522f475Smrg	       Cardinal *param_count)
2244d522f475Smrg{
224520d2c4d2Smrg    handle_vt_toggle(do_allow132, TScreenOf(term)->c132,
2246d522f475Smrg		     params, *param_count, w);
2247d522f475Smrg}
2248d522f475Smrg
2249d522f475Smrgvoid
2250d522f475SmrgHandleCursesEmul(Widget w,
2251d522f475Smrg		 XEvent * event GCC_UNUSED,
2252d522f475Smrg		 String * params,
2253d522f475Smrg		 Cardinal *param_count)
2254d522f475Smrg{
225520d2c4d2Smrg    handle_vt_toggle(do_cursesemul, TScreenOf(term)->curses,
2256d522f475Smrg		     params, *param_count, w);
2257d522f475Smrg}
2258d522f475Smrg
2259d522f475Smrgvoid
2260d522f475SmrgHandleBellIsUrgent(Widget w,
2261d522f475Smrg		   XEvent * event GCC_UNUSED,
2262d522f475Smrg		   String * params,
2263d522f475Smrg		   Cardinal *param_count)
2264d522f475Smrg{
226520d2c4d2Smrg    HANDLE_VT_TOGGLE(bellIsUrgent);
2266d522f475Smrg}
2267d522f475Smrg
2268d522f475Smrgvoid
2269d522f475SmrgHandleMarginBell(Widget w,
2270d522f475Smrg		 XEvent * event GCC_UNUSED,
2271d522f475Smrg		 String * params,
2272d522f475Smrg		 Cardinal *param_count)
2273d522f475Smrg{
227420d2c4d2Smrg    HANDLE_VT_TOGGLE(marginbell);
2275d522f475Smrg}
2276d522f475Smrg
2277d522f475Smrg#if OPT_BLINK_CURS
2278d522f475Smrgvoid
2279d522f475SmrgHandleCursorBlink(Widget w,
2280d522f475Smrg		  XEvent * event GCC_UNUSED,
2281d522f475Smrg		  String * params,
2282d522f475Smrg		  Cardinal *param_count)
2283d522f475Smrg{
2284d522f475Smrg    /* eventually want to see if sensitive or not */
228520d2c4d2Smrg    handle_vt_toggle(do_cursorblink, TScreenOf(term)->cursor_blink,
2286d522f475Smrg		     params, *param_count, w);
2287d522f475Smrg}
2288d522f475Smrg#endif
2289d522f475Smrg
2290d522f475Smrgvoid
2291d522f475SmrgHandleAltScreen(Widget w,
2292d522f475Smrg		XEvent * event GCC_UNUSED,
2293d522f475Smrg		String * params,
2294d522f475Smrg		Cardinal *param_count)
2295d522f475Smrg{
2296d522f475Smrg    /* eventually want to see if sensitive or not */
229720d2c4d2Smrg    handle_vt_toggle(do_altscreen, TScreenOf(term)->whichBuf,
2298d522f475Smrg		     params, *param_count, w);
2299d522f475Smrg}
2300d522f475Smrg
2301d522f475Smrgvoid
2302d522f475SmrgHandleTiteInhibit(Widget w,
2303d522f475Smrg		  XEvent * event GCC_UNUSED,
2304d522f475Smrg		  String * params,
2305d522f475Smrg		  Cardinal *param_count)
2306d522f475Smrg{
2307d522f475Smrg    /* eventually want to see if sensitive or not */
2308d522f475Smrg    handle_vt_toggle(do_titeInhibit, !(term->misc.titeInhibit),
2309d522f475Smrg		     params, *param_count, w);
2310d522f475Smrg}
2311d522f475Smrg
2312d522f475Smrg/* ARGSUSED */
2313d522f475Smrgvoid
2314d522f475SmrgHandleSoftReset(Widget w,
2315d522f475Smrg		XEvent * event GCC_UNUSED,
2316d522f475Smrg		String * params GCC_UNUSED,
2317d522f475Smrg		Cardinal *param_count GCC_UNUSED)
2318d522f475Smrg{
2319d522f475Smrg    do_softreset(w, (XtPointer) 0, (XtPointer) 0);
2320d522f475Smrg}
2321d522f475Smrg
2322d522f475Smrg/* ARGSUSED */
2323d522f475Smrgvoid
2324d522f475SmrgHandleHardReset(Widget w,
2325d522f475Smrg		XEvent * event GCC_UNUSED,
2326d522f475Smrg		String * params GCC_UNUSED,
2327d522f475Smrg		Cardinal *param_count GCC_UNUSED)
2328d522f475Smrg{
2329d522f475Smrg    do_hardreset(w, (XtPointer) 0, (XtPointer) 0);
2330d522f475Smrg}
2331d522f475Smrg
2332d522f475Smrg/* ARGSUSED */
2333d522f475Smrgvoid
2334d522f475SmrgHandleClearSavedLines(Widget w,
2335d522f475Smrg		      XEvent * event GCC_UNUSED,
2336d522f475Smrg		      String * params GCC_UNUSED,
2337d522f475Smrg		      Cardinal *param_count GCC_UNUSED)
2338d522f475Smrg{
2339d522f475Smrg    do_clearsavedlines(w, (XtPointer) 0, (XtPointer) 0);
2340d522f475Smrg}
2341d522f475Smrg
2342d522f475Smrg#if OPT_DEC_CHRSET
2343d522f475Smrgvoid
2344d522f475SmrgHandleFontDoublesize(Widget w,
2345d522f475Smrg		     XEvent * event GCC_UNUSED,
2346d522f475Smrg		     String * params,
2347d522f475Smrg		     Cardinal *param_count)
2348d522f475Smrg{
234920d2c4d2Smrg    HANDLE_VT_TOGGLE(font_doublesize);
2350d522f475Smrg}
2351d522f475Smrg#endif
2352d522f475Smrg
2353d522f475Smrg#if OPT_BOX_CHARS
2354d522f475Smrgvoid
2355d522f475SmrgHandleFontBoxChars(Widget w,
2356d522f475Smrg		   XEvent * event GCC_UNUSED,
2357d522f475Smrg		   String * params,
2358d522f475Smrg		   Cardinal *param_count)
2359d522f475Smrg{
236020d2c4d2Smrg    handle_vt_toggle(do_font_boxchars, TScreenOf(term)->force_box_chars,
236120d2c4d2Smrg		     params, *param_count, w);
236220d2c4d2Smrg}
236320d2c4d2Smrg
236420d2c4d2Smrgvoid
236520d2c4d2SmrgHandleFontPacked(Widget w,
236620d2c4d2Smrg		 XEvent * event GCC_UNUSED,
236720d2c4d2Smrg		 String * params,
236820d2c4d2Smrg		 Cardinal *param_count)
236920d2c4d2Smrg{
237020d2c4d2Smrg    handle_vt_toggle(do_font_packed, TScreenOf(term)->force_packed,
2371d522f475Smrg		     params, *param_count, w);
2372d522f475Smrg}
2373d522f475Smrg#endif
2374d522f475Smrg
2375d522f475Smrg#if OPT_DEC_SOFTFONT
2376d522f475Smrgvoid
2377d522f475SmrgHandleFontLoading(Widget w,
2378d522f475Smrg		  XEvent * event GCC_UNUSED,
2379d522f475Smrg		  String * params,
2380d522f475Smrg		  Cardinal *param_count)
2381d522f475Smrg{
2382d522f475Smrg    handle_vt_toggle(do_font_loadable, term->misc.font_loadable,
2383d522f475Smrg		     params, *param_count, w);
2384d522f475Smrg}
2385d522f475Smrg#endif
2386d522f475Smrg
2387d522f475Smrg#if OPT_RENDERFONT
2388d522f475Smrgvoid
2389d522f475SmrgHandleRenderFont(Widget w,
2390d522f475Smrg		 XEvent * event GCC_UNUSED,
2391d522f475Smrg		 String * params,
2392d522f475Smrg		 Cardinal *param_count)
2393d522f475Smrg{
239420d2c4d2Smrg    XtermWidget xw = (XtermWidget) term;
239520d2c4d2Smrg
239620d2c4d2Smrg    DefaultRenderFont(xw);
239720d2c4d2Smrg
239820d2c4d2Smrg    handle_vt_toggle(do_font_renderfont, xw->misc.render_font,
2399d522f475Smrg		     params, *param_count, w);
2400d522f475Smrg}
2401d522f475Smrg#endif
2402d522f475Smrg
2403d522f475Smrg#if OPT_WIDE_CHARS
2404d522f475Smrgvoid
2405d522f475SmrgHandleUTF8Mode(Widget w,
2406d522f475Smrg	       XEvent * event GCC_UNUSED,
2407d522f475Smrg	       String * params,
2408d522f475Smrg	       Cardinal *param_count)
2409d522f475Smrg{
241020d2c4d2Smrg    handle_vt_toggle(do_font_utf8_mode, TScreenOf(term)->utf8_mode,
2411d522f475Smrg		     params, *param_count, w);
2412d522f475Smrg}
2413d522f475Smrg
2414d522f475Smrgvoid
2415d522f475SmrgHandleUTF8Title(Widget w,
2416d522f475Smrg		XEvent * event GCC_UNUSED,
2417d522f475Smrg		String * params,
2418d522f475Smrg		Cardinal *param_count)
2419d522f475Smrg{
242020d2c4d2Smrg    handle_vt_toggle(do_font_utf8_title, TScreenOf(term)->utf8_title,
2421d522f475Smrg		     params, *param_count, w);
2422d522f475Smrg}
2423d522f475Smrg#endif
2424d522f475Smrg
2425d522f475Smrg#if OPT_TEK4014
2426d522f475Smrgvoid
2427d522f475SmrgHandleSetTerminalType(Widget w,
2428d522f475Smrg		      XEvent * event GCC_UNUSED,
2429d522f475Smrg		      String * params,
2430d522f475Smrg		      Cardinal *param_count)
2431d522f475Smrg{
243220d2c4d2Smrg    XtermWidget xw = term;
243320d2c4d2Smrg
2434d522f475Smrg    if (*param_count == 1) {
2435d522f475Smrg	switch (params[0][0]) {
2436d522f475Smrg	case 'v':
2437d522f475Smrg	case 'V':
243820d2c4d2Smrg	    if (TEK4014_ACTIVE(xw))
2439d522f475Smrg		do_vtmode(w, (XtPointer) 0, (XtPointer) 0);
2440d522f475Smrg	    break;
2441d522f475Smrg	case 't':
2442d522f475Smrg	case 'T':
244320d2c4d2Smrg	    if (!TEK4014_ACTIVE(xw))
2444d522f475Smrg		do_tekmode(w, (XtPointer) 0, (XtPointer) 0);
2445d522f475Smrg	    break;
2446d522f475Smrg	default:
244720d2c4d2Smrg	    Bell(xw, XkbBI_MinorError, 0);
2448d522f475Smrg	}
2449d522f475Smrg    } else {
245020d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
2451d522f475Smrg    }
2452d522f475Smrg}
2453d522f475Smrg
2454d522f475Smrgvoid
2455d522f475SmrgHandleVisibility(Widget w,
2456d522f475Smrg		 XEvent * event GCC_UNUSED,
2457d522f475Smrg		 String * params,
2458d522f475Smrg		 Cardinal *param_count)
2459d522f475Smrg{
246020d2c4d2Smrg    XtermWidget xw = term;
246120d2c4d2Smrg
2462d522f475Smrg    if (*param_count == 2) {
2463d522f475Smrg	switch (params[0][0]) {
2464d522f475Smrg	case 'v':
2465d522f475Smrg	case 'V':
246620d2c4d2Smrg	    handle_tek_toggle(do_vtonoff, (int) TScreenOf(xw)->Vshow,
2467d522f475Smrg			      params + 1, (*param_count) - 1, w);
2468d522f475Smrg	    break;
2469d522f475Smrg	case 't':
2470d522f475Smrg	case 'T':
247120d2c4d2Smrg	    handle_tek_toggle(do_tekonoff, (int) TEK4014_SHOWN(xw),
2472d522f475Smrg			      params + 1, (*param_count) - 1, w);
2473d522f475Smrg	    break;
2474d522f475Smrg	default:
247520d2c4d2Smrg	    Bell(xw, XkbBI_MinorError, 0);
2476d522f475Smrg	}
2477d522f475Smrg    } else {
247820d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
2479d522f475Smrg    }
2480d522f475Smrg}
2481d522f475Smrg
2482d522f475Smrg/* ARGSUSED */
2483d522f475Smrgvoid
2484d522f475SmrgHandleSetTekText(Widget w,
2485d522f475Smrg		 XEvent * event GCC_UNUSED,
2486d522f475Smrg		 String * params,
2487d522f475Smrg		 Cardinal *param_count)
2488d522f475Smrg{
248920d2c4d2Smrg    XtermWidget xw = term;
2490d522f475Smrg    void (*proc) PROTO_XT_CALLBACK_ARGS = 0;
2491d522f475Smrg
2492d522f475Smrg    switch (*param_count) {
2493d522f475Smrg    case 0:
2494d522f475Smrg	proc = do_tektextlarge;
2495d522f475Smrg	break;
2496d522f475Smrg    case 1:
2497d522f475Smrg	switch (TekGetFontSize(params[0])) {
2498d522f475Smrg	case TEK_FONT_LARGE:
2499d522f475Smrg	    proc = do_tektextlarge;
2500d522f475Smrg	    break;
2501d522f475Smrg	case TEK_FONT_2:
2502d522f475Smrg	    proc = do_tektext2;
2503d522f475Smrg	    break;
2504d522f475Smrg	case TEK_FONT_3:
2505d522f475Smrg	    proc = do_tektext3;
2506d522f475Smrg	    break;
2507d522f475Smrg	case TEK_FONT_SMALL:
2508d522f475Smrg	    proc = do_tektextsmall;
2509d522f475Smrg	    break;
2510d522f475Smrg	}
2511d522f475Smrg	break;
2512d522f475Smrg    }
2513d522f475Smrg    if (proc)
2514d522f475Smrg	(*proc) (w, (XtPointer) 0, (XtPointer) 0);
2515d522f475Smrg    else
251620d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
2517d522f475Smrg}
2518d522f475Smrg
2519d522f475Smrg/* ARGSUSED */
2520d522f475Smrgvoid
2521d522f475SmrgHandleTekPage(Widget w,
2522d522f475Smrg	      XEvent * event GCC_UNUSED,
2523d522f475Smrg	      String * params GCC_UNUSED,
2524d522f475Smrg	      Cardinal *param_count GCC_UNUSED)
2525d522f475Smrg{
2526d522f475Smrg    do_tekpage(w, (XtPointer) 0, (XtPointer) 0);
2527d522f475Smrg}
2528d522f475Smrg
2529d522f475Smrg/* ARGSUSED */
2530d522f475Smrgvoid
2531d522f475SmrgHandleTekReset(Widget w,
2532d522f475Smrg	       XEvent * event GCC_UNUSED,
2533d522f475Smrg	       String * params GCC_UNUSED,
2534d522f475Smrg	       Cardinal *param_count GCC_UNUSED)
2535d522f475Smrg{
2536d522f475Smrg    do_tekreset(w, (XtPointer) 0, (XtPointer) 0);
2537d522f475Smrg}
2538d522f475Smrg
2539d522f475Smrg/* ARGSUSED */
2540d522f475Smrgvoid
2541d522f475SmrgHandleTekCopy(Widget w,
2542d522f475Smrg	      XEvent * event GCC_UNUSED,
2543d522f475Smrg	      String * params GCC_UNUSED,
2544d522f475Smrg	      Cardinal *param_count GCC_UNUSED)
2545d522f475Smrg{
2546d522f475Smrg    do_tekcopy(w, (XtPointer) 0, (XtPointer) 0);
2547d522f475Smrg}
2548d522f475Smrg#endif /* OPT_TEK4014 */
2549d522f475Smrg
2550d522f475Smrg#if OPT_TOOLBAR
2551d522f475Smrg/*
2552d522f475Smrg * The normal style of xterm popup menu delays initialization until the menu is
2553d522f475Smrg * first requested.  When using a toolbar, we can use the same initialization,
2554d522f475Smrg * though on the first popup there will be a little geometry layout jitter,
2555d522f475Smrg * since the menu is already managed when this callback is invoked.
2556d522f475Smrg */
2557d522f475Smrgstatic void
2558d522f475SmrgInitPopup(Widget gw,
2559d522f475Smrg	  XtPointer closure,
2560d522f475Smrg	  XtPointer data GCC_UNUSED)
2561d522f475Smrg{
2562d522f475Smrg    String params[2];
2563d522f475Smrg    Cardinal count = 1;
2564d522f475Smrg
2565d522f475Smrg    params[0] = (char *) closure;
2566d522f475Smrg    params[1] = 0;
2567d522f475Smrg    TRACE(("InitPopup(%s)\n", params[0]));
2568d522f475Smrg
2569d522f475Smrg    domenu(gw, (XEvent *) 0, params, &count);
2570d522f475Smrg
2571d522f475Smrg    if (gw)
2572d522f475Smrg	XtRemoveCallback(gw, XtNpopupCallback, InitPopup, closure);
2573d522f475Smrg}
2574d522f475Smrg
2575d522f475Smrgstatic Dimension
2576d522f475SmrgSetupShell(Widget *menus, MenuList * shell, int n, int m)
2577d522f475Smrg{
2578d522f475Smrg    char temp[80];
2579d522f475Smrg    char *external_name = 0;
2580d522f475Smrg    Dimension button_height;
2581d522f475Smrg    Dimension button_border;
2582d522f475Smrg    String saveLocale = setMenuLocale(True, resource.menuLocale);
2583d522f475Smrg
2584d522f475Smrg    shell[n].w = XtVaCreatePopupShell(menu_names[n].internal_name,
2585d522f475Smrg				      simpleMenuWidgetClass,
2586d522f475Smrg				      *menus,
2587d522f475Smrg				      XtNgeometry, NULL,
2588d522f475Smrg				      (XtPointer) 0);
2589d522f475Smrg
2590d522f475Smrg    XtAddCallback(shell[n].w, XtNpopupCallback, InitPopup, menu_names[n].internal_name);
2591d522f475Smrg    XtVaGetValues(shell[n].w,
2592d522f475Smrg		  XtNlabel, &external_name,
2593d522f475Smrg		  (XtPointer) 0);
2594d522f475Smrg
2595d522f475Smrg    TRACE(("...SetupShell(%s) -> %s -> %#lx\n",
2596d522f475Smrg	   menu_names[n].internal_name,
2597d522f475Smrg	   external_name,
2598d522f475Smrg	   (long) shell[n].w));
2599d522f475Smrg
2600d522f475Smrg    sprintf(temp, "%sButton", menu_names[n].internal_name);
2601d522f475Smrg    shell[n].b = XtVaCreateManagedWidget(temp,
2602d522f475Smrg					 menuButtonWidgetClass,
2603d522f475Smrg					 *menus,
2604d522f475Smrg					 XtNfromHoriz, ((m >= 0)
2605d522f475Smrg							? shell[m].b
2606d522f475Smrg							: 0),
2607d522f475Smrg					 XtNmenuName, menu_names[n].internal_name,
2608d522f475Smrg					 XtNlabel, external_name,
2609d522f475Smrg					 (XtPointer) 0);
2610d522f475Smrg    XtVaGetValues(shell[n].b,
2611d522f475Smrg		  XtNheight, &button_height,
2612d522f475Smrg		  XtNborderWidth, &button_border,
2613d522f475Smrg		  (XtPointer) 0);
2614d522f475Smrg
2615956cc18dSsnj    (void) setMenuLocale(False, saveLocale);
2616956cc18dSsnj    return (Dimension) (button_height + (button_border * 2));
2617d522f475Smrg}
2618d522f475Smrg#endif /* OPT_TOOLBAR */
2619d522f475Smrg
2620d522f475Smrgvoid
2621d522f475SmrgSetupMenus(Widget shell, Widget *forms, Widget *menus, Dimension * menu_high)
2622d522f475Smrg{
2623d522f475Smrg#if OPT_TOOLBAR
2624d522f475Smrg    Dimension button_height = 0;
2625d522f475Smrg    Dimension toolbar_hSpace;
2626d522f475Smrg    Arg args[10];
2627d522f475Smrg#endif
2628d522f475Smrg
2629d522f475Smrg    TRACE(("SetupMenus(%s)\n", shell == toplevel ? "vt100" : "tek4014"));
2630d522f475Smrg
2631d522f475Smrg    *menu_high = 0;
2632d522f475Smrg
2633d522f475Smrg    if (shell == toplevel) {
2634d522f475Smrg	XawSimpleMenuAddGlobalActions(app_con);
2635d522f475Smrg	XtRegisterGrabAction(HandlePopupMenu, True,
2636d522f475Smrg			     (ButtonPressMask | ButtonReleaseMask),
2637d522f475Smrg			     GrabModeAsync, GrabModeAsync);
2638d522f475Smrg    }
2639d522f475Smrg#if OPT_TOOLBAR
2640d522f475Smrg    *forms = XtVaCreateManagedWidget("form",
2641d522f475Smrg				     formWidgetClass, shell,
2642d522f475Smrg				     (XtPointer) 0);
2643d522f475Smrg    xtermAddInput(*forms);
2644d522f475Smrg
2645d522f475Smrg    /*
2646d522f475Smrg     * Set a nominal value for the preferred pane size, which lets the
2647d522f475Smrg     * buttons determine the actual height of the menu bar.  We don't show
2648d522f475Smrg     * the grip, because it's too easy to make the toolbar look bad that
2649d522f475Smrg     * way.
2650d522f475Smrg     */
2651d522f475Smrg    XtSetArg(args[0], XtNorientation, XtorientHorizontal);
2652d522f475Smrg    XtSetArg(args[1], XtNtop, XawChainTop);
2653d522f475Smrg    XtSetArg(args[2], XtNbottom, XawChainTop);
2654d522f475Smrg    XtSetArg(args[3], XtNleft, XawChainLeft);
2655d522f475Smrg    XtSetArg(args[4], XtNright, XawChainLeft);
2656d522f475Smrg
2657d522f475Smrg    if (resource.toolBar) {
2658d522f475Smrg	*menus = XtCreateManagedWidget("menubar", boxWidgetClass, *forms,
2659d522f475Smrg				       args, 5);
2660d522f475Smrg    } else {
2661d522f475Smrg	*menus = XtCreateWidget("menubar", boxWidgetClass, *forms, args, 5);
2662d522f475Smrg    }
2663d522f475Smrg
2664d522f475Smrg    /*
2665d522f475Smrg     * The toolbar widget's height is not necessarily known yet.  If the
2666d522f475Smrg     * toolbar is not created as a managed widget, we can still make a good
2667d522f475Smrg     * guess about its height by collecting the widget's other resource values.
2668d522f475Smrg     */
2669d522f475Smrg    XtVaGetValues(*menus,
2670d522f475Smrg		  XtNhSpace, &toolbar_hSpace,
2671d522f475Smrg		  (XtPointer) 0);
2672d522f475Smrg
2673d522f475Smrg    if (shell == toplevel) {	/* vt100 */
2674d522f475Smrg	int j;
2675d522f475Smrg	for (j = mainMenu; j <= fontMenu; j++) {
2676d522f475Smrg	    button_height = SetupShell(menus, vt_shell, j, j - 1);
2677d522f475Smrg	}
2678d522f475Smrg    }
2679d522f475Smrg#if OPT_TEK4014
2680d522f475Smrg    else {			/* tek4014 */
268120d2c4d2Smrg	(void) SetupShell(menus, tek_shell, mainMenu, -1);
2682d522f475Smrg	button_height = SetupShell(menus, tek_shell, tekMenu, mainMenu);
2683d522f475Smrg    }
2684d522f475Smrg#endif
2685d522f475Smrg
2686d522f475Smrg    /*
2687d522f475Smrg     * Tell the main program how high the toolbar is, to help with the initial
2688d522f475Smrg     * layout.
2689d522f475Smrg     */
2690956cc18dSsnj    *menu_high = (Dimension) (button_height + 2 * (toolbar_hSpace));
26912eaa94a1Schristos    TRACE(("...menuHeight:%d = (%d + 2 * %d)\n",
26922eaa94a1Schristos	   *menu_high, button_height, toolbar_hSpace));
2693d522f475Smrg
2694d522f475Smrg#else /* !OPT_TOOLBAR */
2695d522f475Smrg    *forms = shell;
2696d522f475Smrg    *menus = shell;
2697d522f475Smrg#endif
2698d522f475Smrg
2699d522f475Smrg    TRACE(("...shell=%#lx\n", (long) shell));
2700d522f475Smrg    TRACE(("...forms=%#lx\n", (long) *forms));
2701d522f475Smrg    TRACE(("...menus=%#lx\n", (long) *menus));
2702d522f475Smrg}
2703d522f475Smrg
2704d522f475Smrgvoid
2705d522f475SmrgrepairSizeHints(void)
2706d522f475Smrg{
2707a1f3da82Smrg    XtermWidget xw = term;
2708a1f3da82Smrg    TScreen *screen = TScreenOf(xw);
2709d522f475Smrg
2710a1f3da82Smrg    if (XtIsRealized((Widget) xw)) {
2711a1f3da82Smrg	getXtermSizeHints(xw);
2712a1f3da82Smrg	xtermSizeHints(xw, ScrollbarWidth(screen));
2713d522f475Smrg
2714a1f3da82Smrg	XSetWMNormalHints(screen->display, VShellWindow(xw), &xw->hints);
2715d522f475Smrg    }
2716d522f475Smrg}
2717d522f475Smrg
2718d522f475Smrg#if OPT_TOOLBAR
2719d522f475Smrg#define INIT_POPUP(s, n) InitPopup(s[n].w, menu_names[n].internal_name, 0)
2720d522f475Smrg
2721d522f475Smrgstatic Bool
2722d522f475SmrgInitWidgetMenu(Widget shell)
2723d522f475Smrg{
2724d522f475Smrg    Bool result = False;
2725d522f475Smrg
272620d2c4d2Smrg    TRACE(("InitWidgetMenu(%p)\n", (void *) shell));
2727d522f475Smrg    if (term != 0) {
2728d522f475Smrg	if (shell == toplevel) {	/* vt100 */
2729d522f475Smrg	    if (!term->init_menu) {
2730d522f475Smrg		INIT_POPUP(vt_shell, mainMenu);
2731d522f475Smrg		INIT_POPUP(vt_shell, vtMenu);
2732d522f475Smrg		INIT_POPUP(vt_shell, fontMenu);
2733d522f475Smrg		term->init_menu = True;
2734d522f475Smrg		TRACE(("...InitWidgetMenu(vt)\n"));
2735d522f475Smrg	    }
2736d522f475Smrg	    result = term->init_menu;
2737d522f475Smrg	}
2738d522f475Smrg#if OPT_TEK4014
2739d522f475Smrg	else if (tekWidget) {	/* tek4014 */
2740d522f475Smrg	    if (!tekWidget->init_menu) {
2741d522f475Smrg		INIT_POPUP(tek_shell, mainMenu);
2742d522f475Smrg		INIT_POPUP(tek_shell, tekMenu);
2743d522f475Smrg		tekWidget->init_menu = True;
2744d522f475Smrg		TRACE(("...InitWidgetMenu(tek)\n"));
2745d522f475Smrg	    }
2746d522f475Smrg	    result = tekWidget->init_menu;
2747d522f475Smrg	}
2748d522f475Smrg#endif
2749d522f475Smrg    }
2750d522f475Smrg    TRACE(("...InitWidgetMenu ->%d\n", result));
2751d522f475Smrg    return result;
2752d522f475Smrg}
2753d522f475Smrg
2754d522f475Smrgstatic TbInfo *
2755d522f475Smrgtoolbar_info(Widget w)
2756d522f475Smrg{
2757d522f475Smrg    TRACE(("...getting toolbar_info\n"));
2758d522f475Smrg#if OPT_TEK4014
2759d522f475Smrg    if (w != (Widget) term)
2760d522f475Smrg	return &(tekWidget->tek.tb_info);
2761d522f475Smrg#else
2762d522f475Smrg    (void) w;
2763d522f475Smrg#endif
276420d2c4d2Smrg    return &(WhichVWin(TScreenOf(term))->tb_info);
2765d522f475Smrg}
2766d522f475Smrg
2767d522f475Smrgstatic void
2768d522f475Smrghide_toolbar(Widget w)
2769d522f475Smrg{
2770d522f475Smrg    if (w != 0) {
2771d522f475Smrg	TbInfo *info = toolbar_info(w);
2772d522f475Smrg
2773d522f475Smrg	TRACE(("hiding toolbar\n"));
2774d522f475Smrg	XtVaSetValues(w,
2775d522f475Smrg		      XtNfromVert, (Widget) 0,
2776d522f475Smrg		      (XtPointer) 0);
2777d522f475Smrg
2778d522f475Smrg	if (info->menu_bar != 0) {
2779d522f475Smrg	    repairSizeHints();
2780d522f475Smrg	    XtUnmanageChild(info->menu_bar);
2781d522f475Smrg	    if (XtIsRealized(info->menu_bar)) {
2782d522f475Smrg		XtUnmapWidget(info->menu_bar);
2783d522f475Smrg	    }
2784d522f475Smrg	}
2785d522f475Smrg	TRACE(("...hiding toolbar (done)\n"));
2786d522f475Smrg    }
2787d522f475Smrg}
2788d522f475Smrg
2789d522f475Smrgstatic void
2790d522f475Smrgshow_toolbar(Widget w)
2791d522f475Smrg{
2792d522f475Smrg    if (w != 0) {
2793d522f475Smrg	TbInfo *info = toolbar_info(w);
2794d522f475Smrg
2795d522f475Smrg	TRACE(("showing toolbar\n"));
2796d522f475Smrg	if (info->menu_bar != 0) {
2797d522f475Smrg	    XtVaSetValues(w,
2798d522f475Smrg			  XtNfromVert, info->menu_bar,
2799d522f475Smrg			  (XtPointer) 0);
2800d522f475Smrg	    if (XtIsRealized(info->menu_bar))
2801d522f475Smrg		repairSizeHints();
2802d522f475Smrg	    XtManageChild(info->menu_bar);
2803d522f475Smrg	    if (XtIsRealized(info->menu_bar)) {
2804d522f475Smrg		XtMapWidget(info->menu_bar);
2805d522f475Smrg	    }
2806d522f475Smrg	}
2807d522f475Smrg	/*
2808d522f475Smrg	 * This is needed to make the terminal widget move down below the
2809d522f475Smrg	 * toolbar.
2810d522f475Smrg	 */
2811d522f475Smrg	XawFormDoLayout(XtParent(w), True);
2812d522f475Smrg	TRACE(("...showing toolbar (done)\n"));
2813d522f475Smrg    }
2814d522f475Smrg}
2815d522f475Smrg
2816d522f475Smrg/*
2817d522f475Smrg * Make the toolbar visible or invisible in the current window(s).
2818d522f475Smrg */
2819d522f475Smrgvoid
2820d522f475SmrgShowToolbar(Bool enable)
2821d522f475Smrg{
282220d2c4d2Smrg    XtermWidget xw = term;
282320d2c4d2Smrg
2824d522f475Smrg    TRACE(("ShowToolbar(%d)\n", enable));
2825d522f475Smrg
282620d2c4d2Smrg    if (IsIcon(TScreenOf(xw))) {
282720d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
2828d522f475Smrg    } else {
2829d522f475Smrg	if (enable) {
2830d522f475Smrg	    if (InitWidgetMenu(toplevel))
283120d2c4d2Smrg		show_toolbar((Widget) xw);
2832d522f475Smrg#if OPT_TEK4014
2833d522f475Smrg	    if (InitWidgetMenu(tekshellwidget))
2834d522f475Smrg		show_toolbar((Widget) tekWidget);
2835d522f475Smrg#endif
2836d522f475Smrg	} else {
283720d2c4d2Smrg	    hide_toolbar((Widget) xw);
2838d522f475Smrg#if OPT_TEK4014
2839d522f475Smrg	    hide_toolbar((Widget) tekWidget);
2840d522f475Smrg#endif
2841d522f475Smrg	}
2842956cc18dSsnj	resource.toolBar = (Boolean) enable;
2843d522f475Smrg	update_toolbar();
2844d522f475Smrg    }
2845d522f475Smrg}
2846d522f475Smrg
2847d522f475Smrgvoid
2848d522f475SmrgHandleToolbar(Widget w,
2849d522f475Smrg	      XEvent * event GCC_UNUSED,
2850d522f475Smrg	      String * params GCC_UNUSED,
2851d522f475Smrg	      Cardinal *param_count GCC_UNUSED)
2852d522f475Smrg{
285320d2c4d2Smrg    XtermWidget xw = term;
285420d2c4d2Smrg
285520d2c4d2Smrg    if (IsIcon(TScreenOf(xw))) {
285620d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
2857d522f475Smrg    } else {
2858d522f475Smrg	handle_vt_toggle(do_toolbar, resource.toolBar,
2859d522f475Smrg			 params, *param_count, w);
2860d522f475Smrg    }
2861d522f475Smrg}
2862d522f475Smrg
2863d522f475Smrg/* ARGSUSED */
2864d522f475Smrgstatic void
2865d522f475Smrgdo_toolbar(Widget gw GCC_UNUSED,
2866d522f475Smrg	   XtPointer closure GCC_UNUSED,
2867d522f475Smrg	   XtPointer data GCC_UNUSED)
2868d522f475Smrg{
286920d2c4d2Smrg    XtermWidget xw = term;
287020d2c4d2Smrg
2871d522f475Smrg    /*
2872d522f475Smrg     * Toggle toolbars for both vt100 and tek windows, since they share the
2873d522f475Smrg     * menu which contains the checkbox indicating whether the toolbar is
2874d522f475Smrg     * active.
2875d522f475Smrg     */
287620d2c4d2Smrg    if (IsIcon(TScreenOf(xw))) {
287720d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
2878d522f475Smrg    } else {
2879956cc18dSsnj	ShowToolbar(ToggleFlag(resource.toolBar));
2880d522f475Smrg    }
2881d522f475Smrg}
2882d522f475Smrg
2883d522f475Smrgvoid
2884d522f475Smrgupdate_toolbar(void)
2885d522f475Smrg{
2886d522f475Smrg    UpdateCheckbox("update_toolbar",
2887d522f475Smrg		   mainMenuEntries,
2888d522f475Smrg		   mainMenu_toolbar,
2889d522f475Smrg		   resource.toolBar);
2890d522f475Smrg}
2891d522f475Smrg#endif /* OPT_TOOLBAR */
2892d522f475Smrg
2893d522f475Smrgvoid
2894d522f475Smrgupdate_securekbd(void)
2895d522f475Smrg{
2896d522f475Smrg    UpdateCheckbox("update_securekbd",
2897d522f475Smrg		   mainMenuEntries,
2898d522f475Smrg		   mainMenu_securekbd,
289920d2c4d2Smrg		   TScreenOf(term)->grabbedKbd);
2900d522f475Smrg}
2901d522f475Smrg
2902d522f475Smrgvoid
2903d522f475Smrgupdate_allowsends(void)
2904d522f475Smrg{
2905d522f475Smrg    UpdateCheckbox("update_allowsends",
2906d522f475Smrg		   mainMenuEntries,
2907d522f475Smrg		   mainMenu_allowsends,
290820d2c4d2Smrg		   TScreenOf(term)->allowSendEvents);
2909d522f475Smrg}
2910d522f475Smrg
2911d522f475Smrg#ifdef ALLOWLOGGING
2912d522f475Smrgvoid
2913d522f475Smrgupdate_logging(void)
2914d522f475Smrg{
2915d522f475Smrg    UpdateCheckbox("update_logging",
2916d522f475Smrg		   mainMenuEntries,
2917d522f475Smrg		   mainMenu_logging,
291820d2c4d2Smrg		   TScreenOf(term)->logging);
2919d522f475Smrg}
2920d522f475Smrg#endif
2921d522f475Smrg
2922d522f475Smrgvoid
2923d522f475Smrgupdate_print_redir(void)
2924d522f475Smrg{
2925d522f475Smrg    UpdateCheckbox("update_print_redir",
2926d522f475Smrg		   mainMenuEntries,
2927d522f475Smrg		   mainMenu_print_redir,
292820d2c4d2Smrg		   TScreenOf(term)->printer_controlmode);
2929d522f475Smrg}
2930d522f475Smrg
2931d522f475Smrgvoid
2932d522f475Smrgupdate_8bit_control(void)
2933d522f475Smrg{
2934d522f475Smrg    UpdateCheckbox("update_8bit_control",
2935d522f475Smrg		   mainMenuEntries,
2936d522f475Smrg		   mainMenu_8bit_ctrl,
293720d2c4d2Smrg		   TScreenOf(term)->control_eight_bits);
2938d522f475Smrg}
2939d522f475Smrg
2940d522f475Smrgvoid
2941d522f475Smrgupdate_decbkm(void)
2942d522f475Smrg{
2943d522f475Smrg    UpdateCheckbox("update_decbkm",
2944d522f475Smrg		   mainMenuEntries,
2945d522f475Smrg		   mainMenu_backarrow,
2946d522f475Smrg		   (term->keyboard.flags & MODE_DECBKM) != 0);
2947d522f475Smrg}
2948d522f475Smrg
2949d522f475Smrg#if OPT_NUM_LOCK
2950d522f475Smrgvoid
2951d522f475Smrgupdate_num_lock(void)
2952d522f475Smrg{
2953d522f475Smrg    UpdateCheckbox("update_num_lock",
2954d522f475Smrg		   mainMenuEntries,
2955d522f475Smrg		   mainMenu_num_lock,
2956d522f475Smrg		   term->misc.real_NumLock);
2957d522f475Smrg}
2958d522f475Smrg
2959d522f475Smrgvoid
2960d522f475Smrgupdate_alt_esc(void)
2961d522f475Smrg{
2962d522f475Smrg    UpdateCheckbox("update_alt_esc",
2963d522f475Smrg		   mainMenuEntries,
2964d522f475Smrg		   mainMenu_alt_esc,
296520d2c4d2Smrg		   TScreenOf(term)->alt_sends_esc);
2966d522f475Smrg}
2967d522f475Smrg
2968d522f475Smrgvoid
2969d522f475Smrgupdate_meta_esc(void)
2970d522f475Smrg{
2971d522f475Smrg    UpdateCheckbox("update_meta_esc",
2972d522f475Smrg		   mainMenuEntries,
2973d522f475Smrg		   mainMenu_meta_esc,
297420d2c4d2Smrg		   TScreenOf(term)->meta_sends_esc);
2975d522f475Smrg}
2976d522f475Smrg#endif
2977d522f475Smrg
2978d522f475Smrg#if OPT_SUN_FUNC_KEYS
2979d522f475Smrgvoid
2980d522f475Smrgupdate_sun_fkeys(void)
2981d522f475Smrg{
2982d522f475Smrg    UpdateCheckbox("update_sun_fkeys",
2983d522f475Smrg		   mainMenuEntries,
2984d522f475Smrg		   mainMenu_sun_fkeys,
2985d522f475Smrg		   term->keyboard.type == keyboardIsSun);
2986d522f475Smrg}
2987d522f475Smrg#endif
2988d522f475Smrg
2989d522f475Smrg#if OPT_TCAP_FKEYS
2990d522f475Smrgvoid
2991d522f475Smrgupdate_tcap_fkeys(void)
2992d522f475Smrg{
2993d522f475Smrg    UpdateCheckbox("update_tcap_fkeys",
2994d522f475Smrg		   mainMenuEntries,
2995d522f475Smrg		   mainMenu_tcap_fkeys,
2996d522f475Smrg		   term->keyboard.type == keyboardIsTermcap);
2997d522f475Smrg}
2998d522f475Smrg#endif
2999d522f475Smrg
3000d522f475Smrgvoid
3001d522f475Smrgupdate_old_fkeys(void)
3002d522f475Smrg{
3003d522f475Smrg    UpdateCheckbox("update_old_fkeys",
3004d522f475Smrg		   mainMenuEntries,
3005d522f475Smrg		   mainMenu_old_fkeys,
3006d522f475Smrg		   term->keyboard.type == keyboardIsLegacy);
3007d522f475Smrg}
3008d522f475Smrg
3009d522f475Smrgvoid
3010d522f475Smrgupdate_delete_del(void)
3011d522f475Smrg{
3012d522f475Smrg    UpdateCheckbox("update_delete_del",
3013d522f475Smrg		   mainMenuEntries,
3014d522f475Smrg		   mainMenu_delete_del,
3015d522f475Smrg		   xtermDeleteIsDEL(term));
3016d522f475Smrg}
3017d522f475Smrg
3018d522f475Smrg#if OPT_SUNPC_KBD
3019d522f475Smrgvoid
3020d522f475Smrgupdate_sun_kbd(void)
3021d522f475Smrg{
3022d522f475Smrg    UpdateCheckbox("update_sun_kbd",
3023d522f475Smrg		   mainMenuEntries,
3024d522f475Smrg		   mainMenu_sun_kbd,
3025d522f475Smrg		   term->keyboard.type == keyboardIsVT220);
3026d522f475Smrg}
3027d522f475Smrg#endif
3028d522f475Smrg
3029d522f475Smrg#if OPT_HP_FUNC_KEYS
3030d522f475Smrgvoid
3031d522f475Smrgupdate_hp_fkeys(void)
3032d522f475Smrg{
3033d522f475Smrg    UpdateCheckbox("update_hp_fkeys",
3034d522f475Smrg		   mainMenuEntries,
3035d522f475Smrg		   mainMenu_hp_fkeys,
3036d522f475Smrg		   term->keyboard.type == keyboardIsHP);
3037d522f475Smrg}
3038d522f475Smrg#endif
3039d522f475Smrg
3040d522f475Smrg#if OPT_SCO_FUNC_KEYS
3041d522f475Smrgvoid
3042d522f475Smrgupdate_sco_fkeys(void)
3043d522f475Smrg{
3044d522f475Smrg    UpdateCheckbox("update_sco_fkeys",
3045d522f475Smrg		   mainMenuEntries,
3046d522f475Smrg		   mainMenu_sco_fkeys,
3047d522f475Smrg		   term->keyboard.type == keyboardIsSCO);
3048d522f475Smrg}
3049d522f475Smrg#endif
3050d522f475Smrg
3051d522f475Smrgvoid
3052d522f475Smrgupdate_scrollbar(void)
3053d522f475Smrg{
3054d522f475Smrg    UpdateCheckbox("update_scrollbar",
3055d522f475Smrg		   vtMenuEntries,
3056d522f475Smrg		   vtMenu_scrollbar,
3057d522f475Smrg		   ScrollbarWidth(TScreenOf(term)));
3058d522f475Smrg}
3059d522f475Smrg
3060d522f475Smrgvoid
3061d522f475Smrgupdate_jumpscroll(void)
3062d522f475Smrg{
3063d522f475Smrg    UpdateCheckbox("update_jumpscroll",
3064d522f475Smrg		   vtMenuEntries,
3065d522f475Smrg		   vtMenu_jumpscroll,
306620d2c4d2Smrg		   TScreenOf(term)->jumpscroll);
3067d522f475Smrg}
3068d522f475Smrg
3069d522f475Smrgvoid
3070d522f475Smrgupdate_reversevideo(void)
3071d522f475Smrg{
3072d522f475Smrg    UpdateCheckbox("update_reversevideo",
3073d522f475Smrg		   vtMenuEntries,
3074d522f475Smrg		   vtMenu_reversevideo,
3075d522f475Smrg		   (term->misc.re_verse));
3076d522f475Smrg}
3077d522f475Smrg
3078d522f475Smrgvoid
3079d522f475Smrgupdate_autowrap(void)
3080d522f475Smrg{
3081d522f475Smrg    UpdateCheckbox("update_autowrap",
3082d522f475Smrg		   vtMenuEntries,
3083d522f475Smrg		   vtMenu_autowrap,
3084d522f475Smrg		   (term->flags & WRAPAROUND) != 0);
3085d522f475Smrg}
3086d522f475Smrg
3087d522f475Smrgvoid
3088d522f475Smrgupdate_reversewrap(void)
3089d522f475Smrg{
3090d522f475Smrg    UpdateCheckbox("update_reversewrap",
3091d522f475Smrg		   vtMenuEntries,
3092d522f475Smrg		   vtMenu_reversewrap,
3093d522f475Smrg		   (term->flags & REVERSEWRAP) != 0);
3094d522f475Smrg}
3095d522f475Smrg
3096d522f475Smrgvoid
3097d522f475Smrgupdate_autolinefeed(void)
3098d522f475Smrg{
3099d522f475Smrg    UpdateCheckbox("update_autolinefeed",
3100d522f475Smrg		   vtMenuEntries,
3101d522f475Smrg		   vtMenu_autolinefeed,
3102d522f475Smrg		   (term->flags & LINEFEED) != 0);
3103d522f475Smrg}
3104d522f475Smrg
3105d522f475Smrgvoid
3106d522f475Smrgupdate_appcursor(void)
3107d522f475Smrg{
3108d522f475Smrg    UpdateCheckbox("update_appcursor",
3109d522f475Smrg		   vtMenuEntries,
3110d522f475Smrg		   vtMenu_appcursor,
3111d522f475Smrg		   (term->keyboard.flags & MODE_DECCKM) != 0);
3112d522f475Smrg}
3113d522f475Smrg
3114d522f475Smrgvoid
3115d522f475Smrgupdate_appkeypad(void)
3116d522f475Smrg{
3117d522f475Smrg    UpdateCheckbox("update_appkeypad",
3118d522f475Smrg		   vtMenuEntries,
3119d522f475Smrg		   vtMenu_appkeypad,
3120d522f475Smrg		   (term->keyboard.flags & MODE_DECKPAM) != 0);
3121d522f475Smrg}
3122d522f475Smrg
3123d522f475Smrgvoid
3124d522f475Smrgupdate_scrollkey(void)
3125d522f475Smrg{
3126d522f475Smrg    UpdateCheckbox("update_scrollkey",
3127d522f475Smrg		   vtMenuEntries,
3128d522f475Smrg		   vtMenu_scrollkey,
312920d2c4d2Smrg		   TScreenOf(term)->scrollkey);
3130d522f475Smrg}
3131d522f475Smrg
3132d522f475Smrgvoid
3133d522f475Smrgupdate_scrollttyoutput(void)
3134d522f475Smrg{
3135d522f475Smrg    UpdateCheckbox("update_scrollttyoutput",
3136d522f475Smrg		   vtMenuEntries,
3137d522f475Smrg		   vtMenu_scrollttyoutput,
313820d2c4d2Smrg		   TScreenOf(term)->scrollttyoutput);
3139d522f475Smrg}
3140d522f475Smrg
3141d522f475Smrgvoid
3142d522f475Smrgupdate_keepSelection(void)
3143d522f475Smrg{
3144d522f475Smrg    UpdateCheckbox("update_keepSelection",
3145d522f475Smrg		   vtMenuEntries,
3146d522f475Smrg		   vtMenu_keepSelection,
314720d2c4d2Smrg		   TScreenOf(term)->keepSelection);
3148d522f475Smrg}
3149d522f475Smrg
3150d522f475Smrgvoid
3151d522f475Smrgupdate_selectToClipboard(void)
3152d522f475Smrg{
3153d522f475Smrg    UpdateCheckbox("update_selectToClipboard",
3154d522f475Smrg		   vtMenuEntries,
3155d522f475Smrg		   vtMenu_selectToClipboard,
315620d2c4d2Smrg		   TScreenOf(term)->selectToClipboard);
3157d522f475Smrg}
3158d522f475Smrg
3159d522f475Smrgvoid
3160d522f475Smrgupdate_allow132(void)
3161d522f475Smrg{
3162d522f475Smrg    UpdateCheckbox("update_allow132",
3163d522f475Smrg		   vtMenuEntries,
3164d522f475Smrg		   vtMenu_allow132,
316520d2c4d2Smrg		   TScreenOf(term)->c132);
3166d522f475Smrg}
3167d522f475Smrg
3168d522f475Smrgvoid
3169d522f475Smrgupdate_cursesemul(void)
3170d522f475Smrg{
3171d522f475Smrg#if 0				/* 2006-2-12: no longer menu entry */
3172d522f475Smrg    UpdateMenuItem("update_cursesemul", vtMenuEntries, vtMenu_cursesemul,
317320d2c4d2Smrg		   TScreenOf(term)->curses);
3174d522f475Smrg#endif
3175d522f475Smrg}
3176d522f475Smrg
3177d522f475Smrgvoid
3178d522f475Smrgupdate_visualbell(void)
3179d522f475Smrg{
3180d522f475Smrg    UpdateCheckbox("update_visualbell",
3181d522f475Smrg		   vtMenuEntries,
3182d522f475Smrg		   vtMenu_visualbell,
318320d2c4d2Smrg		   TScreenOf(term)->visualbell);
3184d522f475Smrg}
3185d522f475Smrg
3186d522f475Smrgvoid
3187d522f475Smrgupdate_bellIsUrgent(void)
3188d522f475Smrg{
3189d522f475Smrg    UpdateCheckbox("update_bellIsUrgent",
3190d522f475Smrg		   vtMenuEntries,
3191d522f475Smrg		   vtMenu_bellIsUrgent,
319220d2c4d2Smrg		   TScreenOf(term)->bellIsUrgent);
3193d522f475Smrg}
3194d522f475Smrg
3195d522f475Smrgvoid
3196d522f475Smrgupdate_poponbell(void)
3197d522f475Smrg{
3198d522f475Smrg    UpdateCheckbox("update_poponbell",
3199d522f475Smrg		   vtMenuEntries,
3200d522f475Smrg		   vtMenu_poponbell,
320120d2c4d2Smrg		   TScreenOf(term)->poponbell);
3202d522f475Smrg}
3203d522f475Smrg
3204d522f475Smrg#ifndef update_marginbell	/* 2007-3-7: no longer menu entry */
3205d522f475Smrgvoid
3206d522f475Smrgupdate_marginbell(void)
3207d522f475Smrg{
3208d522f475Smrg    UpdateCheckbox("update_marginbell",
3209d522f475Smrg		   vtMenuEntries,
3210d522f475Smrg		   vtMenu_marginbell,
321120d2c4d2Smrg		   TScreenOf(term)->marginbell);
3212d522f475Smrg}
3213d522f475Smrg#endif
3214d522f475Smrg
3215d522f475Smrg#if OPT_BLINK_CURS
3216d522f475Smrgvoid
3217d522f475Smrgupdate_cursorblink(void)
3218d522f475Smrg{
3219d522f475Smrg    UpdateCheckbox("update_cursorblink",
3220d522f475Smrg		   vtMenuEntries,
3221d522f475Smrg		   vtMenu_cursorblink,
322220d2c4d2Smrg		   TScreenOf(term)->cursor_blink);
3223d522f475Smrg}
3224d522f475Smrg#endif
3225d522f475Smrg
3226d522f475Smrgvoid
3227d522f475Smrgupdate_altscreen(void)
3228d522f475Smrg{
3229d522f475Smrg    UpdateCheckbox("update_altscreen",
3230d522f475Smrg		   vtMenuEntries,
3231d522f475Smrg		   vtMenu_altscreen,
323220d2c4d2Smrg		   TScreenOf(term)->whichBuf);
3233d522f475Smrg}
3234d522f475Smrg
3235d522f475Smrgvoid
3236d522f475Smrgupdate_titeInhibit(void)
3237d522f475Smrg{
3238d522f475Smrg    UpdateCheckbox("update_titeInhibit",
3239d522f475Smrg		   vtMenuEntries,
3240d522f475Smrg		   vtMenu_titeInhibit,
3241d522f475Smrg		   !(term->misc.titeInhibit));
3242d522f475Smrg}
3243d522f475Smrg
3244d522f475Smrg#ifndef NO_ACTIVE_ICON
3245d522f475Smrgvoid
3246d522f475Smrgupdate_activeicon(void)
3247d522f475Smrg{
3248d522f475Smrg    UpdateCheckbox("update_activeicon",
3249d522f475Smrg		   vtMenuEntries,
3250d522f475Smrg		   vtMenu_activeicon,
3251d522f475Smrg		   term->misc.active_icon);
3252d522f475Smrg}
3253d522f475Smrg#endif /* NO_ACTIVE_ICON */
3254d522f475Smrg
3255d522f475Smrg#if OPT_DEC_CHRSET
3256d522f475Smrgvoid
3257d522f475Smrgupdate_font_doublesize(void)
3258d522f475Smrg{
3259d522f475Smrg    UpdateCheckbox("update_font_doublesize",
3260d522f475Smrg		   fontMenuEntries,
3261d522f475Smrg		   fontMenu_font_doublesize,
326220d2c4d2Smrg		   TScreenOf(term)->font_doublesize);
3263d522f475Smrg}
3264d522f475Smrg#endif
3265d522f475Smrg
3266d522f475Smrg#if OPT_BOX_CHARS
3267d522f475Smrgvoid
3268d522f475Smrgupdate_font_boxchars(void)
3269d522f475Smrg{
3270d522f475Smrg    UpdateCheckbox("update_font_boxchars",
3271d522f475Smrg		   fontMenuEntries,
3272d522f475Smrg		   fontMenu_font_boxchars,
327320d2c4d2Smrg		   TScreenOf(term)->force_box_chars);
327420d2c4d2Smrg}
327520d2c4d2Smrg
327620d2c4d2Smrgvoid
327720d2c4d2Smrgupdate_font_packed(void)
327820d2c4d2Smrg{
327920d2c4d2Smrg    UpdateCheckbox("update_font_packed",
328020d2c4d2Smrg		   fontMenuEntries,
328120d2c4d2Smrg		   fontMenu_font_packedfont,
328220d2c4d2Smrg		   TScreenOf(term)->force_packed);
3283d522f475Smrg}
3284d522f475Smrg#endif
3285d522f475Smrg
3286d522f475Smrg#if OPT_DEC_SOFTFONT
3287d522f475Smrgvoid
3288d522f475Smrgupdate_font_loadable(void)
3289d522f475Smrg{
3290d522f475Smrg    UpdateCheckbox("update_font_loadable",
3291d522f475Smrg		   fontMenuEntries,
3292d522f475Smrg		   fontMenu_font_loadable,
3293d522f475Smrg		   term->misc.font_loadable);
3294d522f475Smrg}
3295d522f475Smrg#endif
3296d522f475Smrg
3297d522f475Smrg#if OPT_RENDERFONT
3298d522f475Smrgvoid
3299d522f475Smrgupdate_font_renderfont(void)
3300d522f475Smrg{
3301d522f475Smrg    UpdateCheckbox("update_font_renderfont",
3302d522f475Smrg		   fontMenuEntries,
3303d522f475Smrg		   fontMenu_render_font,
330420d2c4d2Smrg		   (term->misc.render_font == True));
330520d2c4d2Smrg    SetItemSensitivity(fontMenuEntries[fontMenu_render_font].widget,
330620d2c4d2Smrg		       !IsEmpty(term->misc.face_name));
3307d522f475Smrg}
3308d522f475Smrg#endif
3309d522f475Smrg
3310d522f475Smrg#if OPT_WIDE_CHARS
3311d522f475Smrgvoid
3312d522f475Smrgupdate_font_utf8_mode(void)
3313d522f475Smrg{
331420d2c4d2Smrg    Bool active = (TScreenOf(term)->utf8_mode != uAlways);
331520d2c4d2Smrg    Bool enable = (TScreenOf(term)->utf8_mode != uFalse);
3316d522f475Smrg
3317d522f475Smrg    TRACE(("update_font_utf8_mode active %d, enable %d\n", active, enable));
3318d522f475Smrg    SetItemSensitivity(fontMenuEntries[fontMenu_wide_chars].widget, active);
3319d522f475Smrg    UpdateCheckbox("update_font_utf8_mode",
3320d522f475Smrg		   fontMenuEntries,
3321d522f475Smrg		   fontMenu_wide_chars,
3322d522f475Smrg		   enable);
3323d522f475Smrg}
3324d522f475Smrg
3325d522f475Smrgvoid
3326d522f475Smrgupdate_font_utf8_title(void)
3327d522f475Smrg{
332820d2c4d2Smrg    Bool active = (TScreenOf(term)->utf8_mode != uFalse);
332920d2c4d2Smrg    Bool enable = (TScreenOf(term)->utf8_title);
3330d522f475Smrg
3331d522f475Smrg    TRACE(("update_font_utf8_title active %d, enable %d\n", active, enable));
3332d522f475Smrg    SetItemSensitivity(fontMenuEntries[fontMenu_wide_title].widget, active);
3333d522f475Smrg    UpdateCheckbox("update_font_utf8_title",
3334d522f475Smrg		   fontMenuEntries,
3335d522f475Smrg		   fontMenu_wide_title,
3336d522f475Smrg		   enable);
3337d522f475Smrg}
3338d522f475Smrg#endif
3339d522f475Smrg
3340956cc18dSsnj#if OPT_ALLOW_XXX_OPS
3341956cc18dSsnjstatic void
3342956cc18dSsnjenable_allow_xxx_ops(Bool enable)
3343956cc18dSsnj{
3344956cc18dSsnj    SetItemSensitivity(fontMenuEntries[fontMenu_allowFontOps].widget, enable);
3345956cc18dSsnj    SetItemSensitivity(fontMenuEntries[fontMenu_allowTcapOps].widget, enable);
3346956cc18dSsnj    SetItemSensitivity(fontMenuEntries[fontMenu_allowTitleOps].widget, enable);
3347956cc18dSsnj    SetItemSensitivity(fontMenuEntries[fontMenu_allowWindowOps].widget, enable);
3348956cc18dSsnj}
3349956cc18dSsnj
335020d2c4d2Smrgstatic void
335120d2c4d2Smrgdo_allowColorOps(Widget w,
335220d2c4d2Smrg		 XtPointer closure GCC_UNUSED,
335320d2c4d2Smrg		 XtPointer data GCC_UNUSED)
335420d2c4d2Smrg{
335520d2c4d2Smrg    XtermWidget xw = getXtermWidget(w);
335620d2c4d2Smrg    if (xw != 0) {
335720d2c4d2Smrg	ToggleFlag(TScreenOf(xw)->allowColorOps);
335820d2c4d2Smrg	update_menu_allowColorOps();
335920d2c4d2Smrg    }
336020d2c4d2Smrg}
336120d2c4d2Smrg
3362956cc18dSsnjstatic void
3363956cc18dSsnjdo_allowFontOps(Widget w,
3364956cc18dSsnj		XtPointer closure GCC_UNUSED,
3365956cc18dSsnj		XtPointer data GCC_UNUSED)
3366956cc18dSsnj{
3367956cc18dSsnj    XtermWidget xw = getXtermWidget(w);
3368956cc18dSsnj    if (xw != 0) {
336920d2c4d2Smrg	ToggleFlag(TScreenOf(xw)->allowFontOps);
3370956cc18dSsnj	update_menu_allowFontOps();
3371956cc18dSsnj    }
3372956cc18dSsnj}
3373956cc18dSsnj
3374956cc18dSsnjstatic void
3375956cc18dSsnjdo_allowTcapOps(Widget w,
3376956cc18dSsnj		XtPointer closure GCC_UNUSED,
3377956cc18dSsnj		XtPointer data GCC_UNUSED)
3378956cc18dSsnj{
3379956cc18dSsnj    XtermWidget xw = getXtermWidget(w);
3380956cc18dSsnj    if (xw != 0) {
338120d2c4d2Smrg	ToggleFlag(TScreenOf(xw)->allowTcapOps);
3382956cc18dSsnj	update_menu_allowTcapOps();
3383956cc18dSsnj    }
3384956cc18dSsnj}
3385956cc18dSsnj
3386956cc18dSsnjstatic void
3387956cc18dSsnjdo_allowTitleOps(Widget w,
3388956cc18dSsnj		 XtPointer closure GCC_UNUSED,
3389956cc18dSsnj		 XtPointer data GCC_UNUSED)
3390956cc18dSsnj{
3391956cc18dSsnj    XtermWidget xw = getXtermWidget(w);
3392956cc18dSsnj    if (xw != 0) {
339320d2c4d2Smrg	ToggleFlag(TScreenOf(xw)->allowTitleOps);
3394956cc18dSsnj	update_menu_allowTitleOps();
3395956cc18dSsnj    }
3396956cc18dSsnj}
3397956cc18dSsnj
3398956cc18dSsnjstatic void
3399956cc18dSsnjdo_allowWindowOps(Widget w,
3400956cc18dSsnj		  XtPointer closure GCC_UNUSED,
3401956cc18dSsnj		  XtPointer data GCC_UNUSED)
3402956cc18dSsnj{
3403956cc18dSsnj    XtermWidget xw = getXtermWidget(w);
3404956cc18dSsnj    if (xw != 0) {
340520d2c4d2Smrg	ToggleFlag(TScreenOf(xw)->allowWindowOps);
3406956cc18dSsnj	update_menu_allowWindowOps();
3407956cc18dSsnj    }
3408956cc18dSsnj}
3409956cc18dSsnj
341020d2c4d2Smrgvoid
341120d2c4d2SmrgHandleAllowColorOps(Widget w,
341220d2c4d2Smrg		    XEvent * event GCC_UNUSED,
341320d2c4d2Smrg		    String * params,
341420d2c4d2Smrg		    Cardinal *param_count)
341520d2c4d2Smrg{
341620d2c4d2Smrg    HANDLE_VT_TOGGLE(allowColorOps);
341720d2c4d2Smrg}
341820d2c4d2Smrg
3419956cc18dSsnjvoid
3420956cc18dSsnjHandleAllowFontOps(Widget w,
3421956cc18dSsnj		   XEvent * event GCC_UNUSED,
3422956cc18dSsnj		   String * params,
3423956cc18dSsnj		   Cardinal *param_count)
3424956cc18dSsnj{
342520d2c4d2Smrg    HANDLE_VT_TOGGLE(allowFontOps);
3426956cc18dSsnj}
3427956cc18dSsnj
3428956cc18dSsnjvoid
3429956cc18dSsnjHandleAllowTcapOps(Widget w,
3430956cc18dSsnj		   XEvent * event GCC_UNUSED,
3431956cc18dSsnj		   String * params,
3432956cc18dSsnj		   Cardinal *param_count)
3433956cc18dSsnj{
343420d2c4d2Smrg    HANDLE_VT_TOGGLE(allowTcapOps);
3435956cc18dSsnj}
3436956cc18dSsnj
3437956cc18dSsnjvoid
3438956cc18dSsnjHandleAllowTitleOps(Widget w,
3439956cc18dSsnj		    XEvent * event GCC_UNUSED,
3440956cc18dSsnj		    String * params,
3441956cc18dSsnj		    Cardinal *param_count)
3442956cc18dSsnj{
344320d2c4d2Smrg    HANDLE_VT_TOGGLE(allowTitleOps);
3444956cc18dSsnj}
3445956cc18dSsnj
3446956cc18dSsnjvoid
3447956cc18dSsnjHandleAllowWindowOps(Widget w,
3448956cc18dSsnj		     XEvent * event GCC_UNUSED,
3449956cc18dSsnj		     String * params,
3450956cc18dSsnj		     Cardinal *param_count)
3451956cc18dSsnj{
345220d2c4d2Smrg    HANDLE_VT_TOGGLE(allowWindowOps);
3453956cc18dSsnj}
3454956cc18dSsnj
3455956cc18dSsnjvoid
345620d2c4d2Smrgupdate_menu_allowColorOps(void)
3457956cc18dSsnj{
345820d2c4d2Smrg    UpdateCheckbox("update_menu_allowColorOps",
3459956cc18dSsnj		   fontMenuEntries,
346020d2c4d2Smrg		   fontMenu_allowColorOps,
346120d2c4d2Smrg		   TScreenOf(term)->allowColorOps);
3462956cc18dSsnj}
3463956cc18dSsnj
3464956cc18dSsnjvoid
3465956cc18dSsnjupdate_menu_allowFontOps(void)
3466956cc18dSsnj{
3467956cc18dSsnj    UpdateCheckbox("update_menu_allowFontOps",
3468956cc18dSsnj		   fontMenuEntries,
3469956cc18dSsnj		   fontMenu_allowFontOps,
347020d2c4d2Smrg		   TScreenOf(term)->allowFontOps);
347120d2c4d2Smrg}
347220d2c4d2Smrg
347320d2c4d2Smrgvoid
347420d2c4d2Smrgupdate_menu_allowTcapOps(void)
347520d2c4d2Smrg{
347620d2c4d2Smrg    UpdateCheckbox("update_menu_allowTcapOps",
347720d2c4d2Smrg		   fontMenuEntries,
347820d2c4d2Smrg		   fontMenu_allowTcapOps,
347920d2c4d2Smrg		   TScreenOf(term)->allowTcapOps);
3480956cc18dSsnj}
3481956cc18dSsnj
3482956cc18dSsnjvoid
3483956cc18dSsnjupdate_menu_allowTitleOps(void)
3484956cc18dSsnj{
3485956cc18dSsnj    UpdateCheckbox("update_menu_allowTitleOps",
3486956cc18dSsnj		   fontMenuEntries,
3487956cc18dSsnj		   fontMenu_allowTitleOps,
348820d2c4d2Smrg		   TScreenOf(term)->allowTitleOps);
3489956cc18dSsnj}
3490956cc18dSsnj
3491956cc18dSsnjvoid
3492956cc18dSsnjupdate_menu_allowWindowOps(void)
3493956cc18dSsnj{
3494956cc18dSsnj    UpdateCheckbox("update_menu_allowWindowOps",
3495956cc18dSsnj		   fontMenuEntries,
3496956cc18dSsnj		   fontMenu_allowWindowOps,
349720d2c4d2Smrg		   TScreenOf(term)->allowWindowOps);
3498956cc18dSsnj}
3499956cc18dSsnj#endif
3500956cc18dSsnj
3501d522f475Smrg#if OPT_TEK4014
3502d522f475Smrgvoid
3503d522f475Smrgupdate_tekshow(void)
3504d522f475Smrg{
350520d2c4d2Smrg    if (!(TScreenOf(term)->inhibit & I_TEK)) {
3506d522f475Smrg	UpdateCheckbox("update_tekshow",
3507d522f475Smrg		       vtMenuEntries,
3508d522f475Smrg		       vtMenu_tekshow,
3509d522f475Smrg		       TEK4014_SHOWN(term));
3510d522f475Smrg    }
3511d522f475Smrg}
3512d522f475Smrg
3513d522f475Smrgvoid
3514d522f475Smrgupdate_vttekmode(void)
3515d522f475Smrg{
351620d2c4d2Smrg    if (!(TScreenOf(term)->inhibit & I_TEK)) {
3517d522f475Smrg	UpdateCheckbox("update_vtmode",
3518d522f475Smrg		       vtMenuEntries,
3519d522f475Smrg		       vtMenu_tekmode,
3520d522f475Smrg		       TEK4014_ACTIVE(term));
3521d522f475Smrg	UpdateCheckbox("update_tekmode",
3522d522f475Smrg		       tekMenuEntries,
3523d522f475Smrg		       tekMenu_vtmode,
3524d522f475Smrg		       !TEK4014_ACTIVE(term));
3525d522f475Smrg    }
3526d522f475Smrg}
3527d522f475Smrg
3528d522f475Smrgvoid
3529d522f475Smrgupdate_vtshow(void)
3530d522f475Smrg{
353120d2c4d2Smrg    if (!(TScreenOf(term)->inhibit & I_TEK)) {
3532d522f475Smrg	UpdateCheckbox("update_vtshow",
3533d522f475Smrg		       tekMenuEntries,
3534d522f475Smrg		       tekMenu_vtshow,
353520d2c4d2Smrg		       TScreenOf(term)->Vshow);
3536d522f475Smrg    }
3537d522f475Smrg}
3538d522f475Smrg
3539d522f475Smrgvoid
3540d522f475Smrgset_vthide_sensitivity(void)
3541d522f475Smrg{
354220d2c4d2Smrg    if (!(TScreenOf(term)->inhibit & I_TEK)) {
3543d522f475Smrg	SetItemSensitivity(
3544d522f475Smrg			      vtMenuEntries[vtMenu_vthide].widget,
3545d522f475Smrg			      TEK4014_SHOWN(term));
3546d522f475Smrg    }
3547d522f475Smrg}
3548d522f475Smrg
3549d522f475Smrgvoid
3550d522f475Smrgset_tekhide_sensitivity(void)
3551d522f475Smrg{
355220d2c4d2Smrg    if (!(TScreenOf(term)->inhibit & I_TEK)) {
3553d522f475Smrg	SetItemSensitivity(
3554d522f475Smrg			      tekMenuEntries[tekMenu_tekhide].widget,
355520d2c4d2Smrg			      TScreenOf(term)->Vshow);
3556d522f475Smrg    }
3557d522f475Smrg}
3558d522f475Smrg
3559d522f475Smrgvoid
3560d522f475Smrgset_tekfont_menu_item(int n, int val)
3561d522f475Smrg{
356220d2c4d2Smrg    if (!(TScreenOf(term)->inhibit & I_TEK)) {
3563d522f475Smrg	UpdateCheckbox("set_tekfont_menu_item", tekMenuEntries, FS2MI(n),
3564d522f475Smrg		       (val));
3565d522f475Smrg    }
3566d522f475Smrg}
3567d522f475Smrg#endif /* OPT_TEK4014 */
3568d522f475Smrg
3569d522f475Smrgvoid
3570d522f475Smrgset_menu_font(int val)
3571d522f475Smrg{
3572d522f475Smrg    UpdateCheckbox("set_menu_font",
3573d522f475Smrg		   fontMenuEntries,
357420d2c4d2Smrg		   TScreenOf(term)->menu_font_number,
3575d522f475Smrg		   (val));
3576d522f475Smrg}
3577