[Tux4kids-commits] r903 - in tuxtype/trunk: doc src

dbruce-guest at alioth.debian.org dbruce-guest at alioth.debian.org
Mon Feb 23 01:19:59 UTC 2009


Author: dbruce-guest
Date: 2009-02-23 01:19:59 +0000 (Mon, 23 Feb 2009)
New Revision: 903

Modified:
   tuxtype/trunk/doc/ChangeLog
   tuxtype/trunk/src/alphabet.c
Log:
cleanup/audit of alphabet.c for potential ptr-related segfaults.
fix of error in drawing of fourth row of keyboard in practice activity



Modified: tuxtype/trunk/doc/ChangeLog
===================================================================
--- tuxtype/trunk/doc/ChangeLog	2009-02-20 19:46:47 UTC (rev 902)
+++ tuxtype/trunk/doc/ChangeLog	2009-02-23 01:19:59 UTC (rev 903)
@@ -1,3 +1,13 @@
+22 Feb 2009 svn revision 903
+[ David Bruce <davidstuartbruce at gmail.com> ]
+        - lots of general code cleanup to eliminate most of the compiler warnings, 
+          including removal of remaining incorrect uses of "unsigned char".
+        - addition of "make dist_with_fonts_bzip2" target to help support OpenSUSE
+          build service integration.
+        - beginning of VERSIOM "1.7.4.preview"
+        - cleanup of alphabet.c with addition of pointer safety checks and fix of 
+          "off-by-one" drawing error in fourth row of keyboard hints graphic.
+
 08 Feb 2009 
 [ David Bruce <davidstuartbruce at gmail.com> ]
         - cleanup of wchar_t <--> UTF-8 conversion wrapper functions. These are now

Modified: tuxtype/trunk/src/alphabet.c
===================================================================
--- tuxtype/trunk/src/alphabet.c	2009-02-20 19:46:47 UTC (rev 902)
+++ tuxtype/trunk/src/alphabet.c	2009-02-23 01:19:59 UTC (rev 903)
@@ -7,6 +7,8 @@
     email                : jdandr2 at tux4kids.net
 Revised extensively: 2008
 Sreyas Kurumanghat <k.sreyas at gmail.com>
+and
+David Bruce <davidstuartbruce at gmail.com>
  ***************************************************************************/
 
 /***************************************************************************
@@ -20,9 +22,7 @@
 
 
 
-/* Needed to convert UTF-8 under Windows because we don't have glibc: */
 #include "convert_utf.h"
-
 #include "globals.h"
 #include "funcs.h"
 #include "SDL_extras.h"
@@ -49,27 +49,22 @@
 typedef struct kbd_char {
   wchar_t unicode_value;
   char finger;
-	//keymap key;
-	char keyname[5];
-	int shift;
-	char latin_char;
+  //keymap key;
+  char keyname[5];
+  int shift;
+  char latin_char;
 } kbd_char;
 
 /* List with one entry for each typable character in keyboard setup - has the */
 /* Unicode value of the key and the associated fingering.                     */
 static kbd_char keyboard_list[MAX_UNICODES] = {{0, -1, {0}, 0, -1}};
 
-
-
-
 /* Used for word list functions (see below): */
 static int num_words;
 static wchar_t word_list[MAX_NUM_WORDS][MAX_WORD_SIZE + 1];
 static wchar_t char_list[MAX_UNICODES];  // List of distinct letters in word list
 static int num_chars_used = 0;       // Number of different letters in word list
 
-
-
 /* Local function prototypes: */
 static void gen_char_list(void);
 static int add_char(wchar_t uc);
@@ -172,56 +167,54 @@
         {
           fprintf(stderr, "Adding key: Unicode char = '%C'\tUnicode value = %d\tfinger = %ld\n",
                   wide_str[2], wide_str[2], wcstol(&wide_str[0], NULL, 0)); 
-	}
+        }
 
         /* Just plug values into array: */
         keyboard_list[k].unicode_value = wide_str[2];
         keyboard_list[k].finger = wcstol(&wide_str[0], NULL, 0);
-	if (wcslen(wide_str) <5)
-	{
-		if(!settings.use_english)
-		{
-			map_keys(-1,&keyboard_list[k]);
-			keyboard_list[k].latin_char=-1;
-			keyboard_list[k].finger = wcstol(&wide_str[0], NULL, 0);
-		}
-		else
-		{
-			map_keys(wide_str[2],&keyboard_list[k]);
-			keyboard_list[k].latin_char=wide_str[2];
-		}
-	}
-	else
-	{
-		map_keys(wide_str[4],&keyboard_list[k]);
-		keyboard_list[k].latin_char=wide_str[4];
-	}
+
+        if (wcslen(wide_str) <5)
+        {
+          if(!settings.use_english)
+          {
+            map_keys(-1,&keyboard_list[k]);
+            keyboard_list[k].latin_char=-1;
+            keyboard_list[k].finger = wcstol(&wide_str[0], NULL, 0);
+          }
+          else
+          {
+            map_keys(wide_str[2],&keyboard_list[k]);
+            keyboard_list[k].latin_char=wide_str[2];
+          }
+        }
+        else
+        {
+          map_keys(wide_str[4],&keyboard_list[k]);
+          keyboard_list[k].latin_char=wide_str[4];
+        }
         k++;
       }
