1 /* $XConsortium: menu.h,v 1.25 94/04/17 20:23:31 gildea Exp $ */
2 /* $Id: menu.h,v 6.2 1996/07/02 05:01:31 kagotani Rel $ */
3 /*
4 
5 Copyright (c) 1989  X Consortium
6 
7 Permission is hereby granted, free of charge, to any person obtaining
8 a copy of this software and associated documentation files (the
9 "Software"), to deal in the Software without restriction, including
10 without limitation the rights to use, copy, modify, merge, publish,
11 distribute, sublicense, and/or sell copies of the Software, and to
12 permit persons to whom the Software is furnished to do so, subject to
13 the following conditions:
14 
15 The above copyright notice and this permission notice shall be included
16 in all copies or substantial portions of the Software.
17 
18 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
21 IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR
22 OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
23 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
24 OTHER DEALINGS IN THE SOFTWARE.
25 
26 Except as contained in this notice, the name of the X Consortium shall
27 not be used in advertising or otherwise to promote the sale, use or
28 other dealings in this Software without prior written authorization
29 from the X Consortium.
30 
31 */
32 
33 typedef struct _MenuEntry {
34     char *name;
35     void (*function)();
36     Widget widget;
37 } MenuEntry;
38 
39 #ifdef KTERM_NOTEK
40 extern MenuEntry mainMenuEntries[], vtMenuEntries[];
41 #else /* !KTERM_NOTEK */
42 extern MenuEntry mainMenuEntries[], vtMenuEntries[], tekMenuEntries[];
43 #endif /* !KTERM_NOTEK */
44 extern MenuEntry fontMenuEntries[];
45 extern Arg menuArgs[];
46 
47 extern void HandleAllowSends();
48 extern void HandleSetVisualBell();
49 #ifdef ALLOWLOGGING
50 extern void HandleLogging();
51 #endif
52 extern void HandleRedraw();
53 extern void HandleSendSignal();
54 extern void HandleQuit();
55 extern void HandleScrollbar();
56 extern void HandleJumpscroll();
57 extern void HandleReverseVideo();
58 extern void HandleAutoWrap();
59 extern void HandleReverseWrap();
60 extern void HandleAutoLineFeed();
61 extern void HandleAppCursor();
62 extern void HandleAppKeypad();
63 extern void HandleScrollKey();
64 extern void HandleScrollTtyOutput();
65 extern void HandleAllow132();
66 extern void HandleCursesEmul();
67 extern void HandleMarginBell();
68 extern void HandleAltScreen();
69 extern void HandleSoftReset();
70 extern void HandleHardReset();
71 extern void HandleClearSavedLines();
72 extern void HandleSetTerminalType();
73 extern void HandleVisibility();
74 extern void HandleSetTekText();
75 extern void HandleTekPage();
76 extern void HandleTekReset();
77 extern void HandleTekCopy();
78 extern void DoSecureKeyboard();
79 #ifdef STATUSLINE
80 extern void HandleStatusLine();
81 extern void HandleStatusReverse();
82 #endif /* STATUSLINE */
83 #ifdef KTERM_KANJIMODE
84 extern void HandleSetKanjiMode();
85 #endif /* KTERM_KANJIMODE */
86 
87 /*
88  * The following definitions MUST match the order of entries given in
89  * the mainMenuEntries, vtMenuEntries, and tekMenuEntries arrays in menu.c.
90  */
91 
92 /*
93  * items in primary menu
94  */
95 #define mainMenu_securekbd 0
96 #define mainMenu_allowsends 1
97 #ifdef ALLOWLOGGING
98 #define mainMenu_logging 2
99 #endif
100 #define mainMenu_redraw 3
101 #define mainMenu_line1 4
102 #define mainMenu_suspend 5
103 #define mainMenu_continue 6
104 #define mainMenu_interrupt 7
105 #define mainMenu_hangup 8
106 #define mainMenu_terminate 9
107 #define mainMenu_kill 10
108 #define mainMenu_line2 11
109 #define mainMenu_quit 12
110 
111 
112 /*
113  * items in vt100 mode menu
114  */
115 #define vtMenu_scrollbar 0
116 #define vtMenu_jumpscroll 1
117 #define vtMenu_reversevideo 2
118 #define vtMenu_autowrap 3
119 #define vtMenu_reversewrap 4
120 #define vtMenu_autolinefeed 5
121 #define vtMenu_appcursor 6
122 #define vtMenu_appkeypad 7
123 #define vtMenu_scrollkey 8
124 #define vtMenu_scrollttyoutput 9
125 #define vtMenu_allow132 10
126 #define vtMenu_cursesemul 11
127 #define vtMenu_visualbell 12
128 #define vtMenu_marginbell 13
129 #define vtMenu_altscreen 14
130 #define vtMenu_line1 15
131 #define vtMenu_softreset 16
132 #define vtMenu_hardreset 17
133 #define vtMenu_clearsavedlines 18
134 #ifdef KTERM_NOTEK /* implies KTERM */
135 # define vtMenu_line3 19
136 #else /* !KTERM_NOTEK */
137 #define vtMenu_line2 19
138 #define vtMenu_tekshow 20
139 #define vtMenu_tekmode 21
140 #define vtMenu_vthide 22
141 # if defined(STATUSLINE) || defined(KTERM)
142 #  define vtMenu_line3 23
143 # endif /* STATUSLINE || KTERM */
144 #endif /* !KTERM_NOTEK */
145 #ifdef STATUSLINE
146 #  define vtMenu_statusline (vtMenu_line3+1)
147 #  define vtMenu_reversestatus (vtMenu_statusline+1)
148 #endif /* STATUSLINE */
149 #ifdef KTERM_KANJIMODE
150 #  ifdef vtMenu_reversestatus
151 #    define vtMenu_eucmode (vtMenu_reversestatus+1)
152 #  else
153 #    define vtMenu_eucmode (vtMenu_line3+1)
154 #  endif
155 #  define vtMenu_sjismode (vtMenu_eucmode+1)
156 #  define vtMenu_utf8mode (vtMenu_sjismode+1)
157 #endif /* KTERM_KANJIMODE */
158 #ifdef KTERM_XIM
159 #  ifdef vtMenu_utf8mode
160 #    define vtMenu_openim (vtMenu_utf8mode+1)
161 #  else
162 #    ifdef vtMenu_sjismode
163 #      define vtMenu_openim (vtMenu_sjismode+1)
164 #    else
165 #      ifdef vtMenu_reversestatus
166 #        define vtMenu_openim (vtMenu_reversestatus+1)
167 #      else
168 #        define vtMenu_openim (vtMenu_line3+1)
169 #      endif
170 #    endif
171 #  endif
172 #endif /* KTERM_XIM */
173 
174 /*
175  * items in vt100 font menu
176  */
177 #define fontMenu_fontdefault 0
178 #define fontMenu_font1 1
179 #define fontMenu_font2 2
180 #define fontMenu_font3 3
181 #define fontMenu_font4 4
182 #define fontMenu_font5 5
183 #define fontMenu_font6 6
184 #define fontMenu_lastBuiltin fontMenu_font6
185 #define fontMenu_fontescape 7
186 #define fontMenu_fontsel 8
187 /* number of non-line items should match NMENUFONTS in ptyx.h */
188 
189 
190 #ifndef KTERM_NOTEK
191 /*
192  * items in tek4014 mode menu
193  */
194 #define tekMenu_tektextlarge 0
195 #define tekMenu_tektext2 1
196 #define tekMenu_tektext3 2
197 #define tekMenu_tektextsmall 3
198 #define tekMenu_line1 4
199 #define tekMenu_tekpage 5
200 #define tekMenu_tekreset 6
201 #define tekMenu_tekcopy 7
202 #define tekMenu_line2 8
203 #define tekMenu_vtshow 9
204 #define tekMenu_vtmode 10
205 #define tekMenu_tekhide 11
206 #endif /* !KTERM_NOTEK */
207 
208 
209 /*
210  * macros for updating menus
211  */
212 
213 #define update_menu_item(w,mi,val) { if (mi) { \
214     menuArgs[0].value = (XtArgVal) ((val) ? term->screen.menu_item_bitmap \
215 				          : None); \
216     XtSetValues (mi, menuArgs, (Cardinal) 1); }}
217 
218 
219 #define set_sensitivity(w,mi,val) { if (mi) { \
220     menuArgs[1].value = (XtArgVal) (val); \
221     XtSetValues (mi, menuArgs+1, (Cardinal) 1);  }}
222 
223 
224 
225 /*
226  * there should be one of each of the following for each checkable item
227  */
228 
229 
230 #define update_securekbd() \
231   update_menu_item (term->screen.mainMenu, \
232 		    mainMenuEntries[mainMenu_securekbd].widget, \
233 		    term->screen.grabbedKbd)
234 
235 #define update_allowsends() \
236   update_menu_item (term->screen.mainMenu, \
237 		    mainMenuEntries[mainMenu_allowsends].widget, \
238 		    term->screen.allowSendEvents)
239 
240 #ifdef ALLOWLOGGING
241 #define update_logging() \
242   update_menu_item (term->screen.mainMenu, \
243 		    mainMenuEntries[mainMenu_logging].widget, \
244 		    term->screen.logging)
245 #endif
246 
247 #define update_scrollbar() \
248   update_menu_item (term->screen.vtMenu, \
249 		    vtMenuEntries[vtMenu_scrollbar].widget, \
250 		    term->screen.scrollbar)
251 
252 #define update_jumpscroll() \
253   update_menu_item (term->screen.vtMenu, \
254 		    vtMenuEntries[vtMenu_jumpscroll].widget, \
255 		    term->screen.jumpscroll)
256 
257 #define update_reversevideo() \
258   update_menu_item (term->screen.vtMenu, \
259 		    vtMenuEntries[vtMenu_reversevideo].widget, \
260 		    (term->flags & REVERSE_VIDEO))
261 
262 #define update_autowrap() \
263   update_menu_item (term->screen.vtMenu, \
264 		    vtMenuEntries[vtMenu_autowrap].widget, \
265 		    (term->flags & WRAPAROUND))
266 
267 #define update_reversewrap() \
268   update_menu_item (term->screen.vtMenu, \
269 		    vtMenuEntries[vtMenu_reversewrap].widget, \
270 		    (term->flags & REVERSEWRAP))
271 
272 #define update_autolinefeed() \
273   update_menu_item (term->screen.vtMenu, \
274 		    vtMenuEntries[vtMenu_autolinefeed].widget, \
275 		    (term->flags & LINEFEED))
276 
277 #define update_appcursor() \
278   update_menu_item (term->screen.vtMenu, \
279 		    vtMenuEntries[vtMenu_appcursor].widget, \
280 		    (term->keyboard.flags & CURSOR_APL))
281 
282 #define update_appkeypad() \
283   update_menu_item (term->screen.vtMenu, \
284 		    vtMenuEntries[vtMenu_appkeypad].widget, \
285 		    (term->keyboard.flags & KYPD_APL))
286 
287 #define update_scrollkey() \
288   update_menu_item (term->screen.vtMenu, \
289 		    vtMenuEntries[vtMenu_scrollkey].widget,  \
290 		    term->screen.scrollkey)
291 
292 #define update_scrollttyoutput() \
293   update_menu_item (term->screen.vtMenu, \
294 		    vtMenuEntries[vtMenu_scrollttyoutput].widget, \
295 		    term->screen.scrollttyoutput)
296 
297 #define update_allow132() \
298   update_menu_item (term->screen.vtMenu, \
299 		    vtMenuEntries[vtMenu_allow132].widget, \
300 		    term->screen.c132)
301 
302 #define update_cursesemul() \
303   update_menu_item (term->screen.vtMenu, \
304 		    vtMenuEntries[vtMenu_cursesemul].widget, \
305 		    term->screen.curses)
306 
307 #define update_visualbell() \
308   update_menu_item (term->screen.vtMenu, \
309 		    vtMenuEntries[vtMenu_visualbell].widget, \
310 		    term->screen.visualbell)
311 
312 #define update_marginbell() \
313   update_menu_item (term->screen.vtMenu, \
314 		    vtMenuEntries[vtMenu_marginbell].widget, \
315 		    term->screen.marginbell)
316 
317 #define update_altscreen() \
318   update_menu_item (term->screen.vtMenu, \
319 		    vtMenuEntries[vtMenu_altscreen].widget, \
320 		    term->screen.alternate)
321 
322 #ifndef KTERM_NOTEK
323 #define update_tekshow() \
324   update_menu_item (term->screen.vtMenu, \
325 		    vtMenuEntries[vtMenu_tekshow].widget, \
326 		    term->screen.Tshow)
327 
328 #define update_vttekmode() { \
329     update_menu_item (term->screen.vtMenu, \
330 		      vtMenuEntries[vtMenu_tekmode].widget, \
331 		      term->screen.TekEmu) \
332     update_menu_item (term->screen.tekMenu, \
333 		      tekMenuEntries[tekMenu_vtmode].widget, \
334 		      !term->screen.TekEmu) }
335 
336 #define update_vtshow() \
337   update_menu_item (term->screen.tekMenu, \
338 		    tekMenuEntries[tekMenu_vtshow].widget, \
339 		    term->screen.Vshow)
340 #endif /* !KTERM_NOTEK */
341 #ifdef STATUSLINE
342 #define update_statusline() \
343   update_menu_item (term->screen.vtMenu, \
344 		    vtMenuEntries[vtMenu_statusline].widget, \
345 		    term->screen.statusheight)
346 #define update_reversestatus() \
347   update_menu_item (term->screen.vtMenu, \
348 		    vtMenuEntries[vtMenu_reversestatus].widget, \
349 		    term->screen.reversestatus)
350 #endif /* STATUSLINE */
351 #ifdef KTERM_KANJIMODE
352 #define update_eucmode() \
353   update_menu_item (term->screen.vtMenu, \
354 		    vtMenuEntries[vtMenu_eucmode].widget, \
355 		    term->flags & EUC_KANJI)
356 
357 #define update_sjismode() \
358   update_menu_item (term->screen.vtMenu, \
359 		    vtMenuEntries[vtMenu_sjismode].widget, \
360 		    term->flags & SJIS_KANJI)
361 
362 #define update_utf8mode() \
363   update_menu_item (term->screen.vtMenu, \
364 		    vtMenuEntries[vtMenu_utf8mode].widget, \
365 		    term->flags & UTF8_KANJI)
366 #endif /* KTERM_KANJIMODE */
367 #ifdef KTERM_XIM
368 #define update_openim() \
369   update_menu_item (term->screen.vtMenu, \
370 		    vtMenuEntries[vtMenu_openim].widget, \
371 		    term->screen.imregistered)
372 #endif /* KTERM_XIM */
373 
374 
375 #ifndef KTERM_NOTEK
376 #define set_vthide_sensitivity() \
377   set_sensitivity (term->screen.vtMenu, \
378 		   vtMenuEntries[vtMenu_vthide].widget, \
379 		   term->screen.Tshow)
380 
381 #define set_tekhide_sensitivity() \
382   set_sensitivity (term->screen.tekMenu, \
383 		   tekMenuEntries[tekMenu_tekhide].widget, \
384 		   term->screen.Vshow)
385 #endif /* !KTERM_NOTEK */
386 
387 #define set_altscreen_sensitivity(val) \
388   set_sensitivity (term->screen.vtMenu,\
389 		   vtMenuEntries[vtMenu_altscreen].widget, (val))
390 #ifdef STATUSLINE
391 #define set_reversestatus_sensitivity() \
392   set_sensitivity (term->screen.vtMenu, \
393 		   vtMenuEntries[vtMenu_reversestatus].widget, \
394 		   term->screen.statusheight)
395 #endif /* STATUSLINE */
396 
397 
398 /*
399  * macros for mapping font size to tekMenu placement
400  */
401 #define FS2MI(n) (n)			/* font_size_to_menu_item */
402 #define MI2FS(n) (n)			/* menu_item_to_font_size */
403 
404 #ifndef KTERM_NOTEK
405 #define set_tekfont_menu_item(n,val) \
406   update_menu_item (term->screen.tekMenu, \
407 		    tekMenuEntries[FS2MI(n)].widget, \
408 		    (val))
409 #endif /* !KTERM_NOTEK */
410 
411 #define set_menu_font(val) \
412   update_menu_item (term->screen.fontMenu, \
413 		    fontMenuEntries[term->screen.menu_font_number].widget, \
414 		    (val))
415