136 lines
2.6 KiB
C
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");
|
||
|
}
|
||
|
}
|
||
|
}
|