⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 resmng.c

📁 好记星的控件,包括button,list,对文件操作
💻 C
字号:
/****************************************************************************/
/*                                                                          */
/*              Copyright (C) 2005 SHENZHEN MEIJIN CO.LTD                   */
/*                                                                          */
/* FILE NAME:   ResMng.c                                                    */
/* MODULE NAME: 资源管理模块                                                */
/* DESCRIPTION: 本程序的主要功能是管理系统中的资源                          */
/*                                                                          */
/* FUNCTIONS:                                                               */
/*              ResMngInitialize    资源管理模块初始化                      */
/*              ResGetString        得到对应ID号的字符串资源的数据地址和长度*/
/*              ResGetIcon          得到对应ID号的位图资源的数据地址和长度  */
/*                                                                          */
/****************************************************************************/
/*    NAME         DATE               REMARKS                               */
/* ==========  ============   ==============================================*/
/*   谢永良     2005-03-22          创建                                    */
/****************************************************************************/

// 包含相关的头文件
#include "Base.h"
#include "file.h"
#include "ResMng.h"
#include "Maskrom.h"
#include "iodriver.h"

typedef struct tagRESMNG_DATA_STRUCT
{
    UINT    uResType;
    VOID   *pResDataAddr;
} RESMNG_DATA_STRUCT;

// 资源信息表
#ifndef WIN32
const RESMNG_DATA_STRUCT g_caResInfoTable[] =
{
    RESTYPE_STRING, 0,//(VOID*)RES_STRING_ADDRESS,
    RESTYPE_ICON,   0,//(VOID*)RES_ICON_ADDRESS,
    //RESTYPE_HELP,   (VOID*)SYSHELP_ADDRESS,
    //RESTYPE_MOV,    (VOID*)SYSMOVE_ADDRESS,
};
#else
RESMNG_DATA_STRUCT g_caResInfoTable[] =
{
    RESTYPE_STRING, 0,  //RES_STRING_ADDRESS,
    RESTYPE_ICON,   0,  //RES_ICON_ADDRESS,
    //RESTYPE_HELP,   SYSHELP_ADDRESS,
    //RESTYPE_MOV,    SYSMOVE_ADDRESS,
};
#endif

#ifdef WIN32
#define FILENAME_ICON	"A:/ICON.BIN"
#define FILENAME_STRING	"A:/STRING.BIN"
#else
#define FILENAME_ICON	"C:/RESICONN.BIN"
#define FILENAME_STRING	"C:/RESSTRRR.BIN"
#endif
#define CHECK_RESID(id,maxid)	(id > 0 && id < maxid)		
//#define ICONBUFF_SIZE	LCD_SCREEN_WIDTH*LCD_SCREEN_HEIGHT/8
#define ICONBUFF_SIZE	0x4B30		//根据最大资源数据得来,原因待查

HFILE g_hIconFile = -1;		// ICON文件的句柄
HFILE g_hStringFile = -1;	// String文件的句柄

UINT  g_uMaxID_ICON;	// 用于判断RESID的正确性
UINT  g_uMaxID_STRING;	// 用于判断RESID的正确性

UINT8 g_uIconBuff[ICONBUFF_SIZE];	//用于将ICON数据放、放入FLASHROM后,读时用

INT  _ResGetResource( HFILE, UINT uID, UINT8 **ppRetAddr );


/****************************************************************************/
/* FUNCTION:   BOOL  ResMngInitialize(VOID)                                */
/* DESCRIPTION:资源管理模块初始化                                          */
/* INPUTS:     NONE                                                        */
/* OUTPUTS:    NONE                                                        */
/* RETURN:     初始化成功返回TRUE,否则返回FALSE                           */
/****************************************************************************/
/*    NAME         DATE               REMARKS                               */
/* ==========  ============   ==============================================*/
/*   谢永良     2005-03-22          创建                                    */
/****************************************************************************/
BOOL  ResMngInitialize(VOID)
{
	HFILE f;
#ifdef WIN32
//    g_caResInfoTable[0].pResDataAddr = RES_STRING_ADDRESS;
//    g_caResInfoTable[1].pResDataAddr = RES_ICON_ADDRESS;
#endif

	if (g_hIconFile != -1)
	{
		return TRUE;
	}
	if((f = FileOpen(FILENAME_ICON,FILEMODE_READONLY)) >= 0)
	{
		g_hIconFile = f;
		if((f = FileOpen(FILENAME_STRING,FILEMODE_READONLY)) < 0 )
		{
			FileClose(g_hIconFile);
			return FALSE;
		}
		g_hStringFile = f;
	}
	else
	{
		return FALSE;
	}

	FileSeek(g_hIconFile,0,FILESEEK_BEGIN);
	FileRead(g_hIconFile,(char*)&g_uMaxID_ICON,sizeof(UINT));
	g_uMaxID_ICON >>= 2;

	FileSeek(g_hStringFile,0,FILESEEK_BEGIN);
	FileRead(g_hStringFile,(char*)&g_uMaxID_STRING,sizeof(UINT));
	g_uMaxID_STRING >>= 2;

    return TRUE;
}


