test/testiconv.c
author Sam Lantinga <slouken@libsdl.org>
Sun, 28 May 2006 13:04:16 +0000
branchSDL-1.3
changeset 1662 782fd950bd46
parent 1528 ff3322d66771
child 1668 4da1ee79c9af
permissions -rw-r--r--
Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API. WARNING: None of the video drivers have been updated for the new API yet! The API is still under design and very fluid. The code is now run through a consistent indent format: indent -i4 -nut -nsc -br -ce The headers are being converted to automatically generate doxygen documentation.


#include <stdio.h>

#include "SDL.h"

static size_t
widelen (char *data)
{
    size_t len = 0;
    Uint32 *p = (Uint32 *) data;
    while (*p++) {
        ++len;
    }
    return len;
}

int
main (int argc, char *argv[])
{
    const char *formats[] = {
        "UTF8",
        "UTF-8",
        "UTF16BE",
        "UTF-16BE",
        "UTF16LE",
        "UTF-16LE",
        "UTF32BE",
        "UTF-32BE",
        "UTF32LE",
        "UTF-32LE",
        "UCS4",
        "UCS-4",
    };
    char buffer[BUFSIZ];
    char *ucs4;
    char *test[2];
    int i, index = 0;
    FILE *file;
    int errors = 0;

    if (!argv[1]) {
        argv[1] = "utf8.txt";
    }
    file = fopen (argv[1], "rb");
    if (!file) {
        fprintf (stderr, "Unable to open %s\n", argv[1]);
        return (1);
    }

    while (fgets (buffer, sizeof (buffer), file)) {
        /* Convert to UCS-4 */
        size_t len;
        ucs4 =
            SDL_iconv_string ("UCS-4", "UTF-8", buffer,
                              SDL_strlen (buffer) + 1);
        len = (widelen (ucs4) + 1) * 4;
        for (i = 0; i < SDL_arraysize (formats); ++i) {
            test[0] = SDL_iconv_string (formats[i], "UCS-4", ucs4, len);
            test[1] = SDL_iconv_string ("UCS-4", formats[i], test[0], len);
            if (SDL_memcmp (test[1], ucs4, len) != 0) {
                fprintf (stderr, "FAIL: %s\n", formats[i]);
                ++errors;
            }
            SDL_free (test[0]);
            SDL_free (test[1]);
        }
        test[0] = SDL_iconv_string ("UTF-8", "UCS-4", ucs4, len);
        SDL_free (ucs4);
        fputs (test[0], stdout);
        SDL_free (test[0]);
    }
    return (errors ? errors + 1 : 0);
}