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