/****************************************************************************/
/* FUNCTION:   INT  ResGetString( UINT uStrID, UINT8 **ppRetAddr )         */
/* DESCRIPTION:得到对应ID号的字符串资源的数据地址和长度                    */
/* INPUTS:     uStrID - 要获取的字符串资源的ID号                          */
/* OUTPUTS:    ppRetAddr - 将对应字符串资源的地址通过这里返回             */
/* RETURN:     如果返回正数,则此返回值对应字符串资源的数据长度,          */
/*                  同时通过*ppRetAddr返回资源数据的地址                    */
/*              如果返回0,则表示对应的资源不存在                           */
/*              如果返回负数,则此返回值的绝对值表示资源的数据长度,        */
/*                  同时通过*ppRetAddr返回对应资源的文件名和数据偏移        */
/****************************************************************************/
/*    NAME         DATE               REMARKS                               */
/* ==========  ============   ==============================================*/
/*   谢永良     2005-03-22          创建                                    */
/****************************************************************************/
INT  ResGetString( UINT uStrID, UINT8 **ppRetAddr )
{
    if ( !CHECK_RESID(uStrID,g_uMaxID_STRING))
        return 0;   

    return _ResGetResource( g_hStringFile, uStrID, ppRetAddr );
}

/****************************************************************************/
/* FUNCTION:   INT ResGetIconSize( UINT uIconID,UINT *pWidth, UINT *pHeight)*/
/* DESCRIPTION:得到对应ID号的位图资源的尺寸								*/
/* INPUTS:     uIconID - 要获取的位图资源的ID号                           */
/*				pWidth,pHeight  - 用于返回ICON宽度和高度的变量指针			*/
/* OUTPUTS:    *pWidth,*pHeigth - ICON的宽度和高度信息		                */
/* RETURN:     如果返回正数,则此返回值对应位图资源的数据长度,            */
/*              如果返回负数,则此返回值的绝对值表示资源的数据长度,        */
/*				以上两返回宽度,高度信息
/*              如果返回0,则表示对应的资源不存在                           */
/****************************************************************************/
/*    NAME         DATE               REMARKS                               */
/* ==========  ============   ==============================================*/
/*   王旻     2007-04-17          创建                                    */
/****************************************************************************/

INT ResGetIconSize( UINT uIconID,UINT *pWidth, UINT *pHeight)
{
	// 如果用RESGETICON效率有问题,可以考虑用这个函数处理。
	return TRUE;
}


/****************************************************************************/
/* FUNCTION:   INT  ResGetIcon( UUINT uIconID, UINT8 **ppRetAddr )         */
/* DESCRIPTION:得到对应ID号的位图资源的数据地址和长度                      */
/* INPUTS:     uIconID - 要获取的位图资源的ID号                           */
/* OUTPUTS:    ppRetAddr - 将对应位图资源的地址通过这里返回               */
/* RETURN:     如果返回正数,则此返回值对应位图资源的数据长度,            */
/*                  同时通过*ppRetAddr返回资源数据的地址                    */
/*              如果返回0,则表示对应的资源不存在                           */
/*              如果返回负数,则此返回值的绝对值表示资源的数据长度,        */
/*                  同时通过*ppRetAddr返回对应资源的文件名和数据偏移        */
/****************************************************************************/
/*    NAME         DATE               REMARKS                               */
/* ==========  ============   ==============================================*/
/*   谢永良     2005-03-22          创建                                    */
/****************************************************************************/
INT  ResGetIcon( UINT uIconID, UINT8 **ppRetAddr )
{
    if ( !CHECK_RESID(uIconID,g_uMaxID_ICON))
        return 0; 

    return _ResGetResource( g_hIconFile, uIconID, ppRetAddr );
}


/****************************************************************************/
/* FUNCTION:   INT  _ResGetResource( HFILE hFile, UINT uID, UINT8 **ppRetAddr )  */
/* DESCRIPTION:得到对应ID号的资源的数据地址和长度                          */
/* INPUTS:     uID - 要获取的资源的ID号                                   */
/* OUTPUTS:    ppRetAddr - 将对应资源的地址通过这里返回                   */
/* RETURN:     如果返回正数,则此返回值对应资源的数据长度,                */
/*                  同时通过*ppRetAddr返回资源数据的地址                    */
/*              如果返回0,则表示对应的资源不存在                           */
/*              如果返回负数,则此返回值的绝对值表示资源的数据长度,        */
/*                  同时通过*ppRetAddr返回对应资源的文件名和数据偏移        */
/****************************************************************************/
/*    NAME         DATE               REMARKS                               */
/* ==========  ============   ==============================================*/
/*   谢永良     2005-03-22          创建                                    */
/****************************************************************************/
INT  _ResGetResource( HFILE hFile, UINT uID, UINT8 **ppRetAddr )
{
    UINT     nResLen, nOffs;
	OPTION   preempt_status;

    preempt_status = NU_Change_Preemption(NU_NO_PREEMPT);

    nResLen = 0;
    nOffs = 0;
    // 取资源数据地址
    FileSeek(hFile, sizeof(UINT)*(uID - 1),FILESEEK_BEGIN);
	if (FileRead(hFile,(char*)&nOffs,sizeof(nOffs)) != sizeof(nOffs))
	{
	    nResLen = 0;
		goto res_fail;
	}
	if ( FileRead(hFile,(char*)&nResLen,sizeof(nResLen)) != sizeof(nResLen))
	{
	    nResLen = 0;
		goto res_fail;
	}

    if (nResLen <= nOffs)
	{
	    nResLen = 0;
		goto res_fail;
	}

	nResLen = nResLen - nOffs;

	if(nResLen > (UINT)ICONBUFF_SIZE)
	{
		nResLen = ICONBUFF_SIZE;		// something is wrong.
	}

	FileSeek(hFile, nOffs,FILESEEK_BEGIN);
	if ( FileRead(hFile,g_uIconBuff,nResLen) != (INT32)nResLen)
	{
	    nResLen = 0;
		goto res_fail;
	}

    *ppRetAddr = g_uIconBuff;

res_fail:
    NU_Change_Preemption(preempt_status);

    return nResLen;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -