#include "noser.h"

#include <stdio.h>

int daylight = 0;
int timezone = 0;

static int initted = 0;

void init(void)
{
    daylight = 1;
    timezone = 1;

    return;
}

size_t __ctype_get_mb_cur_max (void)
{
    return (size_t) sizeof(wchar_t);
}

/*
 * mbstowcs()
 *
 * convert multibyte string to wide character string.
 *
 * DESCRIPTION
 * The mbstowcs() function converts the multibyte string
 * addressed by s into the corresponding UNICODE string.
 * It stores up to n wide characters in pwcs. It stops
 * conversion after encountering and storing a null character. 
 *
 * PARAMETERS
 * pwcs:     Is the address of an array of wide characters,
 *           type wchar_t, to receive the UNICODE equivalent
 *           of multibyte string s.
 *    s:     Points to a null-terminated multibyte string
 *           to be converted to UNICODE.
 *    n:     Is the maximum number of characters to convert
 *           and store in pwcs.
 *
 * RETURN VALUES
 *           If successful, mbstowcs() returns the number of
 *           multibyte characters it converted, not including
 *           the terminating null character. If s is a null
 *           pointer or points to a null character, mbstowcs()
 *           returns zero. If mbstowcs() encounters an invalid
 *           multibyte sequence, it returns -1. 
 */
size_t mbstowcs(wchar_t *pwcs, const char *s, size_t n)
{
    size_t len = 0;

printf("IM IN MBSTOWCS\n");
    if(initted == 0)
    {
        init();
    }

    if(pwcs == NULL || s == NULL || n == 0)
    {
        return 0;
    }

    return len;
}

/*
 * wcstombs()
 *
 * convert wide character string to multibyte string 
 *
 * DESCRIPTION
 * The wcstombs() function converts a sequence of codes that
 * correspond to multibyte characters from the array pointed
 * to by pwcs into a sequence of multibyte characters that
 * begins in the initial shift state. Then, wcstombs() stores
 * these multibyte characters into the array pointed to by s.
 * If a multibyte character exceeds the limit of n total bytes
 * or if a NULL character is stored, wcstombs() stops. Each
 * code is converted as if by a call to the wctomb() function,
 * except that the shift state of the wctomb() function is not
 * affected.
 * No more than n bytes are modified in the array pointed to
 * by s. If copying takes place between objects that overlap,
 * the behavior is undefined. 
 *
 *
 * PARAMETERS
 *      s: Points to the sequence of multibyte characters.
 *   pwcs: Points to the sequence of wide characters.
 *      n: Is the maximum number of bytes that can be stored
 *         in the multibyte string.
 *
 * RETURN VALUES
 *      The wcstombs() function returns the number of bytes written
 *      into s, excluding the terminating NULL, if it was able to
 *      convert the wide character string. If the pwcs string is
 *      NULL, the wcstombs() function returns the required size of
 *      the destination string. If the conversion could not be
 *      performed, -1 is returned. 
 */
size_t wcstombs(char *s, const wchar_t *pwcs, size_t n)
{
    size_t len = 0;

    unsigned int effectiveLen = n - 1;
    unsigned int i            = 0;
printf("IM IN WCSTOMBS\n");
    if(s == NULL || pwcs == NULL ||  n == 0)
    {
        return 0;
    }

    if(initted == 0)
    {
        init();
    }

    i = strlen(s);

    len = (i <= effectiveLen) ? i : effectiveLen;

    for( ; i < len; ++i)
    {
        s[i] = (char) pwcs[i];
    }

    s[effectiveLen] = '\0';
    return len;
}