Merge branch 'master' of git://localhost/acess2
[tpg/acess2.git] / Usermode / Applications / gui_shell_src / main.c
index 1c748b3..ec88bf3 100644 (file)
@@ -96,7 +96,7 @@ int main(int argc, char *argv[], const char **envp)
                {
                        _SysDebug("Activity on child stdout");
                        // Read and update screen
-                       char    buf[32];
+                       char    buf[128];
                        int len = _SysRead(giChildStdout, buf, sizeof(buf));
                        if( len <= 0 )  break;
                        
@@ -112,14 +112,14 @@ int Term_KeyHandler(tHWND Window, int bPress, uint32_t KeySym, uint32_t Translat
        static int      ctrl_state = 0;
 
        // Handle modifiers
-       #define _bitset(var,bit,set) do{if(set)var|=1<<(bit);else var&=1<<(bit);}while(0)
+       #define _bitset(var,bit,set) do{if(set)var|=1<<(bit);else var&=~(1<<(bit));}while(0)
        switch(KeySym)
        {
        case KEYSYM_LEFTCTRL:
-               _bitset(ctrl_state, 0, bPress);
+               _bitset(ctrl_state, 0, bPress!=0);
                return 0;
        case KEYSYM_RIGHTCTRL:
-               _bitset(ctrl_state, 0, bPress);
+               _bitset(ctrl_state, 1, bPress!=0);
                return 0;
        }
        #undef _bitset
@@ -129,32 +129,38 @@ int Term_KeyHandler(tHWND Window, int bPress, uint32_t KeySym, uint32_t Translat
        if( ctrl_state && KeySym >= KEYSYM_a && KeySym <= KEYSYM_z )
        {
                Translated = KeySym - KEYSYM_a + 1;
+               _SysDebug("Ctrl-%c: KS %x => Trans %x", 'A'+(KeySym-KEYSYM_a), KeySym, Translated);
        }
 
-       if( Translated )
+       // == 2 :: FIRE
+       if( bPress == 2 )
        {
-               char    buf[6];
-                int    len;
-               
-               // Encode and send
-               len = WriteUTF8(buf, Translated);
-               
-               _SysWrite(giChildStdin, buf, len);
+               if( Translated )
+               {
+                       char    buf[6];
+                        int    len;
+                       
+                       // Encode and send
+                       len = WriteUTF8(buf, Translated);
+                       
+                       _SysDebug("Keystroke %x:%x translated to '%.*s'", KeySym, Translated, len, buf);
+                       _SysWrite(giChildStdin, buf, len);
+                       
+                       return 0;
+               }
                
-               return 0;
-       }
-       
-       // No translation, look for escape sequences to send
-       const char *str = NULL;
-       switch(KeySym)
-       {
-       case KEYSYM_LEFTARROW:
-               str = "\x1b[D";
-               break;
-       }
-       if( str )
-       {
-               _SysWrite(giChildStdin, str, strlen(str));
+               // No translation, look for escape sequences to send
+               const char *str = NULL;
+               switch(KeySym)
+               {
+               case KEYSYM_LEFTARROW:
+                       str = "\x1b[D";
+                       break;
+               }
+               if( str )
+               {
+                       _SysWrite(giChildStdin, str, strlen(str));
+               }
        }
        return 0;
 }
@@ -179,7 +185,7 @@ void Term_HandleOutput(int Len, const char *Buf)
                        esc_len = -esc_len;
                }
                ofs += esc_len;
-               _SysDebug("Len = %i, ofs = %i", Len, ofs);
+               //_SysDebug("Len = %i, ofs = %i", Len, ofs);
        }
        
        Display_Flush();

UCC git Repository :: git.ucc.asn.au