Ich möchte in meiner einfachem GUI in Textfelder eine Texteingabe haben.

Bei SDL 2.0 geht das ja mit dem Textevent: event.key.keysym.sym hat die Taste AFAIK als Unicode gespeichert.
Wie bekomme ich jetzt da ein ASCII Zeichen raus?
Beispiel wenn jemand "A" drückt soll "a" erscheinen.
Bei SHIFT und "A" ein großes "A".

Wie kann ich das machen?

Die Backspacetaste hat ja z.B, SDLK_BACKSPACE als Definition und kann ja auch richtig abgefragt werden.
Nur normale Zeichen kommen bei meinem Code nicht richtig an.

Code:
if (! SDL_WaitEvent (&event))
        {
            printf ("event_gadget_string: error can't wait for event!\n");
            free (string_buf);
            return FALSE;
        }

        value_len = strlen (string->value);

        switch (event.type)
        {
            case SDL_KEYDOWN:
                key = event.key.keysym.sym;
                switch (key)
                {
                    case SDLK_BACKSPACE:
                        printf ("event_gadget_string: BACKSPACE\n");

                        if (string->insert_pos > 0)
                        {
                            strremoveleft (string_buf, string->value, string->insert_pos);
                            strcpy (string->value, string_buf);

                            string->cursor_pos--;
                            string->insert_pos--;

                            if (! draw_gadget_string (client, screennum, gadget_index, GADGET_SELECTED))
                            {
                                free (string_buf);
                                return (FALSE);
                            }
                        }
                        break;

                    case SDLK_DELETE:
                        printf ("event_gadget_string: DELETE\n");

                        strremoveright (string_buf, string->value, string->insert_pos);
                        strcpy (string->value, string_buf);

                        if (! draw_gadget_string (client, screennum, gadget_index, GADGET_SELECTED))
                        {
                            free (string_buf);
                            return (FALSE);
                        }
                        break;

                        break;

                    case SDLK_LEFT:
                        printf ("event_gadget_string: CURSOR LEFT\n");

                        if (string->cursor_pos > 0)
                        {
                            string->cursor_pos--;
                            string->insert_pos--;

                            if (! draw_gadget_string (client, screennum, gadget_index, GADGET_SELECTED))
                            {
                                free (string_buf);
                                return (FALSE);
                            }
                        }

                        break;

                    case SDLK_RIGHT:
                        printf ("event_gadget_string: CURSOR RIGHT\n");

                        if (string->cursor_pos < value_len)
                        {
                            string->cursor_pos++;
                            string->insert_pos++;

                            if (! draw_gadget_string (client, screennum, gadget_index, GADGET_SELECTED))
                            {
                                free (string_buf);
                                return (FALSE);
                            }
                        }
                        break;

                    case SDLK_RETURN:
                        printf ("event_gadget_string: RETURN\n");
                        wait = FALSE;
                        break;

                    default:
                        printf ("event_gadget_string: char: %s\n", SDL_GetKeyName (key));

                        /* UCS-4 (ASCII) */
                        if (value_len < string->string_len && (SDL_iconv_string ("ASCII", "UTF-8", event.text.text, SDL_strlen (event.text.text)) != 0))
                        {
                                strinsertchar (string_buf, string->value, SDL_iconv_string ("ASCII", "UTF-8", event.text.text, SDL_strlen (event.text.text)), string->insert_pos);
                                strcpy (string->value, string_buf);

                                if (string->cursor_pos < string->visible_len)
                                {
                                    string->cursor_pos++;
                                }

                                string->insert_pos++;

                                if (! draw_gadget_string (client, screennum, gadget_index, GADGET_SELECTED))
                                {
                                    free (string_buf);
                                    return (FALSE);
                                }
                        }
                        break;

                }
                break;