/*++

Copyright (c) 1991-1999,  Microsoft Corporation  All rights reserved.

Module Name:

    ecitest.c

Abstract:

    Test module for NLS API EnumCalendarInfo.

    NOTE: This code was simply hacked together quickly in order to
          test the different code modules of the NLS component.
          This is NOT meant to be a formal regression test.

Revision History:

    08-02-93    JulieB    Created.

--*/



//
//  Include Files.
//

#include "nlstest.h"




//
//  Constant Declarations.
//

#define  ECI_INVALID_FLAG       0x00000100




//
//  Global Variables.
//

int CalendarCtr;


CALTYPE pCalFlag[] =
{
    CAL_ICALINTVALUE,
    CAL_SCALNAME,
    CAL_ITWODIGITYEARMAX,
    CAL_IYEAROFFSETRANGE,
    CAL_SERASTRING,
    CAL_SSHORTDATE,
    CAL_SLONGDATE,
    CAL_SYEARMONTH,
    CAL_SDAYNAME1,
    CAL_SMONTHNAME1,
    CAL_SMONTHNAME13
};
#define NUM_CAL_FLAGS  ( sizeof(pCalFlag) / sizeof(CALTYPE) )


//
//  pCalEnglish and pCalJapan_x must have the same number of entries
//  as pCalFlag.
//
int pCalEnglish[] =
{
    1,
    1,
    1,
    0,
    0,
    7,
    4,
    1,
    1,
    1,
    0
};

int pCalJapan_All[] =
{
    3,
    3,
    3,
    4,
    4,
    20,
    14,
    3,
    2,
    2,
    0
};

int pCalJapan_1[] =
{
    1,
    1,
    1,
    0,
    0,
    8,
    4,
    1,
    1,
    1,
    0
};

int pCalJapan_2[] =
{
    1,
    1,
    1,
    0,
    0,
    4,
    2,
    1,
    1,
    1,
    0
};

int pCalJapan_3[] =
{
    1,
    1,
    1,
    4,
    4,
    8,
    8,
    1,
    1,
    1,
    0
};




//
//  Forward Declarations.
//

BOOL
InitEnumCalendarInfo();

int
ECI_BadParamCheck();

int
ECI_NormalCase();

int
ECI_Ansi();

BOOL
CALLBACK
MyFuncCalendar(
    LPWSTR pStr);

BOOL
CALLBACK
MyFuncCalendarA(
    LPSTR pStr);

BOOL
CALLBACK
MyFuncCalendarEx(
    LPWSTR pStr,
    CALID CalId);

BOOL
CALLBACK
MyFuncCalendarExA(
    LPSTR pStr,
    CALID CalId);




//
//  Callback functions.
//

BOOL CALLBACK MyFuncCalendar(
    LPWSTR pStr)
{
    if (Verbose)
    {
        while (*pStr)
        {
            printf((*pStr > 0xff) ? "(0x%x)" : "%wc", *pStr);
            pStr++;
        }
        printf("\n");
    }

    CalendarCtr++;

    return (TRUE);
}


BOOL CALLBACK MyFuncCalendarA(
    LPSTR pStr)
{
    if (Verbose)
    {
        while (*pStr)
        {
            printf((*pStr > 0xff) ? "(0x%x)" : "%c", *pStr);
            pStr++;
        }
        printf("\n");
    }

    CalendarCtr++;

    return (TRUE);
}


//
//  Callback functions for EX version.
//

BOOL CALLBACK MyFuncCalendarEx(
    LPWSTR pStr,
    CALID CalId)
{
    if (Verbose)
    {
        printf("CalId = %d\n", CalId);

        while (*pStr)
        {
            printf((*pStr > 0xff) ? "(0x%x)" : "%wc", *pStr);
            pStr++;
        }
        printf("\n");
    }

    CalendarCtr++;

    return (TRUE);
}


