summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Sorg <jay.sorg@gmail.com>2014-11-13 22:08:14 -0800
committerJay Sorg <jay.sorg@gmail.com>2014-11-13 22:08:14 -0800
commit32f172853f9763f4b046c9e5465813a0aa5e3f1c (patch)
tree8f20d0d783696e680ac37725afb0e0a62f677f47
parentddfd6b8b59ae411f15622ba4e50ef895b1e23e23 (diff)
parent942cdf300edaed7fee13a78e5e1c9b9c3d9c923e (diff)
downloadxrdp-proprietary-32f172853f9763f4b046c9e5465813a0aa5e3f1c.tar.gz
xrdp-proprietary-32f172853f9763f4b046c9e5465813a0aa5e3f1c.zip
Merge branch 'devel'
-rw-r--r--.gitmodules3
-rw-r--r--common/os_calls.c160
-rw-r--r--common/os_calls.h2
-rw-r--r--common/xrdp_constants.h7
-rw-r--r--configure.ac66
-rw-r--r--genkeymap/Makefile.am2
-rwxr-xr-xgenkeymap/dump-keymaps.sh4
-rw-r--r--genkeymap/evdev-map.c156
-rw-r--r--genkeymap/genkeymap.c43
-rw-r--r--genkeymap/readme.txt5
-rw-r--r--instfiles/Makefile.am1
-rw-r--r--instfiles/km-0407.ini282
-rw-r--r--instfiles/km-0409.ini258
-rw-r--r--instfiles/km-0410.ini256
-rw-r--r--instfiles/km-0415.ini791
-rw-r--r--instfiles/km-0419.ini296
-rw-r--r--instfiles/km-041d.ini256
-rw-r--r--instfiles/km-0816.ini286
m---------librfxcodec0
-rw-r--r--libxrdp/libxrdp.h1
-rw-r--r--libxrdp/xrdp_mcs.c7
-rw-r--r--libxrdp/xrdp_sec.c74
-rw-r--r--neutrinordp/xrdp-neutrinordp.c56
-rw-r--r--sesman/chansrv/Makefile.am6
-rw-r--r--sesman/chansrv/chansrv_common.c73
-rw-r--r--sesman/chansrv/chansrv_common.h27
-rw-r--r--sesman/chansrv/pulse/module-xrdp-source.c38
-rw-r--r--sesman/chansrv/sound.c153
-rw-r--r--sesman/session.c10
-rw-r--r--sesman/verify_user.c9
-rw-r--r--sesman/verify_user_pam.c28
-rw-r--r--vnc/vnc.c11
-rw-r--r--vnc/vnc.h1
-rw-r--r--xorg/server/Makefile36
-rw-r--r--xorg/server/Makefile.am7
-rwxr-xr-xxorg/server/bootstrap36
-rw-r--r--xorg/server/configure.ac35
-rw-r--r--xorg/server/module/Makefile60
-rw-r--r--xorg/server/module/Makefile.am22
-rw-r--r--xorg/server/module/rdp.h10
-rw-r--r--xorg/server/module/rdpCapture.c105
-rw-r--r--xorg/server/module/rdpCapture.h16
-rw-r--r--xorg/server/module/rdpClientCon.c1
-rw-r--r--xorg/server/module/rdpClientCon.h44
-rw-r--r--xorg/server/module/rdpComposite.c1
-rw-r--r--xorg/server/module/rdpComposite.h6
-rw-r--r--xorg/server/module/rdpCopyArea.c2
-rw-r--r--xorg/server/module/rdpCopyArea.h4
-rw-r--r--xorg/server/module/rdpCopyPlane.c2
-rw-r--r--xorg/server/module/rdpCopyPlane.h4
-rw-r--r--xorg/server/module/rdpCursor.c2
-rw-r--r--xorg/server/module/rdpCursor.h13
-rw-r--r--xorg/server/module/rdpDraw.h20
-rw-r--r--xorg/server/module/rdpFillPolygon.c2
-rw-r--r--xorg/server/module/rdpFillPolygon.h6
-rw-r--r--xorg/server/module/rdpFillSpans.c2
-rw-r--r--xorg/server/module/rdpFillSpans.h4
-rw-r--r--xorg/server/module/rdpGC.c2
-rw-r--r--xorg/server/module/rdpGC.h6
-rw-r--r--xorg/server/module/rdpGlyphs.c1
-rw-r--r--xorg/server/module/rdpGlyphs.h8
-rw-r--r--xorg/server/module/rdpImageGlyphBlt.c2
-rw-r--r--xorg/server/module/rdpImageGlyphBlt.h6
-rw-r--r--xorg/server/module/rdpImageText16.c2
-rw-r--r--xorg/server/module/rdpImageText16.h6
-rw-r--r--xorg/server/module/rdpImageText8.c4
-rw-r--r--xorg/server/module/rdpImageText8.h6
-rw-r--r--xorg/server/module/rdpInput.c14
-rw-r--r--xorg/server/module/rdpInput.h14
-rw-r--r--xorg/server/module/rdpMain.c2
-rw-r--r--xorg/server/module/rdpMain.h6
-rw-r--r--xorg/server/module/rdpMisc.c3
-rw-r--r--xorg/server/module/rdpMisc.h56
-rw-r--r--xorg/server/module/rdpPixmap.h9
-rw-r--r--xorg/server/module/rdpPolyArc.c2
-rw-r--r--xorg/server/module/rdpPolyArc.h6
-rw-r--r--xorg/server/module/rdpPolyFillArc.c2
-rw-r--r--xorg/server/module/rdpPolyFillArc.h6
-rw-r--r--xorg/server/module/rdpPolyFillRect.c2
-rw-r--r--xorg/server/module/rdpPolyFillRect.h6
-rw-r--r--xorg/server/module/rdpPolyGlyphBlt.c2
-rw-r--r--xorg/server/module/rdpPolyGlyphBlt.h6
-rw-r--r--xorg/server/module/rdpPolyPoint.c2
-rw-r--r--xorg/server/module/rdpPolyPoint.h6
-rw-r--r--xorg/server/module/rdpPolyRectangle.c2
-rw-r--r--xorg/server/module/rdpPolyRectangle.h6
-rw-r--r--xorg/server/module/rdpPolySegment.c2
-rw-r--r--xorg/server/module/rdpPolySegment.h6
-rw-r--r--xorg/server/module/rdpPolyText16.c2
-rw-r--r--xorg/server/module/rdpPolyText16.h6
-rw-r--r--xorg/server/module/rdpPolyText8.c2
-rw-r--r--xorg/server/module/rdpPolyText8.h4
-rw-r--r--xorg/server/module/rdpPolylines.c2
-rw-r--r--xorg/server/module/rdpPolylines.h4
-rw-r--r--xorg/server/module/rdpPri.h18
-rw-r--r--xorg/server/module/rdpPushPixels.c4
-rw-r--r--xorg/server/module/rdpPushPixels.h6
-rw-r--r--xorg/server/module/rdpPutImage.c2
-rw-r--r--xorg/server/module/rdpPutImage.h6
-rw-r--r--xorg/server/module/rdpRandR.c6
-rw-r--r--xorg/server/module/rdpRandR.h30
-rw-r--r--xorg/server/module/rdpReg.c2
-rw-r--r--xorg/server/module/rdpReg.h40
-rw-r--r--xorg/server/module/rdpSetSpans.c2
-rw-r--r--xorg/server/module/rdpSetSpans.h6
-rw-r--r--xorg/server/module/rdpSimd.c44
-rw-r--r--xorg/server/module/rdpSimd.h2
-rw-r--r--xorg/server/module/rdpTrapezoids.c1
-rw-r--r--xorg/server/module/rdpTrapezoids.h6
-rw-r--r--xorg/server/module/rdpXv.c24
-rw-r--r--xorg/server/module/rdpXv.h11
-rw-r--r--xorg/server/module/x86/a8r8g8b8_to_a8b8g8r8_box_x86_sse2.asm174
-rw-r--r--xorg/server/module/x86/funcs_x86.h4
-rw-r--r--xorg/server/readme.txt42
-rw-r--r--xorg/server/xrdpdev/Makefile17
-rw-r--r--xorg/server/xrdpdev/Makefile.am17
-rw-r--r--xorg/server/xrdpdev/xrdpdev.c19
-rw-r--r--xorg/server/xrdpkeyb/Makefile17
-rw-r--r--xorg/server/xrdpkeyb/Makefile.am16
-rw-r--r--xorg/server/xrdpkeyb/rdpKeyboard.c2
-rw-r--r--xorg/server/xrdpmouse/Makefile17
-rw-r--r--xorg/server/xrdpmouse/Makefile.am16
-rw-r--r--xorg/server/xrdpmouse/rdpMouse.c2
m---------xorgxrdp0
-rw-r--r--xrdp/lang.c17
-rw-r--r--xrdp/xrdp.ini7
-rw-r--r--xrdp/xrdp_keyboard.ini3
-rw-r--r--xrdp/xrdp_types.h3
128 files changed, 3648 insertions, 966 deletions
diff --git a/.gitmodules b/.gitmodules
index d40734d4..52a8a98a 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,6 @@
[submodule "librfxcodec"]
path = librfxcodec
url = git://github.com/neutrinolabs/librfxcodec
+[submodule "xorgxrdp"]
+ path = xorgxrdp
+ url = git://github.com/neutrinolabs/xorgxrdp
diff --git a/common/os_calls.c b/common/os_calls.c
index ef057497..bfea9031 100644
--- a/common/os_calls.c
+++ b/common/os_calls.c
@@ -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
diff --git a/common/os_calls.h b/common/os_calls.h
index 1805a6a1..d954a075 100644
--- a/common/os_calls.h
+++ b/common/os_calls.h
@@ -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);
diff --git a/common/xrdp_constants.h b/common/xrdp_constants.h
index 2ee034c3..25d9495f 100644
--- a/common/xrdp_constants.h
+++ b/common/xrdp_constants.h
@@ -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
diff --git a/configure.ac b/configure.ac
index 85145cfc..c5d22ec0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -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
diff --git a/genkeymap/Makefile.am b/genkeymap/Makefile.am
index e358c61b..aed72512 100644
--- a/genkeymap/Makefile.am
+++ b/genkeymap/Makefile.am
@@ -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 \
diff --git a/genkeymap/dump-keymaps.sh b/genkeymap/dump-keymaps.sh
index e0f3b3b2..a78caa95 100755
--- a/genkeymap/dump-keymaps.sh
+++ b/genkeymap/dump-keymaps.sh
@@ -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
diff --git a/genkeymap/evdev-map.c b/genkeymap/evdev-map.c
new file mode 100644
index 00000000..4610eb69
--- /dev/null
+++ b/genkeymap/evdev-map.c
@@ -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
+};
diff --git a/genkeymap/genkeymap.c b/genkeymap/genkeymap.c
index 91ec9e89..088af748 100644
--- a/genkeymap/genkeymap.c
+++ b/genkeymap/genkeymap.c
@@ -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");
}
diff --git a/genkeymap/readme.txt b/genkeymap/readme.txt
index d9df684d..b2b3b890 100644
--- a/genkeymap/readme.txt
+++ b/genkeymap/readme.txt
@@ -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.
diff --git a/instfiles/Makefile.am b/instfiles/Makefile.am
index b1c0ebd0..8b303f63 100644
--- a/instfiles/Makefile.am
+++ b/instfiles/Makefile.am
@@ -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
diff --git a/instfiles/km-0407.ini b/instfiles/km-0407.ini
index 08fdd252..6021211d 100644
--- a/instfiles/km-0407.ini
+++ b/instfiles/km-0407.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
+
diff --git a/instfiles/km-0409.ini b/instfiles/km-0409.ini
index 95402483..a565a9b0 100644
--- a/instfiles/km-0409.ini
+++ b/instfiles/km-0409.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=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
+
diff --git a/instfiles/km-0410.ini b/instfiles/km-0410.ini
index 259fc71e..a9723117 100644
--- a/instfiles/km-0410.ini
+++ b/instfiles/km-0410.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=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
+
diff --git a/instfiles/km-0415.ini b/instfiles/km-0415.ini
new file mode 100644
index 00000000..884e534f
--- /dev/null
+++ b/instfiles/km-0415.ini
@@ -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
+
diff --git a/instfiles/km-0419.ini b/instfiles/km-0419.ini
index c53fa959..81395886 100644
--- a/instfiles/km-0419.ini
+++ b/instfiles/km-0419.ini
@@ -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
+
diff --git a/instfiles/km-041d.ini b/instfiles/km-041d.ini
index 2c40400f..3cf432b2 100644
--- a/instfiles/km-041d.ini
+++ b/instfiles/km-041d.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=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
+
diff --git a/instfiles/km-0816.ini b/instfiles/km-0816.ini
index bf3def89..3a5801b2 100644
--- a/instfiles/km-0816.ini
+++ b/instfiles/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,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
+
diff --git a/librfxcodec b/librfxcodec
-Subproject de6a45cba607b902da704304fa3de8ddd3d1523
+Subproject 61f6e92ecdfd057215da7932b6afefcbfa92844
diff --git a/libxrdp/libxrdp.h b/libxrdp/libxrdp.h
index 0bda9f45..5f60183d 100644
--- a/libxrdp/libxrdp.h
+++ b/libxrdp/libxrdp.h
@@ -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 */
diff --git a/libxrdp/xrdp_mcs.c b/libxrdp/xrdp_mcs.c
index 716ad13f..dafbbcd9 100644
--- a/libxrdp/xrdp_mcs.c
+++ b/libxrdp/xrdp_mcs.c
@@ -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;
}
diff --git a/libxrdp/xrdp_sec.c b/libxrdp/xrdp_sec.c
index 63957a45..561acd1f 100644
--- a/libxrdp/xrdp_sec.c
+++ b/libxrdp/xrdp_sec.c
@@ -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"));
diff --git a/neutrinordp/xrdp-neutrinordp.c b/neutrinordp/xrdp-neutrinordp.c
index 6c8b17ac..0b90767d 100644
--- a/neutrinordp/xrdp-neutrinordp.c
+++ b/neutrinordp/xrdp-neutrinordp.c
@@ -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);
diff --git a/sesman/chansrv/Makefile.am b/sesman/chansrv/Makefile.am
index 81218db1..7a97c136 100644
--- a/sesman/chansrv/Makefile.am
+++ b/sesman/chansrv/Makefile.am
@@ -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)
diff --git a/sesman/chansrv/chansrv_common.c b/sesman/chansrv/chansrv_common.c
new file mode 100644
index 00000000..fd26da7c
--- /dev/null
+++ b/sesman/chansrv/chansrv_common.c
@@ -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;
+}
+
diff --git a/sesman/chansrv/chansrv_common.h b/sesman/chansrv/chansrv_common.h
new file mode 100644
index 00000000..833e3359
--- /dev/null
+++ b/sesman/chansrv/chansrv_common.h
@@ -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
+
diff --git a/sesman/chansrv/pulse/module-xrdp-source.c b/sesman/chansrv/pulse/module-xrdp-source.c
index 1c03b069..3d73fd03 100644
--- a/sesman/chansrv/pulse/module-xrdp-source.c
+++ b/sesman/chansrv/pulse/module-xrdp-source.c
@@ -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");
}
diff --git a/sesman/chansrv/sound.c b/sesman/chansrv/sound.c
index f5e17fef..9943a15b 100644
--- a/sesman/chansrv/sound.c
+++ b/sesman/chansrv/sound.c
@@ -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;
+}
+
diff --git a/sesman/session.c b/sesman/session.c
index 856c969e..4ea48d35 100644
--- a/sesman/session.c
+++ b/sesman/session.c
@@ -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;
diff --git a/sesman/verify_user.c b/sesman/verify_user.c
index 98d3dd32..49c475c6 100644
--- a/sesman/verify_user.c
+++ b/sesman/verify_user.c
@@ -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);
}
/******************************************************************************/
diff --git a/sesman/verify_user_pam.c b/sesman/verify_user_pam.c
index eec12c66..a2b3f93a 100644
--- a/sesman/verify_user_pam.c
+++ b/sesman/verify_user_pam.c
@@ -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);
diff --git a/vnc/vnc.c b/vnc/vnc.c
index e50dd70f..bb04726d 100644
--- a/vnc/vnc.c
+++ b/vnc/vnc.c
@@ -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;
}
diff --git a/vnc/vnc.h b/vnc/vnc.h
index 947b521f..6d265beb 100644
--- a/vnc/vnc.h
+++ b/vnc/vnc.h
@@ -115,4 +115,5 @@ struct vnc
char* clip_data;
int clip_data_size;
tbus sck_obj;
+ int delay_ms;
};
diff --git a/xorg/server/Makefile b/xorg/server/Makefile
deleted file mode 100644
index 793334c7..00000000
--- a/xorg/server/Makefile
+++ /dev/null
@@ -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/
diff --git a/xorg/server/Makefile.am b/xorg/server/Makefile.am
new file mode 100644
index 00000000..bee2ef75
--- /dev/null
+++ b/xorg/server/Makefile.am
@@ -0,0 +1,7 @@
+EXTRA_DIST = bootstrap readme.txt
+
+SUBDIRS = \
+ module \
+ xrdpdev \
+ xrdpkeyb \
+ xrdpmouse
diff --git a/xorg/server/bootstrap b/xorg/server/bootstrap
new file mode 100755
index 00000000..ec344d3d
--- /dev/null
+++ b/xorg/server/bootstrap
@@ -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
diff --git a/xorg/server/configure.ac b/xorg/server/configure.ac
new file mode 100644
index 00000000..cb78dccf
--- /dev/null
+++ b/xorg/server/configure.ac
@@ -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
+
diff --git a/xorg/server/module/Makefile b/xorg/server/module/Makefile
deleted file mode 100644
index 8f1560d6..00000000
--- a/xorg/server/module/Makefile
+++ /dev/null
@@ -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
-
diff --git a/xorg/server/module/Makefile.am b/xorg/server/module/Makefile.am
new file mode 100644
index 00000000..07b24edc
--- /dev/null
+++ b/xorg/server/module/Makefile.am
@@ -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 =
diff --git a/xorg/server/module/rdp.h b/xorg/server/module/rdp.h
index 8a4d58c4..711750a2 100644
--- a/xorg/server/module/rdp.h
+++ b/xorg/server/module/rdp.h
@@ -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;
diff --git a/xorg/server/module/rdpCapture.c b/xorg/server/module/rdpCapture.c
index 5163e6ae..72b95535 100644
--- a/xorg/server/module/rdpCapture.c
+++ b/xorg/server/module/rdpCapture.c
@@ -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;
@@ -195,52 +199,66 @@ rdpCopyBox_a8r8g8b8_to_yuvalp(int ax, int ay,
}
/******************************************************************************/
+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:
diff --git a/xorg/server/module/rdpCapture.h b/xorg/server/module/rdpCapture.h
index 4dff1eea..c138947a 100644
--- a/xorg/server/module/rdpCapture.h
+++ b/xorg/server/module/rdpCapture.h
@@ -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
diff --git a/xorg/server/module/rdpClientCon.c b/xorg/server/module/rdpClientCon.c
index 35369063..21df291f 100644
--- a/xorg/server/module/rdpClientCon.c
+++ b/xorg/server/module/rdpClientCon.c
@@ -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>
diff --git a/xorg/server/module/rdpClientCon.h b/xorg/server/module/rdpClientCon.h
index a66abbcd..954e3ab0 100644
--- a/xorg/server/module/rdpClientCon.h
+++ b/xorg/server/module/rdpClientCon.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);
diff --git a/xorg/server/module/rdpComposite.c b/xorg/server/module/rdpComposite.c
index 7535d6c3..8c65ff1b 100644
--- a/xorg/server/module/rdpComposite.c
+++ b/xorg/server/module/rdpComposite.c
@@ -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>
diff --git a/xorg/server/module/rdpComposite.h b/xorg/server/module/rdpComposite.h
index 017cb41d..1c052ed8 100644
--- a/xorg/server/module/rdpComposite.h
+++ b/xorg/server/module/rdpComposite.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);
diff --git a/xorg/server/module/rdpCopyArea.c b/xorg/server/module/rdpCopyArea.c
index 708891f6..f135af6e 100644
--- a/xorg/server/module/rdpCopyArea.c
+++ b/xorg/server/module/rdpCopyArea.c
@@ -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) \
diff --git a/xorg/server/module/rdpCopyArea.h b/xorg/server/module/rdpCopyArea.h
index 654b6edc..881a8714 100644
--- a/xorg/server/module/rdpCopyArea.h
+++ b/xorg/server/module/rdpCopyArea.h
@@ -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);
diff --git a/xorg/server/module/rdpCopyPlane.c b/xorg/server/module/rdpCopyPlane.c
index 9ccf4c0a..3ce3d558 100644
--- a/xorg/server/module/rdpCopyPlane.c
+++ b/xorg/server/module/rdpCopyPlane.c
@@ -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) \
diff --git a/xorg/server/module/rdpCopyPlane.h b/xorg/server/module/rdpCopyPlane.h
index 6abd0293..66b372c9 100644
--- a/xorg/server/module/rdpCopyPlane.h
+++ b/xorg/server/module/rdpCopyPlane.h
@@ -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,
diff --git a/xorg/server/module/rdpCursor.c b/xorg/server/module/rdpCursor.c
index d4862df7..f85999de 100644
--- a/xorg/server/module/rdpCursor.c
+++ b/xorg/server/module/rdpCursor.c
@@ -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
diff --git a/xorg/server/module/rdpCursor.h b/xorg/server/module/rdpCursor.h
index 10a57d70..1be09f61 100644
--- a/xorg/server/module/rdpCursor.h
+++ b/xorg/server/module/rdpCursor.h
@@ -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
diff --git a/xorg/server/module/rdpDraw.h b/xorg/server/module/rdpDraw.h
index af65b46c..583ac7d1 100644
--- a/xorg/server/module/rdpDraw.h
+++ b/xorg/server/module/rdpDraw.h
@@ -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
diff --git a/xorg/server/module/rdpFillPolygon.c b/xorg/server/module/rdpFillPolygon.c
index 34fe4096..fdcc3472 100644
--- a/xorg/server/module/rdpFillPolygon.c
+++ b/xorg/server/module/rdpFillPolygon.c
@@ -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) \
diff --git a/xorg/server/module/rdpFillPolygon.h b/xorg/server/module/rdpFillPolygon.h
index cdbfb13a..6c929dd9 100644
--- a/xorg/server/module/rdpFillPolygon.h
+++ b/xorg/server/module/rdpFillPolygon.h
@@ -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);
diff --git a/xorg/server/module/rdpFillSpans.c b/xorg/server/module/rdpFillSpans.c
index 8e98940a..0afb664d 100644
--- a/xorg/server/module/rdpFillSpans.c
+++ b/xorg/server/module/rdpFillSpans.c
@@ -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) \
diff --git a/xorg/server/module/rdpFillSpans.h b/xorg/server/module/rdpFillSpans.h
index 5c1db533..ed1f6331 100644
--- a/xorg/server/module/rdpFillSpans.h
+++ b/xorg/server/module/rdpFillSpans.h
@@ -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);
diff --git a/xorg/server/module/rdpGC.c b/xorg/server/module/rdpGC.c
index f2668f3d..db5983e2 100644
--- a/xorg/server/module/rdpGC.c
+++ b/xorg/server/module/rdpGC.c
@@ -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
diff --git a/xorg/server/module/rdpGC.h b/xorg/server/module/rdpGC.h
index fcdd201d..11b0ef8b 100644
--- a/xorg/server/module/rdpGC.h
+++ b/xorg/server/module/rdpGC.h
@@ -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
diff --git a/xorg/server/module/rdpGlyphs.c b/xorg/server/module/rdpGlyphs.c
index e6fcbb30..1f97c3f1 100644
--- a/xorg/server/module/rdpGlyphs.c
+++ b/xorg/server/module/rdpGlyphs.c
@@ -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>
diff --git a/xorg/server/module/rdpGlyphs.h b/xorg/server/module/rdpGlyphs.h
index 0128fe7c..cbb2ca8b 100644
--- a/xorg/server/module/rdpGlyphs.h
+++ b/xorg/server/module/rdpGlyphs.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,
diff --git a/xorg/server/module/rdpImageGlyphBlt.c b/xorg/server/module/rdpImageGlyphBlt.c
index 74693fd9..0d1a7d6e 100644
--- a/xorg/server/module/rdpImageGlyphBlt.c
+++ b/xorg/server/module/rdpImageGlyphBlt.c
@@ -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) \
diff --git a/xorg/server/module/rdpImageGlyphBlt.h b/xorg/server/module/rdpImageGlyphBlt.h
index b71e5730..6857ee1b 100644
--- a/xorg/server/module/rdpImageGlyphBlt.h
+++ b/xorg/server/module/rdpImageGlyphBlt.h
@@ -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);
diff --git a/xorg/server/module/rdpImageText16.c b/xorg/server/module/rdpImageText16.c
index 7ad8012b..d1038912 100644
--- a/xorg/server/module/rdpImageText16.c
+++ b/xorg/server/module/rdpImageText16.c
@@ -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) \
diff --git a/xorg/server/module/rdpImageText16.h b/xorg/server/module/rdpImageText16.h
index b7d0a861..e2f2b03e 100644
--- a/xorg/server/module/rdpImageText16.h
+++ b/xorg/server/module/rdpImageText16.h
@@ -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);
diff --git a/xorg/server/module/rdpImageText8.c b/xorg/server/module/rdpImageText8.c
index abcfbff0..068f6d6d 100644
--- a/xorg/server/module/rdpImageText8.c
+++ b/xorg/server/module/rdpImageText8.c
@@ -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) \
diff --git a/xorg/server/module/rdpImageText8.h b/xorg/server/module/rdpImageText8.h
index cf7dd1bb..fbc67a10 100644
--- a/xorg/server/module/rdpImageText8.h
+++ b/xorg/server/module/rdpImageText8.h
@@ -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);
diff --git a/xorg/server/module/rdpInput.c b/xorg/server/module/rdpInput.c
index f19b2947..baf1ff3c 100644
--- a/xorg/server/module/rdpInput.c
+++ b/xorg/server/module/rdpInput.c
@@ -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;
}
}
diff --git a/xorg/server/module/rdpInput.h b/xorg/server/module/rdpInput.h
index c0991ace..98a0c239 100644
--- a/xorg/server/module/rdpInput.h
+++ b/xorg/server/module/rdpInput.h
@@ -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
diff --git a/xorg/server/module/rdpMain.c b/xorg/server/module/rdpMain.c
index 2f6db7c7..835be9db 100644
--- a/xorg/server/module/rdpMain.c
+++ b/xorg/server/module/rdpMain.c
@@ -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
diff --git a/xorg/server/module/rdpMain.h b/xorg/server/module/rdpMain.h
index 2d2cfbe1..33fc0e04 100644
--- a/xorg/server/module/rdpMain.h
+++ b/xorg/server/module/rdpMain.h
@@ -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
diff --git a/xorg/server/module/rdpMisc.c b/xorg/server/module/rdpMisc.c
index 653342fe..c7a61fc8 100644
--- a/xorg/server/module/rdpMisc.c
+++ b/xorg/server/module/rdpMisc.c
@@ -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)
diff --git a/xorg/server/module/rdpMisc.h b/xorg/server/module/rdpMisc.h
index 58f6bd31..07c6ec0d 100644
--- a/xorg/server/module/rdpMisc.h
+++ b/xorg/server/module/rdpMisc.h
@@ -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)
diff --git a/xorg/server/module/rdpPixmap.h b/xorg/server/module/rdpPixmap.h
index 7fce3186..e1c7c7ac 100644
--- a/xorg/server/module/rdpPixmap.h
+++ b/xorg/server/module/rdpPixmap.h
@@ -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);
diff --git a/xorg/server/module/rdpPolyArc.c b/xorg/server/module/rdpPolyArc.c
index 9a701dd8..8db3cffe 100644
--- a/xorg/server/module/rdpPolyArc.c
+++ b/xorg/server/module/rdpPolyArc.c
@@ -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) \
diff --git a/xorg/server/module/rdpPolyArc.h b/xorg/server/module/rdpPolyArc.h
index 7ebadc35..9af6566f 100644
--- a/xorg/server/module/rdpPolyArc.h
+++ b/xorg/server/module/rdpPolyArc.h
@@ -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
diff --git a/xorg/server/module/rdpPolyFillArc.c b/xorg/server/module/rdpPolyFillArc.c
index 437929ae..2ba49854 100644
--- a/xorg/server/module/rdpPolyFillArc.c
+++ b/xorg/server/module/rdpPolyFillArc.c
@@ -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) \
diff --git a/xorg/server/module/rdpPolyFillArc.h b/xorg/server/module/rdpPolyFillArc.h
index 9a9846e1..708f8eae 100644
--- a/xorg/server/module/rdpPolyFillArc.h
+++ b/xorg/server/module/rdpPolyFillArc.h
@@ -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
diff --git a/xorg/server/module/rdpPolyFillRect.c b/xorg/server/module/rdpPolyFillRect.c
index f61202b2..1b99b1e8 100644
--- a/xorg/server/module/rdpPolyFillRect.c
+++ b/xorg/server/module/rdpPolyFillRect.c
@@ -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) \
diff --git a/xorg/server/module/rdpPolyFillRect.h b/xorg/server/module/rdpPolyFillRect.h
index 94ac4b59..ab2c3c5f 100644
--- a/xorg/server/module/rdpPolyFillRect.h
+++ b/xorg/server/module/rdpPolyFillRect.h
@@ -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);
diff --git a/xorg/server/module/rdpPolyGlyphBlt.c b/xorg/server/module/rdpPolyGlyphBlt.c
index e43e676b..df48dcd4 100644
--- a/xorg/server/module/rdpPolyGlyphBlt.c
+++ b/xorg/server/module/rdpPolyGlyphBlt.c
@@ -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) \
diff --git a/xorg/server/module/rdpPolyGlyphBlt.h b/xorg/server/module/rdpPolyGlyphBlt.h
index 46ce1ac2..92b2dfbe 100644
--- a/xorg/server/module/rdpPolyGlyphBlt.h
+++ b/xorg/server/module/rdpPolyGlyphBlt.h
@@ -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);
diff --git a/xorg/server/module/rdpPolyPoint.c b/xorg/server/module/rdpPolyPoint.c
index 5dfac5ef..9624f829 100644
--- a/xorg/server/module/rdpPolyPoint.c
+++ b/xorg/server/module/rdpPolyPoint.c
@@ -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) \
diff --git a/xorg/server/module/rdpPolyPoint.h b/xorg/server/module/rdpPolyPoint.h
index 06d1d428..9acc4d10 100644
--- a/xorg/server/module/rdpPolyPoint.h
+++ b/xorg/server/module/rdpPolyPoint.h
@@ -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);
diff --git a/xorg/server/module/rdpPolyRectangle.c b/xorg/server/module/rdpPolyRectangle.c
index 18311907..946e798a 100644
--- a/xorg/server/module/rdpPolyRectangle.c
+++ b/xorg/server/module/rdpPolyRectangle.c
@@ -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) \
diff --git a/xorg/server/module/rdpPolyRectangle.h b/xorg/server/module/rdpPolyRectangle.h
index d09446d5..6cd190d9 100644
--- a/xorg/server/module/rdpPolyRectangle.h
+++ b/xorg/server/module/rdpPolyRectangle.h
@@ -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);
diff --git a/xorg/server/module/rdpPolySegment.c b/xorg/server/module/rdpPolySegment.c
index 98e4eb1f..ad01bda1 100644
--- a/xorg/server/module/rdpPolySegment.c
+++ b/xorg/server/module/rdpPolySegment.c
@@ -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) \
diff --git a/xorg/server/module/rdpPolySegment.h b/xorg/server/module/rdpPolySegment.h
index 104fc37d..37756ae1 100644
--- a/xorg/server/module/rdpPolySegment.h
+++ b/xorg/server/module/rdpPolySegment.h
@@ -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
diff --git a/xorg/server/module/rdpPolyText16.c b/xorg/server/module/rdpPolyText16.c
index 90d68a8c..eaa34323 100644
--- a/xorg/server/module/rdpPolyText16.c
+++ b/xorg/server/module/rdpPolyText16.c
@@ -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) \
diff --git a/xorg/server/module/rdpPolyText16.h b/xorg/server/module/rdpPolyText16.h
index 9719a890..c94a8fd9 100644
--- a/xorg/server/module/rdpPolyText16.h
+++ b/xorg/server/module/rdpPolyText16.h
@@ -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);
diff --git a/xorg/server/module/rdpPolyText8.c b/xorg/server/module/rdpPolyText8.c
index 630bc04e..aa744b59 100644
--- a/xorg/server/module/rdpPolyText8.c
+++ b/xorg/server/module/rdpPolyText8.c
@@ -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) \
diff --git a/xorg/server/module/rdpPolyText8.h b/xorg/server/module/rdpPolyText8.h
index 621251b9..64ce2f3e 100644
--- a/xorg/server/module/rdpPolyText8.h
+++ b/xorg/server/module/rdpPolyText8.h
@@ -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);
diff --git a/xorg/server/module/rdpPolylines.c b/xorg/server/module/rdpPolylines.c
index da979e9f..cd87ecf3 100644
--- a/xorg/server/module/rdpPolylines.c
+++ b/xorg/server/module/rdpPolylines.c
@@ -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) \
diff --git a/xorg/server/module/rdpPolylines.h b/xorg/server/module/rdpPolylines.h
index 56b66a77..db11d69c 100644
--- a/xorg/server/module/rdpPolylines.h
+++ b/xorg/server/module/rdpPolylines.h
@@ -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);
diff --git a/xorg/server/module/rdpPri.h b/xorg/server/module/rdpPri.h
index 97e570f5..f312c88c 100644
--- a/xorg/server/module/rdpPri.h
+++ b/xorg/server/module/rdpPri.h
@@ -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
diff --git a/xorg/server/module/rdpPushPixels.c b/xorg/server/module/rdpPushPixels.c
index 8ab046b8..902b4251 100644
--- a/xorg/server/module/rdpPushPixels.c
+++ b/xorg/server/module/rdpPushPixels.c
@@ -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)
{
diff --git a/xorg/server/module/rdpPushPixels.h b/xorg/server/module/rdpPushPixels.h
index a3e49482..afc336de 100644
--- a/xorg/server/module/rdpPushPixels.h
+++ b/xorg/server/module/rdpPushPixels.h
@@ -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);
diff --git a/xorg/server/module/rdpPutImage.c b/xorg/server/module/rdpPutImage.c
index b7134479..39bf284e 100644
--- a/xorg/server/module/rdpPutImage.c
+++ b/xorg/server/module/rdpPutImage.c
@@ -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) \
diff --git a/xorg/server/module/rdpPutImage.h b/xorg/server/module/rdpPutImage.h
index f50a9528..2df9a801 100644
--- a/xorg/server/module/rdpPutImage.h
+++ b/xorg/server/module/rdpPutImage.h
@@ -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);
diff --git a/xorg/server/module/rdpRandR.c b/xorg/server/module/rdpRandR.c
index 37577645..049aafab 100644
--- a/xorg/server/module/rdpRandR.c
+++ b/xorg/server/module/rdpRandR.c
@@ -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,
diff --git a/xorg/server/module/rdpRandR.h b/xorg/server/module/rdpRandR.h
index caadf336..ab31e345 100644
--- a/xorg/server/module/rdpRandR.h
+++ b/xorg/server/module/rdpRandR.h
@@ -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);
diff --git a/xorg/server/module/rdpReg.c b/xorg/server/module/rdpReg.c
index 8ff7d79d..30b13438 100644
--- a/xorg/server/module/rdpReg.c
+++ b/xorg/server/module/rdpReg.c
@@ -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
diff --git a/xorg/server/module/rdpReg.h b/xorg/server/module/rdpReg.h
index a5cd73bf..053cf6dd 100644
--- a/xorg/server/module/rdpReg.h
+++ b/xorg/server/module/rdpReg.h
@@ -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
diff --git a/xorg/server/module/rdpSetSpans.c b/xorg/server/module/rdpSetSpans.c
index e31ec6d4..3cb30321 100644
--- a/xorg/server/module/rdpSetSpans.c
+++ b/xorg/server/module/rdpSetSpans.c
@@ -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
diff --git a/xorg/server/module/rdpSetSpans.h b/xorg/server/module/rdpSetSpans.h
index c6f73642..3b277f92 100644
--- a/xorg/server/module/rdpSetSpans.h
+++ b/xorg/server/module/rdpSetSpans.h
@@ -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);
diff --git a/xorg/server/module/rdpSimd.c b/xorg/server/module/rdpSimd.c
index 7215bf86..be4bc736 100644
--- a/xorg/server/module/rdpSimd.c
+++ b/xorg/server/module/rdpSimd.c
@@ -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;
}
diff --git a/xorg/server/module/rdpSimd.h b/xorg/server/module/rdpSimd.h
index 73bf1ba5..f73e110f 100644
--- a/xorg/server/module/rdpSimd.h
+++ b/xorg/server/module/rdpSimd.h
@@ -28,7 +28,7 @@ SIMD function asign
#include <xorgVersion.h>
#include <xf86.h>
-Bool
+extern _X_EXPORT Bool
rdpSimdInit(ScreenPtr pScreen, ScrnInfoPtr pScrn);
#endif
diff --git a/xorg/server/module/rdpTrapezoids.c b/xorg/server/module/rdpTrapezoids.c
index 212780ce..41304a71 100644
--- a/xorg/server/module/rdpTrapezoids.c
+++ b/xorg/server/module/rdpTrapezoids.c
@@ -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>
diff --git a/xorg/server/module/rdpTrapezoids.h b/xorg/server/module/rdpTrapezoids.h
index 77738dc4..a98cacd3 100644
--- a/xorg/server/module/rdpTrapezoids.h
+++ b/xorg/server/module/rdpTrapezoids.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);
diff --git a/xorg/server/module/rdpXv.c b/xorg/server/module/rdpXv.c
index 1557f892..15375720 100644
--- a/xorg/server/module/rdpXv.c
+++ b/xorg/server/module/rdpXv.c
@@ -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);
}
diff --git a/xorg/server/module/rdpXv.h b/xorg/server/module/rdpXv.h
index 9cf28700..2dbbc729 100644
--- a/xorg/server/module/rdpXv.h
+++ b/xorg/server/module/rdpXv.h
@@ -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
diff --git a/xorg/server/module/x86/a8r8g8b8_to_a8b8g8r8_box_x86_sse2.asm b/xorg/server/module/x86/a8r8g8b8_to_a8b8g8r8_box_x86_sse2.asm
new file mode 100644
index 00000000..72563214
--- /dev/null
+++ b/xorg/server/module/x86/a8r8g8b8_to_a8b8g8r8_box_x86_sse2.asm
@@ -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
+
diff --git a/xorg/server/module/x86/funcs_x86.h b/xorg/server/module/x86/funcs_x86.h
index 00724e62..775dd12d 100644
--- a/xorg/server/module/x86/funcs_x86.h
+++ b/xorg/server/module/x86/funcs_x86.h
@@ -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
diff --git a/xorg/server/readme.txt b/xorg/server/readme.txt
index 28bbc692..13fd064e 100644
--- a/xorg/server/readme.txt
+++ b/xorg/server/readme.txt
@@ -1,5 +1,47 @@
------------------------------------------------------
+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
------------------------------------------------------
diff --git a/xorg/server/xrdpdev/Makefile b/xorg/server/xrdpdev/Makefile
deleted file mode 100644
index bd17699f..00000000
--- a/xorg/server/xrdpdev/Makefile
+++ /dev/null
@@ -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
diff --git a/xorg/server/xrdpdev/Makefile.am b/xorg/server/xrdpdev/Makefile.am
new file mode 100644
index 00000000..be7f3689
--- /dev/null
+++ b/xorg/server/xrdpdev/Makefile.am
@@ -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 =
diff --git a/xorg/server/xrdpdev/xrdpdev.c b/xorg/server/xrdpdev/xrdpdev.c
index 5a863f00..29de4688 100644
--- a/xorg/server/xrdpdev/xrdpdev.c
+++ b/xorg/server/xrdpdev/xrdpdev.c
@@ -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,
@@ -620,6 +622,17 @@ rdpValidMode(ScrnInfoPtr a, DisplayModePtr b, Bool c, int d)
}
/*****************************************************************************/
+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");
}
}
diff --git a/xorg/server/xrdpkeyb/Makefile b/xorg/server/xrdpkeyb/Makefile
deleted file mode 100644
index 8c81fcee..00000000
--- a/xorg/server/xrdpkeyb/Makefile
+++ /dev/null
@@ -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
diff --git a/xorg/server/xrdpkeyb/Makefile.am b/xorg/server/xrdpkeyb/Makefile.am
new file mode 100644
index 00000000..f79f7af2
--- /dev/null
+++ b/xorg/server/xrdpkeyb/Makefile.am
@@ -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 =
diff --git a/xorg/server/xrdpkeyb/rdpKeyboard.c b/xorg/server/xrdpkeyb/rdpKeyboard.c
index 0157de21..8c8a7c27 100644
--- a/xorg/server/xrdpkeyb/rdpKeyboard.c
+++ b/xorg/server/xrdpkeyb/rdpKeyboard.c
@@ -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);
}
/******************************************************************************/
diff --git a/xorg/server/xrdpmouse/Makefile b/xorg/server/xrdpmouse/Makefile
deleted file mode 100644
index 905308ad..00000000
--- a/xorg/server/xrdpmouse/Makefile
+++ /dev/null
@@ -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
diff --git a/xorg/server/xrdpmouse/Makefile.am b/xorg/server/xrdpmouse/Makefile.am
new file mode 100644
index 00000000..367342a4
--- /dev/null
+++ b/xorg/server/xrdpmouse/Makefile.am
@@ -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 =
diff --git a/xorg/server/xrdpmouse/rdpMouse.c b/xorg/server/xrdpmouse/rdpMouse.c
index d64e9233..bb70e8a7 100644
--- a/xorg/server/xrdpmouse/rdpMouse.c
+++ b/xorg/server/xrdpmouse/rdpMouse.c
@@ -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);
}
/******************************************************************************/
diff --git a/xorgxrdp b/xorgxrdp
new file mode 160000
+Subproject 7c4d67356db815a9b4b003fca06394f43aaf7f8
diff --git a/xrdp/lang.c b/xrdp/lang.c
index 5ffff0eb..a2942599 100644
--- a/xrdp/lang.c
+++ b/xrdp/lang.c
@@ -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)
{
diff --git a/xrdp/xrdp.ini b/xrdp/xrdp.ini
index 59122a00..34adb077 100644
--- a/xrdp/xrdp.ini
+++ b/xrdp/xrdp.ini
@@ -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
diff --git a/xrdp/xrdp_keyboard.ini b/xrdp/xrdp_keyboard.ini
index bd4e4e68..433d71cf 100644
--- a/xrdp/xrdp_keyboard.ini
+++ b/xrdp/xrdp_keyboard.ini
@@ -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
diff --git a/xrdp/xrdp_types.h b/xrdp/xrdp_types.h
index 89a7ce93..29aaac84 100644
--- a/xrdp/xrdp_types.h
+++ b/xrdp/xrdp_types.h
@@ -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 */