diff -aburN xrdp-0.3.2-orig/common/lang.h xrdp-0.3.2-fr-feisty/common/lang.h
--- xrdp-0.3.2-orig/common/lang.h	1970-01-01 01:00:00.000000000 +0100
+++ xrdp-0.3.2-fr-feisty/common/lang.h	2007-05-24 22:17:23.000000000 +0200
@@ -0,0 +1,76 @@
+/**
+ * French keymap for xrdp
+ *  http://en.wikipedia.org/wiki/Image:KeyboardLayout-French.png
+ * based on german keymap from trixieben :
+ *  http://sourceforge.net/tracker/index.php?func=detail&aid=1549355&group_id=112022&atid=665248
+ *
+ * Note: I had to replace :
+ *   if (!(param2 == 0x0100) && (param1 == 0x0038)) {
+ * by
+ *   if ((param2 != 0xFFFF) && (param1 == 0x0038)) {
+ * in vnc.c (around line 148) to make the _ work
+ * 
+ * Remember that the left Alt is used instead of AltGr
+ * Some non US characters are not displayed éèç...
+ * it seems to work only for ASCII char :(
+ *
+ * 2007/05/24
+ *  by JJL <BuggerOne@gmail.com>
+ *  http://kubuntu.free.fr
+ */
+
+const int sizeof_lang_default = 94;
+
+/* a lot of not usefull char are in this array, but can be needed for other keymaps */
+static int lang_default[2][94] = {
+   /** US Keyboard - no modifier **/
+   /*  `    1    2    3    4    5    6    7    8    9    0    -    =  */
+   {0x60,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x30,0x2D,0x3D,
+   /*  q    w    e    r    t    y    u    i    o    p    [    ]       */
+    0x71,0x77,0x65,0x72,0x74,0x79,0x75,0x69,0x6F,0x70,0x5B,0x5D,
+   /*  a    s    d    f    g    h    j    k    l    ;    '    \       */
+    0x61,0x73,0x64,0x66,0x67,0x68,0x6A,0x6B,0x6C,0x3B,0x27,0x5C,
+   /*       z    x    c    v    b    n    m    ,    .    /            */
+         0x7A,0x78,0x63,0x76,0x62,0x6E,0x6D,0x2C,0x2E,0x2F,
+   /** US Keyboard - Shift **/
+   /*  ~    !    @    #    $    %    ^    &    *    (    )    _    +  */
+    0x7E,0x21,0x40,0x23,0x24,0x25,0x5E,0x26,0x2A,0x28,0x29,0x5F,0x2B,
+   /*  Q    W    E    R    T    Y    U    I    O    P    {    }       */
+    0x51,0x57,0x45,0x52,0x54,0x59,0x55,0x49,0x4F,0x50,0x7B,0x7D,
+   /*  A    S    D    F    G    H    J    K    L    :    "    |       */
+    0x41,0x53,0x44,0x46,0x47,0x48,0x4A,0x4B,0x4C,0x3A,0x22,0x7C,
+   /*       Z    X    C    V    B    N    M    <    >    ?            */
+         0x5A,0x58,0x43,0x56,0x42,0x4E,0x4D,0x3C,0x3E,0x3F             },
+   /** French keyboard - no modifier **/
+   /*  ²    &    é    "    '    (    -    è    _    ç    à    )    =  */
+   {0xB2,0x26,0xE9,0x22,0x27,0x28,0x2D,0xE8,0x5F,0xE7,0xE0,0x29,0x3D,
+   /*  a    z    e    r    t    y    u    i    o    p    ^    $       */
+    0x61,0x7A,0x65,0x72,0x74,0x79,0x75,0x69,0x6F,0x70,0x5E,0x24,
+   /*  q    s    d    f    g    h    j    k    l    m    ù    *       */
+    0x71,0x73,0x64,0x66,0x67,0x68,0x6A,0x6B,0x6C,0x6D,0xF9,0x2A,
+   /*  <    w    x    c    v    b    n    ,    ;    :    !            */
+         0x77,0x78,0x63,0x76,0x62,0x6E,0x2C,0x3B,0x3A,0x21,
+   /** French Keyboard - Shift **/
+   /*  ~    1    2    3    4    5    6    7    8    9    0    °    +  */
+    0x7E,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x30,0xB0,0x2B,
+   /*  A    Z    E    R    T    Y    U    I    O    P    "    £       */
+    0x41,0x5A,0x45,0x52,0x54,0x59,0x55,0x49,0x4F,0x50,0x22,0xA3,
+   /*  Q    S    D    F    G    H    J    K    L    M    %    µ       */
+    0x51,0x53,0x44,0x46,0x47,0x48,0x4A,0x4B,0x4C,0x4D,0x25,0xB5,
+   /*  >    W    X    C    V    B    N    ?    .    /    §            */
+         0x57,0x58,0x43,0x56,0x42,0x4E,0x3F,0x2E,0x2F,0xA7             }
+   };
+
+/* changed only altgr for numerics on top of the keyboard. the others are still german ones */
+static char altgr_chars[] =
+  /*          1     2     3     4     5     6     7     8      9     0     )     =  */
+ {'\0', '¬', '¹',  '~',  '#',  '{',  '[',  '|',  '`',  '\\',  '^',  '@',  ']',  '}', '\0', '\0',
+  '@',  'Å',  '¢',  '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '~',  '\0', '\0', 'Â',  '\0',
+  '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0',  '~', '\0', '\0', '\0', '\0', '\0', '\0',
+  '\0', '\0', 'µ',  '«',  '»',  '\0', '\0', '*', '\0',  ' ',  '\0', '\0', '\0', '\0', '\0', '\0',
+  '\0', '\0', '\0', '\0', '\0', '\0', '\0', '7',  '8',  '9',  '-',  '4',  '5',  '6',  '+',  '1',
+  '2',  '3',  '0',  '.',  '\0', '\0', '|', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0',
+  '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0',
+  '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0'};
+
+  
diff -aburN xrdp-0.3.2-orig/docs/Makefile xrdp-0.3.2-fr-feisty/docs/Makefile
--- xrdp-0.3.2-orig/docs/Makefile	2006-03-04 02:02:02.000000000 +0100
+++ xrdp-0.3.2-fr-feisty/docs/Makefile	2007-06-04 15:13:11.000000000 +0200
@@ -1,9 +1,9 @@
 
