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