BOOL CALLBACK MyFuncCalendarExA(
    LPSTR pStr,
    CALID CalId)
{
    if (Verbose)
    {
        printf("CalId = %d\n", CalId);

        while (*pStr)
        {
            printf((*pStr > 0xff) ? "(0x%x)" : "%c", *pStr);
            pStr++;
        }
        printf("\n");
    }

    CalendarCtr++;

    return (TRUE);
}





////////////////////////////////////////////////////////////////////////////
//
//  TestEnumCalendarInfo
//
//  Test routine for EnumCalendarInfoW API.
//
//  08-02-93    JulieB    Created.
////////////////////////////////////////////////////////////////////////////

int TestEnumCalendarInfo()
{
    int ErrCount = 0;             // error count


    //
    //  Print out what's being done.
    //
    printf("\n\nTESTING EnumCalendarInfoW...\n\n");

    //
    //  Initialize global variables.
    //
    if (!InitEnumCalendarInfo())
    {
        printf("\nABORTED TestEnumCalendarInfo: Could not Initialize.\n");
        return (1);
    }

    //
    //  Test bad parameters.
    //
    ErrCount += ECI_BadParamCheck();

    //
    //  Test normal cases.
    //
    ErrCount += ECI_NormalCase();

    //
    //  Test Ansi version.
    //
    ErrCount += ECI_Ansi();

    //
    //  Print out result.
    //
    printf("\nEnumCalendarInfoW:  ERRORS = %d\n", ErrCount);

    //
    //  Return total number of errors found.
    //
    return (ErrCount);
}


////////////////////////////////////////////////////////////////////////////
//
//  InitEnumCalendarInfo
//
//  This routine initializes the global variables.  If no errors were
//  encountered, then it returns TRUE.  Otherwise, it returns FALSE.
//
//  08-02-93    JulieB    Created.
////////////////////////////////////////////////////////////////////////////

BOOL InitEnumCalendarInfo()
{
    //
    //  Initialize date counter.
    //
    CalendarCtr = 0;

    //
    //  Return success.
    //
    return (TRUE);
}


////////////////////////////////////////////////////////////////////////////
//
//  ECI_BadParamCheck
//
//  This routine passes in bad parameters to the API routines and checks to
//  be sure they are handled properly.  The number of errors encountered
//  is returned to the caller.
//
//  08-02-93    JulieB    Created.
////////////////////////////////////////////////////////////////////////////

int ECI_BadParamCheck()
{
    int NumErrors = 0;            // error count - to be returned
    int rc;                       // return code


    //
    //  Bad Function.
    //

    //  Variation 1  -  bad function
    CalendarCtr = 0;
    rc = EnumCalendarInfoW( NULL,
                            0x0409,
                            ENUM_ALL_CALENDARS,
                            CAL_ICALINTVALUE );
    CheckReturnBadParamEnum( rc,
                             FALSE,
                             ERROR_INVALID_PARAMETER,
                             "function invalid",
                             &NumErrors,
                             CalendarCtr,
                             0 );

    CalendarCtr = 0;
    rc = EnumCalendarInfoExW( NULL,
                              0x0409,
                              ENUM_ALL_CALENDARS,
                              CAL_ICALINTVALUE );
    CheckReturnBadParamEnum( rc,
                             FALSE,
                             ERROR_INVALID_PARAMETER,
                             "Ex function invalid",
                             &NumErrors,
                             CalendarCtr,
                             0 );


    //
    //  Bad Locale.
    //

    //  Variation 1  -  bad locale
    CalendarCtr = 0;
    rc = EnumCalendarInfoW( MyFuncCalendar,
                            (LCID)333,
                            ENUM_ALL_CALENDARS,
                            CAL_ICALINTVALUE );
    CheckReturnBadParamEnum( rc,
                             FALSE,
                             ERROR_INVALID_PARAMETER,
                             "Locale invalid",
                             &NumErrors,
                             CalendarCtr,
                             0 );

    CalendarCtr = 0;
    rc = EnumCalendarInfoExW( MyFuncCalendarEx,
                              (LCID)333,
                              ENUM_ALL_CALENDARS,
                              CAL_ICALINTVALUE );
    CheckReturnBadParamEnum( rc,
                             FALSE,
                             ERROR_INVALID_PARAMETER,
                             "Ex Locale invalid",
                             &NumErrors,
                             CalendarCtr,
                             0 );


    //
    //  Invalid Flag.
    //

    //  Variation 1  -  dwFlags = invalid
    CalendarCtr = 0;
    rc = EnumCalendarInfoW( MyFuncCalendar,
                            0x0409,
                            ENUM_ALL_CALENDARS,
                            ECI_INVALID_FLAG );
    CheckReturnBadParamEnum( rc,
                             FALSE,
                             ERROR_INVALID_FLAGS,
                             "Flag invalid",
                             &NumErrors,
                             CalendarCtr,
                             0 );

    CalendarCtr = 0;
    rc = EnumCalendarInfoExW( MyFuncCalendarEx,
                              0x0409,
                              ENUM_ALL_CALENDARS,
                              ECI_INVALID_FLAG );
    CheckReturnBadParamEnum( rc,
                             FALSE,
                             ERROR_INVALID_FLAGS,
                             "Ex Flag invalid",
                             &NumErrors,
                             CalendarCtr,
                             0 );


    //
    //  Return total number of errors found.
    //
    return (NumErrors);
}