-DESTDIR = /usr/local/xrdp
-CFGDIR = /etc/xrdp
-PIDDIR = /var/run
-MANDIR = /usr/local/man
-DOCDIR = /usr/doc/xrdp
+DESTDIR = /opt/xrdp/bin
+CFGDIR = /opt/xrdp/etc
+PIDDIR = /opt/xrdp/
+MANDIR = /opt/xrdp/man
+DOCDIR = /opt/xrdp/doc
 
 all: world
 
diff -aburN xrdp-0.3.2-orig/libxrdp/Makefile xrdp-0.3.2-fr-feisty/libxrdp/Makefile
--- xrdp-0.3.2-orig/libxrdp/Makefile	2006-03-13 01:58:12.000000000 +0100
+++ xrdp-0.3.2-fr-feisty/libxrdp/Makefile	2007-06-04 15:13:11.000000000 +0200
@@ -4,11 +4,11 @@
              xrdp_bitmap_compress.o \
              os_calls.o ssl_calls.o file.o
 
-DESTDIR = /usr/local/xrdp
-CFGDIR = /etc/xrdp
-PIDDIR = /var/run
-MANDIR = /usr/local/man
-DOCDIR = /usr/doc/xrdp
+DESTDIR = /opt/xrdp/bin
+CFGDIR = /opt/xrdp/etc
+PIDDIR = /opt/xrdp/
+MANDIR = /opt/xrdp/man
+DOCDIR = /opt/xrdp/doc
 
 DEFINES = -DXRDP_CFG_FILE=\"$(CFGDIR)/xrdp.ini\" \
           -DXRDP_KEY_FILE=\"$(CFGDIR)/rsakeys.ini\"
