1 /* -*- c-basic-offset:2; tab-width:2; indent-tabs-mode:nil -*- */ 2 3 #ifndef ___UI_H__ 4 #define ___UI_H__ 5 6 #if defined(__linux__) 7 #include <linux/input.h> 8 #elif defined(__NetBSD__) || defined(__OpenBSD__) 9 #include <dev/wscons/wsksymdef.h> 10 #endif 11 12 #include <stdio.h> 13 14 typedef struct { 15 FILE* fp; 16 17 /* Actual width, while ui_display_t.width excludes virtual kbd area. */ 18 unsigned int width; 19 /* Actual height, while ui_display_t.height excludes virtual kbd area. */ 20 unsigned int height; 21 22 unsigned int col_width; 23 unsigned int line_height; 24 25 int key_state; 26 int lock_state; 27 28 struct ef_conv *conv; 29 30 unsigned char buf[512]; 31 unsigned int buf_len; 32 int is_pressing; 33 34 void *sixel_output; 35 void *sixel_dither; 36 37 int support_hmargin; 38 39 } Display; 40 41 typedef int XIC; /* dummy */ 42 typedef void* XID; /* dummy */ 43 typedef void* Window; /* dummy */ 44 typedef void* Drawable; /* dummy */ 45 46 typedef struct { 47 unsigned char *image; 48 unsigned int width; 49 unsigned int height; 50 51 } * Pixmap; 52 53 typedef unsigned char* PixmapMask; 54 typedef int GC; /* dummy */ 55 typedef int Font; /* dummy */ 56 typedef int Cursor; /* dummy */ 57 typedef int KeyCode; 58 typedef int KeySym; 59 60 typedef struct /* Same as definition in X11/X.h */ 61 { 62 int max_keypermod; 63 KeyCode *modifiermap; 64 65 } XModifierKeymap; 66 67 typedef struct /* Same as definition in X11/X.h */ 68 { 69 unsigned char byte1; 70 unsigned char byte2; 71 72 } XChar2b; 73 74 typedef struct { 75 int type; 76 unsigned int state; 77 KeySym ksym; 78 unsigned int keycode; 79 80 } XKeyEvent; 81 82 typedef unsigned long Time; /* Same as definition in X11/X.h */ 83 typedef unsigned long Atom; /* Same as definition in X11/X.h */ 84 85 typedef struct { 86 int type; 87 Time time; 88 int x; 89 int y; 90 unsigned int state; 91 unsigned int button; 92 93 } XButtonEvent; 94 95 typedef struct { 96 int type; 97 Time time; 98 int x; 99 int y; 100 unsigned int state; 101 102 } XMotionEvent; 103 104 typedef struct { 105 int type; 106 struct ui_window *target; 107 108 } XSelectionRequestEvent; 109 110 typedef union { 111 int type; 112 XKeyEvent xkey; 113 XButtonEvent xbutton; 114 XMotionEvent xmotion; 115 XSelectionRequestEvent xselectionrequest; 116 117 } XEvent; 118 119 typedef struct { void *dummy; } XFontStruct; 120 121 typedef int XFontSet; /* dummy */ 122 123 #define None 0L /* Same as definition in X11/X.h */ 124 #define NoSymbol 0L /* Same as definition in X11/X.h */ 125 126 #define CurrentTime 0L /* Same as definition in X11/X.h */ 127 128 /* Same as definition in X11/X.h */ 129 #define NoEventMask 0L 130 #define KeyPressMask (1L << 0) 131 #define KeyReleaseMask (1L << 1) 132 #define ButtonPressMask (1L << 2) 133 #define ButtonReleaseMask (1L << 3) 134 #define EnterWindowMask (1L << 4) 135 #define LeaveWindowMask (1L << 5) 136 #define PointerMotionMask (1L << 6) 137 #define PointerMotionHintMask (1L << 7) 138 #define Button1MotionMask (1L << 8) 139 #define Button2MotionMask (1L << 9) 140 #define Button3MotionMask (1L << 10) 141 #define Button4MotionMask (1L << 11) 142 #define Button5MotionMask (1L << 12) 143 #define ButtonMotionMask (1L << 13) 144 #define KeymapStateMask (1L << 14) 145 #define ExposureMask (1L << 15) 146 #define VisibilityChangeMask (1L << 16) 147 #define StructureNotifyMask (1L << 17) 148 #define ResizeRedirectMask (1L << 18) 149 #define SubstructureNotifyMask (1L << 19) 150 #define SubstructureRedirectMask (1L << 20) 151 #define FocusChangeMask (1L << 21) 152 #define PropertyChangeMask (1L << 22) 153 #define ColormapChangeMask (1L << 23) 154 #define OwnerGrabButtonMask (1L << 24) 155 #define ShiftMask (1 << 0) 156 #define LockMask (1 << 1) 157 #define ControlMask (1 << 2) 158 #define Mod1Mask (1 << 3) 159 #define Mod2Mask (1 << 4) 160 #define Mod3Mask (1 << 5) 161 #define Mod4Mask (1 << 6) 162 #define Mod5Mask (1 << 7) 163 #define Button1Mask (1 << 8) 164 #define Button2Mask (1 << 9) 165 #define Button3Mask (1 << 10) 166 #define Button4Mask (1 << 11) 167 #define Button5Mask (1 << 12) 168 #define Button1 1 169 #define Button2 2 170 #define Button3 3 171 #define Button4 4 172 #define Button5 5 173 174 /* Same as fb/ui.h (to use same inputmethod plugins from both mlterm-fb and 175 * mlterm-con) */ 176 #if defined(__NetBSD__) || defined(__OpenBSD__) 177 178 #define XK_Super_L 0xfffe /* dummy */ 179 #define XK_Super_R 0xfffd /* dummy */ 180 #define XK_Hyper_L 0xfffc /* dummy */ 181 #define XK_Hyper_R 0xfffb /* dummy */ 182 #define XK_BackSpace 0x08 183 #define XK_Tab 0x09 184 #define XK_Clear KS_Clear 185 #define XK_Linefeed KS_Linefeed 186 #define XK_Return 0x0d 187 188 #define XK_Shift_L KS_Shift_L 189 #define XK_Control_L KS_Control_L 190 #define XK_Alt_L KS_Alt_L 191 #define XK_Shift_R KS_Shift_R 192 #define XK_Control_R KS_Control_R 193 #define XK_Alt_R KS_Alt_R 194 195 #define XK_Meta_L KS_Meta_L 196 #define XK_Meta_R KS_Meta_R 197 198 #define XK_Pause KS_Pause 199 #define XK_Shift_Lock KS_Shift_Lock 200 #define XK_Caps_Lock KS_Caps_Lock 201 #define XK_Escape KS_Escape 202 #define XK_Prior KS_Prior 203 #define XK_Next KS_Next 204 #define XK_End KS_End 205 #define XK_Home KS_Home 206 #define XK_Left KS_Left 207 #define XK_Up KS_Up 208 #define XK_Right KS_Right 209 #define XK_Down KS_Down 210 #define XK_Select KS_Select 211 #define XK_Print KS_Print_Screen 212 #define XK_Execute KS_Execute 213 #define XK_Insert KS_Insert 214 #define XK_Delete KS_Delete 215 #define XK_Help KS_Help 216 #define XK_F1 KS_F1 217 #define XK_F2 KS_F2 218 #define XK_F3 KS_F3 219 #define XK_F4 KS_F4 220 #define XK_F5 KS_F5 221 #define XK_F6 KS_F6 222 #define XK_F7 KS_F7 223 #define XK_F8 KS_F8 224 #define XK_F9 KS_F9 225 #define XK_F10 KS_F10 226 #define XK_F11 KS_F11 227 #define XK_F12 KS_F12 228 #define XK_F13 KS_F13 229 #define XK_F14 KS_F14 230 #define XK_F15 KS_F15 231 #define XK_F16 KS_F16 232 #define XK_F17 KS_F17 233 #define XK_F18 KS_F18 234 #define XK_F19 KS_F19 235 #define XK_F20 KS_F20 236 #define XK_F21 0xfffa /* dummy */ 237 #define XK_F22 0xfff9 /* dummy */ 238 #define XK_F23 0xfff8 /* dummy */ 239 #define XK_F24 0xfff7 /* dummy */ 240 #define XK_FMAX KS_F20 241 #define XK_Num_Lock KS_Num_Lock 242 #define XK_Scroll_Lock KS_Scroll_Lock 243 #define XK_Find KS_Find 244 #define XK_Menu KS_Menu 245 #define XK_Begin 0xfff6 /* dummy */ 246 #define XK_Muhenkan KS_Muhenkan 247 #define XK_Henkan_Mode KS_Henkan_Mode 248 #define XK_Zenkaku_Hankaku KS_Zenkaku_Hankaku 249 #define XK_Hiragana_Katakana KS_Hiragana_Katakana 250 251 #define XK_KP_Prior KS_KP_Prior 252 #define XK_KP_Next KS_KP_Next 253 #define XK_KP_End KS_KP_End 254 #define XK_KP_Home KS_KP_Home 255 #define XK_KP_Left KS_KP_Left 256 #define XK_KP_Up KS_KP_Up 257 #define XK_KP_Right KS_KP_Right 258 #define XK_KP_Down KS_KP_Down 259 #define XK_KP_Insert KS_KP_Insert 260 #define XK_KP_Delete KS_KP_Delete 261 #define XK_KP_F1 KS_KP_F1 262 #define XK_KP_F2 KS_KP_F2 263 #define XK_KP_F3 KS_KP_F3 264 #define XK_KP_F4 KS_KP_F4 265 #define XK_KP_Begin KS_KP_Begin 266 #define XK_KP_Multiply KS_KP_Multiply 267 #define XK_KP_Add KS_KP_Add 268 #define XK_KP_Separator KS_KP_Separator 269 #define XK_KP_Subtract KS_KP_Subtract 270 #define XK_KP_Decimal KS_KP_Decimal 271 #define XK_KP_Divide KS_KP_Divide 272 #define XK_KP_0 KS_KP_0 273 #define XK_KP_1 KS_KP_1 274 #define XK_KP_2 KS_KP_2 275 #define XK_KP_3 KS_KP_3 276 #define XK_KP_4 KS_KP_4 277 #define XK_KP_5 KS_KP_5 278 #define XK_KP_6 KS_KP_6 279 #define XK_KP_7 KS_KP_7 280 #define XK_KP_8 KS_KP_8 281 #define XK_KP_9 KS_KP_9 282 283 #define IsKeypadKey(ksym) (0xf200 <= (ksym) && (ksym) < 0xf300) 284 #define IsModifierKey(ksym) (KS_Shift_L <= (ksym) && (ksym) <= KS_Alt_R) 285 286 #else /* if __FreeBSD__ || __linux__ || __darwin__ */ 287 288 #ifndef __linux__ /* FreeBSD / MacOSX etc */ 289 290 #define KEY_CLEAR 0xff /* dummy */ 291 #define KEY_LINEFEED 0xfe /* dummy */ 292 #define KEY_LEFTSHIFT 0x02 293 #define KEY_LEFTCTRL 0x09 294 #define KEY_LEFTALT 0x07 295 #define KEY_RIGHTSHIFT 0x03 296 #define KEY_RIGHTCTRL 0x80 297 #define KEY_RIGHTALT 0x81 298 #define KEY_LEFTMETA 0xfd /* dummy */ 299 #define KEY_RIGHTMETA 0xfc /* dummy */ 300 #define KEY_CAPSLOCK 0x04 301 #define KEY_PAGEUP 0x4d 302 #define KEY_PAGEDOWN 0x55 303 #define KEY_END 0x53 304 #define KEY_HOME 0x4b 305 #define KEY_LEFT 0x4f 306 #define KEY_UP 0x4c 307 #define KEY_RIGHT 0x51 308 #define KEY_DOWN 0x54 309 #define KEY_SELECT 0xfb /* dummy */ 310 #define KEY_PRINT 0x0a 311 #define KEY_INSERT 0x56 312 #define KEY_DELETE 0x57 313 #define KEY_HELP 0xfa /* dummy */ 314 #define KEY_F1 0x1b 315 #define KEY_F2 0x1c 316 #define KEY_F3 0x1d 317 #define KEY_F4 0x1e 318 #define KEY_F5 0x1f 319 #define KEY_F6 0x20 320 #define KEY_F7 0x21 321 #define KEY_F8 0x22 322 #define KEY_F9 0x23 323 #define KEY_F10 0x24 324 #define KEY_F11 0x25 325 #define KEY_F12 0x26 326 #define KEY_F13 0xf9 /* dummy */ 327 #define KEY_F14 0xf8 /* dummy */ 328 #define KEY_F15 0xf7 /* dummy */ 329 #define KEY_F16 0xf6 /* dummy */ 330 #define KEY_F17 0xf5 /* dummy */ 331 #define KEY_F18 0xf4 /* dummy */ 332 #define KEY_F19 0xf3 /* dummy */ 333 #define KEY_F20 0xf2 /* dummy */ 334 #define KEY_F21 0xf1 /* dummy */ 335 #define KEY_F22 0xf0 /* dummy */ 336 #define KEY_F23 0xef /* dummy */ 337 #define KEY_F24 0xee /* dummy */ 338 #define KEY_NUMLOCK 0x05 339 #define KEY_SCROLLLOCK 0x06 340 #define KEY_FIND 0xed /* dummy */ 341 #define KEY_MENU 0xec /* dummy */ 342 #define KEY_MUHENKAN 0xeb /* dummy */ 343 #define KEY_HENKAN 0xea /* dummy */ 344 #define KEY_ZENKAKUHANKAKU 0xe9 /* dummy */ 345 #define KEY_KATAKANAHIRAGANA 0xe8 /* dummy */ 346 #define KEY_KPASTERISK 0xe7 /* dummy */ 347 #define KEY_KPPLUS (0x52 + 0x100) 348 #define KEY_KPCOMMA 0xe6 /* dummy */ 349 #define KEY_KPMINUS (0x4e + 0x100) 350 #define KEY_KPDOT (0x7f + 0x100) 351 #define KEY_KPSLASH 0xe5 /* dummy */ 352 #define KEY_KP0 (0x56 + 0x100) 353 #define KEY_KP1 (0x53 + 0x100) 354 #define KEY_KP2 (0x54 + 0x100) 355 #define KEY_KP3 (0x55 + 0x100) 356 #define KEY_KP4 (0x4f + 0x100) 357 #define KEY_KP5 (0x50 + 0x100) 358 #define KEY_KP6 (0x51 + 0x100) 359 #define KEY_KP7 (0x4b + 0x100) 360 #define KEY_KP8 (0x4c + 0x100) 361 #define KEY_KP9 (0x4d + 0x100) 362 363 #endif /* FreeBSD */ 364 365 #define XK_Super_L 0xfffe /* dummy */ 366 #define XK_Super_R 0xfffd /* dummy */ 367 #define XK_Hyper_L 0xfffc /* dummy */ 368 #define XK_Hyper_R 0xfffb /* dummy */ 369 #define XK_BackSpace 0x08 370 #define XK_Tab 0x09 371 #define XK_Clear (KEY_CLEAR + 0x100) 372 #define XK_Linefeed (KEY_LINEFEED + 0x100) 373 #define XK_Return 0x0d 374 375 #define XK_Shift_L (KEY_LEFTSHIFT + 0x100) 376 #define XK_Control_L (KEY_LEFTCTRL + 0x100) 377 #define XK_Alt_L (KEY_LEFTALT + 0x100) 378 #define XK_Shift_R (KEY_RIGHTSHIFT + 0x100) 379 #define XK_Control_R (KEY_RIGHTCTRL + 0x100) 380 #define XK_Alt_R (KEY_RIGHTALT + 0x100) 381 382 #define XK_Meta_L (KEY_LEFTMETA + 0x100) 383 #define XK_Meta_R (KEY_RIGHTMETA + 0x100) 384 385 #define XK_Pause 0xfff1 /* dummy */ 386 #define XK_Shift_Lock 0xfff0 /* dummy */ 387 #define XK_Caps_Lock (KEY_CAPSLOCK + 0x100) 388 #define XK_Escape 0x1b 389 #define XK_Prior (KEY_PAGEUP + 0x100) 390 #define XK_Next (KEY_PAGEDOWN + 0x100) 391 #define XK_End (KEY_END + 0x100) 392 #define XK_Home (KEY_HOME + 0x100) 393 #define XK_Left (KEY_LEFT + 0x100) 394 #define XK_Up (KEY_UP + 0x100) 395 #define XK_Right (KEY_RIGHT + 0x100) 396 #define XK_Down (KEY_DOWN + 0x100) 397 #define XK_Select (KEY_SELECT + 0x100) 398 #define XK_Print (KEY_PRINT + 0x100) 399 #define XK_Execute 0xffef /* dummy */ 400 #define XK_Insert (KEY_INSERT + 0x100) 401 #define XK_Delete (KEY_DELETE + 0x100) 402 #define XK_Help (KEY_HELP + 0x100) 403 #define XK_F1 (KEY_F1 + 0x100) 404 #define XK_F2 (KEY_F2 + 0x100) 405 #define XK_F3 (KEY_F3 + 0x100) 406 #define XK_F4 (KEY_F4 + 0x100) 407 #define XK_F5 (KEY_F5 + 0x100) 408 #define XK_F6 (KEY_F6 + 0x100) 409 #define XK_F7 (KEY_F7 + 0x100) 410 #define XK_F8 (KEY_F8 + 0x100) 411 #define XK_F9 (KEY_F9 + 0x100) 412 #define XK_F10 (KEY_F10 + 0x100) 413 #define XK_F11 (KEY_F11 + 0x100) 414 #define XK_F12 (KEY_F12 + 0x100) 415 #define XK_F13 (KEY_F13 + 0x100) 416 #define XK_F14 (KEY_F14 + 0x100) 417 #define XK_F15 (KEY_F15 + 0x100) 418 #define XK_F16 (KEY_F16 + 0x100) 419 #define XK_F17 (KEY_F17 + 0x100) 420 #define XK_F18 (KEY_F18 + 0x100) 421 #define XK_F19 (KEY_F19 + 0x100) 422 #define XK_F20 (KEY_F20 + 0x100) 423 #define XK_F21 (KEY_F21 + 0x100) 424 #define XK_F22 (KEY_F22 + 0x100) 425 #define XK_F23 (KEY_F23 + 0x100) 426 #define XK_F24 (KEY_F24 + 0x100) 427 #ifdef __FreeBSD__ 428 #define XK_FMAX XK_F12 429 #else 430 #define XK_FMAX XK_F10 /* F11 or later is not sequential number. */ 431 #endif 432 #define XK_Num_Lock (KEY_NUMLOCK + 0x100) 433 #define XK_Scroll_Lock (KEY_SCROLLLOCK + 0x100) 434 #define XK_Find (KEY_FIND + 0x100) 435 #define XK_Menu (KEY_MENU + 0x100) 436 #define XK_Begin 0xffee /* dummy */ 437 #define XK_Muhenkan (KEY_MUHENKAN + 0x100) 438 #define XK_Henkan_Mode (KEY_HENKAN + 0x100) 439 #define XK_Zenkaku_Hankaku (KEY_ZENKAKUHANKAKU + 0x100) 440 #define XK_Hiragana_Katakana (KEY_KATAKANAHIRAGANA + 0x100) 441 442 #define XK_KP_Prior (KEY_KP9 + 0x100) 443 #define XK_KP_Next (KEY_KP3 + 0x100) 444 #define XK_KP_End (KEY_KP1 + 0x100) 445 #define XK_KP_Home (KEY_KP7 + 0x100) 446 #define XK_KP_Left (KEY_KP4 + 0x100) 447 #define XK_KP_Up (KEY_KP8 + 0x100) 448 #define XK_KP_Right (KEY_KP6 + 0x100) 449 #define XK_KP_Down (KEY_KP2 + 0x100) 450 #define XK_KP_Insert (KEY_KP0 + 0x100) 451 #define XK_KP_Delete (KEY_KPDOT + 0x100) 452 #define XK_KP_F1 0xffed /* dummy */ 453 #define XK_KP_F2 0xffec /* dummy */ 454 #define XK_KP_F3 0xffeb /* dummy */ 455 #define XK_KP_F4 0xffea /* dummy */ 456 #define XK_KP_Begin (KEY_KP5 + 0x100) /* dummy */ 457 #define XK_KP_Multiply (KEY_KPASTERISK + 0x100) 458 #define XK_KP_Add (KEY_KPPLUS + 0x100) 459 #define XK_KP_Separator (KEY_KPCOMMA + 0x100) 460 #define XK_KP_Subtract (KEY_KPMINUS + 0x100) 461 #define XK_KP_Decimal 0xffe9 /* dummy */ 462 #define XK_KP_Divide (KEY_KPSLASH + 0x100) 463 #define XK_KP_0 0xffe8 /* dummy */ 464 #define XK_KP_1 0xffe7 /* dummy */ 465 #define XK_KP_2 0xffe6 /* dummy */ 466 #define XK_KP_3 0xffe5 /* dummy */ 467 #define XK_KP_4 0xffe4 /* dummy */ 468 #define XK_KP_5 0xffe3 /* dummy */ 469 #define XK_KP_6 0xffe1 /* dummy */ 470 #define XK_KP_7 0xffe0 /* dummy */ 471 #define XK_KP_8 0xffdf /* dummy */ 472 #define XK_KP_9 0xffde /* dummy */ 473 474 #define IsKeypadKey(ksym) (1) 475 #define IsModifierKey(ksym) (0) 476 477 #endif /* FreeBSD/Linux/NetBSD */ 478 479 #define XK_ISO_Left_Tab 0xff61 /* dummy */ 480 481 /* Same as definition in X11/X.h */ 482 typedef struct { 483 short x; 484 short y; 485 486 } XPoint; 487 488 /* XXX dummy */ 489 #define XKeysymToKeycode(disp, ks) (ks) 490 #define XKeycodeToKeysym(disp, kc, i) (kc) 491 #define XKeysymToString(ks) "" 492 #define DefaultScreen(disp) (0) 493 494 #define BlackPixel(disp, screen) (0) 495 #define WhitePixel(disp, screen) (-1) 496 497 /* Same as definition in X11/cursorfont.h */ 498 #define XC_xterm 152 499 #define XC_left_ptr 68 500 501 /* Same as definition in X11/Xutil.h */ 502 #define NoValue 0x0000 503 #define XValue 0x0001 504 #define YValue 0x0002 505 #define WidthValue 0x0004 506 #define HeightValue 0x0008 507 #define AllValues 0x000F 508 #define XNegative 0x0010 509 #define YNegative 0x0020 510 511 int XParseGeometry(char *str, int *x, int *y, unsigned int *width, unsigned int *height); 512 513 KeySym XStringToKeysym(char *str); 514 515 /* === Platform dependent options === */ 516 517 #define UI_COLOR_HAS_RGB 518 #undef SUPPORT_TRUE_TRANSPARENT_BG 519 /* Actually, fonts aren't scalable, but define TYPE_XCORE_SCALABLE to avoid 520 * double drawing. */ 521 #define TYPE_XCORE_SCALABLE 522 #define MANAGE_ROOT_WINDOWS_BY_MYSELF 523 #define MANAGE_SUB_WINDOWS_BY_MYSELF 524 /* See also console/ui_display.c where ui_picture_display_closed() is never called. */ 525 #define INLINE_PICTURE_MOVABLE_BETWEEN_DISPLAYS 526 #undef SUPPORT_POINT_SIZE_FONT 527 #undef XIM_SPOT_IS_LINE_TOP 528 #undef USE_GC 529 #undef CHANGEABLE_CURSOR 530 /* use same modules as those for framebuffer */ 531 #define PLUGIN_MODULE_SUFFIX "fb" 532 #undef KEY_REPEAT_BY_MYSELF 533 #undef ROTATABLE_DISPLAY 534 #undef PSEUDO_COLOR_DISPLAY 535 #undef WALL_PICTURE_SIXEL_REPLACES_SYSTEM_PALETTE 536 #undef SUPPORT_URGENT_BELL 537 #undef FORCE_UNICODE 538 #undef NEED_DISPLAY_SYNC_EVERY_TIME 539 #undef DRAW_SCREEN_IN_PIXELS 540 #undef NO_DRAW_IMAGE_STRING 541 /* libpthread is not linked to mlterm explicitly for now. */ 542 #undef HAVE_PTHREAD 543 #undef COMPOSE_DECSP_FONT 544 #undef USE_REAL_VERTICAL_FONT 545 #undef NO_DISPLAY_FD 546 #undef FLICK_SCROLL 547 #undef UIWINDOW_SUPPORTS_PREEDITING 548 549 #endif 550