1 /* $XTermId: menu.h,v 1.146 2021/03/21 20:03:03 tom Exp $ */
2 
3 /*
4  * Copyright 1999-2020,2021 by Thomas E. Dickey
5  *
6  *                         All Rights Reserved
7  *
8  * Permission is hereby granted, free of charge, to any person obtaining a
9  * copy of this software and associated documentation files (the
10  * "Software"), to deal in the Software without restriction, including
11  * without limitation the rights to use, copy, modify, merge, publish,
12  * distribute, sublicense, and/or sell copies of the Software, and to
13  * permit persons to whom the Software is furnished to do so, subject to
14  * the following conditions:
15  *
16  * The above copyright notice and this permission notice shall be included
17  * in all copies or substantial portions of the Software.
18  *
19  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
22  * IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
23  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
24  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
25  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26  *
27  * Except as contained in this notice, the name(s) of the above copyright
28  * holders shall not be used in advertising or otherwise to promote the
29  * sale, use or other dealings in this Software without prior written
30  * authorization.
31  *
32  *
33  * Copyright 1989  X Consortium
34  *
35  * Permission to use, copy, modify, distribute, and sell this software and its
36  * documentation for any purpose is hereby granted without fee, provided that
37  * the above copyright notice appear in all copies and that both that
38  * copyright notice and this permission notice appear in supporting
39  * documentation.
40  *
41  * The above copyright notice and this permission notice shall be included
42  * in all copies or substantial portions of the Software.
43  *
44  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
45  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
46  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
47  * IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
48  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
49  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
50  * OTHER DEALINGS IN THE SOFTWARE.
51  *
52  * Except as contained in this notice, the name of the X Consortium shall
53  * not be used in advertising or otherwise to promote the sale, use or
54  * other dealings in this Software without prior written authorization
55  * from the X Consortium.
56  */
57 
58 #ifndef included_menu_h
59 #define included_menu_h
60 /* *INDENT-OFF* */
61 
62 #include <xterm.h>
63 
64 #ifndef OPT_MENU_KEEPCLIPBOARD
65 #define OPT_MENU_KEEPCLIPBOARD 0	/* useful for debugging */
66 #endif
67 
68 typedef struct _MenuEntry {
69     const char *name;
70     void (*function) PROTO_XT_CALLBACK_ARGS;
71     Widget widget;
72 } MenuEntry;
73 
74 extern MenuEntry mainMenuEntries[], vtMenuEntries[];
75 extern MenuEntry fontMenuEntries[];
76 #if OPT_TEK4014
77 extern MenuEntry tekMenuEntries[];
78 #endif
79 
80 extern void Handle8BitControl      PROTO_XT_ACTIONS_ARGS;
81 extern void HandleAllow132         PROTO_XT_ACTIONS_ARGS;
82 extern void HandleAllowBoldFonts   PROTO_XT_ACTIONS_ARGS;
83 extern void HandleAllowColorOps    PROTO_XT_ACTIONS_ARGS;
84 extern void HandleAllowFontOps     PROTO_XT_ACTIONS_ARGS;
85 extern void HandleAllowMouseOps    PROTO_XT_ACTIONS_ARGS;
86 extern void HandleAllowSends       PROTO_XT_ACTIONS_ARGS;
87 extern void HandleAllowTcapOps     PROTO_XT_ACTIONS_ARGS;
88 extern void HandleAllowTitleOps    PROTO_XT_ACTIONS_ARGS;
89 extern void HandleAllowWindowOps   PROTO_XT_ACTIONS_ARGS;
90 extern void HandleAltEsc           PROTO_XT_ACTIONS_ARGS;
91 extern void HandleAltScreen        PROTO_XT_ACTIONS_ARGS;
92 extern void HandleAppCursor        PROTO_XT_ACTIONS_ARGS;
93 extern void HandleAppKeypad        PROTO_XT_ACTIONS_ARGS;
94 extern void HandleAutoLineFeed     PROTO_XT_ACTIONS_ARGS;
95 extern void HandleAutoWrap         PROTO_XT_ACTIONS_ARGS;
96 extern void HandleBackarrow        PROTO_XT_ACTIONS_ARGS;
97 extern void HandleBellIsUrgent     PROTO_XT_ACTIONS_ARGS;
98 extern void HandleCreateMenu       PROTO_XT_ACTIONS_ARGS;
99 extern void HandleCursesEmul       PROTO_XT_ACTIONS_ARGS;
100 extern void HandleCursorBlink      PROTO_XT_ACTIONS_ARGS;
101 extern void HandleDeleteIsDEL      PROTO_XT_ACTIONS_ARGS;
102 extern void HandleDumpHtml         PROTO_XT_ACTIONS_ARGS;
103 extern void HandleDumpSvg          PROTO_XT_ACTIONS_ARGS;
104 extern void HandleFontBoxChars     PROTO_XT_ACTIONS_ARGS;
105 extern void HandleFontDoublesize   PROTO_XT_ACTIONS_ARGS;
106 extern void HandleFontLoading      PROTO_XT_ACTIONS_ARGS;
107 extern void HandleFontPacked       PROTO_XT_ACTIONS_ARGS;
108 extern void HandleFullscreen       PROTO_XT_ACTIONS_ARGS;
109 extern void HandleHpFunctionKeys   PROTO_XT_ACTIONS_ARGS;
110 extern void HandleJumpscroll       PROTO_XT_ACTIONS_ARGS;
111 extern void HandleKeepClipboard    PROTO_XT_ACTIONS_ARGS;
112 extern void HandleKeepSelection    PROTO_XT_ACTIONS_ARGS;
113 extern void HandleLogging          PROTO_XT_ACTIONS_ARGS;
114 extern void HandleMarginBell       PROTO_XT_ACTIONS_ARGS;
115 extern void HandleMetaEsc          PROTO_XT_ACTIONS_ARGS;
116 extern void HandleNumLock          PROTO_XT_ACTIONS_ARGS;
117 extern void HandleOldFunctionKeys  PROTO_XT_ACTIONS_ARGS;
118 extern void HandlePopupMenu        PROTO_XT_ACTIONS_ARGS;
119 extern void HandlePrintControlMode PROTO_XT_ACTIONS_ARGS;
120 extern void HandlePrintEverything  PROTO_XT_ACTIONS_ARGS;
121 extern void HandlePrintImmediate   PROTO_XT_ACTIONS_ARGS;
122 extern void HandlePrintOnError     PROTO_XT_ACTIONS_ARGS;
123 extern void HandlePrintScreen      PROTO_XT_ACTIONS_ARGS;
124 extern void HandleRedraw           PROTO_XT_ACTIONS_ARGS;
125 extern void HandleRenderFont       PROTO_XT_ACTIONS_ARGS;
126 extern void HandleReverseVideo     PROTO_XT_ACTIONS_ARGS;
127 extern void HandleReverseWrap      PROTO_XT_ACTIONS_ARGS;
128 extern void HandleScoFunctionKeys  PROTO_XT_ACTIONS_ARGS;
129 extern void HandleScrollKey        PROTO_XT_ACTIONS_ARGS;
130 extern void HandleScrollTtyOutput  PROTO_XT_ACTIONS_ARGS;
131 extern void HandleScrollbar        PROTO_XT_ACTIONS_ARGS;
132 extern void HandleSecure           PROTO_XT_ACTIONS_ARGS;
133 extern void HandleSendSignal       PROTO_XT_ACTIONS_ARGS;
134 extern void HandleSetPopOnBell     PROTO_XT_ACTIONS_ARGS;
135 extern void HandleSetPrivateColorRegisters PROTO_XT_ACTIONS_ARGS;
136 extern void HandleSetSelect        PROTO_XT_ACTIONS_ARGS;
137 extern void HandleSetTekText       PROTO_XT_ACTIONS_ARGS;
138 extern void HandleSetTerminalType  PROTO_XT_ACTIONS_ARGS;
139 extern void HandleSetVisualBell    PROTO_XT_ACTIONS_ARGS;
140 extern void HandleSixelScrolling   PROTO_XT_ACTIONS_ARGS;
141 extern void HandleSunFunctionKeys  PROTO_XT_ACTIONS_ARGS;
142 extern void HandleSunKeyboard      PROTO_XT_ACTIONS_ARGS;
143 extern void HandleTekCopy          PROTO_XT_ACTIONS_ARGS;
144 extern void HandleTekPage          PROTO_XT_ACTIONS_ARGS;
145 extern void HandleTekReset         PROTO_XT_ACTIONS_ARGS;
146 extern void HandleTiteInhibit      PROTO_XT_ACTIONS_ARGS;
147 extern void HandleToolbar          PROTO_XT_ACTIONS_ARGS;
148 extern void HandleUTF8Fonts        PROTO_XT_ACTIONS_ARGS;
149 extern void HandleUTF8Mode         PROTO_XT_ACTIONS_ARGS;
150 extern void HandleUTF8Title        PROTO_XT_ACTIONS_ARGS;
151 extern void HandleVisibility       PROTO_XT_ACTIONS_ARGS;
152 extern void HandleWriteError       PROTO_XT_ACTIONS_ARGS;
153 extern void HandleWriteNow         PROTO_XT_ACTIONS_ARGS;
154 
155 extern GCC_NORETURN void HandleClearSavedLines  PROTO_XT_ACTIONS_ARGS;
156 extern GCC_NORETURN void HandleHardReset        PROTO_XT_ACTIONS_ARGS;
157 extern GCC_NORETURN void HandleQuit             PROTO_XT_ACTIONS_ARGS;
158 extern GCC_NORETURN void HandleSoftReset        PROTO_XT_ACTIONS_ARGS;
159 
160 extern void SetupMenus (Widget /*shell*/, Widget */*forms*/, Widget */*menus*/, Dimension * /*menu_high*/);
161 
162 #if OPT_TOOLBAR
163 extern void ShowToolbar(Bool);
164 #endif
165 
166 /*
167  * The following definitions MUST match the order of entries given in
168  * the mainMenuEntries, vtMenuEntries, and tekMenuEntries arrays in menu.c.
169  */
170 
171 /*
172  * items in primary menu
173  */
174 typedef enum {
175 #if OPT_TOOLBAR
176     mainMenu_toolbar,
177 #endif
178 #if OPT_MAXIMIZE
179     mainMenu_fullscreen,
180 #endif
181     mainMenu_securekbd,
182     mainMenu_allowsends,
183     mainMenu_redraw,
184     mainMenu_line1,
185 #ifdef ALLOWLOGGING
186     mainMenu_logging,
187 #endif
188 #if OPT_PRINT_ON_EXIT
189     mainMenu_write_now,
190     mainMenu_write_error,
191 #endif
192     mainMenu_print,
193     mainMenu_print_redir,
194 #if OPT_SCREEN_DUMPS
195     mainMenu_dump_html,
196     mainMenu_dump_svg,
197 #endif
198     mainMenu_line2,
199     mainMenu_8bit_ctrl,
200     mainMenu_backarrow,
201 #if OPT_NUM_LOCK
202     mainMenu_num_lock,
203     mainMenu_alt_esc,
204     mainMenu_meta_esc,
205 #endif
206     mainMenu_delete_del,
207     mainMenu_old_fkeys,
208 #if OPT_TCAP_FKEYS
209     mainMenu_tcap_fkeys,
210 #endif
211 #if OPT_HP_FUNC_KEYS
212     mainMenu_hp_fkeys,
213 #endif
214 #if OPT_SCO_FUNC_KEYS
215     mainMenu_sco_fkeys,
216 #endif
217 #if OPT_SUN_FUNC_KEYS
218     mainMenu_sun_fkeys,
219 #endif
220 #if OPT_SUNPC_KBD
221     mainMenu_sun_kbd,
222 #endif
223     mainMenu_line3,
224     mainMenu_suspend,
225     mainMenu_continue,
226     mainMenu_interrupt,
227     mainMenu_hangup,
228     mainMenu_terminate,
229     mainMenu_kill,
230     mainMenu_line4,
231     mainMenu_quit,
232     mainMenu_LAST
233 } mainMenuIndices;
234 
235 
236 /*
237  * items in vt100 mode menu
238  */
239 typedef enum {
240     vtMenu_scrollbar,
241     vtMenu_jumpscroll,
242     vtMenu_reversevideo,
243     vtMenu_autowrap,
244     vtMenu_reversewrap,
245     vtMenu_autolinefeed,
246     vtMenu_appcursor,
247     vtMenu_appkeypad,
248     vtMenu_scrollkey,
249     vtMenu_scrollttyoutput,
250     vtMenu_allow132,
251     vtMenu_keepSelection,
252 #if OPT_MENU_KEEPCLIPBOARD
253     vtMenu_keepClipboard,
254 #endif
255     vtMenu_selectToClipboard,
256     vtMenu_visualbell,
257     vtMenu_bellIsUrgent,
258     vtMenu_poponbell,
259 #if OPT_BLINK_CURS
260     vtMenu_cursorblink,
261 #endif
262     vtMenu_titeInhibit,
263 #ifndef NO_ACTIVE_ICON
264     vtMenu_activeicon,
265 #endif /* NO_ACTIVE_ICON */
266     vtMenu_line1,
267     vtMenu_softreset,
268     vtMenu_hardreset,
269     vtMenu_clearsavedlines,
270     vtMenu_line2,
271 #if OPT_TEK4014
272     vtMenu_tekshow,
273     vtMenu_tekmode,
274     vtMenu_vthide,
275 #endif
276     vtMenu_altscreen,
277 #if OPT_SIXEL_GRAPHICS
278     vtMenu_sixelscrolling,
279 #endif
280 #if OPT_GRAPHICS
281     vtMenu_privatecolorregisters,
282 #endif
283     vtMenu_LAST
284 } vtMenuIndices;
285 
286 /*
287  * items in vt100 font menu
288  */
289 typedef enum {
290     fontMenu_default,
291     fontMenu_font1,
292     fontMenu_font2,
293     fontMenu_font3,
294     fontMenu_font4,
295     fontMenu_font5,
296     fontMenu_font6,
297     fontMenu_font7,
298 #define fontMenu_lastBuiltin fontMenu_font7
299     fontMenu_fontescape,
300     fontMenu_fontsel,
301 /* number of non-line items down to here should match NMENUFONTS in ptyx.h */
302 
303 #if OPT_DEC_CHRSET || OPT_BOX_CHARS || OPT_DEC_SOFTFONT
304     fontMenu_line1,
305     fontMenu_allowBoldFonts,
306 #if OPT_BOX_CHARS
307     fontMenu_font_boxchars,
308     fontMenu_font_packedfont,
309 #endif
310 #if OPT_DEC_CHRSET
311     fontMenu_font_doublesize,
312 #endif
313 #if OPT_DEC_SOFTFONT
314     fontMenu_font_loadable,
315 #endif
316 #endif
317 
318 #if OPT_RENDERFONT || OPT_WIDE_CHARS
319     fontMenu_line2,
320 #if OPT_RENDERFONT
321     fontMenu_render_font,
322 #endif
323 #if OPT_WIDE_CHARS
324     fontMenu_utf8_mode,
325     fontMenu_utf8_fonts,
326     fontMenu_utf8_title,
327 #endif
328 #endif
329 #if OPT_ALLOW_XXX_OPS
330     fontMenu_line3,
331     fontMenu_allowColorOps,
332     fontMenu_allowFontOps,
333     fontMenu_allowMouseOps,
334     fontMenu_allowTcapOps,
335     fontMenu_allowTitleOps,
336     fontMenu_allowWindowOps,
337 #endif
338 
339     fontMenu_LAST
340 } fontMenuIndices;
341 
342 /*
343  * items in tek4014 mode menu
344  */
345 #if OPT_TEK4014
346 typedef enum {
347     tekMenu_tektextlarge,
348     tekMenu_tektext2,
349     tekMenu_tektext3,
350     tekMenu_tektextsmall,
351     tekMenu_line1,
352     tekMenu_tekpage,
353     tekMenu_tekreset,
354     tekMenu_tekcopy,
355     tekMenu_line2,
356     tekMenu_vtshow,
357     tekMenu_vtmode,
358     tekMenu_tekhide,
359     tekMenu_LAST
360 } tekMenuIndices;
361 #endif
362 
363 
364 /*
365  * functions for updating menus
366  */
367 
368 extern void SetItemSensitivity(Widget mi, Bool val);
369 
370 typedef enum {
371     toggleErr = -2,
372     toggleAll = -1,
373     toggleOff = 0,
374     toggleOn = 1
375 } ToggleEnum;
376 
377 extern int decodeToggle(XtermWidget /* xw */, String * /* params */, Cardinal /* nparams */);
378 
379 /*
380  * there should be one of each of the following for each checkable item
381  */
382 #if OPT_TOOLBAR
383 extern void update_toolbar(void);
384 #else
385 #define update_toolbar() /* nothing */
386 #endif
387 
388 #if OPT_MAXIMIZE
389 extern void update_fullscreen(void);
390 #else
391 #define update_fullscreen() /* nothing */
392 #endif
393 
394 extern void update_securekbd(void);
395 extern void update_allowsends(void);
396 
397 #ifdef ALLOWLOGGING
398 extern void update_logging(void);
399 #else
400 #define update_logging() /*nothing*/
401 #endif
402 
403 #if OPT_PRINT_ON_EXIT
404 extern void update_write_error(void);
405 #else
406 #define update_write_error() /*nothing*/
407 #endif
408 
409 extern void update_print_redir(void);
410 extern void update_8bit_control(void);
411 extern void update_decbkm(void);
412 
413 #if OPT_NUM_LOCK
414 extern void update_num_lock(void);
415 extern void update_alt_esc(void);
416 extern void update_meta_esc(void);
417 #else
418 #define update_num_lock() /*nothing*/
419 #define update_alt_esc()  /*nothing*/
420 #define update_meta_esc() /*nothing*/
421 #endif
422 
423 extern void update_old_fkeys(void);
424 extern void update_delete_del(void);
425 
426 #if OPT_SUNPC_KBD
427 extern void update_sun_kbd(void);
428 #endif
429 
430 #if OPT_HP_FUNC_KEYS
431 extern void update_hp_fkeys(void);
432 #else
433 #define update_hp_fkeys() /*nothing*/
434 #endif
435 
436 #if OPT_SCO_FUNC_KEYS
437 extern void update_sco_fkeys(void);
438 #else
439 #define update_sco_fkeys() /*nothing*/
440 #endif
441 
442 #if OPT_SUN_FUNC_KEYS
443 extern void update_sun_fkeys(void);
444 #else
445 #define update_sun_fkeys() /*nothing*/
446 #endif
447 
448 #if OPT_TCAP_FKEYS
449 extern void update_tcap_fkeys(void);
450 #else
451 #define update_tcap_fkeys() /*nothing*/
452 #endif
453 
454 extern void update_scrollbar(void);
455 extern void update_jumpscroll(void);
456 extern void update_reversevideo(void);
457 extern void update_autowrap(void);
458 extern void update_reversewrap(void);
459 extern void update_autolinefeed(void);
460 extern void update_appcursor(void);
461 extern void update_appkeypad(void);
462 extern void update_scrollkey(void);
463 extern void update_keepSelection(void);
464 extern void update_selectToClipboard(void);
465 extern void update_scrollttyoutput(void);
466 extern void update_allow132(void);
467 extern void update_cursesemul(void);
468 extern void update_visualbell(void);
469 extern void update_bellIsUrgent(void);
470 extern void update_poponbell(void);
471 
472 #if OPT_MENU_KEEPCLIPBOARD
473 extern void update_keepClipboard(void);
474 #else
475 #define update_keepClipboard() /* nothing */
476 #endif
477 
478 #define update_marginbell() /* nothing */
479 
480 #if OPT_LOAD_VTFONTS
481 extern void update_font_escape(void);
482 #else
483 #define update_font_escape() /* nothing */
484 #endif
485 
486 #if OPT_ALLOW_XXX_OPS
487 extern void update_menu_allowColorOps(void);
488 extern void update_menu_allowFontOps(void);
489 extern void update_menu_allowMouseOps(void);
490 extern void update_menu_allowTcapOps(void);
491 extern void update_menu_allowTitleOps(void);
492 extern void update_menu_allowWindowOps(void);
493 #endif
494 
495 #if OPT_BLINK_CURS
496 extern void update_cursorblink(void);
497 #else
498 #define update_cursorblink() /* nothing */
499 #endif
500 
501 extern void update_altscreen(void);
502 extern void update_titeInhibit(void);
503 
504 #ifndef NO_ACTIVE_ICON
505 extern void update_activeicon(void);
506 #endif /* NO_ACTIVE_ICON */
507 
508 #if OPT_DEC_CHRSET
509 extern void update_font_doublesize(void);
510 #else
511 #define update_font_doublesize() /* nothing */
512 #endif
513 
514 #if OPT_BOX_CHARS
515 extern void update_font_boxchars(void);
516 extern void update_font_packed(void);
517 #else
518 #define update_font_boxchars() /* nothing */
519 #define update_font_packed() /* nothing */
520 #endif
521 
522 #if OPT_SIXEL_GRAPHICS
523 extern void update_decsdm(void);
524 #else
525 #define update_decsdm() /* nothing */
526 #endif
527 
528 #if OPT_GRAPHICS
529 extern void update_privatecolorregisters(void);
530 #else
531 #define update_privatecolorregisters() /* nothing */
532 #endif
533 
534 #if OPT_DEC_SOFTFONT
535 extern void update_font_loadable(void);
536 #else
537 #define update_font_loadable() /* nothing */
538 #endif
539 
540 #if OPT_RENDERFONT
541 extern void update_font_renderfont(void);
542 #else
543 #define update_font_renderfont() /* nothing */
544 #endif
545 
546 #if OPT_WIDE_CHARS
547 extern void update_font_utf8_mode(void);
548 extern void update_font_utf8_fonts(void);
549 extern void update_font_utf8_title(void);
550 #else
551 #define update_font_utf8_mode() /* nothing */
552 #define update_font_utf8_fonts() /* nothing */
553 #define update_font_utf8_title() /* nothing */
554 #endif
555 
556 #if OPT_TEK4014
557 extern void update_tekshow(void);
558 extern void update_vttekmode(void);
559 extern void update_vtshow(void);
560 extern void set_vthide_sensitivity(void);
561 extern void set_tekhide_sensitivity(void);
562 #else
563 #define update_tekshow() /*nothing*/
564 #define update_vttekmode() /*nothing*/
565 #define update_vtshow() /*nothing*/
566 #define set_vthide_sensitivity() /*nothing*/
567 #define set_tekhide_sensitivity() /*nothing*/
568 #endif
569 
570 #if OPT_DEC_CHRSET || OPT_BOX_CHARS || OPT_DEC_SOFTFONT
571 extern void update_menu_allowBoldFonts(void);
572 #else
573 #define update_menu_allowBoldFonts() /*nothing*/
574 #endif
575 
576 /*
577  * macros for mapping font size to tekMenu placement
578  */
579 #define FS2MI(n) (n)			/* font_size_to_menu_item */
580 #define MI2FS(n) (n)			/* menu_item_to_font_size */
581 
582 #if OPT_TEK4014
583 extern void set_tekfont_menu_item(int n,int val);
584 #else
585 #define set_tekfont_menu_item(n,val) /*nothing*/
586 #endif
587 
588 extern void set_menu_font(int val);
589 
590 /* *INDENT-ON* */
591 
592 #endif /* included_menu_h */
593