diff -aburN xrdp-0.3.2-orig/Makefile xrdp-0.3.2-fr-feisty/Makefile
--- xrdp-0.3.2-orig/Makefile	2006-03-04 02:02:01.000000000 +0100
+++ xrdp-0.3.2-fr-feisty/Makefile	2007-06-04 15:13:11.000000000 +0200
@@ -1,9 +1,9 @@
 
-DESTDIR = /usr/local/xrdp
-CFGDIR = /etc/xrdp
-PIDDIR = /var/run
-MANDIR = /usr/local/man
-DOCDIR = /usr/doc/xrdp
+DESTDIR = /opt/xrdp/bin
+CFGDIR = /opt/xrdp/etc
+PIDDIR = /opt/xrdp/
+MANDIR = /opt/xrdp/man
+DOCDIR = /opt/xrdp/doc
 
 all: world
 
@@ -66,4 +66,4 @@
 	make -C xup installdeb DESTDIRDEB=$(DESTDIRDEB)
 	make -C docs installdeb DESTDIRDEB=$(DESTDIRDEB)
 	install instfiles/pam.d/sesman $(DESTDIRDEB)/etc/pam.d/sesman
-	install instfiles/xrdp_control1.sh $(DESTDIRDEB)/etc/init.d/xrdp_control.sh
+	install instfiles/xrdp_control.sh $(DESTDIRDEB)/etc/init.d/xrdp_control.sh
diff -aburN xrdp-0.3.2-orig/rdp/Makefile xrdp-0.3.2-fr-feisty/rdp/Makefile
--- xrdp-0.3.2-orig/rdp/Makefile	2006-03-04 02:02:04.000000000 +0100
+++ xrdp-0.3.2-fr-feisty/rdp/Makefile	2007-06-04 15:13:11.000000000 +0200
@@ -2,11 +2,11 @@
 RDPOBJ = ssl_calls.o os_calls.o rdp.o rdp_tcp.o rdp_iso.o rdp_mcs.o rdp_sec.o \
          rdp_orders.o rdp_bitmap.o rdp_rdp.o rdp_lic.o
 
-DESTDIR = /usr/local/xrdp
-CFGDIR = /etc/xrdp
-PIDDIR = /var/run
-MANDIR = /usr/local/man
-DOCDIR = /usr/doc/xrdp
+DESTDIR = /opt/xrdp/bin
+CFGDIR = /opt/xrdp/etc
+PIDDIR = /opt/xrdp/
+MANDIR = /opt/xrdp/man
+DOCDIR = /opt/xrdp/doc
 
 DEFINES =
 
diff -aburN xrdp-0.3.2-orig/sesman/Makefile xrdp-0.3.2-fr-feisty/sesman/Makefile
--- xrdp-0.3.2-orig/sesman/Makefile	2006-05-26 15:10:14.000000000 +0200
+++ xrdp-0.3.2-fr-feisty/sesman/Makefile	2007-06-04 15:13:11.000000000 +0200
@@ -6,11 +6,11 @@
 SESRUNOBJ = sesrun.o config.o tcp.o \
             os_calls.o d3des.o list.o file.o log.o
 
-DESTDIR = /usr/local/xrdp
-CFGDIR = /etc/xrdp
-PIDDIR = /var/run
-MANDIR = /usr/local/man
-DOCDIR = /usr/doc/xrdp
+DESTDIR = /opt/xrdp/bin
+CFGDIR = /opt/xrdp/etc
+PIDDIR = /opt/xrdp/
+MANDIR = /opt/xrdp/man
+DOCDIR = /opt/xrdp/doc
 
 DEFINES = -DSESMAN_CFG_FILE=\"$(CFGDIR)/sesman.ini\" \
           -DSESMAN_PID_FILE=\"$(PIDDIR)/sesman.pid\"