-	else
-	{
-		if(wcslen(wide_str)==1)
-		{
-			if(!settings.use_english)
-			{
-				keyboard_list[k].unicode_value = wide_str[0];
-				map_keys(-1,&keyboard_list[k]);
-				keyboard_list[k].latin_char=-1;
-			}
-			else
-			{
-				keyboard_list[k].unicode_value = wide_str[0];
-				map_keys(-1,&keyboard_list[k]);
-				keyboard_list[k].latin_char=wide_str[0];
-			}
-			k++;
-		}
-		
-	}
-			
+      else
+      {
+        if(wcslen(wide_str) == 1)
+        {
+          if(!settings.use_english)
+          {
+            keyboard_list[k].unicode_value = wide_str[0];
+            map_keys(-1,&keyboard_list[k]);
+            keyboard_list[k].latin_char=-1;
+          }
+          else
+          {
+            keyboard_list[k].unicode_value = wide_str[0];
+            map_keys(-1, &keyboard_list[k]);
+            keyboard_list[k].latin_char = wide_str[0];
+          }
+          k++;
+        }
+      }
     } while (!feof(f));
 
-
     fclose(f);
     LOG("Leaving LoadKeyboard()\n");
     return 1;
@@ -233,18 +226,25 @@
 /* Returns -1 if somehow no finger associated with a Unicode value    */
 /* in the list (shouldn't happen).                                    */
 /* Returns -2 if Unicode value not in list.                           */
