windows-nt/Source/XPSP1/NT/sdktools/rcdll/rcdll.c
2020-09-26 16:20:57 +08:00

136 lines
2.6 KiB
C

/****************************************************************************/
/* */
/* RCDLL.C - */
/* */
/* Windows 3.5 Resource Compiler - Main Module */
/* */
/* */
/****************************************************************************/
#include "rc.h"
#include <setjmp.h>
/* Module handle */
HINSTANCE hInstance;
HWND hWndCaller;
RC_MESSAGE_CALLBACK lpfnMessageCallback;
RC_PARSE_CALLBACK lpfnParseCallback;
/* Function prototypes */
int __cdecl rc_main(int, char**);
int __cdecl rcpp_main(int argc, PWCHAR*argv);
#ifdef __cplusplus
extern "C"
#endif
BOOL
WINAPI
DllMain(
HINSTANCE hDll,
DWORD dwReason,
LPVOID lpReserved
)
{
if (dwReason == DLL_PROCESS_ATTACH) {
hInstance = hDll;
DisableThreadLibraryCalls(hDll);
}
return TRUE;
}
#ifdef __cplusplus
extern "C"
#endif
int CALLBACK
RC(
HWND hWnd,
int fStatus,
RC_MESSAGE_CALLBACK lpfnMsg,
RC_PARSE_CALLBACK lpfnParse,
int argc,
char**argv
)
{
hWndCaller = hWnd;
lpfnMessageCallback = lpfnMsg;
lpfnParseCallback = lpfnParse;
return (rc_main(argc, argv));
}
int
RCPP(
int argc,
PCHAR *argv,
PCHAR env
)
{
WCHAR **wargv;
wargv = UnicodeCommandLine(argc, argv);
return rcpp_main(argc, wargv);
}
void
SendWarning(
PSTR str
)
{
if (lpfnMessageCallback)
(*lpfnMessageCallback)(0, 0, str);
if (hWndCaller) {
if (SendMessageA(hWndCaller, WM_RC_ERROR, FALSE, (LPARAM)str) != 0) {
quit("\n");
}
}
}
void
SendError(
PSTR str
)
{
static int cErrThisLine = 0;
static int LastRow = 0;
if (lpfnMessageCallback)
(*lpfnMessageCallback)(0, 0, str);
if (hWndCaller) {
if (SendMessageA(hWndCaller, WM_RC_ERROR, FALSE, (LPARAM)str) != 0) {
quit("\n");
}
}
if (token.row == LastRow) {
if (++cErrThisLine > 4 && strcmp(str, "\n"))
quit("\n");
} else {
LastRow = token.row;
cErrThisLine = 0;
}
}
void
UpdateStatus(
unsigned nCode,
unsigned long dwStatus
)
{
if (hWndCaller) {
if (SendMessageA(hWndCaller, WM_RC_STATUS, nCode, dwStatus) != 0) {
quit("\n");
}
}
}