////////////////////////////////////////////////////////////////////////////
//
//  ECI_NormalCase
//
//  This routine tests the normal cases of the API routine.
//
//  08-02-93    JulieB    Created.
////////////////////////////////////////////////////////////////////////////

int ECI_NormalCase()
{
    int NumErrors = 0;            // error count - to be returned
    int rc;                       // return code
    int ctr;                      // loop counter


    if (Verbose)
    {
        printf("\n----  W version  ----\n\n");
    }

    //
    //  Single calendar id - English.
    //

    //  Variation 1  -  iCalIntValue - English
    CalendarCtr = 0;
    rc = EnumCalendarInfoW( MyFuncCalendar,
                            0x0409,
                            0,
                            CAL_ICALINTVALUE );
    CheckReturnValidEnum( rc,
                          FALSE,
                          CalendarCtr,
                          0,
                          "iCalIntValue English (cal 0)",
                          &NumErrors );

    CalendarCtr = 0;
    rc = EnumCalendarInfoExW( MyFuncCalendarEx,
                              0x0409,
                              0,
                              CAL_ICALINTVALUE );
    CheckReturnValidEnum( rc,
                          FALSE,
                          CalendarCtr,
                          0,
                          "Ex iCalIntValue English (cal 0)",
                          &NumErrors );

    //  Variation 2  -  iCalIntValue - English
    CalendarCtr = 0;
    rc = EnumCalendarInfoW( MyFuncCalendar,
                            0x0409,
                            2,
                            CAL_ICALINTVALUE );
    CheckReturnValidEnum( rc,
                          FALSE,
                          CalendarCtr,
                          0,
                          "iCalIntValue English (cal 2)",
                          &NumErrors );

    CalendarCtr = 0;
    rc = EnumCalendarInfoExW( MyFuncCalendarEx,
                              0x0409,
                              2,
                              CAL_ICALINTVALUE );
    CheckReturnValidEnum( rc,
                          FALSE,
                          CalendarCtr,
                          0,
                          "Ex iCalIntValue English (cal 2)",
                          &NumErrors );

    //  Variation 3  -  Use CP ACP
    CalendarCtr = 0;
    rc = EnumCalendarInfoW( MyFuncCalendar,
                            0x0409,
                            2,
                            CAL_ICALINTVALUE | LOCALE_USE_CP_ACP );
    CheckReturnValidEnum( rc,
                          FALSE,
                          CalendarCtr,
                          0,
                          "Use CP ACP",
                          &NumErrors );

    CalendarCtr = 0;
    rc = EnumCalendarInfoExW( MyFuncCalendarEx,
                              0x0409,
                              2,
                              CAL_ICALINTVALUE | LOCALE_USE_CP_ACP );
    CheckReturnValidEnum( rc,
                          FALSE,
                          CalendarCtr,
                          0,
                          "Ex Use CP ACP",
                          &NumErrors );


    //
    //  CALTYPE values - English.
    //

    for (ctr = 0; ctr < NUM_CAL_FLAGS; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoW( MyFuncCalendar,
                                0x0409,
                                1,
                                pCalFlag[ctr] );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  pCalEnglish[ctr],
                                  "English (cal 1) Calendar Flag",
                                  pCalFlag[ctr],
                                  &NumErrors );
    }

    for (ctr = 0; ctr < NUM_CAL_FLAGS; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoExW( MyFuncCalendarEx,
                                  0x0409,
                                  1,
                                  pCalFlag[ctr] );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  pCalEnglish[ctr],
                                  "Ex English (cal 1) Calendar Flag",
                                  pCalFlag[ctr],
                                  &NumErrors );
    }



    //
    //  Single calendar id - Japan.
    //

    //  Variation 1  -  iCalIntValue - Japan
    CalendarCtr = 0;
    rc = EnumCalendarInfoW( MyFuncCalendar,
                            0x0411,
                            0,
                            CAL_ICALINTVALUE );
    CheckReturnValidEnum( rc,
                          FALSE,
                          CalendarCtr,
                          0,
                          "iCalIntValue Japan (cal 0)",
                          &NumErrors );

    CalendarCtr = 0;
    rc = EnumCalendarInfoExW( MyFuncCalendarEx,
                              0x0411,
                              0,
                              CAL_ICALINTVALUE );
    CheckReturnValidEnum( rc,
                          FALSE,
                          CalendarCtr,
                          0,
                          "Ex iCalIntValue Japan (cal 0)",
                          &NumErrors );



    //
    //  CALTYPE values - Japan.
    //

    for (ctr = 0; ctr < NUM_CAL_FLAGS; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoW( MyFuncCalendar,
                                0x0411,
                                1,
                                pCalFlag[ctr] );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  pCalJapan_1[ctr],
                                  "Japan (cal 1) Calendar Flag",
                                  pCalFlag[ctr],
                                  &NumErrors );
    }

    for (ctr = 0; ctr < NUM_CAL_FLAGS; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoExW( MyFuncCalendarEx,
                                  0x0411,
                                  1,
                                  pCalFlag[ctr] );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  pCalJapan_1[ctr],
                                  "Ex Japan (cal 1) Calendar Flag",
                                  pCalFlag[ctr],
                                  &NumErrors );
    }

    for (ctr = 0; ctr < NUM_CAL_FLAGS; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoW( MyFuncCalendar,
                                0x0411,
                                2,
                                pCalFlag[ctr] );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  pCalJapan_2[ctr],
                                  "Japan (cal 2) Calendar Flag",
                                  pCalFlag[ctr],
                                  &NumErrors );
    }

    for (ctr = 0; ctr < NUM_CAL_FLAGS; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoExW( MyFuncCalendarEx,
                                  0x0411,
                                  2,
                                  pCalFlag[ctr] );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  pCalJapan_2[ctr],
                                  "Ex Japan (cal 2) Calendar Flag",
                                  pCalFlag[ctr],
                                  &NumErrors );
    }

    for (ctr = 0; ctr < NUM_CAL_FLAGS; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoW( MyFuncCalendar,
                                0x0411,
                                3,
                                pCalFlag[ctr] );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  pCalJapan_3[ctr],
                                  "Japan (cal 3) Calendar Flag",
                                  pCalFlag[ctr],
                                  &NumErrors );
    }

    for (ctr = 0; ctr < NUM_CAL_FLAGS; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoExW( MyFuncCalendarEx,
                                  0x0411,
                                  3,
                                  pCalFlag[ctr] );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  pCalJapan_3[ctr],
                                  "Ex Japan (cal 3) Calendar Flag",
                                  pCalFlag[ctr],
                                  &NumErrors );
    }



    //
    //  English - Enumerate ALL Calendars.
    //

    for (ctr = 0; ctr < NUM_CAL_FLAGS; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoW( MyFuncCalendar,
                                0x0409,
                                ENUM_ALL_CALENDARS,
                                pCalFlag[ctr] );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  pCalEnglish[ctr],
                                  "English (all cal) Calendar Flag",
                                  pCalFlag[ctr],
                                  &NumErrors );
    }

    for (ctr = 0; ctr < NUM_CAL_FLAGS; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoExW( MyFuncCalendarEx,
                                  0x0409,
                                  ENUM_ALL_CALENDARS,
                                  pCalFlag[ctr] );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  pCalEnglish[ctr],
                                  "Ex English (all cal) Calendar Flag",
                                  pCalFlag[ctr],
                                  &NumErrors );
    }

    for (ctr = CAL_SDAYNAME1; ctr <= CAL_SMONTHNAME12; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoW( MyFuncCalendar,
                                0x0409,
                                ENUM_ALL_CALENDARS,
                                ctr );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  1,
                                  "English (all cal) Day/Month Calendar Flag",
                                  ctr,
                                  &NumErrors );
    }

    for (ctr = CAL_SDAYNAME1; ctr <= CAL_SMONTHNAME12; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoExW( MyFuncCalendarEx,
                                  0x0409,
                                  ENUM_ALL_CALENDARS,
                                  ctr );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  1,
                                  "Ex English (all cal) Day/Month Calendar Flag",
                                  ctr,
                                  &NumErrors );
    }

    for (ctr = CAL_SABBREVMONTHNAME1; ctr <= CAL_SABBREVMONTHNAME12; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoW( MyFuncCalendar,
                                0x0409,
                                ENUM_ALL_CALENDARS,
                                ctr );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  1,
                                  "English (all cal) Day/Month Calendar Flag",
                                  ctr,
                                  &NumErrors );
    }

    for (ctr = CAL_SABBREVMONTHNAME1; ctr <= CAL_SABBREVMONTHNAME12; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoExW( MyFuncCalendarEx,
                                  0x0409,
                                  ENUM_ALL_CALENDARS,
                                  ctr );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  1,
                                  "Ex English (all cal) Day/Month Calendar Flag",
                                  ctr,
                                  &NumErrors );
    }



    //
    //  Japan - Enumerate ALL Calendars.
    //

    for (ctr = 0; ctr < NUM_CAL_FLAGS; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoW( MyFuncCalendar,
                                0x0411,
                                ENUM_ALL_CALENDARS,
                                pCalFlag[ctr] );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  pCalJapan_All[ctr],
                                  "Japan (all cal) Calendar Flag",
                                  pCalFlag[ctr],
                                  &NumErrors );
    }

    for (ctr = 0; ctr < NUM_CAL_FLAGS; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoExW( MyFuncCalendarEx,
                                  0x0411,
                                  ENUM_ALL_CALENDARS,
                                  pCalFlag[ctr] );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  pCalJapan_All[ctr],
                                  "Ex Japan (all cal) Calendar Flag",
                                  pCalFlag[ctr],
                                  &NumErrors );
    }

    for (ctr = CAL_SDAYNAME1; ctr <= CAL_SMONTHNAME12; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoW( MyFuncCalendar,
                                0x0411,
                                ENUM_ALL_CALENDARS,
                                ctr );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  2,
                                  "Japan (all cal) Day/Month Calendar Flag",
                                  ctr,
                                  &NumErrors );
    }

    for (ctr = CAL_SDAYNAME1; ctr <= CAL_SMONTHNAME12; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoExW( MyFuncCalendarEx,
                                  0x0411,
                                  ENUM_ALL_CALENDARS,
                                  ctr );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  2,
                                  "Ex Japan (all cal) Day/Month Calendar Flag",
                                  ctr,
                                  &NumErrors );
    }

    for (ctr = CAL_SABBREVMONTHNAME1; ctr <= CAL_SABBREVMONTHNAME12; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoW( MyFuncCalendar,
                                0x0411,
                                ENUM_ALL_CALENDARS,
                                ctr );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  2,
                                  "Japan (all cal) Day/Month Calendar Flag",
                                  ctr,
                                  &NumErrors );
    }

    for (ctr = CAL_SABBREVMONTHNAME1; ctr <= CAL_SABBREVMONTHNAME12; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoExW( MyFuncCalendarEx,
                                  0x0411,
                                  ENUM_ALL_CALENDARS,
                                  ctr );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  2,
                                  "Ex Japan (all cal) Day/Month Calendar Flag",
                                  ctr,
                                  &NumErrors );
    }



    //
    //  Return total number of errors found.
    //
    return (NumErrors);
}


