ref: b8720428be0e525fe47ce422b39f089f557e965a
parent: e4b1f4ea0f70b5c2346e7b7205ffd386e10f958f
author: halfwit <michaelmisch1985@gmail.com>
date: Thu Oct 15 08:39:09 PDT 2020
Again, try to get meson to comply
--- a/keyboard.c
+++ /dev/null
@@ -1,164 +1,0 @@
-/*
- * Copyright (c) 2008 Federico G. Benavento <benavento@gmail.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include "x9dev.h"
-#include "keymap.h"
-
-#define KF 0xF000
-#define Kdown 0x80
-
-extern x9devInfo x9di;
-extern DeviceIntPtr x9devKeybd;
-static CARD8 modmap[MAP_LENGTH];
-
-#define e ev.u.u
-#define ek ev.u.keyButtonPointer
-
-static void
-x9devSendKeybdEvent(int k, int t)
-{
- xEvent ev;
-
- memset(&ev, 0, sizeof(xEvent));
- e.type = t;
- e.detail = k + MIN_KEYCODE;
- ek.time = GetTimeInMillis();
- mieqEnqueue(x9devKeybd, (InternalEvent *)&ev);
-}
-
-#undef ek
-#undef e
-
-static wchar_t
-x9devKeybdRead(void)
-{
- static char s[3];
- static int n = 0;
- wchar_t rune;
-
- if(read(x9di.kfd, s+n, 1) != 1)
- return 0;
-
- rune = s[0];
-
- if (n > 0 || (rune & 0x80) != 0x00) {
- if (mbtowc(&rune, s, n + 1) == -1) {
- if (++n == 3)
- n = 0;
- return 0;
- }
- n = 0;
- }
-
- if (rune == Kdown)
- rune = 0x99;
- else if (rune & KF)
- rune = (rune&~KF) + 0x80;
-
- return rune;
-}
-
-int
-x9devKeybdHandle(void)
-{
- unsigned char k, m;
- int c;
-
- c = x9devKeybdRead();
- if (c == 0 || c > sizeof(rune2keycode))
- return 0;
-
- k = rune2keycode[c].key;
- if (k == 0)
- return 0;
-
- m = rune2keycode[c].mod;
- if (m)
- x9devSendKeybdEvent(m, KeyPress);
-
- x9devSendKeybdEvent(k, KeyPress);
- x9devSendKeybdEvent(k, KeyRelease);
- if (m)
- x9devSendKeybdEvent(m, KeyRelease);
-
- return 1;
-}
-
-static void
-x9devInitModmap(void)
-{
- KeySym * ks;
- int i;
-
- for (i = 0; i < MAP_LENGTH; i++)
- modmap[i] = NoSymbol;
-
- for (i = MIN_KEYCODE, ks = map; i < (MIN_KEYCODE + NUM_KEYCODES); i++, ks += MAP_WIDTH)
- switch (*ks) {
- case XK_Shift_L:
- case XK_Shift_R:
- modmap[i] = ShiftMask;
- break;
- case XK_Control_L:
- case XK_Control_R:
- modmap[i] = ControlMask;
- break;
- case XK_Alt_L:
- case XK_Alt_R:
- modmap[i] = Mod1Mask;
- break;
- }
-}
-
-int
-x9devKeybdProc(DeviceIntPtr pDev, int what)
-{
- switch (what) {
- case DEVICE_INIT:
- x9devInitModmap();
- if (!InitKeyboardDeviceStruct(pDev, NULL,
- (BellProcPtr)NoopDDA, (KbdCtrlProcPtr)NoopDDA))
- FatalError("can't init keyboard");
- pDev->inited = TRUE;
- break;
- case DEVICE_ON:
- pDev->enabled = TRUE;
- break;
- case DEVICE_CLOSE:
- break;
- case DEVICE_OFF:
- pDev->enabled = FALSE;
- break;
- }
- return Success;
-}
-
-Bool
-x9checkmod(unsigned int k, DeviceIntPtr pDev)
-{
- return modmap[k] != 0;
-}
--- a/keymap.h
+++ /dev/null
@@ -1,560 +1,0 @@
-/* the key names define come from xwin/winkeynames.h, hence the NOTICE */
-
-/*
- * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany.
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Thomas Roell not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Thomas Roell makes no representations
- * about the suitability of this software for any purpose. It is provided
- * "as is" without express or implied warranty.
- *
- * THOMAS ROELL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THOMAS ROELL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- */
-
-#define MAP_WIDTH 4
-#define NUM_KEYCODES 248
-#define MIN_KEYCODE 8
-#define MAX_KEYCODE (NUM_KEYCODES + MIN_KEYCODE-1)
-
-/*
- * definition of the AT84/MF101/MF102 Keyboard:
- * ============================================================
- * Defined Key Cap Glyphs Pressed value
- * Key Name Main Also (hex) (dec)
- * ---------------- ---------- ------- ------ ------
- */
-
-#define KEY_Escape /* Escape 0x01 */ 1
-#define KEY_1 /* 1 ! 0x02 */ 2
-#define KEY_2 /* 2 @ 0x03 */ 3
-#define KEY_3 /* 3 # 0x04 */ 4
-#define KEY_4 /* 4 $ 0x05 */ 5
-#define KEY_5 /* 5 % 0x06 */ 6
-#define KEY_6 /* 6 ^ 0x07 */ 7
-#define KEY_7 /* 7 & 0x08 */ 8
-#define KEY_8 /* 8 * 0x09 */ 9
-#define KEY_9 /* 9 ( 0x0a */ 10
-#define KEY_0 /* 0 ) 0x0b */ 11
-#define KEY_Minus /* - (Minus) _ (Under) 0x0c */ 12
-#define KEY_Equal /* = (Equal) + 0x0d */ 13
-#define KEY_BackSpace /* Back Space 0x0e */ 14
-#define KEY_Tab /* Tab 0x0f */ 15
-#define KEY_Q /* Q 0x10 */ 16
-#define KEY_W /* W 0x11 */ 17
-#define KEY_E /* E 0x12 */ 18
-#define KEY_R /* R 0x13 */ 19
-#define KEY_T /* T 0x14 */ 20
-#define KEY_Y /* Y 0x15 */ 21
-#define KEY_U /* U 0x16 */ 22
-#define KEY_I /* I 0x17 */ 23
-#define KEY_O /* O 0x18 */ 24
-#define KEY_P /* P 0x19 */ 25
-#define KEY_LBrace /* [ { 0x1a */ 26
-#define KEY_RBrace /* ] } 0x1b */ 27
-#define KEY_Enter /* Enter 0x1c */ 28
-#define KEY_LCtrl /* Ctrl(left) 0x1d */ 29
-#define KEY_A /* A 0x1e */ 30
-#define KEY_S /* S 0x1f */ 31
-#define KEY_D /* D 0x20 */ 32
-#define KEY_F /* F 0x21 */ 33
-#define KEY_G /* G 0x22 */ 34
-#define KEY_H /* H 0x23 */ 35
-#define KEY_J /* J 0x24 */ 36
-#define KEY_K /* K 0x25 */ 37
-#define KEY_L /* L 0x26 */ 38
-#define KEY_SemiColon /* ;(SemiColon) :(Colon) 0x27 */ 39
-#define KEY_Quote /* ' (Apostr) " (Quote) 0x28 */ 40
-#define KEY_Tilde /* ` (Accent) ~ (Tilde) 0x29 */ 41
-#define KEY_ShiftL /* Shift(left) 0x2a */ 42
-#define KEY_BSlash /* \(BckSlash) |(VertBar)0x2b */ 43
-#define KEY_Z /* Z 0x2c */ 44
-#define KEY_X /* X 0x2d */ 45
-#define KEY_C /* C 0x2e */ 46
-#define KEY_V /* V 0x2f */ 47
-#define KEY_B /* B 0x30 */ 48
-#define KEY_N /* N 0x31 */ 49
-#define KEY_M /* M 0x32 */ 50
-#define KEY_Comma /* , (Comma) < (Less) 0x33 */ 51
-#define KEY_Period /* . (Period) >(Greater)0x34 */ 52
-#define KEY_Slash /* / (Slash) ? 0x35 */ 53
-#define KEY_ShiftR /* Shift(right) 0x36 */ 54
-#define KEY_KP_Multiply /* * 0x37 */ 55
-#define KEY_Alt /* Alt(left) 0x38 */ 56
-#define KEY_Space /* (SpaceBar) 0x39 */ 57
-#define KEY_CapsLock /* CapsLock 0x3a */ 58
-#define KEY_F1 /* F1 0x3b */ 59
-#define KEY_F2 /* F2 0x3c */ 60
-#define KEY_F3 /* F3 0x3d */ 61
-#define KEY_F4 /* F4 0x3e */ 62
-#define KEY_F5 /* F5 0x3f */ 63
-#define KEY_F6 /* F6 0x40 */ 64
-#define KEY_F7 /* F7 0x41 */ 65
-#define KEY_F8 /* F8 0x42 */ 66
-#define KEY_F9 /* F9 0x43 */ 67
-#define KEY_F10 /* F10 0x44 */ 68
-#define KEY_NumLock /* NumLock 0x45 */ 69
-#define KEY_ScrollLock /* ScrollLock 0x46 */ 70
-#define KEY_KP_7 /* 7 Home 0x47 */ 71
-#define KEY_KP_8 /* 8 Up 0x48 */ 72
-#define KEY_KP_9 /* 9 PgUp 0x49 */ 73
-#define KEY_KP_Minus /* - (Minus) 0x4a */ 74
-#define KEY_KP_4 /* 4 Left 0x4b */ 75
-#define KEY_KP_5 /* 5 0x4c */ 76
-#define KEY_KP_6 /* 6 Right 0x4d */ 77
-#define KEY_KP_Plus /* + (Plus) 0x4e */ 78
-#define KEY_KP_1 /* 1 End 0x4f */ 79
-#define KEY_KP_2 /* 2 Down 0x50 */ 80
-#define KEY_KP_3 /* 3 PgDown 0x51 */ 81
-#define KEY_KP_0 /* 0 Insert 0x52 */ 82
-#define KEY_KP_Decimal /* . (Decimal) Delete 0x53 */ 83
-#define KEY_SysReqest /* SysReqest 0x54 */ 84
- /* NOTUSED 0x55 */
-#define KEY_Less /* < (Less) >(Greater) 0x56 */ 86
-#define KEY_F11 /* F11 0x57 */ 87
-#define KEY_F12 /* F12 0x58 */ 88
-
-#define KEY_Prefix0 /* special 0x60 */ 96
-#define KEY_Prefix1 /* specail 0x61 */ 97
-
-/*
- * The 'scancodes' below are generated by the server, because the MF101/102
- * keyboard sends them as sequence of other scancodes
- */
-#define KEY_Home /* Home 0x59 */ 89
-#define KEY_Up /* Up 0x5a */ 90
-#define KEY_PgUp /* PgUp 0x5b */ 91
-#define KEY_Left /* Left 0x5c */ 92
-#define KEY_Begin /* Begin 0x5d */ 93
-#define KEY_Right /* Right 0x5e */ 94
-#define KEY_End /* End 0x5f */ 95
-#define KEY_Down /* Down 0x60 */ 96
-#define KEY_PgDown /* PgDown 0x61 */ 97
-#define KEY_Insert /* Insert 0x62 */ 98
-#define KEY_Delete /* Delete 0x63 */ 99
-#define KEY_KP_Enter /* Enter 0x64 */ 100
-#define KEY_RCtrl /* Ctrl(right) 0x65 */ 101
-#define KEY_Pause /* Pause 0x66 */ 102
-#define KEY_Print /* Print 0x67 */ 103
-#define KEY_KP_Divide /* Divide 0x68 */ 104
-#define KEY_AltLang /* AtlLang(right) 0x69 */ 105
-#define KEY_Break /* Break 0x6a */ 106
-#define KEY_LMeta /* Left Meta 0x6b */ 107
-#define KEY_RMeta /* Right Meta 0x6c */ 108
-#define KEY_Menu /* Menu 0x6d */ 109
-#define KEY_F13 /* F13 0x6e */ 110
-#define KEY_F14 /* F14 0x6f */ 111
-#define KEY_F15 /* F15 0x70 */ 112
-#define KEY_F16 /* F16 0x71 */ 113
-#define KEY_F17 /* F17 0x72 */ 114
-#define KEY_KP_DEC /* KP_DEC 0x73 */ 115
-#define KEY_KP_Equal /* Equal (Keypad) 0x76 */ 118
-#define KEY_XFER /* Kanji Transfer 0x79 */ 121
-#define KEY_NFER /* No Kanji Transfer 0x7b */ 123
-#define KEY_Yen /* Yen 0x7d */ 125
-#define KEY_HKTG /* Hirugana/Katakana tog 0xc8 */ 200
-#define KEY_BSlash2 /* \ _ 0xcb */ 203
-
-struct{
- unsigned char key, mod;
-}rune2keycode[] = {
- KEY_Delete, KEY_ShiftL, /* 0x000 */
- KEY_A, KEY_LCtrl, /* 0x001 */
- KEY_B, KEY_LCtrl, /* 0x002 */
- KEY_C, KEY_LCtrl, /* 0x003 */
- KEY_D, KEY_LCtrl, /* 0x004 */
- KEY_E, KEY_LCtrl, /* 0x005 */
- KEY_F, KEY_LCtrl, /* 0x006 */
- KEY_G, KEY_LCtrl, /* 0x007 */
- KEY_BackSpace, 0, /* 0x008 */
- KEY_Tab, 0, /* 0x009 */
- KEY_Enter, 0, /* 0x00a */
- KEY_K, KEY_LCtrl, /* 0x00b */
- KEY_L, KEY_LCtrl, /* 0x00c */
- KEY_M, KEY_LCtrl, /* 0x00d */
- KEY_N, KEY_LCtrl, /* 0x00e */
- KEY_O, KEY_LCtrl, /* 0x00f */
- KEY_P, KEY_LCtrl, /* 0x010 */
- KEY_Q, KEY_LCtrl, /* 0x011 */
- KEY_R, KEY_LCtrl, /* 0x012 */
- KEY_S, KEY_LCtrl, /* 0x013 */
- KEY_T, KEY_LCtrl, /* 0x014 */
- KEY_U, KEY_LCtrl, /* 0x015 */
- KEY_V, KEY_LCtrl, /* 0x016 */
- KEY_W, KEY_LCtrl, /* 0x017 */
- KEY_X, KEY_LCtrl, /* 0x018 */
- KEY_Y, KEY_LCtrl, /* 0x019 */
- KEY_Z, KEY_LCtrl, /* 0x01a */
- KEY_Escape, 0, /* 0x01b */
- KEY_BSlash, KEY_LCtrl, /* 0x01c */
- KEY_RBrace, KEY_LCtrl, /* 0x01d */
- KEY_Period, KEY_LCtrl, /* 0x01e */
- KEY_Slash, KEY_LCtrl, /* 0x01f */
- KEY_Space, 0, /* 0x020 */
- KEY_1, KEY_ShiftL, /* 0x021 */
- KEY_Quote, KEY_ShiftL, /* 0x022 */
- KEY_3, KEY_ShiftL, /* 0x023 */
- KEY_4, KEY_ShiftL, /* 0x024 */
- KEY_5, KEY_ShiftL, /* 0x025 */
- KEY_7, KEY_ShiftL, /* 0x026 */
- KEY_Quote, 0, /* 0x027 */
- KEY_9, KEY_ShiftL, /* 0x028 */
- KEY_0, KEY_ShiftL, /* 0x029 */
- KEY_8, KEY_ShiftL, /* 0x02a */
- KEY_Equal, KEY_ShiftL, /* 0x02b */
- KEY_Comma, 0, /* 0x02c */
- KEY_KP_Minus, 0, /* 0x02d */
- KEY_Period,0, /* 0x02e */
- KEY_Slash, 0, /* 0x02f */
- KEY_0, 0, /* 0x030 */
- KEY_1, 0, /* 0x031 */
- KEY_2, 0, /* 0x032 */
- KEY_3, 0, /* 0x033 */
- KEY_4, 0, /* 0x034 */
- KEY_5, 0, /* 0x035 */
- KEY_6, 0, /* 0x036 */
- KEY_7, 0, /* 0x037 */
- KEY_8, 0, /* 0x038 */
- KEY_9, 0, /* 0x039 */
- KEY_SemiColon, KEY_ShiftL, /* 0x03a */
- KEY_SemiColon, 0, /* 0x03b */
- KEY_Comma, KEY_ShiftL, /* 0x03c */
- KEY_Equal, 0, /* 0x03d */
- KEY_Period, KEY_ShiftL, /* 0x03e */
- KEY_Slash, KEY_ShiftL, /* 0x03f */
- KEY_2, KEY_ShiftL, /* 0x040 */
- KEY_A, KEY_ShiftL, /* 0x041 */
- KEY_B, KEY_ShiftL, /* 0x042 */
- KEY_C, KEY_ShiftL, /* 0x043 */
- KEY_D, KEY_ShiftL, /* 0x044 */
- KEY_E, KEY_ShiftL, /* 0x045 */
- KEY_F, KEY_ShiftL, /* 0x046 */
- KEY_G, KEY_ShiftL, /* 0x047 */
- KEY_H, KEY_ShiftL, /* 0x048 */
- KEY_I, KEY_ShiftL, /* 0x049 */
- KEY_J, KEY_ShiftL, /* 0x04a */
- KEY_K, KEY_ShiftL, /* 0x04b */
- KEY_L, KEY_ShiftL, /* 0x04c */
- KEY_M, KEY_ShiftL, /* 0x04d */
- KEY_N, KEY_ShiftL, /* 0x04e */
- KEY_O, KEY_ShiftL, /* 0x04f */
- KEY_P, KEY_ShiftL, /* 0x050 */
- KEY_Q, KEY_ShiftL, /* 0x051 */
- KEY_R, KEY_ShiftL, /* 0x052 */
- KEY_S, KEY_ShiftL, /* 0x053 */
- KEY_T, KEY_ShiftL, /* 0x054 */
- KEY_U, KEY_ShiftL, /* 0x055 */
- KEY_V, KEY_ShiftL, /* 0x056 */
- KEY_W, KEY_ShiftL, /* 0x057 */
- KEY_X, KEY_ShiftL, /* 0x058 */
- KEY_Y, KEY_ShiftL, /* 0x059 */
- KEY_Z, KEY_ShiftL, /* 0x05a */
- KEY_LBrace, 0, /* 0x05b */
- KEY_BSlash, 0, /* 0x05c */
- KEY_RBrace, 0, /* 0x05d */
- KEY_6, KEY_ShiftL, /* 0x05e */
- KEY_Minus, KEY_ShiftL, /* 0x05f */
- KEY_Tilde,0, /* 0x060 */
- KEY_A, 0, /* 0x061 */
- KEY_B, 0, /* 0x062 */
- KEY_C, 0, /* 0x063 */
- KEY_D, 0, /* 0x064 */
- KEY_E, 0, /* 0x065 */
- KEY_F, 0, /* 0x066 */
- KEY_G, 0, /* 0x067 */
- KEY_H, 0, /* 0x068 */
- KEY_I, 0, /* 0x069 */
- KEY_J, 0, /* 0x06a */
- KEY_K, 0, /* 0x06b */
- KEY_L, 0, /* 0x06c */
- KEY_M, 0, /* 0x06d */
- KEY_N, 0, /* 0x06e */
- KEY_O, 0, /* 0x06f */
- KEY_P, 0, /* 0x070 */
- KEY_Q, 0, /* 0x071 */
- KEY_R, 0, /* 0x072 */
- KEY_S, 0, /* 0x073 */
- KEY_T, 0, /* 0x074 */
- KEY_U, 0, /* 0x075 */
- KEY_V, 0, /* 0x076 */
- KEY_W, 0, /* 0x077 */
- KEY_X, 0, /* 0x078 */
- KEY_Y, 0, /* 0x079 */
- KEY_Z, 0, /* 0x07a */
- KEY_LBrace, KEY_ShiftL, /* 0x07b */
- KEY_BSlash, KEY_ShiftL, /* 0x07c */
- KEY_RBrace, KEY_ShiftL, /* 0x07d */
- KEY_Tilde, KEY_ShiftL, /* 0x07e */
- KEY_Delete, 0, /* 0x07f */
- 0, 0, /* 0x080 */
- KEY_F1, 0, /* 0x081 */
- KEY_F2, 0, /* 0x082 */
- KEY_F3, 0, /* 0x083 */
- KEY_F4, 0, /* 0x084 */
- KEY_F5, 0, /* 0x085 */
- KEY_F6, 0, /* 0x086 */
- KEY_F7, 0, /* 0x087 */
- KEY_F8, 0, /* 0x088 */
- KEY_F9, 0, /* 0x089 */
- KEY_F10, 0, /* 0x08a */
- KEY_F11, 0, /* 0x08b */
- KEY_F12, 0, /* 0x08c */
- KEY_Home, 0, /* 0x08d */
- KEY_Up, 0, /* 0x08e */
- KEY_PgUp, 0, /* 0x08f */
- KEY_Print, 0, /* 0x090 */
- KEY_Left, 0, /* 0x091 */
- KEY_Right, 0, /* 0x092 */
- KEY_PgDown, 0, /* 0x093 */
- KEY_Insert, 0, /* 0x094 */
- 0, 0, /* 0x095 */
- 0, 0, /* 0x096 */
- 0, 0, /* 0x097 */
- KEY_End, 0, /* 0x098 */
- KEY_Down, 0, /* 0x099 */
- 0, 0, /* 0x09a */
- 0, 0, /* 0x09b */
- 0, 0, /* 0x09c */
- 0, 0, /* 0x09d */
- 0, 0, /* 0x09e */
- 0, 0, /* 0x09f */
- 0, 0, /* 0x0a0 */
- 0, 0, /* 0x0a1 */
- 0, 0, /* 0x0a2 */
- 0, 0, /* 0x0a3 */
- 0, 0, /* 0x0a4 */
- 0, 0, /* 0x0a5 */
- 0, 0, /* 0x0a6 */
- 0, 0, /* 0x0a7 */
- 0, 0, /* 0x0a8 */
- 0, 0, /* 0x0a9 */
- 0, 0, /* 0x0aa */
- 0, 0, /* 0x0ab */
- 0, 0, /* 0x0ac */
- 0, 0, /* 0x0ad */
- 0, 0, /* 0x0ae */
- 0, 0, /* 0x0af */
- 0, 0, /* 0x0b0 */
- 0, 0, /* 0x0b1 */
- 0, 0, /* 0x0b2 */
- 0, 0, /* 0x0b3 */
- 0, 0, /* 0x0b4 */
- 0, 0, /* 0x0b5 */
- 0, 0, /* 0x0b6 */
- 0, 0, /* 0x0b7 */
- 0, 0, /* 0x0b8 */
- 0, 0, /* 0x0b9 */
- 0, 0, /* 0x0ba */
- 0, 0, /* 0x0bb */
- 0, 0, /* 0x0bc */
- 0, 0, /* 0x0bd */
- 0, 0, /* 0x0be */
- 0, 0, /* 0x0bf */
- 0, 0, /* 0x0c0 */
- 0, 0, /* 0x0c1 */
- 0, 0, /* 0x0c2 */
- 0, 0, /* 0x0c3 */
- 0, 0, /* 0x0c4 */
- 0, 0, /* 0x0c5 */
- 0, 0, /* 0x0c6 */
- 0, 0, /* 0x0c7 */
- 0, 0, /* 0x0c8 */
- 0, 0, /* 0x0c9 */
- 0, 0, /* 0x0ca */
- 0, 0, /* 0x0cb */
- 0, 0, /* 0x0cc */
- 0, 0, /* 0x0cd */
- 0, 0, /* 0x0ce */
- 0, 0, /* 0x0cf */
- 0, 0, /* 0x0d0 */
- 0, 0, /* 0x0d1 */
- 0, 0, /* 0x0d2 */
- 0, 0, /* 0x0d3 */
- 0, 0, /* 0x0d4 */
- 0, 0, /* 0x0d5 */
- 0, 0, /* 0x0d6 */
- 0, 0, /* 0x0d7 */
- 0, 0, /* 0x0d8 */
- 0, 0, /* 0x0d9 */
- 0, 0, /* 0x0da */
- 0, 0, /* 0x0db */
- 0, 0, /* 0x0dc */
- 0, 0, /* 0x0dd */
- 0, 0, /* 0x0de */
- 0, 0, /* 0x0df */
- 0, 0, /* 0x0e0 */
- 0, 0, /* 0x0e1 */
- 0, 0, /* 0x0e2 */
- 0, 0, /* 0x0e3 */
- 0, 0, /* 0x0e4 */
- 0, 0, /* 0x0e5 */
- 0, 0, /* 0x0e6 */
- 0, 0, /* 0x0e7 */
- 0, 0, /* 0x0e8 */
- 0, 0, /* 0x0e9 */
- 0, 0, /* 0x0ea */
- 0, 0, /* 0x0eb */
- 0, 0, /* 0x0ec */
- 0, 0, /* 0x0ed */
- 0, 0, /* 0x0ee */
- 0, 0, /* 0x0ef */
- 0, 0, /* 0x0f0 */
- 0, 0, /* 0x0f1 */
- 0, 0, /* 0x0f2 */
- 0, 0, /* 0x0f3 */
- 0, 0, /* 0x0f4 */
- 0, 0, /* 0x0f5 */
- 0, 0, /* 0x0f6 */
- 0, 0, /* 0x0f7 */
- 0, 0, /* 0x0f8 */
- 0, 0, /* 0x0f9 */
- 0, 0, /* 0x0fa */
- 0, 0, /* 0x0fb */
- 0, 0, /* 0x0fc */
- 0, 0, /* 0x0fd */
- 0, 0, /* 0x0fe */
- 0, 0, /* 0x0ff */
-};
-
-/* from xwin/winkeymap.h */
-static KeySym map[NUM_KEYCODES*MAP_WIDTH]={
- /* 0x00 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
- /* 0x01 */ XK_Escape, NoSymbol, NoSymbol, NoSymbol,
- /* 0x02 */ XK_1, XK_exclam, NoSymbol, NoSymbol,
- /* 0x03 */ XK_2, XK_at, NoSymbol, NoSymbol,
- /* 0x04 */ XK_3, XK_numbersign, NoSymbol, NoSymbol,
- /* 0x05 */ XK_4, XK_dollar, NoSymbol, NoSymbol,
- /* 0x06 */ XK_5, XK_percent, NoSymbol, NoSymbol,
- /* 0x07 */ XK_6, XK_asciicircum, NoSymbol, NoSymbol,
- /* 0x08 */ XK_7, XK_ampersand, NoSymbol, NoSymbol,
- /* 0x09 */ XK_8, XK_asterisk, NoSymbol, NoSymbol,
- /* 0x0a */ XK_9, XK_parenleft, NoSymbol, NoSymbol,
- /* 0x0b */ XK_0, XK_parenright, NoSymbol, NoSymbol,
- /* 0x0c */ XK_minus, XK_underscore, NoSymbol, NoSymbol,
- /* 0x0d */ XK_equal, XK_plus, NoSymbol, NoSymbol,
- /* 0x0e */ XK_BackSpace, NoSymbol, NoSymbol, NoSymbol,
- /* 0x0f */ XK_Tab, XK_ISO_Left_Tab,NoSymbol, NoSymbol,
- /* 0x10 */ XK_Q, NoSymbol, NoSymbol, NoSymbol,
- /* 0x11 */ XK_W, NoSymbol, NoSymbol, NoSymbol,
- /* 0x12 */ XK_E, NoSymbol, NoSymbol, NoSymbol,
- /* 0x13 */ XK_R, NoSymbol, NoSymbol, NoSymbol,
- /* 0x14 */ XK_T, NoSymbol, NoSymbol, NoSymbol,
- /* 0x15 */ XK_Y, NoSymbol, NoSymbol, NoSymbol,
- /* 0x16 */ XK_U, NoSymbol, NoSymbol, NoSymbol,
- /* 0x17 */ XK_I, NoSymbol, NoSymbol, NoSymbol,
- /* 0x18 */ XK_O, NoSymbol, NoSymbol, NoSymbol,
- /* 0x19 */ XK_P, NoSymbol, NoSymbol, NoSymbol,
- /* 0x1a */ XK_bracketleft, XK_braceleft, NoSymbol, NoSymbol,
- /* 0x1b */ XK_bracketright,XK_braceright, NoSymbol, NoSymbol,
- /* 0x1c */ XK_Return, NoSymbol, NoSymbol, NoSymbol,
- /* 0x1d */ XK_Control_L, NoSymbol, NoSymbol, NoSymbol,
- /* 0x1e */ XK_A, NoSymbol, NoSymbol, NoSymbol,
- /* 0x1f */ XK_S, NoSymbol, NoSymbol, NoSymbol,
- /* 0x20 */ XK_D, NoSymbol, NoSymbol, NoSymbol,
- /* 0x21 */ XK_F, NoSymbol, NoSymbol, NoSymbol,
- /* 0x22 */ XK_G, NoSymbol, NoSymbol, NoSymbol,
- /* 0x23 */ XK_H, NoSymbol, NoSymbol, NoSymbol,
- /* 0x24 */ XK_J, NoSymbol, NoSymbol, NoSymbol,
- /* 0x25 */ XK_K, NoSymbol, NoSymbol, NoSymbol,
- /* 0x26 */ XK_L, NoSymbol, NoSymbol, NoSymbol,
- /* 0x27 */ XK_semicolon, XK_colon, NoSymbol, NoSymbol,
- /* 0x28 */ XK_quoteright, XK_quotedbl, NoSymbol, NoSymbol,
- /* 0x29 */ XK_quoteleft, XK_asciitilde, NoSymbol, NoSymbol,
- /* 0x2a */ XK_Shift_L, NoSymbol, NoSymbol, NoSymbol,
- /* 0x2b */ XK_backslash, XK_bar, NoSymbol, NoSymbol,
- /* 0x2c */ XK_Z, NoSymbol, NoSymbol, NoSymbol,
- /* 0x2d */ XK_X, NoSymbol, NoSymbol, NoSymbol,
- /* 0x2e */ XK_C, NoSymbol, NoSymbol, NoSymbol,
- /* 0x2f */ XK_V, NoSymbol, NoSymbol, NoSymbol,
- /* 0x30 */ XK_B, NoSymbol, NoSymbol, NoSymbol,
- /* 0x31 */ XK_N, NoSymbol, NoSymbol, NoSymbol,
- /* 0x32 */ XK_M, NoSymbol, NoSymbol, NoSymbol,
- /* 0x33 */ XK_comma, XK_less, NoSymbol, NoSymbol,
- /* 0x34 */ XK_period, XK_greater, NoSymbol, NoSymbol,
- /* 0x35 */ XK_slash, XK_question, NoSymbol, NoSymbol,
- /* 0x36 */ XK_Shift_R, NoSymbol, NoSymbol, NoSymbol,
- /* 0x37 */ XK_KP_Multiply, NoSymbol, NoSymbol, NoSymbol,
- /* 0x38 */ XK_Alt_L, XK_Meta_L, NoSymbol, NoSymbol,
- /* 0x39 */ XK_space, NoSymbol, NoSymbol, NoSymbol,
- /* 0x3a */ XK_Caps_Lock, NoSymbol, NoSymbol, NoSymbol,
- /* 0x3b */ XK_F1, NoSymbol, NoSymbol, NoSymbol,
- /* 0x3c */ XK_F2, NoSymbol, NoSymbol, NoSymbol,
- /* 0x3d */ XK_F3, NoSymbol, NoSymbol, NoSymbol,
- /* 0x3e */ XK_F4, NoSymbol, NoSymbol, NoSymbol,
- /* 0x3f */ XK_F5, NoSymbol, NoSymbol, NoSymbol,
- /* 0x40 */ XK_F6, NoSymbol, NoSymbol, NoSymbol,
- /* 0x41 */ XK_F7, NoSymbol, NoSymbol, NoSymbol,
- /* 0x42 */ XK_F8, NoSymbol, NoSymbol, NoSymbol,
- /* 0x43 */ XK_F9, NoSymbol, NoSymbol, NoSymbol,
- /* 0x44 */ XK_F10, NoSymbol, NoSymbol, NoSymbol,
- /* 0x45 */ XK_Num_Lock, NoSymbol, NoSymbol, NoSymbol,
- /* 0x46 */ XK_Scroll_Lock, NoSymbol, NoSymbol, NoSymbol,
- /* 0x47 */ XK_KP_Home, XK_KP_7, NoSymbol, NoSymbol,
- /* 0x48 */ XK_KP_Up, XK_KP_8, NoSymbol, NoSymbol,
- /* 0x49 */ XK_KP_Prior, XK_KP_9, NoSymbol, NoSymbol,
- /* 0x4a */ XK_KP_Subtract, NoSymbol, NoSymbol, NoSymbol,
- /* 0x4b */ XK_KP_Left, XK_KP_4, NoSymbol, NoSymbol,
- /* 0x4c */ XK_KP_Begin, XK_KP_5, NoSymbol, NoSymbol,
- /* 0x4d */ XK_KP_Right, XK_KP_6, NoSymbol, NoSymbol,
- /* 0x4e */ XK_KP_Add, NoSymbol, NoSymbol, NoSymbol,
- /* 0x4f */ XK_KP_End, XK_KP_1, NoSymbol, NoSymbol,
- /* 0x50 */ XK_KP_Down, XK_KP_2, NoSymbol, NoSymbol,
- /* 0x51 */ XK_KP_Next, XK_KP_3, NoSymbol, NoSymbol,
- /* 0x52 */ XK_KP_Insert, XK_KP_0, NoSymbol, NoSymbol,
- /* 0x53 */ XK_KP_Delete, XK_KP_Decimal, NoSymbol, NoSymbol,
- /* 0x54 */ XK_Sys_Req, NoSymbol, NoSymbol, NoSymbol,
- /* 0x55 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
- /* 0x56 */ XK_less, XK_greater, NoSymbol, NoSymbol,
- /* 0x57 */ XK_F11, NoSymbol, NoSymbol, NoSymbol,
- /* 0x58 */ XK_F12, NoSymbol, NoSymbol, NoSymbol,
- /* 0x59 */ XK_Home, NoSymbol, NoSymbol, NoSymbol,
- /* 0x5a */ XK_Up, NoSymbol, NoSymbol, NoSymbol,
- /* 0x5b */ XK_Prior, NoSymbol, NoSymbol, NoSymbol,
- /* 0x5c */ XK_Left, NoSymbol, NoSymbol, NoSymbol,
- /* 0x5d */ XK_Begin, NoSymbol, NoSymbol, NoSymbol,
- /* 0x5e */ XK_Right, NoSymbol, NoSymbol, NoSymbol,
- /* 0x5f */ XK_End, NoSymbol, NoSymbol, NoSymbol,
- /* 0x60 */ XK_Down, NoSymbol, NoSymbol, NoSymbol,
- /* 0x61 */ XK_Next, NoSymbol, NoSymbol, NoSymbol,
- /* 0x62 */ XK_Insert, NoSymbol, NoSymbol, NoSymbol,
- /* 0x63 */ XK_Delete, NoSymbol, NoSymbol, NoSymbol,
- /* 0x64 */ XK_KP_Enter, NoSymbol, NoSymbol, NoSymbol,
- /* 0x65 */ XK_Control_R, NoSymbol, NoSymbol, NoSymbol,
- /* 0x66 */ XK_Pause, NoSymbol, NoSymbol, NoSymbol,
- /* 0x67 */ XK_Print, NoSymbol, NoSymbol, NoSymbol,
- /* 0x68 */ XK_KP_Divide, NoSymbol, NoSymbol, NoSymbol,
- /* 0x69 */ XK_Alt_R, XK_Meta_R, NoSymbol, NoSymbol,
- /* 0x6a */ XK_Break, NoSymbol, NoSymbol, NoSymbol,
- /* 0x6b */ XK_Meta_L, NoSymbol, NoSymbol, NoSymbol,
- /* 0x6c */ XK_Meta_R, NoSymbol, NoSymbol, NoSymbol,
- /* 0x6d */ XK_Menu, NoSymbol, NoSymbol, NoSymbol,
- /* 0x6e */ XK_F13, NoSymbol, NoSymbol, NoSymbol,
- /* 0x6f */ XK_F14, NoSymbol, NoSymbol, NoSymbol,
- /* 0x70 */ XK_F15, NoSymbol, NoSymbol, NoSymbol,
- /* 0x71 */ XK_F16, NoSymbol, NoSymbol, NoSymbol,
- /* 0x72 */ XK_F17, NoSymbol, NoSymbol, NoSymbol,
- /* 0x73 */ XK_backslash, XK_underscore, NoSymbol, NoSymbol,
- /* 0x74 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
- /* 0x75 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
- /* 0x76 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
- /* 0x77 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
- /* 0x78 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
- /* 0x79 */ XK_Henkan, XK_Mode_switch, NoSymbol, NoSymbol,
- /* 0x7a */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
- /* 0x7b */ XK_Muhenkan, NoSymbol, NoSymbol, NoSymbol,
- /* 0x7c */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
- /* 0x7d */ XK_backslash, XK_bar, NoSymbol, NoSymbol,
- /* 0x7e */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
- /* 0x7f */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
-};
--- a/meson.build
+++ b/meson.build
@@ -1,41 +1,2 @@
subdir('libdraw')
-
-srcs = [
- 'x9dev.c',
- 'keyboard.c',
- 'mouse.c',
- 'screen.c',
- 'x9dev.h',
- 'keymap.h',
- '../../mi/miinitext.c',
-]
-
-cc_args = [
- '-Wno-missing-braces',
-]
-
-x9dev_server = executable(
- 'x9dev',
- srcs,
- include_directories: inc,
- dependencies: common_dep,
- link_with: [
- libdraw,
- libxserver_mi,
- libxserver_main,
- libxserver_fb,
- libxserver,
- libxserver_xkb_stubs,
- libxserver_glx,
- libglxvnd,
- libxserver_miext_shadow,
- ],
- install: true,
- c_args: cc_args,
-)
-
-install_man(configure_file(
- input: 'man/x9dev.man',
- output: 'x9dev.1',
- configuration: manpage_config,
-))
+subdir('src')
\ No newline at end of file
--- a/mouse.c
+++ /dev/null
@@ -1,145 +1,0 @@
-/*
- * Copyright (c) 2008 Federico G. Benavento <benavento@gmail.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include "x9dev.h"
-
-extern DeviceIntPtr x9devMouse;
-int oldx, oldy, oldbut;
-
-#define e ev.u.u
-#define ek ev.u.keyButtonPointer
-static void
-x9devSendMouseEvent(int x, int y, int b, int t)
-{
- xEvent ev;
-
- memset(&ev, 0, sizeof(xEvent));
- e.type = t;
- e.detail = b;
- ek.rootX = x;
- ek.rootY = y;
- ek.time = GetTimeInMillis();
- mieqEnqueue(x9devMouse, (InternalEvent *)&ev);
-}
-#undef ek
-#undef e
-
-static int
-x9devMouseRead(int *x, int *y, int *b)
-{
- int n;
- char buf[1+4*12];
-
- if((n = read(x9di.mfd, buf, 1 + 4 * 12)) <= 0)
- return 0;
-
- if (n != 1 + 4 * 12)
- FatalError("Bad mouse event");
-
- if (buf[0] == 'r') {
- x9devResize();
- return 0;
- }
-
- *x = atoi(buf + 1 + 0 * 12) - screen->r.min.x;
- *y = atoi(buf + 1 + 1 * 12) - screen->r.min.y;
- *b = atoi(buf + 1 + 2 * 12);
-
- return 1;
-}
-
-
-int
-x9devMouseHandle(void)
-{
- int x, y, b, but, t;
-
- if (!x9devMouseRead(&x, &y, &but))
- return 0;
-
- t = b = 0;
- if (x != oldx || y != oldy) {
- t = MotionNotify;
- oldx = x, oldy = y;
- }
- if (but != oldbut) {
- b = oldbut ^ but;
- t = ButtonPress;
- if (oldbut & b)
- t = ButtonRelease;
- if (b == 4)
- b = 3;
- if (but & (8 | 16)) {
- if (b & 8)
- b = 4;
- else
- b = 5;
- x9devSendMouseEvent(x, y, b, ButtonPress);
- x9devSendMouseEvent(x, y, b, ButtonRelease);
- return 1;
- }
- }
- x9devSendMouseEvent(x, y, b, t);
- oldbut = but;
-
- return 1;
-}
-
-int
-x9devMouseProc(DeviceIntPtr pDevice, int what)
-{
- static unsigned char map[] = {0, 1, 2, 3, 4, 5};
- DevicePtr pDev = (DevicePtr)pDevice;
- Atom btn_labels[3] = {0};
- Atom axes_labels[2] = {0};
-
- /* Init our globals */
- oldx = oldy = oldbut = 0;
-
- switch (what) {
- case DEVICE_INIT:
- btn_labels[0] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_LEFT);
- btn_labels[1] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_MIDDLE);
- btn_labels[2] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_RIGHT);
-
- axes_labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_X);
- axes_labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_Y);
- InitPointerDeviceStruct(pDev, map, 3, btn_labels,
- (PtrCtrlProcPtr)NoopDDA, GetMotionHistorySize(), 2, axes_labels);
- break;
-
- case DEVICE_ON:
- pDev->on = TRUE;
- break;
-
- case DEVICE_CLOSE:
- case DEVICE_OFF:
- pDev->on = FALSE;
- break;
- }
- return Success;
-}
\ No newline at end of file
--- a/screen.c
+++ /dev/null
@@ -1,187 +1,0 @@
-/*
- * Copyright (c) 2008 Federico G. Benavento <benavento@gmail.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include "x9dev.h"
-
-static void
-x9devRefreshScreen(int x1, int y1, int x2, int y2)
-{
- Rectangle r;
- uchar *p;
- int n;
-
- p = (uchar *)x9di.fb+(y1*x9di.width+x1)*(x9di.depth/8);
- r = rectaddpt(Rect(x1, y1, x2, y2), screen->r.min);
- if (Dx(r) == x9di.width) {
- if (loadimage(screen, r, p, x9di.bpl * Dy(r)) < 0)
- FatalError("can't load image");
- goto End;
- }
- n = Dx(r)*(x9di.depth/8);
- y2 += screen->r.min.y;
- while(r.min.y < y2) {
- r.max.y = r.min.y+1;
- if (loadimage(screen, r, p, n) < 0)
- FatalError("can't load image");
- p += x9di.bpl;
- r.min.y++;
- }
-End:
- flushimage(_display, 1);
-}
-
-
-void
-x9devResize(void)
-{
- if (getwindow(_display, Refnone) < 0)
- FatalError("can't reattach to window");
-
- draw(screen, screen->r, _display->white, NULL, ZP);
- x9devRefreshScreen(0, 0, x9di.width, x9di.height);
-}
-
-static void
-x9devWakeupHandler(ScreenPtr scr, int result)
-{
- if (result <= 0)
- return;
-
- while (x9devMouseHandle())
- ;
- while (x9devKeybdHandle())
- ;
-}
-
-static void
-x9devShadowUpdate(ScreenPtr pScreen, shadowBufPtr pBuf)
-{
- BoxPtr pbox;
-
- pbox = REGION_EXTENTS(pScreen, &pBuf->pDamage);
- x9devRefreshScreen(pbox->x1, pbox->y1, pbox->x2, pbox->y2);
-}
-
-
-static void
-x9devCursorLimits(DeviceIntPtr dptr, ScreenPtr spr, CursorPtr cpr, BoxPtr hot, BoxPtr topleft)
-{
- *topleft = *hot;
-}
-
-
-/* callback dance... */
-static CreateScreenResourcesProcPtr x9devCreateResourcesPtr;
-
-static Bool
-x9devCreateResources(ScreenPtr pScreen)
-{
- Bool ret = 0;
-
- pScreen->CreateScreenResources = x9devCreateResourcesPtr;
- if (pScreen->CreateScreenResources)
- ret = pScreen->CreateScreenResources(pScreen);
-
- x9devCreateResourcesPtr = pScreen->CreateScreenResources;
- pScreen->CreateScreenResources = x9devCreateResourcesPtr;
- if (ret == FALSE)
- return FALSE;
-
- shadowRemove(pScreen, pScreen->GetScreenPixmap(pScreen));
- if (!shadowAdd(pScreen, pScreen->GetScreenPixmap(pScreen), x9devShadowUpdate, NULL, SHADOW_ROTATE_0, 0))
- return FALSE;
-
- return ret;
-}
-
-Bool
-x9devScreenInit(ScreenPtr pScreen, int argc, char *argv[])
-{
- int v, i;
- unsigned long r, g, b;
- static int first = 1;
-
- if (first) {
- x9devInfoInit();
- first = 0;
- }
-
- for (i = 0; i < NUMFORMATS; i++)
- fbSetVisualTypes(formats[i].depth, 0, 8);
-
- switch (x9di.depth) {
- case 16:
- r = 0xF800, g = 0x07E0, b = 0x001F;
- v = 1 << TrueColor;
- break;
- case 24:
- case 32:
- r = 0xFF0000, g = 0x00FF00, b = 0x0000FF;
- v = 1 << TrueColor;
- break;
- default:
- r = g = b = 0;
- v = 1 << PseudoColor;
- }
- if (!fbSetVisualTypesAndMasks(x9di.depth, v, 8, r, g, b))
- return FALSE;
-
- if (!fbScreenInit(pScreen, x9di.fb, x9di.width, x9di.height,
- x9di.dpi, x9di.dpi, x9di.width, x9di.depth))
- return FALSE;
-
- pScreen->mmWidth = x9di.width * 25.4 / x9di.dpi;
- pScreen->mmHeight = x9di.height * 25.4 / x9di.dpi;
-
- /* cursor */
- pScreen->ConstrainCursor = x9devConstrainCursor;
- pScreen->CursorLimits = x9devCursorLimits;
- pScreen->DisplayCursor = x9devDisplayCursor;
- pScreen->RealizeCursor = x9devRealizeCursor;
- pScreen->UnrealizeCursor = x9devUnrealizeCursor;
- pScreen->RecolorCursor = x9devRecolorCursor;
- pScreen->SetCursorPosition = x9devSetCursorPosition;
-
- pScreen->SaveScreen = x9devSaveScreen;
- pScreen->WakeupHandler = x9devWakeupHandler;
-
-#ifdef RENDER
- if (!fbPictureInit(pScreen, 0, 0))
- return FALSE;
-#endif
-
- if (!shadowSetup(pScreen))
- return FALSE;
-
- x9devCreateResourcesPtr = pScreen->CreateScreenResources;
- pScreen->CreateScreenResources = x9devCreateResources;
-
- if (!fbCreateDefColormap(pScreen))
- return FALSE;
-
- return TRUE;
-}
--- /dev/null
+++ b/src/keyboard.c
@@ -1,0 +1,164 @@
+/*
+ * Copyright (c) 2008 Federico G. Benavento <benavento@gmail.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include "x9dev.h"
+#include "keymap.h"
+
+#define KF 0xF000
+#define Kdown 0x80
+
+extern x9devInfo x9di;
+extern DeviceIntPtr x9devKeybd;
+static CARD8 modmap[MAP_LENGTH];
+
+#define e ev.u.u
+#define ek ev.u.keyButtonPointer
+
+static void
+x9devSendKeybdEvent(int k, int t)
+{
+ xEvent ev;
+
+ memset(&ev, 0, sizeof(xEvent));
+ e.type = t;
+ e.detail = k + MIN_KEYCODE;
+ ek.time = GetTimeInMillis();
+ mieqEnqueue(x9devKeybd, (InternalEvent *)&ev);
+}
+
+#undef ek
+#undef e
+
+static wchar_t
+x9devKeybdRead(void)
+{
+ static char s[3];
+ static int n = 0;
+ wchar_t rune;
+
+ if(read(x9di.kfd, s+n, 1) != 1)
+ return 0;
+
+ rune = s[0];
+
+ if (n > 0 || (rune & 0x80) != 0x00) {
+ if (mbtowc(&rune, s, n + 1) == -1) {
+ if (++n == 3)
+ n = 0;
+ return 0;
+ }
+ n = 0;
+ }
+
+ if (rune == Kdown)
+ rune = 0x99;
+ else if (rune & KF)
+ rune = (rune&~KF) + 0x80;
+
+ return rune;
+}
+
+int
+x9devKeybdHandle(void)
+{
+ unsigned char k, m;
+ int c;
+
+ c = x9devKeybdRead();
+ if (c == 0 || c > sizeof(rune2keycode))
+ return 0;
+
+ k = rune2keycode[c].key;
+ if (k == 0)
+ return 0;
+
+ m = rune2keycode[c].mod;
+ if (m)
+ x9devSendKeybdEvent(m, KeyPress);
+
+ x9devSendKeybdEvent(k, KeyPress);
+ x9devSendKeybdEvent(k, KeyRelease);
+ if (m)
+ x9devSendKeybdEvent(m, KeyRelease);
+
+ return 1;
+}
+
+static void
+x9devInitModmap(void)
+{
+ KeySym * ks;
+ int i;
+
+ for (i = 0; i < MAP_LENGTH; i++)
+ modmap[i] = NoSymbol;
+
+ for (i = MIN_KEYCODE, ks = map; i < (MIN_KEYCODE + NUM_KEYCODES); i++, ks += MAP_WIDTH)
+ switch (*ks) {
+ case XK_Shift_L:
+ case XK_Shift_R:
+ modmap[i] = ShiftMask;
+ break;
+ case XK_Control_L:
+ case XK_Control_R:
+ modmap[i] = ControlMask;
+ break;
+ case XK_Alt_L:
+ case XK_Alt_R:
+ modmap[i] = Mod1Mask;
+ break;
+ }
+}
+
+int
+x9devKeybdProc(DeviceIntPtr pDev, int what)
+{
+ switch (what) {
+ case DEVICE_INIT:
+ x9devInitModmap();
+ if (!InitKeyboardDeviceStruct(pDev, NULL,
+ (BellProcPtr)NoopDDA, (KbdCtrlProcPtr)NoopDDA))
+ FatalError("can't init keyboard");
+ pDev->inited = TRUE;
+ break;
+ case DEVICE_ON:
+ pDev->enabled = TRUE;
+ break;
+ case DEVICE_CLOSE:
+ break;
+ case DEVICE_OFF:
+ pDev->enabled = FALSE;
+ break;
+ }
+ return Success;
+}
+
+Bool
+x9checkmod(unsigned int k, DeviceIntPtr pDev)
+{
+ return modmap[k] != 0;
+}
--- /dev/null
+++ b/src/keymap.h
@@ -1,0 +1,560 @@
+/* the key names define come from xwin/winkeynames.h, hence the NOTICE */
+
+/*
+ * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Thomas Roell not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Thomas Roell makes no representations
+ * about the suitability of this software for any purpose. It is provided
+ * "as is" without express or implied warranty.
+ *
+ * THOMAS ROELL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THOMAS ROELL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+#define MAP_WIDTH 4
+#define NUM_KEYCODES 248
+#define MIN_KEYCODE 8
+#define MAX_KEYCODE (NUM_KEYCODES + MIN_KEYCODE-1)
+
+/*
+ * definition of the AT84/MF101/MF102 Keyboard:
+ * ============================================================
+ * Defined Key Cap Glyphs Pressed value
+ * Key Name Main Also (hex) (dec)
+ * ---------------- ---------- ------- ------ ------
+ */
+
+#define KEY_Escape /* Escape 0x01 */ 1
+#define KEY_1 /* 1 ! 0x02 */ 2
+#define KEY_2 /* 2 @ 0x03 */ 3
+#define KEY_3 /* 3 # 0x04 */ 4
+#define KEY_4 /* 4 $ 0x05 */ 5
+#define KEY_5 /* 5 % 0x06 */ 6
+#define KEY_6 /* 6 ^ 0x07 */ 7
+#define KEY_7 /* 7 & 0x08 */ 8
+#define KEY_8 /* 8 * 0x09 */ 9
+#define KEY_9 /* 9 ( 0x0a */ 10
+#define KEY_0 /* 0 ) 0x0b */ 11
+#define KEY_Minus /* - (Minus) _ (Under) 0x0c */ 12
+#define KEY_Equal /* = (Equal) + 0x0d */ 13
+#define KEY_BackSpace /* Back Space 0x0e */ 14
+#define KEY_Tab /* Tab 0x0f */ 15
+#define KEY_Q /* Q 0x10 */ 16
+#define KEY_W /* W 0x11 */ 17
+#define KEY_E /* E 0x12 */ 18
+#define KEY_R /* R 0x13 */ 19
+#define KEY_T /* T 0x14 */ 20
+#define KEY_Y /* Y 0x15 */ 21
+#define KEY_U /* U 0x16 */ 22
+#define KEY_I /* I 0x17 */ 23
+#define KEY_O /* O 0x18 */ 24
+#define KEY_P /* P 0x19 */ 25
+#define KEY_LBrace /* [ { 0x1a */ 26
+#define KEY_RBrace /* ] } 0x1b */ 27
+#define KEY_Enter /* Enter 0x1c */ 28
+#define KEY_LCtrl /* Ctrl(left) 0x1d */ 29
+#define KEY_A /* A 0x1e */ 30
+#define KEY_S /* S 0x1f */ 31
+#define KEY_D /* D 0x20 */ 32
+#define KEY_F /* F 0x21 */ 33
+#define KEY_G /* G 0x22 */ 34
+#define KEY_H /* H 0x23 */ 35
+#define KEY_J /* J 0x24 */ 36
+#define KEY_K /* K 0x25 */ 37
+#define KEY_L /* L 0x26 */ 38
+#define KEY_SemiColon /* ;(SemiColon) :(Colon) 0x27 */ 39
+#define KEY_Quote /* ' (Apostr) " (Quote) 0x28 */ 40
+#define KEY_Tilde /* ` (Accent) ~ (Tilde) 0x29 */ 41
+#define KEY_ShiftL /* Shift(left) 0x2a */ 42
+#define KEY_BSlash /* \(BckSlash) |(VertBar)0x2b */ 43
+#define KEY_Z /* Z 0x2c */ 44
+#define KEY_X /* X 0x2d */ 45
+#define KEY_C /* C 0x2e */ 46
+#define KEY_V /* V 0x2f */ 47
+#define KEY_B /* B 0x30 */ 48
+#define KEY_N /* N 0x31 */ 49
+#define KEY_M /* M 0x32 */ 50
+#define KEY_Comma /* , (Comma) < (Less) 0x33 */ 51
+#define KEY_Period /* . (Period) >(Greater)0x34 */ 52
+#define KEY_Slash /* / (Slash) ? 0x35 */ 53
+#define KEY_ShiftR /* Shift(right) 0x36 */ 54
+#define KEY_KP_Multiply /* * 0x37 */ 55
+#define KEY_Alt /* Alt(left) 0x38 */ 56
+#define KEY_Space /* (SpaceBar) 0x39 */ 57
+#define KEY_CapsLock /* CapsLock 0x3a */ 58
+#define KEY_F1 /* F1 0x3b */ 59
+#define KEY_F2 /* F2 0x3c */ 60
+#define KEY_F3 /* F3 0x3d */ 61
+#define KEY_F4 /* F4 0x3e */ 62
+#define KEY_F5 /* F5 0x3f */ 63
+#define KEY_F6 /* F6 0x40 */ 64
+#define KEY_F7 /* F7 0x41 */ 65
+#define KEY_F8 /* F8 0x42 */ 66
+#define KEY_F9 /* F9 0x43 */ 67
+#define KEY_F10 /* F10 0x44 */ 68
+#define KEY_NumLock /* NumLock 0x45 */ 69
+#define KEY_ScrollLock /* ScrollLock 0x46 */ 70
+#define KEY_KP_7 /* 7 Home 0x47 */ 71
+#define KEY_KP_8 /* 8 Up 0x48 */ 72
+#define KEY_KP_9 /* 9 PgUp 0x49 */ 73
+#define KEY_KP_Minus /* - (Minus) 0x4a */ 74
+#define KEY_KP_4 /* 4 Left 0x4b */ 75
+#define KEY_KP_5 /* 5 0x4c */ 76
+#define KEY_KP_6 /* 6 Right 0x4d */ 77
+#define KEY_KP_Plus /* + (Plus) 0x4e */ 78
+#define KEY_KP_1 /* 1 End 0x4f */ 79
+#define KEY_KP_2 /* 2 Down 0x50 */ 80
+#define KEY_KP_3 /* 3 PgDown 0x51 */ 81
+#define KEY_KP_0 /* 0 Insert 0x52 */ 82
+#define KEY_KP_Decimal /* . (Decimal) Delete 0x53 */ 83
+#define KEY_SysReqest /* SysReqest 0x54 */ 84
+ /* NOTUSED 0x55 */
+#define KEY_Less /* < (Less) >(Greater) 0x56 */ 86
+#define KEY_F11 /* F11 0x57 */ 87
+#define KEY_F12 /* F12 0x58 */ 88
+
+#define KEY_Prefix0 /* special 0x60 */ 96
+#define KEY_Prefix1 /* specail 0x61 */ 97
+
+/*
+ * The 'scancodes' below are generated by the server, because the MF101/102
+ * keyboard sends them as sequence of other scancodes
+ */
+#define KEY_Home /* Home 0x59 */ 89
+#define KEY_Up /* Up 0x5a */ 90
+#define KEY_PgUp /* PgUp 0x5b */ 91
+#define KEY_Left /* Left 0x5c */ 92
+#define KEY_Begin /* Begin 0x5d */ 93
+#define KEY_Right /* Right 0x5e */ 94
+#define KEY_End /* End 0x5f */ 95
+#define KEY_Down /* Down 0x60 */ 96
+#define KEY_PgDown /* PgDown 0x61 */ 97
+#define KEY_Insert /* Insert 0x62 */ 98
+#define KEY_Delete /* Delete 0x63 */ 99
+#define KEY_KP_Enter /* Enter 0x64 */ 100
+#define KEY_RCtrl /* Ctrl(right) 0x65 */ 101
+#define KEY_Pause /* Pause 0x66 */ 102
+#define KEY_Print /* Print 0x67 */ 103
+#define KEY_KP_Divide /* Divide 0x68 */ 104
+#define KEY_AltLang /* AtlLang(right) 0x69 */ 105
+#define KEY_Break /* Break 0x6a */ 106
+#define KEY_LMeta /* Left Meta 0x6b */ 107
+#define KEY_RMeta /* Right Meta 0x6c */ 108
+#define KEY_Menu /* Menu 0x6d */ 109
+#define KEY_F13 /* F13 0x6e */ 110
+#define KEY_F14 /* F14 0x6f */ 111
+#define KEY_F15 /* F15 0x70 */ 112
+#define KEY_F16 /* F16 0x71 */ 113
+#define KEY_F17 /* F17 0x72 */ 114
+#define KEY_KP_DEC /* KP_DEC 0x73 */ 115
+#define KEY_KP_Equal /* Equal (Keypad) 0x76 */ 118
+#define KEY_XFER /* Kanji Transfer 0x79 */ 121
+#define KEY_NFER /* No Kanji Transfer 0x7b */ 123
+#define KEY_Yen /* Yen 0x7d */ 125
+#define KEY_HKTG /* Hirugana/Katakana tog 0xc8 */ 200
+#define KEY_BSlash2 /* \ _ 0xcb */ 203
+
+struct{
+ unsigned char key, mod;
+}rune2keycode[] = {
+ KEY_Delete, KEY_ShiftL, /* 0x000 */
+ KEY_A, KEY_LCtrl, /* 0x001 */
+ KEY_B, KEY_LCtrl, /* 0x002 */
+ KEY_C, KEY_LCtrl, /* 0x003 */
+ KEY_D, KEY_LCtrl, /* 0x004 */
+ KEY_E, KEY_LCtrl, /* 0x005 */
+ KEY_F, KEY_LCtrl, /* 0x006 */
+ KEY_G, KEY_LCtrl, /* 0x007 */
+ KEY_BackSpace, 0, /* 0x008 */
+ KEY_Tab, 0, /* 0x009 */
+ KEY_Enter, 0, /* 0x00a */
+ KEY_K, KEY_LCtrl, /* 0x00b */
+ KEY_L, KEY_LCtrl, /* 0x00c */
+ KEY_M, KEY_LCtrl, /* 0x00d */
+ KEY_N, KEY_LCtrl, /* 0x00e */
+ KEY_O, KEY_LCtrl, /* 0x00f */
+ KEY_P, KEY_LCtrl, /* 0x010 */
+ KEY_Q, KEY_LCtrl, /* 0x011 */
+ KEY_R, KEY_LCtrl, /* 0x012 */
+ KEY_S, KEY_LCtrl, /* 0x013 */
+ KEY_T, KEY_LCtrl, /* 0x014 */
+ KEY_U, KEY_LCtrl, /* 0x015 */
+ KEY_V, KEY_LCtrl, /* 0x016 */
+ KEY_W, KEY_LCtrl, /* 0x017 */
+ KEY_X, KEY_LCtrl, /* 0x018 */
+ KEY_Y, KEY_LCtrl, /* 0x019 */
+ KEY_Z, KEY_LCtrl, /* 0x01a */
+ KEY_Escape, 0, /* 0x01b */
+ KEY_BSlash, KEY_LCtrl, /* 0x01c */
+ KEY_RBrace, KEY_LCtrl, /* 0x01d */
+ KEY_Period, KEY_LCtrl, /* 0x01e */
+ KEY_Slash, KEY_LCtrl, /* 0x01f */
+ KEY_Space, 0, /* 0x020 */
+ KEY_1, KEY_ShiftL, /* 0x021 */
+ KEY_Quote, KEY_ShiftL, /* 0x022 */
+ KEY_3, KEY_ShiftL, /* 0x023 */
+ KEY_4, KEY_ShiftL, /* 0x024 */
+ KEY_5, KEY_ShiftL, /* 0x025 */
+ KEY_7, KEY_ShiftL, /* 0x026 */
+ KEY_Quote, 0, /* 0x027 */
+ KEY_9, KEY_ShiftL, /* 0x028 */
+ KEY_0, KEY_ShiftL, /* 0x029 */
+ KEY_8, KEY_ShiftL, /* 0x02a */
+ KEY_Equal, KEY_ShiftL, /* 0x02b */
+ KEY_Comma, 0, /* 0x02c */
+ KEY_KP_Minus, 0, /* 0x02d */
+ KEY_Period,0, /* 0x02e */
+ KEY_Slash, 0, /* 0x02f */
+ KEY_0, 0, /* 0x030 */
+ KEY_1, 0, /* 0x031 */
+ KEY_2, 0, /* 0x032 */
+ KEY_3, 0, /* 0x033 */
+ KEY_4, 0, /* 0x034 */
+ KEY_5, 0, /* 0x035 */
+ KEY_6, 0, /* 0x036 */
+ KEY_7, 0, /* 0x037 */
+ KEY_8, 0, /* 0x038 */
+ KEY_9, 0, /* 0x039 */
+ KEY_SemiColon, KEY_ShiftL, /* 0x03a */
+ KEY_SemiColon, 0, /* 0x03b */
+ KEY_Comma, KEY_ShiftL, /* 0x03c */
+ KEY_Equal, 0, /* 0x03d */
+ KEY_Period, KEY_ShiftL, /* 0x03e */
+ KEY_Slash, KEY_ShiftL, /* 0x03f */
+ KEY_2, KEY_ShiftL, /* 0x040 */
+ KEY_A, KEY_ShiftL, /* 0x041 */
+ KEY_B, KEY_ShiftL, /* 0x042 */
+ KEY_C, KEY_ShiftL, /* 0x043 */
+ KEY_D, KEY_ShiftL, /* 0x044 */
+ KEY_E, KEY_ShiftL, /* 0x045 */
+ KEY_F, KEY_ShiftL, /* 0x046 */
+ KEY_G, KEY_ShiftL, /* 0x047 */
+ KEY_H, KEY_ShiftL, /* 0x048 */
+ KEY_I, KEY_ShiftL, /* 0x049 */
+ KEY_J, KEY_ShiftL, /* 0x04a */
+ KEY_K, KEY_ShiftL, /* 0x04b */
+ KEY_L, KEY_ShiftL, /* 0x04c */
+ KEY_M, KEY_ShiftL, /* 0x04d */
+ KEY_N, KEY_ShiftL, /* 0x04e */
+ KEY_O, KEY_ShiftL, /* 0x04f */
+ KEY_P, KEY_ShiftL, /* 0x050 */
+ KEY_Q, KEY_ShiftL, /* 0x051 */
+ KEY_R, KEY_ShiftL, /* 0x052 */
+ KEY_S, KEY_ShiftL, /* 0x053 */
+ KEY_T, KEY_ShiftL, /* 0x054 */
+ KEY_U, KEY_ShiftL, /* 0x055 */
+ KEY_V, KEY_ShiftL, /* 0x056 */
+ KEY_W, KEY_ShiftL, /* 0x057 */
+ KEY_X, KEY_ShiftL, /* 0x058 */
+ KEY_Y, KEY_ShiftL, /* 0x059 */
+ KEY_Z, KEY_ShiftL, /* 0x05a */
+ KEY_LBrace, 0, /* 0x05b */
+ KEY_BSlash, 0, /* 0x05c */
+ KEY_RBrace, 0, /* 0x05d */
+ KEY_6, KEY_ShiftL, /* 0x05e */
+ KEY_Minus, KEY_ShiftL, /* 0x05f */
+ KEY_Tilde,0, /* 0x060 */
+ KEY_A, 0, /* 0x061 */
+ KEY_B, 0, /* 0x062 */
+ KEY_C, 0, /* 0x063 */
+ KEY_D, 0, /* 0x064 */
+ KEY_E, 0, /* 0x065 */
+ KEY_F, 0, /* 0x066 */
+ KEY_G, 0, /* 0x067 */
+ KEY_H, 0, /* 0x068 */
+ KEY_I, 0, /* 0x069 */
+ KEY_J, 0, /* 0x06a */
+ KEY_K, 0, /* 0x06b */
+ KEY_L, 0, /* 0x06c */
+ KEY_M, 0, /* 0x06d */
+ KEY_N, 0, /* 0x06e */
+ KEY_O, 0, /* 0x06f */
+ KEY_P, 0, /* 0x070 */
+ KEY_Q, 0, /* 0x071 */
+ KEY_R, 0, /* 0x072 */
+ KEY_S, 0, /* 0x073 */
+ KEY_T, 0, /* 0x074 */
+ KEY_U, 0, /* 0x075 */
+ KEY_V, 0, /* 0x076 */
+ KEY_W, 0, /* 0x077 */
+ KEY_X, 0, /* 0x078 */
+ KEY_Y, 0, /* 0x079 */
+ KEY_Z, 0, /* 0x07a */
+ KEY_LBrace, KEY_ShiftL, /* 0x07b */
+ KEY_BSlash, KEY_ShiftL, /* 0x07c */
+ KEY_RBrace, KEY_ShiftL, /* 0x07d */
+ KEY_Tilde, KEY_ShiftL, /* 0x07e */
+ KEY_Delete, 0, /* 0x07f */
+ 0, 0, /* 0x080 */
+ KEY_F1, 0, /* 0x081 */
+ KEY_F2, 0, /* 0x082 */
+ KEY_F3, 0, /* 0x083 */
+ KEY_F4, 0, /* 0x084 */
+ KEY_F5, 0, /* 0x085 */
+ KEY_F6, 0, /* 0x086 */
+ KEY_F7, 0, /* 0x087 */
+ KEY_F8, 0, /* 0x088 */
+ KEY_F9, 0, /* 0x089 */
+ KEY_F10, 0, /* 0x08a */
+ KEY_F11, 0, /* 0x08b */
+ KEY_F12, 0, /* 0x08c */
+ KEY_Home, 0, /* 0x08d */
+ KEY_Up, 0, /* 0x08e */
+ KEY_PgUp, 0, /* 0x08f */
+ KEY_Print, 0, /* 0x090 */
+ KEY_Left, 0, /* 0x091 */
+ KEY_Right, 0, /* 0x092 */
+ KEY_PgDown, 0, /* 0x093 */
+ KEY_Insert, 0, /* 0x094 */
+ 0, 0, /* 0x095 */
+ 0, 0, /* 0x096 */
+ 0, 0, /* 0x097 */
+ KEY_End, 0, /* 0x098 */
+ KEY_Down, 0, /* 0x099 */
+ 0, 0, /* 0x09a */
+ 0, 0, /* 0x09b */
+ 0, 0, /* 0x09c */
+ 0, 0, /* 0x09d */
+ 0, 0, /* 0x09e */
+ 0, 0, /* 0x09f */
+ 0, 0, /* 0x0a0 */
+ 0, 0, /* 0x0a1 */
+ 0, 0, /* 0x0a2 */
+ 0, 0, /* 0x0a3 */
+ 0, 0, /* 0x0a4 */
+ 0, 0, /* 0x0a5 */
+ 0, 0, /* 0x0a6 */
+ 0, 0, /* 0x0a7 */
+ 0, 0, /* 0x0a8 */
+ 0, 0, /* 0x0a9 */
+ 0, 0, /* 0x0aa */
+ 0, 0, /* 0x0ab */
+ 0, 0, /* 0x0ac */
+ 0, 0, /* 0x0ad */
+ 0, 0, /* 0x0ae */
+ 0, 0, /* 0x0af */
+ 0, 0, /* 0x0b0 */
+ 0, 0, /* 0x0b1 */
+ 0, 0, /* 0x0b2 */
+ 0, 0, /* 0x0b3 */
+ 0, 0, /* 0x0b4 */
+ 0, 0, /* 0x0b5 */
+ 0, 0, /* 0x0b6 */
+ 0, 0, /* 0x0b7 */
+ 0, 0, /* 0x0b8 */
+ 0, 0, /* 0x0b9 */
+ 0, 0, /* 0x0ba */
+ 0, 0, /* 0x0bb */
+ 0, 0, /* 0x0bc */
+ 0, 0, /* 0x0bd */
+ 0, 0, /* 0x0be */
+ 0, 0, /* 0x0bf */
+ 0, 0, /* 0x0c0 */
+ 0, 0, /* 0x0c1 */
+ 0, 0, /* 0x0c2 */
+ 0, 0, /* 0x0c3 */
+ 0, 0, /* 0x0c4 */
+ 0, 0, /* 0x0c5 */
+ 0, 0, /* 0x0c6 */
+ 0, 0, /* 0x0c7 */
+ 0, 0, /* 0x0c8 */
+ 0, 0, /* 0x0c9 */
+ 0, 0, /* 0x0ca */
+ 0, 0, /* 0x0cb */
+ 0, 0, /* 0x0cc */
+ 0, 0, /* 0x0cd */
+ 0, 0, /* 0x0ce */
+ 0, 0, /* 0x0cf */
+ 0, 0, /* 0x0d0 */
+ 0, 0, /* 0x0d1 */
+ 0, 0, /* 0x0d2 */
+ 0, 0, /* 0x0d3 */
+ 0, 0, /* 0x0d4 */
+ 0, 0, /* 0x0d5 */
+ 0, 0, /* 0x0d6 */
+ 0, 0, /* 0x0d7 */
+ 0, 0, /* 0x0d8 */
+ 0, 0, /* 0x0d9 */
+ 0, 0, /* 0x0da */
+ 0, 0, /* 0x0db */
+ 0, 0, /* 0x0dc */
+ 0, 0, /* 0x0dd */
+ 0, 0, /* 0x0de */
+ 0, 0, /* 0x0df */
+ 0, 0, /* 0x0e0 */
+ 0, 0, /* 0x0e1 */
+ 0, 0, /* 0x0e2 */
+ 0, 0, /* 0x0e3 */
+ 0, 0, /* 0x0e4 */
+ 0, 0, /* 0x0e5 */
+ 0, 0, /* 0x0e6 */
+ 0, 0, /* 0x0e7 */
+ 0, 0, /* 0x0e8 */
+ 0, 0, /* 0x0e9 */
+ 0, 0, /* 0x0ea */
+ 0, 0, /* 0x0eb */
+ 0, 0, /* 0x0ec */
+ 0, 0, /* 0x0ed */
+ 0, 0, /* 0x0ee */
+ 0, 0, /* 0x0ef */
+ 0, 0, /* 0x0f0 */
+ 0, 0, /* 0x0f1 */
+ 0, 0, /* 0x0f2 */
+ 0, 0, /* 0x0f3 */
+ 0, 0, /* 0x0f4 */
+ 0, 0, /* 0x0f5 */
+ 0, 0, /* 0x0f6 */
+ 0, 0, /* 0x0f7 */
+ 0, 0, /* 0x0f8 */
+ 0, 0, /* 0x0f9 */
+ 0, 0, /* 0x0fa */
+ 0, 0, /* 0x0fb */
+ 0, 0, /* 0x0fc */
+ 0, 0, /* 0x0fd */
+ 0, 0, /* 0x0fe */
+ 0, 0, /* 0x0ff */
+};
+
+/* from xwin/winkeymap.h */
+static KeySym map[NUM_KEYCODES*MAP_WIDTH]={
+ /* 0x00 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x01 */ XK_Escape, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x02 */ XK_1, XK_exclam, NoSymbol, NoSymbol,
+ /* 0x03 */ XK_2, XK_at, NoSymbol, NoSymbol,
+ /* 0x04 */ XK_3, XK_numbersign, NoSymbol, NoSymbol,
+ /* 0x05 */ XK_4, XK_dollar, NoSymbol, NoSymbol,
+ /* 0x06 */ XK_5, XK_percent, NoSymbol, NoSymbol,
+ /* 0x07 */ XK_6, XK_asciicircum, NoSymbol, NoSymbol,
+ /* 0x08 */ XK_7, XK_ampersand, NoSymbol, NoSymbol,
+ /* 0x09 */ XK_8, XK_asterisk, NoSymbol, NoSymbol,
+ /* 0x0a */ XK_9, XK_parenleft, NoSymbol, NoSymbol,
+ /* 0x0b */ XK_0, XK_parenright, NoSymbol, NoSymbol,
+ /* 0x0c */ XK_minus, XK_underscore, NoSymbol, NoSymbol,
+ /* 0x0d */ XK_equal, XK_plus, NoSymbol, NoSymbol,
+ /* 0x0e */ XK_BackSpace, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x0f */ XK_Tab, XK_ISO_Left_Tab,NoSymbol, NoSymbol,
+ /* 0x10 */ XK_Q, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x11 */ XK_W, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x12 */ XK_E, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x13 */ XK_R, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x14 */ XK_T, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x15 */ XK_Y, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x16 */ XK_U, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x17 */ XK_I, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x18 */ XK_O, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x19 */ XK_P, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x1a */ XK_bracketleft, XK_braceleft, NoSymbol, NoSymbol,
+ /* 0x1b */ XK_bracketright,XK_braceright, NoSymbol, NoSymbol,
+ /* 0x1c */ XK_Return, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x1d */ XK_Control_L, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x1e */ XK_A, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x1f */ XK_S, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x20 */ XK_D, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x21 */ XK_F, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x22 */ XK_G, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x23 */ XK_H, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x24 */ XK_J, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x25 */ XK_K, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x26 */ XK_L, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x27 */ XK_semicolon, XK_colon, NoSymbol, NoSymbol,
+ /* 0x28 */ XK_quoteright, XK_quotedbl, NoSymbol, NoSymbol,
+ /* 0x29 */ XK_quoteleft, XK_asciitilde, NoSymbol, NoSymbol,
+ /* 0x2a */ XK_Shift_L, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x2b */ XK_backslash, XK_bar, NoSymbol, NoSymbol,
+ /* 0x2c */ XK_Z, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x2d */ XK_X, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x2e */ XK_C, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x2f */ XK_V, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x30 */ XK_B, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x31 */ XK_N, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x32 */ XK_M, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x33 */ XK_comma, XK_less, NoSymbol, NoSymbol,
+ /* 0x34 */ XK_period, XK_greater, NoSymbol, NoSymbol,
+ /* 0x35 */ XK_slash, XK_question, NoSymbol, NoSymbol,
+ /* 0x36 */ XK_Shift_R, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x37 */ XK_KP_Multiply, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x38 */ XK_Alt_L, XK_Meta_L, NoSymbol, NoSymbol,
+ /* 0x39 */ XK_space, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x3a */ XK_Caps_Lock, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x3b */ XK_F1, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x3c */ XK_F2, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x3d */ XK_F3, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x3e */ XK_F4, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x3f */ XK_F5, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x40 */ XK_F6, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x41 */ XK_F7, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x42 */ XK_F8, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x43 */ XK_F9, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x44 */ XK_F10, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x45 */ XK_Num_Lock, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x46 */ XK_Scroll_Lock, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x47 */ XK_KP_Home, XK_KP_7, NoSymbol, NoSymbol,
+ /* 0x48 */ XK_KP_Up, XK_KP_8, NoSymbol, NoSymbol,
+ /* 0x49 */ XK_KP_Prior, XK_KP_9, NoSymbol, NoSymbol,
+ /* 0x4a */ XK_KP_Subtract, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x4b */ XK_KP_Left, XK_KP_4, NoSymbol, NoSymbol,
+ /* 0x4c */ XK_KP_Begin, XK_KP_5, NoSymbol, NoSymbol,
+ /* 0x4d */ XK_KP_Right, XK_KP_6, NoSymbol, NoSymbol,
+ /* 0x4e */ XK_KP_Add, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x4f */ XK_KP_End, XK_KP_1, NoSymbol, NoSymbol,
+ /* 0x50 */ XK_KP_Down, XK_KP_2, NoSymbol, NoSymbol,
+ /* 0x51 */ XK_KP_Next, XK_KP_3, NoSymbol, NoSymbol,
+ /* 0x52 */ XK_KP_Insert, XK_KP_0, NoSymbol, NoSymbol,
+ /* 0x53 */ XK_KP_Delete, XK_KP_Decimal, NoSymbol, NoSymbol,
+ /* 0x54 */ XK_Sys_Req, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x55 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x56 */ XK_less, XK_greater, NoSymbol, NoSymbol,
+ /* 0x57 */ XK_F11, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x58 */ XK_F12, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x59 */ XK_Home, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x5a */ XK_Up, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x5b */ XK_Prior, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x5c */ XK_Left, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x5d */ XK_Begin, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x5e */ XK_Right, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x5f */ XK_End, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x60 */ XK_Down, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x61 */ XK_Next, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x62 */ XK_Insert, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x63 */ XK_Delete, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x64 */ XK_KP_Enter, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x65 */ XK_Control_R, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x66 */ XK_Pause, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x67 */ XK_Print, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x68 */ XK_KP_Divide, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x69 */ XK_Alt_R, XK_Meta_R, NoSymbol, NoSymbol,
+ /* 0x6a */ XK_Break, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x6b */ XK_Meta_L, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x6c */ XK_Meta_R, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x6d */ XK_Menu, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x6e */ XK_F13, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x6f */ XK_F14, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x70 */ XK_F15, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x71 */ XK_F16, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x72 */ XK_F17, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x73 */ XK_backslash, XK_underscore, NoSymbol, NoSymbol,
+ /* 0x74 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x75 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x76 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x77 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x78 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x79 */ XK_Henkan, XK_Mode_switch, NoSymbol, NoSymbol,
+ /* 0x7a */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x7b */ XK_Muhenkan, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x7c */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x7d */ XK_backslash, XK_bar, NoSymbol, NoSymbol,
+ /* 0x7e */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x7f */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+};
--- /dev/null
+++ b/src/meson.build
@@ -1,0 +1,42 @@
+srcs = [
+ 'x9dev.c',
+ 'keyboard.c',
+ 'mouse.c',
+ 'screen.c',
+ 'x9dev.h',
+ 'keymap.h',
+ '../../mi/miinitext.c',
+]
+
+cc_args = [
+ '-Wno-missing-braces',
+]
+
+x9dev_server = executable(
+ 'x9dev',
+ srcs,
+ include_directories: [
+ inc,
+ include_directories('../libdraw'),
+ ],
+ dependencies: common_dep,
+ link_with: [
+ libdraw,
+ libxserver_mi,
+ libxserver_main,
+ libxserver_fb,
+ libxserver,
+ libxserver_xkb_stubs,
+ libxserver_glx,
+ libglxvnd,
+ libxserver_miext_shadow,
+ ],
+ install: true,
+ c_args: cc_args,
+)
+
+install_man(configure_file(
+ input: 'man/x9dev.man',
+ output: 'x9dev.1',
+ configuration: manpage_config,
+))
--- /dev/null
+++ b/src/mouse.c
@@ -1,0 +1,145 @@
+/*
+ * Copyright (c) 2008 Federico G. Benavento <benavento@gmail.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include "x9dev.h"
+
+extern DeviceIntPtr x9devMouse;
+int oldx, oldy, oldbut;
+
+#define e ev.u.u
+#define ek ev.u.keyButtonPointer
+static void
+x9devSendMouseEvent(int x, int y, int b, int t)
+{
+ xEvent ev;
+
+ memset(&ev, 0, sizeof(xEvent));
+ e.type = t;
+ e.detail = b;
+ ek.rootX = x;
+ ek.rootY = y;
+ ek.time = GetTimeInMillis();
+ mieqEnqueue(x9devMouse, (InternalEvent *)&ev);
+}
+#undef ek
+#undef e
+
+static int
+x9devMouseRead(int *x, int *y, int *b)
+{
+ int n;
+ char buf[1+4*12];
+
+ if((n = read(x9di.mfd, buf, 1 + 4 * 12)) <= 0)
+ return 0;
+
+ if (n != 1 + 4 * 12)
+ FatalError("Bad mouse event");
+
+ if (buf[0] == 'r') {
+ x9devResize();
+ return 0;
+ }
+
+ *x = atoi(buf + 1 + 0 * 12) - screen->r.min.x;
+ *y = atoi(buf + 1 + 1 * 12) - screen->r.min.y;
+ *b = atoi(buf + 1 + 2 * 12);
+
+ return 1;
+}
+
+
+int
+x9devMouseHandle(void)
+{
+ int x, y, b, but, t;
+
+ if (!x9devMouseRead(&x, &y, &but))
+ return 0;
+
+ t = b = 0;
+ if (x != oldx || y != oldy) {
+ t = MotionNotify;
+ oldx = x, oldy = y;
+ }
+ if (but != oldbut) {
+ b = oldbut ^ but;
+ t = ButtonPress;
+ if (oldbut & b)
+ t = ButtonRelease;
+ if (b == 4)
+ b = 3;
+ if (but & (8 | 16)) {
+ if (b & 8)
+ b = 4;
+ else
+ b = 5;
+ x9devSendMouseEvent(x, y, b, ButtonPress);
+ x9devSendMouseEvent(x, y, b, ButtonRelease);
+ return 1;
+ }
+ }
+ x9devSendMouseEvent(x, y, b, t);
+ oldbut = but;
+
+ return 1;
+}
+
+int
+x9devMouseProc(DeviceIntPtr pDevice, int what)
+{
+ static unsigned char map[] = {0, 1, 2, 3, 4, 5};
+ DevicePtr pDev = (DevicePtr)pDevice;
+ Atom btn_labels[3] = {0};
+ Atom axes_labels[2] = {0};
+
+ /* Init our globals */
+ oldx = oldy = oldbut = 0;
+
+ switch (what) {
+ case DEVICE_INIT:
+ btn_labels[0] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_LEFT);
+ btn_labels[1] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_MIDDLE);
+ btn_labels[2] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_RIGHT);
+
+ axes_labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_X);
+ axes_labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_Y);
+ InitPointerDeviceStruct(pDev, map, 3, btn_labels,
+ (PtrCtrlProcPtr)NoopDDA, GetMotionHistorySize(), 2, axes_labels);
+ break;
+
+ case DEVICE_ON:
+ pDev->on = TRUE;
+ break;
+
+ case DEVICE_CLOSE:
+ case DEVICE_OFF:
+ pDev->on = FALSE;
+ break;
+ }
+ return Success;
+}
\ No newline at end of file
--- /dev/null
+++ b/src/screen.c
@@ -1,0 +1,187 @@
+/*
+ * Copyright (c) 2008 Federico G. Benavento <benavento@gmail.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include "x9dev.h"
+
+static void
+x9devRefreshScreen(int x1, int y1, int x2, int y2)
+{
+ Rectangle r;
+ uchar *p;
+ int n;
+
+ p = (uchar *)x9di.fb+(y1*x9di.width+x1)*(x9di.depth/8);
+ r = rectaddpt(Rect(x1, y1, x2, y2), screen->r.min);
+ if (Dx(r) == x9di.width) {
+ if (loadimage(screen, r, p, x9di.bpl * Dy(r)) < 0)
+ FatalError("can't load image");
+ goto End;
+ }
+ n = Dx(r)*(x9di.depth/8);
+ y2 += screen->r.min.y;
+ while(r.min.y < y2) {
+ r.max.y = r.min.y+1;
+ if (loadimage(screen, r, p, n) < 0)
+ FatalError("can't load image");
+ p += x9di.bpl;
+ r.min.y++;
+ }
+End:
+ flushimage(_display, 1);
+}
+
+
+void
+x9devResize(void)
+{
+ if (getwindow(_display, Refnone) < 0)
+ FatalError("can't reattach to window");
+
+ draw(screen, screen->r, _display->white, NULL, ZP);
+ x9devRefreshScreen(0, 0, x9di.width, x9di.height);
+}
+
+static void
+x9devWakeupHandler(ScreenPtr scr, int result)
+{
+ if (result <= 0)
+ return;
+
+ while (x9devMouseHandle())
+ ;
+ while (x9devKeybdHandle())
+ ;
+}
+
+static void
+x9devShadowUpdate(ScreenPtr pScreen, shadowBufPtr pBuf)
+{
+ BoxPtr pbox;
+
+ pbox = REGION_EXTENTS(pScreen, &pBuf->pDamage);
+ x9devRefreshScreen(pbox->x1, pbox->y1, pbox->x2, pbox->y2);
+}
+
+
+static void
+x9devCursorLimits(DeviceIntPtr dptr, ScreenPtr spr, CursorPtr cpr, BoxPtr hot, BoxPtr topleft)
+{
+ *topleft = *hot;
+}
+
+
+/* callback dance... */
+static CreateScreenResourcesProcPtr x9devCreateResourcesPtr;
+
+static Bool
+x9devCreateResources(ScreenPtr pScreen)
+{
+ Bool ret = 0;
+
+ pScreen->CreateScreenResources = x9devCreateResourcesPtr;
+ if (pScreen->CreateScreenResources)
+ ret = pScreen->CreateScreenResources(pScreen);
+
+ x9devCreateResourcesPtr = pScreen->CreateScreenResources;
+ pScreen->CreateScreenResources = x9devCreateResourcesPtr;
+ if (ret == FALSE)
+ return FALSE;
+
+ shadowRemove(pScreen, pScreen->GetScreenPixmap(pScreen));
+ if (!shadowAdd(pScreen, pScreen->GetScreenPixmap(pScreen), x9devShadowUpdate, NULL, SHADOW_ROTATE_0, 0))
+ return FALSE;
+
+ return ret;
+}
+
+Bool
+x9devScreenInit(ScreenPtr pScreen, int argc, char *argv[])
+{
+ int v, i;
+ unsigned long r, g, b;
+ static int first = 1;
+
+ if (first) {
+ x9devInfoInit();
+ first = 0;
+ }
+
+ for (i = 0; i < NUMFORMATS; i++)
+ fbSetVisualTypes(formats[i].depth, 0, 8);
+
+ switch (x9di.depth) {
+ case 16:
+ r = 0xF800, g = 0x07E0, b = 0x001F;
+ v = 1 << TrueColor;
+ break;
+ case 24:
+ case 32:
+ r = 0xFF0000, g = 0x00FF00, b = 0x0000FF;
+ v = 1 << TrueColor;
+ break;
+ default:
+ r = g = b = 0;
+ v = 1 << PseudoColor;
+ }
+ if (!fbSetVisualTypesAndMasks(x9di.depth, v, 8, r, g, b))
+ return FALSE;
+
+ if (!fbScreenInit(pScreen, x9di.fb, x9di.width, x9di.height,
+ x9di.dpi, x9di.dpi, x9di.width, x9di.depth))
+ return FALSE;
+
+ pScreen->mmWidth = x9di.width * 25.4 / x9di.dpi;
+ pScreen->mmHeight = x9di.height * 25.4 / x9di.dpi;
+
+ /* cursor */
+ pScreen->ConstrainCursor = x9devConstrainCursor;
+ pScreen->CursorLimits = x9devCursorLimits;
+ pScreen->DisplayCursor = x9devDisplayCursor;
+ pScreen->RealizeCursor = x9devRealizeCursor;
+ pScreen->UnrealizeCursor = x9devUnrealizeCursor;
+ pScreen->RecolorCursor = x9devRecolorCursor;
+ pScreen->SetCursorPosition = x9devSetCursorPosition;
+
+ pScreen->SaveScreen = x9devSaveScreen;
+ pScreen->WakeupHandler = x9devWakeupHandler;
+
+#ifdef RENDER
+ if (!fbPictureInit(pScreen, 0, 0))
+ return FALSE;
+#endif
+
+ if (!shadowSetup(pScreen))
+ return FALSE;
+
+ x9devCreateResourcesPtr = pScreen->CreateScreenResources;
+ pScreen->CreateScreenResources = x9devCreateResources;
+
+ if (!fbCreateDefColormap(pScreen))
+ return FALSE;
+
+ return TRUE;
+}
--- /dev/null
+++ b/src/x9dev.c
@@ -1,0 +1,154 @@
+/*
+ * Copyright (c) 2008 Federico G. Benavento <benavento@gmail.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <errno.h>
+#include "x9dev.h"
+
+extern x9devInfo x9di;
+int debug = 0;
+
+void
+x9devInfoInit(void)
+{
+ int fd;
+ char path[256]; /* Plan9 Maxpath */
+
+ /* We have 9p, we can init */
+ if(initdraw(NULL, "x9dev") < 0)
+ FatalError("can't open display");
+
+ x9di.depth = screen->depth;
+ x9di.width = Dx(screen->r);
+ x9di.width -= x9di.width&(screen->depth/8);
+ x9di.dpi = 100;
+ x9di.bpl = bytesperline(Rect(0, 0, x9di.width, x9di.height), x9di.depth);
+ x9di.fb = malloc(x9di.bpl * x9di.height);
+
+ sprintf(path, "%s/mouse", _display->devdir);
+ x9di.mfd = open(path, O_RDWR|O_NONBLOCK);
+
+ sprintf(path, "%s/cons", _display->devdir);
+ x9di.kfd = open(path, O_RDONLY|O_NONBLOCK);
+
+ sprintf(path, "%s/consctl", _display->devdir);
+ fd = open(path, O_WRONLY);
+ write(fd, "rawon", 5);
+ close(fd);
+}
+
+void
+InitOutput(ScreenInfo *si, int argc, char *argv[])
+{
+ int i;
+
+ si->imageByteOrder = IMAGE_BYTE_ORDER;
+ si->bitmapScanlineUnit = BITMAP_SCANLINE_UNIT;
+ si->bitmapScanlinePad = BITMAP_SCANLINE_PAD;
+ si->bitmapBitOrder = BITMAP_BIT_ORDER;
+ si->numPixmapFormats = NUMFORMATS;
+ for (i = 0; i < NUMFORMATS; i++)
+ si->formats[i] = formats[i];
+ if (AddScreen(x9devScreenInit, argc, argv) < 0)
+ FatalError("InitOutput: can't addscreen");
+}
+
+void
+InitInput(int argc, char *argv[])
+{
+ Atom xiclass;
+
+ x9devMouse = AddInputDevice(serverClient, x9devMouseProc, TRUE);
+ x9devKeybd = AddInputDevice(serverClient, x9devKeybdProc, TRUE);
+ xiclass = MakeAtom(XI_MOUSE, sizeof(XI_MOUSE) - 1, TRUE);
+ AssignTypeAndName(x9devMouse, xiclass, "x9dev mouse");
+ xiclass = MakeAtom(XI_KEYBOARD, sizeof(XI_KEYBOARD) - 1, TRUE);
+ AssignTypeAndName(x9devKeybd, xiclass, "x9dev keyboard");
+
+ mieqInit();
+}
+
+void
+ddxUseMsg(void)
+{
+ ErrorF("\nx9srv Option Usage:\n");
+ ErrorF("-D enable debug\n");
+}
+
+int
+ddxProcessArgument(int argc, char **argv, int i)
+{
+ if (!strcmp(argv[i], "-D")){
+ debug++;
+ return 1;
+ }
+
+ return 0;
+}
+
+void
+ddxGiveUp(enum ExitCode error)
+{
+}
+
+
+void
+AbortDDX(enum ExitCode error)
+{
+ ;
+}
+
+/* we may need to do some weird stuff here in the future */
+#if defined(DDXBEFORERESET)
+void
+ddxBeforeReset(void)
+{
+}
+#endif
+
+
+void
+DDXRingBell(int volume, int pitch, int duration)
+{
+}
+
+void
+OsVendorInit(void)
+{
+
+}
+
+Bool
+LegalModifier(unsigned int k, DeviceIntPtr pDev)
+{
+ return x9checkmod(k, pDev);
+}
+
+void
+ProcessInputEvents(void)
+{
+ mieqProcessInputEvents();
+}
--- /dev/null
+++ b/src/x9dev.h
@@ -1,0 +1,103 @@
+/*
+ * Copyright (c) 2008 Federico G. Benavento <benavento@gmail.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _X9DEV_H_
+#define _X9DEV_H_
+
+#define NEED_EVENTS
+#include <X11/Xproto.h>
+#include <X11/Xos.h>
+#include <X11/Xpoll.h>
+#define XK_TECHNICA
+#define XK_PUBLISHING
+#include <X11/keysym.h>
+#include <X11/keysymdef.h>
+#define PSZ 8
+#include "fb.h" /* fbSetVisualTypes */
+#include "colormapst.h"
+#include "dix.h"
+#include "exevents.h"
+#include "extinit.h"
+#include "gcstruct.h"
+#include "glx_extinit.h"
+#include "input.h"
+#include "micmap.h"
+#include "mipointer.h"
+#include "miline.h"
+#include "scrnintstr.h"
+#include "servermd.h"
+#include "shadow.h"
+#include "xkbsrv.h"
+#include "xserver-properties.h"
+#include "mi.h" /* miEnqueue mieqProcessInputEvents */
+#include "draw.h"
+
+#define Msize 8192
+#define NUMFORMATS (sizeof(formats)/sizeof((formats)[0]))
+
+/* NOOPs for now */
+#define x9devSaveScreen (void *) NoopDDA
+#define x9devConstrainCursor (void *) NoopDDA
+#define x9devDisplayCursor (void *) NoopDDA
+#define x9devRealizeCursor (void *) NoopDDA
+#define x9devUnrealizeCursor (void *) NoopDDA
+#define x9devRecolorCursor (void *) NoopDDA
+#define x9devSetCursorPosition (void *) NoopDDA
+
+
+typedef struct x9devInfo x9devInfo;
+struct x9devInfo
+{
+ char *fb;
+ int depth;
+ int width;
+ int height;
+ int dpi;
+ int bpl;
+ int mfd;
+ int kfd;
+};
+
+static PixmapFormatRec formats[] = {
+ { 1, 1, BITMAP_SCANLINE_PAD },
+ { 8, 8, BITMAP_SCANLINE_PAD },
+ { 16, 16, BITMAP_SCANLINE_PAD },
+ { 24, 24, BITMAP_SCANLINE_PAD },
+ { 32, 32, BITMAP_SCANLINE_PAD }
+};
+
+DeviceIntPtr x9devMouse;
+DeviceIntPtr x9devKeybd;
+x9devInfo x9di;
+
+/* Callbacks, etc */
+Bool x9checkmod(unsigned int, DeviceIntPtr);
+Bool x9devScreenInit(ScreenPtr, int, char **);
+void x9devInfoInit(void);
+void x9devResize(void);
+int x9devKeybdProc(DeviceIntPtr, int);
+int x9devMouseProc(DeviceIntPtr, int);
+int x9devMouseHandle(void);
+int x9devKeybdHandle(void);
+
+#endif
--- a/x9dev.c
+++ /dev/null
@@ -1,154 +1,0 @@
-/*
- * Copyright (c) 2008 Federico G. Benavento <benavento@gmail.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <errno.h>
-#include "x9dev.h"
-
-extern x9devInfo x9di;
-int debug = 0;
-
-void
-x9devInfoInit(void)
-{
- int fd;
- char path[256]; /* Plan9 Maxpath */
-
- /* We have 9p, we can init */
- if(initdraw(NULL, "x9dev") < 0)
- FatalError("can't open display");
-
- x9di.depth = screen->depth;
- x9di.width = Dx(screen->r);
- x9di.width -= x9di.width&(screen->depth/8);
- x9di.dpi = 100;
- x9di.bpl = bytesperline(Rect(0, 0, x9di.width, x9di.height), x9di.depth);
- x9di.fb = malloc(x9di.bpl * x9di.height);
-
- sprintf(path, "%s/mouse", _display->devdir);
- x9di.mfd = open(path, O_RDWR|O_NONBLOCK);
-
- sprintf(path, "%s/cons", _display->devdir);
- x9di.kfd = open(path, O_RDONLY|O_NONBLOCK);
-
- sprintf(path, "%s/consctl", _display->devdir);
- fd = open(path, O_WRONLY);
- write(fd, "rawon", 5);
- close(fd);
-}
-
-void
-InitOutput(ScreenInfo *si, int argc, char *argv[])
-{
- int i;
-
- si->imageByteOrder = IMAGE_BYTE_ORDER;
- si->bitmapScanlineUnit = BITMAP_SCANLINE_UNIT;
- si->bitmapScanlinePad = BITMAP_SCANLINE_PAD;
- si->bitmapBitOrder = BITMAP_BIT_ORDER;
- si->numPixmapFormats = NUMFORMATS;
- for (i = 0; i < NUMFORMATS; i++)
- si->formats[i] = formats[i];
- if (AddScreen(x9devScreenInit, argc, argv) < 0)
- FatalError("InitOutput: can't addscreen");
-}
-
-void
-InitInput(int argc, char *argv[])
-{
- Atom xiclass;
-
- x9devMouse = AddInputDevice(serverClient, x9devMouseProc, TRUE);
- x9devKeybd = AddInputDevice(serverClient, x9devKeybdProc, TRUE);
- xiclass = MakeAtom(XI_MOUSE, sizeof(XI_MOUSE) - 1, TRUE);
- AssignTypeAndName(x9devMouse, xiclass, "x9dev mouse");
- xiclass = MakeAtom(XI_KEYBOARD, sizeof(XI_KEYBOARD) - 1, TRUE);
- AssignTypeAndName(x9devKeybd, xiclass, "x9dev keyboard");
-
- mieqInit();
-}
-
-void
-ddxUseMsg(void)
-{
- ErrorF("\nx9srv Option Usage:\n");
- ErrorF("-D enable debug\n");
-}
-
-int
-ddxProcessArgument(int argc, char **argv, int i)
-{
- if (!strcmp(argv[i], "-D")){
- debug++;
- return 1;
- }
-
- return 0;
-}
-
-void
-ddxGiveUp(enum ExitCode error)
-{
-}
-
-
-void
-AbortDDX(enum ExitCode error)
-{
- ;
-}
-
-/* we may need to do some weird stuff here in the future */
-#if defined(DDXBEFORERESET)
-void
-ddxBeforeReset(void)
-{
-}
-#endif
-
-
-void
-DDXRingBell(int volume, int pitch, int duration)
-{
-}
-
-void
-OsVendorInit(void)
-{
-
-}
-
-Bool
-LegalModifier(unsigned int k, DeviceIntPtr pDev)
-{
- return x9checkmod(k, pDev);
-}
-
-void
-ProcessInputEvents(void)
-{
- mieqProcessInputEvents();
-}
--- a/x9dev.h
+++ /dev/null
@@ -1,103 +1,0 @@
-/*
- * Copyright (c) 2008 Federico G. Benavento <benavento@gmail.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#ifndef _X9DEV_H_
-#define _X9DEV_H_
-
-#define NEED_EVENTS
-#include <X11/Xproto.h>
-#include <X11/Xos.h>
-#include <X11/Xpoll.h>
-#define XK_TECHNICA
-#define XK_PUBLISHING
-#include <X11/keysym.h>
-#include <X11/keysymdef.h>
-#define PSZ 8
-#include "fb.h" /* fbSetVisualTypes */
-#include "colormapst.h"
-#include "dix.h"
-#include "exevents.h"
-#include "extinit.h"
-#include "gcstruct.h"
-#include "glx_extinit.h"
-#include "input.h"
-#include "micmap.h"
-#include "mipointer.h"
-#include "miline.h"
-#include "scrnintstr.h"
-#include "servermd.h"
-#include "shadow.h"
-#include "xkbsrv.h"
-#include "xserver-properties.h"
-#include "mi.h" /* miEnqueue mieqProcessInputEvents */
-#include "draw.h"
-
-#define Msize 8192
-#define NUMFORMATS (sizeof(formats)/sizeof((formats)[0]))
-
-/* NOOPs for now */
-#define x9devSaveScreen (void *) NoopDDA
-#define x9devConstrainCursor (void *) NoopDDA
-#define x9devDisplayCursor (void *) NoopDDA
-#define x9devRealizeCursor (void *) NoopDDA
-#define x9devUnrealizeCursor (void *) NoopDDA
-#define x9devRecolorCursor (void *) NoopDDA
-#define x9devSetCursorPosition (void *) NoopDDA
-
-
-typedef struct x9devInfo x9devInfo;
-struct x9devInfo
-{
- char *fb;
- int depth;
- int width;
- int height;
- int dpi;
- int bpl;
- int mfd;
- int kfd;
-};
-
-static PixmapFormatRec formats[] = {
- { 1, 1, BITMAP_SCANLINE_PAD },
- { 8, 8, BITMAP_SCANLINE_PAD },
- { 16, 16, BITMAP_SCANLINE_PAD },
- { 24, 24, BITMAP_SCANLINE_PAD },
- { 32, 32, BITMAP_SCANLINE_PAD }
-};
-
-DeviceIntPtr x9devMouse;
-DeviceIntPtr x9devKeybd;
-x9devInfo x9di;
-
-/* Callbacks, etc */
-Bool x9checkmod(unsigned int, DeviceIntPtr);
-Bool x9devScreenInit(ScreenPtr, int, char **);
-void x9devInfoInit(void);
-void x9devResize(void);
-int x9devKeybdProc(DeviceIntPtr, int);
-int x9devMouseProc(DeviceIntPtr, int);
-int x9devMouseHandle(void);
-int x9devKeybdHandle(void);
-
-#endif