[ros-diffs] [ablackmann] 43989: Implement printout the the state tables. It seems to work fine, but the tool doesn't yet generate the modified keys (shift+, ctrl+, etc) for each virtual key. This is the last thing that remains.

ablackmann at svn.reactos.org ablackmann at svn.reactos.org
Fri Nov 6 23:42:27 CET 2009


Author: ablackmann
Date: Fri Nov  6 23:42:26 2009
New Revision: 43989

URL: http://svn.reactos.org/svn/reactos?rev=43989&view=rev
Log:
Implement printout the the state tables. It seems to work fine, but the tool doesn't yet generate the modified keys (shift+, ctrl+, etc) for each virtual key. This is the last thing that remains.


Modified:
    trunk/reactos/tools/kbdtool/kbdtool.h
    trunk/reactos/tools/kbdtool/output.c

Modified: trunk/reactos/tools/kbdtool/kbdtool.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/kbdtool/kbdtool.h?rev=43989&r1=43988&r2=43989&view=diff
==============================================================================
--- trunk/reactos/tools/kbdtool/kbdtool.h [iso-8859-1] (original)
+++ trunk/reactos/tools/kbdtool/kbdtool.h [iso-8859-1] Fri Nov  6 23:42:26 2009
@@ -54,6 +54,7 @@
     ULONG StateCount;
     ULONG CharData[8];
     ULONG DeadCharData[8];
+    UCHAR LigatureCharData[8];
     ULONG OtherCharData[8];
     struct LAYOUTENTRY* CapData;
     PCHAR Name;

Modified: trunk/reactos/tools/kbdtool/output.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/kbdtool/output.c?rev=43989&r1=43988&r2=43989&view=diff
==============================================================================
--- trunk/reactos/tools/kbdtool/output.c [iso-8859-1] (original)
+++ trunk/reactos/tools/kbdtool/output.c [iso-8859-1] Fri Nov  6 23:42:26 2009
@@ -17,8 +17,75 @@
 ULONG gStringIdForLocaleName = 1200;
 time_t Clock;
 struct tm *Now;
+CHAR gCharName[32];
 
 /* FUNCTIONS ******************************************************************/
+
+PCHAR
+WChName(IN ULONG Char,
+        IN BOOLEAN AddZero)
+{
+    PCHAR p;
+    
+    /* Check for invalid character */
+    if (Char == -1)
+    {
+        /* No name */
+        strcpy(gCharName, "WCH_NONE");
+    }
+    else if ((Char > 31) && (Char < 128))
+    {
+        /* Use our global buffer */
+        p = gCharName;
+        
+        /* Add the first quote unless this was a zero-string */
+        if (!AddZero) *p++ = '\'';
+        
+        /* Now replace any other quote or comment character with a slash */
+        if ((Char == '\"') || (Char == '\'') || (Char == '\\')) *p++ = '\\';
+        
+        /* Now plug in the character */
+        *p++ = Char;
+        
+        /* And add the terminating quote, unless this was a zero-string */
+        if (!AddZero) *p++ = '\'';
+        
+        /* Terminate the buffer */
+        *p = '\0';
+    }
+    else
+    {
+        /* Handle special cases */
+        if (Char == '\b')
+        {
+            /* Bell */
+            strcpy(gCharName, "'\\b'");
+        }
+        else if (Char == '\n')
+        {
+            /* New line */
+            strcpy(gCharName, "'\\n'");
+        }
+        else if (Char == '\r')
+        {
+            /* Return */
+            strcpy(gCharName, "'\\r'");
+        }
+        else if (!AddZero)
+        {
+            /* Char value, in hex */
+            sprintf(gCharName, "0x%04x", Char);
+        }
+        else
+        {
+            /* Char value, C-style */
+            sprintf(gCharName, "\\x%04x", Char);
+        }
+    }
+    
+    /* Return the name */
+    return gCharName;
+}
 
 VOID
 PrintNameTable(FILE* FileHandle,
@@ -871,9 +938,12 @@
         /* Check if this something else than state 2 */
         if (i != 2)
         {
-            /* Not yet supported */
-            printf("Extra states not yet supported!\n");
-            break;//exit(1);
+            /* Loop all the scan codes */
+            for (j = 0; j < 110; j++)
+            {
+                /* Check if this is the state for the entry */
+                if (i == Layout->Entry[j].StateCount) break;
+            }
         }
         
         /* Print the table header */
@@ -911,7 +981,33 @@
             /* Initialize the buffer for this line */
             *LineBuffer = '\0';
             
-            /* FIXME: Loop for states */
+            /* Loop states */
+            for (k = 0; k < i; k++)
+            {
+                /* Check for dead key data */
+                if (DeadKeyData)
+                {
+                    /* Not yet supported */
+                    printf("Dead key data not supported!\n");
+                    exit(1);
+                }
+                
+                /* Check if it's a ligature key */
+                if (Layout->Entry[j].LigatureCharData[k])
+                {
+                    /* Not yet supported */
+                    printf("Ligature key data not supported!\n");
+                    exit(1);
+                }
+                
+                /* Print out the WCH_ name */
+                fprintf(FileHandle,
+                        ",%-9s",
+                        WChName(Layout->Entry[j].CharData[k]));
+                
+                /* If we have something on the line buffer by now, add WCH_NONE */
+                if (*LineBuffer != '\0') strcpy(LineBuffer, "WCH_NONE ");
+            }
             
             /* Finish the line */
             fprintf(FileHandle, "},\n");




More information about the Ros-diffs mailing list