////////////////////////////////////////////////////////////////////////////
//
//  ECI_Ansi
//
//  This routine tests the normal cases of the API routine.
//
//  08-02-93    JulieB    Created.
////////////////////////////////////////////////////////////////////////////

int ECI_Ansi()
{
    int NumErrors = 0;            // error count - to be returned
    int rc;                       // return code
    int ctr;                      // loop counter


    if (Verbose)
    {
        printf("\n----  A version  ----\n\n");
    }

    //
    //  Single calendar id - English.
    //

    //  Variation 1  -  iCalIntValue - English
    CalendarCtr = 0;
    rc = EnumCalendarInfoA( MyFuncCalendarA,
                            0x0409,
                            0,
                            CAL_ICALINTVALUE );
    CheckReturnValidEnum( rc,
                          FALSE,
                          CalendarCtr,
                          0,
                          "A version iCalIntValue English (cal 0)",
                          &NumErrors );

    CalendarCtr = 0;
    rc = EnumCalendarInfoExA( MyFuncCalendarExA,
                              0x0409,
                              0,
                              CAL_ICALINTVALUE );
    CheckReturnValidEnum( rc,
                          FALSE,
                          CalendarCtr,
                          0,
                          "Ex A version iCalIntValue English (cal 0)",
                          &NumErrors );

    //  Variation 2  -  iCalIntValue - English
    CalendarCtr = 0;
    rc = EnumCalendarInfoA( MyFuncCalendarA,
                            0x0409,
                            2,
                            CAL_ICALINTVALUE );
    CheckReturnValidEnum( rc,
                          FALSE,
                          CalendarCtr,
                          0,
                          "A version iCalIntValue English (cal 2)",
                          &NumErrors );

    CalendarCtr = 0;
    rc = EnumCalendarInfoExA( MyFuncCalendarExA,
                              0x0409,
                              2,
                              CAL_ICALINTVALUE );
    CheckReturnValidEnum( rc,
                          FALSE,
                          CalendarCtr,
                          0,
                          "Ex A version iCalIntValue English (cal 2)",
                          &NumErrors );

    //  Variation 3  -  Use CP ACP
    CalendarCtr = 0;
    rc = EnumCalendarInfoA( MyFuncCalendarA,
                            0x0409,
                            0,
                            CAL_ICALINTVALUE | LOCALE_USE_CP_ACP );
    CheckReturnValidEnum( rc,
                          FALSE,
                          CalendarCtr,
                          0,
                          "A version Use CP ACP",
                          &NumErrors );

    CalendarCtr = 0;
    rc = EnumCalendarInfoExA( MyFuncCalendarExA,
                              0x0409,
                              0,
                              CAL_ICALINTVALUE | LOCALE_USE_CP_ACP );
    CheckReturnValidEnum( rc,
                          FALSE,
                          CalendarCtr,
                          0,
                          "Ex A version Use CP ACP",
                          &NumErrors );


    //
    //  CALTYPE values - English.
    //

    for (ctr = 0; ctr < NUM_CAL_FLAGS; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoA( MyFuncCalendarA,
                                0x0409,
                                1,
                                pCalFlag[ctr] );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  pCalEnglish[ctr],
                                  "A version English (cal 1) Calendar Flag",
                                  pCalFlag[ctr],
                                  &NumErrors );
    }

    for (ctr = 0; ctr < NUM_CAL_FLAGS; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoExA( MyFuncCalendarExA,
                                  0x0409,
                                  1,
                                  pCalFlag[ctr] );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  pCalEnglish[ctr],
                                  "Ex A version English (cal 1) Calendar Flag",
                                  pCalFlag[ctr],
                                  &NumErrors );
    }



    //
    //  Single calendar id - Japan.
    //

    //  Variation 1  -  iCalIntValue - Japan
    CalendarCtr = 0;
    rc = EnumCalendarInfoA( MyFuncCalendarA,
                            0x0411,
                            0,
                            CAL_ICALINTVALUE );
    CheckReturnValidEnum( rc,
                          FALSE,
                          CalendarCtr,
                          0,
                          "A version iCalIntValue Japan (cal 0)",
                          &NumErrors );

    CalendarCtr = 0;
    rc = EnumCalendarInfoExA( MyFuncCalendarExA,
                              0x0411,
                              0,
                              CAL_ICALINTVALUE );
    CheckReturnValidEnum( rc,
                          FALSE,
                          CalendarCtr,
                          0,
                          "Ex A version iCalIntValue Japan (cal 0)",
                          &NumErrors );



    //
    //  CALTYPE values - Japan.
    //

    for (ctr = 0; ctr < NUM_CAL_FLAGS; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoA( MyFuncCalendarA,
                                0x0411,
                                1,
                                pCalFlag[ctr] );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  pCalJapan_1[ctr],
                                  "A version Japan (cal 1) Calendar Flag",
                                  pCalFlag[ctr],
                                  &NumErrors );
    }

    for (ctr = 0; ctr < NUM_CAL_FLAGS; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoExA( MyFuncCalendarExA,
                                  0x0411,
                                  1,
                                  pCalFlag[ctr] );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  pCalJapan_1[ctr],
                                  "Ex A version Japan (cal 1) Calendar Flag",
                                  pCalFlag[ctr],
                                  &NumErrors );
    }

    for (ctr = 0; ctr < NUM_CAL_FLAGS; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoA( MyFuncCalendarA,
                                0x0411,
                                2,
                                pCalFlag[ctr] );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  pCalJapan_2[ctr],
                                  "A version Japan (cal 2) Calendar Flag",
                                  pCalFlag[ctr],
                                  &NumErrors );
    }

    for (ctr = 0; ctr < NUM_CAL_FLAGS; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoExA( MyFuncCalendarExA,
                                  0x0411,
                                  2,
                                  pCalFlag[ctr] );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  pCalJapan_2[ctr],
                                  "Ex A version Japan (cal 2) Calendar Flag",
                                  pCalFlag[ctr],
                                  &NumErrors );
    }

    for (ctr = 0; ctr < NUM_CAL_FLAGS; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoA( MyFuncCalendarA,
                                0x0411,
                                3,
                                pCalFlag[ctr] );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  pCalJapan_3[ctr],
                                  "A version Japan (cal 3) Calendar Flag",
                                  pCalFlag[ctr],
                                  &NumErrors );
    }

    for (ctr = 0; ctr < NUM_CAL_FLAGS; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoExA( MyFuncCalendarExA,
                                  0x0411,
                                  3,
                                  pCalFlag[ctr] );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  pCalJapan_3[ctr],
                                  "Ex A version Japan (cal 3) Calendar Flag",
                                  pCalFlag[ctr],
                                  &NumErrors );
    }



    //
    //  English - Enumerate ALL Calendars.
    //

    for (ctr = 0; ctr < NUM_CAL_FLAGS; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoA( MyFuncCalendarA,
                                0x0409,
                                ENUM_ALL_CALENDARS,
                                pCalFlag[ctr] );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  pCalEnglish[ctr],
                                  "A version English (all cal) Calendar Flag",
                                  pCalFlag[ctr],
                                  &NumErrors );
    }

    for (ctr = 0; ctr < NUM_CAL_FLAGS; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoExA( MyFuncCalendarExA,
                                  0x0409,
                                  ENUM_ALL_CALENDARS,
                                  pCalFlag[ctr] );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  pCalEnglish[ctr],
                                  "Ex A version English (all cal) Calendar Flag",
                                  pCalFlag[ctr],
                                  &NumErrors );
    }

    for (ctr = CAL_SDAYNAME1; ctr <= CAL_SMONTHNAME12; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoA( MyFuncCalendarA,
                                0x0409,
                                ENUM_ALL_CALENDARS,
                                ctr );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  1,
                                  "A version English (all cal) Day/Month Calendar Flag",
                                  ctr,
                                  &NumErrors );
    }

    for (ctr = CAL_SDAYNAME1; ctr <= CAL_SMONTHNAME12; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoExA( MyFuncCalendarExA,
                                  0x0409,
                                  ENUM_ALL_CALENDARS,
                                  ctr );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  1,
                                  "Ex A version English (all cal) Day/Month Calendar Flag",
                                  ctr,
                                  &NumErrors );
    }

    for (ctr = CAL_SABBREVMONTHNAME1; ctr <= CAL_SABBREVMONTHNAME12; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoA( MyFuncCalendarA,
                                0x0409,
                                ENUM_ALL_CALENDARS,
                                ctr );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  1,
                                  "A version English (all cal) Day/Month Calendar Flag",
                                  ctr,
                                  &NumErrors );
    }

    for (ctr = CAL_SABBREVMONTHNAME1; ctr <= CAL_SABBREVMONTHNAME12; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoExA( MyFuncCalendarExA,
                                  0x0409,
                                  ENUM_ALL_CALENDARS,
                                  ctr );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  1,
                                  "Ex A version English (all cal) Day/Month Calendar Flag",
                                  ctr,
                                  &NumErrors );
    }



    //
    //  Japan - Enumerate ALL Calendars.
    //

    for (ctr = 0; ctr < NUM_CAL_FLAGS; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoA( MyFuncCalendarA,
                                0x0411,
                                ENUM_ALL_CALENDARS,
                                pCalFlag[ctr] );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  pCalJapan_All[ctr],
                                  "A version Japan (all cal) Calendar Flag",
                                  pCalFlag[ctr],
                                  &NumErrors );
    }

    for (ctr = 0; ctr < NUM_CAL_FLAGS; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoExA( MyFuncCalendarExA,
                                  0x0411,
                                  ENUM_ALL_CALENDARS,
                                  pCalFlag[ctr] );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  pCalJapan_All[ctr],
                                  "Ex A version Japan (all cal) Calendar Flag",
                                  pCalFlag[ctr],
                                  &NumErrors );
    }

    for (ctr = CAL_SDAYNAME1; ctr <= CAL_SMONTHNAME12; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoA( MyFuncCalendarA,
                                0x0411,
                                ENUM_ALL_CALENDARS,
                                ctr );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  2,
                                  "A version Japan (all cal) Day/Month Calendar Flag",
                                  ctr,
                                  &NumErrors );
    }

    for (ctr = CAL_SDAYNAME1; ctr <= CAL_SMONTHNAME12; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoExA( MyFuncCalendarExA,
                                  0x0411,
                                  ENUM_ALL_CALENDARS,
                                  ctr );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  2,
                                  "Ex A version Japan (all cal) Day/Month Calendar Flag",
                                  ctr,
                                  &NumErrors );
    }

    for (ctr = CAL_SABBREVMONTHNAME1; ctr <= CAL_SABBREVMONTHNAME12; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoA( MyFuncCalendarA,
                                0x0411,
                                ENUM_ALL_CALENDARS,
                                ctr );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  2,
                                  "A version Japan (all cal) Day/Month Calendar Flag",
                                  ctr,
                                  &NumErrors );
    }

    for (ctr = CAL_SABBREVMONTHNAME1; ctr <= CAL_SABBREVMONTHNAME12; ctr++)
    {
        CalendarCtr = 0;
        rc = EnumCalendarInfoExA( MyFuncCalendarExA,
                                  0x0411,
                                  ENUM_ALL_CALENDARS,
                                  ctr );
        CheckReturnValidEnumLoop( rc,
                                  TRUE,
                                  CalendarCtr,
                                  2,
                                  "Ex A version Japan (all cal) Day/Month Calendar Flag",
                                  ctr,
                                  &NumErrors );
    }



    //
    //  Return total number of errors found.
    //
    return (NumErrors);
}