Merge branch 'devel'

master
Jay Sorg 10 years ago
commit 32f172853f

3
.gitmodules vendored

@ -1,3 +1,6 @@
[submodule "librfxcodec"]
path = librfxcodec
url = git://github.com/neutrinolabs/librfxcodec
[submodule "xorgxrdp"]
path = xorgxrdp
url = git://github.com/neutrinolabs/xorgxrdp

@ -126,8 +126,12 @@ g_mk_temp_dir(const char *app_name)
{
if (!g_create_dir("/tmp/.xrdp"))
{
printf("g_mk_temp_dir: g_create_dir failed\n");
return 1;
/* if failed, still check if it got created by someone else */
if (!g_directory_exist("/tmp/.xrdp"))
{
printf("g_mk_temp_dir: g_create_dir failed\n");
return 1;
}
}
g_chmod_hex("/tmp/.xrdp", 0x1777);
@ -3172,6 +3176,158 @@ g_time3(void)
#endif
}
/******************************************************************************/
/******************************************************************************/
struct bmp_magic
{
char magic[2];
};
struct bmp_hdr
{
unsigned int size; /* file size in bytes */
unsigned short reserved1;
unsigned short reserved2;
unsigned int offset; /* offset to image data, in bytes */
};
struct dib_hdr
{
unsigned int hdr_size;
int width;
int height;
unsigned short nplanes;
unsigned short bpp;
unsigned int compress_type;
unsigned int image_size;
int hres;
int vres;
unsigned int ncolors;
unsigned int nimpcolors;
};
/******************************************************************************/
int APP_CC
g_save_to_bmp(const char* filename, char* data, int stride_bytes,
int width, int height, int depth, int bits_per_pixel)
{
struct bmp_magic bm;
struct bmp_hdr bh;
struct dib_hdr dh;
int bytes;
int fd;
int index;
int i1;
int pixel;
int extra;
int file_stride_bytes;
char* line;
char* line_ptr;
if ((depth == 24) && (bits_per_pixel == 32))
{
}
else if ((depth == 32) && (bits_per_pixel == 32))
{
}
else
{
g_writeln("g_save_to_bpp: unimp");
return 1;
}
bm.magic[0] = 'B';
bm.magic[1] = 'M';
/* scan lines are 32 bit aligned, bottom 2 bits must be zero */
file_stride_bytes = width * ((depth + 7) / 8);
extra = file_stride_bytes;
extra = extra & 3;
extra = (4 - extra) & 3;
file_stride_bytes += extra;
bh.size = sizeof(bm) + sizeof(bh) + sizeof(dh) + height * file_stride_bytes;
bh.reserved1 = 0;
bh.reserved2 = 0;
bh.offset = sizeof(bm) + sizeof(bh) + sizeof(dh);
dh.hdr_size = sizeof(dh);
dh.width = width;
dh.height = height;
dh.nplanes = 1;
dh.bpp = depth;
dh.compress_type = 0;
dh.image_size = height * file_stride_bytes;
dh.hres = 0xb13;
dh.vres = 0xb13;
dh.ncolors = 0;
dh.nimpcolors = 0;
fd = open(filename, O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
if (fd == -1)
{
g_writeln("g_save_to_bpp: open error");
return 1;
}
bytes = write(fd, &bm, sizeof(bm));
if (bytes != sizeof(bm))
{
g_writeln("g_save_to_bpp: write error");
}
bytes = write(fd, &bh, sizeof(bh));
if (bytes != sizeof(bh))
{
g_writeln("g_save_to_bpp: write error");
}
bytes = write(fd, &dh, sizeof(dh));
if (bytes != sizeof(dh))
{
g_writeln("g_save_to_bpp: write error");
}
data += stride_bytes * height;
data -= stride_bytes;
if ((depth == 24) && (bits_per_pixel == 32))
{
line = malloc(file_stride_bytes);
memset(line, 0, file_stride_bytes);
for (index = 0; index < height; index++)
{
line_ptr = line;
for (i1 = 0; i1 < width; i1++)
{
pixel = ((int*)data)[i1];
*(line_ptr++) = (pixel >> 0) & 0xff;
*(line_ptr++) = (pixel >> 8) & 0xff;
*(line_ptr++) = (pixel >> 16) & 0xff;
}
bytes = write(fd, line, file_stride_bytes);
if (bytes != file_stride_bytes)
{
g_writeln("g_save_to_bpp: write error");
}
data -= stride_bytes;
}
free(line);
}
else if (depth == bits_per_pixel)
{
for (index = 0; index < height; index++)
{
bytes = write(fd, data, width * (bits_per_pixel / 8));
if (bytes != width * (bits_per_pixel / 8))
{
g_writeln("g_save_to_bpp: write error");
}
data -= stride_bytes;
}
}
else
{
g_writeln("g_save_to_bpp: unimp");
}
close(fd);
return 0;
}
/*****************************************************************************/
/* returns boolean */
int APP_CC

@ -161,6 +161,8 @@ int APP_CC g_check_user_in_group(const char* username, int gid, int* ok);
int APP_CC g_time1(void);
int APP_CC g_time2(void);
int APP_CC g_time3(void);
int APP_CC g_save_to_bmp(const char* filename, char* data, int stride_bytes,
int width, int height, int depth, int bits_per_pixel);
int APP_CC g_text2bool(const char *s);
void * APP_CC g_shmat(int shmid);
int APP_CC g_shmdt(const void *shmaddr);

@ -457,6 +457,7 @@
Extended order support flags. */
#define XR_ORDERFLAGS_EX_CACHE_BITMAP_REV3_SUPPORT 0x0002
#define XR_ORDERFLAGS_EX_ALTSEC_FRAME_MARKER_SUPPORT 0x0004
#define XR_ORDERFLAGS_EX_OFFSCREEN_COMPOSITE_SUPPORT 0x0100
/* drawable types */
#define WND_TYPE_BITMAP 0
@ -548,10 +549,14 @@
#define XR_CODEC_GUID_REMOTEFX \
"\x12\x2F\x77\x76\x72\xBD\x63\x44\xAF\xB3\xB7\x3C\x9C\x6F\x78\x86"
/* CODEC_GUID_JPEG 0x430C9EED1BAF4CE6869ACB8B37B66237*/
/* CODEC_GUID_JPEG 0x1BAF4CE6 9EED 430C 869ACB8B37B66237 */
#define XR_CODEC_GUID_JPEG \
"\xE6\x4C\xAF\x1B\xED\x9E\x0C\x43\x86\x9A\xCB\x8B\x37\xB6\x62\x37"
/* CODEC_GUID_PNG 0xOE0C858D 28E0 45DB ADAA0F83E57CC560 */
#define XR_CODEC_GUID_PNG \
"\x8D\x85\x0C\x0E\xE0\x28\xDB\x45\xAD\xAA\x0F\x83\xE5\x7C\xC5\x60"
#define RDP_CAPSET_SURFCMDS 0x1c
#define RDP_CAPLEN_SURFCMDS 0x0c
#define RDP_CAPSET_BMPCODECS 0x1d

@ -7,6 +7,7 @@ AM_INIT_AUTOMAKE([1.6 foreign])
AC_PROG_CC
AC_C_CONST
AC_PROG_LIBTOOL
PKG_PROG_PKG_CONFIG
AC_ARG_WITH([systemdsystemunitdir],
AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),
[], [with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)])
@ -15,46 +16,55 @@ if test "x$with_systemdsystemunitdir" != xno; then
fi
AM_CONDITIONAL(HAVE_SYSTEMD, [test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno ])
AC_ARG_ENABLE(pam, AS_HELP_STRING([--disable-pam],
[Build PAM support (default: yes)]),
[], [enable_pam=yes])
AC_ARG_ENABLE(nopam, AS_HELP_STRING([--enable-nopam],
[Build no PAM support (default: no)]),
[nopam=true], [nopam=false])
AM_CONDITIONAL(SESMAN_NOPAM, [test x$nopam = xtrue])
[Build no PAM support (default: no, deprecated)]),
[
if test "x$enable_nopam" = "xyes"
then
enable_pam=no
AC_MSG_WARN([--enable-nopam option is deprecated. Please use --disable-pam instead.])
fi
])
AM_CONDITIONAL(SESMAN_NOPAM, [test x$enable_pam != xyes])
AC_ARG_ENABLE(kerberos, AS_HELP_STRING([--enable-kerberos],
[Build kerberos support (default: no)]),
[kerberos=true], [kerberos=false])
AM_CONDITIONAL(SESMAN_KERBEROS, [test x$kerberos = xtrue])
[], [enable_kerberos=no])
AM_CONDITIONAL(SESMAN_KERBEROS, [test x$enable_kerberos = xyes])
AC_ARG_ENABLE(pamuserpass, AS_HELP_STRING([--enable-pamuserpass],
[Build pam userpass support (default: no)]),
[pamuserpass=true], [pamuserpass=false])
AM_CONDITIONAL(SESMAN_PAMUSERPASS, [test x$pamuserpass = xtrue])
[], [enable_pamuserpass=no])
AM_CONDITIONAL(SESMAN_PAMUSERPASS, [test x$enable_pamuserpass = xyes])
AC_ARG_ENABLE(xrdpdebug, AS_HELP_STRING([--enable-xrdpdebug],
[Build debug (default: no)]),
[xrdpdebug=true], [xrdpdebug=false])
AM_CONDITIONAL(XRDP_DEBUG, [test x$xrdpdebug = xtrue])
[], [enable_xrdpdebug=no])
AM_CONDITIONAL(XRDP_DEBUG, [test x$enable_xrdpdebug = xyes])
AC_ARG_ENABLE(neutrinordp, AS_HELP_STRING([--enable-neutrinordp],
[Build neutrinordp module (default: no)]),
[neutrinordp=true], [neutrinordp=false])
AM_CONDITIONAL(XRDP_NEUTRINORDP, [test x$neutrinordp = xtrue])
[], [enable_neutrinordp=no])
AM_CONDITIONAL(XRDP_NEUTRINORDP, [test x$enable_neutrinordp = xyes])
AC_ARG_ENABLE(jpeg, AS_HELP_STRING([--enable-jpeg],
[Build jpeg module (default: no)]),
[jpeg=true], [jpeg=false])
AM_CONDITIONAL(XRDP_JPEG, [test x$jpeg = xtrue])
[], [enable_jpeg=no])
AM_CONDITIONAL(XRDP_JPEG, [test x$enable_jpeg = xyes])
AC_ARG_ENABLE(tjpeg, AS_HELP_STRING([--enable-tjpeg],
[Build turbo jpeg module (default: no)]),
[tjpeg=true], [tjpeg=false])
AM_CONDITIONAL(XRDP_TJPEG, [test x$tjpeg = xtrue])
[], [enable_tjpeg=no])
AM_CONDITIONAL(XRDP_TJPEG, [test x$enable_tjpeg = xyes])
AC_ARG_ENABLE(fuse, AS_HELP_STRING([--enable-fuse],
[Build fuse(clipboard file / drive redir) (default: no)]),
[fuse=true], [fuse=false])
AM_CONDITIONAL(XRDP_FUSE, [test x$fuse = xtrue])
[], [enable_fuse=no])
AM_CONDITIONAL(XRDP_FUSE, [test x$enable_fuse = xyes])
AC_ARG_ENABLE(xrdpvr, AS_HELP_STRING([--enable-xrdpvr],
[Build xrdpvr module (default: no)]),
[xrdpvr=true], [xrdpvr=false])
AM_CONDITIONAL(XRDP_XRDPVR, [test x$xrdpvr = xtrue])
[], [enable_xrdpvr=no])
AM_CONDITIONAL(XRDP_XRDPVR, [test x$enable_xrdpvr = xyes])
AC_ARG_ENABLE(rfxcodec, AS_HELP_STRING([--enable-rfxcodec],
[Build using librfxcodec (default: no)]),
[rfxcodec=true], [rfxcodec=false])
AM_CONDITIONAL(XRDP_RFXCODEC, [test x$rfxcodec = xtrue])
[], [enable_rfxcodec=no])
AM_CONDITIONAL(XRDP_RFXCODEC, [test x$enable_rfxcodec = xyes])
AM_CONDITIONAL(GOT_PREFIX, test "x${prefix}" != "xNONE"])
@ -64,9 +74,9 @@ AC_CHECK_HEADER([openssl/rc4.h], [],
[#include <stdlib.h>])
# checking if pam should be autodetected.
if test -z "$enable_nopam"
if test "x$enable_pam" = "xyes"
then
if test -z "$enable_kerberos"
if test "x$enable_kerberos" != "xyes"
then
AC_CHECK_HEADER([security/pam_appl.h], [],
[AC_MSG_ERROR([please install libpam0g-dev or pam-devel])])
@ -78,7 +88,7 @@ AC_CHECK_MEMBER([struct in6_addr.s6_addr],
[AC_DEFINE(NO_ARPA_INET_H_IP6, 1, [for IPv6])],
[#include <arpa/inet.h>])
if test "x$enable_nopam" = "xyes"
if test "x$enable_pam" != "xyes"
then
AC_DEFINE([USE_NOPAM],1,[Disable PAM])
fi
@ -86,19 +96,19 @@ fi
AS_IF( [test "x$enable_neutrinordp" = "xyes"] , [PKG_CHECK_MODULES(FREERDP, freerdp >= 1.0.0)] )
# checking for libjpeg
if ! test -z "$enable_jpeg"
if test "x$enable_jpeg" = "xyes"
then
AC_CHECK_HEADER([jpeglib.h], [],
[AC_MSG_ERROR([please install libjpeg-dev or libjpeg-devel])])
fi
if ! test -z "$enable_xrdpdebug"
if test "x$enable_xrdpdebug" = "xyes"
then
CFLAGS="-g -O0"
fi
# checking for fuse
if ! test -z "$enable_fuse"
if test "x$enable_fuse" = "xyes"
then
AC_CHECK_HEADER([fuse.h], [],
[AC_MSG_ERROR([please install libfuse-dev or fuse-devel])],
@ -106,7 +116,7 @@ then
fi
# checking for TurboJPEG
if ! test -z "$enable_tjpeg"
if test "x$enable_tjpeg" = "xyes"
then
if test ! -z "$TURBOJPEG_PATH"
then

@ -2,7 +2,7 @@
bin_PROGRAMS = \
xrdp-genkeymap
xrdp_genkeymap_SOURCES = genkeymap.c
xrdp_genkeymap_SOURCES = genkeymap.c evdev-map.c
xrdp_genkeymap_LDADD = \
-L/usr/X11R6/lib \

@ -19,6 +19,10 @@ setxkbmap -model pc104 -layout de
setxkbmap -model pc104 -layout it
./xrdp-genkeymap ../instfiles/km-0410.ini
# Polish 'pl' 0x0415
setxkbmap -model pc104 -layout pl
./xrdp-genkeymap ../instfiles/km-0415.ini
# Russia 'ru' 0x0419
setxkbmap -model pc104 -layout ru
./xrdp-genkeymap ../instfiles/km-0419.ini

@ -0,0 +1,156 @@
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
/*
* evdev-map.c
* Copyright (C) Michał Górny 2014 <mgorny@gentoo.org>
*
* You may redistribute it and/or modify it under the terms of the
* GNU General Public License, as published by the Free Software
* Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* main.cc is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with main.cc. If not, write to:
* The Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301, USA
*
* xfree86(base)->evdev keycode mapping
*/
int xfree86_to_evdev[137-8+1] = {
/* MDSW */ 203,
/* ESC */ 9,
/* AE01 */ 10,
/* AE02 */ 11,
/* AE03 */ 12,
/* AE04 */ 13,
/* AE05 */ 14,
/* AE06 */ 15,
/* AE07 */ 16,
/* AE08 */ 17,
/* AE09 */ 18,
/* AE10 */ 19,
/* AE11 */ 20,
/* AE12 */ 21,
/* BKSP */ 22,
/* TAB */ 23,
/* AD01 */ 24,
/* AD02 */ 25,
/* AD03 */ 26,
/* AD04 */ 27,
/* AD05 */ 28,
/* AD06 */ 29,
/* AD07 */ 30,
/* AD08 */ 31,
/* AD09 */ 32,
/* AD10 */ 33,
/* AD11 */ 34,
/* AD12 */ 35,
/* RTRN */ 36,
/* LCTL */ 37,
/* AC01 */ 38,
/* AC02 */ 39,
/* AC03 */ 40,
/* AC04 */ 41,
/* AC05 */ 42,
/* AC06 */ 43,
/* AC07 */ 44,
/* AC08 */ 45,
/* AC09 */ 46,
/* AC10 */ 47,
/* AC11 */ 48,
/* TLDE */ 49,
/* LFSH */ 50,
/* BKSL */ 51,
/* AB01 */ 52,
/* AB02 */ 53,
/* AB03 */ 54,
/* AB04 */ 55,
/* AB05 */ 56,
/* AB06 */ 57,
/* AB07 */ 58,
/* AB08 */ 59,
/* AB09 */ 60,
/* AB10 */ 61,
/* RTSH */ 62,
/* KPMU */ 63,
/* LALT */ 64,
/* SPCE */ 65,
/* CAPS */ 66,
/* FK01 */ 67,
/* FK02 */ 68,
/* FK03 */ 69,
/* FK04 */ 70,
/* FK05 */ 71,
/* FK06 */ 72,
/* FK07 */ 73,
/* FK08 */ 74,
/* FK09 */ 75,
/* FK10 */ 76,
/* NMLK */ 77,
/* SCLK */ 78,
/* KP7 */ 79,
/* KP8 */ 80,
/* KP9 */ 81,
/* KPSU */ 82,
/* KP4 */ 83,
/* KP5 */ 84,
/* KP6 */ 85,
/* KPAD */ 86,
/* KP1 */ 87,
/* KP2 */ 88,
/* KP3 */ 89,
/* KP0 */ 90,
/* KPDL */ 91,
/* SYRQ */ 107,
/* II5D */ 0,
/* LSGT */ 94,
/* FK11 */ 95,
/* FK12 */ 96,
/* HOME */ 110,
/* UP */ 111,
/* PGUP */ 112,
/* LEFT */ 113,
/* II65 */ 0,
/* RGHT */ 114,
/* END */ 115,
/* DOWN */ 116,
/* PGDN */ 117,
/* INS */ 118,
/* DELE */ 119,
/* KPEN */ 104,
/* RCTL */ 105,
/* PAUS */ 127,
/* PRSC */ 107,
/* KPDV */ 106,
/* RALT */ 108,
/* BRK */ 419,
/* LWIN */ 133,
/* RWIN */ 134,
/* MENU */ 0,
/* FK13 */ 191,
/* FK14 */ 192,
/* FK15 */ 193,
/* FK16 */ 194,
/* FK17 */ 195,
/* KPDC */ 0,
/* LVL3 */ 92,
/* ALT */ 204,
/* KPEQ */ 125,
/* SUPR */ 206,
/* HYPR */ 207,
/* XFER */ 0,
/* I02 */ 0,
/* NFER */ 0,
/* I04 */ 0,
/* AE13 */ 132,
/* I06 */ 0,
/* I07 */ 0,
0,
0
};

@ -37,16 +37,19 @@
#include <string.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/XKBlib.h>
#include <locale.h>
extern int xfree86_to_evdev[137-8];
int main(int argc, char **argv)
{
const char *programname;
char text[256];
char *displayname = NULL;
char *outfname;
char *sections[6] = {"noshift", "shift", "altgr", "shiftaltgr", "capslock", "shiftcapslock"};
int states[6] = {0, 1, 0x80, 0x81, 2, 3};
char *sections[8] = {"noshift", "shift", "altgr", "shiftaltgr", "capslock", "capslockaltgr", "shiftcapslock", "shiftcapslockaltgr"};
int states[8] = {0, 1, 0x80, 0x81, 2, 0x82, 3, 0x83};
int i;
int idx;
int char_count;
@ -57,6 +60,9 @@ int main(int argc, char **argv)
FILE *outf;
XKeyPressedEvent e;
wchar_t wtext[256];
XkbDescPtr kbdesc;
char *symatom;
int is_evdev;
setlocale(LC_CTYPE, "");
programname = argv[0];
@ -78,6 +84,30 @@ int main(int argc, char **argv)
return 1;
}
/* check whether evdev is used */
kbdesc = XkbAllocKeyboard();
if (!kbdesc)
{
fprintf(stderr, "%s: unable to allocate keyboard desc\n",
programname);
XCloseDisplay(dpy);
return 1;
}
if (XkbGetNames(dpy, XkbKeycodesNameMask, kbdesc) != Success)
{
fprintf(stderr, "%s: unable to obtain keycode name for keyboard\n",
programname);
XkbFreeKeyboard(kbdesc, 0, True);
XCloseDisplay(dpy);
return 1;
}
symatom = XGetAtomName(dpy, kbdesc->names->keycodes);
is_evdev = !strncmp(symatom, "evdev", 5);
XFree(symatom);
XkbFreeKeyboard(kbdesc, 0, True);
outf = fopen(outfname, "w");
if (outf == NULL)
@ -94,14 +124,17 @@ int main(int argc, char **argv)
e.display = dpy;
e.same_screen = True;
for (idx = 0; idx < 6; idx++) /* Sections and states */
for (idx = 0; idx < 8; idx++) /* Sections and states */
{
fprintf(outf, "[%s]\n", sections[idx]);
e.state = states[idx];
for (i = 8; i <= 137; i++) /* Keycodes */
{
e.keycode = i;
if (is_evdev)
e.keycode = xfree86_to_evdev[i-8];
else
e.keycode = i;
nbytes = XLookupString(&e, text, 255, &ks, NULL);
text[nbytes] = 0;
char_count = mbstowcs(wtext, text, 255);
@ -115,7 +148,7 @@ int main(int argc, char **argv)
fprintf(outf, "Key%d=%d:%d\n", i, (int) ks, unicode);
}
if (idx != 4)
if (idx != 7)
{
fprintf(outf, "\n");
}

@ -7,9 +7,10 @@ km-xxxx.ini
where the xxxx is replaced by the hex number of the layout of interest.
The files have 6 sections;
The files have 8 sections;
[noshift], [shift], [altgr], [shiftaltgr], [capslock], [shiftcapslock]
[noshift], [shift], [altgr], [shiftaltgr], [capslock], [capslockaltgr],
[shiftcapslock], [shiftcapslockaltgr]
In each section there are multiple lines for each key.

@ -22,6 +22,7 @@ startscript_DATA = \
km-0409.ini \
km-040c.ini \
km-0410.ini \
km-0415.ini \
km-0419.ini \
km-041d.ini \
km-0816.ini

@ -1,5 +1,5 @@
[noshift]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=49:49
Key11=50:50
@ -83,8 +83,8 @@ Key88=65433:0
Key89=65435:0
Key90=65438:0
Key91=65439:0
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=60:60
Key95=65480:0
Key96=65481:0
@ -105,15 +105,15 @@ Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=0:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=0:0
@ -131,7 +131,7 @@ Key136=0:0
Key137=0:0
[shift]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=33:33
Key11=34:34
@ -187,7 +187,7 @@ Key60=58:58
Key61=95:95
Key62=65506:0
Key63=65450:42
Key64=65511:0
Key64=65032:0
Key65=32:32
Key66=65509:0
Key67=65470:0
@ -200,7 +200,7 @@ Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65273:0
Key77=65407:0
Key78=65300:0
Key79=65463:55
Key80=65464:56
@ -215,8 +215,8 @@ Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65452:44
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=62:62
Key95=65480:0
Key96=65481:0
@ -237,15 +237,15 @@ Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=0:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=65513:0
@ -263,7 +263,7 @@ Key136=0:0
Key137=0:0
[altgr]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=185:185
Key11=178:178
@ -290,33 +290,33 @@ Key31=2301:8594
Key32=248:248
Key33=254:254
Key34=65111:168
Key35=65107:126
Key35=126:126
Key36=65293:13
Key37=65507:0
Key38=230:230
Key39=223:223
Key39=16777599:383
Key40=240:240
Key41=496:273
Key42=959:331
Key43=689:295
Key44=106:106
Key44=65120:0
Key45=930:312
Key46=435:322
Key47=65113:733
Key48=65106:94
Key49=172:172
Key49=16785458:8242
Key50=65505:0
Key51=65104:96
Key52=171:171
Key53=187:187
Key51=2769:8217
Key52=187:187
Key53=171:171
Key54=162:162
Key55=2770:8220
Key56=2771:8221
Key57=110:110
Key55=2814:8222
Key56=2770:8220
Key57=2771:8221
Key58=181:181
Key59=2211:0
Key60=183:183
Key61=65120:0
Key59=183:183
Key60=16785446:8230
Key61=2730:8211
Key62=65506:0
Key63=65450:42
Key64=65513:0
@ -347,8 +347,8 @@ Key88=65433:0
Key89=65435:0
Key90=65438:0
Key91=65439:0
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=124:124
Key95=65480:0
Key96=65481:0
@ -366,18 +366,18 @@ Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=0:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=0:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=0:0
@ -394,8 +394,140 @@ Key135=0:0
Key136=0:0
Key137=0:0
[shiftaltgr]
Key8=65406:0
Key9=65307:27
Key10=161:161
Key11=2755:8539
Key12=163:163
Key13=164:164
Key14=2756:8540
Key15=2757:8541
Key16=2758:8542
Key17=2761:8482
Key18=177:177
Key19=176:176
Key20=191:191
Key21=65116:731
Key22=65288:8
Key23=65056:0
Key24=2009:937
Key25=419:321
Key26=8364:8364
Key27=174:174
Key28=940:358
Key29=165:165
Key30=2300:8593
Key31=697:305
Key32=216:216
Key33=222:222
Key34=65112:176
Key35=175:175
Key36=65293:13
Key37=65507:0
Key38=198:198
Key39=16785054:7838
Key40=208:208
Key41=170:170
Key42=957:330
Key43=673:294
Key44=65110:729
Key45=38:38
Key46=419:321
Key47=65120:0
Key48=65114:711
Key49=16785459:8243
Key50=65505:0
Key51=65109:728
Key52=16785466:8250
Key53=16785465:8249
Key54=169:169
Key55=2813:8218
Key56=2768:8216
Key57=2769:8217
Key58=186:186
Key59=215:215
Key60=247:247
Key61=2729:8212
Key62=65506:0
Key63=65450:42
Key64=65032:0
Key65=32:32
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
Key70=65473:0
Key71=65474:0
Key72=65475:0
Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65407:0
Key78=65300:0
Key79=65463:55
Key80=65464:56
Key81=65465:57
Key82=65453:45
Key83=65460:52
Key84=65461:53
Key85=65462:54
Key86=65451:43
Key87=65457:49
Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65452:44
Key92=65377:0
Key93=0:0
Key94=166:166
Key95=65480:0
Key96=65481:0
Key97=65360:0
Key98=65362:0
Key99=65365:0
Key100=65361:0
Key101=0:0
Key102=65363:0
Key103=65367:0
Key104=65364:0
Key105=65366:0
Key106=65379:0
Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=269025049:0
Key115=65515:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=65513:0
Key126=65469:61
Key127=65515:0
Key128=65517:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0
[capslock]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=49:49
Key11=50:50
@ -407,7 +539,7 @@ Key16=55:55
Key17=56:56
Key18=57:57
Key19=48:48
Key20=223:223
Key20=16785054:7838
Key21=65105:180
Key22=65288:8
Key23=65289:9
@ -479,8 +611,8 @@ Key88=65433:0
Key89=65435:0
Key90=65438:0
Key91=65439:0
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=60:60
Key95=65480:0
Key96=65481:0
@ -501,15 +633,15 @@ Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=0:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=0:0
@ -525,9 +657,8 @@ Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0
[shiftcapslock]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=33:33
Key11=34:34
@ -583,7 +714,7 @@ Key60=58:58
Key61=95:95
Key62=65506:0
Key63=65450:42
Key64=65511:0
Key64=65032:0
Key65=32:32
Key66=65509:0
Key67=65470:0
@ -596,7 +727,7 @@ Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65273:0
Key77=65407:0
Key78=65300:0
Key79=65463:55
Key80=65464:56
@ -611,8 +742,8 @@ Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65452:44
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=62:62
Key95=65480:0
Key96=65481:0
@ -633,15 +764,15 @@ Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=0:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=65513:0
@ -657,3 +788,4 @@ Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0

@ -1,5 +1,5 @@
[noshift]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=49:49
Key11=50:50
@ -83,8 +83,8 @@ Key88=65433:0
Key89=65435:0
Key90=65438:0
Key91=65439:0
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=60:60
Key95=65480:0
Key96=65481:0
@ -105,15 +105,15 @@ Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65514:0
Key114=0:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=0:0
@ -131,7 +131,7 @@ Key136=0:0
Key137=0:0
[shift]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=33:33
Key11=64:64
@ -187,7 +187,7 @@ Key60=62:62
Key61=63:63
Key62=65506:0
Key63=65450:42
Key64=65511:0
Key64=65032:0
Key65=32:32
Key66=65509:0
Key67=65470:0
@ -200,7 +200,7 @@ Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65273:0
Key77=65407:0
Key78=65300:0
Key79=65463:55
Key80=65464:56
@ -215,8 +215,8 @@ Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65454:46
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=62:62
Key95=65480:0
Key96=65481:0
@ -236,16 +236,16 @@ Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65512:0
Key114=0:0
Key113=65032:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=65513:0
@ -263,7 +263,7 @@ Key136=0:0
Key137=0:0
[altgr]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=49:49
Key11=50:50
@ -347,8 +347,8 @@ Key88=65433:0
Key89=65435:0
Key90=65438:0
Key91=65439:0
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=124:124
Key95=65480:0
Key96=65481:0
@ -366,18 +366,18 @@ Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=0:0
Key111=65377:0
Key112=65455:47
Key113=65514:0
Key114=0:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=0:0
@ -394,8 +394,140 @@ Key135=0:0
Key136=0:0
Key137=0:0
[shiftaltgr]
Key8=65406:0
Key9=65307:27
Key10=33:33
Key11=64:64
Key12=35:35
Key13=36:36
Key14=37:37
Key15=94:94
Key16=38:38
Key17=42:42
Key18=40:40
Key19=41:41
Key20=95:95
Key21=43:43
Key22=65288:8
Key23=65056:0
Key24=81:81
Key25=87:87
Key26=69:69
Key27=82:82
Key28=84:84
Key29=89:89
Key30=85:85
Key31=73:73
Key32=79:79
Key33=80:80
Key34=123:123
Key35=125:125
Key36=65293:13
Key37=65507:0
Key38=65:65
Key39=83:83
Key40=68:68
Key41=70:70
Key42=71:71
Key43=72:72
Key44=74:74
Key45=75:75
Key46=76:76
Key47=58:58
Key48=34:34
Key49=126:126
Key50=65505:0
Key51=124:124
Key52=90:90
Key53=88:88
Key54=67:67
Key55=86:86
Key56=66:66
Key57=78:78
Key58=77:77
Key59=60:60
Key60=62:62
Key61=63:63
Key62=65506:0
Key63=65450:42
Key64=65032:0
Key65=32:32
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
Key70=65473:0
Key71=65474:0
Key72=65475:0
Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65407:0
Key78=65300:0
Key79=65463:55
Key80=65464:56
Key81=65465:57
Key82=65453:45
Key83=65460:52
Key84=65461:53
Key85=65462:54
Key86=65451:43
Key87=65457:49
Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65454:46
Key92=65377:0
Key93=0:0
Key94=166:166
Key95=65480:0
Key96=65481:0
Key97=65360:0
Key98=65362:0
Key99=65365:0
Key100=65361:0
Key101=0:0
Key102=65363:0
Key103=65367:0
Key104=65364:0
Key105=65366:0
Key106=65379:0
Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65032:0
Key114=269025049:0
Key115=65515:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=65513:0
Key126=65469:61
Key127=65515:0
Key128=65517:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0
[capslock]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=49:49
Key11=50:50
@ -479,8 +611,8 @@ Key88=65433:0
Key89=65435:0
Key90=65438:0
Key91=65439:0
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=60:60
Key95=65480:0
Key96=65481:0
@ -501,15 +633,15 @@ Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65514:0
Key114=0:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=0:0
@ -525,9 +657,8 @@ Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0
[shiftcapslock]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=33:33
Key11=64:64
@ -583,7 +714,7 @@ Key60=62:62
Key61=63:63
Key62=65506:0
Key63=65450:42
Key64=65511:0
Key64=65032:0
Key65=32:32
Key66=65509:0
Key67=65470:0
@ -596,7 +727,7 @@ Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65273:0
Key77=65407:0
Key78=65300:0
Key79=65463:55
Key80=65464:56
@ -611,8 +742,8 @@ Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65454:46
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=62:62
Key95=65480:0
Key96=65481:0
@ -632,16 +763,16 @@ Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65512:0
Key114=0:0
Key113=65032:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=65513:0
@ -657,3 +788,4 @@ Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0

@ -1,5 +1,5 @@
[noshift]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=49:49
Key11=50:50
@ -83,8 +83,8 @@ Key88=65433:0
Key89=65435:0
Key90=65438:0
Key91=65439:0
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=60:60
Key95=65480:0
Key96=65481:0
@ -105,15 +105,15 @@ Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=0:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=0:0
@ -131,7 +131,7 @@ Key136=0:0
Key137=0:0
[shift]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=33:33
Key11=34:34
@ -187,7 +187,7 @@ Key60=58:58
Key61=95:95
Key62=65506:0
Key63=65450:42
Key64=65511:0
Key64=65032:0
Key65=32:32
Key66=65509:0
Key67=65470:0
@ -200,7 +200,7 @@ Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65273:0
Key77=65407:0
Key78=65300:0
Key79=65463:55
Key80=65464:56
@ -215,8 +215,8 @@ Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65454:46
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=62:62
Key95=65480:0
Key96=65481:0
@ -237,15 +237,15 @@ Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=0:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=65513:0
@ -263,7 +263,7 @@ Key136=0:0
Key137=0:0
[altgr]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=185:185
Key11=178:178
@ -299,7 +299,7 @@ Key40=240:240
Key41=496:273
Key42=959:331
Key43=689:295
Key44=106:106
Key44=65121:0
Key45=930:312
Key46=435:322
Key47=64:64
@ -347,8 +347,8 @@ Key88=65433:0
Key89=65435:0
Key90=65438:0
Key91=65439:0
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=171:171
Key95=65480:0
Key96=65481:0
@ -366,18 +366,18 @@ Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=0:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=0:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=0:0
@ -394,8 +394,140 @@ Key135=0:0
Key136=0:0
Key137=0:0
[shiftaltgr]
Key8=65406:0
Key9=65307:27
Key10=161:161
Key11=65113:733
Key12=65107:126
Key13=2755:8539
Key14=2756:8540
Key15=2757:8541
Key16=2758:8542
Key17=2761:8482
Key18=177:177
Key19=65116:731
Key20=191:191
Key21=65106:94
Key22=65288:8
Key23=65056:0
Key24=2009:937
Key25=419:321
Key26=162:162
Key27=174:174
Key28=940:358
Key29=165:165
Key30=2300:8593
Key31=697:305
Key32=216:216
Key33=222:222
Key34=123:123
Key35=125:125
Key36=65293:13
Key37=65507:0
Key38=198:198
Key39=167:167
Key40=208:208
Key41=170:170
Key42=957:330
Key43=673:294
Key44=65122:0
Key45=38:38
Key46=419:321
Key47=65115:184
Key48=65112:176
Key49=166:166
Key50=65505:0
Key51=65109:728
Key52=60:60
Key53=62:62
Key54=169:169
Key55=2768:8216
Key56=2769:8217
Key57=209:209
Key58=186:186
Key59=215:215
Key60=65111:168
Key61=247:247
Key62=65506:0
Key63=65450:42
Key64=65032:0
Key65=32:32
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
Key70=65473:0
Key71=65474:0
Key72=65475:0
Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65407:0
Key78=65300:0
Key79=65463:55
Key80=65464:56
Key81=65465:57
Key82=65453:45
Key83=65460:52
Key84=65461:53
Key85=65462:54
Key86=65451:43
Key87=65457:49
Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65454:46
Key92=65377:0
Key93=0:0
Key94=187:187
Key95=65480:0
Key96=65481:0
Key97=65360:0
Key98=65362:0
Key99=65365:0
Key100=65361:0
Key101=0:0
Key102=65363:0
Key103=65367:0
Key104=65364:0
Key105=65366:0
Key106=65379:0
Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=269025049:0
Key115=65515:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=65513:0
Key126=65469:61
Key127=65515:0
Key128=65517:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0
[capslock]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=49:49
Key11=50:50
@ -479,8 +611,8 @@ Key88=65433:0
Key89=65435:0
Key90=65438:0
Key91=65439:0
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=60:60
Key95=65480:0
Key96=65481:0
@ -501,15 +633,15 @@ Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=0:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=0:0
@ -525,9 +657,8 @@ Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0
[shiftcapslock]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=33:33
Key11=34:34
@ -583,7 +714,7 @@ Key60=58:58
Key61=95:95
Key62=65506:0
Key63=65450:42
Key64=65511:0
Key64=65032:0
Key65=32:32
Key66=65509:0
Key67=65470:0
@ -596,7 +727,7 @@ Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65273:0
Key77=65407:0
Key78=65300:0
Key79=65463:55
Key80=65464:56
@ -611,8 +742,8 @@ Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65454:46
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=62:62
Key95=65480:0
Key96=65481:0
@ -633,15 +764,15 @@ Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=0:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=65513:0
@ -657,3 +788,4 @@ Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0

@ -0,0 +1,791 @@
[noshift]
Key8=65406:0
Key9=65307:27
Key10=49:49
Key11=50:50
Key12=51:51
Key13=52:52
Key14=53:53
Key15=54:54
Key16=55:55
Key17=56:56
Key18=57:57
Key19=48:48
Key20=45:45
Key21=61:61
Key22=65288:8
Key23=65289:9
Key24=113:113
Key25=119:119
Key26=101:101
Key27=114:114
Key28=116:116
Key29=121:121
Key30=117:117
Key31=105:105
Key32=111:111
Key33=112:112
Key34=91:91
Key35=93:93
Key36=65293:13
Key37=65507:0
Key38=97:97
Key39=115:115
Key40=100:100
Key41=102:102
Key42=103:103
Key43=104:104
Key44=106:106
Key45=107:107
Key46=108:108
Key47=59:59
Key48=39:39
Key49=96:96
Key50=65505:0
Key51=92:92
Key52=122:122
Key53=120:120
Key54=99:99
Key55=118:118
Key56=98:98
Key57=110:110
Key58=109:109
Key59=44:44
Key60=46:46
Key61=47:47
Key62=65506:0
Key63=65450:42
Key64=65513:0
Key65=32:32
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
Key70=65473:0
Key71=65474:0
Key72=65475:0
Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65407:0
Key78=65300:0
Key79=65429:0
Key80=65431:0
Key81=65434:0
Key82=65453:45
Key83=65430:0
Key84=65437:0
Key85=65432:0
Key86=65451:43
Key87=65436:0
Key88=65433:0
Key89=65435:0
Key90=65438:0
Key91=65439:0
Key92=65377:0
Key93=0:0
Key94=60:60
Key95=65480:0
Key96=65481:0
Key97=65360:0
Key98=65362:0
Key99=65365:0
Key100=65361:0
Key101=0:0
Key102=65363:0
Key103=65367:0
Key104=65364:0
Key105=65366:0
Key106=65379:0
Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=269025049:0
Key115=65515:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=0:0
Key126=65469:61
Key127=0:0
Key128=0:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0
[shift]
Key8=65406:0
Key9=65307:27
Key10=33:33
Key11=64:64
Key12=35:35
Key13=36:36
Key14=37:37
Key15=94:94
Key16=38:38
Key17=42:42
Key18=40:40
Key19=41:41
Key20=95:95
Key21=43:43
Key22=65288:8
Key23=65056:0
Key24=81:81
Key25=87:87
Key26=69:69
Key27=82:82
Key28=84:84
Key29=89:89
Key30=85:85
Key31=73:73
Key32=79:79
Key33=80:80
Key34=123:123
Key35=125:125
Key36=65293:13
Key37=65507:0
Key38=65:65
Key39=83:83
Key40=68:68
Key41=70:70
Key42=71:71
Key43=72:72
Key44=74:74
Key45=75:75
Key46=76:76
Key47=58:58
Key48=34:34
Key49=126:126
Key50=65505:0
Key51=124:124
Key52=90:90
Key53=88:88
Key54=67:67
Key55=86:86
Key56=66:66
Key57=78:78
Key58=77:77
Key59=60:60
Key60=62:62
Key61=63:63
Key62=65506:0
Key63=65450:42
Key64=65032:0
Key65=32:32
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
Key70=65473:0
Key71=65474:0
Key72=65475:0
Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65407:0
Key78=65300:0
Key79=65463:55
Key80=65464:56
Key81=65465:57
Key82=65453:45
Key83=65460:52
Key84=65461:53
Key85=65462:54
Key86=65451:43
Key87=65457:49
Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65452:44
Key92=65377:0
Key93=0:0
Key94=62:62
Key95=65480:0
Key96=65481:0
Key97=65360:0
Key98=65362:0
Key99=65365:0
Key100=65361:0
Key101=0:0
Key102=65363:0
Key103=65367:0
Key104=65364:0
Key105=65366:0
Key106=65379:0
Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=269025049:0
Key115=65515:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=65513:0
Key126=65469:61
Key127=65515:0
Key128=65517:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0
[altgr]
Key8=65406:0
Key9=65307:27
Key10=2237:8800
Key11=178:178
Key12=179:179
Key13=162:162
Key14=8364:8364
Key15=189:189
Key16=167:167
Key17=183:183
Key18=171:171
Key19=187:187
Key20=2730:8211
Key21=65115:184
Key22=65288:8
Key23=65289:9
Key24=2032:960
Key25=5053:339
Key26=490:281
Key27=169:169
Key28=223:223
Key29=2299:8592
Key30=2302:8595
Key31=2301:8594
Key32=243:243
Key33=254:254
Key34=65111:168
Key35=65107:126
Key36=65293:13
Key37=65507:0
Key38=433:261
Key39=438:347
Key40=240:240
Key41=230:230
Key42=959:331
Key43=2769:8217
Key44=16777817:601
Key45=2734:8230
Key46=435:322
Key47=65105:180
Key48=65106:94
Key49=172:172
Key50=65505:0
Key51=65104:96
Key52=447:380
Key53=444:378
Key54=486:263
Key55=2814:8222
Key56=2771:8221
Key57=497:324
Key58=181:181
Key59=2236:8804
Key60=2238:8805
Key61=65120:0
Key62=65506:0
Key63=65450:42
Key64=65513:0
Key65=160:160
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
Key70=65473:0
Key71=65474:0
Key72=65475:0
Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65407:0
Key78=65300:0
Key79=65429:0
Key80=65431:0
Key81=65434:0
Key82=65453:45
Key83=65430:0
Key84=65437:0
Key85=65432:0
Key86=65451:43
Key87=65436:0
Key88=65433:0
Key89=65435:0
Key90=65438:0
Key91=65439:0
Key92=65377:0
Key93=0:0
Key94=124:124
Key95=65480:0
Key96=65481:0
Key97=65360:0
Key98=65362:0
Key99=65365:0
Key100=65361:0
Key101=0:0
Key102=65363:0
Key103=65367:0
Key104=65364:0
Key105=65366:0
Key106=65379:0
Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=269025049:0
Key115=65515:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=0:0
Key126=65469:61
Key127=0:0
Key128=0:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0
[shiftaltgr]
Key8=65406:0
Key9=65307:27
Key10=161:161
Key11=191:191
Key12=163:163
Key13=188:188
Key14=16785456:8240
Key15=2270:8743
Key16=16785992:8776
Key17=190:190
Key18=177:177
Key19=176:176
Key20=2729:8212
Key21=65116:731
Key22=65288:8
Key23=65056:0
Key24=2009:937
Key25=5052:338
Key26=458:280
Key27=174:174
Key28=2761:8482
Key29=165:165
Key30=2300:8593
Key31=16785812:8596
Key32=211:211
Key33=222:222
Key34=65112:176
Key35=65108:175
Key36=65293:13
Key37=65507:0
Key38=417:260
Key39=422:346
Key40=208:208
Key41=198:198
Key42=957:330
Key43=16785442:8226
Key44=16777615:399
Key45=65123:0
Key46=419:321
Key47=65113:733
Key48=65114:711
Key49=2271:8744
Key50=65505:0
Key51=65109:728
Key52=431:379
Key53=428:377
Key54=454:262
Key55=2768:8216
Key56=2770:8220
Key57=465:323
Key58=2242:8734
Key59=215:215
Key60=247:247
Key61=65110:729
Key62=65506:0
Key63=65450:42
Key64=65032:0
Key65=160:160
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
Key70=65473:0
Key71=65474:0
Key72=65475:0
Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65407:0
Key78=65300:0
Key79=65463:55
Key80=65464:56
Key81=65465:57
Key82=65453:45
Key83=65460:52
Key84=65461:53
Key85=65462:54
Key86=65451:43
Key87=65457:49
Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65452:44
Key92=65377:0
Key93=0:0
Key94=166:166
Key95=65480:0
Key96=65481:0
Key97=65360:0
Key98=65362:0
Key99=65365:0
Key100=65361:0
Key101=0:0
Key102=65363:0
Key103=65367:0
Key104=65364:0
Key105=65366:0
Key106=65379:0
Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=269025049:0
Key115=65515:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=65513:0
Key126=65469:61
Key127=65515:0
Key128=65517:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0
[capslock]
Key8=65406:0
Key9=65307:27
Key10=49:49
Key11=50:50
Key12=51:51
Key13=52:52
Key14=53:53
Key15=54:54
Key16=55:55
Key17=56:56
Key18=57:57
Key19=48:48
Key20=45:45
Key21=61:61
Key22=65288:8
Key23=65289:9
Key24=81:81
Key25=87:87
Key26=69:69
Key27=82:82
Key28=84:84
Key29=89:89
Key30=85:85
Key31=73:73
Key32=79:79
Key33=80:80
Key34=91:91
Key35=93:93
Key36=65293:13
Key37=65507:0
Key38=65:65
Key39=83:83
Key40=68:68
Key41=70:70
Key42=71:71
Key43=72:72
Key44=74:74
Key45=75:75
Key46=76:76
Key47=59:59
Key48=39:39
Key49=96:96
Key50=65505:0
Key51=92:92
Key52=90:90
Key53=88:88
Key54=67:67
Key55=86:86
Key56=66:66
Key57=78:78
Key58=77:77
Key59=44:44
Key60=46:46
Key61=47:47
Key62=65506:0
Key63=65450:42
Key64=65513:0
Key65=32:32
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
Key70=65473:0
Key71=65474:0
Key72=65475:0
Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65407:0
Key78=65300:0
Key79=65429:0
Key80=65431:0
Key81=65434:0
Key82=65453:45
Key83=65430:0
Key84=65437:0
Key85=65432:0
Key86=65451:43
Key87=65436:0
Key88=65433:0
Key89=65435:0
Key90=65438:0
Key91=65439:0
Key92=65377:0
Key93=0:0
Key94=60:60
Key95=65480:0
Key96=65481:0
Key97=65360:0
Key98=65362:0
Key99=65365:0
Key100=65361:0
Key101=0:0
Key102=65363:0
Key103=65367:0
Key104=65364:0
Key105=65366:0
Key106=65379:0
Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=269025049:0
Key115=65515:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=0:0
Key126=65469:61
Key127=0:0
Key128=0:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0
[shiftcapslock]
Key8=65406:0
Key9=65307:27
Key10=33:33
Key11=64:64
Key12=35:35
Key13=36:36
Key14=37:37
Key15=94:94
Key16=38:38
Key17=42:42
Key18=40:40
Key19=41:41
Key20=95:95
Key21=43:43
Key22=65288:8
Key23=65056:0
Key24=113:113
Key25=119:119
Key26=101:101
Key27=114:114
Key28=116:116
Key29=121:121
Key30=117:117
Key31=105:105
Key32=111:111
Key33=112:112
Key34=123:123
Key35=125:125
Key36=65293:13
Key37=65507:0
Key38=97:97
Key39=115:115
Key40=100:100
Key41=102:102
Key42=103:103
Key43=104:104
Key44=106:106
Key45=107:107
Key46=108:108
Key47=58:58
Key48=34:34
Key49=126:126
Key50=65505:0
Key51=124:124
Key52=122:122
Key53=120:120
Key54=99:99
Key55=118:118
Key56=98:98
Key57=110:110
Key58=109:109
Key59=60:60
Key60=62:62
Key61=63:63
Key62=65506:0
Key63=65450:42
Key64=65032:0
Key65=32:32
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
Key70=65473:0
Key71=65474:0
Key72=65475:0
Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65407:0
Key78=65300:0
Key79=65463:55
Key80=65464:56
Key81=65465:57
Key82=65453:45
Key83=65460:52
Key84=65461:53
Key85=65462:54
Key86=65451:43
Key87=65457:49
Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65452:44
Key92=65377:0
Key93=0:0
Key94=62:62
Key95=65480:0
Key96=65481:0
Key97=65360:0
Key98=65362:0
Key99=65365:0
Key100=65361:0
Key101=0:0
Key102=65363:0
Key103=65367:0
Key104=65364:0
Key105=65366:0
Key106=65379:0
Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=269025049:0
Key115=65515:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=65513:0
Key126=65469:61
Key127=65515:0
Key128=65517:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0

@ -1,5 +1,5 @@
[noshift]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=49:49
Key11=50:50
@ -52,7 +52,7 @@ Key57=1748:1090
Key58=1752:1100
Key59=1730:1073
Key60=1728:1102
Key61=47:47
Key61=46:46
Key62=65506:0
Key63=65450:42
Key64=65513:0
@ -83,8 +83,8 @@ Key88=65433:0
Key89=65435:0
Key90=65438:0
Key91=65439:0
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=47:47
Key95=65480:0
Key96=65481:0
@ -105,15 +105,15 @@ Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65514:0
Key114=0:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=0:0
@ -131,16 +131,16 @@ Key136=0:0
Key137=0:0
[shift]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=33:33
Key11=34:34
Key12=35:35
Key13=42:42
Key14=58:58
Key15=44:44
Key16=46:46
Key17=59:59
Key12=1712:8470
Key13=59:59
Key14=37:37
Key15=58:58
Key16=63:63
Key17=42:42
Key18=40:40
Key19=41:41
Key20=95:95
@ -174,7 +174,7 @@ Key47=1782:1046
Key48=1788:1069
Key49=1715:1025
Key50=65505:0
Key51=124:124
Key51=47:47
Key52=1777:1071
Key53=1790:1063
Key54=1779:1057
@ -184,10 +184,10 @@ Key57=1780:1058
Key58=1784:1068
Key59=1762:1041
Key60=1760:1070
Key61=63:63
Key61=44:44
Key62=65506:0
Key63=65450:42
Key64=65511:0
Key64=65032:0
Key65=32:32
Key66=65509:0
Key67=65470:0
@ -200,7 +200,7 @@ Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65273:0
Key77=65407:0
Key78=65300:0
Key79=65463:55
Key80=65464:56
@ -215,8 +215,8 @@ Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65452:44
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=124:124
Key95=65480:0
Key96=65481:0
@ -236,16 +236,16 @@ Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65512:0
Key114=0:0
Key113=65032:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=65513:0
@ -263,7 +263,7 @@ Key136=0:0
Key137=0:0
[altgr]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=49:49
Key11=50:50
@ -316,7 +316,7 @@ Key57=1748:1090
Key58=1752:1100
Key59=1730:1073
Key60=1728:1102
Key61=47:47
Key61=46:46
Key62=65506:0
Key63=65450:42
Key64=65513:0
@ -347,8 +347,8 @@ Key88=65433:0
Key89=65435:0
Key90=65438:0
Key91=65439:0
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=124:124
Key95=65480:0
Key96=65481:0
@ -366,18 +366,18 @@ Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=0:0
Key111=65377:0
Key112=65455:47
Key113=65514:0
Key114=0:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=0:0
@ -394,8 +394,140 @@ Key135=0:0
Key136=0:0
Key137=0:0
[shiftaltgr]
Key8=65406:0
Key9=65307:27
Key10=33:33
Key11=34:34
Key12=1712:8470
Key13=59:59
Key14=37:37
Key15=58:58
Key16=63:63
Key17=42:42
Key18=40:40
Key19=41:41
Key20=95:95
Key21=43:43
Key22=65288:8
Key23=65056:0
Key24=1770:1049
Key25=1763:1062
Key26=1781:1059
Key27=1771:1050
Key28=1765:1045
Key29=1774:1053
Key30=1767:1043
Key31=1787:1064
Key32=1789:1065
Key33=1786:1047
Key34=1768:1061
Key35=1791:1066
Key36=65293:13
Key37=65507:0
Key38=1766:1060
Key39=1785:1067
Key40=1783:1042
Key41=1761:1040
Key42=1776:1055
Key43=1778:1056
Key44=1775:1054
Key45=1772:1051
Key46=1764:1044
Key47=1782:1046
Key48=1788:1069
Key49=1715:1025
Key50=65505:0
Key51=47:47
Key52=1777:1071
Key53=1790:1063
Key54=1779:1057
Key55=1773:1052
Key56=1769:1048
Key57=1780:1058
Key58=1784:1068
Key59=1762:1041
Key60=1760:1070
Key61=44:44
Key62=65506:0
Key63=65450:42
Key64=65032:0
Key65=32:32
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
Key70=65473:0
Key71=65474:0
Key72=65475:0
Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65407:0
Key78=65300:0
Key79=65463:55
Key80=65464:56
Key81=65465:57
Key82=65453:45
Key83=65460:52
Key84=65461:53
Key85=65462:54
Key86=65451:43
Key87=65457:49
Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65452:44
Key92=65377:0
Key93=0:0
Key94=166:166
Key95=65480:0
Key96=65481:0
Key97=65360:0
Key98=65362:0
Key99=65365:0
Key100=65361:0
Key101=0:0
Key102=65363:0
Key103=65367:0
Key104=65364:0
Key105=65366:0
Key106=65379:0
Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65032:0
Key114=269025049:0
Key115=65515:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=65513:0
Key126=65469:61
Key127=65515:0
Key128=65517:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0
[capslock]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=49:49
Key11=50:50
@ -448,7 +580,7 @@ Key57=1780:1058
Key58=1784:1068
Key59=1762:1041
Key60=1760:1070
Key61=47:47
Key61=46:46
Key62=65506:0
Key63=65450:42
Key64=65513:0
@ -479,8 +611,8 @@ Key88=65433:0
Key89=65435:0
Key90=65438:0
Key91=65439:0
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=47:47
Key95=65480:0
Key96=65481:0
@ -501,15 +633,15 @@ Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65514:0
Key114=0:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=0:0
@ -525,18 +657,17 @@ Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0
[shiftcapslock]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=33:33
Key11=34:34
Key12=35:35
Key13=42:42
Key14=58:58
Key15=44:44
Key16=46:46
Key17=59:59
Key12=1712:8470
Key13=59:59
Key14=37:37
Key15=58:58
Key16=63:63
Key17=42:42
Key18=40:40
Key19=41:41
Key20=95:95
@ -570,7 +701,7 @@ Key47=1750:1078
Key48=1756:1101
Key49=1699:1105
Key50=65505:0
Key51=124:124
Key51=47:47
Key52=1745:1103
Key53=1758:1095
Key54=1747:1089
@ -580,10 +711,10 @@ Key57=1748:1090
Key58=1752:1100
Key59=1730:1073
Key60=1728:1102
Key61=63:63
Key61=44:44
Key62=65506:0
Key63=65450:42
Key64=65511:0
Key64=65032:0
Key65=32:32
Key66=65509:0
Key67=65470:0
@ -596,7 +727,7 @@ Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65273:0
Key77=65407:0
Key78=65300:0
Key79=65463:55
Key80=65464:56
@ -611,8 +742,8 @@ Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65452:44
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=124:124
Key95=65480:0
Key96=65481:0
@ -632,16 +763,16 @@ Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65512:0
Key114=0:0
Key113=65032:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=65513:0
@ -657,3 +788,4 @@ Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0

@ -1,5 +1,5 @@
[noshift]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=49:49
Key11=50:50
@ -83,8 +83,8 @@ Key88=65433:0
Key89=65435:0
Key90=65438:0
Key91=65439:0
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=60:60
Key95=65480:0
Key96=65481:0
@ -105,15 +105,15 @@ Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=0:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=0:0
@ -131,7 +131,7 @@ Key136=0:0
Key137=0:0
[shift]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=33:33
Key11=34:34
@ -187,7 +187,7 @@ Key60=58:58
Key61=95:95
Key62=65506:0
Key63=65450:42
Key64=65511:0
Key64=65032:0
Key65=32:32
Key66=65509:0
Key67=65470:0
@ -200,7 +200,7 @@ Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65273:0
Key77=65407:0
Key78=65300:0
Key79=65463:55
Key80=65464:56
@ -215,8 +215,8 @@ Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65452:44
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=62:62
Key95=65480:0
Key96=65481:0
@ -237,15 +237,15 @@ Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=0:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=65513:0
@ -263,7 +263,7 @@ Key136=0:0
Key137=0:0
[altgr]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=161:161
Key11=64:64
@ -299,7 +299,7 @@ Key40=240:240
Key41=496:273
Key42=959:331
Key43=689:295
Key44=106:106
Key44=65121:0
Key45=930:312
Key46=435:322
Key47=248:248
@ -347,8 +347,8 @@ Key88=65433:0
Key89=65435:0
Key90=65438:0
Key91=65439:0
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=124:124
Key95=65480:0
Key96=65481:0
@ -366,18 +366,18 @@ Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=0:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=0:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=0:0
@ -394,8 +394,140 @@ Key135=0:0
Key136=0:0
Key137=0:0
[shiftaltgr]
Key8=65406:0
Key9=65307:27
Key10=185:185
Key11=178:178
Key12=179:179
Key13=188:188
Key14=162:162
Key15=2757:8541
Key16=247:247
Key17=171:171
Key18=187:187
Key19=176:176
Key20=191:191
Key21=172:172
Key22=65288:8
Key23=65056:0
Key24=2009:937
Key25=419:321
Key26=162:162
Key27=174:174
Key28=222:222
Key29=165:165
Key30=2300:8593
Key31=697:305
Key32=5052:338
Key33=222:222
Key34=65112:176
Key35=65114:711
Key36=65293:13
Key37=65507:0
Key38=186:186
Key39=167:167
Key40=208:208
Key41=170:170
Key42=957:330
Key43=673:294
Key44=65122:0
Key45=38:38
Key46=419:321
Key47=216:216
Key48=198:198
Key49=190:190
Key50=65505:0
Key51=215:215
Key52=60:60
Key53=62:62
Key54=169:169
Key55=2768:8216
Key56=2769:8217
Key57=78:78
Key58=186:186
Key59=65116:731
Key60=65110:729
Key61=65110:729
Key62=65506:0
Key63=65450:42
Key64=65032:0
Key65=160:160
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
Key70=65473:0
Key71=65474:0
Key72=65475:0
Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65407:0
Key78=65300:0
Key79=65463:55
Key80=65464:56
Key81=65465:57
Key82=65453:45
Key83=65460:52
Key84=65461:53
Key85=65462:54
Key86=65451:43
Key87=65457:49
Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65452:44
Key92=65377:0
Key93=0:0
Key94=166:166
Key95=65480:0
Key96=65481:0
Key97=65360:0
Key98=65362:0
Key99=65365:0
Key100=65361:0
Key101=0:0
Key102=65363:0
Key103=65367:0
Key104=65364:0
Key105=65366:0
Key106=65379:0
Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=269025049:0
Key115=65515:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=65513:0
Key126=65469:61
Key127=65515:0
Key128=65517:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0
[capslock]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=49:49
Key11=50:50
@ -479,8 +611,8 @@ Key88=65433:0
Key89=65435:0
Key90=65438:0
Key91=65439:0
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=60:60
Key95=65480:0
Key96=65481:0
@ -501,15 +633,15 @@ Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=0:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=0:0
@ -525,9 +657,8 @@ Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0
[shiftcapslock]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=33:33
Key11=34:34
@ -583,7 +714,7 @@ Key60=58:58
Key61=95:95
Key62=65506:0
Key63=65450:42
Key64=65511:0
Key64=65032:0
Key65=32:32
Key66=65509:0
Key67=65470:0
@ -596,7 +727,7 @@ Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65273:0
Key77=65407:0
Key78=65300:0
Key79=65463:55
Key80=65464:56
@ -611,8 +742,8 @@ Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65452:44
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=62:62
Key95=65480:0
Key96=65481:0
@ -633,15 +764,15 @@ Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=0:0
Key114=269025049:0
Key115=65515:0
Key116=65516:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=65513:0
@ -657,3 +788,4 @@ Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0

@ -1,5 +1,5 @@
[noshift]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=49:49
Key11=50:50
@ -83,8 +83,8 @@ Key88=65433:0
Key89=65435:0
Key90=65438:0
Key91=65439:0
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=60:60
Key95=65480:0
Key96=65481:0
@ -105,33 +105,33 @@ Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=0:0
Key114=269025049:0
Key115=65515:0
Key116=65312:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=0:0
Key126=65469:61
Key127=0:0
Key128=0:0
Key129=269025170:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=269025166:0
Key133=0:0
Key134=0:0
Key135=65382:0
Key136=65381:0
Key135=0:0
Key136=0:0
Key137=0:0
[shift]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=33:33
Key11=34:34
@ -187,7 +187,7 @@ Key60=58:58
Key61=95:95
Key62=65506:0
Key63=65450:42
Key64=65511:0
Key64=65032:0
Key65=32:32
Key66=65509:0
Key67=65470:0
@ -200,7 +200,7 @@ Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65273:0
Key77=65407:0
Key78=65300:0
Key79=65463:55
Key80=65464:56
@ -215,8 +215,8 @@ Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65454:46
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=62:62
Key95=65480:0
Key96=65481:0
@ -237,33 +237,33 @@ Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=0:0
Key114=269025049:0
Key115=65515:0
Key116=65312:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=65513:0
Key126=65469:61
Key127=65515:0
Key128=65517:0
Key129=269025170:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=269025166:0
Key133=0:0
Key134=0:0
Key135=65382:0
Key136=65381:0
Key135=0:0
Key136=0:0
Key137=0:0
[altgr]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=185:185
Key11=64:64
@ -299,7 +299,7 @@ Key40=240:240
Key41=496:273
Key42=959:331
Key43=689:295
Key44=106:106
Key44=65121:0
Key45=930:312
Key46=435:322
Key47=65105:180
@ -347,9 +347,9 @@ Key88=65433:0
Key89=65435:0
Key90=65438:0
Key91=65439:0
Key92=0:0
Key93=65406:0
Key94=124:124
Key92=65377:0
Key93=0:0
Key94=92:92
Key95=65480:0
Key96=65481:0
Key97=65360:0
@ -369,33 +369,165 @@ Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=0:0
Key114=269025049:0
Key115=65515:0
Key116=65312:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=0:0
Key126=65469:61
Key127=0:0
Key128=0:0
Key129=269025170:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=269025166:0
Key133=0:0
Key134=0:0
Key135=65382:0
Key136=65381:0
Key135=0:0
Key136=0:0
Key137=0:0
[shiftaltgr]
Key8=65406:0
Key9=65307:27
Key10=161:161
Key11=2755:8539
Key12=163:163
Key13=36:36
Key14=2756:8540
Key15=2757:8541
Key16=2758:8542
Key17=2761:8482
Key18=177:177
Key19=176:176
Key20=191:191
Key21=65116:731
Key22=65288:8
Key23=65056:0
Key24=2009:937
Key25=419:321
Key26=162:162
Key27=174:174
Key28=940:358
Key29=165:165
Key30=2300:8593
Key31=697:305
Key32=216:216
Key33=222:222
Key34=65112:176
Key35=65108:175
Key36=65293:13
Key37=65507:0
Key38=198:198
Key39=167:167
Key40=208:208
Key41=170:170
Key42=957:330
Key43=673:294
Key44=65122:0
Key45=38:38
Key46=419:321
Key47=65113:733
Key48=65114:711
Key49=172:172
Key50=65505:0
Key51=65109:728
Key52=60:60
Key53=62:62
Key54=169:169
Key55=2768:8216
Key56=2769:8217
Key57=78:78
Key58=186:186
Key59=215:215
Key60=247:247
Key61=65110:729
Key62=65506:0
Key63=65450:42
Key64=65032:0
Key65=32:32
Key66=65509:0
Key67=65470:0
Key68=65471:0
Key69=65472:0
Key70=65473:0
Key71=65474:0
Key72=65475:0
Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65407:0
Key78=65300:0
Key79=65463:55
Key80=65464:56
Key81=65465:57
Key82=65453:45
Key83=65460:52
Key84=65461:53
Key85=65462:54
Key86=65451:43
Key87=65457:49
Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65454:46
Key92=65377:0
Key93=0:0
Key94=92:92
Key95=65480:0
Key96=65481:0
Key97=65360:0
Key98=65362:0
Key99=65365:0
Key100=65361:0
Key101=0:0
Key102=65363:0
Key103=65367:0
Key104=65364:0
Key105=65366:0
Key106=65379:0
Key107=65535:127
Key108=65421:13
Key109=65508:0
Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=269025049:0
Key115=65515:0
Key116=65312:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=65513:0
Key126=65469:61
Key127=65515:0
Key128=65517:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=0:0
Key134=0:0
Key135=0:0
Key136=0:0
Key137=0:0
[capslock]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=49:49
Key11=50:50
@ -479,8 +611,8 @@ Key88=65433:0
Key89=65435:0
Key90=65438:0
Key91=65439:0
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=60:60
Key95=65480:0
Key96=65481:0
@ -501,33 +633,32 @@ Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=0:0
Key114=269025049:0
Key115=65515:0
Key116=65312:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=0:0
Key126=65469:61
Key127=0:0
Key128=0:0
Key129=269025170:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=269025166:0
Key133=0:0
Key134=0:0
Key135=65382:0
Key136=65381:0
Key135=0:0
Key136=0:0
Key137=0:0
[shiftcapslock]
Key8=0:0
Key8=65406:0
Key9=65307:27
Key10=33:33
Key11=34:34
@ -583,7 +714,7 @@ Key60=58:58
Key61=95:95
Key62=65506:0
Key63=65450:42
Key64=65511:0
Key64=65032:0
Key65=32:32
Key66=65509:0
Key67=65470:0
@ -596,7 +727,7 @@ Key73=65476:0
Key74=65477:0
Key75=65478:0
Key76=65479:0
Key77=65273:0
Key77=65407:0
Key78=65300:0
Key79=65463:55
Key80=65464:56
@ -611,8 +742,8 @@ Key88=65458:50
Key89=65459:51
Key90=65456:48
Key91=65454:46
Key92=0:0
Key93=65406:0
Key92=65377:0
Key93=0:0
Key94=62:62
Key95=65480:0
Key96=65481:0
@ -633,27 +764,28 @@ Key110=65299:0
Key111=65377:0
Key112=65455:47
Key113=65027:0
Key114=0:0
Key114=269025049:0
Key115=65515:0
Key116=65312:0
Key117=65383:0
Key118=0:0
Key119=0:0
Key120=0:0
Key121=0:0
Key122=0:0
Key117=0:0
Key118=269025153:0
Key119=269025093:0
Key120=269025094:0
Key121=269025095:0
Key122=269025096:0
Key123=0:0
Key124=65027:0
Key125=65513:0
Key126=65469:61
Key127=65515:0
Key128=65517:0
Key129=269025170:0
Key129=0:0
Key130=0:0
Key131=0:0
Key132=0:0
Key133=269025166:0
Key133=0:0
Key134=0:0
Key135=65382:0
Key136=65381:0
Key135=0:0
Key136=0:0
Key137=0:0

@ -1 +1 @@
Subproject commit de6a45cba607b902da704304fa3de8ddd3d15239
Subproject commit 61f6e92ecdfd057215da7932b6afefcbfa928446

@ -129,6 +129,7 @@ struct xrdp_sec
void *encrypt_fips_info;
void *decrypt_fips_info;
void *sign_fips_info;
int is_security_header_present; /* boolean */
};
/* channel */

@ -906,7 +906,8 @@ xrdp_mcs_send_connect_response(struct xrdp_mcs *self)
int APP_CC
xrdp_mcs_incoming(struct xrdp_mcs *self)
{
int i;
int index;
DEBUG((" in xrdp_mcs_incoming"));
if (xrdp_mcs_recv_connect_initial(self) != 0)
@ -945,7 +946,7 @@ xrdp_mcs_incoming(struct xrdp_mcs *self)
return 1;
}
for (i = 0; i < self->channel_list->count + 2; i++)
for (index = 0; index < self->channel_list->count + 2; index++)
{
if (xrdp_mcs_recv_cjrq(self) != 0)
{
@ -953,7 +954,7 @@ xrdp_mcs_incoming(struct xrdp_mcs *self)
}
if (xrdp_mcs_send_cjcf(self, self->userid,
self->userid + MCS_USERCHANNEL_BASE + i) != 0)
self->userid + MCS_USERCHANNEL_BASE + index) != 0)
{
return 1;
}

@ -185,8 +185,6 @@ static const tui8 g_fips_ivec[8] =
0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF
};
static int is_security_header_present = 1; /* next packet should contain security header? */
/*****************************************************************************/
static void APP_CC
hex_str_to_bin(char *in, char *out, int out_len)
@ -432,42 +430,44 @@ xrdp_sec_create(struct xrdp_rdp *owner, struct trans *trans)
{
struct xrdp_sec *self;
DEBUG((" in xrdp_sec_create"));
self = (struct xrdp_sec *) g_malloc(sizeof(struct xrdp_sec), 1);
self->rdp_layer = owner;
self->crypt_method = CRYPT_METHOD_NONE; /* set later */
self->crypt_level = CRYPT_LEVEL_NONE;
self->mcs_layer = xrdp_mcs_create(self, trans, &(self->client_mcs_data),
&(self->server_mcs_data));
self->fastpath_layer = xrdp_fastpath_create(self, trans);
self->chan_layer = xrdp_channel_create(self, self->mcs_layer);
DEBUG((" out xrdp_sec_create"));
return self;
DEBUG((" in xrdp_sec_create"));
self = (struct xrdp_sec *) g_malloc(sizeof(struct xrdp_sec), 1);
self->rdp_layer = owner;
self->crypt_method = CRYPT_METHOD_NONE; /* set later */
self->crypt_level = CRYPT_LEVEL_NONE;
self->mcs_layer = xrdp_mcs_create(self, trans, &(self->client_mcs_data),
&(self->server_mcs_data));
self->fastpath_layer = xrdp_fastpath_create(self, trans);
self->chan_layer = xrdp_channel_create(self, self->mcs_layer);
self->is_security_header_present = 1;
DEBUG((" out xrdp_sec_create"));
return self;
}
/*****************************************************************************/
void APP_CC
xrdp_sec_delete(struct xrdp_sec *self) {
if (self == 0) {
g_writeln("xrdp_sec_delete: indata is null");
return;
}
xrdp_channel_delete(self->chan_layer);
xrdp_mcs_delete(self->mcs_layer);
xrdp_fastpath_delete(self->fastpath_layer);
ssl_rc4_info_delete(self->decrypt_rc4_info); /* TODO clear all data */
ssl_rc4_info_delete(self->encrypt_rc4_info); /* TODO clear all data */
ssl_des3_info_delete(self->decrypt_fips_info);
ssl_des3_info_delete(self->encrypt_fips_info);
ssl_hmac_info_delete(self->sign_fips_info);
g_free(self->client_mcs_data.data);
g_free(self->server_mcs_data.data);
/* Crypto information must always be cleared */
g_memset(self, 0, sizeof(struct xrdp_sec));
g_free(self);
xrdp_sec_delete(struct xrdp_sec *self)
{
if (self == 0)
{
g_writeln("xrdp_sec_delete: self is null");
return;
}
xrdp_channel_delete(self->chan_layer);
xrdp_mcs_delete(self->mcs_layer);
xrdp_fastpath_delete(self->fastpath_layer);
ssl_rc4_info_delete(self->decrypt_rc4_info); /* TODO clear all data */
ssl_rc4_info_delete(self->encrypt_rc4_info); /* TODO clear all data */
ssl_des3_info_delete(self->decrypt_fips_info);
ssl_des3_info_delete(self->encrypt_fips_info);
ssl_hmac_info_delete(self->sign_fips_info);
g_free(self->client_mcs_data.data);
g_free(self->server_mcs_data.data);
/* Crypto information must always be cleared */
g_memset(self, 0, sizeof(struct xrdp_sec));
g_free(self);
}
/*****************************************************************************/
@ -490,7 +490,6 @@ xrdp_sec_init(struct xrdp_sec *self, struct stream *s)
}
else
{
// s_push_layer(s, sec_hdr, 4);
}
return 0;
@ -1209,7 +1208,7 @@ xrdp_sec_recv(struct xrdp_sec *self, struct stream *s, int *chan)
}
if (!is_security_header_present)
if (!(self->is_security_header_present))
{
return 0;
}
@ -1326,7 +1325,8 @@ xrdp_sec_recv(struct xrdp_sec *self, struct stream *s, int *chan)
if (self->crypt_level == CRYPT_LEVEL_NONE
&& self->crypt_method == CRYPT_METHOD_NONE)
{
is_security_header_present = 0; /* in tls mode, no more security header from now on */
/* in tls mode, no more security header from now on */
self->is_security_header_present = 0;
}
DEBUG((" out xrdp_sec_recv"));

@ -1297,12 +1297,16 @@ lfreerdp_pointer_cached(rdpContext *context,
mod->pointer_cache[index].bpp);
}
static void DEFAULT_CC lfreerdp_polygon_cb(rdpContext* context, POLYGON_CB_ORDER* polygon_cb)
/******************************************************************************/
static void DEFAULT_CC
lfreerdp_polygon_cb(rdpContext* context, POLYGON_CB_ORDER* polygon_cb)
{
LLOGLN(0, ("lfreerdp_polygon_sc called:- not supported!!!!!!!!!!!!!!!!!!!!"));
}
static void DEFAULT_CC lfreerdp_polygon_sc(rdpContext* context, POLYGON_SC_ORDER* polygon_sc)
/******************************************************************************/
static void DEFAULT_CC
lfreerdp_polygon_sc(rdpContext* context, POLYGON_SC_ORDER* polygon_sc)
{
struct mod *mod;
int i, npoints;
@ -1351,7 +1355,9 @@ static void DEFAULT_CC lfreerdp_polygon_sc(rdpContext* context, POLYGON_SC_ORDER
}
}
static void DEFAULT_CC lfreerdp_syncronize(rdpContext* context)
/******************************************************************************/
static void DEFAULT_CC
lfreerdp_syncronize(rdpContext* context)
{
struct mod *mod;
mod = ((struct mod_context *)context)->modi;
@ -1398,17 +1404,41 @@ lfreerdp_pre_connect(freerdp *instance)
instance->settings->glyph_cache = true;
/* GLYPH_SUPPORT_FULL and GLYPH_SUPPORT_PARTIAL seem to be the same */
instance->settings->glyphSupportLevel = GLYPH_SUPPORT_FULL;
instance->settings->order_support[NEG_GLYPH_INDEX_INDEX] = 1;
instance->settings->order_support[NEG_FAST_GLYPH_INDEX] = 0;
instance->settings->order_support[NEG_FAST_INDEX_INDEX] = 0;
instance->settings->order_support[NEG_SCRBLT_INDEX] = 1;
instance->settings->order_support[NEG_SAVEBITMAP_INDEX] = 0;
instance->settings->bitmap_cache = 1;
instance->settings->order_support[NEG_DSTBLT_INDEX] = 1; /* 0x00 */
instance->settings->order_support[NEG_PATBLT_INDEX] = 1;
instance->settings->order_support[NEG_SCRBLT_INDEX] = 1;
instance->settings->order_support[NEG_MEMBLT_INDEX] = 1;
instance->settings->order_support[NEG_MEMBLT_V2_INDEX] = 1;
instance->settings->order_support[NEG_MEM3BLT_INDEX] = 0;
instance->settings->order_support[NEG_ATEXTOUT_INDEX] = 0;
instance->settings->order_support[NEG_AEXTTEXTOUT_INDEX] = 0;
instance->settings->order_support[NEG_DRAWNINEGRID_INDEX] = 0;
instance->settings->order_support[NEG_LINETO_INDEX] = 1; /* 0x08 */
instance->settings->order_support[NEG_MULTI_DRAWNINEGRID_INDEX] = 0;
instance->settings->order_support[NEG_OPAQUE_RECT_INDEX] = 1;
instance->settings->order_support[NEG_SAVEBITMAP_INDEX] = 0;
instance->settings->order_support[NEG_WTEXTOUT_INDEX] = 0;
instance->settings->order_support[NEG_MEMBLT_V2_INDEX] = 1;
instance->settings->order_support[NEG_MEM3BLT_V2_INDEX] = 0;
instance->settings->order_support[NEG_MULTIDSTBLT_INDEX] = 0;
instance->settings->order_support[NEG_MULTIPATBLT_INDEX] = 0; /* 0x10 */
instance->settings->order_support[NEG_MULTISCRBLT_INDEX] = 0;
instance->settings->order_support[NEG_MULTIOPAQUERECT_INDEX] = 0;
instance->settings->order_support[NEG_FAST_INDEX_INDEX] = 0;
instance->settings->order_support[NEG_POLYGON_SC_INDEX] = 0;
instance->settings->order_support[NEG_POLYGON_CB_INDEX] = 0;
instance->settings->order_support[NEG_POLYLINE_INDEX] = 0;
/* 0x17 missing */
instance->settings->order_support[NEG_FAST_GLYPH_INDEX] = 0; /* 0x18 */
instance->settings->order_support[NEG_ELLIPSE_SC_INDEX] = 0;
instance->settings->order_support[NEG_ELLIPSE_CB_INDEX] = 0;
instance->settings->order_support[NEG_GLYPH_INDEX_INDEX] = 1;
instance->settings->order_support[NEG_GLYPH_WEXTTEXTOUT_INDEX] = 0;
instance->settings->order_support[NEG_GLYPH_WLONGTEXTOUT_INDEX] = 0;
instance->settings->order_support[NEG_GLYPH_WLONGEXTTEXTOUT_INDEX] = 0;
/* 0x1F missing*/
instance->settings->bitmap_cache = 1;
instance->settings->bitmapCacheV2NumCells = 3; // 5;
instance->settings->bitmapCacheV2CellInfo[0].numEntries = 600; // 0x78;
instance->settings->bitmapCacheV2CellInfo[0].persistent = 0;
@ -1422,12 +1452,6 @@ lfreerdp_pre_connect(freerdp *instance)
instance->settings->bitmapCacheV2CellInfo[4].persistent = 0;
instance->settings->bitmap_cache_v3 = 1;
instance->settings->order_support[NEG_MULTIDSTBLT_INDEX] = 0;
instance->settings->order_support[NEG_MULTIPATBLT_INDEX] = 0;
instance->settings->order_support[NEG_MULTISCRBLT_INDEX] = 0;
instance->settings->order_support[NEG_MULTIOPAQUERECT_INDEX] = 0;
instance->settings->order_support[NEG_POLYLINE_INDEX] = 0;
instance->settings->username = g_strdup(mod->username);
instance->settings->password = g_strdup(mod->password);

@ -9,7 +9,8 @@ EXTRA_DIST = \
rail.h \
sound.h \
xcommon.h \
mlog.h
mlog.h \
chansrv_common.h
EXTRA_DEFINES =
EXTRA_INCLUDES =
@ -48,7 +49,8 @@ xrdp_chansrv_SOURCES = \
drdynvc.c \
chansrv_fuse.c \
irp.c \
fifo.c
fifo.c \
chansrv_common.c
xrdp_chansrv_LDFLAGS = \
$(EXTRA_FLAGS)

@ -0,0 +1,73 @@
/**
* xrdp: A Remote Desktop Protocol server.
*
* Copyright (C) Laxmikant Rashinkar 2009-2014
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "chansrv_common.h"
/**
* Assemble fragmented incoming packets into one stream
*
* @param src stream that contains partial data
* @param dest stream that contains entire data
* @param chan_flags fragmentation flags
* @param length bytes in this packet
* @param total_length total length of assembled packet
*
* @return 1 when all data has been assembled, 0 otherwise
*
* NOTE: it is the responsibility of the caller to free dest stream
****************************************************************************/
int
read_entire_packet(struct stream *src, struct stream **dest, int chan_flags,
int length, int total_length)
{
struct stream *ls;
if ((chan_flags & 3) == 3)
{
/* packet not fragmented */
xstream_new(ls, total_length);
xstream_copyin(ls, src->p, length);
ls->p = ls->data;
*dest = ls;
return 1;
}
/* is this the first fragmented packet? */
if (chan_flags & 1)
{
xstream_new(ls, total_length);
*dest = ls;
}
else
{
ls = *dest;
}
xstream_copyin(ls, src->p, length);
/* in last packet, chan_flags & 0x02 will be true */
if (chan_flags & 0x02)
{
/* rewind stream */
ls->p = ls->data;
return 1;
}
return 0;
}

@ -0,0 +1,27 @@
/**
* xrdp: A Remote Desktop Protocol server.
*
* Copyright (C) Laxmikant Rashinkar 2009-2014
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _CHANSRV_COMMON_H
#define _CHANSRV_COMMON_H
#include "parse.h"
int read_entire_packet(struct stream *src, struct stream **dest, int chan_flags, int length, int total_length);
#endif

@ -71,7 +71,7 @@ PA_MODULE_USAGE(
#define DEFAULT_SOURCE_NAME "xrdp-source"
#define DEFAULT_LATENCY_TIME 10
#define MAX_LATENCY_USEC (PA_USEC_PER_SEC * 2)
#define MAX_LATENCY_USEC 1000
#define CHANSRV_PORT_STR "/tmp/.xrdp/xrdp_chansrv_audio_in_socket_%d"
struct userdata {
@ -144,6 +144,32 @@ static void source_update_requested_latency_cb(pa_source *s) {
u->block_usec = pa_source_get_requested_latency_within_thread(s);
}
static int lsend(int fd, char *data, int bytes) {
int sent = 0;
int error;
while (sent < bytes) {
error = send(fd, data + sent, bytes - sent, 0);
if (error < 1) {
return error;
}
sent += error;
}
return sent;
}
static int lrecv(int fd, char *data, int bytes) {
int recved = 0;
int error;
while (recved < bytes) {
error = recv(fd, data + recved, bytes - recved, 0);
if (error < 1) {
return error;
}
recved += error;
}
return recved;
}
static int data_get(struct userdata *u, pa_memchunk *chunk) {
int fd;
@ -190,7 +216,7 @@ static int data_get(struct userdata *u, pa_memchunk *chunk) {
buf[9] = 0;
buf[10] = 0;
send(u->fd, buf, 11, 0);
lsend(u->fd, buf, 11);
u->want_src_data = 1;
pa_log_debug("###### started recording");
}
@ -208,10 +234,10 @@ static int data_get(struct userdata *u, pa_memchunk *chunk) {
buf[9] = (unsigned char) chunk->length;
buf[10] = (unsigned char) ((chunk->length >> 8) & 0xff);
send(u->fd, buf, 11, 0);
lsend(u->fd, buf, 11);
/* read length of data available */
recv(u->fd, ubuf, 2, 0);
lrecv(u->fd, (char *) ubuf, 2);
bytes = ((ubuf[1] << 8) & 0xff00) | (ubuf[0] & 0xff);
if (bytes == 0) {
@ -220,7 +246,7 @@ static int data_get(struct userdata *u, pa_memchunk *chunk) {
}
/* get data */
bytes = recv(u->fd, data, bytes, 0);
bytes = lrecv(u->fd, data, bytes);
pa_memblock_release(chunk->memblock);
@ -272,7 +298,7 @@ static void thread_func(void *userdata) {
buf[9] = 0;
buf[10] = 0;
send(u->fd, buf, 11, 0);
lsend(u->fd, buf, 11);
u->want_src_data = 0;
pa_log_debug("###### stopped recording");
}

@ -43,9 +43,11 @@ static struct trans *g_audio_c_trans_in = 0; /* connection */
static int g_training_sent_time = 0;
static int g_cBlockNo = 0;
static int g_bytes_in_stream = 0;
static FIFO in_fifo;
static FIFO g_in_fifo;
static int g_bytes_in_fifo = 0;
static struct stream *g_stream_inp = NULL;
static struct stream *g_stream_incoming_packet = NULL;
#define BBUF_SIZE (1024 * 8)
char g_buffer[BBUF_SIZE];
@ -145,23 +147,18 @@ static int g_client_input_format_index = 0;
static int g_server_input_format_index = 0;
/* microphone related */
static int APP_CC
sound_send_server_input_formats(void);
static int APP_CC
sound_process_input_format(int aindex, int wFormatTag,
static int APP_CC sound_send_server_input_formats(void);
static int APP_CC sound_process_input_format(int aindex, int wFormatTag,
int nChannels, int nSamplesPerSec,
int nAvgBytesPerSec, int nBlockAlign,
int wBitsPerSample, int cbSize, char *data);
static int APP_CC
sound_process_input_formats(struct stream *s, int size);
static int APP_CC
sound_input_start_recording(void);
static int APP_CC
sound_input_stop_recording(void);
static int APP_CC
sound_process_input_data(struct stream *s, int bytes);
static int DEFAULT_CC
sound_sndsrvr_source_data_in(struct trans *trans);
static int APP_CC sound_process_input_formats(struct stream *s, int size);
static int APP_CC sound_input_start_recording(void);
static int APP_CC sound_input_stop_recording(void);
static int APP_CC sound_process_input_data(struct stream *s, int bytes);
static int DEFAULT_CC sound_sndsrvr_source_data_in(struct trans *trans);
static int APP_CC sound_start_source_listener();
static int APP_CC sound_start_sink_listener();
/*****************************************************************************/
static int APP_CC
@ -681,36 +678,21 @@ sound_sndsrvr_source_conn_in(struct trans *trans, struct trans *new_trans)
int APP_CC
sound_init(void)
{
char port[256];
LOG(0, ("sound_init:"));
g_memset(g_sent_flag, 0, sizeof(g_sent_flag));
g_stream_incoming_packet = NULL;
/* init sound output */
sound_send_server_output_formats();
g_audio_l_trans_out = trans_create(TRANS_MODE_UNIX, 128 * 1024, 8192);
g_audio_l_trans_out->is_term = g_is_term;
g_snprintf(port, 255, CHANSRV_PORT_OUT_STR, g_display_num);
g_audio_l_trans_out->trans_conn_in = sound_sndsrvr_sink_conn_in;
if (trans_listen(g_audio_l_trans_out, port) != 0)
LOG(0, ("sound_init: trans_listen failed"));
sound_start_sink_listener();
/* init sound input */
sound_send_server_input_formats();
g_audio_l_trans_in = trans_create(TRANS_MODE_UNIX, 128 * 1024, 8192);
g_audio_l_trans_in->is_term = g_is_term;
g_snprintf(port, 255, CHANSRV_PORT_IN_STR, g_display_num);
g_audio_l_trans_in->trans_conn_in = sound_sndsrvr_source_conn_in;
if (trans_listen(g_audio_l_trans_in, port) != 0)
LOG(0, ("sound_init: trans_listen failed"));
sound_start_source_listener();
/* save data from sound_server_source */
fifo_init(&in_fifo, 100);
fifo_init(&g_in_fifo, 100);
return 0;
}
@ -744,7 +726,7 @@ sound_deinit(void)
g_audio_c_trans_in = 0;
}
fifo_deinit(&in_fifo);
fifo_deinit(&g_in_fifo);
return 0;
}
@ -759,31 +741,39 @@ sound_data_in(struct stream *s, int chan_id, int chan_flags, int length,
{
int code;
int size;
int ok_to_free = 1;
in_uint8(s, code);
in_uint8s(s, 1);
in_uint16_le(s, size);
if (!read_entire_packet(s, &g_stream_incoming_packet, chan_flags,
length, total_length))
{
return 0;
}
in_uint8(g_stream_incoming_packet, code);
in_uint8s(g_stream_incoming_packet, 1);
in_uint16_le(g_stream_incoming_packet, size);
switch (code)
{
case SNDC_WAVECONFIRM:
sound_process_wave_confirm(s, size);
sound_process_wave_confirm(g_stream_incoming_packet, size);
break;
case SNDC_TRAINING:
sound_process_training(s, size);
sound_process_training(g_stream_incoming_packet, size);
break;
case SNDC_FORMATS:
sound_process_output_formats(s, size);
sound_process_output_formats(g_stream_incoming_packet, size);
break;
case SNDC_REC_NEGOTIATE:
sound_process_input_formats(s, size);
sound_process_input_formats(g_stream_incoming_packet, size);
break;
case SNDC_REC_DATA:
sound_process_input_data(s, size);
sound_process_input_data(g_stream_incoming_packet, size);
ok_to_free = 0;
break;
default:
@ -791,6 +781,12 @@ sound_data_in(struct stream *s, int chan_id, int chan_flags, int length,
break;
}
if (ok_to_free && g_stream_incoming_packet)
{
xstream_free(g_stream_incoming_packet);
g_stream_incoming_packet = NULL;
}
return 0;
}
@ -834,7 +830,6 @@ sound_get_wait_objs(tbus *objs, int *count, int *timeout)
int APP_CC
sound_check_wait_objs(void)
{
if (g_audio_l_trans_out != 0)
{
if (trans_check_wait_objs(g_audio_l_trans_out) != 0)
@ -852,6 +847,7 @@ sound_check_wait_objs(void)
LOG(10, ("sound_check_wait_objs: g_audio_c_trans_out returned non-zero"));
trans_delete(g_audio_c_trans_out);
g_audio_c_trans_out = 0;
sound_start_sink_listener();
}
}
@ -872,6 +868,7 @@ sound_check_wait_objs(void)
LOG(10, ("sound_check_wait_objs: g_audio_c_trans_in returned non-zero"));
trans_delete(g_audio_c_trans_in);
g_audio_c_trans_in = 0;
sound_start_source_listener();
}
}
@ -1045,9 +1042,12 @@ sound_input_start_recording(void)
{
struct stream* s;
LOG(10, ("sound_input_start_recording:"));
/* if there is any data in FIFO, discard it */
while ((s = (struct stream *) fifo_remove(&in_fifo)) != NULL)
while ((s = (struct stream *) fifo_remove(&g_in_fifo)) != NULL)
xstream_free(s);
g_bytes_in_fifo = 0;
xstream_new(s, 1024);
@ -1079,6 +1079,8 @@ sound_input_stop_recording(void)
{
struct stream* s;
LOG(10, ("sound_input_stop_recording:"));
xstream_new(s, 1024);
/*
@ -1102,19 +1104,25 @@ sound_input_stop_recording(void)
* Process data: xrdp <- client
*****************************************************************************/
static unsigned char data = 0;
static int APP_CC
sound_process_input_data(struct stream *s, int bytes)
{
struct stream *ls;
LOG(0, ("sound_process_input_data: bytes %d g_bytes_in_fifo %d",
bytes, g_bytes_in_fifo));
/* cap data in fifo */
if (g_bytes_in_fifo > 8 * 1024)
{
return 0;
}
xstream_new(ls, bytes);
memcpy(ls->data, s->p, bytes);
g_memcpy(ls->data, s->p, bytes);
ls->p += bytes;
s_mark_end(ls);
fifo_insert(&in_fifo, (void *) ls);
fifo_insert(&g_in_fifo, (void *) ls);
g_bytes_in_fifo += bytes;
return 0;
}
@ -1147,6 +1155,7 @@ sound_sndsrvr_source_data_in(struct trans *trans)
ts->p = ts->data + 8;
in_uint8(ts, cmd);
in_uint16_le(ts, bytes_req);
LOG(10, ("sound_sndsrvr_source_data_in: bytes_req %d", bytes_req));
xstream_new(s, bytes_req + 2);
@ -1158,7 +1167,14 @@ sound_sndsrvr_source_data_in(struct trans *trans)
while (bytes_read < bytes_req)
{
if (g_stream_inp == NULL)
g_stream_inp = (struct stream *) fifo_remove(&in_fifo);
{
g_stream_inp = (struct stream *) fifo_remove(&g_in_fifo);
if (g_stream_inp != NULL)
{
g_bytes_in_fifo -= g_stream_inp->size;
LOG(10, (" g_bytes_in_fifo %d", g_bytes_in_fifo));
}
}
if (g_stream_inp == NULL)
{
@ -1212,3 +1228,38 @@ sound_sndsrvr_source_data_in(struct trans *trans)
return 0;
}
/**
* Start a listener for microphone redirection connections
*****************************************************************************/
static int APP_CC
sound_start_source_listener()
{
char port[1024];
g_audio_l_trans_in = trans_create(TRANS_MODE_UNIX, 128 * 1024, 8192);
g_audio_l_trans_in->is_term = g_is_term;
g_snprintf(port, 255, CHANSRV_PORT_IN_STR, g_display_num);
g_audio_l_trans_in->trans_conn_in = sound_sndsrvr_source_conn_in;
if (trans_listen(g_audio_l_trans_in, port) != 0)
LOG(0, ("trans_listen failed"));
return 0;
}
/**
* Start a listener for speaker redirection connections
*****************************************************************************/
static int APP_CC
sound_start_sink_listener()
{
char port[1024];
g_audio_l_trans_out = trans_create(TRANS_MODE_UNIX, 128 * 1024, 8192);
g_audio_l_trans_out->is_term = g_is_term;
g_snprintf(port, 255, CHANSRV_PORT_OUT_STR, g_display_num);
g_audio_l_trans_out->trans_conn_in = sound_sndsrvr_sink_conn_in;
if (trans_listen(g_audio_l_trans_out, port) != 0)
LOG(0, ("trans_listen failed"));
return 0;
}

@ -460,6 +460,7 @@ session_start_fork(int width, int height, int bpp, char *username,
char screen[32];
char text[256];
char passwd_file[256];
char *pfile;
char **pp1 = (char **)NULL;
struct session_chain *temp = (struct session_chain *)NULL;
struct list *xserver_params = (struct list *)NULL;
@ -633,10 +634,14 @@ session_start_fork(int width, int height, int bpp, char *username,
}
else if (xpid == 0) /* child */
{
env_set_user(username, passwd_file, display,
pfile = 0;
if (type == SESMAN_SESSION_TYPE_XVNC)
{
pfile = passwd_file;
}
env_set_user(username, pfile, display,
g_cfg->session_variables1,
g_cfg->session_variables2);
env_check_password_file(passwd_file, password);
g_snprintf(text, 255, "%d", g_cfg->sess.max_idle_time);
g_setenv("XRDP_SESMAN_MAX_IDLE_TIME", text, 1);
@ -676,6 +681,7 @@ session_start_fork(int width, int height, int bpp, char *username,
}
else if (type == SESMAN_SESSION_TYPE_XVNC)
{
env_check_password_file(passwd_file, password);
xserver_params = list_create();
xserver_params->auto_free = 1;

@ -51,6 +51,7 @@ long DEFAULT_CC
auth_userpass(char *user, char *pass, int *errorcode)
{
const char *encr;
const char *epass;
struct passwd *spw;
struct spwd *stp;
@ -84,8 +85,12 @@ auth_userpass(char *user, char *pass, int *errorcode)
/* old system with only passwd */
encr = spw->pw_passwd;
}
return (strcmp(encr, crypt(pass, encr)) == 0);
epass = crypt(pass, encr);
if (epass == 0)
{
return 0;
}
return (strcmp(encr, epass) == 0);
}
/******************************************************************************/

@ -118,22 +118,31 @@ auth_userpass(char *user, char *pass, int *errorcode)
if (error != PAM_SUCCESS)
{
if(errorcode!=NULL){
*errorcode = error ;
}
if (errorcode != NULL)
{
*errorcode = error;
}
g_printf("pam_start failed: %s\r\n", pam_strerror(auth_info->ph, error));
pam_end(auth_info->ph, error);
g_free(auth_info);
return 0;
}
error = pam_set_item(auth_info->ph, PAM_TTY, service_name);
if (error != PAM_SUCCESS)
{
g_printf("pam_set_item failed: %s\r\n",
pam_strerror(auth_info->ph, error));
}
error = pam_authenticate(auth_info->ph, 0);
if (error != PAM_SUCCESS)
{
if(errorcode!=NULL){
*errorcode = error ;
}
if (errorcode != NULL)
{
*errorcode = error;
}
g_printf("pam_authenticate failed: %s\r\n",
pam_strerror(auth_info->ph, error));
pam_end(auth_info->ph, error);
@ -150,9 +159,10 @@ auth_userpass(char *user, char *pass, int *errorcode)
if (error != PAM_SUCCESS)
{
if(errorcode!=NULL){
*errorcode = error ;
}
if (errorcode != NULL)
{
*errorcode = error;
}
g_printf("pam_acct_mgmt failed: %s\r\n",
pam_strerror(auth_info->ph, error));
pam_end(auth_info->ph, error);

@ -979,6 +979,13 @@ lib_mod_connect(struct vnc *v)
v->sck_obj = g_create_wait_obj_from_socket(v->sck, 0);
v->sck_closed = 0;
if (v->delay_ms > 0)
{
g_sprintf(text, "Waiting %d ms for VNC to start...", v->delay_ms);
v->server_msg(v, text, 0);
g_sleep(v->delay_ms);
}
g_sprintf(text, "VNC connecting to %s %s", v->ip, con_port);
v->server_msg(v, text, 0);
error = g_tcp_connect(v->sck, v->ip, con_port);
@ -1331,6 +1338,10 @@ lib_mod_set_param(struct vnc *v, char *name, char *value)
{
v->keylayout = g_atoi(value);
}
else if (g_strcasecmp(name, "delay_ms") == 0)
{
v->delay_ms = g_atoi(value);
}
return 0;
}

@ -115,4 +115,5 @@ struct vnc
char* clip_data;
int clip_data_size;
tbus sck_obj;
int delay_ms;
};

@ -1,36 +0,0 @@
moduledir := $(shell pkg-config xorg-server --variable moduledir)
all: allmake
allmake:
cd module; $(MAKE) $(MFLAGS)
cd xrdpdev; $(MAKE) $(MFLAGS)
cd xrdpkeyb; $(MAKE) $(MFLAGS)
cd xrdpmouse; $(MAKE) $(MFLAGS)
clean: allclean
allclean:
cd module; $(MAKE) clean
cd xrdpdev; $(MAKE) clean
cd xrdpkeyb; $(MAKE) clean
cd xrdpmouse; $(MAKE) clean
xinstall:
strip module/libxorgxrdp.so
strip xrdpdev/xrdpdev_drv.so
strip xrdpmouse/xrdpmouse_drv.so
strip xrdpkeyb/xrdpkeyb_drv.so
mkdir -p $(HOME)/xorg-modules/drivers $(HOME)/xorg-modules/input
cp module/libxorgxrdp.so $(HOME)/xorg-modules/
cp xrdpdev/xrdpdev_drv.so $(HOME)/xorg-modules/drivers/
cp xrdpmouse/xrdpmouse_drv.so $(HOME)/xorg-modules/input/
cp xrdpkeyb/xrdpkeyb_drv.so $(HOME)/xorg-modules/input/
install:
install --directory $(DESTDIR)$(moduledir) $(DESTDIR)$(moduledir)/drivers $(DESTDIR)$(moduledir)/input
install --mode=0644 --strip module/libxorgxrdp.so $(DESTDIR)$(moduledir)
install --mode=0644 --strip xrdpdev/xrdpdev_drv.so $(DESTDIR)$(moduledir)/drivers/
install --mode=0644 --strip xrdpmouse/xrdpmouse_drv.so $(DESTDIR)$(moduledir)/input/
install --mode=0644 --strip xrdpkeyb/xrdpkeyb_drv.so $(DESTDIR)$(moduledir)/input/

@ -0,0 +1,7 @@
EXTRA_DIST = bootstrap readme.txt
SUBDIRS = \
module \
xrdpdev \
xrdpkeyb \
xrdpmouse

@ -0,0 +1,36 @@
#!/bin/sh
which autoconf
if ! test $? -eq 0
then
echo "error, install autoconf"
exit 1
fi
which automake
if ! test $? -eq 0
then
echo "error, install automake"
exit 1
fi
which libtool
if ! test $? -eq 0
then
echo "error, install libtool"
exit 1
fi
which pkg-config
if ! test $? -eq 0
then
echo "error, install pkg-config"
exit 1
fi
touch configure.ac
touch NEWS
touch AUTHORS
touch README
touch ChangeLog
autoreconf -fvi

@ -0,0 +1,35 @@
# Process this file with autoconf to produce a configure script
AC_PREREQ(2.59)
AC_INIT([xrdpmod], [0.1.0], [xrdp-devel@lists.sourceforge.net])
AC_CONFIG_HEADERS(config_ac.h:config_ac-h.in)
AM_INIT_AUTOMAKE([1.6 foreign])
AC_PROG_CC
AC_C_CONST
AC_PROG_LIBTOOL
AM_CONDITIONAL(GOT_PREFIX, test "x${prefix}" != "xNONE"])
AC_CHECK_HEADER([xorg/xorg-server.h], [],
[AC_MSG_ERROR([please install xserver-xorg-dev or xorg-x11-server-sdk])])
PKG_CHECK_MODULES([XORG_SERVER], [xorg-server >= 0])
AC_SUBST([XORG_SERVER_CFLAGS])
AC_SUBST([XORG_SERVER_LIBS])
moduledir=`pkg-config xorg-server --variable=moduledir`
AC_SUBST([moduledir])
if test "x${prefix}" = "xNONE" ; then
sysconfdir="/etc";
fi
AC_CONFIG_FILES([Makefile
module/Makefile
xrdpdev/Makefile
xrdpkeyb/Makefile
xrdpmouse/Makefile
])
AC_OUTPUT

@ -1,60 +0,0 @@
OBJS = rdpDraw.o rdpPri.o rdpGC.o rdpFillSpans.o rdpSetSpans.o rdpPutImage.o \
rdpCopyArea.o rdpCopyPlane.o rdpPolyPoint.o rdpPolylines.o rdpPolySegment.o \
rdpPolyRectangle.o rdpPolyArc.o rdpFillPolygon.o rdpPolyFillRect.o \
rdpPolyFillArc.o rdpPolyText8.o rdpPolyText16.o rdpImageText8.o \
rdpImageText16.o rdpImageGlyphBlt.o rdpPolyGlyphBlt.o rdpPushPixels.o \
rdpCursor.o rdpMain.o rdpRandR.o rdpMisc.o rdpReg.o \
rdpComposite.o rdpGlyphs.o rdpPixmap.o rdpInput.o rdpClientCon.o rdpCapture.o \
rdpTrapezoids.o rdpXv.o rdpSimd.o
;OBJS += cpuid_x86.o i420_to_rgb32_x86_sse2.o yv12_to_rgb32_x86_sse2.o yuy2_to_rgb32_x86_sse2.o uyvy_to_rgb32_x86_sse2.o
;OBJS += cpuid_amd64.o i420_to_rgb32_amd64_sse2.o yv12_to_rgb32_amd64_sse2.o yuy2_to_rgb32_amd64_sse2.o uyvy_to_rgb32_amd64_sse2.o
CFLAGS = -g -O2 -Wall -fPIC -I/usr/include/xorg -I/usr/include/pixman-1 \
-I../../../common
;CFLAGS += -DSIMD_USE_ACCEL=1
LDFLAGS =
LIBS =
all: libxorgxrdp.so
libxorgxrdp.so: $(OBJS) Makefile
$(CC) -shared -o libxorgxrdp.so $(LDFLAGS) $(OBJS) $(LIBS)
clean:
rm -f $(OBJS) libxorgxrdp.so
cpuid_x86.o: x86/cpuid_x86.asm
yasm -f elf32 -g dwarf2 x86/cpuid_x86.asm
i420_to_rgb32_x86_sse2.o: x86/i420_to_rgb32_x86_sse2.asm
yasm -f elf32 -g dwarf2 x86/i420_to_rgb32_x86_sse2.asm
yv12_to_rgb32_x86_sse2.o: x86/yv12_to_rgb32_x86_sse2.asm
yasm -f elf32 -g dwarf2 x86/yv12_to_rgb32_x86_sse2.asm
yuy2_to_rgb32_x86_sse2.o: x86/yuy2_to_rgb32_x86_sse2.asm
yasm -f elf32 -g dwarf2 x86/yuy2_to_rgb32_x86_sse2.asm
uyvy_to_rgb32_x86_sse2.o: x86/uyvy_to_rgb32_x86_sse2.asm
yasm -f elf32 -g dwarf2 x86/uyvy_to_rgb32_x86_sse2.asm
cpuid_amd64.o: amd64/cpuid_amd64.asm
yasm -f elf64 -g dwarf2 amd64/cpuid_amd64.asm
i420_to_rgb32_amd64_sse2.o: amd64/i420_to_rgb32_amd64_sse2.asm
yasm -f elf64 -g dwarf2 amd64/i420_to_rgb32_amd64_sse2.asm
yv12_to_rgb32_amd64_sse2.o: amd64/yv12_to_rgb32_amd64_sse2.asm
yasm -f elf64 -g dwarf2 amd64/yv12_to_rgb32_amd64_sse2.asm
yuy2_to_rgb32_amd64_sse2.o: amd64/yuy2_to_rgb32_amd64_sse2.asm
yasm -f elf64 -g dwarf2 amd64/yuy2_to_rgb32_amd64_sse2.asm
uyvy_to_rgb32_amd64_sse2.o: amd64/uyvy_to_rgb32_amd64_sse2.asm
yasm -f elf64 -g dwarf2 amd64/uyvy_to_rgb32_amd64_sse2.asm

@ -0,0 +1,22 @@
EXTRA_DIST =
AM_CFLAGS = \
$(XORG_SERVER_CFLAGS) \
-I../../../common
libxorgxrdp_la_LTLIBRARIES = libxorgxrdp.la
libxorgxrdp_la_LDFLAGS = -module -avoid-version
libxorgxrdp_ladir = $(moduledir)
libxorgxrdp_la_SOURCES = rdpDraw.c rdpPri.c rdpGC.c rdpFillSpans.c \
rdpSetSpans.c rdpPutImage.c rdpCopyArea.c rdpCopyPlane.c rdpPolyPoint.c \
rdpPolylines.c rdpPolySegment.c rdpPolyRectangle.c rdpPolyArc.c \
rdpFillPolygon.c rdpPolyFillRect.c rdpPolyFillArc.c rdpPolyText8.c \
rdpPolyText16.c rdpImageText8.c rdpImageText16.c rdpImageGlyphBlt.c \
rdpPolyGlyphBlt.c rdpPushPixels.c rdpCursor.c rdpMain.c rdpRandR.c \
rdpMisc.c rdpReg.c rdpComposite.c rdpGlyphs.c rdpPixmap.c rdpInput.c \
rdpClientCon.c rdpCapture.c rdpTrapezoids.c rdpXv.c rdpSimd.c
libxorgxrdp_la_LIBADD =

@ -23,6 +23,9 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#define _RDP_H
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
#include <scrnintstr.h>
#include <gcstruct.h>
#include <mipointer.h>
@ -197,6 +200,10 @@ struct _rdpCounts
typedef int (*yuv_to_rgb32_proc)(unsigned char *yuvs, int width, int height, int *rgbs);
typedef int (*copy_box_proc)(char *s8, int src_stride,
char *d8, int dst_stride,
int width, int height);
/* move this to common header */
struct _rdpRec
{
@ -209,6 +216,7 @@ struct _rdpRec
int bitsPerPixel;
int Bpp;
int Bpp_mask;
char *pfbMemory_alloc;
char *pfbMemory;
ScreenPtr pScreen;
rdpDevPrivateKey privateKeyRecGC;
@ -277,6 +285,8 @@ struct _rdpRec
int xv_timer_schedualed;
OsTimerPtr xv_timer;
copy_box_proc a8r8g8b8_to_a8b8g8r8_box;
};
typedef struct _rdpRec rdpRec;
typedef struct _rdpRec * rdpPtr;

@ -24,6 +24,7 @@
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>
@ -34,6 +35,7 @@
#include "rdpClientCon.h"
#include "rdpReg.h"
#include "rdpMisc.h"
#include "rdpCapture.h"
#define LOG_LEVEL 1
#define LLOGLN(_level, _args) \
@ -63,7 +65,8 @@ rdpLimitRects(RegionPtr reg, int max_rects, BoxPtr *rects)
/******************************************************************************/
/* copy rects with no error checking */
static int
rdpCopyBox_a8r8g8b8_to_a8r8g8b8(void *src, int src_stride, int srcx, int srcy,
rdpCopyBox_a8r8g8b8_to_a8r8g8b8(rdpClientCon *clientCon,
void *src, int src_stride, int srcx, int srcy,
void *dst, int dst_stride, int dstx, int dsty,
BoxPtr rects, int num_rects)
{
@ -87,7 +90,7 @@ rdpCopyBox_a8r8g8b8_to_a8r8g8b8(void *src, int src_stride, int srcx, int srcy,
height = box->y2 - box->y1;
for (jndex = 0; jndex < height; jndex++)
{
memcpy(d8, s8, bytes);
g_memcpy(d8, s8, bytes);
d8 += dst_stride;
s8 += src_stride;
}
@ -101,7 +104,7 @@ rdpFillBox_yuvalp(int ax, int ay,
void *dst, int dst_stride)
{
dst = ((char *) dst) + (ay << 8) * (dst_stride >> 8) + (ax << 8);
memset(dst, 0, 64 * 64 * 4);
g_memset(dst, 0, 64 * 64 * 4);
return 0;
}
@ -174,13 +177,14 @@ rdpCopyBox_a8r8g8b8_to_yuvalp(int ax, int ay,
y = (r * 19595 + g * 38470 + b * 7471) >> 16;
u = (r * -11071 + g * -21736 + b * 32807) >> 16;
v = (r * 32756 + g * -27429 + b * -5327) >> 16;
y = y - 128;
y = max(y, -128);
u = max(u, -128);
v = max(v, -128);
y = min(y, 127);
u = min(u, 127);
v = min(v, 127);
u = u + 128;
v = v + 128;
y = max(y, 0);
u = max(u, 0);
v = max(v, 0);
y = min(y, 255);
u = min(u, 255);
v = min(v, 255);
*(yptr++) = y;
*(uptr++) = u;
*(vptr++) = v;
@ -194,53 +198,67 @@ rdpCopyBox_a8r8g8b8_to_yuvalp(int ax, int ay,
return 0;
}
/******************************************************************************/
int
a8r8g8b8_to_a8b8g8r8_box(char *s8, int src_stride,
char *d8, int dst_stride,
int width, int height)
{
int index;
int jndex;
int red;
int green;
int blue;
unsigned int *s32;
unsigned int *d32;
for (index = 0; index < height; index++)
{
s32 = (unsigned int *) s8;
d32 = (unsigned int *) d8;
for (jndex = 0; jndex < width; jndex++)
{
SPLITCOLOR32(red, green, blue, *s32);
*d32 = COLOR24(red, green, blue);
s32++;
d32++;
}
d8 += dst_stride;
s8 += src_stride;
}
return 0;
}
/******************************************************************************/
/* copy rects with no error checking */
static int
rdpCopyBox_a8r8g8b8_to_a8b8g8r8(void *src, int src_stride,
void *dst, int dst_stride,
rdpCopyBox_a8r8g8b8_to_a8b8g8r8(rdpClientCon *clientCon,
void *src, int src_stride, int srcx, int srcy,
void *dst, int dst_stride, int dstx, int dsty,
BoxPtr rects, int num_rects)
{
char *s8;
char *d8;
int index;
int jndex;
int kndex;
int bytes;
int width;
int height;
int red;
int green;
int blue;
BoxPtr box;
unsigned int *s32;
unsigned int *d32;
copy_box_proc copy_box;
copy_box = clientCon->dev->a8r8g8b8_to_a8b8g8r8_box;
for (index = 0; index < num_rects; index++)
{
box = rects + index;
s8 = ((char *) src) + box->y1 * src_stride;
s8 += box->x1 * 4;
d8 = ((char *) dst) + box->y1 * dst_stride;
d8 += box->x1 * 4;
s8 = ((char *) src) + (box->y1 - srcy) * src_stride;
s8 += (box->x1 - srcx) * 4;
d8 = ((char *) dst) + (box->y1 - dsty) * dst_stride;
d8 += (box->x1 - dstx) * 4;
bytes = box->x2 - box->x1;
bytes *= 4;
width = box->x2 - box->x1;
height = box->y2 - box->y1;
for (jndex = 0; jndex < height; jndex++)
{
s32 = (unsigned int *) s8;
d32 = (unsigned int *) d8;
for (kndex = 0; kndex < width; kndex++)
{
SPLITCOLOR32(red, green, blue, *s32);
*d32 = COLOR24(red, green, blue);
s32++;
d32++;
}
d8 += dst_stride;
s8 += src_stride;
}
copy_box(s8, src_stride, d8, dst_stride, width, height);
}
return 0;
}
@ -283,8 +301,8 @@ rdpCapture0(rdpClientCon *clientCon,
rect.x1 = 0;
rect.y1 = 0;
rect.x2 = min(dst_width, src_width);
rect.y2 = min(dst_height, src_height);
rect.x2 = RDPMIN(dst_width, src_width);
rect.y2 = RDPMIN(dst_height, src_height);
rdpRegionInit(&reg, &rect, 0);
rdpRegionIntersect(&reg, in_reg, &reg);
@ -307,14 +325,16 @@ rdpCapture0(rdpClientCon *clientCon,
if ((src_format == XRDP_a8r8g8b8) && (dst_format == XRDP_a8r8g8b8))
{
rdpCopyBox_a8r8g8b8_to_a8r8g8b8(src, src_stride, 0, 0,
rdpCopyBox_a8r8g8b8_to_a8r8g8b8(clientCon,
src, src_stride, 0, 0,
dst, dst_stride, 0, 0,
psrc_rects, num_rects);
}
else if ((src_format == XRDP_a8r8g8b8) && (dst_format == XRDP_a8b8g8r8))
{
rdpCopyBox_a8r8g8b8_to_a8b8g8r8(src, src_stride,
dst, dst_stride,
rdpCopyBox_a8r8g8b8_to_a8b8g8r8(clientCon,
src, src_stride, 0, 0,
dst, dst_stride, 0, 0,
psrc_rects, num_rects);
}
else if ((src_format == XRDP_a8r8g8b8) && (dst_format == XRDP_r5g6b5))
@ -739,6 +759,7 @@ rdpCapture(rdpClientCon *clientCon,
int dst_stride, int dst_format, int mode)
{
LLOGLN(10, ("rdpCapture:"));
LLOGLN(10, ("rdpCapture: src %p dst %p", src, dst));
switch (mode)
{
case 0:

@ -18,10 +18,24 @@
* Routines to copy regions from framebuffer to shared memory
*/
Bool
#ifndef __RDPCAPTURE_H
#define __RDPCAPTURE_H
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
extern _X_EXPORT Bool
rdpCapture(rdpClientCon *clientCon,
RegionPtr in_reg, BoxPtr *out_rects, int *num_out_rects,
void *src, int src_width, int src_height,
int src_stride, int src_format,
void *dst, int dst_width, int dst_height,
int dst_stride, int dst_format, int mode);
extern _X_EXPORT int
a8r8g8b8_to_a8b8g8r8_box(char *s8, int src_stride,
char *d8, int dst_stride,
int width, int height);
#endif

@ -31,6 +31,7 @@ Client connection to xrdp
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>

@ -21,6 +21,10 @@ Client connection to xrdp
*/
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
/* in xrdp/common */
#include "xrdp_client_info.h"
#include "xrdp_constants.h"
@ -108,55 +112,55 @@ struct _rdpClientCon
struct _rdpClientCon *next;
};
int
extern _X_EXPORT int
rdpClientConBeginUpdate(rdpPtr dev, rdpClientCon *clientCon);
int
extern _X_EXPORT int
rdpClientConEndUpdate(rdpPtr dev, rdpClientCon *clientCon);
int
extern _X_EXPORT int
rdpClientConSetFgcolor(rdpPtr dev, rdpClientCon *clientCon, int fgcolor);
void
extern _X_EXPORT void
rdpClientConSendArea(rdpPtr dev, rdpClientCon *clientCon,
struct image_data *id, int x, int y, int w, int h);
int
extern _X_EXPORT int
rdpClientConFillRect(rdpPtr dev, rdpClientCon *clientCon,
short x, short y, int cx, int cy);
int
extern _X_EXPORT int
rdpClientConCheck(ScreenPtr pScreen);
int
extern _X_EXPORT int
rdpClientConInit(rdpPtr dev);
int
extern _X_EXPORT int
rdpClientConDeinit(rdpPtr dev);
int
extern _X_EXPORT int
rdpClientConDeleteOsSurface(rdpPtr dev, rdpClientCon *clientCon, int rdpindex);
int
extern _X_EXPORT int
rdpClientConRemoveOsBitmap(rdpPtr dev, rdpClientCon *clientCon, int rdpindex);
void
extern _X_EXPORT void
rdpClientConScheduleDeferredUpdate(rdpPtr dev);
int
extern _X_EXPORT int
rdpClientConCheckDirtyScreen(rdpPtr dev, rdpClientCon *clientCon);
int
extern _X_EXPORT int
rdpClientConAddDirtyScreenReg(rdpPtr dev, rdpClientCon *clientCon,
RegionPtr reg);
int
extern _X_EXPORT int
rdpClientConAddDirtyScreenBox(rdpPtr dev, rdpClientCon *clientCon,
BoxPtr box);
int
extern _X_EXPORT int
rdpClientConAddDirtyScreen(rdpPtr dev, rdpClientCon *clientCon,
int x, int y, int cx, int cy);
void
extern _X_EXPORT void
rdpClientConGetScreenImageRect(rdpPtr dev, rdpClientCon *clientCon,
struct image_data *id);
int
extern _X_EXPORT int
rdpClientConAddAllReg(rdpPtr dev, RegionPtr reg, DrawablePtr pDrawable);
int
extern _X_EXPORT int
rdpClientConAddAllBox(rdpPtr dev, BoxPtr box, DrawablePtr pDrawable);
int
extern _X_EXPORT int
rdpClientConSetCursor(rdpPtr dev, rdpClientCon *clientCon,
short x, short y, char *cur_data, char *cur_mask);
int
extern _X_EXPORT int
rdpClientConSetCursorEx(rdpPtr dev, rdpClientCon *clientCon,
short x, short y, char *cur_data,
char *cur_mask, int bpp);

@ -27,6 +27,7 @@ composite(alpha blending) calls
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>

@ -24,7 +24,11 @@ composite(alpha blending) calls
#ifndef _RDPCOMPOSITE_H
#define _RDPCOMPOSITE_H
void
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
extern _X_EXPORT void
rdpComposite(CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst,
INT16 xSrc, INT16 ySrc, INT16 xMask, INT16 yMask, INT16 xDst,
INT16 yDst, CARD16 width, CARD16 height);

@ -25,6 +25,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>
@ -34,6 +35,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "rdpDraw.h"
#include "rdpClientCon.h"
#include "rdpReg.h"
#include "rdpCopyArea.h"
#define LOG_LEVEL 1
#define LLOGLN(_level, _args) \

@ -22,6 +22,10 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifndef __RDPCOPYAREA_H
#define __RDPCOPYAREA_H
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
RegionPtr
rdpCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
int srcx, int srcy, int w, int h, int dstx, int dsty);

@ -25,6 +25,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>
@ -34,6 +35,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "rdpDraw.h"
#include "rdpClientCon.h"
#include "rdpReg.h"
#include "rdpCopyPlane.h"
#define LOG_LEVEL 1
#define LLOGLN(_level, _args) \

@ -22,6 +22,10 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifndef __RDPCOPYPLANE_H
#define __RDPCOPYPLANE_H
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
RegionPtr
rdpCopyPlane(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable,
GCPtr pGC, int srcx, int srcy, int width, int height,

@ -27,6 +27,7 @@ cursor
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>
@ -45,6 +46,7 @@ cursor
#include "rdpMain.h"
#include "rdpDraw.h"
#include "rdpClientCon.h"
#include "rdpCursor.h"
#ifndef X_BYTE_ORDER
#warning X_BYTE_ORDER not defined

@ -25,20 +25,21 @@ misc draw calls
#define __RDPCURSOR_H
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
Bool
extern _X_EXPORT Bool
rdpSpriteRealizeCursor(DeviceIntPtr pDev, ScreenPtr pScr, CursorPtr pCurs);
Bool
extern _X_EXPORT Bool
rdpSpriteUnrealizeCursor(DeviceIntPtr pDev, ScreenPtr pScr, CursorPtr pCurs);
void
extern _X_EXPORT void
rdpSpriteSetCursor(DeviceIntPtr pDev, ScreenPtr pScr, CursorPtr pCurs,
int x, int y);
void
extern _X_EXPORT void
rdpSpriteMoveCursor(DeviceIntPtr pDev, ScreenPtr pScr, int x, int y);
Bool
extern _X_EXPORT Bool
rdpSpriteDeviceCursorInitialize(DeviceIntPtr pDev, ScreenPtr pScr);
void
extern _X_EXPORT void
rdpSpriteDeviceCursorCleanup(DeviceIntPtr pDev, ScreenPtr pScr);
#endif

@ -65,29 +65,29 @@ do { \
extern GCOps g_rdpGCOps; /* in rdpGC.c */
int
extern _X_EXPORT int
rdpDrawGetClip(rdpPtr dev, RegionPtr pRegion, DrawablePtr pDrawable, GCPtr pGC);
void
extern _X_EXPORT void
GetTextBoundingBox(DrawablePtr pDrawable, FontPtr font, int x, int y,
int n, BoxPtr pbox);
int
extern _X_EXPORT int
rdpDrawItemAdd(rdpPtr dev, rdpPixmapRec *priv, struct rdp_draw_item *di);
int
extern _X_EXPORT int
rdpDrawItemRemove(rdpPtr dev, rdpPixmapRec *priv, struct rdp_draw_item *di);
int
extern _X_EXPORT int
rdpDrawItemRemoveAll(rdpPtr dev, rdpPixmapRec *priv);
void
extern _X_EXPORT void
rdpCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr pOldRegion);
#if XRDP_CLOSESCR == 1
Bool
extern _X_EXPORT Bool
rdpCloseScreen(int index, ScreenPtr pScreen);
#else
Bool
extern _X_EXPORT Bool
rdpCloseScreen(ScreenPtr pScreen);
#endif
WindowPtr
extern _X_EXPORT WindowPtr
rdpGetRootWindowPtr(ScreenPtr pScreen);
rdpPtr
extern _X_EXPORT rdpPtr
rdpGetDevFromScreen(ScreenPtr pScreen);
#endif

@ -25,6 +25,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>
@ -34,6 +35,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "rdpDraw.h"
#include "rdpClientCon.h"
#include "rdpReg.h"
#include "rdpFillPolygon.h"
#define LOG_LEVEL 1
#define LLOGLN(_level, _args) \

@ -22,7 +22,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifndef __RDPFILLPOLYGON_H
#define __RDPFILLPOLYGON_H
void
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
extern _X_EXPORT void
rdpFillPolygon(DrawablePtr pDrawable, GCPtr pGC,
int shape, int mode, int count,
DDXPointPtr pPts);

@ -25,6 +25,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>
@ -32,6 +33,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "rdp.h"
#include "rdpDraw.h"
#include "rdpFillSpans.h"
#define LOG_LEVEL 1
#define LLOGLN(_level, _args) \

@ -22,6 +22,10 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifndef __RDPFILLSPANS_H
#define __RDPFILLSPANS_H
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
void
rdpFillSpans(DrawablePtr pDrawable, GCPtr pGC, int nInit,
DDXPointPtr pptInit, int* pwidthInit, int fSorted);

@ -27,6 +27,7 @@ GC related calls
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>
@ -59,6 +60,7 @@ GC related calls
#include "rdpPolyGlyphBlt.h"
#include "rdpPushPixels.h"
#include "rdpDraw.h"
#include "rdpGC.h"
/******************************************************************************/
#define LOG_LEVEL 1

@ -24,7 +24,11 @@ GC related calls
#ifndef _RDPGC_H
#define _RDPGC_H
Bool
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
extern _X_EXPORT Bool
rdpCreateGC(GCPtr pGC);
#endif

@ -27,6 +27,7 @@ gylph(font) calls
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>

@ -24,6 +24,10 @@ gylph(font) calls
#ifndef _RDPGLYPHS_H
#define _RDPGLYPHS_H
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
struct rdp_font_char
{
int offset; /* x */
@ -51,9 +55,9 @@ struct rdp_text
struct rdp_text* next;
};
int
extern _X_EXPORT int
rdpGlyphDeleteRdpText(struct rdp_text* rtext);
void
extern _X_EXPORT void
rdpGlyphs(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
PictFormatPtr maskFormat,
INT16 xSrc, INT16 ySrc, int nlists, GlyphListPtr lists,

@ -25,6 +25,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>
@ -34,6 +35,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "rdpDraw.h"
#include "rdpClientCon.h"
#include "rdpReg.h"
#include "rdpImageGlyphBlt.h"
#define LOG_LEVEL 1
#define LLOGLN(_level, _args) \

@ -22,7 +22,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifndef __RDPIMAGEGLYPHBLT_H
#define __RDPIMAGEGLYPHBLT_H
void
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
extern _X_EXPORT void
rdpImageGlyphBlt(DrawablePtr pDrawable, GCPtr pGC,
int x, int y, unsigned int nglyph,
CharInfoPtr* ppci, pointer pglyphBase);

@ -25,6 +25,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>
@ -34,6 +35,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "rdpDraw.h"
#include "rdpClientCon.h"
#include "rdpReg.h"
#include "rdpImageText16.h"
#define LOG_LEVEL 1
#define LLOGLN(_level, _args) \

@ -22,7 +22,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifndef __RDPIMAGETEXT16_H
#define __RDPIMAGETEXT16_H
void
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
extern _X_EXPORT void
rdpImageText16(DrawablePtr pDrawable, GCPtr pGC,
int x, int y, int count, unsigned short* chars);

@ -25,7 +25,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>
#include <xf86_OSproc.h>
@ -34,6 +35,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "rdpDraw.h"
#include "rdpClientCon.h"
#include "rdpReg.h"
#include "rdpImageText8.h"
#define LOG_LEVEL 1
#define LLOGLN(_level, _args) \

@ -22,7 +22,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifndef __RDPIMAGETEXT8_H
#define __RDPIMAGETEXT8_H
void
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
extern _X_EXPORT void
rdpImageText8(DrawablePtr pDrawable, GCPtr pGC,
int x, int y, int count, char* chars);

@ -25,6 +25,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>
@ -53,6 +54,7 @@ static struct input_proc_list g_input_proc[MAX_INPUT_PROC];
int
rdpRegisterInputCallback(int type, rdpInputEventProcPtr proc)
{
LLOGLN(0, ("rdpRegisterInputCallback: type %d proc %p", type, proc));
if (type == 0)
{
g_input_proc[0].proc = proc;
@ -73,12 +75,22 @@ int
rdpUnregisterInputCallback(rdpInputEventProcPtr proc)
{
int index;
char text[256];
LLOGLN(0, ("rdpUnregisterInputCallback: proc %p", proc));
for (index = 0; index < MAX_INPUT_PROC; index++)
{
if (g_input_proc[index].proc == proc)
{
g_input_proc[index].proc = 0;
if (index == 0)
{
/* hack to cleanup
remove when xrdpdevTearDown is working */
g_sprintf(text, "/tmp/.xrdp/xrdp_display_%s", display);
LLOGLN(0, ("rdpUnregisterInputCallback: deleting file %s", text));
unlink(text);
}
g_input_proc[index].proc = 0;
return 0;
}
}

@ -24,23 +24,27 @@ input
#ifndef _RDPINPUT_H
#define _RDPINPUT_H
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
typedef int (*rdpInputEventProcPtr)(rdpPtr dev, int msg,
long param1, long param2,
long param3, long param4);
int
extern _X_EXPORT int
rdpRegisterInputCallback(int type, rdpInputEventProcPtr proc);
int
extern _X_EXPORT int
rdpUnregisterInputCallback(rdpInputEventProcPtr proc);
int
extern _X_EXPORT int
rdpInputKeyboardEvent(rdpPtr dev, int msg,
long param1, long param2,
long param3, long param4);
int
extern _X_EXPORT int
rdpInputMouseEvent(rdpPtr dev, int msg,
long param1, long param2,
long param3, long param4);
int
extern _X_EXPORT int
rdpInputInit(void);
#endif

@ -27,6 +27,7 @@ rdp module main
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>
@ -41,6 +42,7 @@ rdp module main
#include "rdpInput.h"
#include "rdpDraw.h"
#include "rdpClientCon.h"
#include "rdpMain.h"
/******************************************************************************/
#define LOG_LEVEL 1

@ -24,7 +24,11 @@ rdp module main
#ifndef __RDPMAIN_H
#define __RDPMAIN_H
void
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
extern _X_EXPORT void
xorgxrdpDownDown(ScreenPtr pScreen);
#endif

@ -36,11 +36,14 @@ the rest
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>
#include <xf86_OSproc.h>
#include "rdpMisc.h"
/******************************************************************************/
int
rdpBitsPerPixel(int depth)

@ -24,59 +24,63 @@ the rest
#ifndef __RDPMISC_H
#define __RDPMISC_H
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
#include <X11/Xos.h>
int
extern _X_EXPORT int
rdpBitsPerPixel(int depth);
int
extern _X_EXPORT int
g_sck_can_recv(int sck, int millis);
int
extern _X_EXPORT int
g_sck_recv(int sck, void *ptr, int len, int flags);
void
extern _X_EXPORT void
g_sck_close(int sck);
int
extern _X_EXPORT int
g_sck_last_error_would_block(int sck);
void
extern _X_EXPORT void
g_sleep(int msecs);
int
extern _X_EXPORT int
g_sck_send(int sck, void *ptr, int len, int flags);
void *
extern _X_EXPORT void *
g_malloc(int size, int zero);
void
extern _X_EXPORT void
g_free(void *ptr);
void
extern _X_EXPORT void
g_sprintf(char *dest, char *format, ...);
int
extern _X_EXPORT int
g_sck_tcp_socket(void);
int
extern _X_EXPORT int
g_sck_local_socket_dgram(void);
int
extern _X_EXPORT int
g_sck_local_socket_stream(void);
void
extern _X_EXPORT void
g_memcpy(void *d_ptr, const void *s_ptr, int size);
void
extern _X_EXPORT void
g_memset(void *d_ptr, const unsigned char chr, int size);
int
extern _X_EXPORT int
g_sck_tcp_set_no_delay(int sck);
int
extern _X_EXPORT int
g_sck_set_non_blocking(int sck);
int
extern _X_EXPORT int
g_sck_accept(int sck);
int
extern _X_EXPORT int
g_sck_select(int sck1, int sck2, int sck3);
int
extern _X_EXPORT int
g_sck_tcp_bind(int sck, char *port);
int
extern _X_EXPORT int
g_sck_local_bind(int sck, char *port);
int
extern _X_EXPORT int
g_sck_listen(int sck);
int
extern _X_EXPORT int
g_create_dir(const char *dirname);
int
extern _X_EXPORT int
g_directory_exist(const char *dirname);
int
extern _X_EXPORT int
g_chmod_hex(const char *filename, int flags);
void
extern _X_EXPORT void
g_hexdump(void *p, long len);
#if defined(X_BYTE_ORDER)

@ -26,6 +26,7 @@ pixmap calls
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
#if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(1, 5, 0, 0, 0)
/* 1.1, 1.2, 1.3, 1.4 */
@ -36,16 +37,16 @@ pixmap calls
#endif
#if XRDP_PIX == 2
PixmapPtr
extern _X_EXPORT PixmapPtr
rdpCreatePixmap(ScreenPtr pScreen, int width, int height, int depth,
unsigned usage_hint);
#else
PixmapPtr
extern _X_EXPORT PixmapPtr
rdpCreatePixmap(ScreenPtr pScreen, int width, int height, int depth);
#endif
Bool
extern _X_EXPORT Bool
rdpDestroyPixmap(PixmapPtr pPixmap);
Bool
extern _X_EXPORT Bool
rdpModifyPixmapHeader(PixmapPtr pPixmap, int width, int height, int depth,
int bitsPerPixel, int devKind, pointer pPixData);

@ -25,6 +25,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>
@ -34,6 +35,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "rdpDraw.h"
#include "rdpClientCon.h"
#include "rdpReg.h"
#include "rdpPolyArc.h"
#define LOG_LEVEL 1
#define LLOGLN(_level, _args) \

@ -22,7 +22,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifndef __RDPPOLYARC_H
#define __RDPPOLYARC_H
void
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
extern _X_EXPORT void
rdpPolyArc(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc* parcs);
#endif

@ -25,6 +25,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>
@ -34,6 +35,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "rdpDraw.h"
#include "rdpClientCon.h"
#include "rdpReg.h"
#include "rdpPolyFillArc.h"
#define LOG_LEVEL 1
#define LLOGLN(_level, _args) \

@ -22,7 +22,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifndef __RDPPOLYFILLARC_H
#define __RDPPOLYFILLARC_H
void
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
extern _X_EXPORT void
rdpPolyFillArc(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc* parcs);
#endif

@ -25,6 +25,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>
@ -34,6 +35,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "rdpDraw.h"
#include "rdpClientCon.h"
#include "rdpReg.h"
#include "rdpPolyFillRect.h"
#define LOG_LEVEL 1
#define LLOGLN(_level, _args) \

@ -22,7 +22,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifndef __RDPPOLYFILLRECT_H
#define __RDPPOLYFILLRECT_H
void
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
extern _X_EXPORT void
rdpPolyFillRect(DrawablePtr pDrawable, GCPtr pGC, int nrectFill,
xRectangle* prectInit);

@ -25,6 +25,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>
@ -34,6 +35,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "rdpDraw.h"
#include "rdpClientCon.h"
#include "rdpReg.h"
#include "rdpPolyGlyphBlt.h"
#define LOG_LEVEL 1
#define LLOGLN(_level, _args) \

@ -22,7 +22,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifndef __RDPPOLYGLYPHBLT_H
#define __RDPPOLYGLYPHBLT_H
void
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
extern _X_EXPORT void
rdpPolyGlyphBlt(DrawablePtr pDrawable, GCPtr pGC,
int x, int y, unsigned int nglyph,
CharInfoPtr* ppci, pointer pglyphBase);

@ -25,6 +25,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>
@ -34,6 +35,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "rdpDraw.h"
#include "rdpClientCon.h"
#include "rdpReg.h"
#include "rdpPolyPoint.h"
#define LOG_LEVEL 1
#define LLOGLN(_level, _args) \

@ -22,7 +22,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifndef __RDPPOLYPOINT_H
#define __RDPPOLYPOINT_H
void
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
extern _X_EXPORT void
rdpPolyPoint(DrawablePtr pDrawable, GCPtr pGC, int mode,
int npt, DDXPointPtr in_pts);

@ -25,6 +25,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>
@ -34,6 +35,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "rdpDraw.h"
#include "rdpClientCon.h"
#include "rdpReg.h"
#include "rdpPolyRectangle.h"
#define LOG_LEVEL 1
#define LLOGLN(_level, _args) \

@ -22,7 +22,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifndef __RDPPOLYRECTANGLE_H
#define __RDPPOLYRECTANGLE_H
void
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
extern _X_EXPORT void
rdpPolyRectangle(DrawablePtr pDrawable, GCPtr pGC, int nrects,
xRectangle* rects);

@ -25,6 +25,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>
@ -34,6 +35,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "rdpDraw.h"
#include "rdpClientCon.h"
#include "rdpReg.h"
#include "rdpPolySegment.h"
#define LOG_LEVEL 1
#define LLOGLN(_level, _args) \

@ -22,7 +22,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifndef __RDPPOLYSEGMENT_H
#define __RDPPOLYSEGMENT_H
void
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
extern _X_EXPORT void
rdpPolySegment(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment* pSegs);
#endif

@ -25,6 +25,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>
@ -34,6 +35,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "rdpDraw.h"
#include "rdpClientCon.h"
#include "rdpReg.h"
#include "rdpPolyText16.h"
#define LOG_LEVEL 1
#define LLOGLN(_level, _args) \

@ -22,7 +22,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifndef __RDPPOLYTEXT16_H
#define __RDPPOLYTEXT16_H
int
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
extern _X_EXPORT int
rdpPolyText16(DrawablePtr pDrawable, GCPtr pGC,
int x, int y, int count, unsigned short* chars);

@ -25,6 +25,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>
@ -34,6 +35,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "rdpDraw.h"
#include "rdpClientCon.h"
#include "rdpReg.h"
#include "rdpPolyText8.h"
#define LOG_LEVEL 1
#define LLOGLN(_level, _args) \

@ -22,6 +22,10 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifndef __RDPPOLYTEXT8_H
#define __RDPPOLYTEXT8_H
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
int
rdpPolyText8(DrawablePtr pDrawable, GCPtr pGC,
int x, int y, int count, char* chars);

@ -25,6 +25,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>
@ -34,6 +35,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "rdpDraw.h"
#include "rdpClientCon.h"
#include "rdpReg.h"
#include "rdpPolylines.h"
#define LOG_LEVEL 1
#define LLOGLN(_level, _args) \

@ -22,6 +22,10 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifndef __RDPPOLYLINES_H
#define __RDPPOLYLINES_H
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
void
rdpPolylines(DrawablePtr pDrawable, GCPtr pGC, int mode,
int npt, DDXPointPtr pptInit);

@ -24,24 +24,28 @@ to deal with privates changing in xorg versions
#ifndef _XRDPPRI_H
#define _XRDPPRI_H
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
#include <screenint.h>
#include <gc.h>
typedef void* rdpDevPrivateKey;
rdpDevPrivateKey
extern _X_EXPORT rdpDevPrivateKey
rdpAllocateGCPrivate(ScreenPtr pScreen, int bytes);
rdpDevPrivateKey
extern _X_EXPORT rdpDevPrivateKey
rdpAllocatePixmapPrivate(ScreenPtr pScreen, int bytes);
rdpDevPrivateKey
extern _X_EXPORT rdpDevPrivateKey
rdpAllocateWindowPrivate(ScreenPtr pScreen, int bytes);
void*
extern _X_EXPORT void*
rdpGetGCPrivate(GCPtr pGC, rdpDevPrivateKey key);
void*
extern _X_EXPORT void*
rdpGetPixmapPrivate(PixmapPtr pPixmap, rdpDevPrivateKey key);
void*
extern _X_EXPORT void*
rdpGetWindowPrivate(WindowPtr pWindow, rdpDevPrivateKey key);
int
extern _X_EXPORT int
rdpPrivateInit(void);
#endif

@ -25,6 +25,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>
@ -32,13 +33,14 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "rdp.h"
#include "rdpDraw.h"
#include "rdpPushPixels.h"
#define LOG_LEVEL 1
#define LLOGLN(_level, _args) \
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
/******************************************************************************/
void
static void
rdpPushPixelsOrg(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDst,
int w, int h, int x, int y)
{

@ -22,7 +22,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifndef __RDPPUSHPIXELS_H
#define __RDPPUSHPIXELS_H
void
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
extern _X_EXPORT void
rdpPushPixels(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDst,
int w, int h, int x, int y);

@ -25,6 +25,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>
@ -34,6 +35,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "rdpDraw.h"
#include "rdpClientCon.h"
#include "rdpReg.h"
#include "rdpPutImage.h"
#define LOG_LEVEL 1
#define LLOGLN(_level, _args) \

@ -22,7 +22,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifndef __RDPPUTIMAGE_H
#define __RDPPUTIMAGE_H
void
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
extern _X_EXPORT void
rdpPutImage(DrawablePtr pDst, GCPtr pGC, int depth, int x, int y,
int w, int h, int leftPad, int format, char* pBits);

@ -42,6 +42,7 @@ RandR draw calls
#include "rdpDraw.h"
#include "rdpReg.h"
#include "rdpMisc.h"
#include "rdpRandR.h"
/******************************************************************************/
#define LOG_LEVEL 1
@ -119,8 +120,9 @@ rdpRRScreenSetSize(ScreenPtr pScreen, CARD16 width, CARD16 height,
pScreen->mmWidth = mmWidth;
pScreen->mmHeight = mmHeight;
screenPixmap = pScreen->GetScreenPixmap(pScreen);
g_free(dev->pfbMemory);
dev->pfbMemory = (char *) g_malloc(dev->sizeInBytes, 1);
g_free(dev->pfbMemory_alloc);
dev->pfbMemory_alloc = (char *) g_malloc(dev->sizeInBytes + 16, 1);
dev->pfbMemory = (char *) RDPALIGN(dev->pfbMemory_alloc, 16);
if (screenPixmap != 0)
{
pScreen->ModifyPixmapHeader(screenPixmap, width, height,

@ -22,38 +22,42 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifndef _RDPRANDR_H
#define _RDPRANDR_H
Bool
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
extern _X_EXPORT Bool
rdpRRRegisterSize(ScreenPtr pScreen, int width, int height);
Bool
extern _X_EXPORT Bool
rdpRRGetInfo(ScreenPtr pScreen, Rotation* pRotations);
Bool
extern _X_EXPORT Bool
rdpRRSetConfig(ScreenPtr pScreen, Rotation rotateKind, int rate,
RRScreenSizePtr pSize);
Bool
extern _X_EXPORT Bool
rdpRRScreenSetSize(ScreenPtr pScreen, CARD16 width, CARD16 height,
CARD32 mmWidth, CARD32 mmHeight);
Bool
extern _X_EXPORT Bool
rdpRRCrtcSet(ScreenPtr pScreen, RRCrtcPtr crtc, RRModePtr mode,
int x, int y, Rotation rotation, int numOutputs,
RROutputPtr* outputs);
Bool
extern _X_EXPORT Bool
rdpRRCrtcSetGamma(ScreenPtr pScreen, RRCrtcPtr crtc);
Bool
extern _X_EXPORT Bool
rdpRRCrtcGetGamma(ScreenPtr pScreen, RRCrtcPtr crtc);
Bool
extern _X_EXPORT Bool
rdpRROutputSetProperty(ScreenPtr pScreen, RROutputPtr output, Atom property,
RRPropertyValuePtr value);
Bool
extern _X_EXPORT Bool
rdpRROutputValidateMode(ScreenPtr pScreen, RROutputPtr output,
RRModePtr mode);
void
extern _X_EXPORT void
rdpRRModeDestroy(ScreenPtr pScreen, RRModePtr mode);
Bool
extern _X_EXPORT Bool
rdpRROutputGetProperty(ScreenPtr pScreen, RROutputPtr output, Atom property);
Bool
extern _X_EXPORT Bool
rdpRRGetPanning(ScreenPtr pScrn, RRCrtcPtr crtc, BoxPtr totalArea,
BoxPtr trackingArea, INT16* border);
Bool
extern _X_EXPORT Bool
rdpRRSetPanning(ScreenPtr pScrn, RRCrtcPtr crtc, BoxPtr totalArea,
BoxPtr trackingArea, INT16* border);

@ -33,6 +33,8 @@ to deal with regions changing in xorg versions
#include <xf86.h>
#include <xf86_OSproc.h>
#include "rdpReg.h"
/*
miRegionCopy -> RegionCopy
miTranslateRegion -> RegionTranslate

@ -24,41 +24,45 @@ to deal with regions changing in xorg versions
#ifndef __RDPREG_H
#define __RDPREG_H
Bool
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
extern _X_EXPORT Bool
rdpRegionCopy(RegionPtr dst, RegionPtr src);
void
extern _X_EXPORT void
rdpRegionTranslate(RegionPtr pReg, int x, int y);
Bool
extern _X_EXPORT Bool
rdpRegionNotEmpty(RegionPtr pReg);
Bool
extern _X_EXPORT Bool
rdpRegionIntersect(RegionPtr newReg, RegionPtr reg1, RegionPtr reg2);
int
extern _X_EXPORT int
rdpRegionContainsRect(RegionPtr region, BoxPtr prect);
void
extern _X_EXPORT void
rdpRegionInit(RegionPtr pReg, BoxPtr rect, int size);
void
extern _X_EXPORT void
rdpRegionUninit(RegionPtr pReg);
RegionPtr
extern _X_EXPORT RegionPtr
rdpRegionFromRects(int nrects, xRectanglePtr prect, int ctype);
void
extern _X_EXPORT void
rdpRegionDestroy(RegionPtr pReg);
RegionPtr
extern _X_EXPORT RegionPtr
rdpRegionCreate(BoxPtr rect, int size);
Bool
extern _X_EXPORT Bool
rdpRegionUnion(RegionPtr newReg, RegionPtr reg1, RegionPtr reg2);
Bool
extern _X_EXPORT Bool
rdpRegionSubtract(RegionPtr newReg, RegionPtr reg1, RegionPtr reg2);
Bool
extern _X_EXPORT Bool
rdpRegionInverse(RegionPtr newReg, RegionPtr reg1, BoxPtr invRect);
BoxPtr
extern _X_EXPORT BoxPtr
rdpRegionExtents(RegionPtr pReg);
void
extern _X_EXPORT void
rdpRegionReset(RegionPtr pReg, BoxPtr pBox);
Bool
extern _X_EXPORT Bool
rdpRegionBreak(RegionPtr pReg);
void
extern _X_EXPORT void
rdpRegionUnionRect(RegionPtr pReg, BoxPtr prect);
int
extern _X_EXPORT int
rdpRegionPixelCount(RegionPtr pReg);
#endif

@ -25,6 +25,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>
@ -32,6 +33,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "rdp.h"
#include "rdpDraw.h"
#include "rdpSetSpans.h"
#define LDEBUG 0

@ -22,7 +22,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifndef __RDPSETSPANS_H
#define __RDPSETSPANS_H
void
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
extern _X_EXPORT void
rdpSetSpans(DrawablePtr pDrawable, GCPtr pGC, char* psrc,
DDXPointPtr ppt, int* pwidth, int nspans, int fSorted);

@ -35,6 +35,8 @@ SIMD function asign
#include "rdp.h"
#include "rdpXv.h"
#include "rdpCapture.h"
#include "rdpSimd.h"
/* use simd, run time */
int g_simd_use_accel = 1;
@ -65,6 +67,11 @@ rdpSimdInit(ScreenPtr pScreen, ScrnInfoPtr pScrn)
dev = XRDPPTR(pScrn);
/* assign functions */
LLOGLN(0, ("rdpSimdInit: assigning yuv functions"));
dev->yv12_to_rgb32 = YV12_to_RGB32;
dev->i420_to_rgb32 = I420_to_RGB32;
dev->yuy2_to_rgb32 = YUY2_to_RGB32;
dev->uyvy_to_rgb32 = UYVY_to_RGB32;
dev->a8r8g8b8_to_a8b8g8r8_box = a8r8g8b8_to_a8b8g8r8_box;
#if SIMD_USE_ACCEL
if (g_simd_use_accel)
{
@ -81,14 +88,6 @@ rdpSimdInit(ScreenPtr pScreen, ScrnInfoPtr pScrn)
dev->uyvy_to_rgb32 = uyvy_to_rgb32_amd64_sse2;
LLOGLN(0, ("rdpSimdInit: sse2 amd64 yuv functions assigned"));
}
else
{
dev->yv12_to_rgb32 = YV12_to_RGB32;
dev->i420_to_rgb32 = I420_to_RGB32;
dev->yuy2_to_rgb32 = YUY2_to_RGB32;
dev->uyvy_to_rgb32 = UYVY_to_RGB32;
LLOGLN(0, ("rdpSimdInit: warning, c yuv functions assigned"));
}
#elif defined(__x86__) || defined(_M_IX86) || defined(__i386__)
int ax, bx, cx, dx;
cpuid_x86(1, 0, &ax, &bx, &cx, &dx);
@ -100,38 +99,11 @@ rdpSimdInit(ScreenPtr pScreen, ScrnInfoPtr pScrn)
dev->i420_to_rgb32 = i420_to_rgb32_x86_sse2;
dev->yuy2_to_rgb32 = yuy2_to_rgb32_x86_sse2;
dev->uyvy_to_rgb32 = uyvy_to_rgb32_x86_sse2;
dev->a8r8g8b8_to_a8b8g8r8_box = a8r8g8b8_to_a8b8g8r8_box_x86_sse2;
LLOGLN(0, ("rdpSimdInit: sse2 x86 yuv functions assigned"));
}
else
{
dev->yv12_to_rgb32 = YV12_to_RGB32;
dev->i420_to_rgb32 = I420_to_RGB32;
dev->yuy2_to_rgb32 = YUY2_to_RGB32;
dev->uyvy_to_rgb32 = UYVY_to_RGB32;
LLOGLN(0, ("rdpSimdInit: warning, c yuv functions assigned"));
}
#else
dev->yv12_to_rgb32 = YV12_to_RGB32;
dev->i420_to_rgb32 = I420_to_RGB32;
dev->yuy2_to_rgb32 = YUY2_to_RGB32;
dev->uyvy_to_rgb32 = UYVY_to_RGB32;
LLOGLN(0, ("rdpSimdInit: warning, c yuv functions assigned"));
#endif
}
else
{
dev->yv12_to_rgb32 = YV12_to_RGB32;
dev->i420_to_rgb32 = I420_to_RGB32;
dev->yuy2_to_rgb32 = YUY2_to_RGB32;
dev->uyvy_to_rgb32 = UYVY_to_RGB32;
LLOGLN(0, ("rdpSimdInit: warning, c yuv functions assigned"));
}
#else
dev->yv12_to_rgb32 = YV12_to_RGB32;
dev->i420_to_rgb32 = I420_to_RGB32;
dev->yuy2_to_rgb32 = YUY2_to_RGB32;
dev->uyvy_to_rgb32 = UYVY_to_RGB32;
LLOGLN(0, ("rdpSimdInit: warning, c yuv functions assigned"));
#endif
return 1;
}

@ -28,7 +28,7 @@ SIMD function asign
#include <xorgVersion.h>
#include <xf86.h>
Bool
extern _X_EXPORT Bool
rdpSimdInit(ScreenPtr pScreen, ScrnInfoPtr pScrn);
#endif

@ -25,6 +25,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>

@ -22,7 +22,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifndef _RDPTRAPEZOIDS_H
#define _RDPTRAPEZOIDS_H
void
#include <xorg-server.h>
#include <xorgVersion.h>
#include <xf86.h>
extern _X_EXPORT void
rdpTrapezoids(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc,
int ntrap, xTrapezoid *traps);

@ -43,6 +43,7 @@ XVideo
#include "rdpMisc.h"
#include "rdpReg.h"
#include "rdpClientCon.h"
#include "rdpXv.h"
#define LOG_LEVEL 1
#define LLOGLN(_level, _args) \
@ -502,6 +503,7 @@ xrdpVidPutImage(ScrnInfoPtr pScrn,
rgbend32 = rgborg32 + width * height;
rgbend32 = (int *) RDPALIGN(rgbend32, 16);
error = 0;
switch (format)
{
case FOURCC_YV12:
@ -528,12 +530,21 @@ xrdpVidPutImage(ScrnInfoPtr pScrn,
{
return Success;
}
error = stretch_RGB32_RGB32(rgborg32, width, height,
src_x, src_y, src_w, src_h,
rgbend32, drw_w, drw_h);
if (error != 0)
if ((width == drw_w) && (height == drw_h))
{
return Success;
LLOGLN(10, ("xrdpVidPutImage: strech skip"));
rgbend32 = rgborg32;
}
else
{
error = stretch_RGB32_RGB32(rgborg32, width, height,
src_x, src_y, src_w, src_h,
rgbend32, drw_w, drw_h);
if (error != 0)
{
return Success;
}
}
tempGC = GetScratchGC(dst->depth, pScrn->pScreen);
@ -542,7 +553,8 @@ xrdpVidPutImage(ScrnInfoPtr pScrn,
ValidateGC(dst, tempGC);
(*tempGC->ops->PutImage)(dst, tempGC, 24,
drw_x - dst->x, drw_y - dst->y,
drw_w, drw_h, 0, ZPixmap, (char*)rgbend32);
drw_w, drw_h, 0, ZPixmap,
(char *) rgbend32);
FreeScratchGC(tempGC);
}

@ -28,16 +28,15 @@ XVideo
#include <xorgVersion.h>
#include <xf86.h>
Bool
extern _X_EXPORT Bool
rdpXvInit(ScreenPtr pScreen, ScrnInfoPtr pScrn);
int
extern _X_EXPORT int
YV12_to_RGB32(unsigned char *yuvs, int width, int height, int *rgbs);
int
extern _X_EXPORT int
I420_to_RGB32(unsigned char *yuvs, int width, int height, int *rgbs);
int
extern _X_EXPORT int
YUY2_to_RGB32(unsigned char *yuvs, int width, int height, int *rgbs);
int
extern _X_EXPORT int
UYVY_to_RGB32(unsigned char *yuvs, int width, int height, int *rgbs);
#endif

@ -0,0 +1,174 @@
;
;Copyright 2014 Jay Sorg
;
;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.
;
;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
;OPEN GROUP 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.
;
;ARGB to ABGR
;x86 SSE2 32 bit
;
SECTION .data
align 16
c1 times 4 dd 0xFF00FF00
c2 times 4 dd 0x00FF0000
c3 times 4 dd 0x000000FF
SECTION .text
%macro PROC 1
align 16
global %1
%1:
%endmacro
;int
;a8r8g8b8_to_a8b8g8r8_box_x86_sse2(char *s8, int src_stride,
; char *d8, int dst_stride,
; int width, int height);
PROC a8r8g8b8_to_a8b8g8r8_box_x86_sse2
push ebx
push esi
push edi
push ebp
movdqa xmm4, [c1]
movdqa xmm5, [c2]
movdqa xmm6, [c3]
mov esi, [esp + 20] ; src
mov edi, [esp + 28] ; dst
loop_y:
mov ecx, [esp + 36] ; width
loop_xpre:
mov eax, esi ; look for aligned
and eax, 0x0F ; we can jump to next
mov ebx, eax
mov eax, edi
and eax, 0x0F
or eax, ebx
cmp eax, 0
je done_loop_xpre
cmp ecx, 1
jl done_loop_x ; all done with this row
mov eax, [esi]
lea esi, [esi + 4]
mov edx, eax ; a and g
and edx, 0xFF00FF00
mov ebx, eax ; r
and ebx, 0x00FF0000
shr ebx, 16
or edx, ebx
mov ebx, eax ; b
and ebx, 0x000000FF
shl ebx, 16
or edx, ebx
mov [edi], edx
lea edi, [edi + 4]
dec ecx
jmp loop_xpre;
done_loop_xpre:
prefetchnta [esi]
; A R G B A R G B A R G B A R G B to
; A B G R A B G R A B G R A B G R
loop_x8:
cmp ecx, 8
jl done_loop_x8
prefetchnta [esi + 32]
movdqa xmm0, [esi]
lea esi, [esi + 16]
movdqa xmm3, xmm0 ; a and g
pand xmm3, xmm4
movdqa xmm1, xmm0 ; r
pand xmm1, xmm5
psrld xmm1, 16
por xmm3, xmm1
movdqa xmm1, xmm0 ; b
pand xmm1, xmm6
pslld xmm1, 16
por xmm3, xmm1
movdqa [edi], xmm3
lea edi, [edi + 16]
sub ecx, 4
movdqa xmm0, [esi]
lea esi, [esi + 16]
movdqa xmm3, xmm0 ; a and g
pand xmm3, xmm4
movdqa xmm1, xmm0 ; r
pand xmm1, xmm5
psrld xmm1, 16
por xmm3, xmm1
movdqa xmm1, xmm0 ; b
pand xmm1, xmm6
pslld xmm1, 16
por xmm3, xmm1
movdqa [edi], xmm3
lea edi, [edi + 16]
sub ecx, 4
jmp loop_x8;
done_loop_x8:
loop_x:
cmp ecx, 1
jl done_loop_x
mov eax, [esi]
lea esi, [esi + 4]
mov edx, eax ; a and g
and edx, 0xFF00FF00
mov ebx, eax ; r
and ebx, 0x00FF0000
shr ebx, 16
or edx, ebx
mov ebx, eax ; b
and ebx, 0x000000FF
shl ebx, 16
or edx, ebx
mov [edi], edx
lea edi, [edi + 4]
dec ecx
jmp loop_x;
done_loop_x:
mov esi, [esp + 20]
add esi, [esp + 24]
mov [esp + 20], esi
mov edi, [esp + 28]
add edi, [esp + 32]
mov [esp + 28], edi
mov ecx, [esp + 40] ; height
dec ecx
mov [esp + 40], ecx
jnz loop_y
mov eax, 0 ; return value
pop ebp
pop edi
pop esi
pop ebx
ret
align 16

@ -34,6 +34,10 @@ int
yuy2_to_rgb32_x86_sse2(unsigned char *yuvs, int width, int height, int *rgbs);
int
uyvy_to_rgb32_x86_sse2(unsigned char *yuvs, int width, int height, int *rgbs);
int
a8r8g8b8_to_a8b8g8r8_box_x86_sse2(char *s8, int src_stride,
char *d8, int dst_stride,
int width, int height);
#endif

@ -1,4 +1,46 @@
------------------------------------------------------
11/01/2014
------------------------------------------------------
There are four modules built for the Xorg driver model and one configuration file
This works best with newer Xorg installs, xserver 1.10 +, example Debian 7 +, Ubuntu 12.04 +
To see what version you have, run
xdpyinfo | grep version:
or
dpkg -l | grep xserver-xorg-core
or
yum list | grep xorg-x11-server-Xorg
It should compile with older version and may run but may be problems.
Usually, the problems are related to startup / login.
autotools should build and install them
./bootstrap
./configure
make
sudo make install
This should install the following...
libxorgxrdp.so goes in /usr/lib/xorg/modules/
xrdpdev_drv.so goes in /usr/lib/xorg/modules/drivers/
xrdpkeyb_drv.so goes in /usr/lib/xorg/modules/input/
xrdpmouse_drv.so goes in /usr/lib/xorg/modules/input/
xorg.conf goes in /etc/X11/xrdp/
with all these components in place, you can start Xorg with the xrdp modules with
Xorg -config xrdp/xorg.conf -logfile /tmp/Xtmp.log -noreset -ac :10
or
Xorg -config xrdp/xorg.conf -logfile /dev/null -noreset -ac :10
older notes
------------------------------------------------------
Notes for building xrdpdev_drv.so and libxorgxrdp.so
------------------------------------------------------

@ -1,17 +0,0 @@
OBJS = xrdpdev.o
CFLAGS = -g -O2 -Wall -fPIC -I/usr/include/xorg -I/usr/include/pixman-1 \
-I../module -I../../../common
LDFLAGS =
LIBS =
all: xrdpdev_drv.so
xrdpdev_drv.so: $(OBJS) Makefile
$(CC) -shared -o xrdpdev_drv.so $(LDFLAGS) $(OBJS) $(LIBS)
clean:
rm -f $(OBJS) xrdpdev_drv.so

@ -0,0 +1,17 @@
EXTRA_DIST = \
xorg.conf
AM_CFLAGS = \
$(XORG_SERVER_CFLAGS) \
-I../module \
-I../../../common
xrdpdev_drv_la_LTLIBRARIES = xrdpdev_drv.la
xrdpdev_drv_la_LDFLAGS = -module -avoid-version
xrdpdev_drv_ladir = $(moduledir)/drivers
xrdpdev_drv_la_SOURCES = xrdpdev.c
xrdpdev_drv_la_LIBADD =

@ -322,7 +322,7 @@ rdpDeferredRandR(OsTimerPtr timer, CARD32 now, pointer arg)
pScreen = (ScreenPtr) arg;
dev = rdpGetDevFromScreen(pScreen);
LLOGLN(10, ("rdpDeferredRandR:"));
LLOGLN(0, ("rdpDeferredRandR:"));
pRRScrPriv = rrGetScrPriv(pScreen);
if (pRRScrPriv == 0)
{
@ -436,7 +436,9 @@ rdpScreenInit(ScreenPtr pScreen, int argc, char **argv)
dev->bitsPerPixel = rdpBitsPerPixel(dev->depth);
dev->sizeInBytes = dev->paddedWidthInBytes * dev->height;
LLOGLN(0, ("rdpScreenInit: pfbMemory bytes %d", dev->sizeInBytes));
dev->pfbMemory = (char *) g_malloc(dev->sizeInBytes, 1);
dev->pfbMemory_alloc = (char *) g_malloc(dev->sizeInBytes + 16, 1);
dev->pfbMemory = (char*) RDPALIGN(dev->pfbMemory_alloc, 16);
LLOGLN(0, ("rdpScreenInit: pfbMemory %p", dev->pfbMemory));
if (!fbScreenInit(pScreen, dev->pfbMemory,
pScrn->virtualX, pScrn->virtualY,
pScrn->xDpi, pScrn->yDpi, pScrn->displayWidth,
@ -619,6 +621,17 @@ rdpValidMode(ScrnInfoPtr a, DisplayModePtr b, Bool c, int d)
return 0;
}
/*****************************************************************************/
static void
#if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(1, 13, 0, 0, 0)
rdpFreeScreen(int a, int b)
#else
rdpFreeScreen(ScrnInfoPtr a)
#endif
{
LLOGLN(0, ("rdpFreeScreen:"));
}
/*****************************************************************************/
static Bool
rdpProbe(DriverPtr drv, int flags)
@ -670,7 +683,7 @@ rdpProbe(DriverPtr drv, int flags)
pscrn->EnterVT = rdpEnterVT;
pscrn->LeaveVT = rdpLeaveVT;
pscrn->ValidMode = rdpValidMode;
pscrn->FreeScreen = rdpFreeScreen;
xf86DrvMsg(pscrn->scrnIndex, X_INFO, "%s", "using default device\n");
}
}

@ -1,17 +0,0 @@
OBJS = rdpKeyboard.o
CFLAGS = -g -O2 -Wall -fPIC -I/usr/include/xorg -I/usr/include/pixman-1 \
-I../module -I../../../common
LDFLAGS =
LIBS =
all: xrdpkeyb_drv.so
xrdpkeyb_drv.so: $(OBJS) Makefile
$(CC) -shared -o xrdpkeyb_drv.so $(LDFLAGS) $(OBJS) $(LIBS)
clean:
rm -f $(OBJS) xrdpkeyb_drv.so

@ -0,0 +1,16 @@
EXTRA_DIST =
AM_CFLAGS = \
$(XORG_SERVER_CFLAGS) \
-I../module \
-I../../../common
xrdpkeyb_drv_la_LTLIBRARIES = xrdpkeyb_drv.la
xrdpkeyb_drv_la_LDFLAGS = -module -avoid-version
xrdpkeyb_drv_ladir = $(moduledir)/input
xrdpkeyb_drv_la_SOURCES = rdpKeyboard.c
xrdpkeyb_drv_la_LIBADD =

@ -27,6 +27,7 @@ xrdp keyboard module
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>
@ -674,6 +675,7 @@ rdpkeybUnInit(InputDriverPtr drv, InputInfoPtr info, int flags)
{
LLOGLN(0, ("rdpkeybUnInit: drv %p info %p, flags 0x%x",
drv, info, flags));
rdpUnregisterInputCallback(rdpInputKeyboard);
}
/******************************************************************************/

@ -1,17 +0,0 @@
OBJS = rdpMouse.o
CFLAGS = -g -O2 -Wall -fPIC -I/usr/include/xorg -I/usr/include/pixman-1 \
-I../module -I../../../common
LDFLAGS =
LIBS =
all: xrdpmouse_drv.so
xrdpmouse_drv.so: $(OBJS) Makefile
$(CC) -shared -o xrdpmouse_drv.so $(LDFLAGS) $(OBJS) $(LIBS)
clean:
rm -f $(OBJS) xrdpmouse_drv.so

@ -0,0 +1,16 @@
EXTRA_DIST =
AM_CFLAGS = \
$(XORG_SERVER_CFLAGS) \
-I../module \
-I../../../common
xrdpmouse_drv_la_LTLIBRARIES = xrdpmouse_drv.la
xrdpmouse_drv_la_LDFLAGS = -module -avoid-version
xrdpmouse_drv_ladir = $(moduledir)/input
xrdpmouse_drv_la_SOURCES = rdpMouse.c
xrdpmouse_drv_la_LIBADD =

@ -27,6 +27,7 @@ xrdp mouse module
/* this should be before all X11 .h files */
#include <xorg-server.h>
#include <xorgVersion.h>
/* all driver need this */
#include <xf86.h>
@ -309,6 +310,7 @@ rdpmouseUnInit(InputDriverPtr drv, InputInfoPtr info, int flags)
{
LLOGLN(0, ("rdpmouseUnInit: drv %p info %p, flags 0x%x",
drv, info, flags));
rdpUnregisterInputCallback(rdpInputMouse);
}
/******************************************************************************/

@ -0,0 +1 @@
Subproject commit 7c4d67356db815a9b4b003fca06394f43aaf7f82

@ -90,14 +90,26 @@ get_key_info_from_scan_code(int device_flags, int scan_code, int *keys,
rv = &(keymap->keys_noshift[index]);
}
}
else if (shift && caps_lock && altgr)
{
rv = &(keymap->keys_shiftcapslockaltgr[index]);
}
else if (shift && caps_lock)
{
rv = &(keymap->keys_shiftcapslock[index]);
}
else if (shift)
else if (shift && altgr)
{
rv = &(keymap->keys_shiftaltgr[index]);
}
else if (shift)
{
rv = &(keymap->keys_shift[index]);
}
else if (caps_lock && altgr)
{
rv = &(keymap->keys_capslockaltgr[index]);
}
else if (caps_lock)
{
rv = &(keymap->keys_capslock[index]);
@ -242,8 +254,11 @@ get_keymaps(int keylayout, struct xrdp_keymap *keymap)
km_read_section(fd, "noshift", keymap->keys_noshift);
km_read_section(fd, "shift", keymap->keys_shift);
km_read_section(fd, "altgr", keymap->keys_altgr);
km_read_section(fd, "shiftaltgr", keymap->keys_shiftaltgr);
km_read_section(fd, "capslock", keymap->keys_capslock);
km_read_section(fd, "capslockaltgr", keymap->keys_capslockaltgr);
km_read_section(fd, "shiftcapslock", keymap->keys_shiftcapslock);
km_read_section(fd, "shiftcapslockaltgr", keymap->keys_shiftcapslockaltgr);
if (g_memcmp(lkeymap, keymap, sizeof(struct xrdp_keymap)) != 0)
{

@ -50,6 +50,9 @@ grey=dedede
# when true, userid/password *must* be passed on cmd line
# require_credentials=yes
# set a default entry for autorun if the client send login and pass directly
autorun=xrdp1
bulk_compression=yes
# You can set the PAM error text in a gateway setup (MAX 256 chars)
@ -153,6 +156,7 @@ username=ask
password=ask
ip=127.0.0.1
port=-1
#delay_ms=2000
[xrdp3]
name=console
@ -161,6 +165,7 @@ ip=127.0.0.1
port=5900
username=na
password=ask
#delay_ms=2000
[xrdp4]
name=vnc-any
@ -172,6 +177,7 @@ password=ask
#pamusername=asksame
#pampassword=asksame
#pamsessionmng=127.0.0.1
#delay_ms=2000
[xrdp5]
name=sesman-any
@ -180,6 +186,7 @@ ip=ask
port=-1
username=ask
password=ask
#delay_ms=2000
[xrdp6]
name=rdp-any

@ -66,6 +66,7 @@ rdp_layout_ru=0x00000419
rdp_layout_se=0x0000041D
rdp_layout_pt=0x00000816
rdp_layout_br=0x00000416
rdp_layout_pl=0x00000415
# <rdp layout name> = <X11 keyboard layout value>
[default_layouts_map]
@ -78,6 +79,7 @@ rdp_layout_ru=ru
rdp_layout_se=se
rdp_layout_pt=pt
rdp_layout_br=br(abnt2)
rdp_layout_pl=pl
# if two sections have the same keyboard_type and keyboard_subtype, then
# the latter could override the former.
@ -103,3 +105,4 @@ rdp_layout_ru=ru
rdp_layout_se=se
rdp_layout_pt=pt
rdp_layout_br=br(abnt2)
rdp_layout_pl=pl

@ -318,8 +318,11 @@ struct xrdp_keymap
struct xrdp_key_info keys_noshift[256];
struct xrdp_key_info keys_shift[256];
struct xrdp_key_info keys_altgr[256];
struct xrdp_key_info keys_shiftaltgr[256];
struct xrdp_key_info keys_capslock[256];
struct xrdp_key_info keys_capslockaltgr[256];
struct xrdp_key_info keys_shiftcapslock[256];
struct xrdp_key_info keys_shiftcapslockaltgr[256];
};
/* the window manager */

Loading…
Cancel
Save