menu.c revision 956cc18d
1956cc18dSsnj/* $XTermId: menu.c,v 1.252 2009/07/03 15:01:14 tom Exp $ */
2d522f475Smrg
3d522f475Smrg/*
4d522f475Smrg
5956cc18dSsnjCopyright 1999-2008,2009 by Thomas E. Dickey
6d522f475Smrg
7d522f475Smrg                        All Rights Reserved
8d522f475Smrg
9d522f475SmrgPermission to use, copy, modify, and distribute this software and its
10d522f475Smrgdocumentation for any purpose and without fee is hereby granted,
11d522f475Smrgprovided that the above copyright notice appear in all copies and that
12d522f475Smrgboth that copyright notice and this permission notice appear in
13d522f475Smrgsupporting documentation, and that the name of the above listed
14d522f475Smrgcopyright holder(s) not be used in advertising or publicity pertaining
15d522f475Smrgto distribution of the software without specific, written prior
16d522f475Smrgpermission.
17d522f475Smrg
18d522f475SmrgTHE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM ALL WARRANTIES WITH REGARD
19d522f475SmrgTO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
20d522f475SmrgAND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE
21d522f475SmrgLIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
22d522f475SmrgWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
23d522f475SmrgACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
24d522f475SmrgOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
25d522f475Smrg
26d522f475SmrgCopyright 1989  The Open Group
27d522f475Smrg
28d522f475SmrgPermission to use, copy, modify, distribute, and sell this software and its
29d522f475Smrgdocumentation for any purpose is hereby granted without fee, provided that
30d522f475Smrgthe above copyright notice appear in all copies and that both that
31d522f475Smrgcopyright notice and this permission notice appear in supporting
32d522f475Smrgdocumentation.
33d522f475Smrg
34d522f475SmrgThe above copyright notice and this permission notice shall be included in
35d522f475Smrgall copies or substantial portions of the Software.
36d522f475Smrg
37d522f475SmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
38d522f475SmrgIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
39d522f475SmrgFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
40d522f475SmrgOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
41d522f475SmrgAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
42d522f475SmrgCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
43d522f475Smrg
44d522f475SmrgExcept as contained in this notice, the name of The Open Group shall not be
45d522f475Smrgused in advertising or otherwise to promote the sale, use or other dealings
46d522f475Smrgin this Software without prior written authorization from The Open Group.
47d522f475Smrg
48d522f475Smrg*/
49d522f475Smrg
50d522f475Smrg#include <xterm.h>
51d522f475Smrg#include <data.h>
52d522f475Smrg#include <menu.h>
53d522f475Smrg#include <fontutils.h>
54d522f475Smrg#include <xstrings.h>
55d522f475Smrg
56d522f475Smrg#include <locale.h>
57d522f475Smrg
58d522f475Smrg#include <X11/Xmu/CharSet.h>
59d522f475Smrg
60d522f475Smrg#define app_con Xaw_app_con	/* quiet a warning from SimpleMenu.h */
61d522f475Smrg
62d522f475Smrg#if defined(HAVE_LIB_XAW)
63d522f475Smrg
64d522f475Smrg#include <X11/Xaw/SimpleMenu.h>
65d522f475Smrg#include <X11/Xaw/Box.h>
66d522f475Smrg#include <X11/Xaw/SmeBSB.h>
67d522f475Smrg#include <X11/Xaw/SmeLine.h>
68d522f475Smrg
69d522f475Smrg#if OPT_TOOLBAR
70d522f475Smrg#include <X11/Xaw/MenuButton.h>
71d522f475Smrg#include <X11/Xaw/Form.h>
72d522f475Smrg#endif
73d522f475Smrg
74d522f475Smrg#elif defined(HAVE_LIB_XAW3D)
75d522f475Smrg
76d522f475Smrg#include <X11/Xaw3d/SimpleMenu.h>
77d522f475Smrg#include <X11/Xaw3d/Box.h>
78d522f475Smrg#include <X11/Xaw3d/SmeBSB.h>
79d522f475Smrg#include <X11/Xaw3d/SmeLine.h>
80d522f475Smrg
81d522f475Smrg#if OPT_TOOLBAR
82d522f475Smrg#include <X11/Xaw3d/MenuButton.h>
83d522f475Smrg#include <X11/Xaw3d/Form.h>
84d522f475Smrg#endif
85d522f475Smrg
86d522f475Smrg#elif defined(HAVE_LIB_NEXTAW)
87d522f475Smrg
88d522f475Smrg#include <X11/neXtaw/SimpleMenu.h>
89d522f475Smrg#include <X11/neXtaw/Box.h>
90d522f475Smrg#include <X11/neXtaw/SmeBSB.h>
91d522f475Smrg#include <X11/neXtaw/SmeLine.h>
92d522f475Smrg
93d522f475Smrg#if OPT_TOOLBAR
94d522f475Smrg#include <X11/neXtaw/MenuButton.h>
95d522f475Smrg#include <X11/neXtaw/Form.h>
96d522f475Smrg#endif
97d522f475Smrg
98d522f475Smrg#elif defined(HAVE_LIB_XAWPLUS)
99d522f475Smrg
100d522f475Smrg#include <X11/XawPlus/SimpleMenu.h>
101d522f475Smrg#include <X11/XawPlus/Box.h>
102d522f475Smrg#include <X11/XawPlus/SmeBSB.h>
103d522f475Smrg#include <X11/XawPlus/SmeLine.h>
104d522f475Smrg
105d522f475Smrg#if OPT_TOOLBAR
106d522f475Smrg#include <X11/XawPlus/MenuButton.h>
107d522f475Smrg#include <X11/XawPlus/Form.h>
108d522f475Smrg#endif
109d522f475Smrg
110d522f475Smrg#endif
111d522f475Smrg
112d522f475Smrg#undef app_con
113d522f475Smrg
114d522f475Smrg#include <stdio.h>
115d522f475Smrg#include <signal.h>
116956cc18dSsnj
117956cc18dSsnj#define ToggleFlag(flag) flag = (Boolean) !flag
118d522f475Smrg/* *INDENT-OFF* */
119d522f475Smrgstatic void do_8bit_control    PROTO_XT_CALLBACK_ARGS;
120d522f475Smrgstatic void do_allow132        PROTO_XT_CALLBACK_ARGS;
121d522f475Smrgstatic void do_allowsends      PROTO_XT_CALLBACK_ARGS;
122d522f475Smrgstatic void do_altscreen       PROTO_XT_CALLBACK_ARGS;
123d522f475Smrgstatic void do_appcursor       PROTO_XT_CALLBACK_ARGS;
124d522f475Smrgstatic void do_appkeypad       PROTO_XT_CALLBACK_ARGS;
125d522f475Smrgstatic void do_autolinefeed    PROTO_XT_CALLBACK_ARGS;
126d522f475Smrgstatic void do_autowrap        PROTO_XT_CALLBACK_ARGS;
127d522f475Smrgstatic void do_backarrow       PROTO_XT_CALLBACK_ARGS;
128d522f475Smrgstatic void do_bellIsUrgent    PROTO_XT_CALLBACK_ARGS;
129d522f475Smrgstatic void do_clearsavedlines PROTO_XT_CALLBACK_ARGS;
130d522f475Smrgstatic void do_continue        PROTO_XT_CALLBACK_ARGS;
131d522f475Smrgstatic void do_delete_del      PROTO_XT_CALLBACK_ARGS;
132d522f475Smrgstatic void do_hardreset       PROTO_XT_CALLBACK_ARGS;
133d522f475Smrgstatic void do_interrupt       PROTO_XT_CALLBACK_ARGS;
134d522f475Smrgstatic void do_jumpscroll      PROTO_XT_CALLBACK_ARGS;
135d522f475Smrgstatic void do_kill            PROTO_XT_CALLBACK_ARGS;
136d522f475Smrgstatic void do_old_fkeys       PROTO_XT_CALLBACK_ARGS;
137d522f475Smrgstatic void do_poponbell       PROTO_XT_CALLBACK_ARGS;
138d522f475Smrgstatic void do_print           PROTO_XT_CALLBACK_ARGS;
139956cc18dSsnjstatic void do_print_everything PROTO_XT_CALLBACK_ARGS;
140d522f475Smrgstatic void do_print_redir     PROTO_XT_CALLBACK_ARGS;
141d522f475Smrgstatic void do_quit            PROTO_XT_CALLBACK_ARGS;
142d522f475Smrgstatic void do_redraw          PROTO_XT_CALLBACK_ARGS;
143d522f475Smrgstatic void do_reversevideo    PROTO_XT_CALLBACK_ARGS;
144d522f475Smrgstatic void do_reversewrap     PROTO_XT_CALLBACK_ARGS;
145d522f475Smrgstatic void do_scrollbar       PROTO_XT_CALLBACK_ARGS;
146d522f475Smrgstatic void do_scrollkey       PROTO_XT_CALLBACK_ARGS;
147d522f475Smrgstatic void do_scrollttyoutput PROTO_XT_CALLBACK_ARGS;
148d522f475Smrgstatic void do_securekbd       PROTO_XT_CALLBACK_ARGS;
149d522f475Smrgstatic void do_keepSelection   PROTO_XT_CALLBACK_ARGS;
150d522f475Smrgstatic void do_selectClipboard PROTO_XT_CALLBACK_ARGS;
151d522f475Smrgstatic void do_softreset       PROTO_XT_CALLBACK_ARGS;
152d522f475Smrgstatic void do_suspend         PROTO_XT_CALLBACK_ARGS;
153d522f475Smrgstatic void do_terminate       PROTO_XT_CALLBACK_ARGS;
154d522f475Smrgstatic void do_titeInhibit     PROTO_XT_CALLBACK_ARGS;
155d522f475Smrgstatic void do_visualbell      PROTO_XT_CALLBACK_ARGS;
156d522f475Smrgstatic void do_vtfont          PROTO_XT_CALLBACK_ARGS;
157d522f475Smrg
158d522f475Smrg#ifdef ALLOWLOGGING
159d522f475Smrgstatic void do_logging         PROTO_XT_CALLBACK_ARGS;
160d522f475Smrg#endif
161d522f475Smrg
162d522f475Smrg#ifndef NO_ACTIVE_ICON
163d522f475Smrgstatic void do_activeicon      PROTO_XT_CALLBACK_ARGS;
164d522f475Smrg#endif /* NO_ACTIVE_ICON */
165d522f475Smrg
166956cc18dSsnj#if OPT_ALLOW_XXX_OPS
167956cc18dSsnjstatic void enable_allow_xxx_ops (Bool);
168956cc18dSsnjstatic void do_allowTcapOps    PROTO_XT_CALLBACK_ARGS;
169956cc18dSsnjstatic void do_allowFontOps    PROTO_XT_CALLBACK_ARGS;
170956cc18dSsnjstatic void do_allowTitleOps   PROTO_XT_CALLBACK_ARGS;
171956cc18dSsnjstatic void do_allowWindowOps  PROTO_XT_CALLBACK_ARGS;
172956cc18dSsnj#endif
173956cc18dSsnj
174d522f475Smrg#if OPT_BLINK_CURS
175d522f475Smrgstatic void do_cursorblink     PROTO_XT_CALLBACK_ARGS;
176d522f475Smrg#endif
177d522f475Smrg
178d522f475Smrg#if OPT_BOX_CHARS
179d522f475Smrgstatic void do_font_boxchars   PROTO_XT_CALLBACK_ARGS;
180d522f475Smrg#endif
181d522f475Smrg
182d522f475Smrg#if OPT_DEC_CHRSET
183d522f475Smrgstatic void do_font_doublesize PROTO_XT_CALLBACK_ARGS;
184d522f475Smrg#endif
185d522f475Smrg
186d522f475Smrg#if OPT_DEC_SOFTFONT
187d522f475Smrgstatic void do_font_loadable   PROTO_XT_CALLBACK_ARGS;
188d522f475Smrg#endif
189d522f475Smrg
190d522f475Smrg#if OPT_HP_FUNC_KEYS
191d522f475Smrgstatic void do_hp_fkeys        PROTO_XT_CALLBACK_ARGS;
192d522f475Smrg#endif
193d522f475Smrg
194d522f475Smrg#if OPT_NUM_LOCK
195d522f475Smrgstatic void do_alt_esc         PROTO_XT_CALLBACK_ARGS;
196d522f475Smrgstatic void do_num_lock        PROTO_XT_CALLBACK_ARGS;
197d522f475Smrgstatic void do_meta_esc        PROTO_XT_CALLBACK_ARGS;
198d522f475Smrg#endif
199d522f475Smrg
200d522f475Smrg#if OPT_RENDERFONT
201d522f475Smrgstatic void do_font_renderfont PROTO_XT_CALLBACK_ARGS;
202d522f475Smrg#endif
203d522f475Smrg
204d522f475Smrg#if OPT_SCO_FUNC_KEYS
205d522f475Smrgstatic void do_sco_fkeys       PROTO_XT_CALLBACK_ARGS;
206d522f475Smrg#endif
207d522f475Smrg
208d522f475Smrg#if OPT_SUN_FUNC_KEYS
209d522f475Smrgstatic void do_sun_fkeys       PROTO_XT_CALLBACK_ARGS;
210d522f475Smrg#endif
211d522f475Smrg
212d522f475Smrg#if OPT_SUNPC_KBD
213d522f475Smrgstatic void do_sun_kbd         PROTO_XT_CALLBACK_ARGS;
214d522f475Smrg#endif
215d522f475Smrg
216d522f475Smrg#if OPT_TCAP_FKEYS
217d522f475Smrgstatic void do_tcap_fkeys      PROTO_XT_CALLBACK_ARGS;
218d522f475Smrg#endif
219d522f475Smrg
220d522f475Smrg#if OPT_TEK4014
221d522f475Smrgstatic void do_tekcopy         PROTO_XT_CALLBACK_ARGS;
222d522f475Smrgstatic void do_tekhide         PROTO_XT_CALLBACK_ARGS;
223d522f475Smrgstatic void do_tekmode         PROTO_XT_CALLBACK_ARGS;
224d522f475Smrgstatic void do_tekonoff        PROTO_XT_CALLBACK_ARGS;
225d522f475Smrgstatic void do_tekpage         PROTO_XT_CALLBACK_ARGS;
226d522f475Smrgstatic void do_tekreset        PROTO_XT_CALLBACK_ARGS;
227d522f475Smrgstatic void do_tekshow         PROTO_XT_CALLBACK_ARGS;
228d522f475Smrgstatic void do_tektext2        PROTO_XT_CALLBACK_ARGS;
229d522f475Smrgstatic void do_tektext3        PROTO_XT_CALLBACK_ARGS;
230d522f475Smrgstatic void do_tektextlarge    PROTO_XT_CALLBACK_ARGS;
231d522f475Smrgstatic void do_tektextsmall    PROTO_XT_CALLBACK_ARGS;
232d522f475Smrgstatic void do_vthide          PROTO_XT_CALLBACK_ARGS;
233d522f475Smrgstatic void do_vtmode          PROTO_XT_CALLBACK_ARGS;
234d522f475Smrgstatic void do_vtonoff         PROTO_XT_CALLBACK_ARGS;
235d522f475Smrgstatic void do_vtshow          PROTO_XT_CALLBACK_ARGS;
236d522f475Smrgstatic void handle_tekshow     (Widget gw, Bool allowswitch);
237d522f475Smrgstatic void handle_vtshow      (Widget gw, Bool allowswitch);
238d522f475Smrg#endif
239d522f475Smrg
240d522f475Smrg#if OPT_TOOLBAR
241d522f475Smrgstatic void do_toolbar         PROTO_XT_CALLBACK_ARGS;
242d522f475Smrg#endif
243d522f475Smrg
244d522f475Smrg#if OPT_WIDE_CHARS
245d522f475Smrgstatic void do_font_utf8_mode  PROTO_XT_CALLBACK_ARGS;
246d522f475Smrgstatic void do_font_utf8_title PROTO_XT_CALLBACK_ARGS;
247d522f475Smrg#endif
248d522f475Smrg
249d522f475Smrg/*
250d522f475Smrg * The order of entries MUST match the values given in menu.h
251d522f475Smrg */
252d522f475SmrgMenuEntry mainMenuEntries[] = {
253d522f475Smrg#if OPT_TOOLBAR
254d522f475Smrg    { "toolbar",	do_toolbar,	NULL },
255d522f475Smrg#endif
256d522f475Smrg    { "securekbd",	do_securekbd,	NULL },
257d522f475Smrg    { "allowsends",	do_allowsends,	NULL },
258d522f475Smrg    { "redraw",		do_redraw,	NULL },
259d522f475Smrg    { "line1",		NULL,		NULL },
260d522f475Smrg#ifdef ALLOWLOGGING
261d522f475Smrg    { "logging",	do_logging,	NULL },
262d522f475Smrg#endif
263d522f475Smrg    { "print",		do_print,	NULL },
264d522f475Smrg    { "print-redir",	do_print_redir,	NULL },
265d522f475Smrg    { "line2",		NULL,		NULL },
266d522f475Smrg    { "8-bit control",	do_8bit_control,NULL },
267d522f475Smrg    { "backarrow key",	do_backarrow,	NULL },
268d522f475Smrg#if OPT_NUM_LOCK
269d522f475Smrg    { "num-lock",	do_num_lock,	NULL },
270d522f475Smrg    { "alt-esc",	do_alt_esc,	NULL },
271d522f475Smrg    { "meta-esc",	do_meta_esc,	NULL },
272d522f475Smrg#endif
273d522f475Smrg    { "delete-is-del",	do_delete_del,	NULL },
274d522f475Smrg    { "oldFunctionKeys",do_old_fkeys,	NULL },
275d522f475Smrg#if OPT_TCAP_FKEYS
276d522f475Smrg    { "tcapFunctionKeys",do_tcap_fkeys,	NULL },
277d522f475Smrg#endif
278d522f475Smrg#if OPT_HP_FUNC_KEYS
279d522f475Smrg    { "hpFunctionKeys",	do_hp_fkeys,	NULL },
280d522f475Smrg#endif
281d522f475Smrg#if OPT_SCO_FUNC_KEYS
282d522f475Smrg    { "scoFunctionKeys",do_sco_fkeys,	NULL },
283d522f475Smrg#endif
284d522f475Smrg#if OPT_SUN_FUNC_KEYS
285d522f475Smrg    { "sunFunctionKeys",do_sun_fkeys,	NULL },
286d522f475Smrg#endif
287d522f475Smrg#if OPT_SUNPC_KBD
288d522f475Smrg    { "sunKeyboard",	do_sun_kbd,	NULL },
289d522f475Smrg#endif
290d522f475Smrg    { "line3",		NULL,		NULL },
291d522f475Smrg    { "suspend",	do_suspend,	NULL },
292d522f475Smrg    { "continue",	do_continue,	NULL },
293d522f475Smrg    { "interrupt",	do_interrupt,	NULL },
294d522f475Smrg    { "hangup",		do_hangup,	NULL },
295d522f475Smrg    { "terminate",	do_terminate,	NULL },
296d522f475Smrg    { "kill",		do_kill,	NULL },
297d522f475Smrg    { "line4",		NULL,		NULL },
298d522f475Smrg    { "quit",		do_quit,	NULL }};
299d522f475Smrg
300d522f475SmrgMenuEntry vtMenuEntries[] = {
301d522f475Smrg    { "scrollbar",	do_scrollbar,	NULL },
302d522f475Smrg    { "jumpscroll",	do_jumpscroll,	NULL },
303d522f475Smrg    { "reversevideo",	do_reversevideo, NULL },
304d522f475Smrg    { "autowrap",	do_autowrap,	NULL },
305d522f475Smrg    { "reversewrap",	do_reversewrap, NULL },
306d522f475Smrg    { "autolinefeed",	do_autolinefeed, NULL },
307d522f475Smrg    { "appcursor",	do_appcursor,	NULL },
308d522f475Smrg    { "appkeypad",	do_appkeypad,	NULL },
309d522f475Smrg    { "scrollkey",	do_scrollkey,	NULL },
310d522f475Smrg    { "scrollttyoutput",do_scrollttyoutput, NULL },
311d522f475Smrg    { "allow132",	do_allow132,	NULL },
312d522f475Smrg    { "keepSelection",	do_keepSelection, NULL },
313d522f475Smrg    { "selectToClipboard",do_selectClipboard, NULL },
314d522f475Smrg    { "visualbell",	do_visualbell,	NULL },
315d522f475Smrg    { "bellIsUrgent",	do_bellIsUrgent, NULL },
316d522f475Smrg    { "poponbell",	do_poponbell,	NULL },
317d522f475Smrg#if OPT_BLINK_CURS
318d522f475Smrg    { "cursorblink",	do_cursorblink,	NULL },
319d522f475Smrg#endif
320d522f475Smrg    { "titeInhibit",	do_titeInhibit,	NULL },
321d522f475Smrg#ifndef NO_ACTIVE_ICON
322d522f475Smrg    { "activeicon",	do_activeicon,	NULL },
323d522f475Smrg#endif /* NO_ACTIVE_ICON */
324d522f475Smrg    { "line1",		NULL,		NULL },
325d522f475Smrg    { "softreset",	do_softreset,	NULL },
326d522f475Smrg    { "hardreset",	do_hardreset,	NULL },
327d522f475Smrg    { "clearsavedlines",do_clearsavedlines, NULL },
328d522f475Smrg    { "line2",		NULL,		NULL },
329d522f475Smrg#if OPT_TEK4014
330d522f475Smrg    { "tekshow",	do_tekshow,	NULL },
331d522f475Smrg    { "tekmode",	do_tekmode,	NULL },
332d522f475Smrg    { "vthide",		do_vthide,	NULL },
333d522f475Smrg#endif
334d522f475Smrg    { "altscreen",	do_altscreen,	NULL },
335d522f475Smrg    };
336d522f475Smrg
337d522f475SmrgMenuEntry fontMenuEntries[] = {
338d522f475Smrg    { "fontdefault",	do_vtfont,	NULL },
339d522f475Smrg    { "font1",		do_vtfont,	NULL },
340d522f475Smrg    { "font2",		do_vtfont,	NULL },
341d522f475Smrg    { "font3",		do_vtfont,	NULL },
342d522f475Smrg    { "font4",		do_vtfont,	NULL },
343d522f475Smrg    { "font5",		do_vtfont,	NULL },
344d522f475Smrg    { "font6",		do_vtfont,	NULL },
345d522f475Smrg    /* this is after the last builtin font; the other entries are special */
346d522f475Smrg    { "fontescape",	do_vtfont,	NULL },
347d522f475Smrg    { "fontsel",	do_vtfont,	NULL },
348d522f475Smrg    /* down to here should match NMENUFONTS in ptyx.h */
349d522f475Smrg
350d522f475Smrg#if OPT_DEC_CHRSET || OPT_BOX_CHARS || OPT_DEC_SOFTFONT
351d522f475Smrg    { "line1",		NULL,		NULL },
352d522f475Smrg#if OPT_BOX_CHARS
353d522f475Smrg    { "font-linedrawing",do_font_boxchars,NULL },
354d522f475Smrg#endif
355d522f475Smrg#if OPT_DEC_CHRSET
356d522f475Smrg    { "font-doublesize",do_font_doublesize,NULL },
357d522f475Smrg#endif
358d522f475Smrg#if OPT_DEC_SOFTFONT
359d522f475Smrg    { "font-loadable",	do_font_loadable,NULL },
360d522f475Smrg#endif
361d522f475Smrg#endif /* toggles for DEC font extensions */
362d522f475Smrg
363d522f475Smrg#if OPT_RENDERFONT || OPT_WIDE_CHARS
364d522f475Smrg    { "line2",		NULL,		NULL },
365d522f475Smrg#if OPT_RENDERFONT
366d522f475Smrg    { "render-font",	do_font_renderfont,NULL },
367d522f475Smrg#endif
368d522f475Smrg#if OPT_WIDE_CHARS
369d522f475Smrg    { "utf8-mode",	do_font_utf8_mode,NULL },
370d522f475Smrg    { "utf8-title",	do_font_utf8_title,NULL },
371d522f475Smrg#endif
372d522f475Smrg#endif /* toggles for other font extensions */
373d522f475Smrg
374956cc18dSsnj#if OPT_ALLOW_XXX_OPS
375956cc18dSsnj    { "line3",		NULL,		NULL },
376956cc18dSsnj    { "allow-tcap-ops",	do_allowTcapOps,NULL },
377956cc18dSsnj    { "allow-font-ops",	do_allowFontOps,NULL },
378956cc18dSsnj    { "allow-title-ops",do_allowTitleOps,NULL },
379956cc18dSsnj    { "allow-window-ops",do_allowWindowOps,NULL },
380956cc18dSsnj#endif
381956cc18dSsnj
382d522f475Smrg    };
383d522f475Smrg
384d522f475Smrg#if OPT_TEK4014
385d522f475SmrgMenuEntry tekMenuEntries[] = {
386d522f475Smrg    { "tektextlarge",	do_tektextlarge, NULL },
387d522f475Smrg    { "tektext2",	do_tektext2,	NULL },
388d522f475Smrg    { "tektext3",	do_tektext3,	NULL },
389d522f475Smrg    { "tektextsmall",	do_tektextsmall, NULL },
390d522f475Smrg    { "line1",		NULL,		NULL },
391d522f475Smrg    { "tekpage",	do_tekpage,	NULL },
392d522f475Smrg    { "tekreset",	do_tekreset,	NULL },
393d522f475Smrg    { "tekcopy",	do_tekcopy,	NULL },
394d522f475Smrg    { "line2",		NULL,		NULL },
395d522f475Smrg    { "vtshow",		do_vtshow,	NULL },
396d522f475Smrg    { "vtmode",		do_vtmode,	NULL },
397d522f475Smrg    { "tekhide",	do_tekhide,	NULL }};
398d522f475Smrg#endif
399d522f475Smrg
400d522f475Smrgtypedef struct {
401d522f475Smrg    char *internal_name;
402d522f475Smrg    MenuEntry *entry_list;
403d522f475Smrg    Cardinal entry_len;
404d522f475Smrg} MenuHeader;
405d522f475Smrg
406d522f475Smrg    /* This table is ordered to correspond with MenuIndex */
407d522f475Smrgstatic MenuHeader menu_names[] = {
408d522f475Smrg    { "mainMenu", mainMenuEntries, XtNumber(mainMenuEntries) },
409d522f475Smrg    { "vtMenu",   vtMenuEntries,   XtNumber(vtMenuEntries)   },
410d522f475Smrg    { "fontMenu", fontMenuEntries, XtNumber(fontMenuEntries) },
411d522f475Smrg#if OPT_TEK4014
412d522f475Smrg    { "tekMenu",  tekMenuEntries,  XtNumber(tekMenuEntries)  },
413d522f475Smrg#endif
414d522f475Smrg    { 0,          0,               0 },
415d522f475Smrg};
416d522f475Smrg/* *INDENT-ON* */
417d522f475Smrg
418d522f475Smrg/*
419d522f475Smrg * FIXME:  These are global data rather than in the xterm widget because they
420d522f475Smrg * are initialized before the widget is created.
421d522f475Smrg */
422d522f475Smrgtypedef struct {
423d522f475Smrg    Widget b;			/* the toolbar's buttons */
424d522f475Smrg    Widget w;			/* the popup shell activated by the button */
425d522f475Smrg    Cardinal entries;
426d522f475Smrg} MenuList;
427d522f475Smrg
428d522f475Smrgstatic MenuList vt_shell[NUM_POPUP_MENUS];
429d522f475Smrg
430d522f475Smrg#if OPT_TEK4014 && OPT_TOOLBAR
431d522f475Smrgstatic MenuList tek_shell[NUM_POPUP_MENUS];
432d522f475Smrg#endif
433d522f475Smrg
434d522f475Smrgstatic String
435d522f475SmrgsetMenuLocale(Bool before, String substitute)
436d522f475Smrg{
437d522f475Smrg    String result;
438d522f475Smrg
439d522f475Smrg    result = setlocale(LC_CTYPE, substitute);
440d522f475Smrg    if (before) {
441d522f475Smrg	result = x_strdup(result);
442d522f475Smrg    } else {
443d522f475Smrg	result = 0;
444d522f475Smrg    }
445d522f475Smrg    return result;
446d522f475Smrg}
447d522f475Smrg
448d522f475Smrg/*
449d522f475Smrg * Returns a pointer to the MenuList entry that matches the popup menu.
450d522f475Smrg */
451d522f475Smrgstatic MenuList *
452d522f475Smrgselect_menu(Widget w GCC_UNUSED, MenuIndex num)
453d522f475Smrg{
454d522f475Smrg#if OPT_TEK4014 && OPT_TOOLBAR
455d522f475Smrg    while (w != 0) {
456d522f475Smrg	if (w == tekshellwidget) {
457d522f475Smrg	    return &tek_shell[num];
458d522f475Smrg	}
459d522f475Smrg	w = XtParent(w);
460d522f475Smrg    }
461d522f475Smrg#endif
462d522f475Smrg    return &vt_shell[num];
463d522f475Smrg}
464d522f475Smrg
465d522f475Smrg/*
466d522f475Smrg * Returns a pointer to the given popup menu shell
467d522f475Smrg */
468d522f475Smrgstatic Widget
469d522f475Smrgobtain_menu(Widget w, MenuIndex num)
470d522f475Smrg{
471d522f475Smrg    return select_menu(w, num)->w;
472d522f475Smrg}
473d522f475Smrg
474d522f475Smrg/*
475d522f475Smrg * Returns the number of entries in the given popup menu shell
476d522f475Smrg */
477d522f475Smrgstatic Cardinal
478d522f475Smrgsizeof_menu(Widget w, MenuIndex num)
479d522f475Smrg{
480d522f475Smrg    return select_menu(w, num)->entries;
481d522f475Smrg}
482d522f475Smrg
483d522f475Smrg/*
484d522f475Smrg * create_menu - create a popup shell and stuff the menu into it.
485d522f475Smrg */
486d522f475Smrg
487d522f475Smrgstatic Widget
488d522f475Smrgcreate_menu(Widget w, XtermWidget xtw, MenuIndex num)
489d522f475Smrg{
490d522f475Smrg    static XtCallbackRec cb[2] =
491d522f475Smrg    {
492d522f475Smrg	{NULL, NULL},
493d522f475Smrg	{NULL, NULL}};
494d522f475Smrg    static Arg arg =
495d522f475Smrg    {XtNcallback, (XtArgVal) cb};
496d522f475Smrg
497d522f475Smrg    TScreen *screen = &xtw->screen;
498d522f475Smrg    MenuHeader *data = &menu_names[num];
499d522f475Smrg    MenuList *list = select_menu(w, num);
500d522f475Smrg    struct _MenuEntry *entries = data->entry_list;
501956cc18dSsnj    Cardinal nentries = data->entry_len;
502d522f475Smrg#if !OPT_TOOLBAR
503d522f475Smrg    String saveLocale;
504d522f475Smrg#endif
505d522f475Smrg
506d522f475Smrg    if (screen->menu_item_bitmap == None) {
507d522f475Smrg	/*
508d522f475Smrg	 * we really want to do these dynamically
509d522f475Smrg	 */
510d522f475Smrg#define check_width 9
511d522f475Smrg#define check_height 8
512d522f475Smrg	static unsigned char check_bits[] =
513d522f475Smrg	{
514d522f475Smrg	    0x00, 0x01, 0x80, 0x01, 0xc0, 0x00, 0x60, 0x00,
515d522f475Smrg	    0x31, 0x00, 0x1b, 0x00, 0x0e, 0x00, 0x04, 0x00
516d522f475Smrg	};
517d522f475Smrg
518d522f475Smrg	screen->menu_item_bitmap =
519d522f475Smrg	    XCreateBitmapFromData(XtDisplay(xtw),
520d522f475Smrg				  RootWindowOfScreen(XtScreen(xtw)),
521d522f475Smrg				  (char *) check_bits, check_width, check_height);
522d522f475Smrg    }
523d522f475Smrg#if !OPT_TOOLBAR
524d522f475Smrg    saveLocale = setMenuLocale(True, resource.menuLocale);
525d522f475Smrg    list->w = XtCreatePopupShell(data->internal_name,
526d522f475Smrg				 simpleMenuWidgetClass,
527d522f475Smrg				 toplevel,
528d522f475Smrg				 NULL, 0);
529d522f475Smrg#endif
530d522f475Smrg    if (list->w != 0) {
531d522f475Smrg	list->entries = nentries;
532d522f475Smrg
533d522f475Smrg	for (; nentries > 0; nentries--, entries++) {
534d522f475Smrg	    cb[0].callback = (XtCallbackProc) entries->function;
535d522f475Smrg	    cb[0].closure = (caddr_t) entries->name;
536d522f475Smrg	    entries->widget = XtCreateManagedWidget(entries->name,
537d522f475Smrg						    (entries->function
538d522f475Smrg						     ? smeBSBObjectClass
539d522f475Smrg						     : smeLineObjectClass),
540d522f475Smrg						    list->w,
541d522f475Smrg						    &arg, (Cardinal) 1);
542d522f475Smrg	}
543d522f475Smrg    }
544d522f475Smrg#if !OPT_TOOLBAR
545d522f475Smrg    (void) setMenuLocale(False, saveLocale);
546d522f475Smrg#endif
547d522f475Smrg
548d522f475Smrg    /* do not realize at this point */
549d522f475Smrg    return list->w;
550d522f475Smrg}
551d522f475Smrg
552d522f475Smrgstatic MenuIndex
553d522f475SmrgindexOfMenu(String menuName)
554d522f475Smrg{
555d522f475Smrg    MenuIndex me;
556d522f475Smrg    switch (*menuName) {
557d522f475Smrg    case 'm':
558d522f475Smrg	me = mainMenu;
559d522f475Smrg	break;
560d522f475Smrg    case 'v':
561d522f475Smrg	me = vtMenu;
562d522f475Smrg	break;
563d522f475Smrg    case 'f':
564d522f475Smrg	me = fontMenu;
565d522f475Smrg	break;
566d522f475Smrg#if OPT_TEK4014
567d522f475Smrg    case 't':
568d522f475Smrg	me = tekMenu;
569d522f475Smrg	break;
570d522f475Smrg#endif
571d522f475Smrg    default:
572d522f475Smrg	me = noMenu;
573d522f475Smrg    }
574d522f475Smrg    return (me);
575d522f475Smrg}
576d522f475Smrg
577d522f475Smrg/* ARGSUSED */
578d522f475Smrgstatic Bool
579d522f475Smrgdomenu(Widget w,
580d522f475Smrg       XEvent * event GCC_UNUSED,
581d522f475Smrg       String * params,		/* mainMenu, vtMenu, or tekMenu */
582d522f475Smrg       Cardinal *param_count)	/* 0 or 1 */
583d522f475Smrg{
584d522f475Smrg    TScreen *screen = TScreenOf(term);
585d522f475Smrg    MenuIndex me;
586d522f475Smrg    Bool created = False;
587d522f475Smrg    Widget mw;
588d522f475Smrg
589d522f475Smrg    if (*param_count != 1) {
590d522f475Smrg	Bell(XkbBI_MinorError, 0);
591d522f475Smrg	return False;
592d522f475Smrg    }
593d522f475Smrg
594d522f475Smrg    if ((me = indexOfMenu(params[0])) == noMenu) {
595d522f475Smrg	Bell(XkbBI_MinorError, 0);
596d522f475Smrg	return False;
597d522f475Smrg    }
598d522f475Smrg
599d522f475Smrg    if ((mw = obtain_menu(w, me)) == 0
600d522f475Smrg	|| sizeof_menu(w, me) == 0) {
601d522f475Smrg	mw = create_menu(w, term, me);
602d522f475Smrg	created = (mw != 0);
603d522f475Smrg    }
604d522f475Smrg    if (mw == 0)
605d522f475Smrg	return False;
606d522f475Smrg
607d522f475Smrg    TRACE(("domenu(%s) %s\n", params[0], created ? "create" : "update"));
608d522f475Smrg    switch (me) {
609d522f475Smrg    case mainMenu:
610d522f475Smrg	if (created) {
611d522f475Smrg	    update_toolbar();
612d522f475Smrg	    update_securekbd();
613d522f475Smrg	    update_allowsends();
614d522f475Smrg	    update_logging();
615d522f475Smrg	    update_print_redir();
616d522f475Smrg	    update_8bit_control();
617d522f475Smrg	    update_decbkm();
618d522f475Smrg	    update_num_lock();
619d522f475Smrg	    update_alt_esc();
620d522f475Smrg	    update_meta_esc();
621d522f475Smrg	    update_delete_del();
622d522f475Smrg	    update_keyboard_type();
623d522f475Smrg#if OPT_NUM_LOCK
624d522f475Smrg	    if (!screen->alt_is_not_meta) {
625d522f475Smrg		SetItemSensitivity(mainMenuEntries[mainMenu_alt_esc].widget,
626d522f475Smrg				   False);
627d522f475Smrg	    }
628d522f475Smrg#endif
629956cc18dSsnj	    if (!xtermHasPrinter(term)) {
630d522f475Smrg		SetItemSensitivity(mainMenuEntries[mainMenu_print].widget,
631d522f475Smrg				   False);
632d522f475Smrg		SetItemSensitivity(mainMenuEntries[mainMenu_print_redir].widget,
633d522f475Smrg				   False);
634d522f475Smrg	    }
635d522f475Smrg	    if (screen->terminal_id < 200) {
636d522f475Smrg		SetItemSensitivity(
637d522f475Smrg				      mainMenuEntries[mainMenu_8bit_ctrl].widget,
638d522f475Smrg				      False);
639d522f475Smrg	    }
640d522f475Smrg#if !defined(SIGTSTP)
641d522f475Smrg	    SetItemSensitivity(
642d522f475Smrg				  mainMenuEntries[mainMenu_suspend].widget, False);
643d522f475Smrg#endif
644d522f475Smrg#if !defined(SIGCONT)
645d522f475Smrg	    SetItemSensitivity(
646d522f475Smrg				  mainMenuEntries[mainMenu_continue].widget, False);
647d522f475Smrg#endif
648d522f475Smrg#ifdef ALLOWLOGGING
649d522f475Smrg	    if (screen->inhibit & I_LOG) {
650d522f475Smrg		SetItemSensitivity(
651d522f475Smrg				      mainMenuEntries[mainMenu_logging].widget, False);
652d522f475Smrg	    }
653d522f475Smrg#endif
654d522f475Smrg	    if (screen->inhibit & I_SIGNAL) {
655d522f475Smrg		int n;
656d522f475Smrg		for (n = (int) mainMenu_suspend; n <= (int) mainMenu_quit; ++n) {
657d522f475Smrg		    SetItemSensitivity(mainMenuEntries[n].widget, False);
658d522f475Smrg		}
659d522f475Smrg	    }
660d522f475Smrg	}
661d522f475Smrg	break;
662d522f475Smrg
663d522f475Smrg    case vtMenu:
664d522f475Smrg	if (created) {
665d522f475Smrg	    update_scrollbar();
666d522f475Smrg	    update_jumpscroll();
667d522f475Smrg	    update_reversevideo();
668d522f475Smrg	    update_autowrap();
669d522f475Smrg	    update_reversewrap();
670d522f475Smrg	    update_autolinefeed();
671d522f475Smrg	    update_appcursor();
672d522f475Smrg	    update_appkeypad();
673d522f475Smrg	    update_scrollkey();
674d522f475Smrg	    update_scrollttyoutput();
675d522f475Smrg	    update_allow132();
676d522f475Smrg	    update_cursesemul();
677d522f475Smrg	    update_keepSelection();
678d522f475Smrg	    update_selectToClipboard();
679d522f475Smrg	    update_visualbell();
680d522f475Smrg	    update_poponbell();
681d522f475Smrg	    update_bellIsUrgent();
682d522f475Smrg	    update_cursorblink();
683d522f475Smrg	    update_altscreen();
684d522f475Smrg	    update_titeInhibit();
685d522f475Smrg#ifndef NO_ACTIVE_ICON
686d522f475Smrg	    if (!screen->fnt_icon.fs || !screen->iconVwin.window) {
687d522f475Smrg		SetItemSensitivity(
688d522f475Smrg				      vtMenuEntries[vtMenu_activeicon].widget,
689d522f475Smrg				      False);
690d522f475Smrg	    } else
691d522f475Smrg		update_activeicon();
692d522f475Smrg#endif /* NO_ACTIVE_ICON */
693d522f475Smrg#if OPT_TEK4014
694d522f475Smrg	    if (screen->inhibit & I_TEK) {
695d522f475Smrg		int n;
696d522f475Smrg		for (n = (int) vtMenu_tekshow; n <= (int) vtMenu_vthide; ++n) {
697d522f475Smrg		    SetItemSensitivity(vtMenuEntries[n].widget, False);
698d522f475Smrg		}
699d522f475Smrg	    }
700d522f475Smrg#endif
701d522f475Smrg	}
702d522f475Smrg	break;
703d522f475Smrg
704d522f475Smrg    case fontMenu:
705d522f475Smrg	if (created) {
706d522f475Smrg	    set_menu_font(True);
707d522f475Smrg	    SetItemSensitivity(
708d522f475Smrg				  fontMenuEntries[fontMenu_fontescape].widget,
709d522f475Smrg				  (screen->menu_font_names[fontMenu_fontescape][fNorm]
710d522f475Smrg				   ? True : False));
711d522f475Smrg#if OPT_BOX_CHARS
712d522f475Smrg	    update_font_boxchars();
713d522f475Smrg	    SetItemSensitivity(
714d522f475Smrg				  fontMenuEntries[fontMenu_font_boxchars].widget,
715d522f475Smrg				  True);
716d522f475Smrg#endif
717d522f475Smrg#if OPT_DEC_SOFTFONT		/* FIXME: not implemented */
718d522f475Smrg	    update_font_loadable();
719d522f475Smrg	    SetItemSensitivity(
720d522f475Smrg				  fontMenuEntries[fontMenu_font_loadable].widget,
721d522f475Smrg				  False);
722d522f475Smrg#endif
723d522f475Smrg#if OPT_DEC_CHRSET
724d522f475Smrg	    update_font_doublesize();
725d522f475Smrg	    if (term->screen.cache_doublesize == 0)
726d522f475Smrg		SetItemSensitivity(
727d522f475Smrg				      fontMenuEntries[fontMenu_font_doublesize].widget,
728d522f475Smrg				      False);
729d522f475Smrg#endif
730d522f475Smrg#if OPT_RENDERFONT
731d522f475Smrg	    update_font_renderfont();
732d522f475Smrg	    if (term->misc.face_name == 0) {
733d522f475Smrg		SetItemSensitivity(
734d522f475Smrg				      fontMenuEntries[fontMenu_render_font].widget,
735d522f475Smrg				      False);
736d522f475Smrg	    }
737d522f475Smrg#endif
738d522f475Smrg#if OPT_WIDE_CHARS
739d522f475Smrg	    update_font_utf8_mode();
740d522f475Smrg	    update_font_utf8_title();
741956cc18dSsnj#endif
742956cc18dSsnj#if OPT_ALLOW_XXX_OPS
743956cc18dSsnj	    update_menu_allowTcapOps();
744956cc18dSsnj	    update_menu_allowFontOps();
745956cc18dSsnj	    update_menu_allowTitleOps();
746956cc18dSsnj	    update_menu_allowWindowOps();
747956cc18dSsnj	    enable_allow_xxx_ops(!(screen->allowSendEvents));
748d522f475Smrg#endif
749d522f475Smrg	}
750d522f475Smrg	FindFontSelection(term, NULL, True);
751d522f475Smrg	SetItemSensitivity(
752d522f475Smrg			      fontMenuEntries[fontMenu_fontsel].widget,
753d522f475Smrg			      (screen->menu_font_names[fontMenu_fontsel]
754d522f475Smrg			       ? True : False));
755d522f475Smrg	break;
756d522f475Smrg
757d522f475Smrg#if OPT_TEK4014
758d522f475Smrg    case tekMenu:
759d522f475Smrg	if (created && tekWidget) {
760d522f475Smrg	    set_tekfont_menu_item(tekWidget->screen.cur.fontsize, True);
761d522f475Smrg	    update_vtshow();
762d522f475Smrg	}
763d522f475Smrg	break;
764d522f475Smrg#endif
765d522f475Smrg    case noMenu:
766d522f475Smrg    default:
767d522f475Smrg	break;
768d522f475Smrg    }
769d522f475Smrg
770d522f475Smrg    return True;
771d522f475Smrg}
772d522f475Smrg
773d522f475Smrg/*
774d522f475Smrg * public interfaces
775d522f475Smrg */
776d522f475Smrg
777d522f475Smrgvoid
778d522f475SmrgHandleCreateMenu(Widget w,
779d522f475Smrg		 XEvent * event,
780d522f475Smrg		 String * params,	/* mainMenu, vtMenu, or tekMenu */
781d522f475Smrg		 Cardinal *param_count)		/* 0 or 1 */
782d522f475Smrg{
783d522f475Smrg    TRACE(("HandleCreateMenu\n"));
784d522f475Smrg    (void) domenu(w, event, params, param_count);
785d522f475Smrg}
786d522f475Smrg
787d522f475Smrgvoid
788d522f475SmrgHandlePopupMenu(Widget w,
789d522f475Smrg		XEvent * event,
790d522f475Smrg		String * params,	/* mainMenu, vtMenu, or tekMenu */
791d522f475Smrg		Cardinal *param_count)	/* 0 or 1 */
792d522f475Smrg{
793d522f475Smrg    TRACE(("HandlePopupMenu\n"));
794d522f475Smrg    if (domenu(w, event, params, param_count)) {
795d522f475Smrg#if OPT_TOOLBAR
796d522f475Smrg	w = select_menu(w, mainMenu)->w;
797d522f475Smrg#endif
798d522f475Smrg	XtCallActionProc(w, "XawPositionSimpleMenu", event, params, 1);
799d522f475Smrg	XtCallActionProc(w, "MenuPopup", event, params, 1);
800d522f475Smrg    }
801d522f475Smrg}
802d522f475Smrg
803d522f475Smrg/*
804d522f475Smrg * private interfaces - keep out!
805d522f475Smrg */
806d522f475Smrg
807d522f475Smrg/* ARGSUSED */
808d522f475Smrgstatic void
809d522f475Smrghandle_send_signal(Widget gw GCC_UNUSED, int sig)
810d522f475Smrg{
811d522f475Smrg#ifndef VMS
812d522f475Smrg    TScreen *screen = TScreenOf(term);
813d522f475Smrg
814d522f475Smrg    if (hold_screen > 1)
815d522f475Smrg	hold_screen = 0;
816d522f475Smrg    if (screen->pid > 1)
817d522f475Smrg	kill_process_group(screen->pid, sig);
818d522f475Smrg#endif
819d522f475Smrg}
820d522f475Smrg
821d522f475Smrg/*
822d522f475Smrg * action routines
823d522f475Smrg */
824d522f475Smrg
825d522f475Smrgstatic void
826d522f475Smrgdo_securekbd(Widget gw GCC_UNUSED,
827d522f475Smrg	     XtPointer closure GCC_UNUSED,
828d522f475Smrg	     XtPointer data GCC_UNUSED)
829d522f475Smrg{
830d522f475Smrg    TScreen *screen = TScreenOf(term);
831d522f475Smrg    Time now = CurrentTime;	/* XXX - wrong */
832d522f475Smrg
833d522f475Smrg    if (screen->grabbedKbd) {
834d522f475Smrg	XUngrabKeyboard(screen->display, now);
835d522f475Smrg	ReverseVideo(term);
836d522f475Smrg	screen->grabbedKbd = False;
837d522f475Smrg    } else {
838d522f475Smrg	if (XGrabKeyboard(screen->display, XtWindow(CURRENT_EMU()),
839d522f475Smrg			  True, GrabModeAsync, GrabModeAsync, now)
840d522f475Smrg	    != GrabSuccess) {
841d522f475Smrg	    Bell(XkbBI_MinorError, 100);
842d522f475Smrg	} else {
843d522f475Smrg	    ReverseVideo(term);
844d522f475Smrg	    screen->grabbedKbd = True;
845d522f475Smrg	}
846d522f475Smrg    }
847d522f475Smrg    update_securekbd();
848d522f475Smrg}
849d522f475Smrg
850d522f475Smrg/* ARGSUSED */
851d522f475Smrgvoid
852d522f475SmrgHandleSecure(Widget w GCC_UNUSED,
853d522f475Smrg	     XEvent * event GCC_UNUSED,		/* unused */
854d522f475Smrg	     String * params GCC_UNUSED,	/* [0] = volume */
855d522f475Smrg	     Cardinal *param_count GCC_UNUSED)	/* 0 or 1 */
856d522f475Smrg{
857d522f475Smrg#if 0
858d522f475Smrg    Time ev_time = CurrentTime;
859d522f475Smrg
860d522f475Smrg    if ((event->xany.type == KeyPress) ||
861d522f475Smrg	(event->xany.type == KeyRelease))
862d522f475Smrg	ev_time = event->xkey.time;
863d522f475Smrg    else if ((event->xany.type == ButtonPress) ||
864d522f475Smrg	     (event->xany.type == ButtonRelease))
865d522f475Smrg	ev_time = event->xbutton.time;
866d522f475Smrg#endif
867d522f475Smrg    do_securekbd(vt_shell[mainMenu].w, (XtPointer) 0, (XtPointer) 0);
868d522f475Smrg}
869d522f475Smrg
870d522f475Smrgstatic void
871d522f475Smrgdo_allowsends(Widget gw GCC_UNUSED,
872d522f475Smrg	      XtPointer closure GCC_UNUSED,
873d522f475Smrg	      XtPointer data GCC_UNUSED)
874d522f475Smrg{
875d522f475Smrg    TScreen *screen = TScreenOf(term);
876d522f475Smrg
877956cc18dSsnj    ToggleFlag(screen->allowSendEvents);
878d522f475Smrg    update_allowsends();
879956cc18dSsnj#if OPT_ALLOW_XXX_OPS
880956cc18dSsnj    enable_allow_xxx_ops(!(screen->allowSendEvents));
881956cc18dSsnj#endif
882d522f475Smrg}
883d522f475Smrg
884d522f475Smrgstatic void
885d522f475Smrgdo_visualbell(Widget gw GCC_UNUSED,
886d522f475Smrg	      XtPointer closure GCC_UNUSED,
887d522f475Smrg	      XtPointer data GCC_UNUSED)
888d522f475Smrg{
889d522f475Smrg    TScreen *screen = TScreenOf(term);
890d522f475Smrg
891956cc18dSsnj    ToggleFlag(screen->visualbell);
892d522f475Smrg    update_visualbell();
893d522f475Smrg}
894d522f475Smrg
895d522f475Smrgstatic void
896d522f475Smrgdo_bellIsUrgent(Widget gw GCC_UNUSED,
897d522f475Smrg		XtPointer closure GCC_UNUSED,
898d522f475Smrg		XtPointer data GCC_UNUSED)
899d522f475Smrg{
900d522f475Smrg    TScreen *screen = TScreenOf(term);
901d522f475Smrg
902956cc18dSsnj    ToggleFlag(screen->bellIsUrgent);
903d522f475Smrg    update_bellIsUrgent();
904d522f475Smrg}
905d522f475Smrg
906d522f475Smrgstatic void
907d522f475Smrgdo_poponbell(Widget gw GCC_UNUSED,
908d522f475Smrg	     XtPointer closure GCC_UNUSED,
909d522f475Smrg	     XtPointer data GCC_UNUSED)
910d522f475Smrg{
911d522f475Smrg    TScreen *screen = TScreenOf(term);
912d522f475Smrg
913956cc18dSsnj    ToggleFlag(screen->poponbell);
914d522f475Smrg    update_poponbell();
915d522f475Smrg}
916d522f475Smrg
917d522f475Smrg#ifdef ALLOWLOGGING
918d522f475Smrgstatic void
919d522f475Smrgdo_logging(Widget gw GCC_UNUSED,
920d522f475Smrg	   XtPointer closure GCC_UNUSED,
921d522f475Smrg	   XtPointer data GCC_UNUSED)
922d522f475Smrg{
923d522f475Smrg    TScreen *screen = TScreenOf(term);
924d522f475Smrg
925d522f475Smrg    if (screen->logging) {
926d522f475Smrg	CloseLog(screen);
927d522f475Smrg    } else {
928d522f475Smrg	StartLog(screen);
929d522f475Smrg    }
930d522f475Smrg    /* update_logging done by CloseLog and StartLog */
931d522f475Smrg}
932d522f475Smrg#endif
933d522f475Smrg
934d522f475Smrgstatic void
935d522f475Smrgdo_print(Widget gw GCC_UNUSED,
936d522f475Smrg	 XtPointer closure GCC_UNUSED,
937d522f475Smrg	 XtPointer data GCC_UNUSED)
938d522f475Smrg{
939956cc18dSsnj    xtermPrintScreen(term, True);
940956cc18dSsnj}
941956cc18dSsnj
942956cc18dSsnjstatic void
943956cc18dSsnjdo_print_everything(Widget gw GCC_UNUSED,
944956cc18dSsnj		    XtPointer closure GCC_UNUSED,
945956cc18dSsnj		    XtPointer data GCC_UNUSED)
946956cc18dSsnj{
947956cc18dSsnj    xtermPrintEverything(term);
948d522f475Smrg}
949d522f475Smrg
950d522f475Smrgstatic void
951d522f475Smrgdo_print_redir(Widget gw GCC_UNUSED,
952d522f475Smrg	       XtPointer closure GCC_UNUSED,
953d522f475Smrg	       XtPointer data GCC_UNUSED)
954d522f475Smrg{
955956cc18dSsnj    setPrinterControlMode(term, term->screen.printer_controlmode ? 0 : 2);
956d522f475Smrg}
957d522f475Smrg
958d522f475Smrgstatic void
959d522f475Smrgdo_redraw(Widget gw GCC_UNUSED,
960d522f475Smrg	  XtPointer closure GCC_UNUSED,
961d522f475Smrg	  XtPointer data GCC_UNUSED)
962d522f475Smrg{
963d522f475Smrg    Redraw();
964d522f475Smrg}
965d522f475Smrg
966d522f475Smrgvoid
967d522f475Smrgshow_8bit_control(Bool value)
968d522f475Smrg{
969d522f475Smrg    if (term->screen.control_eight_bits != value) {
970956cc18dSsnj	term->screen.control_eight_bits = (Boolean) value;
971d522f475Smrg	update_8bit_control();
972d522f475Smrg    }
973d522f475Smrg}
974d522f475Smrg
975d522f475Smrgstatic void
976d522f475Smrgdo_8bit_control(Widget gw GCC_UNUSED,
977d522f475Smrg		XtPointer closure GCC_UNUSED,
978d522f475Smrg		XtPointer data GCC_UNUSED)
979d522f475Smrg{
980d522f475Smrg    show_8bit_control(!term->screen.control_eight_bits);
981d522f475Smrg}
982d522f475Smrg
983d522f475Smrgstatic void
984d522f475Smrgdo_backarrow(Widget gw GCC_UNUSED,
985d522f475Smrg	     XtPointer closure GCC_UNUSED,
986d522f475Smrg	     XtPointer data GCC_UNUSED)
987d522f475Smrg{
988d522f475Smrg    term->keyboard.flags ^= MODE_DECBKM;
989d522f475Smrg    update_decbkm();
990d522f475Smrg}
991d522f475Smrg
992d522f475Smrg#if OPT_NUM_LOCK
993d522f475Smrgstatic void
994d522f475Smrgdo_num_lock(Widget gw GCC_UNUSED,
995d522f475Smrg	    XtPointer closure GCC_UNUSED,
996d522f475Smrg	    XtPointer data GCC_UNUSED)
997d522f475Smrg{
998956cc18dSsnj    ToggleFlag(term->misc.real_NumLock);
999d522f475Smrg    update_num_lock();
1000d522f475Smrg}
1001d522f475Smrg
1002d522f475Smrgstatic void
1003d522f475Smrgdo_alt_esc(Widget gw GCC_UNUSED,
1004d522f475Smrg	   XtPointer closure GCC_UNUSED,
1005d522f475Smrg	   XtPointer data GCC_UNUSED)
1006d522f475Smrg{
1007956cc18dSsnj    ToggleFlag(term->screen.alt_sends_esc);
1008d522f475Smrg    update_alt_esc();
1009d522f475Smrg}
1010d522f475Smrg
1011d522f475Smrgstatic void
1012d522f475Smrgdo_meta_esc(Widget gw GCC_UNUSED,
1013d522f475Smrg	    XtPointer closure GCC_UNUSED,
1014d522f475Smrg	    XtPointer data GCC_UNUSED)
1015d522f475Smrg{
1016956cc18dSsnj    ToggleFlag(term->screen.meta_sends_esc);
1017d522f475Smrg    update_meta_esc();
1018d522f475Smrg}
1019d522f475Smrg#endif
1020d522f475Smrg
1021d522f475Smrgstatic void
1022d522f475Smrgdo_delete_del(Widget gw GCC_UNUSED,
1023d522f475Smrg	      XtPointer closure GCC_UNUSED,
1024d522f475Smrg	      XtPointer data GCC_UNUSED)
1025d522f475Smrg{
1026d522f475Smrg    if (xtermDeleteIsDEL(term))
1027d522f475Smrg	term->screen.delete_is_del = False;
1028d522f475Smrg    else
1029d522f475Smrg	term->screen.delete_is_del = True;
1030d522f475Smrg    update_delete_del();
1031d522f475Smrg}
1032d522f475Smrg
1033d522f475Smrgstatic void
1034d522f475Smrgdo_old_fkeys(Widget gw GCC_UNUSED,
1035d522f475Smrg	     XtPointer closure GCC_UNUSED,
1036d522f475Smrg	     XtPointer data GCC_UNUSED)
1037d522f475Smrg{
1038d522f475Smrg    toggle_keyboard_type(term, keyboardIsLegacy);
1039d522f475Smrg}
1040d522f475Smrg
1041d522f475Smrg#if OPT_HP_FUNC_KEYS
1042d522f475Smrgstatic void
1043d522f475Smrgdo_hp_fkeys(Widget gw GCC_UNUSED,
1044d522f475Smrg	    XtPointer closure GCC_UNUSED,
1045d522f475Smrg	    XtPointer data GCC_UNUSED)
1046d522f475Smrg{
1047d522f475Smrg    toggle_keyboard_type(term, keyboardIsHP);
1048d522f475Smrg}
1049d522f475Smrg#endif
1050d522f475Smrg
1051d522f475Smrg#if OPT_SCO_FUNC_KEYS
1052d522f475Smrgstatic void
1053d522f475Smrgdo_sco_fkeys(Widget gw GCC_UNUSED,
1054d522f475Smrg	     XtPointer closure GCC_UNUSED,
1055d522f475Smrg	     XtPointer data GCC_UNUSED)
1056d522f475Smrg{
1057d522f475Smrg    toggle_keyboard_type(term, keyboardIsSCO);
1058d522f475Smrg}
1059d522f475Smrg#endif
1060d522f475Smrg
1061d522f475Smrg#if OPT_SUN_FUNC_KEYS
1062d522f475Smrgstatic void
1063d522f475Smrgdo_sun_fkeys(Widget gw GCC_UNUSED,
1064d522f475Smrg	     XtPointer closure GCC_UNUSED,
1065d522f475Smrg	     XtPointer data GCC_UNUSED)
1066d522f475Smrg{
1067d522f475Smrg    toggle_keyboard_type(term, keyboardIsSun);
1068d522f475Smrg}
1069d522f475Smrg#endif
1070d522f475Smrg
1071d522f475Smrg#if OPT_SUNPC_KBD
1072d522f475Smrg/*
1073d522f475Smrg * This really means "Sun/PC keyboard emulating VT220".
1074d522f475Smrg */
1075d522f475Smrgstatic void
1076d522f475Smrgdo_sun_kbd(Widget gw GCC_UNUSED,
1077d522f475Smrg	   XtPointer closure GCC_UNUSED,
1078d522f475Smrg	   XtPointer data GCC_UNUSED)
1079d522f475Smrg{
1080d522f475Smrg    toggle_keyboard_type(term, keyboardIsVT220);
1081d522f475Smrg}
1082d522f475Smrg#endif
1083d522f475Smrg
1084d522f475Smrg#if OPT_TCAP_FKEYS
1085d522f475Smrgstatic void
1086d522f475Smrgdo_tcap_fkeys(Widget gw GCC_UNUSED,
1087d522f475Smrg	      XtPointer closure GCC_UNUSED,
1088d522f475Smrg	      XtPointer data GCC_UNUSED)
1089d522f475Smrg{
1090d522f475Smrg    toggle_keyboard_type(term, keyboardIsTermcap);
1091d522f475Smrg}
1092d522f475Smrg#endif
1093d522f475Smrg
1094d522f475Smrg/*
1095d522f475Smrg * The following cases use the pid instead of the process group so that we
1096d522f475Smrg * don't get hosed by programs that change their process group
1097d522f475Smrg */
1098d522f475Smrg
1099d522f475Smrg/* ARGSUSED */
1100d522f475Smrgstatic void
1101d522f475Smrgdo_suspend(Widget gw,
1102d522f475Smrg	   XtPointer closure GCC_UNUSED,
1103d522f475Smrg	   XtPointer data GCC_UNUSED)
1104d522f475Smrg{
1105d522f475Smrg#if defined(SIGTSTP)
1106d522f475Smrg    handle_send_signal(gw, SIGTSTP);
1107d522f475Smrg#endif
1108d522f475Smrg}
1109d522f475Smrg
1110d522f475Smrg/* ARGSUSED */
1111d522f475Smrgstatic void
1112d522f475Smrgdo_continue(Widget gw,
1113d522f475Smrg	    XtPointer closure GCC_UNUSED,
1114d522f475Smrg	    XtPointer data GCC_UNUSED)
1115d522f475Smrg{
1116d522f475Smrg#if defined(SIGCONT)
1117d522f475Smrg    handle_send_signal(gw, SIGCONT);
1118d522f475Smrg#endif
1119d522f475Smrg}
1120d522f475Smrg
1121d522f475Smrg/* ARGSUSED */
1122d522f475Smrgstatic void
1123d522f475Smrgdo_interrupt(Widget gw,
1124d522f475Smrg	     XtPointer closure GCC_UNUSED,
1125d522f475Smrg	     XtPointer data GCC_UNUSED)
1126d522f475Smrg{
1127d522f475Smrg    handle_send_signal(gw, SIGINT);
1128d522f475Smrg}
1129d522f475Smrg
1130d522f475Smrg/* ARGSUSED */
1131d522f475Smrgvoid
1132d522f475Smrgdo_hangup(Widget gw,
1133d522f475Smrg	  XtPointer closure GCC_UNUSED,
1134d522f475Smrg	  XtPointer data GCC_UNUSED)
1135d522f475Smrg{
1136d522f475Smrg    handle_send_signal(gw, SIGHUP);
1137d522f475Smrg}
1138d522f475Smrg
1139d522f475Smrg/* ARGSUSED */
1140d522f475Smrgstatic void
1141d522f475Smrgdo_terminate(Widget gw,
1142d522f475Smrg	     XtPointer closure GCC_UNUSED,
1143d522f475Smrg	     XtPointer data GCC_UNUSED)
1144d522f475Smrg{
1145d522f475Smrg    handle_send_signal(gw, SIGTERM);
1146d522f475Smrg}
1147d522f475Smrg
1148d522f475Smrg/* ARGSUSED */
1149d522f475Smrgstatic void
1150d522f475Smrgdo_kill(Widget gw,
1151d522f475Smrg	XtPointer closure GCC_UNUSED,
1152d522f475Smrg	XtPointer data GCC_UNUSED)
1153d522f475Smrg{
1154d522f475Smrg    handle_send_signal(gw, SIGKILL);
1155d522f475Smrg}
1156d522f475Smrg
1157d522f475Smrgstatic void
1158d522f475Smrgdo_quit(Widget gw GCC_UNUSED,
1159d522f475Smrg	XtPointer closure GCC_UNUSED,
1160d522f475Smrg	XtPointer data GCC_UNUSED)
1161d522f475Smrg{
1162d522f475Smrg    Cleanup(SIGHUP);
1163d522f475Smrg}
1164d522f475Smrg
1165d522f475Smrg/*
1166d522f475Smrg * vt menu callbacks
1167d522f475Smrg */
1168d522f475Smrg
1169d522f475Smrgstatic void
1170d522f475Smrgdo_scrollbar(Widget gw GCC_UNUSED,
1171d522f475Smrg	     XtPointer closure GCC_UNUSED,
1172d522f475Smrg	     XtPointer data GCC_UNUSED)
1173d522f475Smrg{
1174d522f475Smrg    ToggleScrollBar(term);
1175d522f475Smrg}
1176d522f475Smrg
1177d522f475Smrgstatic void
1178d522f475Smrgdo_jumpscroll(Widget gw GCC_UNUSED,
1179d522f475Smrg	      XtPointer closure GCC_UNUSED,
1180d522f475Smrg	      XtPointer data GCC_UNUSED)
1181d522f475Smrg{
1182d522f475Smrg    TScreen *screen = TScreenOf(term);
1183d522f475Smrg
1184d522f475Smrg    term->flags ^= SMOOTHSCROLL;
1185d522f475Smrg    if (term->flags & SMOOTHSCROLL) {
1186d522f475Smrg	screen->jumpscroll = False;
1187d522f475Smrg	if (screen->scroll_amt)
1188d522f475Smrg	    FlushScroll(term);
1189d522f475Smrg    } else {
1190d522f475Smrg	screen->jumpscroll = True;
1191d522f475Smrg    }
1192d522f475Smrg    update_jumpscroll();
1193d522f475Smrg}
1194d522f475Smrg
1195d522f475Smrgstatic void
1196d522f475Smrgdo_reversevideo(Widget gw GCC_UNUSED,
1197d522f475Smrg		XtPointer closure GCC_UNUSED,
1198d522f475Smrg		XtPointer data GCC_UNUSED)
1199d522f475Smrg{
1200d522f475Smrg    ReverseVideo(term);
1201d522f475Smrg}
1202d522f475Smrg
1203d522f475Smrgstatic void
1204d522f475Smrgdo_autowrap(Widget gw GCC_UNUSED,
1205d522f475Smrg	    XtPointer closure GCC_UNUSED,
1206d522f475Smrg	    XtPointer data GCC_UNUSED)
1207d522f475Smrg{
1208d522f475Smrg    term->flags ^= WRAPAROUND;
1209d522f475Smrg    update_autowrap();
1210d522f475Smrg}
1211d522f475Smrg
1212d522f475Smrgstatic void
1213d522f475Smrgdo_reversewrap(Widget gw GCC_UNUSED,
1214d522f475Smrg	       XtPointer closure GCC_UNUSED,
1215d522f475Smrg	       XtPointer data GCC_UNUSED)
1216d522f475Smrg{
1217d522f475Smrg    term->flags ^= REVERSEWRAP;
1218d522f475Smrg    update_reversewrap();
1219d522f475Smrg}
1220d522f475Smrg
1221d522f475Smrgstatic void
1222d522f475Smrgdo_autolinefeed(Widget gw GCC_UNUSED,
1223d522f475Smrg		XtPointer closure GCC_UNUSED,
1224d522f475Smrg		XtPointer data GCC_UNUSED)
1225d522f475Smrg{
1226d522f475Smrg    term->flags ^= LINEFEED;
1227d522f475Smrg    update_autolinefeed();
1228d522f475Smrg}
1229d522f475Smrg
1230d522f475Smrgstatic void
1231d522f475Smrgdo_appcursor(Widget gw GCC_UNUSED,
1232d522f475Smrg	     XtPointer closure GCC_UNUSED,
1233d522f475Smrg	     XtPointer data GCC_UNUSED)
1234d522f475Smrg{
1235d522f475Smrg    term->keyboard.flags ^= MODE_DECCKM;
1236d522f475Smrg    update_appcursor();
1237d522f475Smrg}
1238d522f475Smrg
1239d522f475Smrgstatic void
1240d522f475Smrgdo_appkeypad(Widget gw GCC_UNUSED,
1241d522f475Smrg	     XtPointer closure GCC_UNUSED,
1242d522f475Smrg	     XtPointer data GCC_UNUSED)
1243d522f475Smrg{
1244d522f475Smrg    term->keyboard.flags ^= MODE_DECKPAM;
1245d522f475Smrg    update_appkeypad();
1246d522f475Smrg}
1247d522f475Smrg
1248d522f475Smrgstatic void
1249d522f475Smrgdo_scrollkey(Widget gw GCC_UNUSED,
1250d522f475Smrg	     XtPointer closure GCC_UNUSED,
1251d522f475Smrg	     XtPointer data GCC_UNUSED)
1252d522f475Smrg{
1253d522f475Smrg    TScreen *screen = TScreenOf(term);
1254d522f475Smrg
1255956cc18dSsnj    ToggleFlag(screen->scrollkey);
1256d522f475Smrg    update_scrollkey();
1257d522f475Smrg}
1258d522f475Smrg
1259d522f475Smrgstatic void
1260d522f475Smrgdo_scrollttyoutput(Widget gw GCC_UNUSED,
1261d522f475Smrg		   XtPointer closure GCC_UNUSED,
1262d522f475Smrg		   XtPointer data GCC_UNUSED)
1263d522f475Smrg{
1264d522f475Smrg    TScreen *screen = TScreenOf(term);
1265d522f475Smrg
1266956cc18dSsnj    ToggleFlag(screen->scrollttyoutput);
1267d522f475Smrg    update_scrollttyoutput();
1268d522f475Smrg}
1269d522f475Smrg
1270d522f475Smrgstatic void
1271d522f475Smrgdo_keepSelection(Widget gw GCC_UNUSED,
1272d522f475Smrg		 XtPointer closure GCC_UNUSED,
1273d522f475Smrg		 XtPointer data GCC_UNUSED)
1274d522f475Smrg{
1275d522f475Smrg    TScreen *screen = TScreenOf(term);
1276d522f475Smrg
1277956cc18dSsnj    ToggleFlag(screen->keepSelection);
1278d522f475Smrg    update_keepSelection();
1279d522f475Smrg}
1280d522f475Smrg
1281d522f475Smrgstatic void
1282d522f475Smrgdo_selectClipboard(Widget gw GCC_UNUSED,
1283d522f475Smrg		   XtPointer closure GCC_UNUSED,
1284d522f475Smrg		   XtPointer data GCC_UNUSED)
1285d522f475Smrg{
1286d522f475Smrg    TScreen *screen = TScreenOf(term);
1287d522f475Smrg
1288956cc18dSsnj    ToggleFlag(screen->selectToClipboard);
1289d522f475Smrg    update_selectToClipboard();
1290d522f475Smrg}
1291d522f475Smrg
1292d522f475Smrgstatic void
1293d522f475Smrgdo_allow132(Widget gw GCC_UNUSED,
1294d522f475Smrg	    XtPointer closure GCC_UNUSED,
1295d522f475Smrg	    XtPointer data GCC_UNUSED)
1296d522f475Smrg{
1297d522f475Smrg    TScreen *screen = TScreenOf(term);
1298d522f475Smrg
1299956cc18dSsnj    ToggleFlag(screen->c132);
1300d522f475Smrg    update_allow132();
1301d522f475Smrg}
1302d522f475Smrg
1303d522f475Smrgstatic void
1304d522f475Smrgdo_cursesemul(Widget gw GCC_UNUSED,
1305d522f475Smrg	      XtPointer closure GCC_UNUSED,
1306d522f475Smrg	      XtPointer data GCC_UNUSED)
1307d522f475Smrg{
1308d522f475Smrg    TScreen *screen = TScreenOf(term);
1309d522f475Smrg
1310956cc18dSsnj    ToggleFlag(screen->curses);
1311d522f475Smrg    update_cursesemul();
1312d522f475Smrg}
1313d522f475Smrg
1314d522f475Smrgstatic void
1315d522f475Smrgdo_marginbell(Widget gw GCC_UNUSED,
1316d522f475Smrg	      XtPointer closure GCC_UNUSED,
1317d522f475Smrg	      XtPointer data GCC_UNUSED)
1318d522f475Smrg{
1319d522f475Smrg    TScreen *screen = TScreenOf(term);
1320d522f475Smrg
1321956cc18dSsnj    if (!(ToggleFlag(screen->marginbell)))
1322d522f475Smrg	screen->bellarmed = -1;
1323d522f475Smrg    update_marginbell();
1324d522f475Smrg}
1325d522f475Smrg
1326d522f475Smrg#if OPT_TEK4014
1327d522f475Smrgstatic void
1328d522f475Smrghandle_tekshow(Widget gw GCC_UNUSED, Bool allowswitch)
1329d522f475Smrg{
1330d522f475Smrg    TScreen *screen = TScreenOf(term);
1331d522f475Smrg
1332d522f475Smrg    TRACE(("Show tek-window\n"));
1333d522f475Smrg    if (!TEK4014_SHOWN(term)) {	/* not showing, turn on */
1334d522f475Smrg	set_tek_visibility(True);
1335d522f475Smrg    } else if (screen->Vshow || allowswitch) {	/* is showing, turn off */
1336d522f475Smrg	set_tek_visibility(False);
1337d522f475Smrg	end_tek_mode();		/* WARNING: this does a longjmp */
1338d522f475Smrg    } else
1339d522f475Smrg	Bell(XkbBI_MinorError, 0);
1340d522f475Smrg}
1341d522f475Smrg
1342d522f475Smrg/* ARGSUSED */
1343d522f475Smrgstatic void
1344d522f475Smrgdo_tekshow(Widget gw,
1345d522f475Smrg	   XtPointer closure GCC_UNUSED,
1346d522f475Smrg	   XtPointer data GCC_UNUSED)
1347d522f475Smrg{
1348d522f475Smrg    handle_tekshow(gw, True);
1349d522f475Smrg}
1350d522f475Smrg
1351d522f475Smrg/* ARGSUSED */
1352d522f475Smrgstatic void
1353d522f475Smrgdo_tekonoff(Widget gw,
1354d522f475Smrg	    XtPointer closure GCC_UNUSED,
1355d522f475Smrg	    XtPointer data GCC_UNUSED)
1356d522f475Smrg{
1357d522f475Smrg    handle_tekshow(gw, False);
1358d522f475Smrg}
1359d522f475Smrg#endif /* OPT_TEK4014 */
1360d522f475Smrg
1361d522f475Smrg#if OPT_BLINK_CURS
1362d522f475Smrg/* ARGSUSED */
1363d522f475Smrgstatic void
1364d522f475Smrgdo_cursorblink(Widget gw GCC_UNUSED,
1365d522f475Smrg	       XtPointer closure GCC_UNUSED,
1366d522f475Smrg	       XtPointer data GCC_UNUSED)
1367d522f475Smrg{
1368d522f475Smrg    TScreen *screen = TScreenOf(term);
1369d522f475Smrg    ToggleCursorBlink(screen);
1370d522f475Smrg}
1371d522f475Smrg#endif
1372d522f475Smrg
1373d522f475Smrg/* ARGSUSED */
1374d522f475Smrgstatic void
1375d522f475Smrgdo_altscreen(Widget gw GCC_UNUSED,
1376d522f475Smrg	     XtPointer closure GCC_UNUSED,
1377d522f475Smrg	     XtPointer data GCC_UNUSED)
1378d522f475Smrg{
1379d522f475Smrg    ToggleAlternate(term);
1380d522f475Smrg}
1381d522f475Smrg
1382d522f475Smrg/* ARGSUSED */
1383d522f475Smrgstatic void
1384d522f475Smrgdo_titeInhibit(Widget gw GCC_UNUSED,
1385d522f475Smrg	       XtPointer closure GCC_UNUSED,
1386d522f475Smrg	       XtPointer data GCC_UNUSED)
1387d522f475Smrg{
1388956cc18dSsnj    ToggleFlag(term->misc.titeInhibit);
1389d522f475Smrg    update_titeInhibit();
1390d522f475Smrg}
1391d522f475Smrg
1392d522f475Smrg#ifndef NO_ACTIVE_ICON
1393d522f475Smrg/* ARGSUSED */
1394d522f475Smrgstatic void
1395d522f475Smrgdo_activeicon(Widget gw GCC_UNUSED,
1396d522f475Smrg	      XtPointer closure GCC_UNUSED,
1397d522f475Smrg	      XtPointer data GCC_UNUSED)
1398d522f475Smrg{
1399d522f475Smrg    TScreen *screen = TScreenOf(term);
1400d522f475Smrg
1401d522f475Smrg    if (screen->iconVwin.window) {
1402d522f475Smrg	Widget shell = XtParent(term);
1403956cc18dSsnj	ToggleFlag(term->misc.active_icon);
1404d522f475Smrg	XtVaSetValues(shell, XtNiconWindow,
1405d522f475Smrg		      term->misc.active_icon ? screen->iconVwin.window : None,
1406d522f475Smrg		      (XtPointer) 0);
1407d522f475Smrg	update_activeicon();
1408d522f475Smrg    }
1409d522f475Smrg}
1410d522f475Smrg#endif /* NO_ACTIVE_ICON */
1411d522f475Smrg
1412d522f475Smrgstatic void
1413d522f475Smrgdo_softreset(Widget gw GCC_UNUSED,
1414d522f475Smrg	     XtPointer closure GCC_UNUSED,
1415d522f475Smrg	     XtPointer data GCC_UNUSED)
1416d522f475Smrg{
1417d522f475Smrg    VTReset(term, False, False);
1418d522f475Smrg}
1419d522f475Smrg
1420d522f475Smrgstatic void
1421d522f475Smrgdo_hardreset(Widget gw GCC_UNUSED,
1422d522f475Smrg	     XtPointer closure GCC_UNUSED,
1423d522f475Smrg	     XtPointer data GCC_UNUSED)
1424d522f475Smrg{
1425d522f475Smrg    VTReset(term, True, False);
1426d522f475Smrg}
1427d522f475Smrg
1428d522f475Smrgstatic void
1429d522f475Smrgdo_clearsavedlines(Widget gw GCC_UNUSED,
1430d522f475Smrg		   XtPointer closure GCC_UNUSED,
1431d522f475Smrg		   XtPointer data GCC_UNUSED)
1432d522f475Smrg{
1433d522f475Smrg    VTReset(term, True, True);
1434d522f475Smrg}
1435d522f475Smrg
1436d522f475Smrg#if OPT_TEK4014
1437d522f475Smrgstatic void
1438d522f475Smrgdo_tekmode(Widget gw GCC_UNUSED,
1439d522f475Smrg	   XtPointer closure GCC_UNUSED,
1440d522f475Smrg	   XtPointer data GCC_UNUSED)
1441d522f475Smrg{
1442d522f475Smrg    switch_modes(TEK4014_ACTIVE(term));		/* switch to tek mode */
1443d522f475Smrg}
1444d522f475Smrg
1445d522f475Smrg/* ARGSUSED */
1446d522f475Smrgstatic void
1447d522f475Smrgdo_vthide(Widget gw GCC_UNUSED,
1448d522f475Smrg	  XtPointer closure GCC_UNUSED,
1449d522f475Smrg	  XtPointer data GCC_UNUSED)
1450d522f475Smrg{
1451d522f475Smrg    hide_vt_window();
1452d522f475Smrg}
1453d522f475Smrg#endif /* OPT_TEK4014 */
1454d522f475Smrg
1455d522f475Smrg/*
1456d522f475Smrg * vtfont menu
1457d522f475Smrg */
1458d522f475Smrg
1459d522f475Smrgstatic void
1460d522f475Smrgdo_vtfont(Widget gw GCC_UNUSED,
1461d522f475Smrg	  XtPointer closure,
1462d522f475Smrg	  XtPointer data GCC_UNUSED)
1463d522f475Smrg{
1464d522f475Smrg    char *entryname = (char *) closure;
1465d522f475Smrg    int i;
1466d522f475Smrg
1467d522f475Smrg    for (i = 0; i < NMENUFONTS; i++) {
1468d522f475Smrg	if (strcmp(entryname, fontMenuEntries[i].name) == 0) {
1469d522f475Smrg	    SetVTFont(term, i, True, NULL);
1470d522f475Smrg	    return;
1471d522f475Smrg	}
1472d522f475Smrg    }
1473d522f475Smrg    Bell(XkbBI_MinorError, 0);
1474d522f475Smrg}
1475d522f475Smrg
1476d522f475Smrg#if OPT_DEC_CHRSET
1477d522f475Smrgstatic void
1478d522f475Smrgdo_font_doublesize(Widget gw GCC_UNUSED,
1479d522f475Smrg		   XtPointer closure GCC_UNUSED,
1480d522f475Smrg		   XtPointer data GCC_UNUSED)
1481d522f475Smrg{
1482d522f475Smrg    if (term->screen.cache_doublesize != 0)
1483956cc18dSsnj	ToggleFlag(term->screen.font_doublesize);
1484d522f475Smrg    update_font_doublesize();
1485d522f475Smrg    Redraw();
1486d522f475Smrg}
1487d522f475Smrg#endif
1488d522f475Smrg
1489d522f475Smrg#if OPT_BOX_CHARS
1490d522f475Smrgstatic void
1491d522f475Smrgdo_font_boxchars(Widget gw GCC_UNUSED,
1492d522f475Smrg		 XtPointer closure GCC_UNUSED,
1493d522f475Smrg		 XtPointer data GCC_UNUSED)
1494d522f475Smrg{
1495956cc18dSsnj    ToggleFlag(term->screen.force_box_chars);
1496d522f475Smrg    update_font_boxchars();
1497d522f475Smrg    Redraw();
1498d522f475Smrg}
1499d522f475Smrg#endif
1500d522f475Smrg
1501d522f475Smrg#if OPT_DEC_SOFTFONT
1502d522f475Smrgstatic void
1503d522f475Smrgdo_font_loadable(Widget gw GCC_UNUSED,
1504d522f475Smrg		 XtPointer closure GCC_UNUSED,
1505d522f475Smrg		 XtPointer data GCC_UNUSED)
1506d522f475Smrg{
1507956cc18dSsnj    ToggleFlag(term->misc.font_loadable);
1508d522f475Smrg    update_font_loadable();
1509d522f475Smrg}
1510d522f475Smrg#endif
1511d522f475Smrg
1512d522f475Smrg#if OPT_RENDERFONT
1513d522f475Smrgstatic void
1514d522f475Smrgdo_font_renderfont(Widget gw GCC_UNUSED,
1515d522f475Smrg		   XtPointer closure GCC_UNUSED,
1516d522f475Smrg		   XtPointer data GCC_UNUSED)
1517d522f475Smrg{
1518d522f475Smrg    TScreen *screen = TScreenOf(term);
1519d522f475Smrg    int fontnum = screen->menu_font_number;
1520d522f475Smrg    String name = term->screen.MenuFontName(fontnum);
1521d522f475Smrg
1522956cc18dSsnj    ToggleFlag(term->misc.render_font);
1523d522f475Smrg    update_font_renderfont();
1524d522f475Smrg    xtermLoadFont(term, xtermFontName(name), True, fontnum);
1525d522f475Smrg    ScrnRefresh(term, 0, 0,
1526d522f475Smrg		MaxRows(screen),
1527d522f475Smrg		MaxCols(screen), True);
1528d522f475Smrg}
1529d522f475Smrg#endif
1530d522f475Smrg
1531d522f475Smrg#if OPT_WIDE_CHARS
1532d522f475Smrgstatic void
1533d522f475Smrgdo_font_utf8_mode(Widget gw GCC_UNUSED,
1534d522f475Smrg		  XtPointer closure GCC_UNUSED,
1535d522f475Smrg		  XtPointer data GCC_UNUSED)
1536d522f475Smrg{
1537d522f475Smrg    TScreen *screen = TScreenOf(term);
1538d522f475Smrg
1539d522f475Smrg    /*
1540d522f475Smrg     * If xterm was started with -wc option, it might not have the wide fonts.
1541d522f475Smrg     * If xterm was not started with -wc, it might not have wide cells.
1542d522f475Smrg     */
1543d522f475Smrg    if (!screen->utf8_mode) {
1544d522f475Smrg	if (screen->wide_chars) {
1545d522f475Smrg	    if (xtermLoadWideFonts(term, True)) {
1546d522f475Smrg		SetVTFont(term, screen->menu_font_number, True, NULL);
1547d522f475Smrg	    }
1548d522f475Smrg	} else {
1549d522f475Smrg	    ChangeToWide(term);
1550d522f475Smrg	}
1551d522f475Smrg    }
1552d522f475Smrg    switchPtyData(screen, !screen->utf8_mode);
1553d522f475Smrg    /*
1554d522f475Smrg     * We don't repaint the screen when switching UTF-8 on/off.  When switching
1555d522f475Smrg     * on - the Latin-1 codes should paint as-is.  When switching off, that's
1556d522f475Smrg     * hard to do properly.
1557d522f475Smrg     */
1558d522f475Smrg}
1559d522f475Smrg
1560d522f475Smrgstatic void
1561d522f475Smrgdo_font_utf8_title(Widget gw GCC_UNUSED,
1562d522f475Smrg		   XtPointer closure GCC_UNUSED,
1563d522f475Smrg		   XtPointer data GCC_UNUSED)
1564d522f475Smrg{
1565d522f475Smrg    TScreen *screen = TScreenOf(term);
1566d522f475Smrg
1567956cc18dSsnj    ToggleFlag(screen->utf8_title);
1568d522f475Smrg    update_font_utf8_title();
1569d522f475Smrg}
1570d522f475Smrg#endif
1571d522f475Smrg
1572d522f475Smrg/*
1573d522f475Smrg * tek menu
1574d522f475Smrg */
1575d522f475Smrg
1576d522f475Smrg#if OPT_TEK4014
1577d522f475Smrgstatic void
1578956cc18dSsnjdo_tektextlarge(Widget gw,
1579d522f475Smrg		XtPointer closure GCC_UNUSED,
1580d522f475Smrg		XtPointer data GCC_UNUSED)
1581d522f475Smrg{
1582956cc18dSsnj    TekSetFontSize(getTekWidget(gw), True, tekMenu_tektextlarge);
1583d522f475Smrg}
1584d522f475Smrg
1585d522f475Smrgstatic void
1586956cc18dSsnjdo_tektext2(Widget gw,
1587d522f475Smrg	    XtPointer closure GCC_UNUSED,
1588d522f475Smrg	    XtPointer data GCC_UNUSED)
1589d522f475Smrg{
1590956cc18dSsnj    TekSetFontSize(getTekWidget(gw), True, tekMenu_tektext2);
1591d522f475Smrg}
1592d522f475Smrg
1593d522f475Smrgstatic void
1594956cc18dSsnjdo_tektext3(Widget gw,
1595d522f475Smrg	    XtPointer closure GCC_UNUSED,
1596d522f475Smrg	    XtPointer data GCC_UNUSED)
1597d522f475Smrg{
1598956cc18dSsnj    TekSetFontSize(getTekWidget(gw), True, tekMenu_tektext3);
1599d522f475Smrg}
1600d522f475Smrg
1601d522f475Smrgstatic void
1602956cc18dSsnjdo_tektextsmall(Widget gw,
1603d522f475Smrg		XtPointer closure GCC_UNUSED,
1604d522f475Smrg		XtPointer data GCC_UNUSED)
1605d522f475Smrg{
1606956cc18dSsnj    TekSetFontSize(getTekWidget(gw), True, tekMenu_tektextsmall);
1607d522f475Smrg}
1608d522f475Smrg
1609d522f475Smrgstatic void
1610956cc18dSsnjdo_tekpage(Widget gw,
1611d522f475Smrg	   XtPointer closure GCC_UNUSED,
1612d522f475Smrg	   XtPointer data GCC_UNUSED)
1613d522f475Smrg{
1614956cc18dSsnj    TekSimulatePageButton(getTekWidget(gw), False);
1615d522f475Smrg}
1616d522f475Smrg
1617d522f475Smrgstatic void
1618956cc18dSsnjdo_tekreset(Widget gw,
1619d522f475Smrg	    XtPointer closure GCC_UNUSED,
1620d522f475Smrg	    XtPointer data GCC_UNUSED)
1621d522f475Smrg{
1622956cc18dSsnj    TekSimulatePageButton(getTekWidget(gw), True);
1623d522f475Smrg}
1624d522f475Smrg
1625d522f475Smrgstatic void
1626956cc18dSsnjdo_tekcopy(Widget gw,
1627d522f475Smrg	   XtPointer closure GCC_UNUSED,
1628d522f475Smrg	   XtPointer data GCC_UNUSED)
1629d522f475Smrg{
1630956cc18dSsnj    TekCopy(getTekWidget(gw));
1631d522f475Smrg}
1632d522f475Smrg
1633d522f475Smrgstatic void
1634d522f475Smrghandle_vtshow(Widget gw GCC_UNUSED, Bool allowswitch)
1635d522f475Smrg{
1636d522f475Smrg    TScreen *screen = TScreenOf(term);
1637d522f475Smrg
1638d522f475Smrg    TRACE(("Show vt-window\n"));
1639d522f475Smrg    if (!screen->Vshow) {	/* not showing, turn on */
1640d522f475Smrg	set_vt_visibility(True);
1641d522f475Smrg    } else if (TEK4014_SHOWN(term) || allowswitch) {	/* is showing, turn off */
1642d522f475Smrg	set_vt_visibility(False);
1643d522f475Smrg	if (!TEK4014_ACTIVE(term) && tekRefreshList)
1644d522f475Smrg	    TekRefresh(tekWidget);
1645d522f475Smrg	end_vt_mode();		/* WARNING: this does a longjmp... */
1646d522f475Smrg    } else
1647d522f475Smrg	Bell(XkbBI_MinorError, 0);
1648d522f475Smrg}
1649d522f475Smrg
1650d522f475Smrgstatic void
1651d522f475Smrgdo_vtshow(Widget gw,
1652d522f475Smrg	  XtPointer closure GCC_UNUSED,
1653d522f475Smrg	  XtPointer data GCC_UNUSED)
1654d522f475Smrg{
1655d522f475Smrg    handle_vtshow(gw, True);
1656d522f475Smrg}
1657d522f475Smrg
1658d522f475Smrgstatic void
1659d522f475Smrgdo_vtonoff(Widget gw,
1660d522f475Smrg	   XtPointer closure GCC_UNUSED,
1661d522f475Smrg	   XtPointer data GCC_UNUSED)
1662d522f475Smrg{
1663d522f475Smrg    handle_vtshow(gw, False);
1664d522f475Smrg}
1665d522f475Smrg
1666d522f475Smrgstatic void
1667d522f475Smrgdo_vtmode(Widget gw GCC_UNUSED,
1668d522f475Smrg	  XtPointer closure GCC_UNUSED,
1669d522f475Smrg	  XtPointer data GCC_UNUSED)
1670d522f475Smrg{
1671d522f475Smrg    switch_modes(TEK4014_ACTIVE(term));		/* switch to vt, or from */
1672d522f475Smrg}
1673d522f475Smrg
1674d522f475Smrg/* ARGSUSED */
1675d522f475Smrgstatic void
1676d522f475Smrgdo_tekhide(Widget gw GCC_UNUSED,
1677d522f475Smrg	   XtPointer closure GCC_UNUSED,
1678d522f475Smrg	   XtPointer data GCC_UNUSED)
1679d522f475Smrg{
1680d522f475Smrg    hide_tek_window();
1681d522f475Smrg}
1682d522f475Smrg#endif /* OPT_TEK4014 */
1683d522f475Smrg
1684d522f475Smrg/*
1685d522f475Smrg * public handler routines
1686d522f475Smrg */
1687d522f475Smrg
1688d522f475Smrgstatic void
1689d522f475Smrghandle_toggle(void (*proc) PROTO_XT_CALLBACK_ARGS,
1690d522f475Smrg	      int var,
1691d522f475Smrg	      String * params,
1692d522f475Smrg	      Cardinal nparams,
1693d522f475Smrg	      Widget w,
1694d522f475Smrg	      XtPointer closure,
1695d522f475Smrg	      XtPointer data)
1696d522f475Smrg{
1697d522f475Smrg    int dir = -2;
1698d522f475Smrg
1699d522f475Smrg    switch (nparams) {
1700d522f475Smrg    case 0:
1701d522f475Smrg	dir = -1;
1702d522f475Smrg	break;
1703d522f475Smrg    case 1:
1704d522f475Smrg	if (XmuCompareISOLatin1(params[0], "on") == 0)
1705d522f475Smrg	    dir = 1;
1706d522f475Smrg	else if (XmuCompareISOLatin1(params[0], "off") == 0)
1707d522f475Smrg	    dir = 0;
1708d522f475Smrg	else if (XmuCompareISOLatin1(params[0], "toggle") == 0)
1709d522f475Smrg	    dir = -1;
1710d522f475Smrg	break;
1711d522f475Smrg    }
1712d522f475Smrg
1713d522f475Smrg    switch (dir) {
1714d522f475Smrg    case -2:
1715d522f475Smrg	Bell(XkbBI_MinorError, 0);
1716d522f475Smrg	break;
1717d522f475Smrg
1718d522f475Smrg    case -1:
1719d522f475Smrg	(*proc) (w, closure, data);
1720d522f475Smrg	break;
1721d522f475Smrg
1722d522f475Smrg    case 0:
1723d522f475Smrg	if (var)
1724d522f475Smrg	    (*proc) (w, closure, data);
1725d522f475Smrg	else
1726d522f475Smrg	    Bell(XkbBI_MinorError, 0);
1727d522f475Smrg	break;
1728d522f475Smrg
1729d522f475Smrg    case 1:
1730d522f475Smrg	if (!var)
1731d522f475Smrg	    (*proc) (w, closure, data);
1732d522f475Smrg	else
1733d522f475Smrg	    Bell(XkbBI_MinorError, 0);
1734d522f475Smrg	break;
1735d522f475Smrg    }
1736d522f475Smrg    return;
1737d522f475Smrg}
1738d522f475Smrg
1739d522f475Smrg#define handle_vt_toggle(proc, var, params, nparams, w) \
1740d522f475Smrg	handle_toggle(proc, (int) (var), params, nparams, w, (XtPointer)0, (XtPointer)0)
1741d522f475Smrg
1742d522f475Smrg#define handle_tek_toggle(proc, var, params, nparams, w) \
1743d522f475Smrg	handle_toggle(proc, (int) (var), params, nparams, w, (XtPointer)0, (XtPointer)0)
1744d522f475Smrg
1745d522f475Smrgvoid
1746d522f475SmrgHandleAllowSends(Widget w,
1747d522f475Smrg		 XEvent * event GCC_UNUSED,
1748d522f475Smrg		 String * params,
1749d522f475Smrg		 Cardinal *param_count)
1750d522f475Smrg{
1751d522f475Smrg    handle_vt_toggle(do_allowsends, term->screen.allowSendEvents,
1752d522f475Smrg		     params, *param_count, w);
1753d522f475Smrg}
1754d522f475Smrg
1755d522f475Smrgvoid
1756d522f475SmrgHandleSetVisualBell(Widget w,
1757d522f475Smrg		    XEvent * event GCC_UNUSED,
1758d522f475Smrg		    String * params,
1759d522f475Smrg		    Cardinal *param_count)
1760d522f475Smrg{
1761d522f475Smrg    handle_vt_toggle(do_visualbell, term->screen.visualbell,
1762d522f475Smrg		     params, *param_count, w);
1763d522f475Smrg}
1764d522f475Smrg
1765d522f475Smrgvoid
1766d522f475SmrgHandleSetPopOnBell(Widget w,
1767d522f475Smrg		   XEvent * event GCC_UNUSED,
1768d522f475Smrg		   String * params,
1769d522f475Smrg		   Cardinal *param_count)
1770d522f475Smrg{
1771d522f475Smrg    handle_vt_toggle(do_poponbell, term->screen.poponbell,
1772d522f475Smrg		     params, *param_count, w);
1773d522f475Smrg}
1774d522f475Smrg
1775d522f475Smrg#ifdef ALLOWLOGGING
1776d522f475Smrgvoid
1777d522f475SmrgHandleLogging(Widget w,
1778d522f475Smrg	      XEvent * event GCC_UNUSED,
1779d522f475Smrg	      String * params,
1780d522f475Smrg	      Cardinal *param_count)
1781d522f475Smrg{
1782d522f475Smrg    handle_vt_toggle(do_logging, term->screen.logging,
1783d522f475Smrg		     params, *param_count, w);
1784d522f475Smrg}
1785d522f475Smrg#endif
1786d522f475Smrg
1787d522f475Smrg/* ARGSUSED */
1788d522f475Smrgvoid
1789d522f475SmrgHandlePrintScreen(Widget w,
1790d522f475Smrg		  XEvent * event GCC_UNUSED,
1791d522f475Smrg		  String * params GCC_UNUSED,
1792d522f475Smrg		  Cardinal *param_count GCC_UNUSED)
1793d522f475Smrg{
1794d522f475Smrg    do_print(w, (XtPointer) 0, (XtPointer) 0);
1795d522f475Smrg}
1796d522f475Smrg
1797956cc18dSsnj/* ARGSUSED */
1798956cc18dSsnjvoid
1799956cc18dSsnjHandlePrintEverything(Widget w,
1800956cc18dSsnj		      XEvent * event GCC_UNUSED,
1801956cc18dSsnj		      String * params GCC_UNUSED,
1802956cc18dSsnj		      Cardinal *param_count GCC_UNUSED)
1803956cc18dSsnj{
1804956cc18dSsnj    do_print_everything(w, (XtPointer) 0, (XtPointer) 0);
1805956cc18dSsnj}
1806956cc18dSsnj
1807d522f475Smrg/* ARGSUSED */
1808d522f475Smrgvoid
1809d522f475SmrgHandlePrintControlMode(Widget w,
1810d522f475Smrg		       XEvent * event GCC_UNUSED,
1811d522f475Smrg		       String * params GCC_UNUSED,
1812d522f475Smrg		       Cardinal *param_count GCC_UNUSED)
1813d522f475Smrg{
1814d522f475Smrg    do_print_redir(w, (XtPointer) 0, (XtPointer) 0);
1815d522f475Smrg}
1816d522f475Smrg
1817d522f475Smrg/* ARGSUSED */
1818d522f475Smrgvoid
1819d522f475SmrgHandleRedraw(Widget w,
1820d522f475Smrg	     XEvent * event GCC_UNUSED,
1821d522f475Smrg	     String * params GCC_UNUSED,
1822d522f475Smrg	     Cardinal *param_count GCC_UNUSED)
1823d522f475Smrg{
1824d522f475Smrg    do_redraw(w, (XtPointer) 0, (XtPointer) 0);
1825d522f475Smrg}
1826d522f475Smrg
1827d522f475Smrg/* ARGSUSED */
1828d522f475Smrgvoid
1829d522f475SmrgHandleSendSignal(Widget w,
1830d522f475Smrg		 XEvent * event GCC_UNUSED,
1831d522f475Smrg		 String * params,
1832d522f475Smrg		 Cardinal *param_count)
1833d522f475Smrg{
1834d522f475Smrg    /* *INDENT-OFF* */
1835d522f475Smrg    static struct sigtab {
1836d522f475Smrg	char *name;
1837d522f475Smrg	int sig;
1838d522f475Smrg    } signals[] = {
1839d522f475Smrg#ifdef SIGTSTP
1840d522f475Smrg	{ "suspend",	SIGTSTP },
1841d522f475Smrg	{ "tstp",	SIGTSTP },
1842d522f475Smrg#endif
1843d522f475Smrg#ifdef SIGCONT
1844d522f475Smrg	{ "cont",	SIGCONT },
1845d522f475Smrg#endif
1846d522f475Smrg	{ "int",	SIGINT },
1847d522f475Smrg	{ "hup",	SIGHUP },
1848d522f475Smrg	{ "quit",	SIGQUIT },
1849d522f475Smrg	{ "alrm",	SIGALRM },
1850d522f475Smrg	{ "alarm",	SIGALRM },
1851d522f475Smrg	{ "term",	SIGTERM },
1852d522f475Smrg	{ "kill",	SIGKILL },
1853d522f475Smrg	{ NULL, 0 },
1854d522f475Smrg    };
1855d522f475Smrg    /* *INDENT-ON* */
1856d522f475Smrg
1857d522f475Smrg    if (*param_count == 1) {
1858d522f475Smrg	struct sigtab *st;
1859d522f475Smrg
1860d522f475Smrg	for (st = signals; st->name; st++) {
1861d522f475Smrg	    if (XmuCompareISOLatin1(st->name, params[0]) == 0) {
1862d522f475Smrg		handle_send_signal(w, st->sig);
1863d522f475Smrg		return;
1864d522f475Smrg	    }
1865d522f475Smrg	}
1866d522f475Smrg	/* one could allow numeric values, but that would be a security hole */
1867d522f475Smrg    }
1868d522f475Smrg
1869d522f475Smrg    Bell(XkbBI_MinorError, 0);
1870d522f475Smrg}
1871d522f475Smrg
1872d522f475Smrg/* ARGSUSED */
1873d522f475Smrgvoid
1874d522f475SmrgHandleQuit(Widget w,
1875d522f475Smrg	   XEvent * event GCC_UNUSED,
1876d522f475Smrg	   String * params GCC_UNUSED,
1877d522f475Smrg	   Cardinal *param_count GCC_UNUSED)
1878d522f475Smrg{
1879d522f475Smrg    do_quit(w, (XtPointer) 0, (XtPointer) 0);
1880d522f475Smrg}
1881d522f475Smrg
1882d522f475Smrgvoid
1883d522f475SmrgHandle8BitControl(Widget w,
1884d522f475Smrg		  XEvent * event GCC_UNUSED,
1885d522f475Smrg		  String * params,
1886d522f475Smrg		  Cardinal *param_count)
1887d522f475Smrg{
1888d522f475Smrg    handle_vt_toggle(do_8bit_control, term->screen.control_eight_bits,
1889d522f475Smrg		     params, *param_count, w);
1890d522f475Smrg}
1891d522f475Smrg
1892d522f475Smrgvoid
1893d522f475SmrgHandleBackarrow(Widget w,
1894d522f475Smrg		XEvent * event GCC_UNUSED,
1895d522f475Smrg		String * params,
1896d522f475Smrg		Cardinal *param_count)
1897d522f475Smrg{
1898d522f475Smrg    handle_vt_toggle(do_backarrow, term->keyboard.flags & MODE_DECBKM,
1899d522f475Smrg		     params, *param_count, w);
1900d522f475Smrg}
1901d522f475Smrg
1902d522f475Smrg#if OPT_SUN_FUNC_KEYS
1903d522f475Smrgvoid
1904d522f475SmrgHandleSunFunctionKeys(Widget w,
1905d522f475Smrg		      XEvent * event GCC_UNUSED,
1906d522f475Smrg		      String * params,
1907d522f475Smrg		      Cardinal *param_count)
1908d522f475Smrg{
1909d522f475Smrg    handle_vt_toggle(do_sun_fkeys, term->keyboard.type == keyboardIsSun,
1910d522f475Smrg		     params, *param_count, w);
1911d522f475Smrg}
1912d522f475Smrg#endif
1913d522f475Smrg
1914d522f475Smrg#if OPT_NUM_LOCK
1915d522f475Smrgvoid
1916d522f475SmrgHandleNumLock(Widget w,
1917d522f475Smrg	      XEvent * event GCC_UNUSED,
1918d522f475Smrg	      String * params,
1919d522f475Smrg	      Cardinal *param_count)
1920d522f475Smrg{
1921d522f475Smrg    handle_vt_toggle(do_num_lock, term->misc.real_NumLock,
1922d522f475Smrg		     params, *param_count, w);
1923d522f475Smrg}
1924d522f475Smrg
1925d522f475Smrgvoid
1926d522f475SmrgHandleAltEsc(Widget w,
1927d522f475Smrg	     XEvent * event GCC_UNUSED,
1928d522f475Smrg	     String * params,
1929d522f475Smrg	     Cardinal *param_count)
1930d522f475Smrg{
1931d522f475Smrg    handle_vt_toggle(do_alt_esc, !term->screen.input_eight_bits,
1932d522f475Smrg		     params, *param_count, w);
1933d522f475Smrg}
1934d522f475Smrg
1935d522f475Smrgvoid
1936d522f475SmrgHandleMetaEsc(Widget w,
1937d522f475Smrg	      XEvent * event GCC_UNUSED,
1938d522f475Smrg	      String * params,
1939d522f475Smrg	      Cardinal *param_count)
1940d522f475Smrg{
1941d522f475Smrg    handle_vt_toggle(do_meta_esc, term->screen.meta_sends_esc,
1942d522f475Smrg		     params, *param_count, w);
1943d522f475Smrg}
1944d522f475Smrg#endif
1945d522f475Smrg
1946d522f475Smrgvoid
1947d522f475SmrgHandleDeleteIsDEL(Widget w,
1948d522f475Smrg		  XEvent * event GCC_UNUSED,
1949d522f475Smrg		  String * params,
1950d522f475Smrg		  Cardinal *param_count)
1951d522f475Smrg{
1952d522f475Smrg    handle_vt_toggle(do_delete_del, term->screen.delete_is_del,
1953d522f475Smrg		     params, *param_count, w);
1954d522f475Smrg}
1955d522f475Smrg
1956d522f475Smrgvoid
1957d522f475SmrgHandleOldFunctionKeys(Widget w,
1958d522f475Smrg		      XEvent * event GCC_UNUSED,
1959d522f475Smrg		      String * params,
1960d522f475Smrg		      Cardinal *param_count)
1961d522f475Smrg{
1962d522f475Smrg    handle_vt_toggle(do_old_fkeys, term->keyboard.type == keyboardIsLegacy,
1963d522f475Smrg		     params, *param_count, w);
1964d522f475Smrg}
1965d522f475Smrg
1966d522f475Smrg#if OPT_SUNPC_KBD
1967d522f475Smrgvoid
1968d522f475SmrgHandleSunKeyboard(Widget w,
1969d522f475Smrg		  XEvent * event GCC_UNUSED,
1970d522f475Smrg		  String * params,
1971d522f475Smrg		  Cardinal *param_count)
1972d522f475Smrg{
1973d522f475Smrg    handle_vt_toggle(do_sun_kbd, term->keyboard.type == keyboardIsVT220,
1974d522f475Smrg		     params, *param_count, w);
1975d522f475Smrg}
1976d522f475Smrg#endif
1977d522f475Smrg
1978d522f475Smrg#if OPT_HP_FUNC_KEYS
1979d522f475Smrgvoid
1980d522f475SmrgHandleHpFunctionKeys(Widget w,
1981d522f475Smrg		     XEvent * event GCC_UNUSED,
1982d522f475Smrg		     String * params,
1983d522f475Smrg		     Cardinal *param_count)
1984d522f475Smrg{
1985d522f475Smrg    handle_vt_toggle(do_hp_fkeys, term->keyboard.type == keyboardIsHP,
1986d522f475Smrg		     params, *param_count, w);
1987d522f475Smrg}
1988d522f475Smrg#endif
1989d522f475Smrg
1990d522f475Smrg#if OPT_SCO_FUNC_KEYS
1991d522f475Smrgvoid
1992d522f475SmrgHandleScoFunctionKeys(Widget w,
1993d522f475Smrg		      XEvent * event GCC_UNUSED,
1994d522f475Smrg		      String * params,
1995d522f475Smrg		      Cardinal *param_count)
1996d522f475Smrg{
1997d522f475Smrg    handle_vt_toggle(do_sco_fkeys, term->keyboard.type == keyboardIsSCO,
1998d522f475Smrg		     params, *param_count, w);
1999d522f475Smrg}
2000d522f475Smrg#endif
2001d522f475Smrg
2002d522f475Smrgvoid
2003d522f475SmrgHandleScrollbar(Widget w,
2004d522f475Smrg		XEvent * event GCC_UNUSED,
2005d522f475Smrg		String * params,
2006d522f475Smrg		Cardinal *param_count)
2007d522f475Smrg{
2008d522f475Smrg    if (IsIcon(&(term->screen))) {
2009d522f475Smrg	Bell(XkbBI_MinorError, 0);
2010d522f475Smrg    } else {
2011d522f475Smrg	handle_vt_toggle(do_scrollbar, term->screen.fullVwin.sb_info.width,
2012d522f475Smrg			 params, *param_count, w);
2013d522f475Smrg    }
2014d522f475Smrg}
2015d522f475Smrg
2016d522f475Smrgvoid
2017d522f475SmrgHandleJumpscroll(Widget w,
2018d522f475Smrg		 XEvent * event GCC_UNUSED,
2019d522f475Smrg		 String * params,
2020d522f475Smrg		 Cardinal *param_count)
2021d522f475Smrg{
2022d522f475Smrg    handle_vt_toggle(do_jumpscroll, term->screen.jumpscroll,
2023d522f475Smrg		     params, *param_count, w);
2024d522f475Smrg}
2025d522f475Smrg
2026d522f475Smrgvoid
2027d522f475SmrgHandleKeepSelection(Widget w,
2028d522f475Smrg		    XEvent * event GCC_UNUSED,
2029d522f475Smrg		    String * params,
2030d522f475Smrg		    Cardinal *param_count)
2031d522f475Smrg{
2032d522f475Smrg    handle_vt_toggle(do_keepSelection, term->screen.keepSelection,
2033d522f475Smrg		     params, *param_count, w);
2034d522f475Smrg}
2035d522f475Smrg
2036d522f475Smrgvoid
2037d522f475SmrgHandleSetSelect(Widget w,
2038d522f475Smrg		XEvent * event GCC_UNUSED,
2039d522f475Smrg		String * params,
2040d522f475Smrg		Cardinal *param_count)
2041d522f475Smrg{
2042d522f475Smrg    handle_vt_toggle(do_selectClipboard, term->screen.selectToClipboard,
2043d522f475Smrg		     params, *param_count, w);
2044d522f475Smrg}
2045d522f475Smrg
2046d522f475Smrgvoid
2047d522f475SmrgHandleReverseVideo(Widget w,
2048d522f475Smrg		   XEvent * event GCC_UNUSED,
2049d522f475Smrg		   String * params,
2050d522f475Smrg		   Cardinal *param_count)
2051d522f475Smrg{
2052d522f475Smrg    handle_vt_toggle(do_reversevideo, (term->misc.re_verse0),
2053d522f475Smrg		     params, *param_count, w);
2054d522f475Smrg}
2055d522f475Smrg
2056d522f475Smrgvoid
2057d522f475SmrgHandleAutoWrap(Widget w,
2058d522f475Smrg	       XEvent * event GCC_UNUSED,
2059d522f475Smrg	       String * params,
2060d522f475Smrg	       Cardinal *param_count)
2061d522f475Smrg{
2062d522f475Smrg    handle_vt_toggle(do_autowrap, (term->flags & WRAPAROUND),
2063d522f475Smrg		     params, *param_count, w);
2064d522f475Smrg}
2065d522f475Smrg
2066d522f475Smrgvoid
2067d522f475SmrgHandleReverseWrap(Widget w,
2068d522f475Smrg		  XEvent * event GCC_UNUSED,
2069d522f475Smrg		  String * params,
2070d522f475Smrg		  Cardinal *param_count)
2071d522f475Smrg{
2072d522f475Smrg    handle_vt_toggle(do_reversewrap, (term->flags & REVERSEWRAP),
2073d522f475Smrg		     params, *param_count, w);
2074d522f475Smrg}
2075d522f475Smrg
2076d522f475Smrgvoid
2077d522f475SmrgHandleAutoLineFeed(Widget w,
2078d522f475Smrg		   XEvent * event GCC_UNUSED,
2079d522f475Smrg		   String * params,
2080d522f475Smrg		   Cardinal *param_count)
2081d522f475Smrg{
2082d522f475Smrg    handle_vt_toggle(do_autolinefeed, (term->flags & LINEFEED),
2083d522f475Smrg		     params, *param_count, w);
2084d522f475Smrg}
2085d522f475Smrg
2086d522f475Smrgvoid
2087d522f475SmrgHandleAppCursor(Widget w,
2088d522f475Smrg		XEvent * event GCC_UNUSED,
2089d522f475Smrg		String * params,
2090d522f475Smrg		Cardinal *param_count)
2091d522f475Smrg{
2092d522f475Smrg    handle_vt_toggle(do_appcursor, (term->keyboard.flags & MODE_DECCKM),
2093d522f475Smrg		     params, *param_count, w);
2094d522f475Smrg}
2095d522f475Smrg
2096d522f475Smrgvoid
2097d522f475SmrgHandleAppKeypad(Widget w,
2098d522f475Smrg		XEvent * event GCC_UNUSED,
2099d522f475Smrg		String * params,
2100d522f475Smrg		Cardinal *param_count)
2101d522f475Smrg{
2102d522f475Smrg    handle_vt_toggle(do_appkeypad, (term->keyboard.flags & MODE_DECKPAM),
2103d522f475Smrg		     params, *param_count, w);
2104d522f475Smrg}
2105d522f475Smrg
2106d522f475Smrgvoid
2107d522f475SmrgHandleScrollKey(Widget w,
2108d522f475Smrg		XEvent * event GCC_UNUSED,
2109d522f475Smrg		String * params,
2110d522f475Smrg		Cardinal *param_count)
2111d522f475Smrg{
2112d522f475Smrg    handle_vt_toggle(do_scrollkey, term->screen.scrollkey,
2113d522f475Smrg		     params, *param_count, w);
2114d522f475Smrg}
2115d522f475Smrg
2116d522f475Smrgvoid
2117d522f475SmrgHandleScrollTtyOutput(Widget w,
2118d522f475Smrg		      XEvent * event GCC_UNUSED,
2119d522f475Smrg		      String * params,
2120d522f475Smrg		      Cardinal *param_count)
2121d522f475Smrg{
2122d522f475Smrg    handle_vt_toggle(do_scrollttyoutput, term->screen.scrollttyoutput,
2123d522f475Smrg		     params, *param_count, w);
2124d522f475Smrg}
2125d522f475Smrg
2126d522f475Smrgvoid
2127d522f475SmrgHandleAllow132(Widget w,
2128d522f475Smrg	       XEvent * event GCC_UNUSED,
2129d522f475Smrg	       String * params,
2130d522f475Smrg	       Cardinal *param_count)
2131d522f475Smrg{
2132d522f475Smrg    handle_vt_toggle(do_allow132, term->screen.c132,
2133d522f475Smrg		     params, *param_count, w);
2134d522f475Smrg}
2135d522f475Smrg
2136d522f475Smrgvoid
2137d522f475SmrgHandleCursesEmul(Widget w,
2138d522f475Smrg		 XEvent * event GCC_UNUSED,
2139d522f475Smrg		 String * params,
2140d522f475Smrg		 Cardinal *param_count)
2141d522f475Smrg{
2142d522f475Smrg    handle_vt_toggle(do_cursesemul, term->screen.curses,
2143d522f475Smrg		     params, *param_count, w);
2144d522f475Smrg}
2145d522f475Smrg
2146d522f475Smrgvoid
2147d522f475SmrgHandleBellIsUrgent(Widget w,
2148d522f475Smrg		   XEvent * event GCC_UNUSED,
2149d522f475Smrg		   String * params,
2150d522f475Smrg		   Cardinal *param_count)
2151d522f475Smrg{
2152d522f475Smrg    handle_vt_toggle(do_bellIsUrgent, term->screen.bellIsUrgent,
2153d522f475Smrg		     params, *param_count, w);
2154d522f475Smrg}
2155d522f475Smrg
2156d522f475Smrgvoid
2157d522f475SmrgHandleMarginBell(Widget w,
2158d522f475Smrg		 XEvent * event GCC_UNUSED,
2159d522f475Smrg		 String * params,
2160d522f475Smrg		 Cardinal *param_count)
2161d522f475Smrg{
2162d522f475Smrg    handle_vt_toggle(do_marginbell, term->screen.marginbell,
2163d522f475Smrg		     params, *param_count, w);
2164d522f475Smrg}
2165d522f475Smrg
2166d522f475Smrg#if OPT_BLINK_CURS
2167d522f475Smrgvoid
2168d522f475SmrgHandleCursorBlink(Widget w,
2169d522f475Smrg		  XEvent * event GCC_UNUSED,
2170d522f475Smrg		  String * params,
2171d522f475Smrg		  Cardinal *param_count)
2172d522f475Smrg{
2173d522f475Smrg    /* eventually want to see if sensitive or not */
2174d522f475Smrg    handle_vt_toggle(do_cursorblink, term->screen.cursor_blink,
2175d522f475Smrg		     params, *param_count, w);
2176d522f475Smrg}
2177d522f475Smrg#endif
2178d522f475Smrg
2179d522f475Smrgvoid
2180d522f475SmrgHandleAltScreen(Widget w,
2181d522f475Smrg		XEvent * event GCC_UNUSED,
2182d522f475Smrg		String * params,
2183d522f475Smrg		Cardinal *param_count)
2184d522f475Smrg{
2185d522f475Smrg    /* eventually want to see if sensitive or not */
2186956cc18dSsnj    handle_vt_toggle(do_altscreen, term->screen.whichBuf,
2187d522f475Smrg		     params, *param_count, w);
2188d522f475Smrg}
2189d522f475Smrg
2190d522f475Smrgvoid
2191d522f475SmrgHandleTiteInhibit(Widget w,
2192d522f475Smrg		  XEvent * event GCC_UNUSED,
2193d522f475Smrg		  String * params,
2194d522f475Smrg		  Cardinal *param_count)
2195d522f475Smrg{
2196d522f475Smrg    /* eventually want to see if sensitive or not */
2197d522f475Smrg    handle_vt_toggle(do_titeInhibit, !(term->misc.titeInhibit),
2198d522f475Smrg		     params, *param_count, w);
2199d522f475Smrg}
2200d522f475Smrg
2201d522f475Smrg/* ARGSUSED */
2202d522f475Smrgvoid
2203d522f475SmrgHandleSoftReset(Widget w,
2204d522f475Smrg		XEvent * event GCC_UNUSED,
2205d522f475Smrg		String * params GCC_UNUSED,
2206d522f475Smrg		Cardinal *param_count GCC_UNUSED)
2207d522f475Smrg{
2208d522f475Smrg    do_softreset(w, (XtPointer) 0, (XtPointer) 0);
2209d522f475Smrg}
2210d522f475Smrg
2211d522f475Smrg/* ARGSUSED */
2212d522f475Smrgvoid
2213d522f475SmrgHandleHardReset(Widget w,
2214d522f475Smrg		XEvent * event GCC_UNUSED,
2215d522f475Smrg		String * params GCC_UNUSED,
2216d522f475Smrg		Cardinal *param_count GCC_UNUSED)
2217d522f475Smrg{
2218d522f475Smrg    do_hardreset(w, (XtPointer) 0, (XtPointer) 0);
2219d522f475Smrg}
2220d522f475Smrg
2221d522f475Smrg/* ARGSUSED */
2222d522f475Smrgvoid
2223d522f475SmrgHandleClearSavedLines(Widget w,
2224d522f475Smrg		      XEvent * event GCC_UNUSED,
2225d522f475Smrg		      String * params GCC_UNUSED,
2226d522f475Smrg		      Cardinal *param_count GCC_UNUSED)
2227d522f475Smrg{
2228d522f475Smrg    do_clearsavedlines(w, (XtPointer) 0, (XtPointer) 0);
2229d522f475Smrg}
2230d522f475Smrg
2231d522f475Smrg#if OPT_DEC_CHRSET
2232d522f475Smrgvoid
2233d522f475SmrgHandleFontDoublesize(Widget w,
2234d522f475Smrg		     XEvent * event GCC_UNUSED,
2235d522f475Smrg		     String * params,
2236d522f475Smrg		     Cardinal *param_count)
2237d522f475Smrg{
2238d522f475Smrg    handle_vt_toggle(do_font_doublesize, term->screen.font_doublesize,
2239d522f475Smrg		     params, *param_count, w);
2240d522f475Smrg}
2241d522f475Smrg#endif
2242d522f475Smrg
2243d522f475Smrg#if OPT_BOX_CHARS
2244d522f475Smrgvoid
2245d522f475SmrgHandleFontBoxChars(Widget w,
2246d522f475Smrg		   XEvent * event GCC_UNUSED,
2247d522f475Smrg		   String * params,
2248d522f475Smrg		   Cardinal *param_count)
2249d522f475Smrg{
2250d522f475Smrg    handle_vt_toggle(do_font_boxchars, term->screen.force_box_chars,
2251d522f475Smrg		     params, *param_count, w);
2252d522f475Smrg}
2253d522f475Smrg#endif
2254d522f475Smrg
2255d522f475Smrg#if OPT_DEC_SOFTFONT
2256d522f475Smrgvoid
2257d522f475SmrgHandleFontLoading(Widget w,
2258d522f475Smrg		  XEvent * event GCC_UNUSED,
2259d522f475Smrg		  String * params,
2260d522f475Smrg		  Cardinal *param_count)
2261d522f475Smrg{
2262d522f475Smrg    handle_vt_toggle(do_font_loadable, term->misc.font_loadable,
2263d522f475Smrg		     params, *param_count, w);
2264d522f475Smrg}
2265d522f475Smrg#endif
2266d522f475Smrg
2267d522f475Smrg#if OPT_RENDERFONT
2268d522f475Smrgvoid
2269d522f475SmrgHandleRenderFont(Widget w,
2270d522f475Smrg		 XEvent * event GCC_UNUSED,
2271d522f475Smrg		 String * params,
2272d522f475Smrg		 Cardinal *param_count)
2273d522f475Smrg{
2274d522f475Smrg    handle_vt_toggle(do_font_renderfont, term->misc.render_font,
2275d522f475Smrg		     params, *param_count, w);
2276d522f475Smrg}
2277d522f475Smrg#endif
2278d522f475Smrg
2279d522f475Smrg#if OPT_WIDE_CHARS
2280d522f475Smrgvoid
2281d522f475SmrgHandleUTF8Mode(Widget w,
2282d522f475Smrg	       XEvent * event GCC_UNUSED,
2283d522f475Smrg	       String * params,
2284d522f475Smrg	       Cardinal *param_count)
2285d522f475Smrg{
2286d522f475Smrg    handle_vt_toggle(do_font_utf8_mode, term->screen.utf8_mode,
2287d522f475Smrg		     params, *param_count, w);
2288d522f475Smrg}
2289d522f475Smrg
2290d522f475Smrgvoid
2291d522f475SmrgHandleUTF8Title(Widget w,
2292d522f475Smrg		XEvent * event GCC_UNUSED,
2293d522f475Smrg		String * params,
2294d522f475Smrg		Cardinal *param_count)
2295d522f475Smrg{
2296d522f475Smrg    handle_vt_toggle(do_font_utf8_title, term->screen.utf8_title,
2297d522f475Smrg		     params, *param_count, w);
2298d522f475Smrg}
2299d522f475Smrg#endif
2300d522f475Smrg
2301d522f475Smrg#if OPT_TEK4014
2302d522f475Smrgvoid
2303d522f475SmrgHandleSetTerminalType(Widget w,
2304d522f475Smrg		      XEvent * event GCC_UNUSED,
2305d522f475Smrg		      String * params,
2306d522f475Smrg		      Cardinal *param_count)
2307d522f475Smrg{
2308d522f475Smrg    if (*param_count == 1) {
2309d522f475Smrg	switch (params[0][0]) {
2310d522f475Smrg	case 'v':
2311d522f475Smrg	case 'V':
2312d522f475Smrg	    if (TEK4014_ACTIVE(term))
2313d522f475Smrg		do_vtmode(w, (XtPointer) 0, (XtPointer) 0);
2314d522f475Smrg	    break;
2315d522f475Smrg	case 't':
2316d522f475Smrg	case 'T':
2317d522f475Smrg	    if (!TEK4014_ACTIVE(term))
2318d522f475Smrg		do_tekmode(w, (XtPointer) 0, (XtPointer) 0);
2319d522f475Smrg	    break;
2320d522f475Smrg	default:
2321d522f475Smrg	    Bell(XkbBI_MinorError, 0);
2322d522f475Smrg	}
2323d522f475Smrg    } else {
2324d522f475Smrg	Bell(XkbBI_MinorError, 0);
2325d522f475Smrg    }
2326d522f475Smrg}
2327d522f475Smrg
2328d522f475Smrgvoid
2329d522f475SmrgHandleVisibility(Widget w,
2330d522f475Smrg		 XEvent * event GCC_UNUSED,
2331d522f475Smrg		 String * params,
2332d522f475Smrg		 Cardinal *param_count)
2333d522f475Smrg{
2334d522f475Smrg    if (*param_count == 2) {
2335d522f475Smrg	switch (params[0][0]) {
2336d522f475Smrg	case 'v':
2337d522f475Smrg	case 'V':
2338d522f475Smrg	    handle_tek_toggle(do_vtonoff, (int) term->screen.Vshow,
2339d522f475Smrg			      params + 1, (*param_count) - 1, w);
2340d522f475Smrg	    break;
2341d522f475Smrg	case 't':
2342d522f475Smrg	case 'T':
2343d522f475Smrg	    handle_tek_toggle(do_tekonoff, (int) TEK4014_SHOWN(term),
2344d522f475Smrg			      params + 1, (*param_count) - 1, w);
2345d522f475Smrg	    break;
2346d522f475Smrg	default:
2347d522f475Smrg	    Bell(XkbBI_MinorError, 0);
2348d522f475Smrg	}
2349d522f475Smrg    } else {
2350d522f475Smrg	Bell(XkbBI_MinorError, 0);
2351d522f475Smrg    }
2352d522f475Smrg}
2353d522f475Smrg
2354d522f475Smrg/* ARGSUSED */
2355d522f475Smrgvoid
2356d522f475SmrgHandleSetTekText(Widget w,
2357d522f475Smrg		 XEvent * event GCC_UNUSED,
2358d522f475Smrg		 String * params,
2359d522f475Smrg		 Cardinal *param_count)
2360d522f475Smrg{
2361d522f475Smrg    void (*proc) PROTO_XT_CALLBACK_ARGS = 0;
2362d522f475Smrg
2363d522f475Smrg    switch (*param_count) {
2364d522f475Smrg    case 0:
2365d522f475Smrg	proc = do_tektextlarge;
2366d522f475Smrg	break;
2367d522f475Smrg    case 1:
2368d522f475Smrg	switch (TekGetFontSize(params[0])) {
2369d522f475Smrg	case TEK_FONT_LARGE:
2370d522f475Smrg	    proc = do_tektextlarge;
2371d522f475Smrg	    break;
2372d522f475Smrg	case TEK_FONT_2:
2373d522f475Smrg	    proc = do_tektext2;
2374d522f475Smrg	    break;
2375d522f475Smrg	case TEK_FONT_3:
2376d522f475Smrg	    proc = do_tektext3;
2377d522f475Smrg	    break;
2378d522f475Smrg	case TEK_FONT_SMALL:
2379d522f475Smrg	    proc = do_tektextsmall;
2380d522f475Smrg	    break;
2381d522f475Smrg	}
2382d522f475Smrg	break;
2383d522f475Smrg    }
2384d522f475Smrg    if (proc)
2385d522f475Smrg	(*proc) (w, (XtPointer) 0, (XtPointer) 0);
2386d522f475Smrg    else
2387d522f475Smrg	Bell(XkbBI_MinorError, 0);
2388d522f475Smrg}
2389d522f475Smrg
2390d522f475Smrg/* ARGSUSED */
2391d522f475Smrgvoid
2392d522f475SmrgHandleTekPage(Widget w,
2393d522f475Smrg	      XEvent * event GCC_UNUSED,
2394d522f475Smrg	      String * params GCC_UNUSED,
2395d522f475Smrg	      Cardinal *param_count GCC_UNUSED)
2396d522f475Smrg{
2397d522f475Smrg    do_tekpage(w, (XtPointer) 0, (XtPointer) 0);
2398d522f475Smrg}
2399d522f475Smrg
2400d522f475Smrg/* ARGSUSED */
2401d522f475Smrgvoid
2402d522f475SmrgHandleTekReset(Widget w,
2403d522f475Smrg	       XEvent * event GCC_UNUSED,
2404d522f475Smrg	       String * params GCC_UNUSED,
2405d522f475Smrg	       Cardinal *param_count GCC_UNUSED)
2406d522f475Smrg{
2407d522f475Smrg    do_tekreset(w, (XtPointer) 0, (XtPointer) 0);
2408d522f475Smrg}
2409d522f475Smrg
2410d522f475Smrg/* ARGSUSED */
2411d522f475Smrgvoid
2412d522f475SmrgHandleTekCopy(Widget w,
2413d522f475Smrg	      XEvent * event GCC_UNUSED,
2414d522f475Smrg	      String * params GCC_UNUSED,
2415d522f475Smrg	      Cardinal *param_count GCC_UNUSED)
2416d522f475Smrg{
2417d522f475Smrg    do_tekcopy(w, (XtPointer) 0, (XtPointer) 0);
2418d522f475Smrg}
2419d522f475Smrg#endif /* OPT_TEK4014 */
2420d522f475Smrg
2421d522f475Smrgstatic void
2422d522f475SmrgUpdateMenuItem(
2423d522f475Smrg#if OPT_TRACE
2424d522f475Smrg		  const char *func,
2425d522f475Smrg#endif
2426d522f475Smrg		  MenuEntry * menu,
2427d522f475Smrg		  int which,
2428956cc18dSsnj		  Bool val)
2429d522f475Smrg{
2430d522f475Smrg    static Arg menuArgs =
2431d522f475Smrg    {XtNleftBitmap, (XtArgVal) 0};
2432d522f475Smrg    Widget mi = menu[which].widget;
2433d522f475Smrg
2434d522f475Smrg    if (mi) {
2435d522f475Smrg	menuArgs.value = (XtArgVal) ((val)
2436d522f475Smrg				     ? term->screen.menu_item_bitmap
2437d522f475Smrg				     : None);
2438d522f475Smrg	XtSetValues(mi, &menuArgs, (Cardinal) 1);
2439d522f475Smrg    }
2440d522f475Smrg    TRACE(("%s(%d): %s\n", func, which, BtoS(val)));
2441d522f475Smrg}
2442d522f475Smrg
2443d522f475Smrg#if OPT_TRACE
2444d522f475Smrg#define UpdateCheckbox(func, mn, mi, val) UpdateMenuItem(func, mn, mi, val)
2445d522f475Smrg#else
2446d522f475Smrg#define UpdateCheckbox(func, mn, mi, val) UpdateMenuItem(mn, mi, val)
2447d522f475Smrg#endif
2448d522f475Smrg
2449d522f475Smrgvoid
2450956cc18dSsnjSetItemSensitivity(Widget mi, Bool val)
2451d522f475Smrg{
2452d522f475Smrg    static Arg menuArgs =
2453d522f475Smrg    {XtNsensitive, (XtArgVal) 0};
2454d522f475Smrg
2455d522f475Smrg    if (mi) {
2456d522f475Smrg	menuArgs.value = (XtArgVal) (val);
2457d522f475Smrg	XtSetValues(mi, &menuArgs, (Cardinal) 1);
2458d522f475Smrg    }
2459d522f475Smrg}
2460d522f475Smrg
2461d522f475Smrg#if OPT_TOOLBAR
2462d522f475Smrg/*
2463d522f475Smrg * The normal style of xterm popup menu delays initialization until the menu is
2464d522f475Smrg * first requested.  When using a toolbar, we can use the same initialization,
2465d522f475Smrg * though on the first popup there will be a little geometry layout jitter,
2466d522f475Smrg * since the menu is already managed when this callback is invoked.
2467d522f475Smrg */
2468d522f475Smrgstatic void
2469d522f475SmrgInitPopup(Widget gw,
2470d522f475Smrg	  XtPointer closure,
2471d522f475Smrg	  XtPointer data GCC_UNUSED)
2472d522f475Smrg{
2473d522f475Smrg    String params[2];
2474d522f475Smrg    Cardinal count = 1;
2475d522f475Smrg
2476d522f475Smrg    params[0] = (char *) closure;
2477d522f475Smrg    params[1] = 0;
2478d522f475Smrg    TRACE(("InitPopup(%s)\n", params[0]));
2479d522f475Smrg
2480d522f475Smrg    domenu(gw, (XEvent *) 0, params, &count);
2481d522f475Smrg
2482d522f475Smrg    if (gw)
2483d522f475Smrg	XtRemoveCallback(gw, XtNpopupCallback, InitPopup, closure);
2484d522f475Smrg}
2485d522f475Smrg
2486d522f475Smrgstatic Dimension
2487d522f475SmrgSetupShell(Widget *menus, MenuList * shell, int n, int m)
2488d522f475Smrg{
2489d522f475Smrg    char temp[80];
2490d522f475Smrg    char *external_name = 0;
2491d522f475Smrg    Dimension button_height;
2492d522f475Smrg    Dimension button_border;
2493d522f475Smrg    String saveLocale = setMenuLocale(True, resource.menuLocale);
2494d522f475Smrg
2495d522f475Smrg    shell[n].w = XtVaCreatePopupShell(menu_names[n].internal_name,
2496d522f475Smrg				      simpleMenuWidgetClass,
2497d522f475Smrg				      *menus,
2498d522f475Smrg				      XtNgeometry, NULL,
2499d522f475Smrg				      (XtPointer) 0);
2500d522f475Smrg
2501d522f475Smrg    XtAddCallback(shell[n].w, XtNpopupCallback, InitPopup, menu_names[n].internal_name);
2502d522f475Smrg    XtVaGetValues(shell[n].w,
2503d522f475Smrg		  XtNlabel, &external_name,
2504d522f475Smrg		  (XtPointer) 0);
2505d522f475Smrg
2506d522f475Smrg    TRACE(("...SetupShell(%s) -> %s -> %#lx\n",
2507d522f475Smrg	   menu_names[n].internal_name,
2508d522f475Smrg	   external_name,
2509d522f475Smrg	   (long) shell[n].w));
2510d522f475Smrg
2511d522f475Smrg    sprintf(temp, "%sButton", menu_names[n].internal_name);
2512d522f475Smrg    shell[n].b = XtVaCreateManagedWidget(temp,
2513d522f475Smrg					 menuButtonWidgetClass,
2514d522f475Smrg					 *menus,
2515d522f475Smrg					 XtNfromHoriz, ((m >= 0)
2516d522f475Smrg							? shell[m].b
2517d522f475Smrg							: 0),
2518d522f475Smrg					 XtNmenuName, menu_names[n].internal_name,
2519d522f475Smrg					 XtNlabel, external_name,
2520d522f475Smrg					 (XtPointer) 0);
2521d522f475Smrg    XtVaGetValues(shell[n].b,
2522d522f475Smrg		  XtNheight, &button_height,
2523d522f475Smrg		  XtNborderWidth, &button_border,
2524d522f475Smrg		  (XtPointer) 0);
2525d522f475Smrg
2526956cc18dSsnj    (void) setMenuLocale(False, saveLocale);
2527956cc18dSsnj    return (Dimension) (button_height + (button_border * 2));
2528d522f475Smrg}
2529d522f475Smrg#endif /* OPT_TOOLBAR */
2530d522f475Smrg
2531d522f475Smrgvoid
2532d522f475SmrgSetupMenus(Widget shell, Widget *forms, Widget *menus, Dimension * menu_high)
2533d522f475Smrg{
2534d522f475Smrg#if OPT_TOOLBAR
2535d522f475Smrg    Dimension button_height = 0;
2536d522f475Smrg    Dimension toolbar_hSpace;
2537d522f475Smrg    Arg args[10];
2538d522f475Smrg#endif
2539d522f475Smrg
2540d522f475Smrg    TRACE(("SetupMenus(%s)\n", shell == toplevel ? "vt100" : "tek4014"));
2541d522f475Smrg
2542d522f475Smrg    *menu_high = 0;
2543d522f475Smrg
2544d522f475Smrg    if (shell == toplevel) {
2545d522f475Smrg	XawSimpleMenuAddGlobalActions(app_con);
2546d522f475Smrg	XtRegisterGrabAction(HandlePopupMenu, True,
2547d522f475Smrg			     (ButtonPressMask | ButtonReleaseMask),
2548d522f475Smrg			     GrabModeAsync, GrabModeAsync);
2549d522f475Smrg    }
2550d522f475Smrg#if OPT_TOOLBAR
2551d522f475Smrg    *forms = XtVaCreateManagedWidget("form",
2552d522f475Smrg				     formWidgetClass, shell,
2553d522f475Smrg				     (XtPointer) 0);
2554d522f475Smrg    xtermAddInput(*forms);
2555d522f475Smrg
2556d522f475Smrg    /*
2557d522f475Smrg     * Set a nominal value for the preferred pane size, which lets the
2558d522f475Smrg     * buttons determine the actual height of the menu bar.  We don't show
2559d522f475Smrg     * the grip, because it's too easy to make the toolbar look bad that
2560d522f475Smrg     * way.
2561d522f475Smrg     */
2562d522f475Smrg    XtSetArg(args[0], XtNorientation, XtorientHorizontal);
2563d522f475Smrg    XtSetArg(args[1], XtNtop, XawChainTop);
2564d522f475Smrg    XtSetArg(args[2], XtNbottom, XawChainTop);
2565d522f475Smrg    XtSetArg(args[3], XtNleft, XawChainLeft);
2566d522f475Smrg    XtSetArg(args[4], XtNright, XawChainLeft);
2567d522f475Smrg
2568d522f475Smrg    if (resource.toolBar) {
2569d522f475Smrg	*menus = XtCreateManagedWidget("menubar", boxWidgetClass, *forms,
2570d522f475Smrg				       args, 5);
2571d522f475Smrg    } else {
2572d522f475Smrg	*menus = XtCreateWidget("menubar", boxWidgetClass, *forms, args, 5);
2573d522f475Smrg    }
2574d522f475Smrg
2575d522f475Smrg    /*
2576d522f475Smrg     * The toolbar widget's height is not necessarily known yet.  If the
2577d522f475Smrg     * toolbar is not created as a managed widget, we can still make a good
2578d522f475Smrg     * guess about its height by collecting the widget's other resource values.
2579d522f475Smrg     */
2580d522f475Smrg    XtVaGetValues(*menus,
2581d522f475Smrg		  XtNhSpace, &toolbar_hSpace,
2582d522f475Smrg		  (XtPointer) 0);
2583d522f475Smrg
2584d522f475Smrg    if (shell == toplevel) {	/* vt100 */
2585d522f475Smrg	int j;
2586d522f475Smrg	for (j = mainMenu; j <= fontMenu; j++) {
2587d522f475Smrg	    button_height = SetupShell(menus, vt_shell, j, j - 1);
2588d522f475Smrg	}
2589d522f475Smrg    }
2590d522f475Smrg#if OPT_TEK4014
2591d522f475Smrg    else {			/* tek4014 */
2592d522f475Smrg	button_height = SetupShell(menus, tek_shell, mainMenu, -1);
2593d522f475Smrg	button_height = SetupShell(menus, tek_shell, tekMenu, mainMenu);
2594d522f475Smrg    }
2595d522f475Smrg#endif
2596d522f475Smrg
2597d522f475Smrg    /*
2598d522f475Smrg     * Tell the main program how high the toolbar is, to help with the initial
2599d522f475Smrg     * layout.
2600d522f475Smrg     */
2601956cc18dSsnj    *menu_high = (Dimension) (button_height + 2 * (toolbar_hSpace));
26022eaa94a1Schristos    TRACE(("...menuHeight:%d = (%d + 2 * %d)\n",
26032eaa94a1Schristos	   *menu_high, button_height, toolbar_hSpace));
2604d522f475Smrg
2605d522f475Smrg#else /* !OPT_TOOLBAR */
2606d522f475Smrg    *forms = shell;
2607d522f475Smrg    *menus = shell;
2608d522f475Smrg#endif
2609d522f475Smrg
2610d522f475Smrg    TRACE(("...shell=%#lx\n", (long) shell));
2611d522f475Smrg    TRACE(("...forms=%#lx\n", (long) *forms));
2612d522f475Smrg    TRACE(("...menus=%#lx\n", (long) *menus));
2613d522f475Smrg}
2614d522f475Smrg
2615d522f475Smrgvoid
2616d522f475SmrgrepairSizeHints(void)
2617d522f475Smrg{
2618d522f475Smrg    TScreen *screen = TScreenOf(term);
2619d522f475Smrg
2620d522f475Smrg    if (XtIsRealized((Widget) term)) {
2621d522f475Smrg	getXtermSizeHints(term);
2622d522f475Smrg	xtermSizeHints(term, ScrollbarWidth(screen));
2623d522f475Smrg
2624d522f475Smrg	XSetWMNormalHints(screen->display, XtWindow(SHELL_OF(term)), &term->hints);
2625d522f475Smrg    }
2626d522f475Smrg}
2627d522f475Smrg
2628d522f475Smrg#if OPT_TOOLBAR
2629d522f475Smrg#define INIT_POPUP(s, n) InitPopup(s[n].w, menu_names[n].internal_name, 0)
2630d522f475Smrg
2631d522f475Smrgstatic Bool
2632d522f475SmrgInitWidgetMenu(Widget shell)
2633d522f475Smrg{
2634d522f475Smrg    Bool result = False;
2635d522f475Smrg
2636d522f475Smrg    TRACE(("InitWidgetMenu(%p)\n", shell));
2637d522f475Smrg    if (term != 0) {
2638d522f475Smrg	if (shell == toplevel) {	/* vt100 */
2639d522f475Smrg	    if (!term->init_menu) {
2640d522f475Smrg		INIT_POPUP(vt_shell, mainMenu);
2641d522f475Smrg		INIT_POPUP(vt_shell, vtMenu);
2642d522f475Smrg		INIT_POPUP(vt_shell, fontMenu);
2643d522f475Smrg		term->init_menu = True;
2644d522f475Smrg		TRACE(("...InitWidgetMenu(vt)\n"));
2645d522f475Smrg	    }
2646d522f475Smrg	    result = term->init_menu;
2647d522f475Smrg	}
2648d522f475Smrg#if OPT_TEK4014
2649d522f475Smrg	else if (tekWidget) {	/* tek4014 */
2650d522f475Smrg	    if (!tekWidget->init_menu) {
2651d522f475Smrg		INIT_POPUP(tek_shell, mainMenu);
2652d522f475Smrg		INIT_POPUP(tek_shell, tekMenu);
2653d522f475Smrg		tekWidget->init_menu = True;
2654d522f475Smrg		TRACE(("...InitWidgetMenu(tek)\n"));
2655d522f475Smrg	    }
2656d522f475Smrg	    result = tekWidget->init_menu;
2657d522f475Smrg	}
2658d522f475Smrg#endif
2659d522f475Smrg    }
2660d522f475Smrg    TRACE(("...InitWidgetMenu ->%d\n", result));
2661d522f475Smrg    return result;
2662d522f475Smrg}
2663d522f475Smrg
2664d522f475Smrgstatic TbInfo *
2665d522f475Smrgtoolbar_info(Widget w)
2666d522f475Smrg{
2667d522f475Smrg    TRACE(("...getting toolbar_info\n"));
2668d522f475Smrg#if OPT_TEK4014
2669d522f475Smrg    if (w != (Widget) term)
2670d522f475Smrg	return &(tekWidget->tek.tb_info);
2671d522f475Smrg#else
2672d522f475Smrg    (void) w;
2673d522f475Smrg#endif
2674d522f475Smrg    return &(WhichVWin(&(term->screen))->tb_info);
2675d522f475Smrg}
2676d522f475Smrg
2677d522f475Smrgstatic void
2678d522f475Smrghide_toolbar(Widget w)
2679d522f475Smrg{
2680d522f475Smrg    if (w != 0) {
2681d522f475Smrg	TbInfo *info = toolbar_info(w);
2682d522f475Smrg
2683d522f475Smrg	TRACE(("hiding toolbar\n"));
2684d522f475Smrg	XtVaSetValues(w,
2685d522f475Smrg		      XtNfromVert, (Widget) 0,
2686d522f475Smrg		      (XtPointer) 0);
2687d522f475Smrg
2688d522f475Smrg	if (info->menu_bar != 0) {
2689d522f475Smrg	    repairSizeHints();
2690d522f475Smrg	    XtUnmanageChild(info->menu_bar);
2691d522f475Smrg	    if (XtIsRealized(info->menu_bar)) {
2692d522f475Smrg		XtUnmapWidget(info->menu_bar);
2693d522f475Smrg	    }
2694d522f475Smrg	}
2695d522f475Smrg	TRACE(("...hiding toolbar (done)\n"));
2696d522f475Smrg    }
2697d522f475Smrg}
2698d522f475Smrg
2699d522f475Smrgstatic void
2700d522f475Smrgshow_toolbar(Widget w)
2701d522f475Smrg{
2702d522f475Smrg    if (w != 0) {
2703d522f475Smrg	TbInfo *info = toolbar_info(w);
2704d522f475Smrg
2705d522f475Smrg	TRACE(("showing toolbar\n"));
2706d522f475Smrg	if (info->menu_bar != 0) {
2707d522f475Smrg	    XtVaSetValues(w,
2708d522f475Smrg			  XtNfromVert, info->menu_bar,
2709d522f475Smrg			  (XtPointer) 0);
2710d522f475Smrg	    if (XtIsRealized(info->menu_bar))
2711d522f475Smrg		repairSizeHints();
2712d522f475Smrg	    XtManageChild(info->menu_bar);
2713d522f475Smrg	    if (XtIsRealized(info->menu_bar)) {
2714d522f475Smrg		XtMapWidget(info->menu_bar);
2715d522f475Smrg	    }
2716d522f475Smrg	}
2717d522f475Smrg	/*
2718d522f475Smrg	 * This is needed to make the terminal widget move down below the
2719d522f475Smrg	 * toolbar.
2720d522f475Smrg	 */
2721d522f475Smrg	XawFormDoLayout(XtParent(w), True);
2722d522f475Smrg	TRACE(("...showing toolbar (done)\n"));
2723d522f475Smrg    }
2724d522f475Smrg}
2725d522f475Smrg
2726d522f475Smrg/*
2727d522f475Smrg * Make the toolbar visible or invisible in the current window(s).
2728d522f475Smrg */
2729d522f475Smrgvoid
2730d522f475SmrgShowToolbar(Bool enable)
2731d522f475Smrg{
2732d522f475Smrg    TRACE(("ShowToolbar(%d)\n", enable));
2733d522f475Smrg
2734d522f475Smrg    if (IsIcon(&(term->screen))) {
2735d522f475Smrg	Bell(XkbBI_MinorError, 0);
2736d522f475Smrg    } else {
2737d522f475Smrg	if (enable) {
2738d522f475Smrg	    if (InitWidgetMenu(toplevel))
2739d522f475Smrg		show_toolbar((Widget) term);
2740d522f475Smrg#if OPT_TEK4014
2741d522f475Smrg	    if (InitWidgetMenu(tekshellwidget))
2742d522f475Smrg		show_toolbar((Widget) tekWidget);
2743d522f475Smrg#endif
2744d522f475Smrg	} else {
2745d522f475Smrg	    hide_toolbar((Widget) term);
2746d522f475Smrg#if OPT_TEK4014
2747d522f475Smrg	    hide_toolbar((Widget) tekWidget);
2748d522f475Smrg#endif
2749d522f475Smrg	}
2750956cc18dSsnj	resource.toolBar = (Boolean) enable;
2751d522f475Smrg	update_toolbar();
2752d522f475Smrg    }
2753d522f475Smrg}
2754d522f475Smrg
2755d522f475Smrgvoid
2756d522f475SmrgHandleToolbar(Widget w,
2757d522f475Smrg	      XEvent * event GCC_UNUSED,
2758d522f475Smrg	      String * params GCC_UNUSED,
2759d522f475Smrg	      Cardinal *param_count GCC_UNUSED)
2760d522f475Smrg{
2761d522f475Smrg    if (IsIcon(&(term->screen))) {
2762d522f475Smrg	Bell(XkbBI_MinorError, 0);
2763d522f475Smrg    } else {
2764d522f475Smrg	handle_vt_toggle(do_toolbar, resource.toolBar,
2765d522f475Smrg			 params, *param_count, w);
2766d522f475Smrg    }
2767d522f475Smrg}
2768d522f475Smrg
2769d522f475Smrg/* ARGSUSED */
2770d522f475Smrgstatic void
2771d522f475Smrgdo_toolbar(Widget gw GCC_UNUSED,
2772d522f475Smrg	   XtPointer closure GCC_UNUSED,
2773d522f475Smrg	   XtPointer data GCC_UNUSED)
2774d522f475Smrg{
2775d522f475Smrg    /*
2776d522f475Smrg     * Toggle toolbars for both vt100 and tek windows, since they share the
2777d522f475Smrg     * menu which contains the checkbox indicating whether the toolbar is
2778d522f475Smrg     * active.
2779d522f475Smrg     */
2780d522f475Smrg    if (IsIcon(&(term->screen))) {
2781d522f475Smrg	Bell(XkbBI_MinorError, 0);
2782d522f475Smrg    } else {
2783956cc18dSsnj	ShowToolbar(ToggleFlag(resource.toolBar));
2784d522f475Smrg    }
2785d522f475Smrg}
2786d522f475Smrg
2787d522f475Smrgvoid
2788d522f475Smrgupdate_toolbar(void)
2789d522f475Smrg{
2790d522f475Smrg    UpdateCheckbox("update_toolbar",
2791d522f475Smrg		   mainMenuEntries,
2792d522f475Smrg		   mainMenu_toolbar,
2793d522f475Smrg		   resource.toolBar);
2794d522f475Smrg}
2795d522f475Smrg#endif /* OPT_TOOLBAR */
2796d522f475Smrg
2797d522f475Smrgvoid
2798d522f475Smrgupdate_securekbd(void)
2799d522f475Smrg{
2800d522f475Smrg    UpdateCheckbox("update_securekbd",
2801d522f475Smrg		   mainMenuEntries,
2802d522f475Smrg		   mainMenu_securekbd,
2803d522f475Smrg		   term->screen.grabbedKbd);
2804d522f475Smrg}
2805d522f475Smrg
2806d522f475Smrgvoid
2807d522f475Smrgupdate_allowsends(void)
2808d522f475Smrg{
2809d522f475Smrg    UpdateCheckbox("update_allowsends",
2810d522f475Smrg		   mainMenuEntries,
2811d522f475Smrg		   mainMenu_allowsends,
2812d522f475Smrg		   term->screen.allowSendEvents);
2813d522f475Smrg}
2814d522f475Smrg
2815d522f475Smrg#ifdef ALLOWLOGGING
2816d522f475Smrgvoid
2817d522f475Smrgupdate_logging(void)
2818d522f475Smrg{
2819d522f475Smrg    UpdateCheckbox("update_logging",
2820d522f475Smrg		   mainMenuEntries,
2821d522f475Smrg		   mainMenu_logging,
2822d522f475Smrg		   term->screen.logging);
2823d522f475Smrg}
2824d522f475Smrg#endif
2825d522f475Smrg
2826d522f475Smrgvoid
2827d522f475Smrgupdate_print_redir(void)
2828d522f475Smrg{
2829d522f475Smrg    UpdateCheckbox("update_print_redir",
2830d522f475Smrg		   mainMenuEntries,
2831d522f475Smrg		   mainMenu_print_redir,
2832d522f475Smrg		   term->screen.printer_controlmode);
2833d522f475Smrg}
2834d522f475Smrg
2835d522f475Smrgvoid
2836d522f475Smrgupdate_8bit_control(void)
2837d522f475Smrg{
2838d522f475Smrg    UpdateCheckbox("update_8bit_control",
2839d522f475Smrg		   mainMenuEntries,
2840d522f475Smrg		   mainMenu_8bit_ctrl,
2841d522f475Smrg		   term->screen.control_eight_bits);
2842d522f475Smrg}
2843d522f475Smrg
2844d522f475Smrgvoid
2845d522f475Smrgupdate_decbkm(void)
2846d522f475Smrg{
2847d522f475Smrg    UpdateCheckbox("update_decbkm",
2848d522f475Smrg		   mainMenuEntries,
2849d522f475Smrg		   mainMenu_backarrow,
2850d522f475Smrg		   (term->keyboard.flags & MODE_DECBKM) != 0);
2851d522f475Smrg}
2852d522f475Smrg
2853d522f475Smrg#if OPT_NUM_LOCK
2854d522f475Smrgvoid
2855d522f475Smrgupdate_num_lock(void)
2856d522f475Smrg{
2857d522f475Smrg    UpdateCheckbox("update_num_lock",
2858d522f475Smrg		   mainMenuEntries,
2859d522f475Smrg		   mainMenu_num_lock,
2860d522f475Smrg		   term->misc.real_NumLock);
2861d522f475Smrg}
2862d522f475Smrg
2863d522f475Smrgvoid
2864d522f475Smrgupdate_alt_esc(void)
2865d522f475Smrg{
2866d522f475Smrg    UpdateCheckbox("update_alt_esc",
2867d522f475Smrg		   mainMenuEntries,
2868d522f475Smrg		   mainMenu_alt_esc,
2869d522f475Smrg		   term->screen.alt_sends_esc);
2870d522f475Smrg}
2871d522f475Smrg
2872d522f475Smrgvoid
2873d522f475Smrgupdate_meta_esc(void)
2874d522f475Smrg{
2875d522f475Smrg    UpdateCheckbox("update_meta_esc",
2876d522f475Smrg		   mainMenuEntries,
2877d522f475Smrg		   mainMenu_meta_esc,
2878d522f475Smrg		   term->screen.meta_sends_esc);
2879d522f475Smrg}
2880d522f475Smrg#endif
2881d522f475Smrg
2882d522f475Smrg#if OPT_SUN_FUNC_KEYS
2883d522f475Smrgvoid
2884d522f475Smrgupdate_sun_fkeys(void)
2885d522f475Smrg{
2886d522f475Smrg    UpdateCheckbox("update_sun_fkeys",
2887d522f475Smrg		   mainMenuEntries,
2888d522f475Smrg		   mainMenu_sun_fkeys,
2889d522f475Smrg		   term->keyboard.type == keyboardIsSun);
2890d522f475Smrg}
2891d522f475Smrg#endif
2892d522f475Smrg
2893d522f475Smrg#if OPT_TCAP_FKEYS
2894d522f475Smrgvoid
2895d522f475Smrgupdate_tcap_fkeys(void)
2896d522f475Smrg{
2897d522f475Smrg    UpdateCheckbox("update_tcap_fkeys",
2898d522f475Smrg		   mainMenuEntries,
2899d522f475Smrg		   mainMenu_tcap_fkeys,
2900d522f475Smrg		   term->keyboard.type == keyboardIsTermcap);
2901d522f475Smrg}
2902d522f475Smrg#endif
2903d522f475Smrg
2904d522f475Smrgvoid
2905d522f475Smrgupdate_old_fkeys(void)
2906d522f475Smrg{
2907d522f475Smrg    UpdateCheckbox("update_old_fkeys",
2908d522f475Smrg		   mainMenuEntries,
2909d522f475Smrg		   mainMenu_old_fkeys,
2910d522f475Smrg		   term->keyboard.type == keyboardIsLegacy);
2911d522f475Smrg}
2912d522f475Smrg
2913d522f475Smrgvoid
2914d522f475Smrgupdate_delete_del(void)
2915d522f475Smrg{
2916d522f475Smrg    UpdateCheckbox("update_delete_del",
2917d522f475Smrg		   mainMenuEntries,
2918d522f475Smrg		   mainMenu_delete_del,
2919d522f475Smrg		   xtermDeleteIsDEL(term));
2920d522f475Smrg}
2921d522f475Smrg
2922d522f475Smrg#if OPT_SUNPC_KBD
2923d522f475Smrgvoid
2924d522f475Smrgupdate_sun_kbd(void)
2925d522f475Smrg{
2926d522f475Smrg    UpdateCheckbox("update_sun_kbd",
2927d522f475Smrg		   mainMenuEntries,
2928d522f475Smrg		   mainMenu_sun_kbd,
2929d522f475Smrg		   term->keyboard.type == keyboardIsVT220);
2930d522f475Smrg}
2931d522f475Smrg#endif
2932d522f475Smrg
2933d522f475Smrg#if OPT_HP_FUNC_KEYS
2934d522f475Smrgvoid
2935d522f475Smrgupdate_hp_fkeys(void)
2936d522f475Smrg{
2937d522f475Smrg    UpdateCheckbox("update_hp_fkeys",
2938d522f475Smrg		   mainMenuEntries,
2939d522f475Smrg		   mainMenu_hp_fkeys,
2940d522f475Smrg		   term->keyboard.type == keyboardIsHP);
2941d522f475Smrg}
2942d522f475Smrg#endif
2943d522f475Smrg
2944d522f475Smrg#if OPT_SCO_FUNC_KEYS
2945d522f475Smrgvoid
2946d522f475Smrgupdate_sco_fkeys(void)
2947d522f475Smrg{
2948d522f475Smrg    UpdateCheckbox("update_sco_fkeys",
2949d522f475Smrg		   mainMenuEntries,
2950d522f475Smrg		   mainMenu_sco_fkeys,
2951d522f475Smrg		   term->keyboard.type == keyboardIsSCO);
2952d522f475Smrg}
2953d522f475Smrg#endif
2954d522f475Smrg
2955d522f475Smrgvoid
2956d522f475Smrgupdate_scrollbar(void)
2957d522f475Smrg{
2958d522f475Smrg    UpdateCheckbox("update_scrollbar",
2959d522f475Smrg		   vtMenuEntries,
2960d522f475Smrg		   vtMenu_scrollbar,
2961d522f475Smrg		   ScrollbarWidth(TScreenOf(term)));
2962d522f475Smrg}
2963d522f475Smrg
2964d522f475Smrgvoid
2965d522f475Smrgupdate_jumpscroll(void)
2966d522f475Smrg{
2967d522f475Smrg    UpdateCheckbox("update_jumpscroll",
2968d522f475Smrg		   vtMenuEntries,
2969d522f475Smrg		   vtMenu_jumpscroll,
2970d522f475Smrg		   term->screen.jumpscroll);
2971d522f475Smrg}
2972d522f475Smrg
2973d522f475Smrgvoid
2974d522f475Smrgupdate_reversevideo(void)
2975d522f475Smrg{
2976d522f475Smrg    UpdateCheckbox("update_reversevideo",
2977d522f475Smrg		   vtMenuEntries,
2978d522f475Smrg		   vtMenu_reversevideo,
2979d522f475Smrg		   (term->misc.re_verse));
2980d522f475Smrg}
2981d522f475Smrg
2982d522f475Smrgvoid
2983d522f475Smrgupdate_autowrap(void)
2984d522f475Smrg{
2985d522f475Smrg    UpdateCheckbox("update_autowrap",
2986d522f475Smrg		   vtMenuEntries,
2987d522f475Smrg		   vtMenu_autowrap,
2988d522f475Smrg		   (term->flags & WRAPAROUND) != 0);
2989d522f475Smrg}
2990d522f475Smrg
2991d522f475Smrgvoid
2992d522f475Smrgupdate_reversewrap(void)
2993d522f475Smrg{
2994d522f475Smrg    UpdateCheckbox("update_reversewrap",
2995d522f475Smrg		   vtMenuEntries,
2996d522f475Smrg		   vtMenu_reversewrap,
2997d522f475Smrg		   (term->flags & REVERSEWRAP) != 0);
2998d522f475Smrg}
2999d522f475Smrg
3000d522f475Smrgvoid
3001d522f475Smrgupdate_autolinefeed(void)
3002d522f475Smrg{
3003d522f475Smrg    UpdateCheckbox("update_autolinefeed",
3004d522f475Smrg		   vtMenuEntries,
3005d522f475Smrg		   vtMenu_autolinefeed,
3006d522f475Smrg		   (term->flags & LINEFEED) != 0);
3007d522f475Smrg}
3008d522f475Smrg
3009d522f475Smrgvoid
3010d522f475Smrgupdate_appcursor(void)
3011d522f475Smrg{
3012d522f475Smrg    UpdateCheckbox("update_appcursor",
3013d522f475Smrg		   vtMenuEntries,
3014d522f475Smrg		   vtMenu_appcursor,
3015d522f475Smrg		   (term->keyboard.flags & MODE_DECCKM) != 0);
3016d522f475Smrg}
3017d522f475Smrg
3018d522f475Smrgvoid
3019d522f475Smrgupdate_appkeypad(void)
3020d522f475Smrg{
3021d522f475Smrg    UpdateCheckbox("update_appkeypad",
3022d522f475Smrg		   vtMenuEntries,
3023d522f475Smrg		   vtMenu_appkeypad,
3024d522f475Smrg		   (term->keyboard.flags & MODE_DECKPAM) != 0);
3025d522f475Smrg}
3026d522f475Smrg
3027d522f475Smrgvoid
3028d522f475Smrgupdate_scrollkey(void)
3029d522f475Smrg{
3030d522f475Smrg    UpdateCheckbox("update_scrollkey",
3031d522f475Smrg		   vtMenuEntries,
3032d522f475Smrg		   vtMenu_scrollkey,
3033d522f475Smrg		   term->screen.scrollkey);
3034d522f475Smrg}
3035d522f475Smrg
3036d522f475Smrgvoid
3037d522f475Smrgupdate_scrollttyoutput(void)
3038d522f475Smrg{
3039d522f475Smrg    UpdateCheckbox("update_scrollttyoutput",
3040d522f475Smrg		   vtMenuEntries,
3041d522f475Smrg		   vtMenu_scrollttyoutput,
3042d522f475Smrg		   term->screen.scrollttyoutput);
3043d522f475Smrg}
3044d522f475Smrg
3045d522f475Smrgvoid
3046d522f475Smrgupdate_keepSelection(void)
3047d522f475Smrg{
3048d522f475Smrg    UpdateCheckbox("update_keepSelection",
3049d522f475Smrg		   vtMenuEntries,
3050d522f475Smrg		   vtMenu_keepSelection,
3051d522f475Smrg		   term->screen.keepSelection);
3052d522f475Smrg}
3053d522f475Smrg
3054d522f475Smrgvoid
3055d522f475Smrgupdate_selectToClipboard(void)
3056d522f475Smrg{
3057d522f475Smrg    UpdateCheckbox("update_selectToClipboard",
3058d522f475Smrg		   vtMenuEntries,
3059d522f475Smrg		   vtMenu_selectToClipboard,
3060d522f475Smrg		   term->screen.selectToClipboard);
3061d522f475Smrg}
3062d522f475Smrg
3063d522f475Smrgvoid
3064d522f475Smrgupdate_allow132(void)
3065d522f475Smrg{
3066d522f475Smrg    UpdateCheckbox("update_allow132",
3067d522f475Smrg		   vtMenuEntries,
3068d522f475Smrg		   vtMenu_allow132,
3069d522f475Smrg		   term->screen.c132);
3070d522f475Smrg}
3071d522f475Smrg
3072d522f475Smrgvoid
3073d522f475Smrgupdate_cursesemul(void)
3074d522f475Smrg{
3075d522f475Smrg#if 0				/* 2006-2-12: no longer menu entry */
3076d522f475Smrg    UpdateMenuItem("update_cursesemul", vtMenuEntries, vtMenu_cursesemul,
3077d522f475Smrg		   term->screen.curses);
3078d522f475Smrg#endif
3079d522f475Smrg}
3080d522f475Smrg
3081d522f475Smrgvoid
3082d522f475Smrgupdate_visualbell(void)
3083d522f475Smrg{
3084d522f475Smrg    UpdateCheckbox("update_visualbell",
3085d522f475Smrg		   vtMenuEntries,
3086d522f475Smrg		   vtMenu_visualbell,
3087d522f475Smrg		   term->screen.visualbell);
3088d522f475Smrg}
3089d522f475Smrg
3090d522f475Smrgvoid
3091d522f475Smrgupdate_bellIsUrgent(void)
3092d522f475Smrg{
3093d522f475Smrg    UpdateCheckbox("update_bellIsUrgent",
3094d522f475Smrg		   vtMenuEntries,
3095d522f475Smrg		   vtMenu_bellIsUrgent,
3096d522f475Smrg		   term->screen.bellIsUrgent);
3097d522f475Smrg}
3098d522f475Smrg
3099d522f475Smrgvoid
3100d522f475Smrgupdate_poponbell(void)
3101d522f475Smrg{
3102d522f475Smrg    UpdateCheckbox("update_poponbell",
3103d522f475Smrg		   vtMenuEntries,
3104d522f475Smrg		   vtMenu_poponbell,
3105d522f475Smrg		   term->screen.poponbell);
3106d522f475Smrg}
3107d522f475Smrg
3108d522f475Smrg#ifndef update_marginbell	/* 2007-3-7: no longer menu entry */
3109d522f475Smrgvoid
3110d522f475Smrgupdate_marginbell(void)
3111d522f475Smrg{
3112d522f475Smrg    UpdateCheckbox("update_marginbell",
3113d522f475Smrg		   vtMenuEntries,
3114d522f475Smrg		   vtMenu_marginbell,
3115d522f475Smrg		   term->screen.marginbell);
3116d522f475Smrg}
3117d522f475Smrg#endif
3118d522f475Smrg
3119d522f475Smrg#if OPT_BLINK_CURS
3120d522f475Smrgvoid
3121d522f475Smrgupdate_cursorblink(void)
3122d522f475Smrg{
3123d522f475Smrg    UpdateCheckbox("update_cursorblink",
3124d522f475Smrg		   vtMenuEntries,
3125d522f475Smrg		   vtMenu_cursorblink,
3126d522f475Smrg		   term->screen.cursor_blink);
3127d522f475Smrg}
3128d522f475Smrg#endif
3129d522f475Smrg
3130d522f475Smrgvoid
3131d522f475Smrgupdate_altscreen(void)
3132d522f475Smrg{
3133d522f475Smrg    UpdateCheckbox("update_altscreen",
3134d522f475Smrg		   vtMenuEntries,
3135d522f475Smrg		   vtMenu_altscreen,
3136956cc18dSsnj		   term->screen.whichBuf);
3137d522f475Smrg}
3138d522f475Smrg
3139d522f475Smrgvoid
3140d522f475Smrgupdate_titeInhibit(void)
3141d522f475Smrg{
3142d522f475Smrg    UpdateCheckbox("update_titeInhibit",
3143d522f475Smrg		   vtMenuEntries,
3144d522f475Smrg		   vtMenu_titeInhibit,
3145d522f475Smrg		   !(term->misc.titeInhibit));
3146d522f475Smrg}
3147d522f475Smrg
3148d522f475Smrg#ifndef NO_ACTIVE_ICON
3149d522f475Smrgvoid
3150d522f475Smrgupdate_activeicon(void)
3151d522f475Smrg{
3152d522f475Smrg    UpdateCheckbox("update_activeicon",
3153d522f475Smrg		   vtMenuEntries,
3154d522f475Smrg		   vtMenu_activeicon,
3155d522f475Smrg		   term->misc.active_icon);
3156d522f475Smrg}
3157d522f475Smrg#endif /* NO_ACTIVE_ICON */
3158d522f475Smrg
3159d522f475Smrg#if OPT_DEC_CHRSET
3160d522f475Smrgvoid
3161d522f475Smrgupdate_font_doublesize(void)
3162d522f475Smrg{
3163d522f475Smrg    UpdateCheckbox("update_font_doublesize",
3164d522f475Smrg		   fontMenuEntries,
3165d522f475Smrg		   fontMenu_font_doublesize,
3166d522f475Smrg		   term->screen.font_doublesize);
3167d522f475Smrg}
3168d522f475Smrg#endif
3169d522f475Smrg
3170d522f475Smrg#if OPT_BOX_CHARS
3171d522f475Smrgvoid
3172d522f475Smrgupdate_font_boxchars(void)
3173d522f475Smrg{
3174d522f475Smrg    UpdateCheckbox("update_font_boxchars",
3175d522f475Smrg		   fontMenuEntries,
3176d522f475Smrg		   fontMenu_font_boxchars,
3177d522f475Smrg		   term->screen.force_box_chars);
3178d522f475Smrg}
3179d522f475Smrg#endif
3180d522f475Smrg
3181d522f475Smrg#if OPT_DEC_SOFTFONT
3182d522f475Smrgvoid
3183d522f475Smrgupdate_font_loadable(void)
3184d522f475Smrg{
3185d522f475Smrg    UpdateCheckbox("update_font_loadable",
3186d522f475Smrg		   fontMenuEntries,
3187d522f475Smrg		   fontMenu_font_loadable,
3188d522f475Smrg		   term->misc.font_loadable);
3189d522f475Smrg}
3190d522f475Smrg#endif
3191d522f475Smrg
3192d522f475Smrg#if OPT_RENDERFONT
3193d522f475Smrgvoid
3194d522f475Smrgupdate_font_renderfont(void)
3195d522f475Smrg{
3196d522f475Smrg    UpdateCheckbox("update_font_renderfont",
3197d522f475Smrg		   fontMenuEntries,
3198d522f475Smrg		   fontMenu_render_font,
3199d522f475Smrg		   term->misc.render_font);
3200d522f475Smrg}
3201d522f475Smrg#endif
3202d522f475Smrg
3203d522f475Smrg#if OPT_WIDE_CHARS
3204d522f475Smrgvoid
3205d522f475Smrgupdate_font_utf8_mode(void)
3206d522f475Smrg{
3207d522f475Smrg    Bool active = (term->screen.utf8_mode != uAlways);
3208d522f475Smrg    Bool enable = (term->screen.utf8_mode != uFalse);
3209d522f475Smrg
3210d522f475Smrg    TRACE(("update_font_utf8_mode active %d, enable %d\n", active, enable));
3211d522f475Smrg    SetItemSensitivity(fontMenuEntries[fontMenu_wide_chars].widget, active);
3212d522f475Smrg    UpdateCheckbox("update_font_utf8_mode",
3213d522f475Smrg		   fontMenuEntries,
3214d522f475Smrg		   fontMenu_wide_chars,
3215d522f475Smrg		   enable);
3216d522f475Smrg}
3217d522f475Smrg
3218d522f475Smrgvoid
3219d522f475Smrgupdate_font_utf8_title(void)
3220d522f475Smrg{
3221d522f475Smrg    Bool active = (term->screen.utf8_mode != uFalse);
3222d522f475Smrg    Bool enable = (term->screen.utf8_title);
3223d522f475Smrg
3224d522f475Smrg    TRACE(("update_font_utf8_title active %d, enable %d\n", active, enable));
3225d522f475Smrg    SetItemSensitivity(fontMenuEntries[fontMenu_wide_title].widget, active);
3226d522f475Smrg    UpdateCheckbox("update_font_utf8_title",
3227d522f475Smrg		   fontMenuEntries,
3228d522f475Smrg		   fontMenu_wide_title,
3229d522f475Smrg		   enable);
3230d522f475Smrg}
3231d522f475Smrg#endif
3232d522f475Smrg
3233956cc18dSsnj#if OPT_ALLOW_XXX_OPS
3234956cc18dSsnjstatic void
3235956cc18dSsnjenable_allow_xxx_ops(Bool enable)
3236956cc18dSsnj{
3237956cc18dSsnj    SetItemSensitivity(fontMenuEntries[fontMenu_allowFontOps].widget, enable);
3238956cc18dSsnj    SetItemSensitivity(fontMenuEntries[fontMenu_allowTcapOps].widget, enable);
3239956cc18dSsnj    SetItemSensitivity(fontMenuEntries[fontMenu_allowTitleOps].widget, enable);
3240956cc18dSsnj    SetItemSensitivity(fontMenuEntries[fontMenu_allowWindowOps].widget, enable);
3241956cc18dSsnj}
3242956cc18dSsnj
3243956cc18dSsnjstatic void
3244956cc18dSsnjdo_allowFontOps(Widget w,
3245956cc18dSsnj		XtPointer closure GCC_UNUSED,
3246956cc18dSsnj		XtPointer data GCC_UNUSED)
3247956cc18dSsnj{
3248956cc18dSsnj    XtermWidget xw = getXtermWidget(w);
3249956cc18dSsnj    if (xw != 0) {
3250956cc18dSsnj	ToggleFlag(xw->screen.allowFontOps);
3251956cc18dSsnj	update_menu_allowFontOps();
3252956cc18dSsnj    }
3253956cc18dSsnj}
3254956cc18dSsnj
3255956cc18dSsnjstatic void
3256956cc18dSsnjdo_allowTcapOps(Widget w,
3257956cc18dSsnj		XtPointer closure GCC_UNUSED,
3258956cc18dSsnj		XtPointer data GCC_UNUSED)
3259956cc18dSsnj{
3260956cc18dSsnj    XtermWidget xw = getXtermWidget(w);
3261956cc18dSsnj    if (xw != 0) {
3262956cc18dSsnj	ToggleFlag(xw->screen.allowTcapOps);
3263956cc18dSsnj	update_menu_allowTcapOps();
3264956cc18dSsnj    }
3265956cc18dSsnj}
3266956cc18dSsnj
3267956cc18dSsnjstatic void
3268956cc18dSsnjdo_allowTitleOps(Widget w,
3269956cc18dSsnj		 XtPointer closure GCC_UNUSED,
3270956cc18dSsnj		 XtPointer data GCC_UNUSED)
3271956cc18dSsnj{
3272956cc18dSsnj    XtermWidget xw = getXtermWidget(w);
3273956cc18dSsnj    if (xw != 0) {
3274956cc18dSsnj	ToggleFlag(xw->screen.allowTitleOps);
3275956cc18dSsnj	update_menu_allowTitleOps();
3276956cc18dSsnj    }
3277956cc18dSsnj}
3278956cc18dSsnj
3279956cc18dSsnjstatic void
3280956cc18dSsnjdo_allowWindowOps(Widget w,
3281956cc18dSsnj		  XtPointer closure GCC_UNUSED,
3282956cc18dSsnj		  XtPointer data GCC_UNUSED)
3283956cc18dSsnj{
3284956cc18dSsnj    XtermWidget xw = getXtermWidget(w);
3285956cc18dSsnj    if (xw != 0) {
3286956cc18dSsnj	ToggleFlag(xw->screen.allowWindowOps);
3287956cc18dSsnj	update_menu_allowWindowOps();
3288956cc18dSsnj    }
3289956cc18dSsnj}
3290956cc18dSsnj
3291956cc18dSsnjvoid
3292956cc18dSsnjHandleAllowFontOps(Widget w,
3293956cc18dSsnj		   XEvent * event GCC_UNUSED,
3294956cc18dSsnj		   String * params,
3295956cc18dSsnj		   Cardinal *param_count)
3296956cc18dSsnj{
3297956cc18dSsnj    handle_vt_toggle(do_allowFontOps, term->screen.allowFontOps,
3298956cc18dSsnj		     params, *param_count, w);
3299956cc18dSsnj}
3300956cc18dSsnj
3301956cc18dSsnjvoid
3302956cc18dSsnjHandleAllowTcapOps(Widget w,
3303956cc18dSsnj		   XEvent * event GCC_UNUSED,
3304956cc18dSsnj		   String * params,
3305956cc18dSsnj		   Cardinal *param_count)
3306956cc18dSsnj{
3307956cc18dSsnj    handle_vt_toggle(do_allowTcapOps, term->screen.allowTcapOps,
3308956cc18dSsnj		     params, *param_count, w);
3309956cc18dSsnj}
3310956cc18dSsnj
3311956cc18dSsnjvoid
3312956cc18dSsnjHandleAllowTitleOps(Widget w,
3313956cc18dSsnj		    XEvent * event GCC_UNUSED,
3314956cc18dSsnj		    String * params,
3315956cc18dSsnj		    Cardinal *param_count)
3316956cc18dSsnj{
3317956cc18dSsnj    handle_vt_toggle(do_allowTitleOps, term->screen.allowTitleOps,
3318956cc18dSsnj		     params, *param_count, w);
3319956cc18dSsnj}
3320956cc18dSsnj
3321956cc18dSsnjvoid
3322956cc18dSsnjHandleAllowWindowOps(Widget w,
3323956cc18dSsnj		     XEvent * event GCC_UNUSED,
3324956cc18dSsnj		     String * params,
3325956cc18dSsnj		     Cardinal *param_count)
3326956cc18dSsnj{
3327956cc18dSsnj    handle_vt_toggle(do_allowWindowOps, term->screen.allowWindowOps,
3328956cc18dSsnj		     params, *param_count, w);
3329956cc18dSsnj}
3330956cc18dSsnj
3331956cc18dSsnjvoid
3332956cc18dSsnjupdate_menu_allowTcapOps(void)
3333956cc18dSsnj{
3334956cc18dSsnj    UpdateCheckbox("update_menu_allowTcapOps",
3335956cc18dSsnj		   fontMenuEntries,
3336956cc18dSsnj		   fontMenu_allowTcapOps,
3337956cc18dSsnj		   term->screen.allowTcapOps);
3338956cc18dSsnj}
3339956cc18dSsnj
3340956cc18dSsnjvoid
3341956cc18dSsnjupdate_menu_allowFontOps(void)
3342956cc18dSsnj{
3343956cc18dSsnj    UpdateCheckbox("update_menu_allowFontOps",
3344956cc18dSsnj		   fontMenuEntries,
3345956cc18dSsnj		   fontMenu_allowFontOps,
3346956cc18dSsnj		   term->screen.allowFontOps);
3347956cc18dSsnj}
3348956cc18dSsnj
3349956cc18dSsnjvoid
3350956cc18dSsnjupdate_menu_allowTitleOps(void)
3351956cc18dSsnj{
3352956cc18dSsnj    UpdateCheckbox("update_menu_allowTitleOps",
3353956cc18dSsnj		   fontMenuEntries,
3354956cc18dSsnj		   fontMenu_allowTitleOps,
3355956cc18dSsnj		   term->screen.allowTitleOps);
3356956cc18dSsnj}
3357956cc18dSsnj
3358956cc18dSsnjvoid
3359956cc18dSsnjupdate_menu_allowWindowOps(void)
3360956cc18dSsnj{
3361956cc18dSsnj    UpdateCheckbox("update_menu_allowWindowOps",
3362956cc18dSsnj		   fontMenuEntries,
3363956cc18dSsnj		   fontMenu_allowWindowOps,
3364956cc18dSsnj		   term->screen.allowWindowOps);
3365956cc18dSsnj}
3366956cc18dSsnj#endif
3367956cc18dSsnj
3368d522f475Smrg#if OPT_TEK4014
3369d522f475Smrgvoid
3370d522f475Smrgupdate_tekshow(void)
3371d522f475Smrg{
3372d522f475Smrg    if (!(term->screen.inhibit & I_TEK)) {
3373d522f475Smrg	UpdateCheckbox("update_tekshow",
3374d522f475Smrg		       vtMenuEntries,
3375d522f475Smrg		       vtMenu_tekshow,
3376d522f475Smrg		       TEK4014_SHOWN(term));
3377d522f475Smrg    }
3378d522f475Smrg}
3379d522f475Smrg
3380d522f475Smrgvoid
3381d522f475Smrgupdate_vttekmode(void)
3382d522f475Smrg{
3383d522f475Smrg    if (!(term->screen.inhibit & I_TEK)) {
3384d522f475Smrg	UpdateCheckbox("update_vtmode",
3385d522f475Smrg		       vtMenuEntries,
3386d522f475Smrg		       vtMenu_tekmode,
3387d522f475Smrg		       TEK4014_ACTIVE(term));
3388d522f475Smrg	UpdateCheckbox("update_tekmode",
3389d522f475Smrg		       tekMenuEntries,
3390d522f475Smrg		       tekMenu_vtmode,
3391d522f475Smrg		       !TEK4014_ACTIVE(term));
3392d522f475Smrg    }
3393d522f475Smrg}
3394d522f475Smrg
3395d522f475Smrgvoid
3396d522f475Smrgupdate_vtshow(void)
3397d522f475Smrg{
3398d522f475Smrg    if (!(term->screen.inhibit & I_TEK)) {
3399d522f475Smrg	UpdateCheckbox("update_vtshow",
3400d522f475Smrg		       tekMenuEntries,
3401d522f475Smrg		       tekMenu_vtshow,
3402d522f475Smrg		       term->screen.Vshow);
3403d522f475Smrg    }
3404d522f475Smrg}
3405d522f475Smrg
3406d522f475Smrgvoid
3407d522f475Smrgset_vthide_sensitivity(void)
3408d522f475Smrg{
3409d522f475Smrg    if (!(term->screen.inhibit & I_TEK)) {
3410d522f475Smrg	SetItemSensitivity(
3411d522f475Smrg			      vtMenuEntries[vtMenu_vthide].widget,
3412d522f475Smrg			      TEK4014_SHOWN(term));
3413d522f475Smrg    }
3414d522f475Smrg}
3415d522f475Smrg
3416d522f475Smrgvoid
3417d522f475Smrgset_tekhide_sensitivity(void)
3418d522f475Smrg{
3419d522f475Smrg    if (!(term->screen.inhibit & I_TEK)) {
3420d522f475Smrg	SetItemSensitivity(
3421d522f475Smrg			      tekMenuEntries[tekMenu_tekhide].widget,
3422d522f475Smrg			      term->screen.Vshow);
3423d522f475Smrg    }
3424d522f475Smrg}
3425d522f475Smrg
3426d522f475Smrgvoid
3427d522f475Smrgset_tekfont_menu_item(int n, int val)
3428d522f475Smrg{
3429d522f475Smrg    if (!(term->screen.inhibit & I_TEK)) {
3430d522f475Smrg	UpdateCheckbox("set_tekfont_menu_item", tekMenuEntries, FS2MI(n),
3431d522f475Smrg		       (val));
3432d522f475Smrg    }
3433d522f475Smrg}
3434d522f475Smrg#endif /* OPT_TEK4014 */
3435d522f475Smrg
3436d522f475Smrgvoid
3437d522f475Smrgset_menu_font(int val)
3438d522f475Smrg{
3439d522f475Smrg    UpdateCheckbox("set_menu_font",
3440d522f475Smrg		   fontMenuEntries,
3441d522f475Smrg		   term->screen.menu_font_number,
3442d522f475Smrg		   (val));
3443d522f475Smrg}
3444