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