diff -aburN xrdp-0.3.2-orig/sesman/session.c xrdp-0.3.2-fr-feisty/sesman/session.c
--- xrdp-0.3.2-orig/sesman/session.c	2006-05-25 22:34:32.000000000 +0200
+++ xrdp-0.3.2-fr-feisty/sesman/session.c	2007-05-22 00:41:12.000000000 +0200
@@ -241,8 +241,12 @@
         env_check_password_file(passwd_file, password);
         if (type == SESMAN_SESSION_TYPE_XVNC)
         {
-          g_execlp11("Xvnc", "Xvnc", screen, "-geometry", geometry,
-                     "-depth", depth, "-bs", "-rfbauth", passwd_file, 0);
+          /* g_execlp11("Xvnc", "Xvnc", screen, "-geometry", geometry,
+                     "-depth", depth, "-bs", "-rfbauth", passwd_file, 0); */
+           /* modif for bug in feisty */
+           /* https://bugs.launchpad.net/ubuntu/+source/vnc4/+bug/78282 */
+           execlp("Xvnc", "Xvnc", screen, "-geometry", geometry,
+                     "-depth", "16", "-bs", "-rfbauth", passwd_file, "-extension", "XFIXES","-fp", "/usr/share/fonts/X11/misc",(void*)0);
         }
         else if (type == SESMAN_SESSION_TYPE_XRDP)
         {
diff -aburN xrdp-0.3.2-orig/sesman/verify_user_pam.c xrdp-0.3.2-fr-feisty/sesman/verify_user_pam.c
--- xrdp-0.3.2-orig/sesman/verify_user_pam.c	2006-05-31 19:47:43.000000000 +0200
+++ xrdp-0.3.2-fr-feisty/sesman/verify_user_pam.c	2007-05-20 23:36:07.000000000 +0200
@@ -120,8 +120,8 @@
   error = pam_authenticate(auth_info->ph, 0);
   if (error != PAM_SUCCESS)
   {
-    g_printf("pam_authenticate failed: %s\r\n",
-                         pam_strerror(auth_info->ph, error));
+    g_printf("pam_authenticate failed: %s (%s,%s)\r\n",
+                         pam_strerror(auth_info->ph, error),user,pass);
     g_free(auth_info);
     return 0;
   }
diff -aburN xrdp-0.3.2-orig/vnc/Makefile xrdp-0.3.2-fr-feisty/vnc/Makefile
--- xrdp-0.3.2-orig/vnc/Makefile	2006-03-04 02:02:06.000000000 +0100
+++ xrdp-0.3.2-fr-feisty/vnc/Makefile	2007-06-04 15:13:11.000000000 +0200
@@ -1,11 +1,11 @@
 # libvnc makefile
 VNCOBJ = vnc.o os_calls.o d3des.o
 
-DESTDIR = /usr/local/xrdp
-CFGDIR = /etc/xrdp
-PIDDIR = /var/run
-MANDIR = /usr/local/man
-DOCDIR = /usr/doc/xrdp
+DESTDIR = /opt/xrdp/bin
+CFGDIR = /opt/xrdp/etc
+PIDDIR = /opt/xrdp/
+MANDIR = /opt/xrdp/man
+DOCDIR = /opt/xrdp/doc
 
 DEFINES =
 
diff -aburN xrdp-0.3.2-orig/vnc/vnc.c xrdp-0.3.2-fr-feisty/vnc/vnc.c
--- xrdp-0.3.2-orig/vnc/vnc.c	2006-05-03 01:36:01.000000000 +0200
+++ xrdp-0.3.2-fr-feisty/vnc/vnc.c	2007-05-24 22:02:37.000000000 +0200
@@ -123,6 +123,7 @@
   return 0;
 }
 
+
 /******************************************************************************/
 int DEFAULT_CC
 lib_mod_event(struct vnc* v, int msg, long param1, long param2,
@@ -131,6 +132,7 @@
   struct stream* s;
   int key;
   int error;
+  int i;
   int x;
   int y;
   int cx;
@@ -142,9 +144,25 @@
   if (msg >= 15 && msg <= 16) /* key events */
   {
     key = 0;
+    // if (!(param2 == 0x0100) && (param1 == 0x0038)) {
+    if ((param2 != 0xFFFF) && (param1 == 0x0038)) {
+	if (msg == 15) {
+	  v->altgr_state = 1;
+	} else {
+	  v->altgr_state = 0;
+	}
+        // printf ("ALTGR 0x%X,0x%X\n",param1,param2);
+    }
     if (param2 == 0xffff) /* ascii char */
     {
       key = param1;
+	if (!v->altgr_state) {
+        for(i = 0; i < sizeof_lang_default; i++)
+                if (lang_default[0][i] == param1)
+                        key = lang_default[1][i]; 
+         //printf ("ASCII KEY RECEIVED : 0x%X (0x%X) --> %c\n",param1,param2,key);
+	}
+
     }
     else /* non ascii key event */
     {
@@ -162,8 +180,8 @@
           /* the server will know */
           /* for now, sending left tab, I don't know which is best */
           /* nope, sending tab always */
-          /* key = (v->shift_state) ? 0xfe20 : 0xff09; */
-          key = 0xff09;
+          key = (v->shift_state) ? 0xfe20 : 0xff09; 
+          /* key = 0xff09; */
           break;
         case 0x001c: /* enter */
           key = 0xff0d;
@@ -179,8 +197,11 @@
           key = 0xffe2;
           v->shift_state = (msg == 15);
           break;
-        case 0x0038: /* left-right alt */
+     /*   case 0x0038:  left-right alt 
           key = (param2 & 0x0100) ? 0xffea : 0xffe9;
+	  break; */
+	case 0x0056: /* < > */ 
+	  key = (v->shift_state) ? 0x003e : 0x003c; 
           break;
         case 0x003b: /* F1 */
           key = 0xffbe;
@@ -832,7 +853,7 @@
             else
             {
               in_uint8s(s, 2);
-              v->server_msg(v, "error - sesman returned no", 0);
+              v->server_msg(v, "Error - Fehlerhafte Auth. beim Session-Manager", 0);
             }
           }
         }
@@ -840,16 +861,16 @@
     }
     else
     {
-      v->server_msg(v, "error - connecting to sesman", 0);
+      v->server_msg(v, "Error - Keine Verbindung zum Session-Manager", 0);
     }
     g_tcp_close(v->sck);
     if (error != 0 || display == 0)
     {
-      v->server_msg(v, "error - connection failed", 0);
+      v->server_msg(v, "Error - Fehler bei der Verbindung!", 0);
       free_stream(s);
       return 1;
     }
-    v->server_msg(v, "sesman started a session", 0);
+    v->server_msg(v, "Die Sitzung wird gestartet.. OK!", 0);
     g_sprintf(con_port, "%d", 5900 + display);
     v->vnc_desktop = display;
   }
@@ -916,12 +937,12 @@
       in_uint32_be(s, i);
       if (i != 0)
       {
-        v->server_msg(v, "password failed", 0);
+        v->server_msg(v, "Falsches Kennwort", 0);
         error = 2;
       }
       else
       {
-        v->server_msg(v, "password ok", 0);
+        v->server_msg(v, "Kennwort OK", 0);
       }
     }
   }
diff -aburN xrdp-0.3.2-orig/vnc/vnc.h xrdp-0.3.2-fr-feisty/vnc/vnc.h
--- xrdp-0.3.2-orig/vnc/vnc.h	2006-02-04 19:23:36.000000000 +0100
+++ xrdp-0.3.2-fr-feisty/vnc/vnc.h	2006-09-19 16:09:52.000000000 +0200
@@ -25,6 +25,7 @@
 #include "parse.h"
 #include "os_calls.h"
 #include "d3des.h"
+#include "lang.h"
 
 struct vnc
 {
@@ -92,4 +93,5 @@
   char port[256];
   int sck_closed;
   int shift_state; /* 0 up, 1 down */
+  int altgr_state; /* 0 up, 1 down */
 };
diff -aburN xrdp-0.3.2-orig/xrdp/funcs.c xrdp-0.3.2-fr-feisty/xrdp/funcs.c
--- xrdp-0.3.2-orig/xrdp/funcs.c	2006-02-03 04:21:24.000000000 +0100
+++ xrdp-0.3.2-fr-feisty/xrdp/funcs.c	2006-09-19 16:10:32.000000000 +0200
@@ -21,6 +21,7 @@
 */
 
 #include "xrdp.h"
+#include "lang.h"
 
 /*****************************************************************************/
 /* returns boolean */
@@ -143,102 +144,6 @@
   return 1;
 }
 
-/*****************************************************************************/
-/*  scan codes
-    1 0x01  esc
-    2 0x02  1 or !
-    3 0x03  2 or @
-    4 0x04  3 or #
-    5 0x05  4 or $
-    6 0x06  5 or %
-    7 0x07  6 or ^
-    8 0x08  7 or &
-    9 0x09  8 or *
-    10 0x0a 9 or (
-    11 0x0b 0 or )
-    12 0x0c - or _
-    13 0x0d = or +
-    14 0x0e backspace
-    15 0x0f tab
-    16 0x10 q or Q
-    17 0x11 w or W
-    18 0x12 e or E
-    19 0x13 r or R
-    20 0x14 t or T
-    21 0x15 y or Y
-    22 0x16 u or U
-    23 0x17 i or I
-    24 0x18 o or O
-    25 0x19 p or P
-    26 0x1a [ or {
-    27 0x1b ] or }
-    28 0x1c enter, keypad is ext
-    29 0x1d left or right ctrl, ext flag is right
-    30 0x1e a or A
-    31 0x1f s or S
-    32 0x20 d or D
-    33 0x21 f or F
-    34 0x22 g or G
-    35 0x23 h or H
-    36 0x24 j or J
-    37 0x25 k or K
-    38 0x26 l or L
-    39 0x27 ; or :
-    40 0x28 ' or "
-    41 0x29  ` or ~
-    42 0x2a left shift
-    43 0x2b \
-    44 0x2c z or Z
-    45 0x2d x or X
-    46 0x2e c or C
-    47 0x2f v or V
-    48 0x30 b or B
-    49 0x31 n or N
-    50 0x32 m or M
-    51 0x33 , or <
-    52 0x34 . or >
-    53 0x35 / can be / on keypad, ext flag is keypad
-    54 0x36 right shift
-    55 0x37 * on keypad or print screen if ext
-    56 0x38 left or right alt, ext flag is right
-    57 0x39 space
-    58 0x3a caps lock
-    59 0x3b F1
-    60 0x3c F2
-    61 0x3d F3
-    62 0x3e F4
-    63 0x3f F5
-    64 0x40 F6
-    65 0x41 F7
-    66 0x42 F8
-    67 0x43 F9
-    68 0x44 F10
-    69 0x45 num lock
-    70 0x46 scroll lock
-    71 0x47 7 or home on keypad, ext flag is not keypad
-    72 0x48 8 or arrow up on keypad, ext flag is not keypad
-    73 0x49 9 or page up
-    74 0x4a -(minus) on keypad
-    75 0x4b 4 or arrow left on keypad, ext flag is not keypad
-    76 0x4c middle(5 key) of keypad
-    77 0x4d 6 or arrow right, can be on keypad, ext flag in not keypad
-    78 0x4e + on keypad
-    79 0x4f 1 or end
-    80 0x50 2 or arrow down, can be on keypad, ext flag in not keypad
-    81 0x51 3 or page down
-    82 0x52 0 or insert on keypad, ext flag is not keypad
-    83 0x53 . or delete on keypad, ext flag is not keypad
-    84 0x54
-    85 0x55
-    86 0x56
-    87 0x57 F11
-    88 0x58 F12
-    89 0x59
-    90 0x5a
-    91 0x5b left win key ext always on
-    92 0x5c right win key ext always on
-    93 0x5d menu key ext always on
-*/
 
 /* non shift chars */
 static char chars1[] =
@@ -258,6 +163,7 @@
   '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0',
   '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0',
   '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0'};
+
 /* shift chars */
 static char chars2[] =
 {'\0', '\0', '!',  '@',  '#',  '$',  '%',  '^',
@@ -277,6 +183,7 @@
  '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0',
  '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0'};
 
+
 /*****************************************************************************/
 char APP_CC
 get_char_from_scan_code(int device_flags, int scan_code, int* keys,
@@ -284,9 +191,11 @@
 {
   char rv;
   int shift;
+  int altgr;
   int ext;
 
   shift = keys[42] || keys[54];
+  altgr = keys[56];
   ext = device_flags & 0x0100;
   rv = 0;
   if (scan_code >= 128)
@@ -327,8 +236,15 @@
     }
     else
     {
+    	if (altgr)
+    	{
+      		rv = altgr_chars[scan_code];
+    	}
+	else
+	{
       rv = chars1[scan_code];
     }
+    }
     if (rv >= 'a' && rv <= 'z' && caps_lock)
     {
       rv = rv - ('a' - 'A');
diff -aburN xrdp-0.3.2-orig/xrdp/Makefile xrdp-0.3.2-fr-feisty/xrdp/Makefile
--- xrdp-0.3.2-orig/xrdp/Makefile	2006-03-04 02:02:08.000000000 +0100
+++ xrdp-0.3.2-fr-feisty/xrdp/Makefile	2007-06-04 15:13:11.000000000 +0200
@@ -5,11 +5,12 @@
           xrdp_login_wnd.o xrdp_interface.o \
           list.o file.o os_calls.o thread_calls.o
 
-DESTDIR = /usr/local/xrdp
-CFGDIR = /etc/xrdp
-PIDDIR = /var/run
-MANDIR = /usr/local/man
-DOCDIR = /usr/doc/xrdp
+DESTDIR = /opt/xrdp/bin
+#CFGDIR = /home/jjl/data/Ncd/ThinSTAR_400/xrdp/install
+CFGDIR = /opt/xrdp/etc
+PIDDIR = /opt/xrdp/
+MANDIR = /opt/xrdp/man
+DOCDIR = /opt/xrdp/doc
 
 DEFINES = -DXRDP_CFG_FILE=\"$(CFGDIR)/xrdp.ini\" \
           -DXRDP_PID_FILE=\"$(PIDDIR)/xrdp.pid\"
diff -aburN xrdp-0.3.2-orig/xup/Makefile xrdp-0.3.2-fr-feisty/xup/Makefile
--- xrdp-0.3.2-orig/xup/Makefile	2006-03-04 02:02:09.000000000 +0100
+++ xrdp-0.3.2-fr-feisty/xup/Makefile	2007-06-04 15:13:11.000000000 +0200
@@ -1,11 +1,11 @@
 # libxup makefile
 XUPOBJ = os_calls.o xup.o
 
-DESTDIR = /usr/local/xrdp
-CFGDIR = /etc/xrdp
-PIDDIR = /var/run
-MANDIR = /usr/local/man
-DOCDIR = /usr/doc/xrdp
+DESTDIR = /opt/xrdp/bin
+CFGDIR = /opt/xrdp/etc
+PIDDIR = /opt/xrdp/
+MANDIR = /opt/xrdp/man
+DOCDIR = /opt/xrdp/doc
 
 DEFINES =
 
