windows-nt/Source/XPSP1/NT/windows/feime/chs/ntgen/upimeres/upimeres.h
2020-09-26 16:20:57 +08:00

241 lines
5.4 KiB
C

//DATA STRUCT USED IN icon resource
#define ERR_RES_INVALID_BMP 0x01
#define ERR_RES_INVALID_ICON 0x02
#define ERR_RES_INVALID_VER 0x04
#define ERR_RES_NO_BMP 0x10
#define ERR_RES_NO_ICON 0x20
#define ERR_RES_NO_VER 0x40
#define ERR_CANNOT_UPRES 0x100
#define ERR_INVALID_BMP_MSG "非法位图文件, 选用系统位图!"
#define ERR_INVALID_ICON_MSG "非法图标文件, 选用系统图标!"
#define ERR_NO_BMP_MSG "选用系统位图!"
#define ERR_NO_ICON_MSG "选用系统图标!"
#define ERR_CANNOT_UPRES_MSG "无法生成输入法!"
#define MSG_TITLE "警告"
#define BMPNAME "CHINESE"
#define ICONNAME "IMEICO"
#define DATANAME "IMECHARAC"
//define in imedefs.h
//these are HACK CODES, and depends on imedefs.h
//this code come from debug, don't change it
#define STR_ID 54
//according to the file size check if it is a 20*20 bmp
#define BMP_20_SIZE 358
typedef struct tagICONDIRENTRY{
BYTE bWidth;
BYTE bHeight;
BYTE bColorCount;
BYTE bReserved;
WORD wPlanes;
WORD wBitCount;
DWORD dwBytesInRes;
DWORD dwImageOffset;
}ICONDIRENTRY;
typedef struct ICONDIR{
WORD idReserved;
WORD idType;
WORD idCount;
ICONDIRENTRY idEntries[1];
}ICONHEADER;
#define DEFAULT_CODEPAGE 1252
#define MAJOR_RESOURCE_VERSION 4
#define MINOR_RESOURCE_VERSION 0
#define MAXSTR (256+1)
//
// An ID_WORD indicates the following WORD is an ordinal rather
// than a string
//
#define ID_WORD 0xffff
//typedef WCHAR *PWCHAR;
typedef struct MY_STRING {
ULONG discriminant; // long to make the rest of the struct aligned
union u {
struct {
struct MY_STRING *pnext;
ULONG ulOffsetToString;
USHORT cbD;
USHORT cb;
WCHAR *sz;
} ss;
WORD Ordinal;
} uu;
} SDATA, *PSDATA, **PPSDATA;
#define IS_STRING 1
#define IS_ID 2
// defines to make deferencing easier
#define OffsetToString uu.ss.ulOffsetToString
#define cbData uu.ss.cbD
#define cbsz uu.ss.cb
//v-guanx 95.09.06 to avoid conflict with zhongyi
#define szStr uu.ss.sz
//define szStrUU uu.ss.sz
typedef struct _RESNAME {
struct _RESNAME *pnext; // The first three fields should be the
PSDATA Name; // same in both res structures
ULONG OffsetToData;
PSDATA Type;
ULONG SectionNumber;
struct _RESNAME *pnextRes;
ULONG DataSize;
ULONG OffsetToDataEntry;
USHORT ResourceNumber;
USHORT NumberOfLanguages;
WORD LanguageId;
} RESNAME, *PRESNAME, **PPRESNAME;
typedef struct _RESTYPE {
struct _RESTYPE *pnext; // The first three fields should be the
PSDATA Type; // same in both res structures
ULONG OffsetToData;
struct _RESNAME *NameHeadID;
struct _RESNAME *NameHeadName;
ULONG NumberOfNamesID;
ULONG NumberOfNamesName;
} RESTYPE, *PRESTYPE, **PPRESTYPE;
typedef struct _UPDATEDATA {
ULONG cbStringTable;
PSDATA StringHead;
PRESNAME ResHead;
PRESTYPE ResTypeHeadID;
PRESTYPE ResTypeHeadName;
LONG Status;
HANDLE hFileName;
} UPDATEDATA, *PUPDATEDATA;
//
// Round up a byte count to a power of 2:
//
#define ROUNDUP(cbin, align) (((cbin) + (align) - 1) & ~((DWORD)(align) - 1))
//
// Return the remainder, given a byte count and a power of 2:
//
#define REMAINDER(cbin,align) (((align)-((cbin)&((align)-1)))&((align)-1))
#define CBLONG (sizeof(LONG))
#define BUFSIZE (4L * 1024L)
//VERSION INFO related definitions
//these are HACK CODES
#define VER_ROOT 0
#define VER_STR_INFO 1
#define VER_LANG 2
#define VER_COMP_NAME 3
#define VER_FILE_DES 4
#define VER_FILE_VER 5
#define VER_INTL_NAME 6
#define VER_LEGAL_CR 7
#define VER_ORG_FILE_NAME 8
#define VER_PRD_NAME 9
#define VER_PRD_VER 10
#define VER_VAR_FILE_INFO 11
#define VER_TRANS 12
#define VER_BLOCK_NUM 13
#define VER_HEAD_LEN 0x98
#define VER_TAIL_LEN 0x44
#define VER_STR_INFO_OFF 0x5c
#define VER_LANG_OFF 0x80
#define VER_VAR_FILE_INFO_OFF 0x2c0
typedef struct tagVERDATA{
WORD cbBlock;
WORD cbValue;
WORD wKeyOffset;
WORD wKeyNameSize;
BOOL fUpdate; //need update flag
}VERDATA;
LONG
AddResource(
PSDATA Type,
PSDATA Name,
WORD Language,
PUPDATEDATA pupd,
PVOID lpData,
ULONG cb
);
PSDATA
AddStringOrID(
LPCTSTR lp,
PUPDATEDATA pupd
);
LONG
WriteResFile(
HANDLE hUpdate,
char *pDstname);
VOID
FreeData(
PUPDATEDATA pUpd
);
PRESNAME
WriteResSection(
PUPDATEDATA pUpdate,
INT outfh,
ULONG align,
ULONG cbLeft,
PRESNAME pResSave
);
BOOL
EnumTypesFunc(
HANDLE hModule,
LPTSTR lpType,
LONG lParam
);
BOOL
EnumNamesFunc(
HANDLE hModule,
LPTSTR lpType,
LPTSTR lpName,
LONG lParam
);
BOOL
EnumLangsFunc(
HANDLE hModule,
LPTSTR lpType,
LPTSTR lpName,
WORD language,
LONG lParam
);
HANDLE BeginUpdateResourceEx(LPCTSTR,BOOL);
BOOL UpdateResourceEx(HANDLE,LPCTSTR, LPCTSTR, WORD, LPVOID, DWORD);
BOOL EndUpdateResourceEx(HANDLE, BOOL);
/*explaination of parameters
LPCTSTR pszImeDesName, //destination IME file name
LPCTSTR pszImeBmpName, //Bitmap file name
LPCTSTR pszImeIconName, //Icon file name
LPCTSTR pszImeVerInfo, //version infomation string
LPCTSTR pszImeDevCorpName, //Ime inventer corp/person name
WORD wImeData //Ime initial data
*/
BOOL ImeUpdateRes(LPCTSTR,LPCTSTR,LPCTSTR,LPCTSTR,LPCTSTR ,WORD);
long MakeVerInfo(LPCTSTR,LPCTSTR,LPCTSTR,BYTE *);