Jim Park's Unicode NSIS merging - Step 4 : merging more TCHAR stuff that shouldn't have any impact
git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@6041 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
8ab72b9ece
commit
acf9a8c21f
41 changed files with 937 additions and 586 deletions
|
@ -28,7 +28,7 @@ BOOL CALLBACK BannerProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
int iMainStringSet = 0;
|
||||
|
||||
popstring(buf);
|
||||
while (*(int*)buf == CHAR4_TO_DWORD('/','s','e','t') && !buf[4])
|
||||
while (lstrcmp(buf, _T("/set")) == 0)
|
||||
{
|
||||
unsigned int id;
|
||||
popstring(buf);
|
||||
|
|
|
@ -168,9 +168,9 @@ NSISFunc(SetBg) {
|
|||
uWndWidth = uScrWidth;
|
||||
uWndHeight = uScrHeight;
|
||||
|
||||
char szGradient[] = {'/', 'G', 'R', 'A', 'D', 'I', 'E', 'N', 'T', 0};
|
||||
char szFillScreen[] = {'/', 'F', 'I' ,'L', 'L', 'S', 'C', 'R', 'E', 'E', 'N', 0};
|
||||
char szTiled[] = {'/', 'T', 'I', 'L', 'E', 'D', 0};
|
||||
LPCTSTR szGradient = _T("/GRADIENT");
|
||||
LPCTSTR szFillScreen = _T("/FILLSCREEN");
|
||||
LPCTSTR szTiled = _T("/TILED");
|
||||
|
||||
popstring(szTemp);
|
||||
if (!lstrcmpi(szTemp, szGradient)) {
|
||||
|
@ -357,9 +357,9 @@ NSISFunc(Destroy) {
|
|||
}
|
||||
|
||||
NSISFunc(Sound) {
|
||||
char szLoop[] = {'/', 'L', 'O', 'O', 'P', 0};
|
||||
char szWait[] = {'/', 'W', 'A', 'I', 'T', 0};
|
||||
char szStop[] = {'/', 'S', 'T', 'O', 'P', 0};
|
||||
LPCTSTR szLoop = _T("/LOOP");
|
||||
LPCTSTR szWait = _T("/WAIT");
|
||||
LPCTSTR szStop = _T("/STOP");
|
||||
|
||||
DWORD flags = SND_FILENAME | SND_NODEFAULT;
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ int NSISCALL popstring(TCHAR *str)
|
|||
stack_t *th;
|
||||
if (!g_stacktop || !*g_stacktop) return 1;
|
||||
th=(*g_stacktop);
|
||||
if (str) lstrcpyA(str,th->text);
|
||||
if (str) lstrcpy(str,th->text);
|
||||
*g_stacktop = th->next;
|
||||
GlobalFree((HGLOBAL)th);
|
||||
return 0;
|
||||
|
@ -24,7 +24,7 @@ int NSISCALL popstringn(TCHAR *str, int maxlen)
|
|||
stack_t *th;
|
||||
if (!g_stacktop || !*g_stacktop) return 1;
|
||||
th=(*g_stacktop);
|
||||
if (str) lstrcpynA(str,th->text,maxlen?maxlen:g_stringsize);
|
||||
if (str) lstrcpyn(str,th->text,maxlen?maxlen:g_stringsize);
|
||||
*g_stacktop = th->next;
|
||||
GlobalFree((HGLOBAL)th);
|
||||
return 0;
|
||||
|
@ -34,8 +34,8 @@ void NSISCALL pushstring(const TCHAR *str)
|
|||
{
|
||||
stack_t *th;
|
||||
if (!g_stacktop) return;
|
||||
th=(stack_t*)GlobalAlloc(GPTR,sizeof(stack_t)+g_stringsize);
|
||||
lstrcpynA(th->text,str,g_stringsize);
|
||||
th=(stack_t*)GlobalAlloc(GPTR,(sizeof(stack_t)+(g_stringsize)*sizeof(TCHAR)));
|
||||
lstrcpyn(th->text,str,g_stringsize);
|
||||
th->next=*g_stacktop;
|
||||
*g_stacktop=th;
|
||||
}
|
||||
|
@ -49,9 +49,108 @@ TCHAR * NSISCALL getuservariable(const int varnum)
|
|||
void NSISCALL setuservariable(const int varnum, const TCHAR *var)
|
||||
{
|
||||
if (var != NULL && varnum >= 0 && varnum < __INST_LAST)
|
||||
lstrcpyA(g_variables + varnum*g_stringsize, var);
|
||||
lstrcpy(g_variables + varnum*g_stringsize, var);
|
||||
}
|
||||
|
||||
#ifdef _UNICODE
|
||||
int NSISCALL PopStringA(char* ansiStr)
|
||||
{
|
||||
wchar_t* wideStr = (wchar_t*) GlobalAlloc(GPTR, g_stringsize*sizeof(wchar_t));
|
||||
int rval = popstring(wideStr);
|
||||
WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, g_stringsize, NULL, NULL);
|
||||
GlobalFree((HGLOBAL)wideStr);
|
||||
return rval;
|
||||
}
|
||||
|
||||
int NSISCALL PopStringNA(char* ansiStr, int maxlen)
|
||||
{
|
||||
int realLen = maxlen ? maxlen : g_stringsize;
|
||||
wchar_t* wideStr = (wchar_t*) GlobalAlloc(GPTR, realLen*sizeof(wchar_t));
|
||||
int rval = popstringn(wideStr, realLen);
|
||||
WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, realLen, NULL, NULL);
|
||||
GlobalFree((HGLOBAL)wideStr);
|
||||
return rval;
|
||||
}
|
||||
|
||||
void NSISCALL PushStringA(const char* ansiStr)
|
||||
{
|
||||
wchar_t* wideStr = (wchar_t*) GlobalAlloc(GPTR, g_stringsize*sizeof(wchar_t));
|
||||
MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, g_stringsize);
|
||||
pushstring(wideStr);
|
||||
GlobalFree((HGLOBAL)wideStr);
|
||||
return;
|
||||
}
|
||||
|
||||
void NSISCALL GetUserVariableW(const int varnum, wchar_t* wideStr)
|
||||
{
|
||||
lstrcpyW(wideStr, getuservariable(varnum));
|
||||
}
|
||||
|
||||
void NSISCALL GetUserVariableA(const int varnum, char* ansiStr)
|
||||
{
|
||||
wchar_t* wideStr = getuservariable(varnum);
|
||||
WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, g_stringsize, NULL, NULL);
|
||||
}
|
||||
|
||||
void NSISCALL SetUserVariableA(const int varnum, const char* ansiStr)
|
||||
{
|
||||
if (ansiStr != NULL && varnum >= 0 && varnum < __INST_LAST)
|
||||
{
|
||||
wchar_t* wideStr = g_variables + varnum * g_stringsize;
|
||||
MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, g_stringsize);
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
// ANSI defs
|
||||
int NSISCALL PopStringW(wchar_t* wideStr)
|
||||
{
|
||||
char* ansiStr = (char*) GlobalAlloc(GPTR, g_stringsize);
|
||||
int rval = popstring(ansiStr);
|
||||
MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, g_stringsize);
|
||||
GlobalFree((HGLOBAL)ansiStr);
|
||||
return rval;
|
||||
}
|
||||
|
||||
int NSISCALL PopStringNW(wchar_t* wideStr, int maxlen)
|
||||
{
|
||||
int realLen = maxlen ? maxlen : g_stringsize;
|
||||
char* ansiStr = (char*) GlobalAlloc(GPTR, realLen);
|
||||
int rval = popstringn(ansiStr, realLen);
|
||||
MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, realLen);
|
||||
GlobalFree((HGLOBAL)ansiStr);
|
||||
return rval;
|
||||
}
|
||||
|
||||
void NSISCALL PushStringW(wchar_t* wideStr)
|
||||
{
|
||||
char* ansiStr = (char*) GlobalAlloc(GPTR, g_stringsize);
|
||||
WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, g_stringsize, NULL, NULL);
|
||||
pushstring(ansiStr);
|
||||
GlobalFree((HGLOBAL)ansiStr);
|
||||
}
|
||||
|
||||
void NSISCALL GetUserVariableW(const int varnum, wchar_t* wideStr)
|
||||
{
|
||||
char* ansiStr = getuservariable(varnum);
|
||||
MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, g_stringsize);
|
||||
}
|
||||
|
||||
void NSISCALL GetUserVariableA(const int varnum, char* ansiStr)
|
||||
{
|
||||
lstrcpyA(ansiStr, getuservariable(varnum));
|
||||
}
|
||||
|
||||
void NSISCALL SetUserVariableW(const int varnum, const wchar_t* wideStr)
|
||||
{
|
||||
if (wideStr != NULL && varnum >= 0 && varnum < __INST_LAST)
|
||||
{
|
||||
char* ansiStr = g_variables + varnum * g_stringsize;
|
||||
WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, g_stringsize, NULL, NULL);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// playing with integers
|
||||
|
||||
int NSISCALL myatoi(const TCHAR *s)
|
||||
|
@ -168,7 +267,7 @@ int NSISCALL myatoi_or(const TCHAR *s)
|
|||
int NSISCALL popint()
|
||||
{
|
||||
TCHAR buf[128];
|
||||
if (popstringn(buf,sizeof(buf)))
|
||||
if (popstringn(buf,_countof(buf)))
|
||||
return 0;
|
||||
|
||||
return myatoi(buf);
|
||||
|
@ -177,7 +276,7 @@ int NSISCALL popint()
|
|||
int NSISCALL popint_or()
|
||||
{
|
||||
TCHAR buf[128];
|
||||
if (popstringn(buf,sizeof(buf)))
|
||||
if (popstringn(buf,_countof(buf)))
|
||||
return 0;
|
||||
|
||||
return myatoi_or(buf);
|
||||
|
|
|
@ -68,12 +68,32 @@ void NSISCALL pushint(int value);
|
|||
TCHAR * NSISCALL getuservariable(const int varnum);
|
||||
void NSISCALL setuservariable(const int varnum, const TCHAR *var);
|
||||
|
||||
#ifdef _UNICODE
|
||||
#define PopStringW(x) popstring(x)
|
||||
#define PushStringW(x) pushstring(x)
|
||||
#define SetUserVariableW(x,y) setuservariable(x,y)
|
||||
|
||||
int NSISCALL PopStringA(char* ansiStr);
|
||||
void NSISCALL PushStringA(const char* ansiStr);
|
||||
void NSISCALL GetUserVariableW(const int varnum, wchar_t* wideStr);
|
||||
void NSISCALL GetUserVariableA(const int varnum, char* ansiStr);
|
||||
void NSISCALL SetUserVariableA(const int varnum, const char* ansiStr);
|
||||
|
||||
#else
|
||||
// ANSI defs
|
||||
|
||||
#define PopStringA(x) popstring(x)
|
||||
#define PushStringA(x) pushstring(x)
|
||||
#define SetUserVariableA(x,y) setuservariable(x,y)
|
||||
|
||||
int NSISCALL PopStringW(wchar_t* wideStr);
|
||||
void NSISCALL PushStringW(wchar_t* wideStr);
|
||||
void NSISCALL GetUserVariableW(const int varnum, wchar_t* wideStr);
|
||||
void NSISCALL GetUserVariableA(const int varnum, char* ansiStr);
|
||||
void NSISCALL SetUserVariableW(const int varnum, const wchar_t* wideStr);
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -344,19 +344,19 @@ bool WINAPI SaveSettings(void) {
|
|||
{
|
||||
switch (*p1) {
|
||||
case _T('\t'):
|
||||
*(LPWORD)p2 = CHAR2_TO_WORD('\\', 't');
|
||||
p2++;
|
||||
*p2++ = _T('\\');
|
||||
*p2 = _T('t');
|
||||
break;
|
||||
case _T('\n'):
|
||||
*(LPWORD)p2 = CHAR2_TO_WORD('\\', 'n');
|
||||
p2++;
|
||||
*p2++ = _T('\\');
|
||||
*p2 = _T('n');
|
||||
break;
|
||||
case _T('\r'):
|
||||
*(LPWORD)p2 = CHAR2_TO_WORD('\\', 'r');
|
||||
p2++;
|
||||
*p2++ = _T('\\');
|
||||
*p2 = _T('n');
|
||||
break;
|
||||
case _T('\\'):
|
||||
*p2++ = '\\';
|
||||
*p2 = _T('\\');
|
||||
// Jim Park: used to be p2++ but that's a bug that works because
|
||||
// CharNext()'s behavior at terminating null char. But still
|
||||
// definitely, unsafe.
|
||||
|
@ -672,13 +672,17 @@ LRESULT WINAPI WMCommandProc(HWND hWnd, UINT id, HWND hwndCtl, UINT codeNotify)
|
|||
ULONG eaten;
|
||||
LPITEMIDLIST root;
|
||||
int ccRoot = (lstrlen(pField->pszRoot) * 2) + 2;
|
||||
SHGetDesktopFolder(&sf);
|
||||
#ifdef _UNICODE
|
||||
sf->ParseDisplayName(hConfigWindow, NULL, pField->pszRoot, &eaten, &root, NULL);
|
||||
#else
|
||||
LPWSTR pwszRoot = (LPWSTR) MALLOC(ccRoot);
|
||||
MultiByteToWideChar(CP_ACP, 0, pField->pszRoot, -1, pwszRoot, ccRoot);
|
||||
SHGetDesktopFolder(&sf);
|
||||
sf->ParseDisplayName(hConfigWindow, NULL, pwszRoot, &eaten, &root, NULL);
|
||||
FREE(pwszRoot);
|
||||
#endif
|
||||
bi.pidlRoot = root;
|
||||
sf->Release();
|
||||
FREE(pwszRoot);
|
||||
}
|
||||
//CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
|
||||
LPITEMIDLIST pResult = SHBrowseForFolder(&bi);
|
||||
|
@ -892,7 +896,11 @@ int WINAPI NumbersOnlyPasteWndProc(HWND hWin, UINT uMsg, WPARAM wParam, LPARAM l
|
|||
{
|
||||
if (OpenClipboard(hWin))
|
||||
{
|
||||
#ifdef _UNICODE
|
||||
HGLOBAL hData = GetClipboardData(CF_UNICODETEXT);
|
||||
#else
|
||||
HGLOBAL hData = GetClipboardData(CF_TEXT);
|
||||
#endif
|
||||
|
||||
if (hData)
|
||||
{
|
||||
|
@ -1113,7 +1121,7 @@ int WINAPI createCfgDlg()
|
|||
|
||||
#undef DEFAULT_STYLES
|
||||
|
||||
if (pField->nType < 1 || pField->nType > (int)(sizeof(ClassTable) / sizeof(ClassTable[0])))
|
||||
if (pField->nType < 1 || pField->nType > (int)(_countof(ClassTable)))
|
||||
continue;
|
||||
|
||||
DWORD dwStyle, dwExStyle;
|
||||
|
@ -1622,41 +1630,38 @@ int WINAPI LookupTokens(TableEntry* psTable_, TCHAR* pszTokens_)
|
|||
*/
|
||||
void WINAPI ConvertNewLines(TCHAR *str) {
|
||||
TCHAR *p1, *p2, *p3;
|
||||
TCHAR tch0, tch1, nch;
|
||||
|
||||
if (!str)
|
||||
return;
|
||||
|
||||
p1 = p2 = str;
|
||||
|
||||
while (*p1)
|
||||
while ((tch0 = *p1) != 0)
|
||||
{
|
||||
switch (*(LPWORD)p1)
|
||||
nch = 0; // new translated char
|
||||
if (tch0 == _T('\\'))
|
||||
{
|
||||
case CHAR2_TO_WORD(_T('\\'), _T('t')):
|
||||
*p2 = _T('\t');
|
||||
p1 += 2;
|
||||
p2++;
|
||||
break;
|
||||
case CHAR2_TO_WORD(_T('\\'), _T('n')):
|
||||
*p2 = _T('\n');
|
||||
p1 += 2;
|
||||
p2++;
|
||||
break;
|
||||
case CHAR2_TO_WORD(_T('\\'), _T('r')):
|
||||
*p2 = _T('\r');
|
||||
p1 += 2;
|
||||
p2++;
|
||||
break;
|
||||
case CHAR2_TO_WORD(_T('\\'), _T('\\')):
|
||||
*p2 = _T('\\');
|
||||
p1 += 2;
|
||||
p2++;
|
||||
break;
|
||||
default:
|
||||
tch1 = *(p1+1);
|
||||
|
||||
if (tch1 == _T('t')) nch = _T('\t');
|
||||
else if (tch1 == _T('n')) nch = _T('\n');
|
||||
else if (tch1 == _T('r')) nch = _T('\r');
|
||||
else if (tch1 == _T('\\')) nch = _T('\\');
|
||||
}
|
||||
|
||||
// Was it a special char?
|
||||
if (nch)
|
||||
{
|
||||
*p2++ = nch;
|
||||
p1 += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
// For MBCS
|
||||
p3 = CharNext(p1);
|
||||
while (p1 < p3)
|
||||
*p2++ = *p1++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -63,11 +63,13 @@ int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdL
|
|||
continue;
|
||||
|
||||
wsprintf(valname, _T("%u.file"), j);
|
||||
l = STR_SIZE;
|
||||
l = (lstrlen(file)+1)*sizeof(TCHAR);
|
||||
if (FAILED(RegQueryValueEx(key, valname, NULL, &t, (LPBYTE) file, &l)) || t != REG_SZ)
|
||||
continue;
|
||||
|
||||
RegFile(mode[0], file, mode[1] == _T('X'));
|
||||
// JP: Note, if this mode[1] is used as anything but a boolean later on,
|
||||
// we'll need to consider the next line carefully.
|
||||
RegFile(mode[0], file, mode[1] == 'X');
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -208,34 +210,142 @@ void RegTypeLib(TCHAR *file)
|
|||
}
|
||||
}
|
||||
|
||||
TCHAR *mystrstri(TCHAR *a, TCHAR *b)
|
||||
char *mystrstriA(char *a, const char *b)
|
||||
{
|
||||
int l = lstrlen(b);
|
||||
while (lstrlen(a) >= l)
|
||||
int l = lstrlenA(b);
|
||||
while (lstrlenA(a) >= l)
|
||||
{
|
||||
TCHAR c = a[l];
|
||||
char c = a[l];
|
||||
a[l] = 0;
|
||||
if (!lstrcmpi(a, b))
|
||||
if (!lstrcmpiA(a, b))
|
||||
{
|
||||
a[l] = c;
|
||||
return a;
|
||||
}
|
||||
a[l] = c;
|
||||
a = CharNext(a);
|
||||
a = CharNextA(a);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void mini_memcpy(void *out, const void *in, int len)
|
||||
{
|
||||
TCHAR *c_out=(TCHAR*)out;
|
||||
TCHAR *c_in=(TCHAR *)in;
|
||||
char *c_out=(char*)out;
|
||||
char *c_in=(char *)in;
|
||||
while (len-- > 0)
|
||||
{
|
||||
*c_out++=*c_in++;
|
||||
}
|
||||
}
|
||||
|
||||
HANDLE myOpenFile(const TCHAR *fn, DWORD da, DWORD cd)
|
||||
{
|
||||
int attr = GetFileAttributes(fn);
|
||||
return CreateFile(
|
||||
fn,
|
||||
da,
|
||||
FILE_SHARE_READ,
|
||||
NULL,
|
||||
cd,
|
||||
attr == INVALID_FILE_ATTRIBUTES ? 0 : attr,
|
||||
NULL
|
||||
);
|
||||
}
|
||||
|
||||
/** Modifies the wininit.ini file to rename / delete a file.
|
||||
*
|
||||
* @param prevName The previous / current name of the file.
|
||||
* @param newName The new name to move the file to. If NULL, the current file
|
||||
* will be deleted.
|
||||
*/
|
||||
void RenameViaWininit(const TCHAR* prevName, const TCHAR* newName)
|
||||
{
|
||||
static char szRenameLine[1024];
|
||||
static TCHAR wininit[1024];
|
||||
static TCHAR tmpbuf[1024];
|
||||
|
||||
int cchRenameLine;
|
||||
LPCSTR szRenameSec = "[Rename]\r\n"; // rename section marker
|
||||
HANDLE hfile;
|
||||
DWORD dwFileSize;
|
||||
DWORD dwBytes;
|
||||
DWORD dwRenameLinePos;
|
||||
char *pszWinInit; // Contains the file contents of wininit.ini
|
||||
|
||||
int spn; // length of the short path name in TCHARs.
|
||||
|
||||
lstrcpy(tmpbuf, _T("NUL"));
|
||||
|
||||
if (newName) {
|
||||
// create the file if it's not already there to prevent GetShortPathName from failing
|
||||
CloseHandle(myOpenFile(newName,0,CREATE_NEW));
|
||||
spn = GetShortPathName(newName,tmpbuf,1024);
|
||||
if (!spn || spn > 1024)
|
||||
return;
|
||||
}
|
||||
// wininit is used as a temporary here
|
||||
spn = GetShortPathName(prevName,wininit,1024);
|
||||
if (!spn || spn > 1024)
|
||||
return;
|
||||
cchRenameLine = wsprintfA(szRenameLine, "%s=%s\r\n", tmpbuf, wininit);
|
||||
// Get the path to the wininit.ini file.
|
||||
GetWindowsDirectory(wininit, 1024-16);
|
||||
lstrcat(wininit, _T("\\wininit.ini"));
|
||||
|
||||
hfile = myOpenFile(wininit, GENERIC_READ | GENERIC_WRITE, OPEN_ALWAYS);
|
||||
|
||||
if (hfile != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
// We are now working on the Windows wininit file
|
||||
dwFileSize = GetFileSize(hfile, NULL);
|
||||
pszWinInit = (char*) GlobalAlloc(GPTR, dwFileSize + cchRenameLine + 10);
|
||||
|
||||
if (pszWinInit != NULL)
|
||||
{
|
||||
if (ReadFile(hfile, pszWinInit, dwFileSize, &dwBytes, NULL) && dwFileSize == dwBytes)
|
||||
{
|
||||
// Look for the rename section in the current file.
|
||||
LPSTR pszRenameSecInFile = mystrstriA(pszWinInit, szRenameSec);
|
||||
if (pszRenameSecInFile == NULL)
|
||||
{
|
||||
// No rename section. So we add it to the end of file.
|
||||
lstrcpyA(pszWinInit+dwFileSize, szRenameSec);
|
||||
dwFileSize += 10;
|
||||
dwRenameLinePos = dwFileSize;
|
||||
}
|
||||
else
|
||||
{
|
||||
// There is a rename section, but is there another section after it?
|
||||
char *pszFirstRenameLine = pszRenameSecInFile+10;
|
||||
char *pszNextSec = mystrstriA(pszFirstRenameLine,"\n[");
|
||||
if (pszNextSec)
|
||||
{
|
||||
TCHAR *p = ++pszNextSec;
|
||||
while (p < pszWinInit + dwFileSize) {
|
||||
p[cchRenameLine] = *p;
|
||||
p++;
|
||||
}
|
||||
|
||||
dwRenameLinePos = pszNextSec - pszWinInit;
|
||||
}
|
||||
// rename section is last, stick item at end of file
|
||||
else dwRenameLinePos = dwFileSize;
|
||||
}
|
||||
|
||||
mini_memcpy(&pszWinInit[dwRenameLinePos], szRenameLine, cchRenameLine);
|
||||
dwFileSize += cchRenameLine;
|
||||
|
||||
SetFilePointer(hfile, 0, NULL, FILE_BEGIN);
|
||||
WriteFile(hfile, pszWinInit, dwFileSize, &dwBytes, NULL);
|
||||
|
||||
GlobalFree(pszWinInit);
|
||||
}
|
||||
}
|
||||
|
||||
CloseHandle(hfile);
|
||||
}
|
||||
}
|
||||
|
||||
void DeleteFileOnReboot(TCHAR *pszFile)
|
||||
{
|
||||
BOOL fOk = 0;
|
||||
|
@ -253,73 +363,6 @@ void DeleteFileOnReboot(TCHAR *pszFile)
|
|||
|
||||
if (!fOk)
|
||||
{
|
||||
static TCHAR szRenameLine[1024];
|
||||
static TCHAR wininit[1024];
|
||||
int cchRenameLine;
|
||||
TCHAR *szRenameSec = _T("[Rename]\r\n");
|
||||
HANDLE hfile, hfilemap;
|
||||
DWORD dwFileSize, dwRenameLinePos;
|
||||
|
||||
int spn;
|
||||
|
||||
// wininit is used as a temporary here
|
||||
spn = GetShortPathName(pszFile,wininit,1024);
|
||||
if (!spn || spn > 1024)
|
||||
return;
|
||||
cchRenameLine = wsprintf(szRenameLine,_T("NUL=%s\r\n"),wininit);
|
||||
|
||||
GetWindowsDirectory(wininit, 1024-16);
|
||||
lstrcat(wininit, _T("\\wininit.ini"));
|
||||
hfile = CreateFile(wininit,
|
||||
GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_ALWAYS,
|
||||
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
|
||||
|
||||
if (hfile != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
dwFileSize = GetFileSize(hfile, NULL);
|
||||
hfilemap = CreateFileMapping(hfile, NULL, PAGE_READWRITE, 0, dwFileSize + cchRenameLine + 10, NULL);
|
||||
|
||||
if (hfilemap != NULL)
|
||||
{
|
||||
LPTSTR pszWinInit = (LPTSTR) MapViewOfFile(hfilemap, FILE_MAP_WRITE, 0, 0, 0);
|
||||
|
||||
if (pszWinInit != NULL)
|
||||
{
|
||||
LPTSTR pszRenameSecInFile = mystrstri(pszWinInit, szRenameSec);
|
||||
if (pszRenameSecInFile == NULL)
|
||||
{
|
||||
lstrcpy(pszWinInit+dwFileSize, szRenameSec);
|
||||
dwFileSize += 10;
|
||||
dwRenameLinePos = dwFileSize;
|
||||
}
|
||||
else
|
||||
{
|
||||
TCHAR *pszFirstRenameLine = pszRenameSecInFile+10;
|
||||
TCHAR *pszNextSec = mystrstri(pszFirstRenameLine,_T("\n["));
|
||||
if (pszNextSec)
|
||||
{
|
||||
TCHAR *p = ++pszNextSec;
|
||||
while (p < pszWinInit + dwFileSize) {
|
||||
p[cchRenameLine] = *p;
|
||||
p++;
|
||||
}
|
||||
|
||||
dwRenameLinePos = pszNextSec - pszWinInit;
|
||||
}
|
||||
// rename section is last, stick item at end of file
|
||||
else dwRenameLinePos = dwFileSize;
|
||||
}
|
||||
|
||||
mini_memcpy(&pszWinInit[dwRenameLinePos], szRenameLine, cchRenameLine);
|
||||
dwFileSize += cchRenameLine;
|
||||
|
||||
UnmapViewOfFile(pszWinInit);
|
||||
}
|
||||
CloseHandle(hfilemap);
|
||||
}
|
||||
SetFilePointer(hfile, dwFileSize, NULL, FILE_BEGIN);
|
||||
SetEndOfFile(hfile);
|
||||
CloseHandle(hfile);
|
||||
}
|
||||
RenameViaWininit(pszFile, NULL);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,11 +21,8 @@ NSISFunction(Register) {
|
|||
|
||||
EXDLL_INIT();
|
||||
|
||||
char filename[1024];
|
||||
popstring(filename);
|
||||
|
||||
wchar_t ole_filename[1024];
|
||||
MultiByteToWideChar(CP_ACP, 0, filename, 1024, ole_filename, 1024);
|
||||
PopStringW(ole_filename);
|
||||
|
||||
ITypeLib* typeLib;
|
||||
HRESULT hr;
|
||||
|
@ -46,11 +43,8 @@ NSISFunction(UnRegister) {
|
|||
|
||||
EXDLL_INIT();
|
||||
|
||||
char filename[1024];
|
||||
popstring(filename);
|
||||
|
||||
wchar_t ole_filename[1024];
|
||||
MultiByteToWideChar(CP_ACP, 0, filename, 1024, ole_filename, 1024);
|
||||
PopStringW(ole_filename);
|
||||
|
||||
ITypeLib* typeLib;
|
||||
HRESULT hr;
|
||||
|
@ -87,11 +81,8 @@ NSISFunction(GetLibVersion) {
|
|||
|
||||
EXDLL_INIT();
|
||||
|
||||
char filename[1024];
|
||||
popstring(filename);
|
||||
|
||||
wchar_t ole_filename[1024];
|
||||
MultiByteToWideChar(CP_ACP, 0, filename, 1024, ole_filename, 1024);
|
||||
PopStringW(ole_filename);
|
||||
|
||||
ITypeLib* typeLib;
|
||||
HRESULT hr;
|
||||
|
|
|
@ -218,7 +218,11 @@ BOOL CALLBACK DialogProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) {
|
|||
GlobalUnlock(hMem);
|
||||
if (!OpenClipboard(hwndDlg)) return 0;
|
||||
EmptyClipboard();
|
||||
#ifdef _UNICODE
|
||||
SetClipboardData(CF_UNICODETEXT,hMem);
|
||||
#else
|
||||
SetClipboardData(CF_TEXT,hMem);
|
||||
#endif
|
||||
CloseClipboard();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -123,8 +123,8 @@ void UpdateToolBarCompressorButton()
|
|||
{
|
||||
int iBitmap;
|
||||
int iString;
|
||||
TCHAR szBuffer[64];
|
||||
TCHAR temp[32];
|
||||
TCHAR szBuffer[124]; // increased to 124 for good measure, also.
|
||||
TCHAR temp[64]; // increased to 64. Hit limit 08/20/2007 -- Jim Park.
|
||||
TOOLINFO ti;
|
||||
|
||||
my_memset(&ti, 0, sizeof(TOOLINFO));
|
||||
|
@ -139,14 +139,14 @@ void UpdateToolBarCompressorButton()
|
|||
LoadString(g_sdata.hInstance,
|
||||
IDS_COMPRESSOR,
|
||||
temp,
|
||||
sizeof(temp));
|
||||
_countof(temp));
|
||||
my_memset(szBuffer, 0, sizeof(szBuffer));
|
||||
lstrcat(szBuffer,temp);
|
||||
lstrcat(szBuffer,_T(" ["));
|
||||
LoadString(g_sdata.hInstance,
|
||||
iString,
|
||||
temp,
|
||||
sizeof(temp));
|
||||
_countof(temp));
|
||||
lstrcat(szBuffer,temp);
|
||||
lstrcat(szBuffer,_T("]"));
|
||||
|
||||
|
@ -181,7 +181,7 @@ void AddToolBarButtonTooltip(int id, int iString)
|
|||
LoadString(g_sdata.hInstance,
|
||||
iString,
|
||||
szBuffer,
|
||||
sizeof(szBuffer));
|
||||
_countof(szBuffer));
|
||||
ti.lpszText = (LPTSTR) szBuffer;
|
||||
ti.rect.left =rect.left;
|
||||
ti.rect.top = rect.top;
|
||||
|
|
|
@ -151,7 +151,11 @@ void CopyToClipboard(HWND hwnd) {
|
|||
existing_text[0]=0;
|
||||
GetDlgItemText(hwnd, IDC_LOGWIN, existing_text, len+1);
|
||||
GlobalUnlock(mem);
|
||||
#ifdef _UNICODE
|
||||
SetClipboardData(CF_UNICODETEXT,mem);
|
||||
#else
|
||||
SetClipboardData(CF_TEXT,mem);
|
||||
#endif
|
||||
CloseClipboard();
|
||||
}
|
||||
|
||||
|
@ -295,15 +299,16 @@ void CompileNSISScript() {
|
|||
|
||||
TCHAR *args = (TCHAR *) GlobalLock(g_sdata.script_cmd_args);
|
||||
|
||||
g_sdata.compile_command = (char *) GlobalAlloc(
|
||||
GPTR,
|
||||
/* makensis.exe */ _countof(EXENAME) + /* space */ 1 +
|
||||
size_t byteSize = sizeof(TCHAR)*(
|
||||
/* makensis.exe */ lstrlen(EXENAME) + /* space */ 1 +
|
||||
/* script path */ lstrlen(g_sdata.script) + /* space */ 1 +
|
||||
/* script cmd args */ lstrlen(args) + /* space */ 1 +
|
||||
/* defines /Dblah=... */ lstrlen(symbols) + /* space */ 1 +
|
||||
/* /XSetCompressor... */ lstrlen(compressor) + /* space */ 1 +
|
||||
/* /NOTTIFYHWND + HWND */ _countof(_T("/NOTIFYHWND -4294967295")) + /* space */ 1
|
||||
);
|
||||
+6); /* for -- \"\" and NULL */
|
||||
|
||||
g_sdata.compile_command = (TCHAR *) GlobalAlloc(GPTR, byteSize);
|
||||
|
||||
wsprintf(
|
||||
g_sdata.compile_command,
|
||||
|
@ -468,9 +473,10 @@ TCHAR** LoadSymbolSet(TCHAR *name)
|
|||
}
|
||||
if(symbols) {
|
||||
l++;
|
||||
symbols[i] = (TCHAR *)GlobalAlloc(GPTR, l*sizeof(TCHAR));
|
||||
DWORD bytes = sizeof(TCHAR) * l;
|
||||
symbols[i] = (TCHAR *)GlobalAlloc(GPTR, bytes);
|
||||
if (symbols[i]) {
|
||||
RegQueryValueEx(hSubKey,buf,NULL,&t,(unsigned char*)symbols[i],&l);
|
||||
RegQueryValueEx(hSubKey,buf,NULL,&t,(unsigned char*)symbols[i],&bytes);
|
||||
}
|
||||
else {
|
||||
break;
|
||||
|
@ -540,7 +546,10 @@ void SaveSymbolSet(TCHAR *name, TCHAR **symbols)
|
|||
|
||||
void ResetObjects() {
|
||||
if (g_sdata.compile_command)
|
||||
{
|
||||
GlobalFree(g_sdata.compile_command);
|
||||
g_sdata.compile_command = 0;
|
||||
}
|
||||
|
||||
g_sdata.warnings = FALSE;
|
||||
g_sdata.retcode = -1;
|
||||
|
@ -565,8 +574,10 @@ void ResetSymbols() {
|
|||
|
||||
int InitBranding() {
|
||||
TCHAR *s;
|
||||
s = (TCHAR *)GlobalAlloc(GPTR,lstrlen(EXENAME)+10);
|
||||
wsprintf(s,_T("%s /version"),EXENAME);
|
||||
TCHAR opt[] = _T(" /version");
|
||||
s = (TCHAR *)GlobalAlloc(GPTR,(lstrlen(EXENAME)+lstrlen(opt)+1)*sizeof(TCHAR));
|
||||
lstrcpy(s, EXENAME);
|
||||
lstrcat(s, opt);
|
||||
{
|
||||
STARTUPINFO si={sizeof(si),};
|
||||
SECURITY_ATTRIBUTES sa={sizeof(sa),};
|
||||
|
@ -601,8 +612,8 @@ int InitBranding() {
|
|||
if (WaitForSingleObject(pi.hProcess,10000)!=WAIT_OBJECT_0) {
|
||||
return 0;
|
||||
}
|
||||
ReadFile(read_stdout, szBuf, sizeof(szBuf)-1, &dwRead, NULL);
|
||||
szBuf[dwRead] = 0;
|
||||
ReadFile(read_stdout, szBuf, sizeof(szBuf)-sizeof(TCHAR), &dwRead, NULL);
|
||||
szBuf[dwRead/sizeof(TCHAR)] = 0;
|
||||
if (lstrlen(szBuf)==0) return 0;
|
||||
g_sdata.branding = (TCHAR *)GlobalAlloc(GPTR,(lstrlen(szBuf)+6)*sizeof(TCHAR));
|
||||
wsprintf(g_sdata.branding,_T("NSIS %s"),szBuf);
|
||||
|
@ -613,6 +624,7 @@ int InitBranding() {
|
|||
return 1;
|
||||
}
|
||||
|
||||
|
||||
void InitTooltips(HWND h) {
|
||||
if (h == NULL) return;
|
||||
my_memset(&g_tip,0,sizeof(NTOOLTIP));
|
||||
|
@ -736,7 +748,6 @@ void PushMRUFile(TCHAR* fname)
|
|||
{
|
||||
int i;
|
||||
DWORD rv;
|
||||
TCHAR* file_part;
|
||||
TCHAR full_file_name[MAX_PATH+1];
|
||||
|
||||
if(!fname || fname[0] == _T('\0') || fname[0] == _T('/') || fname[0] == _T('-')) {
|
||||
|
@ -744,7 +755,7 @@ void PushMRUFile(TCHAR* fname)
|
|||
}
|
||||
|
||||
my_memset(full_file_name,0,sizeof(full_file_name));
|
||||
rv = GetFullPathName(fname,_countof(full_file_name),full_file_name,&file_part);
|
||||
rv = GetFullPathName(fname,_countof(full_file_name),full_file_name,NULL);
|
||||
if (rv == 0) {
|
||||
return;
|
||||
}
|
||||
|
@ -897,7 +908,7 @@ void SaveMRUList()
|
|||
for(i = 0; i < MRU_LIST_SIZE; i++) {
|
||||
wsprintf(buf,_T("%d"),i);
|
||||
// cbData must include the size of the terminating null character.
|
||||
RegSetValueEx(hSubKey,buf,0,REG_SZ,(const BYTE*)g_mru_list[i],(lstrlen(g_mru_list[i]))*sizeof(TCHAR));
|
||||
RegSetValueEx(hSubKey,buf,0,REG_SZ,(const BYTE*)g_mru_list[i],(lstrlen(g_mru_list[i])+1)*sizeof(TCHAR));
|
||||
}
|
||||
RegCloseKey(hSubKey);
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPar
|
|||
{
|
||||
BITMAP bm;
|
||||
RECT vp;
|
||||
GetObject(g_hbm, sizeof(bm), (LPTSTR)&bm);
|
||||
GetObject(g_hbm, sizeof(bm), &bm);
|
||||
SystemParametersInfo(SPI_GETWORKAREA, 0, &vp, 0);
|
||||
SetWindowLong(hwnd,GWL_STYLE,0);
|
||||
SetWindowPos(hwnd,NULL,
|
||||
|
|
|
@ -368,14 +368,10 @@ BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
case WM_COMMAND:
|
||||
if (LOWORD(wParam) == IDC_DIRLIST && HIWORD(wParam) == LBN_SELCHANGE)
|
||||
{
|
||||
LRESULT selection = SendMessage(hwDirList, LB_GETCURSEL, 0, 0);
|
||||
if (selection != LB_ERR)
|
||||
{
|
||||
SendMessage(hwDirList, LB_GETTEXT, selection, (WPARAM)buf);
|
||||
if (autoadd)
|
||||
lstrcat(lstrcat(buf, _T("\\")), progname);
|
||||
SetWindowText(hwLocation, buf);
|
||||
}
|
||||
SendMessage(hwDirList, LB_GETTEXT, SendMessage(hwDirList, LB_GETCURSEL, 0, 0), (WPARAM)buf);
|
||||
if (autoadd)
|
||||
lstrcat(lstrcat(buf, _T("\\")), progname);
|
||||
SetWindowText(hwLocation, buf);
|
||||
}
|
||||
else if (LOWORD(wParam) == IDC_CHECK && HIWORD(wParam) == BN_CLICKED)
|
||||
{
|
||||
|
@ -458,9 +454,9 @@ void AddFolderFromReg(int nFolder)
|
|||
{
|
||||
if (FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
|
||||
{
|
||||
if (*(WORD*)FileData.cFileName != *(WORD*)_T("."))
|
||||
if (lstrcmp(FileData.cFileName, _T(".")) != 0)
|
||||
{
|
||||
if (*(WORD*)FileData.cFileName != *(WORD*)_T("..") || FileData.cFileName[2])
|
||||
if (lstrcmp(FileData.cFileName, _T("..")) != 0)
|
||||
{
|
||||
if (SendMessage(g_hwDirList, LB_FINDSTRINGEXACT, (WPARAM) -1, (LPARAM)FileData.cFileName) == LB_ERR)
|
||||
SendMessage(g_hwDirList, LB_ADDSTRING, 0, (LPARAM)FileData.cFileName);
|
||||
|
|
|
@ -87,6 +87,11 @@ IF 0
|
|||
.set SYSTEM_LOG_DEBUG,1
|
||||
#endif
|
||||
|
||||
#ifdef _UNICODE
|
||||
#undef _UNICODE
|
||||
.set _UNICODE,1
|
||||
#endif
|
||||
|
||||
#define IFDEF .ifdef
|
||||
#define ELSE .else
|
||||
#define ENDIF .endif
|
||||
|
@ -99,6 +104,7 @@ IF 0
|
|||
#define DATA_SUFFIX :
|
||||
#define BYTE .byte
|
||||
#define DWORD .int
|
||||
#define WORD .word
|
||||
#define ASCII .ascii
|
||||
|
||||
#define MACRO_DECL .macro
|
||||
|
@ -140,7 +146,12 @@ EXTERN __alloca_probe : PROC
|
|||
|
||||
EXTERN __imp__GlobalFree@4 : PROC
|
||||
EXTERN __imp__GetLastError@0 : PROC
|
||||
|
||||
IFDEF _UNICODE
|
||||
EXTERN __imp__wsprintfW : PROC
|
||||
ELSE
|
||||
EXTERN __imp__wsprintfA : PROC
|
||||
ENDIF
|
||||
|
||||
EXTERN _GlobalCopy : PROC
|
||||
|
||||
|
@ -181,54 +192,130 @@ SECTION_DATA
|
|||
|
||||
IFDEF SYSTEM_LOG_DEBUG
|
||||
|
||||
LogStack DATA_SUFFIX ASCII "%s ESP = 0x%08X Stack = 0x%08X Real = 0x%08X"
|
||||
BYTE 0
|
||||
IFDEF _UNICODE
|
||||
LogStack DATA_SUFFIX
|
||||
BYTE '%', 0, 's', 0, ' ', 0, ' ', 0, 'E', 0, 'S', 0, 'P', 0, ' ', 0
|
||||
BYTE ' ', 0, '0', 0, 'x', 0, '%', 0, '0', 0, '8', 0, 'X', 0, ' ', 0
|
||||
BYTE 'S', 0, 't', 0, 'a', 0, 'c', 0, 'k', 0, ' ', 0, '=', 0, ' ', 0
|
||||
BYTE 'x', 0, '%', 0, '0', 0, '8', 0, 'X', 0, ' ', 0, ' ', 0, 'R', 0
|
||||
BYTE 'a', 0, 'l', 0, ' ', 0, '=', 0, ' ', 0, '0', 0, 'x', 0, '%', 0
|
||||
BYTE '8', 0, 'X', 0
|
||||
WORD 0
|
||||
|
||||
LogCall DATA_SUFFIX BYTE 9,9
|
||||
ASCII "Call:"
|
||||
BYTE 10,0
|
||||
LogCall DATA_SUFFIX WORD 9,9
|
||||
BYTE 'C', 0, 'a', 0, 'l', 0, 'l', 0, ':', 0
|
||||
WORD 10,0
|
||||
|
||||
LogBeforeCall DATA_SUFFIX BYTE 9,9,9
|
||||
ASCII "Before call "
|
||||
BYTE 0
|
||||
LogBeforeCall DATA_SUFFIX WORD 9,9,9
|
||||
BYTE 'B', 0, 'e', 0, 'f', 0, 'o', 0, 'r', 0, 'e', 0, ' ', 0, 'c', 0
|
||||
BYTE 'l', 0, 'l', 0, ' ', 0, ' ', 0, ' ', 0, ' ', 0, ' ', 0, ' ', 0
|
||||
BYTE ' ', 0
|
||||
WORD 0
|
||||
|
||||
LogNearCall DATA_SUFFIX BYTE 10,9,9,9
|
||||
ASCII "Near call "
|
||||
BYTE 0
|
||||
LogNearCall DATA_SUFFIX WORD 10,9,9,9
|
||||
BYTE 'N', 0, 'e', 0, 'a', 0, 'r', 0, ' ', 0, 'c', 0, 'a', 0, 'l', 0
|
||||
BYTE ' ', 0, ' ', 0, ' ', 0, ' ', 0, ' ', 0, ' ', 0, ' ', 0, ' ', 0
|
||||
BYTE ' ', 0
|
||||
WORD 0
|
||||
|
||||
LogBackFrom DATA_SUFFIX BYTE 9
|
||||
ASCII "Back from "
|
||||
BYTE 0
|
||||
LogBackFrom DATA_SUFFIX WORD 9
|
||||
BYTE 'B', 0, 'a', 0, 'c', 0, 'k', 0, ' ', 0, 'f', 0, 'r', 0, 'o', 0
|
||||
BYTE ' ', 0
|
||||
WORD 0
|
||||
|
||||
LogAfterCall DATA_SUFFIX BYTE 10,9,9,9
|
||||
ASCII "After call "
|
||||
BYTE 0
|
||||
LogAfterCall DATA_SUFFIX WORD 10,9,9,9
|
||||
BYTE 'A', 0, 'f', 0, 't', 0, 'e', 0, 'r', 0, ' ', 0, 'c', 0, 'a', 0
|
||||
BYTE 'l', 0, ' ', 0, ' ', 0, ' ', 0, ' ', 0, ' ', 0, ' ', 0, ' ', 0
|
||||
BYTE ' ', 0
|
||||
WORD 0
|
||||
|
||||
LogReturnAfter DATA_SUFFIX BYTE 10,9,9,9
|
||||
ASCII "Return 0x%08X 0x%08X"
|
||||
BYTE 0
|
||||
LogReturnAfter DATA_SUFFIX WORD 10,9,9,9
|
||||
BYTE 'R', 0, 'e', 0, 't', 0, 'u', 0, 'r', 0, 'n', 0, ' ', 0, ' ', 0
|
||||
BYTE ' ', 0, ' ', 0, ' ', 0, ' ', 0, ' ', 0, ' ', 0, ' ', 0, ' ', 0
|
||||
BYTE ' ', 0, ' ', 0, ' ', 0, '0', 0, 'x', 0, '%', 0, '0', 0, '8', 0
|
||||
BYTE ' ', 0, ' ', 0, ' ', 0, ' ', 0, '0', 0, 'x', 0, '%', 0, '0', 0
|
||||
BYTE 'X', 0
|
||||
WORD 0
|
||||
|
||||
LogCalled DATA_SUFFIX ASCII "Called callback from "
|
||||
BYTE 0
|
||||
LogCalled DATA_SUFFIX
|
||||
BYTE 'C', 0, 'a', 0, 'l', 0, 'l', 0, 'e', 0, 'd', 0, ' ', 0, 'c', 0
|
||||
BYTE 'l', 0, 'l', 0, 'b', 0, 'a', 0, 'c', 0, 'k', 0, ' ', 0, 'f', 0
|
||||
BYTE 'o', 0, 'm', 0, ' ', 0
|
||||
WORD 0
|
||||
|
||||
LogShortAfter DATA_SUFFIX BYTE 10,9,9,9
|
||||
ASCII "Short-After call "
|
||||
BYTE 0
|
||||
LogShortAfter DATA_SUFFIX WORD 10,9,9,9
|
||||
BYTE 'S', 0, 'h', 0, 'o', 0, 'r', 0, 't', 0, '-', 0, 'A', 0, 'f', 0
|
||||
BYTE 'e', 0, 'r', 0, ' ', 0, 'c', 0, 'a', 0, 'l', 0, 'l', 0, ' ', 0
|
||||
BYTE ' ', 0
|
||||
WORD 0
|
||||
|
||||
LogReturn DATA_SUFFIX BYTE 9,9
|
||||
ASCII "Return from callback:"
|
||||
BYTE 10,0
|
||||
LogReturn DATA_SUFFIX WORD 9,9
|
||||
BYTE 'R', 0, 'e', 0, 't', 0, 'u', 0, 'r', 0, 'n', 0, ' ', 0, 'f', 0
|
||||
BYTE 'o', 0, 'm', 0, ' ', 0, 'c', 0, 'a', 0, 'l', 0, 'l', 0, 'b', 0
|
||||
BYTE 'c', 0, 'k', 0, ':', 0
|
||||
WORD 10,0
|
||||
|
||||
LogBefore DATA_SUFFIX BYTE 9,9,9
|
||||
ASCII "Before call-back "
|
||||
BYTE 0
|
||||
LogBefore DATA_SUFFIX WORD 9,9,9
|
||||
BYTE 'B', 0, 'e', 0, 'f', 0, 'o', 0, 'r', 0, 'e', 0, ' ', 0, 'c', 0
|
||||
BYTE 'l', 0, 'l', 0, '-', 0, 'b', 0, 'a', 0, 'c', 0, 'k', 0, ' ', 0
|
||||
BYTE ' ', 0
|
||||
WORD 0
|
||||
|
||||
LogShortBefore DATA_SUFFIX BYTE 10,9,9,9
|
||||
ASCII "Sh-Before call-back"
|
||||
BYTE 0
|
||||
LogShortBefore DATA_SUFFIX WORD 10,9,9,9
|
||||
BYTE 'S', 0, 'h', 0, '-', 0, 'B', 0, 'e', 0, 'f', 0, 'o', 0, 'r', 0
|
||||
BYTE ' ', 0, 'c', 0, 'a', 0, 'l', 0, 'l', 0, '-', 0, 'b', 0, 'a', 0
|
||||
BYTE 'k', 0
|
||||
WORD 0
|
||||
LogLF DATA_SUFFIX WORD 10,0
|
||||
ELSE
|
||||
LogStack DATA_SUFFIX ASCII "%s ESP = 0x%08X Stack = 0x%08X Real = 0x%08X"
|
||||
BYTE 0
|
||||
|
||||
LogLF DATA_SUFFIX BYTE 10,0
|
||||
LogCall DATA_SUFFIX BYTE 9,9
|
||||
ASCII "Call:"
|
||||
BYTE 10,0
|
||||
|
||||
LogBeforeCall DATA_SUFFIX BYTE 9,9,9
|
||||
ASCII "Before call "
|
||||
BYTE 0
|
||||
|
||||
LogNearCall DATA_SUFFIX BYTE 10,9,9,9
|
||||
ASCII "Near call "
|
||||
BYTE 0
|
||||
|
||||
LogBackFrom DATA_SUFFIX BYTE 9
|
||||
ASCII "Back from "
|
||||
BYTE 0
|
||||
|
||||
LogAfterCall DATA_SUFFIX BYTE 10,9,9,9
|
||||
ASCII "After call "
|
||||
BYTE 0
|
||||
|
||||
LogReturnAfter DATA_SUFFIX BYTE 10,9,9,9
|
||||
ASCII "Return 0x%08X 0x%08X"
|
||||
BYTE 0
|
||||
|
||||
LogCalled DATA_SUFFIX ASCII "Called callback from "
|
||||
BYTE 0
|
||||
|
||||
LogShortAfter DATA_SUFFIX BYTE 10,9,9,9
|
||||
ASCII "Short-After call "
|
||||
BYTE 0
|
||||
|
||||
LogReturn DATA_SUFFIX BYTE 9,9
|
||||
ASCII "Return from callback:"
|
||||
BYTE 10,0
|
||||
|
||||
LogBefore DATA_SUFFIX BYTE 9,9,9
|
||||
ASCII "Before call-back "
|
||||
BYTE 0
|
||||
|
||||
LogShortBefore DATA_SUFFIX BYTE 10,9,9,9
|
||||
ASCII "Sh-Before call-back"
|
||||
BYTE 0
|
||||
|
||||
LogLF DATA_SUFFIX BYTE 10,0
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
SECTION_CODE
|
||||
|
@ -263,7 +350,11 @@ ELSE
|
|||
ENDIF
|
||||
;# Log buffer
|
||||
push edi
|
||||
IFDEF _UNICODE
|
||||
call dword ptr [__imp__wsprintfW]
|
||||
ELSE
|
||||
call dword ptr [__imp__wsprintfA]
|
||||
ENDIF
|
||||
;# If wsprintf succeeds then advance edi by number of bytes
|
||||
;# written to buffer
|
||||
cmp eax,0
|
||||
|
|
|
@ -151,18 +151,21 @@ void system_pushint(int value)
|
|||
system_pushstring(buffer);
|
||||
}
|
||||
|
||||
TCHAR *copymem(TCHAR *output, TCHAR *input, int size)
|
||||
void *copymem(void *output, void *input, size_t cbSize)
|
||||
{
|
||||
TCHAR *out = output;
|
||||
if ((input != NULL) && (output != NULL))
|
||||
while (size-- > 0) *(out++) = *(input++);
|
||||
return output;
|
||||
BYTE *out = (BYTE*) output;
|
||||
BYTE *in = (BYTE*) input;
|
||||
if ((input != NULL) && (output != NULL))
|
||||
{
|
||||
while (cbSize-- > 0) *(out++) = *(in++);
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
HANDLE GlobalCopy(HANDLE Old)
|
||||
{
|
||||
SIZE_T size = GlobalSize(Old);
|
||||
return copymem(GlobalAlloc(GPTR, size), Old, (int) size);
|
||||
size_t size = GlobalSize(Old);
|
||||
return copymem(GlobalAlloc(GPTR, size), Old, size);
|
||||
}
|
||||
|
||||
UINT_PTR NSISCallback(enum NSPIM msg)
|
||||
|
|
|
@ -27,7 +27,7 @@ extern int popint64(); // -1 -> stack empty
|
|||
extern void system_pushint(int value);
|
||||
|
||||
extern HANDLE GlobalCopy(HANDLE Old);
|
||||
extern TCHAR *copymem(TCHAR *output, TCHAR *input, int size);
|
||||
extern void *copymem(void *output, void *input, size_t cbSize);
|
||||
|
||||
extern UINT_PTR NSISCallback(enum NSPIM);
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ CallbackThunk* CallbackThunkListHead;
|
|||
HINSTANCE g_hInstance;
|
||||
|
||||
// Return to callback caller with stack restore
|
||||
TCHAR retexpr[4];
|
||||
char retexpr[4];
|
||||
HANDLE retaddr;
|
||||
|
||||
TCHAR *GetResultStr(SystemProc *proc)
|
||||
|
@ -61,7 +61,7 @@ TCHAR *GetResultStr(SystemProc *proc)
|
|||
#ifdef SYSTEM_LOG_DEBUG
|
||||
|
||||
// System log debugging turned on
|
||||
#define SYSTEM_LOG_ADD(a) { register int _len = lstrlen(syslogbuf); lstrcpyn(syslogbuf + _len, a, sizeof(syslogbuf) - _len); }
|
||||
#define SYSTEM_LOG_ADD(a) { register int _len = lstrlen(syslogbuf); lstrcpyn(syslogbuf + _len, a, _countof(syslogbuf) - _len); }
|
||||
#define SYSTEM_LOG_POST { SYSTEM_LOG_ADD(_T("\n")); WriteToLog(syslogbuf); *syslogbuf = 0; }
|
||||
|
||||
HANDLE logfile = NULL;
|
||||
|
@ -82,11 +82,18 @@ void WriteToLog(TCHAR *buffer)
|
|||
wsprintf(timebuffer, _T("%04d %04d.%03d "), (++logop)%10000, (GetTickCount() / 1000) % 10000,
|
||||
GetTickCount() % 1000);
|
||||
|
||||
#ifdef _UNICODE
|
||||
#ifdef _RPTW0
|
||||
_RPTW0(_CRT_WARN, timebuffer);
|
||||
_RPTW0(_CRT_WARN, buffer);
|
||||
#endif
|
||||
#else
|
||||
_RPT0(_CRT_WARN, timebuffer);
|
||||
_RPT0(_CRT_WARN, buffer);
|
||||
#endif
|
||||
|
||||
WriteFile(logfile, timebuffer, lstrlen(timebuffer), &written, NULL);
|
||||
WriteFile(logfile, buffer, lstrlen(buffer), &written, NULL);
|
||||
WriteFile(logfile, timebuffer, lstrlen(timebuffer)*sizeof(TCHAR), &written, NULL);
|
||||
WriteFile(logfile, buffer, lstrlen(buffer)*sizeof(TCHAR), &written, NULL);
|
||||
// FlushFileBuffers(logfile);
|
||||
}
|
||||
|
||||
|
@ -108,10 +115,17 @@ PLUGINFUNCTION(Debug)
|
|||
SetFilePointer(logfile, 0, 0, FILE_END);
|
||||
|
||||
logop = 0;
|
||||
#ifdef _UNICODE
|
||||
{ // write Unicode Byte-Order Mark
|
||||
DWORD written;
|
||||
unsigned short bom = 0xfeff;
|
||||
WriteFile(logfile, &bom, 2, &written, NULL);
|
||||
}
|
||||
#endif
|
||||
GetLocalTime(&t);
|
||||
GetTimeFormat(LOCALE_SYSTEM_DEFAULT, LOCALE_NOUSEROVERRIDE, &t, NULL, buftime, 1024);
|
||||
GetDateFormat(LOCALE_SYSTEM_DEFAULT, LOCALE_NOUSEROVERRIDE, &t, NULL, bufdate, 1024);
|
||||
wsprintf(buffer, _T("System, %s %s [build "__TIME__" ")__DATE___T("]\n"), buftime, bufdate);
|
||||
wsprintf(buffer, _T("System, %s %s [build ") __TTIME__ _T(" ") __TDATE__ _T("]\n"), buftime, bufdate);
|
||||
WriteToLog(buffer);
|
||||
} else ;
|
||||
else
|
||||
|
@ -543,9 +557,9 @@ SystemProc *PrepareProc(BOOL NeedForCall)
|
|||
case _T('l'):
|
||||
case _T('L'): temp2 = PAT_LONG; break;
|
||||
case _T('m'):
|
||||
case _T('M'):
|
||||
case _T('M'): temp2 = PAT_STRING; break;
|
||||
case _T('t'):
|
||||
case _T('T'): temp2 = PAT_STRING; break;
|
||||
case _T('T'): temp2 = PAT_STRING; break; // will be PAT_WSTRING for Unicode NSIS
|
||||
case _T('g'):
|
||||
case _T('G'): temp2 = PAT_GUID; break;
|
||||
case _T('w'):
|
||||
|
@ -705,7 +719,7 @@ SystemProc *PrepareProc(BOOL NeedForCall)
|
|||
// Use direct system proc address
|
||||
int addr;
|
||||
|
||||
proc->Dll = (HANDLE) INT_TO_POINTER(myatoi64(proc->DllName));
|
||||
proc->Dll = (HMODULE) INT_TO_POINTER(myatoi64(proc->DllName));
|
||||
|
||||
if (proc->Dll == 0)
|
||||
{
|
||||
|
@ -749,8 +763,13 @@ SystemProc *PrepareProc(BOOL NeedForCall)
|
|||
// Get proc address
|
||||
if ((proc->Proc = GetProcAddress(proc->Dll, proc->ProcName)) == NULL)
|
||||
{
|
||||
#ifdef _UNICODE
|
||||
// automatic W discover
|
||||
lstrcat(proc->ProcName, _T("W"));
|
||||
#else
|
||||
// automatic A discover
|
||||
lstrcat(proc->ProcName, _T("A"));
|
||||
lstrcat(proc->ProcName, "A");
|
||||
#endif
|
||||
if ((proc->Proc = GetProcAddress(proc->Dll, proc->ProcName)) == NULL)
|
||||
proc->ProcResult = PR_ERROR;
|
||||
}
|
||||
|
@ -826,7 +845,7 @@ void ParamsIn(SystemProc *proc)
|
|||
break;
|
||||
case PAT_WSTRING:
|
||||
case PAT_GUID:
|
||||
wstr = (LPWSTR) (par->allocatedBlock = GlobalAlloc(GPTR, g_stringsize*2));
|
||||
wstr = (LPWSTR) (par->allocatedBlock = GlobalAlloc(GPTR, g_stringsize*sizeof(WCHAR)));
|
||||
MultiByteToWideChar(CP_ACP, 0, realbuf, g_stringsize, wstr, g_stringsize);
|
||||
if (par->Type == PAT_GUID)
|
||||
{
|
||||
|
@ -900,7 +919,7 @@ void ParamsOut(SystemProc *proc)
|
|||
break;
|
||||
case PAT_STRING:
|
||||
{
|
||||
unsigned num = lstrlen(*((TCHAR**) place));
|
||||
unsigned int num = lstrlen(*((TCHAR**) place));
|
||||
if (num >= g_stringsize) num = g_stringsize-1;
|
||||
lstrcpyn(realbuf,*((TCHAR**) place), num+1);
|
||||
realbuf[num] = 0;
|
||||
|
@ -908,7 +927,7 @@ void ParamsOut(SystemProc *proc)
|
|||
break;
|
||||
case PAT_GUID:
|
||||
wstr = (LPWSTR) GlobalAlloc(GPTR, g_stringsize*2);
|
||||
StringFromGUID2(*((REFGUID*)place), wstr, g_stringsize*2);
|
||||
StringFromGUID2(*((REFGUID*)place), wstr, g_stringsize);
|
||||
WideCharToMultiByte(CP_ACP, 0, wstr, g_stringsize, realbuf, g_stringsize, NULL, NULL);
|
||||
GlobalFree((HGLOBAL)wstr);
|
||||
break;
|
||||
|
@ -942,7 +961,6 @@ HANDLE CreateCallback(SystemProc *cbproc)
|
|||
{
|
||||
char *mem;
|
||||
|
||||
|
||||
if (cbproc->Proc == NULL)
|
||||
{
|
||||
// Set callback index
|
||||
|
@ -975,7 +993,7 @@ void CallStruct(SystemProc *proc)
|
|||
{
|
||||
BOOL ssflag;
|
||||
int i, structsize = 0, size = 0;
|
||||
TCHAR *st, *ptr;
|
||||
char *st, *ptr;
|
||||
|
||||
SYSTEM_LOG_ADD(_T("\t\tStruct..."));
|
||||
|
||||
|
@ -994,7 +1012,7 @@ void CallStruct(SystemProc *proc)
|
|||
if (structsize == 0) structsize = (int) GlobalSize((HANDLE) proc->Proc);
|
||||
|
||||
// Pointer to current data
|
||||
st = (TCHAR*) proc->Proc;
|
||||
st = (char*) proc->Proc;
|
||||
|
||||
for (i = 1; i <= proc->ParamCount; i++)
|
||||
{
|
||||
|
@ -1005,7 +1023,7 @@ void CallStruct(SystemProc *proc)
|
|||
{
|
||||
// Normal
|
||||
size = proc->Params[i].Size*4;
|
||||
ptr = (TCHAR*) &(proc->Params[i].Value);
|
||||
ptr = (char*) &(proc->Params[i].Value);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1026,13 +1044,14 @@ void CallStruct(SystemProc *proc)
|
|||
// clear unused value bits
|
||||
proc->Params[i].Value &= intmask[((size >= 0) && (size < 4))?(size):(0)];
|
||||
// pointer
|
||||
ptr = (TCHAR*) &(proc->Params[i].Value);
|
||||
ptr = (char*) &(proc->Params[i].Value);
|
||||
break;
|
||||
|
||||
case PAT_STRING:
|
||||
case PAT_GUID:
|
||||
case PAT_WSTRING:
|
||||
ptr = (TCHAR*) proc->Params[i].Value; break;
|
||||
// Jim Park: Pointer for memcopy, so keep as char*
|
||||
ptr = (char*) proc->Params[i].Value; break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1071,7 +1090,7 @@ the same means as used for the _RPT0 macro. This leads to an endless recursion.
|
|||
|
||||
BOOL WINAPI DllMain(HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved)
|
||||
{
|
||||
g_hInstance=hInst;
|
||||
g_hInstance=(HINSTANCE)hInst;
|
||||
|
||||
if (ul_reason_for_call == DLL_PROCESS_ATTACH)
|
||||
{
|
||||
|
@ -1084,7 +1103,6 @@ BOOL WINAPI DllMain(HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved)
|
|||
LastError = 0;
|
||||
LastProc = NULL;
|
||||
CallbackIndex = 0;
|
||||
retexpr[0] = (char) 0xC2;
|
||||
CallbackThunkListHead = NULL;
|
||||
retexpr[0] = (char) 0xC2;
|
||||
retexpr[2] = 0x00;
|
||||
|
@ -1181,7 +1199,6 @@ unsigned int GetSizeOfProcParam(void)
|
|||
return (sizeof(ProcParameter));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Returns offset for element Size of ProcParameter structure
|
||||
*/
|
||||
|
|
|
@ -87,11 +87,10 @@ struct tag_SystemProc
|
|||
int ProcResult;
|
||||
TCHAR DllName[1024];
|
||||
TCHAR ProcName[1024];
|
||||
HANDLE Dll;
|
||||
HANDLE Proc;
|
||||
HMODULE Dll;
|
||||
HANDLE Proc;
|
||||
int Options;
|
||||
int ParamCount;
|
||||
// if you'll change ProcParameter or SystemProc structure - update SYSTEM_ZERO_PARAM_VALUE_OFFSET value
|
||||
ProcParameter Params[100]; // I hope nobody will use more than 100 params
|
||||
|
||||
// Callback specific
|
||||
|
|
|
@ -21,16 +21,18 @@ void __declspec(dllexport) GetName(HWND hwndParent, int string_size,
|
|||
}
|
||||
}
|
||||
|
||||
TCHAR* GetAccountTypeHelper(BOOL CheckTokenForGroupDeny)
|
||||
{
|
||||
TCHAR *group = NULL;
|
||||
HANDLE hToken = NULL;
|
||||
struct group
|
||||
{
|
||||
DWORD auth_id;
|
||||
TCHAR *name;
|
||||
};
|
||||
|
||||
// Jim Park: Moved this array from inside the func to the outside. While it
|
||||
// was probably "safe" for this array to be inside because the strings are in
|
||||
// the .data section and so the pointer to the string returned is probably
|
||||
// safe, this is a bad practice to have as that's making an assumption on what
|
||||
// the compiler will do. Besides which, other types of data returned would
|
||||
// actually fail as the local vars would be popped off the stack.
|
||||
struct group groups[] =
|
||||
{
|
||||
{DOMAIN_ALIAS_RID_USERS, _T("User")},
|
||||
|
@ -40,6 +42,12 @@ struct group groups[] =
|
|||
{DOMAIN_ALIAS_RID_ADMINS, _T("Admin")}
|
||||
};
|
||||
|
||||
TCHAR* GetAccountTypeHelper(BOOL CheckTokenForGroupDeny)
|
||||
{
|
||||
TCHAR *group = NULL;
|
||||
HANDLE hToken = NULL;
|
||||
|
||||
|
||||
if (GetVersion() & 0x80000000) // Not NT
|
||||
{
|
||||
return _T("Admin");
|
||||
|
|
|
@ -202,7 +202,7 @@ int _tmain( int argc, TCHAR * argv[] ) {
|
|||
} catch(const TCHAR* s) {
|
||||
terr << _T("ERROR: ") << s << _T("\n");
|
||||
patch.close();
|
||||
unlink(tempFileName.c_str());
|
||||
_tunlink(tempFileName.c_str());
|
||||
return 3;
|
||||
}
|
||||
|
||||
|
@ -299,6 +299,6 @@ int _tmain( int argc, TCHAR * argv[] ) {
|
|||
terr << _T("WARNING: source and target file have equal CRCs!");
|
||||
delete sourceCRC;
|
||||
delete targetCRC;
|
||||
unlink(tempFileName.c_str());
|
||||
_tunlink(tempFileName.c_str());
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -156,6 +156,10 @@ void ExecScript(int log) {
|
|||
IMAGE_FILE_LINE_NUMS_STRIPPED | IMAGE_FILE_EXECUTABLE_IMAGE;
|
||||
// Windows character-mode user interface (CUI) subsystem.
|
||||
pNTHeaders->OptionalHeader.Subsystem = IMAGE_SUBSYSTEM_WINDOWS_CUI;
|
||||
// g_hInst is assumed to be the very base of the DLL in memory.
|
||||
// WinMain will have the address of the WinMain function in memory.
|
||||
// Getting the difference gets you the relative location of the
|
||||
// WinMain function.
|
||||
pNTHeaders->OptionalHeader.AddressOfEntryPoint = (DWORD)_tWinMain - (DWORD)g_hInst;
|
||||
UnmapViewOfFile(pMapView);
|
||||
}
|
||||
|
@ -278,10 +282,10 @@ params:
|
|||
szBuf[dwRead] = 0;
|
||||
if (log) {
|
||||
TCHAR *p, *p2;
|
||||
SIZE_T iReqLen = lstrlen(szBuf) + lstrlen(szUnusedBuf);
|
||||
if (GlobalSize(hUnusedBuf) < iReqLen && (iReqLen < g_stringsize || !(log & 2))) {
|
||||
SIZE_T iReqLen = lstrlen(szBuf) + lstrlen(szUnusedBuf) + 1;
|
||||
if (GlobalSize(hUnusedBuf) < iReqLen*sizeof(TCHAR) && (iReqLen < g_stringsize || !(log & 2))) {
|
||||
GlobalUnlock(hUnusedBuf);
|
||||
hUnusedBuf = GlobalReAlloc(hUnusedBuf, iReqLen+sizeof(szBuf), GHND);
|
||||
hUnusedBuf = GlobalReAlloc(hUnusedBuf, iReqLen*sizeof(TCHAR)+sizeof(szBuf), GHND);
|
||||
if (!hUnusedBuf) {
|
||||
lstrcpy(szRet, _T("error"));
|
||||
break;
|
||||
|
@ -289,14 +293,16 @@ params:
|
|||
szUnusedBuf = (TCHAR *)GlobalLock(hUnusedBuf);
|
||||
}
|
||||
p = szUnusedBuf; // get the old left overs
|
||||
if (iReqLen < g_stringsize || !(log & 2)) lstrcat(p, szBuf);
|
||||
if (iReqLen < g_stringsize || !(log & 2)) {
|
||||
lstrcat(p, szBuf);
|
||||
}
|
||||
else {
|
||||
lstrcpyn(p + lstrlen(p), szBuf, g_stringsize - lstrlen(p));
|
||||
}
|
||||
|
||||
if (!(log & 2)) {
|
||||
while ((p = my_strstr(p, _T("\t")))) {
|
||||
if ((int)(p - szUnusedBuf) > (int)(GlobalSize(hUnusedBuf) - TAB_REPLACE_SIZE - 1))
|
||||
if ((int)(p - szUnusedBuf) > (int)(GlobalSize(hUnusedBuf)/sizeof(TCHAR) - TAB_REPLACE_SIZE - 1))
|
||||
{
|
||||
*p++ = _T(' ');
|
||||
}
|
||||
|
@ -381,7 +387,9 @@ void LogMessage(const TCHAR *pStr, BOOL bOEM) {
|
|||
int nItemCount;
|
||||
if (!g_hwndList) return;
|
||||
//if (!lstrlen(pStr)) return;
|
||||
if (bOEM == TRUE) OemToCharBuff(pStr, (TCHAR *)pStr, lstrlen(pStr));
|
||||
#ifndef _UNICODE
|
||||
if (bOEM == TRUE) OemToCharBuff(pStr, (char*)pStr, lstrlen(pStr));
|
||||
#endif
|
||||
nItemCount=SendMessage(g_hwndList, LVM_GETITEMCOUNT, 0, 0);
|
||||
item.mask=LVIF_TEXT;
|
||||
item.pszText=(TCHAR *)pStr;
|
||||
|
|
|
@ -71,7 +71,6 @@ TCHAR *g_options=_T("");//_T("/V3");
|
|||
|
||||
static BOOL CALLBACK DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
|
||||
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,
|
||||
LPTSTR lpszCmdParam, int nCmdShow)
|
||||
{
|
||||
|
@ -752,7 +751,7 @@ BOOL CALLBACK DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
ShowWindow(GetDlgItem(hwndDlg,IDC_TEST),SW_HIDE);
|
||||
ShowWindow(GetDlgItem(hwndDlg,IDC_OUTPUTTEXT),SW_HIDE);
|
||||
{
|
||||
for (size_t x = 0; x < sizeof(ids)/sizeof(ids[0]); x ++)
|
||||
for (size_t x = 0; x < _countof(ids); x ++)
|
||||
ShowWindow(GetDlgItem(hwndDlg,ids[x]),SW_SHOWNA);
|
||||
SetDlgItemText(hwndDlg,IDOK,_T("&Generate"));
|
||||
EnableWindow(GetDlgItem(hwndDlg,IDOK),1);
|
||||
|
@ -783,7 +782,7 @@ BOOL CALLBACK DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
g_compressor_solid = 0;
|
||||
g_mui=!IsDlgButtonChecked(hwndDlg,IDC_CLASSICUI);
|
||||
SetDlgItemText(g_hwnd, IDC_OUTPUTTEXT, _T(""));
|
||||
for (size_t x = 0; x < sizeof(ids)/sizeof(ids[0]); x ++)
|
||||
for (size_t x = 0; x < _countof(ids); x ++)
|
||||
ShowWindow(GetDlgItem(hwndDlg,ids[x]),SW_HIDE);
|
||||
ShowWindow(GetDlgItem(hwndDlg,IDC_OUTPUTTEXT),SW_SHOWNA);
|
||||
SetDlgItemText(hwndDlg,IDOK,_T("&Close"));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue