diff options
author | fluffy <fluffy@FreeBSD.org> | 2014-01-15 05:44:43 +0000 |
---|---|---|
committer | fluffy <fluffy@FreeBSD.org> | 2014-01-15 05:44:43 +0000 |
commit | 950d19f591633861f875a4b2623bac0a52c50ba2 (patch) | |
tree | 0078376f6a038cb5bf67fd6f209d9aec5e56e5e9 | |
parent | d98a95497ed1be788b054a474e06a891a822c174 (diff) | |
download | FreeBSD-ports-950d19f591633861f875a4b2623bac0a52c50ba2.zip FreeBSD-ports-950d19f591633861f875a4b2623bac0a52c50ba2.tar.gz |
- Update FreeRDP to 1.1.0.2013070101 beta release
- Update Remmina and Remmina plugins collection to git commit b6a55ae
- Use new style for LIB_DEPENDS
- Stagify
28 files changed, 29032 insertions, 884 deletions
diff --git a/net/freerdp/Makefile b/net/freerdp/Makefile index 3558f96..dcf846b 100644 --- a/net/freerdp/Makefile +++ b/net/freerdp/Makefile @@ -2,7 +2,8 @@ # $FreeBSD$ PORTNAME= freerdp -PORTVERSION= 1.0.2 +PORTVERSION= 1.1.0.b20130711 +DISTVERSION= 1.1.0-beta+2013071101 CATEGORIES= net comms ipv6 MAINTAINER= fluffy@FreeBSD.org @@ -17,18 +18,17 @@ USES= cmake pkgconfig USE_GITHUB= yes GH_ACCOUNT= FreeRDP GH_PROJECT= FreeRDP -GH_COMMIT= 616aed4 +GH_COMMIT= 780d451 GH_TAGNAME= ${GH_COMMIT} LDFLAGS+= -L${LOCALBASE}/lib CFLAGS+= -I${WRKSRC}/include -I${LOCALBASE}/include -OPTIONS_DEFINE= ALSA CUPS DIRECTFB FFMPEG PULSEAUDIO SSE X11 -OPTIONS_DEFAULT= CUPS PULSEAUDIO X11 +OPTIONS_DEFINE= ALSA CUPS DIRECTFB FFMPEG GSTREAMER PULSEAUDIO SSE X11 +OPTIONS_DEFAULT= CUPS GSTREAMER PULSEAUDIO X11 X11_DESC= Build FreeRDP X11 client DIRECTFB_DESC= Build FreeRDP DirectFB client -NO_STAGE= yes .include <bsd.port.options.mk> .if ${PORT_OPTIONS:MX11} @@ -43,7 +43,7 @@ PLIST_SUB+= X11="@comment " .endif .if ${PORT_OPTIONS:MDIRECTFB} -LIB_DEPENDS+= directfb:${PORTSDIR}/devel/directfb +LIB_DEPENDS+= libdirectfb.so:${PORTSDIR}/devel/directfb CMAKE_ARGS+= -DWITH_DIRECTFB=ON PLIST_SUB+= DIRECTFB="" # currently DirectFB option fails with clang @@ -53,7 +53,7 @@ PLIST_SUB+= DIRECTFB="@comment " .endif .if ${PORT_OPTIONS:MALSA} -LIB_DEPENDS+= asound:${PORTSDIR}/audio/alsa-lib +LIB_DEPENDS+= libasound.so:${PORTSDIR}/audio/alsa-lib PLIST_SUB+= ALSA="" .else PLIST_SUB+= ALSA="@comment " @@ -69,20 +69,27 @@ CMAKE_ARGS+= -DWITH_FFMPEG=OFF PLIST_SUB+= FFMPEG="@comment " .endif +.if ${PORT_OPTIONS:MGSTREAMER} +CMAKE_ARGS+= -DWITH_GSTREAMER=ON +USE_GSTREAMER= yes +.else +CMAKE_ARGS+= -DWITH_GSTREAMER=OFF +.endif + .if ${PORT_OPTIONS:MCUPS} CMAKE_ARGS+= -DWITH_CUPS=ON -LIB_DEPENDS+= cups:${PORTSDIR}/print/cups-client +LIB_DEPENDS+= libcups.so:${PORTSDIR}/print/cups-client .else CMAKE_ARGS+= -DWITH_CUPS=OFF .endif .if ${PORT_OPTIONS:MPULSEAUDIO} -CMAKE_ARGS+= -DWITH_PULSEAUDIO=ON -LIB_DEPENDS+= pulse:${PORTSDIR}/audio/pulseaudio +CMAKE_ARGS+= -DWITH_PULSE=ON +LIB_DEPENDS+= libpulse.so:${PORTSDIR}/audio/pulseaudio PLIST_SUB+= PULSE="" .else PLIST_SUB+= PULSE="@comment " -CMAKE_ARGS+= -DWITH_PULSEAUDIO=OFF +CMAKE_ARGS+= -DWITH_PULSE=OFF .endif .if ${PORT_OPTIONS:MSSE} @@ -93,7 +100,13 @@ CMAKE_ARGS+= -DWITH_SSE2=OFF post-extract: ${REINPLACE_CMD} -e 's|$${CMAKE_INSTALL_LIBDIR}/pkgconfig|libdata/pkgconfig|' \ + -e '/CMAKE_INSTALL_RPATH /d' \ ${WRKSRC}/CMakeLists.txt ${REINPLACE_CMD} -e 's|share/man/man1|man/man1|' \ ${WRKSRC}/client/X11/CMakeLists.txt + ${REINPLACE_CMD} -e 's|HW_AVAILCPU|HW_NCPU|' \ + ${WRKSRC}/winpr/libwinpr/sysinfo/sysinfo.c + ${REINPLACE_CMD} -e 's|<malloc.h>|<stdlib.h>|' \ + ${WRKSRC}/winpr/libwinpr/crt/alignment.c \ + ${WRKSRC}/channels/drive/client/statvfs.c .include <bsd.port.mk> diff --git a/net/freerdp/distinfo b/net/freerdp/distinfo index 601a1f7..2100036 100644 --- a/net/freerdp/distinfo +++ b/net/freerdp/distinfo @@ -1,2 +1,2 @@ -SHA256 (freerdp-1.0.2.tar.gz) = 0b12eca36a97327a3202866a08a3afef645e4e4534dfca2138449246fac4ff6a -SIZE (freerdp-1.0.2.tar.gz) = 3506618 +SHA256 (freerdp-1.1.0-beta+2013071101.tar.gz) = ead34bb077451190abc177c5fda036b74191dba02045d69b59d0b9f29e9a1b38 +SIZE (freerdp-1.1.0-beta+2013071101.tar.gz) = 6677686 diff --git a/net/freerdp/files/patch-channels-drdynvc-tsmf-ffmpeg-tsmf_ffmpeg.c b/net/freerdp/files/patch-channels-drdynvc-tsmf-ffmpeg-tsmf_ffmpeg.c deleted file mode 100644 index ca85a5f..0000000 --- a/net/freerdp/files/patch-channels-drdynvc-tsmf-ffmpeg-tsmf_ffmpeg.c +++ /dev/null @@ -1,36 +0,0 @@ ---- channels/drdynvc/tsmf/ffmpeg/tsmf_ffmpeg.c.orig 2013-10-25 08:48:35.385869420 -0200 -+++ channels/drdynvc/tsmf/ffmpeg/tsmf_ffmpeg.c 2013-10-25 08:54:54.476872888 -0200 -@@ -34,12 +34,16 @@ - #define AVMEDIA_TYPE_AUDIO 1 - #endif - -+#ifndef AVCODEC_MAX_AUDIO_FRAME_SIZE -+#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 -+#endif -+ - typedef struct _TSMFFFmpegDecoder - { - ITSMFDecoder iface; - - int media_type; -- enum CodecID codec_id; -+ enum AVCodecID codec_id; - AVCodecContext* codec_context; - AVCodec* codec; - AVFrame* frame; -@@ -89,13 +93,9 @@ - mdecoder->codec_context->block_align = media_type->BlockAlign; - - #ifdef AV_CPU_FLAG_SSE2 -- mdecoder->codec_context->dsp_mask = AV_CPU_FLAG_SSE2 | AV_CPU_FLAG_MMX2; -+ av_set_cpu_flags_mask(AV_CPU_FLAG_SSE2 | AV_CPU_FLAG_MMX2); - #else --#if LIBAVCODEC_VERSION_MAJOR < 53 -- mdecoder->codec_context->dsp_mask = FF_MM_SSE2 | FF_MM_MMXEXT; --#else -- mdecoder->codec_context->dsp_mask = FF_MM_SSE2 | FF_MM_MMX2; --#endif -+ av_set_cpu_flags_mask(FF_MM_SSE2 | FF_MM_MMX2); - #endif - - return true; diff --git a/net/freerdp/files/patch-channels-tsmf-client-ffmpeg-tsmf_ffmpeg.c b/net/freerdp/files/patch-channels-tsmf-client-ffmpeg-tsmf_ffmpeg.c new file mode 100644 index 0000000..db57921 --- /dev/null +++ b/net/freerdp/files/patch-channels-tsmf-client-ffmpeg-tsmf_ffmpeg.c @@ -0,0 +1,36 @@ +--- channels/tsmf/client/ffmpeg/tsmf_ffmpeg.c.orig 2013-07-10 01:00:21.000000000 -0700 ++++ channels/tsmf/client/ffmpeg/tsmf_ffmpeg.c 2013-08-12 22:26:28.000000000 -0700 +@@ -43,12 +43,20 @@ + #define AVMEDIA_TYPE_AUDIO 1 + #endif + ++#ifndef AVCODEC_MAX_AUDIO_FRAME_SIZE ++#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 // 1 second of 48khz 32bit audio ++#endif ++ + typedef struct _TSMFFFmpegDecoder + { + ITSMFDecoder iface; + + int media_type; ++#if LIBAVCODEC_VERSION_MAJOR > 54 ++ enum AVCodecID codec_id; ++#else + enum CodecID codec_id; ++#endif + AVCodecContext* codec_context; + AVCodec* codec; + AVFrame* frame; +@@ -99,8 +107,12 @@ + mdecoder->codec_context->block_align = media_type->BlockAlign; + + #ifdef AV_CPU_FLAG_SSE2 ++#if LIBAVCODEC_VERSION_MAJOR < 55 + mdecoder->codec_context->dsp_mask = AV_CPU_FLAG_SSE2 | AV_CPU_FLAG_MMX2; + #else ++ av_set_cpu_flags_mask(AV_CPU_FLAG_SSE2 | AV_CPU_FLAG_MMX2); ++#endif ++#else + #if LIBAVCODEC_VERSION_MAJOR < 53 + mdecoder->codec_context->dsp_mask = FF_MM_SSE2 | FF_MM_MMXEXT; + #else diff --git a/net/freerdp/files/patch-libfreerdp-codec_CMakeLists.txt b/net/freerdp/files/patch-libfreerdp-codec_CMakeLists.txt deleted file mode 100644 index 0cc797a..0000000 --- a/net/freerdp/files/patch-libfreerdp-codec_CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ ---- libfreerdp-codec/CMakeLists.txt.orig 2013-01-02 21:46:59.000000000 +0000 -+++ libfreerdp-codec/CMakeLists.txt 2013-02-27 09:09:10.180252424 +0000 -@@ -46,7 +46,7 @@ - rfx_sse2.c - rfx_sse2.h - ) -- set_property(SOURCE rfx_sse2.c PROPERTY COMPILE_FLAGS "-msse2") -+ set_property(SOURCE rfx_sse2.c nsc_sse2.c PROPERTY COMPILE_FLAGS "-msse2") - endif() - - if(WITH_NEON) diff --git a/net/freerdp/files/patch-libfreerdp-codec_color.c b/net/freerdp/files/patch-libfreerdp-codec_color.c deleted file mode 100644 index 7dd14a9..0000000 --- a/net/freerdp/files/patch-libfreerdp-codec_color.c +++ /dev/null @@ -1,40 +0,0 @@ -diff --git a/libfreerdp-codec/color.c b/libfreerdp-codec/color.c -index dc77707..ee3c1fa 100644 ---- libfreerdp-codec/color.c -+++ libfreerdp-codec/color.c -@@ -86,7 +86,7 @@ void freerdp_set_pixel(uint8* data, int x, int y, int width, int height, int bpp - } - } - --INLINE void freerdp_color_split_rgb(uint32* color, int bpp, uint8* red, uint8* green, uint8* blue, uint8* alpha, HCLRCONV clrconv) -+static INLINE void freerdp_color_split_rgb(uint32* color, int bpp, uint8* red, uint8* green, uint8* blue, uint8* alpha, HCLRCONV clrconv) - { - *red = *green = *blue = 0; - *alpha = (clrconv->alpha) ? 0xFF : 0x00; -@@ -137,7 +137,7 @@ INLINE void freerdp_color_split_rgb(uint32* color, int bpp, uint8* red, uint8* g - } - } - --INLINE void freerdp_color_split_bgr(uint32* color, int bpp, uint8* red, uint8* green, uint8* blue, uint8* alpha, HCLRCONV clrconv) -+static INLINE void freerdp_color_split_bgr(uint32* color, int bpp, uint8* red, uint8* green, uint8* blue, uint8* alpha, HCLRCONV clrconv) - { - *red = *green = *blue = 0; - *alpha = (clrconv->alpha) ? 0xFF : 0x00; -@@ -188,7 +188,7 @@ INLINE void freerdp_color_split_bgr(uint32* color, int bpp, uint8* red, uint8* g - } - } - --INLINE void freerdp_color_make_rgb(uint32* color, int bpp, uint8* red, uint8* green, uint8* blue, uint8* alpha, HCLRCONV clrconv) -+static INLINE void freerdp_color_make_rgb(uint32* color, int bpp, uint8* red, uint8* green, uint8* blue, uint8* alpha, HCLRCONV clrconv) - { - switch (bpp) - { -@@ -229,7 +229,7 @@ INLINE void freerdp_color_make_rgb(uint32* color, int bpp, uint8* red, uint8* gr - } - } - --INLINE void freerdp_color_make_bgr(uint32* color, int bpp, uint8* red, uint8* green, uint8* blue, uint8* alpha, HCLRCONV clrconv) -+static INLINE void freerdp_color_make_bgr(uint32* color, int bpp, uint8* red, uint8* green, uint8* blue, uint8* alpha, HCLRCONV clrconv) - { - switch (bpp) - { diff --git a/net/freerdp/files/patch-libfreerdp-core_fastpath.c b/net/freerdp/files/patch-libfreerdp-core_fastpath.c deleted file mode 100644 index 09feb4a..0000000 --- a/net/freerdp/files/patch-libfreerdp-core_fastpath.c +++ /dev/null @@ -1,22 +0,0 @@ -diff --git a/libfreerdp-core/fastpath.c b/libfreerdp-core/fastpath.c -index dc9caac..587c316 100644 ---- libfreerdp-core/fastpath.c -+++ libfreerdp-core/fastpath.c -@@ -82,7 +82,7 @@ uint16 fastpath_read_header(rdpFastPath* fastpath, STREAM* s) - return length; - } - --INLINE void fastpath_read_update_header(STREAM* s, uint8* updateCode, uint8* fragmentation, uint8* compression) -+static INLINE void fastpath_read_update_header(STREAM* s, uint8* updateCode, uint8* fragmentation, uint8* compression) - { - uint8 updateHeader; - -@@ -92,7 +92,7 @@ INLINE void fastpath_read_update_header(STREAM* s, uint8* updateCode, uint8* fra - *compression = (updateHeader >> 6) & 0x03; - } - --INLINE void fastpath_write_update_header(STREAM* s, uint8 updateCode, uint8 fragmentation, uint8 compression) -+static INLINE void fastpath_write_update_header(STREAM* s, uint8 updateCode, uint8 fragmentation, uint8 compression) - { - uint8 updateHeader = 0; - diff --git a/net/freerdp/files/patch-libfreerdp-core_orders.c b/net/freerdp/files/patch-libfreerdp-core_orders.c deleted file mode 100644 index ca4f8a2..0000000 --- a/net/freerdp/files/patch-libfreerdp-core_orders.c +++ /dev/null @@ -1,121 +0,0 @@ -diff --git a/libfreerdp-core/orders.c b/libfreerdp-core/orders.c -index 1ee0b89..6c33805 100644 ---- libfreerdp-core/orders.c -+++ libfreerdp-core/orders.c -@@ -138,7 +138,7 @@ static const uint8 BMF_BPP[] = - 0, 1, 0, 8, 16, 24, 32 - }; - --INLINE void update_read_coord(STREAM* s, sint32* coord, boolean delta) -+static INLINE void update_read_coord(STREAM* s, sint32* coord, boolean delta) - { - sint8 lsi8; - sint16 lsi16; -@@ -155,7 +155,7 @@ INLINE void update_read_coord(STREAM* s, sint32* coord, boolean delta) - } - } - --INLINE void update_read_color(STREAM* s, uint32* color) -+static INLINE void update_read_color(STREAM* s, uint32* color) - { - uint8 byte; - -@@ -167,7 +167,7 @@ INLINE void update_read_color(STREAM* s, uint32* color) - *color |= (byte << 16); - } - --INLINE void update_read_colorref(STREAM* s, uint32* color) -+static INLINE void update_read_colorref(STREAM* s, uint32* color) - { - uint8 byte; - -@@ -180,7 +180,7 @@ INLINE void update_read_colorref(STREAM* s, uint32* color) - stream_seek_uint8(s); - } - --INLINE void update_read_color_quad(STREAM* s, uint32* color) -+static INLINE void update_read_color_quad(STREAM* s, uint32* color) - { - uint8 byte; - -@@ -193,7 +193,7 @@ INLINE void update_read_color_quad(STREAM* s, uint32* color) - stream_seek_uint8(s); - } - --INLINE void update_read_2byte_unsigned(STREAM* s, uint32* value) -+static INLINE void update_read_2byte_unsigned(STREAM* s, uint32* value) - { - uint8 byte; - -@@ -211,7 +211,7 @@ INLINE void update_read_2byte_unsigned(STREAM* s, uint32* value) - } - } - --INLINE void update_read_2byte_signed(STREAM* s, sint32* value) -+static INLINE void update_read_2byte_signed(STREAM* s, sint32* value) - { - uint8 byte; - boolean negative; -@@ -232,7 +232,7 @@ INLINE void update_read_2byte_signed(STREAM* s, sint32* value) - *value *= -1; - } - --INLINE void update_read_4byte_unsigned(STREAM* s, uint32* value) -+static INLINE void update_read_4byte_unsigned(STREAM* s, uint32* value) - { - uint8 byte; - uint8 count; -@@ -276,7 +276,7 @@ INLINE void update_read_4byte_unsigned(STREAM* s, uint32* value) - } - } - --INLINE void update_read_delta(STREAM* s, sint32* value) -+static INLINE void update_read_delta(STREAM* s, sint32* value) - { - uint8 byte; - -@@ -294,7 +294,7 @@ INLINE void update_read_delta(STREAM* s, sint32* value) - } - } - --INLINE void update_read_glyph_delta(STREAM* s, uint16* value) -+static INLINE void update_read_glyph_delta(STREAM* s, uint16* value) - { - uint8 byte; - -@@ -306,7 +306,7 @@ INLINE void update_read_glyph_delta(STREAM* s, uint16* value) - *value = (byte & 0x3F); - } - --INLINE void update_seek_glyph_delta(STREAM* s) -+static INLINE void update_seek_glyph_delta(STREAM* s) - { - uint8 byte; - -@@ -316,7 +316,7 @@ INLINE void update_seek_glyph_delta(STREAM* s) - stream_seek_uint8(s); - } - --INLINE void update_read_brush(STREAM* s, rdpBrush* brush, uint8 fieldFlags) -+static INLINE void update_read_brush(STREAM* s, rdpBrush* brush, uint8 fieldFlags) - { - if (fieldFlags & ORDER_FIELD_01) - stream_read_uint8(s, brush->x); -@@ -354,7 +354,7 @@ INLINE void update_read_brush(STREAM* s, rdpBrush* brush, uint8 fieldFlags) - } - } - --INLINE void update_read_delta_rects(STREAM* s, DELTA_RECT* rectangles, int number) -+static INLINE void update_read_delta_rects(STREAM* s, DELTA_RECT* rectangles, int number) - { - int i; - uint8 flags = 0; -@@ -399,7 +399,7 @@ INLINE void update_read_delta_rects(STREAM* s, DELTA_RECT* rectangles, int numbe - } - } - --INLINE void update_read_delta_points(STREAM* s, DELTA_POINT* points, int number, sint16 x, sint16 y) -+static INLINE void update_read_delta_points(STREAM* s, DELTA_POINT* points, int number, sint16 x, sint16 y) - { - int i; - uint8 flags = 0; diff --git a/net/freerdp/files/patch-libfreerdp-gdi_16bpp.c b/net/freerdp/files/patch-libfreerdp-gdi_16bpp.c deleted file mode 100644 index c69ea3d..0000000 --- a/net/freerdp/files/patch-libfreerdp-gdi_16bpp.c +++ /dev/null @@ -1,117 +0,0 @@ -diff --git a/libfreerdp-gdi/16bpp.c b/libfreerdp-gdi/16bpp.c -index 22b0009..46ca0df 100644 ---- libfreerdp-gdi/16bpp.c -+++ libfreerdp-gdi/16bpp.c -@@ -878,96 +878,96 @@ int PatBlt_16bpp(HGDI_DC hdc, int nXLeft, int nYLeft, int nWidth, int nHeight, i - return 1; - } - --INLINE void SetPixel_BLACK_16bpp(uint16 *pixel, uint16 *pen) -+static INLINE void SetPixel_BLACK_16bpp(uint16 *pixel, uint16 *pen) - { - /* D = 0 */ - *pixel = 0; - } - --INLINE void SetPixel_NOTMERGEPEN_16bpp(uint16 *pixel, uint16 *pen) -+static INLINE void SetPixel_NOTMERGEPEN_16bpp(uint16 *pixel, uint16 *pen) - { - /* D = ~(D | P) */ - *pixel = ~(*pixel | *pen); - } - --INLINE void SetPixel_MASKNOTPEN_16bpp(uint16 *pixel, uint16 *pen) -+static INLINE void SetPixel_MASKNOTPEN_16bpp(uint16 *pixel, uint16 *pen) - { - /* D = D & ~P */ - *pixel &= ~(*pen); - } - --INLINE void SetPixel_NOTCOPYPEN_16bpp(uint16 *pixel, uint16 *pen) -+static INLINE void SetPixel_NOTCOPYPEN_16bpp(uint16 *pixel, uint16 *pen) - { - /* D = ~P */ - *pixel = ~(*pen); - } - --INLINE void SetPixel_MASKPENNOT_16bpp(uint16 *pixel, uint16 *pen) -+static INLINE void SetPixel_MASKPENNOT_16bpp(uint16 *pixel, uint16 *pen) - { - /* D = P & ~D */ - *pixel = *pen & ~*pixel; - } - --INLINE void SetPixel_NOT_16bpp(uint16 *pixel, uint16 *pen) -+static INLINE void SetPixel_NOT_16bpp(uint16 *pixel, uint16 *pen) - { - /* D = ~D */ - *pixel = ~(*pixel); - } - --INLINE void SetPixel_XORPEN_16bpp(uint16 *pixel, uint16 *pen) -+static INLINE void SetPixel_XORPEN_16bpp(uint16 *pixel, uint16 *pen) - { - /* D = D ^ P */ - *pixel = *pixel ^ *pen; - } - --INLINE void SetPixel_NOTMASKPEN_16bpp(uint16 *pixel, uint16 *pen) -+static INLINE void SetPixel_NOTMASKPEN_16bpp(uint16 *pixel, uint16 *pen) - { - /* D = ~(D & P) */ - *pixel = ~(*pixel & *pen); - } - --INLINE void SetPixel_MASKPEN_16bpp(uint16 *pixel, uint16 *pen) -+static INLINE void SetPixel_MASKPEN_16bpp(uint16 *pixel, uint16 *pen) - { - /* D = D & P */ - *pixel &= *pen; - } - --INLINE void SetPixel_NOTXORPEN_16bpp(uint16 *pixel, uint16 *pen) -+static INLINE void SetPixel_NOTXORPEN_16bpp(uint16 *pixel, uint16 *pen) - { - /* D = ~(D ^ P) */ - *pixel = ~(*pixel ^ *pen); - } - --INLINE void SetPixel_NOP_16bpp(uint16 *pixel, uint16 *pen) -+static INLINE void SetPixel_NOP_16bpp(uint16 *pixel, uint16 *pen) - { - /* D = D */ - } - --INLINE void SetPixel_MERGENOTPEN_16bpp(uint16 *pixel, uint16 *pen) -+static INLINE void SetPixel_MERGENOTPEN_16bpp(uint16 *pixel, uint16 *pen) - { - /* D = D | ~P */ - *pixel |= ~(*pen); - } - --INLINE void SetPixel_COPYPEN_16bpp(uint16 *pixel, uint16 *pen) -+static INLINE void SetPixel_COPYPEN_16bpp(uint16 *pixel, uint16 *pen) - { - /* D = P */ - *pixel = *pen; - } - --INLINE void SetPixel_MERGEPENNOT_16bpp(uint16 *pixel, uint16 *pen) -+static INLINE void SetPixel_MERGEPENNOT_16bpp(uint16 *pixel, uint16 *pen) - { - /* D = P | ~D */ - *pixel = *pen | ~(*pixel); - } - --INLINE void SetPixel_MERGEPEN_16bpp(uint16 *pixel, uint16 *pen) -+static INLINE void SetPixel_MERGEPEN_16bpp(uint16 *pixel, uint16 *pen) - { - /* D = P | D */ - *pixel |= *pen; - } - --INLINE void SetPixel_WHITE_16bpp(uint16 *pixel, uint16 *pen) -+static INLINE void SetPixel_WHITE_16bpp(uint16 *pixel, uint16 *pen) - { - /* D = 1 */ - *pixel = 0xFFFF; diff --git a/net/freerdp/files/patch-libfreerdp-gdi_32bpp.c b/net/freerdp/files/patch-libfreerdp-gdi_32bpp.c deleted file mode 100644 index 1a78778..0000000 --- a/net/freerdp/files/patch-libfreerdp-gdi_32bpp.c +++ /dev/null @@ -1,117 +0,0 @@ -diff --git a/libfreerdp-gdi/32bpp.c b/libfreerdp-gdi/32bpp.c -index 8ed8553..0d5fbd2 100644 ---- libfreerdp-gdi/32bpp.c -+++ libfreerdp-gdi/32bpp.c -@@ -920,96 +920,96 @@ int PatBlt_32bpp(HGDI_DC hdc, int nXLeft, int nYLeft, int nWidth, int nHeight, i - return 1; - } - --INLINE void SetPixel_BLACK_32bpp(uint32* pixel, uint32* pen) -+static INLINE void SetPixel_BLACK_32bpp(uint32* pixel, uint32* pen) - { - /* D = 0 */ - *pixel = 0; - } - --INLINE void SetPixel_NOTMERGEPEN_32bpp(uint32* pixel, uint32* pen) -+static INLINE void SetPixel_NOTMERGEPEN_32bpp(uint32* pixel, uint32* pen) - { - /* D = ~(D | P) */ - *pixel = ~(*pixel | *pen); - } - --INLINE void SetPixel_MASKNOTPEN_32bpp(uint32* pixel, uint32* pen) -+static INLINE void SetPixel_MASKNOTPEN_32bpp(uint32* pixel, uint32* pen) - { - /* D = D & ~P */ - *pixel &= ~(*pen); - } - --INLINE void SetPixel_NOTCOPYPEN_32bpp(uint32* pixel, uint32* pen) -+static INLINE void SetPixel_NOTCOPYPEN_32bpp(uint32* pixel, uint32* pen) - { - /* D = ~P */ - *pixel = ~(*pen); - } - --INLINE void SetPixel_MASKPENNOT_32bpp(uint32* pixel, uint32* pen) -+static INLINE void SetPixel_MASKPENNOT_32bpp(uint32* pixel, uint32* pen) - { - /* D = P & ~D */ - *pixel = *pen & ~*pixel; - } - --INLINE void SetPixel_NOT_32bpp(uint32* pixel, uint32* pen) -+static INLINE void SetPixel_NOT_32bpp(uint32* pixel, uint32* pen) - { - /* D = ~D */ - *pixel = ~(*pixel); - } - --INLINE void SetPixel_XORPEN_32bpp(uint32* pixel, uint32* pen) -+static INLINE void SetPixel_XORPEN_32bpp(uint32* pixel, uint32* pen) - { - /* D = D ^ P */ - *pixel = *pixel ^ *pen; - } - --INLINE void SetPixel_NOTMASKPEN_32bpp(uint32* pixel, uint32* pen) -+static INLINE void SetPixel_NOTMASKPEN_32bpp(uint32* pixel, uint32* pen) - { - /* D = ~(D & P) */ - *pixel = ~(*pixel & *pen); - } - --INLINE void SetPixel_MASKPEN_32bpp(uint32* pixel, uint32* pen) -+static INLINE void SetPixel_MASKPEN_32bpp(uint32* pixel, uint32* pen) - { - /* D = D & P */ - *pixel &= *pen; - } - --INLINE void SetPixel_NOTXORPEN_32bpp(uint32* pixel, uint32* pen) -+static INLINE void SetPixel_NOTXORPEN_32bpp(uint32* pixel, uint32* pen) - { - /* D = ~(D ^ P) */ - *pixel = ~(*pixel ^ *pen); - } - --INLINE void SetPixel_NOP_32bpp(uint32* pixel, uint32* pen) -+static INLINE void SetPixel_NOP_32bpp(uint32* pixel, uint32* pen) - { - /* D = D */ - } - --INLINE void SetPixel_MERGENOTPEN_32bpp(uint32* pixel, uint32* pen) -+static INLINE void SetPixel_MERGENOTPEN_32bpp(uint32* pixel, uint32* pen) - { - /* D = D | ~P */ - *pixel |= ~(*pen); - } - --INLINE void SetPixel_COPYPEN_32bpp(uint32* pixel, uint32* pen) -+static INLINE void SetPixel_COPYPEN_32bpp(uint32* pixel, uint32* pen) - { - /* D = P */ - *pixel = *pen; - } - --INLINE void SetPixel_MERGEPENNOT_32bpp(uint32* pixel, uint32* pen) -+static INLINE void SetPixel_MERGEPENNOT_32bpp(uint32* pixel, uint32* pen) - { - /* D = P | ~D */ - *pixel = *pen | ~(*pixel); - } - --INLINE void SetPixel_MERGEPEN_32bpp(uint32* pixel, uint32* pen) -+static INLINE void SetPixel_MERGEPEN_32bpp(uint32* pixel, uint32* pen) - { - /* D = P | D */ - *pixel |= *pen; - } - --INLINE void SetPixel_WHITE_32bpp(uint32* pixel, uint32* pen) -+static INLINE void SetPixel_WHITE_32bpp(uint32* pixel, uint32* pen) - { - /* D = 1 */ - *pixel = 0xFFFFFF; diff --git a/net/freerdp/files/patch-libfreerdp-gdi_8bpp.c b/net/freerdp/files/patch-libfreerdp-gdi_8bpp.c deleted file mode 100644 index df60570..0000000 --- a/net/freerdp/files/patch-libfreerdp-gdi_8bpp.c +++ /dev/null @@ -1,117 +0,0 @@ -diff --git a/libfreerdp-gdi/8bpp.c b/libfreerdp-gdi/8bpp.c -index e10dde4..bddf327 100644 ---- libfreerdp-gdi/8bpp.c -+++ libfreerdp-gdi/8bpp.c -@@ -793,96 +793,96 @@ int PatBlt_8bpp(HGDI_DC hdc, int nXLeft, int nYLeft, int nWidth, int nHeight, in - return 1; - } - --INLINE void SetPixel_BLACK_8bpp(uint8* pixel, uint8* pen) -+static INLINE void SetPixel_BLACK_8bpp(uint8* pixel, uint8* pen) - { - /* D = 0 */ - *pixel = 0; - } - --INLINE void SetPixel_NOTMERGEPEN_8bpp(uint8* pixel, uint8* pen) -+static INLINE void SetPixel_NOTMERGEPEN_8bpp(uint8* pixel, uint8* pen) - { - /* D = ~(D | P) */ - *pixel = ~(*pixel | *pen); - } - --INLINE void SetPixel_MASKNOTPEN_8bpp(uint8* pixel, uint8* pen) -+static INLINE void SetPixel_MASKNOTPEN_8bpp(uint8* pixel, uint8* pen) - { - /* D = D & ~P */ - *pixel &= ~(*pen); - } - --INLINE void SetPixel_NOTCOPYPEN_8bpp(uint8* pixel, uint8* pen) -+static INLINE void SetPixel_NOTCOPYPEN_8bpp(uint8* pixel, uint8* pen) - { - /* D = ~P */ - *pixel = ~(*pen); - } - --INLINE void SetPixel_MASKPENNOT_8bpp(uint8* pixel, uint8* pen) -+static INLINE void SetPixel_MASKPENNOT_8bpp(uint8* pixel, uint8* pen) - { - /* D = P & ~D */ - *pixel = *pen & ~*pixel; - } - --INLINE void SetPixel_NOT_8bpp(uint8* pixel, uint8* pen) -+static INLINE void SetPixel_NOT_8bpp(uint8* pixel, uint8* pen) - { - /* D = ~D */ - *pixel = ~(*pixel); - } - --INLINE void SetPixel_XORPEN_8bpp(uint8* pixel, uint8* pen) -+static INLINE void SetPixel_XORPEN_8bpp(uint8* pixel, uint8* pen) - { - /* D = D ^ P */ - *pixel = *pixel ^ *pen; - } - --INLINE void SetPixel_NOTMASKPEN_8bpp(uint8* pixel, uint8* pen) -+static INLINE void SetPixel_NOTMASKPEN_8bpp(uint8* pixel, uint8* pen) - { - /* D = ~(D & P) */ - *pixel = ~(*pixel & *pen); - } - --INLINE void SetPixel_MASKPEN_8bpp(uint8* pixel, uint8* pen) -+static INLINE void SetPixel_MASKPEN_8bpp(uint8* pixel, uint8* pen) - { - /* D = D & P */ - *pixel &= *pen; - } - --INLINE void SetPixel_NOTXORPEN_8bpp(uint8* pixel, uint8* pen) -+static INLINE void SetPixel_NOTXORPEN_8bpp(uint8* pixel, uint8* pen) - { - /* D = ~(D ^ P) */ - *pixel = ~(*pixel ^ *pen); - } - --INLINE void SetPixel_NOP_8bpp(uint8* pixel, uint8* pen) -+static INLINE void SetPixel_NOP_8bpp(uint8* pixel, uint8* pen) - { - /* D = D */ - } - --INLINE void SetPixel_MERGENOTPEN_8bpp(uint8* pixel, uint8* pen) -+static INLINE void SetPixel_MERGENOTPEN_8bpp(uint8* pixel, uint8* pen) - { - /* D = D | ~P */ - *pixel |= ~(*pen); - } - --INLINE void SetPixel_COPYPEN_8bpp(uint8* pixel, uint8* pen) -+static INLINE void SetPixel_COPYPEN_8bpp(uint8* pixel, uint8* pen) - { - /* D = P */ - *pixel = *pen; - } - --INLINE void SetPixel_MERGEPENNOT_8bpp(uint8* pixel, uint8* pen) -+static INLINE void SetPixel_MERGEPENNOT_8bpp(uint8* pixel, uint8* pen) - { - /* D = P | ~D */ - *pixel = *pen | ~(*pixel); - } - --INLINE void SetPixel_MERGEPEN_8bpp(uint8* pixel, uint8* pen) -+static INLINE void SetPixel_MERGEPEN_8bpp(uint8* pixel, uint8* pen) - { - /* D = P | D */ - *pixel |= *pen; - } - --INLINE void SetPixel_WHITE_8bpp(uint8* pixel, uint8* pen) -+static INLINE void SetPixel_WHITE_8bpp(uint8* pixel, uint8* pen) - { - /* D = 1 */ - *pixel = 0xFF; diff --git a/net/freerdp/files/patch-libfreerdp-locale-timezone.c b/net/freerdp/files/patch-libfreerdp-locale-timezone.c new file mode 100644 index 0000000..51ce0e5 --- /dev/null +++ b/net/freerdp/files/patch-libfreerdp-locale-timezone.c @@ -0,0 +1,14 @@ +--- libfreerdp/locale/timezone.c.orig 2013-07-10 19:00:21.000000000 +1100 ++++ libfreerdp/locale/timezone.c 2014-01-08 03:32:36.919691015 +1100 +@@ -1663,7 +1663,10 @@ + local_time = localtime(&t); + + #ifdef HAVE_TM_GMTOFF +- clientTimeZone->bias = timezone / 60; ++ if (local_time->tm_gmtoff >= 0) ++ clientTimeZone->bias = (UINT32) (local_time->tm_gmtoff / 60); ++ else ++ clientTimeZone->bias = (UINT32) (1440 + (INT32) (local_time->tm_gmtoff / 60)); + DEBUG_TIMEZONE("tzname[std]: %s, tzname[dst]: %s, timezone: %ld, Daylight: %d", tzname[0], tzname[1], timezone, daylight); + #elif defined(sun) + if (local_time->tm_isdst > 0) diff --git a/net/freerdp/pkg-plist b/net/freerdp/pkg-plist index 9195950..dcb6714 100644 --- a/net/freerdp/pkg-plist +++ b/net/freerdp/pkg-plist @@ -1,22 +1,48 @@ %%DIRECTFB%%bin/dfreerdp bin/xfreerdp +include/freerdp/addin.h include/freerdp/altsec.h include/freerdp/api.h include/freerdp/cache/bitmap.h include/freerdp/cache/brush.h include/freerdp/cache/cache.h include/freerdp/cache/glyph.h +include/freerdp/cache/nine_grid.h include/freerdp/cache/offscreen.h include/freerdp/cache/palette.h include/freerdp/cache/pointer.h include/freerdp/channels/channels.h +include/freerdp/channels/rdpdr.h +include/freerdp/channels/rdpsnd.h include/freerdp/channels/wtsvc.h +include/freerdp/client.h +include/freerdp/client/channels.h +include/freerdp/client/cliprdr.h +include/freerdp/client/cmdline.h +include/freerdp/client/drdynvc.h +include/freerdp/client/file.h +include/freerdp/client/rdpei.h +include/freerdp/client/tsmf.h +include/freerdp/codec/audio.h include/freerdp/codec/bitmap.h include/freerdp/codec/color.h +include/freerdp/codec/dsp.h +include/freerdp/codec/jpeg.h +include/freerdp/codec/mppc_dec.h +include/freerdp/codec/mppc_enc.h include/freerdp/codec/nsc.h include/freerdp/codec/rfx.h include/freerdp/constants.h +include/freerdp/crypto/ber.h +include/freerdp/crypto/certificate.h +include/freerdp/crypto/crypto.h +include/freerdp/crypto/der.h +include/freerdp/crypto/er.h +include/freerdp/crypto/per.h +include/freerdp/crypto/tls.h include/freerdp/dvc.h +include/freerdp/error.h +include/freerdp/event.h include/freerdp/extension.h include/freerdp/freerdp.h include/freerdp/gdi/16bpp.h @@ -35,131 +61,232 @@ include/freerdp/gdi/region.h include/freerdp/gdi/shape.h include/freerdp/graphics.h include/freerdp/input.h -include/freerdp/kbd/kbd.h -include/freerdp/kbd/layouts.h -include/freerdp/kbd/locales.h -include/freerdp/kbd/vkcodes.h include/freerdp/listener.h +include/freerdp/locale/keyboard.h +include/freerdp/locale/locale.h +include/freerdp/locale/timezone.h +include/freerdp/message.h include/freerdp/peer.h -include/freerdp/plugins/cliprdr.h -include/freerdp/plugins/tsmf.h include/freerdp/pointer.h include/freerdp/primary.h +include/freerdp/primitives.h include/freerdp/rail.h include/freerdp/rail/icon.h include/freerdp/rail/rail.h include/freerdp/rail/window.h include/freerdp/rail/window_list.h +include/freerdp/scancode.h include/freerdp/secondary.h +include/freerdp/server/audin.h +include/freerdp/server/channels.h +include/freerdp/server/rdpsnd.h include/freerdp/settings.h include/freerdp/svc.h include/freerdp/types.h include/freerdp/update.h -include/freerdp/utils/args.h include/freerdp/utils/bitmap.h -include/freerdp/utils/blob.h include/freerdp/utils/debug.h -include/freerdp/utils/dsp.h include/freerdp/utils/event.h -include/freerdp/utils/file.h -include/freerdp/utils/hexdump.h include/freerdp/utils/list.h -include/freerdp/utils/load_plugin.h -include/freerdp/utils/memory.h -include/freerdp/utils/mutex.h +include/freerdp/utils/msusb.h include/freerdp/utils/passphrase.h include/freerdp/utils/pcap.h -include/freerdp/utils/print.h include/freerdp/utils/profiler.h include/freerdp/utils/rail.h -include/freerdp/utils/rect.h -include/freerdp/utils/registry.h -include/freerdp/utils/semaphore.h include/freerdp/utils/signal.h -include/freerdp/utils/sleep.h include/freerdp/utils/stopwatch.h -include/freerdp/utils/stream.h -include/freerdp/utils/string.h include/freerdp/utils/svc_plugin.h -include/freerdp/utils/thread.h -include/freerdp/utils/unicode.h -include/freerdp/utils/wait_obj.h +include/freerdp/utils/tcp.h +include/freerdp/utils/time.h +include/freerdp/utils/uds.h include/freerdp/window.h -%%ALSA%%lib/freerdp/audin_alsa.so -%%ALSA%%lib/freerdp/tsmf_alsa.so -%%ALSA%%lib/freerdp/rdpsnd_alsa.so -%%PULSE%%lib/freerdp/audin_pulse.so -%%PULSE%%lib/freerdp/rdpsnd_pulse.so -%%PULSE%%lib/freerdp/tsmf_pulse.so -%%FFMPEG%%lib/freerdp/tsmf_ffmpeg.so -lib/freerdp/audin.so -lib/freerdp/cliprdr.so -lib/freerdp/disk.so -lib/freerdp/drdynvc.so -lib/freerdp/parallel.so -lib/freerdp/printer.so -lib/freerdp/rail.so -lib/freerdp/rdpdbg.so -lib/freerdp/rdpdr.so -lib/freerdp/rdpsnd.so -lib/freerdp/serial.so -lib/freerdp/tsmf.so +include/winpr/asn1.h +include/winpr/bcrypt.h +include/winpr/cmdline.h +include/winpr/collections.h +include/winpr/config.h +include/winpr/credentials.h +include/winpr/credui.h +include/winpr/crt.h +include/winpr/crypto.h +include/winpr/dsparse.h +include/winpr/endian.h +include/winpr/environment.h +include/winpr/error.h +include/winpr/file.h +include/winpr/handle.h +include/winpr/heap.h +include/winpr/input.h +include/winpr/interlocked.h +include/winpr/io.h +include/winpr/library.h +include/winpr/memory.h +include/winpr/midl.h +include/winpr/ndr.h +include/winpr/ntlm.h +include/winpr/path.h +include/winpr/pipe.h +include/winpr/platform.h +include/winpr/pool.h +include/winpr/print.h +include/winpr/registry.h +include/winpr/rpc.h +include/winpr/sam.h +include/winpr/schannel.h +include/winpr/security.h +include/winpr/spec.h +include/winpr/sspi.h +include/winpr/sspicli.h +include/winpr/stream.h +include/winpr/string.h +include/winpr/synch.h +include/winpr/sysinfo.h +include/winpr/tchar.h +include/winpr/thread.h +include/winpr/timezone.h +include/winpr/windows.h +include/winpr/winhttp.h +include/winpr/winpr.h +include/winpr/winsock.h +include/winpr/wtypes.h lib/libfreerdp-cache.so -lib/libfreerdp-cache.so.1.0 -lib/libfreerdp-cache.so.1.0.2 -lib/libfreerdp-channels.so -lib/libfreerdp-channels.so.1.0 -lib/libfreerdp-channels.so.1.0.2 +lib/libfreerdp-cache.so.1.1 +lib/libfreerdp-cache.so.1.1.0 +lib/libfreerdp-client.so +lib/libfreerdp-client.so.1.1 +lib/libfreerdp-client.so.1.1.0 lib/libfreerdp-codec.so -lib/libfreerdp-codec.so.1.0 -lib/libfreerdp-codec.so.1.0.2 +lib/libfreerdp-codec.so.1.1 +lib/libfreerdp-codec.so.1.1.0 +lib/libfreerdp-common.so +lib/libfreerdp-common.so.1.1.0 +lib/libfreerdp-common.so.1.1.0-beta1 lib/libfreerdp-core.so -lib/libfreerdp-core.so.1.0 -lib/libfreerdp-core.so.1.0.2 +lib/libfreerdp-core.so.1.1 +lib/libfreerdp-core.so.1.1.0 +lib/libfreerdp-crypto.so +lib/libfreerdp-crypto.so.1.1 +lib/libfreerdp-crypto.so.1.1.0 lib/libfreerdp-gdi.so -lib/libfreerdp-gdi.so.1.0 -lib/libfreerdp-gdi.so.1.0.2 -lib/libfreerdp-kbd.so -lib/libfreerdp-kbd.so.1.0 -lib/libfreerdp-kbd.so.1.0.2 +lib/libfreerdp-gdi.so.1.1 +lib/libfreerdp-gdi.so.1.1.0 +lib/libfreerdp-locale.so +lib/libfreerdp-locale.so.1.1 +lib/libfreerdp-locale.so.1.1.0 +lib/libfreerdp-primitives.so +lib/libfreerdp-primitives.so.1.1 +lib/libfreerdp-primitives.so.1.1.0 lib/libfreerdp-rail.so -lib/libfreerdp-rail.so.1.0 -lib/libfreerdp-rail.so.1.0.2 +lib/libfreerdp-rail.so.1.1 +lib/libfreerdp-rail.so.1.1.0 lib/libfreerdp-utils.so -lib/libfreerdp-utils.so.1.0 -lib/libfreerdp-utils.so.1.0.2 +lib/libfreerdp-utils.so.1.1 +lib/libfreerdp-utils.so.1.1.0 +lib/libwinpr-asn1.so +lib/libwinpr-asn1.so.0.1 +lib/libwinpr-asn1.so.0.1.0 +lib/libwinpr-bcrypt.so +lib/libwinpr-bcrypt.so.0.1 +lib/libwinpr-bcrypt.so.0.1.0 +lib/libwinpr-credentials.so +lib/libwinpr-credentials.so.0.1 +lib/libwinpr-credentials.so.0.1.0 +lib/libwinpr-credui.so +lib/libwinpr-credui.so.0.1 +lib/libwinpr-credui.so.0.1.0 +lib/libwinpr-crt.so +lib/libwinpr-crt.so.0.1 +lib/libwinpr-crt.so.0.1.0 +lib/libwinpr-crypto.so +lib/libwinpr-crypto.so.0.1 +lib/libwinpr-crypto.so.0.1.0 +lib/libwinpr-dsparse.so +lib/libwinpr-dsparse.so.0.1 +lib/libwinpr-dsparse.so.0.1.0 +lib/libwinpr-environment.so +lib/libwinpr-environment.so.0.1 +lib/libwinpr-environment.so.0.1.0 +lib/libwinpr-error.so +lib/libwinpr-error.so.0.1 +lib/libwinpr-error.so.0.1.0 +lib/libwinpr-file.so +lib/libwinpr-file.so.0.1 +lib/libwinpr-file.so.0.1.0 +lib/libwinpr-handle.so +lib/libwinpr-handle.so.0.1 +lib/libwinpr-handle.so.0.1.0 +lib/libwinpr-heap.so +lib/libwinpr-heap.so.0.1 +lib/libwinpr-heap.so.0.1.0 +lib/libwinpr-input.so +lib/libwinpr-input.so.0.1 +lib/libwinpr-input.so.0.1.0 +lib/libwinpr-interlocked.so +lib/libwinpr-interlocked.so.0.1 +lib/libwinpr-interlocked.so.0.1.0 +lib/libwinpr-io.so +lib/libwinpr-io.so.0.1 +lib/libwinpr-io.so.0.1.0 +lib/libwinpr-library.so +lib/libwinpr-library.so.0.1 +lib/libwinpr-library.so.0.1.0 +lib/libwinpr-makecert-tool.a +lib/libwinpr-path.so +lib/libwinpr-path.so.0.1 +lib/libwinpr-path.so.0.1.0 +lib/libwinpr-pipe.so +lib/libwinpr-pipe.so.0.1 +lib/libwinpr-pipe.so.0.1.0 +lib/libwinpr-pool.so +lib/libwinpr-pool.so.0.1 +lib/libwinpr-pool.so.0.1.0 +lib/libwinpr-registry.so +lib/libwinpr-registry.so.0.1 +lib/libwinpr-registry.so.0.1.0 +lib/libwinpr-rpc.so +lib/libwinpr-rpc.so.0.1 +lib/libwinpr-rpc.so.0.1.0 +lib/libwinpr-sspi.so +lib/libwinpr-sspi.so.0.1 +lib/libwinpr-sspi.so.0.1.0 +lib/libwinpr-sspicli.so +lib/libwinpr-sspicli.so.0.1 +lib/libwinpr-sspicli.so.0.1.0 +lib/libwinpr-synch.so +lib/libwinpr-synch.so.0.1 +lib/libwinpr-synch.so.0.1.0 +lib/libwinpr-sysinfo.so +lib/libwinpr-sysinfo.so.0.1 +lib/libwinpr-sysinfo.so.0.1.0 +lib/libwinpr-thread.so +lib/libwinpr-thread.so.0.1 +lib/libwinpr-thread.so.0.1.0 +lib/libwinpr-timezone.so +lib/libwinpr-timezone.so.0.1 +lib/libwinpr-timezone.so.0.1.0 +lib/libwinpr-utils.so +lib/libwinpr-utils.so.0.1 +lib/libwinpr-utils.so.0.1.0 +lib/libwinpr-winhttp.so +lib/libwinpr-winhttp.so.0.1 +lib/libwinpr-winhttp.so.0.1.0 +lib/libwinpr-winsock.so +lib/libwinpr-winsock.so.0.1 +lib/libwinpr-winsock.so.0.1.0 +lib/libxfreerdp-client.so +lib/libxfreerdp-client.so.1.1 +lib/libxfreerdp-client.so.1.1.0 libdata/pkgconfig/freerdp.pc -%%DATADIR%%/keymaps/aliases -%%DATADIR%%/keymaps/amiga -%%DATADIR%%/keymaps/ataritt -%%DATADIR%%/keymaps/digital_vndr/lk -%%DATADIR%%/keymaps/digital_vndr/pc -%%DATADIR%%/keymaps/empty -%%DATADIR%%/keymaps/evdev -%%DATADIR%%/keymaps/fujitsu -%%DATADIR%%/keymaps/hp -%%DATADIR%%/keymaps/ibm -%%DATADIR%%/keymaps/macintosh -%%DATADIR%%/keymaps/macosx -%%DATADIR%%/keymaps/sgi_vndr/indigo -%%DATADIR%%/keymaps/sgi_vndr/indy -%%DATADIR%%/keymaps/sgi_vndr/iris -%%DATADIR%%/keymaps/sony -%%DATADIR%%/keymaps/sun -%%DATADIR%%/keymaps/xfree86 -%%DATADIR%%/keymaps/xfree98 -%%DATADIR%%/keymaps/xkb.pl +man/man1/xfreerdp.1.gz +@dirrmtry include/winpr @dirrmtry include/freerdp/utils -@dirrmtry include/freerdp/channels -@dirrmtry include/freerdp/cache -@dirrmtry include/freerdp/gdi -@dirrmtry include/freerdp/kbd +@dirrmtry include/freerdp/server @dirrmtry include/freerdp/rail +@dirrmtry include/freerdp/locale +@dirrmtry include/freerdp/gdi +@dirrmtry include/freerdp/crypto @dirrmtry include/freerdp/codec -@dirrmtry include/freerdp/plugins +@dirrmtry include/freerdp/client +@dirrmtry include/freerdp/channels +@dirrmtry include/freerdp/cache @dirrmtry include/freerdp -@dirrmtry lib/freerdp -@dirrmtry %%DATADIR%%/keymaps/digital_vndr -@dirrmtry %%DATADIR%%/keymaps/sgi_vndr -@dirrmtry %%DATADIR%%/keymaps -@dirrmtry %%DATADIR%% diff --git a/net/remmina-plugin-gnome/Makefile b/net/remmina-plugin-gnome/Makefile index 8b1cd20..f87365c 100644 --- a/net/remmina-plugin-gnome/Makefile +++ b/net/remmina-plugin-gnome/Makefile @@ -10,5 +10,4 @@ LIB_DEPENDS= gnome-keyring:${PORTSDIR}/security/libgnome-keyring MASTERDIR= ${.CURDIR}/../remmina-plugins -NO_STAGE= yes .include "${MASTERDIR}/Makefile" diff --git a/net/remmina-plugin-i18n/Makefile b/net/remmina-plugin-i18n/Makefile index 5049500..d459aad 100644 --- a/net/remmina-plugin-i18n/Makefile +++ b/net/remmina-plugin-i18n/Makefile @@ -9,5 +9,4 @@ MASTERDIR= ${.CURDIR}/../remmina-plugins USES+= gettext -NO_STAGE= yes .include "${MASTERDIR}/Makefile" diff --git a/net/remmina-plugin-nx/Makefile b/net/remmina-plugin-nx/Makefile index a1a1908..494a4f0 100644 --- a/net/remmina-plugin-nx/Makefile +++ b/net/remmina-plugin-nx/Makefile @@ -10,7 +10,6 @@ USE_XORG+= xkbfile MASTERDIR= ${.CURDIR}/../remmina-plugins -WITH_NX= yes +PLIST_SUB+= ICONS="" SSH="@comment " -NO_STAGE= yes .include "${MASTERDIR}/Makefile" diff --git a/net/remmina-plugin-rdp/Makefile b/net/remmina-plugin-rdp/Makefile index f241e80..afa8701 100644 --- a/net/remmina-plugin-rdp/Makefile +++ b/net/remmina-plugin-rdp/Makefile @@ -10,5 +10,6 @@ RUN_DEPENDS= ${BUILD_DEPENDS} MASTERDIR= ${.CURDIR}/../remmina-plugins -NO_STAGE= yes +PLIST_SUB+= ICONS="" SSH="" + .include "${MASTERDIR}/Makefile" diff --git a/net/remmina-plugin-telepathy/Makefile b/net/remmina-plugin-telepathy/Makefile index 213d14f..d7a7081 100644 --- a/net/remmina-plugin-telepathy/Makefile +++ b/net/remmina-plugin-telepathy/Makefile @@ -5,11 +5,11 @@ PKGNAMESUFFIX= -telepathy COMMENT= Remmina plugin for Telepathy support +USE_GNOME+= gtk30 LIB_DEPENDS= telepathy-glib.0:${PORTSDIR}/net-im/telepathy-glib MASTERDIR= ${.CURDIR}/../remmina-plugins -WITH_TELEP= yes +PLIST_SUB+= ICONS="@comment " -NO_STAGE= yes .include "${MASTERDIR}/Makefile" diff --git a/net/remmina-plugin-vnc/Makefile b/net/remmina-plugin-vnc/Makefile index 4238c2f..64dbc52 100644 --- a/net/remmina-plugin-vnc/Makefile +++ b/net/remmina-plugin-vnc/Makefile @@ -11,5 +11,6 @@ LIB_DEPENDS= jpeg.11:${PORTSDIR}/graphics/jpeg \ MASTERDIR= ${.CURDIR}/../remmina-plugins -NO_STAGE= yes +PLIST_SUB+= ICONS="" SSH="" + .include "${MASTERDIR}/Makefile" diff --git a/net/remmina-plugin-xdmcp/Makefile b/net/remmina-plugin-xdmcp/Makefile index 2a1f03f..81b7a4d 100644 --- a/net/remmina-plugin-xdmcp/Makefile +++ b/net/remmina-plugin-xdmcp/Makefile @@ -9,5 +9,6 @@ RUN_DEPENDS= Xephyr:${PORTSDIR}/x11-servers/xephyr MASTERDIR= ${.CURDIR}/../remmina-plugins -NO_STAGE= yes +PLIST_SUB+= ICONS="" SSH="" + .include "${MASTERDIR}/Makefile" diff --git a/net/remmina-plugins/Makefile b/net/remmina-plugins/Makefile index 1eb873e..72b899d 100644 --- a/net/remmina-plugins/Makefile +++ b/net/remmina-plugins/Makefile @@ -3,6 +3,7 @@ PORTNAME?= remmina-plugins PORTVERSION= 1.0.0 +PORTREVISION= 1 CATEGORIES= net gnome USE_GITHUB= yes GH_ACCOUNT= FreeRDP @@ -15,7 +16,6 @@ DISTNAME= remmina-${PORTVERSION} MAINTAINER?= fluffy@FreeBSD.org COMMENT?= Remmina plugin system -NO_STAGE= yes .if defined(PKGNAMESUFFIX) .include "${.CURDIR}/../remmina-plugins/bsd.plugin.mk" .else diff --git a/net/remmina-plugins/bsd.plugin.mk b/net/remmina-plugins/bsd.plugin.mk index 77fa8f1..4ca3d14 100644 --- a/net/remmina-plugins/bsd.plugin.mk +++ b/net/remmina-plugins/bsd.plugin.mk @@ -1,9 +1,9 @@ .if defined(PKGNAMESUFFIX) PORTNAME= remmina-plugin +PATCHDIR= ${.CURDIR}/../remmina/files LICENSE= GPLv2 -LICENSE_FILE= ${WRKSRC}/${PORTNAME}s/COPYING BUILD_DEPENDS+= remmina>=${PORTVERSION}:${PORTSDIR}/net/remmina RUN_DEPENDS+= remmina>=${PORTVERSION}:${PORTSDIR}/net/remmina @@ -23,38 +23,32 @@ CMAKE_ARGS+= --build=build # prefer gtk2 rather than gtk3 CMAKE_ARGS+= -DGTK_VERSION=2 -.include <bsd.port.pre.mk> +SSH_DESC= Build with SSH tunneling support -.if ${PKGNAMESUFFIX} == "-i18n" || ${PKGNAMESUFFIX} == "-gnome" -PLIST= ${.CURDIR}/pkg-plist -.else -PLIST_SUB+= PLUGIN="${PKGNAMESUFFIX:S,-,,}" -PLIST= ${PKGDIR}/pkg-plist.plugin +.include <bsd.port.options.mk> -.if ${PORT_OPTIONS:MTELEP} -PLIST_SUB+= TELEP="" ICONS="@comment " -.else -PLIST_SUB+= TELEP="@comment " ICONS="" -.endif -.if ${PORT_OPTIONS:MTELEP} -LIB_DEPENDS+= ssh.4:${PORTSDIR}/security/libssh -PLIST_SUB+= SSH="@comment " +.if ${PORT_OPTIONS:MSSH} +LIB_DEPENDS+= libssh.so:${PORTSDIR}/security/libssh +PLIST_SUB+= SSH="" .if ${OSVERSION} >= 800040 LDFLAGS+= -fstack-protector .endif .else -PLIST_SUB+= SSH="" -.endif -.if ${PORT_OPTIONS:MNX} -PLIST_SUB+= ICONS="" SSH="@comment " -.else -PLIST_SUB+= ICONS="@comment " +CMAKE_ARGS+= -DWITH_LIBSSH=OFF +PLIST_SUB+= SSH="@comment " .endif .if ${PORT_OPTIONS:MNLS} RUN_DEPENDS+= ${LOCALBASE}/share/locale/bg/LC_MESSAGES/remmina-plugins.mo:${PORTSDIR}/net/remmina-plugin-i18n .endif +.include <bsd.port.pre.mk> + +.if ${PKGNAMESUFFIX} == "-i18n" || ${PKGNAMESUFFIX} == "-gnome" +PLIST= ${.CURDIR}/pkg-plist +.else +PLIST_SUB+= PLUGIN="${PKGNAMESUFFIX:S,-,,}" +PLIST= ${PKGDIR}/pkg-plist.plugin .endif post-patch: @@ -76,7 +70,7 @@ post-patch: .endif .if ${PKGNAMESUFFIX:S,-,,} != "vnc" ${REINPLACE_CMD} -e 's|find_suggested_package(GCRYPT)||' ${WRKSRC}/CMakeLists.txt - ${REINPLACE_CMD} -e 's|add_subdirectory(vnc/libvncserver)||' ${WRKSRC}/remmina-plugins/CMakeLists.txt + ${REINPLACE_CMD} -e' s|find_required_package(LIBVNCSERVER)||' ${WRKSRC}/remmina-plugins/CMakeLists.txt ${REINPLACE_CMD} -e 's|add_subdirectory(vnc)||' ${WRKSRC}/remmina-plugins/CMakeLists.txt .endif .if ${PKGNAMESUFFIX:S,-,,} != "xdmcp" diff --git a/net/remmina-plugins/pkg-plist.plugin b/net/remmina-plugins/pkg-plist.plugin index 228030c..cd8b566 100644 --- a/net/remmina-plugins/pkg-plist.plugin +++ b/net/remmina-plugins/pkg-plist.plugin @@ -1,15 +1,8 @@ lib/remmina/plugins/remmina-plugin-%%PLUGIN%%.so -%%ICONS%%%%SSH%%share/remmina/icons/hicolor/22x22/emblems/remmina-%%PLUGIN%%-ssh.png -%%ICONS%%share/remmina/icons/hicolor/22x22/emblems/remmina-%%PLUGIN%%.png -%%ICONS%%%%SSH%%share/remmina/icons/hicolor/16x16/emblems/remmina-%%PLUGIN%%-ssh.png -%%ICONS%%share/remmina/icons/hicolor/16x16/emblems/remmina-%%PLUGIN%%.png -@dirrmtry share/remmina/icons/hicolor/22x22/emblems -@dirrmtry share/remmina/icons/hicolor/22x22 -@dirrmtry share/remmina/icons/hicolor/16x16/emblems -@dirrmtry share/remmina/icons/hicolor/16x16 -@dirrmtry share/remmina/icons/hicolor -@dirrmtry share/remmina/icons -@dirrmtry share/remmina +%%ICONS%%%%SSH%%share/icons/hicolor/22x22/emblems/remmina-%%PLUGIN%%-ssh.png +%%ICONS%%share/icons/hicolor/22x22/emblems/remmina-%%PLUGIN%%.png +%%ICONS%%%%SSH%%share/icons/hicolor/16x16/emblems/remmina-%%PLUGIN%%-ssh.png +%%ICONS%%share/icons/hicolor/16x16/emblems/remmina-%%PLUGIN%%.png @dirrmtry lib/remmina/plugins @dirrmtry lib/remmina @dirrmtry include/remmina diff --git a/net/remmina/Makefile b/net/remmina/Makefile index 6005db3..9839862 100644 --- a/net/remmina/Makefile +++ b/net/remmina/Makefile @@ -3,19 +3,19 @@ PORTNAME= remmina PORTVERSION= 1.0.0 +PORTREVISION= 1 CATEGORIES= net gnome MAINTAINER= fluffy@FreeBSD.org COMMENT= The GTK+ Remote Desktop Client LICENSE= GPLv2 -LICENSE_FILE= ${WRKSRC}/${PORTNAME}/COPYING USES= cmake desktop-file-utils gmake pkgconfig USE_GNOME= atk gdkpixbuf2 glib20 gtk20 pango INSTALLS_ICONS= yes LDFLAGS+= -L${LOCALBASE}/lib ${PTHREAD_LIBS} -Wl,-rpath -Wl,${LOCALBASE}/lib -lX11 \ - -lgio-2.0 -lgobject-2.0 -lgthread-2.0 -lgmodule-2.0 + -lgio-2.0 -lgobject-2.0 -lgthread-2.0 -lgmodule-2.0 -lgtk-x11-2.0 CPPFLAGS+= -I${LOCALBASE}/include ${PTHREAD_CFLAGS} CFLAGS+= -I${WRKSRC}/remmina/include -I${LOCALBASE}/include ${PTHREAD_CFLAGS} -fPIC SUB_FILES= pkg-message @@ -34,7 +34,6 @@ TERM_DESC= Build with terminal support AVAHI_DESC= Build with Avahi support UNIQUE_DESC= Build with Unique-App support -NO_STAGE= yes .include <bsd.port.options.mk> CMAKE_ARGS+= --build=build @@ -50,8 +49,7 @@ PLIST_SUB+= NLS="@comment " .endif .if ${PORT_OPTIONS:MSSH} -BUILD_DEPENDS+= ${LOCALBASE}/include/libssh/libssh.h:${PORTSDIR}/security/libssh -RUN_DEPENDS+= ${LOCALBASE}/lib/libssh.so.4:${PORTSDIR}/security/libssh +LIB_DEPENDS+= libssh.so:${PORTSDIR}/security/libssh .if ${OSVERSION} >= 800040 LDFLAGS+= -fstack-protector .endif @@ -60,7 +58,7 @@ CMAKE_ARGS+= -DWITH_LIBSSH=OFF .endif .if ${PORT_OPTIONS:MGCRYPT} -LIB_DEPENDS+= gcrypt:${PORTSDIR}/security/libgcrypt +LIB_DEPENDS+= libgcrypt.so:${PORTSDIR}/security/libgcrypt .else CMAKE_ARGS+= -DWITH_GCRYPT=OFF .endif @@ -72,32 +70,29 @@ CMAKE_ARGS+= -DWITH_VTE=OFF .endif .if ${PORT_OPTIONS:MAVAHI} -LIB_DEPENDS+= avahi-ui:${PORTSDIR}/net/avahi-gtk +LIB_DEPENDS+= libavahi-ui.so:${PORTSDIR}/net/avahi-gtk .else CMAKE_ARGS+= -DWITH_AVAHI=OFF .endif .if ${PORT_OPTIONS:MUNIQUE} -LIB_DEPENDS+= unique:${PORTSDIR}/x11-toolkits/unique +LIB_DEPENDS+= libunique-1.0.so:${PORTSDIR}/x11-toolkits/unique .else CMAKE_ARGS+= -DWITH_UNIQUE=OFF .endif post-patch: - @# fit avahi to current PORTVERSION - ${REINPLACE_CMD} -e's|avahi-ui>=0.6.30|avahi-ui>=0.6.29|' ${WRKSRC}/cmake/FindAVAHI.cmake - ${REINPLACE_CMD} -e's|avahi-client>=0.6.30|avahi-client>=0.6.29|' ${WRKSRC}/cmake/FindAVAHI.cmake - @# do not build plugins and locales , they are provided by separated ports + # fix pkgconfig + ${REINPLACE_CMD} -e 's,$${CMAKE_INSTALL_LIBDIR}/pkgconfig,libdata/pkgconfig,' ${WRKSRC}/remmina/CMakeLists.txt + # do not build plugins and locales , they are provided by separated ports ${REINPLACE_CMD} -e's|add_subdirectory(remmina-plugins)||' ${WRKSRC}/CMakeLists.txt ${REINPLACE_CMD} -e's|add_subdirectory(remmina-plugins-gnome)||' ${WRKSRC}/CMakeLists.txt + ${REINPLACE_CMD} -e's|add_subdirectory(external_tools)||' ${WRKSRC}/remmina/CMakeLists.txt .if !${PORT_OPTIONS:MNLS} ${REINPLACE_CMD} -e's|add_subdirectory(po)||' ${WRKSRC}/remmina/CMakeLists.txt .endif post-install: - @# localized desktop entry file is not included remmina 1.0.0, install manually - ${INSTALL_DATA} ${FILESDIR}/${PORTNAME}.desktop ${PREFIX}/share/applications/ - ${CP} -a ${DATADIR}/icons/ ${PREFIX}/share/icons @${CAT} ${PKGMESSAGE} .include <bsd.port.mk> diff --git a/net/remmina/files/patch-FreeRDP-Remmina-b6a55ae b/net/remmina/files/patch-FreeRDP-Remmina-b6a55ae new file mode 100644 index 0000000..6d18955 --- /dev/null +++ b/net/remmina/files/patch-FreeRDP-Remmina-b6a55ae @@ -0,0 +1,28664 @@ +diff -urN AUTHORS AUTHORS +--- AUTHORS 1970-01-01 10:00:00.000000000 +1000 ++++ AUTHORS 2014-01-08 02:31:52.000000000 +1100 +@@ -0,0 +1,4 @@ ++Please check the application About dialog or the official web site for a full list of authors. ++ ++http://remmina.sourceforge.net/contact.shtml ++ +diff -urN CMakeLists.txt CMakeLists.txt +--- CMakeLists.txt 2012-02-11 05:54:23.000000000 +1100 ++++ CMakeLists.txt 2014-01-08 02:31:52.000000000 +1100 +@@ -17,7 +17,7 @@ + # Foundation, Inc., 59 Temple Place, Suite 330, + # Boston, MA 02111-1307, USA. + +-cmake_minimum_required(VERSION 2.6) ++cmake_minimum_required(VERSION 2.8) + set(CMAKE_COLOR_MAKEFILE ON) + project(Remmina C) + +@@ -25,23 +25,17 @@ + include(CheckLibraryExists) + include(FindPkgConfig) + include(CheckCCompilerFlag) ++include(GNUInstallDirs) + + set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/) + + include(FindOptionalPackage) ++include(ConfigOptions) + + if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "Release") + endif() + +-if(NOT DEFINED CMAKE_INSTALL_LIBDIR) +- set(CMAKE_INSTALL_LIBDIR "lib") +-endif() +- +-if(NOT DEFINED CMAKE_INSTALL_BINDIR) +- set(CMAKE_INSTALL_BINDIR "bin") +-endif() +- + if(NOT BUILD_SHARED_LIBS) + set(BUILD_SHARED_LIBS ON) + endif() +@@ -77,34 +71,35 @@ + include_directories(.) + include_directories(remmina/include) + +-set(REMMINA_VERSION "0.9.99.1") +-set(REMMINA_DATADIR "${CMAKE_INSTALL_PREFIX}/share/remmina") +-set(REMMINA_LOCALEDIR "${CMAKE_INSTALL_PREFIX}/share/locale") +-set(REMMINA_PLUGINDIR "${CMAKE_INSTALL_PREFIX}/lib/remmina/plugins") ++set(REMMINA_VERSION "1.0.0") ++set(REMMINA_DATADIR "${CMAKE_INSTALL_FULL_DATADIR}") ++set(REMMINA_LOCALEDIR "${CMAKE_INSTALL_FULL_DATADIR}/locale") ++set(REMMINA_PLUGINDIR "${CMAKE_INSTALL_FULL_LIBDIR}/remmina/plugins") + ++find_required_package(GTK) + find_suggested_package(PTHREAD) ++find_suggested_package(GCRYPT) ++find_suggested_package(AVAHI) ++ + if(PTHREAD_FOUND) + add_definitions(-DHAVE_PTHREAD) + endif() + +-find_suggested_package(GCRYPT) + if(GCRYPT_FOUND) + add_definitions(-DHAVE_LIBGCRYPT) + endif() + +-find_required_package(GTK) ++if(AVAHI_FOUND) ++ add_definitions(-DHAVE_LIBAVAHI_UI) ++ add_definitions(-DHAVE_LIBAVAHI_CLIENT) ++endif() ++ + if(GTK_FOUND) + add_subdirectory(remmina) + add_subdirectory(remmina-plugins) + add_subdirectory(remmina-plugins-gnome) + endif() + +-find_suggested_package(AVAHI) +-if(AVAHI_FOUND) +- add_definitions(-DHAVE_LIBAVAHI_UI) +- add_definitions(-DHAVE_LIBAVAHI_CLIENT) +-endif() +- + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/config.h) + + install(DIRECTORY include/remmina DESTINATION include/remmina FILES_MATCHING PATTERN "*.h") +diff -urN COPYING COPYING +--- COPYING 1970-01-01 10:00:00.000000000 +1000 ++++ COPYING 2014-01-08 02:31:52.000000000 +1100 +@@ -0,0 +1,340 @@ ++ GNU GENERAL PUBLIC LICENSE ++ Version 2, June 1991 ++ ++ Copyright (C) 1989, 1991 Free Software Foundation, Inc. ++ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ Everyone is permitted to copy and distribute verbatim copies ++ of this license document, but changing it is not allowed. ++ ++ Preamble ++ ++ The licenses for most software are designed to take away your ++freedom to share and change it. By contrast, the GNU General Public ++License is intended to guarantee your freedom to share and change free ++software--to make sure the software is free for all its users. This ++General Public License applies to most of the Free Software ++Foundation's software and to any other program whose authors commit to ++using it. (Some other Free Software Foundation software is covered by ++the GNU Library General Public License instead.) You can apply it to ++your programs, too. ++ ++ When we speak of free software, we are referring to freedom, not ++price. Our General Public Licenses are designed to make sure that you ++have the freedom to distribute copies of free software (and charge for ++this service if you wish), that you receive source code or can get it ++if you want it, that you can change the software or use pieces of it ++in new free programs; and that you know you can do these things. ++ ++ To protect your rights, we need to make restrictions that forbid ++anyone to deny you these rights or to ask you to surrender the rights. ++These restrictions translate to certain responsibilities for you if you ++distribute copies of the software, or if you modify it. ++ ++ For example, if you distribute copies of such a program, whether ++gratis or for a fee, you must give the recipients all the rights that ++you have. You must make sure that they, too, receive or can get the ++source code. And you must show them these terms so they know their ++rights. ++ ++ We protect your rights with two steps: (1) copyright the software, and ++(2) offer you this license which gives you legal permission to copy, ++distribute and/or modify the software. ++ ++ Also, for each author's protection and ours, we want to make certain ++that everyone understands that there is no warranty for this free ++software. If the software is modified by someone else and passed on, we ++want its recipients to know that what they have is not the original, so ++that any problems introduced by others will not reflect on the original ++authors' reputations. ++ ++ Finally, any free program is threatened constantly by software ++patents. We wish to avoid the danger that redistributors of a free ++program will individually obtain patent licenses, in effect making the ++program proprietary. To prevent this, we have made it clear that any ++patent must be licensed for everyone's free use or not licensed at all. ++ ++ The precise terms and conditions for copying, distribution and ++modification follow. ++ ++ GNU GENERAL PUBLIC LICENSE ++ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION ++ ++ 0. This License applies to any program or other work which contains ++a notice placed by the copyright holder saying it may be distributed ++under the terms of this General Public License. The "Program", below, ++refers to any such program or work, and a "work based on the Program" ++means either the Program or any derivative work under copyright law: ++that is to say, a work containing the Program or a portion of it, ++either verbatim or with modifications and/or translated into another ++language. (Hereinafter, translation is included without limitation in ++the term "modification".) Each licensee is addressed as "you". ++ ++Activities other than copying, distribution and modification are not ++covered by this License; they are outside its scope. The act of ++running the Program is not restricted, and the output from the Program ++is covered only if its contents constitute a work based on the ++Program (independent of having been made by running the Program). ++Whether that is true depends on what the Program does. ++ ++ 1. You may copy and distribute verbatim copies of the Program's ++source code as you receive it, in any medium, provided that you ++conspicuously and appropriately publish on each copy an appropriate ++copyright notice and disclaimer of warranty; keep intact all the ++notices that refer to this License and to the absence of any warranty; ++and give any other recipients of the Program a copy of this License ++along with the Program. ++ ++You may charge a fee for the physical act of transferring a copy, and ++you may at your option offer warranty protection in exchange for a fee. ++ ++ 2. You may modify your copy or copies of the Program or any portion ++of it, thus forming a work based on the Program, and copy and ++distribute such modifications or work under the terms of Section 1 ++above, provided that you also meet all of these conditions: ++ ++ a) You must cause the modified files to carry prominent notices ++ stating that you changed the files and the date of any change. ++ ++ b) You must cause any work that you distribute or publish, that in ++ whole or in part contains or is derived from the Program or any ++ part thereof, to be licensed as a whole at no charge to all third ++ parties under the terms of this License. ++ ++ c) If the modified program normally reads commands interactively ++ when run, you must cause it, when started running for such ++ interactive use in the most ordinary way, to print or display an ++ announcement including an appropriate copyright notice and a ++ notice that there is no warranty (or else, saying that you provide ++ a warranty) and that users may redistribute the program under ++ these conditions, and telling the user how to view a copy of this ++ License. (Exception: if the Program itself is interactive but ++ does not normally print such an announcement, your work based on ++ the Program is not required to print an announcement.) ++ ++These requirements apply to the modified work as a whole. If ++identifiable sections of that work are not derived from the Program, ++and can be reasonably considered independent and separate works in ++themselves, then this License, and its terms, do not apply to those ++sections when you distribute them as separate works. But when you ++distribute the same sections as part of a whole which is a work based ++on the Program, the distribution of the whole must be on the terms of ++this License, whose permissions for other licensees extend to the ++entire whole, and thus to each and every part regardless of who wrote it. ++ ++Thus, it is not the intent of this section to claim rights or contest ++your rights to work written entirely by you; rather, the intent is to ++exercise the right to control the distribution of derivative or ++collective works based on the Program. ++ ++In addition, mere aggregation of another work not based on the Program ++with the Program (or with a work based on the Program) on a volume of ++a storage or distribution medium does not bring the other work under ++the scope of this License. ++ ++ 3. You may copy and distribute the Program (or a work based on it, ++under Section 2) in object code or executable form under the terms of ++Sections 1 and 2 above provided that you also do one of the following: ++ ++ a) Accompany it with the complete corresponding machine-readable ++ source code, which must be distributed under the terms of Sections ++ 1 and 2 above on a medium customarily used for software interchange; or, ++ ++ b) Accompany it with a written offer, valid for at least three ++ years, to give any third party, for a charge no more than your ++ cost of physically performing source distribution, a complete ++ machine-readable copy of the corresponding source code, to be ++ distributed under the terms of Sections 1 and 2 above on a medium ++ customarily used for software interchange; or, ++ ++ c) Accompany it with the information you received as to the offer ++ to distribute corresponding source code. (This alternative is ++ allowed only for noncommercial distribution and only if you ++ received the program in object code or executable form with such ++ an offer, in accord with Subsection b above.) ++ ++The source code for a work means the preferred form of the work for ++making modifications to it. For an executable work, complete source ++code means all the source code for all modules it contains, plus any ++associated interface definition files, plus the scripts used to ++control compilation and installation of the executable. However, as a ++special exception, the source code distributed need not include ++anything that is normally distributed (in either source or binary ++form) with the major components (compiler, kernel, and so on) of the ++operating system on which the executable runs, unless that component ++itself accompanies the executable. ++ ++If distribution of executable or object code is made by offering ++access to copy from a designated place, then offering equivalent ++access to copy the source code from the same place counts as ++distribution of the source code, even though third parties are not ++compelled to copy the source along with the object code. ++ ++ 4. You may not copy, modify, sublicense, or distribute the Program ++except as expressly provided under this License. Any attempt ++otherwise to copy, modify, sublicense or distribute the Program is ++void, and will automatically terminate your rights under this License. ++However, parties who have received copies, or rights, from you under ++this License will not have their licenses terminated so long as such ++parties remain in full compliance. ++ ++ 5. You are not required to accept this License, since you have not ++signed it. However, nothing else grants you permission to modify or ++distribute the Program or its derivative works. These actions are ++prohibited by law if you do not accept this License. Therefore, by ++modifying or distributing the Program (or any work based on the ++Program), you indicate your acceptance of this License to do so, and ++all its terms and conditions for copying, distributing or modifying ++the Program or works based on it. ++ ++ 6. Each time you redistribute the Program (or any work based on the ++Program), the recipient automatically receives a license from the ++original licensor to copy, distribute or modify the Program subject to ++these terms and conditions. You may not impose any further ++restrictions on the recipients' exercise of the rights granted herein. ++You are not responsible for enforcing compliance by third parties to ++this License. ++ ++ 7. If, as a consequence of a court judgment or allegation of patent ++infringement or for any other reason (not limited to patent issues), ++conditions are imposed on you (whether by court order, agreement or ++otherwise) that contradict the conditions of this License, they do not ++excuse you from the conditions of this License. If you cannot ++distribute so as to satisfy simultaneously your obligations under this ++License and any other pertinent obligations, then as a consequence you ++may not distribute the Program at all. For example, if a patent ++license would not permit royalty-free redistribution of the Program by ++all those who receive copies directly or indirectly through you, then ++the only way you could satisfy both it and this License would be to ++refrain entirely from distribution of the Program. ++ ++If any portion of this section is held invalid or unenforceable under ++any particular circumstance, the balance of the section is intended to ++apply and the section as a whole is intended to apply in other ++circumstances. ++ ++It is not the purpose of this section to induce you to infringe any ++patents or other property right claims or to contest validity of any ++such claims; this section has the sole purpose of protecting the ++integrity of the free software distribution system, which is ++implemented by public license practices. Many people have made ++generous contributions to the wide range of software distributed ++through that system in reliance on consistent application of that ++system; it is up to the author/donor to decide if he or she is willing ++to distribute software through any other system and a licensee cannot ++impose that choice. ++ ++This section is intended to make thoroughly clear what is believed to ++be a consequence of the rest of this License. ++ ++ 8. If the distribution and/or use of the Program is restricted in ++certain countries either by patents or by copyrighted interfaces, the ++original copyright holder who places the Program under this License ++may add an explicit geographical distribution limitation excluding ++those countries, so that distribution is permitted only in or among ++countries not thus excluded. In such case, this License incorporates ++the limitation as if written in the body of this License. ++ ++ 9. The Free Software Foundation may publish revised and/or new versions ++of the General Public License from time to time. Such new versions will ++be similar in spirit to the present version, but may differ in detail to ++address new problems or concerns. ++ ++Each version is given a distinguishing version number. If the Program ++specifies a version number of this License which applies to it and "any ++later version", you have the option of following the terms and conditions ++either of that version or of any later version published by the Free ++Software Foundation. If the Program does not specify a version number of ++this License, you may choose any version ever published by the Free Software ++Foundation. ++ ++ 10. If you wish to incorporate parts of the Program into other free ++programs whose distribution conditions are different, write to the author ++to ask for permission. For software which is copyrighted by the Free ++Software Foundation, write to the Free Software Foundation; we sometimes ++make exceptions for this. Our decision will be guided by the two goals ++of preserving the free status of all derivatives of our free software and ++of promoting the sharing and reuse of software generally. ++ ++ NO WARRANTY ++ ++ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY ++FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN ++OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES ++PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED ++OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ++MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS ++TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE ++PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, ++REPAIR OR CORRECTION. ++ ++ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING ++WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR ++REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, ++INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING ++OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED ++TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY ++YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER ++PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE ++POSSIBILITY OF SUCH DAMAGES. ++ ++ END OF TERMS AND CONDITIONS ++ ++ How to Apply These Terms to Your New Programs ++ ++ If you develop a new program, and you want it to be of the greatest ++possible use to the public, the best way to achieve this is to make it ++free software which everyone can redistribute and change under these terms. ++ ++ To do so, attach the following notices to the program. It is safest ++to attach them to the start of each source file to most effectively ++convey the exclusion of warranty; and each file should have at least ++the "copyright" line and a pointer to where the full notice is found. ++ ++ <one line to give the program's name and a brief idea of what it does.> ++ Copyright (C) <year> <name of author> ++ ++ This program is free software; you can 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. ++ ++ This program 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 this program; if not, write to the Free Software ++ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ ++ ++Also add information on how to contact you by electronic and paper mail. ++ ++If the program is interactive, make it output a short notice like this ++when it starts in an interactive mode: ++ ++ Gnomovision version 69, Copyright (C) year name of author ++ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. ++ This is free software, and you are welcome to redistribute it ++ under certain conditions; type `show c' for details. ++ ++The hypothetical commands `show w' and `show c' should show the appropriate ++parts of the General Public License. Of course, the commands you use may ++be called something other than `show w' and `show c'; they could even be ++mouse-clicks or menu items--whatever suits your program. ++ ++You should also get your employer (if you work as a programmer) or your ++school, if any, to sign a "copyright disclaimer" for the program, if ++necessary. Here is a sample; alter the names: ++ ++ Yoyodyne, Inc., hereby disclaims all copyright interest in the program ++ `Gnomovision' (which makes passes at compilers) written by James Hacker. ++ ++ <signature of Ty Coon>, 1 April 1989 ++ Ty Coon, President of Vice ++ ++This General Public License does not permit incorporating your program into ++proprietary programs. If your program is a subroutine library, you may ++consider it more useful to permit linking proprietary applications with the ++library. If this is what you want to do, use the GNU Library General ++Public License instead of this License. +diff -urN ChangeLog ChangeLog +--- ChangeLog 1970-01-01 10:00:00.000000000 +1000 ++++ ChangeLog 2014-01-08 02:31:52.000000000 +1100 +@@ -0,0 +1,234 @@ ++***** 1.0.0 - 2012-02-10 ***** ++Main program design and functionality: ++o Switch to the CMake build system ++o Refactoring of code style ++o Changing file name convention ++ ++RDP protocol related: ++o Support for FreeRDP 1.0 ++o Support for RemoteFX ++o Support for Network Level Authentication ++o Added certificate validation prompt ++ ++***** 0.9.0 - 2010-12-12 ***** ++Main program design and functionality: ++o Rewrite plugin system so that plugins can have more flexibilities ++o Integrate scrolled window and fullscreen view modes into one button ++o Remove quick connect menu and consolidate the feature with Connection->New ++ menu. Move other Edit menu items under Connection menu as well. See ++ http://bugs.debian.org/591755 ++o Change 'Quit' menu item to 'Close' ++o Show version information in plugin window ++o Add link button to resolution field to bring up to resolution preference ++o Calculate auto-fit window size more correctly ++o Add subgroup feature, using '/' as subgroup delimiter ++o Remember group expansion status ++o Add shortcut key names to toolbar tooltips ++o Support shortcut key to be same as hostkey, which will be activated by just ++ press(down and up) the hostkey. By default, this is the Keyboard grabbing ++ shortcut. ++o Add pin button to floating toolbar ++o Add tray icon and various related preferences options. All featues in the ++ original GNOME/XFCE panel applet have been ported in it, plus all windows ++ can be minimized to tray (default is off) ++o Add Help/Homepage menu ++ ++RDP protocol related: ++o Support TLS negotiation added in FreeRDP 0.8 ++o Support audio input redirection added in FreeRDP 0.8 ++o Add new preference option 'Use client keyboard mapping' to obey X key ++ mappings (wfaulk) ++ ++VNC protocol related: ++o Change 'Proxy Destination' to 'Repeater' to make it clearer. Now the 'Server' ++ is the server and 'Repeater' is the repeater. :) ++ ++NX protocol related: ++o Add SSH tunnel ++ ++SSH protocol related: ++o Add ability to spawn new session from toolbar menu ++o Add Copy/Paste toolbar menu for SSH terminal ++o Add Font and Scrollback lines preference option ++o Add ability to show/hide hidden files in SFTP ++o Remember paned position in SFTP window ++o Add startup path option in SFTP ++ ++***** 0.8.0 - 2010-07-10 ***** ++Main program design and functionality: ++o Introduce a new plugin system. All protocols except SSH are moved to a new ++ source package 'remmina-plugins' so that they can have bug-fixes and releases ++ separately. A new Plugins menu is added accordingly ++o Add Hostkey feature and related Preference options. Hostkey feature provides ++ an easy and reliable way to access various remote desktop toolbar functions ++ through customizable shortcut key combinations ++o Add Attachable / Detachable Tabs feature. Tabs now can be merged or separated ++ between windows. ++o Add ability to show / hide the toolbar through Hostkey ++o Add Quick Search filter feature ++o Add 'Save Settings When Starting the Connection' preference option, default ++ is true. If set to false, profile will not be saved if only 'Connect' button ++ is clicked ++o Add 'Always show tab' option ++o Add a little cosmetic motion effect to the floating toolbar ++o Add Debug Window feature in Help menu ++o Add Online Wiki link in Help menu ++o Support IPv6 address notation ++ ++RDP protocol related: ++o Bring in FreeRDP (http://freerdp.sourceforge.net) project as rdesktop ++ replacement. Most of the features described below are direct benefits ++ from the FreeRDP project ++o FreeRDP provides a new keyboard system which is based on XKB and Windows ++ keyboard layouts. In most cases it can detect the keyboard layout and work ++ out of the box. It's also possible to manually assign a keyboard layout. ++o Scaling remote screen is supported ++o More clipboard formats (HTML, bitmaps, etc) are supported ++o Better disk/printer sharing. Works with Windows 7 and Windows 2008 ++o Countless of original rdesktop bug-fixes and clean up ++o Support importing Windows and tsclient .rdp file, either by drag-n-drop to ++ the main window, by Tools / Import menu, or by -e / -c command line argument ++o Support exporting Windows .rdp file ++ ++VNC protocol related: ++o Support disabling TLS/VeNCrypt encryption when connecting to VNC servers ++ that supports it, like Vino ++o Support Refresh screen ++o Add UltraVNC repeater support ++o Add reverse SSH tunnel support for VNC incoming connection ++o Add disabling clipboard synchronization option ++o Better cursor and color handling ++ ++NX protocol related: ++o New protocol NX is supported. Depends on libssh and nxproxy ++o Support resizing of remote session and scaling of console session ++o Support session management, including resume, attach, terminate ++o Support custom private key and various trivial options ++ ++SSH protocol related: ++o SSH terminal and SFTP now works as internal plugins, and can be tabbed or ++ toggled fullscreen like any other protocols ++o Add startup program support in SSH terminal ++o Add folder uploading support in SFTP ++o Add new 'Tunnel via loopback' option ++o Support tunneling through same server at custom port using ':port' custom ++ server notation ++ ++XDMCP protocol related: ++o Support running a startup program from SSH tunnel, without launching XDMCP ++ login window ++ ++Telepathy support: ++o Implement as a special plugin so it will work with desktop sharing feature ++ in Empathy IM client ++ ++***** 0.7.0 - 2009-12-12 ***** ++o Add new XDMCP protocol (using Xephyr) ++o Implement XDMCP session over SSH (using xqproxy on SSH server side) ++o Add Public Key (Automatic) option to support ssh-agent, by Alex Chateau <ash@zednet.lv> ++o A lot of cosmetic changes ++o Use icon theme approach to install all icons ++o Fix RGB color issue with VMware VNC server ++o Enhanced groups and resolution editing ++o Remove "run in separated process" option. Manage all windows in single process ++o Upgrade glib dependancy to 2.20 and gtk to 2.16 ++o Implement single instance application using libunique ++o Add Copy feature to create a new copy of existing connection profile ++o Add RDP Sound (off/local/remote) option ++o Add RDP local printer sharing option ++o Support Tab Interface and related options (Tab by Group / Tab by Protocol / Tab All / Tab None) ++o Simplify Groups setting by using combobox. Groups tab in preference dialog removed. ++o New application logo designed by Martin Lettner <m.lettner@gmail.com> ++o Support more VNC security types: TLS, VeNCrypt, MSLogon ++o Remember sort column id and order in main window ++ ++***** 0.6.0 - 2009-07-07 ***** ++o Add Avahi support using libavahi-ui ++o Option to start a connection in view-only mode ++o Enhanced command line arguments to support new grdc-applet features ++o Black Scrolled Viewport border (Nikolay Botev) ++o Better mouse cursor (both server and client side) (Nikolay Botev) ++o Keyboard mapping option for rdesktop (RDP) ++o VNC Chat feature ++o Fix VNC desktop resize bug (Nikolay Botev) ++o VNC Beep feature (Nikolay Botev) ++o A SFTP client (stand-alone or integrate with SSH tunnel) ++o SSH terminal feature integrated with SSH tunnel ++o Add RDP options: Share folder, Startup program/path and Advanced arguments ++o New Preference option Default View Mode ++o Better default window size to match server resolution ++o New VNC advanced option: Horizontal and Vertical scale ++o Saved password is now encrypted ++o Quick Connect protocol sub menus and connection protocol icons ++o Support VNC keyboard mapping ++o Fix VNC peer disconnect bug (Alex Chateau) ++o Greek translation added by Elias Sofronas <esofronas@gmail.com> ++ ++***** 0.5.1 - 2009-05-01 ***** ++o Fixed VNC crash in scrolled viewport mode ++o Fixed VNC cuttext "loopback" ++ ++***** 0.5.0 - 2009-04-14 ***** ++o Recent server names in quick connect ++o Invisible floating toolbar option ++o Floating toolbar transparency feature (by mouse scrolling) ++o Enhanced Keyboard grabbing feature ++o Support VNC incoming connections ++o Changed Keyboard grabbing icon ++o Center the client in the window when the remote desktop area is smaller than the window (Nikolay) ++o Change the background color of the viewport to black (Nikolay) ++o Use a blank dot as local cursor if remote cursor is shown in VNC ++o Change button order in all dialogs and apply alternative order ++o Popup menu for list/tree view in main window ++o Support UltraVNC extension "Disable Server Input" ++o Eliminate passphrase prompt if SSH private key has empty passphrase ++o Reuse existing SSH session in case of VNC authentication failure ++o Change desktop file's Name and Comments ++ ++***** 0.4.0 - 2009-02-24 ***** ++o SSH Tunneling support and SSH Tunnel local port option ++o VNC Color Depth support ++o VNC Scaled Mode toggle and Scale Quality option ++o VNC Poor quality level changed to the lowest to reduce a little bandwidth (marmuta) ++o RDP new option to attach to console ++o Auto-fit window button in scrolled window mode (resize to fit remote resolution) ++o Viewport fullscreen mode nows works with GTK 2.14 ++o Keyboard grabbing enabled in scrolled window mode ++o Tree View / List View option ++o Double-click Action option ++o New Applet Option: Show Quick Connect on top of the Menu ++o New Applet Option: Hide Total Count in Group Expander ++ ++***** 0.3.1 - 2009-01-26 ***** ++o Fixed: Pressed keys won't release when focus lost in VNC ++o Remember main window and connection window state (size/maximized) ++o Shortcut key changed for Quit(^q) and Quick Connect(^u) ++ ++***** 0.3.0 - 2009-01-16 ***** ++o Double-click to open the connection ++o Customizable RDP resolution list ++o Ability to change VNC quality while connected ++o Support View-Only VNC ++o New View menu to show/hide toolbar or statusbar ++o Small toolbar button option ++o A label in floating toolbar indicating the current connection ++o New Grouping feature ++o Ability to save the connection settings as default values ++o Polish translation added by: Jakub Tomczak <tomczak.jakub@gmail.com> ++o New option to remember the last view mode of each connection ++o New option to open the connections in separated processes ++o A new Preferences dialog for the new options ++o A new look of the remote desktop preference dialog ++ ++***** 0.2.0 - 2009-01-05 ***** ++o VNC support is added ++o A lot of code arrangement plus some bug fixes ++ ++***** 0.1.1 - 2008-12-28 ***** ++o Spainish translation added by: Julio Napurí Carlos <julionc@gmail.com> ++o Added a .desktop file ++o Gnome panel applet support completed ++ ++***** 0.1.0 - 2008-12-25 ***** ++o First public release! ++ +diff -urN README README +--- README 2012-02-11 05:54:23.000000000 +1100 ++++ README 2014-01-08 23:23:49.430202080 +1100 +@@ -24,15 +24,23 @@ + Prerequisites + ------------- + +-On Ubuntu 11.10 (Oneiric), install the following packages before compiling: ++On Ubuntu 12.04, install the following packages to compile Remmina: + +-sudo add-apt-repository ppa:chihchun/freerdp # for freerdp v1 +-sudo apt-get update +-sudo apt-get install cmake intltool \ +- libgtk-3-dev libssh-dev libavahi-ui-gtk3-dev libvte-2.90-dev libxkbfile-dev \ +- libtelepathy-glib-dev libgnome-keyring-dev \ +- libappindicator3-dev libgcrypt11-dev libgnutls-dev \ +- libfreerdp-dev libjpeg-dev ++cmake (>= 2.6) ++libgtk-3-dev ++libgcrypt11-dev ++libssh-dev (>= 0.4) ++libvte-2.90-dev ++libxkbfile-dev ++libfreerdp-dev (>= 1.0) ++libtelepathy-glib-dev ++libjpeg-dev ++libgnutls-dev ++libgnome-keyring-dev ++libavahi-ui-gtk3-dev (>= 0.6.0) ++libvncserver-dev ++libappindicator3-dev ++intltool + + Compilation + ----------- +diff -urN cmake/ConfigOptions.cmake cmake/ConfigOptions.cmake +--- cmake/ConfigOptions.cmake 1970-01-01 10:00:00.000000000 +1000 ++++ cmake/ConfigOptions.cmake 2014-01-08 02:31:52.000000000 +1100 +@@ -0,0 +1,21 @@ ++# Remmina - The GTK+ Remote Desktop Client ++# ++# Copyright (C) 2012 Jean-Louis Dupond ++# ++# This program is free software; you can 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. ++# ++# This program 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 this program; if not, write to the Free Software ++# Foundation, Inc., 59 Temple Place, Suite 330, ++# Boston, MA 02111-1307, USA. ++ ++ ++option(WITH_TRANSLATIONS "Generate translations." ON) +diff -urN cmake/FindAVAHI.cmake cmake/FindAVAHI.cmake +--- cmake/FindAVAHI.cmake 2012-02-11 05:54:23.000000000 +1100 ++++ cmake/FindAVAHI.cmake 2014-01-08 02:31:52.000000000 +1100 +@@ -17,29 +17,42 @@ + # Foundation, Inc., 59 Temple Place, Suite 330, + # Boston, MA 02111-1307, USA. + +-if(GTK3_FOUND) +- set(_AVAHI_LIB_NAME avahi-ui-gtk3) +- set(_AVAHI_PKG_NAME avahi-ui-gtk3>=0.6.30 avahi-client>=0.6.30) +-else() +- set(_AVAHI_LIB_NAME avahi-ui) +- set(_AVAHI_PKG_NAME avahi-ui>=0.6.30 avahi-client>=0.6.30) +-endif() ++include(FindPkgConfig) + +-find_package(PkgConfig) +-pkg_check_modules(PC_AVAHI ${_AVAHI_PKG_NAME}) ++if(PKG_CONFIG_FOUND) ++ pkg_check_modules(PC_AVAHI_CLIENT avahi-client) ++ if(GTK3_FOUND) ++ set(_AVAHI_UI_LIB_NAME avahi-ui-gtk3) ++ set(_AVAHI_UI_PKG_NAME avahi-ui-gtk3>=0.6.30 avahi-client>=0.6.30) ++ else() ++ set(_AVAHI_UI_LIB_NAME avahi-ui) ++ set(_AVAHI_UI_PKG_NAME avahi-ui>=0.6.30 avahi-client>=0.6.30) ++ endif() ++ pkg_check_modules(PC_AVAHI_UI ${_AVAHI_UI_PKG_NAME}) ++endif() + +-find_path(AVAHI_INCLUDE_DIR avahi-ui/avahi-ui.h +- HINTS ${PC_AVAHI_INCLUDEDIR} ${PC_AVAHI_INCLUDE_DIRS}) + +-find_library(AVAHI_LIBRARY NAMES ${_AVAHI_LIB_NAME} +- HINTS ${PC_AVAHI_LIBDIR} ${PC_AVAHI_LIBRARY_DIRS}) ++find_library(AVAHI_COMMON_LIBRARY NAMES avahi-common PATHS ${PC_AVAHI_CLIENT_LIBRARY_DIRS}) ++if(AVAHI_COMMON_LIBRARY) ++ set(AVAHI_COMMON_FOUND TRUE) ++endif() + +-include(FindPackageHandleStandardArgs) ++find_library(AVAHI_CLIENT_LIBRARY NAMES avahi-client PATHS ${PC_AVAHI_CLIENT_LIBRARY_DIRS}) ++if(AVAHI_CLIENT_LIBRARY) ++ set(AVAHI_CLIENT_FOUND TRUE) ++endif() + +-find_package_handle_standard_args(AVAHI DEFAULT_MSG AVAHI_LIBRARY AVAHI_INCLUDE_DIR) ++find_path(AVAHI_UI_INCLUDE_DIR avahi-ui/avahi-ui.h PATHS ${PC_AVAHI_UI_INCLUDE_DIRS}) ++find_library(AVAHI_UI_LIBRARY NAMES ${_AVAHI_UI_LIB_NAME} PATHS ${PC_AVAHI_UI_LIBRARY_DIRS}) ++if(AVAHI_UI_INCLUDE_DIR AND AVAHI_UI_LIBRARY) ++ set(AVAHI_UI_FOUND TRUE) ++endif() + +-set(AVAHI_LIBRARIES ${AVAHI_LIBRARY}) +-set(AVAHI_INCLUDE_DIRS ${AVAHI_INCLUDE_DIR}) ++FIND_PACKAGE_HANDLE_STANDARD_ARGS(AVAHI DEFAULT_MSG AVAHI_COMMON_FOUND AVAHI_CLIENT_FOUND AVAHI_UI_FOUND) + +-mark_as_advanced(AVAHI_INCLUDE_DIR AVAHI_LIBRARY) ++if (AVAHI_FOUND) ++ set(AVAHI_INCLUDE_DIRS ${AVAHI_UI_INCLUDE_DIR}) ++ set(AVAHI_LIBRARIES ${AVAHI_COMMON_LIBRARY} ${AVAHI_CLIENT_LIBRARY} ${AVAHI_UI_LIBRARY}) ++endif() + ++mark_as_advanced(AVAHI_INCLUDE_DIRS AVAHI_LIBRARIES) +diff -urN cmake/FindFREERDP.cmake cmake/FindFREERDP.cmake +--- cmake/FindFREERDP.cmake 2012-02-11 05:54:23.000000000 +1100 ++++ cmake/FindFREERDP.cmake 2014-01-08 02:31:52.000000000 +1100 +@@ -14,7 +14,7 @@ + # + # You should have received a copy of the GNU General Public License + # along with this program; if not, write to the Free Software +-# Foundation, Inc., 59 Temple Place, Suite 330, ++# Foundation, Inc., 59 Temple Place, Suite 330, + # Boston, MA 02111-1307, USA. + + find_package(PkgConfig) +@@ -30,7 +30,7 @@ + find_library(FREERDP_GDI_LIBRARY NAMES freerdp-gdi + HINTS ${PC_FREERDP_LIBDIR} ${PC_FREERDP_LIBRARY_DIRS}) + +-find_library(FREERDP_KBD_LIBRARY NAMES freerdp-kbd ++find_library(FREERDP_LOCALE_LIBRARY NAMES freerdp-locale + HINTS ${PC_FREERDP_LIBDIR} ${PC_FREERDP_LIBRARY_DIRS}) + + find_library(FREERDP_RAIL_LIBRARY NAMES freerdp-rail +@@ -39,14 +39,14 @@ + find_library(FREERDP_CODEC_LIBRARY NAMES freerdp-codec + HINTS ${PC_FREERDP_LIBDIR} ${PC_FREERDP_LIBRARY_DIRS}) + +-find_library(FREERDP_CHANNELS_LIBRARY NAMES freerdp-channels ++find_library(FREERDP_CLIENT_LIBRARY NAMES freerdp-client + HINTS ${PC_FREERDP_LIBDIR} ${PC_FREERDP_LIBRARY_DIRS}) + + include(FindPackageHandleStandardArgs) + + find_package_handle_standard_args(FREERDP DEFAULT_MSG FREERDP_LIBRARY FREERDP_INCLUDE_DIR) + +-set(FREERDP_LIBRARIES ${FREERDP_LIBRARY} ${FREERDP_GDI_LIBRARY} ${FREERDP_KBD_LIBRARY} ${FREERDP_RAIL_LIBRARY} ${FREERDP_CODEC_LIBRARY} ${FREERDP_CHANNELS_LIBRARY}) ++set(FREERDP_LIBRARIES ${FREERDP_LIBRARY} ${FREERDP_GDI_LIBRARY} ${FREERDP_LOCALE_LIBRARY} ${FREERDP_RAIL_LIBRARY} ${FREERDP_CODEC_LIBRARY} ${FREERDP_CLIENT_LIBRARY}) + set(FREERDP_INCLUDE_DIRS ${FREERDP_INCLUDE_DIR}) + + mark_as_advanced(FREERDP_INCLUDE_DIR FREERDP_LIBRARY) +diff -urN cmake/FindGLIB2.cmake cmake/FindGLIB2.cmake +--- cmake/FindGLIB2.cmake 1970-01-01 10:00:00.000000000 +1000 ++++ cmake/FindGLIB2.cmake 2014-01-08 02:31:52.000000000 +1100 +@@ -0,0 +1,120 @@ ++# Remmina - The GTK+ Remote Desktop Client ++# ++# Copyright (C) 2012 Andrey Gankov ++# ++# This program is free software; you can 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. ++# ++# This program 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 this program; if not, write to the Free Software ++# Foundation, Inc., 59 Temple Place, Suite 330, ++# Boston, MA 02111-1307, USA. ++ ++set(_GLIB_found_all true) ++ ++# Glib ++ ++pkg_check_modules(PC_GLIB2 glib-2.0>=2.28) ++ ++if(NOT PC_GLIB2_FOUND) ++ set(_GLIB_found_all false) ++endif() ++ ++find_path(GLIB2_INCLUDE_DIR_PART1 NAMES glib.h ++ HINTS ${PC_GLIB2_INCLUDEDIR} ${PC_GLIB2_INCLUDE_DIRS} ++ PATH_SUFFIXES glib-2.0) ++ ++find_path(GLIB2_INCLUDE_DIR_PART2 NAMES glibconfig.h ++ HINTS ${PC_GLIB2_INCLUDEDIR} ${PC_GLIB2_INCLUDE_DIRS} ++ PATH_SUFFIXES glib-2.0/include) ++ ++set(GLIB2_INCLUDE_DIR ${GLIB2_INCLUDE_DIR_PART1} ${GLIB2_INCLUDE_DIR_PART2}) ++ ++find_library(GLIB2_LIBRARY NAMES glib-2.0) ++ ++# GIO ++ ++pkg_check_modules(PC_GIO gio-2.0) ++ ++if(NOT PC_GIO_FOUND) ++ set(_GLIB_found_all false) ++endif() ++ ++find_path(GIO_INCLUDE_DIR gio/gio.h ++ HINTS ${PC_GIO_INCLUDEDIR} ${PC_GIO_INCLUDE_DIRS} ++ PATH_SUFFIXES gio-2.0) ++ ++find_library(GIO_LIBRARY NAMES gio-2.0 ++ HINTS ${PC_GIO_LIBDIR} ${PC_GIO_LIBRARY_DIRS}) ++ ++# gobject ++ ++pkg_check_modules(PC_GOBJECT gobject-2.0) ++ ++if(NOT PC_GOBJECT_FOUND) ++ set(_GLIB_found_all false) ++endif() ++ ++find_path(GOBJECT_INCLUDE_DIR gobject/gobject.h ++ HINTS ${PC_GOBJECT_INCLUDEDIR} ${PC_GOBJECT_INCLUDE_DIRS} ++ PATH_SUFFIXES gobject-2.0) ++ ++find_library(GOBJECT_LIBRARY NAMES gobject-2.0 ++ HINTS ${PC_GOBJECT_LIBDIR} ${PC_GOBJECT_LIBRARY_DIRS}) ++ ++# gmodule ++ ++pkg_check_modules(PC_GMODULE gmodule-2.0) ++ ++if(NOT PC_GMODULE_FOUND) ++ set(_GLIB_found_all false) ++endif() ++ ++find_path(GMODULE_INCLUDE_DIR gmodule.h ++ HINTS ${PC_GMODULE_INCLUDEDIR} ${PC_GMODULE_INCLUDE_DIRS} ++ PATH_SUFFIXES gmodule-2.0) ++ ++find_library(GMODULE_LIBRARY NAMES gmodule-2.0 ++ HINTS ${PC_GMODULE_LIBDIR} ${PC_GMODULE_LIBRARY_DIRS}) ++ ++# gthread ++ ++pkg_check_modules(PC_GTHREAD gthread-2.0) ++ ++if(NOT PC_GTHREAD_FOUND) ++ set(_GLIB_found_all false) ++endif() ++ ++find_path(GTHREAD_INCLUDE_DIR glib/gthread.h ++ HINTS ${PC_GTHREAD_INCLUDEDIR} ${PC_GTHREAD_INCLUDE_DIRS} ++ PATH_SUFFIXES gthread-2.0) ++ ++find_library(GTHREAD_LIBRARY NAMES gthread-2.0 ++ HINTS ${PC_GTHREAD_LIBDIR} ${PC_GTHREAD_LIBRARY_DIRS}) ++ ++# Finalize ++ ++if(_GLIB_found_all) ++ include(FindPackageHandleStandardArgs) ++ ++ find_package_handle_standard_args(GLIB2 DEFAULT_MSG GLIB2_LIBRARY GLIB2_INCLUDE_DIR) ++ ++ set(GLIB2_LIBRARIES ${GLIB2_LIBRARY} ${GIO_LIBRARY} ${GOBJECT_LIBRARY} ${GMODULE_LIBRARY} ${GTHREAD_LIBRARY}) ++ set(GLIB2_INCLUDE_DIRS ${GLIB2_INCLUDE_DIR} ${GIO_INCLUDE_DIR} ${GOBJECT_INCLUDE_DIR} ${GMODULE_INCLUDE_DIR} ${GTHREAD_INCLUDE_DIR}) ++ ++ mark_as_advanced(GLIB2_INCLUDE_DIR GLIB2_LIBRARY) ++ ++ set(GLIB_FOUND true) ++else() ++ unset(GLIB2_LIBRARY) ++ unset(GLIB2_INCLUDE_DIR) ++ ++ set(GLIB_FOUND false) ++endif() +diff -urN cmake/FindGTK2.cmake cmake/FindGTK2.cmake +--- cmake/FindGTK2.cmake 2012-02-11 05:54:23.000000000 +1100 ++++ cmake/FindGTK2.cmake 2014-01-08 02:31:52.000000000 +1100 +@@ -63,24 +63,11 @@ + + # Glib + +-pkg_check_modules(PC_GLIB2 glib-2.0) +- +-if(NOT PC_GLIB2_FOUND) ++find_required_package(GLIB2) ++if(NOT GLIB2_FOUND) + set(_GTK2_found_all false) + endif() + +-find_path(GLIB2_INCLUDE_DIR_PART1 NAMES glib.h +- HINTS ${PC_GLIB2_INCLUDEDIR} ${PC_GLIB2_INCLUDE_DIRS} +- PATH_SUFFIXES glib-2.0) +- +-find_path(GLIB2_INCLUDE_DIR_PART2 NAMES glibconfig.h +- HINTS ${PC_GLIB2_INCLUDEDIR} ${PC_GLIB2_INCLUDE_DIRS} +- PATH_SUFFIXES glib-2.0/include) +- +-set(GLIB2_INCLUDE_DIR ${GLIB2_INCLUDE_DIR_PART1} ${GLIB2_INCLUDE_DIR_PART2}) +- +-find_library(GLIB2_LIBRARY NAMES glib-2.0) +- + # Pango + + pkg_check_modules(PC_PANGO pango) +@@ -129,8 +116,8 @@ + + find_package_handle_standard_args(GTK2 DEFAULT_MSG GTK2_LIBRARY GTK2_INCLUDE_DIR) + +- set(GTK2_LIBRARIES ${GTK2_LIBRARY} ${GDK2_LIBRARY} ${GLIB2_LIBRARY} ${PANGO_LIBRARY} ${CAIRO_LIBRARY} ${GDKPIXBUF_LIBRARY} ${ATK_LIBRARY}) +- set(GTK2_INCLUDE_DIRS ${GTK2_INCLUDE_DIR} ${GDK2_INCLUDE_DIR} ${GLIB2_INCLUDE_DIR} ${PANGO_INCLUDE_DIR} ${CAIRO_INCLUDE_DIR} ${GDKPIXBUF_INCLUDE_DIR} ${ATK_INCLUDE_DIR}) ++ set(GTK2_LIBRARIES ${GTK2_LIBRARY} ${GDK2_LIBRARY} ${GLIB2_LIBRARIES} ${PANGO_LIBRARY} ${CAIRO_LIBRARY} ${GDKPIXBUF_LIBRARY} ${ATK_LIBRARY}) ++ set(GTK2_INCLUDE_DIRS ${GTK2_INCLUDE_DIR} ${GDK2_INCLUDE_DIR} ${GLIB2_INCLUDE_DIRS} ${PANGO_INCLUDE_DIR} ${CAIRO_INCLUDE_DIR} ${GDKPIXBUF_INCLUDE_DIR} ${ATK_INCLUDE_DIR}) + + mark_as_advanced(GTK2_INCLUDE_DIR GTK2_LIBRARY) + +diff -urN cmake/FindGTK3.cmake cmake/FindGTK3.cmake +--- cmake/FindGTK3.cmake 2012-02-11 05:54:23.000000000 +1100 ++++ cmake/FindGTK3.cmake 2014-01-08 02:31:52.000000000 +1100 +@@ -48,29 +48,16 @@ + HINTS ${PC_GDKPIXBUF_INCLUDEDIR} ${PC_GDKPIXBUF_INCLUDE_DIRS} + PATH_SUFFIXES gdk-pixbuf-2.0) + +-find_library(GDKPIXBUF_LIBRARY NAMES gdk-3 ++find_library(GDKPIXBUF_LIBRARY NAMES gdk_pixbuf-2.0 + HINTS ${PC_GDKPIXBUF_LIBDIR} ${PC_GDKPIXBUF_LIBRARY_DIRS}) + + # Glib + +-pkg_check_modules(PC_GLIB2 glib-2.0) +- +-if(NOT PC_GLIB2_FOUND) ++find_required_package(GLIB2) ++if(NOT GLIB2_FOUND) + set(_GTK3_found_all false) + endif() + +-find_path(GLIB2_INCLUDE_DIR_PART1 NAMES glib.h +- HINTS ${PC_GLIB2_INCLUDEDIR} ${PC_GLIB2_INCLUDE_DIRS} +- PATH_SUFFIXES glib-2.0) +- +-find_path(GLIB2_INCLUDE_DIR_PART2 NAMES glibconfig.h +- HINTS ${PC_GLIB2_INCLUDEDIR} ${PC_GLIB2_INCLUDE_DIRS} +- PATH_SUFFIXES glib-2.0/include) +- +-set(GLIB2_INCLUDE_DIR ${GLIB2_INCLUDE_DIR_PART1} ${GLIB2_INCLUDE_DIR_PART2}) +- +-find_library(GLIB2_LIBRARY NAMES glib-2.0) +- + # Pango + + pkg_check_modules(PC_PANGO pango) +@@ -119,14 +106,17 @@ + + find_package_handle_standard_args(GTK3 DEFAULT_MSG GTK3_LIBRARY GTK3_INCLUDE_DIR) + +- set(GTK3_LIBRARIES ${GTK3_LIBRARY} ${GDK3_LIBRARY} ${GLIB2_LIBRARY} ${PANGO_LIBRARY} ${CAIRO_LIBRARY} ${GDKPIXBUF_LIBRARY} ${ATK_LIBRARY}) +- set(GTK3_INCLUDE_DIRS ${GTK3_INCLUDE_DIR} ${GLIB2_INCLUDE_DIR} ${PANGO_INCLUDE_DIR} ${CAIRO_INCLUDE_DIR} ${GDKPIXBUF_INCLUDE_DIR} ${ATK_INCLUDE_DIR}) ++ set(GTK3_LIBRARIES ${GTK3_LIBRARY} ${GDK3_LIBRARY} ${GLIB2_LIBRARIES} ${PANGO_LIBRARY} ${CAIRO_LIBRARY} ${GDKPIXBUF_LIBRARY} ${ATK_LIBRARY}) ++ set(GTK3_INCLUDE_DIRS ${GTK3_INCLUDE_DIR} ${GLIB2_INCLUDE_DIRS} ${PANGO_INCLUDE_DIR} ${CAIRO_INCLUDE_DIR} ${GDKPIXBUF_INCLUDE_DIR} ${ATK_INCLUDE_DIR}) + + mark_as_advanced(GTK3_INCLUDE_DIR GTK3_LIBRARY) + + set(GTK3_FOUND true) + else() + unset(GTK3_LIBRARY) ++ unset(GTK3_INCLUDE_DIR) ++ ++ unset(GDK3_LIBRARY) + unset(GDK3_INCLUDE_DIR) + + set(GTK3_FOUND false) +diff -urN cmake/FindLIBVNCSERVER.cmake cmake/FindLIBVNCSERVER.cmake +--- cmake/FindLIBVNCSERVER.cmake 1970-01-01 10:00:00.000000000 +1000 ++++ cmake/FindLIBVNCSERVER.cmake 2014-01-08 02:31:52.000000000 +1100 +@@ -0,0 +1,37 @@ ++# Remmina - The GTK+ Remote Desktop Client ++# ++# Copyright (C) 2012 Luca Falavigna ++# ++# This program is free software; you can 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. ++# ++# This program 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 this program; if not, write to the Free Software ++# Foundation, Inc., 59 Temple Place, Suite 330, ++# Boston, MA 02111-1307, USA. ++ ++find_package(PkgConfig) ++pkg_check_modules(PC_LIBVNCSERVER libvncserver) ++set(LIBVNCSERVER_DEFINITIONS ${PC_LIBVNCSERVER_CFLAGS_OTHER}) ++ ++find_path(LIBVNCSERVER_INCLUDE_DIR NAMES rfb/rfb.h ++ HINTS ${PC_LIBVNCSERVER_INCLUDEDIR} ${PC_LIBVNCSERVER_INCLUDE_DIRS}) ++ ++find_library(LIBVNCSERVER_LIBRARY NAMES vncserver ++ HINTS ${PC_LIBVNCSERVER_LIBDIR} ${PC_LIBVNCSERVER_LIBRARY_DIRS}) ++ ++include(FindPackageHandleStandardArgs) ++ ++find_package_handle_standard_args(LIBVNCSERVER DEFAULT_MSG LIBVNCSERVER_LIBRARY LIBVNCSERVER_INCLUDE_DIR) ++ ++set(LIBVNCSERVER_LIBRARIES ${LIBVNCSERVER_LIBRARY}) ++set(LIBVNCSERVER_INCLUDE_DIRS ${LIBVNCSERVER_INCLUDE_DIR}) ++ ++mark_as_advanced(LIBVNCSERVER_INCLUDE_DIR LIBVNCSERVER_LIBRARY) +diff -urN remmina/AUTHORS remmina/AUTHORS +--- remmina/AUTHORS 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/AUTHORS 1970-01-01 10:00:00.000000000 +1000 +@@ -1,4 +0,0 @@ +-Please check the application About dialog or the official web site for a full list of authors. +- +-http://remmina.sourceforge.net/contact.shtml +- +diff -urN remmina/CMakeLists.txt remmina/CMakeLists.txt +--- remmina/CMakeLists.txt 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/CMakeLists.txt 2014-01-08 02:31:52.000000000 +1100 +@@ -86,6 +86,8 @@ + src/remmina_string_list.h + src/remmina_widget_pool.c + src/remmina_widget_pool.h ++ src/remmina_external_tools.c ++ src/remmina_external_tools.h + ) + + add_executable(remmina ${REMMINA_SRCS}) +@@ -93,6 +95,10 @@ + include_directories(${GTK_INCLUDE_DIRS}) + target_link_libraries(remmina ${GTK_LIBRARIES}) + ++find_package(X11) ++include_directories(${X11_INCLUDE_DIR}) ++target_link_libraries(remmina ${X11_LIBRARIES}) ++ + find_suggested_package(LIBSSH) + if(LIBSSH_FOUND) + add_definitions(-DHAVE_LIBSSH) +@@ -100,6 +106,11 @@ + target_link_libraries(remmina ${LIBSSH_LIBRARIES}) + endif() + ++if(PTHREAD_FOUND) ++ include_directories(${PTHREAD_INCLUDE_DIRS}) ++ target_link_libraries(remmina ${PTHREAD_LIBRARIES}) ++endif() ++ + if(GCRYPT_FOUND) + include_directories(${GCRYPT_INCLUDE_DIRS}) + target_link_libraries(remmina ${GCRYPT_LIBRARIES}) +@@ -132,9 +143,12 @@ + endif() + endif() + +-add_subdirectory(po) ++if(WITH_TRANSLATIONS) ++ add_subdirectory(po) ++endif() + add_subdirectory(icons) + add_subdirectory(desktop) ++add_subdirectory(external_tools) + + install(TARGETS remmina DESTINATION ${CMAKE_INSTALL_BINDIR}) + +diff -urN remmina/COPYING remmina/COPYING +--- remmina/COPYING 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/COPYING 1970-01-01 10:00:00.000000000 +1000 +@@ -1,340 +0,0 @@ +- GNU GENERAL PUBLIC LICENSE +- Version 2, June 1991 +- +- Copyright (C) 1989, 1991 Free Software Foundation, Inc. +- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +- Everyone is permitted to copy and distribute verbatim copies +- of this license document, but changing it is not allowed. +- +- Preamble +- +- The licenses for most software are designed to take away your +-freedom to share and change it. By contrast, the GNU General Public +-License is intended to guarantee your freedom to share and change free +-software--to make sure the software is free for all its users. This +-General Public License applies to most of the Free Software +-Foundation's software and to any other program whose authors commit to +-using it. (Some other Free Software Foundation software is covered by +-the GNU Library General Public License instead.) You can apply it to +-your programs, too. +- +- When we speak of free software, we are referring to freedom, not +-price. Our General Public Licenses are designed to make sure that you +-have the freedom to distribute copies of free software (and charge for +-this service if you wish), that you receive source code or can get it +-if you want it, that you can change the software or use pieces of it +-in new free programs; and that you know you can do these things. +- +- To protect your rights, we need to make restrictions that forbid +-anyone to deny you these rights or to ask you to surrender the rights. +-These restrictions translate to certain responsibilities for you if you +-distribute copies of the software, or if you modify it. +- +- For example, if you distribute copies of such a program, whether +-gratis or for a fee, you must give the recipients all the rights that +-you have. You must make sure that they, too, receive or can get the +-source code. And you must show them these terms so they know their +-rights. +- +- We protect your rights with two steps: (1) copyright the software, and +-(2) offer you this license which gives you legal permission to copy, +-distribute and/or modify the software. +- +- Also, for each author's protection and ours, we want to make certain +-that everyone understands that there is no warranty for this free +-software. If the software is modified by someone else and passed on, we +-want its recipients to know that what they have is not the original, so +-that any problems introduced by others will not reflect on the original +-authors' reputations. +- +- Finally, any free program is threatened constantly by software +-patents. We wish to avoid the danger that redistributors of a free +-program will individually obtain patent licenses, in effect making the +-program proprietary. To prevent this, we have made it clear that any +-patent must be licensed for everyone's free use or not licensed at all. +- +- The precise terms and conditions for copying, distribution and +-modification follow. +- +- GNU GENERAL PUBLIC LICENSE +- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION +- +- 0. This License applies to any program or other work which contains +-a notice placed by the copyright holder saying it may be distributed +-under the terms of this General Public License. The "Program", below, +-refers to any such program or work, and a "work based on the Program" +-means either the Program or any derivative work under copyright law: +-that is to say, a work containing the Program or a portion of it, +-either verbatim or with modifications and/or translated into another +-language. (Hereinafter, translation is included without limitation in +-the term "modification".) Each licensee is addressed as "you". +- +-Activities other than copying, distribution and modification are not +-covered by this License; they are outside its scope. The act of +-running the Program is not restricted, and the output from the Program +-is covered only if its contents constitute a work based on the +-Program (independent of having been made by running the Program). +-Whether that is true depends on what the Program does. +- +- 1. You may copy and distribute verbatim copies of the Program's +-source code as you receive it, in any medium, provided that you +-conspicuously and appropriately publish on each copy an appropriate +-copyright notice and disclaimer of warranty; keep intact all the +-notices that refer to this License and to the absence of any warranty; +-and give any other recipients of the Program a copy of this License +-along with the Program. +- +-You may charge a fee for the physical act of transferring a copy, and +-you may at your option offer warranty protection in exchange for a fee. +- +- 2. You may modify your copy or copies of the Program or any portion +-of it, thus forming a work based on the Program, and copy and +-distribute such modifications or work under the terms of Section 1 +-above, provided that you also meet all of these conditions: +- +- a) You must cause the modified files to carry prominent notices +- stating that you changed the files and the date of any change. +- +- b) You must cause any work that you distribute or publish, that in +- whole or in part contains or is derived from the Program or any +- part thereof, to be licensed as a whole at no charge to all third +- parties under the terms of this License. +- +- c) If the modified program normally reads commands interactively +- when run, you must cause it, when started running for such +- interactive use in the most ordinary way, to print or display an +- announcement including an appropriate copyright notice and a +- notice that there is no warranty (or else, saying that you provide +- a warranty) and that users may redistribute the program under +- these conditions, and telling the user how to view a copy of this +- License. (Exception: if the Program itself is interactive but +- does not normally print such an announcement, your work based on +- the Program is not required to print an announcement.) +- +-These requirements apply to the modified work as a whole. If +-identifiable sections of that work are not derived from the Program, +-and can be reasonably considered independent and separate works in +-themselves, then this License, and its terms, do not apply to those +-sections when you distribute them as separate works. But when you +-distribute the same sections as part of a whole which is a work based +-on the Program, the distribution of the whole must be on the terms of +-this License, whose permissions for other licensees extend to the +-entire whole, and thus to each and every part regardless of who wrote it. +- +-Thus, it is not the intent of this section to claim rights or contest +-your rights to work written entirely by you; rather, the intent is to +-exercise the right to control the distribution of derivative or +-collective works based on the Program. +- +-In addition, mere aggregation of another work not based on the Program +-with the Program (or with a work based on the Program) on a volume of +-a storage or distribution medium does not bring the other work under +-the scope of this License. +- +- 3. You may copy and distribute the Program (or a work based on it, +-under Section 2) in object code or executable form under the terms of +-Sections 1 and 2 above provided that you also do one of the following: +- +- a) Accompany it with the complete corresponding machine-readable +- source code, which must be distributed under the terms of Sections +- 1 and 2 above on a medium customarily used for software interchange; or, +- +- b) Accompany it with a written offer, valid for at least three +- years, to give any third party, for a charge no more than your +- cost of physically performing source distribution, a complete +- machine-readable copy of the corresponding source code, to be +- distributed under the terms of Sections 1 and 2 above on a medium +- customarily used for software interchange; or, +- +- c) Accompany it with the information you received as to the offer +- to distribute corresponding source code. (This alternative is +- allowed only for noncommercial distribution and only if you +- received the program in object code or executable form with such +- an offer, in accord with Subsection b above.) +- +-The source code for a work means the preferred form of the work for +-making modifications to it. For an executable work, complete source +-code means all the source code for all modules it contains, plus any +-associated interface definition files, plus the scripts used to +-control compilation and installation of the executable. However, as a +-special exception, the source code distributed need not include +-anything that is normally distributed (in either source or binary +-form) with the major components (compiler, kernel, and so on) of the +-operating system on which the executable runs, unless that component +-itself accompanies the executable. +- +-If distribution of executable or object code is made by offering +-access to copy from a designated place, then offering equivalent +-access to copy the source code from the same place counts as +-distribution of the source code, even though third parties are not +-compelled to copy the source along with the object code. +- +- 4. You may not copy, modify, sublicense, or distribute the Program +-except as expressly provided under this License. Any attempt +-otherwise to copy, modify, sublicense or distribute the Program is +-void, and will automatically terminate your rights under this License. +-However, parties who have received copies, or rights, from you under +-this License will not have their licenses terminated so long as such +-parties remain in full compliance. +- +- 5. You are not required to accept this License, since you have not +-signed it. However, nothing else grants you permission to modify or +-distribute the Program or its derivative works. These actions are +-prohibited by law if you do not accept this License. Therefore, by +-modifying or distributing the Program (or any work based on the +-Program), you indicate your acceptance of this License to do so, and +-all its terms and conditions for copying, distributing or modifying +-the Program or works based on it. +- +- 6. Each time you redistribute the Program (or any work based on the +-Program), the recipient automatically receives a license from the +-original licensor to copy, distribute or modify the Program subject to +-these terms and conditions. You may not impose any further +-restrictions on the recipients' exercise of the rights granted herein. +-You are not responsible for enforcing compliance by third parties to +-this License. +- +- 7. If, as a consequence of a court judgment or allegation of patent +-infringement or for any other reason (not limited to patent issues), +-conditions are imposed on you (whether by court order, agreement or +-otherwise) that contradict the conditions of this License, they do not +-excuse you from the conditions of this License. If you cannot +-distribute so as to satisfy simultaneously your obligations under this +-License and any other pertinent obligations, then as a consequence you +-may not distribute the Program at all. For example, if a patent +-license would not permit royalty-free redistribution of the Program by +-all those who receive copies directly or indirectly through you, then +-the only way you could satisfy both it and this License would be to +-refrain entirely from distribution of the Program. +- +-If any portion of this section is held invalid or unenforceable under +-any particular circumstance, the balance of the section is intended to +-apply and the section as a whole is intended to apply in other +-circumstances. +- +-It is not the purpose of this section to induce you to infringe any +-patents or other property right claims or to contest validity of any +-such claims; this section has the sole purpose of protecting the +-integrity of the free software distribution system, which is +-implemented by public license practices. Many people have made +-generous contributions to the wide range of software distributed +-through that system in reliance on consistent application of that +-system; it is up to the author/donor to decide if he or she is willing +-to distribute software through any other system and a licensee cannot +-impose that choice. +- +-This section is intended to make thoroughly clear what is believed to +-be a consequence of the rest of this License. +- +- 8. If the distribution and/or use of the Program is restricted in +-certain countries either by patents or by copyrighted interfaces, the +-original copyright holder who places the Program under this License +-may add an explicit geographical distribution limitation excluding +-those countries, so that distribution is permitted only in or among +-countries not thus excluded. In such case, this License incorporates +-the limitation as if written in the body of this License. +- +- 9. The Free Software Foundation may publish revised and/or new versions +-of the General Public License from time to time. Such new versions will +-be similar in spirit to the present version, but may differ in detail to +-address new problems or concerns. +- +-Each version is given a distinguishing version number. If the Program +-specifies a version number of this License which applies to it and "any +-later version", you have the option of following the terms and conditions +-either of that version or of any later version published by the Free +-Software Foundation. If the Program does not specify a version number of +-this License, you may choose any version ever published by the Free Software +-Foundation. +- +- 10. If you wish to incorporate parts of the Program into other free +-programs whose distribution conditions are different, write to the author +-to ask for permission. For software which is copyrighted by the Free +-Software Foundation, write to the Free Software Foundation; we sometimes +-make exceptions for this. Our decision will be guided by the two goals +-of preserving the free status of all derivatives of our free software and +-of promoting the sharing and reuse of software generally. +- +- NO WARRANTY +- +- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +-REPAIR OR CORRECTION. +- +- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +-POSSIBILITY OF SUCH DAMAGES. +- +- END OF TERMS AND CONDITIONS +- +- How to Apply These Terms to Your New Programs +- +- If you develop a new program, and you want it to be of the greatest +-possible use to the public, the best way to achieve this is to make it +-free software which everyone can redistribute and change under these terms. +- +- To do so, attach the following notices to the program. It is safest +-to attach them to the start of each source file to most effectively +-convey the exclusion of warranty; and each file should have at least +-the "copyright" line and a pointer to where the full notice is found. +- +- <one line to give the program's name and a brief idea of what it does.> +- Copyright (C) <year> <name of author> +- +- This program is free software; you can 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. +- +- This program 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 this program; if not, write to the Free Software +- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +- +- +-Also add information on how to contact you by electronic and paper mail. +- +-If the program is interactive, make it output a short notice like this +-when it starts in an interactive mode: +- +- Gnomovision version 69, Copyright (C) year name of author +- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. +- This is free software, and you are welcome to redistribute it +- under certain conditions; type `show c' for details. +- +-The hypothetical commands `show w' and `show c' should show the appropriate +-parts of the General Public License. Of course, the commands you use may +-be called something other than `show w' and `show c'; they could even be +-mouse-clicks or menu items--whatever suits your program. +- +-You should also get your employer (if you work as a programmer) or your +-school, if any, to sign a "copyright disclaimer" for the program, if +-necessary. Here is a sample; alter the names: +- +- Yoyodyne, Inc., hereby disclaims all copyright interest in the program +- `Gnomovision' (which makes passes at compilers) written by James Hacker. +- +- <signature of Ty Coon>, 1 April 1989 +- Ty Coon, President of Vice +- +-This General Public License does not permit incorporating your program into +-proprietary programs. If your program is a subroutine library, you may +-consider it more useful to permit linking proprietary applications with the +-library. If this is what you want to do, use the GNU Library General +-Public License instead of this License. +diff -urN remmina/ChangeLog remmina/ChangeLog +--- remmina/ChangeLog 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/ChangeLog 1970-01-01 10:00:00.000000000 +1000 +@@ -1,234 +0,0 @@ +-***** 1.0.0 - 2012-02-10 ***** +-Main program design and functionality: +-o Switch to the CMake build system +-o Refactoring of code style +-o Changing file name convention +- +-RDP protocol related: +-o Support for FreeRDP 1.0 +-o Support for RemoteFX +-o Support for Network Level Authentication +-o Added certificate validation prompt +- +-***** 0.9.0 - 2010-12-12 ***** +-Main program design and functionality: +-o Rewrite plugin system so that plugins can have more flexibilities +-o Integrate scrolled window and fullscreen view modes into one button +-o Remove quick connect menu and consolidate the feature with Connection->New +- menu. Move other Edit menu items under Connection menu as well. See +- http://bugs.debian.org/591755 +-o Change 'Quit' menu item to 'Close' +-o Show version information in plugin window +-o Add link button to resolution field to bring up to resolution preference +-o Calculate auto-fit window size more correctly +-o Add subgroup feature, using '/' as subgroup delimiter +-o Remember group expansion status +-o Add shortcut key names to toolbar tooltips +-o Support shortcut key to be same as hostkey, which will be activated by just +- press(down and up) the hostkey. By default, this is the Keyboard grabbing +- shortcut. +-o Add pin button to floating toolbar +-o Add tray icon and various related preferences options. All featues in the +- original GNOME/XFCE panel applet have been ported in it, plus all windows +- can be minimized to tray (default is off) +-o Add Help/Homepage menu +- +-RDP protocol related: +-o Support TLS negotiation added in FreeRDP 0.8 +-o Support audio input redirection added in FreeRDP 0.8 +-o Add new preference option 'Use client keyboard mapping' to obey X key +- mappings (wfaulk) +- +-VNC protocol related: +-o Change 'Proxy Destination' to 'Repeater' to make it clearer. Now the 'Server' +- is the server and 'Repeater' is the repeater. :) +- +-NX protocol related: +-o Add SSH tunnel +- +-SSH protocol related: +-o Add ability to spawn new session from toolbar menu +-o Add Copy/Paste toolbar menu for SSH terminal +-o Add Font and Scrollback lines preference option +-o Add ability to show/hide hidden files in SFTP +-o Remember paned position in SFTP window +-o Add startup path option in SFTP +- +-***** 0.8.0 - 2010-07-10 ***** +-Main program design and functionality: +-o Introduce a new plugin system. All protocols except SSH are moved to a new +- source package 'remmina-plugins' so that they can have bug-fixes and releases +- separately. A new Plugins menu is added accordingly +-o Add Hostkey feature and related Preference options. Hostkey feature provides +- an easy and reliable way to access various remote desktop toolbar functions +- through customizable shortcut key combinations +-o Add Attachable / Detachable Tabs feature. Tabs now can be merged or separated +- between windows. +-o Add ability to show / hide the toolbar through Hostkey +-o Add Quick Search filter feature +-o Add 'Save Settings When Starting the Connection' preference option, default +- is true. If set to false, profile will not be saved if only 'Connect' button +- is clicked +-o Add 'Always show tab' option +-o Add a little cosmetic motion effect to the floating toolbar +-o Add Debug Window feature in Help menu +-o Add Online Wiki link in Help menu +-o Support IPv6 address notation +- +-RDP protocol related: +-o Bring in FreeRDP (http://freerdp.sourceforge.net) project as rdesktop +- replacement. Most of the features described below are direct benefits +- from the FreeRDP project +-o FreeRDP provides a new keyboard system which is based on XKB and Windows +- keyboard layouts. In most cases it can detect the keyboard layout and work +- out of the box. It's also possible to manually assign a keyboard layout. +-o Scaling remote screen is supported +-o More clipboard formats (HTML, bitmaps, etc) are supported +-o Better disk/printer sharing. Works with Windows 7 and Windows 2008 +-o Countless of original rdesktop bug-fixes and clean up +-o Support importing Windows and tsclient .rdp file, either by drag-n-drop to +- the main window, by Tools / Import menu, or by -e / -c command line argument +-o Support exporting Windows .rdp file +- +-VNC protocol related: +-o Support disabling TLS/VeNCrypt encryption when connecting to VNC servers +- that supports it, like Vino +-o Support Refresh screen +-o Add UltraVNC repeater support +-o Add reverse SSH tunnel support for VNC incoming connection +-o Add disabling clipboard synchronization option +-o Better cursor and color handling +- +-NX protocol related: +-o New protocol NX is supported. Depends on libssh and nxproxy +-o Support resizing of remote session and scaling of console session +-o Support session management, including resume, attach, terminate +-o Support custom private key and various trivial options +- +-SSH protocol related: +-o SSH terminal and SFTP now works as internal plugins, and can be tabbed or +- toggled fullscreen like any other protocols +-o Add startup program support in SSH terminal +-o Add folder uploading support in SFTP +-o Add new 'Tunnel via loopback' option +-o Support tunneling through same server at custom port using ':port' custom +- server notation +- +-XDMCP protocol related: +-o Support running a startup program from SSH tunnel, without launching XDMCP +- login window +- +-Telepathy support: +-o Implement as a special plugin so it will work with desktop sharing feature +- in Empathy IM client +- +-***** 0.7.0 - 2009-12-12 ***** +-o Add new XDMCP protocol (using Xephyr) +-o Implement XDMCP session over SSH (using xqproxy on SSH server side) +-o Add Public Key (Automatic) option to support ssh-agent, by Alex Chateau <ash@zednet.lv> +-o A lot of cosmetic changes +-o Use icon theme approach to install all icons +-o Fix RGB color issue with VMware VNC server +-o Enhanced groups and resolution editing +-o Remove "run in separated process" option. Manage all windows in single process +-o Upgrade glib dependancy to 2.20 and gtk to 2.16 +-o Implement single instance application using libunique +-o Add Copy feature to create a new copy of existing connection profile +-o Add RDP Sound (off/local/remote) option +-o Add RDP local printer sharing option +-o Support Tab Interface and related options (Tab by Group / Tab by Protocol / Tab All / Tab None) +-o Simplify Groups setting by using combobox. Groups tab in preference dialog removed. +-o New application logo designed by Martin Lettner <m.lettner@gmail.com> +-o Support more VNC security types: TLS, VeNCrypt, MSLogon +-o Remember sort column id and order in main window +- +-***** 0.6.0 - 2009-07-07 ***** +-o Add Avahi support using libavahi-ui +-o Option to start a connection in view-only mode +-o Enhanced command line arguments to support new grdc-applet features +-o Black Scrolled Viewport border (Nikolay Botev) +-o Better mouse cursor (both server and client side) (Nikolay Botev) +-o Keyboard mapping option for rdesktop (RDP) +-o VNC Chat feature +-o Fix VNC desktop resize bug (Nikolay Botev) +-o VNC Beep feature (Nikolay Botev) +-o A SFTP client (stand-alone or integrate with SSH tunnel) +-o SSH terminal feature integrated with SSH tunnel +-o Add RDP options: Share folder, Startup program/path and Advanced arguments +-o New Preference option Default View Mode +-o Better default window size to match server resolution +-o New VNC advanced option: Horizontal and Vertical scale +-o Saved password is now encrypted +-o Quick Connect protocol sub menus and connection protocol icons +-o Support VNC keyboard mapping +-o Fix VNC peer disconnect bug (Alex Chateau) +-o Greek translation added by Elias Sofronas <esofronas@gmail.com> +- +-***** 0.5.1 - 2009-05-01 ***** +-o Fixed VNC crash in scrolled viewport mode +-o Fixed VNC cuttext "loopback" +- +-***** 0.5.0 - 2009-04-14 ***** +-o Recent server names in quick connect +-o Invisible floating toolbar option +-o Floating toolbar transparency feature (by mouse scrolling) +-o Enhanced Keyboard grabbing feature +-o Support VNC incoming connections +-o Changed Keyboard grabbing icon +-o Center the client in the window when the remote desktop area is smaller than the window (Nikolay) +-o Change the background color of the viewport to black (Nikolay) +-o Use a blank dot as local cursor if remote cursor is shown in VNC +-o Change button order in all dialogs and apply alternative order +-o Popup menu for list/tree view in main window +-o Support UltraVNC extension "Disable Server Input" +-o Eliminate passphrase prompt if SSH private key has empty passphrase +-o Reuse existing SSH session in case of VNC authentication failure +-o Change desktop file's Name and Comments +- +-***** 0.4.0 - 2009-02-24 ***** +-o SSH Tunneling support and SSH Tunnel local port option +-o VNC Color Depth support +-o VNC Scaled Mode toggle and Scale Quality option +-o VNC Poor quality level changed to the lowest to reduce a little bandwidth (marmuta) +-o RDP new option to attach to console +-o Auto-fit window button in scrolled window mode (resize to fit remote resolution) +-o Viewport fullscreen mode nows works with GTK 2.14 +-o Keyboard grabbing enabled in scrolled window mode +-o Tree View / List View option +-o Double-click Action option +-o New Applet Option: Show Quick Connect on top of the Menu +-o New Applet Option: Hide Total Count in Group Expander +- +-***** 0.3.1 - 2009-01-26 ***** +-o Fixed: Pressed keys won't release when focus lost in VNC +-o Remember main window and connection window state (size/maximized) +-o Shortcut key changed for Quit(^q) and Quick Connect(^u) +- +-***** 0.3.0 - 2009-01-16 ***** +-o Double-click to open the connection +-o Customizable RDP resolution list +-o Ability to change VNC quality while connected +-o Support View-Only VNC +-o New View menu to show/hide toolbar or statusbar +-o Small toolbar button option +-o A label in floating toolbar indicating the current connection +-o New Grouping feature +-o Ability to save the connection settings as default values +-o Polish translation added by: Jakub Tomczak <tomczak.jakub@gmail.com> +-o New option to remember the last view mode of each connection +-o New option to open the connections in separated processes +-o A new Preferences dialog for the new options +-o A new look of the remote desktop preference dialog +- +-***** 0.2.0 - 2009-01-05 ***** +-o VNC support is added +-o A lot of code arrangement plus some bug fixes +- +-***** 0.1.1 - 2008-12-28 ***** +-o Spainish translation added by: Julio Napurí Carlos <julionc@gmail.com> +-o Added a .desktop file +-o Gnome panel applet support completed +- +-***** 0.1.0 - 2008-12-25 ***** +-o First public release! +- +diff -urN remmina/INSTALL remmina/INSTALL +--- remmina/INSTALL 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/INSTALL 1970-01-01 10:00:00.000000000 +1000 +@@ -1,237 +0,0 @@ +-Installation Instructions +-************************* +- +-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, +-2006, 2007 Free Software Foundation, Inc. +- +-This file is free documentation; the Free Software Foundation gives +-unlimited permission to copy, distribute and modify it. +- +-Basic Installation +-================== +- +-Briefly, the shell commands `./configure; make; make install' should +-configure, build, and install this package. The following +-more-detailed instructions are generic; see the `README' file for +-instructions specific to this package. +- +- The `configure' shell script attempts to guess correct values for +-various system-dependent variables used during compilation. It uses +-those values to create a `Makefile' in each directory of the package. +-It may also create one or more `.h' files containing system-dependent +-definitions. Finally, it creates a shell script `config.status' that +-you can run in the future to recreate the current configuration, and a +-file `config.log' containing compiler output (useful mainly for +-debugging `configure'). +- +- It can also use an optional file (typically called `config.cache' +-and enabled with `--cache-file=config.cache' or simply `-C') that saves +-the results of its tests to speed up reconfiguring. Caching is +-disabled by default to prevent problems with accidental use of stale +-cache files. +- +- If you need to do unusual things to compile the package, please try +-to figure out how `configure' could check whether to do them, and mail +-diffs or instructions to the address given in the `README' so they can +-be considered for the next release. If you are using the cache, and at +-some point `config.cache' contains results you don't want to keep, you +-may remove or edit it. +- +- The file `configure.ac' (or `configure.in') is used to create +-`configure' by a program called `autoconf'. You need `configure.ac' if +-you want to change it or regenerate `configure' using a newer version +-of `autoconf'. +- +-The simplest way to compile this package is: +- +- 1. `cd' to the directory containing the package's source code and type +- `./configure' to configure the package for your system. +- +- Running `configure' might take a while. While running, it prints +- some messages telling which features it is checking for. +- +- 2. Type `make' to compile the package. +- +- 3. Optionally, type `make check' to run any self-tests that come with +- the package. +- +- 4. Type `make install' to install the programs and any data files and +- documentation. +- +- 5. You can remove the program binaries and object files from the +- source code directory by typing `make clean'. To also remove the +- files that `configure' created (so you can compile the package for +- a different kind of computer), type `make distclean'. There is +- also a `make maintainer-clean' target, but that is intended mainly +- for the package's developers. If you use it, you may have to get +- all sorts of other programs in order to regenerate files that came +- with the distribution. +- +- 6. Often, you can also type `make uninstall' to remove the installed +- files again. +- +-Compilers and Options +-===================== +- +-Some systems require unusual options for compilation or linking that the +-`configure' script does not know about. Run `./configure --help' for +-details on some of the pertinent environment variables. +- +- You can give `configure' initial values for configuration parameters +-by setting variables in the command line or in the environment. Here +-is an example: +- +- ./configure CC=c99 CFLAGS=-g LIBS=-lposix +- +- *Note Defining Variables::, for more details. +- +-Compiling For Multiple Architectures +-==================================== +- +-You can compile the package for more than one kind of computer at the +-same time, by placing the object files for each architecture in their +-own directory. To do this, you can use GNU `make'. `cd' to the +-directory where you want the object files and executables to go and run +-the `configure' script. `configure' automatically checks for the +-source code in the directory that `configure' is in and in `..'. +- +- With a non-GNU `make', it is safer to compile the package for one +-architecture at a time in the source code directory. After you have +-installed the package for one architecture, use `make distclean' before +-reconfiguring for another architecture. +- +-Installation Names +-================== +- +-By default, `make install' installs the package's commands under +-`/usr/local/bin', include files under `/usr/local/include', etc. You +-can specify an installation prefix other than `/usr/local' by giving +-`configure' the option `--prefix=PREFIX'. +- +- You can specify separate installation prefixes for +-architecture-specific files and architecture-independent files. If you +-pass the option `--exec-prefix=PREFIX' to `configure', the package uses +-PREFIX as the prefix for installing programs and libraries. +-Documentation and other data files still use the regular prefix. +- +- In addition, if you use an unusual directory layout you can give +-options like `--bindir=DIR' to specify different values for particular +-kinds of files. Run `configure --help' for a list of the directories +-you can set and what kinds of files go in them. +- +- If the package supports it, you can cause programs to be installed +-with an extra prefix or suffix on their names by giving `configure' the +-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. +- +-Optional Features +-================= +- +-Some packages pay attention to `--enable-FEATURE' options to +-`configure', where FEATURE indicates an optional part of the package. +-They may also pay attention to `--with-PACKAGE' options, where PACKAGE +-is something like `gnu-as' or `x' (for the X Window System). The +-`README' should mention any `--enable-' and `--with-' options that the +-package recognizes. +- +- For packages that use the X Window System, `configure' can usually +-find the X include and library files automatically, but if it doesn't, +-you can use the `configure' options `--x-includes=DIR' and +-`--x-libraries=DIR' to specify their locations. +- +-Specifying the System Type +-========================== +- +-There may be some features `configure' cannot figure out automatically, +-but needs to determine by the type of machine the package will run on. +-Usually, assuming the package is built to be run on the _same_ +-architectures, `configure' can figure that out, but if it prints a +-message saying it cannot guess the machine type, give it the +-`--build=TYPE' option. TYPE can either be a short name for the system +-type, such as `sun4', or a canonical name which has the form: +- +- CPU-COMPANY-SYSTEM +- +-where SYSTEM can have one of these forms: +- +- OS KERNEL-OS +- +- See the file `config.sub' for the possible values of each field. If +-`config.sub' isn't included in this package, then this package doesn't +-need to know the machine type. +- +- If you are _building_ compiler tools for cross-compiling, you should +-use the option `--target=TYPE' to select the type of system they will +-produce code for. +- +- If you want to _use_ a cross compiler, that generates code for a +-platform different from the build platform, you should specify the +-"host" platform (i.e., that on which the generated programs will +-eventually be run) with `--host=TYPE'. +- +-Sharing Defaults +-================ +- +-If you want to set default values for `configure' scripts to share, you +-can create a site shell script called `config.site' that gives default +-values for variables like `CC', `cache_file', and `prefix'. +-`configure' looks for `PREFIX/share/config.site' if it exists, then +-`PREFIX/etc/config.site' if it exists. Or, you can set the +-`CONFIG_SITE' environment variable to the location of the site script. +-A warning: not all `configure' scripts look for a site script. +- +-Defining Variables +-================== +- +-Variables not defined in a site shell script can be set in the +-environment passed to `configure'. However, some packages may run +-configure again during the build, and the customized values of these +-variables may be lost. In order to avoid this problem, you should set +-them in the `configure' command line, using `VAR=value'. For example: +- +- ./configure CC=/usr/local2/bin/gcc +- +-causes the specified `gcc' to be used as the C compiler (unless it is +-overridden in the site shell script). +- +-Unfortunately, this technique does not work for `CONFIG_SHELL' due to +-an Autoconf bug. Until the bug is fixed you can use this workaround: +- +- CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash +- +-`configure' Invocation +-====================== +- +-`configure' recognizes the following options to control how it operates. +- +-`--help' +-`-h' +- Print a summary of the options to `configure', and exit. +- +-`--version' +-`-V' +- Print the version of Autoconf used to generate the `configure' +- script, and exit. +- +-`--cache-file=FILE' +- Enable the cache: use and save the results of the tests in FILE, +- traditionally `config.cache'. FILE defaults to `/dev/null' to +- disable caching. +- +-`--config-cache' +-`-C' +- Alias for `--cache-file=config.cache'. +- +-`--quiet' +-`--silent' +-`-q' +- Do not print messages saying which checks are being made. To +- suppress all normal output, redirect it to `/dev/null' (any error +- messages will still be shown). +- +-`--srcdir=DIR' +- Look for the package's source code in directory DIR. Usually +- `configure' can determine that directory automatically. +- +-`configure' also accepts some other, not widely useful, options. Run +-`configure --help' for more details. +- +diff -urN remmina/README remmina/README +--- remmina/README 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/README 1970-01-01 10:00:00.000000000 +1000 +@@ -1,22 +0,0 @@ +-To compile with full feature support in Debian, please install the following packages: +- +-libgtk2.0-dev libssh-dev libavahi-ui-dev libvte-dev libgcrypt11-dev libunique-dev +- +-(libpthread is recommended for VNC support and required for SSH support. libpthread-stub0-dev package will be installed as dependency in the above packages in Debian) +- +-To compile and install Remmina, please run the following command as root: +- +-$ ./configure +-$ make +-$ make install +- +-Please visit the following projects that Remmina depends on: +- +-Gnome: http://www.gnome.org +-LibVNCServer: http://libvncserver.sourceforge.net +-rdesktop: http://www.rdesktop.org +-libssh: http://www.libssh.org +-Avahi: http://avahi.org +-libvte: http://library.gnome.org/devel/vte/ +-libgcrypt: http://www.gnupg.org +- +diff -urN remmina/desktop/CMakeLists.txt remmina/desktop/CMakeLists.txt +--- remmina/desktop/CMakeLists.txt 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/desktop/CMakeLists.txt 2014-01-08 02:31:52.000000000 +1100 +@@ -38,3 +38,4 @@ + install(FILES ${ICON48_DATA} DESTINATION ${ICON48_DIR}) + install(FILES ${ICONSVG_DATA} DESTINATION ${ICONSVG_DIR}) + ++install(FILES remmina.desktop DESTINATION "${REMMINA_DATADIR}/applications") +diff -urN remmina/desktop/remmina.desktop remmina/desktop/remmina.desktop +--- remmina/desktop/remmina.desktop 1970-01-01 10:00:00.000000000 +1000 ++++ remmina/desktop/remmina.desktop 2014-01-08 02:31:52.000000000 +1100 +@@ -0,0 +1,23 @@ ++[Desktop Entry] ++Version=1.0 ++Name=Remmina ++GenericName=Remote Desktop Client ++X-GNOME-FullName=Remmina Remote Desktop Client ++Comment=Connect to remote desktops ++TryExec=remmina ++Exec=remmina ++Icon=remmina ++Terminal=false ++Type=Application ++Categories=GTK;GNOME;X-GNOME-NetworkSettings;Network; ++Actions=Profile;Tray; ++ ++[Desktop Action Profile] ++Name=Create a New Connection Profile ++Exec=remmina --new ++OnlyShowIn=Unity; ++ ++[Desktop Action Tray] ++Name=Start Remmina Minimized ++Exec=remmina --icon ++OnlyShowIn=Unity; +diff -urN remmina/desktop/remmina.desktop.in remmina/desktop/remmina.desktop.in +--- remmina/desktop/remmina.desktop.in 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/desktop/remmina.desktop.in 1970-01-01 10:00:00.000000000 +1000 +@@ -1,12 +0,0 @@ +-[Desktop Entry] +-Version=1.0 +-_Name=Remmina Remote Desktop Client +-_Comment=Connect to remote desktops +-TryExec=remmina +-Exec=remmina +-Icon=remmina +-Terminal=false +-Type=Application +-Actions= +-Categories=GTK;GNOME;X-GNOME-NetworkSettings;Network; +- +diff -urN remmina/external_tools/CMakeLists.txt remmina/external_tools/CMakeLists.txt +--- remmina/external_tools/CMakeLists.txt 1970-01-01 10:00:00.000000000 +1000 ++++ remmina/external_tools/CMakeLists.txt 2014-01-08 02:31:52.000000000 +1100 +@@ -0,0 +1,25 @@ ++# desktop/remmina - The GTK+ Remote Desktop Client ++# ++# Copyright (C) 2011 Marc-Andre Moreau ++# ++# This program is free software; you can 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. ++# ++# This program 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 this program; if not, write to the Free Software ++# Foundation, Inc., 59 Temple Place, Suite 330, ++# Boston, MA 02111-1307, USA. ++ ++set(EXTERNAL_TOOLS_DIR "$ENV{HOME}/.remmina/external_tools") ++ ++file(MAKE_DIRECTORY ${EXTERNAL_TOOLS_DIR}) ++ ++INSTALL(PROGRAMS launcher.sh pause.sh remmina_filezilla_sftp.sh remmina_filezilla_sftp_pki.sh remmina_nslookup.sh remmina_ping.sh remmina_traceroute.sh DESTINATION ${EXTERNAL_TOOLS_DIR}) ++ +diff -urN remmina/external_tools/launcher.sh remmina/external_tools/launcher.sh +--- remmina/external_tools/launcher.sh 1970-01-01 10:00:00.000000000 +1000 ++++ remmina/external_tools/launcher.sh 2014-01-08 02:31:52.000000000 +1100 +@@ -0,0 +1,11 @@ ++#################### ++# Main Script ++#################### ++#gnome-terminal -e $(dirname $0)/$1 ++gnome-terminal -e $1 & ++ ++#if [ "$2" = "1" ] ++#then ++# echo "Hit a key to continue ..." ++# Pause ++#fi +diff -urN remmina/external_tools/pause.sh remmina/external_tools/pause.sh +--- remmina/external_tools/pause.sh 1970-01-01 10:00:00.000000000 +1000 ++++ remmina/external_tools/pause.sh 2014-01-08 02:31:52.000000000 +1100 +@@ -0,0 +1,9 @@ ++# Waits for user key press. ++pause () ++{ ++ echo "Hit a key to continue ..." ++ OLDCONFIG=`stty -g` ++ stty -icanon -echo min 1 time 0 ++ dd count=1 2>/dev/null ++ stty $OLDCONFIG ++} +diff -urN remmina/external_tools/remmina_filezilla_sftp.sh remmina/external_tools/remmina_filezilla_sftp.sh +--- remmina/external_tools/remmina_filezilla_sftp.sh 1970-01-01 10:00:00.000000000 +1000 ++++ remmina/external_tools/remmina_filezilla_sftp.sh 2014-01-08 02:31:52.000000000 +1100 +@@ -0,0 +1,4 @@ ++. $(dirname $0)/pause.sh ++ ++filezilla sftp://$ssh_username:$password@$server ++ +diff -urN remmina/external_tools/remmina_filezilla_sftp_pki.sh remmina/external_tools/remmina_filezilla_sftp_pki.sh +--- remmina/external_tools/remmina_filezilla_sftp_pki.sh 1970-01-01 10:00:00.000000000 +1000 ++++ remmina/external_tools/remmina_filezilla_sftp_pki.sh 2014-01-08 02:31:52.000000000 +1100 +@@ -0,0 +1,4 @@ ++. $(dirname $0)/pause.sh ++ ++filezilla sftp://$ssh_username@$server ++ +diff -urN remmina/external_tools/remmina_nslookup.sh remmina/external_tools/remmina_nslookup.sh +--- remmina/external_tools/remmina_nslookup.sh 1970-01-01 10:00:00.000000000 +1000 ++++ remmina/external_tools/remmina_nslookup.sh 2014-01-08 02:31:52.000000000 +1100 +@@ -0,0 +1,5 @@ ++. $(dirname $0)/pause.sh ++ ++nslookup $server ++ ++pause +diff -urN remmina/external_tools/remmina_ping.sh remmina/external_tools/remmina_ping.sh +--- remmina/external_tools/remmina_ping.sh 1970-01-01 10:00:00.000000000 +1000 ++++ remmina/external_tools/remmina_ping.sh 2014-01-08 02:31:52.000000000 +1100 +@@ -0,0 +1,5 @@ ++. $(dirname $0)/pause.sh ++ ++ping -c3 $server ++ ++pause +diff -urN remmina/external_tools/remmina_traceroute.sh remmina/external_tools/remmina_traceroute.sh +--- remmina/external_tools/remmina_traceroute.sh 1970-01-01 10:00:00.000000000 +1000 ++++ remmina/external_tools/remmina_traceroute.sh 2014-01-08 02:31:52.000000000 +1100 +@@ -0,0 +1,5 @@ ++. $(dirname $0)/pause.sh ++ ++traceroute $server ++ ++pause +diff -urN remmina/include/remmina/plugin.h remmina/include/remmina/plugin.h +--- remmina/include/remmina/plugin.h 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/include/remmina/plugin.h 2014-01-08 02:31:52.000000000 +1100 +@@ -157,6 +157,7 @@ + gint (* protocol_plugin_init_authpwd) (RemminaProtocolWidget *gp, RemminaAuthpwdType authpwd_type); + gint (* protocol_plugin_init_authuserpwd) (RemminaProtocolWidget *gp, gboolean want_domain); + gint (* protocol_plugin_init_certificate) (RemminaProtocolWidget *gp, const gchar* subject, const gchar* issuer, const gchar* fingerprint); ++ gint (* protocol_plugin_changed_certificate) (RemminaProtocolWidget *gp, const gchar* subject, const gchar* issuer, const gchar* new_fingerprint, const gchar* old_fingerprint); + gchar* (* protocol_plugin_init_get_username) (RemminaProtocolWidget *gp); + gchar* (* protocol_plugin_init_get_password) (RemminaProtocolWidget *gp); + gchar* (* protocol_plugin_init_get_domain) (RemminaProtocolWidget *gp); +diff -urN remmina/po/fr.po remmina/po/fr.po +--- remmina/po/fr.po 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/po/fr.po 2014-01-08 02:31:52.000000000 +1100 +@@ -7,8 +7,8 @@ + "Project-Id-Version: remmina\n" + "Report-Msgid-Bugs-To: \n" + "POT-Creation-Date: 2010-12-11 23:54+0800\n" +-"PO-Revision-Date: 2010-12-12 09:16+0000\n" +-"Last-Translator: Davy Defaud <davy.defaud@free.fr>\n" ++"PO-Revision-Date: 2012-02-26 00:04+0100\n" ++"Last-Translator: Emmanuel Grognet <emmanuel@grognet.fr>\n" + "Language-Team: French <fr@li.org>\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" +@@ -21,8 +21,10 @@ + msgid "Connect to remote desktops" + msgstr "Connectez-vous à des bureaux distants" + +-#: ../desktop/remmina.desktop.in.h:2 ../src/remminamain.c:1157 +-#: ../src/remminaicon.c:362 ../src/remminaicon.c:363 ++#: ../desktop/remmina.desktop.in.h:2 ++#: ../src/remminamain.c:1157 ++#: ../src/remminaicon.c:362 ++#: ../src/remminaicon.c:363 + msgid "Remmina Remote Desktop Client" + msgstr "Visionneur de bureaux distants Remmina" + +@@ -47,7 +49,8 @@ + "Importation impossible :\n" + "%s" + +-#: ../src/remminamain.c:770 ../src/remminamain.c:937 ++#: ../src/remminamain.c:770 ++#: ../src/remminamain.c:937 + msgid "Import" + msgstr "Importer" + +@@ -57,7 +60,7 @@ + + #: ../src/remminamain.c:919 + msgid "_Connection" +-msgstr "" ++msgstr "_Connexion" + + #: ../src/remminamain.c:920 + msgid "_Edit" +@@ -83,13 +86,14 @@ + msgid "Open the preferences dialog" + msgstr "Ouvrir la boîte de dialogue des préférences" + +-#: ../src/remminamain.c:941 ../src/remminapluginmanager.c:239 ++#: ../src/remminamain.c:941 ++#: ../src/remminapluginmanager.c:239 + msgid "Plugins" + msgstr "Greffons" + + #: ../src/remminamain.c:945 + msgid "Homepage" +-msgstr "" ++msgstr "Site Web" + + #: ../src/remminamain.c:949 + msgid "Online Wiki" +@@ -144,19 +148,23 @@ + msgstr "Affichage arborescent" + + #. Profile: Name +-#: ../src/remminamain.c:1230 ../src/remminafileeditor.c:1286 ++#: ../src/remminamain.c:1230 ++#: ../src/remminafileeditor.c:1286 + #: ../src/remminapluginmanager.c:259 + msgid "Name" + msgstr "Nom" + + #. Profile: Group +-#: ../src/remminamain.c:1243 ../src/remminafileeditor.c:1308 ++#: ../src/remminamain.c:1243 ++#: ../src/remminafileeditor.c:1308 + #: ../src/remminaftpclient.c:1020 + msgid "Group" + msgstr "Groupe" + +-#: ../src/remminamain.c:1251 ../src/remminafileeditor.c:342 +-#: ../src/remminafileeditor.c:795 ../src/remminafileeditor.c:808 ++#: ../src/remminamain.c:1251 ++#: ../src/remminafileeditor.c:342 ++#: ../src/remminafileeditor.c:795 ++#: ../src/remminafileeditor.c:808 + #: ../src/remminaprotocolwidget.c:1032 + msgid "Server" + msgstr "Serveur" +@@ -191,7 +199,8 @@ + msgid "Choose a Remote Desktop Server" + msgstr "Choisir un serveur de bureau distant" + +-#: ../src/remminafileeditor.c:297 ../src/remminafileeditor.c:304 ++#: ../src/remminafileeditor.c:297 ++#: ../src/remminafileeditor.c:304 + msgid "Identity file" + msgstr "Fichier d’identité" + +@@ -200,8 +209,10 @@ + msgid "Browse the network to find a %s server" + msgstr "Parcourir le réseau à la recherche d’un serveur %s" + +-#: ../src/remminafileeditor.c:387 ../src/remminafileeditor.c:850 +-#: ../src/remminaprotocolwidget.c:833 ../src/remminainitdialog.c:278 ++#: ../src/remminafileeditor.c:387 ++#: ../src/remminafileeditor.c:850 ++#: ../src/remminaprotocolwidget.c:833 ++#: ../src/remminainitdialog.c:278 + msgid "Password" + msgstr "Mot de passe" + +@@ -217,7 +228,8 @@ + msgid "Use client resolution" + msgstr "Utiliser la résolution du client" + +-#: ../src/remminafileeditor.c:444 ../src/remminafileeditor.c:775 ++#: ../src/remminafileeditor.c:444 ++#: ../src/remminafileeditor.c:775 + msgid "Custom" + msgstr "Personnalisé" + +@@ -225,11 +237,13 @@ + msgid "Keyboard mapping" + msgstr "Agencement du clavier" + +-#: ../src/remminafileeditor.c:631 ../src/remminascaler.c:138 ++#: ../src/remminafileeditor.c:631 ++#: ../src/remminascaler.c:138 + msgid "Horizontal scale" + msgstr "Échelle horizontale" + +-#: ../src/remminafileeditor.c:636 ../src/remminascaler.c:145 ++#: ../src/remminafileeditor.c:636 ++#: ../src/remminascaler.c:145 + msgid "Vertical scale" + msgstr "Échelle verticale" + +@@ -269,7 +283,8 @@ + msgstr "Authentification SSH" + + #. Entries +-#: ../src/remminafileeditor.c:847 ../src/remminainitdialog.c:265 ++#: ../src/remminafileeditor.c:847 ++#: ../src/remminainitdialog.c:265 + msgid "User name" + msgstr "Nom d’utilisateur" + +@@ -310,14 +325,16 @@ + #: ../src/remminafileeditor.c:1320 + #, c-format + msgid "Use '%s' as subgroup delimiter" +-msgstr "" ++msgstr "Utiliser \"%s\" comme délimiteur de sous-groupe " + + #. Profile: Protocol +-#: ../src/remminafileeditor.c:1325 ../src/remminapluginmanager.c:38 ++#: ../src/remminafileeditor.c:1325 ++#: ../src/remminapluginmanager.c:38 + msgid "Protocol" + msgstr "Protocole" + +-#: ../src/remminafileeditor.c:1384 ../src/remminafileeditor.c:1405 ++#: ../src/remminafileeditor.c:1384 ++#: ../src/remminafileeditor.c:1405 + #: ../src/remminaconnectionwindow.c:2421 + #, c-format + msgid "File %s not found." +@@ -325,33 +342,33 @@ + + #: ../src/remminaconnectionwindow.c:183 + #, c-format +-msgid "" +-"There are %i active connections in the current window. Are you sure to close?" +-msgstr "" +-"Il y a %i connexion(s) active(s) sur la fenêtre courante. Êtes-vous sûr de " +-"vouloir quitter ?" ++msgid "There are %i active connections in the current window. Are you sure to close?" ++msgstr "Il y a %i connexion(s) active(s) sur la fenêtre courante. Êtes-vous sûr de vouloir quitter ?" + + #: ../src/remminaconnectionwindow.c:563 + msgid "Viewport fullscreen mode" +-msgstr "" ++msgstr "Mode zone de visualisation (viewport) en plein écran" + + #: ../src/remminaconnectionwindow.c:574 + msgid "Scrolled fullscreen mode" +-msgstr "" ++msgstr "Mode plein écran avec défilement" + + #: ../src/remminaconnectionwindow.c:1177 + msgid "Resize the window to fit in remote resolution" + msgstr "Redimensionner la fenêtre en fonction de la résolution distante" + +-#: ../src/remminaconnectionwindow.c:1188 ../src/remminaprefdialog.c:559 ++#: ../src/remminaconnectionwindow.c:1188 ++#: ../src/remminaprefdialog.c:559 + msgid "Toggle fullscreen mode" + msgstr "Basculer en mode plein écran" + +-#: ../src/remminaconnectionwindow.c:1229 ../src/remminaprefdialog.c:579 ++#: ../src/remminaconnectionwindow.c:1229 ++#: ../src/remminaprefdialog.c:579 + msgid "Switch tab pages" + msgstr "Changer d’onglet" + +-#: ../src/remminaconnectionwindow.c:1243 ../src/remminaprefdialog.c:598 ++#: ../src/remminaconnectionwindow.c:1243 ++#: ../src/remminaprefdialog.c:598 + msgid "Toggle scaled mode" + msgstr "Basculer en mode réduit" + +@@ -363,15 +380,18 @@ + msgid "Preferences" + msgstr "Préférences" + +-#: ../src/remminaconnectionwindow.c:1295 ../src/remminaconnectionwindow.c:1296 ++#: ../src/remminaconnectionwindow.c:1295 ++#: ../src/remminaconnectionwindow.c:1296 + msgid "Tools" + msgstr "Outils" + +-#: ../src/remminaconnectionwindow.c:1308 ../src/remminaprefdialog.c:618 ++#: ../src/remminaconnectionwindow.c:1308 ++#: ../src/remminaprefdialog.c:618 + msgid "Minimize window" + msgstr "Réduire la fenêtre" + +-#: ../src/remminaconnectionwindow.c:1316 ../src/remminaprefdialog.c:628 ++#: ../src/remminaconnectionwindow.c:1316 ++#: ../src/remminaprefdialog.c:628 + msgid "Disconnect" + msgstr "Se déconnecter" + +@@ -383,7 +403,7 @@ + #: ../src/remminaprotocolwidget.c:202 + #, c-format + msgid "Protocol plugin %s is not installed." +-msgstr "" ++msgstr "Le greffon du protocole %s n'est pas installé" + + #: ../src/remminaprotocolwidget.c:240 + msgid "Open Secure Shell in New Terminal..." +@@ -398,7 +418,8 @@ + msgid "Connecting to SSH server %s..." + msgstr "Connexion au serveur SSH %s..." + +-#: ../src/remminaprotocolwidget.c:516 ../src/remminaprotocolwidget.c:686 ++#: ../src/remminaprotocolwidget.c:516 ++#: ../src/remminaprotocolwidget.c:686 + #, c-format + msgid "Connecting to %s through SSH tunnel..." + msgstr "Connexion à %s via tunnel SSH..." +@@ -428,11 +449,13 @@ + msgid "%s password" + msgstr "Mot de passe %s" + +-#: ../src/remminaprotocolwidget.c:827 ../src/remminassh.c:248 ++#: ../src/remminaprotocolwidget.c:827 ++#: ../src/remminassh.c:248 + msgid "SSH password" + msgstr "Mot de passe SSH" + +-#: ../src/remminaprotocolwidget.c:830 ../src/remminassh.c:252 ++#: ../src/remminaprotocolwidget.c:830 ++#: ../src/remminassh.c:252 + msgid "SSH private key passphrase" + msgstr "Phrase de passe de la clef privée" + +@@ -480,38 +503,16 @@ + msgstr "Contributeurs :" + + #: ../src/remminaabout.c:47 +-msgid "" +-"Remmina is free software; you can 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." +-msgstr "" +-"Remmina est un logiciel libre ; vous pouvez le redistribuer et / ou le " +-"modifier en respectant les termes de la Licence Publique Générale GNU " +-"publiée par la Free Software Foundation ; ou de la version 2 de la licence, " +-"ou (à votre choix) toutes les versions supérieures." ++msgid "Remmina is free software; you can 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." ++msgstr "Remmina est un logiciel libre ; vous pouvez le redistribuer et / ou le modifier en respectant les termes de la Licence Publique Générale GNU publiée par la Free Software Foundation ; ou de la version 2 de la licence, ou (à votre choix) toutes les versions supérieures." + + #: ../src/remminaabout.c:51 +-msgid "" +-"Remmina 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." +-msgstr "" +-"Remmina est distribué dans l’espoir qu’il sera utile, mais SANS AUCUNE " +-"GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou " +-"D'ADAPTATION À UN USAGE PARTICULIER. Voir la Licence Publique Générale GNU " +-"pour plus de détails." ++msgid "Remmina 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." ++msgstr "Remmina est distribué dans l’espoir qu’il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION À UN USAGE PARTICULIER. Voir la Licence Publique Générale GNU pour plus de détails." + + #: ../src/remminaabout.c:55 +-msgid "" +-"You should have received a copy of the GNU General Public License along with " +-"this program; if not, write to the Free Software Foundation, Inc., 59 Temple " +-"Place, Suite 330, Boston, MA 02111-1307, USA." +-msgstr "" +-"Si devriez avoir reçu une copie de la Licence Publique Générale GNU utilisée " +-"par ce programme ; sinon, écrivez à la Free Software Foundation, Inc., 59 " +-"Temple Place, Suite 330, Boston, MA 02111-1307, USA." ++msgid "You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA." ++msgstr "Si devriez avoir reçu une copie de la Licence Publique Générale GNU utilisée par ce programme ; sinon, écrivez à la Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA." + + #: ../src/remminaabout.c:68 + msgid "The GTK+ Remote Desktop Client" +@@ -520,6 +521,7 @@ + #: ../src/remminaabout.c:74 + msgid "translator-credits" + msgstr "" ++"Emmanuel Grognet <emmanuel@grognet.fr>\n" + "Launchpad Contributions:\n" + " Davy Defaud https://launchpad.net/~davy-defaud\n" + " Florent DEUTSCH https://launchpad.net/~florent-arawn\n" +@@ -661,23 +663,23 @@ + + #: ../src/remminaprefdialog.c:498 + msgid "Show new connection on top of the menu" +-msgstr "" ++msgstr "Positionner \"Nouvelle connexion\" en haut du menu" + + #: ../src/remminaprefdialog.c:504 + msgid "Hide total count in group menu" +-msgstr "" ++msgstr "Cacher le nombre de connexion par groupe dans le menu" + + #: ../src/remminaprefdialog.c:510 + msgid "Disable tray icon" +-msgstr "" ++msgstr "Désactiver l'icône de la zone de notification" + + #: ../src/remminaprefdialog.c:516 + msgid "Start tray icon automatically" +-msgstr "" ++msgstr "Démarrer l'icône de la zone de notification automatiquement" + + #: ../src/remminaprefdialog.c:523 + msgid "Minimize windows to tray" +-msgstr "" ++msgstr "Réduire dans la zone de notification" + + #. Keyboard tab + #: ../src/remminaprefdialog.c:534 +@@ -703,26 +705,28 @@ + #. Terminal tab + #: ../src/remminaprefdialog.c:649 + msgid "Terminal" +-msgstr "" ++msgstr "Terminal" + + #: ../src/remminaprefdialog.c:664 + msgid "Font" +-msgstr "" ++msgstr "Police" + + #: ../src/remminaprefdialog.c:669 + msgid "Use system default font" +-msgstr "" ++msgstr "Utiliser la police système par défaut" + + #: ../src/remminaprefdialog.c:694 + msgid "Scrollback lines" +-msgstr "" ++msgstr "Limite de défilement" + + #: ../src/remminassh.c:129 + #, c-format + msgid "SSH password authentication failed: %s" + msgstr "L’authentification SSH par mot de passe a échoué : %s" + +-#: ../src/remminassh.c:149 ../src/remminassh.c:157 ../src/remminassh.c:168 ++#: ../src/remminassh.c:149 ++#: ../src/remminassh.c:157 ++#: ../src/remminassh.c:168 + #: ../src/remminassh.c:178 + #, c-format + msgid "SSH public key authentication failed: %s" +@@ -762,7 +766,8 @@ + msgid "Failed to execute %s on SSH server : %%s" + msgstr "Impossible d’exécuter %s sur le serveur SSH : %%s" + +-#: ../src/remminassh.c:705 ../src/remminassh.c:730 ++#: ../src/remminassh.c:705 ++#: ../src/remminassh.c:730 + #, c-format + msgid "Failed to request port forwarding : %s" + msgstr "Échec de la demande de redirection de port : %s" +@@ -805,8 +810,7 @@ + + #: ../src/remminaftpclient.c:614 + msgid "Are you sure to delete the selected files on server?" +-msgstr "" +-"Êtes-vous sûr de vouloir supprimer les fichiers sélectionnés sur le serveur ?" ++msgstr "Êtes-vous sûr de vouloir supprimer les fichiers sélectionnés sur le serveur ?" + + #: ../src/remminaftpclient.c:671 + msgid "Choose a file to upload" +@@ -816,11 +820,13 @@ + msgid "Upload folder" + msgstr "Réportoire d’envoi" + +-#: ../src/remminaftpclient.c:747 ../src/remminaftpclient.c:876 ++#: ../src/remminaftpclient.c:747 ++#: ../src/remminaftpclient.c:876 + msgid "Download" + msgstr "Télécharger" + +-#: ../src/remminaftpclient.c:755 ../src/remminaftpclient.c:887 ++#: ../src/remminaftpclient.c:755 ++#: ../src/remminaftpclient.c:887 + msgid "Upload" + msgstr "Envoyer" + +@@ -848,11 +854,13 @@ + msgid "Delete files on server" + msgstr "Effacer les fichiers sur le serveur" + +-#: ../src/remminaftpclient.c:992 ../src/remminaftpclient.c:1064 ++#: ../src/remminaftpclient.c:992 ++#: ../src/remminaftpclient.c:1064 + msgid "File Name" + msgstr "Nom du fichier" + +-#: ../src/remminaftpclient.c:1005 ../src/remminaftpclient.c:1094 ++#: ../src/remminaftpclient.c:1005 ++#: ../src/remminaftpclient.c:1094 + msgid "Size" + msgstr "Taille" + +@@ -921,7 +929,8 @@ + msgid "Error writing file %s on server. %s" + msgstr "Erreur lors de l’écriture du fichier %s sur le serveur. %s" + +-#: ../src/remminasftpclient.c:607 ../src/remminasftpclient.c:678 ++#: ../src/remminasftpclient.c:607 ++#: ../src/remminasftpclient.c:678 + #, c-format + msgid "Failed to open directory %s. %s" + msgstr "Échec de l’ouverture du répertoire %s. %s" +@@ -946,7 +955,7 @@ + + #: ../src/remminasftpplugin.c:244 + msgid "Show Hidden Files" +-msgstr "" ++msgstr "Voir les fichiers cachés" + + #: ../src/remminasftpplugin.c:252 + msgid "SFTP - Secure File Transfer" +@@ -966,11 +975,11 @@ + + #: ../src/remminapluginmanager.c:41 + msgid "Tool" +-msgstr "" ++msgstr "Outil" + + #: ../src/remminapluginmanager.c:42 + msgid "Preference" +-msgstr "" ++msgstr "Préférence" + + #: ../src/remminapluginmanager.c:266 + msgid "Type" +@@ -982,7 +991,7 @@ + + #: ../src/remminapluginmanager.c:280 + msgid "Version" +-msgstr "" ++msgstr "Version" + + #: ../src/remminakeychooser.c:43 + msgid "<None>" +@@ -1010,11 +1019,13 @@ + msgstr "Activer la découverte de services" + + #. Refresh it in case translation is updated +-#: ../src/remminaicon.c:342 ../src/remminaicon.c:421 ++#: ../src/remminaicon.c:342 ++#: ../src/remminaicon.c:421 + msgid "Remmina Applet" +-msgstr "" ++msgstr "Applet Remmina" + +-#: ../src/remminaicon.c:343 ../src/remminaicon.c:422 ++#: ../src/remminaicon.c:343 ++#: ../src/remminaicon.c:422 + msgid "Connect to remote desktops through the applet menu" + msgstr "Se connecter aux bureaux distants via le menu de l'applet" + +@@ -1025,3 +1036,4 @@ + #: ../src/remminaappletmenuitem.c:97 + msgid "New Connection" + msgstr "Nouvelle connexion" ++ +diff -urN remmina/src/remmina.c remmina/src/remmina.c +--- remmina/src/remmina.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/src/remmina.c 2014-01-08 02:31:52.000000000 +1100 +@@ -55,6 +55,7 @@ + static gboolean remmina_option_quit; + static gchar *remmina_option_server; + static gchar *remmina_option_protocol; ++static gchar *remmina_option_icon; + + static GOptionEntry remmina_options[] = + { +@@ -68,6 +69,7 @@ + { "quit", 'q', 0, G_OPTION_ARG_NONE, &remmina_option_quit, "Quit the application", NULL }, + { "server", 's', 0, G_OPTION_ARG_STRING, &remmina_option_server, "Use default server name S", "S" }, + { "protocol", 't', 0, G_OPTION_ARG_STRING, &remmina_option_protocol, "Use default protocol T", "T" }, ++{ "icon", 'i', 0, G_OPTION_ARG_NONE, &remmina_option_icon, "Start as tray icon", NULL }, + { NULL } }; + + static gint remmina_on_command_line(GApplication *app, GApplicationCommandLine *cmdline) +@@ -90,6 +92,7 @@ + remmina_option_plugin = NULL; + remmina_option_server = NULL; + remmina_option_protocol = NULL; ++ remmina_option_icon = FALSE; + + argv = g_application_command_line_get_arguments(cmdline, &argc); + +@@ -157,6 +160,11 @@ + remmina_exec_command(REMMINA_COMMAND_PLUGIN, remmina_option_plugin); + executed = TRUE; + } ++ if (remmina_option_icon) ++ { ++ remmina_exec_command(REMMINA_COMMAND_NONE, remmina_option_icon); ++ executed = TRUE; ++ } + if (!executed) + { + remmina_exec_command(REMMINA_COMMAND_MAIN, NULL); +@@ -194,7 +202,7 @@ + textdomain(GETTEXT_PACKAGE); + + #ifdef HAVE_PTHREAD +- g_thread_init (NULL); ++ g_type_init (); + gdk_threads_init (); + #endif + +diff -urN remmina/src/remmina_about.c remmina/src/remmina_about.c +--- remmina/src/remmina_about.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/src/remmina_about.c 2014-01-08 02:31:52.000000000 +1100 +@@ -68,7 +68,7 @@ + + gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(dialog), "Remmina"); + gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(dialog), VERSION); +- gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(dialog), "Copyright (C) 2009-2010 Vic Lee"); ++ gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(dialog), "Copyright (C) 2009-2012 Vic Lee"); + gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(dialog), _("The GTK+ Remote Desktop Client")), gtk_about_dialog_set_license( + GTK_ABOUT_DIALOG(dialog), license); + gtk_about_dialog_set_wrap_license(GTK_ABOUT_DIALOG(dialog), TRUE); +diff -urN remmina/src/remmina_connection_window.c remmina/src/remmina_connection_window.c +--- remmina/src/remmina_connection_window.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/src/remmina_connection_window.c 2014-01-08 02:31:52.000000000 +1100 +@@ -126,17 +126,39 @@ + static void remmina_connection_holder_create_fullscreen(RemminaConnectionHolder* cnnhld, RemminaConnectionObject* cnnobj, + gint view_mode); + ++#if GTK_VERSION == 3 + static void remmina_connection_window_class_init(RemminaConnectionWindowClass* klass) + { +- gtk_rc_parse_string("style \"remmina-small-button-style\"\n" ++ GtkCssProvider *provider; ++ ++ provider = gtk_css_provider_new(); ++ gtk_css_provider_load_from_data (provider, ++ "*.remmina-small-button\n" + "{\n" +- " GtkWidget::focus-padding = 0\n" +- " GtkWidget::focus-line-width = 0\n" ++ " -GtkWidget::focus-padding = 0\n" ++ " -GtkWidget::focus-line-width = 0\n" + " xthickness = 0\n" + " ythickness = 0\n" +- "}\n" +- "widget \"*.remmina-small-button\" style \"remmina-small-button-style\""); ++ "}\n", ++ -1, NULL); ++ gtk_style_context_add_provider_for_screen (gdk_screen_get_default(), ++ GTK_STYLE_PROVIDER (provider), ++ GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); ++ g_object_unref(provider); + } ++#elif GTK_VERSION == 2 ++static void remmina_connection_window_class_init(RemminaConnectionWindowClass* klass) ++{ ++ gtk_rc_parse_string("style \"remmina-small-button-style\"\n" ++ "{\n" ++ " GtkWidget::focus-padding = 0\n" ++ " GtkWidget::focus-line-width = 0\n" ++ " xthickness = 0\n" ++ " ythickness = 0\n" ++ "}\n" ++ "widget \"*.remmina-small-button\" style \"remmina-small-button-style\""); ++} ++#endif + + static void remmina_connection_holder_disconnect(RemminaConnectionHolder* cnnhld) + { +@@ -147,6 +169,31 @@ + remmina_protocol_widget_close_connection(REMMINA_PROTOCOL_WIDGET(cnnobj->proto)); + } + ++#if GTK_VERSION == 3 ++static void remmina_connection_holder_keyboard_grab(RemminaConnectionHolder* cnnhld) ++{ ++ DECLARE_CNNOBJ ++ GdkDisplay *display; ++ GdkDeviceManager *manager; ++ GdkDevice *keyboard = NULL; ++ ++ display = gtk_widget_get_display(GTK_WIDGET(cnnhld->cnnwin)); ++ manager = gdk_display_get_device_manager(display); ++ keyboard = gdk_device_manager_get_client_pointer(manager); ++ ++ if (keyboard != NULL) ++ { ++ if (remmina_file_get_int(cnnobj->remmina_file, "keyboard_grab", FALSE)) ++ { ++ gdk_device_grab(keyboard, gtk_widget_get_window(GTK_WIDGET(cnnhld->cnnwin)), GDK_OWNERSHIP_WINDOW, TRUE, GDK_KEY_PRESS | GDK_KEY_RELEASE, NULL, GDK_CURRENT_TIME); ++ } ++ else ++ { ++ gdk_device_ungrab(keyboard, GDK_CURRENT_TIME); ++ } ++ } ++} ++#elif GTK_VERSION == 2 + static void remmina_connection_holder_keyboard_grab(RemminaConnectionHolder* cnnhld) + { + DECLARE_CNNOBJ +@@ -160,6 +207,7 @@ + gdk_keyboard_ungrab(GDK_CURRENT_TIME); + } + } ++#endif + + static gboolean remmina_connection_window_delete_event(GtkWidget* widget, GdkEvent* event, gpointer data) + { +@@ -245,7 +293,11 @@ + return FALSE; + } + ++#if GTK_VERSION == 3 ++ gtk_widget_get_preferred_size(priv->floating_toolbar, &req, NULL); ++#elif GTK_VERSION == 2 + gtk_widget_size_request(priv->floating_toolbar, &req); ++#endif + gtk_window_get_position(GTK_WINDOW(priv->floating_toolbar), &x, &y); + + if (priv->floating_toolbar_motion_show || priv->floating_toolbar_motion_visible) +@@ -384,7 +436,7 @@ + remmina_connection_holder_get_desktop_size(cnnhld, &width, &height, TRUE); + gtk_widget_get_allocation(priv->notebook, &na); + gtk_widget_get_allocation(cnnobj->scrolled_container, &ca); +- gtk_widget_get_allocation(priv->toolbar, &ca); ++ gtk_widget_get_allocation(priv->toolbar, &ta); + gtk_window_resize(GTK_WINDOW(cnnhld->cnnwin), MAX(1, width + na.width - ca.width), + MAX(1, height + ta.height + na.height - ca.height)); + gtk_container_check_resize(GTK_CONTAINER(cnnhld->cnnwin)); +@@ -420,17 +472,23 @@ + static void remmina_connection_object_init_adjustment(RemminaConnectionObject* cnnobj) + { + GdkScreen* screen; +- GtkAdjustment* adj; ++ GtkAdjustment* adjh; ++ GtkAdjustment* adjv; + gint screen_width, screen_height; + + screen = gdk_screen_get_default(); + screen_width = gdk_screen_get_width(screen); + screen_height = gdk_screen_get_height(screen); + +- adj = gtk_viewport_get_hadjustment(GTK_VIEWPORT(cnnobj->viewport)); +- gtk_adjustment_set_page_size(adj, screen_width); +- adj = gtk_viewport_get_vadjustment(GTK_VIEWPORT(cnnobj->viewport)); +- gtk_adjustment_set_page_size(adj, screen_height); ++#if GTK_VERSION == 3 ++ adjh = gtk_scrollable_get_hadjustment(GTK_SCROLLABLE(cnnobj->viewport)); ++ adjv = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(cnnobj->viewport)); ++#elif GTK_VERSION == 2 ++ adjh = gtk_viewport_get_hadjustment(GTK_VIEWPORT(cnnobj->viewport)); ++ adjv = gtk_viewport_get_vadjustment(GTK_VIEWPORT(cnnobj->viewport)); ++#endif ++ gtk_adjustment_set_page_size(adjh, screen_width); ++ gtk_adjustment_set_page_size(adjv, screen_height); + } + + static void remmina_connection_holder_check_resize(RemminaConnectionHolder* cnnhld) +@@ -438,13 +496,21 @@ + DECLARE_CNNOBJ + gboolean scroll_required = FALSE; + GdkScreen* screen; ++ gint monitor; ++ GdkRectangle screen_size; + gint screen_width, screen_height; + gint server_width, server_height; + + remmina_connection_holder_get_desktop_size(cnnhld, &server_width, &server_height, FALSE); +- screen = gdk_screen_get_default(); +- screen_width = gdk_screen_get_width(screen); +- screen_height = gdk_screen_get_height(screen); ++ screen = gtk_window_get_screen(GTK_WINDOW(cnnhld->cnnwin)); ++ monitor = gdk_screen_get_monitor_at_window(screen, gtk_widget_get_window(GTK_WIDGET(cnnhld->cnnwin))); ++#ifdef gdk_screen_get_monitor_workarea ++ gdk_screen_get_monitor_workarea(screen, monitor, &screen_size); ++#else ++ gdk_screen_get_monitor_geometry(screen, monitor, &screen_size); ++#endif ++ screen_width = screen_size.width; ++ screen_height = screen_size.height; + + if (!remmina_protocol_widget_get_expand(REMMINA_PROTOCOL_WIDGET(cnnobj->proto)) + && (server_width <= 0 || server_height <= 0 || screen_width < server_width +@@ -455,52 +521,50 @@ + + switch (cnnhld->cnnwin->priv->view_mode) + { +- + case SCROLLED_FULLSCREEN_MODE: + gtk_window_resize(GTK_WINDOW(cnnhld->cnnwin), screen_width, screen_height); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(cnnobj->scrolled_container), + (scroll_required ? GTK_POLICY_AUTOMATIC : GTK_POLICY_NEVER), + (scroll_required ? GTK_POLICY_AUTOMATIC : GTK_POLICY_NEVER)); +- break; ++ break; + +- case VIEWPORT_FULLSCREEN_MODE: +- gtk_window_resize (GTK_WINDOW(cnnhld->cnnwin), screen_width, screen_height); +- gtk_container_set_border_width (GTK_CONTAINER (cnnhld->cnnwin), scroll_required ? 1 : 0); +- break; +- +- case SCROLLED_WINDOW_MODE: +- if (remmina_file_get_int (cnnobj->remmina_file, "viewmode", AUTO_MODE) == AUTO_MODE) +- { +- gtk_window_set_default_size (GTK_WINDOW(cnnhld->cnnwin), +- MIN (server_width, screen_width), MIN (server_height, screen_height)); +- if (server_width >= screen_width || +- server_height >= screen_height) +- { +- gtk_window_maximize (GTK_WINDOW(cnnhld->cnnwin)); +- remmina_file_set_int (cnnobj->remmina_file, "window_maximize", TRUE); +- } +- else +- { +- remmina_connection_holder_toolbar_autofit (NULL, cnnhld); +- remmina_file_set_int (cnnobj->remmina_file, "window_maximize", FALSE); +- } +- } +- else +- { +- gtk_window_set_default_size (GTK_WINDOW(cnnhld->cnnwin), +- remmina_file_get_int (cnnobj->remmina_file, "window_width", 640), +- remmina_file_get_int (cnnobj->remmina_file, "window_height", 480)); +- if (remmina_file_get_int (cnnobj->remmina_file, "window_maximize", FALSE)) +- { +- gtk_window_maximize (GTK_WINDOW(cnnhld->cnnwin)); +- } +- } +- break; +- +- default: +- break; +- } +- } ++ case VIEWPORT_FULLSCREEN_MODE: ++ gtk_window_resize (GTK_WINDOW(cnnhld->cnnwin), screen_width, screen_height); ++ gtk_container_set_border_width (GTK_CONTAINER (cnnhld->cnnwin), scroll_required ? 1 : 0); ++ break; ++ ++ case SCROLLED_WINDOW_MODE: ++ if (remmina_file_get_int (cnnobj->remmina_file, "viewmode", AUTO_MODE) == AUTO_MODE) ++ { ++ gtk_window_set_default_size (GTK_WINDOW(cnnhld->cnnwin), ++ MIN (server_width, screen_width), MIN (server_height, screen_height)); ++ if (server_width >= screen_width || server_height >= screen_height) ++ { ++ gtk_window_maximize (GTK_WINDOW(cnnhld->cnnwin)); ++ remmina_file_set_int (cnnobj->remmina_file, "window_maximize", TRUE); ++ } ++ else ++ { ++ remmina_connection_holder_toolbar_autofit (NULL, cnnhld); ++ remmina_file_set_int (cnnobj->remmina_file, "window_maximize", FALSE); ++ } ++ } ++ else ++ { ++ gtk_window_set_default_size (GTK_WINDOW(cnnhld->cnnwin), ++ remmina_file_get_int (cnnobj->remmina_file, "window_width", 640), ++ remmina_file_get_int (cnnobj->remmina_file, "window_height", 480)); ++ if (remmina_file_get_int (cnnobj->remmina_file, "window_maximize", FALSE)) ++ { ++ gtk_window_maximize (GTK_WINDOW(cnnhld->cnnwin)); ++ } ++ } ++ break; ++ ++ default: ++ break; ++ } ++} + + static void remmina_connection_holder_set_tooltip(GtkWidget* item, const gchar* tip, guint key1, guint key2) + { +@@ -764,13 +828,30 @@ + static void remmina_connection_holder_scale_option_popdown(RemminaConnectionHolder* cnnhld) + { + RemminaConnectionWindowPriv* priv = cnnhld->cnnwin->priv; ++#if GTK_VERSION == 3 ++ GdkDisplay *display; ++ GdkDeviceManager *manager; ++ GdkDevice *device = NULL; ++ ++ priv->sticky = FALSE; ++ ++ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->scale_option_button), FALSE); + ++ display = gtk_widget_get_display(GTK_WIDGET(cnnhld)); ++ manager = gdk_display_get_device_manager(display); ++ device = gdk_device_manager_get_client_pointer(manager); ++ if (device != NULL) ++ { ++ gdk_device_ungrab(device, GDK_CURRENT_TIME); ++ } ++#elif GTK_VERSION == 2 + priv->sticky = FALSE; + + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->scale_option_button), FALSE); + + gdk_keyboard_ungrab(GDK_CURRENT_TIME); + gdk_pointer_ungrab(GDK_CURRENT_TIME); ++#endif + if (scale_option_window) + { + gtk_grab_remove(scale_option_window); +@@ -813,6 +894,11 @@ + GtkWidget* eventbox; + GtkWidget* frame; + GtkWidget* scaler; ++#if GTK_VERSION == 3 ++ GdkDisplay* display; ++ GdkDevice* pointer; ++ GdkDeviceManager* device_manager; ++#endif + gint x, y; + gboolean pushin; + +@@ -863,11 +949,19 @@ + gtk_widget_show(window); + + gtk_grab_add(window); ++#if GTK_VERSION == 3 ++ display = gdk_window_get_display(gtk_widget_get_window(window)); ++ device_manager = gdk_display_get_device_manager(display); ++ pointer = gdk_device_manager_get_client_pointer(device_manager); ++ gdk_device_grab(pointer, gtk_widget_get_window(window), GDK_OWNERSHIP_NONE, TRUE, ++ GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK, NULL, ++ GDK_CURRENT_TIME); ++#elif GTK_VERSION == 2 + gdk_pointer_grab(gtk_widget_get_window(window), TRUE, + GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK, NULL, NULL, + GDK_CURRENT_TIME); + gdk_keyboard_grab(gtk_widget_get_window(window), TRUE, GDK_CURRENT_TIME); +- ++#endif + scale_option_window = window; + priv->sticky = TRUE; + } +@@ -1356,7 +1450,11 @@ + & GDK_WINDOW_STATE_MAXIMIZED) == 0) + { + gtk_window_get_size(GTK_WINDOW(cnnhld->cnnwin), &width, &height); ++#if GTK_VERSION == 3 ++ gtk_widget_get_preferred_size(priv->toolbar, &req, NULL); ++#elif GTK_VERSION == 2 + gtk_widget_size_request(priv->toolbar, &req); ++#endif + if (remmina_pref.hide_connection_toolbar) + { + gtk_widget_hide(priv->toolbar); +@@ -1442,15 +1540,37 @@ + return FALSE; + } + ++#if GTK_VERSION == 3 + static gboolean remmina_connection_window_on_leave(GtkWidget* widget, GdkEventCrossing* event, RemminaConnectionHolder* cnnhld) + { ++ GdkDisplay *display; ++ GdkDeviceManager *manager; ++ GdkDevice *device = NULL; ++ + if (event->detail == GDK_NOTIFY_VIRTUAL || event->detail == GDK_NOTIFY_NONLINEAR + || event->detail == GDK_NOTIFY_NONLINEAR_VIRTUAL) + { ++ display = gtk_widget_get_display(widget); ++ manager = gdk_display_get_device_manager(display); ++ device = gdk_device_manager_get_client_pointer(manager); ++ if (device != NULL) ++ { ++ gdk_device_ungrab(device, GDK_CURRENT_TIME); ++ } ++ } ++ return FALSE; ++} ++#elif GTK_VERSION == 2 ++static gboolean remmina_connection_window_on_leave(GtkWidget* widget, GdkEventCrossing* event, RemminaConnectionHolder* cnnhld) ++{ ++ if (event->detail == GDK_NOTIFY_VIRTUAL || event->detail == GDK_NOTIFY_NONLINEAR ++ || event->detail == GDK_NOTIFY_NONLINEAR_VIRTUAL) ++ { + gdk_keyboard_ungrab(GDK_CURRENT_TIME); + } + return FALSE; + } ++#endif + + static gboolean remmina_connection_holder_toolbar_scroll(GtkWidget* widget, GdkEventScroll* event, + RemminaConnectionHolder* cnnhld) +@@ -1477,6 +1597,22 @@ + return TRUE; + } + break; ++#ifdef GDK_SCROLL_SMOOTH ++ case GDK_SCROLL_SMOOTH: ++ if (event->delta_y < 0 && opacity > 0) ++ { ++ remmina_file_set_int(cnnobj->remmina_file, "toolbar_opacity", opacity - 1); ++ remmina_connection_holder_update_toolbar_opacity(cnnhld); ++ return TRUE; ++ } ++ if (event->delta_y > 0 && opacity < TOOLBAR_OPACITY_LEVEL) ++ { ++ remmina_file_set_int(cnnobj->remmina_file, "toolbar_opacity", opacity + 1); ++ remmina_connection_holder_update_toolbar_opacity(cnnhld); ++ return TRUE; ++ } ++ break; ++#endif + default: + break; + } +@@ -1517,7 +1653,11 @@ + + if (priv->floating_toolbar) + { ++#if GTK_VERSION == 3 ++ gtk_widget_get_preferred_size(priv->floating_toolbar, &req, NULL); ++#elif GTK_VERSION == 2 + gtk_widget_size_request(priv->floating_toolbar, &req); ++#endif + gtk_window_get_position(GTK_WINDOW(priv->floating_toolbar), NULL, &y); + gtk_window_move(GTK_WINDOW(priv->floating_toolbar), event->x + MAX(0, (event->width - req.width) / 2), y); + +@@ -1565,14 +1705,22 @@ + /* This has to be a popup window to become visible in fullscreen mode */ + window = gtk_window_new(GTK_WINDOW_POPUP); + ++#if GTK_VERSION == 3 ++ vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); ++#elif GTK_VERSION == 2 + vbox = gtk_vbox_new(FALSE, 0); ++#endif + gtk_widget_show(vbox); + gtk_container_add(GTK_CONTAINER(window), vbox); + + widget = remmina_connection_holder_create_toolbar(cnnhld, mode); + gtk_box_pack_start(GTK_BOX(vbox), widget, FALSE, FALSE, 0); + ++#if GTK_VERSION == 3 ++ hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); ++#elif GTK_VERSION == 2 + hbox = gtk_hbox_new(FALSE, 0); ++#endif + gtk_widget_show(hbox); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); + +@@ -1749,7 +1897,11 @@ + GtkWidget* widget; + GtkWidget* button; + ++#if GTK_VERSION == 3 ++ hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 4); ++#elif GTK_VERSION == 2 + hbox = gtk_hbox_new(FALSE, 4); ++#endif + gtk_widget_show(hbox); + + widget = gtk_image_new_from_icon_name(remmina_file_get_icon_name(cnnobj->remmina_file), GTK_ICON_SIZE_MENU); +@@ -1908,8 +2060,17 @@ + gint srcpagenum; + GdkWindow* window; + +- srccnnwin = REMMINA_CONNECTION_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(notebook))); ++#if GTK_VERSION == 3 ++ GdkDeviceManager* manager; ++ GdkDevice* device = NULL; ++ ++ manager = gdk_display_get_device_manager(gdk_display_get_default()); ++ device = gdk_device_manager_get_client_pointer(manager); ++ window = gdk_device_get_window_at_position(device, &x, &y); ++#elif GTK_VERSION == 2 + window = gdk_display_get_window_at_pointer(gdk_display_get_default(), &x, &y); ++#endif ++ srccnnwin = REMMINA_CONNECTION_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(notebook))); + dstcnnwin = REMMINA_CONNECTION_WINDOW(remmina_widget_pool_find_by_window(REMMINA_TYPE_CONNECTION_WINDOW, window)); + + if (srccnnwin == dstcnnwin) +@@ -1971,7 +2132,11 @@ + cnnhld->cnnwin = REMMINA_CONNECTION_WINDOW(window); + + /* Create the vbox container */ ++#if GTK_VERSION == 3 ++ vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); ++#elif GTK_VERSION == 2 + vbox = gtk_vbox_new(FALSE, 0); ++#endif + gtk_widget_show(vbox); + gtk_container_add(GTK_CONTAINER(window), vbox); + +diff -urN remmina/src/remmina_external_tools.c remmina/src/remmina_external_tools.c +--- remmina/src/remmina_external_tools.c 1970-01-01 10:00:00.000000000 +1000 ++++ remmina/src/remmina_external_tools.c 2014-01-08 02:31:52.000000000 +1100 +@@ -0,0 +1,109 @@ ++#include <gtk/gtk.h> ++#include <glib/gi18n.h> ++#include <glib/gstdio.h> ++#include <stdlib.h> ++#include "remmina/types.h" ++#include "remmina_public.h" ++#include "remmina_external_tools.h" ++ ++typedef struct _RemminaExternalTools ++{ ++ gchar remminafilename[MAX_PATH_LEN]; ++ gchar scriptfilename[MAX_PATH_LEN]; ++} RemminaExternalTools; ++ ++void view_popup_menu_onDoSomething (GtkWidget *menuitem, gpointer userdata) ++{ ++ /* we passed the view as userdata when we connected the signal */ ++ RemminaExternalTools *ret = (RemminaExternalTools *)userdata; ++ //gchar* filename_remmina = ret->remminafilename; ++ //gchar* filename_script = ret->scriptfilename; ++ ++ remmina_external_tools_launcher(ret->remminafilename,ret->scriptfilename); ++} ++ ++gboolean remmina_external_tools_from_filename(RemminaMain *remminamain,gchar* remminafilename) ++{ ++ GtkWidget *menu, *menuitem; ++ menu = gtk_menu_new(); ++ gchar dirname[MAX_PATH_LEN]; ++ gchar filename[MAX_PATH_LEN]; ++ GDir* dir; ++ const gchar* name; ++ GNode* root; ++ root = g_node_new(NULL); ++ ++ g_snprintf(dirname, MAX_PATH_LEN, "%s/.remmina/external_tools", g_get_home_dir()); ++ dir = g_dir_open(dirname, 0, NULL); ++ ++ if (dir == NULL) ++ return FALSE; ++ ++ while ((name = g_dir_read_name(dir)) != NULL) ++ { ++ if (!g_str_has_prefix(name, "remmina_")) ++ continue; ++ g_snprintf(filename, MAX_PATH_LEN, "%s/%s", dirname, name); ++ RemminaExternalTools *ret; ++ ret = (RemminaExternalTools *)malloc(sizeof(RemminaExternalTools)); ++ strcpy(ret->remminafilename,remminafilename); ++ strcpy(ret->scriptfilename,filename); ++ menuitem = gtk_menu_item_new_with_label(strndup(name + 8, strlen(name) -8)); ++ g_signal_connect(menuitem, "activate", (GCallback) view_popup_menu_onDoSomething, ret); ++ ++ //g_signal_connect(menuitem, "activate", ++ // (GCallback) view_popup_menu_onDoSomething, treeview); ++ ++ gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); ++ } ++ g_dir_close(dir); ++ ++ gtk_widget_show_all(menu); ++ ++ /* Note: event can be NULL here when called from view_onPopupMenu; ++ * gdk_event_get_time() accepts a NULL argument ++ */ ++ gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL,0,0); ++ ++ return TRUE; ++} ++ ++gboolean remmina_external_tools_launcher(const gchar* filename,const gchar* scriptname) ++{ ++ RemminaFile *remminafile; ++ gchar launcher[MAX_PATH_LEN]; ++ g_snprintf(launcher, MAX_PATH_LEN, "%s/.remmina/external_tools/launcher.sh", g_get_home_dir()); ++ ++ remminafile = remmina_file_load(filename); ++ GHashTableIter iter; ++ const gchar *key, *value; ++ g_hash_table_iter_init(&iter, remminafile->settings); ++ while (g_hash_table_iter_next(&iter, (gpointer*) &key, (gpointer*) &value)) ++ { ++ const char *env_format = "%s=%s"; ++ const size_t len = strlen(key) +strlen(value) + strlen(env_format); ++ char *env = (char *) malloc(len); ++ if (env == NULL) ++ { ++ return -1; ++ } ++ ++ int retval = snprintf(env, len, env_format, key,value); ++ if (retval < 0 || (size_t) retval >= len) ++ { ++ /* Handle error */ ++ } ++ ++ if (putenv(env) != 0) ++ { ++ free(env); ++ } ++ } ++ const size_t cmdlen = strlen(launcher) +strlen(scriptname) + 2; ++ gchar *cmd = (gchar *)malloc(cmdlen); ++ g_snprintf(cmd, cmdlen, "%s %s", launcher, scriptname); ++ system(cmd); ++ free(cmd); ++ ++ return TRUE; ++} +diff -urN remmina/src/remmina_external_tools.h remmina/src/remmina_external_tools.h +--- remmina/src/remmina_external_tools.h 1970-01-01 10:00:00.000000000 +1000 ++++ remmina/src/remmina_external_tools.h 2014-01-08 02:31:52.000000000 +1100 +@@ -0,0 +1,37 @@ ++/* ++ * Remmina - The GTK+ Remote Desktop Client ++ * Copyright (C) 2009 - Vic Lee ++ * ++ * This program is free software; you can 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. ++ * ++ * This program 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 this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, ++ * Boston, MA 02111-1307, USA. ++ */ ++ ++#ifndef __REMMINAEXTERNALTOOLS_H__ ++#define __REMMINAEXTERNALTOOLS_H__ ++ ++#include <gtk/gtk.h> ++#include "remmina_file.h" ++#include "remmina_main.h" ++ ++G_BEGIN_DECLS ++ ++/* Open a new connection window for a .remmina file */ ++gboolean remmina_external_tools_from_filename(RemminaMain *remminamain,gchar* filename); ++gboolean remmina_external_tools_launcher(const gchar* filename,const gchar* scriptname); ++ ++G_END_DECLS ++ ++#endif /* __REMMINAEXTERNALTOOLS_H__ */ ++ +diff -urN remmina/src/remmina_file.c remmina/src/remmina_file.c +--- remmina/src/remmina_file.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/src/remmina_file.c 2014-01-08 02:31:52.000000000 +1100 +@@ -22,6 +22,7 @@ + #include <glib/gi18n.h> + #include <glib/gstdio.h> + #include <stdlib.h> ++#include "config.h" + #include "remmina_public.h" + #include "remmina_pref.h" + #include "remmina_crypt.h" +@@ -31,12 +32,6 @@ + #define MIN_WINDOW_WIDTH 10 + #define MIN_WINDOW_HEIGHT 10 + +-struct _RemminaFile +-{ +- gchar *filename; +- GHashTable *settings; +-}; +- + typedef struct _RemminaSetting + { + const gchar *setting; +@@ -405,6 +400,11 @@ + + void remmina_file_update_screen_resolution(RemminaFile *remminafile) + { ++#if GTK_VERSION == 3 ++ GdkDisplay *display; ++ GdkDeviceManager *device_manager; ++ GdkDevice *device; ++#endif + GdkScreen *screen; + gchar *pos; + gchar *resolution; +@@ -415,7 +415,14 @@ + resolution = g_strdup(remmina_file_get_string(remminafile, "resolution")); + if (resolution == NULL || strchr(resolution, 'x') == NULL) + { ++#if GTK_VERSION == 3 ++ display = gdk_display_get_default(); ++ device_manager = gdk_display_get_device_manager(display); ++ device = gdk_device_manager_get_client_pointer(device_manager); ++ gdk_device_get_position(device, &screen, &x, &y); ++#elif GTK_VERSION == 2 + gdk_display_get_pointer(gdk_display_get_default(), &screen, &x, &y, NULL); ++#endif + monitor = gdk_screen_get_monitor_at_point(screen, x, y); + gdk_screen_get_monitor_geometry(screen, monitor, &rect); + remmina_file_set_int(remminafile, "resolution_width", rect.width); +diff -urN remmina/src/remmina_file.h remmina/src/remmina_file.h +--- remmina/src/remmina_file.h 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/src/remmina_file.h 2014-01-08 02:31:52.000000000 +1100 +@@ -25,6 +25,12 @@ + + G_BEGIN_DECLS + ++struct _RemminaFile ++{ ++ gchar *filename; ++ GHashTable *settings; ++}; ++ + enum + { + SSH_AUTH_PASSWORD, SSH_AUTH_PUBLICKEY, SSH_AUTH_AUTO_PUBLICKEY +diff -urN remmina/src/remmina_file_editor.c remmina/src/remmina_file_editor.c +--- remmina/src/remmina_file_editor.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/src/remmina_file_editor.c 2014-01-08 23:32:47.550426079 +1100 +@@ -195,7 +195,11 @@ + GtkWidget* table; + GtkWidget* widget; + ++#if GTK_VERSION == 3 ++ tablabel = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); ++#elif GTK_VERSION == 2 + tablabel = gtk_hbox_new(FALSE, 0); ++#endif + gtk_widget_show(tablabel); + + widget = gtk_image_new_from_stock(stock_id, GTK_ICON_SIZE_MENU); +@@ -206,7 +210,11 @@ + gtk_box_pack_start(GTK_BOX(tablabel), widget, FALSE, FALSE, 0); + gtk_widget_show(widget); + ++#if GTK_VERSION == 3 ++ tabbody = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); ++#elif GTK_VERSION == 2 + tabbody = gtk_vbox_new(FALSE, 0); ++#endif + gtk_widget_show(tabbody); + gtk_notebook_append_page(GTK_NOTEBOOK(gfe->priv->config_container), tabbody, tablabel); + +@@ -354,7 +362,11 @@ + { + gfe->priv->avahi_service_type = (const gchar*) setting->opt1; + ++#if GTK_VERSION == 3 ++ hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); ++#elif GTK_VERSION == 2 + hbox = gtk_hbox_new (FALSE, 0); ++#endif + gtk_widget_show(hbox); + gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0); + +@@ -433,7 +445,11 @@ + gtk_table_attach_defaults(GTK_TABLE(table), widget, 1, 2, row, row + 1); + gfe->priv->resolution_auto_radio = widget; + +- hbox = gtk_hbox_new(FALSE, 0); ++#if GTK_VERSION == 3 ++ hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); ++#elif GTK_VERSION == 2 ++ hbox = gtk_hbox_new (FALSE, 0); ++#endif + gtk_widget_show(hbox); + gtk_table_attach_defaults(GTK_TABLE(table), hbox, 1, 2, row + 1, row + 2); + +@@ -556,7 +572,11 @@ + gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); + gtk_table_attach(GTK_TABLE(table), widget, col, col + 1, row, row + 1, GTK_FILL, 0, 0, 0); + ++#if GTK_VERSION == 3 ++ hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); ++#elif GTK_VERSION == 2 + hbox = gtk_hbox_new(FALSE, 0); ++#endif + gtk_widget_show(hbox); + gtk_table_attach_defaults(GTK_TABLE(table), hbox, col + 1, col + 2, row, row + 1); + +@@ -594,7 +614,11 @@ + { + if (hbox == NULL) + { +- hbox = gtk_hbox_new(TRUE, 0); ++#if GTK_VERSION == 3 ++ hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); ++#elif GTK_VERSION == 2 ++ hbox = gtk_hbox_new(FALSE, 0); ++#endif + gtk_widget_show(hbox); + gtk_table_attach_defaults(GTK_TABLE(table), hbox, 0, 2, row, row + 1); + } +@@ -734,7 +758,11 @@ + table = remmina_file_editor_create_notebook_tab (gfe, GTK_STOCK_DIALOG_AUTHENTICATION, + "SSH", 9, 3); + +- hbox = gtk_hbox_new (TRUE, 0); ++#if GTK_VERSION == 3 ++ hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); ++#elif GTK_VERSION == 2 ++ hbox = gtk_hbox_new(FALSE, 0); ++#endif + gtk_widget_show(hbox); + gtk_table_attach_defaults (GTK_TABLE(table), hbox, 0, 3, 0, 1); + row++; +diff -urN remmina/src/remmina_ftp_client.c remmina/src/remmina_ftp_client.c +--- remmina/src/remmina_ftp_client.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/src/remmina_ftp_client.c 2014-01-08 02:31:52.000000000 +1100 +@@ -23,6 +23,7 @@ + #include <gtk/gtk.h> + #include <glib/gi18n.h> + #include <glib/gstdio.h> ++#include "config.h" + #include "remmina_public.h" + #include "remmina_pref.h" + #include "remmina_marshals.h" +@@ -749,7 +750,11 @@ + GtkWidget *image; + gint i = 0; + ++#if GTK_VERSION == 3 ++ box = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); ++#elif GTK_VERSION == 2 + box = gtk_hbutton_box_new(); ++#endif + gtk_widget_show(box); + gtk_button_box_set_layout(GTK_BUTTON_BOX(box), GTK_BUTTONBOX_START); + gtk_box_pack_start(GTK_BOX(client), box, FALSE, TRUE, 0); +@@ -849,14 +854,22 @@ + remmina_ftp_client_create_toolbar(client); + + /* The Paned to separate File List and Task List */ ++#if GTK_VERSION == 3 ++ vpaned = gtk_paned_new(GTK_ORIENTATION_VERTICAL); ++#elif GTK_VERSION == 2 + vpaned = gtk_vpaned_new(); ++#endif + gtk_widget_show(vpaned); + gtk_box_pack_start(GTK_BOX(client), vpaned, TRUE, TRUE, 0); + + priv->vpaned = vpaned; + + /* Remote */ ++#if GTK_VERSION == 3 ++ vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); ++#elif GTK_VERSION == 2 + vbox = gtk_vbox_new(FALSE, 0); ++#endif + gtk_widget_show(vbox); + gtk_paned_pack1(GTK_PANED(vpaned), vbox, TRUE, FALSE); + +diff -urN remmina/src/remmina_icon.c remmina/src/remmina_icon.c +--- remmina/src/remmina_icon.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/src/remmina_icon.c 2014-01-08 02:31:52.000000000 +1100 +@@ -394,8 +394,10 @@ + { + #ifdef HAVE_LIBAPPINDICATOR + remmina_icon.icon = app_indicator_new ("remmina-icon", "remmina", APP_INDICATOR_CATEGORY_OTHER); ++ app_indicator_set_icon_theme_path (remmina_icon.icon, REMMINA_DATADIR G_DIR_SEPARATOR_S "icons"); + + app_indicator_set_status (remmina_icon.icon, APP_INDICATOR_STATUS_ACTIVE); ++ app_indicator_set_title (remmina_icon.icon, "Remmina"); + remmina_icon_populate_menu (); + #else + remmina_icon.icon = gtk_status_icon_new_from_icon_name("remmina"); +diff -urN remmina/src/remmina_init_dialog.c remmina/src/remmina_init_dialog.c +--- remmina/src/remmina_init_dialog.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/src/remmina_init_dialog.c 2014-01-08 02:31:52.000000000 +1100 +@@ -20,6 +20,7 @@ + + #include <gtk/gtk.h> + #include <glib/gi18n.h> ++#include "config.h" + #include "remmina_widget_pool.h" + #include "remmina_init_dialog.h" + +@@ -44,7 +45,7 @@ + + static void remmina_init_dialog_init(RemminaInitDialog *dialog) + { +- GtkWidget *hbox; ++ GtkWidget *hbox = NULL; + GtkWidget *widget; + + dialog->image = NULL; +@@ -73,7 +74,11 @@ + /**** Create the dialog content from here ****/ + + /* Create top-level hbox */ ++#if GTK_VERSION == 3 ++ hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 4); ++#elif GTK_VERSION == 2 + hbox = gtk_hbox_new(FALSE, 4); ++#endif + gtk_widget_show(hbox); + gtk_container_set_border_width(GTK_CONTAINER(hbox), 15); + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), hbox, TRUE, TRUE, 0); +@@ -85,7 +90,11 @@ + dialog->image = widget; + + /* Create vbox for other dialog content */ ++#if GTK_VERSION == 3 ++ widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4); ++#elif GTK_VERSION == 2 + widget = gtk_vbox_new(FALSE, 4); ++#endif + gtk_widget_show(widget); + gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 4); + dialog->content_vbox = widget; +@@ -420,6 +429,88 @@ + + return status; + } ++gint remmina_init_dialog_certificate_changed(RemminaInitDialog* dialog, const gchar* subject, const gchar* issuer, const gchar* new_fingerprint, const gchar* old_fingerprint) ++{ ++ gint status; ++ GtkWidget* table; ++ GtkWidget* widget; ++ ++ gtk_label_set_text(GTK_LABEL(dialog->status_label), "Certificate Changed! Details:"); ++ ++ /* Create table */ ++ table = gtk_table_new(6, 2, FALSE); ++ gtk_widget_show(table); ++ gtk_table_set_row_spacings(GTK_TABLE(table), 8); ++ gtk_table_set_col_spacings(GTK_TABLE(table), 8); ++ ++ /* Icon */ ++ gtk_image_set_from_stock(GTK_IMAGE(dialog->image), GTK_STOCK_DIALOG_AUTHENTICATION, GTK_ICON_SIZE_DIALOG); ++ ++ /* Entries */ ++ widget = gtk_label_new(_("Subject:")); ++ gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); ++ gtk_widget_show(widget); ++ gtk_table_attach(GTK_TABLE(table), widget, 0, 1, 0, 1, GTK_FILL, 0, 0, 0); ++ ++ widget = gtk_label_new(subject); ++ gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); ++ gtk_widget_show(widget); ++ gtk_table_attach(GTK_TABLE(table), widget, 1, 2, 0, 1, GTK_FILL, 0, 0, 0); ++ ++ widget = gtk_label_new(_("Issuer:")); ++ gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); ++ gtk_widget_show(widget); ++ gtk_table_attach(GTK_TABLE(table), widget, 0, 1, 1, 2, GTK_FILL, 0, 0, 0); ++ ++ widget = gtk_label_new(issuer); ++ gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); ++ gtk_widget_show(widget); ++ gtk_table_attach(GTK_TABLE(table), widget, 1, 2, 1, 2, GTK_FILL, 0, 0, 0); ++ ++ widget = gtk_label_new(_("Old Fingerprint:")); ++ gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); ++ gtk_widget_show(widget); ++ gtk_table_attach(GTK_TABLE(table), widget, 0, 1, 2, 3, GTK_FILL, 0, 0, 0); ++ ++ widget = gtk_label_new(old_fingerprint); ++ gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); ++ gtk_widget_show(widget); ++ gtk_table_attach(GTK_TABLE(table), widget, 1, 2, 2, 3, GTK_FILL, 0, 0, 0); ++ ++ widget = gtk_label_new(_("New Fingerprint:")); ++ gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); ++ gtk_widget_show(widget); ++ gtk_table_attach(GTK_TABLE(table), widget, 0, 1, 3, 4, GTK_FILL, 0, 0, 0); ++ ++ widget = gtk_label_new(new_fingerprint); ++ gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); ++ gtk_widget_show(widget); ++ gtk_table_attach(GTK_TABLE(table), widget, 1, 2, 3, 4, GTK_FILL, 0, 0, 0); ++ ++ widget = gtk_label_new(_("Accept Changed Certificate?")); ++ gtk_misc_set_alignment(GTK_MISC(widget), 1.0, 0.5); ++ gtk_widget_show(widget); ++ gtk_table_attach(GTK_TABLE(table), widget, 0, 2, 4, 5, GTK_FILL, 0, 0, 0); ++ ++ /* Pack it into the dialog */ ++ gtk_box_pack_start(GTK_BOX(dialog->content_vbox), table, TRUE, TRUE, 4); ++ ++ gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog), GTK_RESPONSE_OK, TRUE); ++ ++ dialog->mode = REMMINA_INIT_MODE_CERTIFICATE; ++ ++ /* Now run it */ ++ status = gtk_dialog_run(GTK_DIALOG(dialog)); ++ ++ if (status == GTK_RESPONSE_OK) ++ { ++ ++ } ++ ++ gtk_container_remove(GTK_CONTAINER(dialog->content_vbox), table); ++ ++ return status; ++} + + static GtkWidget* remmina_init_dialog_create_file_button(GtkTable *table, const gchar *label, gint row, const gchar *filename) + { +@@ -505,14 +596,18 @@ + + static gint remmina_init_dialog_serverkey_confirm(RemminaInitDialog *dialog, const gchar *serverkey, const gchar *prompt) + { +- GtkWidget *vbox; ++ GtkWidget *vbox = NULL; + GtkWidget *widget; + gint ret; + + gtk_label_set_text(GTK_LABEL(dialog->status_label), (dialog->status ? dialog->status : dialog->title)); + + /* Create vbox */ ++#if GTK_VERSION == 3 ++ vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4); ++#elif GTK_VERSION == 2 + vbox = gtk_vbox_new(FALSE, 4); ++#endif + gtk_widget_show(vbox); + + /* Icon */ +diff -urN remmina/src/remmina_init_dialog.h remmina/src/remmina_init_dialog.h +--- remmina/src/remmina_init_dialog.h 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/src/remmina_init_dialog.h 2014-01-08 02:31:52.000000000 +1100 +@@ -78,6 +78,7 @@ + gint remmina_init_dialog_authuserpwd(RemminaInitDialog *dialog, gboolean want_domain, const gchar *default_username, + const gchar *default_domain, gboolean allow_save); + gint remmina_init_dialog_certificate(RemminaInitDialog* dialog, const gchar* subject, const gchar* issuer, const gchar* fingerprint); ++gint remmina_init_dialog_certificate_changed(RemminaInitDialog* dialog, const gchar* subject, const gchar* issuer, const gchar* old_fingerprint, const gchar* new_fingerprint); + gint remmina_init_dialog_authx509(RemminaInitDialog *dialog, const gchar *cacert, const gchar *cacrl, const gchar *clientcert, + const gchar *clientkey); + gint remmina_init_dialog_serverkey_unknown(RemminaInitDialog *dialog, const gchar *serverkey); +diff -urN remmina/src/remmina_main.c remmina/src/remmina_main.c +--- remmina/src/remmina_main.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/src/remmina_main.c 2014-01-08 02:31:52.000000000 +1100 +@@ -20,6 +20,7 @@ + + #include "config.h" + #include <gtk/gtk.h> ++#include <gdk/gdkkeysyms.h> + #include <glib/gi18n.h> + #include "remmina_string_array.h" + #include "remmina_public.h" +@@ -35,34 +36,11 @@ + #include "remmina_log.h" + #include "remmina_icon.h" + #include "remmina_main.h" ++#include "remmina_external_tools.h" + + G_DEFINE_TYPE( RemminaMain, remmina_main, GTK_TYPE_WINDOW) + +-struct _RemminaMainPriv +-{ +- GtkWidget *file_list; +- GtkTreeModel *file_model; +- GtkTreeModel *file_model_filter; +- GtkTreeModel *file_model_sort; +- GtkUIManager *uimanager; +- GtkWidget *toolbar; +- GtkWidget *statusbar; +- +- GtkToolItem *quick_search_separator; +- GtkToolItem *quick_search_item; +- GtkWidget *quick_search_entry; +- +- GtkTreeViewColumn *group_column; +- +- GtkActionGroup *main_group; +- GtkActionGroup *file_sensitive_group; +- +- gboolean initialized; + +- gchar *selected_filename; +- gchar *selected_name; +- RemminaStringArray *expanded_group; +-}; + + static void remmina_main_class_init(RemminaMainClass *klass) + { +@@ -480,6 +458,11 @@ + remmina_connection_window_open_from_filename(remminamain->priv->selected_filename); + } + ++static void remmina_main_action_connection_external_tools(GtkAction *action, RemminaMain *remminamain) ++{ ++ remmina_external_tools_from_filename(remminamain, remminamain->priv->selected_filename); ++} ++ + static void remmina_main_file_editor_destroy(GtkWidget *widget, RemminaMain *remminamain) + { + if (GTK_IS_WIDGET(remminamain)) +@@ -853,6 +836,7 @@ + " <menuitem action='ConnectionCopy'/>" + " <menuitem action='ConnectionEdit'/>" + " <menuitem action='ConnectionDelete'/>" ++ " <menuitem action='ConnectionExternalTools'/>" + " </popup>" + "</ui>"; + +@@ -898,7 +882,12 @@ + { "ConnectionDelete", GTK_STOCK_DELETE, NULL, "<control>D", N_("Delete the selected remote desktop file"), G_CALLBACK( + remmina_main_action_connection_delete) }, + +-{ "ToolsExport", NULL, N_("Export"), NULL, NULL, G_CALLBACK(remmina_main_action_tools_export) } }; ++{ "ToolsExport", NULL, N_("Export"), NULL, NULL, G_CALLBACK(remmina_main_action_tools_export) }, ++ ++{ "ConnectionExternalTools", NULL, N_("External Tools"), "<control>T", NULL, ++ G_CALLBACK(remmina_main_action_connection_external_tools) } ++ ++}; + + static const GtkToggleActionEntry remmina_main_ui_toggle_menu_entries[] = + { +@@ -916,6 +905,62 @@ + { "ViewFileList", NULL, N_("List View"), NULL, NULL, REMMINA_VIEW_FILE_LIST }, + { "ViewFileTree", NULL, N_("Tree View"), NULL, NULL, REMMINA_VIEW_FILE_TREE } }; + ++static gboolean remmina_main_quickconnect(RemminaMain *remminamain) ++{ ++ RemminaFile* remminafile; ++ gint index; ++ gchar* server; ++ gchar* protocol; ++ ++ remminafile = remmina_file_new(); ++ server = strdup(gtk_entry_get_text(GTK_ENTRY(remminamain->priv->quickconnect_server))); ++ index = gtk_combo_box_get_active(GTK_COMBO_BOX(remminamain->priv->quickconnect_protocol)); ++ ++ switch (index) ++ { ++ case 0: ++ protocol = "RDP"; ++ break; ++ case 1: ++ protocol = "VNC"; ++ break; ++ case 2: ++ protocol = "NX"; ++ break; ++ case 3: ++ protocol = "SSH"; ++ break; ++ default: ++ protocol = "RDP"; ++ break; ++ } ++ ++ remmina_file_set_string(remminafile, "sound", "off"); ++ remmina_file_set_string(remminafile, "server", server); ++ remmina_file_set_string(remminafile, "name", server); ++ remmina_file_set_string(remminafile, "protocol", protocol); ++ ++ remmina_connection_window_open_from_file(remminafile); ++ ++ return FALSE; ++} ++static gboolean remmina_main_quickconnect_on_click(GtkWidget *widget, RemminaMain *remminamain) ++{ ++ return remmina_main_quickconnect(remminamain); ++} ++static gboolean remmina_main_quickconnect_on_key_press(GtkWidget *widget, GdkEventKey *event, RemminaMain *remminamain) ++{ ++#if GTK_VERSION == 3 ++ if (event->type == GDK_KEY_PRESS && (event->keyval == GDK_KEY_Return || event->keyval == GDK_KEY_KP_Enter)) ++#else ++ if (event->type == GDK_KEY_PRESS && (event->keyval == GDK_Return || event->keyval == GDK_KP_Enter)) ++#endif ++ { ++ return remmina_main_quickconnect(remminamain); ++ } ++ return FALSE; ++} ++ + static gboolean remmina_main_file_list_on_button_press(GtkWidget *widget, GdkEventButton *event, RemminaMain *remminamain) + { + GtkWidget *popup; +@@ -944,6 +989,27 @@ + } + return FALSE; + } ++static gboolean remmina_main_file_list_on_key_press(GtkWidget *widget, GdkEventKey *event, RemminaMain *remminamain) ++{ ++#if GTK_VERSION == 3 ++ if (event->type == GDK_KEY_PRESS && (event->keyval == GDK_KEY_Return || event->keyval == GDK_KEY_KP_Enter) && remminamain->priv->selected_filename) ++#else ++ if (event->type == GDK_KEY_PRESS && (event->keyval == GDK_Return || event->keyval == GDK_KP_Enter) && remminamain->priv->selected_filename) ++#endif ++ { ++ switch (remmina_pref.default_action) ++ { ++ case REMMINA_ACTION_EDIT: ++ remmina_main_action_connection_edit(NULL, remminamain); ++ break; ++ case REMMINA_ACTION_CONNECT: ++ default: ++ remmina_main_action_connection_connect(NULL, remminamain); ++ break; ++ } ++ } ++ return FALSE; ++} + + static void remmina_main_quick_search_on_icon_press(GtkEntry *entry, GtkEntryIconPosition icon_pos, GdkEvent *event, + RemminaMain *remminamain) +@@ -1048,6 +1114,9 @@ + RemminaMainPriv *priv; + GtkWidget *vbox; + GtkWidget *menubar; ++ GtkWidget *hbox; ++ GtkWidget *quickconnect; ++ GtkWidget *tool_item; + GtkUIManager *uimanager; + GtkActionGroup *action_group; + GtkWidget *scrolledwindow; +@@ -1075,7 +1144,11 @@ + } + + /* Create the main container */ ++#if GTK_VERSION == 3 ++ vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); ++#elif GTK_VERSION == 2 + vbox = gtk_vbox_new(FALSE, 0); ++#endif + gtk_container_add(GTK_CONTAINER(remminamain), vbox); + gtk_widget_show(vbox); + +@@ -1120,14 +1193,60 @@ + gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0); + + priv->toolbar = gtk_ui_manager_get_widget(uimanager, "/ToolBar"); ++#if GTK_VERSION == 3 ++ gtk_style_context_add_class(gtk_widget_get_style_context(priv->toolbar), GTK_STYLE_CLASS_PRIMARY_TOOLBAR); ++#endif + gtk_box_pack_start(GTK_BOX(vbox), priv->toolbar, FALSE, FALSE, 0); + ++ tool_item = gtk_ui_manager_get_widget(uimanager, "/ToolBar/ConnectionConnect"); ++ gtk_tool_item_set_is_important (GTK_TOOL_ITEM(tool_item), TRUE); ++ ++ tool_item = gtk_ui_manager_get_widget(uimanager, "/ToolBar/ConnectionNew"); ++ gtk_tool_item_set_is_important (GTK_TOOL_ITEM(tool_item), TRUE); ++ + remmina_main_create_quick_search(remminamain); + + gtk_window_add_accel_group(GTK_WINDOW(remminamain), gtk_ui_manager_get_accel_group(uimanager)); + + gtk_action_group_set_sensitive(priv->file_sensitive_group, FALSE); + ++ /* Add a Fast Connection box */ ++#if GTK_VERSION == 3 ++ hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); ++#elif GTK_VERSION == 2 ++ hbox = gtk_hbox_new(FALSE, 0); ++#endif ++ ++ priv->quickconnect_protocol = gtk_combo_box_text_new(); ++#if GTK_VERSION == 3 ++ gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(priv->quickconnect_protocol), "RDP", "RDP"); ++ gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(priv->quickconnect_protocol), "VNC", "VNC"); ++ gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(priv->quickconnect_protocol), "NX", "NX"); ++ gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(priv->quickconnect_protocol), "SSH", "SSH"); ++#elif GTK_VERSION == 2 ++ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(priv->quickconnect_protocol), "RDP"); ++ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(priv->quickconnect_protocol), "VNC"); ++ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(priv->quickconnect_protocol), "NX"); ++ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(priv->quickconnect_protocol), "SSH"); ++#endif ++ gtk_combo_box_set_active(GTK_COMBO_BOX(priv->quickconnect_protocol), 0); ++ gtk_widget_show(priv->quickconnect_protocol); ++ gtk_box_pack_start(GTK_BOX(hbox), priv->quickconnect_protocol, FALSE, FALSE, 0); ++ ++ priv->quickconnect_server = gtk_entry_new(); ++ gtk_entry_set_width_chars(GTK_ENTRY(priv->quickconnect_server), 25); ++ gtk_widget_show(priv->quickconnect_server); ++ gtk_box_pack_start(GTK_BOX(hbox), priv->quickconnect_server, FALSE, FALSE, 0); ++ g_signal_connect(G_OBJECT(priv->quickconnect_server), "key-press-event", G_CALLBACK(remmina_main_quickconnect_on_key_press), remminamain); ++ ++ quickconnect = gtk_button_new_with_label("Connect !"); ++ gtk_widget_show(quickconnect); ++ gtk_box_pack_start(GTK_BOX(hbox), quickconnect, FALSE, FALSE, 0); ++ g_signal_connect(G_OBJECT(quickconnect), "clicked", G_CALLBACK(remmina_main_quickconnect_on_click), remminamain); ++ ++ gtk_container_add(GTK_CONTAINER(vbox), hbox); ++ gtk_widget_show(hbox); ++ + /* Create the scrolled window for the file list */ + scrolledwindow = gtk_scrolled_window_new(NULL, NULL); + gtk_widget_show(scrolledwindow); +@@ -1169,6 +1288,7 @@ + gtk_tree_selection_set_select_function(gtk_tree_view_get_selection(GTK_TREE_VIEW(tree)), remmina_main_selection_func, + remminamain, NULL); + g_signal_connect(G_OBJECT(tree), "button-press-event", G_CALLBACK(remmina_main_file_list_on_button_press), remminamain); ++ g_signal_connect(G_OBJECT(tree), "key-press-event", G_CALLBACK(remmina_main_file_list_on_key_press), remminamain); + + priv->file_list = tree; + +diff -urN remmina/src/remmina_main.h remmina/src/remmina_main.h +--- remmina/src/remmina_main.h 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/src/remmina_main.h 2014-01-08 02:31:52.000000000 +1100 +@@ -18,6 +18,8 @@ + * Boston, MA 02111-1307, USA. + */ + ++#include "remmina_string_array.h" ++ + #ifndef __REMMINAMAIN_H__ + #define __REMMINAMAIN_H__ + +@@ -39,6 +41,35 @@ + RemminaMainPriv *priv; + } RemminaMain; + ++struct _RemminaMainPriv ++{ ++ GtkWidget *file_list; ++ GtkTreeModel *file_model; ++ GtkTreeModel *file_model_filter; ++ GtkTreeModel *file_model_sort; ++ GtkUIManager *uimanager; ++ GtkWidget *toolbar; ++ GtkWidget *statusbar; ++ ++ GtkToolItem *quick_search_separator; ++ GtkToolItem *quick_search_item; ++ GtkWidget *quick_search_entry; ++ ++ GtkWidget *quickconnect_protocol; ++ GtkWidget *quickconnect_server; ++ ++ GtkTreeViewColumn *group_column; ++ ++ GtkActionGroup *main_group; ++ GtkActionGroup *file_sensitive_group; ++ ++ gboolean initialized; ++ ++ gchar *selected_filename; ++ gchar *selected_name; ++ RemminaStringArray *expanded_group; ++}; ++ + typedef struct _RemminaMainClass + { + GtkWindowClass parent_class; +diff -urN remmina/src/remmina_plugin_manager.c remmina/src/remmina_plugin_manager.c +--- remmina/src/remmina_plugin_manager.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/src/remmina_plugin_manager.c 2014-01-08 02:31:52.000000000 +1100 +@@ -86,6 +86,7 @@ + remmina_protocol_widget_init_authpwd, + remmina_protocol_widget_init_authuserpwd, + remmina_protocol_widget_init_certificate, ++ remmina_protocol_widget_changed_certificate, + remmina_protocol_widget_init_get_username, + remmina_protocol_widget_init_get_password, + remmina_protocol_widget_init_get_domain, +@@ -137,6 +138,7 @@ + if (!module) + { + g_print("Failed to load plugin: %s.\n", name); ++ g_print("Error: %s\n", g_module_error()); + return; + } + +diff -urN remmina/src/remmina_pref_dialog.c remmina/src/remmina_pref_dialog.c +--- remmina/src/remmina_pref_dialog.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/src/remmina_pref_dialog.c 2014-01-08 02:31:52.000000000 +1100 +@@ -21,6 +21,7 @@ + #include <gtk/gtk.h> + #include <glib/gi18n.h> + #include <stdlib.h> ++#include "config.h" + #include "remmina_public.h" + #include "remmina_string_list.h" + #include "remmina_widget_pool.h" +@@ -265,7 +266,11 @@ + widget = gtk_label_new(pref_plugin->pref_label); + gtk_widget_show(widget); + ++#if GTK_VERSION == 3 ++ vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); ++#elif GTK_VERSION == 2 + vbox = gtk_vbox_new(FALSE, 0); ++#endif + gtk_widget_show(vbox); + gtk_notebook_append_page(GTK_NOTEBOOK(priv->notebook), vbox, widget); + +@@ -324,7 +329,11 @@ + gtk_widget_show(tablabel); + + /* Options body */ ++#if GTK_VERSION == 3 ++ vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); ++#elif GTK_VERSION == 2 + vbox = gtk_vbox_new(FALSE, 0); ++#endif + gtk_widget_show(vbox); + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox, tablabel); + +@@ -443,7 +452,11 @@ + gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); + gtk_table_attach_defaults(GTK_TABLE(table), widget, 0, 1, 11, 12); + ++#if GTK_VERSION == 3 ++ hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2); ++#elif GTK_VERSION == 2 + hbox = gtk_hbox_new(FALSE, 2); ++#endif + gtk_widget_show(hbox); + gtk_table_attach_defaults(GTK_TABLE(table), hbox, 1, 2, 11, 12); + +@@ -465,7 +478,11 @@ + gtk_widget_show(tablabel); + + /* Resolutions body */ ++#if GTK_VERSION == 3 ++ vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 2); ++#elif GTK_VERSION == 2 + vbox = gtk_vbox_new(FALSE, 2); ++#endif + gtk_widget_show(vbox); + gtk_container_set_border_width(GTK_CONTAINER(vbox), 8); + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox, tablabel); +@@ -484,7 +501,11 @@ + gtk_widget_show(tablabel); + + /* Applet body */ ++#if GTK_VERSION == 3 ++ vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); ++#elif GTK_VERSION == 2 + vbox = gtk_vbox_new(FALSE, 0); ++#endif + gtk_widget_show(vbox); + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox, tablabel); + +@@ -535,7 +556,11 @@ + gtk_widget_show(tablabel); + + /* Keyboard body */ ++#if GTK_VERSION == 3 ++ vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); ++#elif GTK_VERSION == 2 + vbox = gtk_vbox_new(FALSE, 0); ++#endif + gtk_widget_show(vbox); + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox, tablabel); + +@@ -581,7 +606,11 @@ + gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); + gtk_table_attach(GTK_TABLE(table), widget, 0, 1, 3, 4, GTK_FILL, 0, 0, 0); + ++#if GTK_VERSION == 3 ++ hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2); ++#elif GTK_VERSION == 2 + hbox = gtk_hbox_new(TRUE, 2); ++#endif + gtk_widget_show(hbox); + gtk_table_attach_defaults(GTK_TABLE(table), hbox, 1, 2, 3, 4); + +@@ -650,7 +679,11 @@ + gtk_widget_show(tablabel); + + /* Terminal body */ ++#if GTK_VERSION == 3 ++ vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); ++#elif GTK_VERSION == 2 + vbox = gtk_vbox_new(FALSE, 0); ++#endif + gtk_widget_show(vbox); + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox, tablabel); + +@@ -715,7 +748,11 @@ + gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); + gtk_table_attach(GTK_TABLE(table), widget, 0, 1, 4, 5, GTK_FILL, 0, 0, 0); + ++#if GTK_VERSION == 3 ++ hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2); ++#elif GTK_VERSION == 2 + hbox = gtk_hbox_new(FALSE, 2); ++#endif + gtk_widget_show(hbox); + gtk_table_attach_defaults(GTK_TABLE(table), hbox, 1, 2, 4, 5); + +@@ -736,7 +773,11 @@ + gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0); + priv->vte_shortcutkey_copy_chooser = widget; + ++#if GTK_VERSION == 3 ++ hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2); ++#elif GTK_VERSION == 2 + hbox = gtk_hbox_new(FALSE, 2); ++#endif + gtk_widget_show(hbox); + gtk_table_attach_defaults(GTK_TABLE(table), hbox, 1, 2, 5, 6); + +diff -urN remmina/src/remmina_protocol_widget.c remmina/src/remmina_protocol_widget.c +--- remmina/src/remmina_protocol_widget.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/src/remmina_protocol_widget.c 2014-01-08 02:31:52.000000000 +1100 +@@ -255,11 +255,28 @@ + + gboolean remmina_protocol_widget_close_connection(RemminaProtocolWidget* gp) + { ++#if GTK_VERSION == 3 ++ GdkDisplay *display; ++ GdkDeviceManager *manager; ++ GdkDevice *device = NULL; ++#endif ++ gboolean retval; ++ + if (!GTK_IS_WIDGET(gp) || gp->priv->closed) + return FALSE; + + gp->priv->closed = TRUE; ++#if GTK_VERSION == 3 ++ display = gtk_widget_get_display(GTK_WIDGET(gp)); ++ manager = gdk_display_get_device_manager(display); ++ device = gdk_device_manager_get_client_pointer(manager); ++ if (device != NULL) ++ { ++ gdk_device_ungrab(device, GDK_CURRENT_TIME); ++ } ++#elif GTK_VERSION == 2 + gdk_keyboard_ungrab(GDK_CURRENT_TIME); ++#endif + + if (gp->priv->chat_window) + { +@@ -267,21 +284,23 @@ + gp->priv->chat_window = NULL; + } + +-#ifdef HAVE_LIBSSH +- if (gp->priv->ssh_tunnel) +- { +- remmina_ssh_tunnel_free(gp->priv->ssh_tunnel); +- gp->priv->ssh_tunnel = NULL; +- } +-#endif +- + if (!gp->priv->plugin || !gp->priv->plugin->close_connection) + { + remmina_protocol_widget_emit_signal(gp, "disconnect"); + return FALSE; + } + +- return gp->priv->plugin->close_connection(gp); ++ retval = gp->priv->plugin->close_connection(gp); ++ ++ #ifdef HAVE_LIBSSH ++ if (gp->priv->ssh_tunnel) ++ { ++ remmina_ssh_tunnel_free(gp->priv->ssh_tunnel); ++ gp->priv->ssh_tunnel = NULL; ++ } ++ #endif ++ ++ return retval; + } + + static gboolean remmina_protocol_widget_emit_signal_timeout(gpointer user_data) +@@ -810,6 +829,10 @@ + { + return remmina_init_dialog_certificate(REMMINA_INIT_DIALOG(gp->priv->init_dialog), subject, issuer, fingerprint); + } ++gint remmina_protocol_widget_changed_certificate(RemminaProtocolWidget *gp, const gchar* subject, const gchar* issuer, const gchar* new_fingerprint, const gchar* old_fingerprint) ++{ ++ return remmina_init_dialog_certificate_changed(REMMINA_INIT_DIALOG(gp->priv->init_dialog), subject, issuer, new_fingerprint, old_fingerprint); ++} + + gchar* remmina_protocol_widget_init_get_username(RemminaProtocolWidget* gp) + { +diff -urN remmina/src/remmina_protocol_widget.h remmina/src/remmina_protocol_widget.h +--- remmina/src/remmina_protocol_widget.h 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/src/remmina_protocol_widget.h 2014-01-08 02:31:52.000000000 +1100 +@@ -108,6 +108,7 @@ + gint remmina_protocol_widget_init_authpwd(RemminaProtocolWidget *gp, RemminaAuthpwdType authpwd_type); + gint remmina_protocol_widget_init_authuserpwd(RemminaProtocolWidget *gp, gboolean want_domain); + gint remmina_protocol_widget_init_certificate(RemminaProtocolWidget* gp, const gchar* subject, const gchar* issuer, const gchar* fingerprint); ++gint remmina_protocol_widget_changed_certificate(RemminaProtocolWidget *gp, const gchar* subject, const gchar* issuer, const gchar* new_fingerprint, const gchar* old_fingerprint); + gchar* remmina_protocol_widget_init_get_username(RemminaProtocolWidget *gp); + gchar* remmina_protocol_widget_init_get_password(RemminaProtocolWidget *gp); + gchar* remmina_protocol_widget_init_get_domain(RemminaProtocolWidget *gp); +diff -urN remmina/src/remmina_scaler.c remmina/src/remmina_scaler.c +--- remmina/src/remmina_scaler.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/src/remmina_scaler.c 2014-01-08 02:31:52.000000000 +1100 +@@ -20,6 +20,7 @@ + + #include <gtk/gtk.h> + #include <glib/gi18n.h> ++#include "config.h" + #include "remmina_chain_button.h" + #include "remmina_scaler.h" + +@@ -113,7 +114,7 @@ + static void remmina_scaler_init(RemminaScaler *scaler) + { + RemminaScalerPriv *priv; +- GtkWidget *widget; ++ GtkWidget *widget = NULL; + + priv = g_new(RemminaScalerPriv, 1); + scaler->priv = priv; +@@ -123,14 +124,22 @@ + + gtk_table_resize(GTK_TABLE(scaler), 2, 2); + ++#if GTK_VERSION == 3 ++ widget = gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL, MIN_SCALE_VALUE, 1.0, 0.01); ++#elif GTK_VERSION == 2 + widget = gtk_hscale_new_with_range(MIN_SCALE_VALUE, 1.0, 0.01); ++#endif + gtk_widget_show(widget); + gtk_widget_set_tooltip_text(widget, _("Horizontal scale")); + gtk_table_attach_defaults(GTK_TABLE(scaler), widget, 1, 2, 0, 1); + g_signal_connect(G_OBJECT(widget), "format-value", G_CALLBACK(remmina_scaler_format_scale_value), NULL); + priv->hscale_widget = widget; + ++#if GTK_VERSION == 3 ++ widget = gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL, MIN_SCALE_VALUE, 1.0, 0.01); ++#elif GTK_VERSION == 2 + widget = gtk_hscale_new_with_range(MIN_SCALE_VALUE, 1.0, 0.01); ++#endif + gtk_widget_show(widget); + gtk_widget_set_tooltip_text(widget, _("Vertical scale")); + gtk_table_attach_defaults(GTK_TABLE(scaler), widget, 1, 2, 1, 2); +diff -urN remmina/src/remmina_scrolled_viewport.c remmina/src/remmina_scrolled_viewport.c +--- remmina/src/remmina_scrolled_viewport.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/src/remmina_scrolled_viewport.c 2014-01-08 02:31:52.000000000 +1100 +@@ -19,6 +19,7 @@ + */ + + #include <gtk/gtk.h> ++#include "config.h" + #include "remmina_scrolled_viewport.h" + #include "remmina_pref.h" + +@@ -30,6 +31,10 @@ + RemminaScrolledViewport *gsv; + GtkWidget *child; + GdkDisplay *display; ++#if GTK_VERSION == 3 ++ GdkDeviceManager *device_manager; ++ GdkDevice *pointer; ++#endif + GdkScreen *screen; + gint x, y, mx, my, w, h; + GtkAdjustment *adj; +@@ -49,7 +54,13 @@ + display = gdk_display_get_default(); + if (!display) + return FALSE; ++#if GTK_VERSION == 3 ++ device_manager = gdk_display_get_device_manager (display); ++ pointer = gdk_device_manager_get_client_pointer (device_manager); ++ gdk_device_get_position(pointer, &screen, &x, &y); ++#elif GTK_VERSION == 2 + gdk_display_get_pointer(display, &screen, &x, &y, NULL); ++#endif + + w = gdk_screen_get_width(screen); + h = gdk_screen_get_height(screen); +@@ -58,7 +69,11 @@ + if (mx != 0) + { + gint step = MAX(10, MIN(remmina_pref.auto_scroll_step, w / 5)); ++#if GTK_VERSION == 3 ++ adj = gtk_scrollable_get_hadjustment(GTK_SCROLLABLE(child)); ++#elif GTK_VERSION == 2 + adj = gtk_viewport_get_hadjustment(GTK_VIEWPORT(child)); ++#endif + value = gtk_adjustment_get_value(GTK_ADJUSTMENT(adj)) + (gdouble)(mx * step); + value = MAX(0, MIN(value, gtk_adjustment_get_upper(GTK_ADJUSTMENT(adj)) - (gdouble) w + 2.0)); + gtk_adjustment_set_value(GTK_ADJUSTMENT(adj), value); +@@ -66,7 +81,11 @@ + if (my != 0) + { + gint step = MAX(10, MIN(remmina_pref.auto_scroll_step, h / 5)); ++#if GTK_VERSION == 3 ++ adj = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(child)); ++#elif GTK_VERSION == 2 + adj = gtk_viewport_get_vadjustment(GTK_VIEWPORT(child)); ++#endif + value = gtk_adjustment_get_value(GTK_ADJUSTMENT(adj)) + (gdouble)(my * step); + value = MAX(0, MIN(value, gtk_adjustment_get_upper(GTK_ADJUSTMENT(adj)) - (gdouble) h + 2.0)); + gtk_adjustment_set_value(GTK_ADJUSTMENT(adj), value); +diff -urN remmina/src/remmina_sftp_client.c remmina/src/remmina_sftp_client.c +--- remmina/src/remmina_sftp_client.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/src/remmina_sftp_client.c 2014-01-08 02:31:52.000000000 +1100 +@@ -955,7 +955,11 @@ + NULL); + gtk_container_set_border_width (GTK_CONTAINER (dialog), 4); + ++#if GTK_VERSION == 3 ++ hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 4); ++#elif GTK_VERSION == 2 + hbox = gtk_hbox_new (FALSE, 4); ++#endif + gtk_widget_show(hbox); + gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG(dialog))), + hbox, TRUE, TRUE, 4); +@@ -964,7 +968,11 @@ + gtk_widget_show(widget); + gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 4); + ++#if GTK_VERSION == 3 ++ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 4); ++#elif GTK_VERSION == 2 + vbox = gtk_vbox_new (FALSE, 4); ++#endif + gtk_widget_show(vbox); + gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 4); + +diff -urN remmina/src/remmina_ssh.c remmina/src/remmina_ssh.c +--- remmina/src/remmina_ssh.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/src/remmina_ssh.c 2014-01-08 02:31:52.000000000 +1100 +@@ -139,7 +139,7 @@ + } + } + } +- else ++ if (ret != SSH_AUTH_SUCCESS && authlist & SSH_AUTH_METHOD_PASSWORD) + { + ret = ssh_userauth_password (ssh->session, NULL, ssh->password); + } +diff -urN remmina/src/remmina_ssh_plugin.c remmina/src/remmina_ssh_plugin.c +--- remmina/src/remmina_ssh_plugin.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/src/remmina_ssh_plugin.c 2014-01-08 02:31:52.000000000 +1100 +@@ -189,7 +189,11 @@ + gpdata = g_new0 (RemminaPluginSshData, 1); + g_object_set_data_full (G_OBJECT(gp), "plugin-data", gpdata, g_free); + ++#if GTK_VERSION == 3 ++ hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); ++#elif GTK_VERSION == 2 + hbox = gtk_hbox_new (FALSE, 0); ++#endif + gtk_widget_show(hbox); + gtk_container_add(GTK_CONTAINER (gp), hbox); + g_signal_connect(G_OBJECT(hbox), "focus-in-event", G_CALLBACK(remmina_plugin_ssh_on_focus_in), gp); +@@ -205,7 +209,11 @@ + + remmina_plugin_service->protocol_plugin_register_hostkey (gp, vte); + ++#if GTK_VERSION == 3 ++ vscrollbar = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL, vte_terminal_get_adjustment (VTE_TERMINAL (vte))); ++#elif GTK_VERSION == 2 + vscrollbar = gtk_vscrollbar_new (vte_terminal_get_adjustment (VTE_TERMINAL (vte))); ++#endif + gtk_widget_show(vscrollbar); + gtk_box_pack_start (GTK_BOX (hbox), vscrollbar, FALSE, TRUE, 0); + } +diff -urN remmina/src/remmina_string_list.c remmina/src/remmina_string_list.c +--- remmina/src/remmina_string_list.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina/src/remmina_string_list.c 2014-01-08 02:31:52.000000000 +1100 +@@ -20,6 +20,7 @@ + + #include <gtk/gtk.h> + #include <string.h> ++#include "config.h" + #include "remmina_public.h" + #include "remmina_string_list.h" + +@@ -206,7 +207,11 @@ + gtk_tree_view_append_column(GTK_TREE_VIEW(gsl->list), column); + + /* buttons packed into a vbox */ ++#if GTK_VERSION == 3 ++ vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); ++#elif GTK_VERSION == 2 + vbox = gtk_vbox_new(FALSE, 0); ++#endif + gtk_widget_show(vbox); + gtk_table_attach(GTK_TABLE(gsl), vbox, 1, 2, 0, 3, 0, GTK_EXPAND | GTK_FILL, 0, 0); + +diff -urN remmina-plugins/AUTHORS remmina-plugins/AUTHORS +--- remmina-plugins/AUTHORS 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/AUTHORS 1970-01-01 10:00:00.000000000 +1000 +@@ -1,4 +0,0 @@ +-Please check the application About dialog or the official web site for a full list of authors. +- +-http://remmina.sourceforge.net/contact.shtml +- +diff -urN remmina-plugins/CMakeLists.txt remmina-plugins/CMakeLists.txt +--- remmina-plugins/CMakeLists.txt 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/CMakeLists.txt 2014-01-08 02:31:52.000000000 +1100 +@@ -32,6 +32,8 @@ + target_link_libraries(remmina ${SSH_LIBRARIES}) + endif() + ++find_required_package(LIBVNCSERVER) ++ + find_required_package(XKBFILE) + + if(LIBSSH_FOUND AND XKBFILE_FOUND) +@@ -53,9 +55,10 @@ + find_suggested_package(ZLIB) + + if(ZLIB_FOUND) +- add_subdirectory(vnc/libvncserver) + add_subdirectory(vnc) + endif() + +-add_subdirectory(po) ++if(WITH_TRANSLATIONS) ++ add_subdirectory(po) ++endif() + +diff -urN remmina-plugins/COPYING remmina-plugins/COPYING +--- remmina-plugins/COPYING 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/COPYING 1970-01-01 10:00:00.000000000 +1000 +@@ -1,340 +0,0 @@ +- GNU GENERAL PUBLIC LICENSE +- Version 2, June 1991 +- +- Copyright (C) 1989, 1991 Free Software Foundation, Inc. +- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +- Everyone is permitted to copy and distribute verbatim copies +- of this license document, but changing it is not allowed. +- +- Preamble +- +- The licenses for most software are designed to take away your +-freedom to share and change it. By contrast, the GNU General Public +-License is intended to guarantee your freedom to share and change free +-software--to make sure the software is free for all its users. This +-General Public License applies to most of the Free Software +-Foundation's software and to any other program whose authors commit to +-using it. (Some other Free Software Foundation software is covered by +-the GNU Library General Public License instead.) You can apply it to +-your programs, too. +- +- When we speak of free software, we are referring to freedom, not +-price. Our General Public Licenses are designed to make sure that you +-have the freedom to distribute copies of free software (and charge for +-this service if you wish), that you receive source code or can get it +-if you want it, that you can change the software or use pieces of it +-in new free programs; and that you know you can do these things. +- +- To protect your rights, we need to make restrictions that forbid +-anyone to deny you these rights or to ask you to surrender the rights. +-These restrictions translate to certain responsibilities for you if you +-distribute copies of the software, or if you modify it. +- +- For example, if you distribute copies of such a program, whether +-gratis or for a fee, you must give the recipients all the rights that +-you have. You must make sure that they, too, receive or can get the +-source code. And you must show them these terms so they know their +-rights. +- +- We protect your rights with two steps: (1) copyright the software, and +-(2) offer you this license which gives you legal permission to copy, +-distribute and/or modify the software. +- +- Also, for each author's protection and ours, we want to make certain +-that everyone understands that there is no warranty for this free +-software. If the software is modified by someone else and passed on, we +-want its recipients to know that what they have is not the original, so +-that any problems introduced by others will not reflect on the original +-authors' reputations. +- +- Finally, any free program is threatened constantly by software +-patents. We wish to avoid the danger that redistributors of a free +-program will individually obtain patent licenses, in effect making the +-program proprietary. To prevent this, we have made it clear that any +-patent must be licensed for everyone's free use or not licensed at all. +- +- The precise terms and conditions for copying, distribution and +-modification follow. +- +- GNU GENERAL PUBLIC LICENSE +- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION +- +- 0. This License applies to any program or other work which contains +-a notice placed by the copyright holder saying it may be distributed +-under the terms of this General Public License. The "Program", below, +-refers to any such program or work, and a "work based on the Program" +-means either the Program or any derivative work under copyright law: +-that is to say, a work containing the Program or a portion of it, +-either verbatim or with modifications and/or translated into another +-language. (Hereinafter, translation is included without limitation in +-the term "modification".) Each licensee is addressed as "you". +- +-Activities other than copying, distribution and modification are not +-covered by this License; they are outside its scope. The act of +-running the Program is not restricted, and the output from the Program +-is covered only if its contents constitute a work based on the +-Program (independent of having been made by running the Program). +-Whether that is true depends on what the Program does. +- +- 1. You may copy and distribute verbatim copies of the Program's +-source code as you receive it, in any medium, provided that you +-conspicuously and appropriately publish on each copy an appropriate +-copyright notice and disclaimer of warranty; keep intact all the +-notices that refer to this License and to the absence of any warranty; +-and give any other recipients of the Program a copy of this License +-along with the Program. +- +-You may charge a fee for the physical act of transferring a copy, and +-you may at your option offer warranty protection in exchange for a fee. +- +- 2. You may modify your copy or copies of the Program or any portion +-of it, thus forming a work based on the Program, and copy and +-distribute such modifications or work under the terms of Section 1 +-above, provided that you also meet all of these conditions: +- +- a) You must cause the modified files to carry prominent notices +- stating that you changed the files and the date of any change. +- +- b) You must cause any work that you distribute or publish, that in +- whole or in part contains or is derived from the Program or any +- part thereof, to be licensed as a whole at no charge to all third +- parties under the terms of this License. +- +- c) If the modified program normally reads commands interactively +- when run, you must cause it, when started running for such +- interactive use in the most ordinary way, to print or display an +- announcement including an appropriate copyright notice and a +- notice that there is no warranty (or else, saying that you provide +- a warranty) and that users may redistribute the program under +- these conditions, and telling the user how to view a copy of this +- License. (Exception: if the Program itself is interactive but +- does not normally print such an announcement, your work based on +- the Program is not required to print an announcement.) +- +-These requirements apply to the modified work as a whole. If +-identifiable sections of that work are not derived from the Program, +-and can be reasonably considered independent and separate works in +-themselves, then this License, and its terms, do not apply to those +-sections when you distribute them as separate works. But when you +-distribute the same sections as part of a whole which is a work based +-on the Program, the distribution of the whole must be on the terms of +-this License, whose permissions for other licensees extend to the +-entire whole, and thus to each and every part regardless of who wrote it. +- +-Thus, it is not the intent of this section to claim rights or contest +-your rights to work written entirely by you; rather, the intent is to +-exercise the right to control the distribution of derivative or +-collective works based on the Program. +- +-In addition, mere aggregation of another work not based on the Program +-with the Program (or with a work based on the Program) on a volume of +-a storage or distribution medium does not bring the other work under +-the scope of this License. +- +- 3. You may copy and distribute the Program (or a work based on it, +-under Section 2) in object code or executable form under the terms of +-Sections 1 and 2 above provided that you also do one of the following: +- +- a) Accompany it with the complete corresponding machine-readable +- source code, which must be distributed under the terms of Sections +- 1 and 2 above on a medium customarily used for software interchange; or, +- +- b) Accompany it with a written offer, valid for at least three +- years, to give any third party, for a charge no more than your +- cost of physically performing source distribution, a complete +- machine-readable copy of the corresponding source code, to be +- distributed under the terms of Sections 1 and 2 above on a medium +- customarily used for software interchange; or, +- +- c) Accompany it with the information you received as to the offer +- to distribute corresponding source code. (This alternative is +- allowed only for noncommercial distribution and only if you +- received the program in object code or executable form with such +- an offer, in accord with Subsection b above.) +- +-The source code for a work means the preferred form of the work for +-making modifications to it. For an executable work, complete source +-code means all the source code for all modules it contains, plus any +-associated interface definition files, plus the scripts used to +-control compilation and installation of the executable. However, as a +-special exception, the source code distributed need not include +-anything that is normally distributed (in either source or binary +-form) with the major components (compiler, kernel, and so on) of the +-operating system on which the executable runs, unless that component +-itself accompanies the executable. +- +-If distribution of executable or object code is made by offering +-access to copy from a designated place, then offering equivalent +-access to copy the source code from the same place counts as +-distribution of the source code, even though third parties are not +-compelled to copy the source along with the object code. +- +- 4. You may not copy, modify, sublicense, or distribute the Program +-except as expressly provided under this License. Any attempt +-otherwise to copy, modify, sublicense or distribute the Program is +-void, and will automatically terminate your rights under this License. +-However, parties who have received copies, or rights, from you under +-this License will not have their licenses terminated so long as such +-parties remain in full compliance. +- +- 5. You are not required to accept this License, since you have not +-signed it. However, nothing else grants you permission to modify or +-distribute the Program or its derivative works. These actions are +-prohibited by law if you do not accept this License. Therefore, by +-modifying or distributing the Program (or any work based on the +-Program), you indicate your acceptance of this License to do so, and +-all its terms and conditions for copying, distributing or modifying +-the Program or works based on it. +- +- 6. Each time you redistribute the Program (or any work based on the +-Program), the recipient automatically receives a license from the +-original licensor to copy, distribute or modify the Program subject to +-these terms and conditions. You may not impose any further +-restrictions on the recipients' exercise of the rights granted herein. +-You are not responsible for enforcing compliance by third parties to +-this License. +- +- 7. If, as a consequence of a court judgment or allegation of patent +-infringement or for any other reason (not limited to patent issues), +-conditions are imposed on you (whether by court order, agreement or +-otherwise) that contradict the conditions of this License, they do not +-excuse you from the conditions of this License. If you cannot +-distribute so as to satisfy simultaneously your obligations under this +-License and any other pertinent obligations, then as a consequence you +-may not distribute the Program at all. For example, if a patent +-license would not permit royalty-free redistribution of the Program by +-all those who receive copies directly or indirectly through you, then +-the only way you could satisfy both it and this License would be to +-refrain entirely from distribution of the Program. +- +-If any portion of this section is held invalid or unenforceable under +-any particular circumstance, the balance of the section is intended to +-apply and the section as a whole is intended to apply in other +-circumstances. +- +-It is not the purpose of this section to induce you to infringe any +-patents or other property right claims or to contest validity of any +-such claims; this section has the sole purpose of protecting the +-integrity of the free software distribution system, which is +-implemented by public license practices. Many people have made +-generous contributions to the wide range of software distributed +-through that system in reliance on consistent application of that +-system; it is up to the author/donor to decide if he or she is willing +-to distribute software through any other system and a licensee cannot +-impose that choice. +- +-This section is intended to make thoroughly clear what is believed to +-be a consequence of the rest of this License. +- +- 8. If the distribution and/or use of the Program is restricted in +-certain countries either by patents or by copyrighted interfaces, the +-original copyright holder who places the Program under this License +-may add an explicit geographical distribution limitation excluding +-those countries, so that distribution is permitted only in or among +-countries not thus excluded. In such case, this License incorporates +-the limitation as if written in the body of this License. +- +- 9. The Free Software Foundation may publish revised and/or new versions +-of the General Public License from time to time. Such new versions will +-be similar in spirit to the present version, but may differ in detail to +-address new problems or concerns. +- +-Each version is given a distinguishing version number. If the Program +-specifies a version number of this License which applies to it and "any +-later version", you have the option of following the terms and conditions +-either of that version or of any later version published by the Free +-Software Foundation. If the Program does not specify a version number of +-this License, you may choose any version ever published by the Free Software +-Foundation. +- +- 10. If you wish to incorporate parts of the Program into other free +-programs whose distribution conditions are different, write to the author +-to ask for permission. For software which is copyrighted by the Free +-Software Foundation, write to the Free Software Foundation; we sometimes +-make exceptions for this. Our decision will be guided by the two goals +-of preserving the free status of all derivatives of our free software and +-of promoting the sharing and reuse of software generally. +- +- NO WARRANTY +- +- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +-REPAIR OR CORRECTION. +- +- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +-POSSIBILITY OF SUCH DAMAGES. +- +- END OF TERMS AND CONDITIONS +- +- How to Apply These Terms to Your New Programs +- +- If you develop a new program, and you want it to be of the greatest +-possible use to the public, the best way to achieve this is to make it +-free software which everyone can redistribute and change under these terms. +- +- To do so, attach the following notices to the program. It is safest +-to attach them to the start of each source file to most effectively +-convey the exclusion of warranty; and each file should have at least +-the "copyright" line and a pointer to where the full notice is found. +- +- <one line to give the program's name and a brief idea of what it does.> +- Copyright (C) <year> <name of author> +- +- This program is free software; you can 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. +- +- This program 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 this program; if not, write to the Free Software +- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +- +- +-Also add information on how to contact you by electronic and paper mail. +- +-If the program is interactive, make it output a short notice like this +-when it starts in an interactive mode: +- +- Gnomovision version 69, Copyright (C) year name of author +- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. +- This is free software, and you are welcome to redistribute it +- under certain conditions; type `show c' for details. +- +-The hypothetical commands `show w' and `show c' should show the appropriate +-parts of the General Public License. Of course, the commands you use may +-be called something other than `show w' and `show c'; they could even be +-mouse-clicks or menu items--whatever suits your program. +- +-You should also get your employer (if you work as a programmer) or your +-school, if any, to sign a "copyright disclaimer" for the program, if +-necessary. Here is a sample; alter the names: +- +- Yoyodyne, Inc., hereby disclaims all copyright interest in the program +- `Gnomovision' (which makes passes at compilers) written by James Hacker. +- +- <signature of Ty Coon>, 1 April 1989 +- Ty Coon, President of Vice +- +-This General Public License does not permit incorporating your program into +-proprietary programs. If your program is a subroutine library, you may +-consider it more useful to permit linking proprietary applications with the +-library. If this is what you want to do, use the GNU Library General +-Public License instead of this License. +diff -urN remmina-plugins/INSTALL remmina-plugins/INSTALL +--- remmina-plugins/INSTALL 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/INSTALL 1970-01-01 10:00:00.000000000 +1000 +@@ -1,237 +0,0 @@ +-Installation Instructions +-************************* +- +-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, +-2006, 2007 Free Software Foundation, Inc. +- +-This file is free documentation; the Free Software Foundation gives +-unlimited permission to copy, distribute and modify it. +- +-Basic Installation +-================== +- +-Briefly, the shell commands `./configure; make; make install' should +-configure, build, and install this package. The following +-more-detailed instructions are generic; see the `README' file for +-instructions specific to this package. +- +- The `configure' shell script attempts to guess correct values for +-various system-dependent variables used during compilation. It uses +-those values to create a `Makefile' in each directory of the package. +-It may also create one or more `.h' files containing system-dependent +-definitions. Finally, it creates a shell script `config.status' that +-you can run in the future to recreate the current configuration, and a +-file `config.log' containing compiler output (useful mainly for +-debugging `configure'). +- +- It can also use an optional file (typically called `config.cache' +-and enabled with `--cache-file=config.cache' or simply `-C') that saves +-the results of its tests to speed up reconfiguring. Caching is +-disabled by default to prevent problems with accidental use of stale +-cache files. +- +- If you need to do unusual things to compile the package, please try +-to figure out how `configure' could check whether to do them, and mail +-diffs or instructions to the address given in the `README' so they can +-be considered for the next release. If you are using the cache, and at +-some point `config.cache' contains results you don't want to keep, you +-may remove or edit it. +- +- The file `configure.ac' (or `configure.in') is used to create +-`configure' by a program called `autoconf'. You need `configure.ac' if +-you want to change it or regenerate `configure' using a newer version +-of `autoconf'. +- +-The simplest way to compile this package is: +- +- 1. `cd' to the directory containing the package's source code and type +- `./configure' to configure the package for your system. +- +- Running `configure' might take a while. While running, it prints +- some messages telling which features it is checking for. +- +- 2. Type `make' to compile the package. +- +- 3. Optionally, type `make check' to run any self-tests that come with +- the package. +- +- 4. Type `make install' to install the programs and any data files and +- documentation. +- +- 5. You can remove the program binaries and object files from the +- source code directory by typing `make clean'. To also remove the +- files that `configure' created (so you can compile the package for +- a different kind of computer), type `make distclean'. There is +- also a `make maintainer-clean' target, but that is intended mainly +- for the package's developers. If you use it, you may have to get +- all sorts of other programs in order to regenerate files that came +- with the distribution. +- +- 6. Often, you can also type `make uninstall' to remove the installed +- files again. +- +-Compilers and Options +-===================== +- +-Some systems require unusual options for compilation or linking that the +-`configure' script does not know about. Run `./configure --help' for +-details on some of the pertinent environment variables. +- +- You can give `configure' initial values for configuration parameters +-by setting variables in the command line or in the environment. Here +-is an example: +- +- ./configure CC=c99 CFLAGS=-g LIBS=-lposix +- +- *Note Defining Variables::, for more details. +- +-Compiling For Multiple Architectures +-==================================== +- +-You can compile the package for more than one kind of computer at the +-same time, by placing the object files for each architecture in their +-own directory. To do this, you can use GNU `make'. `cd' to the +-directory where you want the object files and executables to go and run +-the `configure' script. `configure' automatically checks for the +-source code in the directory that `configure' is in and in `..'. +- +- With a non-GNU `make', it is safer to compile the package for one +-architecture at a time in the source code directory. After you have +-installed the package for one architecture, use `make distclean' before +-reconfiguring for another architecture. +- +-Installation Names +-================== +- +-By default, `make install' installs the package's commands under +-`/usr/local/bin', include files under `/usr/local/include', etc. You +-can specify an installation prefix other than `/usr/local' by giving +-`configure' the option `--prefix=PREFIX'. +- +- You can specify separate installation prefixes for +-architecture-specific files and architecture-independent files. If you +-pass the option `--exec-prefix=PREFIX' to `configure', the package uses +-PREFIX as the prefix for installing programs and libraries. +-Documentation and other data files still use the regular prefix. +- +- In addition, if you use an unusual directory layout you can give +-options like `--bindir=DIR' to specify different values for particular +-kinds of files. Run `configure --help' for a list of the directories +-you can set and what kinds of files go in them. +- +- If the package supports it, you can cause programs to be installed +-with an extra prefix or suffix on their names by giving `configure' the +-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. +- +-Optional Features +-================= +- +-Some packages pay attention to `--enable-FEATURE' options to +-`configure', where FEATURE indicates an optional part of the package. +-They may also pay attention to `--with-PACKAGE' options, where PACKAGE +-is something like `gnu-as' or `x' (for the X Window System). The +-`README' should mention any `--enable-' and `--with-' options that the +-package recognizes. +- +- For packages that use the X Window System, `configure' can usually +-find the X include and library files automatically, but if it doesn't, +-you can use the `configure' options `--x-includes=DIR' and +-`--x-libraries=DIR' to specify their locations. +- +-Specifying the System Type +-========================== +- +-There may be some features `configure' cannot figure out automatically, +-but needs to determine by the type of machine the package will run on. +-Usually, assuming the package is built to be run on the _same_ +-architectures, `configure' can figure that out, but if it prints a +-message saying it cannot guess the machine type, give it the +-`--build=TYPE' option. TYPE can either be a short name for the system +-type, such as `sun4', or a canonical name which has the form: +- +- CPU-COMPANY-SYSTEM +- +-where SYSTEM can have one of these forms: +- +- OS KERNEL-OS +- +- See the file `config.sub' for the possible values of each field. If +-`config.sub' isn't included in this package, then this package doesn't +-need to know the machine type. +- +- If you are _building_ compiler tools for cross-compiling, you should +-use the option `--target=TYPE' to select the type of system they will +-produce code for. +- +- If you want to _use_ a cross compiler, that generates code for a +-platform different from the build platform, you should specify the +-"host" platform (i.e., that on which the generated programs will +-eventually be run) with `--host=TYPE'. +- +-Sharing Defaults +-================ +- +-If you want to set default values for `configure' scripts to share, you +-can create a site shell script called `config.site' that gives default +-values for variables like `CC', `cache_file', and `prefix'. +-`configure' looks for `PREFIX/share/config.site' if it exists, then +-`PREFIX/etc/config.site' if it exists. Or, you can set the +-`CONFIG_SITE' environment variable to the location of the site script. +-A warning: not all `configure' scripts look for a site script. +- +-Defining Variables +-================== +- +-Variables not defined in a site shell script can be set in the +-environment passed to `configure'. However, some packages may run +-configure again during the build, and the customized values of these +-variables may be lost. In order to avoid this problem, you should set +-them in the `configure' command line, using `VAR=value'. For example: +- +- ./configure CC=/usr/local2/bin/gcc +- +-causes the specified `gcc' to be used as the C compiler (unless it is +-overridden in the site shell script). +- +-Unfortunately, this technique does not work for `CONFIG_SHELL' due to +-an Autoconf bug. Until the bug is fixed you can use this workaround: +- +- CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash +- +-`configure' Invocation +-====================== +- +-`configure' recognizes the following options to control how it operates. +- +-`--help' +-`-h' +- Print a summary of the options to `configure', and exit. +- +-`--version' +-`-V' +- Print the version of Autoconf used to generate the `configure' +- script, and exit. +- +-`--cache-file=FILE' +- Enable the cache: use and save the results of the tests in FILE, +- traditionally `config.cache'. FILE defaults to `/dev/null' to +- disable caching. +- +-`--config-cache' +-`-C' +- Alias for `--cache-file=config.cache'. +- +-`--quiet' +-`--silent' +-`-q' +- Do not print messages saying which checks are being made. To +- suppress all normal output, redirect it to `/dev/null' (any error +- messages will still be shown). +- +-`--srcdir=DIR' +- Look for the package's source code in directory DIR. Usually +- `configure' can determine that directory automatically. +- +-`configure' also accepts some other, not widely useful, options. Run +-`configure --help' for more details. +- +diff -urN remmina-plugins/README.LibVNCServer remmina-plugins/README.LibVNCServer +--- remmina-plugins/README.LibVNCServer 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/README.LibVNCServer 1970-01-01 10:00:00.000000000 +1000 +@@ -1,15 +0,0 @@ +-LibVNCServer +- +-Project web: http://sourceforge.net/projects/libvncserver +-Authors: Johannes Schindelin, Karl J. Runge +-License: GPL +- +-Remmina redistributes libvncclient related codes originally from LibVNCServer project. All sources under libvncserver/* should follow these rules: +-o Remmina only maintains Makefile.am. All other files remain untouched +-o Remmina can synchronize it with LibVNCServer project any time +-o All fixes and new features should be accepted by LibVNCServer project first +- +-Reasons why Remmina redistributes it: +-o Remmina only requires small portion of the codes +-o Although LibVNCServer is maintained, it does not have any release schedules +- +diff -urN remmina-plugins/nx/CMakeLists.txt remmina-plugins/nx/CMakeLists.txt +--- remmina-plugins/nx/CMakeLists.txt 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/nx/CMakeLists.txt 2014-01-08 02:31:52.000000000 +1100 +@@ -28,6 +28,7 @@ + + add_library(remmina-plugin-nx ${REMMINA_PLUGIN_NX_SRCS}) + set_target_properties(remmina-plugin-nx PROPERTIES PREFIX "") ++set_target_properties(remmina-plugin-nx PROPERTIES NO_SONAME 1) + + include_directories(${REMMINA_COMMON_INCLUDE_DIRS} ${XKBFILE_INCLUDE_DIRS} ${LIBSSH_INCLUDE_DIRS}) + target_link_libraries(remmina-plugin-nx ${REMMINA_COMMON_LIBRARIES} ${XKBFILE_LIBRARIES} ${LIBSSH_LIBRARIES}) +diff -urN remmina-plugins/rdp/CMakeLists.txt remmina-plugins/rdp/CMakeLists.txt +--- remmina-plugins/rdp/CMakeLists.txt 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/rdp/CMakeLists.txt 2014-01-08 02:31:52.000000000 +1100 +@@ -33,10 +33,13 @@ + rdp_gdi.h + rdp_graphics.c + rdp_graphics.h ++ rdp_cliprdr.c ++ rdp_cliprdr.h + ) + + add_library(remmina-plugin-rdp ${REMMINA_PLUGIN_RDP_SRCS}) + set_target_properties(remmina-plugin-rdp PROPERTIES PREFIX "") ++set_target_properties(remmina-plugin-rdp PROPERTIES NO_SONAME 1) + + include_directories(${REMMINA_COMMON_INCLUDE_DIRS} ${FREERDP_INCLUDE_DIRS}) + target_link_libraries(remmina-plugin-rdp ${REMMINA_COMMON_LIBRARIES} ${FREERDP_LIBRARIES}) +diff -urN remmina-plugins/rdp/rdp_cliprdr.c remmina-plugins/rdp/rdp_cliprdr.c +--- remmina-plugins/rdp/rdp_cliprdr.c 1970-01-01 10:00:00.000000000 +1000 ++++ remmina-plugins/rdp/rdp_cliprdr.c 2014-01-08 02:31:52.000000000 +1100 +@@ -0,0 +1,504 @@ ++/* ++ * Remmina - The GTK+ Remote Desktop Client ++ * Copyright (C) 2012-2012 Jean-Louis Dupond ++ * ++ * This program is free software; you can 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. ++ * ++ * This program 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 this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, ++ * Boston, MA 02111-1307, USA. ++ */ ++ ++#include "rdp_plugin.h" ++#include "rdp_cliprdr.h" ++ ++#include <freerdp/freerdp.h> ++#include <freerdp/utils/event.h> ++#include <freerdp/channels/channels.h> ++#include <freerdp/client/cliprdr.h> ++ ++ ++UINT32 remmina_rdp_cliprdr_get_format_from_gdkatom(GdkAtom atom) ++{ ++ gchar* name = gdk_atom_name(atom); ++ if (g_strcmp0("UTF8_STRING", name) == 0 || g_strcmp0("text/plain;charset=utf-8", name) == 0) ++ { ++ return CB_FORMAT_UNICODETEXT; ++ } ++ if (g_strcmp0("TEXT", name) == 0 || g_strcmp0("text/plain", name) == 0) ++ { ++ return CB_FORMAT_TEXT; ++ } ++ if (g_strcmp0("text/html", name) == 0) ++ { ++ return CB_FORMAT_HTML; ++ } ++ if (g_strcmp0("image/png", name) == 0) ++ { ++ return CB_FORMAT_PNG; ++ } ++ if (g_strcmp0("image/jpeg", name) == 0) ++ { ++ return CB_FORMAT_JPEG; ++ } ++ if (g_strcmp0("image/bmp", name) == 0) ++ { ++ return CB_FORMAT_DIB; ++ } ++ return CB_FORMAT_RAW; ++} ++ ++void remmina_rdp_cliprdr_get_target_types(UINT32** formats, UINT16* size, GdkAtom* types, int count) ++{ ++ int i; ++ *size = 1; ++ *formats = (UINT32*) malloc(sizeof(UINT32) * (count+1)); ++ ++ *formats[0] = CB_FORMAT_RAW; ++ for (i = 0; i < count; i++) ++ { ++ UINT32 format = remmina_rdp_cliprdr_get_format_from_gdkatom(types[i]); ++ if (format != CB_FORMAT_RAW) ++ { ++ (*formats)[*size] = format; ++ (*size)++; ++ } ++ } ++ ++ *formats = realloc(*formats, sizeof(UINT32) * (*size)); ++} ++ ++static UINT8* lf2crlf(UINT8* data, int* size) ++{ ++ UINT8 c; ++ UINT8* outbuf; ++ UINT8* out; ++ UINT8* in_end; ++ UINT8* in; ++ int out_size; ++ ++ out_size = (*size) * 2 + 1; ++ outbuf = (UINT8*) malloc(out_size); ++ out = outbuf; ++ in = data; ++ in_end = data + (*size); ++ ++ while (in < in_end) ++ { ++ c = *in++; ++ if (c == '\n') ++ { ++ *out++ = '\r'; ++ *out++ = '\n'; ++ } ++ else ++ { ++ *out++ = c; ++ } ++ } ++ ++ *out++ = 0; ++ *size = out - outbuf; ++ ++ return outbuf; ++} ++ ++static void crlf2lf(UINT8* data, int* size) ++{ ++ UINT8 c; ++ UINT8* out; ++ UINT8* in; ++ UINT8* in_end; ++ ++ out = data; ++ in = data; ++ in_end = data + (*size); ++ ++ while (in < in_end) ++ { ++ c = *in++; ++ ++ if (c != '\r') ++ *out++ = c; ++ } ++ ++ *size = out - data; ++} ++ ++void remmina_rdp_cliprdr_process_monitor_ready(RemminaProtocolWidget* gp, RDP_CB_MONITOR_READY_EVENT* event) ++{ ++ RemminaPluginRdpUiObject* ui; ++ ++ ui = g_new0(RemminaPluginRdpUiObject, 1); ++ ui->type = REMMINA_RDP_UI_CLIPBOARD; ++ ui->clipboard.type = REMMINA_RDP_UI_CLIPBOARD_FORMATLIST; ++ rf_queue_ui(gp, ui); ++} ++ ++void remmina_rdp_cliprdr_process_format_list(RemminaProtocolWidget* gp, RDP_CB_FORMAT_LIST_EVENT* event) ++{ ++ RemminaPluginRdpUiObject* ui; ++ int i; ++ GtkTargetList* list = gtk_target_list_new (NULL, 0); ++ ++ for (i = 0; i < event->num_formats; i++) ++ { ++ if (event->formats[i] == CB_FORMAT_UNICODETEXT) ++ { ++ GdkAtom atom = gdk_atom_intern("UTF8_STRING", TRUE); ++ gtk_target_list_add(list, atom, 0, CB_FORMAT_UNICODETEXT); ++ } ++ if (event->formats[i] == CB_FORMAT_TEXT) ++ { ++ GdkAtom atom = gdk_atom_intern("TEXT", TRUE); ++ gtk_target_list_add(list, atom, 0, CB_FORMAT_TEXT); ++ } ++ if (event->formats[i] == CB_FORMAT_DIB) ++ { ++ GdkAtom atom = gdk_atom_intern("image/bmp", TRUE); ++ gtk_target_list_add(list, atom, 0, CB_FORMAT_DIB); ++ } ++ if (event->formats[i] == CB_FORMAT_JPEG) ++ { ++ GdkAtom atom = gdk_atom_intern("image/jpeg", TRUE); ++ gtk_target_list_add(list, atom, 0, CB_FORMAT_JPEG); ++ } ++ if (event->formats[i] == CB_FORMAT_PNG) ++ { ++ GdkAtom atom = gdk_atom_intern("image/png", TRUE); ++ gtk_target_list_add(list, atom, 0, CB_FORMAT_PNG); ++ } ++ } ++ ++ ui = g_new0(RemminaPluginRdpUiObject, 1); ++ ui->type = REMMINA_RDP_UI_CLIPBOARD; ++ ui->clipboard.type = REMMINA_RDP_UI_CLIPBOARD_SET_DATA; ++ ui->clipboard.targetlist = list; ++ rf_queue_ui(gp, ui); ++} ++ ++void remmina_rdp_cliprdr_process_data_request(RemminaProtocolWidget* gp, RDP_CB_DATA_REQUEST_EVENT* event) ++{ ++ RemminaPluginRdpUiObject* ui; ++ ++ ui = g_new0(RemminaPluginRdpUiObject, 1); ++ ui->type = REMMINA_RDP_UI_CLIPBOARD; ++ ui->clipboard.type = REMMINA_RDP_UI_CLIPBOARD_GET_DATA; ++ ui->clipboard.format = event->format; ++ rf_queue_ui(gp, ui); ++} ++ ++void remmina_rdp_cliprdr_process_data_response(RemminaProtocolWidget* gp, RDP_CB_DATA_RESPONSE_EVENT* event) ++{ ++ UINT8* data; ++ size_t size; ++ rfContext* rfi = GET_DATA(gp); ++ GdkPixbufLoader *pixbuf; ++ gpointer output = NULL; ++ ++ data = event->data; ++ size = event->size; ++ ++ if (size > 0) ++ { ++ switch (rfi->format) ++ { ++ case CB_FORMAT_UNICODETEXT: ++ { ++ size = ConvertFromUnicode(CP_UTF8, 0, (WCHAR*)data, size / 2, (CHAR**)&data, 0, NULL, NULL); ++ crlf2lf(data, &size); ++ output = data; ++ break; ++ } ++ ++ case CB_FORMAT_TEXT: ++ case CB_FORMAT_HTML: ++ { ++ crlf2lf(data, &size); ++ output = data; ++ break; ++ } ++ ++ case CB_FORMAT_DIB: ++ { ++ wStream* s; ++ UINT16 bpp; ++ UINT32 offset; ++ UINT32 ncolors; ++ ++ s = Stream_New(data, size); ++ Stream_Seek(s, 14); ++ Stream_Read_UINT16(s, bpp); ++ Stream_Read_UINT32(s, ncolors); ++ offset = 14 + 40 + (bpp <= 8 ? (ncolors == 0 ? (1 << bpp) : ncolors) * 4 : 0); ++ Stream_Free(s, TRUE); ++ ++ s = Stream_New(NULL, 14 + size); ++ Stream_Write_UINT8(s, 'B'); ++ Stream_Write_UINT8(s, 'M'); ++ Stream_Write_UINT32(s, 14 + size); ++ Stream_Write_UINT32(s, 0); ++ Stream_Write_UINT32(s, offset); ++ Stream_Write(s, data, size); ++ ++ data = Stream_Buffer(s); ++ size = Stream_Length(s); ++ pixbuf = gdk_pixbuf_loader_new(); ++ gdk_pixbuf_loader_write(pixbuf, data, size, NULL); ++ Stream_Free(s, TRUE); ++ output = g_object_ref(gdk_pixbuf_loader_get_pixbuf(pixbuf)); ++ gdk_pixbuf_loader_close(pixbuf, NULL); ++ g_object_unref(pixbuf); ++ break; ++ } ++ ++ case CB_FORMAT_PNG: ++ case CB_FORMAT_JPEG: ++ { ++ pixbuf = gdk_pixbuf_loader_new(); ++ gdk_pixbuf_loader_write(pixbuf, data, size, NULL); ++ output = g_object_ref(gdk_pixbuf_loader_get_pixbuf(pixbuf)); ++ gdk_pixbuf_loader_close(pixbuf, NULL); ++ g_object_unref(pixbuf); ++ break; ++ } ++ } ++ } ++ g_async_queue_push(rfi->clipboard_queue, output); ++} ++ ++void remmina_rdp_channel_cliprdr_process(RemminaProtocolWidget* gp, wMessage* event) ++{ ++ switch (GetMessageType(event->id)) ++ { ++ case CliprdrChannel_MonitorReady: ++ remmina_rdp_cliprdr_process_monitor_ready(gp, (RDP_CB_MONITOR_READY_EVENT*) event); ++ break; ++ ++ case CliprdrChannel_FormatList: ++ remmina_rdp_cliprdr_process_format_list(gp, (RDP_CB_FORMAT_LIST_EVENT*) event); ++ break; ++ ++ case CliprdrChannel_DataRequest: ++ remmina_rdp_cliprdr_process_data_request(gp, (RDP_CB_DATA_REQUEST_EVENT*) event); ++ break; ++ ++ case CliprdrChannel_DataResponse: ++ remmina_rdp_cliprdr_process_data_response(gp, (RDP_CB_DATA_RESPONSE_EVENT*) event); ++ break; ++ } ++} ++ ++void remmina_rdp_cliprdr_request_data(GtkClipboard *clipboard, GtkSelectionData *selection_data, guint info, RemminaProtocolWidget* gp) ++{ ++ GdkAtom target; ++ gpointer data; ++ RDP_CB_DATA_REQUEST_EVENT* event; ++ rfContext* rfi = GET_DATA(gp); ++ ++ target = gtk_selection_data_get_target(selection_data); ++ rfi->format = remmina_rdp_cliprdr_get_format_from_gdkatom(target); ++ rfi->clipboard_queue = g_async_queue_new(); ++ ++ /* Request Clipboard data of the server */ ++ event = (RDP_CB_DATA_REQUEST_EVENT*) ++ freerdp_event_new(CliprdrChannel_Class, CliprdrChannel_DataRequest, NULL, NULL); ++ event->format = rfi->format; ++ freerdp_channels_send_event(rfi->channels, (wMessage*) event); ++ ++ data = g_async_queue_timeout_pop(rfi->clipboard_queue, 1000000); ++ if (data != NULL) ++ { ++ if (info == CB_FORMAT_PNG || info == CB_FORMAT_DIB || info == CB_FORMAT_JPEG) ++ { ++ gtk_selection_data_set_pixbuf(selection_data, data); ++ g_object_unref(data); ++ } ++ else ++ { ++ gtk_selection_data_set_text(selection_data, data, -1); ++ } ++ } ++} ++ ++void remmina_rdp_cliprdr_empty_clipboard(GtkClipboard *clipboard, RemminaProtocolWidget* gp) ++{ ++ /* No need to do anything here */ ++} ++ ++int remmina_rdp_cliprdr_send_format_list(RemminaProtocolWidget* gp, RemminaPluginRdpUiObject* ui) ++{ ++ GtkClipboard* clipboard; ++ GdkAtom* targets; ++ gboolean result = 0; ++ gint count; ++ RDP_CB_FORMAT_LIST_EVENT* event; ++ ++ rfContext* rfi = GET_DATA(gp); ++ ++ if (rfi->clipboard_wait) ++ { ++ rfi->clipboard_wait = FALSE; ++ return 0; ++ } ++ ++ /* Lets see if we have something in our clipboard */ ++ clipboard = gtk_widget_get_clipboard(rfi->drawing_area, GDK_SELECTION_CLIPBOARD); ++ if (clipboard) ++ { ++ result = gtk_clipboard_wait_for_targets(clipboard, &targets, &count); ++ } ++ ++ if (!result) ++ return 0; ++ ++ event = (RDP_CB_FORMAT_LIST_EVENT*) ++ freerdp_event_new(CliprdrChannel_Class, CliprdrChannel_FormatList, NULL, NULL); ++ ++ remmina_rdp_cliprdr_get_target_types(&event->formats, &event->num_formats, targets, count); ++ g_free(targets); ++ ++ return freerdp_channels_send_event(rfi->channels, (wMessage*) event); ++} ++ ++void remmina_rdp_cliprdr_get_clipboard_data(RemminaProtocolWidget* gp, RemminaPluginRdpUiObject* ui) ++{ ++ RDP_CB_DATA_RESPONSE_EVENT* event; ++ GtkClipboard* clipboard; ++ UINT8* inbuf = NULL; ++ UINT8* outbuf = NULL; ++ GdkPixbuf *image = NULL; ++ int size = 0; ++ ++ rfContext* rfi = GET_DATA(gp); ++ ++ clipboard = gtk_widget_get_clipboard(rfi->drawing_area, GDK_SELECTION_CLIPBOARD); ++ if (clipboard) ++ { ++ switch (ui->clipboard.format) ++ { ++ case CB_FORMAT_TEXT: ++ case CB_FORMAT_UNICODETEXT: ++ case CB_FORMAT_HTML: ++ { ++ inbuf = (UINT8*)gtk_clipboard_wait_for_text(clipboard); ++ break; ++ } ++ ++ case CB_FORMAT_PNG: ++ case CB_FORMAT_JPEG: ++ case CB_FORMAT_DIB: ++ { ++ image = gtk_clipboard_wait_for_image(clipboard); ++ break; ++ } ++ } ++ } ++ ++ /* No data received, send nothing */ ++ if (inbuf != NULL || image != NULL) ++ { ++ switch (ui->clipboard.format) ++ { ++ case CB_FORMAT_TEXT: ++ case CB_FORMAT_HTML: ++ { ++ size = strlen((char*)inbuf); ++ outbuf = lf2crlf(inbuf, &size); ++ break; ++ } ++ case CB_FORMAT_UNICODETEXT: ++ { ++ size = strlen((char*)inbuf); ++ inbuf = lf2crlf(inbuf, &size); ++ size = (ConvertToUnicode(CP_UTF8, 0, (CHAR*)inbuf, -1, (WCHAR**)&outbuf, 0) + 1) * 2; ++ g_free(inbuf); ++ break; ++ } ++ case CB_FORMAT_PNG: ++ { ++ gchar* data; ++ gsize buffersize; ++ gdk_pixbuf_save_to_buffer(image, &data, &buffersize, "png", NULL, NULL); ++ outbuf = (UINT8*) malloc(buffersize); ++ memcpy(outbuf, data, buffersize); ++ size = buffersize; ++ g_object_unref(image); ++ break; ++ } ++ case CB_FORMAT_JPEG: ++ { ++ gchar* data; ++ gsize buffersize; ++ gdk_pixbuf_save_to_buffer(image, &data, &buffersize, "jpeg", NULL, NULL); ++ outbuf = (UINT8*) malloc(buffersize); ++ memcpy(outbuf, data, buffersize); ++ size = buffersize; ++ g_object_unref(image); ++ break; ++ } ++ case CB_FORMAT_DIB: ++ { ++ gchar* data; ++ gsize buffersize; ++ gdk_pixbuf_save_to_buffer(image, &data, &buffersize, "bmp", NULL, NULL); ++ size = buffersize - 14; ++ outbuf = (UINT8*) malloc(size); ++ memcpy(outbuf, data + 14, size); ++ g_object_unref(image); ++ break; ++ } ++ } ++ } ++ event = (RDP_CB_DATA_RESPONSE_EVENT*) ++ freerdp_event_new(CliprdrChannel_Class, CliprdrChannel_DataResponse, NULL, NULL); ++ event->data = outbuf; ++ event->size = size; ++ freerdp_channels_send_event(rfi->channels, (wMessage*) event); ++} ++ ++void remmina_rdp_cliprdr_set_clipboard_data(RemminaProtocolWidget* gp, RemminaPluginRdpUiObject* ui) ++{ ++ GtkClipboard* clipboard; ++ GtkTargetEntry* targets; ++ gint n_targets; ++ rfContext* rfi = GET_DATA(gp); ++ ++ targets = gtk_target_table_new_from_list(ui->clipboard.targetlist, &n_targets); ++ clipboard = gtk_widget_get_clipboard(rfi->drawing_area, GDK_SELECTION_CLIPBOARD); ++ if (clipboard && targets) ++ { ++ rfi->clipboard_wait = TRUE; ++ gtk_clipboard_set_with_owner(clipboard, targets, n_targets, ++ (GtkClipboardGetFunc) remmina_rdp_cliprdr_request_data, ++ (GtkClipboardClearFunc) remmina_rdp_cliprdr_empty_clipboard, G_OBJECT(gp)); ++ gtk_target_table_free(targets, n_targets); ++ } ++} ++ ++void remmina_rdp_event_process_clipboard(RemminaProtocolWidget* gp, RemminaPluginRdpUiObject* ui) ++{ ++ switch (ui->clipboard.type) ++ { ++ case REMMINA_RDP_UI_CLIPBOARD_FORMATLIST: ++ remmina_rdp_cliprdr_send_format_list(gp, ui); ++ break; ++ ++ case REMMINA_RDP_UI_CLIPBOARD_GET_DATA: ++ remmina_rdp_cliprdr_get_clipboard_data(gp, ui); ++ break; ++ ++ case REMMINA_RDP_UI_CLIPBOARD_SET_DATA: ++ remmina_rdp_cliprdr_set_clipboard_data(gp, ui); ++ break; ++ } ++} +diff -urN remmina-plugins/rdp/rdp_cliprdr.h remmina-plugins/rdp/rdp_cliprdr.h +--- remmina-plugins/rdp/rdp_cliprdr.h 1970-01-01 10:00:00.000000000 +1000 ++++ remmina-plugins/rdp/rdp_cliprdr.h 2014-01-08 02:31:52.000000000 +1100 +@@ -0,0 +1,32 @@ ++/* ++ * Remmina - The GTK+ Remote Desktop Client ++ * Copyright (C) 2010-2011 Vic Lee ++ * Copyright (C) 2012-2012 Jean-Louis Dupond ++ * ++ * This program is free software; you can 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. ++ * ++ * This program 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 this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, ++ * Boston, MA 02111-1307, USA. ++ */ ++ ++#ifndef __REMMINA_RDP_CLIPRDR_H__ ++#define __REMMINA_RDP_CLIPRDR_H__ ++ ++G_BEGIN_DECLS ++ ++void remmina_rdp_channel_cliprdr_process(RemminaProtocolWidget* gp, wMessage* event); ++void remmina_rdp_event_process_clipboard(RemminaProtocolWidget* gp, RemminaPluginRdpUiObject* ui); ++ ++G_END_DECLS ++ ++#endif +diff -urN remmina-plugins/rdp/rdp_event.c remmina-plugins/rdp/rdp_event.c +--- remmina-plugins/rdp/rdp_event.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/rdp/rdp_event.c 2014-01-08 02:31:52.000000000 +1100 +@@ -16,18 +16,56 @@ + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place, Suite 330, ++ * Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307, USA. + */ + +-/* X11 drawings were ported from xfreerdp */ +- + #include "rdp_plugin.h" + #include "rdp_event.h" + #include "rdp_gdi.h" ++#include "rdp_cliprdr.h" + #include <gdk/gdkkeysyms.h> + #include <cairo/cairo-xlib.h> +-#include <freerdp/kbd/kbd.h> ++#include <freerdp/locale/keyboard.h> ++ ++static void remmina_rdp_event_on_focus_in(GtkWidget* widget, GdkEventKey* event, RemminaProtocolWidget* gp) ++{ ++ rfContext* rfi; ++ rdpInput* input; ++ GdkModifierType state; ++#if GTK_VERSION == 3 ++ GdkDeviceManager *manager; ++ GdkDevice *keyboard = NULL; ++#endif ++ ++ rfi = GET_DATA(gp); ++ input = rfi->instance->input; ++ UINT32 toggle_keys_state = 0; ++ ++#if GTK_VERSION == 3 ++ manager = gdk_display_get_device_manager(gdk_display_get_default()); ++ keyboard = gdk_device_manager_get_client_pointer(manager); ++ gdk_window_get_device_position(gdk_get_default_root_window(), keyboard, NULL, NULL, &state); ++#else ++ gdk_window_get_pointer(gdk_get_default_root_window(), NULL, NULL, &state); ++#endif ++ ++ if (state & GDK_LOCK_MASK) ++ { ++ toggle_keys_state |= KBD_SYNC_CAPS_LOCK; ++ } ++ if (state & GDK_MOD2_MASK) ++ { ++ toggle_keys_state |= KBD_SYNC_NUM_LOCK; ++ } ++ if (state & GDK_MOD5_MASK) ++ { ++ toggle_keys_state |= KBD_SYNC_SCROLL_LOCK; ++ } ++ ++ input->SynchronizeEvent(input, toggle_keys_state); ++ input->KeyboardEvent(input, KBD_FLAGS_RELEASE, 0x0F); ++} + + static void remmina_rdp_event_event_push(RemminaProtocolWidget* gp, const RemminaPluginRdpEvent* e) + { +@@ -93,7 +131,7 @@ + + rfi = GET_DATA(gp); + +- if (!rfi->rgb_surface) ++ if (!rfi->surface) + return; + + width = remmina_plugin_service->protocol_plugin_get_width(gp); +@@ -144,12 +182,6 @@ + + rfi = GET_DATA(gp); + +- if (rfi->sw_gdi) +- { +- XPutImage(rfi->display, rfi->primary, rfi->gc, rfi->image, x, y, x, y, w, h); +- XCopyArea(rfi->display, rfi->primary, rfi->rgb_surface, rfi->gc, x, y, w, h, x, y); +- } +- + if (remmina_plugin_service->protocol_plugin_get_scale(gp)) + remmina_rdp_event_scale_area(gp, &x, &y, &w, &h); + +@@ -162,12 +194,6 @@ + + rfi = GET_DATA(gp); + +- if (rfi->sw_gdi) +- { +- XPutImage(rfi->display, rfi->primary, rfi->gc, rfi->image, x, y, x, y, w, h); +- XCopyArea(rfi->display, rfi->primary, rfi->rgb_surface, rfi->gc, x, y, w, h, x, y); +- } +- + if (remmina_plugin_service->protocol_plugin_get_scale(gp)) + remmina_rdp_event_scale_area(gp, &x, &y, &w, &h); + +@@ -241,7 +267,7 @@ + + rfi = GET_DATA(gp); + +- if (!rfi->rgb_cairo_surface) ++ if (!rfi->surface) + return FALSE; + + scale = remmina_plugin_service->protocol_plugin_get_scale(gp); +@@ -252,19 +278,18 @@ + + context = gdk_cairo_create(gtk_widget_get_window (rfi->drawing_area)); + cairo_rectangle(context, x, y, event->area.width, event->area.height); +-#else +- cairo_rectangle(context, 0, 0, gtk_widget_get_allocated_width(widget), +- gtk_widget_get_allocated_height(widget)); + #endif + + if (scale) + cairo_scale(context, rfi->scale_x, rfi->scale_y); + +- cairo_set_source_surface(context, rfi->rgb_cairo_surface, 0, 0); +- cairo_fill(context); ++ cairo_set_source_surface(context, rfi->surface, 0, 0); + + #if GTK_VERSION == 2 ++ cairo_fill(context); + cairo_destroy(context); ++#else ++ cairo_paint(context); + #endif + + return TRUE; +@@ -286,7 +311,7 @@ + return FALSE; + } + +-static void remmina_rdp_event_translate_pos(RemminaProtocolWidget* gp, int ix, int iy, uint16* ox, uint16* oy) ++static void remmina_rdp_event_translate_pos(RemminaProtocolWidget* gp, int ix, int iy, UINT16* ox, UINT16* oy) + { + rfContext* rfi; + +@@ -294,13 +319,13 @@ + + if ((rfi->scale) && (rfi->scale_width >= 1) && (rfi->scale_height >= 1)) + { +- *ox = (uint16) (ix * remmina_plugin_service->protocol_plugin_get_width(gp) / rfi->scale_width); +- *oy = (uint16) (iy * remmina_plugin_service->protocol_plugin_get_height(gp) / rfi->scale_height); ++ *ox = (UINT16) (ix * remmina_plugin_service->protocol_plugin_get_width(gp) / rfi->scale_width); ++ *oy = (UINT16) (iy * remmina_plugin_service->protocol_plugin_get_height(gp) / rfi->scale_height); + } + else + { +- *ox = (uint16) ix; +- *oy = (uint16) iy; ++ *ox = (UINT16) ix; ++ *oy = (UINT16) iy; + } + } + +@@ -378,6 +403,17 @@ + flag = PTR_FLAGS_WHEEL | PTR_FLAGS_WHEEL_NEGATIVE | 0x0088; + break; + ++#ifdef GDK_SCROLL_SMOOTH ++ case GDK_SCROLL_SMOOTH: ++ if (event->delta_y < 0) ++ flag = PTR_FLAGS_WHEEL | 0x0078; ++ if (event->delta_y > 0) ++ flag = PTR_FLAGS_WHEEL | PTR_FLAGS_WHEEL_NEGATIVE | 0x0088; ++ if (!flag) ++ return FALSE; ++ break; ++#endif ++ + default: + return FALSE; + } +@@ -391,10 +427,11 @@ + + static gboolean remmina_rdp_event_on_key(GtkWidget* widget, GdkEventKey* event, RemminaProtocolWidget* gp) + { +- Display* display; +- KeyCode cooked_keycode; ++ GdkDisplay* display; ++ guint16 cooked_keycode; + rfContext* rfi; + RemminaPluginRdpEvent rdp_event; ++ DWORD scancode; + + rfi = GET_DATA(gp); + rdp_event.type = REMMINA_RDP_EVENT_TYPE_SCANCODE; +@@ -421,17 +458,22 @@ + default: + if (!rfi->use_client_keymap) + { +- rdp_event.key_event.key_code = freerdp_kbd_get_scancode_by_keycode(event->hardware_keycode, &rdp_event.key_event.extended); +- remmina_plugin_service->log_printf("[RDP]keyval=%04X keycode=%i scancode=%i extended=%i\n", +- event->keyval, event->hardware_keycode, rdp_event.key_event.key_code, &rdp_event.key_event.extended); ++ scancode = freerdp_keyboard_get_rdp_scancode_from_x11_keycode(event->hardware_keycode); ++ rdp_event.key_event.key_code = scancode & 0xFF; ++ rdp_event.key_event.extended = scancode & 0x100; ++ remmina_plugin_service->log_printf("[RDP]keyval=%02X keycode=%02X scancode=%02X extended=%s\n", ++ event->keyval, event->hardware_keycode, rdp_event.key_event.key_code, rdp_event.key_event.extended ? "true" : "false"); + } + else + { +- display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default()); +- cooked_keycode = XKeysymToKeycode(display, XKeycodeToKeysym(display, event->hardware_keycode, 0)); +- rdp_event.key_event.key_code = freerdp_kbd_get_scancode_by_keycode(cooked_keycode, &rdp_event.key_event.extended); +- remmina_plugin_service->log_printf("[RDP]keyval=%04X raw_keycode=%i cooked_keycode=%i scancode=%i extended=%i\n", +- event->keyval, event->hardware_keycode, cooked_keycode, rdp_event.key_event.key_code, &rdp_event.key_event.extended); ++ //TODO: Port to GDK functions ++ display = gdk_display_get_default(); ++ cooked_keycode = XKeysymToKeycode(GDK_DISPLAY_XDISPLAY(display), XKeycodeToKeysym(GDK_DISPLAY_XDISPLAY(display), event->hardware_keycode, 0)); ++ scancode = freerdp_keyboard_get_rdp_scancode_from_x11_keycode(cooked_keycode); ++ rdp_event.key_event.key_code = scancode & 0xFF; ++ rdp_event.key_event.extended = scancode & 0x100; ++ remmina_plugin_service->log_printf("[RDP]keyval=%02X raw_keycode=%02X cooked_keycode=%02X scancode=%02X extended=%s\n", ++ event->keyval, event->hardware_keycode, cooked_keycode, rdp_event.key_event.key_code, rdp_event.key_event.extended ? "true" : "false"); + } + + if (rdp_event.key_event.key_code) +@@ -452,15 +494,24 @@ + return TRUE; + } + ++gboolean remmina_rdp_event_on_clipboard(GtkClipboard *clipboard, GdkEvent *event, RemminaProtocolWidget *gp) ++{ ++ RemminaPluginRdpUiObject* ui; ++ ++ ui = g_new0(RemminaPluginRdpUiObject, 1); ++ ui->type = REMMINA_RDP_UI_CLIPBOARD; ++ ui->clipboard.type = REMMINA_RDP_UI_CLIPBOARD_FORMATLIST; ++ rf_queue_ui(gp, ui); ++ ++ return TRUE; ++} ++ + void remmina_rdp_event_init(RemminaProtocolWidget* gp) + { +- gint n; +- gint i; + gchar* s; + gint flags; +- XPixmapFormatValues* pf; +- XPixmapFormatValues* pfs; + rfContext* rfi; ++ GtkClipboard* clipboard; + + rfi = GET_DATA(gp); + rfi->drawing_area = gtk_drawing_area_new(); +@@ -468,7 +519,7 @@ + gtk_container_add(GTK_CONTAINER(gp), rfi->drawing_area); + + gtk_widget_add_events(rfi->drawing_area, GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK +- | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK); ++ | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_SCROLL_MASK | GDK_FOCUS_CHANGE_MASK); + gtk_widget_set_can_focus(rfi->drawing_area, TRUE); + + remmina_plugin_service->protocol_plugin_register_hostkey(gp, rfi->drawing_area); +@@ -498,6 +549,15 @@ + G_CALLBACK(remmina_rdp_event_on_key), gp); + g_signal_connect(G_OBJECT(rfi->drawing_area), "key-release-event", + G_CALLBACK(remmina_rdp_event_on_key), gp); ++ g_signal_connect(G_OBJECT(rfi->drawing_area), "focus-in-event", ++ G_CALLBACK(remmina_rdp_event_on_focus_in), gp); ++ ++ RemminaFile* remminafile = remmina_plugin_service->protocol_plugin_get_file(gp); ++ if (!remmina_plugin_service->file_get_int(remminafile, "disableclipboard", FALSE)) ++ { ++ clipboard = gtk_widget_get_clipboard(rfi->drawing_area, GDK_SELECTION_CLIPBOARD); ++ rfi->clipboard_handler = g_signal_connect(clipboard, "owner-change", G_CALLBACK(remmina_rdp_event_on_clipboard), gp); ++ } + + rfi->pressed_keys = g_array_new(FALSE, TRUE, sizeof (gint)); + rfi->event_queue = g_async_queue_new_full(g_free); +@@ -517,27 +577,8 @@ + + rfi->object_table = g_hash_table_new_full(NULL, NULL, NULL, g_free); + +- rfi->display = GDK_DISPLAY_XDISPLAY(gdk_display_get_default()); +- rfi->depth = DefaultDepth(rfi->display, DefaultScreen(rfi->display)); +- rfi->visual = GDK_VISUAL_XVISUAL(gdk_visual_get_best_with_depth(rfi->depth)); +- pfs = XListPixmapFormats(rfi->display, &n); +- +- if (pfs) +- { +- for (i = 0; i < n; i++) +- { +- pf = pfs + i; +- +- if (pf->depth == rfi->depth) +- { +- rfi->scanline_pad = pf->scanline_pad; +- rfi->bpp = pf->bits_per_pixel; +- break; +- } +- } +- +- XFree(pfs); +- } ++ rfi->display = gdk_display_get_default(); ++ rfi->bpp = gdk_visual_get_best_depth(); + } + + void remmina_rdp_event_uninit(RemminaProtocolWidget* gp) +@@ -547,6 +588,13 @@ + + rfi = GET_DATA(gp); + ++ ++ /* unregister the clipboard monitor */ ++ if (rfi->clipboard_handler) ++ { ++ g_signal_handler_disconnect(G_OBJECT(gtk_widget_get_clipboard(rfi->drawing_area, GDK_SELECTION_CLIPBOARD)), rfi->clipboard_handler); ++ rfi->clipboard_handler = 0; ++ } + if (rfi->scale_handler) + { + g_source_remove(rfi->scale_handler); +@@ -561,36 +609,10 @@ + { + rf_object_free(gp, ui); + } +- +- if (rfi->gc) +- { +- XFreeGC(rfi->display, rfi->gc); +- rfi->gc = 0; +- } +- if (rfi->gc_default) +- { +- XFreeGC(rfi->display, rfi->gc_default); +- rfi->gc_default = 0; +- } +- if (rfi->rgb_cairo_surface) +- { +- cairo_surface_destroy(rfi->rgb_cairo_surface); +- rfi->rgb_cairo_surface = NULL; +- } +- if (rfi->rgb_surface) +- { +- XFreePixmap(rfi->display, rfi->rgb_surface); +- rfi->rgb_surface = 0; +- } +- if (rfi->gc_mono) ++ if (rfi->surface) + { +- XFreeGC(rfi->display, rfi->gc_mono); +- rfi->gc_mono = 0; +- } +- if (rfi->bitmap_mono) +- { +- XFreePixmap(rfi->display, rfi->bitmap_mono); +- rfi->bitmap_mono = 0; ++ cairo_surface_destroy(rfi->surface); ++ rfi->surface = NULL; + } + + g_hash_table_destroy(rfi->object_table); +@@ -633,230 +655,78 @@ + remmina_plugin_service->protocol_plugin_emit_signal(gp, "update-align"); + } + +-static uint8 remmina_rdp_event_rop2_map[] = +-{ +- GXclear, /* 0 */ +- GXnor, /* DPon */ +- GXandInverted, /* DPna */ +- GXcopyInverted, /* Pn */ +- GXandReverse, /* PDna */ +- GXinvert, /* Dn */ +- GXxor, /* DPx */ +- GXnand, /* DPan */ +- GXand, /* DPa */ +- GXequiv, /* DPxn */ +- GXnoop, /* D */ +- GXorInverted, /* DPno */ +- GXcopy, /* P */ +- GXorReverse, /* PDno */ +- GXor, /* DPo */ +- GXset /* 1 */ +-}; +- +-static void remmina_rdp_event_set_rop2(rfContext* rfi, gint rop2) +-{ +- if ((rop2 < 0x01) || (rop2 > 0x10)) +- { +- remmina_plugin_service->log_printf("[RDP]unknown rop2 0x%x", rop2); +- } +- else +- { +- XSetFunction(rfi->display, rfi->gc, remmina_rdp_event_rop2_map[rop2 - 1]); +- } +-} +- +-static void remmina_rdp_event_set_rop3(rfContext* rfi, gint rop3) +-{ +- switch (rop3) +- { +- case 0x00: /* 0 - 0 */ +- XSetFunction(rfi->display, rfi->gc, GXclear); +- break; +- case 0x05: /* ~(P | D) - DPon */ +- XSetFunction(rfi->display, rfi->gc, GXnor); +- break; +- case 0x0a: /* ~P & D - DPna */ +- XSetFunction(rfi->display, rfi->gc, GXandInverted); +- break; +- case 0x0f: /* ~P - Pn */ +- XSetFunction(rfi->display, rfi->gc, GXcopyInverted); +- break; +- case 0x11: /* ~(S | D) - DSon */ +- XSetFunction(rfi->display, rfi->gc, GXnor); +- break; +- case 0x22: /* ~S & D - DSna */ +- XSetFunction(rfi->display, rfi->gc, GXandInverted); +- break; +- case 0x33: /* ~S - Sn */ +- XSetFunction(rfi->display, rfi->gc, GXcopyInverted); +- break; +- case 0x44: /* S & ~D - SDna */ +- XSetFunction(rfi->display, rfi->gc, GXandReverse); +- break; +- case 0x50: /* P & ~D - PDna */ +- XSetFunction(rfi->display, rfi->gc, GXandReverse); +- break; +- case 0x55: /* ~D - Dn */ +- XSetFunction(rfi->display, rfi->gc, GXinvert); +- break; +- case 0x5a: /* D ^ P - DPx */ +- XSetFunction(rfi->display, rfi->gc, GXxor); +- break; +- case 0x5f: /* ~(P & D) - DPan */ +- XSetFunction(rfi->display, rfi->gc, GXnand); +- break; +- case 0x66: /* D ^ S - DSx */ +- XSetFunction(rfi->display, rfi->gc, GXxor); +- break; +- case 0x77: /* ~(S & D) - DSan */ +- XSetFunction(rfi->display, rfi->gc, GXnand); +- break; +- case 0x88: /* D & S - DSa */ +- XSetFunction(rfi->display, rfi->gc, GXand); +- break; +- case 0x99: /* ~(S ^ D) - DSxn */ +- XSetFunction(rfi->display, rfi->gc, GXequiv); +- break; +- case 0xa0: /* P & D - DPa */ +- XSetFunction(rfi->display, rfi->gc, GXand); +- break; +- case 0xa5: /* ~(P ^ D) - PDxn */ +- XSetFunction(rfi->display, rfi->gc, GXequiv); +- break; +- case 0xaa: /* D - D */ +- XSetFunction(rfi->display, rfi->gc, GXnoop); +- break; +- case 0xaf: /* ~P | D - DPno */ +- XSetFunction(rfi->display, rfi->gc, GXorInverted); +- break; +- case 0xbb: /* ~S | D - DSno */ +- XSetFunction(rfi->display, rfi->gc, GXorInverted); +- break; +- case 0xcc: /* S - S */ +- XSetFunction(rfi->display, rfi->gc, GXcopy); +- break; +- case 0xdd: /* S | ~D - SDno */ +- XSetFunction(rfi->display, rfi->gc, GXorReverse); +- break; +- case 0xee: /* D | S - DSo */ +- XSetFunction(rfi->display, rfi->gc, GXor); +- break; +- case 0xf0: /* P - P */ +- XSetFunction(rfi->display, rfi->gc, GXcopy); +- break; +- case 0xf5: /* P | ~D - PDno */ +- XSetFunction(rfi->display, rfi->gc, GXorReverse); +- break; +- case 0xfa: /* P | D - DPo */ +- XSetFunction(rfi->display, rfi->gc, GXor); +- break; +- case 0xff: /* 1 - 1 */ +- XSetFunction(rfi->display, rfi->gc, GXset); +- break; +- default: +- remmina_plugin_service->log_printf("[RDP]unknown rop3 0x%x", rop3); +- break; +- } +-} +- +-static void remmina_rdp_event_insert_drawable(rfContext* rfi, guint object_id, Drawable obj) +-{ +- Drawable* p; +- +- p = g_new(Drawable, 1); +- *p = obj; +- g_hash_table_insert(rfi->object_table, GINT_TO_POINTER(object_id), p); +-} +- +-static Drawable remmina_rdp_event_get_drawable(rfContext* rfi, guint object_id) +-{ +- Drawable* p; +- +- p = (Drawable*) g_hash_table_lookup(rfi->object_table, GINT_TO_POINTER(object_id)); +- +- if (!p) +- return 0; +- +- return *p; +-} +- + static void remmina_rdp_event_connected(RemminaProtocolWidget* gp, RemminaPluginRdpUiObject* ui) + { + rfContext* rfi; ++ int stride; + + rfi = GET_DATA(gp); + + gtk_widget_realize(rfi->drawing_area); + +- rfi->drawable = GDK_WINDOW_XID(gtk_widget_get_window(rfi->drawing_area)); +- +- rfi->rgb_surface = XCreatePixmap(rfi->display, rfi->drawable, +- rfi->settings->width, rfi->settings->height, rfi->depth); +- +- rfi->rgb_cairo_surface = cairo_xlib_surface_create(rfi->display, +- rfi->rgb_surface, rfi->visual, rfi->width, rfi->height); +- +- rfi->drw_surface = rfi->rgb_surface; ++ stride = cairo_format_stride_for_width(rfi->cairo_format, rfi->width); ++ rfi->surface = cairo_image_surface_create_for_data((unsigned char*) rfi->primary_buffer, rfi->cairo_format, rfi->width, rfi->height, stride); ++ gtk_widget_queue_draw_area(rfi->drawing_area, 0, 0, rfi->width, rfi->height); + ++ if (rfi->clipboard_handler) ++ { ++ remmina_rdp_event_on_clipboard(NULL, NULL, gp); ++ } + remmina_rdp_event_update_scale(gp); + } + +-static void remmina_rdp_event_rfx(RemminaProtocolWidget* gp, RemminaPluginRdpUiObject* ui) ++static void remmina_rdp_event_create_cursor(RemminaProtocolWidget* gp, RemminaPluginRdpUiObject* ui) + { +- XImage* image; +- gint i, tx, ty; +- RFX_MESSAGE* message; +- rfContext* rfi; +- +- rfi = GET_DATA(gp); +- message = ui->rfx.message; +- +- XSetFunction(rfi->display, rfi->gc, GXcopy); +- XSetFillStyle(rfi->display, rfi->gc, FillSolid); ++ cairo_surface_t* surface; ++ GdkPixbuf* pixbuf; ++ rfContext* rfi = GET_DATA(gp); ++ rdpPointer* pointer = (rdpPointer*)ui->cursor.pointer; ++ UINT8* data = malloc(pointer->width * pointer->height * 4); + +- XSetClipRectangles(rfi->display, rfi->gc, ui->rfx.left, ui->rfx.top, +- (XRectangle*) message->rects, message->num_rects, YXBanded); +- +- /* Draw the tiles to primary surface, each is 64x64. */ +- for (i = 0; i < message->num_tiles; i++) +- { +- image = XCreateImage(rfi->display, rfi->visual, 24, ZPixmap, 0, +- (char*) message->tiles[i]->data, 64, 64, 32, 0); +- +- tx = message->tiles[i]->x + ui->rfx.left; +- ty = message->tiles[i]->y + ui->rfx.top; +- +- XPutImage(rfi->display, rfi->rgb_surface, rfi->gc, image, 0, 0, tx, ty, 64, 64); +- XFree(image); ++ freerdp_alpha_cursor_convert(data, pointer->xorMaskData, pointer->andMaskData, pointer->width, pointer->height, pointer->xorBpp, rfi->clrconv); ++ surface = cairo_image_surface_create_for_data(data, CAIRO_FORMAT_ARGB32, pointer->width, pointer->height, cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, pointer->width)); ++ pixbuf = gdk_pixbuf_get_from_surface(surface, 0, 0, pointer->width, pointer->height); ++ cairo_surface_destroy(surface); ++ ((rfPointer*)ui->cursor.pointer)->cursor = gdk_cursor_new_from_pixbuf(rfi->display, pixbuf, pointer->xPos, pointer->yPos); ++} + +- remmina_rdp_event_update_rect(gp, tx, ty, message->rects[i].width, message->rects[i].height); +- } ++static void remmina_rdp_event_free_cursor(RemminaProtocolWidget* gp, RemminaPluginRdpUiObject* ui) ++{ ++ rfContext* rfi = GET_DATA(gp); + +- XSetClipMask(rfi->display, rfi->gc, None); ++ g_mutex_lock(rfi->gmutex); ++ g_object_unref(ui->cursor.pointer->cursor); ++ ui->cursor.pointer->cursor = NULL; ++ g_cond_signal(rfi->gcond); ++ g_mutex_unlock(rfi->gmutex); + } + +-static void remmina_rdp_event_nocodec(RemminaProtocolWidget* gp, RemminaPluginRdpUiObject* ui) ++static void remmina_rdp_event_cursor(RemminaProtocolWidget* gp, RemminaPluginRdpUiObject* ui) + { +- XImage* image; +- rfContext* rfi; +- +- rfi = GET_DATA(gp); ++ rfContext* rfi = GET_DATA(gp); + +- XSetFunction(rfi->display, rfi->gc, GXcopy); +- XSetFillStyle(rfi->display, rfi->gc, FillSolid); ++ switch (ui->cursor.type) ++ { ++ case REMMINA_RDP_POINTER_NEW: ++ remmina_rdp_event_create_cursor(gp, ui); ++ break; + +- image = XCreateImage(rfi->display, rfi->visual, 24, ZPixmap, 0, +- (char*) ui->nocodec.bitmap, ui->nocodec.width, ui->nocodec.height, 32, 0); ++ case REMMINA_RDP_POINTER_FREE: ++ remmina_rdp_event_free_cursor(gp, ui); ++ break; + +- XPutImage(rfi->display, rfi->rgb_surface, rfi->gc, image, 0, 0, +- ui->nocodec.left, ui->nocodec.top, +- ui->nocodec.width, ui->nocodec.height); ++ case REMMINA_RDP_POINTER_SET: ++ gdk_window_set_cursor(gtk_widget_get_window(rfi->drawing_area), ui->cursor.pointer->cursor); ++ break; + +- remmina_rdp_event_update_rect(gp, +- ui->nocodec.left, ui->nocodec.top, +- ui->nocodec.width, ui->nocodec.height); ++ case REMMINA_RDP_POINTER_NULL: ++ gdk_window_set_cursor(gtk_widget_get_window(rfi->drawing_area), gdk_cursor_new(GDK_BLANK_CURSOR)); ++ break; + +- XSetClipMask(rfi->display, rfi->gc, None); ++ case REMMINA_RDP_POINTER_DEFAULT: ++ gdk_window_set_cursor(gtk_widget_get_window(rfi->drawing_area), NULL); ++ break; ++ } + } + + gboolean remmina_rdp_event_queue_ui(RemminaProtocolWidget* gp) +@@ -880,12 +750,12 @@ + remmina_rdp_event_connected(gp, ui); + break; + +- case REMMINA_RDP_UI_RFX: +- remmina_rdp_event_rfx(gp, ui); ++ case REMMINA_RDP_UI_CURSOR: ++ remmina_rdp_event_cursor(gp, ui); + break; + +- case REMMINA_RDP_UI_NOCODEC: +- remmina_rdp_event_nocodec(gp, ui); ++ case REMMINA_RDP_UI_CLIPBOARD: ++ remmina_rdp_event_process_clipboard(gp, ui); + break; + + default: +@@ -908,4 +778,3 @@ + { + remmina_rdp_event_release_key(gp, 0); + } +- +diff -urN remmina-plugins/rdp/rdp_file.c remmina-plugins/rdp/rdp_file.c +--- remmina-plugins/rdp/rdp_file.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/rdp/rdp_file.c 2014-01-08 02:31:52.000000000 +1100 +@@ -80,6 +80,10 @@ + { + remmina_plugin_service->file_set_int(remminafile, "shareprinter", (atoi (value) == 1)); + } ++ else if (g_strcmp0(key, "redirectsmartcard") == 0) ++ { ++ remmina_plugin_service->file_set_int(remminafile, "sharesmartcard", (atoi (value) == 1)); ++ } + else if (g_strcmp0(key, "redirectclipboard") == 0) + { + remmina_plugin_service->file_set_int(remminafile, "disableclipboard", (atoi (value) != 1)); +@@ -268,6 +272,7 @@ + else + fprintf(fp, "audiomode:i:2\r\n"); + fprintf(fp, "redirectprinters:i:%i\r\n", remmina_plugin_service->file_get_int(remminafile, "shareprinter", FALSE) ? 1 : 0); ++ fprintf(fp, "redirectsmartcard:i:%i\r\n", remmina_plugin_service->file_get_int(remminafile, "sharesmartcard", FALSE) ? 1 : 0); + fprintf(fp, "redirectcomports:i:0\r\n"); + fprintf(fp, "redirectsmartcards:i:0\r\n"); + fprintf(fp, "redirectclipboard:i:1\r\n"); +diff -urN remmina-plugins/rdp/rdp_gdi.c remmina-plugins/rdp/rdp_gdi.c +--- remmina-plugins/rdp/rdp_gdi.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/rdp/rdp_gdi.c 2014-01-08 02:31:52.000000000 +1100 +@@ -28,10 +28,6 @@ + #include <freerdp/freerdp.h> + #include <freerdp/constants.h> + #include <freerdp/cache/cache.h> +-#include <freerdp/utils/memory.h> +-#include <X11/Xlib.h> +-#include <X11/keysym.h> +-#include <gdk/gdkx.h> + + static void rf_desktop_resize(rdpContext* context) + { +@@ -43,8 +39,8 @@ + + LOCK_BUFFER(TRUE) + +- remmina_plugin_service->protocol_plugin_set_width(gp, rfi->settings->width); +- remmina_plugin_service->protocol_plugin_set_height(gp, rfi->settings->height); ++ remmina_plugin_service->protocol_plugin_set_width(gp, rfi->settings->DesktopWidth); ++ remmina_plugin_service->protocol_plugin_set_height(gp, rfi->settings->DesktopHeight); + + UNLOCK_BUFFER(TRUE) + +@@ -62,23 +58,6 @@ + + static void rf_gdi_set_bounds(rdpContext* context, rdpBounds* bounds) + { +- /* +- XRectangle clip; +- rfContext* rfi = (rfContext*) context; +- +- if (bounds != NULL) +- { +- clip.x = bounds->left; +- clip.y = bounds->top; +- clip.width = bounds->right - bounds->left + 1; +- clip.height = bounds->bottom - bounds->top + 1; +- XSetClipRectangles(rfi->display, rfi->gc, 0, 0, &clip, 1, YXBanded); +- } +- else +- { +- XSetClipMask(rfi->display, rfi->gc, None); +- } +- */ + } + + static void rf_gdi_dstblt(rdpContext* context, DSTBLT_ORDER* dstblt) +@@ -128,12 +107,12 @@ + + static void rf_gdi_surface_bits(rdpContext* context, SURFACE_BITS_COMMAND* surface_bits_command) + { +- uint8* bitmap; ++ UINT8* bitmap; + RFX_MESSAGE* message; + RemminaPluginRdpUiObject* ui; + rfContext* rfi = (rfContext*) context; + +- if (surface_bits_command->codecID == CODEC_ID_REMOTEFX && rfi->rfx_context) ++ if (surface_bits_command->codecID == RDP_CODEC_ID_REMOTEFX && rfi->rfx_context) + { + message = rfx_process_message(rfi->rfx_context, surface_bits_command->bitmapData, + surface_bits_command->bitmapDataLength); +@@ -146,9 +125,9 @@ + + rf_queue_ui(rfi->protocol_widget, ui); + } +- else if (surface_bits_command->codecID == CODEC_ID_NONE) ++ else if (surface_bits_command->codecID == RDP_CODEC_ID_NONE) + { +- bitmap = (uint8*) xzalloc(surface_bits_command->width * surface_bits_command->height * 4); ++ bitmap = (UINT8*) malloc(surface_bits_command->width * surface_bits_command->height * 4); + + freerdp_image_flip(surface_bits_command->bitmapData, bitmap, + surface_bits_command->width, surface_bits_command->height, 32); +diff -urN remmina-plugins/rdp/rdp_graphics.c remmina-plugins/rdp/rdp_graphics.c +--- remmina-plugins/rdp/rdp_graphics.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/rdp/rdp_graphics.c 2014-01-08 02:31:52.000000000 +1100 +@@ -24,9 +24,9 @@ + #include "rdp_event.h" + #include "rdp_graphics.h" + +-#include <freerdp/utils/memory.h> + #include <freerdp/codec/color.h> + #include <freerdp/codec/bitmap.h> ++#include <winpr/memory.h> + + //#define RF_BITMAP + //#define RF_GLYPH +@@ -36,7 +36,7 @@ + void rf_Bitmap_New(rdpContext* context, rdpBitmap* bitmap) + { + #ifdef RF_BITMAP +- uint8* data; ++ UINT8* data; + Pixmap pixmap; + XImage* image; + rfContext* rfi = (rfContext*) context; +@@ -115,23 +115,23 @@ + } + + void rf_Bitmap_Decompress(rdpContext* context, rdpBitmap* bitmap, +- uint8* data, int width, int height, int bpp, int length, boolean compressed) ++ BYTE* data, int width, int height, int bpp, int length, BOOL compressed, int codec_id) + { + #ifdef RF_BITMAP +- uint16 size; ++ UINT16 size; + + printf("rf_Bitmap_Decompress\n"); + + size = width * height * (bpp + 7) / 8; + + if (bitmap->data == NULL) +- bitmap->data = (uint8*) xmalloc(size); ++ bitmap->data = (UINT8*) xmalloc(size); + else +- bitmap->data = (uint8*) xrealloc(bitmap->data, size); ++ bitmap->data = (UINT8*) xrealloc(bitmap->data, size); + + if (compressed) + { +- boolean status; ++ BOOL status; + + status = bitmap_decompress(data, bitmap->data, width, height, length, bpp, bpp); + +@@ -151,7 +151,7 @@ + #endif + } + +-void rf_Bitmap_SetSurface(rdpContext* context, rdpBitmap* bitmap, boolean primary) ++void rf_Bitmap_SetSurface(rdpContext* context, rdpBitmap* bitmap, BOOL primary) + { + #ifdef RF_BITMAP + rfContext* rfi = (rfContext*) context; +@@ -167,17 +167,78 @@ + + void rf_Pointer_New(rdpContext* context, rdpPointer* pointer) + { ++ RemminaPluginRdpUiObject* ui; ++ rfContext* rfi = (rfContext*) context; ++ ++ if ((pointer->andMaskData != 0) && (pointer->xorMaskData != 0)) ++ { ++ ui = g_new0(RemminaPluginRdpUiObject, 1); ++ ui->type = REMMINA_RDP_UI_CURSOR; ++ ui->cursor.pointer = (rfPointer*) pointer; ++ ui->cursor.type = REMMINA_RDP_POINTER_NEW; + ++ rf_queue_ui(rfi->protocol_widget, ui); ++ } + } + + void rf_Pointer_Free(rdpContext* context, rdpPointer* pointer) + { ++ RemminaPluginRdpUiObject* ui; ++ rfContext* rfi = (rfContext*) context; ++ ++ if (G_IS_OBJECT(((rfPointer*) pointer)->cursor)) ++ { ++ ui = g_new0(RemminaPluginRdpUiObject, 1); ++ ui->type = REMMINA_RDP_UI_CURSOR; ++ ui->cursor.pointer = (rfPointer*) pointer; ++ ui->cursor.type = REMMINA_RDP_POINTER_FREE; + ++ rf_queue_ui(rfi->protocol_widget, ui); ++ ++ g_mutex_lock(rfi->gmutex); ++ while (G_IS_OBJECT(((rfPointer*) pointer)->cursor)) ++ { ++ g_cond_wait(rfi->gcond, rfi->gmutex); ++ } ++ g_mutex_unlock(rfi->gmutex); ++ } + } + + void rf_Pointer_Set(rdpContext* context, rdpPointer* pointer) + { ++ RemminaPluginRdpUiObject* ui; ++ rfContext* rfi = (rfContext*) context; ++ ++ ui = g_new0(RemminaPluginRdpUiObject, 1); ++ ui->type = REMMINA_RDP_UI_CURSOR; ++ ui->cursor.pointer = (rfPointer*) pointer; ++ ui->cursor.type = REMMINA_RDP_POINTER_SET; ++ ++ rf_queue_ui(rfi->protocol_widget, ui); ++} ++ ++void rf_Pointer_SetNull(rdpContext* context) ++{ ++ RemminaPluginRdpUiObject* ui; ++ rfContext* rfi = (rfContext*) context; ++ ++ ui = g_new0(RemminaPluginRdpUiObject, 1); ++ ui->type = REMMINA_RDP_UI_CURSOR; ++ ui->cursor.type = REMMINA_RDP_POINTER_NULL; ++ ++ rf_queue_ui(rfi->protocol_widget, ui); ++} ++ ++void rf_Pointer_SetDefault(rdpContext* context) ++{ ++ RemminaPluginRdpUiObject* ui; ++ rfContext* rfi = (rfContext*) context; ++ ++ ui = g_new0(RemminaPluginRdpUiObject, 1); ++ ui->type = REMMINA_RDP_UI_CURSOR; ++ ui->cursor.type = REMMINA_RDP_POINTER_DEFAULT; + ++ rf_queue_ui(rfi->protocol_widget, ui); + } + + /* Glyph Class */ +@@ -234,7 +295,7 @@ + #endif + } + +-void rf_Glyph_BeginDraw(rdpContext* context, int x, int y, int width, int height, uint32 bgcolor, uint32 fgcolor) ++void rf_Glyph_BeginDraw(rdpContext* context, int x, int y, int width, int height, UINT32 bgcolor, UINT32 fgcolor) + { + #ifdef RF_GLYPH + rfContext* rfi = (rfContext*) context; +@@ -258,7 +319,7 @@ + #endif + } + +-void rf_Glyph_EndDraw(rdpContext* context, int x, int y, int width, int height, uint32 bgcolor, uint32 fgcolor) ++void rf_Glyph_EndDraw(rdpContext* context, int x, int y, int width, int height, UINT32 bgcolor, UINT32 fgcolor) + { + #ifdef RF_GLYPH + rfContext* rfi = (rfContext*) context; +@@ -279,7 +340,8 @@ + rdpPointer* pointer; + rdpGlyph* glyph; + +- bitmap = xnew(rdpBitmap); ++ bitmap = (rdpBitmap*) malloc(sizeof(rdpBitmap)); ++ ZeroMemory(bitmap, sizeof(rdpBitmap)); + bitmap->size = sizeof(rfBitmap); + + bitmap->New = rf_Bitmap_New; +@@ -289,19 +351,23 @@ + bitmap->SetSurface = rf_Bitmap_SetSurface; + + graphics_register_bitmap(graphics, bitmap); +- xfree(bitmap); ++ free(bitmap); + +- pointer = xnew(rdpPointer); ++ pointer = (rdpPointer*) malloc(sizeof(rdpPointer)); ++ ZeroMemory(pointer, sizeof(rdpPointer)); + pointer->size = sizeof(rfPointer); + + pointer->New = rf_Pointer_New; + pointer->Free = rf_Pointer_Free; + pointer->Set = rf_Pointer_Set; ++ pointer->SetNull = rf_Pointer_SetNull; ++ pointer->SetDefault = rf_Pointer_SetDefault; + + graphics_register_pointer(graphics, pointer); +- xfree(pointer); ++ free(pointer); + +- glyph = xnew(rdpGlyph); ++ glyph = (rdpGlyph*) malloc(sizeof(rdpGlyph)); ++ ZeroMemory(glyph, sizeof(rdpGlyph)); + glyph->size = sizeof(rfGlyph); + + glyph->New = rf_Glyph_New; +@@ -311,5 +377,5 @@ + glyph->EndDraw = rf_Glyph_EndDraw; + + graphics_register_glyph(graphics, glyph); +- xfree(glyph); ++ free(glyph); + } +diff -urN remmina-plugins/rdp/rdp_plugin.c remmina-plugins/rdp/rdp_plugin.c +--- remmina-plugins/rdp/rdp_plugin.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/rdp/rdp_plugin.c 2014-01-08 23:24:16.227862080 +1100 +@@ -24,13 +24,15 @@ + #include "rdp_graphics.h" + #include "rdp_file.h" + #include "rdp_settings.h" ++#include "rdp_cliprdr.h" + + #include <errno.h> + #include <pthread.h> + #include <cairo/cairo-xlib.h> + #include <freerdp/freerdp.h> + #include <freerdp/constants.h> +-#include <freerdp/utils/memory.h> ++#include <freerdp/client/cliprdr.h> ++#include <freerdp/client/channels.h> + + #define REMMINA_RDP_FEATURE_TOOL_REFRESH 1 + #define REMMINA_RDP_FEATURE_SCALE 2 +@@ -38,81 +40,6 @@ + + RemminaPluginService* remmina_plugin_service = NULL; + +-/* Migrated from xfreerdp */ +-static gboolean rf_get_key_state(KeyCode keycode, int state, XModifierKeymap* modmap) +-{ +- int offset; +- int modifierpos, key, keysymMask = 0; +- +- if (keycode == NoSymbol) +- return FALSE; +- +- for (modifierpos = 0; modifierpos < 8; modifierpos++) +- { +- offset = modmap->max_keypermod * modifierpos; +- +- for (key = 0; key < modmap->max_keypermod; key++) +- { +- if (modmap->modifiermap[offset + key] == keycode) +- keysymMask |= 1 << modifierpos; +- } +- } +- +- return (state & keysymMask) ? TRUE : FALSE; +-} +- +-void rf_init(RemminaProtocolWidget* gp) +-{ +- int dummy; +- uint32 state; +- gint keycode; +- Window wdummy; +- XModifierKeymap* modmap; +- rfContext* rfi; +- +- rfi = GET_DATA(gp); +- +- XQueryPointer(rfi->display, GDK_ROOT_WINDOW(), &wdummy, &wdummy, &dummy, &dummy, +- &dummy, &dummy, &state); +- +- modmap = XGetModifierMapping(rfi->display); +- +- keycode = XKeysymToKeycode(rfi->display, XK_Caps_Lock); +- rfi->capslock_initstate = rf_get_key_state(keycode, state, modmap); +- +- keycode = XKeysymToKeycode(rfi->display, XK_Num_Lock); +- rfi->numlock_initstate = rf_get_key_state(keycode, state, modmap); +- +- XFreeModifiermap(modmap); +-} +- +-void rf_uninit(RemminaProtocolWidget* gp) +-{ +- rfContext* rfi; +- +- rfi = GET_DATA(gp); +- +- if (rfi->rfx_context) +- { +- rfx_context_free(rfi->rfx_context); +- rfi->rfx_context = NULL; +- } +- +-#if 0 +- if (rfi->channels) +- { +- freerdp_channels_free(rfi->channels); +- rfi->channels = NULL; +- } +- +- if (rfi->instance) +- { +- freerdp_free(rfi->instance); +- rfi->instance = NULL; +- } +-#endif +-} +- + void rf_get_fds(RemminaProtocolWidget* gp, void** rfds, int* rcount) + { + rfContext* rfi; +@@ -126,9 +53,9 @@ + } + } + +-boolean rf_check_fds(RemminaProtocolWidget* gp) ++BOOL rf_check_fds(RemminaProtocolWidget* gp) + { +- uint16 flags; ++ UINT16 flags; + gchar buf[100]; + rdpInput* input; + rfContext* rfi; +@@ -195,7 +122,7 @@ + break; + + case REMMINA_RDP_UI_NOCODEC: +- xfree(obj->nocodec.bitmap); ++ free(obj->nocodec.bitmap); + break; + + default: +@@ -205,17 +132,17 @@ + g_free(obj); + } + +-void rf_sw_begin_paint(rdpContext* context) ++void rf_begin_paint(rdpContext* context) + { + rdpGdi* gdi = context->gdi; + gdi->primary->hdc->hwnd->invalid->null = 1; + gdi->primary->hdc->hwnd->ninvalid = 0; + } + +-void rf_sw_end_paint(rdpContext* context) ++void rf_end_paint(rdpContext* context) + { +- sint32 x, y; +- uint32 w, h; ++ INT32 x, y; ++ UINT32 w, h; + rdpGdi* gdi; + rfContext* rfi; + RemminaProtocolWidget* gp; +@@ -243,7 +170,7 @@ + rf_queue_ui(rfi->protocol_widget, ui); + } + +-static void rf_sw_desktop_resize(rdpContext* context) ++static void rf_desktop_resize(rdpContext* context) + { + rfContext* rfi; + RemminaProtocolWidget* gp; +@@ -253,8 +180,8 @@ + + LOCK_BUFFER(TRUE) + +- remmina_plugin_service->protocol_plugin_set_width(gp, rfi->settings->width); +- remmina_plugin_service->protocol_plugin_set_height(gp, rfi->settings->height); ++ remmina_plugin_service->protocol_plugin_set_width(gp, rfi->settings->DesktopWidth); ++ remmina_plugin_service->protocol_plugin_set_height(gp, rfi->settings->DesktopHeight); + + UNLOCK_BUFFER(TRUE) + +@@ -265,39 +192,7 @@ + remmina_plugin_service->protocol_plugin_emit_signal(gp, "desktop-resize"); + } + +-void rf_hw_begin_paint(rdpContext* context) +-{ +- +-} +- +-void rf_hw_end_paint(rdpContext* context) +-{ +- +-} +- +-static void rf_hw_desktop_resize(rdpContext* context) +-{ +- rfContext* rfi; +- RemminaProtocolWidget* gp; +- +- rfi = (rfContext*) context; +- gp = rfi->protocol_widget; +- +- LOCK_BUFFER(TRUE) +- +- remmina_plugin_service->protocol_plugin_set_width(gp, rfi->settings->width); +- remmina_plugin_service->protocol_plugin_set_height(gp, rfi->settings->height); +- +- UNLOCK_BUFFER(TRUE) +- +- THREADS_ENTER +- remmina_rdp_event_update_scale(gp); +- THREADS_LEAVE +- +- remmina_plugin_service->protocol_plugin_emit_signal(gp, "desktop-resize"); +-} +- +-static boolean remmina_rdp_pre_connect(freerdp* instance) ++static BOOL remmina_rdp_pre_connect(freerdp* instance) + { + rfContext* rfi; + rdpSettings* settings; +@@ -307,110 +202,95 @@ + settings = instance->settings; + gp = rfi->protocol_widget; + +- settings->bitmap_cache = True; +- settings->offscreen_bitmap_cache = True; ++ settings->BitmapCacheEnabled = True; ++ settings->OffscreenSupportLevel = True; + +- settings->order_support[NEG_DSTBLT_INDEX] = True; +- settings->order_support[NEG_PATBLT_INDEX] = True; +- settings->order_support[NEG_SCRBLT_INDEX] = True; +- settings->order_support[NEG_OPAQUE_RECT_INDEX] = True; +- settings->order_support[NEG_DRAWNINEGRID_INDEX] = False; +- settings->order_support[NEG_MULTIDSTBLT_INDEX] = False; +- settings->order_support[NEG_MULTIPATBLT_INDEX] = False; +- settings->order_support[NEG_MULTISCRBLT_INDEX] = False; +- settings->order_support[NEG_MULTIOPAQUERECT_INDEX] = True; +- settings->order_support[NEG_MULTI_DRAWNINEGRID_INDEX] = False; +- settings->order_support[NEG_LINETO_INDEX] = True; +- settings->order_support[NEG_POLYLINE_INDEX] = True; +- settings->order_support[NEG_MEMBLT_INDEX] = True; +- settings->order_support[NEG_MEM3BLT_INDEX] = False; +- settings->order_support[NEG_MEMBLT_V2_INDEX] = True; +- settings->order_support[NEG_MEM3BLT_V2_INDEX] = False; +- settings->order_support[NEG_SAVEBITMAP_INDEX] = False; +- settings->order_support[NEG_GLYPH_INDEX_INDEX] = True; +- settings->order_support[NEG_FAST_INDEX_INDEX] = True; +- settings->order_support[NEG_FAST_GLYPH_INDEX] = False; +- settings->order_support[NEG_POLYGON_SC_INDEX] = False; +- settings->order_support[NEG_POLYGON_CB_INDEX] = False; +- settings->order_support[NEG_ELLIPSE_SC_INDEX] = False; +- settings->order_support[NEG_ELLIPSE_CB_INDEX] = False; +- +- if (settings->rfx_codec == True) +- { +- settings->frame_acknowledge = False; +- settings->large_pointer = True; +- settings->performance_flags = PERF_FLAG_NONE; ++ settings->OrderSupport[NEG_DSTBLT_INDEX] = True; ++ settings->OrderSupport[NEG_PATBLT_INDEX] = True; ++ settings->OrderSupport[NEG_SCRBLT_INDEX] = True; ++ settings->OrderSupport[NEG_OPAQUE_RECT_INDEX] = True; ++ settings->OrderSupport[NEG_DRAWNINEGRID_INDEX] = False; ++ settings->OrderSupport[NEG_MULTIDSTBLT_INDEX] = False; ++ settings->OrderSupport[NEG_MULTIPATBLT_INDEX] = False; ++ settings->OrderSupport[NEG_MULTISCRBLT_INDEX] = False; ++ settings->OrderSupport[NEG_MULTIOPAQUERECT_INDEX] = True; ++ settings->OrderSupport[NEG_MULTI_DRAWNINEGRID_INDEX] = False; ++ settings->OrderSupport[NEG_LINETO_INDEX] = True; ++ settings->OrderSupport[NEG_POLYLINE_INDEX] = True; ++ settings->OrderSupport[NEG_MEMBLT_INDEX] = True; ++ settings->OrderSupport[NEG_MEM3BLT_INDEX] = False; ++ settings->OrderSupport[NEG_MEMBLT_V2_INDEX] = True; ++ settings->OrderSupport[NEG_MEM3BLT_V2_INDEX] = False; ++ settings->OrderSupport[NEG_SAVEBITMAP_INDEX] = False; ++ settings->OrderSupport[NEG_GLYPH_INDEX_INDEX] = True; ++ settings->OrderSupport[NEG_FAST_INDEX_INDEX] = True; ++ settings->OrderSupport[NEG_FAST_GLYPH_INDEX] = False; ++ settings->OrderSupport[NEG_POLYGON_SC_INDEX] = False; ++ settings->OrderSupport[NEG_POLYGON_CB_INDEX] = False; ++ settings->OrderSupport[NEG_ELLIPSE_SC_INDEX] = False; ++ settings->OrderSupport[NEG_ELLIPSE_CB_INDEX] = False; ++ ++ if (settings->RemoteFxCodec == True) ++ { ++ settings->FrameAcknowledge = False; ++ settings->LargePointerFlag = True; ++ settings->PerformanceFlags = PERF_FLAG_NONE; + + rfi->rfx_context = rfx_context_new(); +- rfx_context_set_cpu_opt(rfi->rfx_context, CPU_SSE2); + } + + freerdp_channels_pre_connect(rfi->channels, instance); + +- rfi->clrconv = xnew(CLRCONV); +- rfi->clrconv->alpha = true; +- rfi->clrconv->invert = false; +- rfi->clrconv->rgb555 = false; +- rfi->clrconv->palette = xnew(rdpPalette); ++ rfi->clrconv = freerdp_clrconv_new(CLRCONV_ALPHA); + + instance->context->cache = cache_new(instance->settings); + + return True; + } + +-static boolean remmina_rdp_post_connect(freerdp* instance) ++ ++static BOOL remmina_rdp_post_connect(freerdp* instance) + { + rfContext* rfi; +- XGCValues gcv = { 0 }; + RemminaProtocolWidget* gp; + RemminaPluginRdpUiObject* ui; ++ rdpGdi* gdi; ++ UINT32 flags; + + rfi = (rfContext*) instance->context; + gp = rfi->protocol_widget; + +- rfi->width = rfi->settings->width; +- rfi->height = rfi->settings->height; +- rfi->srcBpp = rfi->settings->color_depth; +- +- rfi->drawable = DefaultRootWindow(rfi->display); +- rfi->primary = XCreatePixmap(rfi->display, rfi->drawable, rfi->width, rfi->height, rfi->depth); +- rfi->drawing = rfi->primary; +- +- rfi->drawable = rfi->primary; +- rfi->gc = XCreateGC(rfi->display, rfi->drawable, GCGraphicsExposures, &gcv); +- rfi->gc_default = XCreateGC(rfi->display, rfi->drawable, GCGraphicsExposures, &gcv); +- rfi->bitmap_mono = XCreatePixmap(rfi->display, rfi->drawable, 8, 8, 1); +- rfi->gc_mono = XCreateGC(rfi->display, rfi->bitmap_mono, GCGraphicsExposures, &gcv); ++ rfi->width = rfi->settings->DesktopWidth; ++ rfi->height = rfi->settings->DesktopHeight; ++ rfi->srcBpp = rfi->settings->ColorDepth; + +- if (rfi->settings->rfx_codec == false) +- rfi->sw_gdi = true; ++ if (rfi->settings->RemoteFxCodec == FALSE) ++ rfi->sw_gdi = TRUE; + + rf_register_graphics(instance->context->graphics); + +- if (rfi->sw_gdi) +- { +- rdpGdi* gdi; +- uint32 flags; +- +- flags = CLRCONV_ALPHA; +- +- if (rfi->bpp > 16) +- flags |= CLRBUF_32BPP; +- else +- flags |= CLRBUF_16BPP; +- +- gdi_init(instance, flags, NULL); +- gdi = instance->context->gdi; +- rfi->primary_buffer = gdi->primary_buffer; ++ flags = CLRCONV_ALPHA; + +- rfi->image = XCreateImage(rfi->display, rfi->visual, rfi->depth, ZPixmap, 0, +- (char*) rfi->primary_buffer, rfi->width, rfi->height, rfi->scanline_pad, 0); ++ if (rfi->bpp == 32) ++ { ++ flags |= CLRBUF_32BPP; ++ rfi->cairo_format = CAIRO_FORMAT_ARGB32; ++ } ++ else if (rfi->bpp == 24) ++ { ++ flags |= CLRBUF_24BPP; ++ rfi->cairo_format = CAIRO_FORMAT_RGB24; + } + else + { +- rf_gdi_register_update_callbacks(instance->update); ++ flags |= CLRBUF_16BPP; ++ rfi->cairo_format = CAIRO_FORMAT_RGB16_565; + } + ++ gdi_init(instance, flags, NULL); ++ gdi = instance->context->gdi; ++ rfi->primary_buffer = gdi->primary_buffer; ++ + rfi->hdc = gdi_GetDC(); + rfi->hdc->bitsPerPixel = rfi->bpp; + rfi->hdc->bytesPerPixel = rfi->bpp / 8; +@@ -425,6 +305,7 @@ + + pointer_cache_register_callbacks(instance->update); + ++/* + if (rfi->sw_gdi != true) + { + glyph_cache_register_callbacks(instance->update); +@@ -433,19 +314,11 @@ + offscreen_cache_register_callbacks(instance->update); + palette_cache_register_callbacks(instance->update); + } ++*/ + +- if (rfi->sw_gdi) +- { +- instance->update->BeginPaint = rf_sw_begin_paint; +- instance->update->EndPaint = rf_sw_end_paint; +- instance->update->DesktopResize = rf_sw_desktop_resize; +- } +- else +- { +- instance->update->BeginPaint = rf_hw_begin_paint; +- instance->update->EndPaint = rf_hw_end_paint; +- instance->update->DesktopResize = rf_hw_desktop_resize; +- } ++ instance->update->BeginPaint = rf_begin_paint; ++ instance->update->EndPaint = rf_end_paint; ++ instance->update->DesktopResize = rf_desktop_resize; + + freerdp_channels_post_connect(rfi->channels, instance); + +@@ -458,7 +331,7 @@ + return True; + } + +-static boolean remmina_rdp_authenticate(freerdp* instance, char** username, char** password, char** domain) ++static BOOL remmina_rdp_authenticate(freerdp* instance, char** username, char** password, char** domain) + { + gchar* s; + gint ret; +@@ -478,7 +351,7 @@ + + if (s) + { +- rfi->settings->username = xstrdup(s); ++ rfi->settings->Username = strdup(s); + g_free(s); + } + +@@ -486,7 +359,7 @@ + + if (s) + { +- rfi->settings->password = xstrdup(s); ++ rfi->settings->Password = strdup(s); + g_free(s); + } + +@@ -494,7 +367,7 @@ + + if (s) + { +- rfi->settings->domain = xstrdup(s); ++ rfi->settings->Domain = strdup(s); + g_free(s); + } + +@@ -509,7 +382,7 @@ + return True; + } + +-static boolean remmina_rdp_verify_certificate(freerdp* instance, char* subject, char* issuer, char* fingerprint) ++static BOOL remmina_rdp_verify_certificate(freerdp* instance, char* subject, char* issuer, char* fingerprint) + { + gint status; + rfContext* rfi; +@@ -527,12 +400,40 @@ + + return False; + } ++static BOOL remmina_rdp_verify_changed_certificate(freerdp* instance, char* subject, char* issuer, char* new_fingerprint, char* old_fingerprint) ++{ ++ gint status; ++ rfContext* rfi; ++ RemminaProtocolWidget* gp; + +-static int remmina_rdp_receive_channel_data(freerdp* instance, int channelId, uint8* data, int size, int flags, int total_size) ++ rfi = (rfContext*) instance->context; ++ gp = rfi->protocol_widget; ++ ++ THREADS_ENTER ++ status = remmina_plugin_service->protocol_plugin_changed_certificate(gp, subject, issuer, new_fingerprint, old_fingerprint); ++ THREADS_LEAVE ++ ++ if (status == GTK_RESPONSE_OK) ++ return True; ++ ++ return False; ++} ++ ++static int remmina_rdp_receive_channel_data(freerdp* instance, int channelId, UINT8* data, int size, int flags, int total_size) + { + return freerdp_channels_data(instance, channelId, data, size, flags, total_size); + } + ++void remmina_rdp_channels_process_event(RemminaProtocolWidget* gp, wMessage* event) ++{ ++ switch (GetMessageClass(event->id)) ++ { ++ case CliprdrChannel_Class: ++ remmina_rdp_channel_cliprdr_process(gp, event); ++ break; ++ } ++} ++ + static void remmina_rdp_main_loop(RemminaProtocolWidget* gp) + { + int i; +@@ -545,6 +446,7 @@ + fd_set rfds_set; + fd_set wfds_set; + rfContext* rfi; ++ wMessage* event; + + memset(rfds, 0, sizeof(rfds)); + memset(wfds, 0, sizeof(wfds)); +@@ -570,7 +472,7 @@ + FD_ZERO(&rfds_set); + for (i = 0; i < rcount; i++) + { +- fds = (int) (uint64) (rfds[i]); ++ fds = (int) (UINT64) (rfds[i]); + + if (fds > max_fds) + max_fds = fds; +@@ -618,6 +520,12 @@ + { + break; + } ++ else ++ { ++ event = freerdp_channels_pop_event(rfi->channels); ++ if (event) ++ remmina_rdp_channels_process_event(gp, event); ++ } + /* check ui */ + if (!rf_check_fds(gp)) + { +@@ -626,6 +534,27 @@ + } + } + ++gboolean remmina_rdp_load_plugin(rdpChannels* channels, rdpSettings* settings, const char* name, RDP_PLUGIN_DATA* plugin_data) ++{ ++ void* entry = NULL; ++ ++ entry = freerdp_channels_client_find_static_entry("VirtualChannelEntry", name); ++ ++ if (entry) ++ { ++ if (freerdp_channels_client_load(channels, settings, entry, plugin_data) == 0) ++ { ++ g_printf("loading channel %s (static)\n", name); ++ return TRUE; ++ } ++ } ++ ++ g_printf("loading channel %s (plugin)\n", name); ++ freerdp_channels_load_plugin(channels, settings, name, plugin_data); ++ ++ return TRUE; ++} ++ + static gboolean remmina_rdp_main(RemminaProtocolWidget* gp) + { + gchar* s; +@@ -648,29 +577,29 @@ + return FALSE; + + remmina_plugin_service->get_server_port(s, 3389, &host, &port); +- rfi->settings->hostname = xstrdup(host); ++ rfi->settings->ServerHostname = strdup(host); + g_free(host); + g_free(s); +- rfi->settings->port = port; ++ rfi->settings->ServerPort = port; + +- rfi->settings->color_depth = remmina_plugin_service->file_get_int(remminafile, "colordepth", 0); ++ rfi->settings->ColorDepth = remmina_plugin_service->file_get_int(remminafile, "colordepth", 0); + +- if (rfi->settings->color_depth == 0) ++ if (rfi->settings->ColorDepth == 0) + { +- rfi->settings->rfx_codec = True; +- rfi->settings->color_depth = 32; ++ rfi->settings->RemoteFxCodec = True; ++ rfi->settings->ColorDepth = 32; + } + +- rfi->settings->width = remmina_plugin_service->file_get_int(remminafile, "resolution_width", 1024); +- rfi->settings->height = remmina_plugin_service->file_get_int(remminafile, "resolution_height", 768); +- remmina_plugin_service->protocol_plugin_set_width(gp, rfi->settings->width); +- remmina_plugin_service->protocol_plugin_set_height(gp, rfi->settings->height); ++ rfi->settings->DesktopWidth = remmina_plugin_service->file_get_int(remminafile, "resolution_width", 1024); ++ rfi->settings->DesktopHeight = remmina_plugin_service->file_get_int(remminafile, "resolution_height", 768); ++ remmina_plugin_service->protocol_plugin_set_width(gp, rfi->settings->DesktopWidth); ++ remmina_plugin_service->protocol_plugin_set_height(gp, rfi->settings->DesktopHeight); + + if (remmina_plugin_service->file_get_string(remminafile, "username")) +- rfi->settings->username = xstrdup(remmina_plugin_service->file_get_string(remminafile, "username")); ++ rfi->settings->Username = strdup(remmina_plugin_service->file_get_string(remminafile, "username")); + + if (remmina_plugin_service->file_get_string(remminafile, "domain")) +- rfi->settings->domain = xstrdup(remmina_plugin_service->file_get_string(remminafile, "domain")); ++ rfi->settings->Domain = strdup(remmina_plugin_service->file_get_string(remminafile, "domain")); + + THREADS_ENTER + s = remmina_plugin_service->file_get_secret(remminafile, "password"); +@@ -678,29 +607,29 @@ + + if (s) + { +- rfi->settings->password = xstrdup(s); +- rfi->settings->autologon = 1; ++ rfi->settings->Password = strdup(s); ++ rfi->settings->AutoLogonEnabled = 1; + g_free(s); + } + + if (remmina_plugin_service->file_get_string(remminafile, "clientname")) + { +- strncpy(rfi->settings->client_hostname, remmina_plugin_service->file_get_string(remminafile, "clientname"), +- sizeof(rfi->settings->client_hostname) - 1); ++ strncpy(rfi->settings->ClientHostname, remmina_plugin_service->file_get_string(remminafile, "clientname"), ++ sizeof(rfi->settings->ClientHostname) - 1); + } + else + { +- strncpy(rfi->settings->client_hostname, g_get_host_name(), sizeof(rfi->settings->client_hostname) - 1); ++ strncpy(rfi->settings->ClientHostname, g_get_host_name(), sizeof(rfi->settings->ClientHostname) - 1); + } + + if (remmina_plugin_service->file_get_string(remminafile, "exec")) + { +- rfi->settings->shell = xstrdup(remmina_plugin_service->file_get_string(remminafile, "exec")); ++ rfi->settings->AlternateShell = strdup(remmina_plugin_service->file_get_string(remminafile, "exec")); + } + + if (remmina_plugin_service->file_get_string(remminafile, "execpath")) + { +- rfi->settings->directory = xstrdup(remmina_plugin_service->file_get_string(remminafile, "execpath")); ++ rfi->settings->ShellWorkingDirectory = strdup(remmina_plugin_service->file_get_string(remminafile, "execpath")); + } + + s = g_strdup_printf("rdp_quality_%i", remmina_plugin_service->file_get_int(remminafile, "quality", DEFAULT_QUALITY_0)); +@@ -709,63 +638,63 @@ + + if (value && value[0]) + { +- rfi->settings->performance_flags = strtoul(value, NULL, 16); ++ rfi->settings->PerformanceFlags = strtoul(value, NULL, 16); + } + else + { + switch (remmina_plugin_service->file_get_int(remminafile, "quality", DEFAULT_QUALITY_0)) + { + case 9: +- rfi->settings->performance_flags = DEFAULT_QUALITY_9; ++ rfi->settings->PerformanceFlags = DEFAULT_QUALITY_9; + break; + + case 2: +- rfi->settings->performance_flags = DEFAULT_QUALITY_2; ++ rfi->settings->PerformanceFlags = DEFAULT_QUALITY_2; + break; + + case 1: +- rfi->settings->performance_flags = DEFAULT_QUALITY_1; ++ rfi->settings->PerformanceFlags = DEFAULT_QUALITY_1; + break; + + case 0: + default: +- rfi->settings->performance_flags = DEFAULT_QUALITY_0; ++ rfi->settings->PerformanceFlags = DEFAULT_QUALITY_0; + break; + } + } + g_free(value); + +- rfi->settings->kbd_layout = remmina_rdp_settings_get_keyboard_layout(); ++ rfi->settings->KeyboardLayout = remmina_rdp_settings_get_keyboard_layout(); + + if (remmina_plugin_service->file_get_int(remminafile, "console", FALSE)) + { +- rfi->settings->console_session = True; ++ rfi->settings->ConsoleSession = True; + } + + cs = remmina_plugin_service->file_get_string(remminafile, "security"); + + if (g_strcmp0(cs, "rdp") == 0) + { +- rfi->settings->rdp_security = True; +- rfi->settings->tls_security = False; +- rfi->settings->nla_security = False; ++ rfi->settings->RdpSecurity = True; ++ rfi->settings->TlsSecurity = False; ++ rfi->settings->NlaSecurity = False; + } + else if (g_strcmp0(cs, "tls") == 0) + { +- rfi->settings->rdp_security = False; +- rfi->settings->tls_security = True; +- rfi->settings->nla_security = False; ++ rfi->settings->RdpSecurity = False; ++ rfi->settings->TlsSecurity = True; ++ rfi->settings->NlaSecurity = False; + } + else if (g_strcmp0(cs, "nla") == 0) + { +- rfi->settings->rdp_security = False; +- rfi->settings->tls_security = False; +- rfi->settings->nla_security = True; ++ rfi->settings->RdpSecurity = False; ++ rfi->settings->TlsSecurity = False; ++ rfi->settings->NlaSecurity = True; + } + +- rfi->settings->compression = True; +- rfi->settings->fastpath_input = True; +- rfi->settings->fastpath_output = True; ++ rfi->settings->CompressionEnabled = True; ++ rfi->settings->FastPathInput = True; ++ rfi->settings->FastPathOutput = True; + + drdynvc_num = 0; + rdpsnd_num = 0; +@@ -773,7 +702,7 @@ + + if (g_strcmp0(cs, "remote") == 0) + { +- rfi->settings->console_audio = 1; ++ rfi->settings->RemoteConsoleAudio = 1; + } + else if (g_str_has_prefix(cs, "local")) + { +@@ -801,7 +730,7 @@ + } + } + +- freerdp_channels_load_plugin(rfi->channels, rfi->settings, "rdpsnd", rfi->rdpsnd_data); ++ remmina_rdp_load_plugin(rfi->channels, rfi->settings, "rdpsnd", rfi->rdpsnd_data); + + rfi->drdynvc_data[drdynvc_num].size = sizeof(RDP_PLUGIN_DATA); + rfi->drdynvc_data[drdynvc_num].data[0] = "audin"; +@@ -810,12 +739,12 @@ + + if (drdynvc_num) + { +- freerdp_channels_load_plugin(rfi->channels, rfi->settings, "drdynvc", rfi->drdynvc_data); ++ remmina_rdp_load_plugin(rfi->channels, rfi->settings, "drdynvc", rfi->drdynvc_data); + } + + if (!remmina_plugin_service->file_get_int(remminafile, "disableclipboard", FALSE)) + { +- freerdp_channels_load_plugin(rfi->channels, rfi->settings, "cliprdr", NULL); ++ remmina_rdp_load_plugin(rfi->channels, rfi->settings, "cliprdr", NULL); + } + + rdpdr_num = 0; +@@ -839,9 +768,17 @@ + rdpdr_num++; + } + ++ if (remmina_plugin_service->file_get_int(remminafile, "sharesmartcard", FALSE)) ++ { ++ rfi->rdpdr_data[rdpdr_num].size = sizeof(RDP_PLUGIN_DATA); ++ rfi->rdpdr_data[rdpdr_num].data[0] = "scard"; ++ rfi->rdpdr_data[rdpdr_num].data[1] = "scard"; ++ rdpdr_num++; ++ } ++ + if (rdpdr_num) + { +- freerdp_channels_load_plugin(rfi->channels, rfi->settings, "rdpdr", rfi->rdpdr_data); ++ remmina_rdp_load_plugin(rfi->channels, rfi->settings, "rdpdr", rfi->rdpdr_data); + } + + if (!freerdp_connect(rfi->instance)) +@@ -849,7 +786,7 @@ + if (!rfi->user_cancelled) + { + remmina_plugin_service->protocol_plugin_set_error(gp, _("Unable to connect to RDP server %s"), +- rfi->settings->hostname); ++ rfi->settings->ServerHostname); + } + + return FALSE; +@@ -886,13 +823,14 @@ + instance->PostConnect = remmina_rdp_post_connect; + instance->Authenticate = remmina_rdp_authenticate; + instance->VerifyCertificate = remmina_rdp_verify_certificate; ++ instance->VerifyChangedCertificate = remmina_rdp_verify_changed_certificate; + instance->ReceiveChannelData = remmina_rdp_receive_channel_data; + +- instance->context_size = sizeof(rfContext); ++ instance->ContextSize = sizeof(rfContext); + freerdp_context_new(instance); + rfi = (rfContext*) instance->context; + +- g_object_set_data_full(G_OBJECT(gp), "plugin-data", rfi, xfree); ++ g_object_set_data_full(G_OBJECT(gp), "plugin-data", rfi, free); + + rfi->protocol_widget = gp; + rfi->instance = instance; +@@ -901,8 +839,10 @@ + + pthread_mutex_init(&rfi->mutex, NULL); + ++ rfi->gmutex = g_mutex_new(); ++ rfi->gcond = g_cond_new(); ++ + remmina_rdp_event_init(gp); +- rf_init(gp); + } + + static gboolean remmina_rdp_open_connection(RemminaProtocolWidget* gp) +@@ -928,8 +868,10 @@ + static gboolean remmina_rdp_close_connection(RemminaProtocolWidget* gp) + { + rfContext* rfi; ++ freerdp* instance; + + rfi = GET_DATA(gp); ++ instance = rfi->instance; + + if (rfi->thread) + { +@@ -939,22 +881,39 @@ + pthread_join(rfi->thread, NULL); + } + +- if (rfi->instance) ++ pthread_mutex_destroy(&rfi->mutex); ++ ++ g_mutex_free(rfi->gmutex); ++ g_cond_free(rfi->gcond); ++ ++ remmina_rdp_event_uninit(gp); ++ remmina_plugin_service->protocol_plugin_emit_signal(gp, "disconnect"); ++ ++ if (instance) + { + if (rfi->channels) + { +- //freerdp_channels_close(rfi->channels, rfi->instance); ++ //freerdp_channels_close(rfi->channels, instance); ++ freerdp_channels_free(rfi->channels); ++ rfi->channels = NULL; ++ } ++ if (freerdp_shall_disconnect(instance)) ++ { ++ freerdp_disconnect(instance); + } +- +- freerdp_disconnect(rfi->instance); + } + +- pthread_mutex_destroy(&rfi->mutex); +- +- remmina_rdp_event_uninit(gp); +- remmina_plugin_service->protocol_plugin_emit_signal(gp, "disconnect"); ++ if (rfi->rfx_context) ++ { ++ rfx_context_free(rfi->rfx_context); ++ rfi->rfx_context = NULL; ++ } + +- rf_uninit(gp); ++ if (instance) ++ { ++ //freerdp_context_free(instance); /* context is rfContext* rfi */ ++ freerdp_free(instance); ++ } + + return FALSE; + } +@@ -1055,6 +1014,7 @@ + { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "exec", N_("Startup program"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "execpath", N_("Startup path"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "shareprinter", N_("Share local printers"), TRUE, NULL, NULL }, ++ { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "sharesmartcard", N_("Share smartcard"), TRUE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disableclipboard", N_("Disable clipboard sync"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "console", N_("Attach to console (Windows 2003 / 2003 R2)"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_END, NULL, NULL, FALSE, NULL, NULL } +diff -urN remmina-plugins/rdp/rdp_plugin.h remmina-plugins/rdp/rdp_plugin.h +--- remmina-plugins/rdp/rdp_plugin.h 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/rdp/rdp_plugin.h 2014-01-08 02:31:52.000000000 +1100 +@@ -48,7 +48,7 @@ + struct rf_pointer + { + rdpPointer pointer; +- Cursor cursor; ++ GdkCursor* cursor; + }; + typedef struct rf_pointer rfPointer; + +@@ -56,6 +56,7 @@ + { + rdpBitmap bitmap; + Pixmap pixmap; ++ cairo_surface_t* surface; + }; + typedef struct rf_bitmap rfBitmap; + +@@ -82,6 +83,9 @@ + gboolean scale; + gboolean user_cancelled; + ++ GMutex* gmutex; ++ GCond* gcond; ++ + RDP_PLUGIN_DATA rdpdr_data[5]; + RDP_PLUGIN_DATA drdynvc_data[5]; + RDP_PLUGIN_DATA rdpsnd_data[5]; +@@ -96,33 +100,21 @@ + gdouble scale_x; + gdouble scale_y; + guint scale_handler; +- gboolean capslock_initstate; +- gboolean numlock_initstate; + gboolean use_client_keymap; + + HGDI_DC hdc; + gint srcBpp; +- Display* display; +- Visual* visual; +- Drawable drawable; +- Drawable drw_surface; +- Pixmap rgb_surface; +- GC gc; +- GC gc_default; +- Pixmap bitmap_mono; +- GC gc_mono; +- gint depth; ++ GdkDisplay* display; ++ GdkVisual* visual; ++ cairo_surface_t* surface; ++ cairo_format_t cairo_format; + gint bpp; + gint width; + gint height; + gint scanline_pad; + gint* colormap; + HCLRCONV clrconv; +- Pixmap primary; +- Pixmap drawing; +- XImage* image; +- uint8* primary_buffer; +- cairo_surface_t* rgb_cairo_surface; ++ UINT8* primary_buffer; + + guint object_id_seq; + GHashTable* object_table; +@@ -133,6 +125,11 @@ + GArray* pressed_keys; + GAsyncQueue* event_queue; + gint event_pipe[2]; ++ ++ GAsyncQueue* clipboard_queue; ++ UINT32 format; ++ gboolean clipboard_wait; ++ gulong clipboard_handler; + }; + + typedef enum +@@ -148,15 +145,15 @@ + { + struct + { +- boolean up; +- boolean extended; +- uint8 key_code; ++ BOOL up; ++ BOOL extended; ++ UINT8 key_code; + } key_event; + struct + { +- uint16 flags; +- uint16 x; +- uint16 y; ++ UINT16 flags; ++ UINT16 x; ++ UINT16 y; + } mouse_event; + }; + }; +@@ -166,10 +163,28 @@ + { + REMMINA_RDP_UI_UPDATE_REGION = 0, + REMMINA_RDP_UI_CONNECTED, ++ REMMINA_RDP_UI_CURSOR, + REMMINA_RDP_UI_RFX, +- REMMINA_RDP_UI_NOCODEC ++ REMMINA_RDP_UI_NOCODEC, ++ REMMINA_RDP_UI_CLIPBOARD + } RemminaPluginRdpUiType; + ++typedef enum ++{ ++ REMMINA_RDP_UI_CLIPBOARD_FORMATLIST, ++ REMMINA_RDP_UI_CLIPBOARD_GET_DATA, ++ REMMINA_RDP_UI_CLIPBOARD_SET_DATA ++} RemminaPluginRdpUiClipboardType; ++ ++typedef enum ++{ ++ REMMINA_RDP_POINTER_NEW, ++ REMMINA_RDP_POINTER_FREE, ++ REMMINA_RDP_POINTER_SET, ++ REMMINA_RDP_POINTER_NULL, ++ REMMINA_RDP_POINTER_DEFAULT ++} RemminaPluginRdpUiPointerType; ++ + struct remmina_plugin_rdp_ui_object + { + RemminaPluginRdpUiType type; +@@ -184,6 +199,11 @@ + } region; + struct + { ++ rfPointer* pointer; ++ RemminaPluginRdpUiPointerType type; ++ } cursor; ++ struct ++ { + gint left; + gint top; + RFX_MESSAGE* message; +@@ -194,8 +214,14 @@ + gint top; + gint width; + gint height; +- uint8* bitmap; ++ UINT8* bitmap; + } nocodec; ++ struct ++ { ++ RemminaPluginRdpUiClipboardType type; ++ GtkTargetList* targetlist; ++ UINT32 format; ++ } clipboard; + }; + }; + typedef struct remmina_plugin_rdp_ui_object RemminaPluginRdpUiObject; +@@ -203,7 +229,7 @@ + void rf_init(RemminaProtocolWidget* gp); + void rf_uninit(RemminaProtocolWidget* gp); + void rf_get_fds(RemminaProtocolWidget* gp, void** rfds, int* rcount); +-boolean rf_check_fds(RemminaProtocolWidget* gp); ++BOOL rf_check_fds(RemminaProtocolWidget* gp); + void rf_queue_ui(RemminaProtocolWidget* gp, RemminaPluginRdpUiObject* ui); + void rf_object_free(RemminaProtocolWidget* gp, RemminaPluginRdpUiObject* obj); + +diff -urN remmina-plugins/rdp/rdp_settings.c remmina-plugins/rdp/rdp_settings.c +--- remmina-plugins/rdp/rdp_settings.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/rdp/rdp_settings.c 2014-01-08 02:31:52.000000000 +1100 +@@ -1,6 +1,6 @@ + /* + * Remmina - The GTK+ Remote Desktop Client +- * Copyright (C) 2010-2011 Vic Lee ++ * Copyright (C) 2010-2011 Vic Lee + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by +@@ -14,20 +14,20 @@ + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place, Suite 330, ++ * Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307, USA. + */ + + #include "rdp_plugin.h" + #include "rdp_settings.h" +-#include <freerdp/kbd/kbd.h> ++#include <freerdp/locale/keyboard.h> + + static guint keyboard_layout = 0; + static guint rdp_keyboard_layout = 0; + + static void remmina_rdp_settings_kbd_init(void) + { +- keyboard_layout = freerdp_kbd_init(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), rdp_keyboard_layout); ++ keyboard_layout = freerdp_keyboard_init(rdp_keyboard_layout); + } + + void remmina_rdp_settings_init(void) +@@ -141,7 +141,7 @@ + gint i; + gchar* s; + GtkTreeIter iter; +- rdpKeyboardLayout* layouts; ++ RDP_KEYBOARD_LAYOUT* layouts; + + gtk_list_store_append(table->keyboard_layout_store, &iter); + gtk_list_store_set(table->keyboard_layout_store, &iter, 0, 0, 1, _("<Auto detect>"), -1); +@@ -151,7 +151,7 @@ + + gtk_label_set_text(GTK_LABEL(table->keyboard_layout_label), "-"); + +- layouts = freerdp_kbd_get_layouts(RDP_KEYBOARD_LAYOUT_TYPE_STANDARD | RDP_KEYBOARD_LAYOUT_TYPE_VARIANT); ++ layouts = freerdp_keyboard_get_layouts(RDP_KEYBOARD_LAYOUT_TYPE_STANDARD | RDP_KEYBOARD_LAYOUT_TYPE_VARIANT); + + for (i = 0; layouts[i].code; i++) + { +diff -urN remmina-plugins/telepathy/CMakeLists.txt remmina-plugins/telepathy/CMakeLists.txt +--- remmina-plugins/telepathy/CMakeLists.txt 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/telepathy/CMakeLists.txt 2014-01-08 02:31:52.000000000 +1100 +@@ -23,6 +23,7 @@ + + add_library(remmina-plugin-telepathy ${REMMINA_PLUGIN_TELEPATHY_SRCS}) + set_target_properties(remmina-plugin-telepathy PROPERTIES PREFIX "") ++set_target_properties(remmina-plugin-telepathy PROPERTIES NO_SONAME 1) + + find_required_package(GTK3) + +diff -urN remmina-plugins/vnc/CMakeLists.txt remmina-plugins/vnc/CMakeLists.txt +--- remmina-plugins/vnc/CMakeLists.txt 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/CMakeLists.txt 2014-01-08 02:31:52.000000000 +1100 +@@ -17,7 +17,7 @@ + # Foundation, Inc., 59 Temple Place, Suite 330, + # Boston, MA 02111-1307, USA. + +-set(LIBVNCSERVER_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/libvncserver) ++set(LIBVNCSERVER_INCLUDE_DIRS) + set(LIBVNCSERVER_LIBRARIES vncclient) + + set(REMMINA_PLUGIN_VNC_SRCS +@@ -26,6 +26,7 @@ + + add_library(remmina-plugin-vnc ${REMMINA_PLUGIN_VNC_SRCS}) + set_target_properties(remmina-plugin-vnc PROPERTIES PREFIX "") ++set_target_properties(remmina-plugin-vnc PROPERTIES NO_SONAME 1) + + include_directories(${REMMINA_COMMON_INCLUDE_DIRS} ${LIBVNCSERVER_INCLUDE_DIRS}) + target_link_libraries(remmina-plugin-vnc ${REMMINA_COMMON_LIBRARIES} ${LIBVNCSERVER_LIBRARIES}) +diff -urN remmina-plugins/vnc/libvncserver/CMakeLists.txt remmina-plugins/vnc/libvncserver/CMakeLists.txt +--- remmina-plugins/vnc/libvncserver/CMakeLists.txt 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/CMakeLists.txt 1970-01-01 10:00:00.000000000 +1000 +@@ -1,102 +0,0 @@ +- +-include(CheckFunctionExists) +-include(CheckIncludeFile) +-include(CheckTypeSize) +-include(TestBigEndian) +- +-#set(PACKAGE_NAME "LibVNCServer") +-#set(FULL_PACKAGE_NAME "LibVNCServer") +-#set(PACKAGE_VERSION "0.9.8.2") +-#set(PROJECT_BUGREPORT_PATH "http://sourceforge.net/projects/libvncserver") +- +-include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/common) +- +-find_package(ZLIB) +-find_package(JPEG) +-find_package(GnuTLS) +-find_package(Threads) +-find_package(X11) +-find_library(LIBGCRYPT_LIBRARIES gcrypt) +- +-if(Threads_FOUND) +- option(TIGHTVNC_FILETRANSFER "Enable filetransfer" ON) +-endif(Threads_FOUND) +-if(ZLIB_FOUND) +- set(LIBVNCSERVER_HAVE_LIBZ 1) +-endif(ZLIB_FOUND) +-if(JPEG_FOUND) +- set(LIBVNCSERVER_HAVE_LIBJPEG 1) +-endif(JPEG_FOUND) +-option(LIBVNCSERVER_ALLOW24BPP "Allow 24 bpp" ON) +-if(GNUTLS_FOUND) +- set(LIBVNCSERVER_WITH_CLIENT_TLS 1) +-endif(GNUTLS_FOUND) +-if(LIBGCRYPT_LIBRARIES) +- message(STATUS "Found libgcrypt: ${LIBGCRYPT_LIBRARIES}") +- set(LIBVNCSERVER_WITH_CLIENT_GCRYPT 1) +-endif(LIBGCRYPT_LIBRARIES) +- +-check_include_file("fcntl.h" LIBVNCSERVER_HAVE_FCNTL_H) +-check_include_file("netinet/in.h" LIBVNCSERVER_HAVE_NETINET_IN_H) +-check_include_file("sys/socket.h" LIBVNCSERVER_HAVE_SYS_SOCKET_H) +-check_include_file("sys/stat.h" LIBVNCSERVER_HAVE_SYS_STAT_H) +-check_include_file("sys/time.h" LIBVNCSERVER_HAVE_SYS_TIME_H) +-check_include_file("sys/types.h" LIBVNCSERVER_HAVE_SYS_TYPES_H) +-check_include_file("sys/wait.h" LIBVNCSERVER_HAVE_SYS_WAIT_H) +-check_include_file("unistd.h" LIBVNCSERVER_HAVE_UNISTD_H) +- +-# headers needed for check_type_size() +-check_include_file("arpa/inet.h" HAVE_ARPA_INET_H) +-check_include_file("stdint.h" HAVE_STDINT_H) +-check_include_file("stddef.h" HAVE_STDDEF_H) +-check_include_file("sys/types.h" HAVE_SYS_TYPES_H) +- +-check_function_exists(gettimeofday LIBVNCSERVER_HAVE_GETTIMEOFDAY) +- +-if(CMAKE_USE_PTHREADS_INIT) +- set(LIBVNCSERVER_HAVE_LIBPTHREAD 1) +-endif(CMAKE_USE_PTHREADS_INIT) +-if(LIBVNCSERVER_HAVE_SYS_SOCKET_H) +- # socklen_t +- list(APPEND CMAKE_EXTRA_INCLUDE_FILES "sys/socket.h") +-endif(LIBVNCSERVER_HAVE_SYS_SOCKET_H) +-if(HAVE_ARPA_INET_H) +- # in_addr_t +- list(APPEND CMAKE_EXTRA_INCLUDE_FILES "arpa/inet.h") +-endif(HAVE_ARPA_INET_H) +- +-check_type_size(pid_t LIBVNCSERVER_PID_T) +-check_type_size(size_t LIBVNCSERVER_SIZE_T) +-check_type_size(socklen_t LIBVNCSERVER_SOCKLEN_T) +-check_type_size(in_addr_t LIBVNCSERVER_IN_ADDR_T) +- +-if(NOT HAVE_LIBVNCSERVER_IN_ADDR_T) +- set(LIBVNCSERVER_NEED_INADDR_T 1) +-endif(NOT HAVE_LIBVNCSERVER_IN_ADDR_T) +- +-TEST_BIG_ENDIAN(LIBVNCSERVER_WORDS_BIGENDIAN) +- +-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/rfb/rfbconfig.h.cmake ${CMAKE_CURRENT_SOURCE_DIR}/rfb/rfbconfig.h) +-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/rfb/rfbint.h.cmake ${CMAKE_CURRENT_SOURCE_DIR}/rfb/rfbint.h) +- +-set(COMMON_DIR ${CMAKE_CURRENT_SOURCE_DIR}/common) +-set(LIBVNCCLIENT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libvncclient) +- +-set(LIBVNCCLIENT_SOURCES +- ${LIBVNCCLIENT_DIR}/cursor.c +- ${LIBVNCCLIENT_DIR}/listen.c +- ${LIBVNCCLIENT_DIR}/rfbproto.c +- ${LIBVNCCLIENT_DIR}/sockets.c +- ${LIBVNCCLIENT_DIR}/vncviewer.c +- ${COMMON_DIR}/minilzo.c +- ${LIBVNCCLIENT_DIR}/tls.c +-) +- +-add_library(vncclient STATIC ${LIBVNCCLIENT_SOURCES}) +- +-if(WIN32) +- set(ADDITIONAL_LIBS ws2_32) +-endif(WIN32) +- +-target_link_libraries(vncclient ${ADDITIONAL_LIBS} ${ZLIB_LIBRARIES} ${JPEG_LIBRARIES}) +- +diff -urN remmina-plugins/vnc/libvncserver/common/d3des.c remmina-plugins/vnc/libvncserver/common/d3des.c +--- remmina-plugins/vnc/libvncserver/common/d3des.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/common/d3des.c 1970-01-01 10:00:00.000000000 +1000 +@@ -1,436 +0,0 @@ +-/* +- * This is D3DES (V5.09) by Richard Outerbridge with the double and +- * triple-length support removed for use in VNC. Also the bytebit[] array +- * has been reversed so that the most significant bit in each byte of the +- * key is ignored, not the least significant. +- * +- * These changes are: +- * Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved. +- * +- * This software 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. +- */ +- +-/* D3DES (V5.09) - +- * +- * A portable, public domain, version of the Data Encryption Standard. +- * +- * Written with Symantec's THINK (Lightspeed) C by Richard Outerbridge. +- * Thanks to: Dan Hoey for his excellent Initial and Inverse permutation +- * code; Jim Gillogly & Phil Karn for the DES key schedule code; Dennis +- * Ferguson, Eric Young and Dana How for comparing notes; and Ray Lau, +- * for humouring me on. +- * +- * Copyright (c) 1988,1989,1990,1991,1992 by Richard Outerbridge. +- * (GEnie : OUTER; CIS : [71755,204]) Graven Imagery, 1992. +- */ +- +-#include "d3des.h" +- +-static void scrunch(unsigned char *, unsigned long *); +-static void unscrun(unsigned long *, unsigned char *); +-static void desfunc(unsigned long *, unsigned long *); +-static void cookey(unsigned long *); +- +-static unsigned long KnL[32] = { 0L }; +-/* +-static unsigned long KnR[32] = { 0L }; +-static unsigned long Kn3[32] = { 0L }; +-static unsigned char Df_Key[24] = { +- 0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef, +- 0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10, +- 0x89,0xab,0xcd,0xef,0x01,0x23,0x45,0x67 }; +-*/ +- +-static unsigned short bytebit[8] = { +- 01, 02, 04, 010, 020, 040, 0100, 0200 }; +- +-static unsigned long bigbyte[24] = { +- 0x800000L, 0x400000L, 0x200000L, 0x100000L, +- 0x80000L, 0x40000L, 0x20000L, 0x10000L, +- 0x8000L, 0x4000L, 0x2000L, 0x1000L, +- 0x800L, 0x400L, 0x200L, 0x100L, +- 0x80L, 0x40L, 0x20L, 0x10L, +- 0x8L, 0x4L, 0x2L, 0x1L }; +- +-/* Use the key schedule specified in the Standard (ANSI X3.92-1981). */ +- +-static unsigned char pc1[56] = { +- 56, 48, 40, 32, 24, 16, 8, 0, 57, 49, 41, 33, 25, 17, +- 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, +- 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, +- 13, 5, 60, 52, 44, 36, 28, 20, 12, 4, 27, 19, 11, 3 }; +- +-static unsigned char totrot[16] = { +- 1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28 }; +- +-static unsigned char pc2[48] = { +- 13, 16, 10, 23, 0, 4, 2, 27, 14, 5, 20, 9, +- 22, 18, 11, 3, 25, 7, 15, 6, 26, 19, 12, 1, +- 40, 51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47, +- 43, 48, 38, 55, 33, 52, 45, 41, 49, 35, 28, 31 }; +- +-void rfbDesKey(unsigned char *key, +- int edf) +-{ +- register int i, j, l, m, n; +- unsigned char pc1m[56], pcr[56]; +- unsigned long kn[32]; +- +- for ( j = 0; j < 56; j++ ) { +- l = pc1[j]; +- m = l & 07; +- pc1m[j] = (key[l >> 3] & bytebit[m]) ? 1 : 0; +- } +- for( i = 0; i < 16; i++ ) { +- if( edf == DE1 ) m = (15 - i) << 1; +- else m = i << 1; +- n = m + 1; +- kn[m] = kn[n] = 0L; +- for( j = 0; j < 28; j++ ) { +- l = j + totrot[i]; +- if( l < 28 ) pcr[j] = pc1m[l]; +- else pcr[j] = pc1m[l - 28]; +- } +- for( j = 28; j < 56; j++ ) { +- l = j + totrot[i]; +- if( l < 56 ) pcr[j] = pc1m[l]; +- else pcr[j] = pc1m[l - 28]; +- } +- for( j = 0; j < 24; j++ ) { +- if( pcr[pc2[j]] ) kn[m] |= bigbyte[j]; +- if( pcr[pc2[j+24]] ) kn[n] |= bigbyte[j]; +- } +- } +- cookey(kn); +- return; +- } +- +-static void cookey(register unsigned long *raw1) +-{ +- register unsigned long *cook, *raw0; +- unsigned long dough[32]; +- register int i; +- +- cook = dough; +- for( i = 0; i < 16; i++, raw1++ ) { +- raw0 = raw1++; +- *cook = (*raw0 & 0x00fc0000L) << 6; +- *cook |= (*raw0 & 0x00000fc0L) << 10; +- *cook |= (*raw1 & 0x00fc0000L) >> 10; +- *cook++ |= (*raw1 & 0x00000fc0L) >> 6; +- *cook = (*raw0 & 0x0003f000L) << 12; +- *cook |= (*raw0 & 0x0000003fL) << 16; +- *cook |= (*raw1 & 0x0003f000L) >> 4; +- *cook++ |= (*raw1 & 0x0000003fL); +- } +- rfbUseKey(dough); +- return; +- } +- +-void rfbCPKey(register unsigned long *into) +-{ +- register unsigned long *from, *endp; +- +- from = KnL, endp = &KnL[32]; +- while( from < endp ) *into++ = *from++; +- return; +- } +- +-void rfbUseKey(register unsigned long *from) +-{ +- register unsigned long *to, *endp; +- +- to = KnL, endp = &KnL[32]; +- while( to < endp ) *to++ = *from++; +- return; +- } +- +-void rfbDes(unsigned char *inblock, +- unsigned char *outblock) +-{ +- unsigned long work[2]; +- +- scrunch(inblock, work); +- desfunc(work, KnL); +- unscrun(work, outblock); +- return; +- } +- +-static void scrunch(register unsigned char *outof, +- register unsigned long *into) +-{ +- *into = (*outof++ & 0xffL) << 24; +- *into |= (*outof++ & 0xffL) << 16; +- *into |= (*outof++ & 0xffL) << 8; +- *into++ |= (*outof++ & 0xffL); +- *into = (*outof++ & 0xffL) << 24; +- *into |= (*outof++ & 0xffL) << 16; +- *into |= (*outof++ & 0xffL) << 8; +- *into |= (*outof & 0xffL); +- return; +- } +- +-static void unscrun(register unsigned long *outof, +- register unsigned char *into) +-{ +- *into++ = (unsigned char)((*outof >> 24) & 0xffL); +- *into++ = (unsigned char)((*outof >> 16) & 0xffL); +- *into++ = (unsigned char)((*outof >> 8) & 0xffL); +- *into++ = (unsigned char)( *outof++ & 0xffL); +- *into++ = (unsigned char)((*outof >> 24) & 0xffL); +- *into++ = (unsigned char)((*outof >> 16) & 0xffL); +- *into++ = (unsigned char)((*outof >> 8) & 0xffL); +- *into = (unsigned char)( *outof & 0xffL); +- return; +- } +- +-static unsigned long SP1[64] = { +- 0x01010400L, 0x00000000L, 0x00010000L, 0x01010404L, +- 0x01010004L, 0x00010404L, 0x00000004L, 0x00010000L, +- 0x00000400L, 0x01010400L, 0x01010404L, 0x00000400L, +- 0x01000404L, 0x01010004L, 0x01000000L, 0x00000004L, +- 0x00000404L, 0x01000400L, 0x01000400L, 0x00010400L, +- 0x00010400L, 0x01010000L, 0x01010000L, 0x01000404L, +- 0x00010004L, 0x01000004L, 0x01000004L, 0x00010004L, +- 0x00000000L, 0x00000404L, 0x00010404L, 0x01000000L, +- 0x00010000L, 0x01010404L, 0x00000004L, 0x01010000L, +- 0x01010400L, 0x01000000L, 0x01000000L, 0x00000400L, +- 0x01010004L, 0x00010000L, 0x00010400L, 0x01000004L, +- 0x00000400L, 0x00000004L, 0x01000404L, 0x00010404L, +- 0x01010404L, 0x00010004L, 0x01010000L, 0x01000404L, +- 0x01000004L, 0x00000404L, 0x00010404L, 0x01010400L, +- 0x00000404L, 0x01000400L, 0x01000400L, 0x00000000L, +- 0x00010004L, 0x00010400L, 0x00000000L, 0x01010004L }; +- +-static unsigned long SP2[64] = { +- 0x80108020L, 0x80008000L, 0x00008000L, 0x00108020L, +- 0x00100000L, 0x00000020L, 0x80100020L, 0x80008020L, +- 0x80000020L, 0x80108020L, 0x80108000L, 0x80000000L, +- 0x80008000L, 0x00100000L, 0x00000020L, 0x80100020L, +- 0x00108000L, 0x00100020L, 0x80008020L, 0x00000000L, +- 0x80000000L, 0x00008000L, 0x00108020L, 0x80100000L, +- 0x00100020L, 0x80000020L, 0x00000000L, 0x00108000L, +- 0x00008020L, 0x80108000L, 0x80100000L, 0x00008020L, +- 0x00000000L, 0x00108020L, 0x80100020L, 0x00100000L, +- 0x80008020L, 0x80100000L, 0x80108000L, 0x00008000L, +- 0x80100000L, 0x80008000L, 0x00000020L, 0x80108020L, +- 0x00108020L, 0x00000020L, 0x00008000L, 0x80000000L, +- 0x00008020L, 0x80108000L, 0x00100000L, 0x80000020L, +- 0x00100020L, 0x80008020L, 0x80000020L, 0x00100020L, +- 0x00108000L, 0x00000000L, 0x80008000L, 0x00008020L, +- 0x80000000L, 0x80100020L, 0x80108020L, 0x00108000L }; +- +-static unsigned long SP3[64] = { +- 0x00000208L, 0x08020200L, 0x00000000L, 0x08020008L, +- 0x08000200L, 0x00000000L, 0x00020208L, 0x08000200L, +- 0x00020008L, 0x08000008L, 0x08000008L, 0x00020000L, +- 0x08020208L, 0x00020008L, 0x08020000L, 0x00000208L, +- 0x08000000L, 0x00000008L, 0x08020200L, 0x00000200L, +- 0x00020200L, 0x08020000L, 0x08020008L, 0x00020208L, +- 0x08000208L, 0x00020200L, 0x00020000L, 0x08000208L, +- 0x00000008L, 0x08020208L, 0x00000200L, 0x08000000L, +- 0x08020200L, 0x08000000L, 0x00020008L, 0x00000208L, +- 0x00020000L, 0x08020200L, 0x08000200L, 0x00000000L, +- 0x00000200L, 0x00020008L, 0x08020208L, 0x08000200L, +- 0x08000008L, 0x00000200L, 0x00000000L, 0x08020008L, +- 0x08000208L, 0x00020000L, 0x08000000L, 0x08020208L, +- 0x00000008L, 0x00020208L, 0x00020200L, 0x08000008L, +- 0x08020000L, 0x08000208L, 0x00000208L, 0x08020000L, +- 0x00020208L, 0x00000008L, 0x08020008L, 0x00020200L }; +- +-static unsigned long SP4[64] = { +- 0x00802001L, 0x00002081L, 0x00002081L, 0x00000080L, +- 0x00802080L, 0x00800081L, 0x00800001L, 0x00002001L, +- 0x00000000L, 0x00802000L, 0x00802000L, 0x00802081L, +- 0x00000081L, 0x00000000L, 0x00800080L, 0x00800001L, +- 0x00000001L, 0x00002000L, 0x00800000L, 0x00802001L, +- 0x00000080L, 0x00800000L, 0x00002001L, 0x00002080L, +- 0x00800081L, 0x00000001L, 0x00002080L, 0x00800080L, +- 0x00002000L, 0x00802080L, 0x00802081L, 0x00000081L, +- 0x00800080L, 0x00800001L, 0x00802000L, 0x00802081L, +- 0x00000081L, 0x00000000L, 0x00000000L, 0x00802000L, +- 0x00002080L, 0x00800080L, 0x00800081L, 0x00000001L, +- 0x00802001L, 0x00002081L, 0x00002081L, 0x00000080L, +- 0x00802081L, 0x00000081L, 0x00000001L, 0x00002000L, +- 0x00800001L, 0x00002001L, 0x00802080L, 0x00800081L, +- 0x00002001L, 0x00002080L, 0x00800000L, 0x00802001L, +- 0x00000080L, 0x00800000L, 0x00002000L, 0x00802080L }; +- +-static unsigned long SP5[64] = { +- 0x00000100L, 0x02080100L, 0x02080000L, 0x42000100L, +- 0x00080000L, 0x00000100L, 0x40000000L, 0x02080000L, +- 0x40080100L, 0x00080000L, 0x02000100L, 0x40080100L, +- 0x42000100L, 0x42080000L, 0x00080100L, 0x40000000L, +- 0x02000000L, 0x40080000L, 0x40080000L, 0x00000000L, +- 0x40000100L, 0x42080100L, 0x42080100L, 0x02000100L, +- 0x42080000L, 0x40000100L, 0x00000000L, 0x42000000L, +- 0x02080100L, 0x02000000L, 0x42000000L, 0x00080100L, +- 0x00080000L, 0x42000100L, 0x00000100L, 0x02000000L, +- 0x40000000L, 0x02080000L, 0x42000100L, 0x40080100L, +- 0x02000100L, 0x40000000L, 0x42080000L, 0x02080100L, +- 0x40080100L, 0x00000100L, 0x02000000L, 0x42080000L, +- 0x42080100L, 0x00080100L, 0x42000000L, 0x42080100L, +- 0x02080000L, 0x00000000L, 0x40080000L, 0x42000000L, +- 0x00080100L, 0x02000100L, 0x40000100L, 0x00080000L, +- 0x00000000L, 0x40080000L, 0x02080100L, 0x40000100L }; +- +-static unsigned long SP6[64] = { +- 0x20000010L, 0x20400000L, 0x00004000L, 0x20404010L, +- 0x20400000L, 0x00000010L, 0x20404010L, 0x00400000L, +- 0x20004000L, 0x00404010L, 0x00400000L, 0x20000010L, +- 0x00400010L, 0x20004000L, 0x20000000L, 0x00004010L, +- 0x00000000L, 0x00400010L, 0x20004010L, 0x00004000L, +- 0x00404000L, 0x20004010L, 0x00000010L, 0x20400010L, +- 0x20400010L, 0x00000000L, 0x00404010L, 0x20404000L, +- 0x00004010L, 0x00404000L, 0x20404000L, 0x20000000L, +- 0x20004000L, 0x00000010L, 0x20400010L, 0x00404000L, +- 0x20404010L, 0x00400000L, 0x00004010L, 0x20000010L, +- 0x00400000L, 0x20004000L, 0x20000000L, 0x00004010L, +- 0x20000010L, 0x20404010L, 0x00404000L, 0x20400000L, +- 0x00404010L, 0x20404000L, 0x00000000L, 0x20400010L, +- 0x00000010L, 0x00004000L, 0x20400000L, 0x00404010L, +- 0x00004000L, 0x00400010L, 0x20004010L, 0x00000000L, +- 0x20404000L, 0x20000000L, 0x00400010L, 0x20004010L }; +- +-static unsigned long SP7[64] = { +- 0x00200000L, 0x04200002L, 0x04000802L, 0x00000000L, +- 0x00000800L, 0x04000802L, 0x00200802L, 0x04200800L, +- 0x04200802L, 0x00200000L, 0x00000000L, 0x04000002L, +- 0x00000002L, 0x04000000L, 0x04200002L, 0x00000802L, +- 0x04000800L, 0x00200802L, 0x00200002L, 0x04000800L, +- 0x04000002L, 0x04200000L, 0x04200800L, 0x00200002L, +- 0x04200000L, 0x00000800L, 0x00000802L, 0x04200802L, +- 0x00200800L, 0x00000002L, 0x04000000L, 0x00200800L, +- 0x04000000L, 0x00200800L, 0x00200000L, 0x04000802L, +- 0x04000802L, 0x04200002L, 0x04200002L, 0x00000002L, +- 0x00200002L, 0x04000000L, 0x04000800L, 0x00200000L, +- 0x04200800L, 0x00000802L, 0x00200802L, 0x04200800L, +- 0x00000802L, 0x04000002L, 0x04200802L, 0x04200000L, +- 0x00200800L, 0x00000000L, 0x00000002L, 0x04200802L, +- 0x00000000L, 0x00200802L, 0x04200000L, 0x00000800L, +- 0x04000002L, 0x04000800L, 0x00000800L, 0x00200002L }; +- +-static unsigned long SP8[64] = { +- 0x10001040L, 0x00001000L, 0x00040000L, 0x10041040L, +- 0x10000000L, 0x10001040L, 0x00000040L, 0x10000000L, +- 0x00040040L, 0x10040000L, 0x10041040L, 0x00041000L, +- 0x10041000L, 0x00041040L, 0x00001000L, 0x00000040L, +- 0x10040000L, 0x10000040L, 0x10001000L, 0x00001040L, +- 0x00041000L, 0x00040040L, 0x10040040L, 0x10041000L, +- 0x00001040L, 0x00000000L, 0x00000000L, 0x10040040L, +- 0x10000040L, 0x10001000L, 0x00041040L, 0x00040000L, +- 0x00041040L, 0x00040000L, 0x10041000L, 0x00001000L, +- 0x00000040L, 0x10040040L, 0x00001000L, 0x00041040L, +- 0x10001000L, 0x00000040L, 0x10000040L, 0x10040000L, +- 0x10040040L, 0x10000000L, 0x00040000L, 0x10001040L, +- 0x00000000L, 0x10041040L, 0x00040040L, 0x10000040L, +- 0x10040000L, 0x10001000L, 0x10001040L, 0x00000000L, +- 0x10041040L, 0x00041000L, 0x00041000L, 0x00001040L, +- 0x00001040L, 0x00040040L, 0x10000000L, 0x10041000L }; +- +-static void desfunc(register unsigned long *block, +- register unsigned long *keys) +-{ +- register unsigned long fval, work, right, leftt; +- register int round; +- +- leftt = block[0]; +- right = block[1]; +- work = ((leftt >> 4) ^ right) & 0x0f0f0f0fL; +- right ^= work; +- leftt ^= (work << 4); +- work = ((leftt >> 16) ^ right) & 0x0000ffffL; +- right ^= work; +- leftt ^= (work << 16); +- work = ((right >> 2) ^ leftt) & 0x33333333L; +- leftt ^= work; +- right ^= (work << 2); +- work = ((right >> 8) ^ leftt) & 0x00ff00ffL; +- leftt ^= work; +- right ^= (work << 8); +- right = ((right << 1) | ((right >> 31) & 1L)) & 0xffffffffL; +- work = (leftt ^ right) & 0xaaaaaaaaL; +- leftt ^= work; +- right ^= work; +- leftt = ((leftt << 1) | ((leftt >> 31) & 1L)) & 0xffffffffL; +- +- for( round = 0; round < 8; round++ ) { +- work = (right << 28) | (right >> 4); +- work ^= *keys++; +- fval = SP7[ work & 0x3fL]; +- fval |= SP5[(work >> 8) & 0x3fL]; +- fval |= SP3[(work >> 16) & 0x3fL]; +- fval |= SP1[(work >> 24) & 0x3fL]; +- work = right ^ *keys++; +- fval |= SP8[ work & 0x3fL]; +- fval |= SP6[(work >> 8) & 0x3fL]; +- fval |= SP4[(work >> 16) & 0x3fL]; +- fval |= SP2[(work >> 24) & 0x3fL]; +- leftt ^= fval; +- work = (leftt << 28) | (leftt >> 4); +- work ^= *keys++; +- fval = SP7[ work & 0x3fL]; +- fval |= SP5[(work >> 8) & 0x3fL]; +- fval |= SP3[(work >> 16) & 0x3fL]; +- fval |= SP1[(work >> 24) & 0x3fL]; +- work = leftt ^ *keys++; +- fval |= SP8[ work & 0x3fL]; +- fval |= SP6[(work >> 8) & 0x3fL]; +- fval |= SP4[(work >> 16) & 0x3fL]; +- fval |= SP2[(work >> 24) & 0x3fL]; +- right ^= fval; +- } +- +- right = (right << 31) | (right >> 1); +- work = (leftt ^ right) & 0xaaaaaaaaL; +- leftt ^= work; +- right ^= work; +- leftt = (leftt << 31) | (leftt >> 1); +- work = ((leftt >> 8) ^ right) & 0x00ff00ffL; +- right ^= work; +- leftt ^= (work << 8); +- work = ((leftt >> 2) ^ right) & 0x33333333L; +- right ^= work; +- leftt ^= (work << 2); +- work = ((right >> 16) ^ leftt) & 0x0000ffffL; +- leftt ^= work; +- right ^= (work << 16); +- work = ((right >> 4) ^ leftt) & 0x0f0f0f0fL; +- leftt ^= work; +- right ^= (work << 4); +- *block++ = right; +- *block = leftt; +- return; +- } +- +-/* Validation sets: +- * +- * Single-length key, single-length plaintext - +- * Key : 0123 4567 89ab cdef +- * Plain : 0123 4567 89ab cde7 +- * Cipher : c957 4425 6a5e d31d +- * +- * Double-length key, single-length plaintext - +- * Key : 0123 4567 89ab cdef fedc ba98 7654 3210 +- * Plain : 0123 4567 89ab cde7 +- * Cipher : 7f1d 0a77 826b 8aff +- * +- * Double-length key, double-length plaintext - +- * Key : 0123 4567 89ab cdef fedc ba98 7654 3210 +- * Plain : 0123 4567 89ab cdef 0123 4567 89ab cdff +- * Cipher : 27a0 8440 406a df60 278f 47cf 42d6 15d7 +- * +- * Triple-length key, single-length plaintext - +- * Key : 0123 4567 89ab cdef fedc ba98 7654 3210 89ab cdef 0123 4567 +- * Plain : 0123 4567 89ab cde7 +- * Cipher : de0b 7c06 ae5e 0ed5 +- * +- * Triple-length key, double-length plaintext - +- * Key : 0123 4567 89ab cdef fedc ba98 7654 3210 89ab cdef 0123 4567 +- * Plain : 0123 4567 89ab cdef 0123 4567 89ab cdff +- * Cipher : ad0d 1b30 ac17 cf07 0ed1 1c63 81e4 4de5 +- * +- * d3des V5.0a rwo 9208.07 18:44 Graven Imagery +- **********************************************************************/ +diff -urN remmina-plugins/vnc/libvncserver/common/d3des.h remmina-plugins/vnc/libvncserver/common/d3des.h +--- remmina-plugins/vnc/libvncserver/common/d3des.h 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/common/d3des.h 1970-01-01 10:00:00.000000000 +1000 +@@ -1,56 +0,0 @@ +-#ifndef D3DES_H +-#define D3DES_H +- +-/* +- * This is D3DES (V5.09) by Richard Outerbridge with the double and +- * triple-length support removed for use in VNC. +- * +- * These changes are: +- * Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved. +- * +- * This software 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. +- */ +- +-/* d3des.h - +- * +- * Headers and defines for d3des.c +- * Graven Imagery, 1992. +- * +- * Copyright (c) 1988,1989,1990,1991,1992 by Richard Outerbridge +- * (GEnie : OUTER; CIS : [71755,204]) +- */ +- +-#define EN0 0 /* MODE == encrypt */ +-#define DE1 1 /* MODE == decrypt */ +- +-extern void rfbDesKey(unsigned char *, int); +-/* hexkey[8] MODE +- * Sets the internal key register according to the hexadecimal +- * key contained in the 8 bytes of hexkey, according to the DES, +- * for encryption or decryption according to MODE. +- */ +- +-extern void rfbUseKey(unsigned long *); +-/* cookedkey[32] +- * Loads the internal key register with the data in cookedkey. +- */ +- +-extern void rfbCPKey(unsigned long *); +-/* cookedkey[32] +- * Copies the contents of the internal key register into the storage +- * located at &cookedkey[0]. +- */ +- +-extern void rfbDes(unsigned char *, unsigned char *); +-/* from[8] to[8] +- * Encrypts/Decrypts (according to the key currently loaded in the +- * internal key register) one block of eight bytes at address 'from' +- * into the block at address 'to'. They can be the same. +- */ +- +-/* d3des.h V5.09 rwo 9208.04 15:06 Graven Imagery +- ********************************************************************/ +- +-#endif +diff -urN remmina-plugins/vnc/libvncserver/common/lzoconf.h remmina-plugins/vnc/libvncserver/common/lzoconf.h +--- remmina-plugins/vnc/libvncserver/common/lzoconf.h 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/common/lzoconf.h 1970-01-01 10:00:00.000000000 +1000 +@@ -1,419 +0,0 @@ +-/* lzoconf.h -- configuration for the LZO real-time data compression library +- +- This file is part of the LZO real-time data compression library. +- +- Copyright (C) 2010 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2009 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2008 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2007 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2006 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2005 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2004 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2003 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer +- All Rights Reserved. +- +- The LZO library is free software; you can 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. +- +- The LZO library 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 the LZO library; see the file COPYING. +- If not, write to the Free Software Foundation, Inc., +- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +- +- Markus F.X.J. Oberhumer +- <markus@oberhumer.com> +- http://www.oberhumer.com/opensource/lzo/ +- */ +- +- +-#ifndef __LZOCONF_H_INCLUDED +-#define __LZOCONF_H_INCLUDED 1 +- +-#define LZO_VERSION 0x2040 +-#define LZO_VERSION_STRING "2.04" +-#define LZO_VERSION_DATE "Oct 31 2010" +- +-/* internal Autoconf configuration file - only used when building LZO */ +-#if defined(LZO_HAVE_CONFIG_H) +-# include <config.h> +-#endif +-#include <limits.h> +-#include <stddef.h> +- +- +-/*********************************************************************** +-// LZO requires a conforming <limits.h> +-************************************************************************/ +- +-#if !defined(CHAR_BIT) || (CHAR_BIT != 8) +-# error "invalid CHAR_BIT" +-#endif +-#if !defined(UCHAR_MAX) || !defined(UINT_MAX) || !defined(ULONG_MAX) +-# error "check your compiler installation" +-#endif +-#if (USHRT_MAX < 1) || (UINT_MAX < 1) || (ULONG_MAX < 1) +-# error "your limits.h macros are broken" +-#endif +- +-/* get OS and architecture defines */ +-#ifndef __LZODEFS_H_INCLUDED +-#include "lzodefs.h" +-#endif +- +- +-#ifdef __cplusplus +-extern "C" { +-#endif +- +- +-/*********************************************************************** +-// some core defines +-************************************************************************/ +- +-#if !defined(LZO_UINT32_C) +-# if (UINT_MAX < LZO_0xffffffffL) +-# define LZO_UINT32_C(c) c ## UL +-# else +-# define LZO_UINT32_C(c) ((c) + 0U) +-# endif +-#endif +- +-/* memory checkers */ +-#if !defined(__LZO_CHECKER) +-# if defined(__BOUNDS_CHECKING_ON) +-# define __LZO_CHECKER 1 +-# elif defined(__CHECKER__) +-# define __LZO_CHECKER 1 +-# elif defined(__INSURE__) +-# define __LZO_CHECKER 1 +-# elif defined(__PURIFY__) +-# define __LZO_CHECKER 1 +-# endif +-#endif +- +- +-/*********************************************************************** +-// integral and pointer types +-************************************************************************/ +- +-/* lzo_uint should match size_t */ +-#if !defined(LZO_UINT_MAX) +-# if defined(LZO_ABI_LLP64) /* WIN64 */ +-# if defined(LZO_OS_WIN64) +- typedef unsigned __int64 lzo_uint; +- typedef __int64 lzo_int; +-# else +- typedef unsigned long long lzo_uint; +- typedef long long lzo_int; +-# endif +-# define LZO_UINT_MAX 0xffffffffffffffffull +-# define LZO_INT_MAX 9223372036854775807LL +-# define LZO_INT_MIN (-1LL - LZO_INT_MAX) +-# elif defined(LZO_ABI_IP32L64) /* MIPS R5900 */ +- typedef unsigned int lzo_uint; +- typedef int lzo_int; +-# define LZO_UINT_MAX UINT_MAX +-# define LZO_INT_MAX INT_MAX +-# define LZO_INT_MIN INT_MIN +-# elif (ULONG_MAX >= LZO_0xffffffffL) +- typedef unsigned long lzo_uint; +- typedef long lzo_int; +-# define LZO_UINT_MAX ULONG_MAX +-# define LZO_INT_MAX LONG_MAX +-# define LZO_INT_MIN LONG_MIN +-# else +-# error "lzo_uint" +-# endif +-#endif +- +-/* Integral types with 32 bits or more. */ +-#if !defined(LZO_UINT32_MAX) +-# if (UINT_MAX >= LZO_0xffffffffL) +- typedef unsigned int lzo_uint32; +- typedef int lzo_int32; +-# define LZO_UINT32_MAX UINT_MAX +-# define LZO_INT32_MAX INT_MAX +-# define LZO_INT32_MIN INT_MIN +-# elif (ULONG_MAX >= LZO_0xffffffffL) +- typedef unsigned long lzo_uint32; +- typedef long lzo_int32; +-# define LZO_UINT32_MAX ULONG_MAX +-# define LZO_INT32_MAX LONG_MAX +-# define LZO_INT32_MIN LONG_MIN +-# else +-# error "lzo_uint32" +-# endif +-#endif +- +-/* The larger type of lzo_uint and lzo_uint32. */ +-#if (LZO_UINT_MAX >= LZO_UINT32_MAX) +-# define lzo_xint lzo_uint +-#else +-# define lzo_xint lzo_uint32 +-#endif +- +-/* Memory model that allows to access memory at offsets of lzo_uint. */ +-#if !defined(__LZO_MMODEL) +-# if (LZO_UINT_MAX <= UINT_MAX) +-# define __LZO_MMODEL /*empty*/ +-# elif defined(LZO_HAVE_MM_HUGE_PTR) +-# define __LZO_MMODEL_HUGE 1 +-# define __LZO_MMODEL __huge +-# else +-# define __LZO_MMODEL /*empty*/ +-# endif +-#endif +- +-/* no typedef here because of const-pointer issues */ +-#define lzo_bytep unsigned char __LZO_MMODEL * +-#define lzo_charp char __LZO_MMODEL * +-#define lzo_voidp void __LZO_MMODEL * +-#define lzo_shortp short __LZO_MMODEL * +-#define lzo_ushortp unsigned short __LZO_MMODEL * +-#define lzo_uint32p lzo_uint32 __LZO_MMODEL * +-#define lzo_int32p lzo_int32 __LZO_MMODEL * +-#define lzo_uintp lzo_uint __LZO_MMODEL * +-#define lzo_intp lzo_int __LZO_MMODEL * +-#define lzo_xintp lzo_xint __LZO_MMODEL * +-#define lzo_voidpp lzo_voidp __LZO_MMODEL * +-#define lzo_bytepp lzo_bytep __LZO_MMODEL * +-/* deprecated - use 'lzo_bytep' instead of 'lzo_byte *' */ +-#define lzo_byte unsigned char __LZO_MMODEL +- +-typedef int lzo_bool; +- +- +-/*********************************************************************** +-// function types +-************************************************************************/ +- +-/* name mangling */ +-#if !defined(__LZO_EXTERN_C) +-# ifdef __cplusplus +-# define __LZO_EXTERN_C extern "C" +-# else +-# define __LZO_EXTERN_C extern +-# endif +-#endif +- +-/* calling convention */ +-#if !defined(__LZO_CDECL) +-# define __LZO_CDECL __lzo_cdecl +-#endif +- +-/* DLL export information */ +-#if !defined(__LZO_EXPORT1) +-# define __LZO_EXPORT1 /*empty*/ +-#endif +-#if !defined(__LZO_EXPORT2) +-# define __LZO_EXPORT2 /*empty*/ +-#endif +- +-/* __cdecl calling convention for public C and assembly functions */ +-#if !defined(LZO_PUBLIC) +-# define LZO_PUBLIC(_rettype) __LZO_EXPORT1 _rettype __LZO_EXPORT2 __LZO_CDECL +-#endif +-#if !defined(LZO_EXTERN) +-# define LZO_EXTERN(_rettype) __LZO_EXTERN_C LZO_PUBLIC(_rettype) +-#endif +-#if !defined(LZO_PRIVATE) +-# define LZO_PRIVATE(_rettype) static _rettype __LZO_CDECL +-#endif +- +-/* function types */ +-typedef int +-(__LZO_CDECL *lzo_compress_t) ( const lzo_bytep src, lzo_uint src_len, +- lzo_bytep dst, lzo_uintp dst_len, +- lzo_voidp wrkmem ); +- +-typedef int +-(__LZO_CDECL *lzo_decompress_t) ( const lzo_bytep src, lzo_uint src_len, +- lzo_bytep dst, lzo_uintp dst_len, +- lzo_voidp wrkmem ); +- +-typedef int +-(__LZO_CDECL *lzo_optimize_t) ( lzo_bytep src, lzo_uint src_len, +- lzo_bytep dst, lzo_uintp dst_len, +- lzo_voidp wrkmem ); +- +-typedef int +-(__LZO_CDECL *lzo_compress_dict_t)(const lzo_bytep src, lzo_uint src_len, +- lzo_bytep dst, lzo_uintp dst_len, +- lzo_voidp wrkmem, +- const lzo_bytep dict, lzo_uint dict_len ); +- +-typedef int +-(__LZO_CDECL *lzo_decompress_dict_t)(const lzo_bytep src, lzo_uint src_len, +- lzo_bytep dst, lzo_uintp dst_len, +- lzo_voidp wrkmem, +- const lzo_bytep dict, lzo_uint dict_len ); +- +- +-/* Callback interface. Currently only the progress indicator ("nprogress") +- * is used, but this may change in a future release. */ +- +-struct lzo_callback_t; +-typedef struct lzo_callback_t lzo_callback_t; +-#define lzo_callback_p lzo_callback_t __LZO_MMODEL * +- +-/* malloc & free function types */ +-typedef lzo_voidp (__LZO_CDECL *lzo_alloc_func_t) +- (lzo_callback_p self, lzo_uint items, lzo_uint size); +-typedef void (__LZO_CDECL *lzo_free_func_t) +- (lzo_callback_p self, lzo_voidp ptr); +- +-/* a progress indicator callback function */ +-typedef void (__LZO_CDECL *lzo_progress_func_t) +- (lzo_callback_p, lzo_uint, lzo_uint, int); +- +-struct lzo_callback_t +-{ +- /* custom allocators (set to 0 to disable) */ +- lzo_alloc_func_t nalloc; /* [not used right now] */ +- lzo_free_func_t nfree; /* [not used right now] */ +- +- /* a progress indicator callback function (set to 0 to disable) */ +- lzo_progress_func_t nprogress; +- +- /* NOTE: the first parameter "self" of the nalloc/nfree/nprogress +- * callbacks points back to this struct, so you are free to store +- * some extra info in the following variables. */ +- lzo_voidp user1; +- lzo_xint user2; +- lzo_xint user3; +-}; +- +- +-/*********************************************************************** +-// error codes and prototypes +-************************************************************************/ +- +-/* Error codes for the compression/decompression functions. Negative +- * values are errors, positive values will be used for special but +- * normal events. +- */ +-#define LZO_E_OK 0 +-#define LZO_E_ERROR (-1) +-#define LZO_E_OUT_OF_MEMORY (-2) /* [not used right now] */ +-#define LZO_E_NOT_COMPRESSIBLE (-3) /* [not used right now] */ +-#define LZO_E_INPUT_OVERRUN (-4) +-#define LZO_E_OUTPUT_OVERRUN (-5) +-#define LZO_E_LOOKBEHIND_OVERRUN (-6) +-#define LZO_E_EOF_NOT_FOUND (-7) +-#define LZO_E_INPUT_NOT_CONSUMED (-8) +-#define LZO_E_NOT_YET_IMPLEMENTED (-9) /* [not used right now] */ +- +- +-#ifndef lzo_sizeof_dict_t +-# define lzo_sizeof_dict_t ((unsigned)sizeof(lzo_bytep)) +-#endif +- +-/* lzo_init() should be the first function you call. +- * Check the return code ! +- * +- * lzo_init() is a macro to allow checking that the library and the +- * compiler's view of various types are consistent. +- */ +-#define lzo_init() __lzo_init_v2(LZO_VERSION,(int)sizeof(short),(int)sizeof(int),\ +- (int)sizeof(long),(int)sizeof(lzo_uint32),(int)sizeof(lzo_uint),\ +- (int)lzo_sizeof_dict_t,(int)sizeof(char *),(int)sizeof(lzo_voidp),\ +- (int)sizeof(lzo_callback_t)) +-LZO_EXTERN(int) __lzo_init_v2(unsigned,int,int,int,int,int,int,int,int,int); +- +-/* version functions (useful for shared libraries) */ +-LZO_EXTERN(unsigned) lzo_version(void); +-LZO_EXTERN(const char *) lzo_version_string(void); +-LZO_EXTERN(const char *) lzo_version_date(void); +-LZO_EXTERN(const lzo_charp) _lzo_version_string(void); +-LZO_EXTERN(const lzo_charp) _lzo_version_date(void); +- +-/* string functions */ +-LZO_EXTERN(int) +- lzo_memcmp(const lzo_voidp a, const lzo_voidp b, lzo_uint len); +-LZO_EXTERN(lzo_voidp) +- lzo_memcpy(lzo_voidp dst, const lzo_voidp src, lzo_uint len); +-LZO_EXTERN(lzo_voidp) +- lzo_memmove(lzo_voidp dst, const lzo_voidp src, lzo_uint len); +-LZO_EXTERN(lzo_voidp) +- lzo_memset(lzo_voidp buf, int c, lzo_uint len); +- +-/* checksum functions */ +-LZO_EXTERN(lzo_uint32) +- lzo_adler32(lzo_uint32 c, const lzo_bytep buf, lzo_uint len); +-LZO_EXTERN(lzo_uint32) +- lzo_crc32(lzo_uint32 c, const lzo_bytep buf, lzo_uint len); +-LZO_EXTERN(const lzo_uint32p) +- lzo_get_crc32_table(void); +- +-/* misc. */ +-LZO_EXTERN(int) _lzo_config_check(void); +-typedef union { lzo_bytep p; lzo_uint u; } __lzo_pu_u; +-typedef union { lzo_bytep p; lzo_uint32 u32; } __lzo_pu32_u; +-typedef union { void *vp; lzo_bytep bp; lzo_uint u; lzo_uint32 u32; unsigned long l; } lzo_align_t; +- +-/* align a char pointer on a boundary that is a multiple of 'size' */ +-LZO_EXTERN(unsigned) __lzo_align_gap(const lzo_voidp p, lzo_uint size); +-#define LZO_PTR_ALIGN_UP(p,size) \ +- ((p) + (lzo_uint) __lzo_align_gap((const lzo_voidp)(p),(lzo_uint)(size))) +- +- +-/*********************************************************************** +-// deprecated macros - only for backward compatibility with LZO v1.xx +-************************************************************************/ +- +-#if defined(LZO_CFG_COMPAT) +- +-#define __LZOCONF_H 1 +- +-#if defined(LZO_ARCH_I086) +-# define __LZO_i386 1 +-#elif defined(LZO_ARCH_I386) +-# define __LZO_i386 1 +-#endif +- +-#if defined(LZO_OS_DOS16) +-# define __LZO_DOS 1 +-# define __LZO_DOS16 1 +-#elif defined(LZO_OS_DOS32) +-# define __LZO_DOS 1 +-#elif defined(LZO_OS_WIN16) +-# define __LZO_WIN 1 +-# define __LZO_WIN16 1 +-#elif defined(LZO_OS_WIN32) +-# define __LZO_WIN 1 +-#endif +- +-#define __LZO_CMODEL /*empty*/ +-#define __LZO_DMODEL /*empty*/ +-#define __LZO_ENTRY __LZO_CDECL +-#define LZO_EXTERN_CDECL LZO_EXTERN +-#define LZO_ALIGN LZO_PTR_ALIGN_UP +- +-#define lzo_compress_asm_t lzo_compress_t +-#define lzo_decompress_asm_t lzo_decompress_t +- +-#endif /* LZO_CFG_COMPAT */ +- +- +-#ifdef __cplusplus +-} /* extern "C" */ +-#endif +- +-#endif /* already included */ +- +- +-/* vim:set ts=4 et: */ +diff -urN remmina-plugins/vnc/libvncserver/common/lzodefs.h remmina-plugins/vnc/libvncserver/common/lzodefs.h +--- remmina-plugins/vnc/libvncserver/common/lzodefs.h 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/common/lzodefs.h 1970-01-01 10:00:00.000000000 +1000 +@@ -1,1851 +0,0 @@ +-/* lzodefs.h -- architecture, OS and compiler specific defines +- +- This file is part of the LZO real-time data compression library. +- +- Copyright (C) 2010 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2009 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2008 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2007 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2006 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2005 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2004 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2003 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer +- All Rights Reserved. +- +- The LZO library is free software; you can 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. +- +- The LZO library 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 the LZO library; see the file COPYING. +- If not, write to the Free Software Foundation, Inc., +- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +- +- Markus F.X.J. Oberhumer +- <markus@oberhumer.com> +- http://www.oberhumer.com/opensource/lzo/ +- */ +- +- +-#ifndef __LZODEFS_H_INCLUDED +-#define __LZODEFS_H_INCLUDED 1 +- +-#if defined(__CYGWIN32__) && !defined(__CYGWIN__) +-# define __CYGWIN__ __CYGWIN32__ +-#endif +-#if defined(__IBMCPP__) && !defined(__IBMC__) +-# define __IBMC__ __IBMCPP__ +-#endif +-#if defined(__ICL) && defined(_WIN32) && !defined(__INTEL_COMPILER) +-# define __INTEL_COMPILER __ICL +-#endif +-#if 1 && defined(__INTERIX) && defined(__GNUC__) && !defined(_ALL_SOURCE) +-# define _ALL_SOURCE 1 +-#endif +-#if defined(__mips__) && defined(__R5900__) +-# if !defined(__LONG_MAX__) +-# define __LONG_MAX__ 9223372036854775807L +-# endif +-#endif +-#if defined(__INTEL_COMPILER) && defined(__linux__) +-# pragma warning(disable: 193) +-#endif +-#if defined(__KEIL__) && defined(__C166__) +-# pragma warning disable = 322 +-#elif 0 && defined(__C251__) +-# pragma warning disable = 322 +-#endif +-#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && !defined(__MWERKS__) +-# if (_MSC_VER >= 1300) +-# pragma warning(disable: 4668) +-# endif +-#endif +-#if 0 && defined(__WATCOMC__) +-# if (__WATCOMC__ >= 1050) && (__WATCOMC__ < 1060) +-# pragma warning 203 9 +-# endif +-#endif +-#if defined(__BORLANDC__) && defined(__MSDOS__) && !defined(__FLAT__) +-# pragma option -h +-#endif +-#if 0 +-#define LZO_0xffffL 0xfffful +-#define LZO_0xffffffffL 0xfffffffful +-#else +-#define LZO_0xffffL 65535ul +-#define LZO_0xffffffffL 4294967295ul +-#endif +-#if (LZO_0xffffL == LZO_0xffffffffL) +-# error "your preprocessor is broken 1" +-#endif +-#if (16ul * 16384ul != 262144ul) +-# error "your preprocessor is broken 2" +-#endif +-#if 0 +-#if (32767 >= 4294967295ul) +-# error "your preprocessor is broken 3" +-#endif +-#if (65535u >= 4294967295ul) +-# error "your preprocessor is broken 4" +-#endif +-#endif +-#if (UINT_MAX == LZO_0xffffL) +-#if defined(__ZTC__) && defined(__I86__) && !defined(__OS2__) +-# if !defined(MSDOS) +-# define MSDOS 1 +-# endif +-# if !defined(_MSDOS) +-# define _MSDOS 1 +-# endif +-#elif 0 && defined(__VERSION) && defined(MB_LEN_MAX) +-# if (__VERSION == 520) && (MB_LEN_MAX == 1) +-# if !defined(__AZTEC_C__) +-# define __AZTEC_C__ __VERSION +-# endif +-# if !defined(__DOS__) +-# define __DOS__ 1 +-# endif +-# endif +-#endif +-#endif +-#if defined(_MSC_VER) && defined(M_I86HM) && (UINT_MAX == LZO_0xffffL) +-# define ptrdiff_t long +-# define _PTRDIFF_T_DEFINED 1 +-#endif +-#if (UINT_MAX == LZO_0xffffL) +-# undef __LZO_RENAME_A +-# undef __LZO_RENAME_B +-# if defined(__AZTEC_C__) && defined(__DOS__) +-# define __LZO_RENAME_A 1 +-# elif defined(_MSC_VER) && defined(MSDOS) +-# if (_MSC_VER < 600) +-# define __LZO_RENAME_A 1 +-# elif (_MSC_VER < 700) +-# define __LZO_RENAME_B 1 +-# endif +-# elif defined(__TSC__) && defined(__OS2__) +-# define __LZO_RENAME_A 1 +-# elif defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0410) +-# define __LZO_RENAME_A 1 +-# elif defined(__PACIFIC__) && defined(DOS) +-# if !defined(__far) +-# define __far far +-# endif +-# if !defined(__near) +-# define __near near +-# endif +-# endif +-# if defined(__LZO_RENAME_A) +-# if !defined(__cdecl) +-# define __cdecl cdecl +-# endif +-# if !defined(__far) +-# define __far far +-# endif +-# if !defined(__huge) +-# define __huge huge +-# endif +-# if !defined(__near) +-# define __near near +-# endif +-# if !defined(__pascal) +-# define __pascal pascal +-# endif +-# if !defined(__huge) +-# define __huge huge +-# endif +-# elif defined(__LZO_RENAME_B) +-# if !defined(__cdecl) +-# define __cdecl _cdecl +-# endif +-# if !defined(__far) +-# define __far _far +-# endif +-# if !defined(__huge) +-# define __huge _huge +-# endif +-# if !defined(__near) +-# define __near _near +-# endif +-# if !defined(__pascal) +-# define __pascal _pascal +-# endif +-# elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__) +-# if !defined(__cdecl) +-# define __cdecl cdecl +-# endif +-# if !defined(__pascal) +-# define __pascal pascal +-# endif +-# endif +-# undef __LZO_RENAME_A +-# undef __LZO_RENAME_B +-#endif +-#if (UINT_MAX == LZO_0xffffL) +-#if defined(__AZTEC_C__) && defined(__DOS__) +-# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 +-#elif defined(_MSC_VER) && defined(MSDOS) +-# if (_MSC_VER < 600) +-# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 +-# endif +-# if (_MSC_VER < 700) +-# define LZO_BROKEN_INTEGRAL_PROMOTION 1 +-# define LZO_BROKEN_SIZEOF 1 +-# endif +-#elif defined(__PACIFIC__) && defined(DOS) +-# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 +-#elif defined(__TURBOC__) && defined(__MSDOS__) +-# if (__TURBOC__ < 0x0150) +-# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 +-# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 +-# define LZO_BROKEN_INTEGRAL_PROMOTION 1 +-# endif +-# if (__TURBOC__ < 0x0200) +-# define LZO_BROKEN_SIZEOF 1 +-# endif +-# if (__TURBOC__ < 0x0400) && defined(__cplusplus) +-# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 +-# endif +-#elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__) +-# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 +-# define LZO_BROKEN_SIZEOF 1 +-#endif +-#endif +-#if defined(__WATCOMC__) && (__WATCOMC__ < 900) +-# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 +-#endif +-#if defined(_CRAY) && defined(_CRAY1) +-# define LZO_BROKEN_SIGNED_RIGHT_SHIFT 1 +-#endif +-#define LZO_PP_STRINGIZE(x) #x +-#define LZO_PP_MACRO_EXPAND(x) LZO_PP_STRINGIZE(x) +-#define LZO_PP_CONCAT2(a,b) a ## b +-#define LZO_PP_CONCAT3(a,b,c) a ## b ## c +-#define LZO_PP_CONCAT4(a,b,c,d) a ## b ## c ## d +-#define LZO_PP_CONCAT5(a,b,c,d,e) a ## b ## c ## d ## e +-#define LZO_PP_ECONCAT2(a,b) LZO_PP_CONCAT2(a,b) +-#define LZO_PP_ECONCAT3(a,b,c) LZO_PP_CONCAT3(a,b,c) +-#define LZO_PP_ECONCAT4(a,b,c,d) LZO_PP_CONCAT4(a,b,c,d) +-#define LZO_PP_ECONCAT5(a,b,c,d,e) LZO_PP_CONCAT5(a,b,c,d,e) +-#if 1 +-#define LZO_CPP_STRINGIZE(x) #x +-#define LZO_CPP_MACRO_EXPAND(x) LZO_CPP_STRINGIZE(x) +-#define LZO_CPP_CONCAT2(a,b) a ## b +-#define LZO_CPP_CONCAT3(a,b,c) a ## b ## c +-#define LZO_CPP_CONCAT4(a,b,c,d) a ## b ## c ## d +-#define LZO_CPP_CONCAT5(a,b,c,d,e) a ## b ## c ## d ## e +-#define LZO_CPP_ECONCAT2(a,b) LZO_CPP_CONCAT2(a,b) +-#define LZO_CPP_ECONCAT3(a,b,c) LZO_CPP_CONCAT3(a,b,c) +-#define LZO_CPP_ECONCAT4(a,b,c,d) LZO_CPP_CONCAT4(a,b,c,d) +-#define LZO_CPP_ECONCAT5(a,b,c,d,e) LZO_CPP_CONCAT5(a,b,c,d,e) +-#endif +-#define __LZO_MASK_GEN(o,b) (((((o) << ((b)-1)) - (o)) << 1) + (o)) +-#if 1 && defined(__cplusplus) +-# if !defined(__STDC_CONSTANT_MACROS) +-# define __STDC_CONSTANT_MACROS 1 +-# endif +-# if !defined(__STDC_LIMIT_MACROS) +-# define __STDC_LIMIT_MACROS 1 +-# endif +-#endif +-#if defined(__cplusplus) +-# define LZO_EXTERN_C extern "C" +-#else +-# define LZO_EXTERN_C extern +-#endif +-#if !defined(__LZO_OS_OVERRIDE) +-#if (LZO_OS_FREESTANDING) +-# define LZO_INFO_OS "freestanding" +-#elif (LZO_OS_EMBEDDED) +-# define LZO_INFO_OS "embedded" +-#elif 1 && defined(__IAR_SYSTEMS_ICC__) +-# define LZO_OS_EMBEDDED 1 +-# define LZO_INFO_OS "embedded" +-#elif defined(__CYGWIN__) && defined(__GNUC__) +-# define LZO_OS_CYGWIN 1 +-# define LZO_INFO_OS "cygwin" +-#elif defined(__EMX__) && defined(__GNUC__) +-# define LZO_OS_EMX 1 +-# define LZO_INFO_OS "emx" +-#elif defined(__BEOS__) +-# define LZO_OS_BEOS 1 +-# define LZO_INFO_OS "beos" +-#elif defined(__Lynx__) +-# define LZO_OS_LYNXOS 1 +-# define LZO_INFO_OS "lynxos" +-#elif defined(__OS400__) +-# define LZO_OS_OS400 1 +-# define LZO_INFO_OS "os400" +-#elif defined(__QNX__) +-# define LZO_OS_QNX 1 +-# define LZO_INFO_OS "qnx" +-#elif defined(__BORLANDC__) && defined(__DPMI32__) && (__BORLANDC__ >= 0x0460) +-# define LZO_OS_DOS32 1 +-# define LZO_INFO_OS "dos32" +-#elif defined(__BORLANDC__) && defined(__DPMI16__) +-# define LZO_OS_DOS16 1 +-# define LZO_INFO_OS "dos16" +-#elif defined(__ZTC__) && defined(DOS386) +-# define LZO_OS_DOS32 1 +-# define LZO_INFO_OS "dos32" +-#elif defined(__OS2__) || defined(__OS2V2__) +-# if (UINT_MAX == LZO_0xffffL) +-# define LZO_OS_OS216 1 +-# define LZO_INFO_OS "os216" +-# elif (UINT_MAX == LZO_0xffffffffL) +-# define LZO_OS_OS2 1 +-# define LZO_INFO_OS "os2" +-# else +-# error "check your limits.h header" +-# endif +-#elif defined(__WIN64__) || defined(_WIN64) || defined(WIN64) +-# define LZO_OS_WIN64 1 +-# define LZO_INFO_OS "win64" +-#elif defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(__WINDOWS_386__) +-# define LZO_OS_WIN32 1 +-# define LZO_INFO_OS "win32" +-#elif defined(__MWERKS__) && defined(__INTEL__) +-# define LZO_OS_WIN32 1 +-# define LZO_INFO_OS "win32" +-#elif defined(__WINDOWS__) || defined(_WINDOWS) || defined(_Windows) +-# if (UINT_MAX == LZO_0xffffL) +-# define LZO_OS_WIN16 1 +-# define LZO_INFO_OS "win16" +-# elif (UINT_MAX == LZO_0xffffffffL) +-# define LZO_OS_WIN32 1 +-# define LZO_INFO_OS "win32" +-# else +-# error "check your limits.h header" +-# endif +-#elif defined(__DOS__) || defined(__MSDOS__) || defined(_MSDOS) || defined(MSDOS) || (defined(__PACIFIC__) && defined(DOS)) +-# if (UINT_MAX == LZO_0xffffL) +-# define LZO_OS_DOS16 1 +-# define LZO_INFO_OS "dos16" +-# elif (UINT_MAX == LZO_0xffffffffL) +-# define LZO_OS_DOS32 1 +-# define LZO_INFO_OS "dos32" +-# else +-# error "check your limits.h header" +-# endif +-#elif defined(__WATCOMC__) +-# if defined(__NT__) && (UINT_MAX == LZO_0xffffL) +-# define LZO_OS_DOS16 1 +-# define LZO_INFO_OS "dos16" +-# elif defined(__NT__) && (__WATCOMC__ < 1100) +-# define LZO_OS_WIN32 1 +-# define LZO_INFO_OS "win32" +-# elif defined(__linux__) || defined(__LINUX__) +-# define LZO_OS_POSIX 1 +-# define LZO_INFO_OS "posix" +-# else +-# error "please specify a target using the -bt compiler option" +-# endif +-#elif defined(__palmos__) +-# define LZO_OS_PALMOS 1 +-# define LZO_INFO_OS "palmos" +-#elif defined(__TOS__) || defined(__atarist__) +-# define LZO_OS_TOS 1 +-# define LZO_INFO_OS "tos" +-#elif defined(macintosh) && !defined(__ppc__) +-# define LZO_OS_MACCLASSIC 1 +-# define LZO_INFO_OS "macclassic" +-#elif defined(__VMS) +-# define LZO_OS_VMS 1 +-# define LZO_INFO_OS "vms" +-#elif ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__)) +-# define LZO_OS_CONSOLE 1 +-# define LZO_OS_CONSOLE_PS2 1 +-# define LZO_INFO_OS "console" +-# define LZO_INFO_OS_CONSOLE "ps2" +-#elif (defined(__mips__) && defined(__psp__)) +-# define LZO_OS_CONSOLE 1 +-# define LZO_OS_CONSOLE_PSP 1 +-# define LZO_INFO_OS "console" +-# define LZO_INFO_OS_CONSOLE "psp" +-#else +-# define LZO_OS_POSIX 1 +-# define LZO_INFO_OS "posix" +-#endif +-#if (LZO_OS_POSIX) +-# if defined(_AIX) || defined(__AIX__) || defined(__aix__) +-# define LZO_OS_POSIX_AIX 1 +-# define LZO_INFO_OS_POSIX "aix" +-# elif defined(__FreeBSD__) +-# define LZO_OS_POSIX_FREEBSD 1 +-# define LZO_INFO_OS_POSIX "freebsd" +-# elif defined(__hpux__) || defined(__hpux) +-# define LZO_OS_POSIX_HPUX 1 +-# define LZO_INFO_OS_POSIX "hpux" +-# elif defined(__INTERIX) +-# define LZO_OS_POSIX_INTERIX 1 +-# define LZO_INFO_OS_POSIX "interix" +-# elif defined(__IRIX__) || defined(__irix__) +-# define LZO_OS_POSIX_IRIX 1 +-# define LZO_INFO_OS_POSIX "irix" +-# elif defined(__linux__) || defined(__linux) || defined(__LINUX__) +-# define LZO_OS_POSIX_LINUX 1 +-# define LZO_INFO_OS_POSIX "linux" +-# elif defined(__APPLE__) || defined(__MACOS__) +-# define LZO_OS_POSIX_MACOSX 1 +-# define LZO_INFO_OS_POSIX "macosx" +-# elif defined(__minix__) || defined(__minix) +-# define LZO_OS_POSIX_MINIX 1 +-# define LZO_INFO_OS_POSIX "minix" +-# elif defined(__NetBSD__) +-# define LZO_OS_POSIX_NETBSD 1 +-# define LZO_INFO_OS_POSIX "netbsd" +-# elif defined(__OpenBSD__) +-# define LZO_OS_POSIX_OPENBSD 1 +-# define LZO_INFO_OS_POSIX "openbsd" +-# elif defined(__osf__) +-# define LZO_OS_POSIX_OSF 1 +-# define LZO_INFO_OS_POSIX "osf" +-# elif defined(__solaris__) || defined(__sun) +-# if defined(__SVR4) || defined(__svr4__) +-# define LZO_OS_POSIX_SOLARIS 1 +-# define LZO_INFO_OS_POSIX "solaris" +-# else +-# define LZO_OS_POSIX_SUNOS 1 +-# define LZO_INFO_OS_POSIX "sunos" +-# endif +-# elif defined(__ultrix__) || defined(__ultrix) +-# define LZO_OS_POSIX_ULTRIX 1 +-# define LZO_INFO_OS_POSIX "ultrix" +-# elif defined(_UNICOS) +-# define LZO_OS_POSIX_UNICOS 1 +-# define LZO_INFO_OS_POSIX "unicos" +-# else +-# define LZO_OS_POSIX_UNKNOWN 1 +-# define LZO_INFO_OS_POSIX "unknown" +-# endif +-#endif +-#endif +-#if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) +-# if (UINT_MAX != LZO_0xffffL) +-# error "this should not happen" +-# endif +-# if (ULONG_MAX != LZO_0xffffffffL) +-# error "this should not happen" +-# endif +-#endif +-#if (LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_WIN32 || LZO_OS_WIN64) +-# if (UINT_MAX != LZO_0xffffffffL) +-# error "this should not happen" +-# endif +-# if (ULONG_MAX != LZO_0xffffffffL) +-# error "this should not happen" +-# endif +-#endif +-#if defined(CIL) && defined(_GNUCC) && defined(__GNUC__) +-# define LZO_CC_CILLY 1 +-# define LZO_INFO_CC "Cilly" +-# if defined(__CILLY__) +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__CILLY__) +-# else +-# define LZO_INFO_CCVER "unknown" +-# endif +-#elif 0 && defined(SDCC) && defined(__VERSION__) && !defined(__GNUC__) +-# define LZO_CC_SDCC 1 +-# define LZO_INFO_CC "sdcc" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(SDCC) +-#elif defined(__PATHSCALE__) && defined(__PATHCC_PATCHLEVEL__) +-# define LZO_CC_PATHSCALE (__PATHCC__ * 0x10000L + __PATHCC_MINOR__ * 0x100 + __PATHCC_PATCHLEVEL__) +-# define LZO_INFO_CC "Pathscale C" +-# define LZO_INFO_CCVER __PATHSCALE__ +-#elif defined(__INTEL_COMPILER) +-# define LZO_CC_INTELC 1 +-# define LZO_INFO_CC "Intel C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__INTEL_COMPILER) +-# if defined(_WIN32) || defined(_WIN64) +-# define LZO_CC_SYNTAX_MSC 1 +-# else +-# define LZO_CC_SYNTAX_GNUC 1 +-# endif +-#elif defined(__POCC__) && defined(_WIN32) +-# define LZO_CC_PELLESC 1 +-# define LZO_INFO_CC "Pelles C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__POCC__) +-#elif defined(__clang__) && defined(__llvm__) && defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__) +-# if defined(__GNUC_PATCHLEVEL__) +-# define LZO_CC_CLANG_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__) +-# else +-# define LZO_CC_CLANG_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100) +-# endif +-# if defined(__clang_major__) && defined(__clang_minor__) && defined(__clang_patchlevel__) +-# define LZO_CC_CLANG_CLANG (__clang_major__ * 0x10000L + __clang_minor__ * 0x100 + __clang_patchlevel__) +-# else +-# define LZO_CC_CLANG_CLANG 0x020700L +-# endif +-# define LZO_CC_CLANG LZO_CC_CLANG_GNUC +-# define LZO_INFO_CC "clang" +-# define LZO_INFO_CCVER __VERSION__ +-#elif defined(__llvm__) && defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__) +-# if defined(__GNUC_PATCHLEVEL__) +-# define LZO_CC_LLVM_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__) +-# else +-# define LZO_CC_LLVM_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100) +-# endif +-# define LZO_CC_LLVM LZO_CC_LLVM_GNUC +-# define LZO_INFO_CC "llvm-gcc" +-# define LZO_INFO_CCVER __VERSION__ +-#elif defined(__GNUC__) && defined(__VERSION__) +-# if defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__) +-# define LZO_CC_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__) +-# elif defined(__GNUC_MINOR__) +-# define LZO_CC_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100) +-# else +-# define LZO_CC_GNUC (__GNUC__ * 0x10000L) +-# endif +-# define LZO_INFO_CC "gcc" +-# define LZO_INFO_CCVER __VERSION__ +-#elif defined(__ACK__) && defined(_ACK) +-# define LZO_CC_ACK 1 +-# define LZO_INFO_CC "Amsterdam Compiler Kit C" +-# define LZO_INFO_CCVER "unknown" +-#elif defined(__AZTEC_C__) +-# define LZO_CC_AZTECC 1 +-# define LZO_INFO_CC "Aztec C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__AZTEC_C__) +-#elif defined(__CODEGEARC__) +-# define LZO_CC_CODEGEARC 1 +-# define LZO_INFO_CC "CodeGear C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__CODEGEARC__) +-#elif defined(__BORLANDC__) +-# define LZO_CC_BORLANDC 1 +-# define LZO_INFO_CC "Borland C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__BORLANDC__) +-#elif defined(_CRAYC) && defined(_RELEASE) +-# define LZO_CC_CRAYC 1 +-# define LZO_INFO_CC "Cray C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_RELEASE) +-#elif defined(__DMC__) && defined(__SC__) +-# define LZO_CC_DMC 1 +-# define LZO_INFO_CC "Digital Mars C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__DMC__) +-#elif defined(__DECC) +-# define LZO_CC_DECC 1 +-# define LZO_INFO_CC "DEC C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__DECC) +-#elif defined(__HIGHC__) +-# define LZO_CC_HIGHC 1 +-# define LZO_INFO_CC "MetaWare High C" +-# define LZO_INFO_CCVER "unknown" +-#elif defined(__IAR_SYSTEMS_ICC__) +-# define LZO_CC_IARC 1 +-# define LZO_INFO_CC "IAR C" +-# if defined(__VER__) +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__VER__) +-# else +-# define LZO_INFO_CCVER "unknown" +-# endif +-#elif defined(__IBMC__) +-# define LZO_CC_IBMC 1 +-# define LZO_INFO_CC "IBM C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__IBMC__) +-#elif defined(__KEIL__) && defined(__C166__) +-# define LZO_CC_KEILC 1 +-# define LZO_INFO_CC "Keil C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__C166__) +-#elif defined(__LCC__) && defined(_WIN32) && defined(__LCCOPTIMLEVEL) +-# define LZO_CC_LCCWIN32 1 +-# define LZO_INFO_CC "lcc-win32" +-# define LZO_INFO_CCVER "unknown" +-#elif defined(__LCC__) +-# define LZO_CC_LCC 1 +-# define LZO_INFO_CC "lcc" +-# if defined(__LCC_VERSION__) +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__LCC_VERSION__) +-# else +-# define LZO_INFO_CCVER "unknown" +-# endif +-#elif defined(_MSC_VER) +-# define LZO_CC_MSC 1 +-# define LZO_INFO_CC "Microsoft C" +-# if defined(_MSC_FULL_VER) +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_MSC_VER) "." LZO_PP_MACRO_EXPAND(_MSC_FULL_VER) +-# else +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_MSC_VER) +-# endif +-#elif defined(__MWERKS__) +-# define LZO_CC_MWERKS 1 +-# define LZO_INFO_CC "Metrowerks C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__MWERKS__) +-#elif (defined(__NDPC__) || defined(__NDPX__)) && defined(__i386) +-# define LZO_CC_NDPC 1 +-# define LZO_INFO_CC "Microway NDP C" +-# define LZO_INFO_CCVER "unknown" +-#elif defined(__PACIFIC__) +-# define LZO_CC_PACIFICC 1 +-# define LZO_INFO_CC "Pacific C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PACIFIC__) +-#elif defined(__PGI) && (defined(__linux__) || defined(__WIN32__)) +-# define LZO_CC_PGI 1 +-# define LZO_INFO_CC "Portland Group PGI C" +-# define LZO_INFO_CCVER "unknown" +-#elif defined(__PUREC__) && defined(__TOS__) +-# define LZO_CC_PUREC 1 +-# define LZO_INFO_CC "Pure C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PUREC__) +-#elif defined(__SC__) && defined(__ZTC__) +-# define LZO_CC_SYMANTECC 1 +-# define LZO_INFO_CC "Symantec C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SC__) +-#elif defined(__SUNPRO_C) +-# define LZO_INFO_CC "SunPro C" +-# if ((__SUNPRO_C)+0 > 0) +-# define LZO_CC_SUNPROC __SUNPRO_C +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SUNPRO_C) +-# else +-# define LZO_CC_SUNPROC 1 +-# define LZO_INFO_CCVER "unknown" +-# endif +-#elif defined(__SUNPRO_CC) +-# define LZO_INFO_CC "SunPro C" +-# if ((__SUNPRO_CC)+0 > 0) +-# define LZO_CC_SUNPROC __SUNPRO_CC +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SUNPRO_CC) +-# else +-# define LZO_CC_SUNPROC 1 +-# define LZO_INFO_CCVER "unknown" +-# endif +-#elif defined(__TINYC__) +-# define LZO_CC_TINYC 1 +-# define LZO_INFO_CC "Tiny C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TINYC__) +-#elif defined(__TSC__) +-# define LZO_CC_TOPSPEEDC 1 +-# define LZO_INFO_CC "TopSpeed C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TSC__) +-#elif defined(__WATCOMC__) +-# define LZO_CC_WATCOMC 1 +-# define LZO_INFO_CC "Watcom C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__WATCOMC__) +-#elif defined(__TURBOC__) +-# define LZO_CC_TURBOC 1 +-# define LZO_INFO_CC "Turbo C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TURBOC__) +-#elif defined(__ZTC__) +-# define LZO_CC_ZORTECHC 1 +-# define LZO_INFO_CC "Zortech C" +-# if (__ZTC__ == 0x310) +-# define LZO_INFO_CCVER "0x310" +-# else +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__ZTC__) +-# endif +-#else +-# define LZO_CC_UNKNOWN 1 +-# define LZO_INFO_CC "unknown" +-# define LZO_INFO_CCVER "unknown" +-#endif +-#if 0 && (LZO_CC_MSC && (_MSC_VER >= 1200)) && !defined(_MSC_FULL_VER) +-# error "LZO_CC_MSC: _MSC_FULL_VER is not defined" +-#endif +-#if !defined(__LZO_ARCH_OVERRIDE) && !(LZO_ARCH_GENERIC) && defined(_CRAY) +-# if (UINT_MAX > LZO_0xffffffffL) && defined(_CRAY) +-# if defined(_CRAYMPP) || defined(_CRAYT3D) || defined(_CRAYT3E) +-# define LZO_ARCH_CRAY_MPP 1 +-# elif defined(_CRAY1) +-# define LZO_ARCH_CRAY_PVP 1 +-# endif +-# endif +-#endif +-#if !defined(__LZO_ARCH_OVERRIDE) +-#if (LZO_ARCH_GENERIC) +-# define LZO_INFO_ARCH "generic" +-#elif (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) +-# define LZO_ARCH_I086 1 +-# define LZO_ARCH_IA16 1 +-# define LZO_INFO_ARCH "i086" +-#elif defined(__alpha__) || defined(__alpha) || defined(_M_ALPHA) +-# define LZO_ARCH_ALPHA 1 +-# define LZO_INFO_ARCH "alpha" +-#elif (LZO_ARCH_CRAY_MPP) && (defined(_CRAYT3D) || defined(_CRAYT3E)) +-# define LZO_ARCH_ALPHA 1 +-# define LZO_INFO_ARCH "alpha" +-#elif defined(__amd64__) || defined(__x86_64__) || defined(_M_AMD64) +-# define LZO_ARCH_AMD64 1 +-# define LZO_INFO_ARCH "amd64" +-#elif defined(__thumb__) || (defined(_M_ARM) && defined(_M_THUMB)) +-# define LZO_ARCH_ARM 1 +-# define LZO_ARCH_ARM_THUMB 1 +-# define LZO_INFO_ARCH "arm_thumb" +-#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCARM__) +-# define LZO_ARCH_ARM 1 +-# if defined(__CPU_MODE__) && ((__CPU_MODE__)+0 == 1) +-# define LZO_ARCH_ARM_THUMB 1 +-# define LZO_INFO_ARCH "arm_thumb" +-# elif defined(__CPU_MODE__) && ((__CPU_MODE__)+0 == 2) +-# define LZO_INFO_ARCH "arm" +-# else +-# define LZO_INFO_ARCH "arm" +-# endif +-#elif defined(__arm__) || defined(_M_ARM) +-# define LZO_ARCH_ARM 1 +-# define LZO_INFO_ARCH "arm" +-#elif (UINT_MAX <= LZO_0xffffL) && defined(__AVR__) +-# define LZO_ARCH_AVR 1 +-# define LZO_INFO_ARCH "avr" +-#elif defined(__avr32__) || defined(__AVR32__) +-# define LZO_ARCH_AVR32 1 +-# define LZO_INFO_ARCH "avr32" +-#elif defined(__bfin__) +-# define LZO_ARCH_BLACKFIN 1 +-# define LZO_INFO_ARCH "blackfin" +-#elif (UINT_MAX == LZO_0xffffL) && defined(__C166__) +-# define LZO_ARCH_C166 1 +-# define LZO_INFO_ARCH "c166" +-#elif defined(__cris__) +-# define LZO_ARCH_CRIS 1 +-# define LZO_INFO_ARCH "cris" +-#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCEZ80__) +-# define LZO_ARCH_EZ80 1 +-# define LZO_INFO_ARCH "ez80" +-#elif defined(__H8300__) || defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__) +-# define LZO_ARCH_H8300 1 +-# define LZO_INFO_ARCH "h8300" +-#elif defined(__hppa__) || defined(__hppa) +-# define LZO_ARCH_HPPA 1 +-# define LZO_INFO_ARCH "hppa" +-#elif defined(__386__) || defined(__i386__) || defined(__i386) || defined(_M_IX86) || defined(_M_I386) +-# define LZO_ARCH_I386 1 +-# define LZO_ARCH_IA32 1 +-# define LZO_INFO_ARCH "i386" +-#elif (LZO_CC_ZORTECHC && defined(__I86__)) +-# define LZO_ARCH_I386 1 +-# define LZO_ARCH_IA32 1 +-# define LZO_INFO_ARCH "i386" +-#elif (LZO_OS_DOS32 && LZO_CC_HIGHC) && defined(_I386) +-# define LZO_ARCH_I386 1 +-# define LZO_ARCH_IA32 1 +-# define LZO_INFO_ARCH "i386" +-#elif defined(__ia64__) || defined(__ia64) || defined(_M_IA64) +-# define LZO_ARCH_IA64 1 +-# define LZO_INFO_ARCH "ia64" +-#elif (UINT_MAX == LZO_0xffffL) && defined(__m32c__) +-# define LZO_ARCH_M16C 1 +-# define LZO_INFO_ARCH "m16c" +-#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCM16C__) +-# define LZO_ARCH_M16C 1 +-# define LZO_INFO_ARCH "m16c" +-#elif defined(__m32r__) +-# define LZO_ARCH_M32R 1 +-# define LZO_INFO_ARCH "m32r" +-#elif (LZO_OS_TOS) || defined(__m68k__) || defined(__m68000__) || defined(__mc68000__) || defined(__mc68020__) || defined(_M_M68K) +-# define LZO_ARCH_M68K 1 +-# define LZO_INFO_ARCH "m68k" +-#elif (UINT_MAX == LZO_0xffffL) && defined(__C251__) +-# define LZO_ARCH_MCS251 1 +-# define LZO_INFO_ARCH "mcs251" +-#elif (UINT_MAX == LZO_0xffffL) && defined(__C51__) +-# define LZO_ARCH_MCS51 1 +-# define LZO_INFO_ARCH "mcs51" +-#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICC8051__) +-# define LZO_ARCH_MCS51 1 +-# define LZO_INFO_ARCH "mcs51" +-#elif defined(__mips__) || defined(__mips) || defined(_MIPS_ARCH) || defined(_M_MRX000) +-# define LZO_ARCH_MIPS 1 +-# define LZO_INFO_ARCH "mips" +-#elif (UINT_MAX == LZO_0xffffL) && defined(__MSP430__) +-# define LZO_ARCH_MSP430 1 +-# define LZO_INFO_ARCH "msp430" +-#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICC430__) +-# define LZO_ARCH_MSP430 1 +-# define LZO_INFO_ARCH "msp430" +-#elif defined(__powerpc__) || defined(__powerpc) || defined(__ppc__) || defined(__PPC__) || defined(_M_PPC) || defined(_ARCH_PPC) || defined(_ARCH_PWR) +-# define LZO_ARCH_POWERPC 1 +-# define LZO_INFO_ARCH "powerpc" +-#elif defined(__s390__) || defined(__s390) || defined(__s390x__) || defined(__s390x) +-# define LZO_ARCH_S390 1 +-# define LZO_INFO_ARCH "s390" +-#elif defined(__sh__) || defined(_M_SH) +-# define LZO_ARCH_SH 1 +-# define LZO_INFO_ARCH "sh" +-#elif defined(__sparc__) || defined(__sparc) || defined(__sparcv8) +-# define LZO_ARCH_SPARC 1 +-# define LZO_INFO_ARCH "sparc" +-#elif defined(__SPU__) +-# define LZO_ARCH_SPU 1 +-# define LZO_INFO_ARCH "spu" +-#elif (UINT_MAX == LZO_0xffffL) && defined(__z80) +-# define LZO_ARCH_Z80 1 +-# define LZO_INFO_ARCH "z80" +-#elif (LZO_ARCH_CRAY_PVP) +-# if defined(_CRAYSV1) +-# define LZO_ARCH_CRAY_SV1 1 +-# define LZO_INFO_ARCH "cray_sv1" +-# elif (_ADDR64) +-# define LZO_ARCH_CRAY_T90 1 +-# define LZO_INFO_ARCH "cray_t90" +-# elif (_ADDR32) +-# define LZO_ARCH_CRAY_YMP 1 +-# define LZO_INFO_ARCH "cray_ymp" +-# else +-# define LZO_ARCH_CRAY_XMP 1 +-# define LZO_INFO_ARCH "cray_xmp" +-# endif +-#else +-# define LZO_ARCH_UNKNOWN 1 +-# define LZO_INFO_ARCH "unknown" +-#endif +-#endif +-#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_DOS32 || LZO_OS_OS2) +-# error "FIXME - missing define for CPU architecture" +-#endif +-#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_WIN32) +-# error "FIXME - missing WIN32 define for CPU architecture" +-#endif +-#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_WIN64) +-# error "FIXME - missing WIN64 define for CPU architecture" +-#endif +-#if (LZO_OS_OS216 || LZO_OS_WIN16) +-# define LZO_ARCH_I086PM 1 +-# define LZO_ARCH_IA16PM 1 +-#elif 1 && (LZO_OS_DOS16 && defined(BLX286)) +-# define LZO_ARCH_I086PM 1 +-# define LZO_ARCH_IA16PM 1 +-#elif 1 && (LZO_OS_DOS16 && defined(DOSX286)) +-# define LZO_ARCH_I086PM 1 +-# define LZO_ARCH_IA16PM 1 +-#elif 1 && (LZO_OS_DOS16 && LZO_CC_BORLANDC && defined(__DPMI16__)) +-# define LZO_ARCH_I086PM 1 +-# define LZO_ARCH_IA16PM 1 +-#endif +-#if (LZO_ARCH_ARM_THUMB) && !(LZO_ARCH_ARM) +-# error "this should not happen" +-#endif +-#if (LZO_ARCH_I086PM) && !(LZO_ARCH_I086) +-# error "this should not happen" +-#endif +-#if (LZO_ARCH_I086) +-# if (UINT_MAX != LZO_0xffffL) +-# error "this should not happen" +-# endif +-# if (ULONG_MAX != LZO_0xffffffffL) +-# error "this should not happen" +-# endif +-#endif +-#if (LZO_ARCH_I386) +-# if (UINT_MAX != LZO_0xffffL) && defined(__i386_int16__) +-# error "this should not happen" +-# endif +-# if (UINT_MAX != LZO_0xffffffffL) && !defined(__i386_int16__) +-# error "this should not happen" +-# endif +-# if (ULONG_MAX != LZO_0xffffffffL) +-# error "this should not happen" +-# endif +-#endif +-#if !defined(__LZO_MM_OVERRIDE) +-#if (LZO_ARCH_I086) +-#if (UINT_MAX != LZO_0xffffL) +-# error "this should not happen" +-#endif +-#if defined(__TINY__) || defined(M_I86TM) || defined(_M_I86TM) +-# define LZO_MM_TINY 1 +-#elif defined(__HUGE__) || defined(_HUGE_) || defined(M_I86HM) || defined(_M_I86HM) +-# define LZO_MM_HUGE 1 +-#elif defined(__SMALL__) || defined(M_I86SM) || defined(_M_I86SM) || defined(SMALL_MODEL) +-# define LZO_MM_SMALL 1 +-#elif defined(__MEDIUM__) || defined(M_I86MM) || defined(_M_I86MM) +-# define LZO_MM_MEDIUM 1 +-#elif defined(__COMPACT__) || defined(M_I86CM) || defined(_M_I86CM) +-# define LZO_MM_COMPACT 1 +-#elif defined(__LARGE__) || defined(M_I86LM) || defined(_M_I86LM) || defined(LARGE_MODEL) +-# define LZO_MM_LARGE 1 +-#elif (LZO_CC_AZTECC) +-# if defined(_LARGE_CODE) && defined(_LARGE_DATA) +-# define LZO_MM_LARGE 1 +-# elif defined(_LARGE_CODE) +-# define LZO_MM_MEDIUM 1 +-# elif defined(_LARGE_DATA) +-# define LZO_MM_COMPACT 1 +-# else +-# define LZO_MM_SMALL 1 +-# endif +-#elif (LZO_CC_ZORTECHC && defined(__VCM__)) +-# define LZO_MM_LARGE 1 +-#else +-# error "unknown memory model" +-#endif +-#if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) +-#define LZO_HAVE_MM_HUGE_PTR 1 +-#define LZO_HAVE_MM_HUGE_ARRAY 1 +-#if (LZO_MM_TINY) +-# undef LZO_HAVE_MM_HUGE_ARRAY +-#endif +-#if (LZO_CC_AZTECC || LZO_CC_PACIFICC || LZO_CC_ZORTECHC) +-# undef LZO_HAVE_MM_HUGE_PTR +-# undef LZO_HAVE_MM_HUGE_ARRAY +-#elif (LZO_CC_DMC || LZO_CC_SYMANTECC) +-# undef LZO_HAVE_MM_HUGE_ARRAY +-#elif (LZO_CC_MSC && defined(_QC)) +-# undef LZO_HAVE_MM_HUGE_ARRAY +-# if (_MSC_VER < 600) +-# undef LZO_HAVE_MM_HUGE_PTR +-# endif +-#elif (LZO_CC_TURBOC && (__TURBOC__ < 0x0295)) +-# undef LZO_HAVE_MM_HUGE_ARRAY +-#endif +-#if (LZO_ARCH_I086PM) && !(LZO_HAVE_MM_HUGE_PTR) +-# if (LZO_OS_DOS16) +-# error "this should not happen" +-# elif (LZO_CC_ZORTECHC) +-# else +-# error "this should not happen" +-# endif +-#endif +-#ifdef __cplusplus +-extern "C" { +-#endif +-#if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0200)) +- extern void __near __cdecl _AHSHIFT(void); +-# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) +-#elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) +- extern void __near __cdecl _AHSHIFT(void); +-# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) +-#elif (LZO_CC_MSC || LZO_CC_TOPSPEEDC) +- extern void __near __cdecl _AHSHIFT(void); +-# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) +-#elif (LZO_CC_TURBOC && (__TURBOC__ >= 0x0295)) +- extern void __near __cdecl _AHSHIFT(void); +-# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) +-#elif ((LZO_CC_AZTECC || LZO_CC_PACIFICC || LZO_CC_TURBOC) && LZO_OS_DOS16) +-# define LZO_MM_AHSHIFT 12 +-#elif (LZO_CC_WATCOMC) +- extern unsigned char _HShift; +-# define LZO_MM_AHSHIFT ((unsigned) _HShift) +-#else +-# error "FIXME - implement LZO_MM_AHSHIFT" +-#endif +-#ifdef __cplusplus +-} +-#endif +-#endif +-#elif (LZO_ARCH_C166) +-#if !defined(__MODEL__) +-# error "FIXME - C166 __MODEL__" +-#elif ((__MODEL__) == 0) +-# define LZO_MM_SMALL 1 +-#elif ((__MODEL__) == 1) +-# define LZO_MM_SMALL 1 +-#elif ((__MODEL__) == 2) +-# define LZO_MM_LARGE 1 +-#elif ((__MODEL__) == 3) +-# define LZO_MM_TINY 1 +-#elif ((__MODEL__) == 4) +-# define LZO_MM_XTINY 1 +-#elif ((__MODEL__) == 5) +-# define LZO_MM_XSMALL 1 +-#else +-# error "FIXME - C166 __MODEL__" +-#endif +-#elif (LZO_ARCH_MCS251) +-#if !defined(__MODEL__) +-# error "FIXME - MCS251 __MODEL__" +-#elif ((__MODEL__) == 0) +-# define LZO_MM_SMALL 1 +-#elif ((__MODEL__) == 2) +-# define LZO_MM_LARGE 1 +-#elif ((__MODEL__) == 3) +-# define LZO_MM_TINY 1 +-#elif ((__MODEL__) == 4) +-# define LZO_MM_XTINY 1 +-#elif ((__MODEL__) == 5) +-# define LZO_MM_XSMALL 1 +-#else +-# error "FIXME - MCS251 __MODEL__" +-#endif +-#elif (LZO_ARCH_MCS51) +-#if !defined(__MODEL__) +-# error "FIXME - MCS51 __MODEL__" +-#elif ((__MODEL__) == 1) +-# define LZO_MM_SMALL 1 +-#elif ((__MODEL__) == 2) +-# define LZO_MM_LARGE 1 +-#elif ((__MODEL__) == 3) +-# define LZO_MM_TINY 1 +-#elif ((__MODEL__) == 4) +-# define LZO_MM_XTINY 1 +-#elif ((__MODEL__) == 5) +-# define LZO_MM_XSMALL 1 +-#else +-# error "FIXME - MCS51 __MODEL__" +-#endif +-#elif (LZO_ARCH_CRAY_PVP) +-# define LZO_MM_PVP 1 +-#else +-# define LZO_MM_FLAT 1 +-#endif +-#if (LZO_MM_COMPACT) +-# define LZO_INFO_MM "compact" +-#elif (LZO_MM_FLAT) +-# define LZO_INFO_MM "flat" +-#elif (LZO_MM_HUGE) +-# define LZO_INFO_MM "huge" +-#elif (LZO_MM_LARGE) +-# define LZO_INFO_MM "large" +-#elif (LZO_MM_MEDIUM) +-# define LZO_INFO_MM "medium" +-#elif (LZO_MM_PVP) +-# define LZO_INFO_MM "pvp" +-#elif (LZO_MM_SMALL) +-# define LZO_INFO_MM "small" +-#elif (LZO_MM_TINY) +-# define LZO_INFO_MM "tiny" +-#else +-# error "unknown memory model" +-#endif +-#endif +-#if defined(SIZEOF_SHORT) +-# define LZO_SIZEOF_SHORT (SIZEOF_SHORT) +-#endif +-#if defined(SIZEOF_INT) +-# define LZO_SIZEOF_INT (SIZEOF_INT) +-#endif +-#if defined(SIZEOF_LONG) +-# define LZO_SIZEOF_LONG (SIZEOF_LONG) +-#endif +-#if defined(SIZEOF_LONG_LONG) +-# define LZO_SIZEOF_LONG_LONG (SIZEOF_LONG_LONG) +-#endif +-#if defined(SIZEOF___INT16) +-# define LZO_SIZEOF___INT16 (SIZEOF___INT16) +-#endif +-#if defined(SIZEOF___INT32) +-# define LZO_SIZEOF___INT32 (SIZEOF___INT32) +-#endif +-#if defined(SIZEOF___INT64) +-# define LZO_SIZEOF___INT64 (SIZEOF___INT64) +-#endif +-#if defined(SIZEOF_VOID_P) +-# define LZO_SIZEOF_VOID_P (SIZEOF_VOID_P) +-#endif +-#if defined(SIZEOF_SIZE_T) +-# define LZO_SIZEOF_SIZE_T (SIZEOF_SIZE_T) +-#endif +-#if defined(SIZEOF_PTRDIFF_T) +-# define LZO_SIZEOF_PTRDIFF_T (SIZEOF_PTRDIFF_T) +-#endif +-#define __LZO_LSR(x,b) (((x)+0ul) >> (b)) +-#if !defined(LZO_SIZEOF_SHORT) +-# if (LZO_ARCH_CRAY_PVP) +-# define LZO_SIZEOF_SHORT 8 +-# elif (USHRT_MAX == LZO_0xffffL) +-# define LZO_SIZEOF_SHORT 2 +-# elif (__LZO_LSR(USHRT_MAX,7) == 1) +-# define LZO_SIZEOF_SHORT 1 +-# elif (__LZO_LSR(USHRT_MAX,15) == 1) +-# define LZO_SIZEOF_SHORT 2 +-# elif (__LZO_LSR(USHRT_MAX,31) == 1) +-# define LZO_SIZEOF_SHORT 4 +-# elif (__LZO_LSR(USHRT_MAX,63) == 1) +-# define LZO_SIZEOF_SHORT 8 +-# elif (__LZO_LSR(USHRT_MAX,127) == 1) +-# define LZO_SIZEOF_SHORT 16 +-# else +-# error "LZO_SIZEOF_SHORT" +-# endif +-#endif +-#if !defined(LZO_SIZEOF_INT) +-# if (LZO_ARCH_CRAY_PVP) +-# define LZO_SIZEOF_INT 8 +-# elif (UINT_MAX == LZO_0xffffL) +-# define LZO_SIZEOF_INT 2 +-# elif (UINT_MAX == LZO_0xffffffffL) +-# define LZO_SIZEOF_INT 4 +-# elif (__LZO_LSR(UINT_MAX,7) == 1) +-# define LZO_SIZEOF_INT 1 +-# elif (__LZO_LSR(UINT_MAX,15) == 1) +-# define LZO_SIZEOF_INT 2 +-# elif (__LZO_LSR(UINT_MAX,31) == 1) +-# define LZO_SIZEOF_INT 4 +-# elif (__LZO_LSR(UINT_MAX,63) == 1) +-# define LZO_SIZEOF_INT 8 +-# elif (__LZO_LSR(UINT_MAX,127) == 1) +-# define LZO_SIZEOF_INT 16 +-# else +-# error "LZO_SIZEOF_INT" +-# endif +-#endif +-#if !defined(LZO_SIZEOF_LONG) +-# if (ULONG_MAX == LZO_0xffffffffL) +-# define LZO_SIZEOF_LONG 4 +-# elif (__LZO_LSR(ULONG_MAX,7) == 1) +-# define LZO_SIZEOF_LONG 1 +-# elif (__LZO_LSR(ULONG_MAX,15) == 1) +-# define LZO_SIZEOF_LONG 2 +-# elif (__LZO_LSR(ULONG_MAX,31) == 1) +-# define LZO_SIZEOF_LONG 4 +-# elif (__LZO_LSR(ULONG_MAX,63) == 1) +-# define LZO_SIZEOF_LONG 8 +-# elif (__LZO_LSR(ULONG_MAX,127) == 1) +-# define LZO_SIZEOF_LONG 16 +-# else +-# error "LZO_SIZEOF_LONG" +-# endif +-#endif +-#if !defined(LZO_SIZEOF_LONG_LONG) && !defined(LZO_SIZEOF___INT64) +-#if (LZO_SIZEOF_LONG > 0 && LZO_SIZEOF_LONG < 8) +-# if defined(__LONG_MAX__) && defined(__LONG_LONG_MAX__) +-# if (LZO_CC_GNUC >= 0x030300ul) +-# if ((__LONG_MAX__)+0 == (__LONG_LONG_MAX__)+0) +-# define LZO_SIZEOF_LONG_LONG LZO_SIZEOF_LONG +-# elif (__LZO_LSR(__LONG_LONG_MAX__,30) == 1) +-# define LZO_SIZEOF_LONG_LONG 4 +-# endif +-# endif +-# endif +-#endif +-#endif +-#if !defined(LZO_SIZEOF_LONG_LONG) && !defined(LZO_SIZEOF___INT64) +-#if (LZO_SIZEOF_LONG > 0 && LZO_SIZEOF_LONG < 8) +-#if (LZO_ARCH_I086 && LZO_CC_DMC) +-#elif (LZO_CC_CILLY) && defined(__GNUC__) +-# define LZO_SIZEOF_LONG_LONG 8 +-#elif (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) +-# define LZO_SIZEOF_LONG_LONG 8 +-#elif ((LZO_OS_WIN32 || LZO_OS_WIN64 || defined(_WIN32)) && LZO_CC_MSC && (_MSC_VER >= 1400)) +-# define LZO_SIZEOF_LONG_LONG 8 +-#elif (LZO_OS_WIN64 || defined(_WIN64)) +-# define LZO_SIZEOF___INT64 8 +-#elif (LZO_ARCH_I386 && (LZO_CC_DMC)) +-# define LZO_SIZEOF_LONG_LONG 8 +-#elif (LZO_ARCH_I386 && (LZO_CC_SYMANTECC && (__SC__ >= 0x700))) +-# define LZO_SIZEOF_LONG_LONG 8 +-#elif (LZO_ARCH_I386 && (LZO_CC_INTELC && defined(__linux__))) +-# define LZO_SIZEOF_LONG_LONG 8 +-#elif (LZO_ARCH_I386 && (LZO_CC_MWERKS || LZO_CC_PELLESC || LZO_CC_PGI || LZO_CC_SUNPROC)) +-# define LZO_SIZEOF_LONG_LONG 8 +-#elif (LZO_ARCH_I386 && (LZO_CC_INTELC || LZO_CC_MSC)) +-# define LZO_SIZEOF___INT64 8 +-#elif ((LZO_OS_WIN32 || defined(_WIN32)) && (LZO_CC_MSC)) +-# define LZO_SIZEOF___INT64 8 +-#elif (LZO_ARCH_I386 && (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0520))) +-# define LZO_SIZEOF___INT64 8 +-#elif (LZO_ARCH_I386 && (LZO_CC_WATCOMC && (__WATCOMC__ >= 1100))) +-# define LZO_SIZEOF___INT64 8 +-#elif (LZO_CC_WATCOMC && defined(_INTEGRAL_MAX_BITS) && (_INTEGRAL_MAX_BITS == 64)) +-# define LZO_SIZEOF___INT64 8 +-#elif (LZO_OS_OS400 || defined(__OS400__)) && defined(__LLP64_IFC__) +-# define LZO_SIZEOF_LONG_LONG 8 +-#elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64) +-# define LZO_SIZEOF_LONG_LONG 8 +-#elif (LZO_CC_SDCC) && (LZO_SIZEOF_INT == 2) +-#elif 1 && defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) +-# define LZO_SIZEOF_LONG_LONG 8 +-#endif +-#endif +-#endif +-#if defined(__cplusplus) && (LZO_CC_GNUC) +-# if (LZO_CC_GNUC < 0x020800ul) +-# undef LZO_SIZEOF_LONG_LONG +-# endif +-#endif +-#if (LZO_CFG_NO_LONG_LONG) || defined(__NO_LONG_LONG) +-# undef LZO_SIZEOF_LONG_LONG +-#endif +-#if !defined(LZO_SIZEOF_VOID_P) +-#if (LZO_ARCH_I086) +-# define __LZO_WORDSIZE 2 +-# if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM) +-# define LZO_SIZEOF_VOID_P 2 +-# elif (LZO_MM_COMPACT || LZO_MM_LARGE || LZO_MM_HUGE) +-# define LZO_SIZEOF_VOID_P 4 +-# else +-# error "LZO_MM" +-# endif +-#elif (LZO_ARCH_AVR || LZO_ARCH_Z80) +-# define __LZO_WORDSIZE 1 +-# define LZO_SIZEOF_VOID_P 2 +-#elif (LZO_ARCH_C166 || LZO_ARCH_MCS51 || LZO_ARCH_MCS251 || LZO_ARCH_MSP430) +-# define LZO_SIZEOF_VOID_P 2 +-#elif (LZO_ARCH_H8300) +-# if defined(__NORMAL_MODE__) +-# define __LZO_WORDSIZE 4 +-# define LZO_SIZEOF_VOID_P 2 +-# elif defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__) +-# define __LZO_WORDSIZE 4 +-# define LZO_SIZEOF_VOID_P 4 +-# else +-# define __LZO_WORDSIZE 2 +-# define LZO_SIZEOF_VOID_P 2 +-# endif +-# if (LZO_CC_GNUC && (LZO_CC_GNUC < 0x040000ul)) && (LZO_SIZEOF_INT == 4) +-# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_INT +-# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_INT +-# endif +-#elif (LZO_ARCH_M16C) +-# define __LZO_WORDSIZE 2 +-# if defined(__m32c_cpu__) || defined(__m32cm_cpu__) +-# define LZO_SIZEOF_VOID_P 4 +-# else +-# define LZO_SIZEOF_VOID_P 2 +-# endif +-#elif (LZO_SIZEOF_LONG == 8) && ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__)) +-# define __LZO_WORDSIZE 8 +-# define LZO_SIZEOF_VOID_P 4 +-#elif defined(__LLP64__) || defined(__LLP64) || defined(_LLP64) || defined(_WIN64) +-# define __LZO_WORDSIZE 8 +-# define LZO_SIZEOF_VOID_P 8 +-#elif (LZO_OS_OS400 || defined(__OS400__)) && defined(__LLP64_IFC__) +-# define LZO_SIZEOF_VOID_P LZO_SIZEOF_LONG +-# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG +-# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG +-#elif (LZO_OS_OS400 || defined(__OS400__)) +-# define __LZO_WORDSIZE LZO_SIZEOF_LONG +-# define LZO_SIZEOF_VOID_P 16 +-# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG +-# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG +-#elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64) +-# define LZO_SIZEOF_VOID_P 8 +-# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG +-# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG +-#elif (LZO_ARCH_SPU) +-# if 0 +-# define __LZO_WORDSIZE 16 +-# endif +-# define LZO_SIZEOF_VOID_P 4 +-#else +-# define LZO_SIZEOF_VOID_P LZO_SIZEOF_LONG +-#endif +-#endif +-#if !defined(LZO_WORDSIZE) +-# if defined(__LZO_WORDSIZE) +-# define LZO_WORDSIZE __LZO_WORDSIZE +-# else +-# define LZO_WORDSIZE LZO_SIZEOF_VOID_P +-# endif +-#endif +-#if !defined(LZO_SIZEOF_SIZE_T) +-#if (LZO_ARCH_I086 || LZO_ARCH_M16C) +-# define LZO_SIZEOF_SIZE_T 2 +-#else +-# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_VOID_P +-#endif +-#endif +-#if !defined(LZO_SIZEOF_PTRDIFF_T) +-#if (LZO_ARCH_I086) +-# if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM || LZO_MM_HUGE) +-# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_VOID_P +-# elif (LZO_MM_COMPACT || LZO_MM_LARGE) +-# if (LZO_CC_BORLANDC || LZO_CC_TURBOC) +-# define LZO_SIZEOF_PTRDIFF_T 4 +-# else +-# define LZO_SIZEOF_PTRDIFF_T 2 +-# endif +-# else +-# error "LZO_MM" +-# endif +-#else +-# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_SIZE_T +-#endif +-#endif +-#if (LZO_ABI_NEUTRAL_ENDIAN) +-# undef LZO_ABI_BIG_ENDIAN +-# undef LZO_ABI_LITTLE_ENDIAN +-#elif !(LZO_ABI_BIG_ENDIAN) && !(LZO_ABI_LITTLE_ENDIAN) +-#if (LZO_ARCH_ALPHA) && (LZO_ARCH_CRAY_MPP) +-# define LZO_ABI_BIG_ENDIAN 1 +-#elif (LZO_ARCH_IA64) && (LZO_OS_POSIX_LINUX || LZO_OS_WIN64) +-# define LZO_ABI_LITTLE_ENDIAN 1 +-#elif (LZO_ARCH_ALPHA || LZO_ARCH_AMD64 || LZO_ARCH_BLACKFIN || LZO_ARCH_CRIS || LZO_ARCH_I086 || LZO_ARCH_I386 || LZO_ARCH_MSP430) +-# define LZO_ABI_LITTLE_ENDIAN 1 +-#elif (LZO_ARCH_AVR32 || LZO_ARCH_M68K || LZO_ARCH_S390) +-# define LZO_ABI_BIG_ENDIAN 1 +-#elif 1 && defined(__IAR_SYSTEMS_ICC__) && defined(__LITTLE_ENDIAN__) +-# if (__LITTLE_ENDIAN__ == 1) +-# define LZO_ABI_LITTLE_ENDIAN 1 +-# else +-# define LZO_ABI_BIG_ENDIAN 1 +-# endif +-#elif 1 && defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__) +-# define LZO_ABI_BIG_ENDIAN 1 +-#elif 1 && defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__) +-# define LZO_ABI_LITTLE_ENDIAN 1 +-#elif 1 && (LZO_ARCH_ARM) && defined(__ARMEB__) && !defined(__ARMEL__) +-# define LZO_ABI_BIG_ENDIAN 1 +-#elif 1 && (LZO_ARCH_ARM) && defined(__ARMEL__) && !defined(__ARMEB__) +-# define LZO_ABI_LITTLE_ENDIAN 1 +-#elif 1 && (LZO_ARCH_MIPS) && defined(__MIPSEB__) && !defined(__MIPSEL__) +-# define LZO_ABI_BIG_ENDIAN 1 +-#elif 1 && (LZO_ARCH_MIPS) && defined(__MIPSEL__) && !defined(__MIPSEB__) +-# define LZO_ABI_LITTLE_ENDIAN 1 +-#endif +-#endif +-#if (LZO_ABI_BIG_ENDIAN) && (LZO_ABI_LITTLE_ENDIAN) +-# error "this should not happen" +-#endif +-#if (LZO_ABI_BIG_ENDIAN) +-# define LZO_INFO_ABI_ENDIAN "be" +-#elif (LZO_ABI_LITTLE_ENDIAN) +-# define LZO_INFO_ABI_ENDIAN "le" +-#elif (LZO_ABI_NEUTRAL_ENDIAN) +-# define LZO_INFO_ABI_ENDIAN "neutral" +-#endif +-#if (LZO_SIZEOF_INT == 1 && LZO_SIZEOF_LONG == 2 && LZO_SIZEOF_VOID_P == 2) +-# define LZO_ABI_I8LP16 1 +-# define LZO_INFO_ABI_PM "i8lp16" +-#elif (LZO_SIZEOF_INT == 2 && LZO_SIZEOF_LONG == 2 && LZO_SIZEOF_VOID_P == 2) +-# define LZO_ABI_ILP16 1 +-# define LZO_INFO_ABI_PM "ilp16" +-#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 4) +-# define LZO_ABI_ILP32 1 +-# define LZO_INFO_ABI_PM "ilp32" +-#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 8 && LZO_SIZEOF_SIZE_T == 8) +-# define LZO_ABI_LLP64 1 +-# define LZO_INFO_ABI_PM "llp64" +-#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 8) +-# define LZO_ABI_LP64 1 +-# define LZO_INFO_ABI_PM "lp64" +-#elif (LZO_SIZEOF_INT == 8 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 8) +-# define LZO_ABI_ILP64 1 +-# define LZO_INFO_ABI_PM "ilp64" +-#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 4) +-# define LZO_ABI_IP32L64 1 +-# define LZO_INFO_ABI_PM "ip32l64" +-#endif +-#if !defined(__LZO_LIBC_OVERRIDE) +-#if (LZO_LIBC_NAKED) +-# define LZO_INFO_LIBC "naked" +-#elif (LZO_LIBC_FREESTANDING) +-# define LZO_INFO_LIBC "freestanding" +-#elif (LZO_LIBC_MOSTLY_FREESTANDING) +-# define LZO_INFO_LIBC "mfreestanding" +-#elif (LZO_LIBC_ISOC90) +-# define LZO_INFO_LIBC "isoc90" +-#elif (LZO_LIBC_ISOC99) +-# define LZO_INFO_LIBC "isoc99" +-#elif defined(__dietlibc__) +-# define LZO_LIBC_DIETLIBC 1 +-# define LZO_INFO_LIBC "dietlibc" +-#elif defined(_NEWLIB_VERSION) +-# define LZO_LIBC_NEWLIB 1 +-# define LZO_INFO_LIBC "newlib" +-#elif defined(__UCLIBC__) && defined(__UCLIBC_MAJOR__) && defined(__UCLIBC_MINOR__) +-# if defined(__UCLIBC_SUBLEVEL__) +-# define LZO_LIBC_UCLIBC (__UCLIBC_MAJOR__ * 0x10000L + __UCLIBC_MINOR__ * 0x100 + __UCLIBC_SUBLEVEL__) +-# else +-# define LZO_LIBC_UCLIBC 0x00090bL +-# endif +-# define LZO_INFO_LIBC "uclibc" +-#elif defined(__GLIBC__) && defined(__GLIBC_MINOR__) +-# define LZO_LIBC_GLIBC (__GLIBC__ * 0x10000L + __GLIBC_MINOR__ * 0x100) +-# define LZO_INFO_LIBC "glibc" +-#elif (LZO_CC_MWERKS) && defined(__MSL__) +-# define LZO_LIBC_MSL __MSL__ +-# define LZO_INFO_LIBC "msl" +-#elif 1 && defined(__IAR_SYSTEMS_ICC__) +-# define LZO_LIBC_ISOC90 1 +-# define LZO_INFO_LIBC "isoc90" +-#else +-# define LZO_LIBC_DEFAULT 1 +-# define LZO_INFO_LIBC "default" +-#endif +-#endif +-#if !defined(__lzo_gnuc_extension__) +-#if (LZO_CC_GNUC >= 0x020800ul) +-# define __lzo_gnuc_extension__ __extension__ +-#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) +-# define __lzo_gnuc_extension__ __extension__ +-#else +-# define __lzo_gnuc_extension__ /*empty*/ +-#endif +-#endif +-#if !defined(__lzo_ua_volatile) +-# define __lzo_ua_volatile volatile +-#endif +-#if !defined(__lzo_alignof) +-#if (LZO_CC_CILLY || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI) +-# define __lzo_alignof(e) __alignof__(e) +-#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 700)) +-# define __lzo_alignof(e) __alignof__(e) +-#elif (LZO_CC_MSC && (_MSC_VER >= 1300)) +-# define __lzo_alignof(e) __alignof(e) +-#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC >= 0x5100)) +-# define __lzo_alignof(e) __alignof__(e) +-#endif +-#endif +-#if defined(__lzo_alignof) +-# define __lzo_HAVE_alignof 1 +-#endif +-#if !defined(__lzo_constructor) +-#if (LZO_CC_GNUC >= 0x030400ul) +-# define __lzo_constructor __attribute__((__constructor__,__used__)) +-#elif (LZO_CC_GNUC >= 0x020700ul) +-# define __lzo_constructor __attribute__((__constructor__)) +-#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) +-# define __lzo_constructor __attribute__((__constructor__)) +-#endif +-#endif +-#if defined(__lzo_constructor) +-# define __lzo_HAVE_constructor 1 +-#endif +-#if !defined(__lzo_destructor) +-#if (LZO_CC_GNUC >= 0x030400ul) +-# define __lzo_destructor __attribute__((__destructor__,__used__)) +-#elif (LZO_CC_GNUC >= 0x020700ul) +-# define __lzo_destructor __attribute__((__destructor__)) +-#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) +-# define __lzo_destructor __attribute__((__destructor__)) +-#endif +-#endif +-#if defined(__lzo_destructor) +-# define __lzo_HAVE_destructor 1 +-#endif +-#if (__lzo_HAVE_destructor) && !(__lzo_HAVE_constructor) +-# error "this should not happen" +-#endif +-#if !defined(__lzo_inline) +-#if (LZO_CC_TURBOC && (__TURBOC__ <= 0x0295)) +-#elif defined(__cplusplus) +-# define __lzo_inline inline +-#elif (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0550)) +-# define __lzo_inline __inline +-#elif (LZO_CC_CILLY || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI) +-# define __lzo_inline __inline__ +-#elif (LZO_CC_DMC) +-# define __lzo_inline __inline +-#elif (LZO_CC_INTELC) +-# define __lzo_inline __inline +-#elif (LZO_CC_MWERKS && (__MWERKS__ >= 0x2405)) +-# define __lzo_inline __inline +-#elif (LZO_CC_MSC && (_MSC_VER >= 900)) +-# define __lzo_inline __inline +-#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC >= 0x5100)) +-# define __lzo_inline __inline__ +-#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) +-# define __lzo_inline inline +-#endif +-#endif +-#if defined(__lzo_inline) +-# define __lzo_HAVE_inline 1 +-#else +-# define __lzo_inline /*empty*/ +-#endif +-#if !defined(__lzo_forceinline) +-#if (LZO_CC_GNUC >= 0x030200ul) +-# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) +-#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 450) && LZO_CC_SYNTAX_MSC) +-# define __lzo_forceinline __forceinline +-#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800) && LZO_CC_SYNTAX_GNUC) +-# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) +-#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) +-# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) +-#elif (LZO_CC_MSC && (_MSC_VER >= 1200)) +-# define __lzo_forceinline __forceinline +-#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC >= 0x5100)) +-# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) +-#endif +-#endif +-#if defined(__lzo_forceinline) +-# define __lzo_HAVE_forceinline 1 +-#else +-# define __lzo_forceinline /*empty*/ +-#endif +-#if !defined(__lzo_noinline) +-#if 1 && (LZO_ARCH_I386) && (LZO_CC_GNUC >= 0x040000ul) && (LZO_CC_GNUC < 0x040003ul) +-# define __lzo_noinline __attribute__((__noinline__,__used__)) +-#elif (LZO_CC_GNUC >= 0x030200ul) +-# define __lzo_noinline __attribute__((__noinline__)) +-#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 600) && LZO_CC_SYNTAX_MSC) +-# define __lzo_noinline __declspec(noinline) +-#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800) && LZO_CC_SYNTAX_GNUC) +-# define __lzo_noinline __attribute__((__noinline__)) +-#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) +-# define __lzo_noinline __attribute__((__noinline__)) +-#elif (LZO_CC_MSC && (_MSC_VER >= 1300)) +-# define __lzo_noinline __declspec(noinline) +-#elif (LZO_CC_MWERKS && (__MWERKS__ >= 0x3200) && (LZO_OS_WIN32 || LZO_OS_WIN64)) +-# if defined(__cplusplus) +-# else +-# define __lzo_noinline __declspec(noinline) +-# endif +-#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC >= 0x5100)) +-# define __lzo_noinline __attribute__((__noinline__)) +-#endif +-#endif +-#if defined(__lzo_noinline) +-# define __lzo_HAVE_noinline 1 +-#else +-# define __lzo_noinline /*empty*/ +-#endif +-#if (__lzo_HAVE_forceinline || __lzo_HAVE_noinline) && !(__lzo_HAVE_inline) +-# error "this should not happen" +-#endif +-#if !defined(__lzo_noreturn) +-#if (LZO_CC_GNUC >= 0x020700ul) +-# define __lzo_noreturn __attribute__((__noreturn__)) +-#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 450) && LZO_CC_SYNTAX_MSC) +-# define __lzo_noreturn __declspec(noreturn) +-#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 600) && LZO_CC_SYNTAX_GNUC) +-# define __lzo_noreturn __attribute__((__noreturn__)) +-#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) +-# define __lzo_noreturn __attribute__((__noreturn__)) +-#elif (LZO_CC_MSC && (_MSC_VER >= 1200)) +-# define __lzo_noreturn __declspec(noreturn) +-#endif +-#endif +-#if defined(__lzo_noreturn) +-# define __lzo_HAVE_noreturn 1 +-#else +-# define __lzo_noreturn /*empty*/ +-#endif +-#if !defined(__lzo_nothrow) +-#if (LZO_CC_GNUC >= 0x030300ul) +-# define __lzo_nothrow __attribute__((__nothrow__)) +-#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 450) && LZO_CC_SYNTAX_MSC) && defined(__cplusplus) +-# define __lzo_nothrow __declspec(nothrow) +-#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 900) && LZO_CC_SYNTAX_GNUC) +-# define __lzo_nothrow __attribute__((__nothrow__)) +-#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) +-# define __lzo_nothrow __attribute__((__nothrow__)) +-#elif (LZO_CC_MSC && (_MSC_VER >= 1200)) && defined(__cplusplus) +-# define __lzo_nothrow __declspec(nothrow) +-#endif +-#endif +-#if defined(__lzo_nothrow) +-# define __lzo_HAVE_nothrow 1 +-#else +-# define __lzo_nothrow /*empty*/ +-#endif +-#if !defined(__lzo_restrict) +-#if (LZO_CC_GNUC >= 0x030400ul) +-# define __lzo_restrict __restrict__ +-#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 600) && LZO_CC_SYNTAX_GNUC) +-# define __lzo_restrict __restrict__ +-#elif (LZO_CC_CLANG || LZO_CC_LLVM) +-# define __lzo_restrict __restrict__ +-#elif (LZO_CC_MSC && (_MSC_VER >= 1400)) +-# define __lzo_restrict __restrict +-#endif +-#endif +-#if defined(__lzo_restrict) +-# define __lzo_HAVE_restrict 1 +-#else +-# define __lzo_restrict /*empty*/ +-#endif +-#if !defined(__lzo_likely) && !defined(__lzo_unlikely) +-#if (LZO_CC_GNUC >= 0x030200ul) +-# define __lzo_likely(e) (__builtin_expect(!!(e),1)) +-# define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) +-#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800)) +-# define __lzo_likely(e) (__builtin_expect(!!(e),1)) +-# define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) +-#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) +-# define __lzo_likely(e) (__builtin_expect(!!(e),1)) +-# define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) +-#endif +-#endif +-#if defined(__lzo_likely) +-# define __lzo_HAVE_likely 1 +-#else +-# define __lzo_likely(e) (e) +-#endif +-#if defined(__lzo_unlikely) +-# define __lzo_HAVE_unlikely 1 +-#else +-# define __lzo_unlikely(e) (e) +-#endif +-#if !defined(LZO_UNUSED) +-# if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0600)) +-# define LZO_UNUSED(var) ((void) &var) +-# elif (LZO_CC_BORLANDC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PELLESC || LZO_CC_TURBOC) +-# define LZO_UNUSED(var) if (&var) ; else +-# elif (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) +-# define LZO_UNUSED(var) ((void) var) +-# elif (LZO_CC_MSC && (_MSC_VER < 900)) +-# define LZO_UNUSED(var) if (&var) ; else +-# elif (LZO_CC_KEILC) +-# define LZO_UNUSED(var) {extern int __lzo_unused[1-2*!(sizeof(var)>0)];} +-# elif (LZO_CC_PACIFICC) +-# define LZO_UNUSED(var) ((void) sizeof(var)) +-# elif (LZO_CC_WATCOMC) && defined(__cplusplus) +-# define LZO_UNUSED(var) ((void) var) +-# else +-# define LZO_UNUSED(var) ((void) &var) +-# endif +-#endif +-#if !defined(LZO_UNUSED_FUNC) +-# if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0600)) +-# define LZO_UNUSED_FUNC(func) ((void) func) +-# elif (LZO_CC_BORLANDC || LZO_CC_NDPC || LZO_CC_TURBOC) +-# define LZO_UNUSED_FUNC(func) if (func) ; else +-# elif (LZO_CC_CLANG || LZO_CC_LLVM) +-# define LZO_UNUSED_FUNC(func) ((void) &func) +-# elif (LZO_CC_MSC && (_MSC_VER < 900)) +-# define LZO_UNUSED_FUNC(func) if (func) ; else +-# elif (LZO_CC_MSC) +-# define LZO_UNUSED_FUNC(func) ((void) &func) +-# elif (LZO_CC_KEILC || LZO_CC_PELLESC) +-# define LZO_UNUSED_FUNC(func) {extern int __lzo_unused[1-2*!(sizeof((int)func)>0)];} +-# else +-# define LZO_UNUSED_FUNC(func) ((void) func) +-# endif +-#endif +-#if !defined(LZO_UNUSED_LABEL) +-# if (LZO_CC_WATCOMC) && defined(__cplusplus) +-# define LZO_UNUSED_LABEL(l) switch(0) case 1:goto l +-# elif (LZO_CC_CLANG || LZO_CC_INTELC || LZO_CC_WATCOMC) +-# define LZO_UNUSED_LABEL(l) if (0) goto l +-# else +-# define LZO_UNUSED_LABEL(l) switch(0) case 1:goto l +-# endif +-#endif +-#if !defined(LZO_DEFINE_UNINITIALIZED_VAR) +-# if 0 +-# define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var +-# elif 0 && (LZO_CC_GNUC) +-# define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var = var +-# else +-# define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var = init +-# endif +-#endif +-#if !defined(LZO_UNCONST_CAST) +-# if 0 && defined(__cplusplus) +-# define LZO_UNCONST_CAST(t,e) (const_cast<t> (e)) +-# elif (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) +-# define LZO_UNCONST_CAST(t,e) ((t) ((void *) ((char *) ((lzo_uintptr_t) ((const void *) (e)))))) +-# else +-# define LZO_UNCONST_CAST(t,e) ((t) ((void *) ((char *) ((const void *) (e))))) +-# endif +-#endif +-#if !defined(LZO_COMPILE_TIME_ASSERT_HEADER) +-# if (LZO_CC_AZTECC || LZO_CC_ZORTECHC) +-# define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1-!(e)]; +-# elif (LZO_CC_DMC || LZO_CC_SYMANTECC) +-# define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1u-2*!(e)]; +-# elif (LZO_CC_TURBOC && (__TURBOC__ == 0x0295)) +-# define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1-!(e)]; +-# else +-# define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1-2*!(e)]; +-# endif +-#endif +-#if !defined(LZO_COMPILE_TIME_ASSERT) +-# if (LZO_CC_AZTECC) +-# define LZO_COMPILE_TIME_ASSERT(e) {typedef int __lzo_cta_t[1-!(e)];} +-# elif (LZO_CC_DMC || LZO_CC_PACIFICC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) +-# define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break; +-# elif (LZO_CC_MSC && (_MSC_VER < 900)) +-# define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break; +-# elif (LZO_CC_TURBOC && (__TURBOC__ == 0x0295)) +-# define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break; +-# else +-# define LZO_COMPILE_TIME_ASSERT(e) {typedef int __lzo_cta_t[1-2*!(e)];} +-# endif +-#endif +-#if (LZO_ARCH_I086 || LZO_ARCH_I386) && (LZO_OS_DOS16 || LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_OS216 || LZO_OS_WIN16 || LZO_OS_WIN32 || LZO_OS_WIN64) +-# if (LZO_CC_GNUC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PACIFICC) +-# elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) +-# define __lzo_cdecl __cdecl +-# define __lzo_cdecl_atexit /*empty*/ +-# define __lzo_cdecl_main __cdecl +-# if (LZO_OS_OS2 && (LZO_CC_DMC || LZO_CC_SYMANTECC)) +-# define __lzo_cdecl_qsort __pascal +-# elif (LZO_OS_OS2 && (LZO_CC_ZORTECHC)) +-# define __lzo_cdecl_qsort _stdcall +-# else +-# define __lzo_cdecl_qsort __cdecl +-# endif +-# elif (LZO_CC_WATCOMC) +-# define __lzo_cdecl __cdecl +-# else +-# define __lzo_cdecl __cdecl +-# define __lzo_cdecl_atexit __cdecl +-# define __lzo_cdecl_main __cdecl +-# define __lzo_cdecl_qsort __cdecl +-# endif +-# if (LZO_CC_GNUC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PACIFICC || LZO_CC_WATCOMC) +-# elif (LZO_OS_OS2 && (LZO_CC_DMC || LZO_CC_SYMANTECC)) +-# define __lzo_cdecl_sighandler __pascal +-# elif (LZO_OS_OS2 && (LZO_CC_ZORTECHC)) +-# define __lzo_cdecl_sighandler _stdcall +-# elif (LZO_CC_MSC && (_MSC_VER >= 1400)) && defined(_M_CEE_PURE) +-# define __lzo_cdecl_sighandler __clrcall +-# elif (LZO_CC_MSC && (_MSC_VER >= 600 && _MSC_VER < 700)) +-# if defined(_DLL) +-# define __lzo_cdecl_sighandler _far _cdecl _loadds +-# elif defined(_MT) +-# define __lzo_cdecl_sighandler _far _cdecl +-# else +-# define __lzo_cdecl_sighandler _cdecl +-# endif +-# else +-# define __lzo_cdecl_sighandler __cdecl +-# endif +-#elif (LZO_ARCH_I386) && (LZO_CC_WATCOMC) +-# define __lzo_cdecl __cdecl +-#elif (LZO_ARCH_M68K && LZO_OS_TOS && (LZO_CC_PUREC || LZO_CC_TURBOC)) +-# define __lzo_cdecl cdecl +-#endif +-#if !defined(__lzo_cdecl) +-# define __lzo_cdecl /*empty*/ +-#endif +-#if !defined(__lzo_cdecl_atexit) +-# define __lzo_cdecl_atexit /*empty*/ +-#endif +-#if !defined(__lzo_cdecl_main) +-# define __lzo_cdecl_main /*empty*/ +-#endif +-#if !defined(__lzo_cdecl_qsort) +-# define __lzo_cdecl_qsort /*empty*/ +-#endif +-#if !defined(__lzo_cdecl_sighandler) +-# define __lzo_cdecl_sighandler /*empty*/ +-#endif +-#if !defined(__lzo_cdecl_va) +-# define __lzo_cdecl_va __lzo_cdecl +-#endif +-#if !(LZO_CFG_NO_WINDOWS_H) +-#if (LZO_OS_CYGWIN || (LZO_OS_EMX && defined(__RSXNT__)) || LZO_OS_WIN32 || LZO_OS_WIN64) +-# if (LZO_CC_WATCOMC && (__WATCOMC__ < 1000)) +-# elif (LZO_OS_WIN32 && LZO_CC_GNUC) && defined(__PW32__) +-# elif ((LZO_OS_CYGWIN || defined(__MINGW32__)) && (LZO_CC_GNUC && (LZO_CC_GNUC < 0x025f00ul))) +-# else +-# define LZO_HAVE_WINDOWS_H 1 +-# endif +-#endif +-#endif +-#if (LZO_ARCH_ALPHA) +-# define LZO_OPT_AVOID_UINT_INDEX 1 +-# define LZO_OPT_AVOID_SHORT 1 +-# define LZO_OPT_AVOID_USHORT 1 +-#elif (LZO_ARCH_AMD64) +-# define LZO_OPT_AVOID_INT_INDEX 1 +-# define LZO_OPT_AVOID_UINT_INDEX 1 +-# define LZO_OPT_UNALIGNED16 1 +-# define LZO_OPT_UNALIGNED32 1 +-# define LZO_OPT_UNALIGNED64 1 +-#elif (LZO_ARCH_ARM && LZO_ARCH_ARM_THUMB) +-#elif (LZO_ARCH_ARM) +-# define LZO_OPT_AVOID_SHORT 1 +-# define LZO_OPT_AVOID_USHORT 1 +-#elif (LZO_ARCH_CRIS) +-# define LZO_OPT_UNALIGNED16 1 +-# define LZO_OPT_UNALIGNED32 1 +-#elif (LZO_ARCH_I386) +-# define LZO_OPT_UNALIGNED16 1 +-# define LZO_OPT_UNALIGNED32 1 +-#elif (LZO_ARCH_IA64) +-# define LZO_OPT_AVOID_INT_INDEX 1 +-# define LZO_OPT_AVOID_UINT_INDEX 1 +-# define LZO_OPT_PREFER_POSTINC 1 +-#elif (LZO_ARCH_M68K) +-# define LZO_OPT_PREFER_POSTINC 1 +-# define LZO_OPT_PREFER_PREDEC 1 +-# if defined(__mc68020__) && !defined(__mcoldfire__) +-# define LZO_OPT_UNALIGNED16 1 +-# define LZO_OPT_UNALIGNED32 1 +-# endif +-#elif (LZO_ARCH_MIPS) +-# define LZO_OPT_AVOID_UINT_INDEX 1 +-#elif (LZO_ARCH_POWERPC) +-# define LZO_OPT_PREFER_PREINC 1 +-# define LZO_OPT_PREFER_PREDEC 1 +-# if (LZO_ABI_BIG_ENDIAN) +-# define LZO_OPT_UNALIGNED16 1 +-# define LZO_OPT_UNALIGNED32 1 +-# endif +-#elif (LZO_ARCH_S390) +-# define LZO_OPT_UNALIGNED16 1 +-# define LZO_OPT_UNALIGNED32 1 +-# if (LZO_SIZEOF_SIZE_T == 8) +-# define LZO_OPT_UNALIGNED64 1 +-# endif +-#elif (LZO_ARCH_SH) +-# define LZO_OPT_PREFER_POSTINC 1 +-# define LZO_OPT_PREFER_PREDEC 1 +-#endif +-#ifndef LZO_CFG_NO_INLINE_ASM +-#if (LZO_CC_LLVM) +-# define LZO_CFG_NO_INLINE_ASM 1 +-#endif +-#endif +-#ifndef LZO_CFG_NO_UNALIGNED +-#if (LZO_ABI_NEUTRAL_ENDIAN) || (LZO_ARCH_GENERIC) +-# define LZO_CFG_NO_UNALIGNED 1 +-#endif +-#endif +-#if (LZO_CFG_NO_UNALIGNED) +-# undef LZO_OPT_UNALIGNED16 +-# undef LZO_OPT_UNALIGNED32 +-# undef LZO_OPT_UNALIGNED64 +-#endif +-#if (LZO_CFG_NO_INLINE_ASM) +-#elif (LZO_ARCH_I386 && (LZO_OS_DOS32 || LZO_OS_WIN32) && (LZO_CC_DMC || LZO_CC_INTELC || LZO_CC_MSC || LZO_CC_PELLESC)) +-# define LZO_ASM_SYNTAX_MSC 1 +-#elif (LZO_OS_WIN64 && (LZO_CC_DMC || LZO_CC_INTELC || LZO_CC_MSC || LZO_CC_PELLESC)) +-#elif (LZO_ARCH_I386 && LZO_CC_GNUC && (LZO_CC_GNUC == 0x011f00ul)) +-#elif (LZO_ARCH_I386 && (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC || LZO_CC_PATHSCALE)) +-# define LZO_ASM_SYNTAX_GNUC 1 +-#elif (LZO_ARCH_AMD64 && (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC || LZO_CC_PATHSCALE)) +-# define LZO_ASM_SYNTAX_GNUC 1 +-#endif +-#if (LZO_ASM_SYNTAX_GNUC) +-#if (LZO_ARCH_I386 && LZO_CC_GNUC && (LZO_CC_GNUC < 0x020000ul)) +-# define __LZO_ASM_CLOBBER "ax" +-#elif (LZO_CC_INTELC) +-# define __LZO_ASM_CLOBBER "memory" +-#else +-# define __LZO_ASM_CLOBBER "cc", "memory" +-#endif +-#endif +-#if defined(__LZO_INFOSTR_MM) +-#elif (LZO_MM_FLAT) && (defined(__LZO_INFOSTR_PM) || defined(LZO_INFO_ABI_PM)) +-# define __LZO_INFOSTR_MM "" +-#elif defined(LZO_INFO_MM) +-# define __LZO_INFOSTR_MM "." LZO_INFO_MM +-#else +-# define __LZO_INFOSTR_MM "" +-#endif +-#if defined(__LZO_INFOSTR_PM) +-#elif defined(LZO_INFO_ABI_PM) +-# define __LZO_INFOSTR_PM "." LZO_INFO_ABI_PM +-#else +-# define __LZO_INFOSTR_PM "" +-#endif +-#if defined(__LZO_INFOSTR_ENDIAN) +-#elif defined(LZO_INFO_ABI_ENDIAN) +-# define __LZO_INFOSTR_ENDIAN "." LZO_INFO_ABI_ENDIAN +-#else +-# define __LZO_INFOSTR_ENDIAN "" +-#endif +-#if defined(__LZO_INFOSTR_OSNAME) +-#elif defined(LZO_INFO_OS_CONSOLE) +-# define __LZO_INFOSTR_OSNAME LZO_INFO_OS "." LZO_INFO_OS_CONSOLE +-#elif defined(LZO_INFO_OS_POSIX) +-# define __LZO_INFOSTR_OSNAME LZO_INFO_OS "." LZO_INFO_OS_POSIX +-#else +-# define __LZO_INFOSTR_OSNAME LZO_INFO_OS +-#endif +-#if defined(__LZO_INFOSTR_LIBC) +-#elif defined(LZO_INFO_LIBC) +-# define __LZO_INFOSTR_LIBC "." LZO_INFO_LIBC +-#else +-# define __LZO_INFOSTR_LIBC "" +-#endif +-#if defined(__LZO_INFOSTR_CCVER) +-#elif defined(LZO_INFO_CCVER) +-# define __LZO_INFOSTR_CCVER " " LZO_INFO_CCVER +-#else +-# define __LZO_INFOSTR_CCVER "" +-#endif +-#define LZO_INFO_STRING \ +- LZO_INFO_ARCH __LZO_INFOSTR_MM __LZO_INFOSTR_PM __LZO_INFOSTR_ENDIAN \ +- " " __LZO_INFOSTR_OSNAME __LZO_INFOSTR_LIBC " " LZO_INFO_CC __LZO_INFOSTR_CCVER +- +-#endif /* already included */ +- +-/* vim:set ts=4 et: */ +diff -urN remmina-plugins/vnc/libvncserver/common/minilzo.c remmina-plugins/vnc/libvncserver/common/minilzo.c +--- remmina-plugins/vnc/libvncserver/common/minilzo.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/common/minilzo.c 1970-01-01 10:00:00.000000000 +1000 +@@ -1,4192 +0,0 @@ +-/* minilzo.c -- mini subset of the LZO real-time data compression library +- +- This file is part of the LZO real-time data compression library. +- +- Copyright (C) 2010 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2009 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2008 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2007 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2006 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2005 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2004 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2003 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer +- All Rights Reserved. +- +- The LZO library is free software; you can 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. +- +- The LZO library 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 the LZO library; see the file COPYING. +- If not, write to the Free Software Foundation, Inc., +- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +- +- Markus F.X.J. Oberhumer +- <markus@oberhumer.com> +- http://www.oberhumer.com/opensource/lzo/ +- */ +- +-/* +- * NOTE: +- * the full LZO package can be found at +- * http://www.oberhumer.com/opensource/lzo/ +- */ +- +-#define __LZO_IN_MINILZO 1 +- +-#if defined(LZO_CFG_FREESTANDING) +-# undef MINILZO_HAVE_CONFIG_H +-# define LZO_LIBC_FREESTANDING 1 +-# define LZO_OS_FREESTANDING 1 +-#endif +- +-#ifdef MINILZO_HAVE_CONFIG_H +-# include <config.h> +-#endif +-#include <limits.h> +-#include <stddef.h> +-#if defined(MINILZO_CFG_USE_INTERNAL_LZODEFS) +- +-#ifndef __LZODEFS_H_INCLUDED +-#define __LZODEFS_H_INCLUDED 1 +- +-#if defined(__CYGWIN32__) && !defined(__CYGWIN__) +-# define __CYGWIN__ __CYGWIN32__ +-#endif +-#if defined(__IBMCPP__) && !defined(__IBMC__) +-# define __IBMC__ __IBMCPP__ +-#endif +-#if defined(__ICL) && defined(_WIN32) && !defined(__INTEL_COMPILER) +-# define __INTEL_COMPILER __ICL +-#endif +-#if 1 && defined(__INTERIX) && defined(__GNUC__) && !defined(_ALL_SOURCE) +-# define _ALL_SOURCE 1 +-#endif +-#if defined(__mips__) && defined(__R5900__) +-# if !defined(__LONG_MAX__) +-# define __LONG_MAX__ 9223372036854775807L +-# endif +-#endif +-#if defined(__INTEL_COMPILER) && defined(__linux__) +-# pragma warning(disable: 193) +-#endif +-#if defined(__KEIL__) && defined(__C166__) +-# pragma warning disable = 322 +-#elif 0 && defined(__C251__) +-# pragma warning disable = 322 +-#endif +-#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && !defined(__MWERKS__) +-# if (_MSC_VER >= 1300) +-# pragma warning(disable: 4668) +-# endif +-#endif +-#if 0 && defined(__WATCOMC__) +-# if (__WATCOMC__ >= 1050) && (__WATCOMC__ < 1060) +-# pragma warning 203 9 +-# endif +-#endif +-#if defined(__BORLANDC__) && defined(__MSDOS__) && !defined(__FLAT__) +-# pragma option -h +-#endif +-#if 0 +-#define LZO_0xffffL 0xfffful +-#define LZO_0xffffffffL 0xfffffffful +-#else +-#define LZO_0xffffL 65535ul +-#define LZO_0xffffffffL 4294967295ul +-#endif +-#if (LZO_0xffffL == LZO_0xffffffffL) +-# error "your preprocessor is broken 1" +-#endif +-#if (16ul * 16384ul != 262144ul) +-# error "your preprocessor is broken 2" +-#endif +-#if 0 +-#if (32767 >= 4294967295ul) +-# error "your preprocessor is broken 3" +-#endif +-#if (65535u >= 4294967295ul) +-# error "your preprocessor is broken 4" +-#endif +-#endif +-#if (UINT_MAX == LZO_0xffffL) +-#if defined(__ZTC__) && defined(__I86__) && !defined(__OS2__) +-# if !defined(MSDOS) +-# define MSDOS 1 +-# endif +-# if !defined(_MSDOS) +-# define _MSDOS 1 +-# endif +-#elif 0 && defined(__VERSION) && defined(MB_LEN_MAX) +-# if (__VERSION == 520) && (MB_LEN_MAX == 1) +-# if !defined(__AZTEC_C__) +-# define __AZTEC_C__ __VERSION +-# endif +-# if !defined(__DOS__) +-# define __DOS__ 1 +-# endif +-# endif +-#endif +-#endif +-#if defined(_MSC_VER) && defined(M_I86HM) && (UINT_MAX == LZO_0xffffL) +-# define ptrdiff_t long +-# define _PTRDIFF_T_DEFINED 1 +-#endif +-#if (UINT_MAX == LZO_0xffffL) +-# undef __LZO_RENAME_A +-# undef __LZO_RENAME_B +-# if defined(__AZTEC_C__) && defined(__DOS__) +-# define __LZO_RENAME_A 1 +-# elif defined(_MSC_VER) && defined(MSDOS) +-# if (_MSC_VER < 600) +-# define __LZO_RENAME_A 1 +-# elif (_MSC_VER < 700) +-# define __LZO_RENAME_B 1 +-# endif +-# elif defined(__TSC__) && defined(__OS2__) +-# define __LZO_RENAME_A 1 +-# elif defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0410) +-# define __LZO_RENAME_A 1 +-# elif defined(__PACIFIC__) && defined(DOS) +-# if !defined(__far) +-# define __far far +-# endif +-# if !defined(__near) +-# define __near near +-# endif +-# endif +-# if defined(__LZO_RENAME_A) +-# if !defined(__cdecl) +-# define __cdecl cdecl +-# endif +-# if !defined(__far) +-# define __far far +-# endif +-# if !defined(__huge) +-# define __huge huge +-# endif +-# if !defined(__near) +-# define __near near +-# endif +-# if !defined(__pascal) +-# define __pascal pascal +-# endif +-# if !defined(__huge) +-# define __huge huge +-# endif +-# elif defined(__LZO_RENAME_B) +-# if !defined(__cdecl) +-# define __cdecl _cdecl +-# endif +-# if !defined(__far) +-# define __far _far +-# endif +-# if !defined(__huge) +-# define __huge _huge +-# endif +-# if !defined(__near) +-# define __near _near +-# endif +-# if !defined(__pascal) +-# define __pascal _pascal +-# endif +-# elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__) +-# if !defined(__cdecl) +-# define __cdecl cdecl +-# endif +-# if !defined(__pascal) +-# define __pascal pascal +-# endif +-# endif +-# undef __LZO_RENAME_A +-# undef __LZO_RENAME_B +-#endif +-#if (UINT_MAX == LZO_0xffffL) +-#if defined(__AZTEC_C__) && defined(__DOS__) +-# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 +-#elif defined(_MSC_VER) && defined(MSDOS) +-# if (_MSC_VER < 600) +-# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 +-# endif +-# if (_MSC_VER < 700) +-# define LZO_BROKEN_INTEGRAL_PROMOTION 1 +-# define LZO_BROKEN_SIZEOF 1 +-# endif +-#elif defined(__PACIFIC__) && defined(DOS) +-# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 +-#elif defined(__TURBOC__) && defined(__MSDOS__) +-# if (__TURBOC__ < 0x0150) +-# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 +-# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 +-# define LZO_BROKEN_INTEGRAL_PROMOTION 1 +-# endif +-# if (__TURBOC__ < 0x0200) +-# define LZO_BROKEN_SIZEOF 1 +-# endif +-# if (__TURBOC__ < 0x0400) && defined(__cplusplus) +-# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 +-# endif +-#elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__) +-# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 +-# define LZO_BROKEN_SIZEOF 1 +-#endif +-#endif +-#if defined(__WATCOMC__) && (__WATCOMC__ < 900) +-# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 +-#endif +-#if defined(_CRAY) && defined(_CRAY1) +-# define LZO_BROKEN_SIGNED_RIGHT_SHIFT 1 +-#endif +-#define LZO_PP_STRINGIZE(x) #x +-#define LZO_PP_MACRO_EXPAND(x) LZO_PP_STRINGIZE(x) +-#define LZO_PP_CONCAT2(a,b) a ## b +-#define LZO_PP_CONCAT3(a,b,c) a ## b ## c +-#define LZO_PP_CONCAT4(a,b,c,d) a ## b ## c ## d +-#define LZO_PP_CONCAT5(a,b,c,d,e) a ## b ## c ## d ## e +-#define LZO_PP_ECONCAT2(a,b) LZO_PP_CONCAT2(a,b) +-#define LZO_PP_ECONCAT3(a,b,c) LZO_PP_CONCAT3(a,b,c) +-#define LZO_PP_ECONCAT4(a,b,c,d) LZO_PP_CONCAT4(a,b,c,d) +-#define LZO_PP_ECONCAT5(a,b,c,d,e) LZO_PP_CONCAT5(a,b,c,d,e) +-#if 1 +-#define LZO_CPP_STRINGIZE(x) #x +-#define LZO_CPP_MACRO_EXPAND(x) LZO_CPP_STRINGIZE(x) +-#define LZO_CPP_CONCAT2(a,b) a ## b +-#define LZO_CPP_CONCAT3(a,b,c) a ## b ## c +-#define LZO_CPP_CONCAT4(a,b,c,d) a ## b ## c ## d +-#define LZO_CPP_CONCAT5(a,b,c,d,e) a ## b ## c ## d ## e +-#define LZO_CPP_ECONCAT2(a,b) LZO_CPP_CONCAT2(a,b) +-#define LZO_CPP_ECONCAT3(a,b,c) LZO_CPP_CONCAT3(a,b,c) +-#define LZO_CPP_ECONCAT4(a,b,c,d) LZO_CPP_CONCAT4(a,b,c,d) +-#define LZO_CPP_ECONCAT5(a,b,c,d,e) LZO_CPP_CONCAT5(a,b,c,d,e) +-#endif +-#define __LZO_MASK_GEN(o,b) (((((o) << ((b)-1)) - (o)) << 1) + (o)) +-#if 1 && defined(__cplusplus) +-# if !defined(__STDC_CONSTANT_MACROS) +-# define __STDC_CONSTANT_MACROS 1 +-# endif +-# if !defined(__STDC_LIMIT_MACROS) +-# define __STDC_LIMIT_MACROS 1 +-# endif +-#endif +-#if defined(__cplusplus) +-# define LZO_EXTERN_C extern "C" +-#else +-# define LZO_EXTERN_C extern +-#endif +-#if !defined(__LZO_OS_OVERRIDE) +-#if (LZO_OS_FREESTANDING) +-# define LZO_INFO_OS "freestanding" +-#elif (LZO_OS_EMBEDDED) +-# define LZO_INFO_OS "embedded" +-#elif 1 && defined(__IAR_SYSTEMS_ICC__) +-# define LZO_OS_EMBEDDED 1 +-# define LZO_INFO_OS "embedded" +-#elif defined(__CYGWIN__) && defined(__GNUC__) +-# define LZO_OS_CYGWIN 1 +-# define LZO_INFO_OS "cygwin" +-#elif defined(__EMX__) && defined(__GNUC__) +-# define LZO_OS_EMX 1 +-# define LZO_INFO_OS "emx" +-#elif defined(__BEOS__) +-# define LZO_OS_BEOS 1 +-# define LZO_INFO_OS "beos" +-#elif defined(__Lynx__) +-# define LZO_OS_LYNXOS 1 +-# define LZO_INFO_OS "lynxos" +-#elif defined(__OS400__) +-# define LZO_OS_OS400 1 +-# define LZO_INFO_OS "os400" +-#elif defined(__QNX__) +-# define LZO_OS_QNX 1 +-# define LZO_INFO_OS "qnx" +-#elif defined(__BORLANDC__) && defined(__DPMI32__) && (__BORLANDC__ >= 0x0460) +-# define LZO_OS_DOS32 1 +-# define LZO_INFO_OS "dos32" +-#elif defined(__BORLANDC__) && defined(__DPMI16__) +-# define LZO_OS_DOS16 1 +-# define LZO_INFO_OS "dos16" +-#elif defined(__ZTC__) && defined(DOS386) +-# define LZO_OS_DOS32 1 +-# define LZO_INFO_OS "dos32" +-#elif defined(__OS2__) || defined(__OS2V2__) +-# if (UINT_MAX == LZO_0xffffL) +-# define LZO_OS_OS216 1 +-# define LZO_INFO_OS "os216" +-# elif (UINT_MAX == LZO_0xffffffffL) +-# define LZO_OS_OS2 1 +-# define LZO_INFO_OS "os2" +-# else +-# error "check your limits.h header" +-# endif +-#elif defined(__WIN64__) || defined(_WIN64) || defined(WIN64) +-# define LZO_OS_WIN64 1 +-# define LZO_INFO_OS "win64" +-#elif defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(__WINDOWS_386__) +-# define LZO_OS_WIN32 1 +-# define LZO_INFO_OS "win32" +-#elif defined(__MWERKS__) && defined(__INTEL__) +-# define LZO_OS_WIN32 1 +-# define LZO_INFO_OS "win32" +-#elif defined(__WINDOWS__) || defined(_WINDOWS) || defined(_Windows) +-# if (UINT_MAX == LZO_0xffffL) +-# define LZO_OS_WIN16 1 +-# define LZO_INFO_OS "win16" +-# elif (UINT_MAX == LZO_0xffffffffL) +-# define LZO_OS_WIN32 1 +-# define LZO_INFO_OS "win32" +-# else +-# error "check your limits.h header" +-# endif +-#elif defined(__DOS__) || defined(__MSDOS__) || defined(_MSDOS) || defined(MSDOS) || (defined(__PACIFIC__) && defined(DOS)) +-# if (UINT_MAX == LZO_0xffffL) +-# define LZO_OS_DOS16 1 +-# define LZO_INFO_OS "dos16" +-# elif (UINT_MAX == LZO_0xffffffffL) +-# define LZO_OS_DOS32 1 +-# define LZO_INFO_OS "dos32" +-# else +-# error "check your limits.h header" +-# endif +-#elif defined(__WATCOMC__) +-# if defined(__NT__) && (UINT_MAX == LZO_0xffffL) +-# define LZO_OS_DOS16 1 +-# define LZO_INFO_OS "dos16" +-# elif defined(__NT__) && (__WATCOMC__ < 1100) +-# define LZO_OS_WIN32 1 +-# define LZO_INFO_OS "win32" +-# elif defined(__linux__) || defined(__LINUX__) +-# define LZO_OS_POSIX 1 +-# define LZO_INFO_OS "posix" +-# else +-# error "please specify a target using the -bt compiler option" +-# endif +-#elif defined(__palmos__) +-# define LZO_OS_PALMOS 1 +-# define LZO_INFO_OS "palmos" +-#elif defined(__TOS__) || defined(__atarist__) +-# define LZO_OS_TOS 1 +-# define LZO_INFO_OS "tos" +-#elif defined(macintosh) && !defined(__ppc__) +-# define LZO_OS_MACCLASSIC 1 +-# define LZO_INFO_OS "macclassic" +-#elif defined(__VMS) +-# define LZO_OS_VMS 1 +-# define LZO_INFO_OS "vms" +-#elif ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__)) +-# define LZO_OS_CONSOLE 1 +-# define LZO_OS_CONSOLE_PS2 1 +-# define LZO_INFO_OS "console" +-# define LZO_INFO_OS_CONSOLE "ps2" +-#elif (defined(__mips__) && defined(__psp__)) +-# define LZO_OS_CONSOLE 1 +-# define LZO_OS_CONSOLE_PSP 1 +-# define LZO_INFO_OS "console" +-# define LZO_INFO_OS_CONSOLE "psp" +-#else +-# define LZO_OS_POSIX 1 +-# define LZO_INFO_OS "posix" +-#endif +-#if (LZO_OS_POSIX) +-# if defined(_AIX) || defined(__AIX__) || defined(__aix__) +-# define LZO_OS_POSIX_AIX 1 +-# define LZO_INFO_OS_POSIX "aix" +-# elif defined(__FreeBSD__) +-# define LZO_OS_POSIX_FREEBSD 1 +-# define LZO_INFO_OS_POSIX "freebsd" +-# elif defined(__hpux__) || defined(__hpux) +-# define LZO_OS_POSIX_HPUX 1 +-# define LZO_INFO_OS_POSIX "hpux" +-# elif defined(__INTERIX) +-# define LZO_OS_POSIX_INTERIX 1 +-# define LZO_INFO_OS_POSIX "interix" +-# elif defined(__IRIX__) || defined(__irix__) +-# define LZO_OS_POSIX_IRIX 1 +-# define LZO_INFO_OS_POSIX "irix" +-# elif defined(__linux__) || defined(__linux) || defined(__LINUX__) +-# define LZO_OS_POSIX_LINUX 1 +-# define LZO_INFO_OS_POSIX "linux" +-# elif defined(__APPLE__) || defined(__MACOS__) +-# define LZO_OS_POSIX_MACOSX 1 +-# define LZO_INFO_OS_POSIX "macosx" +-# elif defined(__minix__) || defined(__minix) +-# define LZO_OS_POSIX_MINIX 1 +-# define LZO_INFO_OS_POSIX "minix" +-# elif defined(__NetBSD__) +-# define LZO_OS_POSIX_NETBSD 1 +-# define LZO_INFO_OS_POSIX "netbsd" +-# elif defined(__OpenBSD__) +-# define LZO_OS_POSIX_OPENBSD 1 +-# define LZO_INFO_OS_POSIX "openbsd" +-# elif defined(__osf__) +-# define LZO_OS_POSIX_OSF 1 +-# define LZO_INFO_OS_POSIX "osf" +-# elif defined(__solaris__) || defined(__sun) +-# if defined(__SVR4) || defined(__svr4__) +-# define LZO_OS_POSIX_SOLARIS 1 +-# define LZO_INFO_OS_POSIX "solaris" +-# else +-# define LZO_OS_POSIX_SUNOS 1 +-# define LZO_INFO_OS_POSIX "sunos" +-# endif +-# elif defined(__ultrix__) || defined(__ultrix) +-# define LZO_OS_POSIX_ULTRIX 1 +-# define LZO_INFO_OS_POSIX "ultrix" +-# elif defined(_UNICOS) +-# define LZO_OS_POSIX_UNICOS 1 +-# define LZO_INFO_OS_POSIX "unicos" +-# else +-# define LZO_OS_POSIX_UNKNOWN 1 +-# define LZO_INFO_OS_POSIX "unknown" +-# endif +-#endif +-#endif +-#if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) +-# if (UINT_MAX != LZO_0xffffL) +-# error "this should not happen" +-# endif +-# if (ULONG_MAX != LZO_0xffffffffL) +-# error "this should not happen" +-# endif +-#endif +-#if (LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_WIN32 || LZO_OS_WIN64) +-# if (UINT_MAX != LZO_0xffffffffL) +-# error "this should not happen" +-# endif +-# if (ULONG_MAX != LZO_0xffffffffL) +-# error "this should not happen" +-# endif +-#endif +-#if defined(CIL) && defined(_GNUCC) && defined(__GNUC__) +-# define LZO_CC_CILLY 1 +-# define LZO_INFO_CC "Cilly" +-# if defined(__CILLY__) +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__CILLY__) +-# else +-# define LZO_INFO_CCVER "unknown" +-# endif +-#elif 0 && defined(SDCC) && defined(__VERSION__) && !defined(__GNUC__) +-# define LZO_CC_SDCC 1 +-# define LZO_INFO_CC "sdcc" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(SDCC) +-#elif defined(__PATHSCALE__) && defined(__PATHCC_PATCHLEVEL__) +-# define LZO_CC_PATHSCALE (__PATHCC__ * 0x10000L + __PATHCC_MINOR__ * 0x100 + __PATHCC_PATCHLEVEL__) +-# define LZO_INFO_CC "Pathscale C" +-# define LZO_INFO_CCVER __PATHSCALE__ +-#elif defined(__INTEL_COMPILER) +-# define LZO_CC_INTELC 1 +-# define LZO_INFO_CC "Intel C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__INTEL_COMPILER) +-# if defined(_WIN32) || defined(_WIN64) +-# define LZO_CC_SYNTAX_MSC 1 +-# else +-# define LZO_CC_SYNTAX_GNUC 1 +-# endif +-#elif defined(__POCC__) && defined(_WIN32) +-# define LZO_CC_PELLESC 1 +-# define LZO_INFO_CC "Pelles C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__POCC__) +-#elif defined(__clang__) && defined(__llvm__) && defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__) +-# if defined(__GNUC_PATCHLEVEL__) +-# define LZO_CC_CLANG_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__) +-# else +-# define LZO_CC_CLANG_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100) +-# endif +-# if defined(__clang_major__) && defined(__clang_minor__) && defined(__clang_patchlevel__) +-# define LZO_CC_CLANG_CLANG (__clang_major__ * 0x10000L + __clang_minor__ * 0x100 + __clang_patchlevel__) +-# else +-# define LZO_CC_CLANG_CLANG 0x020700L +-# endif +-# define LZO_CC_CLANG LZO_CC_CLANG_GNUC +-# define LZO_INFO_CC "clang" +-# define LZO_INFO_CCVER __VERSION__ +-#elif defined(__llvm__) && defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__) +-# if defined(__GNUC_PATCHLEVEL__) +-# define LZO_CC_LLVM_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__) +-# else +-# define LZO_CC_LLVM_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100) +-# endif +-# define LZO_CC_LLVM LZO_CC_LLVM_GNUC +-# define LZO_INFO_CC "llvm-gcc" +-# define LZO_INFO_CCVER __VERSION__ +-#elif defined(__GNUC__) && defined(__VERSION__) +-# if defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__) +-# define LZO_CC_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__) +-# elif defined(__GNUC_MINOR__) +-# define LZO_CC_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100) +-# else +-# define LZO_CC_GNUC (__GNUC__ * 0x10000L) +-# endif +-# define LZO_INFO_CC "gcc" +-# define LZO_INFO_CCVER __VERSION__ +-#elif defined(__ACK__) && defined(_ACK) +-# define LZO_CC_ACK 1 +-# define LZO_INFO_CC "Amsterdam Compiler Kit C" +-# define LZO_INFO_CCVER "unknown" +-#elif defined(__AZTEC_C__) +-# define LZO_CC_AZTECC 1 +-# define LZO_INFO_CC "Aztec C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__AZTEC_C__) +-#elif defined(__CODEGEARC__) +-# define LZO_CC_CODEGEARC 1 +-# define LZO_INFO_CC "CodeGear C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__CODEGEARC__) +-#elif defined(__BORLANDC__) +-# define LZO_CC_BORLANDC 1 +-# define LZO_INFO_CC "Borland C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__BORLANDC__) +-#elif defined(_CRAYC) && defined(_RELEASE) +-# define LZO_CC_CRAYC 1 +-# define LZO_INFO_CC "Cray C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_RELEASE) +-#elif defined(__DMC__) && defined(__SC__) +-# define LZO_CC_DMC 1 +-# define LZO_INFO_CC "Digital Mars C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__DMC__) +-#elif defined(__DECC) +-# define LZO_CC_DECC 1 +-# define LZO_INFO_CC "DEC C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__DECC) +-#elif defined(__HIGHC__) +-# define LZO_CC_HIGHC 1 +-# define LZO_INFO_CC "MetaWare High C" +-# define LZO_INFO_CCVER "unknown" +-#elif defined(__IAR_SYSTEMS_ICC__) +-# define LZO_CC_IARC 1 +-# define LZO_INFO_CC "IAR C" +-# if defined(__VER__) +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__VER__) +-# else +-# define LZO_INFO_CCVER "unknown" +-# endif +-#elif defined(__IBMC__) +-# define LZO_CC_IBMC 1 +-# define LZO_INFO_CC "IBM C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__IBMC__) +-#elif defined(__KEIL__) && defined(__C166__) +-# define LZO_CC_KEILC 1 +-# define LZO_INFO_CC "Keil C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__C166__) +-#elif defined(__LCC__) && defined(_WIN32) && defined(__LCCOPTIMLEVEL) +-# define LZO_CC_LCCWIN32 1 +-# define LZO_INFO_CC "lcc-win32" +-# define LZO_INFO_CCVER "unknown" +-#elif defined(__LCC__) +-# define LZO_CC_LCC 1 +-# define LZO_INFO_CC "lcc" +-# if defined(__LCC_VERSION__) +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__LCC_VERSION__) +-# else +-# define LZO_INFO_CCVER "unknown" +-# endif +-#elif defined(_MSC_VER) +-# define LZO_CC_MSC 1 +-# define LZO_INFO_CC "Microsoft C" +-# if defined(_MSC_FULL_VER) +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_MSC_VER) "." LZO_PP_MACRO_EXPAND(_MSC_FULL_VER) +-# else +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_MSC_VER) +-# endif +-#elif defined(__MWERKS__) +-# define LZO_CC_MWERKS 1 +-# define LZO_INFO_CC "Metrowerks C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__MWERKS__) +-#elif (defined(__NDPC__) || defined(__NDPX__)) && defined(__i386) +-# define LZO_CC_NDPC 1 +-# define LZO_INFO_CC "Microway NDP C" +-# define LZO_INFO_CCVER "unknown" +-#elif defined(__PACIFIC__) +-# define LZO_CC_PACIFICC 1 +-# define LZO_INFO_CC "Pacific C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PACIFIC__) +-#elif defined(__PGI) && (defined(__linux__) || defined(__WIN32__)) +-# define LZO_CC_PGI 1 +-# define LZO_INFO_CC "Portland Group PGI C" +-# define LZO_INFO_CCVER "unknown" +-#elif defined(__PUREC__) && defined(__TOS__) +-# define LZO_CC_PUREC 1 +-# define LZO_INFO_CC "Pure C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PUREC__) +-#elif defined(__SC__) && defined(__ZTC__) +-# define LZO_CC_SYMANTECC 1 +-# define LZO_INFO_CC "Symantec C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SC__) +-#elif defined(__SUNPRO_C) +-# define LZO_INFO_CC "SunPro C" +-# if ((__SUNPRO_C)+0 > 0) +-# define LZO_CC_SUNPROC __SUNPRO_C +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SUNPRO_C) +-# else +-# define LZO_CC_SUNPROC 1 +-# define LZO_INFO_CCVER "unknown" +-# endif +-#elif defined(__SUNPRO_CC) +-# define LZO_INFO_CC "SunPro C" +-# if ((__SUNPRO_CC)+0 > 0) +-# define LZO_CC_SUNPROC __SUNPRO_CC +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SUNPRO_CC) +-# else +-# define LZO_CC_SUNPROC 1 +-# define LZO_INFO_CCVER "unknown" +-# endif +-#elif defined(__TINYC__) +-# define LZO_CC_TINYC 1 +-# define LZO_INFO_CC "Tiny C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TINYC__) +-#elif defined(__TSC__) +-# define LZO_CC_TOPSPEEDC 1 +-# define LZO_INFO_CC "TopSpeed C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TSC__) +-#elif defined(__WATCOMC__) +-# define LZO_CC_WATCOMC 1 +-# define LZO_INFO_CC "Watcom C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__WATCOMC__) +-#elif defined(__TURBOC__) +-# define LZO_CC_TURBOC 1 +-# define LZO_INFO_CC "Turbo C" +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TURBOC__) +-#elif defined(__ZTC__) +-# define LZO_CC_ZORTECHC 1 +-# define LZO_INFO_CC "Zortech C" +-# if (__ZTC__ == 0x310) +-# define LZO_INFO_CCVER "0x310" +-# else +-# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__ZTC__) +-# endif +-#else +-# define LZO_CC_UNKNOWN 1 +-# define LZO_INFO_CC "unknown" +-# define LZO_INFO_CCVER "unknown" +-#endif +-#if 0 && (LZO_CC_MSC && (_MSC_VER >= 1200)) && !defined(_MSC_FULL_VER) +-# error "LZO_CC_MSC: _MSC_FULL_VER is not defined" +-#endif +-#if !defined(__LZO_ARCH_OVERRIDE) && !(LZO_ARCH_GENERIC) && defined(_CRAY) +-# if (UINT_MAX > LZO_0xffffffffL) && defined(_CRAY) +-# if defined(_CRAYMPP) || defined(_CRAYT3D) || defined(_CRAYT3E) +-# define LZO_ARCH_CRAY_MPP 1 +-# elif defined(_CRAY1) +-# define LZO_ARCH_CRAY_PVP 1 +-# endif +-# endif +-#endif +-#if !defined(__LZO_ARCH_OVERRIDE) +-#if (LZO_ARCH_GENERIC) +-# define LZO_INFO_ARCH "generic" +-#elif (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) +-# define LZO_ARCH_I086 1 +-# define LZO_ARCH_IA16 1 +-# define LZO_INFO_ARCH "i086" +-#elif defined(__alpha__) || defined(__alpha) || defined(_M_ALPHA) +-# define LZO_ARCH_ALPHA 1 +-# define LZO_INFO_ARCH "alpha" +-#elif (LZO_ARCH_CRAY_MPP) && (defined(_CRAYT3D) || defined(_CRAYT3E)) +-# define LZO_ARCH_ALPHA 1 +-# define LZO_INFO_ARCH "alpha" +-#elif defined(__amd64__) || defined(__x86_64__) || defined(_M_AMD64) +-# define LZO_ARCH_AMD64 1 +-# define LZO_INFO_ARCH "amd64" +-#elif defined(__thumb__) || (defined(_M_ARM) && defined(_M_THUMB)) +-# define LZO_ARCH_ARM 1 +-# define LZO_ARCH_ARM_THUMB 1 +-# define LZO_INFO_ARCH "arm_thumb" +-#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCARM__) +-# define LZO_ARCH_ARM 1 +-# if defined(__CPU_MODE__) && ((__CPU_MODE__)+0 == 1) +-# define LZO_ARCH_ARM_THUMB 1 +-# define LZO_INFO_ARCH "arm_thumb" +-# elif defined(__CPU_MODE__) && ((__CPU_MODE__)+0 == 2) +-# define LZO_INFO_ARCH "arm" +-# else +-# define LZO_INFO_ARCH "arm" +-# endif +-#elif defined(__arm__) || defined(_M_ARM) +-# define LZO_ARCH_ARM 1 +-# define LZO_INFO_ARCH "arm" +-#elif (UINT_MAX <= LZO_0xffffL) && defined(__AVR__) +-# define LZO_ARCH_AVR 1 +-# define LZO_INFO_ARCH "avr" +-#elif defined(__avr32__) || defined(__AVR32__) +-# define LZO_ARCH_AVR32 1 +-# define LZO_INFO_ARCH "avr32" +-#elif defined(__bfin__) +-# define LZO_ARCH_BLACKFIN 1 +-# define LZO_INFO_ARCH "blackfin" +-#elif (UINT_MAX == LZO_0xffffL) && defined(__C166__) +-# define LZO_ARCH_C166 1 +-# define LZO_INFO_ARCH "c166" +-#elif defined(__cris__) +-# define LZO_ARCH_CRIS 1 +-# define LZO_INFO_ARCH "cris" +-#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCEZ80__) +-# define LZO_ARCH_EZ80 1 +-# define LZO_INFO_ARCH "ez80" +-#elif defined(__H8300__) || defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__) +-# define LZO_ARCH_H8300 1 +-# define LZO_INFO_ARCH "h8300" +-#elif defined(__hppa__) || defined(__hppa) +-# define LZO_ARCH_HPPA 1 +-# define LZO_INFO_ARCH "hppa" +-#elif defined(__386__) || defined(__i386__) || defined(__i386) || defined(_M_IX86) || defined(_M_I386) +-# define LZO_ARCH_I386 1 +-# define LZO_ARCH_IA32 1 +-# define LZO_INFO_ARCH "i386" +-#elif (LZO_CC_ZORTECHC && defined(__I86__)) +-# define LZO_ARCH_I386 1 +-# define LZO_ARCH_IA32 1 +-# define LZO_INFO_ARCH "i386" +-#elif (LZO_OS_DOS32 && LZO_CC_HIGHC) && defined(_I386) +-# define LZO_ARCH_I386 1 +-# define LZO_ARCH_IA32 1 +-# define LZO_INFO_ARCH "i386" +-#elif defined(__ia64__) || defined(__ia64) || defined(_M_IA64) +-# define LZO_ARCH_IA64 1 +-# define LZO_INFO_ARCH "ia64" +-#elif (UINT_MAX == LZO_0xffffL) && defined(__m32c__) +-# define LZO_ARCH_M16C 1 +-# define LZO_INFO_ARCH "m16c" +-#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCM16C__) +-# define LZO_ARCH_M16C 1 +-# define LZO_INFO_ARCH "m16c" +-#elif defined(__m32r__) +-# define LZO_ARCH_M32R 1 +-# define LZO_INFO_ARCH "m32r" +-#elif (LZO_OS_TOS) || defined(__m68k__) || defined(__m68000__) || defined(__mc68000__) || defined(__mc68020__) || defined(_M_M68K) +-# define LZO_ARCH_M68K 1 +-# define LZO_INFO_ARCH "m68k" +-#elif (UINT_MAX == LZO_0xffffL) && defined(__C251__) +-# define LZO_ARCH_MCS251 1 +-# define LZO_INFO_ARCH "mcs251" +-#elif (UINT_MAX == LZO_0xffffL) && defined(__C51__) +-# define LZO_ARCH_MCS51 1 +-# define LZO_INFO_ARCH "mcs51" +-#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICC8051__) +-# define LZO_ARCH_MCS51 1 +-# define LZO_INFO_ARCH "mcs51" +-#elif defined(__mips__) || defined(__mips) || defined(_MIPS_ARCH) || defined(_M_MRX000) +-# define LZO_ARCH_MIPS 1 +-# define LZO_INFO_ARCH "mips" +-#elif (UINT_MAX == LZO_0xffffL) && defined(__MSP430__) +-# define LZO_ARCH_MSP430 1 +-# define LZO_INFO_ARCH "msp430" +-#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICC430__) +-# define LZO_ARCH_MSP430 1 +-# define LZO_INFO_ARCH "msp430" +-#elif defined(__powerpc__) || defined(__powerpc) || defined(__ppc__) || defined(__PPC__) || defined(_M_PPC) || defined(_ARCH_PPC) || defined(_ARCH_PWR) +-# define LZO_ARCH_POWERPC 1 +-# define LZO_INFO_ARCH "powerpc" +-#elif defined(__s390__) || defined(__s390) || defined(__s390x__) || defined(__s390x) +-# define LZO_ARCH_S390 1 +-# define LZO_INFO_ARCH "s390" +-#elif defined(__sh__) || defined(_M_SH) +-# define LZO_ARCH_SH 1 +-# define LZO_INFO_ARCH "sh" +-#elif defined(__sparc__) || defined(__sparc) || defined(__sparcv8) +-# define LZO_ARCH_SPARC 1 +-# define LZO_INFO_ARCH "sparc" +-#elif defined(__SPU__) +-# define LZO_ARCH_SPU 1 +-# define LZO_INFO_ARCH "spu" +-#elif (UINT_MAX == LZO_0xffffL) && defined(__z80) +-# define LZO_ARCH_Z80 1 +-# define LZO_INFO_ARCH "z80" +-#elif (LZO_ARCH_CRAY_PVP) +-# if defined(_CRAYSV1) +-# define LZO_ARCH_CRAY_SV1 1 +-# define LZO_INFO_ARCH "cray_sv1" +-# elif (_ADDR64) +-# define LZO_ARCH_CRAY_T90 1 +-# define LZO_INFO_ARCH "cray_t90" +-# elif (_ADDR32) +-# define LZO_ARCH_CRAY_YMP 1 +-# define LZO_INFO_ARCH "cray_ymp" +-# else +-# define LZO_ARCH_CRAY_XMP 1 +-# define LZO_INFO_ARCH "cray_xmp" +-# endif +-#else +-# define LZO_ARCH_UNKNOWN 1 +-# define LZO_INFO_ARCH "unknown" +-#endif +-#endif +-#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_DOS32 || LZO_OS_OS2) +-# error "FIXME - missing define for CPU architecture" +-#endif +-#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_WIN32) +-# error "FIXME - missing WIN32 define for CPU architecture" +-#endif +-#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_WIN64) +-# error "FIXME - missing WIN64 define for CPU architecture" +-#endif +-#if (LZO_OS_OS216 || LZO_OS_WIN16) +-# define LZO_ARCH_I086PM 1 +-# define LZO_ARCH_IA16PM 1 +-#elif 1 && (LZO_OS_DOS16 && defined(BLX286)) +-# define LZO_ARCH_I086PM 1 +-# define LZO_ARCH_IA16PM 1 +-#elif 1 && (LZO_OS_DOS16 && defined(DOSX286)) +-# define LZO_ARCH_I086PM 1 +-# define LZO_ARCH_IA16PM 1 +-#elif 1 && (LZO_OS_DOS16 && LZO_CC_BORLANDC && defined(__DPMI16__)) +-# define LZO_ARCH_I086PM 1 +-# define LZO_ARCH_IA16PM 1 +-#endif +-#if (LZO_ARCH_ARM_THUMB) && !(LZO_ARCH_ARM) +-# error "this should not happen" +-#endif +-#if (LZO_ARCH_I086PM) && !(LZO_ARCH_I086) +-# error "this should not happen" +-#endif +-#if (LZO_ARCH_I086) +-# if (UINT_MAX != LZO_0xffffL) +-# error "this should not happen" +-# endif +-# if (ULONG_MAX != LZO_0xffffffffL) +-# error "this should not happen" +-# endif +-#endif +-#if (LZO_ARCH_I386) +-# if (UINT_MAX != LZO_0xffffL) && defined(__i386_int16__) +-# error "this should not happen" +-# endif +-# if (UINT_MAX != LZO_0xffffffffL) && !defined(__i386_int16__) +-# error "this should not happen" +-# endif +-# if (ULONG_MAX != LZO_0xffffffffL) +-# error "this should not happen" +-# endif +-#endif +-#if !defined(__LZO_MM_OVERRIDE) +-#if (LZO_ARCH_I086) +-#if (UINT_MAX != LZO_0xffffL) +-# error "this should not happen" +-#endif +-#if defined(__TINY__) || defined(M_I86TM) || defined(_M_I86TM) +-# define LZO_MM_TINY 1 +-#elif defined(__HUGE__) || defined(_HUGE_) || defined(M_I86HM) || defined(_M_I86HM) +-# define LZO_MM_HUGE 1 +-#elif defined(__SMALL__) || defined(M_I86SM) || defined(_M_I86SM) || defined(SMALL_MODEL) +-# define LZO_MM_SMALL 1 +-#elif defined(__MEDIUM__) || defined(M_I86MM) || defined(_M_I86MM) +-# define LZO_MM_MEDIUM 1 +-#elif defined(__COMPACT__) || defined(M_I86CM) || defined(_M_I86CM) +-# define LZO_MM_COMPACT 1 +-#elif defined(__LARGE__) || defined(M_I86LM) || defined(_M_I86LM) || defined(LARGE_MODEL) +-# define LZO_MM_LARGE 1 +-#elif (LZO_CC_AZTECC) +-# if defined(_LARGE_CODE) && defined(_LARGE_DATA) +-# define LZO_MM_LARGE 1 +-# elif defined(_LARGE_CODE) +-# define LZO_MM_MEDIUM 1 +-# elif defined(_LARGE_DATA) +-# define LZO_MM_COMPACT 1 +-# else +-# define LZO_MM_SMALL 1 +-# endif +-#elif (LZO_CC_ZORTECHC && defined(__VCM__)) +-# define LZO_MM_LARGE 1 +-#else +-# error "unknown memory model" +-#endif +-#if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) +-#define LZO_HAVE_MM_HUGE_PTR 1 +-#define LZO_HAVE_MM_HUGE_ARRAY 1 +-#if (LZO_MM_TINY) +-# undef LZO_HAVE_MM_HUGE_ARRAY +-#endif +-#if (LZO_CC_AZTECC || LZO_CC_PACIFICC || LZO_CC_ZORTECHC) +-# undef LZO_HAVE_MM_HUGE_PTR +-# undef LZO_HAVE_MM_HUGE_ARRAY +-#elif (LZO_CC_DMC || LZO_CC_SYMANTECC) +-# undef LZO_HAVE_MM_HUGE_ARRAY +-#elif (LZO_CC_MSC && defined(_QC)) +-# undef LZO_HAVE_MM_HUGE_ARRAY +-# if (_MSC_VER < 600) +-# undef LZO_HAVE_MM_HUGE_PTR +-# endif +-#elif (LZO_CC_TURBOC && (__TURBOC__ < 0x0295)) +-# undef LZO_HAVE_MM_HUGE_ARRAY +-#endif +-#if (LZO_ARCH_I086PM) && !(LZO_HAVE_MM_HUGE_PTR) +-# if (LZO_OS_DOS16) +-# error "this should not happen" +-# elif (LZO_CC_ZORTECHC) +-# else +-# error "this should not happen" +-# endif +-#endif +-#ifdef __cplusplus +-extern "C" { +-#endif +-#if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0200)) +- extern void __near __cdecl _AHSHIFT(void); +-# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) +-#elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) +- extern void __near __cdecl _AHSHIFT(void); +-# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) +-#elif (LZO_CC_MSC || LZO_CC_TOPSPEEDC) +- extern void __near __cdecl _AHSHIFT(void); +-# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) +-#elif (LZO_CC_TURBOC && (__TURBOC__ >= 0x0295)) +- extern void __near __cdecl _AHSHIFT(void); +-# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) +-#elif ((LZO_CC_AZTECC || LZO_CC_PACIFICC || LZO_CC_TURBOC) && LZO_OS_DOS16) +-# define LZO_MM_AHSHIFT 12 +-#elif (LZO_CC_WATCOMC) +- extern unsigned char _HShift; +-# define LZO_MM_AHSHIFT ((unsigned) _HShift) +-#else +-# error "FIXME - implement LZO_MM_AHSHIFT" +-#endif +-#ifdef __cplusplus +-} +-#endif +-#endif +-#elif (LZO_ARCH_C166) +-#if !defined(__MODEL__) +-# error "FIXME - C166 __MODEL__" +-#elif ((__MODEL__) == 0) +-# define LZO_MM_SMALL 1 +-#elif ((__MODEL__) == 1) +-# define LZO_MM_SMALL 1 +-#elif ((__MODEL__) == 2) +-# define LZO_MM_LARGE 1 +-#elif ((__MODEL__) == 3) +-# define LZO_MM_TINY 1 +-#elif ((__MODEL__) == 4) +-# define LZO_MM_XTINY 1 +-#elif ((__MODEL__) == 5) +-# define LZO_MM_XSMALL 1 +-#else +-# error "FIXME - C166 __MODEL__" +-#endif +-#elif (LZO_ARCH_MCS251) +-#if !defined(__MODEL__) +-# error "FIXME - MCS251 __MODEL__" +-#elif ((__MODEL__) == 0) +-# define LZO_MM_SMALL 1 +-#elif ((__MODEL__) == 2) +-# define LZO_MM_LARGE 1 +-#elif ((__MODEL__) == 3) +-# define LZO_MM_TINY 1 +-#elif ((__MODEL__) == 4) +-# define LZO_MM_XTINY 1 +-#elif ((__MODEL__) == 5) +-# define LZO_MM_XSMALL 1 +-#else +-# error "FIXME - MCS251 __MODEL__" +-#endif +-#elif (LZO_ARCH_MCS51) +-#if !defined(__MODEL__) +-# error "FIXME - MCS51 __MODEL__" +-#elif ((__MODEL__) == 1) +-# define LZO_MM_SMALL 1 +-#elif ((__MODEL__) == 2) +-# define LZO_MM_LARGE 1 +-#elif ((__MODEL__) == 3) +-# define LZO_MM_TINY 1 +-#elif ((__MODEL__) == 4) +-# define LZO_MM_XTINY 1 +-#elif ((__MODEL__) == 5) +-# define LZO_MM_XSMALL 1 +-#else +-# error "FIXME - MCS51 __MODEL__" +-#endif +-#elif (LZO_ARCH_CRAY_PVP) +-# define LZO_MM_PVP 1 +-#else +-# define LZO_MM_FLAT 1 +-#endif +-#if (LZO_MM_COMPACT) +-# define LZO_INFO_MM "compact" +-#elif (LZO_MM_FLAT) +-# define LZO_INFO_MM "flat" +-#elif (LZO_MM_HUGE) +-# define LZO_INFO_MM "huge" +-#elif (LZO_MM_LARGE) +-# define LZO_INFO_MM "large" +-#elif (LZO_MM_MEDIUM) +-# define LZO_INFO_MM "medium" +-#elif (LZO_MM_PVP) +-# define LZO_INFO_MM "pvp" +-#elif (LZO_MM_SMALL) +-# define LZO_INFO_MM "small" +-#elif (LZO_MM_TINY) +-# define LZO_INFO_MM "tiny" +-#else +-# error "unknown memory model" +-#endif +-#endif +-#if defined(SIZEOF_SHORT) +-# define LZO_SIZEOF_SHORT (SIZEOF_SHORT) +-#endif +-#if defined(SIZEOF_INT) +-# define LZO_SIZEOF_INT (SIZEOF_INT) +-#endif +-#if defined(SIZEOF_LONG) +-# define LZO_SIZEOF_LONG (SIZEOF_LONG) +-#endif +-#if defined(SIZEOF_LONG_LONG) +-# define LZO_SIZEOF_LONG_LONG (SIZEOF_LONG_LONG) +-#endif +-#if defined(SIZEOF___INT16) +-# define LZO_SIZEOF___INT16 (SIZEOF___INT16) +-#endif +-#if defined(SIZEOF___INT32) +-# define LZO_SIZEOF___INT32 (SIZEOF___INT32) +-#endif +-#if defined(SIZEOF___INT64) +-# define LZO_SIZEOF___INT64 (SIZEOF___INT64) +-#endif +-#if defined(SIZEOF_VOID_P) +-# define LZO_SIZEOF_VOID_P (SIZEOF_VOID_P) +-#endif +-#if defined(SIZEOF_SIZE_T) +-# define LZO_SIZEOF_SIZE_T (SIZEOF_SIZE_T) +-#endif +-#if defined(SIZEOF_PTRDIFF_T) +-# define LZO_SIZEOF_PTRDIFF_T (SIZEOF_PTRDIFF_T) +-#endif +-#define __LZO_LSR(x,b) (((x)+0ul) >> (b)) +-#if !defined(LZO_SIZEOF_SHORT) +-# if (LZO_ARCH_CRAY_PVP) +-# define LZO_SIZEOF_SHORT 8 +-# elif (USHRT_MAX == LZO_0xffffL) +-# define LZO_SIZEOF_SHORT 2 +-# elif (__LZO_LSR(USHRT_MAX,7) == 1) +-# define LZO_SIZEOF_SHORT 1 +-# elif (__LZO_LSR(USHRT_MAX,15) == 1) +-# define LZO_SIZEOF_SHORT 2 +-# elif (__LZO_LSR(USHRT_MAX,31) == 1) +-# define LZO_SIZEOF_SHORT 4 +-# elif (__LZO_LSR(USHRT_MAX,63) == 1) +-# define LZO_SIZEOF_SHORT 8 +-# elif (__LZO_LSR(USHRT_MAX,127) == 1) +-# define LZO_SIZEOF_SHORT 16 +-# else +-# error "LZO_SIZEOF_SHORT" +-# endif +-#endif +-#if !defined(LZO_SIZEOF_INT) +-# if (LZO_ARCH_CRAY_PVP) +-# define LZO_SIZEOF_INT 8 +-# elif (UINT_MAX == LZO_0xffffL) +-# define LZO_SIZEOF_INT 2 +-# elif (UINT_MAX == LZO_0xffffffffL) +-# define LZO_SIZEOF_INT 4 +-# elif (__LZO_LSR(UINT_MAX,7) == 1) +-# define LZO_SIZEOF_INT 1 +-# elif (__LZO_LSR(UINT_MAX,15) == 1) +-# define LZO_SIZEOF_INT 2 +-# elif (__LZO_LSR(UINT_MAX,31) == 1) +-# define LZO_SIZEOF_INT 4 +-# elif (__LZO_LSR(UINT_MAX,63) == 1) +-# define LZO_SIZEOF_INT 8 +-# elif (__LZO_LSR(UINT_MAX,127) == 1) +-# define LZO_SIZEOF_INT 16 +-# else +-# error "LZO_SIZEOF_INT" +-# endif +-#endif +-#if !defined(LZO_SIZEOF_LONG) +-# if (ULONG_MAX == LZO_0xffffffffL) +-# define LZO_SIZEOF_LONG 4 +-# elif (__LZO_LSR(ULONG_MAX,7) == 1) +-# define LZO_SIZEOF_LONG 1 +-# elif (__LZO_LSR(ULONG_MAX,15) == 1) +-# define LZO_SIZEOF_LONG 2 +-# elif (__LZO_LSR(ULONG_MAX,31) == 1) +-# define LZO_SIZEOF_LONG 4 +-# elif (__LZO_LSR(ULONG_MAX,63) == 1) +-# define LZO_SIZEOF_LONG 8 +-# elif (__LZO_LSR(ULONG_MAX,127) == 1) +-# define LZO_SIZEOF_LONG 16 +-# else +-# error "LZO_SIZEOF_LONG" +-# endif +-#endif +-#if !defined(LZO_SIZEOF_LONG_LONG) && !defined(LZO_SIZEOF___INT64) +-#if (LZO_SIZEOF_LONG > 0 && LZO_SIZEOF_LONG < 8) +-# if defined(__LONG_MAX__) && defined(__LONG_LONG_MAX__) +-# if (LZO_CC_GNUC >= 0x030300ul) +-# if ((__LONG_MAX__)+0 == (__LONG_LONG_MAX__)+0) +-# define LZO_SIZEOF_LONG_LONG LZO_SIZEOF_LONG +-# elif (__LZO_LSR(__LONG_LONG_MAX__,30) == 1) +-# define LZO_SIZEOF_LONG_LONG 4 +-# endif +-# endif +-# endif +-#endif +-#endif +-#if !defined(LZO_SIZEOF_LONG_LONG) && !defined(LZO_SIZEOF___INT64) +-#if (LZO_SIZEOF_LONG > 0 && LZO_SIZEOF_LONG < 8) +-#if (LZO_ARCH_I086 && LZO_CC_DMC) +-#elif (LZO_CC_CILLY) && defined(__GNUC__) +-# define LZO_SIZEOF_LONG_LONG 8 +-#elif (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) +-# define LZO_SIZEOF_LONG_LONG 8 +-#elif ((LZO_OS_WIN32 || LZO_OS_WIN64 || defined(_WIN32)) && LZO_CC_MSC && (_MSC_VER >= 1400)) +-# define LZO_SIZEOF_LONG_LONG 8 +-#elif (LZO_OS_WIN64 || defined(_WIN64)) +-# define LZO_SIZEOF___INT64 8 +-#elif (LZO_ARCH_I386 && (LZO_CC_DMC)) +-# define LZO_SIZEOF_LONG_LONG 8 +-#elif (LZO_ARCH_I386 && (LZO_CC_SYMANTECC && (__SC__ >= 0x700))) +-# define LZO_SIZEOF_LONG_LONG 8 +-#elif (LZO_ARCH_I386 && (LZO_CC_INTELC && defined(__linux__))) +-# define LZO_SIZEOF_LONG_LONG 8 +-#elif (LZO_ARCH_I386 && (LZO_CC_MWERKS || LZO_CC_PELLESC || LZO_CC_PGI || LZO_CC_SUNPROC)) +-# define LZO_SIZEOF_LONG_LONG 8 +-#elif (LZO_ARCH_I386 && (LZO_CC_INTELC || LZO_CC_MSC)) +-# define LZO_SIZEOF___INT64 8 +-#elif ((LZO_OS_WIN32 || defined(_WIN32)) && (LZO_CC_MSC)) +-# define LZO_SIZEOF___INT64 8 +-#elif (LZO_ARCH_I386 && (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0520))) +-# define LZO_SIZEOF___INT64 8 +-#elif (LZO_ARCH_I386 && (LZO_CC_WATCOMC && (__WATCOMC__ >= 1100))) +-# define LZO_SIZEOF___INT64 8 +-#elif (LZO_CC_WATCOMC && defined(_INTEGRAL_MAX_BITS) && (_INTEGRAL_MAX_BITS == 64)) +-# define LZO_SIZEOF___INT64 8 +-#elif (LZO_OS_OS400 || defined(__OS400__)) && defined(__LLP64_IFC__) +-# define LZO_SIZEOF_LONG_LONG 8 +-#elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64) +-# define LZO_SIZEOF_LONG_LONG 8 +-#elif (LZO_CC_SDCC) && (LZO_SIZEOF_INT == 2) +-#elif 1 && defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) +-# define LZO_SIZEOF_LONG_LONG 8 +-#endif +-#endif +-#endif +-#if defined(__cplusplus) && (LZO_CC_GNUC) +-# if (LZO_CC_GNUC < 0x020800ul) +-# undef LZO_SIZEOF_LONG_LONG +-# endif +-#endif +-#if (LZO_CFG_NO_LONG_LONG) || defined(__NO_LONG_LONG) +-# undef LZO_SIZEOF_LONG_LONG +-#endif +-#if !defined(LZO_SIZEOF_VOID_P) +-#if (LZO_ARCH_I086) +-# define __LZO_WORDSIZE 2 +-# if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM) +-# define LZO_SIZEOF_VOID_P 2 +-# elif (LZO_MM_COMPACT || LZO_MM_LARGE || LZO_MM_HUGE) +-# define LZO_SIZEOF_VOID_P 4 +-# else +-# error "LZO_MM" +-# endif +-#elif (LZO_ARCH_AVR || LZO_ARCH_Z80) +-# define __LZO_WORDSIZE 1 +-# define LZO_SIZEOF_VOID_P 2 +-#elif (LZO_ARCH_C166 || LZO_ARCH_MCS51 || LZO_ARCH_MCS251 || LZO_ARCH_MSP430) +-# define LZO_SIZEOF_VOID_P 2 +-#elif (LZO_ARCH_H8300) +-# if defined(__NORMAL_MODE__) +-# define __LZO_WORDSIZE 4 +-# define LZO_SIZEOF_VOID_P 2 +-# elif defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__) +-# define __LZO_WORDSIZE 4 +-# define LZO_SIZEOF_VOID_P 4 +-# else +-# define __LZO_WORDSIZE 2 +-# define LZO_SIZEOF_VOID_P 2 +-# endif +-# if (LZO_CC_GNUC && (LZO_CC_GNUC < 0x040000ul)) && (LZO_SIZEOF_INT == 4) +-# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_INT +-# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_INT +-# endif +-#elif (LZO_ARCH_M16C) +-# define __LZO_WORDSIZE 2 +-# if defined(__m32c_cpu__) || defined(__m32cm_cpu__) +-# define LZO_SIZEOF_VOID_P 4 +-# else +-# define LZO_SIZEOF_VOID_P 2 +-# endif +-#elif (LZO_SIZEOF_LONG == 8) && ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__)) +-# define __LZO_WORDSIZE 8 +-# define LZO_SIZEOF_VOID_P 4 +-#elif defined(__LLP64__) || defined(__LLP64) || defined(_LLP64) || defined(_WIN64) +-# define __LZO_WORDSIZE 8 +-# define LZO_SIZEOF_VOID_P 8 +-#elif (LZO_OS_OS400 || defined(__OS400__)) && defined(__LLP64_IFC__) +-# define LZO_SIZEOF_VOID_P LZO_SIZEOF_LONG +-# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG +-# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG +-#elif (LZO_OS_OS400 || defined(__OS400__)) +-# define __LZO_WORDSIZE LZO_SIZEOF_LONG +-# define LZO_SIZEOF_VOID_P 16 +-# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG +-# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG +-#elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64) +-# define LZO_SIZEOF_VOID_P 8 +-# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG +-# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG +-#elif (LZO_ARCH_SPU) +-# if 0 +-# define __LZO_WORDSIZE 16 +-# endif +-# define LZO_SIZEOF_VOID_P 4 +-#else +-# define LZO_SIZEOF_VOID_P LZO_SIZEOF_LONG +-#endif +-#endif +-#if !defined(LZO_WORDSIZE) +-# if defined(__LZO_WORDSIZE) +-# define LZO_WORDSIZE __LZO_WORDSIZE +-# else +-# define LZO_WORDSIZE LZO_SIZEOF_VOID_P +-# endif +-#endif +-#if !defined(LZO_SIZEOF_SIZE_T) +-#if (LZO_ARCH_I086 || LZO_ARCH_M16C) +-# define LZO_SIZEOF_SIZE_T 2 +-#else +-# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_VOID_P +-#endif +-#endif +-#if !defined(LZO_SIZEOF_PTRDIFF_T) +-#if (LZO_ARCH_I086) +-# if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM || LZO_MM_HUGE) +-# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_VOID_P +-# elif (LZO_MM_COMPACT || LZO_MM_LARGE) +-# if (LZO_CC_BORLANDC || LZO_CC_TURBOC) +-# define LZO_SIZEOF_PTRDIFF_T 4 +-# else +-# define LZO_SIZEOF_PTRDIFF_T 2 +-# endif +-# else +-# error "LZO_MM" +-# endif +-#else +-# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_SIZE_T +-#endif +-#endif +-#if (LZO_ABI_NEUTRAL_ENDIAN) +-# undef LZO_ABI_BIG_ENDIAN +-# undef LZO_ABI_LITTLE_ENDIAN +-#elif !(LZO_ABI_BIG_ENDIAN) && !(LZO_ABI_LITTLE_ENDIAN) +-#if (LZO_ARCH_ALPHA) && (LZO_ARCH_CRAY_MPP) +-# define LZO_ABI_BIG_ENDIAN 1 +-#elif (LZO_ARCH_IA64) && (LZO_OS_POSIX_LINUX || LZO_OS_WIN64) +-# define LZO_ABI_LITTLE_ENDIAN 1 +-#elif (LZO_ARCH_ALPHA || LZO_ARCH_AMD64 || LZO_ARCH_BLACKFIN || LZO_ARCH_CRIS || LZO_ARCH_I086 || LZO_ARCH_I386 || LZO_ARCH_MSP430) +-# define LZO_ABI_LITTLE_ENDIAN 1 +-#elif (LZO_ARCH_AVR32 || LZO_ARCH_M68K || LZO_ARCH_S390) +-# define LZO_ABI_BIG_ENDIAN 1 +-#elif 1 && defined(__IAR_SYSTEMS_ICC__) && defined(__LITTLE_ENDIAN__) +-# if (__LITTLE_ENDIAN__ == 1) +-# define LZO_ABI_LITTLE_ENDIAN 1 +-# else +-# define LZO_ABI_BIG_ENDIAN 1 +-# endif +-#elif 1 && defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__) +-# define LZO_ABI_BIG_ENDIAN 1 +-#elif 1 && defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__) +-# define LZO_ABI_LITTLE_ENDIAN 1 +-#elif 1 && (LZO_ARCH_ARM) && defined(__ARMEB__) && !defined(__ARMEL__) +-# define LZO_ABI_BIG_ENDIAN 1 +-#elif 1 && (LZO_ARCH_ARM) && defined(__ARMEL__) && !defined(__ARMEB__) +-# define LZO_ABI_LITTLE_ENDIAN 1 +-#elif 1 && (LZO_ARCH_MIPS) && defined(__MIPSEB__) && !defined(__MIPSEL__) +-# define LZO_ABI_BIG_ENDIAN 1 +-#elif 1 && (LZO_ARCH_MIPS) && defined(__MIPSEL__) && !defined(__MIPSEB__) +-# define LZO_ABI_LITTLE_ENDIAN 1 +-#endif +-#endif +-#if (LZO_ABI_BIG_ENDIAN) && (LZO_ABI_LITTLE_ENDIAN) +-# error "this should not happen" +-#endif +-#if (LZO_ABI_BIG_ENDIAN) +-# define LZO_INFO_ABI_ENDIAN "be" +-#elif (LZO_ABI_LITTLE_ENDIAN) +-# define LZO_INFO_ABI_ENDIAN "le" +-#elif (LZO_ABI_NEUTRAL_ENDIAN) +-# define LZO_INFO_ABI_ENDIAN "neutral" +-#endif +-#if (LZO_SIZEOF_INT == 1 && LZO_SIZEOF_LONG == 2 && LZO_SIZEOF_VOID_P == 2) +-# define LZO_ABI_I8LP16 1 +-# define LZO_INFO_ABI_PM "i8lp16" +-#elif (LZO_SIZEOF_INT == 2 && LZO_SIZEOF_LONG == 2 && LZO_SIZEOF_VOID_P == 2) +-# define LZO_ABI_ILP16 1 +-# define LZO_INFO_ABI_PM "ilp16" +-#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 4) +-# define LZO_ABI_ILP32 1 +-# define LZO_INFO_ABI_PM "ilp32" +-#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 8 && LZO_SIZEOF_SIZE_T == 8) +-# define LZO_ABI_LLP64 1 +-# define LZO_INFO_ABI_PM "llp64" +-#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 8) +-# define LZO_ABI_LP64 1 +-# define LZO_INFO_ABI_PM "lp64" +-#elif (LZO_SIZEOF_INT == 8 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 8) +-# define LZO_ABI_ILP64 1 +-# define LZO_INFO_ABI_PM "ilp64" +-#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 4) +-# define LZO_ABI_IP32L64 1 +-# define LZO_INFO_ABI_PM "ip32l64" +-#endif +-#if !defined(__LZO_LIBC_OVERRIDE) +-#if (LZO_LIBC_NAKED) +-# define LZO_INFO_LIBC "naked" +-#elif (LZO_LIBC_FREESTANDING) +-# define LZO_INFO_LIBC "freestanding" +-#elif (LZO_LIBC_MOSTLY_FREESTANDING) +-# define LZO_INFO_LIBC "mfreestanding" +-#elif (LZO_LIBC_ISOC90) +-# define LZO_INFO_LIBC "isoc90" +-#elif (LZO_LIBC_ISOC99) +-# define LZO_INFO_LIBC "isoc99" +-#elif defined(__dietlibc__) +-# define LZO_LIBC_DIETLIBC 1 +-# define LZO_INFO_LIBC "dietlibc" +-#elif defined(_NEWLIB_VERSION) +-# define LZO_LIBC_NEWLIB 1 +-# define LZO_INFO_LIBC "newlib" +-#elif defined(__UCLIBC__) && defined(__UCLIBC_MAJOR__) && defined(__UCLIBC_MINOR__) +-# if defined(__UCLIBC_SUBLEVEL__) +-# define LZO_LIBC_UCLIBC (__UCLIBC_MAJOR__ * 0x10000L + __UCLIBC_MINOR__ * 0x100 + __UCLIBC_SUBLEVEL__) +-# else +-# define LZO_LIBC_UCLIBC 0x00090bL +-# endif +-# define LZO_INFO_LIBC "uclibc" +-#elif defined(__GLIBC__) && defined(__GLIBC_MINOR__) +-# define LZO_LIBC_GLIBC (__GLIBC__ * 0x10000L + __GLIBC_MINOR__ * 0x100) +-# define LZO_INFO_LIBC "glibc" +-#elif (LZO_CC_MWERKS) && defined(__MSL__) +-# define LZO_LIBC_MSL __MSL__ +-# define LZO_INFO_LIBC "msl" +-#elif 1 && defined(__IAR_SYSTEMS_ICC__) +-# define LZO_LIBC_ISOC90 1 +-# define LZO_INFO_LIBC "isoc90" +-#else +-# define LZO_LIBC_DEFAULT 1 +-# define LZO_INFO_LIBC "default" +-#endif +-#endif +-#if !defined(__lzo_gnuc_extension__) +-#if (LZO_CC_GNUC >= 0x020800ul) +-# define __lzo_gnuc_extension__ __extension__ +-#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) +-# define __lzo_gnuc_extension__ __extension__ +-#else +-# define __lzo_gnuc_extension__ /*empty*/ +-#endif +-#endif +-#if !defined(__lzo_ua_volatile) +-# define __lzo_ua_volatile volatile +-#endif +-#if !defined(__lzo_alignof) +-#if (LZO_CC_CILLY || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI) +-# define __lzo_alignof(e) __alignof__(e) +-#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 700)) +-# define __lzo_alignof(e) __alignof__(e) +-#elif (LZO_CC_MSC && (_MSC_VER >= 1300)) +-# define __lzo_alignof(e) __alignof(e) +-#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC >= 0x5100)) +-# define __lzo_alignof(e) __alignof__(e) +-#endif +-#endif +-#if defined(__lzo_alignof) +-# define __lzo_HAVE_alignof 1 +-#endif +-#if !defined(__lzo_constructor) +-#if (LZO_CC_GNUC >= 0x030400ul) +-# define __lzo_constructor __attribute__((__constructor__,__used__)) +-#elif (LZO_CC_GNUC >= 0x020700ul) +-# define __lzo_constructor __attribute__((__constructor__)) +-#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) +-# define __lzo_constructor __attribute__((__constructor__)) +-#endif +-#endif +-#if defined(__lzo_constructor) +-# define __lzo_HAVE_constructor 1 +-#endif +-#if !defined(__lzo_destructor) +-#if (LZO_CC_GNUC >= 0x030400ul) +-# define __lzo_destructor __attribute__((__destructor__,__used__)) +-#elif (LZO_CC_GNUC >= 0x020700ul) +-# define __lzo_destructor __attribute__((__destructor__)) +-#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) +-# define __lzo_destructor __attribute__((__destructor__)) +-#endif +-#endif +-#if defined(__lzo_destructor) +-# define __lzo_HAVE_destructor 1 +-#endif +-#if (__lzo_HAVE_destructor) && !(__lzo_HAVE_constructor) +-# error "this should not happen" +-#endif +-#if !defined(__lzo_inline) +-#if (LZO_CC_TURBOC && (__TURBOC__ <= 0x0295)) +-#elif defined(__cplusplus) +-# define __lzo_inline inline +-#elif (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0550)) +-# define __lzo_inline __inline +-#elif (LZO_CC_CILLY || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI) +-# define __lzo_inline __inline__ +-#elif (LZO_CC_DMC) +-# define __lzo_inline __inline +-#elif (LZO_CC_INTELC) +-# define __lzo_inline __inline +-#elif (LZO_CC_MWERKS && (__MWERKS__ >= 0x2405)) +-# define __lzo_inline __inline +-#elif (LZO_CC_MSC && (_MSC_VER >= 900)) +-# define __lzo_inline __inline +-#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC >= 0x5100)) +-# define __lzo_inline __inline__ +-#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) +-# define __lzo_inline inline +-#endif +-#endif +-#if defined(__lzo_inline) +-# define __lzo_HAVE_inline 1 +-#else +-# define __lzo_inline /*empty*/ +-#endif +-#if !defined(__lzo_forceinline) +-#if (LZO_CC_GNUC >= 0x030200ul) +-# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) +-#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 450) && LZO_CC_SYNTAX_MSC) +-# define __lzo_forceinline __forceinline +-#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800) && LZO_CC_SYNTAX_GNUC) +-# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) +-#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) +-# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) +-#elif (LZO_CC_MSC && (_MSC_VER >= 1200)) +-# define __lzo_forceinline __forceinline +-#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC >= 0x5100)) +-# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) +-#endif +-#endif +-#if defined(__lzo_forceinline) +-# define __lzo_HAVE_forceinline 1 +-#else +-# define __lzo_forceinline /*empty*/ +-#endif +-#if !defined(__lzo_noinline) +-#if 1 && (LZO_ARCH_I386) && (LZO_CC_GNUC >= 0x040000ul) && (LZO_CC_GNUC < 0x040003ul) +-# define __lzo_noinline __attribute__((__noinline__,__used__)) +-#elif (LZO_CC_GNUC >= 0x030200ul) +-# define __lzo_noinline __attribute__((__noinline__)) +-#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 600) && LZO_CC_SYNTAX_MSC) +-# define __lzo_noinline __declspec(noinline) +-#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800) && LZO_CC_SYNTAX_GNUC) +-# define __lzo_noinline __attribute__((__noinline__)) +-#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) +-# define __lzo_noinline __attribute__((__noinline__)) +-#elif (LZO_CC_MSC && (_MSC_VER >= 1300)) +-# define __lzo_noinline __declspec(noinline) +-#elif (LZO_CC_MWERKS && (__MWERKS__ >= 0x3200) && (LZO_OS_WIN32 || LZO_OS_WIN64)) +-# if defined(__cplusplus) +-# else +-# define __lzo_noinline __declspec(noinline) +-# endif +-#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC >= 0x5100)) +-# define __lzo_noinline __attribute__((__noinline__)) +-#endif +-#endif +-#if defined(__lzo_noinline) +-# define __lzo_HAVE_noinline 1 +-#else +-# define __lzo_noinline /*empty*/ +-#endif +-#if (__lzo_HAVE_forceinline || __lzo_HAVE_noinline) && !(__lzo_HAVE_inline) +-# error "this should not happen" +-#endif +-#if !defined(__lzo_noreturn) +-#if (LZO_CC_GNUC >= 0x020700ul) +-# define __lzo_noreturn __attribute__((__noreturn__)) +-#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 450) && LZO_CC_SYNTAX_MSC) +-# define __lzo_noreturn __declspec(noreturn) +-#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 600) && LZO_CC_SYNTAX_GNUC) +-# define __lzo_noreturn __attribute__((__noreturn__)) +-#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) +-# define __lzo_noreturn __attribute__((__noreturn__)) +-#elif (LZO_CC_MSC && (_MSC_VER >= 1200)) +-# define __lzo_noreturn __declspec(noreturn) +-#endif +-#endif +-#if defined(__lzo_noreturn) +-# define __lzo_HAVE_noreturn 1 +-#else +-# define __lzo_noreturn /*empty*/ +-#endif +-#if !defined(__lzo_nothrow) +-#if (LZO_CC_GNUC >= 0x030300ul) +-# define __lzo_nothrow __attribute__((__nothrow__)) +-#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 450) && LZO_CC_SYNTAX_MSC) && defined(__cplusplus) +-# define __lzo_nothrow __declspec(nothrow) +-#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 900) && LZO_CC_SYNTAX_GNUC) +-# define __lzo_nothrow __attribute__((__nothrow__)) +-#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) +-# define __lzo_nothrow __attribute__((__nothrow__)) +-#elif (LZO_CC_MSC && (_MSC_VER >= 1200)) && defined(__cplusplus) +-# define __lzo_nothrow __declspec(nothrow) +-#endif +-#endif +-#if defined(__lzo_nothrow) +-# define __lzo_HAVE_nothrow 1 +-#else +-# define __lzo_nothrow /*empty*/ +-#endif +-#if !defined(__lzo_restrict) +-#if (LZO_CC_GNUC >= 0x030400ul) +-# define __lzo_restrict __restrict__ +-#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 600) && LZO_CC_SYNTAX_GNUC) +-# define __lzo_restrict __restrict__ +-#elif (LZO_CC_CLANG || LZO_CC_LLVM) +-# define __lzo_restrict __restrict__ +-#elif (LZO_CC_MSC && (_MSC_VER >= 1400)) +-# define __lzo_restrict __restrict +-#endif +-#endif +-#if defined(__lzo_restrict) +-# define __lzo_HAVE_restrict 1 +-#else +-# define __lzo_restrict /*empty*/ +-#endif +-#if !defined(__lzo_likely) && !defined(__lzo_unlikely) +-#if (LZO_CC_GNUC >= 0x030200ul) +-# define __lzo_likely(e) (__builtin_expect(!!(e),1)) +-# define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) +-#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800)) +-# define __lzo_likely(e) (__builtin_expect(!!(e),1)) +-# define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) +-#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) +-# define __lzo_likely(e) (__builtin_expect(!!(e),1)) +-# define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) +-#endif +-#endif +-#if defined(__lzo_likely) +-# define __lzo_HAVE_likely 1 +-#else +-# define __lzo_likely(e) (e) +-#endif +-#if defined(__lzo_unlikely) +-# define __lzo_HAVE_unlikely 1 +-#else +-# define __lzo_unlikely(e) (e) +-#endif +-#if !defined(LZO_UNUSED) +-# if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0600)) +-# define LZO_UNUSED(var) ((void) &var) +-# elif (LZO_CC_BORLANDC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PELLESC || LZO_CC_TURBOC) +-# define LZO_UNUSED(var) if (&var) ; else +-# elif (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) +-# define LZO_UNUSED(var) ((void) var) +-# elif (LZO_CC_MSC && (_MSC_VER < 900)) +-# define LZO_UNUSED(var) if (&var) ; else +-# elif (LZO_CC_KEILC) +-# define LZO_UNUSED(var) {extern int __lzo_unused[1-2*!(sizeof(var)>0)];} +-# elif (LZO_CC_PACIFICC) +-# define LZO_UNUSED(var) ((void) sizeof(var)) +-# elif (LZO_CC_WATCOMC) && defined(__cplusplus) +-# define LZO_UNUSED(var) ((void) var) +-# else +-# define LZO_UNUSED(var) ((void) &var) +-# endif +-#endif +-#if !defined(LZO_UNUSED_FUNC) +-# if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0600)) +-# define LZO_UNUSED_FUNC(func) ((void) func) +-# elif (LZO_CC_BORLANDC || LZO_CC_NDPC || LZO_CC_TURBOC) +-# define LZO_UNUSED_FUNC(func) if (func) ; else +-# elif (LZO_CC_CLANG || LZO_CC_LLVM) +-# define LZO_UNUSED_FUNC(func) ((void) &func) +-# elif (LZO_CC_MSC && (_MSC_VER < 900)) +-# define LZO_UNUSED_FUNC(func) if (func) ; else +-# elif (LZO_CC_MSC) +-# define LZO_UNUSED_FUNC(func) ((void) &func) +-# elif (LZO_CC_KEILC || LZO_CC_PELLESC) +-# define LZO_UNUSED_FUNC(func) {extern int __lzo_unused[1-2*!(sizeof((int)func)>0)];} +-# else +-# define LZO_UNUSED_FUNC(func) ((void) func) +-# endif +-#endif +-#if !defined(LZO_UNUSED_LABEL) +-# if (LZO_CC_WATCOMC) && defined(__cplusplus) +-# define LZO_UNUSED_LABEL(l) switch(0) case 1:goto l +-# elif (LZO_CC_CLANG || LZO_CC_INTELC || LZO_CC_WATCOMC) +-# define LZO_UNUSED_LABEL(l) if (0) goto l +-# else +-# define LZO_UNUSED_LABEL(l) switch(0) case 1:goto l +-# endif +-#endif +-#if !defined(LZO_DEFINE_UNINITIALIZED_VAR) +-# if 0 +-# define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var +-# elif 0 && (LZO_CC_GNUC) +-# define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var = var +-# else +-# define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var = init +-# endif +-#endif +-#if !defined(LZO_UNCONST_CAST) +-# if 0 && defined(__cplusplus) +-# define LZO_UNCONST_CAST(t,e) (const_cast<t> (e)) +-# elif (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) +-# define LZO_UNCONST_CAST(t,e) ((t) ((void *) ((char *) ((lzo_uintptr_t) ((const void *) (e)))))) +-# else +-# define LZO_UNCONST_CAST(t,e) ((t) ((void *) ((char *) ((const void *) (e))))) +-# endif +-#endif +-#if !defined(LZO_COMPILE_TIME_ASSERT_HEADER) +-# if (LZO_CC_AZTECC || LZO_CC_ZORTECHC) +-# define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1-!(e)]; +-# elif (LZO_CC_DMC || LZO_CC_SYMANTECC) +-# define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1u-2*!(e)]; +-# elif (LZO_CC_TURBOC && (__TURBOC__ == 0x0295)) +-# define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1-!(e)]; +-# else +-# define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1-2*!(e)]; +-# endif +-#endif +-#if !defined(LZO_COMPILE_TIME_ASSERT) +-# if (LZO_CC_AZTECC) +-# define LZO_COMPILE_TIME_ASSERT(e) {typedef int __lzo_cta_t[1-!(e)];} +-# elif (LZO_CC_DMC || LZO_CC_PACIFICC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) +-# define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break; +-# elif (LZO_CC_MSC && (_MSC_VER < 900)) +-# define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break; +-# elif (LZO_CC_TURBOC && (__TURBOC__ == 0x0295)) +-# define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break; +-# else +-# define LZO_COMPILE_TIME_ASSERT(e) {typedef int __lzo_cta_t[1-2*!(e)];} +-# endif +-#endif +-#if (LZO_ARCH_I086 || LZO_ARCH_I386) && (LZO_OS_DOS16 || LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_OS216 || LZO_OS_WIN16 || LZO_OS_WIN32 || LZO_OS_WIN64) +-# if (LZO_CC_GNUC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PACIFICC) +-# elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) +-# define __lzo_cdecl __cdecl +-# define __lzo_cdecl_atexit /*empty*/ +-# define __lzo_cdecl_main __cdecl +-# if (LZO_OS_OS2 && (LZO_CC_DMC || LZO_CC_SYMANTECC)) +-# define __lzo_cdecl_qsort __pascal +-# elif (LZO_OS_OS2 && (LZO_CC_ZORTECHC)) +-# define __lzo_cdecl_qsort _stdcall +-# else +-# define __lzo_cdecl_qsort __cdecl +-# endif +-# elif (LZO_CC_WATCOMC) +-# define __lzo_cdecl __cdecl +-# else +-# define __lzo_cdecl __cdecl +-# define __lzo_cdecl_atexit __cdecl +-# define __lzo_cdecl_main __cdecl +-# define __lzo_cdecl_qsort __cdecl +-# endif +-# if (LZO_CC_GNUC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PACIFICC || LZO_CC_WATCOMC) +-# elif (LZO_OS_OS2 && (LZO_CC_DMC || LZO_CC_SYMANTECC)) +-# define __lzo_cdecl_sighandler __pascal +-# elif (LZO_OS_OS2 && (LZO_CC_ZORTECHC)) +-# define __lzo_cdecl_sighandler _stdcall +-# elif (LZO_CC_MSC && (_MSC_VER >= 1400)) && defined(_M_CEE_PURE) +-# define __lzo_cdecl_sighandler __clrcall +-# elif (LZO_CC_MSC && (_MSC_VER >= 600 && _MSC_VER < 700)) +-# if defined(_DLL) +-# define __lzo_cdecl_sighandler _far _cdecl _loadds +-# elif defined(_MT) +-# define __lzo_cdecl_sighandler _far _cdecl +-# else +-# define __lzo_cdecl_sighandler _cdecl +-# endif +-# else +-# define __lzo_cdecl_sighandler __cdecl +-# endif +-#elif (LZO_ARCH_I386) && (LZO_CC_WATCOMC) +-# define __lzo_cdecl __cdecl +-#elif (LZO_ARCH_M68K && LZO_OS_TOS && (LZO_CC_PUREC || LZO_CC_TURBOC)) +-# define __lzo_cdecl cdecl +-#endif +-#if !defined(__lzo_cdecl) +-# define __lzo_cdecl /*empty*/ +-#endif +-#if !defined(__lzo_cdecl_atexit) +-# define __lzo_cdecl_atexit /*empty*/ +-#endif +-#if !defined(__lzo_cdecl_main) +-# define __lzo_cdecl_main /*empty*/ +-#endif +-#if !defined(__lzo_cdecl_qsort) +-# define __lzo_cdecl_qsort /*empty*/ +-#endif +-#if !defined(__lzo_cdecl_sighandler) +-# define __lzo_cdecl_sighandler /*empty*/ +-#endif +-#if !defined(__lzo_cdecl_va) +-# define __lzo_cdecl_va __lzo_cdecl +-#endif +-#if !(LZO_CFG_NO_WINDOWS_H) +-#if (LZO_OS_CYGWIN || (LZO_OS_EMX && defined(__RSXNT__)) || LZO_OS_WIN32 || LZO_OS_WIN64) +-# if (LZO_CC_WATCOMC && (__WATCOMC__ < 1000)) +-# elif (LZO_OS_WIN32 && LZO_CC_GNUC) && defined(__PW32__) +-# elif ((LZO_OS_CYGWIN || defined(__MINGW32__)) && (LZO_CC_GNUC && (LZO_CC_GNUC < 0x025f00ul))) +-# else +-# define LZO_HAVE_WINDOWS_H 1 +-# endif +-#endif +-#endif +-#if (LZO_ARCH_ALPHA) +-# define LZO_OPT_AVOID_UINT_INDEX 1 +-# define LZO_OPT_AVOID_SHORT 1 +-# define LZO_OPT_AVOID_USHORT 1 +-#elif (LZO_ARCH_AMD64) +-# define LZO_OPT_AVOID_INT_INDEX 1 +-# define LZO_OPT_AVOID_UINT_INDEX 1 +-# define LZO_OPT_UNALIGNED16 1 +-# define LZO_OPT_UNALIGNED32 1 +-# define LZO_OPT_UNALIGNED64 1 +-#elif (LZO_ARCH_ARM && LZO_ARCH_ARM_THUMB) +-#elif (LZO_ARCH_ARM) +-# define LZO_OPT_AVOID_SHORT 1 +-# define LZO_OPT_AVOID_USHORT 1 +-#elif (LZO_ARCH_CRIS) +-# define LZO_OPT_UNALIGNED16 1 +-# define LZO_OPT_UNALIGNED32 1 +-#elif (LZO_ARCH_I386) +-# define LZO_OPT_UNALIGNED16 1 +-# define LZO_OPT_UNALIGNED32 1 +-#elif (LZO_ARCH_IA64) +-# define LZO_OPT_AVOID_INT_INDEX 1 +-# define LZO_OPT_AVOID_UINT_INDEX 1 +-# define LZO_OPT_PREFER_POSTINC 1 +-#elif (LZO_ARCH_M68K) +-# define LZO_OPT_PREFER_POSTINC 1 +-# define LZO_OPT_PREFER_PREDEC 1 +-# if defined(__mc68020__) && !defined(__mcoldfire__) +-# define LZO_OPT_UNALIGNED16 1 +-# define LZO_OPT_UNALIGNED32 1 +-# endif +-#elif (LZO_ARCH_MIPS) +-# define LZO_OPT_AVOID_UINT_INDEX 1 +-#elif (LZO_ARCH_POWERPC) +-# define LZO_OPT_PREFER_PREINC 1 +-# define LZO_OPT_PREFER_PREDEC 1 +-# if (LZO_ABI_BIG_ENDIAN) +-# define LZO_OPT_UNALIGNED16 1 +-# define LZO_OPT_UNALIGNED32 1 +-# endif +-#elif (LZO_ARCH_S390) +-# define LZO_OPT_UNALIGNED16 1 +-# define LZO_OPT_UNALIGNED32 1 +-# if (LZO_SIZEOF_SIZE_T == 8) +-# define LZO_OPT_UNALIGNED64 1 +-# endif +-#elif (LZO_ARCH_SH) +-# define LZO_OPT_PREFER_POSTINC 1 +-# define LZO_OPT_PREFER_PREDEC 1 +-#endif +-#ifndef LZO_CFG_NO_INLINE_ASM +-#if (LZO_CC_LLVM) +-# define LZO_CFG_NO_INLINE_ASM 1 +-#endif +-#endif +-#ifndef LZO_CFG_NO_UNALIGNED +-#if (LZO_ABI_NEUTRAL_ENDIAN) || (LZO_ARCH_GENERIC) +-# define LZO_CFG_NO_UNALIGNED 1 +-#endif +-#endif +-#if (LZO_CFG_NO_UNALIGNED) +-# undef LZO_OPT_UNALIGNED16 +-# undef LZO_OPT_UNALIGNED32 +-# undef LZO_OPT_UNALIGNED64 +-#endif +-#if (LZO_CFG_NO_INLINE_ASM) +-#elif (LZO_ARCH_I386 && (LZO_OS_DOS32 || LZO_OS_WIN32) && (LZO_CC_DMC || LZO_CC_INTELC || LZO_CC_MSC || LZO_CC_PELLESC)) +-# define LZO_ASM_SYNTAX_MSC 1 +-#elif (LZO_OS_WIN64 && (LZO_CC_DMC || LZO_CC_INTELC || LZO_CC_MSC || LZO_CC_PELLESC)) +-#elif (LZO_ARCH_I386 && LZO_CC_GNUC && (LZO_CC_GNUC == 0x011f00ul)) +-#elif (LZO_ARCH_I386 && (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC || LZO_CC_PATHSCALE)) +-# define LZO_ASM_SYNTAX_GNUC 1 +-#elif (LZO_ARCH_AMD64 && (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC || LZO_CC_PATHSCALE)) +-# define LZO_ASM_SYNTAX_GNUC 1 +-#endif +-#if (LZO_ASM_SYNTAX_GNUC) +-#if (LZO_ARCH_I386 && LZO_CC_GNUC && (LZO_CC_GNUC < 0x020000ul)) +-# define __LZO_ASM_CLOBBER "ax" +-#elif (LZO_CC_INTELC) +-# define __LZO_ASM_CLOBBER "memory" +-#else +-# define __LZO_ASM_CLOBBER "cc", "memory" +-#endif +-#endif +-#if defined(__LZO_INFOSTR_MM) +-#elif (LZO_MM_FLAT) && (defined(__LZO_INFOSTR_PM) || defined(LZO_INFO_ABI_PM)) +-# define __LZO_INFOSTR_MM "" +-#elif defined(LZO_INFO_MM) +-# define __LZO_INFOSTR_MM "." LZO_INFO_MM +-#else +-# define __LZO_INFOSTR_MM "" +-#endif +-#if defined(__LZO_INFOSTR_PM) +-#elif defined(LZO_INFO_ABI_PM) +-# define __LZO_INFOSTR_PM "." LZO_INFO_ABI_PM +-#else +-# define __LZO_INFOSTR_PM "" +-#endif +-#if defined(__LZO_INFOSTR_ENDIAN) +-#elif defined(LZO_INFO_ABI_ENDIAN) +-# define __LZO_INFOSTR_ENDIAN "." LZO_INFO_ABI_ENDIAN +-#else +-# define __LZO_INFOSTR_ENDIAN "" +-#endif +-#if defined(__LZO_INFOSTR_OSNAME) +-#elif defined(LZO_INFO_OS_CONSOLE) +-# define __LZO_INFOSTR_OSNAME LZO_INFO_OS "." LZO_INFO_OS_CONSOLE +-#elif defined(LZO_INFO_OS_POSIX) +-# define __LZO_INFOSTR_OSNAME LZO_INFO_OS "." LZO_INFO_OS_POSIX +-#else +-# define __LZO_INFOSTR_OSNAME LZO_INFO_OS +-#endif +-#if defined(__LZO_INFOSTR_LIBC) +-#elif defined(LZO_INFO_LIBC) +-# define __LZO_INFOSTR_LIBC "." LZO_INFO_LIBC +-#else +-# define __LZO_INFOSTR_LIBC "" +-#endif +-#if defined(__LZO_INFOSTR_CCVER) +-#elif defined(LZO_INFO_CCVER) +-# define __LZO_INFOSTR_CCVER " " LZO_INFO_CCVER +-#else +-# define __LZO_INFOSTR_CCVER "" +-#endif +-#define LZO_INFO_STRING \ +- LZO_INFO_ARCH __LZO_INFOSTR_MM __LZO_INFOSTR_PM __LZO_INFOSTR_ENDIAN \ +- " " __LZO_INFOSTR_OSNAME __LZO_INFOSTR_LIBC " " LZO_INFO_CC __LZO_INFOSTR_CCVER +- +-#endif +- +-#endif +- +-#undef LZO_HAVE_CONFIG_H +-#include "minilzo.h" +- +-#if !defined(MINILZO_VERSION) || (MINILZO_VERSION != 0x2040) +-# error "version mismatch in miniLZO source files" +-#endif +- +-#ifdef MINILZO_HAVE_CONFIG_H +-# define LZO_HAVE_CONFIG_H 1 +-#endif +- +-#ifndef __LZO_CONF_H +-#define __LZO_CONF_H 1 +- +-#if !defined(__LZO_IN_MINILZO) +-#if (LZO_CFG_FREESTANDING) +-# define LZO_LIBC_FREESTANDING 1 +-# define LZO_OS_FREESTANDING 1 +-# define ACC_LIBC_FREESTANDING 1 +-# define ACC_OS_FREESTANDING 1 +-#endif +-#if (LZO_CFG_NO_UNALIGNED) +-# define ACC_CFG_NO_UNALIGNED 1 +-#endif +-#if (LZO_ARCH_GENERIC) +-# define ACC_ARCH_GENERIC 1 +-#endif +-#if (LZO_ABI_NEUTRAL_ENDIAN) +-# define ACC_ABI_NEUTRAL_ENDIAN 1 +-#endif +-#if (LZO_HAVE_CONFIG_H) +-# define ACC_CONFIG_NO_HEADER 1 +-#endif +-#if defined(LZO_CFG_EXTRA_CONFIG_HEADER) +-# include LZO_CFG_EXTRA_CONFIG_HEADER +-#endif +-#if defined(__LZOCONF_H) || defined(__LZOCONF_H_INCLUDED) +-# error "include this file first" +-#endif +-#include "lzo/lzoconf.h" +-#endif +- +-#if (LZO_VERSION < 0x02000) || !defined(__LZOCONF_H_INCLUDED) +-# error "version mismatch" +-#endif +- +-#if (LZO_CC_BORLANDC && LZO_ARCH_I086) +-# pragma option -h +-#endif +- +-#if (LZO_CC_MSC && (_MSC_VER >= 1000)) +-# pragma warning(disable: 4127 4701) +-#endif +-#if (LZO_CC_MSC && (_MSC_VER >= 1300)) +-# pragma warning(disable: 4820) +-# pragma warning(disable: 4514 4710 4711) +-#endif +- +-#if (LZO_CC_SUNPROC) +-#if !defined(__cplusplus) +-# pragma error_messages(off,E_END_OF_LOOP_CODE_NOT_REACHED) +-# pragma error_messages(off,E_LOOP_NOT_ENTERED_AT_TOP) +-# pragma error_messages(off,E_STATEMENT_NOT_REACHED) +-#endif +-#endif +- +-#if (__LZO_MMODEL_HUGE) && !(LZO_HAVE_MM_HUGE_PTR) +-# error "this should not happen - check defines for __huge" +-#endif +- +-#if defined(__LZO_IN_MINILZO) || defined(LZO_CFG_FREESTANDING) +-#elif (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) +-# define ACC_WANT_ACC_INCD_H 1 +-# define ACC_WANT_ACC_INCE_H 1 +-# define ACC_WANT_ACC_INCI_H 1 +-#elif 1 +-# include <string.h> +-#else +-# define ACC_WANT_ACC_INCD_H 1 +-#endif +- +-#if (LZO_ARCH_I086) +-# define ACC_MM_AHSHIFT LZO_MM_AHSHIFT +-# define ACC_PTR_FP_OFF(x) (((const unsigned __far*)&(x))[0]) +-# define ACC_PTR_FP_SEG(x) (((const unsigned __far*)&(x))[1]) +-# define ACC_PTR_MK_FP(s,o) ((void __far*)(((unsigned long)(s)<<16)+(unsigned)(o))) +-#endif +- +-#if !defined(lzo_uintptr_t) +-# if defined(__LZO_MMODEL_HUGE) +-# define lzo_uintptr_t unsigned long +-# elif 1 && defined(LZO_OS_OS400) && (LZO_SIZEOF_VOID_P == 16) +-# define __LZO_UINTPTR_T_IS_POINTER 1 +- typedef char* lzo_uintptr_t; +-# define lzo_uintptr_t lzo_uintptr_t +-# elif (LZO_SIZEOF_SIZE_T == LZO_SIZEOF_VOID_P) +-# define lzo_uintptr_t size_t +-# elif (LZO_SIZEOF_LONG == LZO_SIZEOF_VOID_P) +-# define lzo_uintptr_t unsigned long +-# elif (LZO_SIZEOF_INT == LZO_SIZEOF_VOID_P) +-# define lzo_uintptr_t unsigned int +-# elif (LZO_SIZEOF_LONG_LONG == LZO_SIZEOF_VOID_P) +-# define lzo_uintptr_t unsigned long long +-# else +-# define lzo_uintptr_t size_t +-# endif +-#endif +-LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uintptr_t) >= sizeof(lzo_voidp)) +- +-#if 1 && !defined(LZO_CFG_FREESTANDING) +-#if 1 && !defined(HAVE_STRING_H) +-#define HAVE_STRING_H 1 +-#endif +-#if 1 && !defined(HAVE_MEMCMP) +-#define HAVE_MEMCMP 1 +-#endif +-#if 1 && !defined(HAVE_MEMCPY) +-#define HAVE_MEMCPY 1 +-#endif +-#if 1 && !defined(HAVE_MEMMOVE) +-#define HAVE_MEMMOVE 1 +-#endif +-#if 1 && !defined(HAVE_MEMSET) +-#define HAVE_MEMSET 1 +-#endif +-#endif +- +-#if 1 && defined(HAVE_STRING_H) +-#include <string.h> +-#endif +- +-#if (LZO_CFG_FREESTANDING) +-# undef HAVE_MEMCMP +-# undef HAVE_MEMCPY +-# undef HAVE_MEMMOVE +-# undef HAVE_MEMSET +-#endif +- +-#if !(HAVE_MEMCMP) +-# undef memcmp +-# define memcmp(a,b,c) lzo_memcmp(a,b,c) +-#elif !(__LZO_MMODEL_HUGE) +-# undef lzo_memcmp +-# define lzo_memcmp(a,b,c) memcmp(a,b,c) +-#endif +-#if !(HAVE_MEMCPY) +-# undef memcpy +-# define memcpy(a,b,c) lzo_memcpy(a,b,c) +-#elif !(__LZO_MMODEL_HUGE) +-# undef lzo_memcpy +-# define lzo_memcpy(a,b,c) memcpy(a,b,c) +-#endif +-#if !(HAVE_MEMMOVE) +-# undef memmove +-# define memmove(a,b,c) lzo_memmove(a,b,c) +-#elif !(__LZO_MMODEL_HUGE) +-# undef lzo_memmove +-# define lzo_memmove(a,b,c) memmove(a,b,c) +-#endif +-#if !(HAVE_MEMSET) +-# undef memset +-# define memset(a,b,c) lzo_memset(a,b,c) +-#elif !(__LZO_MMODEL_HUGE) +-# undef lzo_memset +-# define lzo_memset(a,b,c) memset(a,b,c) +-#endif +- +-#undef NDEBUG +-#if (LZO_CFG_FREESTANDING) +-# undef LZO_DEBUG +-# define NDEBUG 1 +-# undef assert +-# define assert(e) ((void)0) +-#else +-# if !defined(LZO_DEBUG) +-# define NDEBUG 1 +-# endif +-# include <assert.h> +-#endif +- +-#if 0 && defined(__BOUNDS_CHECKING_ON) +-# include <unchecked.h> +-#else +-# define BOUNDS_CHECKING_OFF_DURING(stmt) stmt +-# define BOUNDS_CHECKING_OFF_IN_EXPR(expr) (expr) +-#endif +- +-#if !defined(__lzo_inline) +-# define __lzo_inline /*empty*/ +-#endif +-#if !defined(__lzo_forceinline) +-# define __lzo_forceinline /*empty*/ +-#endif +-#if !defined(__lzo_noinline) +-# define __lzo_noinline /*empty*/ +-#endif +- +-#if (LZO_CFG_PGO) +-# undef __acc_likely +-# undef __acc_unlikely +-# undef __lzo_likely +-# undef __lzo_unlikely +-# define __acc_likely(e) (e) +-# define __acc_unlikely(e) (e) +-# define __lzo_likely(e) (e) +-# define __lzo_unlikely(e) (e) +-#endif +- +-#if 1 +-# define LZO_BYTE(x) ((unsigned char) (x)) +-#else +-# define LZO_BYTE(x) ((unsigned char) ((x) & 0xff)) +-#endif +- +-#define LZO_MAX(a,b) ((a) >= (b) ? (a) : (b)) +-#define LZO_MIN(a,b) ((a) <= (b) ? (a) : (b)) +-#define LZO_MAX3(a,b,c) ((a) >= (b) ? LZO_MAX(a,c) : LZO_MAX(b,c)) +-#define LZO_MIN3(a,b,c) ((a) <= (b) ? LZO_MIN(a,c) : LZO_MIN(b,c)) +- +-#define lzo_sizeof(type) ((lzo_uint) (sizeof(type))) +- +-#define LZO_HIGH(array) ((lzo_uint) (sizeof(array)/sizeof(*(array)))) +- +-#define LZO_SIZE(bits) (1u << (bits)) +-#define LZO_MASK(bits) (LZO_SIZE(bits) - 1) +- +-#define LZO_LSIZE(bits) (1ul << (bits)) +-#define LZO_LMASK(bits) (LZO_LSIZE(bits) - 1) +- +-#define LZO_USIZE(bits) ((lzo_uint) 1 << (bits)) +-#define LZO_UMASK(bits) (LZO_USIZE(bits) - 1) +- +-#if !defined(DMUL) +-#if 0 +- +-# define DMUL(a,b) ((lzo_xint) ((lzo_uint32)(a) * (lzo_uint32)(b))) +-#else +-# define DMUL(a,b) ((lzo_xint) ((a) * (b))) +-#endif +-#endif +- +-#if 1 && !(LZO_CFG_NO_UNALIGNED) +-#if 1 && (LZO_ARCH_AMD64 || LZO_ARCH_I386 || LZO_ARCH_POWERPC) +-# if (LZO_SIZEOF_SHORT == 2) +-# define LZO_UNALIGNED_OK_2 1 +-# endif +-# if (LZO_SIZEOF_INT == 4) +-# define LZO_UNALIGNED_OK_4 1 +-# endif +-#endif +-#endif +- +-#if defined(LZO_UNALIGNED_OK_2) +- LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(short) == 2) +-#endif +-#if defined(LZO_UNALIGNED_OK_4) +- LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint32) == 4) +-#elif defined(LZO_ALIGNED_OK_4) +- LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint32) == 4) +-#endif +- +-#undef COPY4 +-#if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4) +-# if 1 && defined(ACC_UA_COPY32) +-# define COPY4(d,s) ACC_UA_COPY32(d,s) +-# else +-# define COPY4(d,s) (* (__lzo_ua_volatile lzo_uint32p)(__lzo_ua_volatile lzo_voidp)(d) = * (__lzo_ua_volatile const lzo_uint32p)(__lzo_ua_volatile const lzo_voidp)(s)) +-# endif +-#endif +- +-#define MEMCPY8_DS(dest,src,len) \ +- lzo_memcpy(dest,src,len); dest += len; src += len +- +-#define BZERO8_PTR(s,l,n) \ +- lzo_memset((lzo_voidp)(s),0,(lzo_uint)(l)*(n)) +- +-#define MEMCPY_DS(dest,src,len) \ +- do *dest++ = *src++; while (--len > 0) +- +-LZO_EXTERN(const lzo_bytep) lzo_copyright(void); +- +-#ifndef __LZO_PTR_H +-#define __LZO_PTR_H 1 +- +-#ifdef __cplusplus +-extern "C" { +-#endif +- +-#if !defined(lzo_uintptr_t) +-# if (__LZO_MMODEL_HUGE) +-# define lzo_uintptr_t unsigned long +-# else +-# define lzo_uintptr_t acc_uintptr_t +-# ifdef __ACC_INTPTR_T_IS_POINTER +-# define __LZO_UINTPTR_T_IS_POINTER 1 +-# endif +-# endif +-#endif +- +-#if (LZO_ARCH_I086) +-#define PTR(a) ((lzo_bytep) (a)) +-#define PTR_ALIGNED_4(a) ((ACC_PTR_FP_OFF(a) & 3) == 0) +-#define PTR_ALIGNED2_4(a,b) (((ACC_PTR_FP_OFF(a) | ACC_PTR_FP_OFF(b)) & 3) == 0) +-#elif (LZO_MM_PVP) +-#define PTR(a) ((lzo_bytep) (a)) +-#define PTR_ALIGNED_8(a) ((((lzo_uintptr_t)(a)) >> 61) == 0) +-#define PTR_ALIGNED2_8(a,b) ((((lzo_uintptr_t)(a)|(lzo_uintptr_t)(b)) >> 61) == 0) +-#else +-#define PTR(a) ((lzo_uintptr_t) (a)) +-#define PTR_LINEAR(a) PTR(a) +-#define PTR_ALIGNED_4(a) ((PTR_LINEAR(a) & 3) == 0) +-#define PTR_ALIGNED_8(a) ((PTR_LINEAR(a) & 7) == 0) +-#define PTR_ALIGNED2_4(a,b) (((PTR_LINEAR(a) | PTR_LINEAR(b)) & 3) == 0) +-#define PTR_ALIGNED2_8(a,b) (((PTR_LINEAR(a) | PTR_LINEAR(b)) & 7) == 0) +-#endif +- +-#define PTR_LT(a,b) (PTR(a) < PTR(b)) +-#define PTR_GE(a,b) (PTR(a) >= PTR(b)) +-#define PTR_DIFF(a,b) (PTR(a) - PTR(b)) +-#define pd(a,b) ((lzo_uint) ((a)-(b))) +- +-LZO_EXTERN(lzo_uintptr_t) +-__lzo_ptr_linear(const lzo_voidp ptr); +- +-typedef union +-{ +- char a_char; +- unsigned char a_uchar; +- short a_short; +- unsigned short a_ushort; +- int a_int; +- unsigned int a_uint; +- long a_long; +- unsigned long a_ulong; +- lzo_int a_lzo_int; +- lzo_uint a_lzo_uint; +- lzo_int32 a_lzo_int32; +- lzo_uint32 a_lzo_uint32; +- ptrdiff_t a_ptrdiff_t; +- lzo_uintptr_t a_lzo_uintptr_t; +- lzo_voidp a_lzo_voidp; +- void * a_void_p; +- lzo_bytep a_lzo_bytep; +- lzo_bytepp a_lzo_bytepp; +- lzo_uintp a_lzo_uintp; +- lzo_uint * a_lzo_uint_p; +- lzo_uint32p a_lzo_uint32p; +- lzo_uint32 * a_lzo_uint32_p; +- unsigned char * a_uchar_p; +- char * a_char_p; +-} +-lzo_full_align_t; +- +-#ifdef __cplusplus +-} +-#endif +- +-#endif +- +-#define LZO_DETERMINISTIC 1 +- +-#define LZO_DICT_USE_PTR 1 +-#if 0 && (LZO_ARCH_I086) +-# undef LZO_DICT_USE_PTR +-#endif +- +-#if (LZO_DICT_USE_PTR) +-# define lzo_dict_t const lzo_bytep +-# define lzo_dict_p lzo_dict_t __LZO_MMODEL * +-#else +-# define lzo_dict_t lzo_uint +-# define lzo_dict_p lzo_dict_t __LZO_MMODEL * +-#endif +- +-#endif +- +-#if !defined(MINILZO_CFG_SKIP_LZO_PTR) +- +-LZO_PUBLIC(lzo_uintptr_t) +-__lzo_ptr_linear(const lzo_voidp ptr) +-{ +- lzo_uintptr_t p; +- +-#if (LZO_ARCH_I086) +- p = (((lzo_uintptr_t)(ACC_PTR_FP_SEG(ptr))) << (16 - ACC_MM_AHSHIFT)) + (ACC_PTR_FP_OFF(ptr)); +-#elif (LZO_MM_PVP) +- p = (lzo_uintptr_t) (ptr); +- p = (p << 3) | (p >> 61); +-#else +- p = (lzo_uintptr_t) PTR_LINEAR(ptr); +-#endif +- +- return p; +-} +- +-LZO_PUBLIC(unsigned) +-__lzo_align_gap(const lzo_voidp ptr, lzo_uint size) +-{ +-#if defined(__LZO_UINTPTR_T_IS_POINTER) +- size_t n = (size_t) ptr; +- n = (((n + size - 1) / size) * size) - n; +-#else +- lzo_uintptr_t p, n; +- p = __lzo_ptr_linear(ptr); +- n = (((p + size - 1) / size) * size) - p; +-#endif +- +- assert(size > 0); +- assert((long)n >= 0); +- assert(n <= size); +- return (unsigned)n; +-} +- +-#endif +-#if !defined(MINILZO_CFG_SKIP_LZO_UTIL) +- +-/* If you use the LZO library in a product, I would appreciate that you +- * keep this copyright string in the executable of your product. +- */ +- +-static const char __lzo_copyright[] = +-#if !defined(__LZO_IN_MINLZO) +- LZO_VERSION_STRING; +-#else +- "\r\n\n" +- "LZO data compression library.\n" +- "$Copyright: LZO Copyright (C) 1996-2010 Markus Franz Xaver Johannes Oberhumer\n" +- "<markus@oberhumer.com>\n" +- "http://www.oberhumer.com $\n\n" +- "$Id: LZO version: v" LZO_VERSION_STRING ", " LZO_VERSION_DATE " $\n" +- "$Info: " LZO_INFO_STRING " $\n"; +-#endif +- +-LZO_PUBLIC(const lzo_bytep) +-lzo_copyright(void) +-{ +-#if (LZO_OS_DOS16 && LZO_CC_TURBOC) +- return (lzo_voidp) __lzo_copyright; +-#else +- return (const lzo_bytep) __lzo_copyright; +-#endif +-} +- +-LZO_PUBLIC(unsigned) +-lzo_version(void) +-{ +- return LZO_VERSION; +-} +- +-LZO_PUBLIC(const char *) +-lzo_version_string(void) +-{ +- return LZO_VERSION_STRING; +-} +- +-LZO_PUBLIC(const char *) +-lzo_version_date(void) +-{ +- return LZO_VERSION_DATE; +-} +- +-LZO_PUBLIC(const lzo_charp) +-_lzo_version_string(void) +-{ +- return LZO_VERSION_STRING; +-} +- +-LZO_PUBLIC(const lzo_charp) +-_lzo_version_date(void) +-{ +- return LZO_VERSION_DATE; +-} +- +-#define LZO_BASE 65521u +-#define LZO_NMAX 5552 +- +-#define LZO_DO1(buf,i) s1 += buf[i]; s2 += s1 +-#define LZO_DO2(buf,i) LZO_DO1(buf,i); LZO_DO1(buf,i+1); +-#define LZO_DO4(buf,i) LZO_DO2(buf,i); LZO_DO2(buf,i+2); +-#define LZO_DO8(buf,i) LZO_DO4(buf,i); LZO_DO4(buf,i+4); +-#define LZO_DO16(buf,i) LZO_DO8(buf,i); LZO_DO8(buf,i+8); +- +-LZO_PUBLIC(lzo_uint32) +-lzo_adler32(lzo_uint32 adler, const lzo_bytep buf, lzo_uint len) +-{ +- lzo_uint32 s1 = adler & 0xffff; +- lzo_uint32 s2 = (adler >> 16) & 0xffff; +- unsigned k; +- +- if (buf == NULL) +- return 1; +- +- while (len > 0) +- { +- k = len < LZO_NMAX ? (unsigned) len : LZO_NMAX; +- len -= k; +- if (k >= 16) do +- { +- LZO_DO16(buf,0); +- buf += 16; +- k -= 16; +- } while (k >= 16); +- if (k != 0) do +- { +- s1 += *buf++; +- s2 += s1; +- } while (--k > 0); +- s1 %= LZO_BASE; +- s2 %= LZO_BASE; +- } +- return (s2 << 16) | s1; +-} +- +-#undef LZO_DO1 +-#undef LZO_DO2 +-#undef LZO_DO4 +-#undef LZO_DO8 +-#undef LZO_DO16 +- +-#endif +-#if !defined(MINILZO_CFG_SKIP_LZO_STRING) +-#undef lzo_memcmp +-#undef lzo_memcpy +-#undef lzo_memmove +-#undef lzo_memset +-#if !defined(__LZO_MMODEL_HUGE) +-# undef LZO_HAVE_MM_HUGE_PTR +-#endif +-#define lzo_hsize_t lzo_uint +-#define lzo_hvoid_p lzo_voidp +-#define lzo_hbyte_p lzo_bytep +-#define LZOLIB_PUBLIC(r,f) LZO_PUBLIC(r) f +-#define lzo_hmemcmp lzo_memcmp +-#define lzo_hmemcpy lzo_memcpy +-#define lzo_hmemmove lzo_memmove +-#define lzo_hmemset lzo_memset +-#define __LZOLIB_HMEMCPY_CH_INCLUDED 1 +-#if !defined(LZOLIB_PUBLIC) +-# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f) +-#endif +-LZOLIB_PUBLIC(int, lzo_hmemcmp) (const lzo_hvoid_p s1, const lzo_hvoid_p s2, lzo_hsize_t len) +-{ +-#if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMCMP) +- const lzo_hbyte_p p1 = (const lzo_hbyte_p) s1; +- const lzo_hbyte_p p2 = (const lzo_hbyte_p) s2; +- if __lzo_likely(len > 0) do +- { +- int d = *p1 - *p2; +- if (d != 0) +- return d; +- p1++; p2++; +- } while __lzo_likely(--len > 0); +- return 0; +-#else +- return memcmp(s1, s2, len); +-#endif +-} +-LZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemcpy) (lzo_hvoid_p dest, const lzo_hvoid_p src, lzo_hsize_t len) +-{ +-#if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMCPY) +- lzo_hbyte_p p1 = (lzo_hbyte_p) dest; +- const lzo_hbyte_p p2 = (const lzo_hbyte_p) src; +- if (!(len > 0) || p1 == p2) +- return dest; +- do +- *p1++ = *p2++; +- while __lzo_likely(--len > 0); +- return dest; +-#else +- return memcpy(dest, src, len); +-#endif +-} +-LZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemmove) (lzo_hvoid_p dest, const lzo_hvoid_p src, lzo_hsize_t len) +-{ +-#if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMMOVE) +- lzo_hbyte_p p1 = (lzo_hbyte_p) dest; +- const lzo_hbyte_p p2 = (const lzo_hbyte_p) src; +- if (!(len > 0) || p1 == p2) +- return dest; +- if (p1 < p2) +- { +- do +- *p1++ = *p2++; +- while __lzo_likely(--len > 0); +- } +- else +- { +- p1 += len; +- p2 += len; +- do +- *--p1 = *--p2; +- while __lzo_likely(--len > 0); +- } +- return dest; +-#else +- return memmove(dest, src, len); +-#endif +-} +-LZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemset) (lzo_hvoid_p s, int c, lzo_hsize_t len) +-{ +-#if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMSET) +- lzo_hbyte_p p = (lzo_hbyte_p) s; +- if __lzo_likely(len > 0) do +- *p++ = (unsigned char) c; +- while __lzo_likely(--len > 0); +- return s; +-#else +- return memset(s, c, len); +-#endif +-} +-#undef LZOLIB_PUBLIC +-#endif +-#if !defined(MINILZO_CFG_SKIP_LZO_INIT) +- +-#if !defined(__LZO_IN_MINILZO) +- +-#define ACC_WANT_ACC_CHK_CH 1 +-#undef ACCCHK_ASSERT +- +- ACCCHK_ASSERT_IS_SIGNED_T(lzo_int) +- ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_uint) +- +- ACCCHK_ASSERT_IS_SIGNED_T(lzo_int32) +- ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_uint32) +- ACCCHK_ASSERT((LZO_UINT32_C(1) << (int)(8*sizeof(LZO_UINT32_C(1))-1)) > 0) +- ACCCHK_ASSERT(sizeof(lzo_uint32) >= 4) +- +-#if !defined(__LZO_UINTPTR_T_IS_POINTER) +- ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_uintptr_t) +-#endif +- ACCCHK_ASSERT(sizeof(lzo_uintptr_t) >= sizeof(lzo_voidp)) +- +- ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_xint) +- ACCCHK_ASSERT(sizeof(lzo_xint) >= sizeof(lzo_uint32)) +- ACCCHK_ASSERT(sizeof(lzo_xint) >= sizeof(lzo_uint)) +- ACCCHK_ASSERT(sizeof(lzo_xint) == sizeof(lzo_uint32) || sizeof(lzo_xint) == sizeof(lzo_uint)) +- +-#endif +-#undef ACCCHK_ASSERT +- +-#if 0 +-#define u2p(ptr,off) ((lzo_voidp) (((lzo_bytep)(lzo_voidp)(ptr)) + (off))) +-#else +-static __lzo_noinline lzo_voidp u2p(lzo_voidp ptr, lzo_uint off) +-{ +- return (lzo_voidp) ((lzo_bytep) ptr + off); +-} +-#endif +- +-LZO_PUBLIC(int) +-_lzo_config_check(void) +-{ +- lzo_bool r = 1; +- union { +- lzo_xint a[2]; unsigned char b[2*sizeof(lzo_xint)]; +- unsigned short x[2]; lzo_uint32 y[2]; lzo_uint z[2]; +- } u; +- lzo_voidp p; +- +- u.a[0] = u.a[1] = 0; +- p = u2p(&u, 0); +- r &= ((* (lzo_bytep) p) == 0); +-#if !defined(LZO_CFG_NO_CONFIG_CHECK) +-#if defined(LZO_ABI_BIG_ENDIAN) +- u.a[0] = u.a[1] = 0; u.b[sizeof(lzo_uint) - 1] = 128; +- p = u2p(&u, 0); +- r &= ((* (lzo_uintp) p) == 128); +-#endif +-#if defined(LZO_ABI_LITTLE_ENDIAN) +- u.a[0] = u.a[1] = 0; u.b[0] = 128; +- p = u2p(&u, 0); +- r &= ((* (lzo_uintp) p) == 128); +-#endif +-#if defined(LZO_UNALIGNED_OK_2) +- u.a[0] = u.a[1] = 0; +- u.b[0] = 1; u.b[sizeof(unsigned short) + 1] = 2; +- p = u2p(&u, 1); +- r &= ((* (lzo_ushortp) p) == 0); +-#endif +-#if defined(LZO_UNALIGNED_OK_4) +- u.a[0] = u.a[1] = 0; +- u.b[0] = 3; u.b[sizeof(lzo_uint32) + 1] = 4; +- p = u2p(&u, 1); +- r &= ((* (lzo_uint32p) p) == 0); +-#endif +-#endif +- +- return r == 1 ? LZO_E_OK : LZO_E_ERROR; +-} +- +-LZO_PUBLIC(int) +-__lzo_init_v2(unsigned v, int s1, int s2, int s3, int s4, int s5, +- int s6, int s7, int s8, int s9) +-{ +- int r; +- +-#if defined(__LZO_IN_MINILZO) +-#elif (LZO_CC_MSC && ((_MSC_VER) < 700)) +-#else +-#define ACC_WANT_ACC_CHK_CH 1 +-#undef ACCCHK_ASSERT +-#define ACCCHK_ASSERT(expr) LZO_COMPILE_TIME_ASSERT(expr) +-#endif +-#undef ACCCHK_ASSERT +- +- if (v == 0) +- return LZO_E_ERROR; +- +- r = (s1 == -1 || s1 == (int) sizeof(short)) && +- (s2 == -1 || s2 == (int) sizeof(int)) && +- (s3 == -1 || s3 == (int) sizeof(long)) && +- (s4 == -1 || s4 == (int) sizeof(lzo_uint32)) && +- (s5 == -1 || s5 == (int) sizeof(lzo_uint)) && +- (s6 == -1 || s6 == (int) lzo_sizeof_dict_t) && +- (s7 == -1 || s7 == (int) sizeof(char *)) && +- (s8 == -1 || s8 == (int) sizeof(lzo_voidp)) && +- (s9 == -1 || s9 == (int) sizeof(lzo_callback_t)); +- if (!r) +- return LZO_E_ERROR; +- +- r = _lzo_config_check(); +- if (r != LZO_E_OK) +- return r; +- +- return r; +-} +- +-#if !defined(__LZO_IN_MINILZO) +- +-#if (LZO_OS_WIN16 && LZO_CC_WATCOMC) && defined(__SW_BD) +- +-#if 0 +-BOOL FAR PASCAL LibMain ( HANDLE hInstance, WORD wDataSegment, +- WORD wHeapSize, LPSTR lpszCmdLine ) +-#else +-int __far __pascal LibMain ( int a, short b, short c, long d ) +-#endif +-{ +- LZO_UNUSED(a); LZO_UNUSED(b); LZO_UNUSED(c); LZO_UNUSED(d); +- return 1; +-} +- +-#endif +- +-#endif +- +-#endif +- +-#define LZO1X 1 +-#define LZO_EOF_CODE 1 +-#define M2_MAX_OFFSET 0x0800 +- +-#if !defined(MINILZO_CFG_SKIP_LZO1X_1_COMPRESS) +- +-#define LZO_NEED_DICT_H 1 +-#define D_BITS 14 +-#define D_INDEX1(d,p) d = DM(DMUL(0x21,DX3(p,5,5,6)) >> 5) +-#define D_INDEX2(d,p) d = (d & (D_MASK & 0x7ff)) ^ (D_HIGH | 0x1f) +- +-#ifndef __LZO_CONFIG1X_H +-#define __LZO_CONFIG1X_H 1 +- +-#if !defined(LZO1X) && !defined(LZO1Y) && !defined(LZO1Z) +-# define LZO1X 1 +-#endif +- +-#if !defined(__LZO_IN_MINILZO) +-#include "lzo/lzo1x.h" +-#endif +- +-#ifndef LZO_EOF_CODE +-#define LZO_EOF_CODE 1 +-#endif +-#undef LZO_DETERMINISTIC +- +-#define M1_MAX_OFFSET 0x0400 +-#ifndef M2_MAX_OFFSET +-#define M2_MAX_OFFSET 0x0800 +-#endif +-#define M3_MAX_OFFSET 0x4000 +-#define M4_MAX_OFFSET 0xbfff +- +-#define MX_MAX_OFFSET (M1_MAX_OFFSET + M2_MAX_OFFSET) +- +-#define M1_MIN_LEN 2 +-#define M1_MAX_LEN 2 +-#define M2_MIN_LEN 3 +-#ifndef M2_MAX_LEN +-#define M2_MAX_LEN 8 +-#endif +-#define M3_MIN_LEN 3 +-#define M3_MAX_LEN 33 +-#define M4_MIN_LEN 3 +-#define M4_MAX_LEN 9 +- +-#define M1_MARKER 0 +-#define M2_MARKER 64 +-#define M3_MARKER 32 +-#define M4_MARKER 16 +- +-#ifndef MIN_LOOKAHEAD +-#define MIN_LOOKAHEAD (M2_MAX_LEN + 1) +-#endif +- +-#if defined(LZO_NEED_DICT_H) +- +-#ifndef LZO_HASH +-#define LZO_HASH LZO_HASH_LZO_INCREMENTAL_B +-#endif +-#define DL_MIN_LEN M2_MIN_LEN +- +-#ifndef __LZO_DICT_H +-#define __LZO_DICT_H 1 +- +-#ifdef __cplusplus +-extern "C" { +-#endif +- +-#if !defined(D_BITS) && defined(DBITS) +-# define D_BITS DBITS +-#endif +-#if !defined(D_BITS) +-# error "D_BITS is not defined" +-#endif +-#if (D_BITS < 16) +-# define D_SIZE LZO_SIZE(D_BITS) +-# define D_MASK LZO_MASK(D_BITS) +-#else +-# define D_SIZE LZO_USIZE(D_BITS) +-# define D_MASK LZO_UMASK(D_BITS) +-#endif +-#define D_HIGH ((D_MASK >> 1) + 1) +- +-#if !defined(DD_BITS) +-# define DD_BITS 0 +-#endif +-#define DD_SIZE LZO_SIZE(DD_BITS) +-#define DD_MASK LZO_MASK(DD_BITS) +- +-#if !defined(DL_BITS) +-# define DL_BITS (D_BITS - DD_BITS) +-#endif +-#if (DL_BITS < 16) +-# define DL_SIZE LZO_SIZE(DL_BITS) +-# define DL_MASK LZO_MASK(DL_BITS) +-#else +-# define DL_SIZE LZO_USIZE(DL_BITS) +-# define DL_MASK LZO_UMASK(DL_BITS) +-#endif +- +-#if (D_BITS != DL_BITS + DD_BITS) +-# error "D_BITS does not match" +-#endif +-#if (D_BITS < 6 || D_BITS > 18) +-# error "invalid D_BITS" +-#endif +-#if (DL_BITS < 6 || DL_BITS > 20) +-# error "invalid DL_BITS" +-#endif +-#if (DD_BITS < 0 || DD_BITS > 6) +-# error "invalid DD_BITS" +-#endif +- +-#if !defined(DL_MIN_LEN) +-# define DL_MIN_LEN 3 +-#endif +-#if !defined(DL_SHIFT) +-# define DL_SHIFT ((DL_BITS + (DL_MIN_LEN - 1)) / DL_MIN_LEN) +-#endif +- +-#define LZO_HASH_GZIP 1 +-#define LZO_HASH_GZIP_INCREMENTAL 2 +-#define LZO_HASH_LZO_INCREMENTAL_A 3 +-#define LZO_HASH_LZO_INCREMENTAL_B 4 +- +-#if !defined(LZO_HASH) +-# error "choose a hashing strategy" +-#endif +- +-#undef DM +-#undef DX +- +-#if (DL_MIN_LEN == 3) +-# define _DV2_A(p,shift1,shift2) \ +- (((( (lzo_xint)((p)[0]) << shift1) ^ (p)[1]) << shift2) ^ (p)[2]) +-# define _DV2_B(p,shift1,shift2) \ +- (((( (lzo_xint)((p)[2]) << shift1) ^ (p)[1]) << shift2) ^ (p)[0]) +-# define _DV3_B(p,shift1,shift2,shift3) \ +- ((_DV2_B((p)+1,shift1,shift2) << (shift3)) ^ (p)[0]) +-#elif (DL_MIN_LEN == 2) +-# define _DV2_A(p,shift1,shift2) \ +- (( (lzo_xint)(p[0]) << shift1) ^ p[1]) +-# define _DV2_B(p,shift1,shift2) \ +- (( (lzo_xint)(p[1]) << shift1) ^ p[2]) +-#else +-# error "invalid DL_MIN_LEN" +-#endif +-#define _DV_A(p,shift) _DV2_A(p,shift,shift) +-#define _DV_B(p,shift) _DV2_B(p,shift,shift) +-#define DA2(p,s1,s2) \ +- (((((lzo_xint)((p)[2]) << (s2)) + (p)[1]) << (s1)) + (p)[0]) +-#define DS2(p,s1,s2) \ +- (((((lzo_xint)((p)[2]) << (s2)) - (p)[1]) << (s1)) - (p)[0]) +-#define DX2(p,s1,s2) \ +- (((((lzo_xint)((p)[2]) << (s2)) ^ (p)[1]) << (s1)) ^ (p)[0]) +-#define DA3(p,s1,s2,s3) ((DA2((p)+1,s2,s3) << (s1)) + (p)[0]) +-#define DS3(p,s1,s2,s3) ((DS2((p)+1,s2,s3) << (s1)) - (p)[0]) +-#define DX3(p,s1,s2,s3) ((DX2((p)+1,s2,s3) << (s1)) ^ (p)[0]) +-#define DMS(v,s) ((lzo_uint) (((v) & (D_MASK >> (s))) << (s))) +-#define DM(v) DMS(v,0) +- +-#if (LZO_HASH == LZO_HASH_GZIP) +-# define _DINDEX(dv,p) (_DV_A((p),DL_SHIFT)) +- +-#elif (LZO_HASH == LZO_HASH_GZIP_INCREMENTAL) +-# define __LZO_HASH_INCREMENTAL 1 +-# define DVAL_FIRST(dv,p) dv = _DV_A((p),DL_SHIFT) +-# define DVAL_NEXT(dv,p) dv = (((dv) << DL_SHIFT) ^ p[2]) +-# define _DINDEX(dv,p) (dv) +-# define DVAL_LOOKAHEAD DL_MIN_LEN +- +-#elif (LZO_HASH == LZO_HASH_LZO_INCREMENTAL_A) +-# define __LZO_HASH_INCREMENTAL 1 +-# define DVAL_FIRST(dv,p) dv = _DV_A((p),5) +-# define DVAL_NEXT(dv,p) \ +- dv ^= (lzo_xint)(p[-1]) << (2*5); dv = (((dv) << 5) ^ p[2]) +-# define _DINDEX(dv,p) ((DMUL(0x9f5f,dv)) >> 5) +-# define DVAL_LOOKAHEAD DL_MIN_LEN +- +-#elif (LZO_HASH == LZO_HASH_LZO_INCREMENTAL_B) +-# define __LZO_HASH_INCREMENTAL 1 +-# define DVAL_FIRST(dv,p) dv = _DV_B((p),5) +-# define DVAL_NEXT(dv,p) \ +- dv ^= p[-1]; dv = (((dv) >> 5) ^ ((lzo_xint)(p[2]) << (2*5))) +-# define _DINDEX(dv,p) ((DMUL(0x9f5f,dv)) >> 5) +-# define DVAL_LOOKAHEAD DL_MIN_LEN +- +-#else +-# error "choose a hashing strategy" +-#endif +- +-#ifndef DINDEX +-#define DINDEX(dv,p) ((lzo_uint)((_DINDEX(dv,p)) & DL_MASK) << DD_BITS) +-#endif +-#if !defined(DINDEX1) && defined(D_INDEX1) +-#define DINDEX1 D_INDEX1 +-#endif +-#if !defined(DINDEX2) && defined(D_INDEX2) +-#define DINDEX2 D_INDEX2 +-#endif +- +-#if !defined(__LZO_HASH_INCREMENTAL) +-# define DVAL_FIRST(dv,p) ((void) 0) +-# define DVAL_NEXT(dv,p) ((void) 0) +-# define DVAL_LOOKAHEAD 0 +-#endif +- +-#if !defined(DVAL_ASSERT) +-#if defined(__LZO_HASH_INCREMENTAL) && !defined(NDEBUG) +-#if (LZO_CC_CLANG || (LZO_CC_GNUC >= 0x020700ul) || LZO_CC_LLVM) +-static void __attribute__((__unused__)) +-#else +-static void +-#endif +-DVAL_ASSERT(lzo_xint dv, const lzo_bytep p) +-{ +- lzo_xint df; +- DVAL_FIRST(df,(p)); +- assert(DINDEX(dv,p) == DINDEX(df,p)); +-} +-#else +-# define DVAL_ASSERT(dv,p) ((void) 0) +-#endif +-#endif +- +-#if defined(LZO_DICT_USE_PTR) +-# define DENTRY(p,in) (p) +-# define GINDEX(m_pos,m_off,dict,dindex,in) m_pos = dict[dindex] +-#else +-# define DENTRY(p,in) ((lzo_uint) ((p)-(in))) +-# define GINDEX(m_pos,m_off,dict,dindex,in) m_off = dict[dindex] +-#endif +- +-#if (DD_BITS == 0) +- +-# define UPDATE_D(dict,drun,dv,p,in) dict[ DINDEX(dv,p) ] = DENTRY(p,in) +-# define UPDATE_I(dict,drun,index,p,in) dict[index] = DENTRY(p,in) +-# define UPDATE_P(ptr,drun,p,in) (ptr)[0] = DENTRY(p,in) +- +-#else +- +-# define UPDATE_D(dict,drun,dv,p,in) \ +- dict[ DINDEX(dv,p) + drun++ ] = DENTRY(p,in); drun &= DD_MASK +-# define UPDATE_I(dict,drun,index,p,in) \ +- dict[ (index) + drun++ ] = DENTRY(p,in); drun &= DD_MASK +-# define UPDATE_P(ptr,drun,p,in) \ +- (ptr) [ drun++ ] = DENTRY(p,in); drun &= DD_MASK +- +-#endif +- +-#if defined(LZO_DICT_USE_PTR) +- +-#define LZO_CHECK_MPOS_DET(m_pos,m_off,in,ip,max_offset) \ +- (m_pos == NULL || (m_off = pd(ip, m_pos)) > max_offset) +- +-#define LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,max_offset) \ +- (BOUNDS_CHECKING_OFF_IN_EXPR(( \ +- m_pos = ip - (lzo_uint) PTR_DIFF(ip,m_pos), \ +- PTR_LT(m_pos,in) || \ +- (m_off = (lzo_uint) PTR_DIFF(ip,m_pos)) == 0 || \ +- m_off > max_offset ))) +- +-#else +- +-#define LZO_CHECK_MPOS_DET(m_pos,m_off,in,ip,max_offset) \ +- (m_off == 0 || \ +- ((m_off = pd(ip, in) - m_off) > max_offset) || \ +- (m_pos = (ip) - (m_off), 0) ) +- +-#define LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,max_offset) \ +- (pd(ip, in) <= m_off || \ +- ((m_off = pd(ip, in) - m_off) > max_offset) || \ +- (m_pos = (ip) - (m_off), 0) ) +- +-#endif +- +-#if defined(LZO_DETERMINISTIC) +-# define LZO_CHECK_MPOS LZO_CHECK_MPOS_DET +-#else +-# define LZO_CHECK_MPOS LZO_CHECK_MPOS_NON_DET +-#endif +- +-#ifdef __cplusplus +-} +-#endif +- +-#endif +- +-#endif +- +-#endif +- +-#define do_compress _lzo1x_1_do_compress +-#define DO_COMPRESS lzo1x_1_compress +- +-#if 1 && defined(DO_COMPRESS) && !defined(do_compress) +-# define do_compress LZO_CPP_ECONCAT2(DO_COMPRESS,_core) +-#endif +- +-static __lzo_noinline lzo_uint +-do_compress ( const lzo_bytep in , lzo_uint in_len, +- lzo_bytep out, lzo_uintp out_len, +- lzo_voidp wrkmem ) +-{ +- register const lzo_bytep ip; +- lzo_bytep op; +- const lzo_bytep const in_end = in + in_len; +- const lzo_bytep const ip_end = in + in_len - M2_MAX_LEN - 5; +- const lzo_bytep ii; +- lzo_dict_p const dict = (lzo_dict_p) wrkmem; +- +- op = out; +- ip = in; +- ii = ip; +- +- ip += 4; +- for (;;) +- { +- register const lzo_bytep m_pos; +- LZO_DEFINE_UNINITIALIZED_VAR(lzo_uint, m_off, 0); +- lzo_uint m_len; +- lzo_uint dindex; +- +- DINDEX1(dindex,ip); +- GINDEX(m_pos,m_off,dict,dindex,in); +- if (LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,M4_MAX_OFFSET)) +- goto literal; +-#if 1 +- if (m_off <= M2_MAX_OFFSET || m_pos[3] == ip[3]) +- goto try_match; +- DINDEX2(dindex,ip); +-#endif +- GINDEX(m_pos,m_off,dict,dindex,in); +- if (LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,M4_MAX_OFFSET)) +- goto literal; +- if (m_off <= M2_MAX_OFFSET || m_pos[3] == ip[3]) +- goto try_match; +- goto literal; +- +-try_match: +-#if 1 && defined(LZO_UNALIGNED_OK_2) +- if (* (const lzo_ushortp) (const lzo_voidp) m_pos != * (const lzo_ushortp) (const lzo_voidp) ip) +-#else +- if (m_pos[0] != ip[0] || m_pos[1] != ip[1]) +-#endif +- { +- } +- else +- { +- if __lzo_likely(m_pos[2] == ip[2]) +- { +-#if 0 +- if (m_off <= M2_MAX_OFFSET) +- goto match; +- if (lit <= 3) +- goto match; +- if (lit == 3) +- { +- assert(op - 2 > out); op[-2] |= LZO_BYTE(3); +- *op++ = *ii++; *op++ = *ii++; *op++ = *ii++; +- goto code_match; +- } +- if (m_pos[3] == ip[3]) +-#endif +- goto match; +- } +- else +- { +-#if 0 +-#if 0 +- if (m_off <= M1_MAX_OFFSET && lit > 0 && lit <= 3) +-#else +- if (m_off <= M1_MAX_OFFSET && lit == 3) +-#endif +- { +- register lzo_uint t; +- +- t = lit; +- assert(op - 2 > out); op[-2] |= LZO_BYTE(t); +- do *op++ = *ii++; while (--t > 0); +- assert(ii == ip); +- m_off -= 1; +- *op++ = LZO_BYTE(M1_MARKER | ((m_off & 3) << 2)); +- *op++ = LZO_BYTE(m_off >> 2); +- ip += 2; +- goto match_done; +- } +-#endif +- } +- } +- +-literal: +- UPDATE_I(dict,0,dindex,ip,in); +- ++ip; +- if __lzo_unlikely(ip >= ip_end) +- break; +- continue; +- +-match: +- UPDATE_I(dict,0,dindex,ip,in); +- if (pd(ip,ii) > 0) +- { +- register lzo_uint t = pd(ip,ii); +- +- if (t <= 3) +- { +- assert(op - 2 > out); +- op[-2] |= LZO_BYTE(t); +- } +- else if (t <= 18) +- *op++ = LZO_BYTE(t - 3); +- else +- { +- register lzo_uint tt = t - 18; +- +- *op++ = 0; +- while (tt > 255) +- { +- tt -= 255; +- *op++ = 0; +- } +- assert(tt > 0); +- *op++ = LZO_BYTE(tt); +- } +- do *op++ = *ii++; while (--t > 0); +- } +- +- assert(ii == ip); +- ip += 3; +- if (m_pos[3] != *ip++ || m_pos[4] != *ip++ || m_pos[5] != *ip++ || +- m_pos[6] != *ip++ || m_pos[7] != *ip++ || m_pos[8] != *ip++ +-#ifdef LZO1Y +- || m_pos[ 9] != *ip++ || m_pos[10] != *ip++ || m_pos[11] != *ip++ +- || m_pos[12] != *ip++ || m_pos[13] != *ip++ || m_pos[14] != *ip++ +-#endif +- ) +- { +- --ip; +- m_len = pd(ip, ii); +- assert(m_len >= 3); assert(m_len <= M2_MAX_LEN); +- +- if (m_off <= M2_MAX_OFFSET) +- { +- m_off -= 1; +-#if defined(LZO1X) +- *op++ = LZO_BYTE(((m_len - 1) << 5) | ((m_off & 7) << 2)); +- *op++ = LZO_BYTE(m_off >> 3); +-#elif defined(LZO1Y) +- *op++ = LZO_BYTE(((m_len + 1) << 4) | ((m_off & 3) << 2)); +- *op++ = LZO_BYTE(m_off >> 2); +-#endif +- } +- else if (m_off <= M3_MAX_OFFSET) +- { +- m_off -= 1; +- *op++ = LZO_BYTE(M3_MARKER | (m_len - 2)); +- goto m3_m4_offset; +- } +- else +-#if defined(LZO1X) +- { +- m_off -= 0x4000; +- assert(m_off > 0); assert(m_off <= 0x7fff); +- *op++ = LZO_BYTE(M4_MARKER | +- ((m_off & 0x4000) >> 11) | (m_len - 2)); +- goto m3_m4_offset; +- } +-#elif defined(LZO1Y) +- goto m4_match; +-#endif +- } +- else +- { +- { +- const lzo_bytep end = in_end; +- const lzo_bytep m = m_pos + M2_MAX_LEN + 1; +- while (ip < end && *m == *ip) +- m++, ip++; +- m_len = pd(ip, ii); +- } +- assert(m_len > M2_MAX_LEN); +- +- if (m_off <= M3_MAX_OFFSET) +- { +- m_off -= 1; +- if (m_len <= 33) +- *op++ = LZO_BYTE(M3_MARKER | (m_len - 2)); +- else +- { +- m_len -= 33; +- *op++ = M3_MARKER | 0; +- goto m3_m4_len; +- } +- } +- else +- { +-#if defined(LZO1Y) +-m4_match: +-#endif +- m_off -= 0x4000; +- assert(m_off > 0); assert(m_off <= 0x7fff); +- if (m_len <= M4_MAX_LEN) +- *op++ = LZO_BYTE(M4_MARKER | +- ((m_off & 0x4000) >> 11) | (m_len - 2)); +- else +- { +- m_len -= M4_MAX_LEN; +- *op++ = LZO_BYTE(M4_MARKER | ((m_off & 0x4000) >> 11)); +-m3_m4_len: +- while (m_len > 255) +- { +- m_len -= 255; +- *op++ = 0; +- } +- assert(m_len > 0); +- *op++ = LZO_BYTE(m_len); +- } +- } +- +-m3_m4_offset: +- *op++ = LZO_BYTE((m_off & 63) << 2); +- *op++ = LZO_BYTE(m_off >> 6); +- } +- +-#if 0 +-match_done: +-#endif +- ii = ip; +- if __lzo_unlikely(ip >= ip_end) +- break; +- } +- +- *out_len = pd(op, out); +- return pd(in_end,ii); +-} +- +-LZO_PUBLIC(int) +-DO_COMPRESS ( const lzo_bytep in , lzo_uint in_len, +- lzo_bytep out, lzo_uintp out_len, +- lzo_voidp wrkmem ) +-{ +- lzo_bytep op = out; +- lzo_uint t; +- +- if __lzo_unlikely(in_len <= M2_MAX_LEN + 5) +- t = in_len; +- else +- { +- t = do_compress(in,in_len,op,out_len,wrkmem); +- op += *out_len; +- } +- +- if (t > 0) +- { +- const lzo_bytep ii = in + in_len - t; +- +- if (op == out && t <= 238) +- *op++ = LZO_BYTE(17 + t); +- else if (t <= 3) +- op[-2] |= LZO_BYTE(t); +- else if (t <= 18) +- *op++ = LZO_BYTE(t - 3); +- else +- { +- lzo_uint tt = t - 18; +- +- *op++ = 0; +- while (tt > 255) +- { +- tt -= 255; +- *op++ = 0; +- } +- assert(tt > 0); +- *op++ = LZO_BYTE(tt); +- } +- do *op++ = *ii++; while (--t > 0); +- } +- +- *op++ = M4_MARKER | 1; +- *op++ = 0; +- *op++ = 0; +- +- *out_len = pd(op, out); +- return LZO_E_OK; +-} +- +-#endif +- +-#undef do_compress +-#undef DO_COMPRESS +-#undef LZO_HASH +- +-#undef LZO_TEST_OVERRUN +-#undef DO_DECOMPRESS +-#define DO_DECOMPRESS lzo1x_decompress +- +-#if !defined(MINILZO_CFG_SKIP_LZO1X_DECOMPRESS) +- +-#if defined(LZO_TEST_OVERRUN) +-# if !defined(LZO_TEST_OVERRUN_INPUT) +-# define LZO_TEST_OVERRUN_INPUT 2 +-# endif +-# if !defined(LZO_TEST_OVERRUN_OUTPUT) +-# define LZO_TEST_OVERRUN_OUTPUT 2 +-# endif +-# if !defined(LZO_TEST_OVERRUN_LOOKBEHIND) +-# define LZO_TEST_OVERRUN_LOOKBEHIND 1 +-# endif +-#endif +- +-#undef TEST_IP +-#undef TEST_OP +-#undef TEST_LB +-#undef TEST_LBO +-#undef NEED_IP +-#undef NEED_OP +-#undef HAVE_TEST_IP +-#undef HAVE_TEST_OP +-#undef HAVE_NEED_IP +-#undef HAVE_NEED_OP +-#undef HAVE_ANY_IP +-#undef HAVE_ANY_OP +- +-#if defined(LZO_TEST_OVERRUN_INPUT) +-# if (LZO_TEST_OVERRUN_INPUT >= 1) +-# define TEST_IP (ip < ip_end) +-# endif +-# if (LZO_TEST_OVERRUN_INPUT >= 2) +-# define NEED_IP(x) \ +- if ((lzo_uint)(ip_end - ip) < (lzo_uint)(x)) goto input_overrun +-# endif +-#endif +- +-#if defined(LZO_TEST_OVERRUN_OUTPUT) +-# if (LZO_TEST_OVERRUN_OUTPUT >= 1) +-# define TEST_OP (op <= op_end) +-# endif +-# if (LZO_TEST_OVERRUN_OUTPUT >= 2) +-# undef TEST_OP +-# define NEED_OP(x) \ +- if ((lzo_uint)(op_end - op) < (lzo_uint)(x)) goto output_overrun +-# endif +-#endif +- +-#if defined(LZO_TEST_OVERRUN_LOOKBEHIND) +-# define TEST_LB(m_pos) if (m_pos < out || m_pos >= op) goto lookbehind_overrun +-# define TEST_LBO(m_pos,o) if (m_pos < out || m_pos >= op - (o)) goto lookbehind_overrun +-#else +-# define TEST_LB(m_pos) ((void) 0) +-# define TEST_LBO(m_pos,o) ((void) 0) +-#endif +- +-#if !defined(LZO_EOF_CODE) && !defined(TEST_IP) +-# define TEST_IP (ip < ip_end) +-#endif +- +-#if defined(TEST_IP) +-# define HAVE_TEST_IP 1 +-#else +-# define TEST_IP 1 +-#endif +-#if defined(TEST_OP) +-# define HAVE_TEST_OP 1 +-#else +-# define TEST_OP 1 +-#endif +- +-#if defined(NEED_IP) +-# define HAVE_NEED_IP 1 +-#else +-# define NEED_IP(x) ((void) 0) +-#endif +-#if defined(NEED_OP) +-# define HAVE_NEED_OP 1 +-#else +-# define NEED_OP(x) ((void) 0) +-#endif +- +-#if defined(HAVE_TEST_IP) || defined(HAVE_NEED_IP) +-# define HAVE_ANY_IP 1 +-#endif +-#if defined(HAVE_TEST_OP) || defined(HAVE_NEED_OP) +-# define HAVE_ANY_OP 1 +-#endif +- +-#if defined(DO_DECOMPRESS) +-LZO_PUBLIC(int) +-DO_DECOMPRESS ( const lzo_bytep in , lzo_uint in_len, +- lzo_bytep out, lzo_uintp out_len, +- lzo_voidp wrkmem ) +-#endif +-{ +- register lzo_bytep op; +- register const lzo_bytep ip; +- register lzo_uint t; +-#if defined(COPY_DICT) +- lzo_uint m_off; +- const lzo_bytep dict_end; +-#else +- register const lzo_bytep m_pos; +-#endif +- +- const lzo_bytep const ip_end = in + in_len; +-#if defined(HAVE_ANY_OP) +- lzo_bytep const op_end = out + *out_len; +-#endif +-#if defined(LZO1Z) +- lzo_uint last_m_off = 0; +-#endif +- +- LZO_UNUSED(wrkmem); +- +-#if defined(COPY_DICT) +- if (dict) +- { +- if (dict_len > M4_MAX_OFFSET) +- { +- dict += dict_len - M4_MAX_OFFSET; +- dict_len = M4_MAX_OFFSET; +- } +- dict_end = dict + dict_len; +- } +- else +- { +- dict_len = 0; +- dict_end = NULL; +- } +-#endif +- +- *out_len = 0; +- +- op = out; +- ip = in; +- +- if (*ip > 17) +- { +- t = *ip++ - 17; +- if (t < 4) +- goto match_next; +- assert(t > 0); NEED_OP(t); NEED_IP(t+1); +- do *op++ = *ip++; while (--t > 0); +- goto first_literal_run; +- } +- +- while (TEST_IP && TEST_OP) +- { +- t = *ip++; +- if (t >= 16) +- goto match; +- if (t == 0) +- { +- NEED_IP(1); +- while (*ip == 0) +- { +- t += 255; +- ip++; +- NEED_IP(1); +- } +- t += 15 + *ip++; +- } +- assert(t > 0); NEED_OP(t+3); NEED_IP(t+4); +-#if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4) +-#if !defined(LZO_UNALIGNED_OK_4) +- if (PTR_ALIGNED2_4(op,ip)) +- { +-#endif +- COPY4(op,ip); +- op += 4; ip += 4; +- if (--t > 0) +- { +- if (t >= 4) +- { +- do { +- COPY4(op,ip); +- op += 4; ip += 4; t -= 4; +- } while (t >= 4); +- if (t > 0) do *op++ = *ip++; while (--t > 0); +- } +- else +- do *op++ = *ip++; while (--t > 0); +- } +-#if !defined(LZO_UNALIGNED_OK_4) +- } +- else +-#endif +-#endif +-#if !defined(LZO_UNALIGNED_OK_4) +- { +- *op++ = *ip++; *op++ = *ip++; *op++ = *ip++; +- do *op++ = *ip++; while (--t > 0); +- } +-#endif +- +-first_literal_run: +- +- t = *ip++; +- if (t >= 16) +- goto match; +-#if defined(COPY_DICT) +-#if defined(LZO1Z) +- m_off = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); +- last_m_off = m_off; +-#else +- m_off = (1 + M2_MAX_OFFSET) + (t >> 2) + (*ip++ << 2); +-#endif +- NEED_OP(3); +- t = 3; COPY_DICT(t,m_off) +-#else +-#if defined(LZO1Z) +- t = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); +- m_pos = op - t; +- last_m_off = t; +-#else +- m_pos = op - (1 + M2_MAX_OFFSET); +- m_pos -= t >> 2; +- m_pos -= *ip++ << 2; +-#endif +- TEST_LB(m_pos); NEED_OP(3); +- *op++ = *m_pos++; *op++ = *m_pos++; *op++ = *m_pos; +-#endif +- goto match_done; +- +- do { +-match: +- if (t >= 64) +- { +-#if defined(COPY_DICT) +-#if defined(LZO1X) +- m_off = 1 + ((t >> 2) & 7) + (*ip++ << 3); +- t = (t >> 5) - 1; +-#elif defined(LZO1Y) +- m_off = 1 + ((t >> 2) & 3) + (*ip++ << 2); +- t = (t >> 4) - 3; +-#elif defined(LZO1Z) +- m_off = t & 0x1f; +- if (m_off >= 0x1c) +- m_off = last_m_off; +- else +- { +- m_off = 1 + (m_off << 6) + (*ip++ >> 2); +- last_m_off = m_off; +- } +- t = (t >> 5) - 1; +-#endif +-#else +-#if defined(LZO1X) +- m_pos = op - 1; +- m_pos -= (t >> 2) & 7; +- m_pos -= *ip++ << 3; +- t = (t >> 5) - 1; +-#elif defined(LZO1Y) +- m_pos = op - 1; +- m_pos -= (t >> 2) & 3; +- m_pos -= *ip++ << 2; +- t = (t >> 4) - 3; +-#elif defined(LZO1Z) +- { +- lzo_uint off = t & 0x1f; +- m_pos = op; +- if (off >= 0x1c) +- { +- assert(last_m_off > 0); +- m_pos -= last_m_off; +- } +- else +- { +- off = 1 + (off << 6) + (*ip++ >> 2); +- m_pos -= off; +- last_m_off = off; +- } +- } +- t = (t >> 5) - 1; +-#endif +- TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1); +- goto copy_match; +-#endif +- } +- else if (t >= 32) +- { +- t &= 31; +- if (t == 0) +- { +- NEED_IP(1); +- while (*ip == 0) +- { +- t += 255; +- ip++; +- NEED_IP(1); +- } +- t += 31 + *ip++; +- } +-#if defined(COPY_DICT) +-#if defined(LZO1Z) +- m_off = 1 + (ip[0] << 6) + (ip[1] >> 2); +- last_m_off = m_off; +-#else +- m_off = 1 + (ip[0] >> 2) + (ip[1] << 6); +-#endif +-#else +-#if defined(LZO1Z) +- { +- lzo_uint off = 1 + (ip[0] << 6) + (ip[1] >> 2); +- m_pos = op - off; +- last_m_off = off; +- } +-#elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN) +- m_pos = op - 1; +- m_pos -= (* (const lzo_ushortp) (const lzo_voidp) ip) >> 2; +-#else +- m_pos = op - 1; +- m_pos -= (ip[0] >> 2) + (ip[1] << 6); +-#endif +-#endif +- ip += 2; +- } +- else if (t >= 16) +- { +-#if defined(COPY_DICT) +- m_off = (t & 8) << 11; +-#else +- m_pos = op; +- m_pos -= (t & 8) << 11; +-#endif +- t &= 7; +- if (t == 0) +- { +- NEED_IP(1); +- while (*ip == 0) +- { +- t += 255; +- ip++; +- NEED_IP(1); +- } +- t += 7 + *ip++; +- } +-#if defined(COPY_DICT) +-#if defined(LZO1Z) +- m_off += (ip[0] << 6) + (ip[1] >> 2); +-#else +- m_off += (ip[0] >> 2) + (ip[1] << 6); +-#endif +- ip += 2; +- if (m_off == 0) +- goto eof_found; +- m_off += 0x4000; +-#if defined(LZO1Z) +- last_m_off = m_off; +-#endif +-#else +-#if defined(LZO1Z) +- m_pos -= (ip[0] << 6) + (ip[1] >> 2); +-#elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN) +- m_pos -= (* (const lzo_ushortp) (const lzo_voidp) ip) >> 2; +-#else +- m_pos -= (ip[0] >> 2) + (ip[1] << 6); +-#endif +- ip += 2; +- if (m_pos == op) +- goto eof_found; +- m_pos -= 0x4000; +-#if defined(LZO1Z) +- last_m_off = pd((const lzo_bytep)op, m_pos); +-#endif +-#endif +- } +- else +- { +-#if defined(COPY_DICT) +-#if defined(LZO1Z) +- m_off = 1 + (t << 6) + (*ip++ >> 2); +- last_m_off = m_off; +-#else +- m_off = 1 + (t >> 2) + (*ip++ << 2); +-#endif +- NEED_OP(2); +- t = 2; COPY_DICT(t,m_off) +-#else +-#if defined(LZO1Z) +- t = 1 + (t << 6) + (*ip++ >> 2); +- m_pos = op - t; +- last_m_off = t; +-#else +- m_pos = op - 1; +- m_pos -= t >> 2; +- m_pos -= *ip++ << 2; +-#endif +- TEST_LB(m_pos); NEED_OP(2); +- *op++ = *m_pos++; *op++ = *m_pos; +-#endif +- goto match_done; +- } +- +-#if defined(COPY_DICT) +- +- NEED_OP(t+3-1); +- t += 3-1; COPY_DICT(t,m_off) +- +-#else +- +- TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1); +-#if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4) +-#if !defined(LZO_UNALIGNED_OK_4) +- if (t >= 2 * 4 - (3 - 1) && PTR_ALIGNED2_4(op,m_pos)) +- { +- assert((op - m_pos) >= 4); +-#else +- if (t >= 2 * 4 - (3 - 1) && (op - m_pos) >= 4) +- { +-#endif +- COPY4(op,m_pos); +- op += 4; m_pos += 4; t -= 4 - (3 - 1); +- do { +- COPY4(op,m_pos); +- op += 4; m_pos += 4; t -= 4; +- } while (t >= 4); +- if (t > 0) do *op++ = *m_pos++; while (--t > 0); +- } +- else +-#endif +- { +-copy_match: +- *op++ = *m_pos++; *op++ = *m_pos++; +- do *op++ = *m_pos++; while (--t > 0); +- } +- +-#endif +- +-match_done: +-#if defined(LZO1Z) +- t = ip[-1] & 3; +-#else +- t = ip[-2] & 3; +-#endif +- if (t == 0) +- break; +- +-match_next: +- assert(t > 0); assert(t < 4); NEED_OP(t); NEED_IP(t+1); +-#if 0 +- do *op++ = *ip++; while (--t > 0); +-#else +- *op++ = *ip++; +- if (t > 1) { *op++ = *ip++; if (t > 2) { *op++ = *ip++; } } +-#endif +- t = *ip++; +- } while (TEST_IP && TEST_OP); +- } +- +-#if defined(HAVE_TEST_IP) || defined(HAVE_TEST_OP) +- *out_len = pd(op, out); +- return LZO_E_EOF_NOT_FOUND; +-#endif +- +-eof_found: +- assert(t == 1); +- *out_len = pd(op, out); +- return (ip == ip_end ? LZO_E_OK : +- (ip < ip_end ? LZO_E_INPUT_NOT_CONSUMED : LZO_E_INPUT_OVERRUN)); +- +-#if defined(HAVE_NEED_IP) +-input_overrun: +- *out_len = pd(op, out); +- return LZO_E_INPUT_OVERRUN; +-#endif +- +-#if defined(HAVE_NEED_OP) +-output_overrun: +- *out_len = pd(op, out); +- return LZO_E_OUTPUT_OVERRUN; +-#endif +- +-#if defined(LZO_TEST_OVERRUN_LOOKBEHIND) +-lookbehind_overrun: +- *out_len = pd(op, out); +- return LZO_E_LOOKBEHIND_OVERRUN; +-#endif +-} +- +-#endif +- +-#define LZO_TEST_OVERRUN 1 +-#undef DO_DECOMPRESS +-#define DO_DECOMPRESS lzo1x_decompress_safe +- +-#if !defined(MINILZO_CFG_SKIP_LZO1X_DECOMPRESS_SAFE) +- +-#if defined(LZO_TEST_OVERRUN) +-# if !defined(LZO_TEST_OVERRUN_INPUT) +-# define LZO_TEST_OVERRUN_INPUT 2 +-# endif +-# if !defined(LZO_TEST_OVERRUN_OUTPUT) +-# define LZO_TEST_OVERRUN_OUTPUT 2 +-# endif +-# if !defined(LZO_TEST_OVERRUN_LOOKBEHIND) +-# define LZO_TEST_OVERRUN_LOOKBEHIND 1 +-# endif +-#endif +- +-#undef TEST_IP +-#undef TEST_OP +-#undef TEST_LB +-#undef TEST_LBO +-#undef NEED_IP +-#undef NEED_OP +-#undef HAVE_TEST_IP +-#undef HAVE_TEST_OP +-#undef HAVE_NEED_IP +-#undef HAVE_NEED_OP +-#undef HAVE_ANY_IP +-#undef HAVE_ANY_OP +- +-#if defined(LZO_TEST_OVERRUN_INPUT) +-# if (LZO_TEST_OVERRUN_INPUT >= 1) +-# define TEST_IP (ip < ip_end) +-# endif +-# if (LZO_TEST_OVERRUN_INPUT >= 2) +-# define NEED_IP(x) \ +- if ((lzo_uint)(ip_end - ip) < (lzo_uint)(x)) goto input_overrun +-# endif +-#endif +- +-#if defined(LZO_TEST_OVERRUN_OUTPUT) +-# if (LZO_TEST_OVERRUN_OUTPUT >= 1) +-# define TEST_OP (op <= op_end) +-# endif +-# if (LZO_TEST_OVERRUN_OUTPUT >= 2) +-# undef TEST_OP +-# define NEED_OP(x) \ +- if ((lzo_uint)(op_end - op) < (lzo_uint)(x)) goto output_overrun +-# endif +-#endif +- +-#if defined(LZO_TEST_OVERRUN_LOOKBEHIND) +-# define TEST_LB(m_pos) if (m_pos < out || m_pos >= op) goto lookbehind_overrun +-# define TEST_LBO(m_pos,o) if (m_pos < out || m_pos >= op - (o)) goto lookbehind_overrun +-#else +-# define TEST_LB(m_pos) ((void) 0) +-# define TEST_LBO(m_pos,o) ((void) 0) +-#endif +- +-#if !defined(LZO_EOF_CODE) && !defined(TEST_IP) +-# define TEST_IP (ip < ip_end) +-#endif +- +-#if defined(TEST_IP) +-# define HAVE_TEST_IP 1 +-#else +-# define TEST_IP 1 +-#endif +-#if defined(TEST_OP) +-# define HAVE_TEST_OP 1 +-#else +-# define TEST_OP 1 +-#endif +- +-#if defined(NEED_IP) +-# define HAVE_NEED_IP 1 +-#else +-# define NEED_IP(x) ((void) 0) +-#endif +-#if defined(NEED_OP) +-# define HAVE_NEED_OP 1 +-#else +-# define NEED_OP(x) ((void) 0) +-#endif +- +-#if defined(HAVE_TEST_IP) || defined(HAVE_NEED_IP) +-# define HAVE_ANY_IP 1 +-#endif +-#if defined(HAVE_TEST_OP) || defined(HAVE_NEED_OP) +-# define HAVE_ANY_OP 1 +-#endif +- +-#if defined(DO_DECOMPRESS) +-LZO_PUBLIC(int) +-DO_DECOMPRESS ( const lzo_bytep in , lzo_uint in_len, +- lzo_bytep out, lzo_uintp out_len, +- lzo_voidp wrkmem ) +-#endif +-{ +- register lzo_bytep op; +- register const lzo_bytep ip; +- register lzo_uint t; +-#if defined(COPY_DICT) +- lzo_uint m_off; +- const lzo_bytep dict_end; +-#else +- register const lzo_bytep m_pos; +-#endif +- +- const lzo_bytep const ip_end = in + in_len; +-#if defined(HAVE_ANY_OP) +- lzo_bytep const op_end = out + *out_len; +-#endif +-#if defined(LZO1Z) +- lzo_uint last_m_off = 0; +-#endif +- +- LZO_UNUSED(wrkmem); +- +-#if defined(COPY_DICT) +- if (dict) +- { +- if (dict_len > M4_MAX_OFFSET) +- { +- dict += dict_len - M4_MAX_OFFSET; +- dict_len = M4_MAX_OFFSET; +- } +- dict_end = dict + dict_len; +- } +- else +- { +- dict_len = 0; +- dict_end = NULL; +- } +-#endif +- +- *out_len = 0; +- +- op = out; +- ip = in; +- +- if (*ip > 17) +- { +- t = *ip++ - 17; +- if (t < 4) +- goto match_next; +- assert(t > 0); NEED_OP(t); NEED_IP(t+1); +- do *op++ = *ip++; while (--t > 0); +- goto first_literal_run; +- } +- +- while (TEST_IP && TEST_OP) +- { +- t = *ip++; +- if (t >= 16) +- goto match; +- if (t == 0) +- { +- NEED_IP(1); +- while (*ip == 0) +- { +- t += 255; +- ip++; +- NEED_IP(1); +- } +- t += 15 + *ip++; +- } +- assert(t > 0); NEED_OP(t+3); NEED_IP(t+4); +-#if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4) +-#if !defined(LZO_UNALIGNED_OK_4) +- if (PTR_ALIGNED2_4(op,ip)) +- { +-#endif +- COPY4(op,ip); +- op += 4; ip += 4; +- if (--t > 0) +- { +- if (t >= 4) +- { +- do { +- COPY4(op,ip); +- op += 4; ip += 4; t -= 4; +- } while (t >= 4); +- if (t > 0) do *op++ = *ip++; while (--t > 0); +- } +- else +- do *op++ = *ip++; while (--t > 0); +- } +-#if !defined(LZO_UNALIGNED_OK_4) +- } +- else +-#endif +-#endif +-#if !defined(LZO_UNALIGNED_OK_4) +- { +- *op++ = *ip++; *op++ = *ip++; *op++ = *ip++; +- do *op++ = *ip++; while (--t > 0); +- } +-#endif +- +-first_literal_run: +- +- t = *ip++; +- if (t >= 16) +- goto match; +-#if defined(COPY_DICT) +-#if defined(LZO1Z) +- m_off = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); +- last_m_off = m_off; +-#else +- m_off = (1 + M2_MAX_OFFSET) + (t >> 2) + (*ip++ << 2); +-#endif +- NEED_OP(3); +- t = 3; COPY_DICT(t,m_off) +-#else +-#if defined(LZO1Z) +- t = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); +- m_pos = op - t; +- last_m_off = t; +-#else +- m_pos = op - (1 + M2_MAX_OFFSET); +- m_pos -= t >> 2; +- m_pos -= *ip++ << 2; +-#endif +- TEST_LB(m_pos); NEED_OP(3); +- *op++ = *m_pos++; *op++ = *m_pos++; *op++ = *m_pos; +-#endif +- goto match_done; +- +- do { +-match: +- if (t >= 64) +- { +-#if defined(COPY_DICT) +-#if defined(LZO1X) +- m_off = 1 + ((t >> 2) & 7) + (*ip++ << 3); +- t = (t >> 5) - 1; +-#elif defined(LZO1Y) +- m_off = 1 + ((t >> 2) & 3) + (*ip++ << 2); +- t = (t >> 4) - 3; +-#elif defined(LZO1Z) +- m_off = t & 0x1f; +- if (m_off >= 0x1c) +- m_off = last_m_off; +- else +- { +- m_off = 1 + (m_off << 6) + (*ip++ >> 2); +- last_m_off = m_off; +- } +- t = (t >> 5) - 1; +-#endif +-#else +-#if defined(LZO1X) +- m_pos = op - 1; +- m_pos -= (t >> 2) & 7; +- m_pos -= *ip++ << 3; +- t = (t >> 5) - 1; +-#elif defined(LZO1Y) +- m_pos = op - 1; +- m_pos -= (t >> 2) & 3; +- m_pos -= *ip++ << 2; +- t = (t >> 4) - 3; +-#elif defined(LZO1Z) +- { +- lzo_uint off = t & 0x1f; +- m_pos = op; +- if (off >= 0x1c) +- { +- assert(last_m_off > 0); +- m_pos -= last_m_off; +- } +- else +- { +- off = 1 + (off << 6) + (*ip++ >> 2); +- m_pos -= off; +- last_m_off = off; +- } +- } +- t = (t >> 5) - 1; +-#endif +- TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1); +- goto copy_match; +-#endif +- } +- else if (t >= 32) +- { +- t &= 31; +- if (t == 0) +- { +- NEED_IP(1); +- while (*ip == 0) +- { +- t += 255; +- ip++; +- NEED_IP(1); +- } +- t += 31 + *ip++; +- } +-#if defined(COPY_DICT) +-#if defined(LZO1Z) +- m_off = 1 + (ip[0] << 6) + (ip[1] >> 2); +- last_m_off = m_off; +-#else +- m_off = 1 + (ip[0] >> 2) + (ip[1] << 6); +-#endif +-#else +-#if defined(LZO1Z) +- { +- lzo_uint off = 1 + (ip[0] << 6) + (ip[1] >> 2); +- m_pos = op - off; +- last_m_off = off; +- } +-#elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN) +- m_pos = op - 1; +- m_pos -= (* (const lzo_ushortp) (const lzo_voidp) ip) >> 2; +-#else +- m_pos = op - 1; +- m_pos -= (ip[0] >> 2) + (ip[1] << 6); +-#endif +-#endif +- ip += 2; +- } +- else if (t >= 16) +- { +-#if defined(COPY_DICT) +- m_off = (t & 8) << 11; +-#else +- m_pos = op; +- m_pos -= (t & 8) << 11; +-#endif +- t &= 7; +- if (t == 0) +- { +- NEED_IP(1); +- while (*ip == 0) +- { +- t += 255; +- ip++; +- NEED_IP(1); +- } +- t += 7 + *ip++; +- } +-#if defined(COPY_DICT) +-#if defined(LZO1Z) +- m_off += (ip[0] << 6) + (ip[1] >> 2); +-#else +- m_off += (ip[0] >> 2) + (ip[1] << 6); +-#endif +- ip += 2; +- if (m_off == 0) +- goto eof_found; +- m_off += 0x4000; +-#if defined(LZO1Z) +- last_m_off = m_off; +-#endif +-#else +-#if defined(LZO1Z) +- m_pos -= (ip[0] << 6) + (ip[1] >> 2); +-#elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN) +- m_pos -= (* (const lzo_ushortp) (const lzo_voidp) ip) >> 2; +-#else +- m_pos -= (ip[0] >> 2) + (ip[1] << 6); +-#endif +- ip += 2; +- if (m_pos == op) +- goto eof_found; +- m_pos -= 0x4000; +-#if defined(LZO1Z) +- last_m_off = pd((const lzo_bytep)op, m_pos); +-#endif +-#endif +- } +- else +- { +-#if defined(COPY_DICT) +-#if defined(LZO1Z) +- m_off = 1 + (t << 6) + (*ip++ >> 2); +- last_m_off = m_off; +-#else +- m_off = 1 + (t >> 2) + (*ip++ << 2); +-#endif +- NEED_OP(2); +- t = 2; COPY_DICT(t,m_off) +-#else +-#if defined(LZO1Z) +- t = 1 + (t << 6) + (*ip++ >> 2); +- m_pos = op - t; +- last_m_off = t; +-#else +- m_pos = op - 1; +- m_pos -= t >> 2; +- m_pos -= *ip++ << 2; +-#endif +- TEST_LB(m_pos); NEED_OP(2); +- *op++ = *m_pos++; *op++ = *m_pos; +-#endif +- goto match_done; +- } +- +-#if defined(COPY_DICT) +- +- NEED_OP(t+3-1); +- t += 3-1; COPY_DICT(t,m_off) +- +-#else +- +- TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1); +-#if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4) +-#if !defined(LZO_UNALIGNED_OK_4) +- if (t >= 2 * 4 - (3 - 1) && PTR_ALIGNED2_4(op,m_pos)) +- { +- assert((op - m_pos) >= 4); +-#else +- if (t >= 2 * 4 - (3 - 1) && (op - m_pos) >= 4) +- { +-#endif +- COPY4(op,m_pos); +- op += 4; m_pos += 4; t -= 4 - (3 - 1); +- do { +- COPY4(op,m_pos); +- op += 4; m_pos += 4; t -= 4; +- } while (t >= 4); +- if (t > 0) do *op++ = *m_pos++; while (--t > 0); +- } +- else +-#endif +- { +-copy_match: +- *op++ = *m_pos++; *op++ = *m_pos++; +- do *op++ = *m_pos++; while (--t > 0); +- } +- +-#endif +- +-match_done: +-#if defined(LZO1Z) +- t = ip[-1] & 3; +-#else +- t = ip[-2] & 3; +-#endif +- if (t == 0) +- break; +- +-match_next: +- assert(t > 0); assert(t < 4); NEED_OP(t); NEED_IP(t+1); +-#if 0 +- do *op++ = *ip++; while (--t > 0); +-#else +- *op++ = *ip++; +- if (t > 1) { *op++ = *ip++; if (t > 2) { *op++ = *ip++; } } +-#endif +- t = *ip++; +- } while (TEST_IP && TEST_OP); +- } +- +-#if defined(HAVE_TEST_IP) || defined(HAVE_TEST_OP) +- *out_len = pd(op, out); +- return LZO_E_EOF_NOT_FOUND; +-#endif +- +-eof_found: +- assert(t == 1); +- *out_len = pd(op, out); +- return (ip == ip_end ? LZO_E_OK : +- (ip < ip_end ? LZO_E_INPUT_NOT_CONSUMED : LZO_E_INPUT_OVERRUN)); +- +-#if defined(HAVE_NEED_IP) +-input_overrun: +- *out_len = pd(op, out); +- return LZO_E_INPUT_OVERRUN; +-#endif +- +-#if defined(HAVE_NEED_OP) +-output_overrun: +- *out_len = pd(op, out); +- return LZO_E_OUTPUT_OVERRUN; +-#endif +- +-#if defined(LZO_TEST_OVERRUN_LOOKBEHIND) +-lookbehind_overrun: +- *out_len = pd(op, out); +- return LZO_E_LOOKBEHIND_OVERRUN; +-#endif +-} +- +-#endif +- +-/***** End of minilzo.c *****/ +- +diff -urN remmina-plugins/vnc/libvncserver/common/minilzo.h remmina-plugins/vnc/libvncserver/common/minilzo.h +--- remmina-plugins/vnc/libvncserver/common/minilzo.h 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/common/minilzo.h 1970-01-01 10:00:00.000000000 +1000 +@@ -1,108 +0,0 @@ +-/* minilzo.h -- mini subset of the LZO real-time data compression library +- +- This file is part of the LZO real-time data compression library. +- +- Copyright (C) 2010 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2009 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2008 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2007 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2006 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2005 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2004 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2003 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer +- Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer +- All Rights Reserved. +- +- The LZO library is free software; you can 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. +- +- The LZO library 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 the LZO library; see the file COPYING. +- If not, write to the Free Software Foundation, Inc., +- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +- +- Markus F.X.J. Oberhumer +- <markus@oberhumer.com> +- http://www.oberhumer.com/opensource/lzo/ +- */ +- +-/* +- * NOTE: +- * the full LZO package can be found at +- * http://www.oberhumer.com/opensource/lzo/ +- */ +- +- +-#ifndef __MINILZO_H +-#define __MINILZO_H 1 +- +-#define MINILZO_VERSION 0x2040 +- +-#ifdef __LZOCONF_H +-# error "you cannot use both LZO and miniLZO" +-#endif +- +-#undef LZO_HAVE_CONFIG_H +-#include "lzoconf.h" +- +-#if !defined(LZO_VERSION) || (LZO_VERSION != MINILZO_VERSION) +-# error "version mismatch in header files" +-#endif +- +- +-#ifdef __cplusplus +-extern "C" { +-#endif +- +- +-/*********************************************************************** +-// +-************************************************************************/ +- +-/* Memory required for the wrkmem parameter. +- * When the required size is 0, you can also pass a NULL pointer. +- */ +- +-#define LZO1X_MEM_COMPRESS LZO1X_1_MEM_COMPRESS +-#define LZO1X_1_MEM_COMPRESS ((lzo_uint32) (16384L * lzo_sizeof_dict_t)) +-#define LZO1X_MEM_DECOMPRESS (0) +- +- +-/* compression */ +-LZO_EXTERN(int) +-lzo1x_1_compress ( const lzo_bytep src, lzo_uint src_len, +- lzo_bytep dst, lzo_uintp dst_len, +- lzo_voidp wrkmem ); +- +-/* decompression */ +-LZO_EXTERN(int) +-lzo1x_decompress ( const lzo_bytep src, lzo_uint src_len, +- lzo_bytep dst, lzo_uintp dst_len, +- lzo_voidp wrkmem /* NOT USED */ ); +- +-/* safe decompression with overrun testing */ +-LZO_EXTERN(int) +-lzo1x_decompress_safe ( const lzo_bytep src, lzo_uint src_len, +- lzo_bytep dst, lzo_uintp dst_len, +- lzo_voidp wrkmem /* NOT USED */ ); +- +- +-#ifdef __cplusplus +-} /* extern "C" */ +-#endif +- +-#endif /* already included */ +- +diff -urN remmina-plugins/vnc/libvncserver/common/vncauth.c remmina-plugins/vnc/libvncserver/common/vncauth.c +--- remmina-plugins/vnc/libvncserver/common/vncauth.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/common/vncauth.c 1970-01-01 10:00:00.000000000 +1000 +@@ -1,211 +0,0 @@ +-/* +- * Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved. +- * +- * This is free software; you can 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. +- * +- * This software 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 this program; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +- * USA. +- */ +- +-/* +- * vncauth.c - Functions for VNC password management and authentication. +- */ +- +-#ifdef __STRICT_ANSI__ +-#define _BSD_SOURCE +-#define _POSIX_SOURCE +-#endif +-#ifdef LIBVNCSERVER_HAVE_SYS_TYPES_H +-#include <sys/types.h> +-#endif +-#include <stdio.h> +-#include <stdlib.h> +-#include <unistd.h> +-#include <rfb/rfbproto.h> +-#include "d3des.h" +- +-#include <string.h> +-#include <math.h> +- +-#ifdef LIBVNCSERVER_HAVE_SYS_STAT_H +-#include <sys/stat.h> +-#endif +- +-#include <time.h> +- +-#ifdef WIN32 +-#define srandom srand +-#define random rand +-#else +-#include <sys/time.h> +-#endif +- +- +-/* libvncclient does not need this */ +-#ifndef rfbEncryptBytes +- +-/* +- * We use a fixed key to store passwords, since we assume that our local +- * file system is secure but nonetheless don't want to store passwords +- * as plaintext. +- */ +- +-static unsigned char fixedkey[8] = {23,82,107,6,35,78,88,7}; +- +- +-/* +- * Encrypt a password and store it in a file. Returns 0 if successful, +- * 1 if the file could not be written. +- */ +- +-int +-rfbEncryptAndStorePasswd(char *passwd, char *fname) +-{ +- FILE *fp; +- unsigned int i; +- unsigned char encryptedPasswd[8]; +- +- if ((fp = fopen(fname,"w")) == NULL) return 1; +- +- /* windows security sux */ +-#ifndef WIN32 +- fchmod(fileno(fp), S_IRUSR|S_IWUSR); +-#endif +- +- /* pad password with nulls */ +- +- for (i = 0; i < 8; i++) { +- if (i < strlen(passwd)) { +- encryptedPasswd[i] = passwd[i]; +- } else { +- encryptedPasswd[i] = 0; +- } +- } +- +- /* Do encryption in-place - this way we overwrite our copy of the plaintext +- password */ +- +- rfbDesKey(fixedkey, EN0); +- rfbDes(encryptedPasswd, encryptedPasswd); +- +- for (i = 0; i < 8; i++) { +- putc(encryptedPasswd[i], fp); +- } +- +- fclose(fp); +- return 0; +-} +- +- +-/* +- * Decrypt a password from a file. Returns a pointer to a newly allocated +- * string containing the password or a null pointer if the password could +- * not be retrieved for some reason. +- */ +- +-char * +-rfbDecryptPasswdFromFile(char *fname) +-{ +- FILE *fp; +- int i, ch; +- unsigned char *passwd = (unsigned char *)malloc(9); +- +- if ((fp = fopen(fname,"r")) == NULL) { +- free(passwd); +- return NULL; +- } +- +- for (i = 0; i < 8; i++) { +- ch = getc(fp); +- if (ch == EOF) { +- fclose(fp); +- free(passwd); +- return NULL; +- } +- passwd[i] = ch; +- } +- +- fclose(fp); +- +- rfbDesKey(fixedkey, DE1); +- rfbDes(passwd, passwd); +- +- passwd[8] = 0; +- +- return (char *)passwd; +-} +- +- +-/* +- * Generate CHALLENGESIZE random bytes for use in challenge-response +- * authentication. +- */ +- +-void +-rfbRandomBytes(unsigned char *bytes) +-{ +- int i; +- static rfbBool s_srandom_called = FALSE; +- +- if (!s_srandom_called) { +- srandom((unsigned int)time(NULL) ^ (unsigned int)getpid()); +- s_srandom_called = TRUE; +- } +- +- for (i = 0; i < CHALLENGESIZE; i++) { +- bytes[i] = (unsigned char)(random() & 255); +- } +-} +- +-#endif +- +-/* +- * Encrypt CHALLENGESIZE bytes in memory using a password. +- */ +- +-void +-rfbEncryptBytes(unsigned char *bytes, char *passwd) +-{ +- unsigned char key[8]; +- unsigned int i; +- +- /* key is simply password padded with nulls */ +- +- for (i = 0; i < 8; i++) { +- if (i < strlen(passwd)) { +- key[i] = passwd[i]; +- } else { +- key[i] = 0; +- } +- } +- +- rfbDesKey(key, EN0); +- +- for (i = 0; i < CHALLENGESIZE; i += 8) { +- rfbDes(bytes+i, bytes+i); +- } +-} +- +-void +-rfbEncryptBytes2(unsigned char *where, const int length, unsigned char *key) { +- int i, j; +- rfbDesKey(key, EN0); +- for (i = 0; i< 8; i++) +- where[i] ^= key[i]; +- rfbDes(where, where); +- for (i = 8; i < length; i += 8) { +- for (j = 0; j < 8; j++) +- where[i + j] ^= where[i + j - 8]; +- rfbDes(where + i, where + i); +- } +-} +diff -urN remmina-plugins/vnc/libvncserver/common/zywrletemplate.c remmina-plugins/vnc/libvncserver/common/zywrletemplate.c +--- remmina-plugins/vnc/libvncserver/common/zywrletemplate.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/common/zywrletemplate.c 1970-01-01 10:00:00.000000000 +1000 +@@ -1,824 +0,0 @@ +- +-/******************************************************************** +- * * +- * THIS FILE IS PART OF THE 'ZYWRLE' VNC CODEC SOURCE CODE. * +- * * +- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * +- * GOVERNED BY A FOLLOWING BSD-STYLE SOURCE LICENSE. * +- * PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * +- * * +- * THE 'ZYWRLE' VNC CODEC SOURCE CODE IS (C) COPYRIGHT 2006 * +- * BY Hitachi Systems & Services, Ltd. * +- * (Noriaki Yamazaki, Research & Developement Center) * * +- * * +- ******************************************************************** +-Redistribution and use in source and binary forms, with or without +-modification, are permitted provided that the following conditions +-are met: +- +-- Redistributions of source code must retain the above copyright +-notice, this list of conditions and the following disclaimer. +- +-- Redistributions in binary form must reproduce the above copyright +-notice, this list of conditions and the following disclaimer in the +-documentation and/or other materials provided with the distribution. +- +-- Neither the name of the Hitachi Systems & Services, Ltd. nor +-the names of its contributors may be used to endorse or promote +-products derived from this software without specific prior written +-permission. +- +-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +-``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION +-OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +- ********************************************************************/ +- +-/* Change Log: +- V0.02 : 2008/02/04 : Fix mis encode/decode when width != scanline +- (Thanks Johannes Schindelin, author of LibVNC +- Server/Client) +- V0.01 : 2007/02/06 : Initial release +-*/ +- +-/* #define ZYWRLE_ENCODE */ +-/* #define ZYWRLE_DECODE */ +-#define ZYWRLE_QUANTIZE +- +-/* +-[References] +- PLHarr: +- Senecal, J. G., P. Lindstrom, M. A. Duchaineau, and K. I. Joy, "An Improved N-Bit to N-Bit Reversible Haar-Like Transform," Pacific Graphics 2004, October 2004, pp. 371-380. +- EZW: +- Shapiro, JM: Embedded Image Coding Using Zerotrees of Wavelet Coefficients, IEEE Trans. Signal. Process., Vol.41, pp.3445-3462 (1993). +-*/ +- +- +-/* Template Macro stuffs. */ +-#undef ZYWRLE_ANALYZE +-#undef ZYWRLE_SYNTHESIZE +-#define ZYWRLE_ANALYZE __RFB_CONCAT3E(zywrleAnalyze,BPP,END_FIX) +-#define ZYWRLE_SYNTHESIZE __RFB_CONCAT3E(zywrleSynthesize,BPP,END_FIX) +- +-#define ZYWRLE_RGBYUV __RFB_CONCAT3E(zywrleRGBYUV,BPP,END_FIX) +-#define ZYWRLE_YUVRGB __RFB_CONCAT3E(zywrleYUVRGB,BPP,END_FIX) +-#define ZYWRLE_YMASK __RFB_CONCAT2E(ZYWRLE_YMASK,BPP) +-#define ZYWRLE_UVMASK __RFB_CONCAT2E(ZYWRLE_UVMASK,BPP) +-#define ZYWRLE_LOAD_PIXEL __RFB_CONCAT2E(ZYWRLE_LOAD_PIXEL,BPP) +-#define ZYWRLE_SAVE_PIXEL __RFB_CONCAT2E(ZYWRLE_SAVE_PIXEL,BPP) +- +-/* Packing/Unpacking pixel stuffs. +- Endian conversion stuffs. */ +-#undef S_0 +-#undef S_1 +-#undef L_0 +-#undef L_1 +-#undef L_2 +-#if ZYWRLE_ENDIAN == ENDIAN_BIG +-# define S_0 1 +-# define S_1 0 +-# define L_0 3 +-# define L_1 2 +-# define L_2 1 +-#else +-# define S_0 0 +-# define S_1 1 +-# define L_0 0 +-# define L_1 1 +-# define L_2 2 +-#endif +- +-/* Load/Save pixel stuffs. */ +-#define ZYWRLE_YMASK15 0xFFFFFFF8 +-#define ZYWRLE_UVMASK15 0xFFFFFFF8 +-#define ZYWRLE_LOAD_PIXEL15(pSrc,R,G,B) { \ +- R = (((unsigned char*)pSrc)[S_1]<< 1)& 0xF8; \ +- G = ((((unsigned char*)pSrc)[S_1]<< 6)|(((unsigned char*)pSrc)[S_0]>> 2))& 0xF8; \ +- B = (((unsigned char*)pSrc)[S_0]<< 3)& 0xF8; \ +-} +-#define ZYWRLE_SAVE_PIXEL15(pDst,R,G,B) { \ +- R &= 0xF8; \ +- G &= 0xF8; \ +- B &= 0xF8; \ +- ((unsigned char*)pDst)[S_1] = (unsigned char)( (R>>1)|(G>>6) ); \ +- ((unsigned char*)pDst)[S_0] = (unsigned char)(((B>>3)|(G<<2))& 0xFF); \ +-} +-#define ZYWRLE_YMASK16 0xFFFFFFFC +-#define ZYWRLE_UVMASK16 0xFFFFFFF8 +-#define ZYWRLE_LOAD_PIXEL16(pSrc,R,G,B) { \ +- R = ((unsigned char*)pSrc)[S_1] & 0xF8; \ +- G = ((((unsigned char*)pSrc)[S_1]<< 5)|(((unsigned char*)pSrc)[S_0]>> 3))& 0xFC; \ +- B = (((unsigned char*)pSrc)[S_0]<< 3)& 0xF8; \ +-} +-#define ZYWRLE_SAVE_PIXEL16(pDst,R,G,B) { \ +- R &= 0xF8; \ +- G &= 0xFC; \ +- B &= 0xF8; \ +- ((unsigned char*)pDst)[S_1] = (unsigned char)( R |(G>>5) ); \ +- ((unsigned char*)pDst)[S_0] = (unsigned char)(((B>>3)|(G<<3))& 0xFF); \ +-} +-#define ZYWRLE_YMASK32 0xFFFFFFFF +-#define ZYWRLE_UVMASK32 0xFFFFFFFF +-#define ZYWRLE_LOAD_PIXEL32(pSrc,R,G,B) { \ +- R = ((unsigned char*)pSrc)[L_2]; \ +- G = ((unsigned char*)pSrc)[L_1]; \ +- B = ((unsigned char*)pSrc)[L_0]; \ +-} +-#define ZYWRLE_SAVE_PIXEL32(pDst,R,G,B) { \ +- ((unsigned char*)pDst)[L_2] = (unsigned char)R; \ +- ((unsigned char*)pDst)[L_1] = (unsigned char)G; \ +- ((unsigned char*)pDst)[L_0] = (unsigned char)B; \ +-} +- +-#ifndef ZYWRLE_ONCE +-#define ZYWRLE_ONCE +- +-#ifdef WIN32 +-#define InlineX __inline +-#else +-#define InlineX inline +-#endif +- +-#ifdef ZYWRLE_ENCODE +-/* Tables for Coefficients filtering. */ +-# ifndef ZYWRLE_QUANTIZE +-/* Type A:lower bit omitting of EZW style. */ +-const static unsigned int zywrleParam[3][3]={ +- {0x0000F000,0x00000000,0x00000000}, +- {0x0000C000,0x00F0F0F0,0x00000000}, +- {0x0000C000,0x00C0C0C0,0x00F0F0F0}, +-/* {0x0000FF00,0x00000000,0x00000000}, +- {0x0000FF00,0x00FFFFFF,0x00000000}, +- {0x0000FF00,0x00FFFFFF,0x00FFFFFF}, */ +-}; +-# else +-/* Type B:Non liner quantization filter. */ +-static const signed char zywrleConv[4][256]={ +-{ /* bi=5, bo=5 r=0.0:PSNR=24.849 */ +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +-}, +-{ /* bi=5, bo=5 r=2.0:PSNR=74.031 */ +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 32, +- 32, 32, 32, 32, 32, 32, 32, 32, +- 32, 32, 32, 32, 32, 32, 32, 32, +- 48, 48, 48, 48, 48, 48, 48, 48, +- 48, 48, 48, 56, 56, 56, 56, 56, +- 56, 56, 56, 56, 64, 64, 64, 64, +- 64, 64, 64, 64, 72, 72, 72, 72, +- 72, 72, 72, 72, 80, 80, 80, 80, +- 80, 80, 88, 88, 88, 88, 88, 88, +- 88, 88, 88, 88, 88, 88, 96, 96, +- 96, 96, 96, 104, 104, 104, 104, 104, +- 104, 104, 104, 104, 104, 112, 112, 112, +- 112, 112, 112, 112, 112, 112, 120, 120, +- 120, 120, 120, 120, 120, 120, 120, 120, +- 0, -120, -120, -120, -120, -120, -120, -120, +- -120, -120, -120, -112, -112, -112, -112, -112, +- -112, -112, -112, -112, -104, -104, -104, -104, +- -104, -104, -104, -104, -104, -104, -96, -96, +- -96, -96, -96, -88, -88, -88, -88, -88, +- -88, -88, -88, -88, -88, -88, -88, -80, +- -80, -80, -80, -80, -80, -72, -72, -72, +- -72, -72, -72, -72, -72, -64, -64, -64, +- -64, -64, -64, -64, -64, -56, -56, -56, +- -56, -56, -56, -56, -56, -56, -48, -48, +- -48, -48, -48, -48, -48, -48, -48, -48, +- -48, -32, -32, -32, -32, -32, -32, -32, +- -32, -32, -32, -32, -32, -32, -32, -32, +- -32, -32, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +-}, +-{ /* bi=5, bo=4 r=2.0:PSNR=64.441 */ +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 48, 48, 48, 48, 48, 48, 48, 48, +- 48, 48, 48, 48, 48, 48, 48, 48, +- 48, 48, 48, 48, 48, 48, 48, 48, +- 64, 64, 64, 64, 64, 64, 64, 64, +- 64, 64, 64, 64, 64, 64, 64, 64, +- 80, 80, 80, 80, 80, 80, 80, 80, +- 80, 80, 80, 80, 80, 88, 88, 88, +- 88, 88, 88, 88, 88, 88, 88, 88, +- 104, 104, 104, 104, 104, 104, 104, 104, +- 104, 104, 104, 112, 112, 112, 112, 112, +- 112, 112, 112, 112, 120, 120, 120, 120, +- 120, 120, 120, 120, 120, 120, 120, 120, +- 0, -120, -120, -120, -120, -120, -120, -120, +- -120, -120, -120, -120, -120, -112, -112, -112, +- -112, -112, -112, -112, -112, -112, -104, -104, +- -104, -104, -104, -104, -104, -104, -104, -104, +- -104, -88, -88, -88, -88, -88, -88, -88, +- -88, -88, -88, -88, -80, -80, -80, -80, +- -80, -80, -80, -80, -80, -80, -80, -80, +- -80, -64, -64, -64, -64, -64, -64, -64, +- -64, -64, -64, -64, -64, -64, -64, -64, +- -64, -48, -48, -48, -48, -48, -48, -48, +- -48, -48, -48, -48, -48, -48, -48, -48, +- -48, -48, -48, -48, -48, -48, -48, -48, +- -48, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +-}, +-{ /* bi=5, bo=2 r=2.0:PSNR=43.175 */ +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 88, 88, 88, 88, 88, 88, 88, 88, +- 88, 88, 88, 88, 88, 88, 88, 88, +- 88, 88, 88, 88, 88, 88, 88, 88, +- 88, 88, 88, 88, 88, 88, 88, 88, +- 88, 88, 88, 88, 88, 88, 88, 88, +- 88, 88, 88, 88, 88, 88, 88, 88, +- 88, 88, 88, 88, 88, 88, 88, 88, +- 88, 88, 88, 88, 88, 88, 88, 88, +- 0, -88, -88, -88, -88, -88, -88, -88, +- -88, -88, -88, -88, -88, -88, -88, -88, +- -88, -88, -88, -88, -88, -88, -88, -88, +- -88, -88, -88, -88, -88, -88, -88, -88, +- -88, -88, -88, -88, -88, -88, -88, -88, +- -88, -88, -88, -88, -88, -88, -88, -88, +- -88, -88, -88, -88, -88, -88, -88, -88, +- -88, -88, -88, -88, -88, -88, -88, -88, +- -88, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +- 0, 0, 0, 0, 0, 0, 0, 0, +-} +-}; +-const static signed char* zywrleParam[3][3][3]={ +- {{zywrleConv[0],zywrleConv[2],zywrleConv[0]},{zywrleConv[0],zywrleConv[0],zywrleConv[0]},{zywrleConv[0],zywrleConv[0],zywrleConv[0]}}, +- {{zywrleConv[0],zywrleConv[3],zywrleConv[0]},{zywrleConv[1],zywrleConv[1],zywrleConv[1]},{zywrleConv[0],zywrleConv[0],zywrleConv[0]}}, +- {{zywrleConv[0],zywrleConv[3],zywrleConv[0]},{zywrleConv[2],zywrleConv[2],zywrleConv[2]},{zywrleConv[1],zywrleConv[1],zywrleConv[1]}}, +-}; +-# endif +-#endif +- +-static InlineX void Harr(signed char* pX0, signed char* pX1) +-{ +- /* Piecewise-Linear Harr(PLHarr) */ +- int X0 = (int)*pX0, X1 = (int)*pX1; +- int orgX0 = X0, orgX1 = X1; +- if ((X0 ^ X1) & 0x80) { +- /* differ sign */ +- X1 += X0; +- if (((X1^orgX1)&0x80)==0) { +- /* |X1| > |X0| */ +- X0 -= X1; /* H = -B */ +- } +- } else { +- /* same sign */ +- X0 -= X1; +- if (((X0 ^ orgX0) & 0x80) == 0) { +- /* |X0| > |X1| */ +- X1 += X0; /* L = A */ +- } +- } +- *pX0 = (signed char)X1; +- *pX1 = (signed char)X0; +-} +-/* +- 1D-Wavelet transform. +- +- In coefficients array, the famous 'pyramid' decomposition is well used. +- +- 1D Model: +- |L0L0L0L0|L0L0L0L0|H0H0H0H0|H0H0H0H0| : level 0 +- |L1L1L1L1|H1H1H1H1|H0H0H0H0|H0H0H0H0| : level 1 +- +- But this method needs line buffer because H/L is different position from X0/X1. +- So, I used 'interleave' decomposition instead of it. +- +- 1D Model: +- |L0H0L0H0|L0H0L0H0|L0H0L0H0|L0H0L0H0| : level 0 +- |L1H0H1H0|L1H0H1H0|L1H0H1H0|L1H0H1H0| : level 1 +- +- In this method, H/L and X0/X1 is always same position. +- This lead us to more speed and less memory. +- Of cause, the result of both method is quite same +- because it's only difference that coefficient position. +-*/ +-static InlineX void WaveletLevel(int* data, int size, int l, int SkipPixel) +-{ +- int s, ofs; +- signed char* pX0; +- signed char* end; +- +- pX0 = (signed char*)data; +- s = (8<<l)*SkipPixel; +- end = pX0+(size>>(l+1))*s; +- s -= 2; +- ofs = (4<<l)*SkipPixel; +- while (pX0 < end) { +- Harr(pX0, pX0+ofs); +- pX0++; +- Harr(pX0, pX0+ofs); +- pX0++; +- Harr(pX0, pX0+ofs); +- pX0 += s; +- } +-} +-#define InvWaveletLevel(d,s,l,pix) WaveletLevel(d,s,l,pix) +- +-#ifdef ZYWRLE_ENCODE +-# ifndef ZYWRLE_QUANTIZE +-/* Type A:lower bit omitting of EZW style. */ +-static InlineX void FilterWaveletSquare(int* pBuf, int width, int height, int level, int l) +-{ +- int r, s; +- int x, y; +- int* pH; +- const unsigned int* pM; +- +- pM = &(zywrleParam[level-1][l]); +- s = 2<<l; +- for (r = 1; r < 4; r++) { +- pH = pBuf; +- if (r & 0x01) +- pH += s>>1; +- if (r & 0x02) +- pH += (s>>1)*width; +- for (y = 0; y < height / s; y++) { +- for (x = 0; x < width / s; x++) { +- /* +- these are same following code. +- pH[x] = pH[x] / (~pM[x]+1) * (~pM[x]+1); +- ( round pH[x] with pM[x] bit ) +- '&' operator isn't 'round' but is 'floor'. +- So, we must offset when pH[x] is negative. +- */ +- if (((signed char*)pH)[0] & 0x80) +- ((signed char*)pH)[0] += ~((signed char*)pM)[0]; +- if (((signed char*)pH)[1] & 0x80) +- ((signed char*)pH)[1] += ~((signed char*)pM)[1]; +- if (((signed char*)pH)[2] & 0x80) +- ((signed char*)pH)[2] += ~((signed char*)pM)[2]; +- *pH &= *pM; +- pH += s; +- } +- pH += (s-1)*width; +- } +- } +-} +-# else +-/* +- Type B:Non liner quantization filter. +- +- Coefficients have Gaussian curve and smaller value which is +- large part of coefficients isn't more important than larger value. +- So, I use filter of Non liner quantize/dequantize table. +- In general, Non liner quantize formula is explained as following. +- +- y=f(x) = sign(x)*round( ((abs(x)/(2^7))^ r )* 2^(bo-1) )*2^(8-bo) +- x=f-1(y) = sign(y)*round( ((abs(y)/(2^7))^(1/r))* 2^(bi-1) )*2^(8-bi) +- ( r:power coefficient bi:effective MSB in input bo:effective MSB in output ) +- +- r < 1.0 : Smaller value is more important than larger value. +- r > 1.0 : Larger value is more important than smaller value. +- r = 1.0 : Liner quantization which is same with EZW style. +- +- r = 0.75 is famous non liner quantization used in MP3 audio codec. +- In contrast to audio data, larger value is important in wavelet coefficients. +- So, I select r = 2.0 table( quantize is x^2, dequantize sqrt(x) ). +- +- As compared with EZW style liner quantization, this filter tended to be +- more sharp edge and be more compression rate but be more blocking noise and be less quality. +- Especially, the surface of graphic objects has distinguishable noise in middle quality mode. +- +- We need only quantized-dequantized(filtered) value rather than quantized value itself +- because all values are packed or palette-lized in later ZRLE section. +- This lead us not to need to modify client decoder when we change +- the filtering procedure in future. +- Client only decodes coefficients given by encoder. +-*/ +-static InlineX void FilterWaveletSquare(int* pBuf, int width, int height, int level, int l) +-{ +- int r, s; +- int x, y; +- int* pH; +- const signed char** pM; +- +- pM = zywrleParam[level-1][l]; +- s = 2<<l; +- for (r = 1; r < 4; r++) { +- pH = pBuf; +- if (r & 0x01) +- pH += s>>1; +- if (r & 0x02) +- pH += (s>>1)*width; +- for (y = 0; y < height / s; y++) { +- for (x = 0; x < width / s; x++) { +- ((signed char*)pH)[0] = pM[0][((unsigned char*)pH)[0]]; +- ((signed char*)pH)[1] = pM[1][((unsigned char*)pH)[1]]; +- ((signed char*)pH)[2] = pM[2][((unsigned char*)pH)[2]]; +- pH += s; +- } +- pH += (s-1)*width; +- } +- } +-} +-# endif +- +-static InlineX void Wavelet(int* pBuf, int width, int height, int level) +-{ +- int l, s; +- int* pTop; +- int* pEnd; +- +- for (l = 0; l < level; l++) { +- pTop = pBuf; +- pEnd = pBuf+height*width; +- s = width<<l; +- while (pTop < pEnd) { +- WaveletLevel(pTop, width, l, 1); +- pTop += s; +- } +- pTop = pBuf; +- pEnd = pBuf+width; +- s = 1<<l; +- while (pTop < pEnd) { +- WaveletLevel(pTop, height,l, width); +- pTop += s; +- } +- FilterWaveletSquare(pBuf, width, height, level, l); +- } +-} +-#endif +-#ifdef ZYWRLE_DECODE +-static InlineX void InvWavelet(int* pBuf, int width, int height, int level) +-{ +- int l, s; +- int* pTop; +- int* pEnd; +- +- for (l = level - 1; l >= 0; l--) { +- pTop = pBuf; +- pEnd = pBuf+width; +- s = 1<<l; +- while (pTop < pEnd) { +- InvWaveletLevel(pTop, height,l, width); +- pTop += s; +- } +- pTop = pBuf; +- pEnd = pBuf+height*width; +- s = width<<l; +- while (pTop < pEnd) { +- InvWaveletLevel(pTop, width, l, 1); +- pTop += s; +- } +- } +-} +-#endif +- +-/* Load/Save coefficients stuffs. +- Coefficients manages as 24 bits little-endian pixel. */ +-#define ZYWRLE_LOAD_COEFF(pSrc,R,G,B) { \ +- R = ((signed char*)pSrc)[2]; \ +- G = ((signed char*)pSrc)[1]; \ +- B = ((signed char*)pSrc)[0]; \ +-} +-#define ZYWRLE_SAVE_COEFF(pDst,R,G,B) { \ +- ((signed char*)pDst)[2] = (signed char)R; \ +- ((signed char*)pDst)[1] = (signed char)G; \ +- ((signed char*)pDst)[0] = (signed char)B; \ +-} +- +-/* +- RGB <=> YUV conversion stuffs. +- YUV coversion is explained as following formula in strict meaning: +- Y = 0.299R + 0.587G + 0.114B ( 0<=Y<=255) +- U = -0.169R - 0.331G + 0.500B (-128<=U<=127) +- V = 0.500R - 0.419G - 0.081B (-128<=V<=127) +- +- I use simple conversion RCT(reversible color transform) which is described +- in JPEG-2000 specification. +- Y = (R + 2G + B)/4 ( 0<=Y<=255) +- U = B-G (-256<=U<=255) +- V = R-G (-256<=V<=255) +-*/ +-#define ROUND(x) (((x)<0)?0:(((x)>255)?255:(x))) +- /* RCT is N-bit RGB to N-bit Y and N+1-bit UV. +- For make Same N-bit, UV is lossy. +- More exact PLHarr, we reduce to odd range(-127<=x<=127). */ +-#define ZYWRLE_RGBYUV1(R,G,B,Y,U,V,ymask,uvmask) { \ +- Y = (R+(G<<1)+B)>>2; \ +- U = B-G; \ +- V = R-G; \ +- Y -= 128; \ +- U >>= 1; \ +- V >>= 1; \ +- Y &= ymask; \ +- U &= uvmask; \ +- V &= uvmask; \ +- if (Y == -128) \ +- Y += (0xFFFFFFFF-ymask+1); \ +- if (U == -128) \ +- U += (0xFFFFFFFF-uvmask+1); \ +- if (V == -128) \ +- V += (0xFFFFFFFF-uvmask+1); \ +-} +-#define ZYWRLE_YUVRGB1(R,G,B,Y,U,V) { \ +- Y += 128; \ +- U <<= 1; \ +- V <<= 1; \ +- G = Y-((U+V)>>2); \ +- B = U+G; \ +- R = V+G; \ +- G = ROUND(G); \ +- B = ROUND(B); \ +- R = ROUND(R); \ +-} +- +-/* +- coefficient packing/unpacking stuffs. +- Wavelet transform makes 4 sub coefficient image from 1 original image. +- +- model with pyramid decomposition: +- +------+------+ +- | | | +- | L | Hx | +- | | | +- +------+------+ +- | | | +- | H | Hxy | +- | | | +- +------+------+ +- +- So, we must transfer each sub images individually in strict meaning. +- But at least ZRLE meaning, following one decompositon image is same as +- avobe individual sub image. I use this format. +- (Strictly saying, transfer order is reverse(Hxy->Hy->Hx->L) +- for simplified procedure for any wavelet level.) +- +- +------+------+ +- | L | +- +------+------+ +- | Hx | +- +------+------+ +- | Hy | +- +------+------+ +- | Hxy | +- +------+------+ +-*/ +-#define INC_PTR(data) \ +- data++; \ +- if( data-pData >= (w+uw) ){ \ +- data += scanline-(w+uw); \ +- pData = data; \ +- } +- +-#define ZYWRLE_TRANSFER_COEFF(pBuf,data,r,w,h,scanline,level,TRANS) \ +- pH = pBuf; \ +- s = 2<<level; \ +- if (r & 0x01) \ +- pH += s>>1; \ +- if (r & 0x02) \ +- pH += (s>>1)*w; \ +- pEnd = pH+h*w; \ +- while (pH < pEnd) { \ +- pLine = pH+w; \ +- while (pH < pLine) { \ +- TRANS \ +- INC_PTR(data) \ +- pH += s; \ +- } \ +- pH += (s-1)*w; \ +- } +- +-#define ZYWRLE_PACK_COEFF(pBuf,data,r,width,height,scanline,level) \ +- ZYWRLE_TRANSFER_COEFF(pBuf,data,r,width,height,scanline,level,ZYWRLE_LOAD_COEFF(pH,R,G,B);ZYWRLE_SAVE_PIXEL(data,R,G,B);) +- +-#define ZYWRLE_UNPACK_COEFF(pBuf,data,r,width,height,scanline,level) \ +- ZYWRLE_TRANSFER_COEFF(pBuf,data,r,width,height,scanline,level,ZYWRLE_LOAD_PIXEL(data,R,G,B);ZYWRLE_SAVE_COEFF(pH,R,G,B);) +- +-#define ZYWRLE_SAVE_UNALIGN(data,TRANS) \ +- pTop = pBuf+w*h; \ +- pEnd = pBuf + (w+uw)*(h+uh); \ +- while (pTop < pEnd) { \ +- TRANS \ +- INC_PTR(data) \ +- pTop++; \ +- } +- +-#define ZYWRLE_LOAD_UNALIGN(data,TRANS) \ +- pTop = pBuf+w*h; \ +- if (uw) { \ +- pData= data + w; \ +- pEnd = (int*)(pData+ h*scanline); \ +- while (pData < (PIXEL_T*)pEnd) { \ +- pLine = (int*)(pData + uw); \ +- while (pData < (PIXEL_T*)pLine) { \ +- TRANS \ +- pData++; \ +- pTop++; \ +- } \ +- pData += scanline-uw; \ +- } \ +- } \ +- if (uh) { \ +- pData= data + h*scanline; \ +- pEnd = (int*)(pData+ uh*scanline); \ +- while (pData < (PIXEL_T*)pEnd) { \ +- pLine = (int*)(pData + w); \ +- while (pData < (PIXEL_T*)pLine) { \ +- TRANS \ +- pData++; \ +- pTop++; \ +- } \ +- pData += scanline-w; \ +- } \ +- } \ +- if (uw && uh) { \ +- pData= data + w+ h*scanline; \ +- pEnd = (int*)(pData+ uh*scanline); \ +- while (pData < (PIXEL_T*)pEnd) { \ +- pLine = (int*)(pData + uw); \ +- while (pData < (PIXEL_T*)pLine) { \ +- TRANS \ +- pData++; \ +- pTop++; \ +- } \ +- pData += scanline-uw; \ +- } \ +- } +- +-static InlineX void zywrleCalcSize(int* pW, int* pH, int level) +-{ +- *pW &= ~((1<<level)-1); +- *pH &= ~((1<<level)-1); +-} +- +-#endif /* ZYWRLE_ONCE */ +- +-#ifndef CPIXEL +-#ifdef ZYWRLE_ENCODE +-static InlineX void ZYWRLE_RGBYUV(int* pBuf, PIXEL_T* data, int width, int height, int scanline) +-{ +- int R, G, B; +- int Y, U, V; +- int* pLine; +- int* pEnd; +- pEnd = pBuf+height*width; +- while (pBuf < pEnd) { +- pLine = pBuf+width; +- while (pBuf < pLine) { +- ZYWRLE_LOAD_PIXEL(data,R,G,B); +- ZYWRLE_RGBYUV1(R,G,B,Y,U,V,ZYWRLE_YMASK,ZYWRLE_UVMASK); +- ZYWRLE_SAVE_COEFF(pBuf,V,Y,U); +- pBuf++; +- data++; +- } +- data += scanline-width; +- } +-} +-#endif +-#ifdef ZYWRLE_DECODE +-static InlineX void ZYWRLE_YUVRGB(int* pBuf, PIXEL_T* data, int width, int height, int scanline) { +- int R, G, B; +- int Y, U, V; +- int* pLine; +- int* pEnd; +- pEnd = pBuf+height*width; +- while (pBuf < pEnd) { +- pLine = pBuf+width; +- while (pBuf < pLine) { +- ZYWRLE_LOAD_COEFF(pBuf,V,Y,U); +- ZYWRLE_YUVRGB1(R,G,B,Y,U,V); +- ZYWRLE_SAVE_PIXEL(data,R,G,B); +- pBuf++; +- data++; +- } +- data += scanline-width; +- } +-} +-#endif +- +-#ifdef ZYWRLE_ENCODE +-PIXEL_T* ZYWRLE_ANALYZE(PIXEL_T* dst, PIXEL_T* src, int w, int h, int scanline, int level, int* pBuf) { +- int l; +- int uw = w; +- int uh = h; +- int* pTop; +- int* pEnd; +- int* pLine; +- PIXEL_T* pData; +- int R, G, B; +- int s; +- int* pH; +- +- zywrleCalcSize(&w, &h, level); +- if (w == 0 || h == 0) +- return NULL; +- uw -= w; +- uh -= h; +- +- pData = dst; +- ZYWRLE_LOAD_UNALIGN(src,*(PIXEL_T*)pTop=*pData;) +- ZYWRLE_RGBYUV(pBuf, src, w, h, scanline); +- Wavelet(pBuf, w, h, level); +- for (l = 0; l < level; l++) { +- ZYWRLE_PACK_COEFF(pBuf, dst, 3, w, h, scanline, l); +- ZYWRLE_PACK_COEFF(pBuf, dst, 2, w, h, scanline, l); +- ZYWRLE_PACK_COEFF(pBuf, dst, 1, w, h, scanline, l); +- if (l == level - 1) { +- ZYWRLE_PACK_COEFF(pBuf, dst, 0, w, h, scanline, l); +- } +- } +- ZYWRLE_SAVE_UNALIGN(dst,*dst=*(PIXEL_T*)pTop;) +- return dst; +-} +-#endif +-#ifdef ZYWRLE_DECODE +-PIXEL_T* ZYWRLE_SYNTHESIZE(PIXEL_T* dst, PIXEL_T* src, int w, int h, int scanline, int level, int* pBuf) +-{ +- int l; +- int uw = w; +- int uh = h; +- int* pTop; +- int* pEnd; +- int* pLine; +- PIXEL_T* pData; +- int R, G, B; +- int s; +- int* pH; +- +- zywrleCalcSize(&w, &h, level); +- if (w == 0 || h == 0) +- return NULL; +- uw -= w; +- uh -= h; +- +- pData = src; +- for (l = 0; l < level; l++) { +- ZYWRLE_UNPACK_COEFF(pBuf, src, 3, w, h, scanline, l); +- ZYWRLE_UNPACK_COEFF(pBuf, src, 2, w, h, scanline, l); +- ZYWRLE_UNPACK_COEFF(pBuf, src, 1, w, h, scanline, l); +- if (l == level - 1) { +- ZYWRLE_UNPACK_COEFF(pBuf, src, 0, w, h, scanline, l); +- } +- } +- ZYWRLE_SAVE_UNALIGN(src,*(PIXEL_T*)pTop=*src;) +- InvWavelet(pBuf, w, h, level); +- ZYWRLE_YUVRGB(pBuf, dst, w, h, scanline); +- ZYWRLE_LOAD_UNALIGN(dst,*pData=*(PIXEL_T*)pTop;) +- return src; +-} +-#endif +-#endif /* CPIXEL */ +- +-#undef ZYWRLE_RGBYUV +-#undef ZYWRLE_YUVRGB +-#undef ZYWRLE_LOAD_PIXEL +-#undef ZYWRLE_SAVE_PIXEL +diff -urN remmina-plugins/vnc/libvncserver/libvncclient/corre.c remmina-plugins/vnc/libvncserver/libvncclient/corre.c +--- remmina-plugins/vnc/libvncserver/libvncclient/corre.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/libvncclient/corre.c 1970-01-01 10:00:00.000000000 +1000 +@@ -1,70 +0,0 @@ +-/* +- * Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved. +- * +- * This is free software; you can 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. +- * +- * This software 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 this software; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +- * USA. +- */ +- +-/* +- * corre.c - handle CoRRE encoding. +- * +- * This file shouldn't be compiled directly. It is included multiple times by +- * rfbproto.c, each time with a different definition of the macro BPP. For +- * each value of BPP, this file defines a function which handles a CoRRE +- * encoded rectangle with BPP bits per pixel. +- */ +- +-#define HandleCoRREBPP CONCAT2E(HandleCoRRE,BPP) +-#define CARDBPP CONCAT3E(uint,BPP,_t) +- +-static rfbBool +-HandleCoRREBPP (rfbClient* client, int rx, int ry, int rw, int rh) +-{ +- rfbRREHeader hdr; +- int i; +- CARDBPP pix; +- uint8_t *ptr; +- int x, y, w, h; +- +- if (!ReadFromRFBServer(client, (char *)&hdr, sz_rfbRREHeader)) +- return FALSE; +- +- hdr.nSubrects = rfbClientSwap32IfLE(hdr.nSubrects); +- +- if (!ReadFromRFBServer(client, (char *)&pix, sizeof(pix))) +- return FALSE; +- +- FillRectangle(client, rx, ry, rw, rh, pix); +- +- if (!ReadFromRFBServer(client, client->buffer, hdr.nSubrects * (4 + (BPP / 8)))) +- return FALSE; +- +- ptr = (uint8_t *)client->buffer; +- +- for (i = 0; i < hdr.nSubrects; i++) { +- pix = *(CARDBPP *)ptr; +- ptr += BPP/8; +- x = *ptr++; +- y = *ptr++; +- w = *ptr++; +- h = *ptr++; +- +- FillRectangle(client, rx+x, ry+y, w, h, pix); +- } +- +- return TRUE; +-} +- +-#undef CARDBPP +diff -urN remmina-plugins/vnc/libvncserver/libvncclient/cursor.c remmina-plugins/vnc/libvncserver/libvncclient/cursor.c +--- remmina-plugins/vnc/libvncserver/libvncclient/cursor.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/libvncclient/cursor.c 1970-01-01 10:00:00.000000000 +1000 +@@ -1,179 +0,0 @@ +-/* +- * Copyright (C) 2001,2002 Constantin Kaplinsky. All Rights Reserved. +- * +- * This is free software; you can 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. +- * +- * This software 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 this software; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +- * USA. +- */ +- +-/* +- * cursor.c - code to support cursor shape updates (XCursor and +- * RichCursor preudo-encodings). +- */ +- +-#include <rfb/rfbclient.h> +- +- +-#define OPER_SAVE 0 +-#define OPER_RESTORE 1 +- +-#define RGB24_TO_PIXEL(bpp,r,g,b) \ +- ((((uint##bpp##_t)(r) & 0xFF) * client->format.redMax + 127) / 255 \ +- << client->format.redShift | \ +- (((uint##bpp##_t)(g) & 0xFF) * client->format.greenMax + 127) / 255 \ +- << client->format.greenShift | \ +- (((uint##bpp##_t)(b) & 0xFF) * client->format.blueMax + 127) / 255 \ +- << client->format.blueShift) +- +- +-/********************************************************************* +- * HandleCursorShape(). Support for XCursor and RichCursor shape +- * updates. We emulate cursor operating on the frame buffer (that is +- * why we call it "software cursor"). +- ********************************************************************/ +- +-rfbBool HandleCursorShape(rfbClient* client,int xhot, int yhot, int width, int height, uint32_t enc) +-{ +- int bytesPerPixel; +- size_t bytesPerRow, bytesMaskData; +- rfbXCursorColors rgb; +- uint32_t colors[2]; +- char *buf; +- uint8_t *ptr; +- int x, y, b; +- +- bytesPerPixel = client->format.bitsPerPixel / 8; +- bytesPerRow = (width + 7) / 8; +- bytesMaskData = bytesPerRow * height; +- +- if (width * height == 0) +- return TRUE; +- +- /* Allocate memory for pixel data and temporary mask data. */ +- if(client->rcSource) +- free(client->rcSource); +- +- client->rcSource = malloc(width * height * bytesPerPixel); +- if (client->rcSource == NULL) +- return FALSE; +- +- buf = malloc(bytesMaskData); +- if (buf == NULL) { +- free(client->rcSource); +- client->rcSource = NULL; +- return FALSE; +- } +- +- /* Read and decode cursor pixel data, depending on the encoding type. */ +- +- if (enc == rfbEncodingXCursor) { +- /* Read and convert background and foreground colors. */ +- if (!ReadFromRFBServer(client, (char *)&rgb, sz_rfbXCursorColors)) { +- free(client->rcSource); +- client->rcSource = NULL; +- free(buf); +- return FALSE; +- } +- colors[0] = RGB24_TO_PIXEL(32, rgb.backRed, rgb.backGreen, rgb.backBlue); +- colors[1] = RGB24_TO_PIXEL(32, rgb.foreRed, rgb.foreGreen, rgb.foreBlue); +- +- /* Read 1bpp pixel data into a temporary buffer. */ +- if (!ReadFromRFBServer(client, buf, bytesMaskData)) { +- free(client->rcSource); +- client->rcSource = NULL; +- free(buf); +- return FALSE; +- } +- +- /* Convert 1bpp data to byte-wide color indices. */ +- ptr = client->rcSource; +- for (y = 0; y < height; y++) { +- for (x = 0; x < width / 8; x++) { +- for (b = 7; b >= 0; b--) { +- *ptr = buf[y * bytesPerRow + x] >> b & 1; +- ptr += bytesPerPixel; +- } +- } +- for (b = 7; b > 7 - width % 8; b--) { +- *ptr = buf[y * bytesPerRow + x] >> b & 1; +- ptr += bytesPerPixel; +- } +- } +- +- /* Convert indices into the actual pixel values. */ +- switch (bytesPerPixel) { +- case 1: +- for (x = 0; x < width * height; x++) +- client->rcSource[x] = (uint8_t)colors[client->rcSource[x]]; +- break; +- case 2: +- for (x = 0; x < width * height; x++) +- ((uint16_t *)client->rcSource)[x] = (uint16_t)colors[client->rcSource[x * 2]]; +- break; +- case 4: +- for (x = 0; x < width * height; x++) +- ((uint32_t *)client->rcSource)[x] = colors[client->rcSource[x * 4]]; +- break; +- } +- +- } else { /* enc == rfbEncodingRichCursor */ +- +- if (!ReadFromRFBServer(client, (char *)client->rcSource, width * height * bytesPerPixel)) { +- free(client->rcSource); +- client->rcSource = NULL; +- free(buf); +- return FALSE; +- } +- +- } +- +- /* Read and decode mask data. */ +- +- if (!ReadFromRFBServer(client, buf, bytesMaskData)) { +- free(client->rcSource); +- client->rcSource = NULL; +- free(buf); +- return FALSE; +- } +- +- client->rcMask = malloc(width * height); +- if (client->rcMask == NULL) { +- free(client->rcSource); +- client->rcSource = NULL; +- free(buf); +- return FALSE; +- } +- +- ptr = client->rcMask; +- for (y = 0; y < height; y++) { +- for (x = 0; x < width / 8; x++) { +- for (b = 7; b >= 0; b--) { +- *ptr++ = buf[y * bytesPerRow + x] >> b & 1; +- } +- } +- for (b = 7; b > 7 - width % 8; b--) { +- *ptr++ = buf[y * bytesPerRow + x] >> b & 1; +- } +- } +- +- if (client->GotCursorShape != NULL) { +- client->GotCursorShape(client, xhot, yhot, width, height, bytesPerPixel); +- } +- +- free(buf); +- +- return TRUE; +-} +- +- +diff -urN remmina-plugins/vnc/libvncserver/libvncclient/hextile.c remmina-plugins/vnc/libvncserver/libvncclient/hextile.c +--- remmina-plugins/vnc/libvncserver/libvncclient/hextile.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/libvncclient/hextile.c 1970-01-01 10:00:00.000000000 +1000 +@@ -1,127 +0,0 @@ +-/* +- * Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved. +- * +- * This is free software; you can 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. +- * +- * This software 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 this software; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +- * USA. +- */ +- +-/* +- * hextile.c - handle hextile encoding. +- * +- * This file shouldn't be compiled directly. It is included multiple times by +- * rfbproto.c, each time with a different definition of the macro BPP. For +- * each value of BPP, this file defines a function which handles a hextile +- * encoded rectangle with BPP bits per pixel. +- */ +- +-#define HandleHextileBPP CONCAT2E(HandleHextile,BPP) +-#define CARDBPP CONCAT3E(uint,BPP,_t) +- +-static rfbBool +-HandleHextileBPP (rfbClient* client, int rx, int ry, int rw, int rh) +-{ +- CARDBPP bg, fg; +- int i; +- uint8_t *ptr; +- int x, y, w, h; +- int sx, sy, sw, sh; +- uint8_t subencoding; +- uint8_t nSubrects; +- +- for (y = ry; y < ry+rh; y += 16) { +- for (x = rx; x < rx+rw; x += 16) { +- w = h = 16; +- if (rx+rw - x < 16) +- w = rx+rw - x; +- if (ry+rh - y < 16) +- h = ry+rh - y; +- +- if (!ReadFromRFBServer(client, (char *)&subencoding, 1)) +- return FALSE; +- +- if (subencoding & rfbHextileRaw) { +- if (!ReadFromRFBServer(client, client->buffer, w * h * (BPP / 8))) +- return FALSE; +- +- CopyRectangle(client, (uint8_t *)client->buffer, x, y, w, h); +- +- continue; +- } +- +- if (subencoding & rfbHextileBackgroundSpecified) +- if (!ReadFromRFBServer(client, (char *)&bg, sizeof(bg))) +- return FALSE; +- +- FillRectangle(client, x, y, w, h, bg); +- +- if (subencoding & rfbHextileForegroundSpecified) +- if (!ReadFromRFBServer(client, (char *)&fg, sizeof(fg))) +- return FALSE; +- +- if (!(subencoding & rfbHextileAnySubrects)) { +- continue; +- } +- +- if (!ReadFromRFBServer(client, (char *)&nSubrects, 1)) +- return FALSE; +- +- ptr = (uint8_t*)client->buffer; +- +- if (subencoding & rfbHextileSubrectsColoured) { +- if (!ReadFromRFBServer(client, client->buffer, nSubrects * (2 + (BPP / 8)))) +- return FALSE; +- +- for (i = 0; i < nSubrects; i++) { +-#if BPP==8 +- GET_PIXEL8(fg, ptr); +-#elif BPP==16 +- GET_PIXEL16(fg, ptr); +-#elif BPP==32 +- GET_PIXEL32(fg, ptr); +-#else +-#error "Invalid BPP" +-#endif +- sx = rfbHextileExtractX(*ptr); +- sy = rfbHextileExtractY(*ptr); +- ptr++; +- sw = rfbHextileExtractW(*ptr); +- sh = rfbHextileExtractH(*ptr); +- ptr++; +- +- FillRectangle(client, x+sx, y+sy, sw, sh, fg); +- } +- +- } else { +- if (!ReadFromRFBServer(client, client->buffer, nSubrects * 2)) +- return FALSE; +- +- for (i = 0; i < nSubrects; i++) { +- sx = rfbHextileExtractX(*ptr); +- sy = rfbHextileExtractY(*ptr); +- ptr++; +- sw = rfbHextileExtractW(*ptr); +- sh = rfbHextileExtractH(*ptr); +- ptr++; +- +- FillRectangle(client, x+sx, y+sy, sw, sh, fg); +- } +- } +- } +- } +- +- return TRUE; +-} +- +-#undef CARDBPP +diff -urN remmina-plugins/vnc/libvncserver/libvncclient/listen.c remmina-plugins/vnc/libvncserver/libvncclient/listen.c +--- remmina-plugins/vnc/libvncserver/libvncclient/listen.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/libvncclient/listen.c 1970-01-01 10:00:00.000000000 +1000 +@@ -1,172 +0,0 @@ +-/* +- * Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved. +- * +- * This is free software; you can 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. +- * +- * This software 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 this software; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +- * USA. +- */ +- +-/* +- * listen.c - listen for incoming connections +- */ +- +-#ifdef __STRICT_ANSI__ +-#define _BSD_SOURCE +-#endif +-#include <unistd.h> +-#include <sys/types.h> +-#ifdef __MINGW32__ +-#define close closesocket +-#include <winsock2.h> +-#undef max +-#else +-#include <sys/wait.h> +-#include <sys/utsname.h> +-#endif +-#include <sys/time.h> +-#include <rfb/rfbclient.h> +- +-/* +- * listenForIncomingConnections() - listen for incoming connections from +- * servers, and fork a new process to deal with each connection. +- */ +- +-void +-listenForIncomingConnections(rfbClient* client) +-{ +-#ifdef __MINGW32__ +- /* FIXME */ +- rfbClientErr("listenForIncomingConnections on MinGW32 NOT IMPLEMENTED\n"); +- return; +-#else +- int listenSocket; +- fd_set fds; +- +- client->listenSpecified = TRUE; +- +- listenSocket = ListenAtTcpPort(client->listenPort); +- +- if ((listenSocket < 0)) +- return; +- +- rfbClientLog("%s -listen: Listening on port %d\n", +- client->programName,client->listenPort); +- rfbClientLog("%s -listen: Command line errors are not reported until " +- "a connection comes in.\n", client->programName); +- +- while (TRUE) { +- +- /* reap any zombies */ +- int status, pid; +- while ((pid= wait3(&status, WNOHANG, (struct rusage *)0))>0); +- +- /* TODO: callback for discard any events (like X11 events) */ +- +- FD_ZERO(&fds); +- +- FD_SET(listenSocket, &fds); +- +- select(listenSocket+1, &fds, NULL, NULL, NULL); +- +- if (FD_ISSET(listenSocket, &fds)) { +- client->sock = AcceptTcpConnection(listenSocket); +- if (client->sock < 0) +- return; +- if (!SetNonBlocking(client->sock)) +- return; +- +- /* Now fork off a new process to deal with it... */ +- +- switch (fork()) { +- +- case -1: +- rfbClientErr("fork\n"); +- return; +- +- case 0: +- /* child - return to caller */ +- close(listenSocket); +- return; +- +- default: +- /* parent - go round and listen again */ +- close(client->sock); +- break; +- } +- } +- } +-#endif +-} +- +- +- +-/* +- * listenForIncomingConnectionsNoFork() - listen for incoming connections +- * from servers, but DON'T fork, instead just wait timeout microseconds. +- * If timeout is negative, block indefinitly. +- * Returns 1 on success (there was an incoming connection on the listen socket +- * and we accepted it successfully), -1 on error, 0 on timeout. +- */ +- +-int +-listenForIncomingConnectionsNoFork(rfbClient* client, int timeout) +-{ +- fd_set fds; +- struct timeval to; +- int r; +- +- to.tv_sec= timeout / 1000000; +- to.tv_usec= timeout % 1000000; +- +- client->listenSpecified = TRUE; +- +- if (client->listenSock < 0) +- { +- client->listenSock = ListenAtTcpPort(client->listenPort); +- +- if (client->listenSock < 0) +- return -1; +- +- rfbClientLog("%s -listennofork: Listening on port %d\n", +- client->programName,client->listenPort); +- rfbClientLog("%s -listennofork: Command line errors are not reported until " +- "a connection comes in.\n", client->programName); +- } +- +- FD_ZERO(&fds); +- +- FD_SET(client->listenSock, &fds); +- +- if (timeout < 0) +- r = select(client->listenSock+1, &fds, NULL, NULL, NULL); +- else +- r = select(client->listenSock+1, &fds, NULL, NULL, &to); +- +- if (r > 0) +- { +- client->sock = AcceptTcpConnection(client->listenSock); +- if (client->sock < 0) +- return -1; +- if (!SetNonBlocking(client->sock)) +- return -1; +- +- close(client->listenSock); +- return r; +- } +- +- /* r is now either 0 (timeout) or -1 (error) */ +- return r; +-} +- +- +diff -urN remmina-plugins/vnc/libvncserver/libvncclient/rfbproto.c remmina-plugins/vnc/libvncserver/libvncclient/rfbproto.c +--- remmina-plugins/vnc/libvncserver/libvncclient/rfbproto.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/libvncclient/rfbproto.c 1970-01-01 10:00:00.000000000 +1000 +@@ -1,2406 +0,0 @@ +-/* +- * Copyright (C) 2000-2002 Constantin Kaplinsky. All Rights Reserved. +- * Copyright (C) 2000 Tridia Corporation. All Rights Reserved. +- * Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved. +- * +- * This is free software; you can 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. +- * +- * This software 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 this software; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +- * USA. +- */ +- +-/* +- * rfbproto.c - functions to deal with client side of RFB protocol. +- */ +- +-#ifdef __STRICT_ANSI__ +-#define _BSD_SOURCE +-#define _POSIX_SOURCE +-#endif +-#ifndef WIN32 +-#include <unistd.h> +-#include <sys/types.h> +-#include <sys/stat.h> +-#include <pwd.h> +-#endif +-#include <errno.h> +-#include <rfb/rfbclient.h> +-#ifdef LIBVNCSERVER_HAVE_LIBZ +-#include <zlib.h> +-#ifdef __CHECKER__ +-#undef Z_NULL +-#define Z_NULL NULL +-#endif +-#endif +-#ifdef LIBVNCSERVER_HAVE_LIBJPEG +-#ifdef _RPCNDR_H /* This Windows header typedefs 'boolean', jpeglib has to know */ +-#define HAVE_BOOLEAN +-#endif +-#include <jpeglib.h> +-#endif +-#include <stdarg.h> +-#include <time.h> +- +-#ifdef LIBVNCSERVER_WITH_CLIENT_GCRYPT +-#ifdef WIN32 +-#undef SOCKET +-#undef socklen_t +-#endif +-#include <gcrypt.h> +-#endif +- +-#include "minilzo.h" +-#include "tls.h" +- +-/* +- * rfbClientLog prints a time-stamped message to the log file (stderr). +- */ +- +-rfbBool rfbEnableClientLogging=TRUE; +- +-static void +-rfbDefaultClientLog(const char *format, ...) +-{ +- va_list args; +- char buf[256]; +- time_t log_clock; +- +- if(!rfbEnableClientLogging) +- return; +- +- va_start(args, format); +- +- time(&log_clock); +- strftime(buf, 255, "%d/%m/%Y %X ", localtime(&log_clock)); +- fprintf(stderr, "%s", buf); +- +- vfprintf(stderr, format, args); +- fflush(stderr); +- +- va_end(args); +-} +- +-rfbClientLogProc rfbClientLog=rfbDefaultClientLog; +-rfbClientLogProc rfbClientErr=rfbDefaultClientLog; +- +-/* extensions */ +- +-rfbClientProtocolExtension* rfbClientExtensions = NULL; +- +-void rfbClientRegisterExtension(rfbClientProtocolExtension* e) +-{ +- e->next = rfbClientExtensions; +- rfbClientExtensions = e; +-} +- +-/* client data */ +- +-void rfbClientSetClientData(rfbClient* client, void* tag, void* data) +-{ +- rfbClientData* clientData = client->clientData; +- +- while(clientData && clientData->tag != tag) +- clientData = clientData->next; +- if(clientData == NULL) { +- clientData = calloc(sizeof(rfbClientData), 1); +- clientData->next = client->clientData; +- client->clientData = clientData; +- clientData->tag = tag; +- } +- +- clientData->data = data; +-} +- +-void* rfbClientGetClientData(rfbClient* client, void* tag) +-{ +- rfbClientData* clientData = client->clientData; +- +- while(clientData) { +- if(clientData->tag == tag) +- return clientData->data; +- clientData = clientData->next; +- } +- +- return NULL; +-} +- +-/* messages */ +- +-static void FillRectangle(rfbClient* client, int x, int y, int w, int h, uint32_t colour) { +- int i,j; +- +-#define FILL_RECT(BPP) \ +- for(j=y*client->width;j<(y+h)*client->width;j+=client->width) \ +- for(i=x;i<x+w;i++) \ +- ((uint##BPP##_t*)client->frameBuffer)[j+i]=colour; +- +- switch(client->format.bitsPerPixel) { +- case 8: FILL_RECT(8); break; +- case 16: FILL_RECT(16); break; +- case 32: FILL_RECT(32); break; +- default: +- rfbClientLog("Unsupported bitsPerPixel: %d\n",client->format.bitsPerPixel); +- } +-} +- +-static void CopyRectangle(rfbClient* client, uint8_t* buffer, int x, int y, int w, int h) { +- int j; +- +-#define COPY_RECT(BPP) \ +- { \ +- int rs = w * BPP / 8, rs2 = client->width * BPP / 8; \ +- for (j = ((x * (BPP / 8)) + (y * rs2)); j < (y + h) * rs2; j += rs2) { \ +- memcpy(client->frameBuffer + j, buffer, rs); \ +- buffer += rs; \ +- } \ +- } +- +- switch(client->format.bitsPerPixel) { +- case 8: COPY_RECT(8); break; +- case 16: COPY_RECT(16); break; +- case 32: COPY_RECT(32); break; +- default: +- rfbClientLog("Unsupported bitsPerPixel: %d\n",client->format.bitsPerPixel); +- } +-} +- +-/* TODO: test */ +-static void CopyRectangleFromRectangle(rfbClient* client, int src_x, int src_y, int w, int h, int dest_x, int dest_y) { +- int i,j; +- +-#define COPY_RECT_FROM_RECT(BPP) \ +- { \ +- uint##BPP##_t* _buffer=((uint##BPP##_t*)client->frameBuffer)+(src_y-dest_y)*client->width+src_x-dest_x; \ +- if (dest_y < src_y) { \ +- for(j = dest_y*client->width; j < (dest_y+h)*client->width; j += client->width) { \ +- if (dest_x < src_x) { \ +- for(i = dest_x; i < dest_x+w; i++) { \ +- ((uint##BPP##_t*)client->frameBuffer)[j+i]=_buffer[j+i]; \ +- } \ +- } else { \ +- for(i = dest_x+w-1; i >= dest_x; i--) { \ +- ((uint##BPP##_t*)client->frameBuffer)[j+i]=_buffer[j+i]; \ +- } \ +- } \ +- } \ +- } else { \ +- for(j = (dest_y+h-1)*client->width; j >= dest_y*client->width; j-=client->width) { \ +- if (dest_x < src_x) { \ +- for(i = dest_x; i < dest_x+w; i++) { \ +- ((uint##BPP##_t*)client->frameBuffer)[j+i]=_buffer[j+i]; \ +- } \ +- } else { \ +- for(i = dest_x+w-1; i >= dest_x; i--) { \ +- ((uint##BPP##_t*)client->frameBuffer)[j+i]=_buffer[j+i]; \ +- } \ +- } \ +- } \ +- } \ +- } +- +- switch(client->format.bitsPerPixel) { +- case 8: COPY_RECT_FROM_RECT(8); break; +- case 16: COPY_RECT_FROM_RECT(16); break; +- case 32: COPY_RECT_FROM_RECT(32); break; +- default: +- rfbClientLog("Unsupported bitsPerPixel: %d\n",client->format.bitsPerPixel); +- } +-} +- +-static rfbBool HandleRRE8(rfbClient* client, int rx, int ry, int rw, int rh); +-static rfbBool HandleRRE16(rfbClient* client, int rx, int ry, int rw, int rh); +-static rfbBool HandleRRE32(rfbClient* client, int rx, int ry, int rw, int rh); +-static rfbBool HandleCoRRE8(rfbClient* client, int rx, int ry, int rw, int rh); +-static rfbBool HandleCoRRE16(rfbClient* client, int rx, int ry, int rw, int rh); +-static rfbBool HandleCoRRE32(rfbClient* client, int rx, int ry, int rw, int rh); +-static rfbBool HandleHextile8(rfbClient* client, int rx, int ry, int rw, int rh); +-static rfbBool HandleHextile16(rfbClient* client, int rx, int ry, int rw, int rh); +-static rfbBool HandleHextile32(rfbClient* client, int rx, int ry, int rw, int rh); +-static rfbBool HandleUltra8(rfbClient* client, int rx, int ry, int rw, int rh); +-static rfbBool HandleUltra16(rfbClient* client, int rx, int ry, int rw, int rh); +-static rfbBool HandleUltra32(rfbClient* client, int rx, int ry, int rw, int rh); +-static rfbBool HandleUltraZip8(rfbClient* client, int rx, int ry, int rw, int rh); +-static rfbBool HandleUltraZip16(rfbClient* client, int rx, int ry, int rw, int rh); +-static rfbBool HandleUltraZip32(rfbClient* client, int rx, int ry, int rw, int rh); +-#ifdef LIBVNCSERVER_HAVE_LIBZ +-static rfbBool HandleZlib8(rfbClient* client, int rx, int ry, int rw, int rh); +-static rfbBool HandleZlib16(rfbClient* client, int rx, int ry, int rw, int rh); +-static rfbBool HandleZlib32(rfbClient* client, int rx, int ry, int rw, int rh); +-#ifdef LIBVNCSERVER_HAVE_LIBJPEG +-static rfbBool HandleTight8(rfbClient* client, int rx, int ry, int rw, int rh); +-static rfbBool HandleTight16(rfbClient* client, int rx, int ry, int rw, int rh); +-static rfbBool HandleTight32(rfbClient* client, int rx, int ry, int rw, int rh); +- +-static long ReadCompactLen (rfbClient* client); +- +-static void JpegInitSource(j_decompress_ptr cinfo); +-static boolean JpegFillInputBuffer(j_decompress_ptr cinfo); +-static void JpegSkipInputData(j_decompress_ptr cinfo, long num_bytes); +-static void JpegTermSource(j_decompress_ptr cinfo); +-static void JpegSetSrcManager(j_decompress_ptr cinfo, uint8_t *compressedData, +- int compressedLen); +-#endif +-static rfbBool HandleZRLE8(rfbClient* client, int rx, int ry, int rw, int rh); +-static rfbBool HandleZRLE15(rfbClient* client, int rx, int ry, int rw, int rh); +-static rfbBool HandleZRLE16(rfbClient* client, int rx, int ry, int rw, int rh); +-static rfbBool HandleZRLE24(rfbClient* client, int rx, int ry, int rw, int rh); +-static rfbBool HandleZRLE24Up(rfbClient* client, int rx, int ry, int rw, int rh); +-static rfbBool HandleZRLE24Down(rfbClient* client, int rx, int ry, int rw, int rh); +-static rfbBool HandleZRLE32(rfbClient* client, int rx, int ry, int rw, int rh); +-#endif +- +-/* +- * Server Capability Functions +- */ +-rfbBool +-SupportsClient2Server(rfbClient* client, int messageType) +-{ +- return (client->supportedMessages.client2server[((messageType & 0xFF)/8)] & (1<<(messageType % 8)) ? TRUE : FALSE); +-} +- +-rfbBool +-SupportsServer2Client(rfbClient* client, int messageType) +-{ +- return (client->supportedMessages.server2client[((messageType & 0xFF)/8)] & (1<<(messageType % 8)) ? TRUE : FALSE); +-} +- +-void +-SetClient2Server(rfbClient* client, int messageType) +-{ +- client->supportedMessages.client2server[((messageType & 0xFF)/8)] |= (1<<(messageType % 8)); +-} +- +-void +-SetServer2Client(rfbClient* client, int messageType) +-{ +- client->supportedMessages.server2client[((messageType & 0xFF)/8)] |= (1<<(messageType % 8)); +-} +- +-void +-ClearClient2Server(rfbClient* client, int messageType) +-{ +- client->supportedMessages.client2server[((messageType & 0xFF)/8)] &= (!(1<<(messageType % 8))); +-} +- +-void +-ClearServer2Client(rfbClient* client, int messageType) +-{ +- client->supportedMessages.server2client[((messageType & 0xFF)/8)] &= (!(1<<(messageType % 8))); +-} +- +- +-void +-DefaultSupportedMessages(rfbClient* client) +-{ +- memset((char *)&client->supportedMessages,0,sizeof(client->supportedMessages)); +- +- /* Default client supported messages (universal RFB 3.3 protocol) */ +- SetClient2Server(client, rfbSetPixelFormat); +- /* SetClient2Server(client, rfbFixColourMapEntries); Not currently supported */ +- SetClient2Server(client, rfbSetEncodings); +- SetClient2Server(client, rfbFramebufferUpdateRequest); +- SetClient2Server(client, rfbKeyEvent); +- SetClient2Server(client, rfbPointerEvent); +- SetClient2Server(client, rfbClientCutText); +- /* technically, we only care what we can *send* to the server +- * but, we set Server2Client Just in case it ever becomes useful +- */ +- SetServer2Client(client, rfbFramebufferUpdate); +- SetServer2Client(client, rfbSetColourMapEntries); +- SetServer2Client(client, rfbBell); +- SetServer2Client(client, rfbServerCutText); +-} +- +-void +-DefaultSupportedMessagesUltraVNC(rfbClient* client) +-{ +- DefaultSupportedMessages(client); +- SetClient2Server(client, rfbFileTransfer); +- SetClient2Server(client, rfbSetScale); +- SetClient2Server(client, rfbSetServerInput); +- SetClient2Server(client, rfbSetSW); +- SetClient2Server(client, rfbTextChat); +- SetClient2Server(client, rfbPalmVNCSetScaleFactor); +- /* technically, we only care what we can *send* to the server */ +- SetServer2Client(client, rfbResizeFrameBuffer); +- SetServer2Client(client, rfbPalmVNCReSizeFrameBuffer); +- SetServer2Client(client, rfbFileTransfer); +- SetServer2Client(client, rfbTextChat); +-} +- +- +-void +-DefaultSupportedMessagesTightVNC(rfbClient* client) +-{ +- DefaultSupportedMessages(client); +- SetClient2Server(client, rfbFileTransfer); +- SetClient2Server(client, rfbSetServerInput); +- SetClient2Server(client, rfbSetSW); +- /* SetClient2Server(client, rfbTextChat); */ +- /* technically, we only care what we can *send* to the server */ +- SetServer2Client(client, rfbFileTransfer); +- SetServer2Client(client, rfbTextChat); +-} +- +-#ifndef WIN32 +-static rfbBool +-IsUnixSocket(const char *name) +-{ +- struct stat sb; +- if(stat(name, &sb) == 0 && (sb.st_mode & S_IFMT) == S_IFSOCK) +- return TRUE; +- return FALSE; +-} +-#endif +- +-/* +- * ConnectToRFBServer. +- */ +- +-rfbBool +-ConnectToRFBServer(rfbClient* client,const char *hostname, int port) +-{ +- if (client->serverPort==-1) { +- /* serverHost is a file recorded by vncrec. */ +- const char* magic="vncLog0.0"; +- char buffer[10]; +- rfbVNCRec* rec = (rfbVNCRec*)malloc(sizeof(rfbVNCRec)); +- client->vncRec = rec; +- +- rec->file = fopen(client->serverHost,"rb"); +- rec->tv.tv_sec = 0; +- rec->readTimestamp = FALSE; +- rec->doNotSleep = FALSE; +- +- if (!rec->file) { +- rfbClientLog("Could not open %s.\n",client->serverHost); +- return FALSE; +- } +- setbuf(rec->file,NULL); +- fread(buffer,1,strlen(magic),rec->file); +- if (strncmp(buffer,magic,strlen(magic))) { +- rfbClientLog("File %s was not recorded by vncrec.\n",client->serverHost); +- fclose(rec->file); +- return FALSE; +- } +- client->sock = -1; +- return TRUE; +- } +- +-#ifndef WIN32 +- if(IsUnixSocket(hostname)) +- /* serverHost is a UNIX socket. */ +- client->sock = ConnectClientToUnixSock(hostname); +- else +-#endif +- { +-#ifdef LIBVNCSERVER_IPv6 +- client->sock = ConnectClientToTcpAddr6(hostname, port); +- if (client->sock == -1) +-#endif +- { +- unsigned int host; +- +- /* serverHost is a hostname */ +- if (!StringToIPAddr(hostname, &host)) { +- rfbClientLog("Couldn't convert '%s' to host address\n", hostname); +- return FALSE; +- } +- client->sock = ConnectClientToTcpAddr(host, port); +- } +- } +- +- if (client->sock < 0) { +- rfbClientLog("Unable to connect to VNC server\n"); +- return FALSE; +- } +- +- if(client->QoS_DSCP && !SetDSCP(client->sock, client->QoS_DSCP)) +- return FALSE; +- +- return SetNonBlocking(client->sock); +-} +- +-/* +- * ConnectToRFBRepeater. +- */ +- +-rfbBool ConnectToRFBRepeater(rfbClient* client,const char *repeaterHost, int repeaterPort, const char *destHost, int destPort) +-{ +- rfbProtocolVersionMsg pv; +- int major,minor; +- char tmphost[250]; +- +-#ifdef LIBVNCSERVER_IPv6 +- client->sock = ConnectClientToTcpAddr6(repeaterHost, repeaterPort); +- if (client->sock == -1) +-#endif +- { +- unsigned int host; +- if (!StringToIPAddr(repeaterHost, &host)) { +- rfbClientLog("Couldn't convert '%s' to host address\n", repeaterHost); +- return FALSE; +- } +- +- client->sock = ConnectClientToTcpAddr(host, repeaterPort); +- } +- +- if (client->sock < 0) { +- rfbClientLog("Unable to connect to VNC repeater\n"); +- return FALSE; +- } +- +- if (!SetNonBlocking(client->sock)) +- return FALSE; +- +- if (!ReadFromRFBServer(client, pv, sz_rfbProtocolVersionMsg)) +- return FALSE; +- pv[sz_rfbProtocolVersionMsg] = 0; +- +- /* UltraVNC repeater always report version 000.000 to identify itself */ +- if (sscanf(pv,rfbProtocolVersionFormat,&major,&minor) != 2 || major != 0 || minor != 0) { +- rfbClientLog("Not a valid VNC repeater (%s)\n",pv); +- return FALSE; +- } +- +- rfbClientLog("Connected to VNC repeater, using protocol version %d.%d\n", major, minor); +- +- snprintf(tmphost, sizeof(tmphost), "%s:%d", destHost, destPort); +- if (!WriteToRFBServer(client, tmphost, sizeof(tmphost))) +- return FALSE; +- +- return TRUE; +-} +- +-extern void rfbClientEncryptBytes(unsigned char* bytes, char* passwd); +-extern void rfbClientEncryptBytes2(unsigned char *where, const int length, unsigned char *key); +- +-rfbBool +-rfbHandleAuthResult(rfbClient* client) +-{ +- uint32_t authResult=0, reasonLen=0; +- char *reason=NULL; +- +- if (!ReadFromRFBServer(client, (char *)&authResult, 4)) return FALSE; +- +- authResult = rfbClientSwap32IfLE(authResult); +- +- switch (authResult) { +- case rfbVncAuthOK: +- rfbClientLog("VNC authentication succeeded\n"); +- return TRUE; +- break; +- case rfbVncAuthFailed: +- if (client->major==3 && client->minor>7) +- { +- /* we have an error following */ +- if (!ReadFromRFBServer(client, (char *)&reasonLen, 4)) return FALSE; +- reasonLen = rfbClientSwap32IfLE(reasonLen); +- reason = malloc(reasonLen+1); +- if (!ReadFromRFBServer(client, reason, reasonLen)) { free(reason); return FALSE; } +- reason[reasonLen]=0; +- rfbClientLog("VNC connection failed: %s\n",reason); +- free(reason); +- return FALSE; +- } +- rfbClientLog("VNC authentication failed\n"); +- return FALSE; +- case rfbVncAuthTooMany: +- rfbClientLog("VNC authentication failed - too many tries\n"); +- return FALSE; +- } +- +- rfbClientLog("Unknown VNC authentication result: %d\n", +- (int)authResult); +- return FALSE; +-} +- +-static void +-ReadReason(rfbClient* client) +-{ +- uint32_t reasonLen; +- char *reason; +- +- /* we have an error following */ +- if (!ReadFromRFBServer(client, (char *)&reasonLen, 4)) return; +- reasonLen = rfbClientSwap32IfLE(reasonLen); +- reason = malloc(reasonLen+1); +- if (!ReadFromRFBServer(client, reason, reasonLen)) { free(reason); return; } +- reason[reasonLen]=0; +- rfbClientLog("VNC connection failed: %s\n",reason); +- free(reason); +-} +- +-static rfbBool +-ReadSupportedSecurityType(rfbClient* client, uint32_t *result, rfbBool subAuth) +-{ +- uint8_t count=0; +- uint8_t loop=0; +- uint8_t flag=0; +- uint8_t tAuth[256]; +- char buf1[500],buf2[10]; +- uint32_t authScheme; +- +- if (!ReadFromRFBServer(client, (char *)&count, 1)) return FALSE; +- +- if (count==0) +- { +- rfbClientLog("List of security types is ZERO, expecting an error to follow\n"); +- ReadReason(client); +- return FALSE; +- } +- +- rfbClientLog("We have %d security types to read\n", count); +- authScheme=0; +- /* now, we have a list of available security types to read ( uint8_t[] ) */ +- for (loop=0;loop<count;loop++) +- { +- if (!ReadFromRFBServer(client, (char *)&tAuth[loop], 1)) return FALSE; +- rfbClientLog("%d) Received security type %d\n", loop, tAuth[loop]); +- if (flag) continue; +- if (tAuth[loop]==rfbVncAuth || tAuth[loop]==rfbNoAuth || +- (tAuth[loop]==rfbARD && client->GetCredential) || +- (!subAuth && (tAuth[loop]==rfbTLS || (tAuth[loop]==rfbVeNCrypt && client->GetCredential)))) +- { +- if (!subAuth && client->clientAuthSchemes) +- { +- int i; +- for (i=0;client->clientAuthSchemes[i];i++) +- { +- if (client->clientAuthSchemes[i]==(uint32_t)tAuth[loop]) +- { +- flag++; +- authScheme=tAuth[loop]; +- break; +- } +- } +- } +- else +- { +- flag++; +- authScheme=tAuth[loop]; +- } +- if (flag) +- { +- rfbClientLog("Selecting security type %d (%d/%d in the list)\n", authScheme, loop, count); +- /* send back a single byte indicating which security type to use */ +- if (!WriteToRFBServer(client, (char *)&tAuth[loop], 1)) return FALSE; +- } +- } +- } +- if (authScheme==0) +- { +- memset(buf1, 0, sizeof(buf1)); +- for (loop=0;loop<count;loop++) +- { +- if (strlen(buf1)>=sizeof(buf1)-1) break; +- snprintf(buf2, sizeof(buf2), (loop>0 ? ", %d" : "%d"), (int)tAuth[loop]); +- strncat(buf1, buf2, sizeof(buf1)-strlen(buf1)-1); +- } +- rfbClientLog("Unknown authentication scheme from VNC server: %s\n", +- buf1); +- return FALSE; +- } +- *result = authScheme; +- return TRUE; +-} +- +-static rfbBool +-HandleVncAuth(rfbClient *client) +-{ +- uint8_t challenge[CHALLENGESIZE]; +- char *passwd=NULL; +- int i; +- +- if (!ReadFromRFBServer(client, (char *)challenge, CHALLENGESIZE)) return FALSE; +- +- if (client->serverPort!=-1) { /* if not playing a vncrec file */ +- if (client->GetPassword) +- passwd = client->GetPassword(client); +- +- if ((!passwd) || (strlen(passwd) == 0)) { +- rfbClientLog("Reading password failed\n"); +- return FALSE; +- } +- if (strlen(passwd) > 8) { +- passwd[8] = '\0'; +- } +- +- rfbClientEncryptBytes(challenge, passwd); +- +- /* Lose the password from memory */ +- for (i = strlen(passwd); i >= 0; i--) { +- passwd[i] = '\0'; +- } +- free(passwd); +- +- if (!WriteToRFBServer(client, (char *)challenge, CHALLENGESIZE)) return FALSE; +- } +- +- /* Handle the SecurityResult message */ +- if (!rfbHandleAuthResult(client)) return FALSE; +- +- return TRUE; +-} +- +-static void +-FreeUserCredential(rfbCredential *cred) +-{ +- if (cred->userCredential.username) free(cred->userCredential.username); +- if (cred->userCredential.password) free(cred->userCredential.password); +- free(cred); +-} +- +-static rfbBool +-HandlePlainAuth(rfbClient *client) +-{ +- uint32_t ulen, ulensw; +- uint32_t plen, plensw; +- rfbCredential *cred; +- +- if (!client->GetCredential) +- { +- rfbClientLog("GetCredential callback is not set.\n"); +- return FALSE; +- } +- cred = client->GetCredential(client, rfbCredentialTypeUser); +- if (!cred) +- { +- rfbClientLog("Reading credential failed\n"); +- return FALSE; +- } +- +- ulen = (cred->userCredential.username ? strlen(cred->userCredential.username) : 0); +- ulensw = rfbClientSwap32IfLE(ulen); +- plen = (cred->userCredential.password ? strlen(cred->userCredential.password) : 0); +- plensw = rfbClientSwap32IfLE(plen); +- if (!WriteToRFBServer(client, (char *)&ulensw, 4) || +- !WriteToRFBServer(client, (char *)&plensw, 4)) +- { +- FreeUserCredential(cred); +- return FALSE; +- } +- if (ulen > 0) +- { +- if (!WriteToRFBServer(client, cred->userCredential.username, ulen)) +- { +- FreeUserCredential(cred); +- return FALSE; +- } +- } +- if (plen > 0) +- { +- if (!WriteToRFBServer(client, cred->userCredential.password, plen)) +- { +- FreeUserCredential(cred); +- return FALSE; +- } +- } +- +- FreeUserCredential(cred); +- +- /* Handle the SecurityResult message */ +- if (!rfbHandleAuthResult(client)) return FALSE; +- +- return TRUE; +-} +- +-/* Simple 64bit big integer arithmetic implementation */ +-/* (x + y) % m, works even if (x + y) > 64bit */ +-#define rfbAddM64(x,y,m) ((x+y)%m+(x+y<x?(((uint64_t)-1)%m+1)%m:0)) +-/* (x * y) % m */ +-static uint64_t +-rfbMulM64(uint64_t x, uint64_t y, uint64_t m) +-{ +- uint64_t r; +- for(r=0;x>0;x>>=1) +- { +- if (x&1) r=rfbAddM64(r,y,m); +- y=rfbAddM64(y,y,m); +- } +- return r; +-} +-/* (x ^ y) % m */ +-static uint64_t +-rfbPowM64(uint64_t b, uint64_t e, uint64_t m) +-{ +- uint64_t r; +- for(r=1;e>0;e>>=1) +- { +- if(e&1) r=rfbMulM64(r,b,m); +- b=rfbMulM64(b,b,m); +- } +- return r; +-} +- +-static rfbBool +-HandleMSLogonAuth(rfbClient *client) +-{ +- uint64_t gen, mod, resp, priv, pub, key; +- uint8_t username[256], password[64]; +- rfbCredential *cred; +- +- if (!ReadFromRFBServer(client, (char *)&gen, 8)) return FALSE; +- if (!ReadFromRFBServer(client, (char *)&mod, 8)) return FALSE; +- if (!ReadFromRFBServer(client, (char *)&resp, 8)) return FALSE; +- gen = rfbClientSwap64IfLE(gen); +- mod = rfbClientSwap64IfLE(mod); +- resp = rfbClientSwap64IfLE(resp); +- +- if (!client->GetCredential) +- { +- rfbClientLog("GetCredential callback is not set.\n"); +- return FALSE; +- } +- rfbClientLog("WARNING! MSLogon security type has very low password encryption! "\ +- "Use it only with SSH tunnel or trusted network.\n"); +- cred = client->GetCredential(client, rfbCredentialTypeUser); +- if (!cred) +- { +- rfbClientLog("Reading credential failed\n"); +- return FALSE; +- } +- +- memset(username, 0, sizeof(username)); +- strncpy((char *)username, cred->userCredential.username, sizeof(username)); +- memset(password, 0, sizeof(password)); +- strncpy((char *)password, cred->userCredential.password, sizeof(password)); +- FreeUserCredential(cred); +- +- srand(time(NULL)); +- priv = ((uint64_t)rand())<<32; +- priv |= (uint64_t)rand(); +- +- pub = rfbPowM64(gen, priv, mod); +- key = rfbPowM64(resp, priv, mod); +- pub = rfbClientSwap64IfLE(pub); +- key = rfbClientSwap64IfLE(key); +- +- rfbClientEncryptBytes2(username, sizeof(username), (unsigned char *)&key); +- rfbClientEncryptBytes2(password, sizeof(password), (unsigned char *)&key); +- +- if (!WriteToRFBServer(client, (char *)&pub, 8)) return FALSE; +- if (!WriteToRFBServer(client, (char *)username, sizeof(username))) return FALSE; +- if (!WriteToRFBServer(client, (char *)password, sizeof(password))) return FALSE; +- +- /* Handle the SecurityResult message */ +- if (!rfbHandleAuthResult(client)) return FALSE; +- +- return TRUE; +-} +- +-#ifdef LIBVNCSERVER_WITH_CLIENT_GCRYPT +-static rfbBool +-rfbMpiToBytes(const gcry_mpi_t value, uint8_t *result, size_t size) +-{ +- gcry_error_t error; +- size_t len; +- int i; +- +- error = gcry_mpi_print(GCRYMPI_FMT_USG, result, size, &len, value); +- if (gcry_err_code(error) != GPG_ERR_NO_ERROR) +- { +- rfbClientLog("gcry_mpi_print error: %s\n", gcry_strerror(error)); +- return FALSE; +- } +- for (i=size-1;i>(int)size-1-(int)len;--i) +- result[i] = result[i-size+len]; +- for (;i>=0;--i) +- result[i] = 0; +- return TRUE; +-} +- +-static rfbBool +-HandleARDAuth(rfbClient *client) +-{ +- uint8_t gen[2], len[2]; +- size_t keylen; +- uint8_t *mod = NULL, *resp, *pub, *key, *shared; +- gcry_mpi_t genmpi = NULL, modmpi = NULL, respmpi = NULL; +- gcry_mpi_t privmpi = NULL, pubmpi = NULL, keympi = NULL; +- gcry_md_hd_t md5 = NULL; +- gcry_cipher_hd_t aes = NULL; +- gcry_error_t error; +- uint8_t userpass[128], ciphertext[128]; +- int passwordLen, usernameLen; +- rfbCredential *cred = NULL; +- rfbBool result = FALSE; +- +- while (1) +- { +- if (!ReadFromRFBServer(client, (char *)gen, 2)) +- break; +- if (!ReadFromRFBServer(client, (char *)len, 2)) +- break; +- +- if (!client->GetCredential) +- { +- rfbClientLog("GetCredential callback is not set.\n"); +- break; +- } +- cred = client->GetCredential(client, rfbCredentialTypeUser); +- if (!cred) +- { +- rfbClientLog("Reading credential failed\n"); +- break; +- } +- +- keylen = 256*len[0]+len[1]; +- mod = (uint8_t*)malloc(keylen*4); +- if (!mod) +- { +- rfbClientLog("malloc out of memory\n"); +- break; +- } +- resp = mod+keylen; +- pub = resp+keylen; +- key = pub+keylen; +- +- if (!ReadFromRFBServer(client, (char *)mod, keylen)) +- break; +- if (!ReadFromRFBServer(client, (char *)resp, keylen)) +- break; +- +- error = gcry_mpi_scan(&genmpi, GCRYMPI_FMT_USG, gen, 2, NULL); +- if (gcry_err_code(error) != GPG_ERR_NO_ERROR) +- { +- rfbClientLog("gcry_mpi_scan error: %s\n", gcry_strerror(error)); +- break; +- } +- error = gcry_mpi_scan(&modmpi, GCRYMPI_FMT_USG, mod, keylen, NULL); +- if (gcry_err_code(error) != GPG_ERR_NO_ERROR) +- { +- rfbClientLog("gcry_mpi_scan error: %s\n", gcry_strerror(error)); +- break; +- } +- error = gcry_mpi_scan(&respmpi, GCRYMPI_FMT_USG, resp, keylen, NULL); +- if (gcry_err_code(error) != GPG_ERR_NO_ERROR) +- { +- rfbClientLog("gcry_mpi_scan error: %s\n", gcry_strerror(error)); +- break; +- } +- +- privmpi = gcry_mpi_new(keylen); +- if (!privmpi) +- { +- rfbClientLog("gcry_mpi_new out of memory\n"); +- break; +- } +- gcry_mpi_randomize(privmpi, (keylen/8)*8, GCRY_STRONG_RANDOM); +- +- pubmpi = gcry_mpi_new(keylen); +- if (!pubmpi) +- { +- rfbClientLog("gcry_mpi_new out of memory\n"); +- break; +- } +- gcry_mpi_powm(pubmpi, genmpi, privmpi, modmpi); +- +- keympi = gcry_mpi_new(keylen); +- if (!keympi) +- { +- rfbClientLog("gcry_mpi_new out of memory\n"); +- break; +- } +- gcry_mpi_powm(keympi, respmpi, privmpi, modmpi); +- +- if (!rfbMpiToBytes(pubmpi, pub, keylen)) +- break; +- if (!rfbMpiToBytes(keympi, key, keylen)) +- break; +- +- error = gcry_md_open(&md5, GCRY_MD_MD5, 0); +- if (gcry_err_code(error) != GPG_ERR_NO_ERROR) +- { +- rfbClientLog("gcry_md_open error: %s\n", gcry_strerror(error)); +- break; +- } +- gcry_md_write(md5, key, keylen); +- error = gcry_md_final(md5); +- if (gcry_err_code(error) != GPG_ERR_NO_ERROR) +- { +- rfbClientLog("gcry_md_final error: %s\n", gcry_strerror(error)); +- break; +- } +- shared = gcry_md_read(md5, GCRY_MD_MD5); +- +- passwordLen = strlen(cred->userCredential.password)+1; +- usernameLen = strlen(cred->userCredential.username)+1; +- if (passwordLen > sizeof(userpass)/2) +- passwordLen = sizeof(userpass)/2; +- if (usernameLen > sizeof(userpass)/2) +- usernameLen = sizeof(userpass)/2; +- +- gcry_randomize(userpass, sizeof(userpass), GCRY_STRONG_RANDOM); +- memcpy(userpass, cred->userCredential.username, usernameLen); +- memcpy(userpass+sizeof(userpass)/2, cred->userCredential.password, passwordLen); +- +- error = gcry_cipher_open(&aes, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_ECB, 0); +- if (gcry_err_code(error) != GPG_ERR_NO_ERROR) +- { +- rfbClientLog("gcry_cipher_open error: %s\n", gcry_strerror(error)); +- break; +- } +- error = gcry_cipher_setkey(aes, shared, 16); +- if (gcry_err_code(error) != GPG_ERR_NO_ERROR) +- { +- rfbClientLog("gcry_cipher_setkey error: %s\n", gcry_strerror(error)); +- break; +- } +- error = gcry_cipher_encrypt(aes, ciphertext, sizeof(ciphertext), userpass, sizeof(userpass)); +- if (gcry_err_code(error) != GPG_ERR_NO_ERROR) +- { +- rfbClientLog("gcry_cipher_encrypt error: %s\n", gcry_strerror(error)); +- break; +- } +- +- if (!WriteToRFBServer(client, (char *)ciphertext, sizeof(ciphertext))) +- break; +- if (!WriteToRFBServer(client, (char *)pub, keylen)) +- break; +- +- /* Handle the SecurityResult message */ +- if (!rfbHandleAuthResult(client)) +- break; +- +- result = TRUE; +- break; +- } +- +- if (cred) +- FreeUserCredential(cred); +- if (mod) +- free(mod); +- if (genmpi) +- gcry_mpi_release(genmpi); +- if (modmpi) +- gcry_mpi_release(modmpi); +- if (respmpi) +- gcry_mpi_release(respmpi); +- if (privmpi) +- gcry_mpi_release(privmpi); +- if (pubmpi) +- gcry_mpi_release(pubmpi); +- if (keympi) +- gcry_mpi_release(keympi); +- if (md5) +- gcry_md_close(md5); +- if (aes) +- gcry_cipher_close(aes); +- return result; +-} +-#endif +- +-/* +- * SetClientAuthSchemes. +- */ +- +-void +-SetClientAuthSchemes(rfbClient* client,const uint32_t *authSchemes, int size) +-{ +- int i; +- +- if (client->clientAuthSchemes) +- { +- free(client->clientAuthSchemes); +- client->clientAuthSchemes = NULL; +- } +- if (authSchemes) +- { +- if (size<0) +- { +- /* If size<0 we assume the passed-in list is also 0-terminate, so we +- * calculate the size here */ +- for (size=0;authSchemes[size];size++) ; +- } +- client->clientAuthSchemes = (uint32_t*)malloc(sizeof(uint32_t)*(size+1)); +- for (i=0;i<size;i++) +- client->clientAuthSchemes[i] = authSchemes[i]; +- client->clientAuthSchemes[size] = 0; +- } +-} +- +-/* +- * InitialiseRFBConnection. +- */ +- +-rfbBool +-InitialiseRFBConnection(rfbClient* client) +-{ +- rfbProtocolVersionMsg pv; +- int major,minor; +- uint32_t authScheme; +-#ifdef LIBVNCSERVER_WITH_CLIENT_TLS +- uint32_t subAuthScheme; +-#endif +- rfbClientInitMsg ci; +- +- /* if the connection is immediately closed, don't report anything, so +- that pmw's monitor can make test connections */ +- +- if (client->listenSpecified) +- errorMessageOnReadFailure = FALSE; +- +- if (!ReadFromRFBServer(client, pv, sz_rfbProtocolVersionMsg)) return FALSE; +- pv[sz_rfbProtocolVersionMsg]=0; +- +- errorMessageOnReadFailure = TRUE; +- +- pv[sz_rfbProtocolVersionMsg] = 0; +- +- if (sscanf(pv,rfbProtocolVersionFormat,&major,&minor) != 2) { +- rfbClientLog("Not a valid VNC server (%s)\n",pv); +- return FALSE; +- } +- +- +- DefaultSupportedMessages(client); +- client->major = major; +- client->minor = minor; +- +- /* fall back to viewer supported version */ +- if ((major==rfbProtocolMajorVersion) && (minor>rfbProtocolMinorVersion)) +- client->minor = rfbProtocolMinorVersion; +- +- /* UltraVNC uses minor codes 4 and 6 for the server */ +- if (major==3 && (minor==4 || minor==6)) { +- rfbClientLog("UltraVNC server detected, enabling UltraVNC specific messages\n",pv); +- DefaultSupportedMessagesUltraVNC(client); +- } +- +- /* TightVNC uses minor codes 5 for the server */ +- if (major==3 && minor==5) { +- rfbClientLog("TightVNC server detected, enabling TightVNC specific messages\n",pv); +- DefaultSupportedMessagesTightVNC(client); +- } +- +- /* we do not support > RFB3.8 */ +- if ((major==3 && minor>8) || major>3) +- { +- client->major=3; +- client->minor=8; +- } +- +- rfbClientLog("VNC server supports protocol version %d.%d (viewer %d.%d)\n", +- major, minor, rfbProtocolMajorVersion, rfbProtocolMinorVersion); +- +- sprintf(pv,rfbProtocolVersionFormat,client->major,client->minor); +- +- if (!WriteToRFBServer(client, pv, sz_rfbProtocolVersionMsg)) return FALSE; +- +- +- /* 3.7 and onwards sends a # of security types first */ +- if (client->major==3 && client->minor > 6) +- { +- if (!ReadSupportedSecurityType(client, &authScheme, FALSE)) return FALSE; +- } +- else +- { +- if (!ReadFromRFBServer(client, (char *)&authScheme, 4)) return FALSE; +- authScheme = rfbClientSwap32IfLE(authScheme); +- } +- +- rfbClientLog("Selected Security Scheme %d\n", authScheme); +- client->authScheme = authScheme; +- +- switch (authScheme) { +- +- case rfbConnFailed: +- ReadReason(client); +- return FALSE; +- +- case rfbNoAuth: +- rfbClientLog("No authentication needed\n"); +- +- /* 3.8 and upwards sends a Security Result for rfbNoAuth */ +- if ((client->major==3 && client->minor > 7) || client->major>3) +- if (!rfbHandleAuthResult(client)) return FALSE; +- +- break; +- +- case rfbVncAuth: +- if (!HandleVncAuth(client)) return FALSE; +- break; +- +- case rfbMSLogon: +- if (!HandleMSLogonAuth(client)) return FALSE; +- break; +- +- case rfbARD: +-#ifndef LIBVNCSERVER_WITH_CLIENT_GCRYPT +- rfbClientLog("GCrypt support was not compiled in\n"); +- return FALSE; +-#else +- if (!HandleARDAuth(client)) return FALSE; +-#endif +- break; +- +- case rfbTLS: +-#ifndef LIBVNCSERVER_WITH_CLIENT_TLS +- rfbClientLog("TLS support was not compiled in\n"); +- return FALSE; +-#else +- if (!HandleAnonTLSAuth(client)) return FALSE; +- /* After the TLS session is established, sub auth types are expected. +- * Note that all following reading/writing are through the TLS session from here. +- */ +- if (!ReadSupportedSecurityType(client, &subAuthScheme, TRUE)) return FALSE; +- client->subAuthScheme = subAuthScheme; +- +- switch (subAuthScheme) { +- +- case rfbConnFailed: +- ReadReason(client); +- return FALSE; +- +- case rfbNoAuth: +- rfbClientLog("No sub authentication needed\n"); +- /* 3.8 and upwards sends a Security Result for rfbNoAuth */ +- if ((client->major==3 && client->minor > 7) || client->major>3) +- if (!rfbHandleAuthResult(client)) return FALSE; +- break; +- +- case rfbVncAuth: +- if (!HandleVncAuth(client)) return FALSE; +- break; +- +- default: +- rfbClientLog("Unknown sub authentication scheme from VNC server: %d\n", +- (int)subAuthScheme); +- return FALSE; +- } +-#endif +- +- break; +- +- case rfbVeNCrypt: +-#ifndef LIBVNCSERVER_WITH_CLIENT_TLS +- rfbClientLog("TLS support was not compiled in\n"); +- return FALSE; +-#else +- if (!HandleVeNCryptAuth(client)) return FALSE; +- +- switch (client->subAuthScheme) { +- +- case rfbVeNCryptTLSNone: +- case rfbVeNCryptX509None: +- rfbClientLog("No sub authentication needed\n"); +- if (!rfbHandleAuthResult(client)) return FALSE; +- break; +- +- case rfbVeNCryptTLSVNC: +- case rfbVeNCryptX509VNC: +- if (!HandleVncAuth(client)) return FALSE; +- break; +- +- case rfbVeNCryptTLSPlain: +- case rfbVeNCryptX509Plain: +- if (!HandlePlainAuth(client)) return FALSE; +- break; +- +- default: +- rfbClientLog("Unknown sub authentication scheme from VNC server: %d\n", +- client->subAuthScheme); +- return FALSE; +- } +-#endif +- break; +- +- default: +- rfbClientLog("Unknown authentication scheme from VNC server: %d\n", +- (int)authScheme); +- return FALSE; +- } +- +- ci.shared = (client->appData.shareDesktop ? 1 : 0); +- +- if (!WriteToRFBServer(client, (char *)&ci, sz_rfbClientInitMsg)) return FALSE; +- +- if (!ReadFromRFBServer(client, (char *)&client->si, sz_rfbServerInitMsg)) return FALSE; +- +- client->si.framebufferWidth = rfbClientSwap16IfLE(client->si.framebufferWidth); +- client->si.framebufferHeight = rfbClientSwap16IfLE(client->si.framebufferHeight); +- client->si.format.redMax = rfbClientSwap16IfLE(client->si.format.redMax); +- client->si.format.greenMax = rfbClientSwap16IfLE(client->si.format.greenMax); +- client->si.format.blueMax = rfbClientSwap16IfLE(client->si.format.blueMax); +- client->si.nameLength = rfbClientSwap32IfLE(client->si.nameLength); +- +- client->desktopName = malloc(client->si.nameLength + 1); +- if (!client->desktopName) { +- rfbClientLog("Error allocating memory for desktop name, %lu bytes\n", +- (unsigned long)client->si.nameLength); +- return FALSE; +- } +- +- if (!ReadFromRFBServer(client, client->desktopName, client->si.nameLength)) return FALSE; +- +- client->desktopName[client->si.nameLength] = 0; +- +- rfbClientLog("Desktop name \"%s\"\n",client->desktopName); +- +- rfbClientLog("Connected to VNC server, using protocol version %d.%d\n", +- client->major, client->minor); +- +- rfbClientLog("VNC server default format:\n"); +- PrintPixelFormat(&client->si.format); +- +- return TRUE; +-} +- +- +-/* +- * SetFormatAndEncodings. +- */ +- +-rfbBool +-SetFormatAndEncodings(rfbClient* client) +-{ +- rfbSetPixelFormatMsg spf; +- char buf[sz_rfbSetEncodingsMsg + MAX_ENCODINGS * 4]; +- +- rfbSetEncodingsMsg *se = (rfbSetEncodingsMsg *)buf; +- uint32_t *encs = (uint32_t *)(&buf[sz_rfbSetEncodingsMsg]); +- int len = 0; +- rfbBool requestCompressLevel = FALSE; +- rfbBool requestQualityLevel = FALSE; +- rfbBool requestLastRectEncoding = FALSE; +- rfbClientProtocolExtension* e; +- +- if (!SupportsClient2Server(client, rfbSetPixelFormat)) return TRUE; +- +- spf.type = rfbSetPixelFormat; +- spf.format = client->format; +- spf.format.redMax = rfbClientSwap16IfLE(spf.format.redMax); +- spf.format.greenMax = rfbClientSwap16IfLE(spf.format.greenMax); +- spf.format.blueMax = rfbClientSwap16IfLE(spf.format.blueMax); +- +- if (!WriteToRFBServer(client, (char *)&spf, sz_rfbSetPixelFormatMsg)) +- return FALSE; +- +- +- if (!SupportsClient2Server(client, rfbSetEncodings)) return TRUE; +- +- se->type = rfbSetEncodings; +- se->nEncodings = 0; +- +- if (client->appData.encodingsString) { +- const char *encStr = client->appData.encodingsString; +- int encStrLen; +- do { +- const char *nextEncStr = strchr(encStr, ' '); +- if (nextEncStr) { +- encStrLen = nextEncStr - encStr; +- nextEncStr++; +- } else { +- encStrLen = strlen(encStr); +- } +- +- if (strncasecmp(encStr,"raw",encStrLen) == 0) { +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingRaw); +- } else if (strncasecmp(encStr,"copyrect",encStrLen) == 0) { +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingCopyRect); +-#ifdef LIBVNCSERVER_HAVE_LIBZ +-#ifdef LIBVNCSERVER_HAVE_LIBJPEG +- } else if (strncasecmp(encStr,"tight",encStrLen) == 0) { +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingTight); +- requestLastRectEncoding = TRUE; +- if (client->appData.compressLevel >= 0 && client->appData.compressLevel <= 9) +- requestCompressLevel = TRUE; +- if (client->appData.enableJPEG) +- requestQualityLevel = TRUE; +-#endif +-#endif +- } else if (strncasecmp(encStr,"hextile",encStrLen) == 0) { +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingHextile); +-#ifdef LIBVNCSERVER_HAVE_LIBZ +- } else if (strncasecmp(encStr,"zlib",encStrLen) == 0) { +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingZlib); +- if (client->appData.compressLevel >= 0 && client->appData.compressLevel <= 9) +- requestCompressLevel = TRUE; +- } else if (strncasecmp(encStr,"zlibhex",encStrLen) == 0) { +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingZlibHex); +- if (client->appData.compressLevel >= 0 && client->appData.compressLevel <= 9) +- requestCompressLevel = TRUE; +- } else if (strncasecmp(encStr,"zrle",encStrLen) == 0) { +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingZRLE); +- } else if (strncasecmp(encStr,"zywrle",encStrLen) == 0) { +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingZYWRLE); +- requestQualityLevel = TRUE; +-#endif +- } else if ((strncasecmp(encStr,"ultra",encStrLen) == 0) || (strncasecmp(encStr,"ultrazip",encStrLen) == 0)) { +- /* There are 2 encodings used in 'ultra' */ +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingUltra); +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingUltraZip); +- } else if (strncasecmp(encStr,"corre",encStrLen) == 0) { +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingCoRRE); +- } else if (strncasecmp(encStr,"rre",encStrLen) == 0) { +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingRRE); +- } else { +- rfbClientLog("Unknown encoding '%.*s'\n",encStrLen,encStr); +- } +- +- encStr = nextEncStr; +- } while (encStr && se->nEncodings < MAX_ENCODINGS); +- +- if (se->nEncodings < MAX_ENCODINGS && requestCompressLevel) { +- encs[se->nEncodings++] = rfbClientSwap32IfLE(client->appData.compressLevel + +- rfbEncodingCompressLevel0); +- } +- +- if (se->nEncodings < MAX_ENCODINGS && requestQualityLevel) { +- if (client->appData.qualityLevel < 0 || client->appData.qualityLevel > 9) +- client->appData.qualityLevel = 5; +- encs[se->nEncodings++] = rfbClientSwap32IfLE(client->appData.qualityLevel + +- rfbEncodingQualityLevel0); +- } +- } +- else { +- if (SameMachine(client->sock)) { +- /* TODO: +- if (!tunnelSpecified) { +- */ +- rfbClientLog("Same machine: preferring raw encoding\n"); +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingRaw); +- /* +- } else { +- rfbClientLog("Tunneling active: preferring tight encoding\n"); +- } +- */ +- } +- +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingCopyRect); +-#ifdef LIBVNCSERVER_HAVE_LIBZ +-#ifdef LIBVNCSERVER_HAVE_LIBJPEG +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingTight); +- requestLastRectEncoding = TRUE; +-#endif +-#endif +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingHextile); +-#ifdef LIBVNCSERVER_HAVE_LIBZ +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingZlib); +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingZRLE); +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingZYWRLE); +-#endif +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingUltra); +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingUltraZip); +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingCoRRE); +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingRRE); +- +- if (client->appData.compressLevel >= 0 && client->appData.compressLevel <= 9) { +- encs[se->nEncodings++] = rfbClientSwap32IfLE(client->appData.compressLevel + +- rfbEncodingCompressLevel0); +- } else /* if (!tunnelSpecified) */ { +- /* If -tunnel option was provided, we assume that server machine is +- not in the local network so we use default compression level for +- tight encoding instead of fast compression. Thus we are +- requesting level 1 compression only if tunneling is not used. */ +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingCompressLevel1); +- } +- +- if (client->appData.enableJPEG) { +- if (client->appData.qualityLevel < 0 || client->appData.qualityLevel > 9) +- client->appData.qualityLevel = 5; +- encs[se->nEncodings++] = rfbClientSwap32IfLE(client->appData.qualityLevel + +- rfbEncodingQualityLevel0); +- } +- } +- +- +- +- /* Remote Cursor Support (local to viewer) */ +- if (client->appData.useRemoteCursor) { +- if (se->nEncodings < MAX_ENCODINGS) +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingXCursor); +- if (se->nEncodings < MAX_ENCODINGS) +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingRichCursor); +- if (se->nEncodings < MAX_ENCODINGS) +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingPointerPos); +- } +- +- /* Keyboard State Encodings */ +- if (se->nEncodings < MAX_ENCODINGS) +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingKeyboardLedState); +- +- /* New Frame Buffer Size */ +- if (se->nEncodings < MAX_ENCODINGS && client->canHandleNewFBSize) +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingNewFBSize); +- +- /* Last Rect */ +- if (se->nEncodings < MAX_ENCODINGS && requestLastRectEncoding) +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingLastRect); +- +- /* Server Capabilities */ +- if (se->nEncodings < MAX_ENCODINGS) +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingSupportedMessages); +- if (se->nEncodings < MAX_ENCODINGS) +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingSupportedEncodings); +- if (se->nEncodings < MAX_ENCODINGS) +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingServerIdentity); +- +- /* xvp */ +- if (se->nEncodings < MAX_ENCODINGS) +- encs[se->nEncodings++] = rfbClientSwap32IfLE(rfbEncodingXvp); +- +- /* client extensions */ +- for(e = rfbClientExtensions; e; e = e->next) +- if(e->encodings) { +- int* enc; +- for(enc = e->encodings; *enc; enc++) +- encs[se->nEncodings++] = rfbClientSwap32IfLE(*enc); +- } +- +- len = sz_rfbSetEncodingsMsg + se->nEncodings * 4; +- +- se->nEncodings = rfbClientSwap16IfLE(se->nEncodings); +- +- if (!WriteToRFBServer(client, buf, len)) return FALSE; +- +- return TRUE; +-} +- +- +-/* +- * SendIncrementalFramebufferUpdateRequest. +- */ +- +-rfbBool +-SendIncrementalFramebufferUpdateRequest(rfbClient* client) +-{ +- return SendFramebufferUpdateRequest(client, +- client->updateRect.x, client->updateRect.y, +- client->updateRect.w, client->updateRect.h, TRUE); +-} +- +- +-/* +- * SendFramebufferUpdateRequest. +- */ +- +-rfbBool +-SendFramebufferUpdateRequest(rfbClient* client, int x, int y, int w, int h, rfbBool incremental) +-{ +- rfbFramebufferUpdateRequestMsg fur; +- +- if (!SupportsClient2Server(client, rfbFramebufferUpdateRequest)) return TRUE; +- +- fur.type = rfbFramebufferUpdateRequest; +- fur.incremental = incremental ? 1 : 0; +- fur.x = rfbClientSwap16IfLE(x); +- fur.y = rfbClientSwap16IfLE(y); +- fur.w = rfbClientSwap16IfLE(w); +- fur.h = rfbClientSwap16IfLE(h); +- +- if (!WriteToRFBServer(client, (char *)&fur, sz_rfbFramebufferUpdateRequestMsg)) +- return FALSE; +- +- return TRUE; +-} +- +- +-/* +- * SendScaleSetting. +- */ +-rfbBool +-SendScaleSetting(rfbClient* client,int scaleSetting) +-{ +- rfbSetScaleMsg ssm; +- +- ssm.scale = scaleSetting; +- ssm.pad = 0; +- +- /* favor UltraVNC SetScale if both are supported */ +- if (SupportsClient2Server(client, rfbSetScale)) { +- ssm.type = rfbSetScale; +- if (!WriteToRFBServer(client, (char *)&ssm, sz_rfbSetScaleMsg)) +- return FALSE; +- } +- +- if (SupportsClient2Server(client, rfbPalmVNCSetScaleFactor)) { +- ssm.type = rfbPalmVNCSetScaleFactor; +- if (!WriteToRFBServer(client, (char *)&ssm, sz_rfbSetScaleMsg)) +- return FALSE; +- } +- +- return TRUE; +-} +- +-/* +- * TextChatFunctions (UltraVNC) +- * Extremely bandwidth friendly method of communicating with a user +- * (Think HelpDesk type applications) +- */ +- +-rfbBool TextChatSend(rfbClient* client, char *text) +-{ +- rfbTextChatMsg chat; +- int count = strlen(text); +- +- if (!SupportsClient2Server(client, rfbTextChat)) return TRUE; +- chat.type = rfbTextChat; +- chat.pad1 = 0; +- chat.pad2 = 0; +- chat.length = (uint32_t)count; +- chat.length = rfbClientSwap32IfLE(chat.length); +- +- if (!WriteToRFBServer(client, (char *)&chat, sz_rfbTextChatMsg)) +- return FALSE; +- +- if (count>0) { +- if (!WriteToRFBServer(client, text, count)) +- return FALSE; +- } +- return TRUE; +-} +- +-rfbBool TextChatOpen(rfbClient* client) +-{ +- rfbTextChatMsg chat; +- +- if (!SupportsClient2Server(client, rfbTextChat)) return TRUE; +- chat.type = rfbTextChat; +- chat.pad1 = 0; +- chat.pad2 = 0; +- chat.length = rfbClientSwap32IfLE(rfbTextChatOpen); +- return (WriteToRFBServer(client, (char *)&chat, sz_rfbTextChatMsg) ? TRUE : FALSE); +-} +- +-rfbBool TextChatClose(rfbClient* client) +-{ +- rfbTextChatMsg chat; +- if (!SupportsClient2Server(client, rfbTextChat)) return TRUE; +- chat.type = rfbTextChat; +- chat.pad1 = 0; +- chat.pad2 = 0; +- chat.length = rfbClientSwap32IfLE(rfbTextChatClose); +- return (WriteToRFBServer(client, (char *)&chat, sz_rfbTextChatMsg) ? TRUE : FALSE); +-} +- +-rfbBool TextChatFinish(rfbClient* client) +-{ +- rfbTextChatMsg chat; +- if (!SupportsClient2Server(client, rfbTextChat)) return TRUE; +- chat.type = rfbTextChat; +- chat.pad1 = 0; +- chat.pad2 = 0; +- chat.length = rfbClientSwap32IfLE(rfbTextChatFinished); +- return (WriteToRFBServer(client, (char *)&chat, sz_rfbTextChatMsg) ? TRUE : FALSE); +-} +- +-/* +- * UltraVNC Server Input Disable +- * Apparently, the remote client can *prevent* the local user from interacting with the display +- * I would think this is extremely helpful when used in a HelpDesk situation +- */ +-rfbBool PermitServerInput(rfbClient* client, int enabled) +-{ +- rfbSetServerInputMsg msg; +- +- if (!SupportsClient2Server(client, rfbSetServerInput)) return TRUE; +- /* enabled==1, then server input from local keyboard is disabled */ +- msg.type = rfbSetServerInput; +- msg.status = (enabled ? 1 : 0); +- msg.pad = 0; +- return (WriteToRFBServer(client, (char *)&msg, sz_rfbSetServerInputMsg) ? TRUE : FALSE); +-} +- +- +-/* +- * send xvp client message +- * A client supporting the xvp extension sends this to request that the server initiate +- * a clean shutdown, clean reboot or abrupt reset of the system whose framebuffer the +- * client is displaying. +- * +- * only version 1 is defined in the protocol specs +- * +- * possible values for code are: +- * rfbXvp_Shutdown +- * rfbXvp_Reboot +- * rfbXvp_Reset +- */ +- +-rfbBool SendXvpMsg(rfbClient* client, uint8_t version, uint8_t code) +-{ +- rfbXvpMsg xvp; +- +- if (!SupportsClient2Server(client, rfbXvp)) return TRUE; +- xvp.type = rfbXvp; +- xvp.pad = 0; +- xvp.version = version; +- xvp.code = code; +- +- if (!WriteToRFBServer(client, (char *)&xvp, sz_rfbXvpMsg)) +- return FALSE; +- +- return TRUE; +-} +- +- +-/* +- * SendPointerEvent. +- */ +- +-rfbBool +-SendPointerEvent(rfbClient* client,int x, int y, int buttonMask) +-{ +- rfbPointerEventMsg pe; +- +- if (!SupportsClient2Server(client, rfbPointerEvent)) return TRUE; +- +- pe.type = rfbPointerEvent; +- pe.buttonMask = buttonMask; +- if (x < 0) x = 0; +- if (y < 0) y = 0; +- +- pe.x = rfbClientSwap16IfLE(x); +- pe.y = rfbClientSwap16IfLE(y); +- return WriteToRFBServer(client, (char *)&pe, sz_rfbPointerEventMsg); +-} +- +- +-/* +- * SendKeyEvent. +- */ +- +-rfbBool +-SendKeyEvent(rfbClient* client, uint32_t key, rfbBool down) +-{ +- rfbKeyEventMsg ke; +- +- if (!SupportsClient2Server(client, rfbKeyEvent)) return TRUE; +- +- ke.type = rfbKeyEvent; +- ke.down = down ? 1 : 0; +- ke.key = rfbClientSwap32IfLE(key); +- return WriteToRFBServer(client, (char *)&ke, sz_rfbKeyEventMsg); +-} +- +- +-/* +- * SendClientCutText. +- */ +- +-rfbBool +-SendClientCutText(rfbClient* client, char *str, int len) +-{ +- rfbClientCutTextMsg cct; +- +- if (!SupportsClient2Server(client, rfbClientCutText)) return TRUE; +- +- cct.type = rfbClientCutText; +- cct.length = rfbClientSwap32IfLE(len); +- return (WriteToRFBServer(client, (char *)&cct, sz_rfbClientCutTextMsg) && +- WriteToRFBServer(client, str, len)); +-} +- +- +- +-/* +- * HandleRFBServerMessage. +- */ +- +-rfbBool +-HandleRFBServerMessage(rfbClient* client) +-{ +- rfbServerToClientMsg msg; +- +- if (client->serverPort==-1) +- client->vncRec->readTimestamp = TRUE; +- if (!ReadFromRFBServer(client, (char *)&msg, 1)) +- return FALSE; +- +- switch (msg.type) { +- +- case rfbSetColourMapEntries: +- { +- /* TODO: +- int i; +- uint16_t rgb[3]; +- XColor xc; +- +- if (!ReadFromRFBServer(client, ((char *)&msg) + 1, +- sz_rfbSetColourMapEntriesMsg - 1)) +- return FALSE; +- +- msg.scme.firstColour = rfbClientSwap16IfLE(msg.scme.firstColour); +- msg.scme.nColours = rfbClientSwap16IfLE(msg.scme.nColours); +- +- for (i = 0; i < msg.scme.nColours; i++) { +- if (!ReadFromRFBServer(client, (char *)rgb, 6)) +- return FALSE; +- xc.pixel = msg.scme.firstColour + i; +- xc.red = rfbClientSwap16IfLE(rgb[0]); +- xc.green = rfbClientSwap16IfLE(rgb[1]); +- xc.blue = rfbClientSwap16IfLE(rgb[2]); +- xc.flags = DoRed|DoGreen|DoBlue; +- XStoreColor(dpy, cmap, &xc); +- } +- */ +- +- break; +- } +- +- case rfbFramebufferUpdate: +- { +- rfbFramebufferUpdateRectHeader rect; +- int linesToRead; +- int bytesPerLine; +- int i; +- +- if (!ReadFromRFBServer(client, ((char *)&msg.fu) + 1, +- sz_rfbFramebufferUpdateMsg - 1)) +- return FALSE; +- +- msg.fu.nRects = rfbClientSwap16IfLE(msg.fu.nRects); +- +- for (i = 0; i < msg.fu.nRects; i++) { +- if (!ReadFromRFBServer(client, (char *)&rect, sz_rfbFramebufferUpdateRectHeader)) +- return FALSE; +- +- rect.encoding = rfbClientSwap32IfLE(rect.encoding); +- if (rect.encoding == rfbEncodingLastRect) +- break; +- +- rect.r.x = rfbClientSwap16IfLE(rect.r.x); +- rect.r.y = rfbClientSwap16IfLE(rect.r.y); +- rect.r.w = rfbClientSwap16IfLE(rect.r.w); +- rect.r.h = rfbClientSwap16IfLE(rect.r.h); +- +- +- if (rect.encoding == rfbEncodingXCursor || +- rect.encoding == rfbEncodingRichCursor) { +- +- if (!HandleCursorShape(client, +- rect.r.x, rect.r.y, rect.r.w, rect.r.h, +- rect.encoding)) { +- return FALSE; +- } +- continue; +- } +- +- if (rect.encoding == rfbEncodingPointerPos) { +- if (!client->HandleCursorPos(client,rect.r.x, rect.r.y)) { +- return FALSE; +- } +- continue; +- } +- +- if (rect.encoding == rfbEncodingKeyboardLedState) { +- /* OK! We have received a keyboard state message!!! */ +- client->KeyboardLedStateEnabled = 1; +- if (client->HandleKeyboardLedState!=NULL) +- client->HandleKeyboardLedState(client, rect.r.x, 0); +- /* stash it for the future */ +- client->CurrentKeyboardLedState = rect.r.x; +- continue; +- } +- +- if (rect.encoding == rfbEncodingNewFBSize) { +- client->width = rect.r.w; +- client->height = rect.r.h; +- client->updateRect.x = client->updateRect.y = 0; +- client->updateRect.w = client->width; +- client->updateRect.h = client->height; +- client->MallocFrameBuffer(client); +- SendFramebufferUpdateRequest(client, 0, 0, rect.r.w, rect.r.h, FALSE); +- rfbClientLog("Got new framebuffer size: %dx%d\n", rect.r.w, rect.r.h); +- continue; +- } +- +- /* rect.r.w=byte count */ +- if (rect.encoding == rfbEncodingSupportedMessages) { +- int loop; +- if (!ReadFromRFBServer(client, (char *)&client->supportedMessages, sz_rfbSupportedMessages)) +- return FALSE; +- +- /* msgs is two sets of bit flags of supported messages client2server[] and server2client[] */ +- /* currently ignored by this library */ +- +- rfbClientLog("client2server supported messages (bit flags)\n"); +- for (loop=0;loop<32;loop+=8) +- rfbClientLog("%02X: %04x %04x %04x %04x - %04x %04x %04x %04x\n", loop, +- client->supportedMessages.client2server[loop], client->supportedMessages.client2server[loop+1], +- client->supportedMessages.client2server[loop+2], client->supportedMessages.client2server[loop+3], +- client->supportedMessages.client2server[loop+4], client->supportedMessages.client2server[loop+5], +- client->supportedMessages.client2server[loop+6], client->supportedMessages.client2server[loop+7]); +- +- rfbClientLog("server2client supported messages (bit flags)\n"); +- for (loop=0;loop<32;loop+=8) +- rfbClientLog("%02X: %04x %04x %04x %04x - %04x %04x %04x %04x\n", loop, +- client->supportedMessages.server2client[loop], client->supportedMessages.server2client[loop+1], +- client->supportedMessages.server2client[loop+2], client->supportedMessages.server2client[loop+3], +- client->supportedMessages.server2client[loop+4], client->supportedMessages.server2client[loop+5], +- client->supportedMessages.server2client[loop+6], client->supportedMessages.server2client[loop+7]); +- continue; +- } +- +- /* rect.r.w=byte count, rect.r.h=# of encodings */ +- if (rect.encoding == rfbEncodingSupportedEncodings) { +- char *buffer; +- buffer = malloc(rect.r.w); +- if (!ReadFromRFBServer(client, buffer, rect.r.w)) +- { +- free(buffer); +- return FALSE; +- } +- +- /* buffer now contains rect.r.h # of uint32_t encodings that the server supports */ +- /* currently ignored by this library */ +- free(buffer); +- continue; +- } +- +- /* rect.r.w=byte count */ +- if (rect.encoding == rfbEncodingServerIdentity) { +- char *buffer; +- buffer = malloc(rect.r.w+1); +- if (!ReadFromRFBServer(client, buffer, rect.r.w)) +- { +- free(buffer); +- return FALSE; +- } +- buffer[rect.r.w]=0; /* null terminate, just in case */ +- rfbClientLog("Connected to Server \"%s\"\n", buffer); +- free(buffer); +- continue; +- } +- +- /* rfbEncodingUltraZip is a collection of subrects. x = # of subrects, and h is always 0 */ +- if (rect.encoding != rfbEncodingUltraZip) +- { +- if ((rect.r.x + rect.r.w > client->width) || +- (rect.r.y + rect.r.h > client->height)) +- { +- rfbClientLog("Rect too large: %dx%d at (%d, %d)\n", +- rect.r.w, rect.r.h, rect.r.x, rect.r.y); +- return FALSE; +- } +- +- /* UltraVNC with scaling, will send rectangles with a zero W or H +- * +- if ((rect.encoding != rfbEncodingTight) && +- (rect.r.h * rect.r.w == 0)) +- { +- rfbClientLog("Zero size rect - ignoring (encoding=%d (0x%08x) %dx, %dy, %dw, %dh)\n", rect.encoding, rect.encoding, rect.r.x, rect.r.y, rect.r.w, rect.r.h); +- continue; +- } +- */ +- +- /* If RichCursor encoding is used, we should prevent collisions +- between framebuffer updates and cursor drawing operations. */ +- client->SoftCursorLockArea(client, rect.r.x, rect.r.y, rect.r.w, rect.r.h); +- } +- +- switch (rect.encoding) { +- +- case rfbEncodingRaw: { +- int y=rect.r.y, h=rect.r.h; +- +- bytesPerLine = rect.r.w * client->format.bitsPerPixel / 8; +- linesToRead = RFB_BUFFER_SIZE / bytesPerLine; +- +- while (h > 0) { +- if (linesToRead > h) +- linesToRead = h; +- +- if (!ReadFromRFBServer(client, client->buffer,bytesPerLine * linesToRead)) +- return FALSE; +- +- CopyRectangle(client, (uint8_t *)client->buffer, +- rect.r.x, y, rect.r.w,linesToRead); +- +- h -= linesToRead; +- y += linesToRead; +- +- } +- } break; +- +- case rfbEncodingCopyRect: +- { +- rfbCopyRect cr; +- +- if (!ReadFromRFBServer(client, (char *)&cr, sz_rfbCopyRect)) +- return FALSE; +- +- cr.srcX = rfbClientSwap16IfLE(cr.srcX); +- cr.srcY = rfbClientSwap16IfLE(cr.srcY); +- +- /* If RichCursor encoding is used, we should extend our +- "cursor lock area" (previously set to destination +- rectangle) to the source rectangle as well. */ +- client->SoftCursorLockArea(client, +- cr.srcX, cr.srcY, rect.r.w, rect.r.h); +- +- if (client->GotCopyRect != NULL) { +- client->GotCopyRect(client, cr.srcX, cr.srcY, rect.r.w, rect.r.h, +- rect.r.x, rect.r.y); +- } else +- CopyRectangleFromRectangle(client, +- cr.srcX, cr.srcY, rect.r.w, rect.r.h, +- rect.r.x, rect.r.y); +- +- break; +- } +- +- case rfbEncodingRRE: +- { +- switch (client->format.bitsPerPixel) { +- case 8: +- if (!HandleRRE8(client, rect.r.x,rect.r.y,rect.r.w,rect.r.h)) +- return FALSE; +- break; +- case 16: +- if (!HandleRRE16(client, rect.r.x,rect.r.y,rect.r.w,rect.r.h)) +- return FALSE; +- break; +- case 32: +- if (!HandleRRE32(client, rect.r.x,rect.r.y,rect.r.w,rect.r.h)) +- return FALSE; +- break; +- } +- break; +- } +- +- case rfbEncodingCoRRE: +- { +- switch (client->format.bitsPerPixel) { +- case 8: +- if (!HandleCoRRE8(client, rect.r.x,rect.r.y,rect.r.w,rect.r.h)) +- return FALSE; +- break; +- case 16: +- if (!HandleCoRRE16(client, rect.r.x,rect.r.y,rect.r.w,rect.r.h)) +- return FALSE; +- break; +- case 32: +- if (!HandleCoRRE32(client, rect.r.x,rect.r.y,rect.r.w,rect.r.h)) +- return FALSE; +- break; +- } +- break; +- } +- +- case rfbEncodingHextile: +- { +- switch (client->format.bitsPerPixel) { +- case 8: +- if (!HandleHextile8(client, rect.r.x,rect.r.y,rect.r.w,rect.r.h)) +- return FALSE; +- break; +- case 16: +- if (!HandleHextile16(client, rect.r.x,rect.r.y,rect.r.w,rect.r.h)) +- return FALSE; +- break; +- case 32: +- if (!HandleHextile32(client, rect.r.x,rect.r.y,rect.r.w,rect.r.h)) +- return FALSE; +- break; +- } +- break; +- } +- +- case rfbEncodingUltra: +- { +- switch (client->format.bitsPerPixel) { +- case 8: +- if (!HandleUltra8(client, rect.r.x,rect.r.y,rect.r.w,rect.r.h)) +- return FALSE; +- break; +- case 16: +- if (!HandleUltra16(client, rect.r.x,rect.r.y,rect.r.w,rect.r.h)) +- return FALSE; +- break; +- case 32: +- if (!HandleUltra32(client, rect.r.x,rect.r.y,rect.r.w,rect.r.h)) +- return FALSE; +- break; +- } +- break; +- } +- case rfbEncodingUltraZip: +- { +- switch (client->format.bitsPerPixel) { +- case 8: +- if (!HandleUltraZip8(client, rect.r.x,rect.r.y,rect.r.w,rect.r.h)) +- return FALSE; +- break; +- case 16: +- if (!HandleUltraZip16(client, rect.r.x,rect.r.y,rect.r.w,rect.r.h)) +- return FALSE; +- break; +- case 32: +- if (!HandleUltraZip32(client, rect.r.x,rect.r.y,rect.r.w,rect.r.h)) +- return FALSE; +- break; +- } +- break; +- } +- +-#ifdef LIBVNCSERVER_HAVE_LIBZ +- case rfbEncodingZlib: +- { +- switch (client->format.bitsPerPixel) { +- case 8: +- if (!HandleZlib8(client, rect.r.x,rect.r.y,rect.r.w,rect.r.h)) +- return FALSE; +- break; +- case 16: +- if (!HandleZlib16(client, rect.r.x,rect.r.y,rect.r.w,rect.r.h)) +- return FALSE; +- break; +- case 32: +- if (!HandleZlib32(client, rect.r.x,rect.r.y,rect.r.w,rect.r.h)) +- return FALSE; +- break; +- } +- break; +- } +- +-#ifdef LIBVNCSERVER_HAVE_LIBJPEG +- case rfbEncodingTight: +- { +- switch (client->format.bitsPerPixel) { +- case 8: +- if (!HandleTight8(client, rect.r.x,rect.r.y,rect.r.w,rect.r.h)) +- return FALSE; +- break; +- case 16: +- if (!HandleTight16(client, rect.r.x,rect.r.y,rect.r.w,rect.r.h)) +- return FALSE; +- break; +- case 32: +- if (!HandleTight32(client, rect.r.x,rect.r.y,rect.r.w,rect.r.h)) +- return FALSE; +- break; +- } +- break; +- } +-#endif +- case rfbEncodingZRLE: +- /* Fail safe for ZYWRLE unsupport VNC server. */ +- client->appData.qualityLevel = 9; +- /* fall through */ +- case rfbEncodingZYWRLE: +- { +- switch (client->format.bitsPerPixel) { +- case 8: +- if (!HandleZRLE8(client, rect.r.x,rect.r.y,rect.r.w,rect.r.h)) +- return FALSE; +- break; +- case 16: +- if (client->si.format.greenMax > 0x1F) { +- if (!HandleZRLE16(client, rect.r.x,rect.r.y,rect.r.w,rect.r.h)) +- return FALSE; +- } else { +- if (!HandleZRLE15(client, rect.r.x,rect.r.y,rect.r.w,rect.r.h)) +- return FALSE; +- } +- break; +- case 32: +- { +- uint32_t maxColor=(client->format.redMax<<client->format.redShift)| +- (client->format.greenMax<<client->format.greenShift)| +- (client->format.blueMax<<client->format.blueShift); +- if ((client->format.bigEndian && (maxColor&0xff)==0) || +- (!client->format.bigEndian && (maxColor&0xff000000)==0)) { +- if (!HandleZRLE24(client, rect.r.x,rect.r.y,rect.r.w,rect.r.h)) +- return FALSE; +- } else if (!client->format.bigEndian && (maxColor&0xff)==0) { +- if (!HandleZRLE24Up(client, rect.r.x,rect.r.y,rect.r.w,rect.r.h)) +- return FALSE; +- } else if (client->format.bigEndian && (maxColor&0xff000000)==0) { +- if (!HandleZRLE24Down(client, rect.r.x,rect.r.y,rect.r.w,rect.r.h)) +- return FALSE; +- } else if (!HandleZRLE32(client, rect.r.x,rect.r.y,rect.r.w,rect.r.h)) +- return FALSE; +- break; +- } +- } +- break; +- } +- +-#endif +- +- default: +- { +- rfbBool handled = FALSE; +- rfbClientProtocolExtension* e; +- +- for(e = rfbClientExtensions; !handled && e; e = e->next) +- if(e->handleEncoding && e->handleEncoding(client, &rect)) +- handled = TRUE; +- +- if(!handled) { +- rfbClientLog("Unknown rect encoding %d\n", +- (int)rect.encoding); +- return FALSE; +- } +- } +- } +- +- /* Now we may discard "soft cursor locks". */ +- client->SoftCursorUnlockScreen(client); +- +- client->GotFrameBufferUpdate(client, rect.r.x, rect.r.y, rect.r.w, rect.r.h); +- } +- +- if (!SendIncrementalFramebufferUpdateRequest(client)) +- return FALSE; +- +- if (client->FinishedFrameBufferUpdate) +- client->FinishedFrameBufferUpdate(client); +- +- break; +- } +- +- case rfbBell: +- { +- client->Bell(client); +- +- break; +- } +- +- case rfbServerCutText: +- { +- char *buffer; +- +- if (!ReadFromRFBServer(client, ((char *)&msg) + 1, +- sz_rfbServerCutTextMsg - 1)) +- return FALSE; +- +- msg.sct.length = rfbClientSwap32IfLE(msg.sct.length); +- +- buffer = malloc(msg.sct.length+1); +- +- if (!ReadFromRFBServer(client, buffer, msg.sct.length)) +- return FALSE; +- +- buffer[msg.sct.length] = 0; +- +- if (client->GotXCutText) +- client->GotXCutText(client, buffer, msg.sct.length); +- +- free(buffer); +- +- break; +- } +- +- case rfbTextChat: +- { +- char *buffer=NULL; +- if (!ReadFromRFBServer(client, ((char *)&msg) + 1, +- sz_rfbTextChatMsg- 1)) +- return FALSE; +- msg.tc.length = rfbClientSwap32IfLE(msg.sct.length); +- switch(msg.tc.length) { +- case rfbTextChatOpen: +- rfbClientLog("Received TextChat Open\n"); +- if (client->HandleTextChat!=NULL) +- client->HandleTextChat(client, (int)rfbTextChatOpen, NULL); +- break; +- case rfbTextChatClose: +- rfbClientLog("Received TextChat Close\n"); +- if (client->HandleTextChat!=NULL) +- client->HandleTextChat(client, (int)rfbTextChatClose, NULL); +- break; +- case rfbTextChatFinished: +- rfbClientLog("Received TextChat Finished\n"); +- if (client->HandleTextChat!=NULL) +- client->HandleTextChat(client, (int)rfbTextChatFinished, NULL); +- break; +- default: +- buffer=malloc(msg.tc.length+1); +- if (!ReadFromRFBServer(client, buffer, msg.tc.length)) +- { +- free(buffer); +- return FALSE; +- } +- /* Null Terminate <just in case> */ +- buffer[msg.tc.length]=0; +- rfbClientLog("Received TextChat \"%s\"\n", buffer); +- if (client->HandleTextChat!=NULL) +- client->HandleTextChat(client, (int)msg.tc.length, buffer); +- free(buffer); +- break; +- } +- break; +- } +- +- case rfbXvp: +- { +- if (!ReadFromRFBServer(client, ((char *)&msg) + 1, +- sz_rfbXvpMsg -1)) +- return FALSE; +- +- SetClient2Server(client, rfbXvp); +- /* technically, we only care what we can *send* to the server +- * but, we set Server2Client Just in case it ever becomes useful +- */ +- SetServer2Client(client, rfbXvp); +- +- if(client->HandleXvpMsg) +- client->HandleXvpMsg(client, msg.xvp.version, msg.xvp.code); +- +- break; +- } +- +- case rfbResizeFrameBuffer: +- { +- if (!ReadFromRFBServer(client, ((char *)&msg) + 1, +- sz_rfbResizeFrameBufferMsg -1)) +- return FALSE; +- client->width = rfbClientSwap16IfLE(msg.rsfb.framebufferWidth); +- client->height = rfbClientSwap16IfLE(msg.rsfb.framebufferHeigth); +- client->updateRect.x = client->updateRect.y = 0; +- client->updateRect.w = client->width; +- client->updateRect.h = client->height; +- client->MallocFrameBuffer(client); +- SendFramebufferUpdateRequest(client, 0, 0, client->width, client->height, FALSE); +- rfbClientLog("Got new framebuffer size: %dx%d\n", client->width, client->height); +- break; +- } +- +- case rfbPalmVNCReSizeFrameBuffer: +- { +- if (!ReadFromRFBServer(client, ((char *)&msg) + 1, +- sz_rfbPalmVNCReSizeFrameBufferMsg -1)) +- return FALSE; +- client->width = rfbClientSwap16IfLE(msg.prsfb.buffer_w); +- client->height = rfbClientSwap16IfLE(msg.prsfb.buffer_h); +- client->updateRect.x = client->updateRect.y = 0; +- client->updateRect.w = client->width; +- client->updateRect.h = client->height; +- client->MallocFrameBuffer(client); +- SendFramebufferUpdateRequest(client, 0, 0, client->width, client->height, FALSE); +- rfbClientLog("Got new framebuffer size: %dx%d\n", client->width, client->height); +- break; +- } +- +- default: +- { +- rfbBool handled = FALSE; +- rfbClientProtocolExtension* e; +- +- for(e = rfbClientExtensions; !handled && e; e = e->next) +- if(e->handleMessage && e->handleMessage(client, &msg)) +- handled = TRUE; +- +- if(!handled) { +- char buffer[256]; +- rfbClientLog("Unknown message type %d from VNC server\n",msg.type); +- ReadFromRFBServer(client, buffer, 256); +- return FALSE; +- } +- } +- } +- +- return TRUE; +-} +- +- +-#define GET_PIXEL8(pix, ptr) ((pix) = *(ptr)++) +- +-#define GET_PIXEL16(pix, ptr) (((uint8_t*)&(pix))[0] = *(ptr)++, \ +- ((uint8_t*)&(pix))[1] = *(ptr)++) +- +-#define GET_PIXEL32(pix, ptr) (((uint8_t*)&(pix))[0] = *(ptr)++, \ +- ((uint8_t*)&(pix))[1] = *(ptr)++, \ +- ((uint8_t*)&(pix))[2] = *(ptr)++, \ +- ((uint8_t*)&(pix))[3] = *(ptr)++) +- +-/* CONCAT2 concatenates its two arguments. CONCAT2E does the same but also +- expands its arguments if they are macros */ +- +-#define CONCAT2(a,b) a##b +-#define CONCAT2E(a,b) CONCAT2(a,b) +-#define CONCAT3(a,b,c) a##b##c +-#define CONCAT3E(a,b,c) CONCAT3(a,b,c) +- +-#define BPP 8 +-#include "rre.c" +-#include "corre.c" +-#include "hextile.c" +-#include "ultra.c" +-#include "zlib.c" +-#include "tight.c" +-#include "zrle.c" +-#undef BPP +-#define BPP 16 +-#include "rre.c" +-#include "corre.c" +-#include "hextile.c" +-#include "ultra.c" +-#include "zlib.c" +-#include "tight.c" +-#include "zrle.c" +-#define REALBPP 15 +-#include "zrle.c" +-#undef BPP +-#define BPP 32 +-#include "rre.c" +-#include "corre.c" +-#include "hextile.c" +-#include "ultra.c" +-#include "zlib.c" +-#include "tight.c" +-#include "zrle.c" +-#define REALBPP 24 +-#include "zrle.c" +-#define REALBPP 24 +-#define UNCOMP 8 +-#include "zrle.c" +-#define REALBPP 24 +-#define UNCOMP -8 +-#include "zrle.c" +-#undef BPP +- +- +-/* +- * PrintPixelFormat. +- */ +- +-void +-PrintPixelFormat(rfbPixelFormat *format) +-{ +- if (format->bitsPerPixel == 1) { +- rfbClientLog(" Single bit per pixel.\n"); +- rfbClientLog( +- " %s significant bit in each byte is leftmost on the screen.\n", +- (format->bigEndian ? "Most" : "Least")); +- } else { +- rfbClientLog(" %d bits per pixel.\n",format->bitsPerPixel); +- if (format->bitsPerPixel != 8) { +- rfbClientLog(" %s significant byte first in each pixel.\n", +- (format->bigEndian ? "Most" : "Least")); +- } +- if (format->trueColour) { +- rfbClientLog(" TRUE colour: max red %d green %d blue %d" +- ", shift red %d green %d blue %d\n", +- format->redMax, format->greenMax, format->blueMax, +- format->redShift, format->greenShift, format->blueShift); +- } else { +- rfbClientLog(" Colour map (not true colour).\n"); +- } +- } +-} +- +-/* avoid name clashes with LibVNCServer */ +- +-#define rfbEncryptBytes rfbClientEncryptBytes +-#define rfbEncryptBytes2 rfbClientEncryptBytes2 +-#define rfbDes rfbClientDes +-#define rfbDesKey rfbClientDesKey +-#define rfbUseKey rfbClientUseKey +-#define rfbCPKey rfbClientCPKey +- +-#include "vncauth.c" +-#include "d3des.c" +diff -urN remmina-plugins/vnc/libvncserver/libvncclient/rre.c remmina-plugins/vnc/libvncserver/libvncclient/rre.c +--- remmina-plugins/vnc/libvncserver/libvncclient/rre.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/libvncclient/rre.c 1970-01-01 10:00:00.000000000 +1000 +@@ -1,68 +0,0 @@ +-/* +- * Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved. +- * +- * This is free software; you can 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. +- * +- * This software 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 this software; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +- * USA. +- */ +- +-/* +- * rre.c - handle RRE encoding. +- * +- * This file shouldn't be compiled directly. It is included multiple times by +- * rfbproto.c, each time with a different definition of the macro BPP. For +- * each value of BPP, this file defines a function which handles an RRE +- * encoded rectangle with BPP bits per pixel. +- */ +- +-#define HandleRREBPP CONCAT2E(HandleRRE,BPP) +-#define CARDBPP CONCAT3E(uint,BPP,_t) +- +-static rfbBool +-HandleRREBPP (rfbClient* client, int rx, int ry, int rw, int rh) +-{ +- rfbRREHeader hdr; +- int i; +- CARDBPP pix; +- rfbRectangle subrect; +- +- if (!ReadFromRFBServer(client, (char *)&hdr, sz_rfbRREHeader)) +- return FALSE; +- +- hdr.nSubrects = rfbClientSwap32IfLE(hdr.nSubrects); +- +- if (!ReadFromRFBServer(client, (char *)&pix, sizeof(pix))) +- return FALSE; +- +- FillRectangle(client, rx, ry, rw, rh, pix); +- +- for (i = 0; i < hdr.nSubrects; i++) { +- if (!ReadFromRFBServer(client, (char *)&pix, sizeof(pix))) +- return FALSE; +- +- if (!ReadFromRFBServer(client, (char *)&subrect, sz_rfbRectangle)) +- return FALSE; +- +- subrect.x = rfbClientSwap16IfLE(subrect.x); +- subrect.y = rfbClientSwap16IfLE(subrect.y); +- subrect.w = rfbClientSwap16IfLE(subrect.w); +- subrect.h = rfbClientSwap16IfLE(subrect.h); +- +- FillRectangle(client, rx+subrect.x, ry+subrect.y, subrect.w, subrect.h, pix); +- } +- +- return TRUE; +-} +- +-#undef CARDBPP +diff -urN remmina-plugins/vnc/libvncserver/libvncclient/sockets.c remmina-plugins/vnc/libvncserver/libvncclient/sockets.c +--- remmina-plugins/vnc/libvncserver/libvncclient/sockets.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/libvncclient/sockets.c 1970-01-01 10:00:00.000000000 +1000 +@@ -1,743 +0,0 @@ +-/* +- * Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved. +- * +- * This is free software; you can 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. +- * +- * This software 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 this software; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +- * USA. +- */ +- +-/* +- * sockets.c - functions to deal with sockets. +- */ +- +-#ifdef __STRICT_ANSI__ +-#define _BSD_SOURCE +-#endif +-#include <unistd.h> +-#include <errno.h> +-#include <fcntl.h> +-#include <assert.h> +-#include <rfb/rfbclient.h> +-#ifdef WIN32 +-#undef SOCKET +-#include <winsock2.h> +-#define EWOULDBLOCK WSAEWOULDBLOCK +-#define close closesocket +-#define read(sock,buf,len) recv(sock,buf,len,0) +-#define write(sock,buf,len) send(sock,buf,len,0) +-#define socklen_t int +-#ifdef LIBVNCSERVER_HAVE_WS2TCPIP_H +-#undef socklen_t +-#include <ws2tcpip.h> +-#endif +-#else +-#include <sys/socket.h> +-#include <netinet/in.h> +-#include <sys/un.h> +-#include <netinet/tcp.h> +-#include <arpa/inet.h> +-#include <netdb.h> +-#endif +-#include "tls.h" +- +-void PrintInHex(char *buf, int len); +- +-rfbBool errorMessageOnReadFailure = TRUE; +- +-/* +- * ReadFromRFBServer is called whenever we want to read some data from the RFB +- * server. It is non-trivial for two reasons: +- * +- * 1. For efficiency it performs some intelligent buffering, avoiding invoking +- * the read() system call too often. For small chunks of data, it simply +- * copies the data out of an internal buffer. For large amounts of data it +- * reads directly into the buffer provided by the caller. +- * +- * 2. Whenever read() would block, it invokes the Xt event dispatching +- * mechanism to process X events. In fact, this is the only place these +- * events are processed, as there is no XtAppMainLoop in the program. +- */ +- +-rfbBool +-ReadFromRFBServer(rfbClient* client, char *out, unsigned int n) +-{ +-#undef DEBUG_READ_EXACT +-#ifdef DEBUG_READ_EXACT +- char* oout=out; +- int nn=n; +- rfbClientLog("ReadFromRFBServer %d bytes\n",n); +-#endif +- if (client->serverPort==-1) { +- /* vncrec playing */ +- rfbVNCRec* rec = client->vncRec; +- struct timeval tv; +- +- if (rec->readTimestamp) { +- rec->readTimestamp = FALSE; +- if (!fread(&tv,sizeof(struct timeval),1,rec->file)) +- return FALSE; +- +- tv.tv_sec = rfbClientSwap32IfLE (tv.tv_sec); +- tv.tv_usec = rfbClientSwap32IfLE (tv.tv_usec); +- +- if (rec->tv.tv_sec!=0 && !rec->doNotSleep) { +- struct timeval diff; +- diff.tv_sec = tv.tv_sec - rec->tv.tv_sec; +- diff.tv_usec = tv.tv_usec - rec->tv.tv_usec; +- if(diff.tv_usec<0) { +- diff.tv_sec--; +- diff.tv_usec+=1000000; +- } +-#ifndef __MINGW32__ +- sleep (diff.tv_sec); +- usleep (diff.tv_usec); +-#else +- Sleep (diff.tv_sec * 1000 + diff.tv_usec/1000); +-#endif +- } +- +- rec->tv=tv; +- } +- +- return (fread(out,1,n,rec->file)<0?FALSE:TRUE); +- } +- +- if (n <= client->buffered) { +- memcpy(out, client->bufoutptr, n); +- client->bufoutptr += n; +- client->buffered -= n; +-#ifdef DEBUG_READ_EXACT +- goto hexdump; +-#endif +- return TRUE; +- } +- +- memcpy(out, client->bufoutptr, client->buffered); +- +- out += client->buffered; +- n -= client->buffered; +- +- client->bufoutptr = client->buf; +- client->buffered = 0; +- +- if (n <= RFB_BUF_SIZE) { +- +- while (client->buffered < n) { +- int i; +-#ifdef LIBVNCSERVER_WITH_CLIENT_TLS +- if (client->tlsSession) { +- i = ReadFromTLS(client, client->buf + client->buffered, RFB_BUF_SIZE - client->buffered); +- } else { +-#endif +- i = read(client->sock, client->buf + client->buffered, RFB_BUF_SIZE - client->buffered); +-#ifdef LIBVNCSERVER_WITH_CLIENT_TLS +- } +-#endif +- if (i <= 0) { +- if (i < 0) { +-#ifdef WIN32 +- errno=WSAGetLastError(); +-#endif +- if (errno == EWOULDBLOCK || errno == EAGAIN) { +- /* TODO: +- ProcessXtEvents(); +- */ +- WaitForMessage(client, 100000); +- i = 0; +- } else { +- rfbClientErr("read (%d: %s)\n",errno,strerror(errno)); +- return FALSE; +- } +- } else { +- if (errorMessageOnReadFailure) { +- rfbClientLog("VNC server closed connection\n"); +- } +- return FALSE; +- } +- } +- client->buffered += i; +- } +- +- memcpy(out, client->bufoutptr, n); +- client->bufoutptr += n; +- client->buffered -= n; +- +- } else { +- +- while (n > 0) { +- int i; +-#ifdef LIBVNCSERVER_WITH_CLIENT_TLS +- if (client->tlsSession) { +- i = ReadFromTLS(client, out, n); +- } else { +-#endif +- i = read(client->sock, out, n); +-#ifdef LIBVNCSERVER_WITH_CLIENT_TLS +- } +-#endif +- if (i <= 0) { +- if (i < 0) { +-#ifdef WIN32 +- errno=WSAGetLastError(); +-#endif +- if (errno == EWOULDBLOCK || errno == EAGAIN) { +- /* TODO: +- ProcessXtEvents(); +- */ +- WaitForMessage(client, 100000); +- i = 0; +- } else { +- rfbClientErr("read (%s)\n",strerror(errno)); +- return FALSE; +- } +- } else { +- if (errorMessageOnReadFailure) { +- rfbClientLog("VNC server closed connection\n"); +- } +- return FALSE; +- } +- } +- out += i; +- n -= i; +- } +- } +- +-#ifdef DEBUG_READ_EXACT +-hexdump: +- { int ii; +- for(ii=0;ii<nn;ii++) +- fprintf(stderr,"%02x ",(unsigned char)oout[ii]); +- fprintf(stderr,"\n"); +- } +-#endif +- +- return TRUE; +-} +- +- +-/* +- * Write an exact number of bytes, and don't return until you've sent them. +- */ +- +-rfbBool +-WriteToRFBServer(rfbClient* client, char *buf, int n) +-{ +- fd_set fds; +- int i = 0; +- int j; +- +- if (client->serverPort==-1) +- return TRUE; /* vncrec playing */ +- +-#ifdef LIBVNCSERVER_WITH_CLIENT_TLS +- if (client->tlsSession) { +- /* WriteToTLS() will guarantee either everything is written, or error/eof returns */ +- i = WriteToTLS(client, buf, n); +- if (i <= 0) return FALSE; +- +- return TRUE; +- } +-#endif +- +- while (i < n) { +- j = write(client->sock, buf + i, (n - i)); +- if (j <= 0) { +- if (j < 0) { +-#ifdef WIN32 +- errno=WSAGetLastError(); +-#endif +- if (errno == EWOULDBLOCK || +-#ifdef LIBVNCSERVER_ENOENT_WORKAROUND +- errno == ENOENT || +-#endif +- errno == EAGAIN) { +- FD_ZERO(&fds); +- FD_SET(client->sock,&fds); +- +- if (select(client->sock+1, NULL, &fds, NULL, NULL) <= 0) { +- rfbClientErr("select\n"); +- return FALSE; +- } +- j = 0; +- } else { +- rfbClientErr("write\n"); +- return FALSE; +- } +- } else { +- rfbClientLog("write failed\n"); +- return FALSE; +- } +- } +- i += j; +- } +- return TRUE; +-} +- +- +- +-static int initSockets() { +-#ifdef WIN32 +- WSADATA trash; +- static rfbBool WSAinitted=FALSE; +- if(!WSAinitted) { +- int i=WSAStartup(MAKEWORD(2,0),&trash); +- if(i!=0) { +- rfbClientErr("Couldn't init Windows Sockets\n"); +- return 0; +- } +- WSAinitted=TRUE; +- } +-#endif +- return 1; +-} +- +-/* +- * ConnectToTcpAddr connects to the given TCP port. +- */ +- +-int +-ConnectClientToTcpAddr(unsigned int host, int port) +-{ +- int sock; +- struct sockaddr_in addr; +- int one = 1; +- +- if (!initSockets()) +- return -1; +- +- addr.sin_family = AF_INET; +- addr.sin_port = htons(port); +- addr.sin_addr.s_addr = host; +- +- sock = socket(AF_INET, SOCK_STREAM, 0); +- if (sock < 0) { +-#ifdef WIN32 +- errno=WSAGetLastError(); +-#endif +- rfbClientErr("ConnectToTcpAddr: socket (%s)\n",strerror(errno)); +- return -1; +- } +- +- if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) { +- rfbClientErr("ConnectToTcpAddr: connect\n"); +- close(sock); +- return -1; +- } +- +- if (setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, +- (char *)&one, sizeof(one)) < 0) { +- rfbClientErr("ConnectToTcpAddr: setsockopt\n"); +- close(sock); +- return -1; +- } +- +- return sock; +-} +- +-int +-ConnectClientToTcpAddr6(const char *hostname, int port) +-{ +-#ifdef LIBVNCSERVER_IPv6 +- int sock; +- int n; +- struct addrinfo hints, *res, *ressave; +- char port_s[10]; +- int one = 1; +- +- if (!initSockets()) +- return -1; +- +- snprintf(port_s, 10, "%d", port); +- memset(&hints, 0, sizeof(struct addrinfo)); +- hints.ai_family = AF_UNSPEC; +- hints.ai_socktype = SOCK_STREAM; +- if ((n = getaddrinfo(hostname, port_s, &hints, &res))) +- { +- rfbClientErr("ConnectClientToTcpAddr6: getaddrinfo (%s)\n", gai_strerror(n)); +- return -1; +- } +- +- ressave = res; +- sock = -1; +- while (res) +- { +- sock = socket(res->ai_family, res->ai_socktype, res->ai_protocol); +- if (sock >= 0) +- { +- if (connect(sock, res->ai_addr, res->ai_addrlen) == 0) +- break; +- close(sock); +- sock = -1; +- } +- res = res->ai_next; +- } +- freeaddrinfo(ressave); +- +- if (sock == -1) +- { +- rfbClientErr("ConnectClientToTcpAddr6: connect\n"); +- return -1; +- } +- +- if (setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, +- (char *)&one, sizeof(one)) < 0) { +- rfbClientErr("ConnectToTcpAddr: setsockopt\n"); +- close(sock); +- return -1; +- } +- +- return sock; +- +-#else +- +- rfbClientErr("ConnectClientToTcpAddr6: IPv6 disabled\n"); +- return -1; +- +-#endif +-} +- +-int +-ConnectClientToUnixSock(const char *sockFile) +-{ +-#ifdef WIN32 +- rfbClientErr("Windows doesn't support UNIX sockets\n"); +- return -1; +-#else +- int sock; +- struct sockaddr_un addr; +- addr.sun_family = AF_UNIX; +- strcpy(addr.sun_path, sockFile); +- +- sock = socket(AF_UNIX, SOCK_STREAM, 0); +- if (sock < 0) { +- rfbClientErr("ConnectToUnixSock: socket (%s)\n",strerror(errno)); +- return -1; +- } +- +- if (connect(sock, (struct sockaddr *)&addr, sizeof(addr.sun_family) + strlen(addr.sun_path)) < 0) { +- rfbClientErr("ConnectToUnixSock: connect\n"); +- close(sock); +- return -1; +- } +- +- return sock; +-#endif +-} +- +- +- +-/* +- * FindFreeTcpPort tries to find unused TCP port in the range +- * (TUNNEL_PORT_OFFSET, TUNNEL_PORT_OFFSET + 99]. Returns 0 on failure. +- */ +- +-int +-FindFreeTcpPort(void) +-{ +- int sock, port; +- struct sockaddr_in addr; +- +- addr.sin_family = AF_INET; +- addr.sin_addr.s_addr = htonl(INADDR_ANY); +- +- if (!initSockets()) +- return -1; +- +- sock = socket(AF_INET, SOCK_STREAM, 0); +- if (sock < 0) { +- rfbClientErr(": FindFreeTcpPort: socket\n"); +- return 0; +- } +- +- for (port = TUNNEL_PORT_OFFSET + 99; port > TUNNEL_PORT_OFFSET; port--) { +- addr.sin_port = htons((unsigned short)port); +- if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) == 0) { +- close(sock); +- return port; +- } +- } +- +- close(sock); +- return 0; +-} +- +- +-/* +- * ListenAtTcpPort starts listening at the given TCP port. +- */ +- +-int +-ListenAtTcpPort(int port) +-{ +- int sock; +- struct sockaddr_in addr; +- int one = 1; +- +- addr.sin_family = AF_INET; +- addr.sin_port = htons(port); +- addr.sin_addr.s_addr = htonl(INADDR_ANY); +- +- if (!initSockets()) +- return -1; +- +- sock = socket(AF_INET, SOCK_STREAM, 0); +- if (sock < 0) { +- rfbClientErr("ListenAtTcpPort: socket\n"); +- return -1; +- } +- +- if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, +- (const char *)&one, sizeof(one)) < 0) { +- rfbClientErr("ListenAtTcpPort: setsockopt\n"); +- close(sock); +- return -1; +- } +- +- if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) { +- rfbClientErr("ListenAtTcpPort: bind\n"); +- close(sock); +- return -1; +- } +- +- if (listen(sock, 5) < 0) { +- rfbClientErr("ListenAtTcpPort: listen\n"); +- close(sock); +- return -1; +- } +- +- return sock; +-} +- +- +-/* +- * AcceptTcpConnection accepts a TCP connection. +- */ +- +-int +-AcceptTcpConnection(int listenSock) +-{ +- int sock; +- struct sockaddr_in addr; +- socklen_t addrlen = sizeof(addr); +- int one = 1; +- +- sock = accept(listenSock, (struct sockaddr *) &addr, &addrlen); +- if (sock < 0) { +- rfbClientErr("AcceptTcpConnection: accept\n"); +- return -1; +- } +- +- if (setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, +- (char *)&one, sizeof(one)) < 0) { +- rfbClientErr("AcceptTcpConnection: setsockopt\n"); +- close(sock); +- return -1; +- } +- +- return sock; +-} +- +- +-/* +- * SetNonBlocking sets a socket into non-blocking mode. +- */ +- +-rfbBool +-SetNonBlocking(int sock) +-{ +-#ifdef WIN32 +- unsigned long block=1; +- if(ioctlsocket(sock, FIONBIO, &block) == SOCKET_ERROR) { +- errno=WSAGetLastError(); +-#else +- int flags = fcntl(sock, F_GETFL); +- if(flags < 0 || fcntl(sock, F_SETFL, flags | O_NONBLOCK) < 0) { +-#endif +- rfbClientErr("Setting socket to non-blocking failed: %s\n",strerror(errno)); +- return FALSE; +- } +- return TRUE; +-} +- +- +- +-/* +- * SetDSCP sets a socket's IP QoS parameters aka Differentiated Services Code Point field +- */ +- +-rfbBool +-SetDSCP(int sock, int dscp) +-{ +-#ifdef WIN32 +- rfbClientErr("Setting of QoS IP DSCP not implemented for Windows\n"); +- return TRUE; +-#else +- int level, cmd; +- struct sockaddr addr; +- socklen_t addrlen = sizeof(addr); +- +- if(getsockname(sock, &addr, &addrlen) != 0) { +- rfbClientErr("Setting socket QoS failed while getting socket address: %s\n",strerror(errno)); +- return FALSE; +- } +- +- switch(addr.sa_family) +- { +-#if defined LIBVNCSERVER_IPv6 && defined IPV6_TCLASS +- case AF_INET6: +- level = IPPROTO_IPV6; +- cmd = IPV6_TCLASS; +- break; +-#endif +- case AF_INET: +- level = IPPROTO_IP; +- cmd = IP_TOS; +- break; +- default: +- rfbClientErr("Setting socket QoS failed: Not bound to IP address"); +- return FALSE; +- } +- +- if(setsockopt(sock, level, cmd, (void*)&dscp, sizeof(dscp)) != 0) { +- rfbClientErr("Setting socket QoS failed: %s\n", strerror(errno)); +- return FALSE; +- } +- +- return TRUE; +-#endif +-} +- +- +- +-/* +- * StringToIPAddr - convert a host string to an IP address. +- */ +- +-rfbBool +-StringToIPAddr(const char *str, unsigned int *addr) +-{ +- struct hostent *hp; +- +- if (strcmp(str,"") == 0) { +- *addr = htonl(INADDR_LOOPBACK); /* local */ +- return TRUE; +- } +- +- *addr = inet_addr(str); +- +- if (*addr != -1) +- return TRUE; +- +- if (!initSockets()) +- return -1; +- +- hp = gethostbyname(str); +- +- if (hp) { +- *addr = *(unsigned int *)hp->h_addr; +- return TRUE; +- } +- +- return FALSE; +-} +- +- +-/* +- * Test if the other end of a socket is on the same machine. +- */ +- +-rfbBool +-SameMachine(int sock) +-{ +- struct sockaddr_in peeraddr, myaddr; +- socklen_t addrlen = sizeof(struct sockaddr_in); +- +- getpeername(sock, (struct sockaddr *)&peeraddr, &addrlen); +- getsockname(sock, (struct sockaddr *)&myaddr, &addrlen); +- +- return (peeraddr.sin_addr.s_addr == myaddr.sin_addr.s_addr); +-} +- +- +-/* +- * Print out the contents of a packet for debugging. +- */ +- +-void +-PrintInHex(char *buf, int len) +-{ +- int i, j; +- char c, str[17]; +- +- str[16] = 0; +- +- rfbClientLog("ReadExact: "); +- +- for (i = 0; i < len; i++) +- { +- if ((i % 16 == 0) && (i != 0)) { +- rfbClientLog(" "); +- } +- c = buf[i]; +- str[i % 16] = (((c > 31) && (c < 127)) ? c : '.'); +- rfbClientLog("%02x ",(unsigned char)c); +- if ((i % 4) == 3) +- rfbClientLog(" "); +- if ((i % 16) == 15) +- { +- rfbClientLog("%s\n",str); +- } +- } +- if ((i % 16) != 0) +- { +- for (j = i % 16; j < 16; j++) +- { +- rfbClientLog(" "); +- if ((j % 4) == 3) rfbClientLog(" "); +- } +- str[i % 16] = 0; +- rfbClientLog("%s\n",str); +- } +- +- fflush(stderr); +-} +- +-int WaitForMessage(rfbClient* client,unsigned int usecs) +-{ +- fd_set fds; +- struct timeval timeout; +- int num; +- +- if (client->serverPort==-1) +- /* playing back vncrec file */ +- return 1; +- +- timeout.tv_sec=(usecs/1000000); +- timeout.tv_usec=(usecs%1000000); +- +- FD_ZERO(&fds); +- FD_SET(client->sock,&fds); +- +- num=select(client->sock+1, &fds, NULL, NULL, &timeout); +- if(num<0) { +-#ifdef WIN32 +- errno=WSAGetLastError(); +-#endif +- rfbClientLog("Waiting for message failed: %d (%s)\n",errno,strerror(errno)); +- } +- +- return num; +-} +- +- +diff -urN remmina-plugins/vnc/libvncserver/libvncclient/tight.c remmina-plugins/vnc/libvncserver/libvncclient/tight.c +--- remmina-plugins/vnc/libvncserver/libvncclient/tight.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/libvncclient/tight.c 1970-01-01 10:00:00.000000000 +1000 +@@ -1,688 +0,0 @@ +-/* +- * Copyright (C) 2000, 2001 Const Kaplinsky. All Rights Reserved. +- * +- * This is free software; you can 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. +- * +- * This software 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 this software; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +- * USA. +- */ +- +-#ifdef LIBVNCSERVER_HAVE_LIBZ +-#ifdef LIBVNCSERVER_HAVE_LIBJPEG +- +-/* +- * tight.c - handle ``tight'' encoding. +- * +- * This file shouldn't be compiled directly. It is included multiple +- * times by rfbproto.c, each time with a different definition of the +- * macro BPP. For each value of BPP, this file defines a function +- * which handles a tight-encoded rectangle with BPP bits per pixel. +- * +- */ +- +-#define TIGHT_MIN_TO_COMPRESS 12 +- +-#define CARDBPP CONCAT3E(uint,BPP,_t) +-#define filterPtrBPP CONCAT2E(filterPtr,BPP) +- +-#define HandleTightBPP CONCAT2E(HandleTight,BPP) +-#define InitFilterCopyBPP CONCAT2E(InitFilterCopy,BPP) +-#define InitFilterPaletteBPP CONCAT2E(InitFilterPalette,BPP) +-#define InitFilterGradientBPP CONCAT2E(InitFilterGradient,BPP) +-#define FilterCopyBPP CONCAT2E(FilterCopy,BPP) +-#define FilterPaletteBPP CONCAT2E(FilterPalette,BPP) +-#define FilterGradientBPP CONCAT2E(FilterGradient,BPP) +- +-#if BPP != 8 +-#define DecompressJpegRectBPP CONCAT2E(DecompressJpegRect,BPP) +-#endif +- +-#ifndef RGB_TO_PIXEL +- +-#define RGB_TO_PIXEL(bpp,r,g,b) \ +- (((CARD##bpp)(r) & client->format.redMax) << client->format.redShift | \ +- ((CARD##bpp)(g) & client->format.greenMax) << client->format.greenShift | \ +- ((CARD##bpp)(b) & client->format.blueMax) << client->format.blueShift) +- +-#define RGB24_TO_PIXEL(bpp,r,g,b) \ +- ((((CARD##bpp)(r) & 0xFF) * client->format.redMax + 127) / 255 \ +- << client->format.redShift | \ +- (((CARD##bpp)(g) & 0xFF) * client->format.greenMax + 127) / 255 \ +- << client->format.greenShift | \ +- (((CARD##bpp)(b) & 0xFF) * client->format.blueMax + 127) / 255 \ +- << client->format.blueShift) +- +-#define RGB24_TO_PIXEL32(r,g,b) \ +- (((uint32_t)(r) & 0xFF) << client->format.redShift | \ +- ((uint32_t)(g) & 0xFF) << client->format.greenShift | \ +- ((uint32_t)(b) & 0xFF) << client->format.blueShift) +- +-#endif +- +-/* Type declarations */ +- +-typedef void (*filterPtrBPP)(rfbClient* client, int, CARDBPP *); +- +-/* Prototypes */ +- +-static int InitFilterCopyBPP (rfbClient* client, int rw, int rh); +-static int InitFilterPaletteBPP (rfbClient* client, int rw, int rh); +-static int InitFilterGradientBPP (rfbClient* client, int rw, int rh); +-static void FilterCopyBPP (rfbClient* client, int numRows, CARDBPP *destBuffer); +-static void FilterPaletteBPP (rfbClient* client, int numRows, CARDBPP *destBuffer); +-static void FilterGradientBPP (rfbClient* client, int numRows, CARDBPP *destBuffer); +- +-#if BPP != 8 +-static rfbBool DecompressJpegRectBPP(rfbClient* client, int x, int y, int w, int h); +-#endif +- +-/* Definitions */ +- +-static rfbBool +-HandleTightBPP (rfbClient* client, int rx, int ry, int rw, int rh) +-{ +- CARDBPP fill_colour; +- uint8_t comp_ctl; +- uint8_t filter_id; +- filterPtrBPP filterFn; +- z_streamp zs; +- char *buffer2; +- int err, stream_id, compressedLen, bitsPixel; +- int bufferSize, rowSize, numRows, portionLen, rowsProcessed, extraBytes; +- +- if (!ReadFromRFBServer(client, (char *)&comp_ctl, 1)) +- return FALSE; +- +- /* Flush zlib streams if we are told by the server to do so. */ +- for (stream_id = 0; stream_id < 4; stream_id++) { +- if ((comp_ctl & 1) && client->zlibStreamActive[stream_id]) { +- if (inflateEnd (&client->zlibStream[stream_id]) != Z_OK && +- client->zlibStream[stream_id].msg != NULL) +- rfbClientLog("inflateEnd: %s\n", client->zlibStream[stream_id].msg); +- client->zlibStreamActive[stream_id] = FALSE; +- } +- comp_ctl >>= 1; +- } +- +- /* Handle solid rectangles. */ +- if (comp_ctl == rfbTightFill) { +-#if BPP == 32 +- if (client->format.depth == 24 && client->format.redMax == 0xFF && +- client->format.greenMax == 0xFF && client->format.blueMax == 0xFF) { +- if (!ReadFromRFBServer(client, client->buffer, 3)) +- return FALSE; +- fill_colour = RGB24_TO_PIXEL32(client->buffer[0], client->buffer[1], client->buffer[2]); +- } else { +- if (!ReadFromRFBServer(client, (char*)&fill_colour, sizeof(fill_colour))) +- return FALSE; +- } +-#else +- if (!ReadFromRFBServer(client, (char*)&fill_colour, sizeof(fill_colour))) +- return FALSE; +-#endif +- +- FillRectangle(client, rx, ry, rw, rh, fill_colour); +- +- return TRUE; +- } +- +-#if BPP == 8 +- if (comp_ctl == rfbTightJpeg) { +- rfbClientLog("Tight encoding: JPEG is not supported in 8 bpp mode.\n"); +- return FALSE; +- } +-#else +- if (comp_ctl == rfbTightJpeg) { +- return DecompressJpegRectBPP(client, rx, ry, rw, rh); +- } +-#endif +- +- /* Quit on unsupported subencoding value. */ +- if (comp_ctl > rfbTightMaxSubencoding) { +- rfbClientLog("Tight encoding: bad subencoding value received.\n"); +- return FALSE; +- } +- +- /* +- * Here primary compression mode handling begins. +- * Data was processed with optional filter + zlib compression. +- */ +- +- /* First, we should identify a filter to use. */ +- if ((comp_ctl & rfbTightExplicitFilter) != 0) { +- if (!ReadFromRFBServer(client, (char*)&filter_id, 1)) +- return FALSE; +- +- switch (filter_id) { +- case rfbTightFilterCopy: +- filterFn = FilterCopyBPP; +- bitsPixel = InitFilterCopyBPP(client, rw, rh); +- break; +- case rfbTightFilterPalette: +- filterFn = FilterPaletteBPP; +- bitsPixel = InitFilterPaletteBPP(client, rw, rh); +- break; +- case rfbTightFilterGradient: +- filterFn = FilterGradientBPP; +- bitsPixel = InitFilterGradientBPP(client, rw, rh); +- break; +- default: +- rfbClientLog("Tight encoding: unknown filter code received.\n"); +- return FALSE; +- } +- } else { +- filterFn = FilterCopyBPP; +- bitsPixel = InitFilterCopyBPP(client, rw, rh); +- } +- if (bitsPixel == 0) { +- rfbClientLog("Tight encoding: error receiving palette.\n"); +- return FALSE; +- } +- +- /* Determine if the data should be decompressed or just copied. */ +- rowSize = (rw * bitsPixel + 7) / 8; +- if (rh * rowSize < TIGHT_MIN_TO_COMPRESS) { +- if (!ReadFromRFBServer(client, (char*)client->buffer, rh * rowSize)) +- return FALSE; +- +- buffer2 = &client->buffer[TIGHT_MIN_TO_COMPRESS * 4]; +- filterFn(client, rh, (CARDBPP *)buffer2); +- +- CopyRectangle(client, (uint8_t *)buffer2, rx, ry, rw, rh); +- +- return TRUE; +- } +- +- /* Read the length (1..3 bytes) of compressed data following. */ +- compressedLen = (int)ReadCompactLen(client); +- if (compressedLen <= 0) { +- rfbClientLog("Incorrect data received from the server.\n"); +- return FALSE; +- } +- +- /* Now let's initialize compression stream if needed. */ +- stream_id = comp_ctl & 0x03; +- zs = &client->zlibStream[stream_id]; +- if (!client->zlibStreamActive[stream_id]) { +- zs->zalloc = Z_NULL; +- zs->zfree = Z_NULL; +- zs->opaque = Z_NULL; +- err = inflateInit(zs); +- if (err != Z_OK) { +- if (zs->msg != NULL) +- rfbClientLog("InflateInit error: %s.\n", zs->msg); +- return FALSE; +- } +- client->zlibStreamActive[stream_id] = TRUE; +- } +- +- /* Read, decode and draw actual pixel data in a loop. */ +- +- bufferSize = RFB_BUFFER_SIZE * bitsPixel / (bitsPixel + BPP) & 0xFFFFFFFC; +- buffer2 = &client->buffer[bufferSize]; +- if (rowSize > bufferSize) { +- /* Should be impossible when RFB_BUFFER_SIZE >= 16384 */ +- rfbClientLog("Internal error: incorrect buffer size.\n"); +- return FALSE; +- } +- +- rowsProcessed = 0; +- extraBytes = 0; +- +- while (compressedLen > 0) { +- if (compressedLen > ZLIB_BUFFER_SIZE) +- portionLen = ZLIB_BUFFER_SIZE; +- else +- portionLen = compressedLen; +- +- if (!ReadFromRFBServer(client, (char*)client->zlib_buffer, portionLen)) +- return FALSE; +- +- compressedLen -= portionLen; +- +- zs->next_in = (Bytef *)client->zlib_buffer; +- zs->avail_in = portionLen; +- +- do { +- zs->next_out = (Bytef *)&client->buffer[extraBytes]; +- zs->avail_out = bufferSize - extraBytes; +- +- err = inflate(zs, Z_SYNC_FLUSH); +- if (err == Z_BUF_ERROR) /* Input exhausted -- no problem. */ +- break; +- if (err != Z_OK && err != Z_STREAM_END) { +- if (zs->msg != NULL) { +- rfbClientLog("Inflate error: %s.\n", zs->msg); +- } else { +- rfbClientLog("Inflate error: %d.\n", err); +- } +- return FALSE; +- } +- +- numRows = (bufferSize - zs->avail_out) / rowSize; +- +- filterFn(client, numRows, (CARDBPP *)buffer2); +- +- extraBytes = bufferSize - zs->avail_out - numRows * rowSize; +- if (extraBytes > 0) +- memcpy(client->buffer, &client->buffer[numRows * rowSize], extraBytes); +- +- CopyRectangle(client, (uint8_t *)buffer2, rx, ry+rowsProcessed, rw, numRows); +- +- rowsProcessed += numRows; +- } +- while (zs->avail_out == 0); +- } +- +- if (rowsProcessed != rh) { +- rfbClientLog("Incorrect number of scan lines after decompression.\n"); +- return FALSE; +- } +- +- return TRUE; +-} +- +-/*---------------------------------------------------------------------------- +- * +- * Filter stuff. +- * +- */ +- +-static int +-InitFilterCopyBPP (rfbClient* client, int rw, int rh) +-{ +- client->rectWidth = rw; +- +-#if BPP == 32 +- if (client->format.depth == 24 && client->format.redMax == 0xFF && +- client->format.greenMax == 0xFF && client->format.blueMax == 0xFF) { +- client->cutZeros = TRUE; +- return 24; +- } else { +- client->cutZeros = FALSE; +- } +-#endif +- +- return BPP; +-} +- +-static void +-FilterCopyBPP (rfbClient* client, int numRows, CARDBPP *dst) +-{ +- +-#if BPP == 32 +- int x, y; +- +- if (client->cutZeros) { +- for (y = 0; y < numRows; y++) { +- for (x = 0; x < client->rectWidth; x++) { +- dst[y*client->rectWidth+x] = +- RGB24_TO_PIXEL32(client->buffer[(y*client->rectWidth+x)*3], +- client->buffer[(y*client->rectWidth+x)*3+1], +- client->buffer[(y*client->rectWidth+x)*3+2]); +- } +- } +- return; +- } +-#endif +- +- memcpy (dst, client->buffer, numRows * client->rectWidth * (BPP / 8)); +-} +- +-static int +-InitFilterGradientBPP (rfbClient* client, int rw, int rh) +-{ +- int bits; +- +- bits = InitFilterCopyBPP(client, rw, rh); +- if (client->cutZeros) +- memset(client->tightPrevRow, 0, rw * 3); +- else +- memset(client->tightPrevRow, 0, rw * 3 * sizeof(uint16_t)); +- +- return bits; +-} +- +-#if BPP == 32 +- +-static void +-FilterGradient24 (rfbClient* client, int numRows, uint32_t *dst) +-{ +- int x, y, c; +- uint8_t thisRow[2048*3]; +- uint8_t pix[3]; +- int est[3]; +- +- for (y = 0; y < numRows; y++) { +- +- /* First pixel in a row */ +- for (c = 0; c < 3; c++) { +- pix[c] = client->tightPrevRow[c] + client->buffer[y*client->rectWidth*3+c]; +- thisRow[c] = pix[c]; +- } +- dst[y*client->rectWidth] = RGB24_TO_PIXEL32(pix[0], pix[1], pix[2]); +- +- /* Remaining pixels of a row */ +- for (x = 1; x < client->rectWidth; x++) { +- for (c = 0; c < 3; c++) { +- est[c] = (int)client->tightPrevRow[x*3+c] + (int)pix[c] - +- (int)client->tightPrevRow[(x-1)*3+c]; +- if (est[c] > 0xFF) { +- est[c] = 0xFF; +- } else if (est[c] < 0x00) { +- est[c] = 0x00; +- } +- pix[c] = (uint8_t)est[c] + client->buffer[(y*client->rectWidth+x)*3+c]; +- thisRow[x*3+c] = pix[c]; +- } +- dst[y*client->rectWidth+x] = RGB24_TO_PIXEL32(pix[0], pix[1], pix[2]); +- } +- +- memcpy(client->tightPrevRow, thisRow, client->rectWidth * 3); +- } +-} +- +-#endif +- +-static void +-FilterGradientBPP (rfbClient* client, int numRows, CARDBPP *dst) +-{ +- int x, y, c; +- CARDBPP *src = (CARDBPP *)client->buffer; +- uint16_t *thatRow = (uint16_t *)client->tightPrevRow; +- uint16_t thisRow[2048*3]; +- uint16_t pix[3]; +- uint16_t max[3]; +- int shift[3]; +- int est[3]; +- +-#if BPP == 32 +- if (client->cutZeros) { +- FilterGradient24(client, numRows, dst); +- return; +- } +-#endif +- +- max[0] = client->format.redMax; +- max[1] = client->format.greenMax; +- max[2] = client->format.blueMax; +- +- shift[0] = client->format.redShift; +- shift[1] = client->format.greenShift; +- shift[2] = client->format.blueShift; +- +- for (y = 0; y < numRows; y++) { +- +- /* First pixel in a row */ +- for (c = 0; c < 3; c++) { +- pix[c] = (uint16_t)(((src[y*client->rectWidth] >> shift[c]) + thatRow[c]) & max[c]); +- thisRow[c] = pix[c]; +- } +- dst[y*client->rectWidth] = RGB_TO_PIXEL(BPP, pix[0], pix[1], pix[2]); +- +- /* Remaining pixels of a row */ +- for (x = 1; x < client->rectWidth; x++) { +- for (c = 0; c < 3; c++) { +- est[c] = (int)thatRow[x*3+c] + (int)pix[c] - (int)thatRow[(x-1)*3+c]; +- if (est[c] > (int)max[c]) { +- est[c] = (int)max[c]; +- } else if (est[c] < 0) { +- est[c] = 0; +- } +- pix[c] = (uint16_t)(((src[y*client->rectWidth+x] >> shift[c]) + est[c]) & max[c]); +- thisRow[x*3+c] = pix[c]; +- } +- dst[y*client->rectWidth+x] = RGB_TO_PIXEL(BPP, pix[0], pix[1], pix[2]); +- } +- memcpy(thatRow, thisRow, client->rectWidth * 3 * sizeof(uint16_t)); +- } +-} +- +-static int +-InitFilterPaletteBPP (rfbClient* client, int rw, int rh) +-{ +- uint8_t numColors; +-#if BPP == 32 +- int i; +- CARDBPP *palette = (CARDBPP *)client->tightPalette; +-#endif +- +- client->rectWidth = rw; +- +- if (!ReadFromRFBServer(client, (char*)&numColors, 1)) +- return 0; +- +- client->rectColors = (int)numColors; +- if (++client->rectColors < 2) +- return 0; +- +-#if BPP == 32 +- if (client->format.depth == 24 && client->format.redMax == 0xFF && +- client->format.greenMax == 0xFF && client->format.blueMax == 0xFF) { +- if (!ReadFromRFBServer(client, (char*)&client->tightPalette, client->rectColors * 3)) +- return 0; +- for (i = client->rectColors - 1; i >= 0; i--) { +- palette[i] = RGB24_TO_PIXEL32(client->tightPalette[i*3], +- client->tightPalette[i*3+1], +- client->tightPalette[i*3+2]); +- } +- return (client->rectColors == 2) ? 1 : 8; +- } +-#endif +- +- if (!ReadFromRFBServer(client, (char*)&client->tightPalette, client->rectColors * (BPP / 8))) +- return 0; +- +- return (client->rectColors == 2) ? 1 : 8; +-} +- +-static void +-FilterPaletteBPP (rfbClient* client, int numRows, CARDBPP *dst) +-{ +- int x, y, b, w; +- uint8_t *src = (uint8_t *)client->buffer; +- CARDBPP *palette = (CARDBPP *)client->tightPalette; +- +- if (client->rectColors == 2) { +- w = (client->rectWidth + 7) / 8; +- for (y = 0; y < numRows; y++) { +- for (x = 0; x < client->rectWidth / 8; x++) { +- for (b = 7; b >= 0; b--) +- dst[y*client->rectWidth+x*8+7-b] = palette[src[y*w+x] >> b & 1]; +- } +- for (b = 7; b >= 8 - client->rectWidth % 8; b--) { +- dst[y*client->rectWidth+x*8+7-b] = palette[src[y*w+x] >> b & 1]; +- } +- } +- } else { +- for (y = 0; y < numRows; y++) +- for (x = 0; x < client->rectWidth; x++) +- dst[y*client->rectWidth+x] = palette[(int)src[y*client->rectWidth+x]]; +- } +-} +- +-#if BPP != 8 +- +-/*---------------------------------------------------------------------------- +- * +- * JPEG decompression. +- * +- */ +- +-static rfbBool +-DecompressJpegRectBPP(rfbClient* client, int x, int y, int w, int h) +-{ +- struct jpeg_decompress_struct cinfo; +- struct jpeg_error_mgr jerr; +- int compressedLen; +- uint8_t *compressedData; +- CARDBPP *pixelPtr; +- JSAMPROW rowPointer[1]; +- int dx, dy; +- +- compressedLen = (int)ReadCompactLen(client); +- if (compressedLen <= 0) { +- rfbClientLog("Incorrect data received from the server.\n"); +- return FALSE; +- } +- +- compressedData = malloc(compressedLen); +- if (compressedData == NULL) { +- rfbClientLog("Memory allocation error.\n"); +- return FALSE; +- } +- +- if (!ReadFromRFBServer(client, (char*)compressedData, compressedLen)) { +- free(compressedData); +- return FALSE; +- } +- +- cinfo.err = jpeg_std_error(&jerr); +- cinfo.client_data = client; +- jpeg_create_decompress(&cinfo); +- +- JpegSetSrcManager(&cinfo, compressedData, compressedLen); +- +- jpeg_read_header(&cinfo, TRUE); +- cinfo.out_color_space = JCS_RGB; +- +- jpeg_start_decompress(&cinfo); +- if (cinfo.output_width != w || cinfo.output_height != h || +- cinfo.output_components != 3) { +- rfbClientLog("Tight Encoding: Wrong JPEG data received.\n"); +- jpeg_destroy_decompress(&cinfo); +- free(compressedData); +- return FALSE; +- } +- +- rowPointer[0] = (JSAMPROW)client->buffer; +- dy = 0; +- while (cinfo.output_scanline < cinfo.output_height) { +- jpeg_read_scanlines(&cinfo, rowPointer, 1); +- if (client->jpegError) { +- break; +- } +- pixelPtr = (CARDBPP *)&client->buffer[RFB_BUFFER_SIZE / 2]; +- for (dx = 0; dx < w; dx++) { +- *pixelPtr++ = +- RGB24_TO_PIXEL(BPP, client->buffer[dx*3], client->buffer[dx*3+1], client->buffer[dx*3+2]); +- } +- CopyRectangle(client, (uint8_t *)&client->buffer[RFB_BUFFER_SIZE / 2], x, y + dy, w, 1); +- dy++; +- } +- +- if (!client->jpegError) +- jpeg_finish_decompress(&cinfo); +- +- jpeg_destroy_decompress(&cinfo); +- free(compressedData); +- +- return !client->jpegError; +-} +- +-#else +- +-static long +-ReadCompactLen (rfbClient* client) +-{ +- long len; +- uint8_t b; +- +- if (!ReadFromRFBServer(client, (char *)&b, 1)) +- return -1; +- len = (int)b & 0x7F; +- if (b & 0x80) { +- if (!ReadFromRFBServer(client, (char *)&b, 1)) +- return -1; +- len |= ((int)b & 0x7F) << 7; +- if (b & 0x80) { +- if (!ReadFromRFBServer(client, (char *)&b, 1)) +- return -1; +- len |= ((int)b & 0xFF) << 14; +- } +- } +- return len; +-} +- +-/* +- * JPEG source manager functions for JPEG decompression in Tight decoder. +- */ +- +-static void +-JpegInitSource(j_decompress_ptr cinfo) +-{ +- rfbClient* client=(rfbClient*)cinfo->client_data; +- client->jpegError = FALSE; +-} +- +-static boolean +-JpegFillInputBuffer(j_decompress_ptr cinfo) +-{ +- rfbClient* client=(rfbClient*)cinfo->client_data; +- client->jpegError = TRUE; +- client->jpegSrcManager->bytes_in_buffer = client->jpegBufferLen; +- client->jpegSrcManager->next_input_byte = (JOCTET *)client->jpegBufferPtr; +- +- return TRUE; +-} +- +-static void +-JpegSkipInputData(j_decompress_ptr cinfo, long num_bytes) +-{ +- rfbClient* client=(rfbClient*)cinfo->client_data; +- if (num_bytes < 0 || num_bytes > client->jpegSrcManager->bytes_in_buffer) { +- client->jpegError = TRUE; +- client->jpegSrcManager->bytes_in_buffer = client->jpegBufferLen; +- client->jpegSrcManager->next_input_byte = (JOCTET *)client->jpegBufferPtr; +- } else { +- client->jpegSrcManager->next_input_byte += (size_t) num_bytes; +- client->jpegSrcManager->bytes_in_buffer -= (size_t) num_bytes; +- } +-} +- +-static void +-JpegTermSource(j_decompress_ptr cinfo) +-{ +- /* nothing to do here. */ +-} +- +-static void +-JpegSetSrcManager(j_decompress_ptr cinfo, +- uint8_t *compressedData, +- int compressedLen) +-{ +- rfbClient* client=(rfbClient*)cinfo->client_data; +- client->jpegBufferPtr = compressedData; +- client->jpegBufferLen = (size_t)compressedLen; +- +- if(client->jpegSrcManager == NULL) +- client->jpegSrcManager = malloc(sizeof(struct jpeg_source_mgr)); +- client->jpegSrcManager->init_source = JpegInitSource; +- client->jpegSrcManager->fill_input_buffer = JpegFillInputBuffer; +- client->jpegSrcManager->skip_input_data = JpegSkipInputData; +- client->jpegSrcManager->resync_to_restart = jpeg_resync_to_restart; +- client->jpegSrcManager->term_source = JpegTermSource; +- client->jpegSrcManager->next_input_byte = (JOCTET*)client->jpegBufferPtr; +- client->jpegSrcManager->bytes_in_buffer = client->jpegBufferLen; +- +- cinfo->src = client->jpegSrcManager; +-} +- +-#endif +- +-#undef CARDBPP +- +-/* LIBVNCSERVER_HAVE_LIBZ and LIBVNCSERVER_HAVE_LIBJPEG */ +-#endif +-#endif +- +diff -urN remmina-plugins/vnc/libvncserver/libvncclient/tls.c remmina-plugins/vnc/libvncserver/libvncclient/tls.c +--- remmina-plugins/vnc/libvncserver/libvncclient/tls.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/libvncclient/tls.c 1970-01-01 10:00:00.000000000 +1000 +@@ -1,536 +0,0 @@ +-/* +- * Copyright (C) 2009 Vic Lee. +- * +- * This is free software; you can 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. +- * +- * This software 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 this software; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +- * USA. +- */ +- +-#include <rfb/rfbclient.h> +-#include <errno.h> +-#ifdef WIN32 +-#undef SOCKET +-#include <windows.h> /* for Sleep() */ +-#define sleep(X) Sleep(1000*X) /* MinGW32 has no sleep() */ +-#include <winsock2.h> +-#define read(sock,buf,len) recv(sock,buf,len,0) +-#define write(sock,buf,len) send(sock,buf,len,0) +-#endif +-#include "tls.h" +- +-#ifdef LIBVNCSERVER_WITH_CLIENT_TLS +- +-static const int rfbCertTypePriority[] = { GNUTLS_CRT_X509, 0 }; +-static const int rfbProtoPriority[]= { GNUTLS_TLS1_1, GNUTLS_TLS1_0, GNUTLS_SSL3, 0 }; +-static const int rfbKXPriority[] = {GNUTLS_KX_DHE_DSS, GNUTLS_KX_RSA, GNUTLS_KX_DHE_RSA, GNUTLS_KX_SRP, 0}; +-static const int rfbKXAnon[] = {GNUTLS_KX_ANON_DH, 0}; +- +-#define DH_BITS 1024 +-static gnutls_dh_params_t rfbDHParams; +- +-static rfbBool rfbTLSInitialized = FALSE; +- +-static rfbBool +-InitializeTLS(void) +-{ +- int ret; +- +- if (rfbTLSInitialized) return TRUE; +- if ((ret = gnutls_global_init()) < 0 || +- (ret = gnutls_dh_params_init(&rfbDHParams)) < 0 || +- (ret = gnutls_dh_params_generate2(rfbDHParams, DH_BITS)) < 0) +- { +- rfbClientLog("Failed to initialized GnuTLS: %s.\n", gnutls_strerror(ret)); +- return FALSE; +- } +- rfbClientLog("GnuTLS initialized.\n"); +- rfbTLSInitialized = TRUE; +- return TRUE; +-} +- +-/* +- * On Windows, translate WSAGetLastError() to errno values as GNU TLS does it +- * internally too. This is necessary because send() and recv() on Windows +- * don't set errno when they fail but GNUTLS expects a proper errno value. +- * +- * Use gnutls_transport_set_global_errno() like the GNU TLS documentation +- * suggests to avoid problems with different errno variables when GNU TLS and +- * libvncclient are linked to different versions of msvcrt.dll. +- */ +-#ifdef WIN32 +-static void WSAtoTLSErrno() +-{ +- switch(WSAGetLastError()) { +- case WSAEWOULDBLOCK: +- gnutls_transport_set_global_errno(EAGAIN); +- break; +- case WSAEINTR: +- gnutls_transport_set_global_errno(EINTR); +- break; +- default: +- gnutls_transport_set_global_errno(EIO); +- break; +- } +-} +-#endif +- +- +-static ssize_t +-PushTLS(gnutls_transport_ptr_t transport, const void *data, size_t len) +-{ +- rfbClient *client = (rfbClient*)transport; +- int ret; +- +- while (1) +- { +- ret = write(client->sock, data, len); +- if (ret < 0) +- { +-#ifdef WIN32 +- WSAtoTLSErrno(); +-#endif +- if (errno == EINTR) continue; +- return -1; +- } +- return ret; +- } +-} +- +- +-static ssize_t +-PullTLS(gnutls_transport_ptr_t transport, void *data, size_t len) +-{ +- rfbClient *client = (rfbClient*)transport; +- int ret; +- +- while (1) +- { +- ret = read(client->sock, data, len); +- if (ret < 0) +- { +-#ifdef WIN32 +- WSAtoTLSErrno(); +-#endif +- if (errno == EINTR) continue; +- return -1; +- } +- return ret; +- } +-} +- +-static rfbBool +-InitializeTLSSession(rfbClient* client, rfbBool anonTLS) +-{ +- int ret; +- +- if (client->tlsSession) return TRUE; +- +- if ((ret = gnutls_init(&client->tlsSession, GNUTLS_CLIENT)) < 0) +- { +- rfbClientLog("Failed to initialized TLS session: %s.\n", gnutls_strerror(ret)); +- return FALSE; +- } +- +- if ((ret = gnutls_set_default_priority(client->tlsSession)) < 0 || +- (ret = gnutls_kx_set_priority(client->tlsSession, anonTLS ? rfbKXAnon : rfbKXPriority)) < 0 || +- (ret = gnutls_certificate_type_set_priority(client->tlsSession, rfbCertTypePriority)) < 0 || +- (ret = gnutls_protocol_set_priority(client->tlsSession, rfbProtoPriority)) < 0) +- { +- rfbClientLog("Warning: Failed to set TLS priority: %s.\n", gnutls_strerror(ret)); +- } +- +- gnutls_transport_set_ptr(client->tlsSession, (gnutls_transport_ptr_t)client); +- gnutls_transport_set_push_function(client->tlsSession, PushTLS); +- gnutls_transport_set_pull_function(client->tlsSession, PullTLS); +- +- rfbClientLog("TLS session initialized.\n"); +- +- return TRUE; +-} +- +-static rfbBool +-SetTLSAnonCredential(rfbClient* client) +-{ +- gnutls_anon_client_credentials anonCred; +- int ret; +- +- if ((ret = gnutls_anon_allocate_client_credentials(&anonCred)) < 0 || +- (ret = gnutls_credentials_set(client->tlsSession, GNUTLS_CRD_ANON, anonCred)) < 0) +- { +- FreeTLS(client); +- rfbClientLog("Failed to create anonymous credentials: %s", gnutls_strerror(ret)); +- return FALSE; +- } +- rfbClientLog("TLS anonymous credential created.\n"); +- return TRUE; +-} +- +-static rfbBool +-HandshakeTLS(rfbClient* client) +-{ +- int timeout = 15; +- int ret; +- +- while (timeout > 0 && (ret = gnutls_handshake(client->tlsSession)) < 0) +- { +- if (!gnutls_error_is_fatal(ret)) +- { +- rfbClientLog("TLS handshake blocking.\n"); +- sleep(1); +- timeout--; +- continue; +- } +- rfbClientLog("TLS handshake failed: %s.\n", gnutls_strerror(ret)); +- FreeTLS(client); +- return FALSE; +- } +- +- if (timeout <= 0) +- { +- rfbClientLog("TLS handshake timeout.\n"); +- FreeTLS(client); +- return FALSE; +- } +- +- rfbClientLog("TLS handshake done.\n"); +- return TRUE; +-} +- +-/* VeNCrypt sub auth. 1 byte auth count, followed by count * 4 byte integers */ +-static rfbBool +-ReadVeNCryptSecurityType(rfbClient* client, uint32_t *result) +-{ +- uint8_t count=0; +- uint8_t loop=0; +- uint8_t flag=0; +- uint32_t tAuth[256], t; +- char buf1[500],buf2[10]; +- uint32_t authScheme; +- +- if (!ReadFromRFBServer(client, (char *)&count, 1)) return FALSE; +- +- if (count==0) +- { +- rfbClientLog("List of security types is ZERO. Giving up.\n"); +- return FALSE; +- } +- +- if (count>sizeof(tAuth)) +- { +- rfbClientLog("%d security types are too many; maximum is %d\n", count, sizeof(tAuth)); +- return FALSE; +- } +- +- rfbClientLog("We have %d security types to read\n", count); +- authScheme=0; +- /* now, we have a list of available security types to read ( uint8_t[] ) */ +- for (loop=0;loop<count;loop++) +- { +- if (!ReadFromRFBServer(client, (char *)&tAuth[loop], 4)) return FALSE; +- t=rfbClientSwap32IfLE(tAuth[loop]); +- rfbClientLog("%d) Received security type %d\n", loop, t); +- if (flag) continue; +- if (t==rfbVeNCryptTLSNone || +- t==rfbVeNCryptTLSVNC || +- t==rfbVeNCryptTLSPlain || +- t==rfbVeNCryptX509None || +- t==rfbVeNCryptX509VNC || +- t==rfbVeNCryptX509Plain) +- { +- flag++; +- authScheme=t; +- rfbClientLog("Selecting security type %d (%d/%d in the list)\n", authScheme, loop, count); +- /* send back 4 bytes (in original byte order!) indicating which security type to use */ +- if (!WriteToRFBServer(client, (char *)&tAuth[loop], 4)) return FALSE; +- } +- tAuth[loop]=t; +- } +- if (authScheme==0) +- { +- memset(buf1, 0, sizeof(buf1)); +- for (loop=0;loop<count;loop++) +- { +- if (strlen(buf1)>=sizeof(buf1)-1) break; +- snprintf(buf2, sizeof(buf2), (loop>0 ? ", %d" : "%d"), (int)tAuth[loop]); +- strncat(buf1, buf2, sizeof(buf1)-strlen(buf1)-1); +- } +- rfbClientLog("Unknown VeNCrypt authentication scheme from VNC server: %s\n", +- buf1); +- return FALSE; +- } +- *result = authScheme; +- return TRUE; +-} +- +-static void +-FreeX509Credential(rfbCredential *cred) +-{ +- if (cred->x509Credential.x509CACertFile) free(cred->x509Credential.x509CACertFile); +- if (cred->x509Credential.x509CACrlFile) free(cred->x509Credential.x509CACrlFile); +- if (cred->x509Credential.x509ClientCertFile) free(cred->x509Credential.x509ClientCertFile); +- if (cred->x509Credential.x509ClientKeyFile) free(cred->x509Credential.x509ClientKeyFile); +- free(cred); +-} +- +-static gnutls_certificate_credentials_t +-CreateX509CertCredential(rfbCredential *cred) +-{ +- gnutls_certificate_credentials_t x509_cred; +- int ret; +- +- if (!cred->x509Credential.x509CACertFile) +- { +- rfbClientLog("No CA certificate provided.\n"); +- return NULL; +- } +- +- if ((ret = gnutls_certificate_allocate_credentials(&x509_cred)) < 0) +- { +- rfbClientLog("Cannot allocate credentials: %s.\n", gnutls_strerror(ret)); +- return NULL; +- } +- if ((ret = gnutls_certificate_set_x509_trust_file(x509_cred, +- cred->x509Credential.x509CACertFile, GNUTLS_X509_FMT_PEM)) < 0) +- { +- rfbClientLog("Cannot load CA credentials: %s.\n", gnutls_strerror(ret)); +- gnutls_certificate_free_credentials (x509_cred); +- return NULL; +- } +- if (cred->x509Credential.x509ClientCertFile && cred->x509Credential.x509ClientKeyFile) +- { +- if ((ret = gnutls_certificate_set_x509_key_file(x509_cred, +- cred->x509Credential.x509ClientCertFile, cred->x509Credential.x509ClientKeyFile, +- GNUTLS_X509_FMT_PEM)) < 0) +- { +- rfbClientLog("Cannot load client certificate or key: %s.\n", gnutls_strerror(ret)); +- gnutls_certificate_free_credentials (x509_cred); +- return NULL; +- } +- } else +- { +- rfbClientLog("No client certificate or key provided.\n"); +- } +- if (cred->x509Credential.x509CACrlFile) +- { +- if ((ret = gnutls_certificate_set_x509_crl_file(x509_cred, +- cred->x509Credential.x509CACrlFile, GNUTLS_X509_FMT_PEM)) < 0) +- { +- rfbClientLog("Cannot load CRL: %s.\n", gnutls_strerror(ret)); +- gnutls_certificate_free_credentials (x509_cred); +- return NULL; +- } +- } else +- { +- rfbClientLog("No CRL provided.\n"); +- } +- gnutls_certificate_set_dh_params (x509_cred, rfbDHParams); +- return x509_cred; +-} +- +-#endif +- +-rfbBool +-HandleAnonTLSAuth(rfbClient* client) +-{ +-#ifdef LIBVNCSERVER_WITH_CLIENT_TLS +- +- if (!InitializeTLS() || !InitializeTLSSession(client, TRUE)) return FALSE; +- +- if (!SetTLSAnonCredential(client)) return FALSE; +- +- if (!HandshakeTLS(client)) return FALSE; +- +- return TRUE; +- +-#else +- rfbClientLog("TLS is not supported.\n"); +- return FALSE; +-#endif +-} +- +-rfbBool +-HandleVeNCryptAuth(rfbClient* client) +-{ +-#ifdef LIBVNCSERVER_WITH_CLIENT_TLS +- uint8_t major, minor, status; +- uint32_t authScheme; +- rfbBool anonTLS; +- gnutls_certificate_credentials_t x509_cred = NULL; +- int ret; +- +- if (!InitializeTLS()) return FALSE; +- +- /* Read VeNCrypt version */ +- if (!ReadFromRFBServer(client, (char *)&major, 1) || +- !ReadFromRFBServer(client, (char *)&minor, 1)) +- { +- return FALSE; +- } +- rfbClientLog("Got VeNCrypt version %d.%d from server.\n", (int)major, (int)minor); +- +- if (major != 0 && minor != 2) +- { +- rfbClientLog("Unsupported VeNCrypt version.\n"); +- return FALSE; +- } +- +- if (!WriteToRFBServer(client, (char *)&major, 1) || +- !WriteToRFBServer(client, (char *)&minor, 1) || +- !ReadFromRFBServer(client, (char *)&status, 1)) +- { +- return FALSE; +- } +- +- if (status != 0) +- { +- rfbClientLog("Server refused VeNCrypt version %d.%d.\n", (int)major, (int)minor); +- return FALSE; +- } +- +- if (!ReadVeNCryptSecurityType(client, &authScheme)) return FALSE; +- if (!ReadFromRFBServer(client, (char *)&status, 1) || status != 1) +- { +- rfbClientLog("Server refused VeNCrypt authentication %d (%d).\n", authScheme, (int)status); +- return FALSE; +- } +- client->subAuthScheme = authScheme; +- +- /* Some VeNCrypt security types are anonymous TLS, others are X509 */ +- switch (authScheme) +- { +- case rfbVeNCryptTLSNone: +- case rfbVeNCryptTLSVNC: +- case rfbVeNCryptTLSPlain: +- anonTLS = TRUE; +- break; +- default: +- anonTLS = FALSE; +- break; +- } +- +- /* Get X509 Credentials if it's not anonymous */ +- if (!anonTLS) +- { +- rfbCredential *cred; +- +- if (!client->GetCredential) +- { +- rfbClientLog("GetCredential callback is not set.\n"); +- return FALSE; +- } +- cred = client->GetCredential(client, rfbCredentialTypeX509); +- if (!cred) +- { +- rfbClientLog("Reading credential failed\n"); +- return FALSE; +- } +- +- x509_cred = CreateX509CertCredential(cred); +- FreeX509Credential(cred); +- if (!x509_cred) return FALSE; +- } +- +- /* Start up the TLS session */ +- if (!InitializeTLSSession(client, anonTLS)) return FALSE; +- +- if (anonTLS) +- { +- if (!SetTLSAnonCredential(client)) return FALSE; +- } +- else +- { +- if ((ret = gnutls_credentials_set(client->tlsSession, GNUTLS_CRD_CERTIFICATE, x509_cred)) < 0) +- { +- rfbClientLog("Cannot set x509 credential: %s.\n", gnutls_strerror(ret)); +- FreeTLS(client); +- return FALSE; +- } +- } +- +- if (!HandshakeTLS(client)) return FALSE; +- +- /* TODO: validate certificate */ +- +- /* We are done here. The caller should continue with client->subAuthScheme +- * to do actual sub authentication. +- */ +- return TRUE; +- +-#else +- rfbClientLog("TLS is not supported.\n"); +- return FALSE; +-#endif +-} +- +-int +-ReadFromTLS(rfbClient* client, char *out, unsigned int n) +-{ +-#ifdef LIBVNCSERVER_WITH_CLIENT_TLS +- ssize_t ret; +- +- ret = gnutls_record_recv(client->tlsSession, out, n); +- if (ret >= 0) return ret; +- if (ret == GNUTLS_E_REHANDSHAKE || ret == GNUTLS_E_AGAIN) +- { +- errno = EAGAIN; +- } else +- { +- rfbClientLog("Error reading from TLS: %s.\n", gnutls_strerror(ret)); +- errno = EINTR; +- } +- return -1; +-#else +- rfbClientLog("TLS is not supported.\n"); +- errno = EINTR; +- return -1; +-#endif +-} +- +-int +-WriteToTLS(rfbClient* client, char *buf, unsigned int n) +-{ +-#ifdef LIBVNCSERVER_WITH_CLIENT_TLS +- unsigned int offset = 0; +- ssize_t ret; +- +- while (offset < n) +- { +- ret = gnutls_record_send(client->tlsSession, buf+offset, (size_t)(n-offset)); +- if (ret == 0) continue; +- if (ret < 0) +- { +- if (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED) continue; +- rfbClientLog("Error writing to TLS: %s.\n", gnutls_strerror(ret)); +- return -1; +- } +- offset += (unsigned int)ret; +- } +- return offset; +-#else +- rfbClientLog("TLS is not supported.\n"); +- errno = EINTR; +- return -1; +-#endif +-} +- +-void FreeTLS(rfbClient* client) +-{ +-#ifdef LIBVNCSERVER_WITH_CLIENT_TLS +- if (client->tlsSession) +- { +- gnutls_deinit(client->tlsSession); +- client->tlsSession = NULL; +- } +-#endif +-} +diff -urN remmina-plugins/vnc/libvncserver/libvncclient/tls.h remmina-plugins/vnc/libvncserver/libvncclient/tls.h +--- remmina-plugins/vnc/libvncserver/libvncclient/tls.h 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/libvncclient/tls.h 1970-01-01 10:00:00.000000000 +1000 +@@ -1,51 +0,0 @@ +-#ifndef TLS_H +-#define TLS_H +- +-/* +- * Copyright (C) 2009 Vic Lee. +- * +- * This is free software; you can 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. +- * +- * This software 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 this software; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +- * USA. +- */ +- +-/* Handle Anonymous TLS Authentication (18) with the server. +- * After authentication, client->tlsSession will be set. +- */ +-rfbBool HandleAnonTLSAuth(rfbClient* client); +- +-/* Handle VeNCrypt Authentication (19) with the server. +- * The callback function GetX509Credential will be called. +- * After authentication, client->tlsSession will be set. +- */ +-rfbBool HandleVeNCryptAuth(rfbClient* client); +- +-/* Read desired bytes from TLS session. +- * It's a wrapper function over gnutls_record_recv() and return values +- * are same as read(), that is, >0 for actual bytes read, 0 for EOF, +- * or EAGAIN, EINTR. +- * This should be a non-blocking call. Blocking is handled in sockets.c. +- */ +-int ReadFromTLS(rfbClient* client, char *out, unsigned int n); +- +-/* Write desired bytes to TLS session. +- * It's a wrapper function over gnutls_record_send() and it will be +- * blocking call, until all bytes are written or error returned. +- */ +-int WriteToTLS(rfbClient* client, char *buf, unsigned int n); +- +-/* Free TLS resources */ +-void FreeTLS(rfbClient* client); +- +-#endif /* TLS_H */ +diff -urN remmina-plugins/vnc/libvncserver/libvncclient/ultra.c remmina-plugins/vnc/libvncserver/libvncclient/ultra.c +--- remmina-plugins/vnc/libvncserver/libvncclient/ultra.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/libvncclient/ultra.c 1970-01-01 10:00:00.000000000 +1000 +@@ -1,210 +0,0 @@ +-/* +- * Copyright (C) 2000 Tridia Corporation. All Rights Reserved. +- * Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved. +- * +- * This is free software; you can 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. +- * +- * This software 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 this software; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +- * USA. +- */ +- +-/* +- * ultrazip.c - handle ultrazip encoding. +- * +- * This file shouldn't be compiled directly. It is included multiple times by +- * rfbproto.c, each time with a different definition of the macro BPP. For +- * each value of BPP, this file defines a function which handles an zlib +- * encoded rectangle with BPP bits per pixel. +- */ +- +-#define HandleUltraZipBPP CONCAT2E(HandleUltraZip,BPP) +-#define HandleUltraBPP CONCAT2E(HandleUltra,BPP) +-#define CARDBPP CONCAT3E(uint,BPP,_t) +- +-static rfbBool +-HandleUltraBPP (rfbClient* client, int rx, int ry, int rw, int rh) +-{ +- rfbZlibHeader hdr; +- int toRead=0; +- int inflateResult=0; +- lzo_uint uncompressedBytes = (( rw * rh ) * ( BPP / 8 )); +- +- if (!ReadFromRFBServer(client, (char *)&hdr, sz_rfbZlibHeader)) +- return FALSE; +- +- toRead = rfbClientSwap32IfLE(hdr.nBytes); +- if (toRead==0) return TRUE; +- +- if (uncompressedBytes==0) +- { +- rfbClientLog("ultra error: rectangle has 0 uncomressed bytes ((%dw * %dh) * (%d / 8))\n", rw, rh, BPP); +- return FALSE; +- } +- +- /* First make sure we have a large enough raw buffer to hold the +- * decompressed data. In practice, with a fixed BPP, fixed frame +- * buffer size and the first update containing the entire frame +- * buffer, this buffer allocation should only happen once, on the +- * first update. +- */ +- if ( client->raw_buffer_size < (int)uncompressedBytes) { +- if ( client->raw_buffer != NULL ) { +- free( client->raw_buffer ); +- } +- client->raw_buffer_size = uncompressedBytes; +- /* buffer needs to be aligned on 4-byte boundaries */ +- if ((client->raw_buffer_size % 4)!=0) +- client->raw_buffer_size += (4-(client->raw_buffer_size % 4)); +- client->raw_buffer = (char*) malloc( client->raw_buffer_size ); +- } +- +- /* allocate enough space to store the incoming compressed packet */ +- if ( client->ultra_buffer_size < toRead ) { +- if ( client->ultra_buffer != NULL ) { +- free( client->ultra_buffer ); +- } +- client->ultra_buffer_size = toRead; +- /* buffer needs to be aligned on 4-byte boundaries */ +- if ((client->ultra_buffer_size % 4)!=0) +- client->ultra_buffer_size += (4-(client->ultra_buffer_size % 4)); +- client->ultra_buffer = (char*) malloc( client->ultra_buffer_size ); +- } +- +- /* Fill the buffer, obtaining data from the server. */ +- if (!ReadFromRFBServer(client, client->ultra_buffer, toRead)) +- return FALSE; +- +- /* uncompress the data */ +- uncompressedBytes = client->raw_buffer_size; +- inflateResult = lzo1x_decompress( +- (lzo_byte *)client->ultra_buffer, toRead, +- (lzo_byte *)client->raw_buffer, (lzo_uintp) &uncompressedBytes, +- NULL); +- +- +- if ((rw * rh * (BPP / 8)) != uncompressedBytes) +- rfbClientLog("Ultra decompressed too little (%d < %d)", (rw * rh * (BPP / 8)), uncompressedBytes); +- +- /* Put the uncompressed contents of the update on the screen. */ +- if ( inflateResult == LZO_E_OK ) +- { +- CopyRectangle(client, (unsigned char *)client->raw_buffer, rx, ry, rw, rh); +- } +- else +- { +- rfbClientLog("ultra decompress returned error: %d\n", +- inflateResult); +- return FALSE; +- } +- return TRUE; +-} +- +- +-/* UltraZip is like rre in that it is composed of subrects */ +-static rfbBool +-HandleUltraZipBPP (rfbClient* client, int rx, int ry, int rw, int rh) +-{ +- rfbZlibHeader hdr; +- int i=0; +- int toRead=0; +- int inflateResult=0; +- unsigned char *ptr=NULL; +- lzo_uint uncompressedBytes = ry + (rw * 65535); +- unsigned int numCacheRects = rx; +- +- if (!ReadFromRFBServer(client, (char *)&hdr, sz_rfbZlibHeader)) +- return FALSE; +- +- toRead = rfbClientSwap32IfLE(hdr.nBytes); +- +- if (toRead==0) return TRUE; +- +- if (uncompressedBytes==0) +- { +- rfbClientLog("ultrazip error: rectangle has 0 uncomressed bytes (%dy + (%dw * 65535)) (%d rectangles)\n", ry, rw, rx); +- return FALSE; +- } +- +- /* First make sure we have a large enough raw buffer to hold the +- * decompressed data. In practice, with a fixed BPP, fixed frame +- * buffer size and the first update containing the entire frame +- * buffer, this buffer allocation should only happen once, on the +- * first update. +- */ +- if ( client->raw_buffer_size < (int)(uncompressedBytes + 500)) { +- if ( client->raw_buffer != NULL ) { +- free( client->raw_buffer ); +- } +- client->raw_buffer_size = uncompressedBytes + 500; +- /* buffer needs to be aligned on 4-byte boundaries */ +- if ((client->raw_buffer_size % 4)!=0) +- client->raw_buffer_size += (4-(client->raw_buffer_size % 4)); +- client->raw_buffer = (char*) malloc( client->raw_buffer_size ); +- } +- +- +- /* allocate enough space to store the incoming compressed packet */ +- if ( client->ultra_buffer_size < toRead ) { +- if ( client->ultra_buffer != NULL ) { +- free( client->ultra_buffer ); +- } +- client->ultra_buffer_size = toRead; +- client->ultra_buffer = (char*) malloc( client->ultra_buffer_size ); +- } +- +- /* Fill the buffer, obtaining data from the server. */ +- if (!ReadFromRFBServer(client, client->ultra_buffer, toRead)) +- return FALSE; +- +- /* uncompress the data */ +- uncompressedBytes = client->raw_buffer_size; +- inflateResult = lzo1x_decompress( +- (lzo_byte *)client->ultra_buffer, toRead, +- (lzo_byte *)client->raw_buffer, &uncompressedBytes, NULL); +- if ( inflateResult != LZO_E_OK ) +- { +- rfbClientLog("ultra decompress returned error: %d\n", +- inflateResult); +- return FALSE; +- } +- +- /* Put the uncompressed contents of the update on the screen. */ +- ptr = (unsigned char *)client->raw_buffer; +- for (i=0; i<numCacheRects; i++) +- { +- unsigned short sx, sy, sw, sh; +- unsigned int se; +- +- memcpy((char *)&sx, ptr, 2); ptr += 2; +- memcpy((char *)&sy, ptr, 2); ptr += 2; +- memcpy((char *)&sw, ptr, 2); ptr += 2; +- memcpy((char *)&sh, ptr, 2); ptr += 2; +- memcpy((char *)&se, ptr, 4); ptr += 4; +- +- sx = rfbClientSwap16IfLE(sx); +- sy = rfbClientSwap16IfLE(sy); +- sw = rfbClientSwap16IfLE(sw); +- sh = rfbClientSwap16IfLE(sh); +- se = rfbClientSwap32IfLE(se); +- +- if (se == rfbEncodingRaw) +- { +- CopyRectangle(client, (unsigned char *)ptr, sx, sy, sw, sh); +- ptr += ((sw * sh) * (BPP / 8)); +- } +- } +- +- return TRUE; +-} +- +-#undef CARDBPP +diff -urN remmina-plugins/vnc/libvncserver/libvncclient/vncviewer.c remmina-plugins/vnc/libvncserver/libvncclient/vncviewer.c +--- remmina-plugins/vnc/libvncserver/libvncclient/vncviewer.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/libvncclient/vncviewer.c 1970-01-01 10:00:00.000000000 +1000 +@@ -1,379 +0,0 @@ +-/* +- * Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved. +- * +- * This is free software; you can 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. +- * +- * This software 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 this software; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +- * USA. +- */ +- +-/* +- * vncviewer.c - the Xt-based VNC viewer. +- */ +- +-#ifdef __STRICT_ANSI__ +-#define _BSD_SOURCE +-#define _POSIX_SOURCE +-#endif +-#include <stdio.h> +-#include <stdlib.h> +-#include <string.h> +-#include <time.h> +-#include <rfb/rfbclient.h> +-#include "tls.h" +- +-static void Dummy(rfbClient* client) { +-} +-static rfbBool DummyPoint(rfbClient* client, int x, int y) { +- return TRUE; +-} +-static void DummyRect(rfbClient* client, int x, int y, int w, int h) { +-} +- +-#ifdef __MINGW32__ +-static char* NoPassword(rfbClient* client) { +- return strdup(""); +-} +-#undef SOCKET +-#include <winsock2.h> +-#define close closesocket +-#else +-#include <stdio.h> +-#include <termios.h> +-#endif +- +-static char* ReadPassword(rfbClient* client) { +-#ifdef __MINGW32__ +- /* FIXME */ +- rfbClientErr("ReadPassword on MinGW32 NOT IMPLEMENTED\n"); +- return NoPassword(client); +-#else +- int i; +- char* p=malloc(9); +- struct termios save,noecho; +- p[0]=0; +- if(tcgetattr(fileno(stdin),&save)!=0) return p; +- noecho=save; noecho.c_lflag &= ~ECHO; +- if(tcsetattr(fileno(stdin),TCSAFLUSH,&noecho)!=0) return p; +- fprintf(stderr,"Password: "); +- i=0; +- while(1) { +- int c=fgetc(stdin); +- if(c=='\n') +- break; +- if(i<8) { +- p[i]=c; +- i++; +- p[i]=0; +- } +- } +- tcsetattr(fileno(stdin),TCSAFLUSH,&save); +- return p; +-#endif +-} +-static rfbBool MallocFrameBuffer(rfbClient* client) { +- if(client->frameBuffer) +- free(client->frameBuffer); +- client->frameBuffer=malloc(client->width*client->height*client->format.bitsPerPixel/8); +- return client->frameBuffer?TRUE:FALSE; +-} +- +-static void initAppData(AppData* data) { +- data->shareDesktop=TRUE; +- data->viewOnly=FALSE; +- data->encodingsString="tight zrle ultra copyrect hextile zlib corre rre raw"; +- data->useBGR233=FALSE; +- data->nColours=0; +- data->forceOwnCmap=FALSE; +- data->forceTrueColour=FALSE; +- data->requestedDepth=0; +- data->compressLevel=3; +- data->qualityLevel=5; +-#ifdef LIBVNCSERVER_HAVE_LIBJPEG +- data->enableJPEG=TRUE; +-#else +- data->enableJPEG=FALSE; +-#endif +- data->useRemoteCursor=FALSE; +-} +- +-rfbClient* rfbGetClient(int bitsPerSample,int samplesPerPixel, +- int bytesPerPixel) { +- rfbClient* client=(rfbClient*)calloc(sizeof(rfbClient),1); +- if(!client) { +- rfbClientErr("Couldn't allocate client structure!\n"); +- return NULL; +- } +- initAppData(&client->appData); +- client->endianTest = 1; +- client->programName=""; +- client->serverHost=strdup(""); +- client->serverPort=5900; +- +- client->destHost = NULL; +- client->destPort = 5900; +- +- client->CurrentKeyboardLedState = 0; +- client->HandleKeyboardLedState = (HandleKeyboardLedStateProc)DummyPoint; +- +- /* default: use complete frame buffer */ +- client->updateRect.x = -1; +- +- client->format.bitsPerPixel = bytesPerPixel*8; +- client->format.depth = bitsPerSample*samplesPerPixel; +- client->appData.requestedDepth=client->format.depth; +- client->format.bigEndian = *(char *)&client->endianTest?FALSE:TRUE; +- client->format.trueColour = TRUE; +- +- if (client->format.bitsPerPixel == 8) { +- client->format.redMax = 7; +- client->format.greenMax = 7; +- client->format.blueMax = 3; +- client->format.redShift = 0; +- client->format.greenShift = 3; +- client->format.blueShift = 6; +- } else { +- client->format.redMax = (1 << bitsPerSample) - 1; +- client->format.greenMax = (1 << bitsPerSample) - 1; +- client->format.blueMax = (1 << bitsPerSample) - 1; +- if(!client->format.bigEndian) { +- client->format.redShift = 0; +- client->format.greenShift = bitsPerSample; +- client->format.blueShift = bitsPerSample * 2; +- } else { +- if(client->format.bitsPerPixel==8*3) { +- client->format.redShift = bitsPerSample*2; +- client->format.greenShift = bitsPerSample*1; +- client->format.blueShift = 0; +- } else { +- client->format.redShift = bitsPerSample*3; +- client->format.greenShift = bitsPerSample*2; +- client->format.blueShift = bitsPerSample; +- } +- } +- } +- +- client->bufoutptr=client->buf; +- client->buffered=0; +- +-#ifdef LIBVNCSERVER_HAVE_LIBZ +- client->raw_buffer_size = -1; +- client->decompStreamInited = FALSE; +- +-#ifdef LIBVNCSERVER_HAVE_LIBJPEG +- memset(client->zlibStreamActive,0,sizeof(rfbBool)*4); +- client->jpegSrcManager = NULL; +-#endif +-#endif +- +- client->HandleCursorPos = DummyPoint; +- client->SoftCursorLockArea = DummyRect; +- client->SoftCursorUnlockScreen = Dummy; +- client->GotFrameBufferUpdate = DummyRect; +- client->FinishedFrameBufferUpdate = NULL; +- client->GetPassword = ReadPassword; +- client->MallocFrameBuffer = MallocFrameBuffer; +- client->Bell = Dummy; +- client->CurrentKeyboardLedState = 0; +- client->HandleKeyboardLedState = (HandleKeyboardLedStateProc)DummyPoint; +- client->QoS_DSCP = 0; +- +- client->authScheme = 0; +- client->subAuthScheme = 0; +- client->GetCredential = NULL; +-#ifdef LIBVNCSERVER_WITH_CLIENT_TLS +- client->tlsSession = NULL; +-#endif +- client->sock = -1; +- client->listenSock = -1; +- client->clientAuthSchemes = NULL; +- return client; +-} +- +-static rfbBool rfbInitConnection(rfbClient* client) +-{ +- /* Unless we accepted an incoming connection, make a TCP connection to the +- given VNC server */ +- +- if (!client->listenSpecified) { +- if (!client->serverHost) +- return FALSE; +- if (client->destHost) { +- if (!ConnectToRFBRepeater(client,client->serverHost,client->serverPort,client->destHost,client->destPort)) +- return FALSE; +- } else { +- if (!ConnectToRFBServer(client,client->serverHost,client->serverPort)) +- return FALSE; +- } +- } +- +- /* Initialise the VNC connection, including reading the password */ +- +- if (!InitialiseRFBConnection(client)) +- return FALSE; +- +- client->width=client->si.framebufferWidth; +- client->height=client->si.framebufferHeight; +- client->MallocFrameBuffer(client); +- +- if (!SetFormatAndEncodings(client)) +- return FALSE; +- +- if (client->updateRect.x < 0) { +- client->updateRect.x = client->updateRect.y = 0; +- client->updateRect.w = client->width; +- client->updateRect.h = client->height; +- } +- +- if (client->appData.scaleSetting>1) +- { +- if (!SendScaleSetting(client, client->appData.scaleSetting)) +- return FALSE; +- if (!SendFramebufferUpdateRequest(client, +- client->updateRect.x / client->appData.scaleSetting, +- client->updateRect.y / client->appData.scaleSetting, +- client->updateRect.w / client->appData.scaleSetting, +- client->updateRect.h / client->appData.scaleSetting, +- FALSE)) +- return FALSE; +- } +- else +- { +- if (!SendFramebufferUpdateRequest(client, +- client->updateRect.x, client->updateRect.y, +- client->updateRect.w, client->updateRect.h, +- FALSE)) +- return FALSE; +- } +- +- return TRUE; +-} +- +-rfbBool rfbInitClient(rfbClient* client,int* argc,char** argv) { +- int i,j; +- +- if(argv && argc && *argc) { +- if(client->programName==0) +- client->programName=argv[0]; +- +- for (i = 1; i < *argc; i++) { +- j = i; +- if (strcmp(argv[i], "-listen") == 0) { +- listenForIncomingConnections(client); +- break; +- } else if (strcmp(argv[i], "-listennofork") == 0) { +- listenForIncomingConnectionsNoFork(client, -1); +- break; +- } else if (strcmp(argv[i], "-play") == 0) { +- client->serverPort = -1; +- j++; +- } else if (i+1<*argc && strcmp(argv[i], "-encodings") == 0) { +- client->appData.encodingsString = argv[i+1]; +- j+=2; +- } else if (i+1<*argc && strcmp(argv[i], "-compress") == 0) { +- client->appData.compressLevel = atoi(argv[i+1]); +- j+=2; +- } else if (i+1<*argc && strcmp(argv[i], "-quality") == 0) { +- client->appData.qualityLevel = atoi(argv[i+1]); +- j+=2; +- } else if (i+1<*argc && strcmp(argv[i], "-scale") == 0) { +- client->appData.scaleSetting = atoi(argv[i+1]); +- j+=2; +- } else if (i+1<*argc && strcmp(argv[i], "-qosdscp") == 0) { +- client->QoS_DSCP = atoi(argv[i+1]); +- j+=2; +- } else if (i+1<*argc && strcmp(argv[i], "-repeaterdest") == 0) { +- char* colon=strchr(argv[i+1],':'); +- +- if(client->destHost) +- free(client->destHost); +- client->destPort = 5900; +- +- client->destHost = strdup(argv[i+1]); +- if(colon) { +- client->destHost[(int)(colon-argv[i+1])] = '\0'; +- client->destPort = atoi(colon+1); +- } +- j+=2; +- } else { +- char* colon=strchr(argv[i],':'); +- +- if(client->serverHost) +- free(client->serverHost); +- +- if(colon) { +- client->serverHost = strdup(argv[i]); +- client->serverHost[(int)(colon-argv[i])] = '\0'; +- client->serverPort = atoi(colon+1); +- } else { +- client->serverHost = strdup(argv[i]); +- } +- if(client->serverPort >= 0 && client->serverPort < 5900) +- client->serverPort += 5900; +- } +- /* purge arguments */ +- if (j>i) { +- *argc-=j-i; +- memmove(argv+i,argv+j,(*argc-i)*sizeof(char*)); +- i--; +- } +- } +- } +- +- if(!rfbInitConnection(client)) { +- rfbClientCleanup(client); +- return FALSE; +- } +- +- return TRUE; +-} +- +-void rfbClientCleanup(rfbClient* client) { +-#ifdef LIBVNCSERVER_HAVE_LIBZ +-#ifdef LIBVNCSERVER_HAVE_LIBJPEG +- int i; +- +- for ( i = 0; i < 4; i++ ) { +- if (client->zlibStreamActive[i] == TRUE ) { +- if (inflateEnd (&client->zlibStream[i]) != Z_OK && +- client->zlibStream[i].msg != NULL) +- rfbClientLog("inflateEnd: %s\n", client->zlibStream[i].msg); +- } +- } +- +- if ( client->decompStreamInited == TRUE ) { +- if (inflateEnd (&client->decompStream) != Z_OK && +- client->decompStream.msg != NULL) +- rfbClientLog("inflateEnd: %s\n", client->decompStream.msg ); +- } +- +- if (client->jpegSrcManager) +- free(client->jpegSrcManager); +-#endif +-#endif +- +-#ifdef LIBVNCSERVER_WITH_CLIENT_TLS +- FreeTLS(client); +-#endif +- if (client->sock >= 0) +- close(client->sock); +- if (client->listenSock >= 0) +- close(client->listenSock); +- free(client->desktopName); +- free(client->serverHost); +- if (client->destHost) +- free(client->destHost); +- if (client->clientAuthSchemes) +- free(client->clientAuthSchemes); +- free(client); +-} +diff -urN remmina-plugins/vnc/libvncserver/libvncclient/zlib.c remmina-plugins/vnc/libvncserver/libvncclient/zlib.c +--- remmina-plugins/vnc/libvncserver/libvncclient/zlib.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/libvncclient/zlib.c 1970-01-01 10:00:00.000000000 +1000 +@@ -1,162 +0,0 @@ +-/* +- * Copyright (C) 2000 Tridia Corporation. All Rights Reserved. +- * Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved. +- * +- * This is free software; you can 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. +- * +- * This software 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 this software; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +- * USA. +- */ +- +-#ifdef LIBVNCSERVER_HAVE_LIBZ +- +-/* +- * zlib.c - handle zlib encoding. +- * +- * This file shouldn't be compiled directly. It is included multiple times by +- * rfbproto.c, each time with a different definition of the macro BPP. For +- * each value of BPP, this file defines a function which handles an zlib +- * encoded rectangle with BPP bits per pixel. +- */ +- +-#define HandleZlibBPP CONCAT2E(HandleZlib,BPP) +-#define CARDBPP CONCAT3E(uint,BPP,_t) +- +-static rfbBool +-HandleZlibBPP (rfbClient* client, int rx, int ry, int rw, int rh) +-{ +- rfbZlibHeader hdr; +- int remaining; +- int inflateResult; +- int toRead; +- +- /* First make sure we have a large enough raw buffer to hold the +- * decompressed data. In practice, with a fixed BPP, fixed frame +- * buffer size and the first update containing the entire frame +- * buffer, this buffer allocation should only happen once, on the +- * first update. +- */ +- if ( client->raw_buffer_size < (( rw * rh ) * ( BPP / 8 ))) { +- +- if ( client->raw_buffer != NULL ) { +- +- free( client->raw_buffer ); +- +- } +- +- client->raw_buffer_size = (( rw * rh ) * ( BPP / 8 )); +- client->raw_buffer = (char*) malloc( client->raw_buffer_size ); +- +- } +- +- if (!ReadFromRFBServer(client, (char *)&hdr, sz_rfbZlibHeader)) +- return FALSE; +- +- remaining = rfbClientSwap32IfLE(hdr.nBytes); +- +- /* Need to initialize the decompressor state. */ +- client->decompStream.next_in = ( Bytef * )client->buffer; +- client->decompStream.avail_in = 0; +- client->decompStream.next_out = ( Bytef * )client->raw_buffer; +- client->decompStream.avail_out = client->raw_buffer_size; +- client->decompStream.data_type = Z_BINARY; +- +- /* Initialize the decompression stream structures on the first invocation. */ +- if ( client->decompStreamInited == FALSE ) { +- +- inflateResult = inflateInit( &client->decompStream ); +- +- if ( inflateResult != Z_OK ) { +- rfbClientLog( +- "inflateInit returned error: %d, msg: %s\n", +- inflateResult, +- client->decompStream.msg); +- return FALSE; +- } +- +- client->decompStreamInited = TRUE; +- +- } +- +- inflateResult = Z_OK; +- +- /* Process buffer full of data until no more to process, or +- * some type of inflater error, or Z_STREAM_END. +- */ +- while (( remaining > 0 ) && +- ( inflateResult == Z_OK )) { +- +- if ( remaining > RFB_BUFFER_SIZE ) { +- toRead = RFB_BUFFER_SIZE; +- } +- else { +- toRead = remaining; +- } +- +- /* Fill the buffer, obtaining data from the server. */ +- if (!ReadFromRFBServer(client, client->buffer,toRead)) +- return FALSE; +- +- client->decompStream.next_in = ( Bytef * )client->buffer; +- client->decompStream.avail_in = toRead; +- +- /* Need to uncompress buffer full. */ +- inflateResult = inflate( &client->decompStream, Z_SYNC_FLUSH ); +- +- /* We never supply a dictionary for compression. */ +- if ( inflateResult == Z_NEED_DICT ) { +- rfbClientLog("zlib inflate needs a dictionary!\n"); +- return FALSE; +- } +- if ( inflateResult < 0 ) { +- rfbClientLog( +- "zlib inflate returned error: %d, msg: %s\n", +- inflateResult, +- client->decompStream.msg); +- return FALSE; +- } +- +- /* Result buffer allocated to be at least large enough. We should +- * never run out of space! +- */ +- if (( client->decompStream.avail_in > 0 ) && +- ( client->decompStream.avail_out <= 0 )) { +- rfbClientLog("zlib inflate ran out of space!\n"); +- return FALSE; +- } +- +- remaining -= toRead; +- +- } /* while ( remaining > 0 ) */ +- +- if ( inflateResult == Z_OK ) { +- +- /* Put the uncompressed contents of the update on the screen. */ +- CopyRectangle(client, (uint8_t *)client->raw_buffer, rx, ry, rw, rh); +- } +- else { +- +- rfbClientLog( +- "zlib inflate returned error: %d, msg: %s\n", +- inflateResult, +- client->decompStream.msg); +- return FALSE; +- +- } +- +- return TRUE; +-} +- +-#undef CARDBPP +- +-#endif +diff -urN remmina-plugins/vnc/libvncserver/libvncclient/zrle.c remmina-plugins/vnc/libvncserver/libvncclient/zrle.c +--- remmina-plugins/vnc/libvncserver/libvncclient/zrle.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/libvncclient/zrle.c 1970-01-01 10:00:00.000000000 +1000 +@@ -1,427 +0,0 @@ +-/* +- * Copyright (C) 2005 Johannes E. Schindelin. All Rights Reserved. +- * +- * This is free software; you can 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. +- * +- * This software 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 this software; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +- * USA. +- */ +- +-#ifdef LIBVNCSERVER_HAVE_LIBZ +- +-/* +- * zrle.c - handle zrle encoding. +- * +- * This file shouldn't be compiled directly. It is included multiple times by +- * rfbproto.c, each time with a different definition of the macro BPP. For +- * each value of BPP, this file defines a function which handles an zrle +- * encoded rectangle with BPP bits per pixel. +- */ +- +-#ifndef REALBPP +-#define REALBPP BPP +-#endif +- +-#if !defined(UNCOMP) || UNCOMP==0 +-#define HandleZRLE CONCAT2E(HandleZRLE,REALBPP) +-#define HandleZRLETile CONCAT2E(HandleZRLETile,REALBPP) +-#elif UNCOMP>0 +-#define HandleZRLE CONCAT3E(HandleZRLE,REALBPP,Down) +-#define HandleZRLETile CONCAT3E(HandleZRLETile,REALBPP,Down) +-#else +-#define HandleZRLE CONCAT3E(HandleZRLE,REALBPP,Up) +-#define HandleZRLETile CONCAT3E(HandleZRLETile,REALBPP,Up) +-#endif +-#define CARDBPP CONCAT3E(uint,BPP,_t) +-#define CARDREALBPP CONCAT3E(uint,REALBPP,_t) +- +-#define ENDIAN_LITTLE 0 +-#define ENDIAN_BIG 1 +-#define ENDIAN_NO 2 +-#define ZYWRLE_ENDIAN ENDIAN_LITTLE +-#undef END_FIX +-#if ZYWRLE_ENDIAN == ENDIAN_LITTLE +-# define END_FIX LE +-#elif ZYWRLE_ENDIAN == ENDIAN_BIG +-# define END_FIX BE +-#else +-# define END_FIX NE +-#endif +-#define __RFB_CONCAT3E(a,b,c) CONCAT3E(a,b,c) +-#define __RFB_CONCAT2E(a,b) CONCAT2E(a,b) +-#undef CPIXEL +-#if REALBPP != BPP +-#if UNCOMP == 0 +-#define CPIXEL REALBPP +-#elif UNCOMP>0 +-#define CPIXEL CONCAT2E(REALBPP,Down) +-#else +-#define CPIXEL CONCAT2E(REALBPP,Up) +-#endif +-#endif +-#define PIXEL_T __RFB_CONCAT3E(uint,BPP,_t) +-#if BPP!=8 +-#define ZYWRLE_DECODE 1 +-#include "zywrletemplate.c" +-#endif +-#undef CPIXEL +- +-static int HandleZRLETile(rfbClient* client, +- uint8_t* buffer,size_t buffer_length, +- int x,int y,int w,int h); +- +-static rfbBool +-HandleZRLE (rfbClient* client, int rx, int ry, int rw, int rh) +-{ +- rfbZRLEHeader header; +- int remaining; +- int inflateResult; +- int toRead; +- int min_buffer_size = rw * rh * (REALBPP / 8) * 2; +- +- /* First make sure we have a large enough raw buffer to hold the +- * decompressed data. In practice, with a fixed REALBPP, fixed frame +- * buffer size and the first update containing the entire frame +- * buffer, this buffer allocation should only happen once, on the +- * first update. +- */ +- if ( client->raw_buffer_size < min_buffer_size) { +- +- if ( client->raw_buffer != NULL ) { +- +- free( client->raw_buffer ); +- +- } +- +- client->raw_buffer_size = min_buffer_size; +- client->raw_buffer = (char*) malloc( client->raw_buffer_size ); +- +- } +- +- if (!ReadFromRFBServer(client, (char *)&header, sz_rfbZRLEHeader)) +- return FALSE; +- +- remaining = rfbClientSwap32IfLE(header.length); +- +- /* Need to initialize the decompressor state. */ +- client->decompStream.next_in = ( Bytef * )client->buffer; +- client->decompStream.avail_in = 0; +- client->decompStream.next_out = ( Bytef * )client->raw_buffer; +- client->decompStream.avail_out = client->raw_buffer_size; +- client->decompStream.data_type = Z_BINARY; +- +- /* Initialize the decompression stream structures on the first invocation. */ +- if ( client->decompStreamInited == FALSE ) { +- +- inflateResult = inflateInit( &client->decompStream ); +- +- if ( inflateResult != Z_OK ) { +- rfbClientLog( +- "inflateInit returned error: %d, msg: %s\n", +- inflateResult, +- client->decompStream.msg); +- return FALSE; +- } +- +- client->decompStreamInited = TRUE; +- +- } +- +- inflateResult = Z_OK; +- +- /* Process buffer full of data until no more to process, or +- * some type of inflater error, or Z_STREAM_END. +- */ +- while (( remaining > 0 ) && +- ( inflateResult == Z_OK )) { +- +- if ( remaining > RFB_BUFFER_SIZE ) { +- toRead = RFB_BUFFER_SIZE; +- } +- else { +- toRead = remaining; +- } +- +- /* Fill the buffer, obtaining data from the server. */ +- if (!ReadFromRFBServer(client, client->buffer,toRead)) +- return FALSE; +- +- client->decompStream.next_in = ( Bytef * )client->buffer; +- client->decompStream.avail_in = toRead; +- +- /* Need to uncompress buffer full. */ +- inflateResult = inflate( &client->decompStream, Z_SYNC_FLUSH ); +- +- /* We never supply a dictionary for compression. */ +- if ( inflateResult == Z_NEED_DICT ) { +- rfbClientLog("zlib inflate needs a dictionary!\n"); +- return FALSE; +- } +- if ( inflateResult < 0 ) { +- rfbClientLog( +- "zlib inflate returned error: %d, msg: %s\n", +- inflateResult, +- client->decompStream.msg); +- return FALSE; +- } +- +- /* Result buffer allocated to be at least large enough. We should +- * never run out of space! +- */ +- if (( client->decompStream.avail_in > 0 ) && +- ( client->decompStream.avail_out <= 0 )) { +- rfbClientLog("zlib inflate ran out of space!\n"); +- return FALSE; +- } +- +- remaining -= toRead; +- +- } /* while ( remaining > 0 ) */ +- +- if ( inflateResult == Z_OK ) { +- void* buf=client->raw_buffer; +- int i,j; +- +- remaining = client->raw_buffer_size-client->decompStream.avail_out; +- +- for(j=0; j<rh; j+=rfbZRLETileHeight) +- for(i=0; i<rw; i+=rfbZRLETileWidth) { +- int subWidth=(i+rfbZRLETileWidth>rw)?rw-i:rfbZRLETileWidth; +- int subHeight=(j+rfbZRLETileHeight>rh)?rh-j:rfbZRLETileHeight; +- int result=HandleZRLETile(client,buf,remaining,rx+i,ry+j,subWidth,subHeight); +- +- if(result<0) { +- rfbClientLog("ZRLE decoding failed (%d)\n",result); +-return TRUE; +- return FALSE; +- } +- +- buf+=result; +- remaining-=result; +- } +- } +- else { +- +- rfbClientLog( +- "zlib inflate returned error: %d, msg: %s\n", +- inflateResult, +- client->decompStream.msg); +- return FALSE; +- +- } +- +- return TRUE; +-} +- +-#if REALBPP!=BPP && defined(UNCOMP) && UNCOMP!=0 +-#if UNCOMP>0 +-#define UncompressCPixel(pointer) ((*(CARDBPP*)pointer)>>UNCOMP) +-#else +-#define UncompressCPixel(pointer) ((*(CARDBPP*)pointer)<<(-(UNCOMP))) +-#endif +-#else +-#define UncompressCPixel(pointer) (*(CARDBPP*)pointer) +-#endif +- +-static int HandleZRLETile(rfbClient* client, +- uint8_t* buffer,size_t buffer_length, +- int x,int y,int w,int h) { +- uint8_t* buffer_copy = buffer; +- uint8_t* buffer_end = buffer+buffer_length; +- uint8_t type; +-#if BPP!=8 +- uint8_t zywrle_level = (client->appData.qualityLevel & 0x80) ? +- 0 : (3 - client->appData.qualityLevel / 3); +-#endif +- +- if(buffer_length<1) +- return -2; +- +- type = *buffer; +- buffer++; +- { +- if( type == 0 ) /* raw */ +-#if BPP!=8 +- if( zywrle_level > 0 ){ +- CARDBPP* pFrame = (CARDBPP*)client->frameBuffer + y*client->width+x; +- int ret; +- client->appData.qualityLevel |= 0x80; +- ret = HandleZRLETile(client, buffer, buffer_end-buffer, x, y, w, h); +- client->appData.qualityLevel &= 0x7F; +- if( ret < 0 ){ +- return ret; +- } +- ZYWRLE_SYNTHESIZE( pFrame, pFrame, w, h, client->width, zywrle_level, (int*)client->zlib_buffer ); +- buffer += ret; +- }else +-#endif +- { +-#if REALBPP!=BPP +- int i,j; +- +- if(1+w*h*REALBPP/8>buffer_length) { +- rfbClientLog("expected %d bytes, got only %d (%dx%d)\n",1+w*h*REALBPP/8,buffer_length,w,h); +- return -3; +- } +- +- for(j=y*client->width; j<(y+h)*client->width; j+=client->width) +- for(i=x; i<x+w; i++,buffer+=REALBPP/8) +- ((CARDBPP*)client->frameBuffer)[j+i] = UncompressCPixel(buffer); +-#else +- CopyRectangle(client, buffer, x, y, w, h); +- buffer+=w*h*REALBPP/8; +-#endif +- } +- else if( type == 1 ) /* solid */ +- { +- CARDBPP color = UncompressCPixel(buffer); +- +- if(1+REALBPP/8>buffer_length) +- return -4; +- +- FillRectangle(client, x, y, w, h, color); +- +- buffer+=REALBPP/8; +- +- } +- else if( (type >= 2)&&(type <= 127) ) /* packed Palette */ +- { +- CARDBPP palette[16]; +- int i,j,shift, +- bpp=(type>4?(type>16?8:4):(type>2?2:1)), +- mask=(1<<bpp)-1, +- divider=(8/bpp); +- +- if(1+type*REALBPP/8+((w+divider-1)/divider)*h>buffer_length) +- return -5; +- +- /* read palette */ +- for(i=0; i<type; i++,buffer+=REALBPP/8) +- palette[i] = UncompressCPixel(buffer); +- +- /* read palettized pixels */ +- for(j=y*client->width; j<(y+h)*client->width; j+=client->width) { +- for(i=x,shift=8-bpp; i<x+w; i++) { +- ((CARDBPP*)client->frameBuffer)[j+i] = palette[((*buffer)>>shift)&mask]; +- shift-=bpp; +- if(shift<0) { +- shift=8-bpp; +- buffer++; +- } +- } +- if(shift<8-bpp) +- buffer++; +- } +- +- } +- /* case 17 ... 127: not used, but valid */ +- else if( type == 128 ) /* plain RLE */ +- { +- int i=0,j=0; +- while(j<h) { +- int color,length; +- /* read color */ +- if(buffer+REALBPP/8+1>buffer_end) +- return -7; +- color = UncompressCPixel(buffer); +- buffer+=REALBPP/8; +- /* read run length */ +- length=1; +- while(*buffer==0xff) { +- if(buffer+1>=buffer_end) +- return -8; +- length+=*buffer; +- buffer++; +- } +- length+=*buffer; +- buffer++; +- while(j<h && length>0) { +- ((CARDBPP*)client->frameBuffer)[(y+j)*client->width+x+i] = color; +- length--; +- i++; +- if(i>=w) { +- i=0; +- j++; +- } +- } +- if(length>0) +- rfbClientLog("Warning: possible ZRLE corruption\n"); +- } +- +- } +- else if( type == 129 ) /* unused */ +- { +- return -8; +- } +- else if( type >= 130 ) /* palette RLE */ +- { +- CARDBPP palette[128]; +- int i,j; +- +- if(2+(type-128)*REALBPP/8>buffer_length) +- return -9; +- +- /* read palette */ +- for(i=0; i<type-128; i++,buffer+=REALBPP/8) +- palette[i] = UncompressCPixel(buffer); +- /* read palettized pixels */ +- i=j=0; +- while(j<h) { +- int color,length; +- /* read color */ +- if(buffer>=buffer_end) +- return -10; +- color = palette[(*buffer)&0x7f]; +- length=1; +- if(*buffer&0x80) { +- if(buffer+1>=buffer_end) +- return -11; +- buffer++; +- /* read run length */ +- while(*buffer==0xff) { +- if(buffer+1>=buffer_end) +- return -8; +- length+=*buffer; +- buffer++; +- } +- length+=*buffer; +- } +- buffer++; +- while(j<h && length>0) { +- ((CARDBPP*)client->frameBuffer)[(y+j)*client->width+x+i] = color; +- length--; +- i++; +- if(i>=w) { +- i=0; +- j++; +- } +- } +- if(length>0) +- rfbClientLog("Warning: possible ZRLE corruption\n"); +- } +- } +- } +- +- return buffer-buffer_copy; +-} +- +-#undef CARDBPP +-#undef CARDREALBPP +-#undef HandleZRLE +-#undef HandleZRLETile +-#undef UncompressCPixel +-#undef REALBPP +- +-#endif +- +-#undef UNCOMP +diff -urN remmina-plugins/vnc/libvncserver/libvncclient.pc.in remmina-plugins/vnc/libvncserver/libvncclient.pc.in +--- remmina-plugins/vnc/libvncserver/libvncclient.pc.in 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/libvncclient.pc.in 1970-01-01 10:00:00.000000000 +1000 +@@ -1,12 +0,0 @@ +-prefix=@prefix@ +-exec_prefix=@exec_prefix@ +-libdir=@libdir@ +-includedir=@includedir@ +- +-Name: LibVNCClient +-Description: A library for easy implementation of a VNC client. +-Version: @VERSION@ +-Requires: +-Libs: -L${libdir} -lvncclient @LIBS@ @WSOCKLIB@ +-Cflags: -I${includedir} +- +diff -urN remmina-plugins/vnc/libvncserver/rfb/default8x16.h remmina-plugins/vnc/libvncserver/rfb/default8x16.h +--- remmina-plugins/vnc/libvncserver/rfb/default8x16.h 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/rfb/default8x16.h 1970-01-01 10:00:00.000000000 +1000 +@@ -1,261 +0,0 @@ +-static unsigned char default8x16FontData[4096+1]={ +-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x7e,0x81,0xa5,0x81,0x81,0xbd,0x99,0x81,0x81,0x7e,0x00,0x00,0x00,0x00, +-0x00,0x00,0x7e,0xff,0xdb,0xff,0xff,0xc3,0xe7,0xff,0xff,0x7e,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x6c,0xfe,0xfe,0xfe,0xfe,0x7c,0x38,0x10,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x10,0x38,0x7c,0xfe,0x7c,0x38,0x10,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x18,0x3c,0x3c,0xe7,0xe7,0xe7,0x18,0x18,0x3c,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x18,0x3c,0x7e,0xff,0xff,0x7e,0x18,0x18,0x3c,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x3c,0x3c,0x18,0x00,0x00,0x00,0x00,0x00,0x00, +-0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xc3,0xc3,0xe7,0xff,0xff,0xff,0xff,0xff,0xff, +-0x00,0x00,0x00,0x00,0x00,0x3c,0x66,0x42,0x42,0x66,0x3c,0x00,0x00,0x00,0x00,0x00, +-0xff,0xff,0xff,0xff,0xff,0xc3,0x99,0xbd,0xbd,0x99,0xc3,0xff,0xff,0xff,0xff,0xff, +-0x00,0x00,0x1e,0x0e,0x1a,0x32,0x78,0xcc,0xcc,0xcc,0xcc,0x78,0x00,0x00,0x00,0x00, +-0x00,0x00,0x3c,0x66,0x66,0x66,0x66,0x3c,0x18,0x7e,0x18,0x18,0x00,0x00,0x00,0x00, +-0x00,0x00,0x3f,0x33,0x3f,0x30,0x30,0x30,0x30,0x70,0xf0,0xe0,0x00,0x00,0x00,0x00, +-0x00,0x00,0x7f,0x63,0x7f,0x63,0x63,0x63,0x63,0x67,0xe7,0xe6,0xc0,0x00,0x00,0x00, +-0x00,0x00,0x00,0x18,0x18,0xdb,0x3c,0xe7,0x3c,0xdb,0x18,0x18,0x00,0x00,0x00,0x00, +-0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfe,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00, +-0x00,0x02,0x06,0x0e,0x1e,0x3e,0xfe,0x3e,0x1e,0x0e,0x06,0x02,0x00,0x00,0x00,0x00, +-0x00,0x00,0x18,0x3c,0x7e,0x18,0x18,0x18,0x7e,0x3c,0x18,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x00,0x66,0x66,0x00,0x00,0x00,0x00, +-0x00,0x00,0x7f,0xdb,0xdb,0xdb,0x7b,0x1b,0x1b,0x1b,0x1b,0x1b,0x00,0x00,0x00,0x00, +-0x00,0x7c,0xc6,0x60,0x38,0x6c,0xc6,0xc6,0x6c,0x38,0x0c,0xc6,0x7c,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xfe,0xfe,0xfe,0x00,0x00,0x00,0x00, +-0x00,0x00,0x18,0x3c,0x7e,0x18,0x18,0x18,0x7e,0x3c,0x18,0x7e,0x00,0x00,0x00,0x00, +-0x00,0x00,0x18,0x3c,0x7e,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00, +-0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x7e,0x3c,0x18,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x18,0x0c,0xfe,0x0c,0x18,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x30,0x60,0xfe,0x60,0x30,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xc0,0xc0,0xfe,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x24,0x66,0xff,0x66,0x24,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x10,0x38,0x38,0x7c,0x7c,0xfe,0xfe,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0xfe,0xfe,0x7c,0x7c,0x38,0x38,0x10,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x18,0x3c,0x3c,0x3c,0x18,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00, +-0x00,0x66,0x66,0x66,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x6c,0x6c,0xfe,0x6c,0x6c,0x6c,0xfe,0x6c,0x6c,0x00,0x00,0x00,0x00, +-0x18,0x18,0x7c,0xc6,0xc2,0xc0,0x7c,0x06,0x06,0x86,0xc6,0x7c,0x18,0x18,0x00,0x00, +-0x00,0x00,0x00,0x00,0xc2,0xc6,0x0c,0x18,0x30,0x60,0xc6,0x86,0x00,0x00,0x00,0x00, +-0x00,0x00,0x38,0x6c,0x6c,0x38,0x76,0xdc,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00,0x00, +-0x00,0x30,0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x0c,0x18,0x30,0x30,0x30,0x30,0x30,0x30,0x18,0x0c,0x00,0x00,0x00,0x00, +-0x00,0x00,0x30,0x18,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x18,0x30,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x66,0x3c,0xff,0x3c,0x66,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x7e,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x30,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x02,0x06,0x0c,0x18,0x30,0x60,0xc0,0x80,0x00,0x00,0x00,0x00, +-0x00,0x00,0x7c,0xc6,0xc6,0xce,0xde,0xf6,0xe6,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00, +-0x00,0x00,0x18,0x38,0x78,0x18,0x18,0x18,0x18,0x18,0x18,0x7e,0x00,0x00,0x00,0x00, +-0x00,0x00,0x7c,0xc6,0x06,0x0c,0x18,0x30,0x60,0xc0,0xc6,0xfe,0x00,0x00,0x00,0x00, +-0x00,0x00,0x7c,0xc6,0x06,0x06,0x3c,0x06,0x06,0x06,0xc6,0x7c,0x00,0x00,0x00,0x00, +-0x00,0x00,0x0c,0x1c,0x3c,0x6c,0xcc,0xfe,0x0c,0x0c,0x0c,0x1e,0x00,0x00,0x00,0x00, +-0x00,0x00,0xfe,0xc0,0xc0,0xc0,0xfc,0x06,0x06,0x06,0xc6,0x7c,0x00,0x00,0x00,0x00, +-0x00,0x00,0x38,0x60,0xc0,0xc0,0xfc,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00, +-0x00,0x00,0xfe,0xc6,0x06,0x06,0x0c,0x18,0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00, +-0x00,0x00,0x7c,0xc6,0xc6,0xc6,0x7c,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00, +-0x00,0x00,0x7c,0xc6,0xc6,0xc6,0x7e,0x06,0x06,0x06,0x0c,0x78,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x30,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x06,0x0c,0x18,0x30,0x60,0x30,0x18,0x0c,0x06,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x60,0x30,0x18,0x0c,0x06,0x0c,0x18,0x30,0x60,0x00,0x00,0x00,0x00, +-0x00,0x00,0x7c,0xc6,0xc6,0x0c,0x18,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00, +-0x00,0x00,0x7c,0xc6,0xc6,0xc6,0xde,0xde,0xde,0xdc,0xc0,0x7c,0x00,0x00,0x00,0x00, +-0x00,0x00,0x10,0x38,0x6c,0xc6,0xc6,0xfe,0xc6,0xc6,0xc6,0xc6,0x00,0x00,0x00,0x00, +-0x00,0x00,0xfc,0x66,0x66,0x66,0x7c,0x66,0x66,0x66,0x66,0xfc,0x00,0x00,0x00,0x00, +-0x00,0x00,0x3c,0x66,0xc2,0xc0,0xc0,0xc0,0xc0,0xc2,0x66,0x3c,0x00,0x00,0x00,0x00, +-0x00,0x00,0xf8,0x6c,0x66,0x66,0x66,0x66,0x66,0x66,0x6c,0xf8,0x00,0x00,0x00,0x00, +-0x00,0x00,0xfe,0x66,0x62,0x68,0x78,0x68,0x60,0x62,0x66,0xfe,0x00,0x00,0x00,0x00, +-0x00,0x00,0xfe,0x66,0x62,0x68,0x78,0x68,0x60,0x60,0x60,0xf0,0x00,0x00,0x00,0x00, +-0x00,0x00,0x3c,0x66,0xc2,0xc0,0xc0,0xde,0xc6,0xc6,0x66,0x3a,0x00,0x00,0x00,0x00, +-0x00,0x00,0xc6,0xc6,0xc6,0xc6,0xfe,0xc6,0xc6,0xc6,0xc6,0xc6,0x00,0x00,0x00,0x00, +-0x00,0x00,0x3c,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x3c,0x00,0x00,0x00,0x00, +-0x00,0x00,0x1e,0x0c,0x0c,0x0c,0x0c,0x0c,0xcc,0xcc,0xcc,0x78,0x00,0x00,0x00,0x00, +-0x00,0x00,0xe6,0x66,0x66,0x6c,0x78,0x78,0x6c,0x66,0x66,0xe6,0x00,0x00,0x00,0x00, +-0x00,0x00,0xf0,0x60,0x60,0x60,0x60,0x60,0x60,0x62,0x66,0xfe,0x00,0x00,0x00,0x00, +-0x00,0x00,0xc3,0xe7,0xff,0xff,0xdb,0xc3,0xc3,0xc3,0xc3,0xc3,0x00,0x00,0x00,0x00, +-0x00,0x00,0xc6,0xe6,0xf6,0xfe,0xde,0xce,0xc6,0xc6,0xc6,0xc6,0x00,0x00,0x00,0x00, +-0x00,0x00,0x7c,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00, +-0x00,0x00,0xfc,0x66,0x66,0x66,0x7c,0x60,0x60,0x60,0x60,0xf0,0x00,0x00,0x00,0x00, +-0x00,0x00,0x7c,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xd6,0xde,0x7c,0x0c,0x0e,0x00,0x00, +-0x00,0x00,0xfc,0x66,0x66,0x66,0x7c,0x6c,0x66,0x66,0x66,0xe6,0x00,0x00,0x00,0x00, +-0x00,0x00,0x7c,0xc6,0xc6,0x60,0x38,0x0c,0x06,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00, +-0x00,0x00,0xff,0xdb,0x99,0x18,0x18,0x18,0x18,0x18,0x18,0x3c,0x00,0x00,0x00,0x00, +-0x00,0x00,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00, +-0x00,0x00,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x66,0x3c,0x18,0x00,0x00,0x00,0x00, +-0x00,0x00,0xc3,0xc3,0xc3,0xc3,0xc3,0xdb,0xdb,0xff,0x66,0x66,0x00,0x00,0x00,0x00, +-0x00,0x00,0xc3,0xc3,0x66,0x3c,0x18,0x18,0x3c,0x66,0xc3,0xc3,0x00,0x00,0x00,0x00, +-0x00,0x00,0xc3,0xc3,0xc3,0x66,0x3c,0x18,0x18,0x18,0x18,0x3c,0x00,0x00,0x00,0x00, +-0x00,0x00,0xff,0xc3,0x86,0x0c,0x18,0x30,0x60,0xc1,0xc3,0xff,0x00,0x00,0x00,0x00, +-0x00,0x00,0x3c,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x3c,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x80,0xc0,0xe0,0x70,0x38,0x1c,0x0e,0x06,0x02,0x00,0x00,0x00,0x00, +-0x00,0x00,0x3c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x3c,0x00,0x00,0x00,0x00, +-0x10,0x38,0x6c,0xc6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00, +-0x30,0x30,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x78,0x0c,0x7c,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00,0x00, +-0x00,0x00,0xe0,0x60,0x60,0x78,0x6c,0x66,0x66,0x66,0x66,0x7c,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x7c,0xc6,0xc0,0xc0,0xc0,0xc6,0x7c,0x00,0x00,0x00,0x00, +-0x00,0x00,0x1c,0x0c,0x0c,0x3c,0x6c,0xcc,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x7c,0xc6,0xfe,0xc0,0xc0,0xc6,0x7c,0x00,0x00,0x00,0x00, +-0x00,0x00,0x38,0x6c,0x64,0x60,0xf0,0x60,0x60,0x60,0x60,0xf0,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x76,0xcc,0xcc,0xcc,0xcc,0xcc,0x7c,0x0c,0xcc,0x78,0x00, +-0x00,0x00,0xe0,0x60,0x60,0x6c,0x76,0x66,0x66,0x66,0x66,0xe6,0x00,0x00,0x00,0x00, +-0x00,0x00,0x18,0x18,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x3c,0x00,0x00,0x00,0x00, +-0x00,0x00,0x06,0x06,0x00,0x0e,0x06,0x06,0x06,0x06,0x06,0x06,0x66,0x66,0x3c,0x00, +-0x00,0x00,0xe0,0x60,0x60,0x66,0x6c,0x78,0x78,0x6c,0x66,0xe6,0x00,0x00,0x00,0x00, +-0x00,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x3c,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0xe6,0xff,0xdb,0xdb,0xdb,0xdb,0xdb,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0xdc,0x66,0x66,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x7c,0xc6,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0xdc,0x66,0x66,0x66,0x66,0x66,0x7c,0x60,0x60,0xf0,0x00, +-0x00,0x00,0x00,0x00,0x00,0x76,0xcc,0xcc,0xcc,0xcc,0xcc,0x7c,0x0c,0x0c,0x1e,0x00, +-0x00,0x00,0x00,0x00,0x00,0xdc,0x76,0x66,0x60,0x60,0x60,0xf0,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x7c,0xc6,0x60,0x38,0x0c,0xc6,0x7c,0x00,0x00,0x00,0x00, +-0x00,0x00,0x10,0x30,0x30,0xfc,0x30,0x30,0x30,0x30,0x36,0x1c,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0xc3,0xc3,0xc3,0xc3,0x66,0x3c,0x18,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0xc3,0xc3,0xc3,0xdb,0xdb,0xff,0x66,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0xc3,0x66,0x3c,0x18,0x3c,0x66,0xc3,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x7e,0x06,0x0c,0xf8,0x00, +-0x00,0x00,0x00,0x00,0x00,0xfe,0xcc,0x18,0x30,0x60,0xc6,0xfe,0x00,0x00,0x00,0x00, +-0x00,0x00,0x0e,0x18,0x18,0x18,0x70,0x18,0x18,0x18,0x18,0x0e,0x00,0x00,0x00,0x00, +-0x00,0x00,0x18,0x18,0x18,0x18,0x00,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00, +-0x00,0x00,0x70,0x18,0x18,0x18,0x0e,0x18,0x18,0x18,0x18,0x70,0x00,0x00,0x00,0x00, +-0x00,0x00,0x76,0xdc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x10,0x38,0x6c,0xc6,0xc6,0xc6,0xfe,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x3c,0x66,0xc2,0xc0,0xc0,0xc0,0xc2,0x66,0x3c,0x0c,0x06,0x7c,0x00,0x00, +-0x00,0x00,0xcc,0x00,0x00,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00,0x00, +-0x00,0x0c,0x18,0x30,0x00,0x7c,0xc6,0xfe,0xc0,0xc0,0xc6,0x7c,0x00,0x00,0x00,0x00, +-0x00,0x10,0x38,0x6c,0x00,0x78,0x0c,0x7c,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00,0x00, +-0x00,0x00,0xcc,0x00,0x00,0x78,0x0c,0x7c,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00,0x00, +-0x00,0x60,0x30,0x18,0x00,0x78,0x0c,0x7c,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00,0x00, +-0x00,0x38,0x6c,0x38,0x00,0x78,0x0c,0x7c,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x3c,0x66,0x60,0x60,0x66,0x3c,0x0c,0x06,0x3c,0x00,0x00,0x00, +-0x00,0x10,0x38,0x6c,0x00,0x7c,0xc6,0xfe,0xc0,0xc0,0xc6,0x7c,0x00,0x00,0x00,0x00, +-0x00,0x00,0xc6,0x00,0x00,0x7c,0xc6,0xfe,0xc0,0xc0,0xc6,0x7c,0x00,0x00,0x00,0x00, +-0x00,0x60,0x30,0x18,0x00,0x7c,0xc6,0xfe,0xc0,0xc0,0xc6,0x7c,0x00,0x00,0x00,0x00, +-0x00,0x00,0x66,0x00,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x3c,0x00,0x00,0x00,0x00, +-0x00,0x18,0x3c,0x66,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x3c,0x00,0x00,0x00,0x00, +-0x00,0x60,0x30,0x18,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x3c,0x00,0x00,0x00,0x00, +-0x00,0xc6,0x00,0x10,0x38,0x6c,0xc6,0xc6,0xfe,0xc6,0xc6,0xc6,0x00,0x00,0x00,0x00, +-0x38,0x6c,0x38,0x00,0x38,0x6c,0xc6,0xc6,0xfe,0xc6,0xc6,0xc6,0x00,0x00,0x00,0x00, +-0x18,0x30,0x60,0x00,0xfe,0x66,0x60,0x7c,0x60,0x60,0x66,0xfe,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x6e,0x3b,0x1b,0x7e,0xd8,0xdc,0x77,0x00,0x00,0x00,0x00, +-0x00,0x00,0x3e,0x6c,0xcc,0xcc,0xfe,0xcc,0xcc,0xcc,0xcc,0xce,0x00,0x00,0x00,0x00, +-0x00,0x10,0x38,0x6c,0x00,0x7c,0xc6,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00, +-0x00,0x00,0xc6,0x00,0x00,0x7c,0xc6,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00, +-0x00,0x60,0x30,0x18,0x00,0x7c,0xc6,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00, +-0x00,0x30,0x78,0xcc,0x00,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00,0x00, +-0x00,0x60,0x30,0x18,0x00,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00,0x00, +-0x00,0x00,0xc6,0x00,0x00,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x7e,0x06,0x0c,0x78,0x00, +-0x00,0xc6,0x00,0x7c,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00, +-0x00,0xc6,0x00,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00, +-0x00,0x18,0x18,0x7e,0xc3,0xc0,0xc0,0xc0,0xc3,0x7e,0x18,0x18,0x00,0x00,0x00,0x00, +-0x00,0x38,0x6c,0x64,0x60,0xf0,0x60,0x60,0x60,0x60,0xe6,0xfc,0x00,0x00,0x00,0x00, +-0x00,0x00,0xc3,0x66,0x3c,0x18,0xff,0x18,0xff,0x18,0x18,0x18,0x00,0x00,0x00,0x00, +-0x00,0xfc,0x66,0x66,0x7c,0x62,0x66,0x6f,0x66,0x66,0x66,0xf3,0x00,0x00,0x00,0x00, +-0x00,0x0e,0x1b,0x18,0x18,0x18,0x7e,0x18,0x18,0x18,0x18,0x18,0xd8,0x70,0x00,0x00, +-0x00,0x18,0x30,0x60,0x00,0x78,0x0c,0x7c,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00,0x00, +-0x00,0x0c,0x18,0x30,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x3c,0x00,0x00,0x00,0x00, +-0x00,0x18,0x30,0x60,0x00,0x7c,0xc6,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00, +-0x00,0x18,0x30,0x60,0x00,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00,0x00, +-0x00,0x00,0x76,0xdc,0x00,0xdc,0x66,0x66,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00, +-0x76,0xdc,0x00,0xc6,0xe6,0xf6,0xfe,0xde,0xce,0xc6,0xc6,0xc6,0x00,0x00,0x00,0x00, +-0x00,0x3c,0x6c,0x6c,0x3e,0x00,0x7e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x38,0x6c,0x6c,0x38,0x00,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x30,0x30,0x00,0x30,0x30,0x60,0xc0,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xc0,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0x00,0x00, +-0x00,0xc0,0xc0,0xc2,0xc6,0xcc,0x18,0x30,0x60,0xce,0x9b,0x06,0x0c,0x1f,0x00,0x00, +-0x00,0xc0,0xc0,0xc2,0xc6,0xcc,0x18,0x30,0x66,0xce,0x96,0x3e,0x06,0x06,0x00,0x00, +-0x00,0x00,0x18,0x18,0x00,0x18,0x18,0x18,0x3c,0x3c,0x3c,0x18,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x36,0x6c,0xd8,0x6c,0x36,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0xd8,0x6c,0x36,0x6c,0xd8,0x00,0x00,0x00,0x00,0x00,0x00, +-0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44, +-0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa, +-0xdd,0x77,0xdd,0x77,0xdd,0x77,0xdd,0x77,0xdd,0x77,0xdd,0x77,0xdd,0x77,0xdd,0x77, +-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xf8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +-0x18,0x18,0x18,0x18,0x18,0xf8,0x18,0xf8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +-0x36,0x36,0x36,0x36,0x36,0x36,0x36,0xf6,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, +-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, +-0x00,0x00,0x00,0x00,0x00,0xf8,0x18,0xf8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +-0x36,0x36,0x36,0x36,0x36,0xf6,0x06,0xf6,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, +-0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, +-0x00,0x00,0x00,0x00,0x00,0xfe,0x06,0xf6,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, +-0x36,0x36,0x36,0x36,0x36,0xf6,0x06,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x36,0x36,0x36,0x36,0x36,0x36,0x36,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x18,0x18,0x18,0x18,0x18,0xf8,0x18,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1f,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xff,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +-0x18,0x18,0x18,0x18,0x18,0x1f,0x18,0x1f,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +-0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, +-0x36,0x36,0x36,0x36,0x36,0x37,0x30,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x3f,0x30,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, +-0x36,0x36,0x36,0x36,0x36,0xf7,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0xff,0x00,0xf7,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, +-0x36,0x36,0x36,0x36,0x36,0x37,0x30,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, +-0x00,0x00,0x00,0x00,0x00,0xff,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x36,0x36,0x36,0x36,0x36,0xf7,0x00,0xf7,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, +-0x18,0x18,0x18,0x18,0x18,0xff,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x36,0x36,0x36,0x36,0x36,0x36,0x36,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0xff,0x00,0xff,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, +-0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x18,0x18,0x18,0x18,0x18,0x1f,0x18,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x1f,0x18,0x1f,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, +-0x36,0x36,0x36,0x36,0x36,0x36,0x36,0xff,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, +-0x18,0x18,0x18,0x18,0x18,0xff,0x18,0xff,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +-0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +-0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, +-0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, +-0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x76,0xdc,0xd8,0xd8,0xd8,0xdc,0x76,0x00,0x00,0x00,0x00, +-0x00,0x00,0x78,0xcc,0xcc,0xcc,0xd8,0xcc,0xc6,0xc6,0xc6,0xcc,0x00,0x00,0x00,0x00, +-0x00,0x00,0xfe,0xc6,0xc6,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0xfe,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0xfe,0xc6,0x60,0x30,0x18,0x30,0x60,0xc6,0xfe,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x7e,0xd8,0xd8,0xd8,0xd8,0xd8,0x70,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x7c,0x60,0x60,0xc0,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x76,0xdc,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x7e,0x18,0x3c,0x66,0x66,0x66,0x3c,0x18,0x7e,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x38,0x6c,0xc6,0xc6,0xfe,0xc6,0xc6,0x6c,0x38,0x00,0x00,0x00,0x00, +-0x00,0x00,0x38,0x6c,0xc6,0xc6,0xc6,0x6c,0x6c,0x6c,0x6c,0xee,0x00,0x00,0x00,0x00, +-0x00,0x00,0x1e,0x30,0x18,0x0c,0x3e,0x66,0x66,0x66,0x66,0x3c,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x7e,0xdb,0xdb,0xdb,0x7e,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x03,0x06,0x7e,0xdb,0xdb,0xf3,0x7e,0x60,0xc0,0x00,0x00,0x00,0x00, +-0x00,0x00,0x1c,0x30,0x60,0x60,0x7c,0x60,0x60,0x60,0x30,0x1c,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x7c,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0xfe,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x18,0x18,0x7e,0x18,0x18,0x00,0x00,0xff,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x30,0x18,0x0c,0x06,0x0c,0x18,0x30,0x00,0x7e,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x0c,0x18,0x30,0x60,0x30,0x18,0x0c,0x00,0x7e,0x00,0x00,0x00,0x00, +-0x00,0x00,0x0e,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +-0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xd8,0xd8,0xd8,0x70,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x7e,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x76,0xdc,0x00,0x76,0xdc,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x38,0x6c,0x6c,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x0f,0x0c,0x0c,0x0c,0x0c,0x0c,0xec,0x6c,0x6c,0x3c,0x1c,0x00,0x00,0x00,0x00, +-0x00,0xd8,0x6c,0x6c,0x6c,0x6c,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x70,0xd8,0x30,0x60,0xc8,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x00,0x00,0x00,0x00,0x00, +-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +-}; +-static int default8x16FontMetaData[256*5+1]={ +-0,8,16,0,0,16,8,16,0,0,32,8,16,0,0,48,8,16,0,0,64,8,16,0,0,80,8,16,0,0,96,8,16,0,0,112,8,16,0,0,128,8,16,0,0,144,8,16,0,0,160,8,16,0,0,176,8,16,0,0,192,8,16,0,0,208,8,16,0,0,224,8,16,0,0,240,8,16,0,0,256,8,16,0,0,272,8,16,0,0,288,8,16,0,0,304,8,16,0,0,320,8,16,0,0,336,8,16,0,0,352,8,16,0,0,368,8,16,0,0,384,8,16,0,0,400,8,16,0,0,416,8,16,0,0,432,8,16,0,0,448,8,16,0,0,464,8,16,0,0,480,8,16,0,0,496,8,16,0,0,512,8,16,0,0,528,8,16,0,0,544,8,16,0,0,560,8,16,0,0,576,8,16,0,0,592,8,16,0,0,608,8,16,0,0,624,8,16,0,0,640,8,16,0,0,656,8,16,0,0,672,8,16,0,0,688,8,16,0,0,704,8,16,0,0,720,8,16,0,0,736,8,16,0,0,752,8,16,0,0,768,8,16,0,0,784,8,16,0,0,800,8,16,0,0,816,8,16,0,0,832,8,16,0,0,848,8,16,0,0,864,8,16,0,0,880,8,16,0,0,896,8,16,0,0,912,8,16,0,0,928,8,16,0,0,944,8,16,0,0,960,8,16,0,0,976,8,16,0,0,992,8,16,0,0,1008,8,16,0,0,1024,8,16,0,0,1040,8,16,0,0,1056,8,16,0,0,1072,8,16,0,0,1088,8,16,0,0,1104,8,16,0,0,1120,8,16,0,0,1136,8,16,0,0,1152,8,16,0,0,1168,8,16,0,0,1184,8,16,0,0,1200,8,16,0,0,1216,8,16,0,0,1232,8,16,0,0,1248,8,16,0,0,1264,8,16,0,0,1280,8,16,0,0,1296,8,16,0,0,1312,8,16,0,0,1328,8,16,0,0,1344,8,16,0,0,1360,8,16,0,0,1376,8,16,0,0,1392,8,16,0,0,1408,8,16,0,0,1424,8,16,0,0,1440,8,16,0,0,1456,8,16,0,0,1472,8,16,0,0,1488,8,16,0,0,1504,8,16,0,0,1520,8,16,0,0,1536,8,16,0,0,1552,8,16,0,0,1568,8,16,0,0,1584,8,16,0,0,1600,8,16,0,0,1616,8,16,0,0,1632,8,16,0,0,1648,8,16,0,0,1664,8,16,0,0,1680,8,16,0,0,1696,8,16,0,0,1712,8,16,0,0,1728,8,16,0,0,1744,8,16,0,0,1760,8,16,0,0,1776,8,16,0,0,1792,8,16,0,0,1808,8,16,0,0,1824,8,16,0,0,1840,8,16,0,0,1856,8,16,0,0,1872,8,16,0,0,1888,8,16,0,0,1904,8,16,0,0,1920,8,16,0,0,1936,8,16,0,0,1952,8,16,0,0,1968,8,16,0,0,1984,8,16,0,0,2000,8,16,0,0,2016,8,16,0,0,2032,8,16,0,0,2048,8,16,0,0,2064,8,16,0,0,2080,8,16,0,0,2096,8,16,0,0,2112,8,16,0,0,2128,8,16,0,0,2144,8,16,0,0,2160,8,16,0,0,2176,8,16,0,0,2192,8,16,0,0,2208,8,16,0,0,2224,8,16,0,0,2240,8,16,0,0,2256,8,16,0,0,2272,8,16,0,0,2288,8,16,0,0,2304,8,16,0,0,2320,8,16,0,0,2336,8,16,0,0,2352,8,16,0,0,2368,8,16,0,0,2384,8,16,0,0,2400,8,16,0,0,2416,8,16,0,0,2432,8,16,0,0,2448,8,16,0,0,2464,8,16,0,0,2480,8,16,0,0,2496,8,16,0,0,2512,8,16,0,0,2528,8,16,0,0,2544,8,16,0,0,2560,8,16,0,0,2576,8,16,0,0,2592,8,16,0,0,2608,8,16,0,0,2624,8,16,0,0,2640,8,16,0,0,2656,8,16,0,0,2672,8,16,0,0,2688,8,16,0,0,2704,8,16,0,0,2720,8,16,0,0,2736,8,16,0,0,2752,8,16,0,0,2768,8,16,0,0,2784,8,16,0,0,2800,8,16,0,0,2816,8,16,0,0,2832,8,16,0,0,2848,8,16,0,0,2864,8,16,0,0,2880,8,16,0,0,2896,8,16,0,0,2912,8,16,0,0,2928,8,16,0,0,2944,8,16,0,0,2960,8,16,0,0,2976,8,16,0,0,2992,8,16,0,0,3008,8,16,0,0,3024,8,16,0,0,3040,8,16,0,0,3056,8,16,0,0,3072,8,16,0,0,3088,8,16,0,0,3104,8,16,0,0,3120,8,16,0,0,3136,8,16,0,0,3152,8,16,0,0,3168,8,16,0,0,3184,8,16,0,0,3200,8,16,0,0,3216,8,16,0,0,3232,8,16,0,0,3248,8,16,0,0,3264,8,16,0,0,3280,8,16,0,0,3296,8,16,0,0,3312,8,16,0,0,3328,8,16,0,0,3344,8,16,0,0,3360,8,16,0,0,3376,8,16,0,0,3392,8,16,0,0,3408,8,16,0,0,3424,8,16,0,0,3440,8,16,0,0,3456,8,16,0,0,3472,8,16,0,0,3488,8,16,0,0,3504,8,16,0,0,3520,8,16,0,0,3536,8,16,0,0,3552,8,16,0,0,3568,8,16,0,0,3584,8,16,0,0,3600,8,16,0,0,3616,8,16,0,0,3632,8,16,0,0,3648,8,16,0,0,3664,8,16,0,0,3680,8,16,0,0,3696,8,16,0,0,3712,8,16,0,0,3728,8,16,0,0,3744,8,16,0,0,3760,8,16,0,0,3776,8,16,0,0,3792,8,16,0,0,3808,8,16,0,0,3824,8,16,0,0,3840,8,16,0,0,3856,8,16,0,0,3872,8,16,0,0,3888,8,16,0,0,3904,8,16,0,0,3920,8,16,0,0,3936,8,16,0,0,3952,8,16,0,0,3968,8,16,0,0,3984,8,16,0,0,4000,8,16,0,0,4016,8,16,0,0,4032,8,16,0,0,4048,8,16,0,0,4064,8,16,0,0,4080,8,16,0,0,}; +-static rfbFontData default8x16Font = { default8x16FontData, default8x16FontMetaData }; +diff -urN remmina-plugins/vnc/libvncserver/rfb/keysym.h remmina-plugins/vnc/libvncserver/rfb/keysym.h +--- remmina-plugins/vnc/libvncserver/rfb/keysym.h 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/rfb/keysym.h 1970-01-01 10:00:00.000000000 +1000 +@@ -1,1638 +0,0 @@ +-#ifndef XK_0 +- +-/* $XConsortium: keysym.h,v 1.15 94/04/17 20:10:55 rws Exp $ */ +- +-/*********************************************************** +- +-Copyright (c) 1987 X Consortium +- +-Permission is hereby granted, free of charge, to any person obtaining a copy +-of this software and associated documentation files (the "Software"), to deal +-in the Software without restriction, including without limitation the rights +-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +-copies of the Software, and to permit persons to whom the Software is +-furnished to do so, subject to the following conditions: +- +-The above copyright notice and this permission notice shall be included in +-all copies or substantial portions of the Software. +- +-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +-X CONSORTIUM 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. +- +-Except as contained in this notice, the name of the X Consortium shall not be +-used in advertising or otherwise to promote the sale, use or other dealings +-in this Software without prior written authorization from the X Consortium. +- +- +-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. +- +- All Rights Reserved +- +-Permission to use, copy, modify, and distribute this software and its +-documentation for any purpose and without fee is hereby granted, +-provided that the above copyright notice appear in all copies and that +-both that copyright notice and this permission notice appear in +-supporting documentation, and that the name of Digital not be +-used in advertising or publicity pertaining to distribution of the +-software without specific, written prior permission. +- +-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +-SOFTWARE. +- +-******************************************************************/ +- +-/* default keysyms */ +-#define XK_MISCELLANY +-#define XK_XKB_KEYS +-#define XK_LATIN1 +-#define XK_LATIN2 +-#define XK_LATIN3 +-#define XK_LATIN4 +-#define XK_GREEK +- +-/* $TOG: keysymdef.h /main/25 1997/06/21 10:54:51 kaleb $ */ +- +-/*********************************************************** +-Copyright (c) 1987, 1994 X Consortium +- +-Permission is hereby granted, free of charge, to any person obtaining +-a copy of this software and associated documentation files (the +-"Software"), to deal in the Software without restriction, including +-without limitation the rights to use, copy, modify, merge, publish, +-distribute, sublicense, and/or sell copies of the Software, and to +-permit persons to whom the Software is furnished to do so, subject to +-the following conditions: +- +-The above copyright notice and this permission notice shall be included +-in all copies or substantial portions of the Software. +- +-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +-IN NO EVENT SHALL THE X CONSORTIUM 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. +- +-Except as contained in this notice, the name of the X Consortium shall +-not be used in advertising or otherwise to promote the sale, use or +-other dealings in this Software without prior written authorization +-from the X Consortium. +- +- +-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts +- +- All Rights Reserved +- +-Permission to use, copy, modify, and distribute this software and its +-documentation for any purpose and without fee is hereby granted, +-provided that the above copyright notice appear in all copies and that +-both that copyright notice and this permission notice appear in +-supporting documentation, and that the name of Digital not be +-used in advertising or publicity pertaining to distribution of the +-software without specific, written prior permission. +- +-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +-SOFTWARE. +- +-******************************************************************/ +- +-#define XK_VoidSymbol 0xFFFFFF /* void symbol */ +- +-#ifdef XK_MISCELLANY +-/* +- * TTY Functions, cleverly chosen to map to ascii, for convenience of +- * programming, but could have been arbitrary (at the cost of lookup +- * tables in client code. +- */ +- +-#define XK_BackSpace 0xFF08 /* back space, back char */ +-#define XK_Tab 0xFF09 +-#define XK_Linefeed 0xFF0A /* Linefeed, LF */ +-#define XK_Clear 0xFF0B +-#define XK_Return 0xFF0D /* Return, enter */ +-#define XK_Pause 0xFF13 /* Pause, hold */ +-#define XK_Scroll_Lock 0xFF14 +-#define XK_Sys_Req 0xFF15 +-#define XK_Escape 0xFF1B +-#define XK_Delete 0xFFFF /* Delete, rubout */ +- +- +- +-/* International & multi-key character composition */ +- +-#define XK_Multi_key 0xFF20 /* Multi-key character compose */ +-#define XK_SingleCandidate 0xFF3C +-#define XK_MultipleCandidate 0xFF3D +-#define XK_PreviousCandidate 0xFF3E +- +-/* Japanese keyboard support */ +- +-#define XK_Kanji 0xFF21 /* Kanji, Kanji convert */ +-#define XK_Muhenkan 0xFF22 /* Cancel Conversion */ +-#define XK_Henkan_Mode 0xFF23 /* Start/Stop Conversion */ +-#define XK_Henkan 0xFF23 /* Alias for Henkan_Mode */ +-#define XK_Romaji 0xFF24 /* to Romaji */ +-#define XK_Hiragana 0xFF25 /* to Hiragana */ +-#define XK_Katakana 0xFF26 /* to Katakana */ +-#define XK_Hiragana_Katakana 0xFF27 /* Hiragana/Katakana toggle */ +-#define XK_Zenkaku 0xFF28 /* to Zenkaku */ +-#define XK_Hankaku 0xFF29 /* to Hankaku */ +-#define XK_Zenkaku_Hankaku 0xFF2A /* Zenkaku/Hankaku toggle */ +-#define XK_Touroku 0xFF2B /* Add to Dictionary */ +-#define XK_Massyo 0xFF2C /* Delete from Dictionary */ +-#define XK_Kana_Lock 0xFF2D /* Kana Lock */ +-#define XK_Kana_Shift 0xFF2E /* Kana Shift */ +-#define XK_Eisu_Shift 0xFF2F /* Alphanumeric Shift */ +-#define XK_Eisu_toggle 0xFF30 /* Alphanumeric toggle */ +-#define XK_Zen_Koho 0xFF3D /* Multiple/All Candidate(s) */ +-#define XK_Mae_Koho 0xFF3E /* Previous Candidate */ +- +-/* 0xFF31 thru 0xFF3F are under XK_KOREAN */ +- +-/* Cursor control & motion */ +- +-#define XK_Home 0xFF50 +-#define XK_Left 0xFF51 /* Move left, left arrow */ +-#define XK_Up 0xFF52 /* Move up, up arrow */ +-#define XK_Right 0xFF53 /* Move right, right arrow */ +-#define XK_Down 0xFF54 /* Move down, down arrow */ +-#define XK_Prior 0xFF55 /* Prior, previous */ +-#define XK_Page_Up 0xFF55 +-#define XK_Next 0xFF56 /* Next */ +-#define XK_Page_Down 0xFF56 +-#define XK_End 0xFF57 /* EOL */ +-#define XK_Begin 0xFF58 /* BOL */ +- +- +-/* Misc Functions */ +- +-#define XK_Select 0xFF60 /* Select, mark */ +-#define XK_Print 0xFF61 +-#define XK_Execute 0xFF62 /* Execute, run, do */ +-#define XK_Insert 0xFF63 /* Insert, insert here */ +-#define XK_Undo 0xFF65 /* Undo, oops */ +-#define XK_Redo 0xFF66 /* redo, again */ +-#define XK_Menu 0xFF67 +-#define XK_Find 0xFF68 /* Find, search */ +-#define XK_Cancel 0xFF69 /* Cancel, stop, abort, exit */ +-#define XK_Help 0xFF6A /* Help */ +-#define XK_Break 0xFF6B +-#define XK_Mode_switch 0xFF7E /* Character set switch */ +-#define XK_script_switch 0xFF7E /* Alias for mode_switch */ +-#define XK_Num_Lock 0xFF7F +- +-/* Keypad Functions, keypad numbers cleverly chosen to map to ascii */ +- +-#define XK_KP_Space 0xFF80 /* space */ +-#define XK_KP_Tab 0xFF89 +-#define XK_KP_Enter 0xFF8D /* enter */ +-#define XK_KP_F1 0xFF91 /* PF1, KP_A, ... */ +-#define XK_KP_F2 0xFF92 +-#define XK_KP_F3 0xFF93 +-#define XK_KP_F4 0xFF94 +-#define XK_KP_Home 0xFF95 +-#define XK_KP_Left 0xFF96 +-#define XK_KP_Up 0xFF97 +-#define XK_KP_Right 0xFF98 +-#define XK_KP_Down 0xFF99 +-#define XK_KP_Prior 0xFF9A +-#define XK_KP_Page_Up 0xFF9A +-#define XK_KP_Next 0xFF9B +-#define XK_KP_Page_Down 0xFF9B +-#define XK_KP_End 0xFF9C +-#define XK_KP_Begin 0xFF9D +-#define XK_KP_Insert 0xFF9E +-#define XK_KP_Delete 0xFF9F +-#define XK_KP_Equal 0xFFBD /* equals */ +-#define XK_KP_Multiply 0xFFAA +-#define XK_KP_Add 0xFFAB +-#define XK_KP_Separator 0xFFAC /* separator, often comma */ +-#define XK_KP_Subtract 0xFFAD +-#define XK_KP_Decimal 0xFFAE +-#define XK_KP_Divide 0xFFAF +- +-#define XK_KP_0 0xFFB0 +-#define XK_KP_1 0xFFB1 +-#define XK_KP_2 0xFFB2 +-#define XK_KP_3 0xFFB3 +-#define XK_KP_4 0xFFB4 +-#define XK_KP_5 0xFFB5 +-#define XK_KP_6 0xFFB6 +-#define XK_KP_7 0xFFB7 +-#define XK_KP_8 0xFFB8 +-#define XK_KP_9 0xFFB9 +- +- +- +-/* +- * Auxilliary Functions; note the duplicate definitions for left and right +- * function keys; Sun keyboards and a few other manufactures have such +- * function key groups on the left and/or right sides of the keyboard. +- * We've not found a keyboard with more than 35 function keys total. +- */ +- +-#define XK_F1 0xFFBE +-#define XK_F2 0xFFBF +-#define XK_F3 0xFFC0 +-#define XK_F4 0xFFC1 +-#define XK_F5 0xFFC2 +-#define XK_F6 0xFFC3 +-#define XK_F7 0xFFC4 +-#define XK_F8 0xFFC5 +-#define XK_F9 0xFFC6 +-#define XK_F10 0xFFC7 +-#define XK_F11 0xFFC8 +-#define XK_L1 0xFFC8 +-#define XK_F12 0xFFC9 +-#define XK_L2 0xFFC9 +-#define XK_F13 0xFFCA +-#define XK_L3 0xFFCA +-#define XK_F14 0xFFCB +-#define XK_L4 0xFFCB +-#define XK_F15 0xFFCC +-#define XK_L5 0xFFCC +-#define XK_F16 0xFFCD +-#define XK_L6 0xFFCD +-#define XK_F17 0xFFCE +-#define XK_L7 0xFFCE +-#define XK_F18 0xFFCF +-#define XK_L8 0xFFCF +-#define XK_F19 0xFFD0 +-#define XK_L9 0xFFD0 +-#define XK_F20 0xFFD1 +-#define XK_L10 0xFFD1 +-#define XK_F21 0xFFD2 +-#define XK_R1 0xFFD2 +-#define XK_F22 0xFFD3 +-#define XK_R2 0xFFD3 +-#define XK_F23 0xFFD4 +-#define XK_R3 0xFFD4 +-#define XK_F24 0xFFD5 +-#define XK_R4 0xFFD5 +-#define XK_F25 0xFFD6 +-#define XK_R5 0xFFD6 +-#define XK_F26 0xFFD7 +-#define XK_R6 0xFFD7 +-#define XK_F27 0xFFD8 +-#define XK_R7 0xFFD8 +-#define XK_F28 0xFFD9 +-#define XK_R8 0xFFD9 +-#define XK_F29 0xFFDA +-#define XK_R9 0xFFDA +-#define XK_F30 0xFFDB +-#define XK_R10 0xFFDB +-#define XK_F31 0xFFDC +-#define XK_R11 0xFFDC +-#define XK_F32 0xFFDD +-#define XK_R12 0xFFDD +-#define XK_F33 0xFFDE +-#define XK_R13 0xFFDE +-#define XK_F34 0xFFDF +-#define XK_R14 0xFFDF +-#define XK_F35 0xFFE0 +-#define XK_R15 0xFFE0 +- +-/* Modifiers */ +- +-#define XK_Shift_L 0xFFE1 /* Left shift */ +-#define XK_Shift_R 0xFFE2 /* Right shift */ +-#define XK_Control_L 0xFFE3 /* Left control */ +-#define XK_Control_R 0xFFE4 /* Right control */ +-#define XK_Caps_Lock 0xFFE5 /* Caps lock */ +-#define XK_Shift_Lock 0xFFE6 /* Shift lock */ +- +-#define XK_Meta_L 0xFFE7 /* Left meta */ +-#define XK_Meta_R 0xFFE8 /* Right meta */ +-#define XK_Alt_L 0xFFE9 /* Left alt */ +-#define XK_Alt_R 0xFFEA /* Right alt */ +-#define XK_Super_L 0xFFEB /* Left super */ +-#define XK_Super_R 0xFFEC /* Right super */ +-#define XK_Hyper_L 0xFFED /* Left hyper */ +-#define XK_Hyper_R 0xFFEE /* Right hyper */ +-#endif /* XK_MISCELLANY */ +- +-/* +- * ISO 9995 Function and Modifier Keys +- * Byte 3 = 0xFE +- */ +- +-#ifdef XK_XKB_KEYS +-#define XK_ISO_Lock 0xFE01 +-#define XK_ISO_Level2_Latch 0xFE02 +-#define XK_ISO_Level3_Shift 0xFE03 +-#define XK_ISO_Level3_Latch 0xFE04 +-#define XK_ISO_Level3_Lock 0xFE05 +-#define XK_ISO_Group_Shift 0xFF7E /* Alias for mode_switch */ +-#define XK_ISO_Group_Latch 0xFE06 +-#define XK_ISO_Group_Lock 0xFE07 +-#define XK_ISO_Next_Group 0xFE08 +-#define XK_ISO_Next_Group_Lock 0xFE09 +-#define XK_ISO_Prev_Group 0xFE0A +-#define XK_ISO_Prev_Group_Lock 0xFE0B +-#define XK_ISO_First_Group 0xFE0C +-#define XK_ISO_First_Group_Lock 0xFE0D +-#define XK_ISO_Last_Group 0xFE0E +-#define XK_ISO_Last_Group_Lock 0xFE0F +- +-#define XK_ISO_Left_Tab 0xFE20 +-#define XK_ISO_Move_Line_Up 0xFE21 +-#define XK_ISO_Move_Line_Down 0xFE22 +-#define XK_ISO_Partial_Line_Up 0xFE23 +-#define XK_ISO_Partial_Line_Down 0xFE24 +-#define XK_ISO_Partial_Space_Left 0xFE25 +-#define XK_ISO_Partial_Space_Right 0xFE26 +-#define XK_ISO_Set_Margin_Left 0xFE27 +-#define XK_ISO_Set_Margin_Right 0xFE28 +-#define XK_ISO_Release_Margin_Left 0xFE29 +-#define XK_ISO_Release_Margin_Right 0xFE2A +-#define XK_ISO_Release_Both_Margins 0xFE2B +-#define XK_ISO_Fast_Cursor_Left 0xFE2C +-#define XK_ISO_Fast_Cursor_Right 0xFE2D +-#define XK_ISO_Fast_Cursor_Up 0xFE2E +-#define XK_ISO_Fast_Cursor_Down 0xFE2F +-#define XK_ISO_Continuous_Underline 0xFE30 +-#define XK_ISO_Discontinuous_Underline 0xFE31 +-#define XK_ISO_Emphasize 0xFE32 +-#define XK_ISO_Center_Object 0xFE33 +-#define XK_ISO_Enter 0xFE34 +- +-#define XK_dead_grave 0xFE50 +-#define XK_dead_acute 0xFE51 +-#define XK_dead_circumflex 0xFE52 +-#define XK_dead_tilde 0xFE53 +-#define XK_dead_macron 0xFE54 +-#define XK_dead_breve 0xFE55 +-#define XK_dead_abovedot 0xFE56 +-#define XK_dead_diaeresis 0xFE57 +-#define XK_dead_abovering 0xFE58 +-#define XK_dead_doubleacute 0xFE59 +-#define XK_dead_caron 0xFE5A +-#define XK_dead_cedilla 0xFE5B +-#define XK_dead_ogonek 0xFE5C +-#define XK_dead_iota 0xFE5D +-#define XK_dead_voiced_sound 0xFE5E +-#define XK_dead_semivoiced_sound 0xFE5F +-#define XK_dead_belowdot 0xFE60 +- +-#define XK_First_Virtual_Screen 0xFED0 +-#define XK_Prev_Virtual_Screen 0xFED1 +-#define XK_Next_Virtual_Screen 0xFED2 +-#define XK_Last_Virtual_Screen 0xFED4 +-#define XK_Terminate_Server 0xFED5 +- +-#define XK_AccessX_Enable 0xFE70 +-#define XK_AccessX_Feedback_Enable 0xFE71 +-#define XK_RepeatKeys_Enable 0xFE72 +-#define XK_SlowKeys_Enable 0xFE73 +-#define XK_BounceKeys_Enable 0xFE74 +-#define XK_StickyKeys_Enable 0xFE75 +-#define XK_MouseKeys_Enable 0xFE76 +-#define XK_MouseKeys_Accel_Enable 0xFE77 +-#define XK_Overlay1_Enable 0xFE78 +-#define XK_Overlay2_Enable 0xFE79 +-#define XK_AudibleBell_Enable 0xFE7A +- +-#define XK_Pointer_Left 0xFEE0 +-#define XK_Pointer_Right 0xFEE1 +-#define XK_Pointer_Up 0xFEE2 +-#define XK_Pointer_Down 0xFEE3 +-#define XK_Pointer_UpLeft 0xFEE4 +-#define XK_Pointer_UpRight 0xFEE5 +-#define XK_Pointer_DownLeft 0xFEE6 +-#define XK_Pointer_DownRight 0xFEE7 +-#define XK_Pointer_Button_Dflt 0xFEE8 +-#define XK_Pointer_Button1 0xFEE9 +-#define XK_Pointer_Button2 0xFEEA +-#define XK_Pointer_Button3 0xFEEB +-#define XK_Pointer_Button4 0xFEEC +-#define XK_Pointer_Button5 0xFEED +-#define XK_Pointer_DblClick_Dflt 0xFEEE +-#define XK_Pointer_DblClick1 0xFEEF +-#define XK_Pointer_DblClick2 0xFEF0 +-#define XK_Pointer_DblClick3 0xFEF1 +-#define XK_Pointer_DblClick4 0xFEF2 +-#define XK_Pointer_DblClick5 0xFEF3 +-#define XK_Pointer_Drag_Dflt 0xFEF4 +-#define XK_Pointer_Drag1 0xFEF5 +-#define XK_Pointer_Drag2 0xFEF6 +-#define XK_Pointer_Drag3 0xFEF7 +-#define XK_Pointer_Drag4 0xFEF8 +-#define XK_Pointer_Drag5 0xFEFD +- +-#define XK_Pointer_EnableKeys 0xFEF9 +-#define XK_Pointer_Accelerate 0xFEFA +-#define XK_Pointer_DfltBtnNext 0xFEFB +-#define XK_Pointer_DfltBtnPrev 0xFEFC +- +-#endif +- +-/* +- * 3270 Terminal Keys +- * Byte 3 = 0xFD +- */ +- +-#ifdef XK_3270 +-#define XK_3270_Duplicate 0xFD01 +-#define XK_3270_FieldMark 0xFD02 +-#define XK_3270_Right2 0xFD03 +-#define XK_3270_Left2 0xFD04 +-#define XK_3270_BackTab 0xFD05 +-#define XK_3270_EraseEOF 0xFD06 +-#define XK_3270_EraseInput 0xFD07 +-#define XK_3270_Reset 0xFD08 +-#define XK_3270_Quit 0xFD09 +-#define XK_3270_PA1 0xFD0A +-#define XK_3270_PA2 0xFD0B +-#define XK_3270_PA3 0xFD0C +-#define XK_3270_Test 0xFD0D +-#define XK_3270_Attn 0xFD0E +-#define XK_3270_CursorBlink 0xFD0F +-#define XK_3270_AltCursor 0xFD10 +-#define XK_3270_KeyClick 0xFD11 +-#define XK_3270_Jump 0xFD12 +-#define XK_3270_Ident 0xFD13 +-#define XK_3270_Rule 0xFD14 +-#define XK_3270_Copy 0xFD15 +-#define XK_3270_Play 0xFD16 +-#define XK_3270_Setup 0xFD17 +-#define XK_3270_Record 0xFD18 +-#define XK_3270_ChangeScreen 0xFD19 +-#define XK_3270_DeleteWord 0xFD1A +-#define XK_3270_ExSelect 0xFD1B +-#define XK_3270_CursorSelect 0xFD1C +-#define XK_3270_PrintScreen 0xFD1D +-#define XK_3270_Enter 0xFD1E +-#endif +- +-/* +- * Latin 1 +- * Byte 3 = 0 +- */ +-#ifdef XK_LATIN1 +-#define XK_space 0x020 +-#define XK_exclam 0x021 +-#define XK_quotedbl 0x022 +-#define XK_numbersign 0x023 +-#define XK_dollar 0x024 +-#define XK_percent 0x025 +-#define XK_ampersand 0x026 +-#define XK_apostrophe 0x027 +-#define XK_quoteright 0x027 /* deprecated */ +-#define XK_parenleft 0x028 +-#define XK_parenright 0x029 +-#define XK_asterisk 0x02a +-#define XK_plus 0x02b +-#define XK_comma 0x02c +-#define XK_minus 0x02d +-#define XK_period 0x02e +-#define XK_slash 0x02f +-#define XK_0 0x030 +-#define XK_1 0x031 +-#define XK_2 0x032 +-#define XK_3 0x033 +-#define XK_4 0x034 +-#define XK_5 0x035 +-#define XK_6 0x036 +-#define XK_7 0x037 +-#define XK_8 0x038 +-#define XK_9 0x039 +-#define XK_colon 0x03a +-#define XK_semicolon 0x03b +-#define XK_less 0x03c +-#define XK_equal 0x03d +-#define XK_greater 0x03e +-#define XK_question 0x03f +-#define XK_at 0x040 +-#define XK_A 0x041 +-#define XK_B 0x042 +-#define XK_C 0x043 +-#define XK_D 0x044 +-#define XK_E 0x045 +-#define XK_F 0x046 +-#define XK_G 0x047 +-#define XK_H 0x048 +-#define XK_I 0x049 +-#define XK_J 0x04a +-#define XK_K 0x04b +-#define XK_L 0x04c +-#define XK_M 0x04d +-#define XK_N 0x04e +-#define XK_O 0x04f +-#define XK_P 0x050 +-#define XK_Q 0x051 +-#define XK_R 0x052 +-#define XK_S 0x053 +-#define XK_T 0x054 +-#define XK_U 0x055 +-#define XK_V 0x056 +-#define XK_W 0x057 +-#define XK_X 0x058 +-#define XK_Y 0x059 +-#define XK_Z 0x05a +-#define XK_bracketleft 0x05b +-#define XK_backslash 0x05c +-#define XK_bracketright 0x05d +-#define XK_asciicircum 0x05e +-#define XK_underscore 0x05f +-#define XK_grave 0x060 +-#define XK_quoteleft 0x060 /* deprecated */ +-#define XK_a 0x061 +-#define XK_b 0x062 +-#define XK_c 0x063 +-#define XK_d 0x064 +-#define XK_e 0x065 +-#define XK_f 0x066 +-#define XK_g 0x067 +-#define XK_h 0x068 +-#define XK_i 0x069 +-#define XK_j 0x06a +-#define XK_k 0x06b +-#define XK_l 0x06c +-#define XK_m 0x06d +-#define XK_n 0x06e +-#define XK_o 0x06f +-#define XK_p 0x070 +-#define XK_q 0x071 +-#define XK_r 0x072 +-#define XK_s 0x073 +-#define XK_t 0x074 +-#define XK_u 0x075 +-#define XK_v 0x076 +-#define XK_w 0x077 +-#define XK_x 0x078 +-#define XK_y 0x079 +-#define XK_z 0x07a +-#define XK_braceleft 0x07b +-#define XK_bar 0x07c +-#define XK_braceright 0x07d +-#define XK_asciitilde 0x07e +- +-#define XK_nobreakspace 0x0a0 +-#define XK_exclamdown 0x0a1 +-#define XK_cent 0x0a2 +-#define XK_sterling 0x0a3 +-#define XK_currency 0x0a4 +-#define XK_yen 0x0a5 +-#define XK_brokenbar 0x0a6 +-#define XK_section 0x0a7 +-#define XK_diaeresis 0x0a8 +-#define XK_copyright 0x0a9 +-#define XK_ordfeminine 0x0aa +-#define XK_guillemotleft 0x0ab /* left angle quotation mark */ +-#define XK_notsign 0x0ac +-#define XK_hyphen 0x0ad +-#define XK_registered 0x0ae +-#define XK_macron 0x0af +-#define XK_degree 0x0b0 +-#define XK_plusminus 0x0b1 +-#define XK_twosuperior 0x0b2 +-#define XK_threesuperior 0x0b3 +-#define XK_acute 0x0b4 +-#define XK_mu 0x0b5 +-#define XK_paragraph 0x0b6 +-#define XK_periodcentered 0x0b7 +-#define XK_cedilla 0x0b8 +-#define XK_onesuperior 0x0b9 +-#define XK_masculine 0x0ba +-#define XK_guillemotright 0x0bb /* right angle quotation mark */ +-#define XK_onequarter 0x0bc +-#define XK_onehalf 0x0bd +-#define XK_threequarters 0x0be +-#define XK_questiondown 0x0bf +-#define XK_Agrave 0x0c0 +-#define XK_Aacute 0x0c1 +-#define XK_Acircumflex 0x0c2 +-#define XK_Atilde 0x0c3 +-#define XK_Adiaeresis 0x0c4 +-#define XK_Aring 0x0c5 +-#define XK_AE 0x0c6 +-#define XK_Ccedilla 0x0c7 +-#define XK_Egrave 0x0c8 +-#define XK_Eacute 0x0c9 +-#define XK_Ecircumflex 0x0ca +-#define XK_Ediaeresis 0x0cb +-#define XK_Igrave 0x0cc +-#define XK_Iacute 0x0cd +-#define XK_Icircumflex 0x0ce +-#define XK_Idiaeresis 0x0cf +-#define XK_ETH 0x0d0 +-#define XK_Eth 0x0d0 /* deprecated */ +-#define XK_Ntilde 0x0d1 +-#define XK_Ograve 0x0d2 +-#define XK_Oacute 0x0d3 +-#define XK_Ocircumflex 0x0d4 +-#define XK_Otilde 0x0d5 +-#define XK_Odiaeresis 0x0d6 +-#define XK_multiply 0x0d7 +-#define XK_Ooblique 0x0d8 +-#define XK_Ugrave 0x0d9 +-#define XK_Uacute 0x0da +-#define XK_Ucircumflex 0x0db +-#define XK_Udiaeresis 0x0dc +-#define XK_Yacute 0x0dd +-#define XK_THORN 0x0de +-#define XK_Thorn 0x0de /* deprecated */ +-#define XK_ssharp 0x0df +-#define XK_agrave 0x0e0 +-#define XK_aacute 0x0e1 +-#define XK_acircumflex 0x0e2 +-#define XK_atilde 0x0e3 +-#define XK_adiaeresis 0x0e4 +-#define XK_aring 0x0e5 +-#define XK_ae 0x0e6 +-#define XK_ccedilla 0x0e7 +-#define XK_egrave 0x0e8 +-#define XK_eacute 0x0e9 +-#define XK_ecircumflex 0x0ea +-#define XK_ediaeresis 0x0eb +-#define XK_igrave 0x0ec +-#define XK_iacute 0x0ed +-#define XK_icircumflex 0x0ee +-#define XK_idiaeresis 0x0ef +-#define XK_eth 0x0f0 +-#define XK_ntilde 0x0f1 +-#define XK_ograve 0x0f2 +-#define XK_oacute 0x0f3 +-#define XK_ocircumflex 0x0f4 +-#define XK_otilde 0x0f5 +-#define XK_odiaeresis 0x0f6 +-#define XK_division 0x0f7 +-#define XK_oslash 0x0f8 +-#define XK_ugrave 0x0f9 +-#define XK_uacute 0x0fa +-#define XK_ucircumflex 0x0fb +-#define XK_udiaeresis 0x0fc +-#define XK_yacute 0x0fd +-#define XK_thorn 0x0fe +-#define XK_ydiaeresis 0x0ff +-#endif /* XK_LATIN1 */ +- +-/* +- * Latin 2 +- * Byte 3 = 1 +- */ +- +-#ifdef XK_LATIN2 +-#define XK_Aogonek 0x1a1 +-#define XK_breve 0x1a2 +-#define XK_Lstroke 0x1a3 +-#define XK_Lcaron 0x1a5 +-#define XK_Sacute 0x1a6 +-#define XK_Scaron 0x1a9 +-#define XK_Scedilla 0x1aa +-#define XK_Tcaron 0x1ab +-#define XK_Zacute 0x1ac +-#define XK_Zcaron 0x1ae +-#define XK_Zabovedot 0x1af +-#define XK_aogonek 0x1b1 +-#define XK_ogonek 0x1b2 +-#define XK_lstroke 0x1b3 +-#define XK_lcaron 0x1b5 +-#define XK_sacute 0x1b6 +-#define XK_caron 0x1b7 +-#define XK_scaron 0x1b9 +-#define XK_scedilla 0x1ba +-#define XK_tcaron 0x1bb +-#define XK_zacute 0x1bc +-#define XK_doubleacute 0x1bd +-#define XK_zcaron 0x1be +-#define XK_zabovedot 0x1bf +-#define XK_Racute 0x1c0 +-#define XK_Abreve 0x1c3 +-#define XK_Lacute 0x1c5 +-#define XK_Cacute 0x1c6 +-#define XK_Ccaron 0x1c8 +-#define XK_Eogonek 0x1ca +-#define XK_Ecaron 0x1cc +-#define XK_Dcaron 0x1cf +-#define XK_Dstroke 0x1d0 +-#define XK_Nacute 0x1d1 +-#define XK_Ncaron 0x1d2 +-#define XK_Odoubleacute 0x1d5 +-#define XK_Rcaron 0x1d8 +-#define XK_Uring 0x1d9 +-#define XK_Udoubleacute 0x1db +-#define XK_Tcedilla 0x1de +-#define XK_racute 0x1e0 +-#define XK_abreve 0x1e3 +-#define XK_lacute 0x1e5 +-#define XK_cacute 0x1e6 +-#define XK_ccaron 0x1e8 +-#define XK_eogonek 0x1ea +-#define XK_ecaron 0x1ec +-#define XK_dcaron 0x1ef +-#define XK_dstroke 0x1f0 +-#define XK_nacute 0x1f1 +-#define XK_ncaron 0x1f2 +-#define XK_odoubleacute 0x1f5 +-#define XK_udoubleacute 0x1fb +-#define XK_rcaron 0x1f8 +-#define XK_uring 0x1f9 +-#define XK_tcedilla 0x1fe +-#define XK_abovedot 0x1ff +-#endif /* XK_LATIN2 */ +- +-/* +- * Latin 3 +- * Byte 3 = 2 +- */ +- +-#ifdef XK_LATIN3 +-#define XK_Hstroke 0x2a1 +-#define XK_Hcircumflex 0x2a6 +-#define XK_Iabovedot 0x2a9 +-#define XK_Gbreve 0x2ab +-#define XK_Jcircumflex 0x2ac +-#define XK_hstroke 0x2b1 +-#define XK_hcircumflex 0x2b6 +-#define XK_idotless 0x2b9 +-#define XK_gbreve 0x2bb +-#define XK_jcircumflex 0x2bc +-#define XK_Cabovedot 0x2c5 +-#define XK_Ccircumflex 0x2c6 +-#define XK_Gabovedot 0x2d5 +-#define XK_Gcircumflex 0x2d8 +-#define XK_Ubreve 0x2dd +-#define XK_Scircumflex 0x2de +-#define XK_cabovedot 0x2e5 +-#define XK_ccircumflex 0x2e6 +-#define XK_gabovedot 0x2f5 +-#define XK_gcircumflex 0x2f8 +-#define XK_ubreve 0x2fd +-#define XK_scircumflex 0x2fe +-#endif /* XK_LATIN3 */ +- +- +-/* +- * Latin 4 +- * Byte 3 = 3 +- */ +- +-#ifdef XK_LATIN4 +-#define XK_kra 0x3a2 +-#define XK_kappa 0x3a2 /* deprecated */ +-#define XK_Rcedilla 0x3a3 +-#define XK_Itilde 0x3a5 +-#define XK_Lcedilla 0x3a6 +-#define XK_Emacron 0x3aa +-#define XK_Gcedilla 0x3ab +-#define XK_Tslash 0x3ac +-#define XK_rcedilla 0x3b3 +-#define XK_itilde 0x3b5 +-#define XK_lcedilla 0x3b6 +-#define XK_emacron 0x3ba +-#define XK_gcedilla 0x3bb +-#define XK_tslash 0x3bc +-#define XK_ENG 0x3bd +-#define XK_eng 0x3bf +-#define XK_Amacron 0x3c0 +-#define XK_Iogonek 0x3c7 +-#define XK_Eabovedot 0x3cc +-#define XK_Imacron 0x3cf +-#define XK_Ncedilla 0x3d1 +-#define XK_Omacron 0x3d2 +-#define XK_Kcedilla 0x3d3 +-#define XK_Uogonek 0x3d9 +-#define XK_Utilde 0x3dd +-#define XK_Umacron 0x3de +-#define XK_amacron 0x3e0 +-#define XK_iogonek 0x3e7 +-#define XK_eabovedot 0x3ec +-#define XK_imacron 0x3ef +-#define XK_ncedilla 0x3f1 +-#define XK_omacron 0x3f2 +-#define XK_kcedilla 0x3f3 +-#define XK_uogonek 0x3f9 +-#define XK_utilde 0x3fd +-#define XK_umacron 0x3fe +-#endif /* XK_LATIN4 */ +- +-/* +- * Katakana +- * Byte 3 = 4 +- */ +- +-#ifdef XK_KATAKANA +-#define XK_overline 0x47e +-#define XK_kana_fullstop 0x4a1 +-#define XK_kana_openingbracket 0x4a2 +-#define XK_kana_closingbracket 0x4a3 +-#define XK_kana_comma 0x4a4 +-#define XK_kana_conjunctive 0x4a5 +-#define XK_kana_middledot 0x4a5 /* deprecated */ +-#define XK_kana_WO 0x4a6 +-#define XK_kana_a 0x4a7 +-#define XK_kana_i 0x4a8 +-#define XK_kana_u 0x4a9 +-#define XK_kana_e 0x4aa +-#define XK_kana_o 0x4ab +-#define XK_kana_ya 0x4ac +-#define XK_kana_yu 0x4ad +-#define XK_kana_yo 0x4ae +-#define XK_kana_tsu 0x4af +-#define XK_kana_tu 0x4af /* deprecated */ +-#define XK_prolongedsound 0x4b0 +-#define XK_kana_A 0x4b1 +-#define XK_kana_I 0x4b2 +-#define XK_kana_U 0x4b3 +-#define XK_kana_E 0x4b4 +-#define XK_kana_O 0x4b5 +-#define XK_kana_KA 0x4b6 +-#define XK_kana_KI 0x4b7 +-#define XK_kana_KU 0x4b8 +-#define XK_kana_KE 0x4b9 +-#define XK_kana_KO 0x4ba +-#define XK_kana_SA 0x4bb +-#define XK_kana_SHI 0x4bc +-#define XK_kana_SU 0x4bd +-#define XK_kana_SE 0x4be +-#define XK_kana_SO 0x4bf +-#define XK_kana_TA 0x4c0 +-#define XK_kana_CHI 0x4c1 +-#define XK_kana_TI 0x4c1 /* deprecated */ +-#define XK_kana_TSU 0x4c2 +-#define XK_kana_TU 0x4c2 /* deprecated */ +-#define XK_kana_TE 0x4c3 +-#define XK_kana_TO 0x4c4 +-#define XK_kana_NA 0x4c5 +-#define XK_kana_NI 0x4c6 +-#define XK_kana_NU 0x4c7 +-#define XK_kana_NE 0x4c8 +-#define XK_kana_NO 0x4c9 +-#define XK_kana_HA 0x4ca +-#define XK_kana_HI 0x4cb +-#define XK_kana_FU 0x4cc +-#define XK_kana_HU 0x4cc /* deprecated */ +-#define XK_kana_HE 0x4cd +-#define XK_kana_HO 0x4ce +-#define XK_kana_MA 0x4cf +-#define XK_kana_MI 0x4d0 +-#define XK_kana_MU 0x4d1 +-#define XK_kana_ME 0x4d2 +-#define XK_kana_MO 0x4d3 +-#define XK_kana_YA 0x4d4 +-#define XK_kana_YU 0x4d5 +-#define XK_kana_YO 0x4d6 +-#define XK_kana_RA 0x4d7 +-#define XK_kana_RI 0x4d8 +-#define XK_kana_RU 0x4d9 +-#define XK_kana_RE 0x4da +-#define XK_kana_RO 0x4db +-#define XK_kana_WA 0x4dc +-#define XK_kana_N 0x4dd +-#define XK_voicedsound 0x4de +-#define XK_semivoicedsound 0x4df +-#define XK_kana_switch 0xFF7E /* Alias for mode_switch */ +-#endif /* XK_KATAKANA */ +- +-/* +- * Arabic +- * Byte 3 = 5 +- */ +- +-#ifdef XK_ARABIC +-#define XK_Arabic_comma 0x5ac +-#define XK_Arabic_semicolon 0x5bb +-#define XK_Arabic_question_mark 0x5bf +-#define XK_Arabic_hamza 0x5c1 +-#define XK_Arabic_maddaonalef 0x5c2 +-#define XK_Arabic_hamzaonalef 0x5c3 +-#define XK_Arabic_hamzaonwaw 0x5c4 +-#define XK_Arabic_hamzaunderalef 0x5c5 +-#define XK_Arabic_hamzaonyeh 0x5c6 +-#define XK_Arabic_alef 0x5c7 +-#define XK_Arabic_beh 0x5c8 +-#define XK_Arabic_tehmarbuta 0x5c9 +-#define XK_Arabic_teh 0x5ca +-#define XK_Arabic_theh 0x5cb +-#define XK_Arabic_jeem 0x5cc +-#define XK_Arabic_hah 0x5cd +-#define XK_Arabic_khah 0x5ce +-#define XK_Arabic_dal 0x5cf +-#define XK_Arabic_thal 0x5d0 +-#define XK_Arabic_ra 0x5d1 +-#define XK_Arabic_zain 0x5d2 +-#define XK_Arabic_seen 0x5d3 +-#define XK_Arabic_sheen 0x5d4 +-#define XK_Arabic_sad 0x5d5 +-#define XK_Arabic_dad 0x5d6 +-#define XK_Arabic_tah 0x5d7 +-#define XK_Arabic_zah 0x5d8 +-#define XK_Arabic_ain 0x5d9 +-#define XK_Arabic_ghain 0x5da +-#define XK_Arabic_tatweel 0x5e0 +-#define XK_Arabic_feh 0x5e1 +-#define XK_Arabic_qaf 0x5e2 +-#define XK_Arabic_kaf 0x5e3 +-#define XK_Arabic_lam 0x5e4 +-#define XK_Arabic_meem 0x5e5 +-#define XK_Arabic_noon 0x5e6 +-#define XK_Arabic_ha 0x5e7 +-#define XK_Arabic_heh 0x5e7 /* deprecated */ +-#define XK_Arabic_waw 0x5e8 +-#define XK_Arabic_alefmaksura 0x5e9 +-#define XK_Arabic_yeh 0x5ea +-#define XK_Arabic_fathatan 0x5eb +-#define XK_Arabic_dammatan 0x5ec +-#define XK_Arabic_kasratan 0x5ed +-#define XK_Arabic_fatha 0x5ee +-#define XK_Arabic_damma 0x5ef +-#define XK_Arabic_kasra 0x5f0 +-#define XK_Arabic_shadda 0x5f1 +-#define XK_Arabic_sukun 0x5f2 +-#define XK_Arabic_switch 0xFF7E /* Alias for mode_switch */ +-#endif /* XK_ARABIC */ +- +-/* +- * Cyrillic +- * Byte 3 = 6 +- */ +-#ifdef XK_CYRILLIC +-#define XK_Serbian_dje 0x6a1 +-#define XK_Macedonia_gje 0x6a2 +-#define XK_Cyrillic_io 0x6a3 +-#define XK_Ukrainian_ie 0x6a4 +-#define XK_Ukranian_je 0x6a4 /* deprecated */ +-#define XK_Macedonia_dse 0x6a5 +-#define XK_Ukrainian_i 0x6a6 +-#define XK_Ukranian_i 0x6a6 /* deprecated */ +-#define XK_Ukrainian_yi 0x6a7 +-#define XK_Ukranian_yi 0x6a7 /* deprecated */ +-#define XK_Cyrillic_je 0x6a8 +-#define XK_Serbian_je 0x6a8 /* deprecated */ +-#define XK_Cyrillic_lje 0x6a9 +-#define XK_Serbian_lje 0x6a9 /* deprecated */ +-#define XK_Cyrillic_nje 0x6aa +-#define XK_Serbian_nje 0x6aa /* deprecated */ +-#define XK_Serbian_tshe 0x6ab +-#define XK_Macedonia_kje 0x6ac +-#define XK_Byelorussian_shortu 0x6ae +-#define XK_Cyrillic_dzhe 0x6af +-#define XK_Serbian_dze 0x6af /* deprecated */ +-#define XK_numerosign 0x6b0 +-#define XK_Serbian_DJE 0x6b1 +-#define XK_Macedonia_GJE 0x6b2 +-#define XK_Cyrillic_IO 0x6b3 +-#define XK_Ukrainian_IE 0x6b4 +-#define XK_Ukranian_JE 0x6b4 /* deprecated */ +-#define XK_Macedonia_DSE 0x6b5 +-#define XK_Ukrainian_I 0x6b6 +-#define XK_Ukranian_I 0x6b6 /* deprecated */ +-#define XK_Ukrainian_YI 0x6b7 +-#define XK_Ukranian_YI 0x6b7 /* deprecated */ +-#define XK_Cyrillic_JE 0x6b8 +-#define XK_Serbian_JE 0x6b8 /* deprecated */ +-#define XK_Cyrillic_LJE 0x6b9 +-#define XK_Serbian_LJE 0x6b9 /* deprecated */ +-#define XK_Cyrillic_NJE 0x6ba +-#define XK_Serbian_NJE 0x6ba /* deprecated */ +-#define XK_Serbian_TSHE 0x6bb +-#define XK_Macedonia_KJE 0x6bc +-#define XK_Byelorussian_SHORTU 0x6be +-#define XK_Cyrillic_DZHE 0x6bf +-#define XK_Serbian_DZE 0x6bf /* deprecated */ +-#define XK_Cyrillic_yu 0x6c0 +-#define XK_Cyrillic_a 0x6c1 +-#define XK_Cyrillic_be 0x6c2 +-#define XK_Cyrillic_tse 0x6c3 +-#define XK_Cyrillic_de 0x6c4 +-#define XK_Cyrillic_ie 0x6c5 +-#define XK_Cyrillic_ef 0x6c6 +-#define XK_Cyrillic_ghe 0x6c7 +-#define XK_Cyrillic_ha 0x6c8 +-#define XK_Cyrillic_i 0x6c9 +-#define XK_Cyrillic_shorti 0x6ca +-#define XK_Cyrillic_ka 0x6cb +-#define XK_Cyrillic_el 0x6cc +-#define XK_Cyrillic_em 0x6cd +-#define XK_Cyrillic_en 0x6ce +-#define XK_Cyrillic_o 0x6cf +-#define XK_Cyrillic_pe 0x6d0 +-#define XK_Cyrillic_ya 0x6d1 +-#define XK_Cyrillic_er 0x6d2 +-#define XK_Cyrillic_es 0x6d3 +-#define XK_Cyrillic_te 0x6d4 +-#define XK_Cyrillic_u 0x6d5 +-#define XK_Cyrillic_zhe 0x6d6 +-#define XK_Cyrillic_ve 0x6d7 +-#define XK_Cyrillic_softsign 0x6d8 +-#define XK_Cyrillic_yeru 0x6d9 +-#define XK_Cyrillic_ze 0x6da +-#define XK_Cyrillic_sha 0x6db +-#define XK_Cyrillic_e 0x6dc +-#define XK_Cyrillic_shcha 0x6dd +-#define XK_Cyrillic_che 0x6de +-#define XK_Cyrillic_hardsign 0x6df +-#define XK_Cyrillic_YU 0x6e0 +-#define XK_Cyrillic_A 0x6e1 +-#define XK_Cyrillic_BE 0x6e2 +-#define XK_Cyrillic_TSE 0x6e3 +-#define XK_Cyrillic_DE 0x6e4 +-#define XK_Cyrillic_IE 0x6e5 +-#define XK_Cyrillic_EF 0x6e6 +-#define XK_Cyrillic_GHE 0x6e7 +-#define XK_Cyrillic_HA 0x6e8 +-#define XK_Cyrillic_I 0x6e9 +-#define XK_Cyrillic_SHORTI 0x6ea +-#define XK_Cyrillic_KA 0x6eb +-#define XK_Cyrillic_EL 0x6ec +-#define XK_Cyrillic_EM 0x6ed +-#define XK_Cyrillic_EN 0x6ee +-#define XK_Cyrillic_O 0x6ef +-#define XK_Cyrillic_PE 0x6f0 +-#define XK_Cyrillic_YA 0x6f1 +-#define XK_Cyrillic_ER 0x6f2 +-#define XK_Cyrillic_ES 0x6f3 +-#define XK_Cyrillic_TE 0x6f4 +-#define XK_Cyrillic_U 0x6f5 +-#define XK_Cyrillic_ZHE 0x6f6 +-#define XK_Cyrillic_VE 0x6f7 +-#define XK_Cyrillic_SOFTSIGN 0x6f8 +-#define XK_Cyrillic_YERU 0x6f9 +-#define XK_Cyrillic_ZE 0x6fa +-#define XK_Cyrillic_SHA 0x6fb +-#define XK_Cyrillic_E 0x6fc +-#define XK_Cyrillic_SHCHA 0x6fd +-#define XK_Cyrillic_CHE 0x6fe +-#define XK_Cyrillic_HARDSIGN 0x6ff +-#endif /* XK_CYRILLIC */ +- +-/* +- * Greek +- * Byte 3 = 7 +- */ +- +-#ifdef XK_GREEK +-#define XK_Greek_ALPHAaccent 0x7a1 +-#define XK_Greek_EPSILONaccent 0x7a2 +-#define XK_Greek_ETAaccent 0x7a3 +-#define XK_Greek_IOTAaccent 0x7a4 +-#define XK_Greek_IOTAdieresis 0x7a5 +-#define XK_Greek_OMICRONaccent 0x7a7 +-#define XK_Greek_UPSILONaccent 0x7a8 +-#define XK_Greek_UPSILONdieresis 0x7a9 +-#define XK_Greek_OMEGAaccent 0x7ab +-#define XK_Greek_accentdieresis 0x7ae +-#define XK_Greek_horizbar 0x7af +-#define XK_Greek_alphaaccent 0x7b1 +-#define XK_Greek_epsilonaccent 0x7b2 +-#define XK_Greek_etaaccent 0x7b3 +-#define XK_Greek_iotaaccent 0x7b4 +-#define XK_Greek_iotadieresis 0x7b5 +-#define XK_Greek_iotaaccentdieresis 0x7b6 +-#define XK_Greek_omicronaccent 0x7b7 +-#define XK_Greek_upsilonaccent 0x7b8 +-#define XK_Greek_upsilondieresis 0x7b9 +-#define XK_Greek_upsilonaccentdieresis 0x7ba +-#define XK_Greek_omegaaccent 0x7bb +-#define XK_Greek_ALPHA 0x7c1 +-#define XK_Greek_BETA 0x7c2 +-#define XK_Greek_GAMMA 0x7c3 +-#define XK_Greek_DELTA 0x7c4 +-#define XK_Greek_EPSILON 0x7c5 +-#define XK_Greek_ZETA 0x7c6 +-#define XK_Greek_ETA 0x7c7 +-#define XK_Greek_THETA 0x7c8 +-#define XK_Greek_IOTA 0x7c9 +-#define XK_Greek_KAPPA 0x7ca +-#define XK_Greek_LAMDA 0x7cb +-#define XK_Greek_LAMBDA 0x7cb +-#define XK_Greek_MU 0x7cc +-#define XK_Greek_NU 0x7cd +-#define XK_Greek_XI 0x7ce +-#define XK_Greek_OMICRON 0x7cf +-#define XK_Greek_PI 0x7d0 +-#define XK_Greek_RHO 0x7d1 +-#define XK_Greek_SIGMA 0x7d2 +-#define XK_Greek_TAU 0x7d4 +-#define XK_Greek_UPSILON 0x7d5 +-#define XK_Greek_PHI 0x7d6 +-#define XK_Greek_CHI 0x7d7 +-#define XK_Greek_PSI 0x7d8 +-#define XK_Greek_OMEGA 0x7d9 +-#define XK_Greek_alpha 0x7e1 +-#define XK_Greek_beta 0x7e2 +-#define XK_Greek_gamma 0x7e3 +-#define XK_Greek_delta 0x7e4 +-#define XK_Greek_epsilon 0x7e5 +-#define XK_Greek_zeta 0x7e6 +-#define XK_Greek_eta 0x7e7 +-#define XK_Greek_theta 0x7e8 +-#define XK_Greek_iota 0x7e9 +-#define XK_Greek_kappa 0x7ea +-#define XK_Greek_lamda 0x7eb +-#define XK_Greek_lambda 0x7eb +-#define XK_Greek_mu 0x7ec +-#define XK_Greek_nu 0x7ed +-#define XK_Greek_xi 0x7ee +-#define XK_Greek_omicron 0x7ef +-#define XK_Greek_pi 0x7f0 +-#define XK_Greek_rho 0x7f1 +-#define XK_Greek_sigma 0x7f2 +-#define XK_Greek_finalsmallsigma 0x7f3 +-#define XK_Greek_tau 0x7f4 +-#define XK_Greek_upsilon 0x7f5 +-#define XK_Greek_phi 0x7f6 +-#define XK_Greek_chi 0x7f7 +-#define XK_Greek_psi 0x7f8 +-#define XK_Greek_omega 0x7f9 +-#define XK_Greek_switch 0xFF7E /* Alias for mode_switch */ +-#endif /* XK_GREEK */ +- +-/* +- * Technical +- * Byte 3 = 8 +- */ +- +-#ifdef XK_TECHNICAL +-#define XK_leftradical 0x8a1 +-#define XK_topleftradical 0x8a2 +-#define XK_horizconnector 0x8a3 +-#define XK_topintegral 0x8a4 +-#define XK_botintegral 0x8a5 +-#define XK_vertconnector 0x8a6 +-#define XK_topleftsqbracket 0x8a7 +-#define XK_botleftsqbracket 0x8a8 +-#define XK_toprightsqbracket 0x8a9 +-#define XK_botrightsqbracket 0x8aa +-#define XK_topleftparens 0x8ab +-#define XK_botleftparens 0x8ac +-#define XK_toprightparens 0x8ad +-#define XK_botrightparens 0x8ae +-#define XK_leftmiddlecurlybrace 0x8af +-#define XK_rightmiddlecurlybrace 0x8b0 +-#define XK_topleftsummation 0x8b1 +-#define XK_botleftsummation 0x8b2 +-#define XK_topvertsummationconnector 0x8b3 +-#define XK_botvertsummationconnector 0x8b4 +-#define XK_toprightsummation 0x8b5 +-#define XK_botrightsummation 0x8b6 +-#define XK_rightmiddlesummation 0x8b7 +-#define XK_lessthanequal 0x8bc +-#define XK_notequal 0x8bd +-#define XK_greaterthanequal 0x8be +-#define XK_integral 0x8bf +-#define XK_therefore 0x8c0 +-#define XK_variation 0x8c1 +-#define XK_infinity 0x8c2 +-#define XK_nabla 0x8c5 +-#define XK_approximate 0x8c8 +-#define XK_similarequal 0x8c9 +-#define XK_ifonlyif 0x8cd +-#define XK_implies 0x8ce +-#define XK_identical 0x8cf +-#define XK_radical 0x8d6 +-#define XK_includedin 0x8da +-#define XK_includes 0x8db +-#define XK_intersection 0x8dc +-#define XK_union 0x8dd +-#define XK_logicaland 0x8de +-#define XK_logicalor 0x8df +-#define XK_partialderivative 0x8ef +-#define XK_function 0x8f6 +-#define XK_leftarrow 0x8fb +-#define XK_uparrow 0x8fc +-#define XK_rightarrow 0x8fd +-#define XK_downarrow 0x8fe +-#endif /* XK_TECHNICAL */ +- +-/* +- * Special +- * Byte 3 = 9 +- */ +- +-#ifdef XK_SPECIAL +-#define XK_blank 0x9df +-#define XK_soliddiamond 0x9e0 +-#define XK_checkerboard 0x9e1 +-#define XK_ht 0x9e2 +-#define XK_ff 0x9e3 +-#define XK_cr 0x9e4 +-#define XK_lf 0x9e5 +-#define XK_nl 0x9e8 +-#define XK_vt 0x9e9 +-#define XK_lowrightcorner 0x9ea +-#define XK_uprightcorner 0x9eb +-#define XK_upleftcorner 0x9ec +-#define XK_lowleftcorner 0x9ed +-#define XK_crossinglines 0x9ee +-#define XK_horizlinescan1 0x9ef +-#define XK_horizlinescan3 0x9f0 +-#define XK_horizlinescan5 0x9f1 +-#define XK_horizlinescan7 0x9f2 +-#define XK_horizlinescan9 0x9f3 +-#define XK_leftt 0x9f4 +-#define XK_rightt 0x9f5 +-#define XK_bott 0x9f6 +-#define XK_topt 0x9f7 +-#define XK_vertbar 0x9f8 +-#endif /* XK_SPECIAL */ +- +-/* +- * Publishing +- * Byte 3 = a +- */ +- +-#ifdef XK_PUBLISHING +-#define XK_emspace 0xaa1 +-#define XK_enspace 0xaa2 +-#define XK_em3space 0xaa3 +-#define XK_em4space 0xaa4 +-#define XK_digitspace 0xaa5 +-#define XK_punctspace 0xaa6 +-#define XK_thinspace 0xaa7 +-#define XK_hairspace 0xaa8 +-#define XK_emdash 0xaa9 +-#define XK_endash 0xaaa +-#define XK_signifblank 0xaac +-#define XK_ellipsis 0xaae +-#define XK_doubbaselinedot 0xaaf +-#define XK_onethird 0xab0 +-#define XK_twothirds 0xab1 +-#define XK_onefifth 0xab2 +-#define XK_twofifths 0xab3 +-#define XK_threefifths 0xab4 +-#define XK_fourfifths 0xab5 +-#define XK_onesixth 0xab6 +-#define XK_fivesixths 0xab7 +-#define XK_careof 0xab8 +-#define XK_figdash 0xabb +-#define XK_leftanglebracket 0xabc +-#define XK_decimalpoint 0xabd +-#define XK_rightanglebracket 0xabe +-#define XK_marker 0xabf +-#define XK_oneeighth 0xac3 +-#define XK_threeeighths 0xac4 +-#define XK_fiveeighths 0xac5 +-#define XK_seveneighths 0xac6 +-#define XK_trademark 0xac9 +-#define XK_signaturemark 0xaca +-#define XK_trademarkincircle 0xacb +-#define XK_leftopentriangle 0xacc +-#define XK_rightopentriangle 0xacd +-#define XK_emopencircle 0xace +-#define XK_emopenrectangle 0xacf +-#define XK_leftsinglequotemark 0xad0 +-#define XK_rightsinglequotemark 0xad1 +-#define XK_leftdoublequotemark 0xad2 +-#define XK_rightdoublequotemark 0xad3 +-#define XK_prescription 0xad4 +-#define XK_minutes 0xad6 +-#define XK_seconds 0xad7 +-#define XK_latincross 0xad9 +-#define XK_hexagram 0xada +-#define XK_filledrectbullet 0xadb +-#define XK_filledlefttribullet 0xadc +-#define XK_filledrighttribullet 0xadd +-#define XK_emfilledcircle 0xade +-#define XK_emfilledrect 0xadf +-#define XK_enopencircbullet 0xae0 +-#define XK_enopensquarebullet 0xae1 +-#define XK_openrectbullet 0xae2 +-#define XK_opentribulletup 0xae3 +-#define XK_opentribulletdown 0xae4 +-#define XK_openstar 0xae5 +-#define XK_enfilledcircbullet 0xae6 +-#define XK_enfilledsqbullet 0xae7 +-#define XK_filledtribulletup 0xae8 +-#define XK_filledtribulletdown 0xae9 +-#define XK_leftpointer 0xaea +-#define XK_rightpointer 0xaeb +-#define XK_club 0xaec +-#define XK_diamond 0xaed +-#define XK_heart 0xaee +-#define XK_maltesecross 0xaf0 +-#define XK_dagger 0xaf1 +-#define XK_doubledagger 0xaf2 +-#define XK_checkmark 0xaf3 +-#define XK_ballotcross 0xaf4 +-#define XK_musicalsharp 0xaf5 +-#define XK_musicalflat 0xaf6 +-#define XK_malesymbol 0xaf7 +-#define XK_femalesymbol 0xaf8 +-#define XK_telephone 0xaf9 +-#define XK_telephonerecorder 0xafa +-#define XK_phonographcopyright 0xafb +-#define XK_caret 0xafc +-#define XK_singlelowquotemark 0xafd +-#define XK_doublelowquotemark 0xafe +-#define XK_cursor 0xaff +-#endif /* XK_PUBLISHING */ +- +-/* +- * APL +- * Byte 3 = b +- */ +- +-#ifdef XK_APL +-#define XK_leftcaret 0xba3 +-#define XK_rightcaret 0xba6 +-#define XK_downcaret 0xba8 +-#define XK_upcaret 0xba9 +-#define XK_overbar 0xbc0 +-#define XK_downtack 0xbc2 +-#define XK_upshoe 0xbc3 +-#define XK_downstile 0xbc4 +-#define XK_underbar 0xbc6 +-#define XK_jot 0xbca +-#define XK_quad 0xbcc +-#define XK_uptack 0xbce +-#define XK_circle 0xbcf +-#define XK_upstile 0xbd3 +-#define XK_downshoe 0xbd6 +-#define XK_rightshoe 0xbd8 +-#define XK_leftshoe 0xbda +-#define XK_lefttack 0xbdc +-#define XK_righttack 0xbfc +-#endif /* XK_APL */ +- +-/* +- * Hebrew +- * Byte 3 = c +- */ +- +-#ifdef XK_HEBREW +-#define XK_hebrew_doublelowline 0xcdf +-#define XK_hebrew_aleph 0xce0 +-#define XK_hebrew_bet 0xce1 +-#define XK_hebrew_beth 0xce1 /* deprecated */ +-#define XK_hebrew_gimel 0xce2 +-#define XK_hebrew_gimmel 0xce2 /* deprecated */ +-#define XK_hebrew_dalet 0xce3 +-#define XK_hebrew_daleth 0xce3 /* deprecated */ +-#define XK_hebrew_he 0xce4 +-#define XK_hebrew_waw 0xce5 +-#define XK_hebrew_zain 0xce6 +-#define XK_hebrew_zayin 0xce6 /* deprecated */ +-#define XK_hebrew_chet 0xce7 +-#define XK_hebrew_het 0xce7 /* deprecated */ +-#define XK_hebrew_tet 0xce8 +-#define XK_hebrew_teth 0xce8 /* deprecated */ +-#define XK_hebrew_yod 0xce9 +-#define XK_hebrew_finalkaph 0xcea +-#define XK_hebrew_kaph 0xceb +-#define XK_hebrew_lamed 0xcec +-#define XK_hebrew_finalmem 0xced +-#define XK_hebrew_mem 0xcee +-#define XK_hebrew_finalnun 0xcef +-#define XK_hebrew_nun 0xcf0 +-#define XK_hebrew_samech 0xcf1 +-#define XK_hebrew_samekh 0xcf1 /* deprecated */ +-#define XK_hebrew_ayin 0xcf2 +-#define XK_hebrew_finalpe 0xcf3 +-#define XK_hebrew_pe 0xcf4 +-#define XK_hebrew_finalzade 0xcf5 +-#define XK_hebrew_finalzadi 0xcf5 /* deprecated */ +-#define XK_hebrew_zade 0xcf6 +-#define XK_hebrew_zadi 0xcf6 /* deprecated */ +-#define XK_hebrew_qoph 0xcf7 +-#define XK_hebrew_kuf 0xcf7 /* deprecated */ +-#define XK_hebrew_resh 0xcf8 +-#define XK_hebrew_shin 0xcf9 +-#define XK_hebrew_taw 0xcfa +-#define XK_hebrew_taf 0xcfa /* deprecated */ +-#define XK_Hebrew_switch 0xFF7E /* Alias for mode_switch */ +-#endif /* XK_HEBREW */ +- +-/* +- * Thai +- * Byte 3 = d +- */ +- +-#ifdef XK_THAI +-#define XK_Thai_kokai 0xda1 +-#define XK_Thai_khokhai 0xda2 +-#define XK_Thai_khokhuat 0xda3 +-#define XK_Thai_khokhwai 0xda4 +-#define XK_Thai_khokhon 0xda5 +-#define XK_Thai_khorakhang 0xda6 +-#define XK_Thai_ngongu 0xda7 +-#define XK_Thai_chochan 0xda8 +-#define XK_Thai_choching 0xda9 +-#define XK_Thai_chochang 0xdaa +-#define XK_Thai_soso 0xdab +-#define XK_Thai_chochoe 0xdac +-#define XK_Thai_yoying 0xdad +-#define XK_Thai_dochada 0xdae +-#define XK_Thai_topatak 0xdaf +-#define XK_Thai_thothan 0xdb0 +-#define XK_Thai_thonangmontho 0xdb1 +-#define XK_Thai_thophuthao 0xdb2 +-#define XK_Thai_nonen 0xdb3 +-#define XK_Thai_dodek 0xdb4 +-#define XK_Thai_totao 0xdb5 +-#define XK_Thai_thothung 0xdb6 +-#define XK_Thai_thothahan 0xdb7 +-#define XK_Thai_thothong 0xdb8 +-#define XK_Thai_nonu 0xdb9 +-#define XK_Thai_bobaimai 0xdba +-#define XK_Thai_popla 0xdbb +-#define XK_Thai_phophung 0xdbc +-#define XK_Thai_fofa 0xdbd +-#define XK_Thai_phophan 0xdbe +-#define XK_Thai_fofan 0xdbf +-#define XK_Thai_phosamphao 0xdc0 +-#define XK_Thai_moma 0xdc1 +-#define XK_Thai_yoyak 0xdc2 +-#define XK_Thai_rorua 0xdc3 +-#define XK_Thai_ru 0xdc4 +-#define XK_Thai_loling 0xdc5 +-#define XK_Thai_lu 0xdc6 +-#define XK_Thai_wowaen 0xdc7 +-#define XK_Thai_sosala 0xdc8 +-#define XK_Thai_sorusi 0xdc9 +-#define XK_Thai_sosua 0xdca +-#define XK_Thai_hohip 0xdcb +-#define XK_Thai_lochula 0xdcc +-#define XK_Thai_oang 0xdcd +-#define XK_Thai_honokhuk 0xdce +-#define XK_Thai_paiyannoi 0xdcf +-#define XK_Thai_saraa 0xdd0 +-#define XK_Thai_maihanakat 0xdd1 +-#define XK_Thai_saraaa 0xdd2 +-#define XK_Thai_saraam 0xdd3 +-#define XK_Thai_sarai 0xdd4 +-#define XK_Thai_saraii 0xdd5 +-#define XK_Thai_saraue 0xdd6 +-#define XK_Thai_sarauee 0xdd7 +-#define XK_Thai_sarau 0xdd8 +-#define XK_Thai_sarauu 0xdd9 +-#define XK_Thai_phinthu 0xdda +-#define XK_Thai_maihanakat_maitho 0xdde +-#define XK_Thai_baht 0xddf +-#define XK_Thai_sarae 0xde0 +-#define XK_Thai_saraae 0xde1 +-#define XK_Thai_sarao 0xde2 +-#define XK_Thai_saraaimaimuan 0xde3 +-#define XK_Thai_saraaimaimalai 0xde4 +-#define XK_Thai_lakkhangyao 0xde5 +-#define XK_Thai_maiyamok 0xde6 +-#define XK_Thai_maitaikhu 0xde7 +-#define XK_Thai_maiek 0xde8 +-#define XK_Thai_maitho 0xde9 +-#define XK_Thai_maitri 0xdea +-#define XK_Thai_maichattawa 0xdeb +-#define XK_Thai_thanthakhat 0xdec +-#define XK_Thai_nikhahit 0xded +-#define XK_Thai_leksun 0xdf0 +-#define XK_Thai_leknung 0xdf1 +-#define XK_Thai_leksong 0xdf2 +-#define XK_Thai_leksam 0xdf3 +-#define XK_Thai_leksi 0xdf4 +-#define XK_Thai_lekha 0xdf5 +-#define XK_Thai_lekhok 0xdf6 +-#define XK_Thai_lekchet 0xdf7 +-#define XK_Thai_lekpaet 0xdf8 +-#define XK_Thai_lekkao 0xdf9 +-#endif /* XK_THAI */ +- +-/* +- * Korean +- * Byte 3 = e +- */ +- +-#ifdef XK_KOREAN +- +-#define XK_Hangul 0xff31 /* Hangul start/stop(toggle) */ +-#define XK_Hangul_Start 0xff32 /* Hangul start */ +-#define XK_Hangul_End 0xff33 /* Hangul end, English start */ +-#define XK_Hangul_Hanja 0xff34 /* Start Hangul->Hanja Conversion */ +-#define XK_Hangul_Jamo 0xff35 /* Hangul Jamo mode */ +-#define XK_Hangul_Romaja 0xff36 /* Hangul Romaja mode */ +-#define XK_Hangul_Codeinput 0xff37 /* Hangul code input mode */ +-#define XK_Hangul_Jeonja 0xff38 /* Jeonja mode */ +-#define XK_Hangul_Banja 0xff39 /* Banja mode */ +-#define XK_Hangul_PreHanja 0xff3a /* Pre Hanja conversion */ +-#define XK_Hangul_PostHanja 0xff3b /* Post Hanja conversion */ +-#define XK_Hangul_SingleCandidate 0xff3c /* Single candidate */ +-#define XK_Hangul_MultipleCandidate 0xff3d /* Multiple candidate */ +-#define XK_Hangul_PreviousCandidate 0xff3e /* Previous candidate */ +-#define XK_Hangul_Special 0xff3f /* Special symbols */ +-#define XK_Hangul_switch 0xFF7E /* Alias for mode_switch */ +- +-/* Hangul Consonant Characters */ +-#define XK_Hangul_Kiyeog 0xea1 +-#define XK_Hangul_SsangKiyeog 0xea2 +-#define XK_Hangul_KiyeogSios 0xea3 +-#define XK_Hangul_Nieun 0xea4 +-#define XK_Hangul_NieunJieuj 0xea5 +-#define XK_Hangul_NieunHieuh 0xea6 +-#define XK_Hangul_Dikeud 0xea7 +-#define XK_Hangul_SsangDikeud 0xea8 +-#define XK_Hangul_Rieul 0xea9 +-#define XK_Hangul_RieulKiyeog 0xeaa +-#define XK_Hangul_RieulMieum 0xeab +-#define XK_Hangul_RieulPieub 0xeac +-#define XK_Hangul_RieulSios 0xead +-#define XK_Hangul_RieulTieut 0xeae +-#define XK_Hangul_RieulPhieuf 0xeaf +-#define XK_Hangul_RieulHieuh 0xeb0 +-#define XK_Hangul_Mieum 0xeb1 +-#define XK_Hangul_Pieub 0xeb2 +-#define XK_Hangul_SsangPieub 0xeb3 +-#define XK_Hangul_PieubSios 0xeb4 +-#define XK_Hangul_Sios 0xeb5 +-#define XK_Hangul_SsangSios 0xeb6 +-#define XK_Hangul_Ieung 0xeb7 +-#define XK_Hangul_Jieuj 0xeb8 +-#define XK_Hangul_SsangJieuj 0xeb9 +-#define XK_Hangul_Cieuc 0xeba +-#define XK_Hangul_Khieuq 0xebb +-#define XK_Hangul_Tieut 0xebc +-#define XK_Hangul_Phieuf 0xebd +-#define XK_Hangul_Hieuh 0xebe +- +-/* Hangul Vowel Characters */ +-#define XK_Hangul_A 0xebf +-#define XK_Hangul_AE 0xec0 +-#define XK_Hangul_YA 0xec1 +-#define XK_Hangul_YAE 0xec2 +-#define XK_Hangul_EO 0xec3 +-#define XK_Hangul_E 0xec4 +-#define XK_Hangul_YEO 0xec5 +-#define XK_Hangul_YE 0xec6 +-#define XK_Hangul_O 0xec7 +-#define XK_Hangul_WA 0xec8 +-#define XK_Hangul_WAE 0xec9 +-#define XK_Hangul_OE 0xeca +-#define XK_Hangul_YO 0xecb +-#define XK_Hangul_U 0xecc +-#define XK_Hangul_WEO 0xecd +-#define XK_Hangul_WE 0xece +-#define XK_Hangul_WI 0xecf +-#define XK_Hangul_YU 0xed0 +-#define XK_Hangul_EU 0xed1 +-#define XK_Hangul_YI 0xed2 +-#define XK_Hangul_I 0xed3 +- +-/* Hangul syllable-final (JongSeong) Characters */ +-#define XK_Hangul_J_Kiyeog 0xed4 +-#define XK_Hangul_J_SsangKiyeog 0xed5 +-#define XK_Hangul_J_KiyeogSios 0xed6 +-#define XK_Hangul_J_Nieun 0xed7 +-#define XK_Hangul_J_NieunJieuj 0xed8 +-#define XK_Hangul_J_NieunHieuh 0xed9 +-#define XK_Hangul_J_Dikeud 0xeda +-#define XK_Hangul_J_Rieul 0xedb +-#define XK_Hangul_J_RieulKiyeog 0xedc +-#define XK_Hangul_J_RieulMieum 0xedd +-#define XK_Hangul_J_RieulPieub 0xede +-#define XK_Hangul_J_RieulSios 0xedf +-#define XK_Hangul_J_RieulTieut 0xee0 +-#define XK_Hangul_J_RieulPhieuf 0xee1 +-#define XK_Hangul_J_RieulHieuh 0xee2 +-#define XK_Hangul_J_Mieum 0xee3 +-#define XK_Hangul_J_Pieub 0xee4 +-#define XK_Hangul_J_PieubSios 0xee5 +-#define XK_Hangul_J_Sios 0xee6 +-#define XK_Hangul_J_SsangSios 0xee7 +-#define XK_Hangul_J_Ieung 0xee8 +-#define XK_Hangul_J_Jieuj 0xee9 +-#define XK_Hangul_J_Cieuc 0xeea +-#define XK_Hangul_J_Khieuq 0xeeb +-#define XK_Hangul_J_Tieut 0xeec +-#define XK_Hangul_J_Phieuf 0xeed +-#define XK_Hangul_J_Hieuh 0xeee +- +-/* Ancient Hangul Consonant Characters */ +-#define XK_Hangul_RieulYeorinHieuh 0xeef +-#define XK_Hangul_SunkyeongeumMieum 0xef0 +-#define XK_Hangul_SunkyeongeumPieub 0xef1 +-#define XK_Hangul_PanSios 0xef2 +-#define XK_Hangul_KkogjiDalrinIeung 0xef3 +-#define XK_Hangul_SunkyeongeumPhieuf 0xef4 +-#define XK_Hangul_YeorinHieuh 0xef5 +- +-/* Ancient Hangul Vowel Characters */ +-#define XK_Hangul_AraeA 0xef6 +-#define XK_Hangul_AraeAE 0xef7 +- +-/* Ancient Hangul syllable-final (JongSeong) Characters */ +-#define XK_Hangul_J_PanSios 0xef8 +-#define XK_Hangul_J_KkogjiDalrinIeung 0xef9 +-#define XK_Hangul_J_YeorinHieuh 0xefa +- +-/* Korean currency symbol */ +-#define XK_Korean_Won 0xeff +- +-#endif /* XK_KOREAN */ +- +-/* Euro currency symbol */ +-#define XK_EuroSign 0x20ac +- +-#endif +diff -urN remmina-plugins/vnc/libvncserver/rfb/rfb.h remmina-plugins/vnc/libvncserver/rfb/rfb.h +--- remmina-plugins/vnc/libvncserver/rfb/rfb.h 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/rfb/rfb.h 1970-01-01 10:00:00.000000000 +1000 +@@ -1,1182 +0,0 @@ +-#ifndef RFB_H +-#define RFB_H +-/** +- * @defgroup libvncserver_api LibVNCServer API Reference +- * @{ +- */ +- +-/** +- * @file rfb.h +- */ +- +-/* +- * Copyright (C) 2005 Rohit Kumar <rokumar@novell.com>, +- * Johannes E. Schindelin <johannes.schindelin@gmx.de> +- * Copyright (C) 2002 RealVNC Ltd. +- * OSXvnc Copyright (C) 2001 Dan McGuirk <mcguirk@incompleteness.net>. +- * Original Xvnc code Copyright (C) 1999 AT&T Laboratories Cambridge. +- * All Rights Reserved. +- * +- * This is free software; you can 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. +- * +- * This software 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 this software; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +- * USA. +- */ +- +-#if(defined __cplusplus) +-extern "C" +-{ +-#endif +- +-#include <stdio.h> +-#include <stdlib.h> +-#include <string.h> +-#include <rfb/rfbproto.h> +- +-#ifdef LIBVNCSERVER_HAVE_SYS_TYPES_H +-#include <sys/types.h> +-#endif +- +-#ifdef __MINGW32__ +-#undef SOCKET +-#include <winsock2.h> +-#endif +- +-#ifdef LIBVNCSERVER_HAVE_LIBPTHREAD +-#include <pthread.h> +-#if 0 /* debugging */ +-#define LOCK(mutex) (rfbLog("%s:%d LOCK(%s,0x%x)\n",__FILE__,__LINE__,#mutex,&(mutex)), pthread_mutex_lock(&(mutex))) +-#define UNLOCK(mutex) (rfbLog("%s:%d UNLOCK(%s,0x%x)\n",__FILE__,__LINE__,#mutex,&(mutex)), pthread_mutex_unlock(&(mutex))) +-#define MUTEX(mutex) pthread_mutex_t (mutex) +-#define INIT_MUTEX(mutex) (rfbLog("%s:%d INIT_MUTEX(%s,0x%x)\n",__FILE__,__LINE__,#mutex,&(mutex)), pthread_mutex_init(&(mutex),NULL)) +-#define TINI_MUTEX(mutex) (rfbLog("%s:%d TINI_MUTEX(%s)\n",__FILE__,__LINE__,#mutex), pthread_mutex_destroy(&(mutex))) +-#define TSIGNAL(cond) (rfbLog("%s:%d TSIGNAL(%s)\n",__FILE__,__LINE__,#cond), pthread_cond_signal(&(cond))) +-#define WAIT(cond,mutex) (rfbLog("%s:%d WAIT(%s,%s)\n",__FILE__,__LINE__,#cond,#mutex), pthread_cond_wait(&(cond),&(mutex))) +-#define COND(cond) pthread_cond_t (cond) +-#define INIT_COND(cond) (rfbLog("%s:%d INIT_COND(%s)\n",__FILE__,__LINE__,#cond), pthread_cond_init(&(cond),NULL)) +-#define TINI_COND(cond) (rfbLog("%s:%d TINI_COND(%s)\n",__FILE__,__LINE__,#cond), pthread_cond_destroy(&(cond))) +-#define IF_PTHREADS(x) x +-#else +-#if !NONETWORK +-#define LOCK(mutex) pthread_mutex_lock(&(mutex)); +-#define UNLOCK(mutex) pthread_mutex_unlock(&(mutex)); +-#endif +-#define MUTEX(mutex) pthread_mutex_t (mutex) +-#define INIT_MUTEX(mutex) pthread_mutex_init(&(mutex),NULL) +-#define TINI_MUTEX(mutex) pthread_mutex_destroy(&(mutex)) +-#define TSIGNAL(cond) pthread_cond_signal(&(cond)) +-#define WAIT(cond,mutex) pthread_cond_wait(&(cond),&(mutex)) +-#define COND(cond) pthread_cond_t (cond) +-#define INIT_COND(cond) pthread_cond_init(&(cond),NULL) +-#define TINI_COND(cond) pthread_cond_destroy(&(cond)) +-#define IF_PTHREADS(x) x +-#endif +-#else +-#define LOCK(mutex) +-#define UNLOCK(mutex) +-#define MUTEX(mutex) +-#define INIT_MUTEX(mutex) +-#define TINI_MUTEX(mutex) +-#define TSIGNAL(cond) +-#define WAIT(cond,mutex) this_is_unsupported +-#define COND(cond) +-#define INIT_COND(cond) +-#define TINI_COND(cond) +-#define IF_PTHREADS(x) +-#endif +- +-/* end of stuff for autoconf */ +- +-/* if you use pthreads, but don't define LIBVNCSERVER_HAVE_LIBPTHREAD, the structs +- get all mixed up. So this gives a linker error reminding you to compile +- the library and your application (at least the parts including rfb.h) +- with the same support for pthreads. */ +-#ifdef LIBVNCSERVER_HAVE_LIBPTHREAD +-#ifdef LIBVNCSERVER_HAVE_LIBZ +-#define rfbInitServer rfbInitServerWithPthreadsAndZRLE +-#else +-#define rfbInitServer rfbInitServerWithPthreadsButWithoutZRLE +-#endif +-#else +-#ifdef LIBVNCSERVER_HAVE_LIBZ +-#define rfbInitServer rfbInitServerWithoutPthreadsButWithZRLE +-#else +-#define rfbInitServer rfbInitServerWithoutPthreadsAndZRLE +-#endif +-#endif +- +-struct _rfbClientRec; +-struct _rfbScreenInfo; +-struct rfbCursor; +- +-enum rfbNewClientAction { +- RFB_CLIENT_ACCEPT, +- RFB_CLIENT_ON_HOLD, +- RFB_CLIENT_REFUSE +-}; +- +-enum rfbSocketState { +- RFB_SOCKET_INIT, +- RFB_SOCKET_READY, +- RFB_SOCKET_SHUTDOWN +-}; +- +-typedef void (*rfbKbdAddEventProcPtr) (rfbBool down, rfbKeySym keySym, struct _rfbClientRec* cl); +-typedef void (*rfbKbdReleaseAllKeysProcPtr) (struct _rfbClientRec* cl); +-typedef void (*rfbPtrAddEventProcPtr) (int buttonMask, int x, int y, struct _rfbClientRec* cl); +-typedef void (*rfbSetXCutTextProcPtr) (char* str,int len, struct _rfbClientRec* cl); +-typedef struct rfbCursor* (*rfbGetCursorProcPtr) (struct _rfbClientRec* pScreen); +-typedef rfbBool (*rfbSetTranslateFunctionProcPtr)(struct _rfbClientRec* cl); +-typedef rfbBool (*rfbPasswordCheckProcPtr)(struct _rfbClientRec* cl,const char* encryptedPassWord,int len); +-typedef enum rfbNewClientAction (*rfbNewClientHookPtr)(struct _rfbClientRec* cl); +-typedef void (*rfbDisplayHookPtr)(struct _rfbClientRec* cl); +-typedef void (*rfbDisplayFinishedHookPtr)(struct _rfbClientRec* cl, int result); +-/** support the capability to view the caps/num/scroll states of the X server */ +-typedef int (*rfbGetKeyboardLedStateHookPtr)(struct _rfbScreenInfo* screen); +-typedef rfbBool (*rfbXvpHookPtr)(struct _rfbClientRec* cl, uint8_t, uint8_t); +-/** +- * If x==1 and y==1 then set the whole display +- * else find the window underneath x and y and set the framebuffer to the dimensions +- * of that window +- */ +-typedef void (*rfbSetSingleWindowProcPtr) (struct _rfbClientRec* cl, int x, int y); +-/** +- * Status determines if the X11 server permits input from the local user +- * status==0 or 1 +- */ +-typedef void (*rfbSetServerInputProcPtr) (struct _rfbClientRec* cl, int status); +-/** +- * Permit the server to allow or deny filetransfers. This is defaulted to deny +- * It is called when a client initiates a connection to determine if it is permitted. +- */ +-typedef int (*rfbFileTransferPermitted) (struct _rfbClientRec* cl); +-/** Handle the textchat messages */ +-typedef void (*rfbSetTextChat) (struct _rfbClientRec* cl, int length, char *string); +- +-typedef struct { +- uint32_t count; +- rfbBool is16; /**< is the data format short? */ +- union { +- uint8_t* bytes; +- uint16_t* shorts; +- } data; /**< there have to be count*3 entries */ +-} rfbColourMap; +- +-/** +- * Security handling (RFB protocol version 3.7) +- */ +- +-typedef struct _rfbSecurity { +- uint8_t type; +- void (*handler)(struct _rfbClientRec* cl); +- struct _rfbSecurity* next; +-} rfbSecurityHandler; +- +-/** +- * Protocol extension handling. +- */ +- +-typedef struct _rfbProtocolExtension { +- /** returns FALSE if extension should be deactivated for client. +- if newClient == NULL, it is always deactivated. */ +- rfbBool (*newClient)(struct _rfbClientRec* client, void** data); +- /** returns FALSE if extension should be deactivated for client. +- if init == NULL, it stays activated. */ +- rfbBool (*init)(struct _rfbClientRec* client, void* data); +- /** if pseudoEncodings is not NULL, it contains a 0 terminated +- list of the pseudo encodings handled by this extension. */ +- int *pseudoEncodings; +- /** returns TRUE if that pseudo encoding is handled by the extension. +- encodingNumber==0 means "reset encodings". */ +- rfbBool (*enablePseudoEncoding)(struct _rfbClientRec* client, +- void** data, int encodingNumber); +- /** returns TRUE if message was handled */ +- rfbBool (*handleMessage)(struct _rfbClientRec* client, +- void* data, +- const rfbClientToServerMsg* message); +- void (*close)(struct _rfbClientRec* client, void* data); +- void (*usage)(void); +- /** processArguments returns the number of handled arguments */ +- int (*processArgument)(int argc, char *argv[]); +- struct _rfbProtocolExtension* next; +-} rfbProtocolExtension; +- +-typedef struct _rfbExtensionData { +- rfbProtocolExtension* extension; +- void* data; +- struct _rfbExtensionData* next; +-} rfbExtensionData; +- +-/** +- * Per-screen (framebuffer) structure. There can be as many as you wish, +- * each serving different clients. However, you have to call +- * rfbProcessEvents for each of these. +- */ +- +-typedef struct _rfbScreenInfo +-{ +- /** this structure has children that are scaled versions of this screen */ +- struct _rfbScreenInfo *scaledScreenNext; +- int scaledScreenRefCount; +- +- int width; +- int paddedWidthInBytes; +- int height; +- int depth; +- int bitsPerPixel; +- int sizeInBytes; +- +- rfbPixel blackPixel; +- rfbPixel whitePixel; +- +- /** +- * some screen specific data can be put into a struct where screenData +- * points to. You need this if you have more than one screen at the +- * same time while using the same functions. +- */ +- void* screenData; +- +- /* additions by libvncserver */ +- +- rfbPixelFormat serverFormat; +- rfbColourMap colourMap; /**< set this if rfbServerFormat.trueColour==FALSE */ +- const char* desktopName; +- char thisHost[255]; +- +- rfbBool autoPort; +- int port; +- SOCKET listenSock; +- int maxSock; +- int maxFd; +-#ifdef __MINGW32__ +- struct fd_set allFds; +-#else +- fd_set allFds; +-#endif +- +- enum rfbSocketState socketState; +- SOCKET inetdSock; +- rfbBool inetdInitDone; +- +- int udpPort; +- SOCKET udpSock; +- struct _rfbClientRec* udpClient; +- rfbBool udpSockConnected; +- struct sockaddr_in udpRemoteAddr; +- +- int maxClientWait; +- +- /* http stuff */ +- rfbBool httpInitDone; +- rfbBool httpEnableProxyConnect; +- int httpPort; +- char* httpDir; +- SOCKET httpListenSock; +- SOCKET httpSock; +- +- rfbPasswordCheckProcPtr passwordCheck; +- void* authPasswdData; +- /** If rfbAuthPasswdData is given a list, this is the first +- view only password. */ +- int authPasswdFirstViewOnly; +- +- /** send only this many rectangles in one update */ +- int maxRectsPerUpdate; +- /** this is the amount of milliseconds to wait at least before sending +- * an update. */ +- int deferUpdateTime; +-#ifdef TODELETE +- char* screen; +-#endif +- rfbBool alwaysShared; +- rfbBool neverShared; +- rfbBool dontDisconnect; +- struct _rfbClientRec* clientHead; +- struct _rfbClientRec* pointerClient; /**< "Mutex" for pointer events */ +- +- +- /* cursor */ +- int cursorX, cursorY,underCursorBufferLen; +- char* underCursorBuffer; +- rfbBool dontConvertRichCursorToXCursor; +- struct rfbCursor* cursor; +- +- /** +- * the frameBuffer has to be supplied by the serving process. +- * The buffer will not be freed by +- */ +- char* frameBuffer; +- rfbKbdAddEventProcPtr kbdAddEvent; +- rfbKbdReleaseAllKeysProcPtr kbdReleaseAllKeys; +- rfbPtrAddEventProcPtr ptrAddEvent; +- rfbSetXCutTextProcPtr setXCutText; +- rfbGetCursorProcPtr getCursorPtr; +- rfbSetTranslateFunctionProcPtr setTranslateFunction; +- rfbSetSingleWindowProcPtr setSingleWindow; +- rfbSetServerInputProcPtr setServerInput; +- rfbFileTransferPermitted getFileTransferPermission; +- rfbSetTextChat setTextChat; +- +- /** newClientHook is called just after a new client is created */ +- rfbNewClientHookPtr newClientHook; +- /** displayHook is called just before a frame buffer update */ +- rfbDisplayHookPtr displayHook; +- +- /** These hooks are called to pass keyboard state back to the client */ +- rfbGetKeyboardLedStateHookPtr getKeyboardLedStateHook; +- +-#ifdef LIBVNCSERVER_HAVE_LIBPTHREAD +- MUTEX(cursorMutex); +- rfbBool backgroundLoop; +-#endif +- +- /** if TRUE, an ignoring signal handler is installed for SIGPIPE */ +- rfbBool ignoreSIGPIPE; +- +- /** if not zero, only a slice of this height is processed every time +- * an update should be sent. This should make working on a slow +- * link more interactive. */ +- int progressiveSliceHeight; +- +- in_addr_t listenInterface; +- int deferPtrUpdateTime; +- +- /** handle as many input events as possible (default off) */ +- rfbBool handleEventsEagerly; +- +- /** rfbEncodingServerIdentity */ +- char *versionString; +- +- /** What does the server tell the new clients which version it supports */ +- int protocolMajorVersion; +- int protocolMinorVersion; +- +- /** command line authorization of file transfers */ +- rfbBool permitFileTransfer; +- +- /** displayFinishedHook is called just after a frame buffer update */ +- rfbDisplayFinishedHookPtr displayFinishedHook; +- /** xvpHook is called to handle an xvp client message */ +- rfbXvpHookPtr xvpHook; +-} rfbScreenInfo, *rfbScreenInfoPtr; +- +- +-/** +- * rfbTranslateFnType is the type of translation functions. +- */ +- +-typedef void (*rfbTranslateFnType)(char *table, rfbPixelFormat *in, +- rfbPixelFormat *out, +- char *iptr, char *optr, +- int bytesBetweenInputLines, +- int width, int height); +- +- +-/* region stuff */ +- +-struct sraRegion; +-typedef struct sraRegion* sraRegionPtr; +- +-/* +- * Per-client structure. +- */ +- +-typedef void (*ClientGoneHookPtr)(struct _rfbClientRec* cl); +- +-typedef struct _rfbFileTransferData { +- int fd; +- int compressionEnabled; +- int fileSize; +- int numPackets; +- int receiving; +- int sending; +-} rfbFileTransferData; +- +- +-typedef struct _rfbStatList { +- uint32_t type; +- uint32_t sentCount; +- uint32_t bytesSent; +- uint32_t bytesSentIfRaw; +- uint32_t rcvdCount; +- uint32_t bytesRcvd; +- uint32_t bytesRcvdIfRaw; +- struct _rfbStatList *Next; +-} rfbStatList; +- +-typedef struct _rfbClientRec { +- +- /** back pointer to the screen */ +- rfbScreenInfoPtr screen; +- +- /** points to a scaled version of the screen buffer in cl->scaledScreenList */ +- rfbScreenInfoPtr scaledScreen; +- /** how did the client tell us it wanted the screen changed? Ultra style or palm style? */ +- rfbBool PalmVNC; +- +- +- /** private data. You should put any application client specific data +- * into a struct and let clientData point to it. Don't forget to +- * free the struct via clientGoneHook! +- * +- * This is useful if the IO functions have to behave client specific. +- */ +- void* clientData; +- ClientGoneHookPtr clientGoneHook; +- +- SOCKET sock; +- char *host; +- +- /* RFB protocol minor version number */ +- int protocolMajorVersion; +- int protocolMinorVersion; +- +-#ifdef LIBVNCSERVER_HAVE_LIBPTHREAD +- pthread_t client_thread; +-#endif +- /** Possible client states: */ +- enum { +- RFB_PROTOCOL_VERSION, /**< establishing protocol version */ +- RFB_SECURITY_TYPE, /**< negotiating security (RFB v.3.7) */ +- RFB_AUTHENTICATION, /**< authenticating */ +- RFB_INITIALISATION, /**< sending initialisation messages */ +- RFB_NORMAL /**< normal protocol messages */ +- } state; +- +- rfbBool reverseConnection; +- rfbBool onHold; +- rfbBool readyForSetColourMapEntries; +- rfbBool useCopyRect; +- int preferredEncoding; +- int correMaxWidth, correMaxHeight; +- +- rfbBool viewOnly; +- +- /* The following member is only used during VNC authentication */ +- uint8_t authChallenge[CHALLENGESIZE]; +- +- /* The following members represent the update needed to get the client's +- framebuffer from its present state to the current state of our +- framebuffer. +- +- If the client does not accept CopyRect encoding then the update is +- simply represented as the region of the screen which has been modified +- (modifiedRegion). +- +- If the client does accept CopyRect encoding, then the update consists of +- two parts. First we have a single copy from one region of the screen to +- another (the destination of the copy is copyRegion), and second we have +- the region of the screen which has been modified in some other way +- (modifiedRegion). +- +- Although the copy is of a single region, this region may have many +- rectangles. When sending an update, the copyRegion is always sent +- before the modifiedRegion. This is because the modifiedRegion may +- overlap parts of the screen which are in the source of the copy. +- +- In fact during normal processing, the modifiedRegion may even overlap +- the destination copyRegion. Just before an update is sent we remove +- from the copyRegion anything in the modifiedRegion. */ +- +- sraRegionPtr copyRegion; /**< the destination region of the copy */ +- int copyDX, copyDY; /**< the translation by which the copy happens */ +- +- sraRegionPtr modifiedRegion; +- +- /** As part of the FramebufferUpdateRequest, a client can express interest +- in a subrectangle of the whole framebuffer. This is stored in the +- requestedRegion member. In the normal case this is the whole +- framebuffer if the client is ready, empty if it's not. */ +- +- sraRegionPtr requestedRegion; +- +- /** The following member represents the state of the "deferred update" timer +- - when the framebuffer is modified and the client is ready, in most +- cases it is more efficient to defer sending the update by a few +- milliseconds so that several changes to the framebuffer can be combined +- into a single update. */ +- +- struct timeval startDeferring; +- struct timeval startPtrDeferring; +- int lastPtrX; +- int lastPtrY; +- int lastPtrButtons; +- +- /** translateFn points to the translation function which is used to copy +- and translate a rectangle from the framebuffer to an output buffer. */ +- +- rfbTranslateFnType translateFn; +- char *translateLookupTable; +- rfbPixelFormat format; +- +- /** +- * UPDATE_BUF_SIZE must be big enough to send at least one whole line of the +- * framebuffer. So for a max screen width of say 2K with 32-bit pixels this +- * means 8K minimum. +- */ +- +-#define UPDATE_BUF_SIZE 30000 +- +- char updateBuf[UPDATE_BUF_SIZE]; +- int ublen; +- +- /* statistics */ +- struct _rfbStatList *statEncList; +- struct _rfbStatList *statMsgList; +- int rawBytesEquivalent; +- int bytesSent; +- +-#ifdef LIBVNCSERVER_HAVE_LIBZ +- /* zlib encoding -- necessary compression state info per client */ +- +- struct z_stream_s compStream; +- rfbBool compStreamInited; +- uint32_t zlibCompressLevel; +- /** the quality level is also used by ZYWRLE */ +- int tightQualityLevel; +- +-#ifdef LIBVNCSERVER_HAVE_LIBJPEG +- /* tight encoding -- preserve zlib streams' state for each client */ +- z_stream zsStruct[4]; +- rfbBool zsActive[4]; +- int zsLevel[4]; +- int tightCompressLevel; +-#endif +-#endif +- +- /* Ultra Encoding support */ +- rfbBool compStreamInitedLZO; +- char *lzoWrkMem; +- +- rfbFileTransferData fileTransfer; +- +- int lastKeyboardLedState; /**< keep track of last value so we can send *change* events */ +- rfbBool enableSupportedMessages; /**< client supports SupportedMessages encoding */ +- rfbBool enableSupportedEncodings; /**< client supports SupportedEncodings encoding */ +- rfbBool enableServerIdentity; /**< client supports ServerIdentity encoding */ +- rfbBool enableKeyboardLedState; /**< client supports KeyboardState encoding */ +- rfbBool enableLastRectEncoding; /**< client supports LastRect encoding */ +- rfbBool enableCursorShapeUpdates; /**< client supports cursor shape updates */ +- rfbBool enableCursorPosUpdates; /**< client supports cursor position updates */ +- rfbBool useRichCursorEncoding; /**< rfbEncodingRichCursor is preferred */ +- rfbBool cursorWasChanged; /**< cursor shape update should be sent */ +- rfbBool cursorWasMoved; /**< cursor position update should be sent */ +- int cursorX,cursorY; /**< the coordinates of the cursor, +- if enableCursorShapeUpdates = FALSE */ +- +- rfbBool useNewFBSize; /**< client supports NewFBSize encoding */ +- rfbBool newFBSizePending; /**< framebuffer size was changed */ +- +- struct _rfbClientRec *prev; +- struct _rfbClientRec *next; +- +-#ifdef LIBVNCSERVER_HAVE_LIBPTHREAD +- /** whenever a client is referenced, the refCount has to be incremented +- and afterwards decremented, so that the client is not cleaned up +- while being referenced. +- Use the functions rfbIncrClientRef(cl) and rfbDecrClientRef(cl); +- */ +- int refCount; +- MUTEX(refCountMutex); +- COND(deleteCond); +- +- MUTEX(outputMutex); +- MUTEX(updateMutex); +- COND(updateCond); +-#endif +- +-#ifdef LIBVNCSERVER_HAVE_LIBZ +- void* zrleData; +- int zywrleLevel; +- int zywrleBuf[rfbZRLETileWidth * rfbZRLETileHeight]; +-#endif +- +- /** if progressive updating is on, this variable holds the current +- * y coordinate of the progressive slice. */ +- int progressiveSliceY; +- +- rfbExtensionData* extensions; +- +- /** for threaded zrle */ +- char *zrleBeforeBuf; +- void *paletteHelper; +- +- /** for thread safety for rfbSendFBUpdate() */ +-#ifdef LIBVNCSERVER_HAVE_LIBPTHREAD +-#define LIBVNCSERVER_SEND_MUTEX +- MUTEX(sendMutex); +-#endif +- +- /* buffers to hold pixel data before and after encoding. +- per-client for thread safety */ +- char *beforeEncBuf; +- int beforeEncBufSize; +- char *afterEncBuf; +- int afterEncBufSize; +- int afterEncBufLen; +-} rfbClientRec, *rfbClientPtr; +- +-/** +- * This macro is used to test whether there is a framebuffer update needing to +- * be sent to the client. +- */ +- +-#define FB_UPDATE_PENDING(cl) \ +- (((cl)->enableCursorShapeUpdates && (cl)->cursorWasChanged) || \ +- (((cl)->enableCursorShapeUpdates == FALSE && \ +- ((cl)->cursorX != (cl)->screen->cursorX || \ +- (cl)->cursorY != (cl)->screen->cursorY))) || \ +- ((cl)->useNewFBSize && (cl)->newFBSizePending) || \ +- ((cl)->enableCursorPosUpdates && (cl)->cursorWasMoved) || \ +- !sraRgnEmpty((cl)->copyRegion) || !sraRgnEmpty((cl)->modifiedRegion)) +- +-/* +- * Macros for endian swapping. +- */ +- +-#define Swap16(s) ((((s) & 0xff) << 8) | (((s) >> 8) & 0xff)) +- +-#define Swap24(l) ((((l) & 0xff) << 16) | (((l) >> 16) & 0xff) | \ +- (((l) & 0x00ff00))) +- +-#define Swap32(l) (((l) >> 24) | \ +- (((l) & 0x00ff0000) >> 8) | \ +- (((l) & 0x0000ff00) << 8) | \ +- ((l) << 24)) +- +- +-extern char rfbEndianTest; +- +-#define Swap16IfLE(s) (rfbEndianTest ? Swap16(s) : (s)) +-#define Swap24IfLE(l) (rfbEndianTest ? Swap24(l) : (l)) +-#define Swap32IfLE(l) (rfbEndianTest ? Swap32(l) : (l)) +- +-/* UltraVNC uses some windows structures unmodified, so the viewer expects LittleEndian Data */ +-#define Swap16IfBE(s) (rfbEndianTest ? (s) : Swap16(s)) +-#define Swap24IfBE(l) (rfbEndianTest ? (l) : Swap24(l)) +-#define Swap32IfBE(l) (rfbEndianTest ? (l) : Swap32(l)) +- +-/* sockets.c */ +- +-extern int rfbMaxClientWait; +- +-extern void rfbInitSockets(rfbScreenInfoPtr rfbScreen); +-extern void rfbShutdownSockets(rfbScreenInfoPtr rfbScreen); +-extern void rfbDisconnectUDPSock(rfbScreenInfoPtr rfbScreen); +-extern void rfbCloseClient(rfbClientPtr cl); +-extern int rfbReadExact(rfbClientPtr cl, char *buf, int len); +-extern int rfbReadExactTimeout(rfbClientPtr cl, char *buf, int len,int timeout); +-extern int rfbWriteExact(rfbClientPtr cl, const char *buf, int len); +-extern int rfbCheckFds(rfbScreenInfoPtr rfbScreen,long usec); +-extern int rfbConnect(rfbScreenInfoPtr rfbScreen, char* host, int port); +-extern int rfbConnectToTcpAddr(char* host, int port); +-extern int rfbListenOnTCPPort(int port, in_addr_t iface); +-extern int rfbListenOnUDPPort(int port, in_addr_t iface); +-extern int rfbStringToAddr(char* string,in_addr_t* addr); +-extern rfbBool rfbSetNonBlocking(int sock); +- +-/* rfbserver.c */ +- +-/* Routines to iterate over the client list in a thread-safe way. +- Only a single iterator can be in use at a time process-wide. */ +-typedef struct rfbClientIterator *rfbClientIteratorPtr; +- +-extern void rfbClientListInit(rfbScreenInfoPtr rfbScreen); +-extern rfbClientIteratorPtr rfbGetClientIterator(rfbScreenInfoPtr rfbScreen); +-extern rfbClientPtr rfbClientIteratorNext(rfbClientIteratorPtr iterator); +-extern void rfbReleaseClientIterator(rfbClientIteratorPtr iterator); +-extern void rfbIncrClientRef(rfbClientPtr cl); +-extern void rfbDecrClientRef(rfbClientPtr cl); +- +-extern void rfbNewClientConnection(rfbScreenInfoPtr rfbScreen,int sock); +-extern rfbClientPtr rfbNewClient(rfbScreenInfoPtr rfbScreen,int sock); +-extern rfbClientPtr rfbNewUDPClient(rfbScreenInfoPtr rfbScreen); +-extern rfbClientPtr rfbReverseConnection(rfbScreenInfoPtr rfbScreen,char *host, int port); +-extern void rfbClientConnectionGone(rfbClientPtr cl); +-extern void rfbProcessClientMessage(rfbClientPtr cl); +-extern void rfbClientConnFailed(rfbClientPtr cl, char *reason); +-extern void rfbNewUDPConnection(rfbScreenInfoPtr rfbScreen,int sock); +-extern void rfbProcessUDPInput(rfbScreenInfoPtr rfbScreen); +-extern rfbBool rfbSendFramebufferUpdate(rfbClientPtr cl, sraRegionPtr updateRegion); +-extern rfbBool rfbSendRectEncodingRaw(rfbClientPtr cl, int x,int y,int w,int h); +-extern rfbBool rfbSendUpdateBuf(rfbClientPtr cl); +-extern void rfbSendServerCutText(rfbScreenInfoPtr rfbScreen,char *str, int len); +-extern rfbBool rfbSendCopyRegion(rfbClientPtr cl,sraRegionPtr reg,int dx,int dy); +-extern rfbBool rfbSendLastRectMarker(rfbClientPtr cl); +-extern rfbBool rfbSendNewFBSize(rfbClientPtr cl, int w, int h); +-extern rfbBool rfbSendSetColourMapEntries(rfbClientPtr cl, int firstColour, int nColours); +-extern void rfbSendBell(rfbScreenInfoPtr rfbScreen); +- +-extern char *rfbProcessFileTransferReadBuffer(rfbClientPtr cl, uint32_t length); +-extern rfbBool rfbSendFileTransferChunk(rfbClientPtr cl); +-extern rfbBool rfbSendDirContent(rfbClientPtr cl, int length, char *buffer); +-extern rfbBool rfbSendFileTransferMessage(rfbClientPtr cl, uint8_t contentType, uint8_t contentParam, uint32_t size, uint32_t length, char *buffer); +-extern char *rfbProcessFileTransferReadBuffer(rfbClientPtr cl, uint32_t length); +-extern rfbBool rfbProcessFileTransfer(rfbClientPtr cl, uint8_t contentType, uint8_t contentParam, uint32_t size, uint32_t length); +- +-void rfbGotXCutText(rfbScreenInfoPtr rfbScreen, char *str, int len); +- +-/* translate.c */ +- +-extern rfbBool rfbEconomicTranslate; +- +-extern void rfbTranslateNone(char *table, rfbPixelFormat *in, +- rfbPixelFormat *out, +- char *iptr, char *optr, +- int bytesBetweenInputLines, +- int width, int height); +-extern rfbBool rfbSetTranslateFunction(rfbClientPtr cl); +-extern rfbBool rfbSetClientColourMap(rfbClientPtr cl, int firstColour, int nColours); +-extern void rfbSetClientColourMaps(rfbScreenInfoPtr rfbScreen, int firstColour, int nColours); +- +-/* httpd.c */ +- +-extern void rfbHttpInitSockets(rfbScreenInfoPtr rfbScreen); +-extern void rfbHttpShutdownSockets(rfbScreenInfoPtr rfbScreen); +-extern void rfbHttpCheckFds(rfbScreenInfoPtr rfbScreen); +- +- +- +-/* auth.c */ +- +-extern void rfbAuthNewClient(rfbClientPtr cl); +-extern void rfbProcessClientSecurityType(rfbClientPtr cl); +-extern void rfbAuthProcessClientMessage(rfbClientPtr cl); +-extern void rfbRegisterSecurityHandler(rfbSecurityHandler* handler); +-extern void rfbUnregisterSecurityHandler(rfbSecurityHandler* handler); +- +-/* rre.c */ +- +-extern rfbBool rfbSendRectEncodingRRE(rfbClientPtr cl, int x,int y,int w,int h); +- +- +-/* corre.c */ +- +-extern rfbBool rfbSendRectEncodingCoRRE(rfbClientPtr cl, int x,int y,int w,int h); +- +- +-/* hextile.c */ +- +-extern rfbBool rfbSendRectEncodingHextile(rfbClientPtr cl, int x, int y, int w, +- int h); +- +-/* ultra.c */ +- +-/* Set maximum ultra rectangle size in pixels. Always allow at least +- * two scan lines. +- */ +-#define ULTRA_MAX_RECT_SIZE (128*256) +-#define ULTRA_MAX_SIZE(min) ((( min * 2 ) > ULTRA_MAX_RECT_SIZE ) ? \ +- ( min * 2 ) : ULTRA_MAX_RECT_SIZE ) +- +-extern rfbBool rfbSendRectEncodingUltra(rfbClientPtr cl, int x,int y,int w,int h); +- +- +-#ifdef LIBVNCSERVER_HAVE_LIBZ +-/* zlib.c */ +- +-/** Minimum zlib rectangle size in bytes. Anything smaller will +- * not compress well due to overhead. +- */ +-#define VNC_ENCODE_ZLIB_MIN_COMP_SIZE (17) +- +-/* Set maximum zlib rectangle size in pixels. Always allow at least +- * two scan lines. +- */ +-#define ZLIB_MAX_RECT_SIZE (128*256) +-#define ZLIB_MAX_SIZE(min) ((( min * 2 ) > ZLIB_MAX_RECT_SIZE ) ? \ +- ( min * 2 ) : ZLIB_MAX_RECT_SIZE ) +- +-extern rfbBool rfbSendRectEncodingZlib(rfbClientPtr cl, int x, int y, int w, +- int h); +- +-#ifdef LIBVNCSERVER_HAVE_LIBJPEG +-/* tight.c */ +- +-#define TIGHT_DEFAULT_COMPRESSION 6 +- +-extern rfbBool rfbTightDisableGradient; +- +-extern int rfbNumCodedRectsTight(rfbClientPtr cl, int x,int y,int w,int h); +-extern rfbBool rfbSendRectEncodingTight(rfbClientPtr cl, int x,int y,int w,int h); +- +-#endif +-#endif +- +- +-/* cursor.c */ +- +-typedef struct rfbCursor { +- /** set this to true if LibVNCServer has to free this cursor */ +- rfbBool cleanup, cleanupSource, cleanupMask, cleanupRichSource; +- unsigned char *source; /**< points to bits */ +- unsigned char *mask; /**< points to bits */ +- unsigned short width, height, xhot, yhot; /**< metrics */ +- unsigned short foreRed, foreGreen, foreBlue; /**< device-independent colour */ +- unsigned short backRed, backGreen, backBlue; /**< device-independent colour */ +- unsigned char *richSource; /**< source bytes for a rich cursor */ +- unsigned char *alphaSource; /**< source for alpha blending info */ +- rfbBool alphaPreMultiplied; /**< if richSource already has alpha applied */ +-} rfbCursor, *rfbCursorPtr; +-extern unsigned char rfbReverseByte[0x100]; +- +-extern rfbBool rfbSendCursorShape(rfbClientPtr cl/*, rfbScreenInfoPtr pScreen*/); +-extern rfbBool rfbSendCursorPos(rfbClientPtr cl); +-extern void rfbConvertLSBCursorBitmapOrMask(int width,int height,unsigned char* bitmap); +-extern rfbCursorPtr rfbMakeXCursor(int width,int height,char* cursorString,char* maskString); +-extern char* rfbMakeMaskForXCursor(int width,int height,char* cursorString); +-extern char* rfbMakeMaskFromAlphaSource(int width,int height,unsigned char* alphaSource); +-extern void rfbMakeXCursorFromRichCursor(rfbScreenInfoPtr rfbScreen,rfbCursorPtr cursor); +-extern void rfbMakeRichCursorFromXCursor(rfbScreenInfoPtr rfbScreen,rfbCursorPtr cursor); +-extern void rfbFreeCursor(rfbCursorPtr cursor); +-extern void rfbSetCursor(rfbScreenInfoPtr rfbScreen,rfbCursorPtr c); +- +-/** cursor handling for the pointer */ +-extern void rfbDefaultPtrAddEvent(int buttonMask,int x,int y,rfbClientPtr cl); +- +-/* zrle.c */ +-#ifdef LIBVNCSERVER_HAVE_LIBZ +-extern rfbBool rfbSendRectEncodingZRLE(rfbClientPtr cl, int x, int y, int w,int h); +-#endif +- +-/* stats.c */ +- +-extern void rfbResetStats(rfbClientPtr cl); +-extern void rfbPrintStats(rfbClientPtr cl); +- +-/* font.c */ +- +-typedef struct rfbFontData { +- unsigned char* data; +- /** +- metaData is a 256*5 array: +- for each character +- (offset,width,height,x,y) +- */ +- int* metaData; +-} rfbFontData,* rfbFontDataPtr; +- +-int rfbDrawChar(rfbScreenInfoPtr rfbScreen,rfbFontDataPtr font,int x,int y,unsigned char c,rfbPixel colour); +-void rfbDrawString(rfbScreenInfoPtr rfbScreen,rfbFontDataPtr font,int x,int y,const char* string,rfbPixel colour); +-/** if colour==backColour, background is transparent */ +-int rfbDrawCharWithClip(rfbScreenInfoPtr rfbScreen,rfbFontDataPtr font,int x,int y,unsigned char c,int x1,int y1,int x2,int y2,rfbPixel colour,rfbPixel backColour); +-void rfbDrawStringWithClip(rfbScreenInfoPtr rfbScreen,rfbFontDataPtr font,int x,int y,const char* string,int x1,int y1,int x2,int y2,rfbPixel colour,rfbPixel backColour); +-int rfbWidthOfString(rfbFontDataPtr font,const char* string); +-int rfbWidthOfChar(rfbFontDataPtr font,unsigned char c); +-void rfbFontBBox(rfbFontDataPtr font,unsigned char c,int* x1,int* y1,int* x2,int* y2); +-/** this returns the smallest box enclosing any character of font. */ +-void rfbWholeFontBBox(rfbFontDataPtr font,int *x1, int *y1, int *x2, int *y2); +- +-/** dynamically load a linux console font (4096 bytes, 256 glyphs a 8x16 */ +-rfbFontDataPtr rfbLoadConsoleFont(char *filename); +-/** free a dynamically loaded font */ +-void rfbFreeFont(rfbFontDataPtr font); +- +-/* draw.c */ +- +-void rfbFillRect(rfbScreenInfoPtr s,int x1,int y1,int x2,int y2,rfbPixel col); +-void rfbDrawPixel(rfbScreenInfoPtr s,int x,int y,rfbPixel col); +-void rfbDrawLine(rfbScreenInfoPtr s,int x1,int y1,int x2,int y2,rfbPixel col); +- +-/* selbox.c */ +- +-/** this opens a modal select box. list is an array of strings, the end marked +- with a NULL. +- It returns the index in the list or -1 if cancelled or something else +- wasn't kosher. */ +-typedef void (*SelectionChangedHookPtr)(int _index); +-extern int rfbSelectBox(rfbScreenInfoPtr rfbScreen, +- rfbFontDataPtr font, char** list, +- int x1, int y1, int x2, int y2, +- rfbPixel foreColour, rfbPixel backColour, +- int border,SelectionChangedHookPtr selChangedHook); +- +-/* cargs.c */ +- +-extern void rfbUsage(void); +-extern void rfbPurgeArguments(int* argc,int* position,int count,char *argv[]); +-extern rfbBool rfbProcessArguments(rfbScreenInfoPtr rfbScreen,int* argc, char *argv[]); +-extern rfbBool rfbProcessSizeArguments(int* width,int* height,int* bpp,int* argc, char *argv[]); +- +-/* main.c */ +- +-extern void rfbLogEnable(int enabled); +-typedef void (*rfbLogProc)(const char *format, ...); +-extern rfbLogProc rfbLog, rfbErr; +-extern void rfbLogPerror(const char *str); +- +-void rfbScheduleCopyRect(rfbScreenInfoPtr rfbScreen,int x1,int y1,int x2,int y2,int dx,int dy); +-void rfbScheduleCopyRegion(rfbScreenInfoPtr rfbScreen,sraRegionPtr copyRegion,int dx,int dy); +- +-void rfbDoCopyRect(rfbScreenInfoPtr rfbScreen,int x1,int y1,int x2,int y2,int dx,int dy); +-void rfbDoCopyRegion(rfbScreenInfoPtr rfbScreen,sraRegionPtr copyRegion,int dx,int dy); +- +-void rfbMarkRectAsModified(rfbScreenInfoPtr rfbScreen,int x1,int y1,int x2,int y2); +-void rfbMarkRegionAsModified(rfbScreenInfoPtr rfbScreen,sraRegionPtr modRegion); +-void rfbDoNothingWithClient(rfbClientPtr cl); +-enum rfbNewClientAction defaultNewClientHook(rfbClientPtr cl); +-void rfbRegisterProtocolExtension(rfbProtocolExtension* extension); +-void rfbUnregisterProtocolExtension(rfbProtocolExtension* extension); +-struct _rfbProtocolExtension* rfbGetExtensionIterator(); +-void rfbReleaseExtensionIterator(); +-rfbBool rfbEnableExtension(rfbClientPtr cl, rfbProtocolExtension* extension, +- void* data); +-rfbBool rfbDisableExtension(rfbClientPtr cl, rfbProtocolExtension* extension); +-void* rfbGetExtensionClientData(rfbClientPtr cl, rfbProtocolExtension* extension); +- +-/** to check against plain passwords */ +-rfbBool rfbCheckPasswordByList(rfbClientPtr cl,const char* response,int len); +- +-/* functions to make a vnc server */ +-extern rfbScreenInfoPtr rfbGetScreen(int* argc,char** argv, +- int width,int height,int bitsPerSample,int samplesPerPixel, +- int bytesPerPixel); +-extern void rfbInitServer(rfbScreenInfoPtr rfbScreen); +-extern void rfbShutdownServer(rfbScreenInfoPtr rfbScreen,rfbBool disconnectClients); +-extern void rfbNewFramebuffer(rfbScreenInfoPtr rfbScreen,char *framebuffer, +- int width,int height, int bitsPerSample,int samplesPerPixel, +- int bytesPerPixel); +- +-extern void rfbScreenCleanup(rfbScreenInfoPtr screenInfo); +-extern void rfbSetServerVersionIdentity(rfbScreenInfoPtr screen, char *fmt, ...); +- +-/* functions to accept/refuse a client that has been put on hold +- by a NewClientHookPtr function. Must not be called in other +- situations. */ +-extern void rfbStartOnHoldClient(rfbClientPtr cl); +-extern void rfbRefuseOnHoldClient(rfbClientPtr cl); +- +-/* call one of these two functions to service the vnc clients. +- usec are the microseconds the select on the fds waits. +- if you are using the event loop, set this to some value > 0, so the +- server doesn't get a high load just by listening. +- rfbProcessEvents() returns TRUE if an update was pending. */ +- +-extern void rfbRunEventLoop(rfbScreenInfoPtr screenInfo, long usec, rfbBool runInBackground); +-extern rfbBool rfbProcessEvents(rfbScreenInfoPtr screenInfo,long usec); +-extern rfbBool rfbIsActive(rfbScreenInfoPtr screenInfo); +- +-/* TightVNC file transfer extension */ +-void rfbRegisterTightVNCFileTransferExtension(); +-void rfbUnregisterTightVNCFileTransferExtension(); +- +-/* Statistics */ +-extern char *messageNameServer2Client(uint32_t type, char *buf, int len); +-extern char *messageNameClient2Server(uint32_t type, char *buf, int len); +-extern char *encodingName(uint32_t enc, char *buf, int len); +- +-extern rfbStatList *rfbStatLookupEncoding(rfbClientPtr cl, uint32_t type); +-extern rfbStatList *rfbStatLookupMessage(rfbClientPtr cl, uint32_t type); +- +-/* Each call to rfbStatRecord* adds one to the rect count for that type */ +-extern void rfbStatRecordEncodingSent(rfbClientPtr cl, uint32_t type, int byteCount, int byteIfRaw); +-extern void rfbStatRecordEncodingSentAdd(rfbClientPtr cl, uint32_t type, int byteCount); /* Specifically for tight encoding */ +-extern void rfbStatRecordEncodingRcvd(rfbClientPtr cl, uint32_t type, int byteCount, int byteIfRaw); +-extern void rfbStatRecordMessageSent(rfbClientPtr cl, uint32_t type, int byteCount, int byteIfRaw); +-extern void rfbStatRecordMessageRcvd(rfbClientPtr cl, uint32_t type, int byteCount, int byteIfRaw); +-extern void rfbResetStats(rfbClientPtr cl); +-extern void rfbPrintStats(rfbClientPtr cl); +- +-extern int rfbStatGetSentBytes(rfbClientPtr cl); +-extern int rfbStatGetSentBytesIfRaw(rfbClientPtr cl); +-extern int rfbStatGetRcvdBytes(rfbClientPtr cl); +-extern int rfbStatGetRcvdBytesIfRaw(rfbClientPtr cl); +-extern int rfbStatGetMessageCountSent(rfbClientPtr cl, uint32_t type); +-extern int rfbStatGetMessageCountRcvd(rfbClientPtr cl, uint32_t type); +-extern int rfbStatGetEncodingCountSent(rfbClientPtr cl, uint32_t type); +-extern int rfbStatGetEncodingCountRcvd(rfbClientPtr cl, uint32_t type); +- +-/** Set which version you want to advertise 3.3, 3.6, 3.7 and 3.8 are currently supported*/ +-extern void rfbSetProtocolVersion(rfbScreenInfoPtr rfbScreen, int major_, int minor_); +- +-/** send a TextChat message to a client */ +-extern rfbBool rfbSendTextChatMessage(rfbClientPtr cl, uint32_t length, char *buffer); +- +- +- +- +-#if(defined __cplusplus) +-} +-#endif +- +-/** +- * @} +- */ +- +- +-/** +- @page libvncserver_doc LibVNCServer Documentation +- @section create_server Creating a server instance +- To make a server, you just have to initialise a server structure using the +- function rfbGetScreen(), like +- @code +- rfbScreenInfoPtr screen = +- rfbGetScreen(argc,argv,screenwidth,screenheight,8,3,bpp); +- @endcode +- where byte per pixel should be 1, 2 or 4. If performance doesn't matter, +- you may try bpp=3 (internally one cannot use native data types in this +- case; if you want to use this, look at pnmshow24.c). +- +- You then can set hooks and io functions (see @ref making_it_interactive) or other +- options (see @ref server_options). +- +- And you allocate the frame buffer like this: +- @code +- screen->frameBuffer = (char*)malloc(screenwidth*screenheight*bpp); +- @endcode +- After that, you initialize the server, like +- @code +- rfbInitServer(screen); +- @endcode +- You can use a blocking event loop, a background (pthread based) event loop, +- or implement your own using the rfbProcessEvents() function. +- +- @subsection server_options Optional Server Features +- +- These options have to be set between rfbGetScreen() and rfbInitServer(). +- +- If you already have a socket to talk to, just set rfbScreenInfo::inetdSock +- (originally this is for inetd handling, but why not use it for your purpose?). +- +- To also start an HTTP server (running on port 5800+display_number), you have +- to set rfbScreenInfo::httpDir to a directory containing vncviewer.jar and +- index.vnc (like the included "classes" directory). +- +- @section making_it_interactive Making it interactive +- +- Whenever you draw something, you have to call +- @code +- rfbMarkRectAsModified(screen,x1,y1,x2,y2). +- @endcode +- This tells LibVNCServer to send updates to all connected clients. +- +- There exist the following IO functions as members of rfbScreen: +- rfbScreenInfo::kbdAddEvent(), rfbScreenInfo::kbdReleaseAllKeys(), rfbScreenInfo::ptrAddEvent() and rfbScreenInfo::setXCutText() +- +- rfbScreenInfo::kbdAddEvent() +- is called when a key is pressed. +- rfbScreenInfo::kbdReleaseAllKeys() +- is not called at all (maybe in the future). +- rfbScreenInfo::ptrAddEvent() +- is called when the mouse moves or a button is pressed. +- WARNING: if you want to have proper cursor handling, call +- rfbDefaultPtrAddEvent() +- in your own function. This sets the coordinates of the cursor. +- rfbScreenInfo::setXCutText() +- is called when the selection changes. +- +- There are only two hooks: +- rfbScreenInfo::newClientHook() +- is called when a new client has connected. +- rfbScreenInfo::displayHook() +- is called just before a frame buffer update is sent. +- +- You can also override the following methods: +- rfbScreenInfo::getCursorPtr() +- This could be used to make an animated cursor (if you really want ...) +- rfbScreenInfo::setTranslateFunction() +- If you insist on colour maps or something more obscure, you have to +- implement this. Default is a trueColour mapping. +- +- @section cursor_handling Cursor handling +- +- The screen holds a pointer +- rfbScreenInfo::cursor +- to the current cursor. Whenever you set it, remember that any dynamically +- created cursor (like return value from rfbMakeXCursor()) is not free'd! +- +- The rfbCursor structure consists mainly of a mask and a source. The rfbCursor::mask +- describes, which pixels are drawn for the cursor (a cursor needn't be +- rectangular). The rfbCursor::source describes, which colour those pixels should have. +- +- The standard is an XCursor: a cursor with a foreground and a background +- colour (stored in backRed,backGreen,backBlue and the same for foreground +- in a range from 0-0xffff). Therefore, the arrays "mask" and "source" +- contain pixels as single bits stored in bytes in MSB order. The rows are +- padded, such that each row begins with a new byte (i.e. a 10x4 +- cursor's mask has 2x4 bytes, because 2 bytes are needed to hold 10 bits). +- +- It is however very easy to make a cursor like this: +- @code +- char* cur=" " +- " xx " +- " x " +- " "; +- char* mask="xxxx" +- "xxxx" +- "xxxx" +- "xxx "; +- rfbCursorPtr c=rfbMakeXCursor(4,4,cur,mask); +- @endcode +- You can even set rfbCursor::mask to NULL in this call and LibVNCServer will calculate +- a mask for you (dynamically, so you have to free it yourself). +- +- There is also an array named rfbCursor::richSource for colourful cursors. They have +- the same format as the frameBuffer (i.e. if the server is 32 bit, +- a 10x4 cursor has 4x10x4 bytes). +- +- @section screen_client_difference What is the difference between rfbScreenInfoPtr and rfbClientPtr? +- +- The rfbScreenInfoPtr is a pointer to a rfbScreenInfo structure, which +- holds information about the server, like pixel format, io functions, +- frame buffer etc. The rfbClientPtr is a pointer to an rfbClientRec structure, which holds +- information about a client, like pixel format, socket of the +- connection, etc. A server can have several clients, but needn't have any. So, if you +- have a server and three clients are connected, you have one instance +- of a rfbScreenInfo and three instances of rfbClientRec's. +- +- The rfbClientRec structure holds a member rfbClientRec::screen which points to the server. +- So, to access the server from the client structure, you use client->screen. +- +- To access all clients from a server be sure to use the provided iterator +- rfbGetClientIterator() +- with +- rfbClientIteratorNext() +- and +- rfbReleaseClientIterator() +- to prevent thread clashes. +- +- @section example_code Example Code +- +- There are two documented examples included: +- - example.c, a shared scribble sheet +- - pnmshow.c, a program to show PNMs (pictures) over the net. +- +- The examples are not too well documented, but easy straight forward and a +- good starting point. +- +- Try example.c: it outputs on which port it listens (default: 5900), so it is +- display 0. To view, call @code vncviewer :0 @endcode +- You should see a sheet with a gradient and "Hello World!" written on it. Try +- to paint something. Note that everytime you click, there is some bigger blot, +- whereas when you drag the mouse while clicked you draw a line. The size of the +- blot depends on the mouse button you click. Open a second vncviewer with +- the same parameters and watch it as you paint in the other window. This also +- works over internet. You just have to know either the name or the IP of your +- machine. Then it is @code vncviewer machine.where.example.runs.com:0 @endcode +- or similar for the remote client. Now you are ready to type something. Be sure +- that your mouse sits still, because everytime the mouse moves, the cursor is +- reset to the position of the pointer! If you are done with that demo, press +- the down or up arrows. If your viewer supports it, then the dimensions of the +- sheet change. Just press Escape in the viewer. Note that the server still +- runs, even if you closed both windows. When you reconnect now, everything you +- painted and wrote is still there. You can press "Page Up" for a blank page. +- +- The demo pnmshow.c is much simpler: you either provide a filename as argument +- or pipe a file through stdin. Note that the file has to be a raw pnm/ppm file, +- i.e. a truecolour graphics. Only the Escape key is implemented. This may be +- the best starting point if you want to learn how to use LibVNCServer. You +- are confronted with the fact that the bytes per pixel can only be 8, 16 or 32. +-*/ +- +-#endif +diff -urN remmina-plugins/vnc/libvncserver/rfb/rfbclient.h remmina-plugins/vnc/libvncserver/rfb/rfbclient.h +--- remmina-plugins/vnc/libvncserver/rfb/rfbclient.h 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/rfb/rfbclient.h 1970-01-01 10:00:00.000000000 +1000 +@@ -1,431 +0,0 @@ +-#ifndef RFBCLIENT_H +-#define RFBCLIENT_H +- +-/** +- * @defgroup libvncclient_api LibVNCClient API Reference +- * @{ +- */ +- +-/* +- * Copyright (C) 2000, 2001 Const Kaplinsky. All Rights Reserved. +- * Copyright (C) 2000 Tridia Corporation. All Rights Reserved. +- * Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved. +- * +- * This is free software; you can 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. +- * +- * This software 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 this software; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +- * USA. +- */ +- +-/** +- * @file rfbclient.h +- */ +- +-#include <stdio.h> +-#include <stdlib.h> +-#include <string.h> +-#include <sys/time.h> +-#include <unistd.h> +-#include <rfb/rfbproto.h> +-#include <rfb/keysym.h> +-#ifdef LIBVNCSERVER_WITH_CLIENT_TLS +-#include <gnutls/gnutls.h> +-#endif +- +-#define rfbClientSwap16IfLE(s) \ +- (*(char *)&client->endianTest ? ((((s) & 0xff) << 8) | (((s) >> 8) & 0xff)) : (s)) +- +-#define rfbClientSwap32IfLE(l) \ +- (*(char *)&client->endianTest ? ((((l) & 0xff000000) >> 24) | \ +- (((l) & 0x00ff0000) >> 8) | \ +- (((l) & 0x0000ff00) << 8) | \ +- (((l) & 0x000000ff) << 24)) : (l)) +- +-#define rfbClientSwap64IfLE(l) \ +- (*(char *)&client->endianTest ? ((((l) & 0xff00000000000000ULL) >> 56) | \ +- (((l) & 0x00ff000000000000ULL) >> 40) | \ +- (((l) & 0x0000ff0000000000ULL) >> 24) | \ +- (((l) & 0x000000ff00000000ULL) >> 8) | \ +- (((l) & 0x00000000ff000000ULL) << 8) | \ +- (((l) & 0x0000000000ff0000ULL) << 24) | \ +- (((l) & 0x000000000000ff00ULL) << 40) | \ +- (((l) & 0x00000000000000ffULL) << 56)) : (l)) +- +-#define FLASH_PORT_OFFSET 5400 +-#define LISTEN_PORT_OFFSET 5500 +-#define TUNNEL_PORT_OFFSET 5500 +-#define SERVER_PORT_OFFSET 5900 +- +-#define DEFAULT_SSH_CMD "/usr/bin/ssh" +-#define DEFAULT_TUNNEL_CMD \ +- (DEFAULT_SSH_CMD " -f -L %L:localhost:%R %H sleep 20") +-#define DEFAULT_VIA_CMD \ +- (DEFAULT_SSH_CMD " -f -L %L:%H:%R %G sleep 20") +- +-#if(defined __cplusplus) +-extern "C" +-{ +-#endif +- +-/** vncrec */ +- +-typedef struct { +- FILE* file; +- struct timeval tv; +- rfbBool readTimestamp; +- rfbBool doNotSleep; +-} rfbVNCRec; +- +-/** client data */ +- +-typedef struct rfbClientData { +- void* tag; +- void* data; +- struct rfbClientData* next; +-} rfbClientData; +- +-/** app data (belongs into rfbClient?) */ +- +-typedef struct { +- rfbBool shareDesktop; +- rfbBool viewOnly; +- +- const char* encodingsString; +- +- rfbBool useBGR233; +- int nColours; +- rfbBool forceOwnCmap; +- rfbBool forceTrueColour; +- int requestedDepth; +- +- int compressLevel; +- int qualityLevel; +- rfbBool enableJPEG; +- rfbBool useRemoteCursor; +- rfbBool palmVNC; /**< use palmvnc specific SetScale (vs ultravnc) */ +- int scaleSetting; /**< 0 means no scale set, else 1/scaleSetting */ +-} AppData; +- +-/** For GetCredentialProc callback function to return */ +-typedef union _rfbCredential +-{ +- /** X509 (VeNCrypt) */ +- struct +- { +- char *x509CACertFile; +- char *x509CACrlFile; +- char *x509ClientCertFile; +- char *x509ClientKeyFile; +- } x509Credential; +- /** Plain (VeNCrypt), MSLogon (UltraVNC) */ +- struct +- { +- char *username; +- char *password; +- } userCredential; +-} rfbCredential; +- +-#define rfbCredentialTypeX509 1 +-#define rfbCredentialTypeUser 2 +- +-struct _rfbClient; +- +-typedef void (*HandleTextChatProc)(struct _rfbClient* client, int value, char *text); +-typedef void (*HandleXvpMsgProc)(struct _rfbClient* client, uint8_t version, uint8_t opcode); +-typedef void (*HandleKeyboardLedStateProc)(struct _rfbClient* client, int value, int pad); +-typedef rfbBool (*HandleCursorPosProc)(struct _rfbClient* client, int x, int y); +-typedef void (*SoftCursorLockAreaProc)(struct _rfbClient* client, int x, int y, int w, int h); +-typedef void (*SoftCursorUnlockScreenProc)(struct _rfbClient* client); +-typedef void (*GotFrameBufferUpdateProc)(struct _rfbClient* client, int x, int y, int w, int h); +-typedef void (*FinishedFrameBufferUpdateProc)(struct _rfbClient* client); +-typedef char* (*GetPasswordProc)(struct _rfbClient* client); +-typedef rfbCredential* (*GetCredentialProc)(struct _rfbClient* client, int credentialType); +-typedef rfbBool (*MallocFrameBufferProc)(struct _rfbClient* client); +-typedef void (*GotXCutTextProc)(struct _rfbClient* client, const char *text, int textlen); +-typedef void (*BellProc)(struct _rfbClient* client); +- +-typedef void (*GotCursorShapeProc)(struct _rfbClient* client, int xhot, int yhot, int width, int height, int bytesPerPixel); +-typedef void (*GotCopyRectProc)(struct _rfbClient* client, int src_x, int src_y, int w, int h, int dest_x, int dest_y); +- +-typedef struct _rfbClient { +- uint8_t* frameBuffer; +- int width, height; +- +- int endianTest; +- +- AppData appData; +- +- const char* programName; +- char* serverHost; +- int serverPort; /**< if -1, then use file recorded by vncrec */ +- rfbBool listenSpecified; +- int listenPort, flashPort; +- +- struct { +- int x, y, w, h; +- } updateRect; +- +- /** Note that the CoRRE encoding uses this buffer and assumes it is big enough +- to hold 255 * 255 * 32 bits -> 260100 bytes. 640*480 = 307200 bytes. +- Hextile also assumes it is big enough to hold 16 * 16 * 32 bits. +- Tight encoding assumes BUFFER_SIZE is at least 16384 bytes. */ +- +-#define RFB_BUFFER_SIZE (640*480) +- char buffer[RFB_BUFFER_SIZE]; +- +- /* rfbproto.c */ +- +- int sock; +- rfbBool canUseCoRRE; +- rfbBool canUseHextile; +- char *desktopName; +- rfbPixelFormat format; +- rfbServerInitMsg si; +- +- /* sockets.c */ +-#define RFB_BUF_SIZE 8192 +- char buf[RFB_BUF_SIZE]; +- char *bufoutptr; +- int buffered; +- +- /* The zlib encoding requires expansion/decompression/deflation of the +- compressed data in the "buffer" above into another, result buffer. +- However, the size of the result buffer can be determined precisely +- based on the bitsPerPixel, height and width of the rectangle. We +- allocate this buffer one time to be the full size of the buffer. */ +- +- /* Ultra Encoding uses this buffer too */ +- +- int ultra_buffer_size; +- char *ultra_buffer; +- +- int raw_buffer_size; +- char *raw_buffer; +- +-#ifdef LIBVNCSERVER_HAVE_LIBZ +- z_stream decompStream; +- rfbBool decompStreamInited; +-#endif +- +- +-#ifdef LIBVNCSERVER_HAVE_LIBZ +- /* +- * Variables for the ``tight'' encoding implementation. +- */ +- +- /** Separate buffer for compressed data. */ +-#define ZLIB_BUFFER_SIZE 30000 +- char zlib_buffer[ZLIB_BUFFER_SIZE]; +- +- /* Four independent compression streams for zlib library. */ +- z_stream zlibStream[4]; +- rfbBool zlibStreamActive[4]; +- +- /* Filter stuff. Should be initialized by filter initialization code. */ +- rfbBool cutZeros; +- int rectWidth, rectColors; +- char tightPalette[256*4]; +- uint8_t tightPrevRow[2048*3*sizeof(uint16_t)]; +- +-#ifdef LIBVNCSERVER_HAVE_LIBJPEG +- /** JPEG decoder state. */ +- rfbBool jpegError; +- +- struct jpeg_source_mgr* jpegSrcManager; +- void* jpegBufferPtr; +- size_t jpegBufferLen; +- +-#endif +-#endif +- +- +- /* cursor.c */ +- uint8_t *rcSource, *rcMask; +- +- /** private data pointer */ +- rfbClientData* clientData; +- +- rfbVNCRec* vncRec; +- +- /* Keyboard State support (is 'Caps Lock' set on the remote display???) */ +- int KeyboardLedStateEnabled; +- int CurrentKeyboardLedState; +- +- int canHandleNewFBSize; +- +- /* hooks */ +- HandleTextChatProc HandleTextChat; +- HandleKeyboardLedStateProc HandleKeyboardLedState; +- HandleCursorPosProc HandleCursorPos; +- SoftCursorLockAreaProc SoftCursorLockArea; +- SoftCursorUnlockScreenProc SoftCursorUnlockScreen; +- GotFrameBufferUpdateProc GotFrameBufferUpdate; +- /** the pointer returned by GetPassword will be freed after use! */ +- GetPasswordProc GetPassword; +- MallocFrameBufferProc MallocFrameBuffer; +- GotXCutTextProc GotXCutText; +- BellProc Bell; +- +- GotCursorShapeProc GotCursorShape; +- GotCopyRectProc GotCopyRect; +- +- /** Which messages are supported by the server +- * This is a *guess* for most servers. +- * (If we can even detect the type of server) +- * +- * If the server supports the "rfbEncodingSupportedMessages" +- * then this will be updated when the encoding is received to +- * accurately reflect the servers capabilities. +- */ +- rfbSupportedMessages supportedMessages; +- +- /** negotiated protocol version */ +- int major, minor; +- +- /** The selected security types */ +- uint32_t authScheme, subAuthScheme; +- +-#ifdef LIBVNCSERVER_WITH_CLIENT_TLS +- /** The TLS session for Anonymous TLS and VeNCrypt */ +- gnutls_session_t tlsSession; +-#endif +- +- /** To support security types that requires user input (except VNC password +- * authentication), for example VeNCrypt and MSLogon, this callback function +- * must be set before the authentication. Otherwise, it implicates that the +- * caller application does not support it and related security types should +- * be bypassed. +- */ +- GetCredentialProc GetCredential; +- +- /** The 0-terminated security types supported by the client. +- * Set by function SetClientAuthSchemes() */ +- uint32_t *clientAuthSchemes; +- +- /** When the server is a repeater, this specifies the final destination */ +- char *destHost; +- int destPort; +- +- /** the QoS IP DSCP for this client */ +- int QoS_DSCP; +- +- /** hook to handle xvp server messages */ +- HandleXvpMsgProc HandleXvpMsg; +- +- /* listen.c */ +- int listenSock; +- +- FinishedFrameBufferUpdateProc FinishedFrameBufferUpdate; +-} rfbClient; +- +-/* cursor.c */ +- +-extern rfbBool HandleCursorShape(rfbClient* client,int xhot, int yhot, int width, int height, uint32_t enc); +- +-/* listen.c */ +- +-extern void listenForIncomingConnections(rfbClient* viewer); +-extern int listenForIncomingConnectionsNoFork(rfbClient* viewer, int usec_timeout); +- +-/* rfbproto.c */ +- +-extern rfbBool rfbEnableClientLogging; +-typedef void (*rfbClientLogProc)(const char *format, ...); +-extern rfbClientLogProc rfbClientLog,rfbClientErr; +-extern rfbBool ConnectToRFBServer(rfbClient* client,const char *hostname, int port); +-extern rfbBool ConnectToRFBRepeater(rfbClient* client,const char *repeaterHost, int repeaterPort, const char *destHost, int destPort); +-extern void SetClientAuthSchemes(rfbClient* client,const uint32_t *authSchemes, int size); +-extern rfbBool InitialiseRFBConnection(rfbClient* client); +-extern rfbBool SetFormatAndEncodings(rfbClient* client); +-extern rfbBool SendIncrementalFramebufferUpdateRequest(rfbClient* client); +-extern rfbBool SendFramebufferUpdateRequest(rfbClient* client, +- int x, int y, int w, int h, +- rfbBool incremental); +-extern rfbBool SendScaleSetting(rfbClient* client,int scaleSetting); +-extern rfbBool SendPointerEvent(rfbClient* client,int x, int y, int buttonMask); +-extern rfbBool SendKeyEvent(rfbClient* client,uint32_t key, rfbBool down); +-extern rfbBool SendClientCutText(rfbClient* client,char *str, int len); +-extern rfbBool HandleRFBServerMessage(rfbClient* client); +- +-extern rfbBool TextChatSend(rfbClient* client, char *text); +-extern rfbBool TextChatOpen(rfbClient* client); +-extern rfbBool TextChatClose(rfbClient* client); +-extern rfbBool TextChatFinish(rfbClient* client); +-extern rfbBool PermitServerInput(rfbClient* client, int enabled); +-extern rfbBool SendXvpMsg(rfbClient* client, uint8_t version, uint8_t code); +- +-extern void PrintPixelFormat(rfbPixelFormat *format); +- +-extern rfbBool SupportsClient2Server(rfbClient* client, int messageType); +-extern rfbBool SupportsServer2Client(rfbClient* client, int messageType); +- +-/* client data */ +- +-void rfbClientSetClientData(rfbClient* client, void* tag, void* data); +-void* rfbClientGetClientData(rfbClient* client, void* tag); +- +-/* protocol extensions */ +- +-typedef struct _rfbClientProtocolExtension { +- int* encodings; +- /** returns TRUE if the encoding was handled */ +- rfbBool (*handleEncoding)(rfbClient* cl, +- rfbFramebufferUpdateRectHeader* rect); +- /** returns TRUE if it handled the message */ +- rfbBool (*handleMessage)(rfbClient* cl, +- rfbServerToClientMsg* message); +- struct _rfbClientProtocolExtension* next; +-} rfbClientProtocolExtension; +- +-void rfbClientRegisterExtension(rfbClientProtocolExtension* e); +- +-/* sockets.c */ +- +-extern rfbBool errorMessageOnReadFailure; +- +-extern rfbBool ReadFromRFBServer(rfbClient* client, char *out, unsigned int n); +-extern rfbBool WriteToRFBServer(rfbClient* client, char *buf, int n); +-extern int FindFreeTcpPort(void); +-extern int ListenAtTcpPort(int port); +-extern int ConnectClientToTcpAddr(unsigned int host, int port); +-extern int ConnectClientToTcpAddr6(const char *hostname, int port); +-extern int ConnectClientToUnixSock(const char *sockFile); +-extern int AcceptTcpConnection(int listenSock); +-extern rfbBool SetNonBlocking(int sock); +-extern rfbBool SetDSCP(int sock, int dscp); +- +-extern rfbBool StringToIPAddr(const char *str, unsigned int *addr); +-extern rfbBool SameMachine(int sock); +-extern int WaitForMessage(rfbClient* client,unsigned int usecs); +- +-/* vncviewer.c */ +-rfbClient* rfbGetClient(int bitsPerSample,int samplesPerPixel,int bytesPerPixel); +-rfbBool rfbInitClient(rfbClient* client,int* argc,char** argv); +-/** rfbClientCleanup() does not touch client->frameBuffer */ +-void rfbClientCleanup(rfbClient* client); +- +-#if(defined __cplusplus) +-} +-#endif +- +-/** +- * @} +- */ +- +-/** +- @page libvncclient_doc LibVNCClient Documentation +- @section example_code Example Code +- See SDLvncviewer.c for a rather complete client example. +-*/ +- +-#endif +diff -urN remmina-plugins/vnc/libvncserver/rfb/rfbconfig.h remmina-plugins/vnc/libvncserver/rfb/rfbconfig.h +--- remmina-plugins/vnc/libvncserver/rfb/rfbconfig.h 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/rfb/rfbconfig.h 1970-01-01 10:00:00.000000000 +1000 +@@ -1,95 +0,0 @@ +-#ifndef _RFB_RFBCONFIG_H +-/* #undef _RFB_RFBCONFIG_H */ +- +-/* rfb/rfbconfig.h. Generated automatically by cmake. */ +- +-/* Enable 24 bit per pixel in native framebuffer */ +-#define LIBVNCSERVER_ALLOW24BPP 1 +- +-/* work around when write() returns ENOENT but does not mean it */ +-/* #undef LIBVNCSERVER_ENOENT_WORKAROUND */ +- +-/* Define to 1 if you have the <fcntl.h> header file. */ +-#define LIBVNCSERVER_HAVE_FCNTL_H 1 +- +-/* Define to 1 if you have the `gettimeofday' function. */ +-#define LIBVNCSERVER_HAVE_GETTIMEOFDAY 1 +- +-/* Define to 1 if you have the `jpeg' library (-ljpeg). */ +-#define LIBVNCSERVER_HAVE_LIBJPEG 1 +- +-/* Define to 1 if you have the `pthread' library (-lpthread). */ +-#define LIBVNCSERVER_HAVE_LIBPTHREAD 1 +- +-/* Define to 1 if you have the `z' library (-lz). */ +-#define LIBVNCSERVER_HAVE_LIBZ 1 +- +-/* Define to 1 if you have the <netinet/in.h> header file. */ +-#define LIBVNCSERVER_HAVE_NETINET_IN_H 1 +- +-/* Define to 1 if you have the <sys/socket.h> header file. */ +-#define LIBVNCSERVER_HAVE_SYS_SOCKET_H 1 +- +-/* Define to 1 if you have the <sys/stat.h> header file. */ +-#define LIBVNCSERVER_HAVE_SYS_STAT_H 1 +- +-/* Define to 1 if you have the <sys/time.h> header file. */ +-#define LIBVNCSERVER_HAVE_SYS_TIME_H 1 +- +-/* Define to 1 if you have the <sys/types.h> header file. */ +-#define LIBVNCSERVER_HAVE_SYS_TYPES_H 1 +- +-/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */ +-#define LIBVNCSERVER_HAVE_SYS_WAIT_H 1 +- +-/* Define to 1 if you have the <unistd.h> header file. */ +-#define LIBVNCSERVER_HAVE_UNISTD_H 1 +- +-/* Need a typedef for in_addr_t */ +-/* #undef LIBVNCSERVER_NEED_INADDR_T */ +- +-/* Define to the full name and version of this package. */ +-#define LIBVNCSERVER_PACKAGE_STRING " " +- +-/* Define to the version of this package. */ +-#define LIBVNCSERVER_PACKAGE_VERSION "" +- +-/* Define to 1 if libgcrypt is present */ +-#define LIBVNCSERVER_WITH_CLIENT_GCRYPT 1 +- +-/* Define to 1 if GnuTLS is present */ +-#define LIBVNCSERVER_WITH_CLIENT_TLS 1 +- +-/* Define to 1 if your processor stores words with the most significant byte +- first (like Motorola and SPARC, unlike Intel and VAX). */ +-/* #undef LIBVNCSERVER_WORDS_BIGENDIAN */ +- +-/* Define to empty if `const' does not conform to ANSI C. */ +-/* #undef const */ +- +-/* Define to `__inline__' or `__inline' if that's what the C compiler +- calls it, or to nothing if 'inline' is not supported under any name. */ +-//#ifndef __cplusplus +-/* #undef inline */ +-//#endif +- +-/* Define to `int' if <sys/types.h> does not define. */ +-#define HAVE_LIBVNCSERVER_PID_T 1 +-#ifndef HAVE_LIBVNCSERVER_PID_T +-typedef int pid_t; +-#endif +- +-/* The type for size_t */ +-#define HAVE_LIBVNCSERVER_SIZE_T 1 +-#ifndef HAVE_LIBVNCSERVER_SIZE_T +-typedef int size_t; +-#endif +- +-/* The type for socklen */ +-#define HAVE_LIBVNCSERVER_SOCKLEN_T 1 +-#ifndef HAVE_LIBVNCSERVER_SOCKLEN_T +-typedef int socklen_t; +-#endif +- +-/* once: _RFB_RFBCONFIG_H */ +-#endif +diff -urN remmina-plugins/vnc/libvncserver/rfb/rfbconfig.h.cmake remmina-plugins/vnc/libvncserver/rfb/rfbconfig.h.cmake +--- remmina-plugins/vnc/libvncserver/rfb/rfbconfig.h.cmake 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/rfb/rfbconfig.h.cmake 1970-01-01 10:00:00.000000000 +1000 +@@ -1,95 +0,0 @@ +-#ifndef _RFB_RFBCONFIG_H +-#cmakedefine _RFB_RFBCONFIG_H 1 +- +-/* rfb/rfbconfig.h. Generated automatically by cmake. */ +- +-/* Enable 24 bit per pixel in native framebuffer */ +-#cmakedefine LIBVNCSERVER_ALLOW24BPP 1 +- +-/* work around when write() returns ENOENT but does not mean it */ +-#cmakedefine LIBVNCSERVER_ENOENT_WORKAROUND 1 +- +-/* Define to 1 if you have the <fcntl.h> header file. */ +-#cmakedefine LIBVNCSERVER_HAVE_FCNTL_H 1 +- +-/* Define to 1 if you have the `gettimeofday' function. */ +-#cmakedefine LIBVNCSERVER_HAVE_GETTIMEOFDAY 1 +- +-/* Define to 1 if you have the `jpeg' library (-ljpeg). */ +-#cmakedefine LIBVNCSERVER_HAVE_LIBJPEG 1 +- +-/* Define to 1 if you have the `pthread' library (-lpthread). */ +-#cmakedefine LIBVNCSERVER_HAVE_LIBPTHREAD 1 +- +-/* Define to 1 if you have the `z' library (-lz). */ +-#cmakedefine LIBVNCSERVER_HAVE_LIBZ 1 +- +-/* Define to 1 if you have the <netinet/in.h> header file. */ +-#cmakedefine LIBVNCSERVER_HAVE_NETINET_IN_H 1 +- +-/* Define to 1 if you have the <sys/socket.h> header file. */ +-#cmakedefine LIBVNCSERVER_HAVE_SYS_SOCKET_H 1 +- +-/* Define to 1 if you have the <sys/stat.h> header file. */ +-#cmakedefine LIBVNCSERVER_HAVE_SYS_STAT_H 1 +- +-/* Define to 1 if you have the <sys/time.h> header file. */ +-#cmakedefine LIBVNCSERVER_HAVE_SYS_TIME_H 1 +- +-/* Define to 1 if you have the <sys/types.h> header file. */ +-#cmakedefine LIBVNCSERVER_HAVE_SYS_TYPES_H 1 +- +-/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */ +-#cmakedefine LIBVNCSERVER_HAVE_SYS_WAIT_H 1 +- +-/* Define to 1 if you have the <unistd.h> header file. */ +-#cmakedefine LIBVNCSERVER_HAVE_UNISTD_H 1 +- +-/* Need a typedef for in_addr_t */ +-#cmakedefine LIBVNCSERVER_NEED_INADDR_T 1 +- +-/* Define to the full name and version of this package. */ +-#define LIBVNCSERVER_PACKAGE_STRING "@FULL_PACKAGE_NAME@ @PACKAGE_VERSION@" +- +-/* Define to the version of this package. */ +-#define LIBVNCSERVER_PACKAGE_VERSION "@PACKAGE_VERSION@" +- +-/* Define to 1 if libgcrypt is present */ +-#cmakedefine LIBVNCSERVER_WITH_CLIENT_GCRYPT 1 +- +-/* Define to 1 if GnuTLS is present */ +-#cmakedefine LIBVNCSERVER_WITH_CLIENT_TLS 1 +- +-/* Define to 1 if your processor stores words with the most significant byte +- first (like Motorola and SPARC, unlike Intel and VAX). */ +-#cmakedefine LIBVNCSERVER_WORDS_BIGENDIAN 1 +- +-/* Define to empty if `const' does not conform to ANSI C. */ +-//#cmakedefine const @CMAKE_CONST@ +- +-/* Define to `__inline__' or `__inline' if that's what the C compiler +- calls it, or to nothing if 'inline' is not supported under any name. */ +-//#ifndef __cplusplus +-//#cmakedefine inline @CMAKE_INLINE@ +-//#endif +- +-/* Define to `int' if <sys/types.h> does not define. */ +-#cmakedefine HAVE_LIBVNCSERVER_PID_T 1 +-#ifndef HAVE_LIBVNCSERVER_PID_T +-typedef int pid_t; +-#endif +- +-/* The type for size_t */ +-#cmakedefine HAVE_LIBVNCSERVER_SIZE_T 1 +-#ifndef HAVE_LIBVNCSERVER_SIZE_T +-typedef int size_t; +-#endif +- +-/* The type for socklen */ +-#cmakedefine HAVE_LIBVNCSERVER_SOCKLEN_T 1 +-#ifndef HAVE_LIBVNCSERVER_SOCKLEN_T +-typedef int socklen_t; +-#endif +- +-/* once: _RFB_RFBCONFIG_H */ +-#endif +diff -urN remmina-plugins/vnc/libvncserver/rfb/rfbint.h.cmake remmina-plugins/vnc/libvncserver/rfb/rfbint.h.cmake +--- remmina-plugins/vnc/libvncserver/rfb/rfbint.h.cmake 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/rfb/rfbint.h.cmake 1970-01-01 10:00:00.000000000 +1000 +@@ -1,4 +0,0 @@ +-#ifndef _RFB_RFBINT_H +-#define _RFB_RFBINT_H 1 +-/* empty ... */ +-#endif +diff -urN remmina-plugins/vnc/libvncserver/rfb/rfbproto.h remmina-plugins/vnc/libvncserver/rfb/rfbproto.h +--- remmina-plugins/vnc/libvncserver/rfb/rfbproto.h 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/rfb/rfbproto.h 1970-01-01 10:00:00.000000000 +1000 +@@ -1,1431 +0,0 @@ +-#ifndef RFBPROTO_H +-#define RFBPROTO_H +- +-/** +- @mainpage +- @li @ref libvncserver_api +- @li @ref libvncserver_doc +- +- +- @li @ref libvncclient_api +- @li @ref libvncclient_doc +- +-*/ +- +-/* +- * Copyright (C) 2005 Rohit Kumar, Johannes E. Schindelin +- * Copyright (C) 2000-2002 Constantin Kaplinsky. All Rights Reserved. +- * Copyright (C) 2000 Tridia Corporation. All Rights Reserved. +- * Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved. +- * +- * This is free software; you can 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. +- * +- * This software 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 this software; if not, write to the Free Software +- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +- * USA. +- */ +- +-/* +- * rfbproto.h - header file for the RFB protocol version 3.3 +- * +- * Uses types CARD<n> for an n-bit unsigned integer, INT<n> for an n-bit signed +- * integer (for n = 8, 16 and 32). +- * +- * All multiple byte integers are in big endian (network) order (most +- * significant byte first). Unless noted otherwise there is no special +- * alignment of protocol structures. +- * +- * +- * Once the initial handshaking is done, all messages start with a type byte, +- * (usually) followed by message-specific data. The order of definitions in +- * this file is as follows: +- * +- * (1) Structures used in several types of message. +- * (2) Structures used in the initial handshaking. +- * (3) Message types. +- * (4) Encoding types. +- * (5) For each message type, the form of the data following the type byte. +- * Sometimes this is defined by a single structure but the more complex +- * messages have to be explained by comments. +- */ +- +- +-#if defined(WIN32) && !defined(__MINGW32__) +-#define LIBVNCSERVER_WORDS_BIGENDIAN +-#define rfbBool int +-#include <sys/timeb.h> +-#include <winsock.h> +-#undef SOCKET +-#define SOCKET int +-#else +-#include <rfb/rfbconfig.h> +-#include <rfb/rfbint.h> +-#endif +- +-#ifdef LIBVNCSERVER_HAVE_LIBZ +-#include <zlib.h> +-#ifdef __CHECKER__ +-#undef Z_NULL +-#define Z_NULL NULL +-#endif +-#endif +- +-/* some autotool versions do not properly prefix +- WORDS_BIGENDIAN, so do that manually */ +-#ifdef WORDS_BIGENDIAN +-#define LIBVNCSERVER_WORDS_BIGENDIAN +-#endif +- +-/* MS compilers don't have strncasecmp */ +-#ifdef _MSC_VER +-#define strncasecmp _strnicmp +-#endif +- +-#if !defined(WIN32) || defined(__MINGW32__) +-#define max(a,b) (((a)>(b))?(a):(b)) +-#ifdef LIBVNCSERVER_HAVE_SYS_TIME_H +-#include <sys/time.h> +-#endif +-#ifdef LIBVNCSERVER_HAVE_NETINET_IN_H +-#include <netinet/in.h> +-#endif +-#define SOCKET int +-typedef int8_t rfbBool; +-#undef FALSE +-#define FALSE 0 +-#undef TRUE +-#define TRUE -1 +-#endif +- +-typedef uint32_t rfbKeySym; +-typedef uint32_t rfbPixel; +- +-#ifdef LIBVNCSERVER_NEED_INADDR_T +-typedef uint32_t in_addr_t; +-#endif +- +-#ifndef INADDR_NONE +-#define INADDR_NONE ((in_addr_t) 0xffffffff) +-#endif +- +-#define MAX_ENCODINGS 21 +- +-/***************************************************************************** +- * +- * Structures used in several messages +- * +- *****************************************************************************/ +- +-/*----------------------------------------------------------------------------- +- * Structure used to specify a rectangle. This structure is a multiple of 4 +- * bytes so that it can be interspersed with 32-bit pixel data without +- * affecting alignment. +- */ +- +-typedef struct { +- uint16_t x; +- uint16_t y; +- uint16_t w; +- uint16_t h; +-} rfbRectangle; +- +-#define sz_rfbRectangle 8 +- +- +-/*----------------------------------------------------------------------------- +- * Structure used to specify pixel format. +- */ +- +-typedef struct { +- +- uint8_t bitsPerPixel; /* 8,16,32 only */ +- +- uint8_t depth; /* 8 to 32 */ +- +- uint8_t bigEndian; /* True if multi-byte pixels are interpreted +- as big endian, or if single-bit-per-pixel +- has most significant bit of the byte +- corresponding to first (leftmost) pixel. Of +- course this is meaningless for 8 bits/pix */ +- +- uint8_t trueColour; /* If false then we need a "colour map" to +- convert pixels to RGB. If true, xxxMax and +- xxxShift specify bits used for red, green +- and blue */ +- +- /* the following fields are only meaningful if trueColour is true */ +- +- uint16_t redMax; /* maximum red value (= 2^n - 1 where n is the +- number of bits used for red). Note this +- value is always in big endian order. */ +- +- uint16_t greenMax; /* similar for green */ +- +- uint16_t blueMax; /* and blue */ +- +- uint8_t redShift; /* number of shifts needed to get the red +- value in a pixel to the least significant +- bit. To find the red value from a given +- pixel, do the following: +- 1) Swap pixel value according to bigEndian +- (e.g. if bigEndian is false and host byte +- order is big endian, then swap). +- 2) Shift right by redShift. +- 3) AND with redMax (in host byte order). +- 4) You now have the red value between 0 and +- redMax. */ +- +- uint8_t greenShift; /* similar for green */ +- +- uint8_t blueShift; /* and blue */ +- +- uint8_t pad1; +- uint16_t pad2; +- +-} rfbPixelFormat; +- +-#define sz_rfbPixelFormat 16 +- +-/* UltraVNC: Color settings values */ +-#define rfbPFFullColors 0 +-#define rfbPF256Colors 1 +-#define rfbPF64Colors 2 +-#define rfbPF8Colors 3 +-#define rfbPF8GreyColors 4 +-#define rfbPF4GreyColors 5 +-#define rfbPF2GreyColors 6 +- +- +-/***************************************************************************** +- * +- * Initial handshaking messages +- * +- *****************************************************************************/ +- +-/*----------------------------------------------------------------------------- +- * Protocol Version +- * +- * The server always sends 12 bytes to start which identifies the latest RFB +- * protocol version number which it supports. These bytes are interpreted +- * as a string of 12 ASCII characters in the format "RFB xxx.yyy\n" where +- * xxx and yyy are the major and minor version numbers (for version 3.3 +- * this is "RFB 003.003\n"). +- * +- * The client then replies with a similar 12-byte message giving the version +- * number of the protocol which should actually be used (which may be different +- * to that quoted by the server). +- * +- * It is intended that both clients and servers may provide some level of +- * backwards compatibility by this mechanism. Servers in particular should +- * attempt to provide backwards compatibility, and even forwards compatibility +- * to some extent. For example if a client demands version 3.1 of the +- * protocol, a 3.0 server can probably assume that by ignoring requests for +- * encoding types it doesn't understand, everything will still work OK. This +- * will probably not be the case for changes in the major version number. +- * +- * The format string below can be used in sprintf or sscanf to generate or +- * decode the version string respectively. +- */ +- +-#define rfbProtocolVersionFormat "RFB %03d.%03d\n" +-#define rfbProtocolMajorVersion 3 +-#define rfbProtocolMinorVersion 8 +-/* UltraVNC Viewer examines rfbProtocolMinorVersion number (4, and 6) +- * to identify if the server supports File Transfer +- */ +- +-typedef char rfbProtocolVersionMsg[13]; /* allow extra byte for null */ +- +-#define sz_rfbProtocolVersionMsg 12 +- +-/* +- * Negotiation of the security type (protocol version 3.7) +- * +- * Once the protocol version has been decided, the server either sends a list +- * of supported security types, or informs the client about an error (when the +- * number of security types is 0). Security type rfbSecTypeTight is used to +- * enable TightVNC-specific protocol extensions. The value rfbSecTypeVncAuth +- * stands for classic VNC authentication. +- * +- * The client selects a particular security type from the list provided by the +- * server. +- */ +- +-#define rfbSecTypeInvalid 0 +-#define rfbSecTypeNone 1 +-#define rfbSecTypeVncAuth 2 +- +- +-/*----------------------------------------------------------------------------- +- * Authentication +- * +- * Once the protocol version has been decided, the server then sends a 32-bit +- * word indicating whether any authentication is needed on the connection. +- * The value of this word determines the authentication scheme in use. For +- * version 3.0 of the protocol this may have one of the following values: +- */ +- +-#define rfbConnFailed 0 +-#define rfbNoAuth 1 +-#define rfbVncAuth 2 +- +-#define rfbRA2 5 +-#define rfbRA2ne 6 +-#define rfbSSPI 7 +-#define rfbSSPIne 8 +-#define rfbTight 16 +-#define rfbUltra 17 +-#define rfbTLS 18 +-#define rfbVeNCrypt 19 +-#define rfbARD 30 +-#define rfbMSLogon 0xfffffffa +- +-#define rfbVeNCryptPlain 256 +-#define rfbVeNCryptTLSNone 257 +-#define rfbVeNCryptTLSVNC 258 +-#define rfbVeNCryptTLSPlain 259 +-#define rfbVeNCryptX509None 260 +-#define rfbVeNCryptX509VNC 261 +-#define rfbVeNCryptX509Plain 262 +-#define rfbVeNCryptX509SASL 263 +-#define rfbVeNCryptTLSSASL 264 +- +-/* +- * rfbConnFailed: For some reason the connection failed (e.g. the server +- * cannot support the desired protocol version). This is +- * followed by a string describing the reason (where a +- * string is specified as a 32-bit length followed by that +- * many ASCII characters). +- * +- * rfbNoAuth: No authentication is needed. +- * +- * rfbVncAuth: The VNC authentication scheme is to be used. A 16-byte +- * challenge follows, which the client encrypts as +- * appropriate using the password and sends the resulting +- * 16-byte response. If the response is correct, the +- * server sends the 32-bit word rfbVncAuthOK. If a simple +- * failure happens, the server sends rfbVncAuthFailed and +- * closes the connection. If the server decides that too +- * many failures have occurred, it sends rfbVncAuthTooMany +- * and closes the connection. In the latter case, the +- * server should not allow an immediate reconnection by +- * the client. +- */ +- +-#define rfbVncAuthOK 0 +-#define rfbVncAuthFailed 1 +-#define rfbVncAuthTooMany 2 +- +- +-/*----------------------------------------------------------------------------- +- * Client Initialisation Message +- * +- * Once the client and server are sure that they're happy to talk to one +- * another, the client sends an initialisation message. At present this +- * message only consists of a boolean indicating whether the server should try +- * to share the desktop by leaving other clients connected, or give exclusive +- * access to this client by disconnecting all other clients. +- */ +- +-typedef struct { +- uint8_t shared; +-} rfbClientInitMsg; +- +-#define sz_rfbClientInitMsg 1 +- +- +-/*----------------------------------------------------------------------------- +- * Server Initialisation Message +- * +- * After the client initialisation message, the server sends one of its own. +- * This tells the client the width and height of the server's framebuffer, +- * its pixel format and the name associated with the desktop. +- */ +- +-typedef struct { +- uint16_t framebufferWidth; +- uint16_t framebufferHeight; +- rfbPixelFormat format; /* the server's preferred pixel format */ +- uint32_t nameLength; +- /* followed by char name[nameLength] */ +-} rfbServerInitMsg; +- +-#define sz_rfbServerInitMsg (8 + sz_rfbPixelFormat) +- +- +-/* +- * Following the server initialisation message it's up to the client to send +- * whichever protocol messages it wants. Typically it will send a +- * SetPixelFormat message and a SetEncodings message, followed by a +- * FramebufferUpdateRequest. From then on the server will send +- * FramebufferUpdate messages in response to the client's +- * FramebufferUpdateRequest messages. The client should send +- * FramebufferUpdateRequest messages with incremental set to true when it has +- * finished processing one FramebufferUpdate and is ready to process another. +- * With a fast client, the rate at which FramebufferUpdateRequests are sent +- * should be regulated to avoid hogging the network. +- */ +- +- +- +-/***************************************************************************** +- * +- * Message types +- * +- *****************************************************************************/ +- +-/* server -> client */ +- +-#define rfbFramebufferUpdate 0 +-#define rfbSetColourMapEntries 1 +-#define rfbBell 2 +-#define rfbServerCutText 3 +-/* Modif sf@2002 */ +-#define rfbResizeFrameBuffer 4 +-#define rfbPalmVNCReSizeFrameBuffer 0xF +- +-/* client -> server */ +- +-#define rfbSetPixelFormat 0 +-#define rfbFixColourMapEntries 1 /* not currently supported */ +-#define rfbSetEncodings 2 +-#define rfbFramebufferUpdateRequest 3 +-#define rfbKeyEvent 4 +-#define rfbPointerEvent 5 +-#define rfbClientCutText 6 +-/* Modif sf@2002 - actually bidirectionnal */ +-#define rfbFileTransfer 7 +-/* Modif sf@2002 */ +-#define rfbSetScale 8 +-/* Modif rdv@2002 */ +-#define rfbSetServerInput 9 +-/* Modif rdv@2002 */ +-#define rfbSetSW 10 +-/* Modif sf@2002 - TextChat - Bidirectionnal */ +-#define rfbTextChat 11 +-/* Modif cs@2005 */ +-/* PalmVNC 1.4 & 2.0 SetScale Factor message */ +-#define rfbPalmVNCSetScaleFactor 0xF +-/* Xvp message - bidirectional */ +-#define rfbXvp 250 +- +- +- +- +-/***************************************************************************** +- * +- * Encoding types +- * +- *****************************************************************************/ +- +-#define rfbEncodingRaw 0 +-#define rfbEncodingCopyRect 1 +-#define rfbEncodingRRE 2 +-#define rfbEncodingCoRRE 4 +-#define rfbEncodingHextile 5 +-#define rfbEncodingZlib 6 +-#define rfbEncodingTight 7 +-#define rfbEncodingZlibHex 8 +-#define rfbEncodingUltra 9 +-#define rfbEncodingZRLE 16 +-#define rfbEncodingZYWRLE 17 +- +-/* Cache & XOR-Zlib - rdv@2002 */ +-#define rfbEncodingCache 0xFFFF0000 +-#define rfbEncodingCacheEnable 0xFFFF0001 +-#define rfbEncodingXOR_Zlib 0xFFFF0002 +-#define rfbEncodingXORMonoColor_Zlib 0xFFFF0003 +-#define rfbEncodingXORMultiColor_Zlib 0xFFFF0004 +-#define rfbEncodingSolidColor 0xFFFF0005 +-#define rfbEncodingXOREnable 0xFFFF0006 +-#define rfbEncodingCacheZip 0xFFFF0007 +-#define rfbEncodingSolMonoZip 0xFFFF0008 +-#define rfbEncodingUltraZip 0xFFFF0009 +- +-/* Xvp pseudo-encoding */ +-#define rfbEncodingXvp 0xFFFFFECB +- +-/* +- * Special encoding numbers: +- * 0xFFFFFF00 .. 0xFFFFFF0F -- encoding-specific compression levels; +- * 0xFFFFFF10 .. 0xFFFFFF1F -- mouse cursor shape data; +- * 0xFFFFFF20 .. 0xFFFFFF2F -- various protocol extensions; +- * 0xFFFFFF30 .. 0xFFFFFFDF -- not allocated yet; +- * 0xFFFFFFE0 .. 0xFFFFFFEF -- quality level for JPEG compressor; +- * 0xFFFFFFF0 .. 0xFFFFFFFF -- cross-encoding compression levels. +- */ +- +-#define rfbEncodingCompressLevel0 0xFFFFFF00 +-#define rfbEncodingCompressLevel1 0xFFFFFF01 +-#define rfbEncodingCompressLevel2 0xFFFFFF02 +-#define rfbEncodingCompressLevel3 0xFFFFFF03 +-#define rfbEncodingCompressLevel4 0xFFFFFF04 +-#define rfbEncodingCompressLevel5 0xFFFFFF05 +-#define rfbEncodingCompressLevel6 0xFFFFFF06 +-#define rfbEncodingCompressLevel7 0xFFFFFF07 +-#define rfbEncodingCompressLevel8 0xFFFFFF08 +-#define rfbEncodingCompressLevel9 0xFFFFFF09 +- +-#define rfbEncodingXCursor 0xFFFFFF10 +-#define rfbEncodingRichCursor 0xFFFFFF11 +-#define rfbEncodingPointerPos 0xFFFFFF18 +- +-#define rfbEncodingLastRect 0xFFFFFF20 +-#define rfbEncodingNewFBSize 0xFFFFFF21 +- +-#define rfbEncodingQualityLevel0 0xFFFFFFE0 +-#define rfbEncodingQualityLevel1 0xFFFFFFE1 +-#define rfbEncodingQualityLevel2 0xFFFFFFE2 +-#define rfbEncodingQualityLevel3 0xFFFFFFE3 +-#define rfbEncodingQualityLevel4 0xFFFFFFE4 +-#define rfbEncodingQualityLevel5 0xFFFFFFE5 +-#define rfbEncodingQualityLevel6 0xFFFFFFE6 +-#define rfbEncodingQualityLevel7 0xFFFFFFE7 +-#define rfbEncodingQualityLevel8 0xFFFFFFE8 +-#define rfbEncodingQualityLevel9 0xFFFFFFE9 +- +- +-/* LibVNCServer additions. We claim 0xFFFE0000 - 0xFFFE00FF */ +-#define rfbEncodingKeyboardLedState 0xFFFE0000 +-#define rfbEncodingSupportedMessages 0xFFFE0001 +-#define rfbEncodingSupportedEncodings 0xFFFE0002 +-#define rfbEncodingServerIdentity 0xFFFE0003 +- +- +-/***************************************************************************** +- * +- * Server -> client message definitions +- * +- *****************************************************************************/ +- +- +-/*----------------------------------------------------------------------------- +- * FramebufferUpdate - a block of rectangles to be copied to the framebuffer. +- * +- * This message consists of a header giving the number of rectangles of pixel +- * data followed by the rectangles themselves. The header is padded so that +- * together with the type byte it is an exact multiple of 4 bytes (to help +- * with alignment of 32-bit pixels): +- */ +- +-typedef struct { +- uint8_t type; /* always rfbFramebufferUpdate */ +- uint8_t pad; +- uint16_t nRects; +- /* followed by nRects rectangles */ +-} rfbFramebufferUpdateMsg; +- +-#define sz_rfbFramebufferUpdateMsg 4 +- +-/* +- * Each rectangle of pixel data consists of a header describing the position +- * and size of the rectangle and a type word describing the encoding of the +- * pixel data, followed finally by the pixel data. Note that if the client has +- * not sent a SetEncodings message then it will only receive raw pixel data. +- * Also note again that this structure is a multiple of 4 bytes. +- */ +- +-typedef struct { +- rfbRectangle r; +- uint32_t encoding; /* one of the encoding types rfbEncoding... */ +-} rfbFramebufferUpdateRectHeader; +- +-#define sz_rfbFramebufferUpdateRectHeader (sz_rfbRectangle + 4) +- +-/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +- * Supported Messages Encoding. This encoding does not contain any pixel data. +- * Instead, it contains 2 sets of bitflags. These bitflags indicate what messages +- * are supported by the server. +- * rect->w contains byte count +- */ +- +-typedef struct { +- uint8_t client2server[32]; /* maximum of 256 message types (256/8)=32 */ +- uint8_t server2client[32]; /* maximum of 256 message types (256/8)=32 */ +-} rfbSupportedMessages; +- +-#define sz_rfbSupportedMessages 64 +- +-/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +- * Supported Encodings Encoding. This encoding does not contain any pixel data. +- * Instead, it contains a list of (uint32_t) Encodings supported by this server. +- * rect->w contains byte count +- * rect->h contains encoding count +- */ +- +-/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +- * Server Identity Encoding. This encoding does not contain any pixel data. +- * Instead, it contains a text string containing information about the server. +- * ie: "x11vnc: 0.8.1 lastmod: 2006-04-25 (libvncserver 0.9pre)\0" +- * rect->w contains byte count +- */ +- +- +-/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +- * Raw Encoding. Pixels are sent in top-to-bottom scanline order, +- * left-to-right within a scanline with no padding in between. +- */ +- +-/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +- * KeyboardLedState Encoding. The X coordinate contains the Locked Modifiers +- * so that a remote troubleshooter can identify that the users 'Caps Lock' +- * is set... (It helps a *lot* when the users are untrained) +- */ +-#define rfbKeyboardMaskShift 1 +-#define rfbKeyboardMaskCapsLock 2 +-#define rfbKeyboardMaskControl 4 +-#define rfbKeyboardMaskAlt 8 +-#define rfbKeyboardMaskMeta 16 +-#define rfbKeyboardMaskSuper 32 +-#define rfbKeyboardMaskHyper 64 +-#define rfbKeyboardMaskNumLock 128 +-#define rfbKeyboardMaskScrollLock 256 +-#define rfbKeyboardMaskAltGraph 512 +- +-/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +- * CopyRect Encoding. The pixels are specified simply by the x and y position +- * of the source rectangle. +- */ +- +-typedef struct { +- uint16_t srcX; +- uint16_t srcY; +-} rfbCopyRect; +- +-#define sz_rfbCopyRect 4 +- +- +-/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +- * RRE - Rise-and-Run-length Encoding. We have an rfbRREHeader structure +- * giving the number of subrectangles following. Finally the data follows in +- * the form [<bgpixel><subrect><subrect>...] where each <subrect> is +- * [<pixel><rfbRectangle>]. +- */ +- +-typedef struct { +- uint32_t nSubrects; +-} rfbRREHeader; +- +-#define sz_rfbRREHeader 4 +- +- +-/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +- * CoRRE - Compact RRE Encoding. We have an rfbRREHeader structure giving +- * the number of subrectangles following. Finally the data follows in the form +- * [<bgpixel><subrect><subrect>...] where each <subrect> is +- * [<pixel><rfbCoRRERectangle>]. This means that +- * the whole rectangle must be at most 255x255 pixels. +- */ +- +-typedef struct { +- uint8_t x; +- uint8_t y; +- uint8_t w; +- uint8_t h; +-} rfbCoRRERectangle; +- +-#define sz_rfbCoRRERectangle 4 +- +- +-/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +- * Hextile Encoding. The rectangle is divided up into "tiles" of 16x16 pixels, +- * starting at the top left going in left-to-right, top-to-bottom order. If +- * the width of the rectangle is not an exact multiple of 16 then the width of +- * the last tile in each row will be correspondingly smaller. Similarly if the +- * height is not an exact multiple of 16 then the height of each tile in the +- * final row will also be smaller. Each tile begins with a "subencoding" type +- * byte, which is a mask made up of a number of bits. If the Raw bit is set +- * then the other bits are irrelevant; w*h pixel values follow (where w and h +- * are the width and height of the tile). Otherwise the tile is encoded in a +- * similar way to RRE, except that the position and size of each subrectangle +- * can be specified in just two bytes. The other bits in the mask are as +- * follows: +- * +- * BackgroundSpecified - if set, a pixel value follows which specifies +- * the background colour for this tile. The first non-raw tile in a +- * rectangle must have this bit set. If this bit isn't set then the +- * background is the same as the last tile. +- * +- * ForegroundSpecified - if set, a pixel value follows which specifies +- * the foreground colour to be used for all subrectangles in this tile. +- * If this bit is set then the SubrectsColoured bit must be zero. +- * +- * AnySubrects - if set, a single byte follows giving the number of +- * subrectangles following. If not set, there are no subrectangles (i.e. +- * the whole tile is just solid background colour). +- * +- * SubrectsColoured - if set then each subrectangle is preceded by a pixel +- * value giving the colour of that subrectangle. If not set, all +- * subrectangles are the same colour, the foreground colour; if the +- * ForegroundSpecified bit wasn't set then the foreground is the same as +- * the last tile. +- * +- * The position and size of each subrectangle is specified in two bytes. The +- * Pack macros below can be used to generate the two bytes from x, y, w, h, +- * and the Extract macros can be used to extract the x, y, w, h values from +- * the two bytes. +- */ +- +-#define rfbHextileRaw (1 << 0) +-#define rfbHextileBackgroundSpecified (1 << 1) +-#define rfbHextileForegroundSpecified (1 << 2) +-#define rfbHextileAnySubrects (1 << 3) +-#define rfbHextileSubrectsColoured (1 << 4) +- +-#define rfbHextilePackXY(x,y) (((x) << 4) | (y)) +-#define rfbHextilePackWH(w,h) ((((w)-1) << 4) | ((h)-1)) +-#define rfbHextileExtractX(byte) ((byte) >> 4) +-#define rfbHextileExtractY(byte) ((byte) & 0xf) +-#define rfbHextileExtractW(byte) (((byte) >> 4) + 1) +-#define rfbHextileExtractH(byte) (((byte) & 0xf) + 1) +- +-/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +- * zlib - zlib compressed Encoding. We have an rfbZlibHeader structure +- * giving the number of bytes following. Finally the data follows is +- * zlib compressed version of the raw pixel data as negotiated. +- * (NOTE: also used by Ultra Encoding) +- */ +- +-typedef struct { +- uint32_t nBytes; +-} rfbZlibHeader; +- +-#define sz_rfbZlibHeader 4 +- +-#ifdef LIBVNCSERVER_HAVE_LIBZ +- +-/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +- * Tight Encoding. +- * +- *-- The first byte of each Tight-encoded rectangle is a "compression control +- * byte". Its format is as follows (bit 0 is the least significant one): +- * +- * bit 0: if 1, then compression stream 0 should be reset; +- * bit 1: if 1, then compression stream 1 should be reset; +- * bit 2: if 1, then compression stream 2 should be reset; +- * bit 3: if 1, then compression stream 3 should be reset; +- * bits 7-4: if 1000 (0x08), then the compression type is "fill", +- * if 1001 (0x09), then the compression type is "jpeg", +- * if 0xxx, then the compression type is "basic", +- * values greater than 1001 are not valid. +- * +- * If the compression type is "basic", then bits 6..4 of the +- * compression control byte (those xxx in 0xxx) specify the following: +- * +- * bits 5-4: decimal representation is the index of a particular zlib +- * stream which should be used for decompressing the data; +- * bit 6: if 1, then a "filter id" byte is following this byte. +- * +- *-- The data that follows after the compression control byte described +- * above depends on the compression type ("fill", "jpeg" or "basic"). +- * +- *-- If the compression type is "fill", then the only pixel value follows, in +- * client pixel format (see NOTE 1). This value applies to all pixels of the +- * rectangle. +- * +- *-- If the compression type is "jpeg", the following data stream looks like +- * this: +- * +- * 1..3 bytes: data size (N) in compact representation; +- * N bytes: JPEG image. +- * +- * Data size is compactly represented in one, two or three bytes, according +- * to the following scheme: +- * +- * 0xxxxxxx (for values 0..127) +- * 1xxxxxxx 0yyyyyyy (for values 128..16383) +- * 1xxxxxxx 1yyyyyyy zzzzzzzz (for values 16384..4194303) +- * +- * Here each character denotes one bit, xxxxxxx are the least significant 7 +- * bits of the value (bits 0-6), yyyyyyy are bits 7-13, and zzzzzzzz are the +- * most significant 8 bits (bits 14-21). For example, decimal value 10000 +- * should be represented as two bytes: binary 10010000 01001110, or +- * hexadecimal 90 4E. +- * +- *-- If the compression type is "basic" and bit 6 of the compression control +- * byte was set to 1, then the next (second) byte specifies "filter id" which +- * tells the decoder what filter type was used by the encoder to pre-process +- * pixel data before the compression. The "filter id" byte can be one of the +- * following: +- * +- * 0: no filter ("copy" filter); +- * 1: "palette" filter; +- * 2: "gradient" filter. +- * +- *-- If bit 6 of the compression control byte is set to 0 (no "filter id" +- * byte), or if the filter id is 0, then raw pixel values in the client +- * format (see NOTE 1) will be compressed. See below details on the +- * compression. +- * +- *-- The "gradient" filter pre-processes pixel data with a simple algorithm +- * which converts each color component to a difference between a "predicted" +- * intensity and the actual intensity. Such a technique does not affect +- * uncompressed data size, but helps to compress photo-like images better. +- * Pseudo-code for converting intensities to differences is the following: +- * +- * P[i,j] := V[i-1,j] + V[i,j-1] - V[i-1,j-1]; +- * if (P[i,j] < 0) then P[i,j] := 0; +- * if (P[i,j] > MAX) then P[i,j] := MAX; +- * D[i,j] := V[i,j] - P[i,j]; +- * +- * Here V[i,j] is the intensity of a color component for a pixel at +- * coordinates (i,j). MAX is the maximum value of intensity for a color +- * component. +- * +- *-- The "palette" filter converts true-color pixel data to indexed colors +- * and a palette which can consist of 2..256 colors. If the number of colors +- * is 2, then each pixel is encoded in 1 bit, otherwise 8 bits is used to +- * encode one pixel. 1-bit encoding is performed such way that the most +- * significant bits correspond to the leftmost pixels, and each raw of pixels +- * is aligned to the byte boundary. When "palette" filter is used, the +- * palette is sent before the pixel data. The palette begins with an unsigned +- * byte which value is the number of colors in the palette minus 1 (i.e. 1 +- * means 2 colors, 255 means 256 colors in the palette). Then follows the +- * palette itself which consist of pixel values in client pixel format (see +- * NOTE 1). +- * +- *-- The pixel data is compressed using the zlib library. But if the data +- * size after applying the filter but before the compression is less then 12, +- * then the data is sent as is, uncompressed. Four separate zlib streams +- * (0..3) can be used and the decoder should read the actual stream id from +- * the compression control byte (see NOTE 2). +- * +- * If the compression is not used, then the pixel data is sent as is, +- * otherwise the data stream looks like this: +- * +- * 1..3 bytes: data size (N) in compact representation; +- * N bytes: zlib-compressed data. +- * +- * Data size is compactly represented in one, two or three bytes, just like +- * in the "jpeg" compression method (see above). +- * +- *-- NOTE 1. If the color depth is 24, and all three color components are +- * 8-bit wide, then one pixel in Tight encoding is always represented by +- * three bytes, where the first byte is red component, the second byte is +- * green component, and the third byte is blue component of the pixel color +- * value. This applies to colors in palettes as well. +- * +- *-- NOTE 2. The decoder must reset compression streams' states before +- * decoding the rectangle, if some of bits 0,1,2,3 in the compression control +- * byte are set to 1. Note that the decoder must reset zlib streams even if +- * the compression type is "fill" or "jpeg". +- * +- *-- NOTE 3. The "gradient" filter and "jpeg" compression may be used only +- * when bits-per-pixel value is either 16 or 32, not 8. +- * +- *-- NOTE 4. The width of any Tight-encoded rectangle cannot exceed 2048 +- * pixels. If a rectangle is wider, it must be split into several rectangles +- * and each one should be encoded separately. +- * +- */ +- +-#define rfbTightExplicitFilter 0x04 +-#define rfbTightFill 0x08 +-#define rfbTightJpeg 0x09 +-#define rfbTightMaxSubencoding 0x09 +- +-/* Filters to improve compression efficiency */ +-#define rfbTightFilterCopy 0x00 +-#define rfbTightFilterPalette 0x01 +-#define rfbTightFilterGradient 0x02 +- +-#endif +- +-/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +- * XCursor encoding. This is a special encoding used to transmit X-style +- * cursor shapes from server to clients. Note that for this encoding, +- * coordinates in rfbFramebufferUpdateRectHeader structure hold hotspot +- * position (r.x, r.y) and cursor size (r.w, r.h). If (w * h != 0), two RGB +- * samples are sent after header in the rfbXCursorColors structure. They +- * denote foreground and background colors of the cursor. If a client +- * supports only black-and-white cursors, it should ignore these colors and +- * assume that foreground is black and background is white. Next, two bitmaps +- * (1 bits per pixel) follow: first one with actual data (value 0 denotes +- * background color, value 1 denotes foreground color), second one with +- * transparency data (bits with zero value mean that these pixels are +- * transparent). Both bitmaps represent cursor data in a byte stream, from +- * left to right, from top to bottom, and each row is byte-aligned. Most +- * significant bits correspond to leftmost pixels. The number of bytes in +- * each row can be calculated as ((w + 7) / 8). If (w * h == 0), cursor +- * should be hidden (or default local cursor should be set by the client). +- */ +- +-typedef struct { +- uint8_t foreRed; +- uint8_t foreGreen; +- uint8_t foreBlue; +- uint8_t backRed; +- uint8_t backGreen; +- uint8_t backBlue; +-} rfbXCursorColors; +- +-#define sz_rfbXCursorColors 6 +- +- +-/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +- * RichCursor encoding. This is a special encoding used to transmit cursor +- * shapes from server to clients. It is similar to the XCursor encoding but +- * uses client pixel format instead of two RGB colors to represent cursor +- * image. For this encoding, coordinates in rfbFramebufferUpdateRectHeader +- * structure hold hotspot position (r.x, r.y) and cursor size (r.w, r.h). +- * After header, two pixmaps follow: first one with cursor image in current +- * client pixel format (like in raw encoding), second with transparency data +- * (1 bit per pixel, exactly the same format as used for transparency bitmap +- * in the XCursor encoding). If (w * h == 0), cursor should be hidden (or +- * default local cursor should be set by the client). +- */ +- +- +-/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +- * ZRLE - encoding combining Zlib compression, tiling, palettisation and +- * run-length encoding. +- */ +- +-typedef struct { +- uint32_t length; +-} rfbZRLEHeader; +- +-#define sz_rfbZRLEHeader 4 +- +-#define rfbZRLETileWidth 64 +-#define rfbZRLETileHeight 64 +- +- +-/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +- * ZLIBHEX - zlib compressed Hextile Encoding. Essentially, this is the +- * hextile encoding with zlib compression on the tiles that can not be +- * efficiently encoded with one of the other hextile subencodings. The +- * new zlib subencoding uses two bytes to specify the length of the +- * compressed tile and then the compressed data follows. As with the +- * raw sub-encoding, the zlib subencoding invalidates the other +- * values, if they are also set. +- */ +- +-#define rfbHextileZlibRaw (1 << 5) +-#define rfbHextileZlibHex (1 << 6) +-#define rfbHextileZlibMono (1 << 7) +- +- +-/*----------------------------------------------------------------------------- +- * SetColourMapEntries - these messages are only sent if the pixel +- * format uses a "colour map" (i.e. trueColour false) and the client has not +- * fixed the entire colour map using FixColourMapEntries. In addition they +- * will only start being sent after the client has sent its first +- * FramebufferUpdateRequest. So if the client always tells the server to use +- * trueColour then it never needs to process this type of message. +- */ +- +-typedef struct { +- uint8_t type; /* always rfbSetColourMapEntries */ +- uint8_t pad; +- uint16_t firstColour; +- uint16_t nColours; +- +- /* Followed by nColours * 3 * uint16_t +- r1, g1, b1, r2, g2, b2, r3, g3, b3, ..., rn, bn, gn */ +- +-} rfbSetColourMapEntriesMsg; +- +-#define sz_rfbSetColourMapEntriesMsg 6 +- +- +- +-/*----------------------------------------------------------------------------- +- * Bell - ring a bell on the client if it has one. +- */ +- +-typedef struct { +- uint8_t type; /* always rfbBell */ +-} rfbBellMsg; +- +-#define sz_rfbBellMsg 1 +- +- +- +-/*----------------------------------------------------------------------------- +- * ServerCutText - the server has new text in its cut buffer. +- */ +- +-typedef struct { +- uint8_t type; /* always rfbServerCutText */ +- uint8_t pad1; +- uint16_t pad2; +- uint32_t length; +- /* followed by char text[length] */ +-} rfbServerCutTextMsg; +- +-#define sz_rfbServerCutTextMsg 8 +- +- +-/*----------------------------------------------------------------------------- +- * // Modif sf@2002 +- * FileTransferMsg - The client sends FileTransfer message. +- * Bidirectional message - Files can be sent from client to server & vice versa +- */ +- +-typedef struct _rfbFileTransferMsg { +- uint8_t type; /* always rfbFileTransfer */ +- uint8_t contentType; /* See defines below */ +- uint8_t contentParam;/* Other possible content classification (Dir or File name, etc..) */ +- uint8_t pad; /* It appears that UltraVNC *forgot* to Swap16IfLE(contentParam) */ +- uint32_t size; /* FileSize or packet index or error or other */ +-/* uint32_t sizeH; Additional 32Bits params to handle big values. Only for V2 (we want backward compatibility between all V1 versions) */ +- uint32_t length; +- /* followed by data char text[length] */ +-} rfbFileTransferMsg; +- +-#define sz_rfbFileTransferMsg 12 +- +-#define rfbFileTransferVersion 2 /* v1 is the old FT version ( <= 1.0.0 RC18 versions) */ +- +-/* FileTransfer Content types and Params defines */ +-#define rfbDirContentRequest 1 /* Client asks for the content of a given Server directory */ +-#define rfbDirPacket 2 /* Full directory name or full file name. */ +- /* Null content means end of Directory */ +-#define rfbFileTransferRequest 3 /* Client asks the server for the transfer of a given file */ +-#define rfbFileHeader 4 /* First packet of a file transfer, containing file's features */ +-#define rfbFilePacket 5 /* One chunk of the file */ +-#define rfbEndOfFile 6 /* End of file transfer (the file has been received or error) */ +-#define rfbAbortFileTransfer 7 /* The file transfer must be aborted, whatever the state */ +-#define rfbFileTransferOffer 8 /* The client offers to send a file to the server */ +-#define rfbFileAcceptHeader 9 /* The server accepts or rejects the file */ +-#define rfbCommand 10 /* The Client sends a simple command (File Delete, Dir create etc...) */ +-#define rfbCommandReturn 11 /* The Client receives the server's answer about a simple command */ +-#define rfbFileChecksums 12 /* The zipped checksums of the destination file (Delta Transfer) */ +-#define rfbFileTransferAccess 14 /* Request FileTransfer authorization */ +- +- /* rfbDirContentRequest client Request - content params */ +-#define rfbRDirContent 1 /* Request a Server Directory contents */ +-#define rfbRDrivesList 2 /* Request the server's drives list */ +-#define rfbRDirRecursiveList 3 /* Request a server directory content recursive sorted list */ +-#define rfbRDirRecursiveSize 4 /* Request a server directory content recursive size */ +- +- /* rfbDirPacket & rfbCommandReturn server Answer - content params */ +-#define rfbADirectory 1 /* Reception of a directory name */ +-#define rfbAFile 2 /* Reception of a file name */ +-#define rfbADrivesList 3 /* Reception of a list of drives */ +-#define rfbADirCreate 4 /* Response to a create dir command */ +-#define rfbADirDelete 5 /* Response to a delete dir command */ +-#define rfbAFileCreate 6 /* Response to a create file command */ +-#define rfbAFileDelete 7 /* Response to a delete file command */ +-#define rfbAFileRename 8 /* Response to a rename file command */ +-#define rfbADirRename 9 /* Response to a rename dir command */ +-#define rfbADirRecursiveListItem 10 +-#define rfbADirRecursiveSize 11 +- +- /* rfbCommand Command - content params */ +-#define rfbCDirCreate 1 /* Request the server to create the given directory */ +-#define rfbCDirDelete 2 /* Request the server to delete the given directory */ +-#define rfbCFileCreate 3 /* Request the server to create the given file */ +-#define rfbCFileDelete 4 /* Request the server to delete the given file */ +-#define rfbCFileRename 5 /* Request the server to rename the given file */ +-#define rfbCDirRename 6 /* Request the server to rename the given directory */ +- +- /* Errors - content params or "size" field */ +-#define rfbRErrorUnknownCmd 1 /* Unknown FileTransfer command. */ +-#define rfbRErrorCmd 0xFFFFFFFF/* Error when a command fails on remote side (ret in "size" field) */ +- +-#define sz_rfbBlockSize 8192 /* Size of a File Transfer packet (before compression) */ +-#define rfbZipDirectoryPrefix "!UVNCDIR-\0" /* Transfered directory are zipped in a file with this prefix. Must end with "-" */ +-#define sz_rfbZipDirectoryPrefix 9 +-#define rfbDirPrefix "[ " +-#define rfbDirSuffix " ]" +- +- +- +-/*----------------------------------------------------------------------------- +- * Modif sf@2002 +- * TextChatMsg - Utilized to order the TextChat mode on server or client +- * Bidirectional message +- */ +- +-typedef struct _rfbTextChatMsg { +- uint8_t type; /* always rfbTextChat */ +- uint8_t pad1; /* Could be used later as an additionnal param */ +- uint16_t pad2; /* Could be used later as text offset, for instance */ +- uint32_t length; /* Specific values for Open, close, finished (-1, -2, -3) */ +- /* followed by char text[length] */ +-} rfbTextChatMsg; +- +-#define sz_rfbTextChatMsg 8 +- +-#define rfbTextMaxSize 4096 +-#define rfbTextChatOpen 0xFFFFFFFF +-#define rfbTextChatClose 0xFFFFFFFE +-#define rfbTextChatFinished 0xFFFFFFFD +- +- +-/*----------------------------------------------------------------------------- +- * Xvp Message +- * Bidirectional message +- * A server which supports the xvp extension declares this by sending a message +- * with an Xvp_INIT xvp-message-code when it receives a request from the client +- * to use the xvp Pseudo-encoding. The server must specify in this message the +- * highest xvp-extension-version it supports: the client may assume that the +- * server supports all versions from 1 up to this value. The client is then +- * free to use any supported version. Currently, only version 1 is defined. +- * +- * A server which subsequently receives an xvp Client Message requesting an +- * operation which it is unable to perform, informs the client of this by +- * sending a message with an Xvp_FAIL xvp-message-code, and the same +- * xvp-extension-version as included in the client's operation request. +- * +- * A client supporting the xvp extension sends this to request that the server +- * initiate a clean shutdown, clean reboot or abrupt reset of the system whose +- * framebuffer the client is displaying. +- */ +- +- +-typedef struct { +- uint8_t type; /* always rfbXvp */ +- uint8_t pad; +- uint8_t version; /* xvp extension version */ +- uint8_t code; /* xvp message code */ +-} rfbXvpMsg; +- +-#define sz_rfbXvpMsg (4) +- +-/* server message codes */ +-#define rfbXvp_Fail 0 +-#define rfbXvp_Init 1 +-/* client message codes */ +-#define rfbXvp_Shutdown 2 +-#define rfbXvp_Reboot 3 +-#define rfbXvp_Reset 4 +- +- +-/*----------------------------------------------------------------------------- +- * Modif sf@2002 +- * ResizeFrameBuffer - The Client must change the size of its framebuffer +- */ +- +-typedef struct _rfbResizeFrameBufferMsg { +- uint8_t type; /* always rfbResizeFrameBuffer */ +- uint8_t pad1; +- uint16_t framebufferWidth; /* FrameBuffer width */ +- uint16_t framebufferHeigth; /* FrameBuffer height */ +-} rfbResizeFrameBufferMsg; +- +-#define sz_rfbResizeFrameBufferMsg 6 +- +- +-/*----------------------------------------------------------------------------- +- * Copyright (C) 2001 Harakan Software +- * PalmVNC 1.4 & 2.? ResizeFrameBuffer message +- * ReSizeFrameBuffer - tell the RFB client to alter its framebuffer, either +- * due to a resize of the server desktop or a client-requested scaling factor. +- * The pixel format remains unchanged. +- */ +- +-typedef struct { +- uint8_t type; /* always rfbReSizeFrameBuffer */ +- uint8_t pad1; +- uint16_t desktop_w; /* Desktop width */ +- uint16_t desktop_h; /* Desktop height */ +- uint16_t buffer_w; /* FrameBuffer width */ +- uint16_t buffer_h; /* Framebuffer height */ +- uint16_t pad2; +- +-} rfbPalmVNCReSizeFrameBufferMsg; +- +-#define sz_rfbPalmVNCReSizeFrameBufferMsg (12) +- +- +- +- +-/*----------------------------------------------------------------------------- +- * Union of all server->client messages. +- */ +- +-typedef union { +- uint8_t type; +- rfbFramebufferUpdateMsg fu; +- rfbSetColourMapEntriesMsg scme; +- rfbBellMsg b; +- rfbServerCutTextMsg sct; +- rfbResizeFrameBufferMsg rsfb; +- rfbPalmVNCReSizeFrameBufferMsg prsfb; +- rfbFileTransferMsg ft; +- rfbTextChatMsg tc; +- rfbXvpMsg xvp; +-} rfbServerToClientMsg; +- +- +- +-/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +- * RDV Cache Encoding. +- * special is not used at this point, can be used to reset cache or other specials +- * just put it to make sure we don't have to change the encoding again. +- */ +- +-typedef struct { +- uint16_t special; +-} rfbCacheRect; +- +-#define sz_rfbCacheRect 2 +- +- +- +- +-/***************************************************************************** +- * +- * Message definitions (client -> server) +- * +- *****************************************************************************/ +- +- +-/*----------------------------------------------------------------------------- +- * SetPixelFormat - tell the RFB server the format in which the client wants +- * pixels sent. +- */ +- +-typedef struct { +- uint8_t type; /* always rfbSetPixelFormat */ +- uint8_t pad1; +- uint16_t pad2; +- rfbPixelFormat format; +-} rfbSetPixelFormatMsg; +- +-#define sz_rfbSetPixelFormatMsg (sz_rfbPixelFormat + 4) +- +- +-/*----------------------------------------------------------------------------- +- * FixColourMapEntries - when the pixel format uses a "colour map", fix +- * read-only colour map entries. +- * +- * ***************** NOT CURRENTLY SUPPORTED ***************** +- */ +- +-typedef struct { +- uint8_t type; /* always rfbFixColourMapEntries */ +- uint8_t pad; +- uint16_t firstColour; +- uint16_t nColours; +- +- /* Followed by nColours * 3 * uint16_t +- r1, g1, b1, r2, g2, b2, r3, g3, b3, ..., rn, bn, gn */ +- +-} rfbFixColourMapEntriesMsg; +- +-#define sz_rfbFixColourMapEntriesMsg 6 +- +- +-/*----------------------------------------------------------------------------- +- * SetEncodings - tell the RFB server which encoding types we accept. Put them +- * in order of preference, if we have any. We may always receive raw +- * encoding, even if we don't specify it here. +- */ +- +-typedef struct { +- uint8_t type; /* always rfbSetEncodings */ +- uint8_t pad; +- uint16_t nEncodings; +- /* followed by nEncodings * uint32_t encoding types */ +-} rfbSetEncodingsMsg; +- +-#define sz_rfbSetEncodingsMsg 4 +- +- +-/*----------------------------------------------------------------------------- +- * FramebufferUpdateRequest - request for a framebuffer update. If incremental +- * is true then the client just wants the changes since the last update. If +- * false then it wants the whole of the specified rectangle. +- */ +- +-typedef struct { +- uint8_t type; /* always rfbFramebufferUpdateRequest */ +- uint8_t incremental; +- uint16_t x; +- uint16_t y; +- uint16_t w; +- uint16_t h; +-} rfbFramebufferUpdateRequestMsg; +- +-#define sz_rfbFramebufferUpdateRequestMsg 10 +- +- +-/*----------------------------------------------------------------------------- +- * KeyEvent - key press or release +- * +- * Keys are specified using the "keysym" values defined by the X Window System. +- * For most ordinary keys, the keysym is the same as the corresponding ASCII +- * value. Other common keys are: +- * +- * BackSpace 0xff08 +- * Tab 0xff09 +- * Return or Enter 0xff0d +- * Escape 0xff1b +- * Insert 0xff63 +- * Delete 0xffff +- * Home 0xff50 +- * End 0xff57 +- * Page Up 0xff55 +- * Page Down 0xff56 +- * Left 0xff51 +- * Up 0xff52 +- * Right 0xff53 +- * Down 0xff54 +- * F1 0xffbe +- * F2 0xffbf +- * ... ... +- * F12 0xffc9 +- * Shift 0xffe1 +- * Control 0xffe3 +- * Meta 0xffe7 +- * Alt 0xffe9 +- */ +- +-typedef struct { +- uint8_t type; /* always rfbKeyEvent */ +- uint8_t down; /* true if down (press), false if up */ +- uint16_t pad; +- uint32_t key; /* key is specified as an X keysym */ +-} rfbKeyEventMsg; +- +-#define sz_rfbKeyEventMsg 8 +- +- +-/*----------------------------------------------------------------------------- +- * PointerEvent - mouse/pen move and/or button press. +- */ +- +-typedef struct { +- uint8_t type; /* always rfbPointerEvent */ +- uint8_t buttonMask; /* bits 0-7 are buttons 1-8, 0=up, 1=down */ +- uint16_t x; +- uint16_t y; +-} rfbPointerEventMsg; +- +-#define rfbButton1Mask 1 +-#define rfbButton2Mask 2 +-#define rfbButton3Mask 4 +-#define rfbButton4Mask 8 +-#define rfbButton5Mask 16 +-/* RealVNC 335 method */ +-#define rfbWheelUpMask rfbButton4Mask +-#define rfbWheelDownMask rfbButton5Mask +- +-#define sz_rfbPointerEventMsg 6 +- +- +- +-/*----------------------------------------------------------------------------- +- * ClientCutText - the client has new text in its cut buffer. +- */ +- +-typedef struct { +- uint8_t type; /* always rfbClientCutText */ +- uint8_t pad1; +- uint16_t pad2; +- uint32_t length; +- /* followed by char text[length] */ +-} rfbClientCutTextMsg; +- +-#define sz_rfbClientCutTextMsg 8 +- +- +- +-/*----------------------------------------------------------------------------- +- * sf@2002 - Set Server Scale +- * SetServerScale - Server must change the scale of the client buffer. +- */ +- +-typedef struct _rfbSetScaleMsg { +- uint8_t type; /* always rfbSetScale */ +- uint8_t scale; /* Scale value 1<sv<n */ +- uint16_t pad; +-} rfbSetScaleMsg; +- +-#define sz_rfbSetScaleMsg 4 +- +- +-/*----------------------------------------------------------------------------- +- * Copyright (C) 2001 Harakan Software +- * PalmVNC 1.4 & 2.? SetScale Factor message +- * SetScaleFactor - tell the RFB server to alter the scale factor for the +- * client buffer. +- */ +-typedef struct { +- uint8_t type; /* always rfbPalmVNCSetScaleFactor */ +- +- uint8_t scale; /* Scale factor (positive non-zero integer) */ +- uint16_t pad2; +-} rfbPalmVNCSetScaleFactorMsg; +- +-#define sz_rfbPalmVNCSetScaleFactorMsg (4) +- +- +-/*----------------------------------------------------------------------------- +- * rdv@2002 - Set input status +- * SetServerInput - Server input is dis/enabled +- */ +- +-typedef struct _rfbSetServerInputMsg { +- uint8_t type; /* always rfbSetScale */ +- uint8_t status; /* Scale value 1<sv<n */ +- uint16_t pad; +-} rfbSetServerInputMsg; +- +-#define sz_rfbSetServerInputMsg 4 +- +-/*----------------------------------------------------------------------------- +- * rdv@2002 - Set SW +- * SetSW - Server SW/full desktop +- */ +- +-typedef struct _rfbSetSWMsg { +- uint8_t type; /* always rfbSetSW */ +- uint8_t status; +- uint16_t x; +- uint16_t y; +-} rfbSetSWMsg; +- +-#define sz_rfbSetSWMsg 6 +- +- +- +-/*----------------------------------------------------------------------------- +- * Union of all client->server messages. +- */ +- +-typedef union { +- uint8_t type; +- rfbSetPixelFormatMsg spf; +- rfbFixColourMapEntriesMsg fcme; +- rfbSetEncodingsMsg se; +- rfbFramebufferUpdateRequestMsg fur; +- rfbKeyEventMsg ke; +- rfbPointerEventMsg pe; +- rfbClientCutTextMsg cct; +- rfbSetScaleMsg ssc; +- rfbPalmVNCSetScaleFactorMsg pssf; +- rfbSetServerInputMsg sim; +- rfbFileTransferMsg ft; +- rfbSetSWMsg sw; +- rfbTextChatMsg tc; +- rfbXvpMsg xvp; +-} rfbClientToServerMsg; +- +-/* +- * vncauth.h - describes the functions provided by the vncauth library. +- */ +- +-#define MAXPWLEN 8 +-#define CHALLENGESIZE 16 +- +-extern int rfbEncryptAndStorePasswd(char *passwd, char *fname); +-extern char *rfbDecryptPasswdFromFile(char *fname); +-extern void rfbRandomBytes(unsigned char *bytes); +-extern void rfbEncryptBytes(unsigned char *bytes, char *passwd); +- +- +-#endif +diff -urN remmina-plugins/vnc/libvncserver/rfb/rfbregion.h remmina-plugins/vnc/libvncserver/rfb/rfbregion.h +--- remmina-plugins/vnc/libvncserver/rfb/rfbregion.h 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/rfb/rfbregion.h 1970-01-01 10:00:00.000000000 +1000 +@@ -1,65 +0,0 @@ +-#ifndef SRAREGION_H +-#define SRAREGION_H +- +-/* -=- SRA - Simple Region Algorithm +- * A simple rectangular region implementation. +- * Copyright (c) 2001 James "Wez" Weatherall, Johannes E. Schindelin +- */ +- +-/* -=- sraRect */ +- +-typedef struct _rect { +- int x1; +- int y1; +- int x2; +- int y2; +-} sraRect; +- +-typedef struct sraRegion sraRegion; +- +-/* -=- Region manipulation functions */ +- +-extern sraRegion *sraRgnCreate(); +-extern sraRegion *sraRgnCreateRect(int x1, int y1, int x2, int y2); +-extern sraRegion *sraRgnCreateRgn(const sraRegion *src); +- +-extern void sraRgnDestroy(sraRegion *rgn); +-extern void sraRgnMakeEmpty(sraRegion *rgn); +-extern rfbBool sraRgnAnd(sraRegion *dst, const sraRegion *src); +-extern void sraRgnOr(sraRegion *dst, const sraRegion *src); +-extern rfbBool sraRgnSubtract(sraRegion *dst, const sraRegion *src); +- +-extern void sraRgnOffset(sraRegion *dst, int dx, int dy); +- +-extern rfbBool sraRgnPopRect(sraRegion *region, sraRect *rect, +- unsigned long flags); +- +-extern unsigned long sraRgnCountRects(const sraRegion *rgn); +-extern rfbBool sraRgnEmpty(const sraRegion *rgn); +- +-extern sraRegion *sraRgnBBox(const sraRegion *src); +- +-/* -=- rectangle iterator */ +- +-typedef struct sraRectangleIterator { +- rfbBool reverseX,reverseY; +- int ptrSize,ptrPos; +- struct sraSpan** sPtrs; +-} sraRectangleIterator; +- +-extern sraRectangleIterator *sraRgnGetIterator(sraRegion *s); +-extern sraRectangleIterator *sraRgnGetReverseIterator(sraRegion *s,rfbBool reverseX,rfbBool reverseY); +-extern rfbBool sraRgnIteratorNext(sraRectangleIterator *i,sraRect *r); +-extern void sraRgnReleaseIterator(sraRectangleIterator *i); +- +-void sraRgnPrint(const sraRegion *s); +- +-/* -=- Rectangle clipper (for speed) */ +- +-extern rfbBool sraClipRect(int *x, int *y, int *w, int *h, +- int cx, int cy, int cw, int ch); +- +-extern rfbBool sraClipRect2(int *x, int *y, int *x2, int *y2, +- int cx, int cy, int cx2, int cy2); +- +-#endif +diff -urN remmina-plugins/vnc/libvncserver/rfbconfig.h.in remmina-plugins/vnc/libvncserver/rfbconfig.h.in +--- remmina-plugins/vnc/libvncserver/rfbconfig.h.in 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/libvncserver/rfbconfig.h.in 1970-01-01 10:00:00.000000000 +1000 +@@ -1,420 +0,0 @@ +-/* rfbconfig.h.in. Generated from configure.ac by autoheader. */ +- +-/* Define if building universal (internal helper macro) */ +-#undef AC_APPLE_UNIVERSAL_BUILD +- +-/* Enable 24 bit per pixel in native framebuffer */ +-#undef ALLOW24BPP +- +-/* work around when write() returns ENOENT but does not mean it */ +-#undef ENOENT_WORKAROUND +- +-/* Use ffmpeg (for vnc2mpg) */ +-#undef FFMPEG +- +-/* Define to 1 if you have the <arpa/inet.h> header file. */ +-#undef HAVE_ARPA_INET_H +- +-/* Avahi/mDNS client build environment present */ +-#undef HAVE_AVAHI +- +-/* Define to 1 if you have the `crypt' function. */ +-#undef HAVE_CRYPT +- +-/* Define to 1 if you have the <dlfcn.h> header file. */ +-#undef HAVE_DLFCN_H +- +-/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ +-#undef HAVE_DOPRNT +- +-/* DPMS extension build environment present */ +-#undef HAVE_DPMS +- +-/* FBPM extension build environment present */ +-#undef HAVE_FBPM +- +-/* Define to 1 if you have the <fcntl.h> header file. */ +-#undef HAVE_FCNTL_H +- +-/* Define to 1 if you have the `fork' function. */ +-#undef HAVE_FORK +- +-/* Define to 1 if you have the `ftime' function. */ +-#undef HAVE_FTIME +- +-/* Define to 1 if you have the `geteuid' function. */ +-#undef HAVE_GETEUID +- +-/* Define to 1 if you have the `gethostbyname' function. */ +-#undef HAVE_GETHOSTBYNAME +- +-/* Define to 1 if you have the `gethostname' function. */ +-#undef HAVE_GETHOSTNAME +- +-/* Define to 1 if you have the `getpwnam' function. */ +-#undef HAVE_GETPWNAM +- +-/* Define to 1 if you have the `getpwuid' function. */ +-#undef HAVE_GETPWUID +- +-/* Define to 1 if you have the `getspnam' function. */ +-#undef HAVE_GETSPNAM +- +-/* Define to 1 if you have the `gettimeofday' function. */ +-#undef HAVE_GETTIMEOFDAY +- +-/* Define to 1 if you have the `getuid' function. */ +-#undef HAVE_GETUID +- +-/* Define to 1 if you have the `grantpt' function. */ +-#undef HAVE_GRANTPT +- +-/* Define to 1 if you have the `inet_ntoa' function. */ +-#undef HAVE_INET_NTOA +- +-/* Define to 1 if you have the `initgroups' function. */ +-#undef HAVE_INITGROUPS +- +-/* Define to 1 if you have the <inttypes.h> header file. */ +-#undef HAVE_INTTYPES_H +- +-/* IRIX XReadDisplay available */ +-#undef HAVE_IRIX_XREADDISPLAY +- +-/* libcrypt library present */ +-#undef HAVE_LIBCRYPT +- +-/* openssl libcrypto library present */ +-#undef HAVE_LIBCRYPTO +- +-/* Define to 1 if you have the `cygipc' library (-lcygipc). */ +-#undef HAVE_LIBCYGIPC +- +-/* Define to 1 if you have the `jpeg' library (-ljpeg). */ +-#undef HAVE_LIBJPEG +- +-/* Define to 1 if you have the `nsl' library (-lnsl). */ +-#undef HAVE_LIBNSL +- +-/* Define to 1 if you have the `pthread' library (-lpthread). */ +-#undef HAVE_LIBPTHREAD +- +-/* Define to 1 if you have the `socket' library (-lsocket). */ +-#undef HAVE_LIBSOCKET +- +-/* openssl libssl library present */ +-#undef HAVE_LIBSSL +- +-/* XDAMAGE extension build environment present */ +-#undef HAVE_LIBXDAMAGE +- +-/* XFIXES extension build environment present */ +-#undef HAVE_LIBXFIXES +- +-/* XINERAMA extension build environment present */ +-#undef HAVE_LIBXINERAMA +- +-/* XRANDR extension build environment present */ +-#undef HAVE_LIBXRANDR +- +-/* DEC-XTRAP extension build environment present */ +-#undef HAVE_LIBXTRAP +- +-/* Define to 1 if you have the `z' library (-lz). */ +-#undef HAVE_LIBZ +- +-/* linux fb device build environment present */ +-#undef HAVE_LINUX_FB_H +- +-/* linux/input.h present */ +-#undef HAVE_LINUX_INPUT_H +- +-/* linux uinput device build environment present */ +-#undef HAVE_LINUX_UINPUT_H +- +-/* video4linux build environment present */ +-#undef HAVE_LINUX_VIDEODEV_H +- +-/* build MacOS X native display support */ +-#undef HAVE_MACOSX_NATIVE_DISPLAY +- +-/* MacOS X OpenGL present */ +-#undef HAVE_MACOSX_OPENGL_H +- +-/* Define to 1 if you have the `memmove' function. */ +-#undef HAVE_MEMMOVE +- +-/* Define to 1 if you have the <memory.h> header file. */ +-#undef HAVE_MEMORY_H +- +-/* Define to 1 if you have the `memset' function. */ +-#undef HAVE_MEMSET +- +-/* Define to 1 if you have the `mkfifo' function. */ +-#undef HAVE_MKFIFO +- +-/* Define to 1 if you have the `mmap' function. */ +-#undef HAVE_MMAP +- +-/* Define to 1 if you have the <netdb.h> header file. */ +-#undef HAVE_NETDB_H +- +-/* Define to 1 if you have the <netinet/in.h> header file. */ +-#undef HAVE_NETINET_IN_H +- +-/* Define to 1 if you have the <pwd.h> header file. */ +-#undef HAVE_PWD_H +- +-/* RECORD extension build environment present */ +-#undef HAVE_RECORD +- +-/* Define to 1 if you have the `select' function. */ +-#undef HAVE_SELECT +- +-/* Define to 1 if you have the `setegid' function. */ +-#undef HAVE_SETEGID +- +-/* Define to 1 if you have the `seteuid' function. */ +-#undef HAVE_SETEUID +- +-/* Define to 1 if you have the `setgid' function. */ +-#undef HAVE_SETGID +- +-/* Define to 1 if you have the `setpgrp' function. */ +-#undef HAVE_SETPGRP +- +-/* Define to 1 if you have the `setsid' function. */ +-#undef HAVE_SETSID +- +-/* Define to 1 if you have the `setuid' function. */ +-#undef HAVE_SETUID +- +-/* Define to 1 if you have the `setutxent' function. */ +-#undef HAVE_SETUTXENT +- +-/* Define to 1 if you have the `shmat' function. */ +-#undef HAVE_SHMAT +- +-/* Define to 1 if you have the `socket' function. */ +-#undef HAVE_SOCKET +- +-/* Solaris XReadScreen available */ +-#undef HAVE_SOLARIS_XREADSCREEN +- +-/* Define to 1 if `stat' has the bug that it succeeds when given the +- zero-length file name argument. */ +-#undef HAVE_STAT_EMPTY_STRING_BUG +- +-/* Define to 1 if you have the <stdint.h> header file. */ +-#undef HAVE_STDINT_H +- +-/* Define to 1 if you have the <stdlib.h> header file. */ +-#undef HAVE_STDLIB_H +- +-/* Define to 1 if you have the `strchr' function. */ +-#undef HAVE_STRCHR +- +-/* Define to 1 if you have the `strcspn' function. */ +-#undef HAVE_STRCSPN +- +-/* Define to 1 if you have the `strdup' function. */ +-#undef HAVE_STRDUP +- +-/* Define to 1 if you have the `strerror' function. */ +-#undef HAVE_STRERROR +- +-/* Define to 1 if you have the `strftime' function. */ +-#undef HAVE_STRFTIME +- +-/* Define to 1 if you have the <strings.h> header file. */ +-#undef HAVE_STRINGS_H +- +-/* Define to 1 if you have the <string.h> header file. */ +-#undef HAVE_STRING_H +- +-/* Define to 1 if you have the `strstr' function. */ +-#undef HAVE_STRSTR +- +-/* Define to 1 if you have the <syslog.h> header file. */ +-#undef HAVE_SYSLOG_H +- +-/* Use the system libvncserver build environment for x11vnc. */ +-#undef HAVE_SYSTEM_LIBVNCSERVER +- +-/* Define to 1 if you have the <sys/ioctl.h> header file. */ +-#undef HAVE_SYS_IOCTL_H +- +-/* Define to 1 if you have the <sys/socket.h> header file. */ +-#undef HAVE_SYS_SOCKET_H +- +-/* Define to 1 if you have the <sys/stat.h> header file. */ +-#undef HAVE_SYS_STAT_H +- +-/* Define to 1 if you have the <sys/stropts.h> header file. */ +-#undef HAVE_SYS_STROPTS_H +- +-/* Define to 1 if you have the <sys/timeb.h> header file. */ +-#undef HAVE_SYS_TIMEB_H +- +-/* Define to 1 if you have the <sys/time.h> header file. */ +-#undef HAVE_SYS_TIME_H +- +-/* Define to 1 if you have the <sys/types.h> header file. */ +-#undef HAVE_SYS_TYPES_H +- +-/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */ +-#undef HAVE_SYS_WAIT_H +- +-/* Define to 1 if you have the <termios.h> header file. */ +-#undef HAVE_TERMIOS_H +- +-/* Define to 1 if compiler supports __thread */ +-#undef HAVE_TLS +- +-/* Define to 1 if you have the <unistd.h> header file. */ +-#undef HAVE_UNISTD_H +- +-/* Define to 1 if you have the <utmpx.h> header file. */ +-#undef HAVE_UTMPX_H +- +-/* Define to 1 if you have the `vfork' function. */ +-#undef HAVE_VFORK +- +-/* Define to 1 if you have the <vfork.h> header file. */ +-#undef HAVE_VFORK_H +- +-/* Define to 1 if you have the `vprintf' function. */ +-#undef HAVE_VPRINTF +- +-/* Define to 1 if you have the `waitpid' function. */ +-#undef HAVE_WAITPID +- +-/* Define to 1 if `fork' works. */ +-#undef HAVE_WORKING_FORK +- +-/* Define to 1 if `vfork' works. */ +-#undef HAVE_WORKING_VFORK +- +-/* Define to 1 if you have the <ws2tcpip.h> header file. */ +-#undef HAVE_WS2TCPIP_H +- +-/* X11 build environment present */ +-#undef HAVE_X11 +- +-/* open ssl X509_print_ex_fp available */ +-#undef HAVE_X509_PRINT_EX_FP +- +-/* XKEYBOARD extension build environment present */ +-#undef HAVE_XKEYBOARD +- +-/* MIT-SHM extension build environment present */ +-#undef HAVE_XSHM +- +-/* XTEST extension build environment present */ +-#undef HAVE_XTEST +- +-/* XTEST extension has XTestGrabControl */ +-#undef HAVE_XTESTGRABCONTROL +- +-/* Enable IPv6 support */ +-#undef IPv6 +- +-/* Define to 1 if `lstat' dereferences a symlink specified with a trailing +- slash. */ +-#undef LSTAT_FOLLOWS_SLASHED_SYMLINK +- +-/* Need a typedef for in_addr_t */ +-#undef NEED_INADDR_T +- +-/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +-#undef NO_MINUS_C_MINUS_O +- +-/* Name of package */ +-#undef PACKAGE +- +-/* Define to the address where bug reports for this package should be sent. */ +-#undef PACKAGE_BUGREPORT +- +-/* Define to the full name of this package. */ +-#undef PACKAGE_NAME +- +-/* Define to the full name and version of this package. */ +-#undef PACKAGE_STRING +- +-/* Define to the one symbol short name of this package. */ +-#undef PACKAGE_TARNAME +- +-/* Define to the home page for this package. */ +-#undef PACKAGE_URL +- +-/* Define to the version of this package. */ +-#undef PACKAGE_VERSION +- +-/* The number of bytes in type char */ +-#undef SIZEOF_CHAR +- +-/* The number of bytes in type int */ +-#undef SIZEOF_INT +- +-/* The number of bytes in type long */ +-#undef SIZEOF_LONG +- +-/* The number of bytes in type short */ +-#undef SIZEOF_SHORT +- +-/* The number of bytes in type void* */ +-#undef SIZEOF_VOIDP +- +-/* Define to 1 if you have the ANSI C header files. */ +-#undef STDC_HEADERS +- +-/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */ +-#undef TIME_WITH_SYS_TIME +- +-/* Version number of package */ +-#undef VERSION +- +-/* Enable support for libgcrypt in libvncclient */ +-#undef WITH_CLIENT_GCRYPT +- +-/* Enable support for gnutls in libvncclient */ +-#undef WITH_CLIENT_TLS +- +-/* Disable TightVNCFileTransfer protocol */ +-#undef WITH_TIGHTVNC_FILETRANSFER +- +-/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most +- significant byte first (like Motorola and SPARC, unlike Intel). */ +-#if defined AC_APPLE_UNIVERSAL_BUILD +-# if defined __BIG_ENDIAN__ +-# define WORDS_BIGENDIAN 1 +-# endif +-#else +-# ifndef WORDS_BIGENDIAN +-# undef WORDS_BIGENDIAN +-# endif +-#endif +- +-/* Define to 1 if the X Window System is missing or not being used. */ +-#undef X_DISPLAY_MISSING +- +-/* Define to empty if `const' does not conform to ANSI C. */ +-#undef const +- +-/* Define to `__inline__' or `__inline' if that's what the C compiler +- calls it, or to nothing if 'inline' is not supported under any name. */ +-#ifndef __cplusplus +-#undef inline +-#endif +- +-/* Define to `int' if <sys/types.h> does not define. */ +-#undef pid_t +- +-/* Define to `unsigned int' if <sys/types.h> does not define. */ +-#undef size_t +- +-/* The type for socklen */ +-#undef socklen_t +- +-/* Define as `fork' if `vfork' does not work. */ +-#undef vfork +diff -urN remmina-plugins/vnc/vnc_plugin.c remmina-plugins/vnc/vnc_plugin.c +--- remmina-plugins/vnc/vnc_plugin.c 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/vnc/vnc_plugin.c 2014-01-08 02:31:52.000000000 +1100 +@@ -350,7 +350,7 @@ + cur = gdk_cursor_new_from_pixbuf(gdk_display_get_default(), gpdata->queuecursor_pixbuf, gpdata->queuecursor_x, + gpdata->queuecursor_y); + gdk_window_set_cursor(gtk_widget_get_window(gpdata->drawing_area), cur); +- gdk_cursor_unref(cur); ++ g_object_unref(cur); + g_object_unref(gpdata->queuecursor_pixbuf); + gpdata->queuecursor_pixbuf = NULL; + } +@@ -1426,6 +1426,20 @@ + case GDK_SCROLL_RIGHT: + mask = (1 << 6); + break; ++#ifdef GDK_SCROLL_SMOOTH ++ case GDK_SCROLL_SMOOTH: ++ if (event->delta_y < 0) ++ mask = (1 << 3); ++ if (event->delta_y > 0) ++ mask = (1 << 4); ++ if (event->delta_x < 0) ++ mask = (1 << 5); ++ if (event->delta_x > 0) ++ mask = (1 << 6); ++ if (!mask) ++ return FALSE; ++ break; ++#endif + default: + return FALSE; + } +@@ -1568,9 +1582,9 @@ + /* Hide local cursor (show a small dot instead) */ + pixbuf = gdk_pixbuf_new_from_xpm_data(dot_cursor_xpm); + cursor = gdk_cursor_new_from_pixbuf(gdk_display_get_default(), pixbuf, dot_cursor_x_hot, dot_cursor_y_hot); +- gdk_pixbuf_unref(pixbuf); ++ g_object_unref(pixbuf); + gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(gp)), cursor); +- gdk_cursor_unref(cursor); ++ g_object_unref(cursor); + } + } + +@@ -1847,7 +1861,7 @@ + gtk_widget_add_events( + gpdata->drawing_area, + GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK +- | GDK_KEY_RELEASE_MASK); ++ | GDK_KEY_RELEASE_MASK | GDK_SCROLL_MASK); + gtk_widget_set_can_focus(gpdata->drawing_area, TRUE); + + #if GTK_VERSION == 3 +diff -urN remmina-plugins/xdmcp/CMakeLists.txt remmina-plugins/xdmcp/CMakeLists.txt +--- remmina-plugins/xdmcp/CMakeLists.txt 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins/xdmcp/CMakeLists.txt 2014-01-08 02:31:52.000000000 +1100 +@@ -23,6 +23,7 @@ + + add_library(remmina-plugin-xdmcp ${REMMINA_PLUGIN_XDMCP_SRCS}) + set_target_properties(remmina-plugin-xdmcp PROPERTIES PREFIX "") ++set_target_properties(remmina-plugin-xdmcp PROPERTIES NO_SONAME 1) + + include_directories(${REMMINA_COMMON_INCLUDE_DIRS}) + target_link_libraries(remmina-plugin-xdmcp ${REMMINA_COMMON_LIBRARIES}) +diff -urN remmina-plugins-gnome/AUTHORS remmina-plugins-gnome/AUTHORS +--- remmina-plugins-gnome/AUTHORS 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins-gnome/AUTHORS 1970-01-01 10:00:00.000000000 +1000 +@@ -1,4 +0,0 @@ +-Please check the application About dialog or the official web site for a full list of authors. +- +-http://remmina.sourceforge.net/contact.shtml +- +diff -urN remmina-plugins-gnome/CMakeLists.txt remmina-plugins-gnome/CMakeLists.txt +--- remmina-plugins-gnome/CMakeLists.txt 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins-gnome/CMakeLists.txt 2014-01-08 02:31:52.000000000 +1100 +@@ -17,21 +17,21 @@ + # Foundation, Inc., 59 Temple Place, Suite 330, + # Boston, MA 02111-1307, USA. + +-set(REMMINA_PLUGINS_GNOME_SRCS +- src/gkeyring_plugin.c +- ) ++find_suggested_package(GNOMEKEYRING) ++if(GNOMEKEYRING_FOUND) ++ set(REMMINA_PLUGINS_GNOME_SRCS ++ src/gkeyring_plugin.c ++ ) + +-add_library(remmina-plugins-gnome ${REMMINA_PLUGINS_GNOME_SRCS}) +-set_target_properties(remmina-plugins-gnome PROPERTIES PREFIX "") ++ add_library(remmina-plugins-gnome ${REMMINA_PLUGINS_GNOME_SRCS}) ++ set_target_properties(remmina-plugins-gnome PROPERTIES PREFIX "") ++ set_target_properties(remmina-plugins-gnome PROPERTIES NO_SONAME 1) + +-include_directories(${GTK_INCLUDE_DIRS}) +-target_link_libraries(remmina-plugins-gnome ${GTK_LIBRARY_DIRS}) ++ include_directories(${GTK_INCLUDE_DIRS}) ++ target_link_libraries(remmina-plugins-gnome ${GTK_LIBRARY_DIRS}) + +-find_required_package(GNOMEKEYRING) +-if(GNOMEKEYRING_FOUND) +- include_directories(${GNOMEKEYRING_INCLUDE_DIRS}) +- target_link_libraries(remmina-plugins-gnome ${GNOMEKEYRING_LIBRARIES}) +-endif() +- +-install(TARGETS remmina-plugins-gnome DESTINATION ${REMMINA_PLUGINDIR}) ++ include_directories(${GNOMEKEYRING_INCLUDE_DIRS}) ++ target_link_libraries(remmina-plugins-gnome ${GNOMEKEYRING_LIBRARIES}) + ++ install(TARGETS remmina-plugins-gnome DESTINATION ${REMMINA_PLUGINDIR}) ++endif() +diff -urN remmina-plugins-gnome/COPYING remmina-plugins-gnome/COPYING +--- remmina-plugins-gnome/COPYING 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins-gnome/COPYING 1970-01-01 10:00:00.000000000 +1000 +@@ -1,340 +0,0 @@ +- GNU GENERAL PUBLIC LICENSE +- Version 2, June 1991 +- +- Copyright (C) 1989, 1991 Free Software Foundation, Inc. +- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +- Everyone is permitted to copy and distribute verbatim copies +- of this license document, but changing it is not allowed. +- +- Preamble +- +- The licenses for most software are designed to take away your +-freedom to share and change it. By contrast, the GNU General Public +-License is intended to guarantee your freedom to share and change free +-software--to make sure the software is free for all its users. This +-General Public License applies to most of the Free Software +-Foundation's software and to any other program whose authors commit to +-using it. (Some other Free Software Foundation software is covered by +-the GNU Library General Public License instead.) You can apply it to +-your programs, too. +- +- When we speak of free software, we are referring to freedom, not +-price. Our General Public Licenses are designed to make sure that you +-have the freedom to distribute copies of free software (and charge for +-this service if you wish), that you receive source code or can get it +-if you want it, that you can change the software or use pieces of it +-in new free programs; and that you know you can do these things. +- +- To protect your rights, we need to make restrictions that forbid +-anyone to deny you these rights or to ask you to surrender the rights. +-These restrictions translate to certain responsibilities for you if you +-distribute copies of the software, or if you modify it. +- +- For example, if you distribute copies of such a program, whether +-gratis or for a fee, you must give the recipients all the rights that +-you have. You must make sure that they, too, receive or can get the +-source code. And you must show them these terms so they know their +-rights. +- +- We protect your rights with two steps: (1) copyright the software, and +-(2) offer you this license which gives you legal permission to copy, +-distribute and/or modify the software. +- +- Also, for each author's protection and ours, we want to make certain +-that everyone understands that there is no warranty for this free +-software. If the software is modified by someone else and passed on, we +-want its recipients to know that what they have is not the original, so +-that any problems introduced by others will not reflect on the original +-authors' reputations. +- +- Finally, any free program is threatened constantly by software +-patents. We wish to avoid the danger that redistributors of a free +-program will individually obtain patent licenses, in effect making the +-program proprietary. To prevent this, we have made it clear that any +-patent must be licensed for everyone's free use or not licensed at all. +- +- The precise terms and conditions for copying, distribution and +-modification follow. +- +- GNU GENERAL PUBLIC LICENSE +- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION +- +- 0. This License applies to any program or other work which contains +-a notice placed by the copyright holder saying it may be distributed +-under the terms of this General Public License. The "Program", below, +-refers to any such program or work, and a "work based on the Program" +-means either the Program or any derivative work under copyright law: +-that is to say, a work containing the Program or a portion of it, +-either verbatim or with modifications and/or translated into another +-language. (Hereinafter, translation is included without limitation in +-the term "modification".) Each licensee is addressed as "you". +- +-Activities other than copying, distribution and modification are not +-covered by this License; they are outside its scope. The act of +-running the Program is not restricted, and the output from the Program +-is covered only if its contents constitute a work based on the +-Program (independent of having been made by running the Program). +-Whether that is true depends on what the Program does. +- +- 1. You may copy and distribute verbatim copies of the Program's +-source code as you receive it, in any medium, provided that you +-conspicuously and appropriately publish on each copy an appropriate +-copyright notice and disclaimer of warranty; keep intact all the +-notices that refer to this License and to the absence of any warranty; +-and give any other recipients of the Program a copy of this License +-along with the Program. +- +-You may charge a fee for the physical act of transferring a copy, and +-you may at your option offer warranty protection in exchange for a fee. +- +- 2. You may modify your copy or copies of the Program or any portion +-of it, thus forming a work based on the Program, and copy and +-distribute such modifications or work under the terms of Section 1 +-above, provided that you also meet all of these conditions: +- +- a) You must cause the modified files to carry prominent notices +- stating that you changed the files and the date of any change. +- +- b) You must cause any work that you distribute or publish, that in +- whole or in part contains or is derived from the Program or any +- part thereof, to be licensed as a whole at no charge to all third +- parties under the terms of this License. +- +- c) If the modified program normally reads commands interactively +- when run, you must cause it, when started running for such +- interactive use in the most ordinary way, to print or display an +- announcement including an appropriate copyright notice and a +- notice that there is no warranty (or else, saying that you provide +- a warranty) and that users may redistribute the program under +- these conditions, and telling the user how to view a copy of this +- License. (Exception: if the Program itself is interactive but +- does not normally print such an announcement, your work based on +- the Program is not required to print an announcement.) +- +-These requirements apply to the modified work as a whole. If +-identifiable sections of that work are not derived from the Program, +-and can be reasonably considered independent and separate works in +-themselves, then this License, and its terms, do not apply to those +-sections when you distribute them as separate works. But when you +-distribute the same sections as part of a whole which is a work based +-on the Program, the distribution of the whole must be on the terms of +-this License, whose permissions for other licensees extend to the +-entire whole, and thus to each and every part regardless of who wrote it. +- +-Thus, it is not the intent of this section to claim rights or contest +-your rights to work written entirely by you; rather, the intent is to +-exercise the right to control the distribution of derivative or +-collective works based on the Program. +- +-In addition, mere aggregation of another work not based on the Program +-with the Program (or with a work based on the Program) on a volume of +-a storage or distribution medium does not bring the other work under +-the scope of this License. +- +- 3. You may copy and distribute the Program (or a work based on it, +-under Section 2) in object code or executable form under the terms of +-Sections 1 and 2 above provided that you also do one of the following: +- +- a) Accompany it with the complete corresponding machine-readable +- source code, which must be distributed under the terms of Sections +- 1 and 2 above on a medium customarily used for software interchange; or, +- +- b) Accompany it with a written offer, valid for at least three +- years, to give any third party, for a charge no more than your +- cost of physically performing source distribution, a complete +- machine-readable copy of the corresponding source code, to be +- distributed under the terms of Sections 1 and 2 above on a medium +- customarily used for software interchange; or, +- +- c) Accompany it with the information you received as to the offer +- to distribute corresponding source code. (This alternative is +- allowed only for noncommercial distribution and only if you +- received the program in object code or executable form with such +- an offer, in accord with Subsection b above.) +- +-The source code for a work means the preferred form of the work for +-making modifications to it. For an executable work, complete source +-code means all the source code for all modules it contains, plus any +-associated interface definition files, plus the scripts used to +-control compilation and installation of the executable. However, as a +-special exception, the source code distributed need not include +-anything that is normally distributed (in either source or binary +-form) with the major components (compiler, kernel, and so on) of the +-operating system on which the executable runs, unless that component +-itself accompanies the executable. +- +-If distribution of executable or object code is made by offering +-access to copy from a designated place, then offering equivalent +-access to copy the source code from the same place counts as +-distribution of the source code, even though third parties are not +-compelled to copy the source along with the object code. +- +- 4. You may not copy, modify, sublicense, or distribute the Program +-except as expressly provided under this License. Any attempt +-otherwise to copy, modify, sublicense or distribute the Program is +-void, and will automatically terminate your rights under this License. +-However, parties who have received copies, or rights, from you under +-this License will not have their licenses terminated so long as such +-parties remain in full compliance. +- +- 5. You are not required to accept this License, since you have not +-signed it. However, nothing else grants you permission to modify or +-distribute the Program or its derivative works. These actions are +-prohibited by law if you do not accept this License. Therefore, by +-modifying or distributing the Program (or any work based on the +-Program), you indicate your acceptance of this License to do so, and +-all its terms and conditions for copying, distributing or modifying +-the Program or works based on it. +- +- 6. Each time you redistribute the Program (or any work based on the +-Program), the recipient automatically receives a license from the +-original licensor to copy, distribute or modify the Program subject to +-these terms and conditions. You may not impose any further +-restrictions on the recipients' exercise of the rights granted herein. +-You are not responsible for enforcing compliance by third parties to +-this License. +- +- 7. If, as a consequence of a court judgment or allegation of patent +-infringement or for any other reason (not limited to patent issues), +-conditions are imposed on you (whether by court order, agreement or +-otherwise) that contradict the conditions of this License, they do not +-excuse you from the conditions of this License. If you cannot +-distribute so as to satisfy simultaneously your obligations under this +-License and any other pertinent obligations, then as a consequence you +-may not distribute the Program at all. For example, if a patent +-license would not permit royalty-free redistribution of the Program by +-all those who receive copies directly or indirectly through you, then +-the only way you could satisfy both it and this License would be to +-refrain entirely from distribution of the Program. +- +-If any portion of this section is held invalid or unenforceable under +-any particular circumstance, the balance of the section is intended to +-apply and the section as a whole is intended to apply in other +-circumstances. +- +-It is not the purpose of this section to induce you to infringe any +-patents or other property right claims or to contest validity of any +-such claims; this section has the sole purpose of protecting the +-integrity of the free software distribution system, which is +-implemented by public license practices. Many people have made +-generous contributions to the wide range of software distributed +-through that system in reliance on consistent application of that +-system; it is up to the author/donor to decide if he or she is willing +-to distribute software through any other system and a licensee cannot +-impose that choice. +- +-This section is intended to make thoroughly clear what is believed to +-be a consequence of the rest of this License. +- +- 8. If the distribution and/or use of the Program is restricted in +-certain countries either by patents or by copyrighted interfaces, the +-original copyright holder who places the Program under this License +-may add an explicit geographical distribution limitation excluding +-those countries, so that distribution is permitted only in or among +-countries not thus excluded. In such case, this License incorporates +-the limitation as if written in the body of this License. +- +- 9. The Free Software Foundation may publish revised and/or new versions +-of the General Public License from time to time. Such new versions will +-be similar in spirit to the present version, but may differ in detail to +-address new problems or concerns. +- +-Each version is given a distinguishing version number. If the Program +-specifies a version number of this License which applies to it and "any +-later version", you have the option of following the terms and conditions +-either of that version or of any later version published by the Free +-Software Foundation. If the Program does not specify a version number of +-this License, you may choose any version ever published by the Free Software +-Foundation. +- +- 10. If you wish to incorporate parts of the Program into other free +-programs whose distribution conditions are different, write to the author +-to ask for permission. For software which is copyrighted by the Free +-Software Foundation, write to the Free Software Foundation; we sometimes +-make exceptions for this. Our decision will be guided by the two goals +-of preserving the free status of all derivatives of our free software and +-of promoting the sharing and reuse of software generally. +- +- NO WARRANTY +- +- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +-REPAIR OR CORRECTION. +- +- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +-POSSIBILITY OF SUCH DAMAGES. +- +- END OF TERMS AND CONDITIONS +- +- How to Apply These Terms to Your New Programs +- +- If you develop a new program, and you want it to be of the greatest +-possible use to the public, the best way to achieve this is to make it +-free software which everyone can redistribute and change under these terms. +- +- To do so, attach the following notices to the program. It is safest +-to attach them to the start of each source file to most effectively +-convey the exclusion of warranty; and each file should have at least +-the "copyright" line and a pointer to where the full notice is found. +- +- <one line to give the program's name and a brief idea of what it does.> +- Copyright (C) <year> <name of author> +- +- This program is free software; you can 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. +- +- This program 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 this program; if not, write to the Free Software +- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +- +- +-Also add information on how to contact you by electronic and paper mail. +- +-If the program is interactive, make it output a short notice like this +-when it starts in an interactive mode: +- +- Gnomovision version 69, Copyright (C) year name of author +- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. +- This is free software, and you are welcome to redistribute it +- under certain conditions; type `show c' for details. +- +-The hypothetical commands `show w' and `show c' should show the appropriate +-parts of the General Public License. Of course, the commands you use may +-be called something other than `show w' and `show c'; they could even be +-mouse-clicks or menu items--whatever suits your program. +- +-You should also get your employer (if you work as a programmer) or your +-school, if any, to sign a "copyright disclaimer" for the program, if +-necessary. Here is a sample; alter the names: +- +- Yoyodyne, Inc., hereby disclaims all copyright interest in the program +- `Gnomovision' (which makes passes at compilers) written by James Hacker. +- +- <signature of Ty Coon>, 1 April 1989 +- Ty Coon, President of Vice +- +-This General Public License does not permit incorporating your program into +-proprietary programs. If your program is a subroutine library, you may +-consider it more useful to permit linking proprietary applications with the +-library. If this is what you want to do, use the GNU Library General +-Public License instead of this License. +diff -urN remmina-plugins-gnome/INSTALL remmina-plugins-gnome/INSTALL +--- remmina-plugins-gnome/INSTALL 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins-gnome/INSTALL 1970-01-01 10:00:00.000000000 +1000 +@@ -1,237 +0,0 @@ +-Installation Instructions +-************************* +- +-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, +-2006, 2007 Free Software Foundation, Inc. +- +-This file is free documentation; the Free Software Foundation gives +-unlimited permission to copy, distribute and modify it. +- +-Basic Installation +-================== +- +-Briefly, the shell commands `./configure; make; make install' should +-configure, build, and install this package. The following +-more-detailed instructions are generic; see the `README' file for +-instructions specific to this package. +- +- The `configure' shell script attempts to guess correct values for +-various system-dependent variables used during compilation. It uses +-those values to create a `Makefile' in each directory of the package. +-It may also create one or more `.h' files containing system-dependent +-definitions. Finally, it creates a shell script `config.status' that +-you can run in the future to recreate the current configuration, and a +-file `config.log' containing compiler output (useful mainly for +-debugging `configure'). +- +- It can also use an optional file (typically called `config.cache' +-and enabled with `--cache-file=config.cache' or simply `-C') that saves +-the results of its tests to speed up reconfiguring. Caching is +-disabled by default to prevent problems with accidental use of stale +-cache files. +- +- If you need to do unusual things to compile the package, please try +-to figure out how `configure' could check whether to do them, and mail +-diffs or instructions to the address given in the `README' so they can +-be considered for the next release. If you are using the cache, and at +-some point `config.cache' contains results you don't want to keep, you +-may remove or edit it. +- +- The file `configure.ac' (or `configure.in') is used to create +-`configure' by a program called `autoconf'. You need `configure.ac' if +-you want to change it or regenerate `configure' using a newer version +-of `autoconf'. +- +-The simplest way to compile this package is: +- +- 1. `cd' to the directory containing the package's source code and type +- `./configure' to configure the package for your system. +- +- Running `configure' might take a while. While running, it prints +- some messages telling which features it is checking for. +- +- 2. Type `make' to compile the package. +- +- 3. Optionally, type `make check' to run any self-tests that come with +- the package. +- +- 4. Type `make install' to install the programs and any data files and +- documentation. +- +- 5. You can remove the program binaries and object files from the +- source code directory by typing `make clean'. To also remove the +- files that `configure' created (so you can compile the package for +- a different kind of computer), type `make distclean'. There is +- also a `make maintainer-clean' target, but that is intended mainly +- for the package's developers. If you use it, you may have to get +- all sorts of other programs in order to regenerate files that came +- with the distribution. +- +- 6. Often, you can also type `make uninstall' to remove the installed +- files again. +- +-Compilers and Options +-===================== +- +-Some systems require unusual options for compilation or linking that the +-`configure' script does not know about. Run `./configure --help' for +-details on some of the pertinent environment variables. +- +- You can give `configure' initial values for configuration parameters +-by setting variables in the command line or in the environment. Here +-is an example: +- +- ./configure CC=c99 CFLAGS=-g LIBS=-lposix +- +- *Note Defining Variables::, for more details. +- +-Compiling For Multiple Architectures +-==================================== +- +-You can compile the package for more than one kind of computer at the +-same time, by placing the object files for each architecture in their +-own directory. To do this, you can use GNU `make'. `cd' to the +-directory where you want the object files and executables to go and run +-the `configure' script. `configure' automatically checks for the +-source code in the directory that `configure' is in and in `..'. +- +- With a non-GNU `make', it is safer to compile the package for one +-architecture at a time in the source code directory. After you have +-installed the package for one architecture, use `make distclean' before +-reconfiguring for another architecture. +- +-Installation Names +-================== +- +-By default, `make install' installs the package's commands under +-`/usr/local/bin', include files under `/usr/local/include', etc. You +-can specify an installation prefix other than `/usr/local' by giving +-`configure' the option `--prefix=PREFIX'. +- +- You can specify separate installation prefixes for +-architecture-specific files and architecture-independent files. If you +-pass the option `--exec-prefix=PREFIX' to `configure', the package uses +-PREFIX as the prefix for installing programs and libraries. +-Documentation and other data files still use the regular prefix. +- +- In addition, if you use an unusual directory layout you can give +-options like `--bindir=DIR' to specify different values for particular +-kinds of files. Run `configure --help' for a list of the directories +-you can set and what kinds of files go in them. +- +- If the package supports it, you can cause programs to be installed +-with an extra prefix or suffix on their names by giving `configure' the +-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. +- +-Optional Features +-================= +- +-Some packages pay attention to `--enable-FEATURE' options to +-`configure', where FEATURE indicates an optional part of the package. +-They may also pay attention to `--with-PACKAGE' options, where PACKAGE +-is something like `gnu-as' or `x' (for the X Window System). The +-`README' should mention any `--enable-' and `--with-' options that the +-package recognizes. +- +- For packages that use the X Window System, `configure' can usually +-find the X include and library files automatically, but if it doesn't, +-you can use the `configure' options `--x-includes=DIR' and +-`--x-libraries=DIR' to specify their locations. +- +-Specifying the System Type +-========================== +- +-There may be some features `configure' cannot figure out automatically, +-but needs to determine by the type of machine the package will run on. +-Usually, assuming the package is built to be run on the _same_ +-architectures, `configure' can figure that out, but if it prints a +-message saying it cannot guess the machine type, give it the +-`--build=TYPE' option. TYPE can either be a short name for the system +-type, such as `sun4', or a canonical name which has the form: +- +- CPU-COMPANY-SYSTEM +- +-where SYSTEM can have one of these forms: +- +- OS KERNEL-OS +- +- See the file `config.sub' for the possible values of each field. If +-`config.sub' isn't included in this package, then this package doesn't +-need to know the machine type. +- +- If you are _building_ compiler tools for cross-compiling, you should +-use the option `--target=TYPE' to select the type of system they will +-produce code for. +- +- If you want to _use_ a cross compiler, that generates code for a +-platform different from the build platform, you should specify the +-"host" platform (i.e., that on which the generated programs will +-eventually be run) with `--host=TYPE'. +- +-Sharing Defaults +-================ +- +-If you want to set default values for `configure' scripts to share, you +-can create a site shell script called `config.site' that gives default +-values for variables like `CC', `cache_file', and `prefix'. +-`configure' looks for `PREFIX/share/config.site' if it exists, then +-`PREFIX/etc/config.site' if it exists. Or, you can set the +-`CONFIG_SITE' environment variable to the location of the site script. +-A warning: not all `configure' scripts look for a site script. +- +-Defining Variables +-================== +- +-Variables not defined in a site shell script can be set in the +-environment passed to `configure'. However, some packages may run +-configure again during the build, and the customized values of these +-variables may be lost. In order to avoid this problem, you should set +-them in the `configure' command line, using `VAR=value'. For example: +- +- ./configure CC=/usr/local2/bin/gcc +- +-causes the specified `gcc' to be used as the C compiler (unless it is +-overridden in the site shell script). +- +-Unfortunately, this technique does not work for `CONFIG_SHELL' due to +-an Autoconf bug. Until the bug is fixed you can use this workaround: +- +- CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash +- +-`configure' Invocation +-====================== +- +-`configure' recognizes the following options to control how it operates. +- +-`--help' +-`-h' +- Print a summary of the options to `configure', and exit. +- +-`--version' +-`-V' +- Print the version of Autoconf used to generate the `configure' +- script, and exit. +- +-`--cache-file=FILE' +- Enable the cache: use and save the results of the tests in FILE, +- traditionally `config.cache'. FILE defaults to `/dev/null' to +- disable caching. +- +-`--config-cache' +-`-C' +- Alias for `--cache-file=config.cache'. +- +-`--quiet' +-`--silent' +-`-q' +- Do not print messages saying which checks are being made. To +- suppress all normal output, redirect it to `/dev/null' (any error +- messages will still be shown). +- +-`--srcdir=DIR' +- Look for the package's source code in directory DIR. Usually +- `configure' can determine that directory automatically. +- +-`configure' also accepts some other, not widely useful, options. Run +-`configure --help' for more details. +- +diff -urN remmina-plugins-gnome/README remmina-plugins-gnome/README +--- remmina-plugins-gnome/README 2012-02-11 05:54:23.000000000 +1100 ++++ remmina-plugins-gnome/README 1970-01-01 10:00:00.000000000 +1000 +@@ -1,4 +0,0 @@ +-Please visit the Remmina official web site for general information: +- +-http://remmina.sourceforge.net +- diff --git a/net/remmina/files/patch-remmina_CMakeFiles.txt b/net/remmina/files/patch-remmina_CMakeFiles.txt deleted file mode 100644 index 644c6e1..0000000 --- a/net/remmina/files/patch-remmina_CMakeFiles.txt +++ /dev/null @@ -1,9 +0,0 @@ ---- remmina/CMakeLists.txt.orig 2013-05-21 03:32:51.737574552 +0000 -+++ remmina/CMakeLists.txt 2013-05-21 03:33:13.052583969 +0000 -@@ -139,5 +139,5 @@ - install(TARGETS remmina DESTINATION ${CMAKE_INSTALL_BINDIR}) - - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/remmina.pc.in ${CMAKE_CURRENT_BINARY_DIR}/remmina.pc @ONLY) --install(FILES ${CMAKE_CURRENT_BINARY_DIR}/remmina.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) -+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/remmina.pc DESTINATION libdata/pkgconfig) - diff --git a/net/remmina/files/remmina.desktop b/net/remmina/files/remmina.desktop deleted file mode 100644 index 01d00d1..0000000 --- a/net/remmina/files/remmina.desktop +++ /dev/null @@ -1,61 +0,0 @@ -[Desktop Entry] -Version=1.0 -Name=Remmina Remote Desktop Client -Name[bg]=Клиент за отдалечен достъп Remmina -Name[ca]=Client d'escriptori remot Remmina -Name[cs]=Klient vzdálené plochy Remmina -Name[da]=Remmina Fjernskrivebords Klient -Name[de]=Remmina Betrachter für entfernte Arbeitsflächen -Name[el]=Remmina Απομακρυσμένη Σύνδεση -Name[es]=Cliente de escritorio remoto Remmina -Name[eu]=Remmina, urruneko mahaigainen bezeroa -Name[fr]=Visionneur de bureaux distants Remmina -Name[hu]=Remmina távoli asztal kliens -Name[id]=Remmina Remote Desktop Client -Name[it]=Client di connessione a desktop remoti Remmina -Name[kk]=Remmina қашықтаған жұмыс үстел клиенті -Name[lt]=Remmina nutolusio darbalaukio klientas -Name[nl]=Remmina Extern Bureaublad Client -Name[pl]=Klient zdalnego pulpitu Remmina -Name[pt_BR]=Cliente de área de trabalho remota Remmina -Name[pt_PT]=Visualizador de Área de Trabalho Remota -Name[ru]=Клиент удалённого рабочего стола Remmina -Name[sk]=Klient pripojenia k vzdialenej ploche Remmina -Name[sv]=Remmina - Klient för fjärrskrivbord -Name[th]=Remmina ลูกข่ายพื้นโต๊ะระยะไกล -Name[tr]=Remmina Uzak Masaüstü Bağlantı Aracı -Name[uk]=Клієнт з'єднань з відаленим комп'ютером Remmina -Name[zh_CN]=Remmina 远程桌面客户端 -Comment=Connect to remote desktops -Comment[bg]=Свързване към отдалечени компютри -Comment[ca]=Connecteu-vos a escriptoris remots -Comment[cs]=Připojení ke vzdáleným plochám -Comment[da]=Tilslut fjernskriveborde -Comment[de]=Zu entfernten Arbeitsflächen verbinden -Comment[es]=Conectar a escritorio remoto -Comment[eu]=Konektatu urruneko mahaigainekin -Comment[fr]=Connectez-vous à des bureaux distants -Comment[hu]=Kapcsolódás távoli asztalokhoz -Comment[id]=Mengakses remote desktop -Comment[it]=Connessione a desktop remoti -Comment[kk]=Қашықтаған жұмыс үстелдерге қосылу -Comment[lt]=Jungtis prie nutolusių darbalaukių -Comment[nl]=Verbinding maken met bureaubladen op afstand -Comment[pl]=Łączy ze zdalnymi pulpitami -Comment[pt_BR]=Conecte-se a áreas de trabalho remotas -Comment[pt_PT]=Ligar a áreas de trabalho remotas -Comment[ru]=Подключение к удалённым рабочим столам -Comment[sk]=Pripojenie k vzdialeným plochám -Comment[sv]=Anslut till fjärrskrivbord -Comment[th]=เชื่อมต่อไปยังพื้นโต๊ะระยะไกล -Comment[tr]=Uzak masaüstlerine bağlan -Comment[uk]=З'єднання з відаленим комп'ютером -Comment[zh_CN]=连接到远程桌面 -TryExec=remmina -Exec=remmina -Icon=remmina -Terminal=false -Type=Application -Actions= -Categories=GTK;GNOME;X-GNOME-NetworkSettings;Network; - diff --git a/net/remmina/pkg-plist b/net/remmina/pkg-plist index 0697db1..73d6c34 100644 --- a/net/remmina/pkg-plist +++ b/net/remmina/pkg-plist @@ -1,86 +1,49 @@ bin/remmina libdata/pkgconfig/remmina.pc share/applications/remmina.desktop -share/icons/hicolor/48x48/apps/remmina.png -share/icons/hicolor/24x24/apps/remmina.png -share/icons/hicolor/scalable/apps/remmina.svg -share/icons/hicolor/32x32/apps/remmina.png -share/icons/hicolor/22x22/apps/remmina.png -share/icons/hicolor/22x22/actions/remmina-switch-page.png +share/icons/hicolor/16x16/actions/remmina-fit-window.png +share/icons/hicolor/16x16/actions/remmina-fullscreen.png +share/icons/hicolor/16x16/actions/remmina-pin-down.png +share/icons/hicolor/16x16/actions/remmina-pin-up.png +share/icons/hicolor/16x16/actions/remmina-scale.png +share/icons/hicolor/16x16/actions/remmina-switch-page.png +share/icons/hicolor/16x16/apps/remmina.png +share/icons/hicolor/16x16/emblems/remmina-sftp.png share/icons/hicolor/22x22/actions/remmina-fit-window.png share/icons/hicolor/22x22/actions/remmina-fullscreen.png share/icons/hicolor/22x22/actions/remmina-scale.png +share/icons/hicolor/22x22/actions/remmina-switch-page.png +share/icons/hicolor/22x22/apps/remmina.png share/icons/hicolor/22x22/emblems/remmina-sftp.png -share/icons/hicolor/16x16/apps/remmina.png -share/icons/hicolor/16x16/emblems/remmina-sftp.png -share/icons/hicolor/16x16/actions/remmina-switch-page.png -share/icons/hicolor/16x16/actions/remmina-fullscreen.png -share/icons/hicolor/16x16/actions/remmina-scale.png -share/icons/hicolor/16x16/actions/remmina-fit-window.png -share/icons/hicolor/16x16/actions/remmina-pin-up.png -share/icons/hicolor/16x16/actions/remmina-pin-down.png -%%NLS%%share/locale/th/LC_MESSAGES/remmina.mo -%%NLS%%share/locale/el/LC_MESSAGES/remmina.mo -%%NLS%%share/locale/uk/LC_MESSAGES/remmina.mo -%%NLS%%share/locale/de/LC_MESSAGES/remmina.mo -%%NLS%%share/locale/zh_CN/LC_MESSAGES/remmina.mo -%%NLS%%share/locale/id/LC_MESSAGES/remmina.mo -%%NLS%%share/locale/ru/LC_MESSAGES/remmina.mo -%%NLS%%share/locale/eu/LC_MESSAGES/remmina.mo -%%NLS%%share/locale/sv/LC_MESSAGES/remmina.mo -%%NLS%%share/locale/kk/LC_MESSAGES/remmina.mo -%%NLS%%share/locale/it/LC_MESSAGES/remmina.mo +share/icons/hicolor/24x24/apps/remmina.png +share/icons/hicolor/32x32/apps/remmina.png +share/icons/hicolor/48x48/apps/remmina.png +share/icons/hicolor/scalable/apps/remmina.svg +%%NLS%%share/locale/bg/LC_MESSAGES/remmina.mo %%NLS%%share/locale/ca/LC_MESSAGES/remmina.mo +%%NLS%%share/locale/cs/LC_MESSAGES/remmina.mo %%NLS%%share/locale/da/LC_MESSAGES/remmina.mo -%%NLS%%share/locale/sk/LC_MESSAGES/remmina.mo -%%NLS%%share/locale/tr/LC_MESSAGES/remmina.mo -%%NLS%%share/locale/bg/LC_MESSAGES/remmina.mo -%%NLS%%share/locale/hu/LC_MESSAGES/remmina.mo +%%NLS%%share/locale/de/LC_MESSAGES/remmina.mo +%%NLS%%share/locale/el/LC_MESSAGES/remmina.mo %%NLS%%share/locale/es/LC_MESSAGES/remmina.mo -%%NLS%%share/locale/pt_BR/LC_MESSAGES/remmina.mo -%%NLS%%share/locale/pl/LC_MESSAGES/remmina.mo -%%NLS%%share/locale/pt_PT/LC_MESSAGES/remmina.mo +%%NLS%%share/locale/eu/LC_MESSAGES/remmina.mo +%%NLS%%share/locale/fr/LC_MESSAGES/remmina.mo +%%NLS%%share/locale/hu/LC_MESSAGES/remmina.mo +%%NLS%%share/locale/id/LC_MESSAGES/remmina.mo +%%NLS%%share/locale/it/LC_MESSAGES/remmina.mo +%%NLS%%share/locale/kk/LC_MESSAGES/remmina.mo %%NLS%%share/locale/lt/LC_MESSAGES/remmina.mo -%%NLS%%share/locale/cs/LC_MESSAGES/remmina.mo %%NLS%%share/locale/nl/LC_MESSAGES/remmina.mo -%%NLS%%share/locale/fr/LC_MESSAGES/remmina.mo -%%DATADIR%%/icons/hicolor/24x24/apps/remmina.png -%%DATADIR%%/icons/hicolor/48x48/apps/remmina.png -%%DATADIR%%/icons/hicolor/scalable/apps/remmina.svg -%%DATADIR%%/icons/hicolor/16x16/apps/remmina.png -%%DATADIR%%/icons/hicolor/16x16/emblems/remmina-sftp.png -%%DATADIR%%/icons/hicolor/16x16/actions/remmina-pin-down.png -%%DATADIR%%/icons/hicolor/16x16/actions/remmina-fit-window.png -%%DATADIR%%/icons/hicolor/16x16/actions/remmina-fullscreen.png -%%DATADIR%%/icons/hicolor/16x16/actions/remmina-scale.png -%%DATADIR%%/icons/hicolor/16x16/actions/remmina-pin-up.png -%%DATADIR%%/icons/hicolor/16x16/actions/remmina-switch-page.png -%%DATADIR%%/icons/hicolor/32x32/apps/remmina.png -%%DATADIR%%/icons/hicolor/22x22/apps/remmina.png -%%DATADIR%%/icons/hicolor/22x22/actions/remmina-scale.png -%%DATADIR%%/icons/hicolor/22x22/actions/remmina-switch-page.png -%%DATADIR%%/icons/hicolor/22x22/actions/remmina-fullscreen.png -%%DATADIR%%/icons/hicolor/22x22/actions/remmina-fit-window.png -%%DATADIR%%/icons/hicolor/22x22/emblems/remmina-sftp.png +%%NLS%%share/locale/pl/LC_MESSAGES/remmina.mo +%%NLS%%share/locale/pt_BR/LC_MESSAGES/remmina.mo +%%NLS%%share/locale/pt_PT/LC_MESSAGES/remmina.mo +%%NLS%%share/locale/ru/LC_MESSAGES/remmina.mo +%%NLS%%share/locale/sk/LC_MESSAGES/remmina.mo +%%NLS%%share/locale/sv/LC_MESSAGES/remmina.mo +%%NLS%%share/locale/th/LC_MESSAGES/remmina.mo +%%NLS%%share/locale/tr/LC_MESSAGES/remmina.mo +%%NLS%%share/locale/uk/LC_MESSAGES/remmina.mo +%%NLS%%share/locale/zh_CN/LC_MESSAGES/remmina.mo @exec %%LOCALBASE%%/bin/update-desktop-database > /dev/null || /usr/bin/true @unexec %%LOCALBASE%%/bin/update-desktop-database > /dev/null || /usr/bin/true -@dirrmtry %%DATADIR%%/icons/hicolor/scalable/apps -@dirrmtry %%DATADIR%%/icons/hicolor/scalable -@dirrmtry %%DATADIR%%/icons/hicolor/48x48/apps -@dirrmtry %%DATADIR%%/icons/hicolor/48x48 -@dirrmtry %%DATADIR%%/icons/hicolor/32x32/apps -@dirrmtry %%DATADIR%%/icons/hicolor/32x32 -@dirrmtry %%DATADIR%%/icons/hicolor/24x24/apps -@dirrmtry %%DATADIR%%/icons/hicolor/24x24 -@dirrmtry %%DATADIR%%/icons/hicolor/22x22/actions -@dirrmtry %%DATADIR%%/icons/hicolor/22x22/apps -@dirrmtry %%DATADIR%%/icons/hicolor/22x22/emblems -@dirrmtry %%DATADIR%%/icons/hicolor/22x22 -@dirrmtry %%DATADIR%%/icons/hicolor/16x16/actions -@dirrmtry %%DATADIR%%/icons/hicolor/16x16/apps -@dirrmtry %%DATADIR%%/icons/hicolor/16x16/emblems -@dirrmtry %%DATADIR%%/icons/hicolor/16x16 -@dirrmtry %%DATADIR%%/icons/hicolor -@dirrmtry %%DATADIR%%/icons -@dirrmtry %%DATADIR%% @dirrmtry include/remmina |