/*
 * System resources loading
 *
 * Copyright 1995 Alexandre Julliard
 */

#include "windows.h"
#include "global.h"
#include "options.h"
#include "resource.h"

extern const struct resource * const sysres_En_Table[];
extern const struct resource * const sysres_Es_Table[];
extern const struct resource * const sysres_De_Table[];
extern const struct resource * const sysres_No_Table[];
extern const struct resource * const sysres_Fr_Table[];
extern const struct resource * const sysres_Fi_Table[];
extern const struct resource * const sysres_Da_Table[];
extern const struct resource * const sysres_Cz_Table[];
extern const struct resource * const sysres_Eo_Table[];
extern const struct resource * const sysres_It_Table[];
extern const struct resource * const sysres_Ko_Table[];
extern const struct resource * const sysres_Hu_Table[];
extern const struct resource * const sysres_Pl_Table[];
extern const struct resource * const sysres_Po_Table[];
extern const struct resource * const sysres_Sw_Table[];
extern const struct resource * const sysres_Ca_Table[];

static const struct resource * const * SYSRES_Resources[] =
{
    sysres_En_Table,  /* LANG_En */
    sysres_Es_Table,  /* LANG_Es */
    sysres_De_Table,  /* LANG_De */
    sysres_No_Table,  /* LANG_No */
    sysres_Fr_Table,  /* LANG_Fr */
    sysres_Fi_Table,  /* LANG_Fi */
    sysres_Da_Table,  /* LANG_Da */
    sysres_Cz_Table,  /* LANG_Cz */
    sysres_Eo_Table,  /* LANG_Eo */
    sysres_It_Table,  /* LANG_It */
    sysres_Ko_Table,  /* LANG_Ko */
    sysres_Hu_Table,  /* LANG_Hu */
    sysres_Pl_Table,  /* LANG_Pl */
    sysres_Po_Table,  /* LANG_Po */
    sysres_Sw_Table,  /* LANG_Sw */
    sysres_Ca_Table   /* LANG_Ca */
};


/***********************************************************************
 *           SYSRES_GetResourcePtr
 *
 * Return a pointer to a system resource.
 */
LPCVOID SYSRES_GetResPtr( SYSTEM_RESOURCE id )
{
    return SYSRES_Resources[Options.language][id]->bytes;
}


/***********************************************************************
 *           SYSRES_LoadResource
 *
 * Create a global memory block for a system resource.
 */
HGLOBAL16 SYSRES_LoadResource( SYSTEM_RESOURCE id )
{
    const struct resource *resPtr;

    resPtr = SYSRES_Resources[Options.language][id];
    return GLOBAL_CreateBlock( GMEM_FIXED, resPtr->bytes, resPtr->size,
			       GetCurrentPDB(), FALSE, FALSE, TRUE, NULL );
}


/***********************************************************************
 *           SYSRES_FreeResource
 *
 * Free a global memory block for a system resource.
 */
void SYSRES_FreeResource( HGLOBAL16 handle )
{
    GLOBAL_FreeBlock( handle );
}