+/* Returns -3 if argument outside of array.                           */
 int GetFinger(int i)
 {
+  if (i < -1 || i >= MAX_UNICODES)
+  {
+    fprintf(stderr, "GetFinger() - requested index i = %d outside of array\n", i);
+    return -3;
+  }
+  
   if (i == -1)
   {
-    fprintf(stderr, "GetFinger() - Unicode char '%C' not found in list.\n",i);
+    fprintf(stderr, "GetFinger() - Unicode char '%C' not found in list.\n", i);
     return -2;
   }
 
   if ((keyboard_list[i].finger < 0)
    || (keyboard_list[i].finger > 9))
   {
-    fprintf(stderr, "GetFinger() - Unicode char '%C' has no valid finger.\n",i);
+    fprintf(stderr, "GetFinger() - Unicode char '%C' has no valid finger.\n", i);
     return -1;
   }  
 
@@ -253,7 +253,12 @@
 
 int GetShift(int i)
 {
-	return keyboard_list[i].shift;
+  if (i < 0 || i >= MAX_UNICODES)
+  {
+    fprintf(stderr, "GetShift() - requested index i = %d outside of array\n", i);
+    return -1;
+  }
+  return keyboard_list[i].shift;
 }
 
 int GetIndex(wchar_t uni_char)
@@ -320,7 +325,10 @@
 
 wchar_t GetLastKey()
 {
-  if(!num_chars_used)
+  //Avoid segfault if num_chars_used has gotten a bad value:
+  if(!num_chars_used
+    || num_chars_used < 0
+    || num_chars_used >= MAX_UNICODES)
     return -1;
   else
     return keyboard_list[num_chars_used - 1].unicode_value;
@@ -432,7 +440,9 @@
 void ClearWordList(void)
 {
   int i;
-  for (i = 0; i < num_words; i++)
+//  for (i = 0; i < num_words; i++)
+  //more robust if we just zero entire list - takes neglible time
+  for (i = 0; i < MAX_NUM_WORDS; i++)
   {
     word_list[i][0] = '\0';
   }
@@ -446,50 +456,37 @@
  */
 wchar_t* GetWord(void)
 {
-	static int last_choice = -1;
-	int choice;
+  static int last_choice = -1;
+  int choice;
 
-	LOG("Entering GetWord()\n");
-	DEBUGCODE { fprintf(stderr, "num_words is: %d\n", num_words); }
+  LOG("Entering GetWord()\n");
 
-	/* Now count list to make sure num_words is correct: */
+  /* Safety/sanity checks: */
+  /* Count list to make sure num_words is correct: */
+  num_words = 0;
+  while (word_list[num_words][0] != '\0')
+  {
+    num_words++;
+  }
 
-	num_words = 0;
-	while (word_list[num_words][0] != '\0')
-	{
-	  num_words++;
-	}
+  if (0 == num_words)
+  {
+    LOG("No words in list\n");
+    return NULL;
+  }
 
-	DEBUGCODE { fprintf(stderr, "After count, num_words is: %d\n", num_words); }
+  /* Now pick one: */
+  do
+  {
+    choice = (rand() % num_words);
+  } while ((choice == last_choice) || (num_words < 2));
 
-        if (0 == num_words)
-	{
-	  LOG("No words in list\n");
-          return NULL;
-	}
+  last_choice = choice;
 
-        if (num_words > MAX_NUM_WORDS)
-	{
-	  LOG("Error: num_words greater than array size\n");
-          return NULL;
-	}
+  /* NOTE need %S rather than %s because of wide characters */
+  DEBUGCODE { fprintf(stderr, "Selected word is: %S\n", word_list[choice]); }
 
-        if (num_words < 0)
-	{
-	  LOG("Error: num_words negative\n");
-          return NULL;
-	}
-
-	do {
-		choice = (rand() % num_words);
-	} while ((choice == last_choice) || (num_words < 2));
-
-	last_choice = choice;
-
-	/* NOTE need %S rather than %s because of wide characters */
-	DEBUGCODE { fprintf(stderr, "Selected word is: %S\n", word_list[choice]); }
-
-	return word_list[choice];
+  return word_list[choice];
 }
 
 
@@ -509,28 +506,23 @@
   wchar_t temp_wide_word[FNLEN];
   size_t length;
 
-  FILE* wordFile=NULL;
+  FILE* wordFile = NULL;
 
   DEBUGCODE { fprintf(stderr, "Entering GenerateWordList() for file: %s\n", wordFn); }
 
   num_words = 0;
 
   /* --- open the file --- */
-
   wordFile = fopen( wordFn, "r" );
-
   if ( wordFile == NULL )
   {
     fprintf(stderr, "ERROR: could not load wordlist: %s\n", wordFn );
-//    UseAlphabet( );
     return 0;
   }
 
-
   /* --- load words from file named as argument: */
+  DEBUGCODE { fprintf(stderr, "Loading words from file: %s\n", wordFn); }
 
-  DEBUGCODE { fprintf(stderr, "WORD FILE OPENNED @ %s\n", wordFn); }
-
   /* ignore the title (i.e. first line) */
   /* (compiler complains unless we inspect return value) */
   ret = fscanf( wordFile, "%[^\n]\n", temp_word);
@@ -540,6 +532,10 @@
     ret = fscanf( wordFile, "%[^\n]\n", temp_word);
     DEBUGCODE {fprintf(stderr, "temp_word = %s\n", temp_word);}
 
+    /* Ignore comment lines - starting with '#' */
+    if (temp_word[0] == '#')
+      continue;
+
     for (j = 0; j < strlen(temp_word); j++)
     {
       if (temp_word[j] == '\n' || temp_word[j] == '\r')
@@ -616,10 +612,6 @@
 }
 
 
-
-
-
-
 /* This version creates the letters using TTF_RenderUNICODE_Blended */
 int RenderLetters(const TTF_Font* letter_font)
 {
@@ -666,10 +658,18 @@
 {
   int i;
 
-  for (i = 0; i < num_chars_used; i++)
+  for (i = 0; i < MAX_UNICODES; i++)
   {
-    SDL_FreeSurface(char_glyphs[i].white_glyph);
-    SDL_FreeSurface(char_glyphs[i].red_glyph);
+    if (char_glyphs[i].white_glyph)
+    {
+      SDL_FreeSurface(char_glyphs[i].white_glyph);
+      char_glyphs[i].white_glyph = NULL;
+    }
+    if (char_glyphs[i].red_glyph)
+    {
+      SDL_FreeSurface(char_glyphs[i].red_glyph);
+      char_glyphs[i].red_glyph = NULL;
+    }
     char_glyphs[i].unicode_value = 0;
     char_glyphs[i].white_glyph = NULL;
     char_glyphs[i].red_glyph = NULL;
@@ -741,7 +741,8 @@
     {
       fprintf(stderr, "\nCheckNeededGlyphs() - needed char '%C' (Unicode value = %d) not found.\n",
               char_list[i], char_list[i]);
-      fprintf(stderr, "This probably means that the theme's 'keyboard.lst' file is incorrect or incomplete.\n");
+      fprintf(stderr, "This probably means that the theme's 'keyboard.lst' file is incorrect or incomplete.\n"
+               "It could also mean that the available font lacks needed characters\n");
       return 0;
     }
     i++;
@@ -754,9 +755,14 @@
 {
   int i = 0;
 
-  while ((i < MAX_WORD_SIZE)
-      && (s[i] != '\0'))
+  if (!s)
   {
+    fprintf(stderr, "check_needed_unicodes_str() - null ptr passed as arg");
+    return 0;
+  }
+
+  while (i < MAX_WORD_SIZE && i < wcslen(s))
+  {
     if (!unicode_in_key_list(s[i]))
     {
       fprintf(stderr, "\ncheck_needed_unicodes_str() - needed char '%C' (Unicode value = %d) not found.\n",
@@ -774,454 +780,483 @@
 /******************************************************************/
 int map_keys(wchar_t wide_char, kbd_char* keyboard_entry)
 {
-	switch(wide_char)
-	{
-		case '`':strcpy(keyboard_entry->keyname,"A00");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=0;
-			break;
-		case '~':strcpy(keyboard_entry->keyname,"A00");
-			keyboard_entry->shift=2;
-			keyboard_entry->finger=0;
-			break;
-		case '1':strcpy(keyboard_entry->keyname,"A01");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=0;
-			break;
-		case '!':strcpy(keyboard_entry->keyname,"A01");
-			keyboard_entry->shift=2;
-			keyboard_entry->finger=0;
-			break;
-		case '2':strcpy(keyboard_entry->keyname,"A02");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=1;
-			break;
-		case '@':strcpy(keyboard_entry->keyname,"A02");
-			keyboard_entry->shift=2;
-			keyboard_entry->finger=1;
-			break;
-		case '3':strcpy(keyboard_entry->keyname,"A03");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=2;
-			break;
-		case '#':strcpy(keyboard_entry->keyname,"A03");
-			keyboard_entry->shift=2;
-			keyboard_entry->finger=2;
-			break;
-		case '4':strcpy(keyboard_entry->keyname,"A04");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=3;
-			break;
-		case '$':strcpy(keyboard_entry->keyname,"A04");
-			keyboard_entry->shift=2;
-			keyboard_entry->finger=3;
-			break;
-		case '5':strcpy(keyboard_entry->keyname,"A05");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=3;
-			break;
-		case '%':strcpy(keyboard_entry->keyname,"A05");
-			keyboard_entry->shift=2;
-			keyboard_entry->finger=3;
-			break;
-		case '6':strcpy(keyboard_entry->keyname,"A06");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=6;
-			break;
-		case '^':strcpy(keyboard_entry->keyname,"A06");
-			keyboard_entry->shift=1;
-			keyboard_entry->finger=6;
-			break;
-		case '7':strcpy(keyboard_entry->keyname,"A07");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=6;
-			break;
-		case '&':strcpy(keyboard_entry->keyname,"A07");
-			keyboard_entry->shift=1;
-			keyboard_entry->finger=6;
-			break;
-		case '8':strcpy(keyboard_entry->keyname,"A08");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=7;
-			break;
-		case '*':strcpy(keyboard_entry->keyname,"A08");
-			keyboard_entry->shift=1;
-			keyboard_entry->finger=7;
-			break;
-		case '9':strcpy(keyboard_entry->keyname,"A09");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=8;
-			break;
-		case '(':strcpy(keyboard_entry->keyname,"A09");
-			keyboard_entry->shift=1;
-			keyboard_entry->finger=8;
-			break;
-		case '0':strcpy(keyboard_entry->keyname,"A10");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=9;
-			break;
-		case ')':strcpy(keyboard_entry->keyname,"A10");
-			keyboard_entry->shift=1;
-			keyboard_entry->finger=9;
-			break;
-		case '-':strcpy(keyboard_entry->keyname,"A11");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=9;
-			break;
-		case '_':strcpy(keyboard_entry->keyname,"A11");
-			keyboard_entry->shift=1;
-			keyboard_entry->finger=9;
-			break;
-		case '=':strcpy(keyboard_entry->keyname,"A12");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=9;
-			break;
-		case '+':strcpy(keyboard_entry->keyname,"A12");
-			keyboard_entry->shift=1;
-			keyboard_entry->finger=9;
-			break;
-		case '\\':strcpy(keyboard_entry->keyname,"A13");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=9;
-			break;
-		case '|':strcpy(keyboard_entry->keyname,"A13");
-			keyboard_entry->shift=1;
-			keyboard_entry->finger=9;
-			break;
-		case 'q':strcpy(keyboard_entry->keyname,"B01");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=0;
-			break;
-		case 'Q':strcpy(keyboard_entry->keyname,"B01");
-			keyboard_entry->shift=2;
-			keyboard_entry->finger=0;
-			break;
-		case 'w':strcpy(keyboard_entry->keyname,"B02");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=1;
-			break;
-		case 'W':strcpy(keyboard_entry->keyname,"B02");
-			keyboard_entry->shift=2;
-			keyboard_entry->finger=1;
-			break;
-		case 'e':strcpy(keyboard_entry->keyname,"B03");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=2;
-			break;
-		case 'E':strcpy(keyboard_entry->keyname,"B03");
-			keyboard_entry->shift=2;
-			keyboard_entry->finger=3;
-			break;
-		case 'r':strcpy(keyboard_entry->keyname,"B04");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=3;
-			break;
-		case 'R':strcpy(keyboard_entry->keyname,"B04");
-			keyboard_entry->shift=2;
-			keyboard_entry->finger=3;
-			break;
-		case 't':strcpy(keyboard_entry->keyname,"B05");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=3;
-			break;
-		case 'T':strcpy(keyboard_entry->keyname,"B05");
-			keyboard_entry->shift=2;
-			keyboard_entry->finger=3;
-			break;
-		case 'y':strcpy(keyboard_entry->keyname,"B06");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=6;
-			break;
-		case 'Y':strcpy(keyboard_entry->keyname,"B06");
-			keyboard_entry->shift=1;
-			keyboard_entry->finger=6;
-			break;
-		case 'u':strcpy(keyboard_entry->keyname,"B07");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=6;
-			break;
-		case 'U':strcpy(keyboard_entry->keyname,"B07");
-			keyboard_entry->shift=1;
-			keyboard_entry->finger=6;
-			break;
-		case 'i':strcpy(keyboard_entry->keyname,"B08");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=7;
-			break;
-		case 'I':strcpy(keyboard_entry->keyname,"B08");
-			keyboard_entry->shift=1;
-			keyboard_entry->finger=7;
-			break;
-		case 'o':strcpy(keyboard_entry->keyname,"B09");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=8;
-			break;
-		case 'O':strcpy(keyboard_entry->keyname,"B09");
-			keyboard_entry->shift=1;
-			keyboard_entry->finger=8;
-			break;
-		case 'p':strcpy(keyboard_entry->keyname,"B10");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=9;
-			break;
-		case 'P':strcpy(keyboard_entry->keyname,"B10");
-			keyboard_entry->shift=1;
-			keyboard_entry->finger=9;
-			break;
-		case '[':strcpy(keyboard_entry->keyname,"B11");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=9;
-			break;
-		case '{':strcpy(keyboard_entry->keyname,"B11");
-			keyboard_entry->shift=1;
-			keyboard_entry->finger=9;
-			break;
-		case ']':strcpy(keyboard_entry->keyname,"B12");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=9;
-			break;
-		case '}':strcpy(keyboard_entry->keyname,"B12");
-			keyboard_entry->shift=1;
-			keyboard_entry->finger=9;
-			break;
-		case 'a':strcpy(keyboard_entry->keyname,"C01");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=0;
-			break;
-		case 'A':strcpy(keyboard_entry->keyname,"C01");
-			keyboard_entry->shift=2;
-			keyboard_entry->finger=0;
-			break;
-		case 's':strcpy(keyboard_entry->keyname,"C02");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=1;
-			break;
-		case 'S':strcpy(keyboard_entry->keyname,"C02");
-			keyboard_entry->shift=2;
-			keyboard_entry->finger=1;
-			break;
-		case 'd':strcpy(keyboard_entry->keyname,"C03");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=2;
-			break;
-		case 'D':strcpy(keyboard_entry->keyname,"C03");
-			keyboard_entry->shift=2;
-			keyboard_entry->finger=2;
-			break;
-		case 'f':strcpy(keyboard_entry->keyname,"C04");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=3;
-			break;
-		case 'F':strcpy(keyboard_entry->keyname,"C04");
-			keyboard_entry->shift=2;
-			keyboard_entry->finger=3;
-			break;
-		case 'g':strcpy(keyboard_entry->keyname,"C05");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=3;
-			break;
-		case 'G':strcpy(keyboard_entry->keyname,"C05");
-			keyboard_entry->shift=1;
-			keyboard_entry->finger=3;
-			break;
-		case 'h':strcpy(keyboard_entry->keyname,"C06");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=6;
-			break;
-		case 'H':strcpy(keyboard_entry->keyname,"C06");
-			keyboard_entry->shift=1;
-			keyboard_entry->finger=6;
-			break;
-		case 'j':strcpy(keyboard_entry->keyname,"C07");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=6;
-			break;
-		case 'J':strcpy(keyboard_entry->keyname,"C07");
-			keyboard_entry->shift=1;
-			keyboard_entry->finger=6;
-			break;
-		case 'k':strcpy(keyboard_entry->keyname,"C08");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=7;
-			break;
-		case 'K':strcpy(keyboard_entry->keyname,"C08");
-			keyboard_entry->shift=1;
-			keyboard_entry->finger=7;
-			break;
-		case 'l':strcpy(keyboard_entry->keyname,"C09");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=8;
-			break;
-		case 'L':strcpy(keyboard_entry->keyname,"C09");
-			keyboard_entry->shift=1;
-			keyboard_entry->finger=8;
-			break;
-		case ';':strcpy(keyboard_entry->keyname,"C10");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=9;
-			break;
-		case ':':strcpy(keyboard_entry->keyname,"C10");
-			keyboard_entry->shift=1;
-			keyboard_entry->finger=9;
-			break;			
-		case '\'':strcpy(keyboard_entry->keyname,"C11");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=9;
-			break;
-		case '"':strcpy(keyboard_entry->keyname,"C11");
-			keyboard_entry->shift=1;
-			keyboard_entry->finger=9;
-			break;
-		case 'z':strcpy(keyboard_entry->keyname,"D01");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=0;
-			break;
-		case 'Z':strcpy(keyboard_entry->keyname,"D01");
-			keyboard_entry->shift=2;
-			keyboard_entry->finger=0;
-			break;
-		case 'x':strcpy(keyboard_entry->keyname,"D02");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=1;
-			break;
-		case 'X':strcpy(keyboard_entry->keyname,"D02");
-			keyboard_entry->shift=2;
-			keyboard_entry->finger=1;
-			break;
-		case 'c':strcpy(keyboard_entry->keyname,"D03");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=2;
-			break;
-		case 'C':strcpy(keyboard_entry->keyname,"D03");
-			keyboard_entry->shift=2;
-			keyboard_entry->finger=2;
-			break;
-		case 'v':strcpy(keyboard_entry->keyname,"D04");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=3;
-			break;
-		case 'V':strcpy(keyboard_entry->keyname,"D04");
-			keyboard_entry->shift=2;
-			keyboard_entry->finger=3;
-			break;
-		case 'b':strcpy(keyboard_entry->keyname,"D05");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=3;
-			break;
-		case 'B':strcpy(keyboard_entry->keyname,"D05");
-			keyboard_entry->shift=2;
-			keyboard_entry->finger=3;
-			break;
-		case 'n':strcpy(keyboard_entry->keyname,"D06");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=6;
-			break;
-		case 'N':strcpy(keyboard_entry->keyname,"D06");
-			keyboard_entry->shift=1;
-			keyboard_entry->finger=6;
-			break;
-		case 'm':strcpy(keyboard_entry->keyname,"D07");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=6;
-			break;
-		case 'M':strcpy(keyboard_entry->keyname,"D07");
-			keyboard_entry->shift=1;
-			keyboard_entry->finger=6;
-			break;
-		case ',':strcpy(keyboard_entry->keyname,"D08");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=7;
-			break;
-		case '<':strcpy(keyboard_entry->keyname,"D08");
-			keyboard_entry->shift=1;
-			keyboard_entry->finger=7;
-			break;
-		case '.':strcpy(keyboard_entry->keyname,"D09");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=8;
-			break;
-		case '>':strcpy(keyboard_entry->keyname,"D09");
-			keyboard_entry->shift=1;
-			keyboard_entry->finger=8;
-			break;
-		case '/':strcpy(keyboard_entry->keyname,"D10");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=9;
-			break;
-		case '?':strcpy(keyboard_entry->keyname,"D10");
-			keyboard_entry->shift=1;
-			keyboard_entry->finger=9;
-			break;
-		case ' ':strcpy(keyboard_entry->keyname,"E03");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=5;
-			break;
-		default:strcpy(keyboard_entry->keyname,"None");
-			keyboard_entry->shift=0;
-			keyboard_entry->finger=-1;
-			break;
-	}
+  if (!keyboard_entry)
+  {
+    fprintf(stderr, "Error: map_keys() - keyboard_entry arg is NULL\n");
+    return -1;
+  }
+
+  switch(wide_char)
+  {
+	case '`':strcpy(keyboard_entry->keyname,"A00");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=0;
+		break;
+	case '~':strcpy(keyboard_entry->keyname,"A00");
+		keyboard_entry->shift=2;
+		keyboard_entry->finger=0;
+		break;
+	case '1':strcpy(keyboard_entry->keyname,"A01");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=0;
+		break;
+	case '!':strcpy(keyboard_entry->keyname,"A01");
+		keyboard_entry->shift=2;
+		keyboard_entry->finger=0;
+		break;
+	case '2':strcpy(keyboard_entry->keyname,"A02");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=1;
+		break;
+	case '@':strcpy(keyboard_entry->keyname,"A02");
+		keyboard_entry->shift=2;
+		keyboard_entry->finger=1;
+		break;
+	case '3':strcpy(keyboard_entry->keyname,"A03");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=2;
+		break;
+	case '#':strcpy(keyboard_entry->keyname,"A03");
+		keyboard_entry->shift=2;
+		keyboard_entry->finger=2;
+		break;
+	case '4':strcpy(keyboard_entry->keyname,"A04");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=3;
+		break;
+	case '$':strcpy(keyboard_entry->keyname,"A04");
+		keyboard_entry->shift=2;
+		keyboard_entry->finger=3;
+		break;
+	case '5':strcpy(keyboard_entry->keyname,"A05");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=3;
+		break;
+	case '%':strcpy(keyboard_entry->keyname,"A05");
+		keyboard_entry->shift=2;
+		keyboard_entry->finger=3;
+		break;
+	case '6':strcpy(keyboard_entry->keyname,"A06");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=6;
+		break;
+	case '^':strcpy(keyboard_entry->keyname,"A06");
+		keyboard_entry->shift=1;
+		keyboard_entry->finger=6;
+		break;
+	case '7':strcpy(keyboard_entry->keyname,"A07");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=6;
+		break;
+	case '&':strcpy(keyboard_entry->keyname,"A07");
+		keyboard_entry->shift=1;
+		keyboard_entry->finger=6;
+		break;
+	case '8':strcpy(keyboard_entry->keyname,"A08");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=7;
+		break;
+	case '*':strcpy(keyboard_entry->keyname,"A08");
+		keyboard_entry->shift=1;
+		keyboard_entry->finger=7;
+		break;
+	case '9':strcpy(keyboard_entry->keyname,"A09");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=8;
+		break;
+	case '(':strcpy(keyboard_entry->keyname,"A09");
+		keyboard_entry->shift=1;
+		keyboard_entry->finger=8;
+		break;
+	case '0':strcpy(keyboard_entry->keyname,"A10");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=9;
+		break;
+	case ')':strcpy(keyboard_entry->keyname,"A10");
+		keyboard_entry->shift=1;
+		keyboard_entry->finger=9;
+		break;
+	case '-':strcpy(keyboard_entry->keyname,"A11");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=9;
+		break;
+	case '_':strcpy(keyboard_entry->keyname,"A11");
+		keyboard_entry->shift=1;
+		keyboard_entry->finger=9;
+		break;
+	case '=':strcpy(keyboard_entry->keyname,"A12");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=9;
+		break;
+	case '+':strcpy(keyboard_entry->keyname,"A12");
+		keyboard_entry->shift=1;
+		keyboard_entry->finger=9;
+		break;
+	case '\\':strcpy(keyboard_entry->keyname,"A13");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=9;
+		break;
+	case '|':strcpy(keyboard_entry->keyname,"A13");
+		keyboard_entry->shift=1;
+		keyboard_entry->finger=9;
+		break;
+	case 'q':strcpy(keyboard_entry->keyname,"B01");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=0;
+		break;
+	case 'Q':strcpy(keyboard_entry->keyname,"B01");
+		keyboard_entry->shift=2;
+		keyboard_entry->finger=0;
+		break;
+	case 'w':strcpy(keyboard_entry->keyname,"B02");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=1;
+		break;
+	case 'W':strcpy(keyboard_entry->keyname,"B02");
+		keyboard_entry->shift=2;
+		keyboard_entry->finger=1;
+		break;
+	case 'e':strcpy(keyboard_entry->keyname,"B03");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=2;
+		break;
+	case 'E':strcpy(keyboard_entry->keyname,"B03");
+		keyboard_entry->shift=2;
+		keyboard_entry->finger=3;
+		break;
+	case 'r':strcpy(keyboard_entry->keyname,"B04");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=3;
+		break;
+	case 'R':strcpy(keyboard_entry->keyname,"B04");
+		keyboard_entry->shift=2;
+		keyboard_entry->finger=3;
+		break;
+	case 't':strcpy(keyboard_entry->keyname,"B05");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=3;
+		break;
+	case 'T':strcpy(keyboard_entry->keyname,"B05");
+		keyboard_entry->shift=2;
+		keyboard_entry->finger=3;
+		break;
+	case 'y':strcpy(keyboard_entry->keyname,"B06");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=6;
+		break;
+	case 'Y':strcpy(keyboard_entry->keyname,"B06");
+		keyboard_entry->shift=1;
+		keyboard_entry->finger=6;
+		break;
+	case 'u':strcpy(keyboard_entry->keyname,"B07");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=6;
+		break;
+	case 'U':strcpy(keyboard_entry->keyname,"B07");
+		keyboard_entry->shift=1;
+		keyboard_entry->finger=6;
+		break;
+	case 'i':strcpy(keyboard_entry->keyname,"B08");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=7;
+		break;
+	case 'I':strcpy(keyboard_entry->keyname,"B08");
+		keyboard_entry->shift=1;
+		keyboard_entry->finger=7;
+		break;
+	case 'o':strcpy(keyboard_entry->keyname,"B09");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=8;
+		break;
+	case 'O':strcpy(keyboard_entry->keyname,"B09");
+		keyboard_entry->shift=1;
+		keyboard_entry->finger=8;
+		break;
+	case 'p':strcpy(keyboard_entry->keyname,"B10");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=9;
+		break;
+	case 'P':strcpy(keyboard_entry->keyname,"B10");
+		keyboard_entry->shift=1;
+		keyboard_entry->finger=9;
+		break;
+	case '[':strcpy(keyboard_entry->keyname,"B11");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=9;
+		break;
+	case '{':strcpy(keyboard_entry->keyname,"B11");
+		keyboard_entry->shift=1;
+		keyboard_entry->finger=9;
+		break;
+	case ']':strcpy(keyboard_entry->keyname,"B12");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=9;
+		break;
+	case '}':strcpy(keyboard_entry->keyname,"B12");
+		keyboard_entry->shift=1;
+		keyboard_entry->finger=9;
+		break;
+	case 'a':strcpy(keyboard_entry->keyname,"C01");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=0;
+		break;
+	case 'A':strcpy(keyboard_entry->keyname,"C01");
+		keyboard_entry->shift=2;
+		keyboard_entry->finger=0;
+		break;
+	case 's':strcpy(keyboard_entry->keyname,"C02");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=1;
+		break;
+	case 'S':strcpy(keyboard_entry->keyname,"C02");
+		keyboard_entry->shift=2;
+		keyboard_entry->finger=1;
+		break;
+	case 'd':strcpy(keyboard_entry->keyname,"C03");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=2;
+		break;
+	case 'D':strcpy(keyboard_entry->keyname,"C03");
+		keyboard_entry->shift=2;
+		keyboard_entry->finger=2;
+		break;
+	case 'f':strcpy(keyboard_entry->keyname,"C04");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=3;
+		break;
+	case 'F':strcpy(keyboard_entry->keyname,"C04");
+		keyboard_entry->shift=2;
+		keyboard_entry->finger=3;
+		break;
+	case 'g':strcpy(keyboard_entry->keyname,"C05");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=3;
+		break;
+	case 'G':strcpy(keyboard_entry->keyname,"C05");
+		keyboard_entry->shift=1;
+		keyboard_entry->finger=3;
+		break;
+	case 'h':strcpy(keyboard_entry->keyname,"C06");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=6;
+		break;
+	case 'H':strcpy(keyboard_entry->keyname,"C06");
+		keyboard_entry->shift=1;
+		keyboard_entry->finger=6;
+		break;
+	case 'j':strcpy(keyboard_entry->keyname,"C07");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=6;
+		break;
+	case 'J':strcpy(keyboard_entry->keyname,"C07");
+		keyboard_entry->shift=1;
+		keyboard_entry->finger=6;
+		break;
+	case 'k':strcpy(keyboard_entry->keyname,"C08");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=7;
+		break;
+	case 'K':strcpy(keyboard_entry->keyname,"C08");
+		keyboard_entry->shift=1;
+		keyboard_entry->finger=7;
+		break;
+	case 'l':strcpy(keyboard_entry->keyname,"C09");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=8;
+		break;
+	case 'L':strcpy(keyboard_entry->keyname,"C09");
+		keyboard_entry->shift=1;
+		keyboard_entry->finger=8;
+		break;
+	case ';':strcpy(keyboard_entry->keyname,"C10");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=9;
+		break;
+	case ':':strcpy(keyboard_entry->keyname,"C10");
+		keyboard_entry->shift=1;
+		keyboard_entry->finger=9;
+		break;			
+	case '\'':strcpy(keyboard_entry->keyname,"C11");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=9;
+		break;
+	case '"':strcpy(keyboard_entry->keyname,"C11");
+		keyboard_entry->shift=1;
+		keyboard_entry->finger=9;
+		break;
+	case 'z':strcpy(keyboard_entry->keyname,"D01");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=0;
+		break;
+	case 'Z':strcpy(keyboard_entry->keyname,"D01");
+		keyboard_entry->shift=2;
+		keyboard_entry->finger=0;
+		break;
+	case 'x':strcpy(keyboard_entry->keyname,"D02");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=1;
+		break;
+	case 'X':strcpy(keyboard_entry->keyname,"D02");
+		keyboard_entry->shift=2;
+		keyboard_entry->finger=1;
+		break;
+	case 'c':strcpy(keyboard_entry->keyname,"D03");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=2;
+		break;
+	case 'C':strcpy(keyboard_entry->keyname,"D03");
+		keyboard_entry->shift=2;
+		keyboard_entry->finger=2;
+		break;
+	case 'v':strcpy(keyboard_entry->keyname,"D04");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=3;
+		break;
+	case 'V':strcpy(keyboard_entry->keyname,"D04");
+		keyboard_entry->shift=2;
+		keyboard_entry->finger=3;
+		break;
+	case 'b':strcpy(keyboard_entry->keyname,"D05");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=3;
+		break;
+	case 'B':strcpy(keyboard_entry->keyname,"D05");
+		keyboard_entry->shift=2;
+		keyboard_entry->finger=3;
+		break;
+	case 'n':strcpy(keyboard_entry->keyname,"D06");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=6;
+		break;
+	case 'N':strcpy(keyboard_entry->keyname,"D06");
+		keyboard_entry->shift=1;
+		keyboard_entry->finger=6;
+		break;
+	case 'm':strcpy(keyboard_entry->keyname,"D07");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=6;
+		break;
+	case 'M':strcpy(keyboard_entry->keyname,"D07");
+		keyboard_entry->shift=1;
+		keyboard_entry->finger=6;
+		break;
+	case ',':strcpy(keyboard_entry->keyname,"D08");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=7;
+		break;
+	case '<':strcpy(keyboard_entry->keyname,"D08");
+		keyboard_entry->shift=1;
+		keyboard_entry->finger=7;
+		break;
+	case '.':strcpy(keyboard_entry->keyname,"D09");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=8;
+		break;
+	case '>':strcpy(keyboard_entry->keyname,"D09");
+		keyboard_entry->shift=1;
+		keyboard_entry->finger=8;
+		break;
+	case '/':strcpy(keyboard_entry->keyname,"D10");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=9;
+		break;
+	case '?':strcpy(keyboard_entry->keyname,"D10");
+		keyboard_entry->shift=1;
+		keyboard_entry->finger=9;
+		break;
+	case ' ':strcpy(keyboard_entry->keyname,"E03");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=5;
+		break;
+	default:strcpy(keyboard_entry->keyname,"None");
+		keyboard_entry->shift=0;
+		keyboard_entry->finger=-1;
+		break;
+  }	
   return 0;
 }
 
 void GenerateKeyboard(SDL_Surface* keyboard)
 {
-	SDL_Surface* tmp = NULL;
-	SDL_Rect new;
-	int i;
-	int col;
-	char row;
-	int render=1;
-	Uint16 t[2];
-	TTF_Font* smallfont = NULL;
-	DEBUGCODE { printf("Entering GenerateKeyboard\n"); }
-	t[1] = '\0';
-	smallfont = LoadFont(settings.theme_font_name, 15);
-	if(!smallfont)
-	{
-		DEBUGCODE { printf("Error loading font\n"); }
-		return;
-	}
-	for(i=0;i < num_chars_used;i++)
-	{
-		render=1;
-		new.x=0;
-		new.y=0;
-		new.w=5;
-		new.h=5;
-		t[0]=keyboard_list[i].unicode_value;
-		sscanf(keyboard_list[i].keyname,"%c%d",&row,&col);
-		switch(row)
-		{
-			case 'A':new.y+=6;new.x+=13;break;
-			case 'B':new.y+=36;new.x+=23;break;
-			case 'C':new.y+=66;new.x+=33;break;
-			case 'D':new.y+=96;new.x+=23;break;
-			case 'E':new.y+=126; break;
-			default: render=0;break;
-		}
-		if(!render)
-			continue;
-		new.x+=31*col;
-		if(keyboard_list[i].shift>0)
-		{
-					new.x-=9;
-					if(new.y<9)
-						new.y-=5;
-					else
-						new.y-=9;
-		}
-		DEBUGCODE { printf("Making %d : %C\n",i,keyboard_list[i].unicode_value); }
-		//tmp=BlackOutline_Unicode(t, smallfont, &black);
-		tmp=TTF_RenderUNICODE_Blended((TTF_Font*)smallfont, t, black);
-		if(tmp==NULL)
-		{
-			DEBUGCODE { printf("Error Making %d : %C\n",i,keyboard_list[i].unicode_value); }
-		}
-		SDL_BlitSurface(tmp, NULL, keyboard, &new);
-	}	
-	TTF_CloseFont(smallfont);
-	DEBUGCODE { printf("Leaving GenerateKeyboard\n"); }
+  SDL_Surface* tmp = NULL;
+  SDL_Rect new;
+  int i;
+  int col;
+  char row;
+  int render = 1;
+  Uint16 t[2];
+  TTF_Font* smallfont = NULL;
+
+  DEBUGCODE { printf("Entering GenerateKeyboard\n"); }
+
+  if(!keyboard)
+  {
+    DEBUGCODE { printf("Error - keyboard SDL_Surface ptr null\n"); }
+    return;
+  }
+
+  smallfont = LoadFont(settings.theme_font_name, 15);
+  if(!smallfont)
+  {
+    DEBUGCODE { printf("Error loading font\n"); }
+    return;
+  }
+
+  /* to give us a null-terminated string: */
+  t[1] = '\0';
+  /* Draw the unshifted and shifted chars overlying the corresponding key */
+  /* for every entry in keyboard_list[]:                                  */
+  for(i = 0; i < num_chars_used; i++)
+  {
+    render = 1;
+    new.x = 0;
+    new.y = 0;
+    new.w = 5;
+    new.h = 5;
+
+    t[0] = keyboard_list[i].unicode_value;
+    sscanf(keyboard_list[i].keyname,"%c%d",&row,&col);
+
+    switch(row)
+    {
+      case 'A': new.y += 6;   new.x += 13; break;
+      case 'B': new.y += 36;  new.x += 23; break;
+      case 'C': new.y += 66;  new.x += 33; break;
+//      case 'D': new.y += 96;  new.x += 23; break;
+      case 'D': new.y += 96;  new.x += 54; break;
+      case 'E': new.y += 126; break;
+      default: render = 0; break;
+    }
+
+    if(!render)
+      continue;
+
+    new.x += (31 * col);
+
+    if(keyboard_list[i].shift > 0)
+    {
+      new.x -= 9;
+      if(new.y < 9)
+        new.y -= 5;
+      else
+        new.y -= 9;
+    }
+
+    DEBUGCODE { printf("Making %d : %C\n",i,keyboard_list[i].unicode_value); }
+
+    //tmp=BlackOutline_Unicode(t, smallfont, &black);
+    tmp = TTF_RenderUNICODE_Blended((TTF_Font*)smallfont, t, black);
+    if(tmp == NULL)
+    {
+      fprintf(stderr, "Error Making %d : %C\n", i, keyboard_list[i].unicode_value);
+    }
+    else
+      SDL_BlitSurface(tmp, NULL, keyboard, &new);
+  }
+  //Know this is safe - if NULL would have returned above:
+  TTF_CloseFont(smallfont);
+
+  DEBUGCODE { printf("Leaving GenerateKeyboard\n"); }
 }
 
 
@@ -1356,25 +1391,6 @@
 
 
 
-// /* FIXME this function is currently dead code */
-// /* --- setup the alphabet --- */
-// static void set_letters(char *t)
-// {
-// 	int i;
-// 
-// 	ALPHABET_SIZE = 0;
-// 	for (i=0; i<256; i++)
-// 		ALPHABET[i]=0;
-// 
-// 	for (i=0; i<strlen(t); i++)
-// 		if (t[i]!=' ') {
-// 			ALPHABET[(int)t[i]]=1;
-// 			ALPHABET_SIZE++;
-// 		}
-// }
-
-
-
 /* Checks to see if the argument is already in the list and adds    */
 /* it if necessary.  Returns 1 if char added, 0 if already in list, */
 /* -1 if list already up to maximum size:                           */




More information about the Tux4kids-commits mailing list