0.5KB saving

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@765 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
kichik 2002-08-28 10:08:38 +00:00
parent 4f1efc6c40
commit c8e693e95b
3 changed files with 228 additions and 211 deletions

View file

@ -127,16 +127,23 @@ int NSISCALL ExecuteCodeSegment(entry *entries, int pos, HWND hwndProgress)
static int NSISCALL ExecuteEntry(entry *entries, int pos)
{
static char buf[NSIS_MAX_STRLEN],buf2[NSIS_MAX_STRLEN],buf3[NSIS_MAX_STRLEN],buf4[NSIS_MAX_STRLEN];
// changed by Amir Szekely 28 August 2002
// shaves off 0.5KB
int *parms=entries[pos].offsets;
int parm0=parms[0];
int parm1=parms[1];
int parm2=parms[2];
int parm3=parms[3];
int parm4=parms[4];
int which=entries[pos].which;
switch (which)
{
case EW_NOP:
log_printf2("Jump: %d",parms[0]);
return parms[0];
log_printf2("Jump: %d",parm0);
return parm0;
case EW_ABORT:
{
process_string_fromtab(buf,parms[0]);
process_string_fromtab(buf,parm0);
log_printf2("Aborting: \"%s\"",buf);
update_status_text("",buf);
}
@ -147,29 +154,29 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
return EXEC_ERROR;
case EW_CALL:
{
int v=resolveaddr(parms[0])-1; // address is -1, since we encode it as +1
int v=resolveaddr(parm0)-1; // address is -1, since we encode it as +1
log_printf2("Call: %d",v);
return ExecuteCodeSegment(entries,v,NULL);
}
case EW_UPDATETEXT:
if (parms[1]) ui_st_updateflag=parms[1];
if (parm1) ui_st_updateflag=parm1;
else
{
process_string_fromtab(buf4,parms[0]);
process_string_fromtab(buf4,parm0);
log_printf2("detailprint: %s",buf4);
update_status_text(buf4,"");
}
return 0;
case EW_SLEEP:
{
int x=process_string_fromtab_toint(parms[0]);
int x=process_string_fromtab_toint(parm0);
if (x < 1) x=1;
log_printf2("Sleep(%d)",x);
Sleep(x);
}
return 0;
case EW_SETSFCONTEXT:
g_all_user_var_flag=parms[0];
g_all_user_var_flag=parm0;
return 0;
case EW_HIDEWINDOW:
log_printf("HideWindow");
@ -181,25 +188,25 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
SetForegroundWindow(g_hwnd);
return 0;
case EW_SETWINDOWCLOSE:
g_autoclose=parms[0];
g_autoclose=parm0;
return 0;
case EW_CHDETAILSVIEW:
if (insthwndbutton) ShowWindow(insthwndbutton,parms[1]);
if (insthwnd) ShowWindow(insthwnd,parms[0]);
if (insthwndbutton) ShowWindow(insthwndbutton,parm1);
if (insthwnd) ShowWindow(insthwnd,parm0);
return 0;
case EW_SETFILEATTRIBUTES:
process_string_fromtab(buf,parms[0]);
log_printf3("SetFileAttributes: \"%s\":%08X",buf,parms[1]);
if (!SetFileAttributes(buf,parms[1]))
process_string_fromtab(buf,parm0);
log_printf3("SetFileAttributes: \"%s\":%08X",buf,parm1);
if (!SetFileAttributes(buf,parm1))
{
exec_errorflag++;
log_printf("SetFileAttributes failed.");
}
return 0;
case EW_CREATEDIR:
process_string_fromtab(buf2,parms[0]);
log_printf3("CreateDirectory: \"%s\" (%d)",buf2,parms[1]);
if (parms[1])
process_string_fromtab(buf2,parm0);
log_printf3("CreateDirectory: \"%s\" (%d)",buf2,parm1);
if (parm1)
{
update_status_text_from_lang(LANGID_OUTPUTDIR,buf2);
mystrcpy(state_output_directory,buf2);
@ -208,29 +215,29 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
recursive_create_directory(buf2);
return 0;
case EW_IFFILEEXISTS:
process_string_fromtab(buf,parms[0]);
process_string_fromtab(buf,parm0);
if (file_exists(buf))
{
log_printf3("IfFileExists: file \"%s\" exists, jumping %d",buf,parms[1]);
return parms[1];
log_printf3("IfFileExists: file \"%s\" exists, jumping %d",buf,parm1);
return parm1;
}
log_printf3("IfFileExists: file \"%s\" does not exist, jumping %d",buf,parms[2]);
return parms[2];
log_printf3("IfFileExists: file \"%s\" does not exist, jumping %d",buf,parm2);
return parm2;
case EW_IFERRORS:
{
int f=exec_errorflag;
exec_errorflag=parms[2];
exec_errorflag=parm2;
if (f)
{
return parms[0];
return parm0;
}
}
return parms[1];
return parm1;
#ifdef NSIS_SUPPORT_RENAME
case EW_RENAME:
{
process_string_fromtab(buf,parms[0]);
process_string_fromtab(buf2,parms[1]);
process_string_fromtab(buf,parm0);
process_string_fromtab(buf2,parm1);
mystrcpy(buf4,buf);
if (mystrlen(buf)+mystrlen(buf2) < NSIS_MAX_STRLEN-3)
{
@ -245,7 +252,7 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
else
{
#ifdef NSIS_SUPPORT_MOVEONREBOOT
if (parms[2] && file_exists(buf))
if (parm2 && file_exists(buf))
{
#ifdef NSIS_SUPPORT_REBOOT
exec_rebootflag++;
@ -267,9 +274,9 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
#ifdef NSIS_SUPPORT_FNUTIL
case EW_GETFULLPATHNAME:
{
char *p=g_usrvars[parms[0]];
char *p=g_usrvars[parm0];
char *fp;
process_string_fromtab(buf,parms[1]);
process_string_fromtab(buf,parm1);
if (!GetFullPathName(buf,NSIS_MAX_STRLEN,p,&fp))
{
exec_errorflag++;
@ -288,14 +295,14 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
*p=0;
}
}
if (!parms[2]) GetShortPathName(p,p,NSIS_MAX_STRLEN);
if (!parm2) GetShortPathName(p,p,NSIS_MAX_STRLEN);
}
return 0;
case EW_SEARCHPATH:
{
char *fp;
char *p=g_usrvars[parms[0]];
process_string_fromtab(buf,parms[1]);
char *p=g_usrvars[parm0];
process_string_fromtab(buf,parm1);
if (!SearchPath(NULL,buf,NULL,NSIS_MAX_STRLEN,p,&fp))
{
p[0]=0;
@ -305,7 +312,7 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
return 0;
case EW_GETTEMPFILENAME:
{
char *textout=g_usrvars[parms[0]];
char *textout=g_usrvars[parm0];
if (!GetTempPath(NSIS_MAX_STRLEN,buf) || !GetTempFileName(buf,"nst",0,textout))
{
*textout=0;
@ -319,10 +326,10 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
{
HANDLE hOut;
int ret;
int overwriteflag=parms[0];
int overwriteflag=parm0;
addtrailingslash(mystrcpy(buf,state_output_directory));
process_string_fromtab(buf4,parms[1]);
process_string_fromtab(buf4,parm1);
log_printf3("File: overwriteflag=%d, name=\"%s\"",overwriteflag,buf4);
if (validpathspec(buf4))
{
@ -379,11 +386,11 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
}
update_status_text_from_lang(LANGID_EXTRACT,buf4);
ret=GetCompressedDataFromDataBlock(parms[2],hOut);
ret=GetCompressedDataFromDataBlock(parm2,hOut);
log_printf3("File: wrote %d to \"%s\"",ret,buf);
if (parms[3] != 0xffffffff || parms[4] != 0xffffffff)
if (parm3 != 0xffffffff || parm4 != 0xffffffff)
SetFileTime(hOut,(FILETIME*)(parms+3),NULL,(FILETIME*)(parms+3));
CloseHandle(hOut);
@ -410,7 +417,7 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
{
HANDLE h;
WIN32_FIND_DATA fd;
process_string_fromtab(buf2,parms[0]);
process_string_fromtab(buf2,parm0);
mystrcpy(buf,buf2);
log_printf2("Delete: \"%s\"",buf);
trimslashtoend(buf);
@ -432,7 +439,7 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
else
{
#ifdef NSIS_SUPPORT_MOVEONREBOOT
if (parms[1])
if (parm1)
{
#ifdef NSIS_SUPPORT_REBOOT
exec_rebootflag++;
@ -458,18 +465,18 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
case EW_MESSAGEBOX: // MessageBox
{
int v;
process_string_fromtab(buf4,parms[1]);
log_printf3("MessageBox: %d,\"%s\"",parms[0],buf4);
v=my_MessageBox(buf4,parms[0]);
process_string_fromtab(buf4,parm1);
log_printf3("MessageBox: %d,\"%s\"",parm0,buf4);
v=my_MessageBox(buf4,parm0);
if (v)
{
if (v==(parms[2]&0xffff))
if (v==(parm2&0xffff))
{
return parms[3];
return parm3;
}
if (v==(parms[2]>>16))
if (v==(parm2>>16))
{
return parms[4];
return parm4;
}
}
else exec_errorflag++;
@ -479,30 +486,30 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
#ifdef NSIS_SUPPORT_RMDIR
case EW_RMDIR:
{
process_string_fromtab(buf,parms[0]);
process_string_fromtab(buf,parm0);
log_printf2("RMDir: \"%s\"",buf);
if (lastchar(buf)=='\\') trimslashtoend(buf);
doRMDir(buf,parms[1]);
doRMDir(buf,parm1);
if (file_exists(buf)) exec_errorflag++;
}
return 0;
#endif//NSIS_SUPPORT_RMDIR
#ifdef NSIS_SUPPORT_STROPTS
case EW_STRLEN:
process_string_fromtab(buf,parms[1]);
myitoa(g_usrvars[parms[0]],mystrlen(buf));
process_string_fromtab(buf,parm1);
myitoa(g_usrvars[parm0],mystrlen(buf));
return 0;
case EW_ASSIGNVAR:
{
int newlen=process_string_fromtab_toint(parms[2]);
int start=process_string_fromtab_toint(parms[3]);
int newlen=process_string_fromtab_toint(parm2);
int start=process_string_fromtab_toint(parm3);
int l;
char *p=g_usrvars[parms[0]];
process_string_fromtab(buf,parms[1]);
char *p=g_usrvars[parm0];
process_string_fromtab(buf,parm1);
*p=0;
if (parms[2] < 0 || newlen)
if (parm2 < 0 || newlen)
{
l=mystrlen(buf);
@ -522,17 +529,17 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
}
return 0;
case EW_STRCMP:
process_string_fromtab(buf3,parms[0]);
process_string_fromtab(buf4,parms[1]);
if (!lstrcmpi(buf3,buf4)) return parms[2];
return parms[3];
process_string_fromtab(buf3,parm0);
process_string_fromtab(buf4,parm1);
if (!lstrcmpi(buf3,buf4)) return parm2;
return parm3;
#endif//NSIS_SUPPORT_STROPTS
#ifdef NSIS_SUPPORT_ENVIRONMENT
case EW_READENVSTR:
{
char *p=g_usrvars[parms[0]];
process_string_fromtab(buf,parms[1]);
if (parms[2])
char *p=g_usrvars[parm0];
process_string_fromtab(buf,parm1);
if (parm2)
{
if (!GetEnvironmentVariable(buf,p,NSIS_MAX_STRLEN))
{
@ -552,28 +559,28 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
case EW_INTCMP:
{
int v,v2;
v=process_string_fromtab_toint(parms[0]);
v2=process_string_fromtab_toint(parms[1]);
if (v<v2) return parms[3];
if (v>v2) return parms[4];
v=process_string_fromtab_toint(parm0);
v2=process_string_fromtab_toint(parm1);
if (v<v2) return parm3;
if (v>v2) return parm4;
}
return parms[2];
return parm2;
case EW_INTCMPU:
{
unsigned int v,v2;
v=(unsigned int)process_string_fromtab_toint(parms[0]);
v2=(unsigned int)process_string_fromtab_toint(parms[1]);
if (v<v2) return parms[3];
if (v>v2) return parms[4];
v=(unsigned int)process_string_fromtab_toint(parm0);
v2=(unsigned int)process_string_fromtab_toint(parm1);
if (v<v2) return parm3;
if (v>v2) return parm4;
}
return parms[2];
return parm2;
case EW_INTOP:
{
int v,v2;
char *p=g_usrvars[parms[0]];
v=process_string_fromtab_toint(parms[1]);
v2=process_string_fromtab_toint(parms[2]);
switch (parms[3])
char *p=g_usrvars[parm0];
v=process_string_fromtab_toint(parm1);
v2=process_string_fromtab_toint(parm2);
switch (parm3)
{
case 0: v+=v2; break;
case 1: v-=v2; break;
@ -592,30 +599,30 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
}
return 0;
case EW_INTFMT:
process_string_fromtab(buf,parms[1]);
wsprintf(g_usrvars[parms[0]],
process_string_fromtab(buf,parm1);
wsprintf(g_usrvars[parm0],
buf,
process_string_fromtab_toint(parms[2]));
process_string_fromtab_toint(parm2));
return 0;
#endif//NSIS_SUPPORT_INTOPTS
#ifdef NSIS_SUPPORT_STACK
case EW_PUSHPOP:
{
stack_t *s=g_st;
int cnt=parms[2];
int cnt=parm2;
if (cnt) //Exch contributed by Fritz Elfert
{
while (cnt--&&s) s=s->next;
if (!s)
{
log_printf2("Exch: stack < %d elements",parms[2]);
log_printf2("Exch: stack < %d elements",parm2);
break;
}
mystrcpy(buf,s->text);
mystrcpy(s->text,g_st->text);
mystrcpy(g_st->text,buf);
}
else if (parms[1])
else if (parm1)
{
if (!s)
{
@ -623,14 +630,14 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
exec_errorflag++;
return 0;
}
mystrcpy(g_usrvars[parms[0]],s->text);
mystrcpy(g_usrvars[parm0],s->text);
g_st=s->next;
GlobalFree((HGLOBAL)s);
}
else
{
s=(stack_t*)GlobalAlloc(GPTR,sizeof(stack_t));
process_string_fromtab(s->text,parms[0]);
process_string_fromtab(s->text,parm0);
s->next=g_st;
g_st=s;
}
@ -642,50 +649,50 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
case EW_SENDMESSAGE:
{
int v;
int b3=process_string_fromtab_toint(parms[3]);
int b4=process_string_fromtab_toint(parms[4]);
int b3=process_string_fromtab_toint(parm3);
int b4=process_string_fromtab_toint(parm4);
process_string_fromtab(buf,parms[1]);
process_string_fromtab(buf2,parms[2]);
process_string_fromtab(buf,parm1);
process_string_fromtab(buf2,parm2);
if (myatoi(buf2)==WM_SETTEXT) {
process_string_fromtab(buf3,parms[4]);
process_string_fromtab(buf3,parm4);
b4=(int)buf3;
}
if (which == EW_SENDMESSAGE) v=SendMessage((HWND)myatoi(buf),myatoi(buf2),b3,b4);
else v=(int)FindWindowEx((HWND)b3,(HWND)b4,buf[0]?buf:NULL,buf2[0]?buf2:NULL);
if (parms[0]>=0)
myitoa(g_usrvars[parms[0]],v);
if (parm0>=0)
myitoa(g_usrvars[parm0],v);
}
return 0;
case EW_ISWINDOW:
if (IsWindow((HWND)process_string_fromtab_toint(parms[0]))) return parms[1];
return parms[2];
if (IsWindow((HWND)process_string_fromtab_toint(parm0))) return parm1;
return parm2;
case EW_GETDLGITEM:
myitoa(
g_usrvars[parms[0]],
g_usrvars[parm0],
(int)GetDlgItem(
(HWND)process_string_fromtab_toint(parms[1]),
process_string_fromtab_toint(parms[2])
(HWND)process_string_fromtab_toint(parm1),
process_string_fromtab_toint(parm2)
)
);
return 0;
case EW_SETWINDOWLONG:
SetWindowLong((HWND)process_string_fromtab_toint(parms[0]),parms[1],process_string_fromtab_toint(parms[2]));
SetWindowLong((HWND)process_string_fromtab_toint(parm0),parm1,process_string_fromtab_toint(parm2));
return 0;
#endif
#ifdef NSIS_SUPPORT_SHELLEXECUTE
case EW_SHELLEXEC: // this uses improvements of Andras Varga
{
int x;
process_string_fromtab(buf,parms[0]);
process_string_fromtab(buf2,parms[1]);
process_string_fromtab(buf3,parms[2]);
process_string_fromtab(buf,parm0);
process_string_fromtab(buf2,parm1);
process_string_fromtab(buf3,parm2);
wsprintf(buf4,"%s %s",buf,buf2);
update_status_text_from_lang(LANGID_EXECSHELL, buf4);
x=(int)ShellExecute(g_hwnd,buf[0]?buf:NULL,buf2,buf3[0]?buf3:NULL,state_output_directory,parms[3]);
x=(int)ShellExecute(g_hwnd,buf[0]?buf:NULL,buf2,buf3[0]?buf3:NULL,state_output_directory,parm3);
if (x < 33)
{
log_printf5("ExecShell: warning: error (\"%s\": file:\"%s\" params:\"%s\")=%d",buf,buf2,buf3,x);
@ -702,7 +709,7 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
case EW_EXECUTE:
{
HANDLE hProc;
process_string_fromtab(buf,parms[0]);
process_string_fromtab(buf,parm0);
log_printf2("Exec: command=\"%s\"",buf);
update_status_text_from_lang(LANGID_EXECUTE,buf);
@ -711,7 +718,7 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
if (hProc)
{
log_printf2("Exec: success (\"%s\")",buf);
if (parms[1])
if (parm1)
{
DWORD lExitCode;
while (WaitForSingleObject(hProc,100) == WAIT_TIMEOUT)
@ -722,7 +729,7 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
}
GetExitCodeProcess(hProc, &lExitCode);
if (parms[2]>=0) myitoa(g_usrvars[parms[2]],lExitCode);
if (parm2>=0) myitoa(g_usrvars[parm2],lExitCode);
else if (lExitCode) exec_errorflag++;
}
CloseHandle( hProc );
@ -742,9 +749,9 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
// also allows GetFileTime to be passed a wildcard.
{
WIN32_FIND_DATA *ffd;
char *highout=g_usrvars[parms[1]];
char *lowout=g_usrvars[parms[2]];
process_string_fromtab(buf,parms[0]);
char *highout=g_usrvars[parm1];
char *lowout=g_usrvars[parm2];
process_string_fromtab(buf,parm0);
ffd=file_exists(buf);
if (ffd)
@ -763,13 +770,13 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
#ifdef NSIS_SUPPORT_GETDLLVERSION
case EW_GETDLLVERSION:
{
char *highout=g_usrvars[parms[1]];
char *lowout=g_usrvars[parms[2]];
char *highout=g_usrvars[parm1];
char *lowout=g_usrvars[parm2];
DWORD s1;
DWORD t[4]; // our two members are the 3rd and 4th..
VS_FIXEDFILEINFO *pvsf1=(VS_FIXEDFILEINFO*)t;
DWORD d;
process_string_fromtab(buf,parms[0]);
process_string_fromtab(buf,parm0);
s1=GetFileVersionInfoSize(buf,&d);
*lowout=*highout=0;
exec_errorflag++;
@ -801,8 +808,8 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
if (hres == S_FALSE || hres == S_OK)
{
HANDLE h;
process_string_fromtab(buf,parms[0]);
process_string_fromtab(buf2,parms[1]);
process_string_fromtab(buf,parm0);
process_string_fromtab(buf2,parm1);
h=LoadLibrary(buf);
if (h)
@ -811,7 +818,7 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
if (funke)
{
exec_errorflag--;
if (parms[2]<0)
if (parm2<0)
{
void (*func)(HWND,int,char*,void*);
func=(void*)funke;
@ -824,7 +831,7 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
}
else
{
process_string_fromtab(buf3,parms[2]);
process_string_fromtab(buf3,parm2);
update_status_text(buf3,buf);
funke();
}
@ -853,16 +860,16 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
#endif
#ifdef NSIS_SUPPORT_CREATESHORTCUT
case EW_CREATESHORTCUT:
process_string_fromtab(buf3,parms[0]);
process_string_fromtab(buf2,parms[1]);
process_string_fromtab(buf, parms[2]);
process_string_fromtab(buf4,parms[3]);
process_string_fromtab(buf3,parm0);
process_string_fromtab(buf2,parm1);
process_string_fromtab(buf, parm2);
process_string_fromtab(buf4,parm3);
log_printf8("CreateShortCut: out: \"%s\", in: \"%s %s\", icon: %s,%d, sw=%d, hk=%d",
buf3,buf2,buf,buf4,parms[4]&0xff,(parms[4]&0xff00)>>8,parms[4]>>16);
buf3,buf2,buf,buf4,parm4&0xff,(parm4&0xff00)>>8,parm4>>16);
if (CreateShortCut(g_hwnd, buf3, buf4[0]?buf4:NULL, parms[4]&0xff, buf2, buf[0]?buf:NULL,
state_output_directory,(parms[4]&0xff00)>>8,parms[4]>>16))
if (CreateShortCut(g_hwnd, buf3, buf4[0]?buf4:NULL, parm4&0xff, buf2, buf[0]?buf:NULL,
state_output_directory,(parm4&0xff00)>>8,parm4>>16))
{
exec_errorflag++;
update_status_text_from_lang(LANGID_ERRORCREATINGSHORTCUT,buf3);
@ -878,8 +885,8 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
{
int res;
SHFILEOPSTRUCT op;
process_string_fromtab(buf,parms[0]);
process_string_fromtab(buf2,parms[1]);
process_string_fromtab(buf,parm0);
process_string_fromtab(buf2,parm1);
log_printf3("CopyFiles \"%s\"->\"%s\"",buf,buf2);
op.hwnd=g_hwnd;
op.wFunc=FO_COPY;
@ -891,7 +898,7 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
op.pFrom=buf;
op.pTo=buf2;
op.lpszProgressTitle=buf3;
op.fFlags=parms[2];
op.fFlags=parm2;
update_status_text("",buf3);
res=SHFileOperation(&op);
if (res)
@ -905,7 +912,7 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
#ifdef NSIS_SUPPORT_REBOOT
case EW_REBOOT:
exec_errorflag++;
if (parms[0] == 0xbadf00d)
if (parm0 == 0xbadf00d)
{
HANDLE h=LoadLibrary("advapi32.dll");
if (h)
@ -938,7 +945,7 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
}
break;
case EW_IFREBOOTFLAG: return parms[!exec_rebootflag];
case EW_SETREBOOTFLAG: exec_rebootflag=parms[0]; return 0;
case EW_SETREBOOTFLAG: exec_rebootflag=parm0; return 0;
#endif//NSIS_SUPPORT_REBOOT
#ifdef NSIS_SUPPORT_INIFILES
case EW_WRITEINI:
@ -949,18 +956,18 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
mystrcpy(buf2,"<RM>");
mystrcpy(buf3,buf2);
#endif
process_string_fromtab(buf,parms[0]);
if (parms[1]>=0)
process_string_fromtab(buf,parm0);
if (parm1>=0)
{
process_string_fromtab(buf2,parms[1]);
process_string_fromtab(buf2,parm1);
sec=buf2;
}
if (parms[2]>=0)
if (parm2>=0)
{
process_string_fromtab(buf3,parms[2]);
process_string_fromtab(buf3,parm2);
ent=buf3;
}
process_string_fromtab(buf4,parms[3]);
process_string_fromtab(buf4,parm3);
log_printf5("WriteINIStr: wrote [%s] %s=%s in %s",buf,buf2,buf3,buf4);
if (!WritePrivateProfileString(buf,sec,ent,buf4)) exec_errorflag++;
}
@ -968,10 +975,10 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
case EW_READINISTR:
{
static const char *errstr="!N~";
char *p=g_usrvars[parms[0]];
process_string_fromtab(buf,parms[1]);
process_string_fromtab(buf2,parms[2]);
process_string_fromtab(buf3,parms[3]);
char *p=g_usrvars[parm0];
process_string_fromtab(buf,parm1);
process_string_fromtab(buf2,parm2);
process_string_fromtab(buf3,parm3);
GetPrivateProfileString(buf,buf2,errstr,p,NSIS_MAX_STRLEN-1,buf3);
if (*((int*)errstr) == *((int*)p))
{
@ -984,15 +991,15 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
#ifdef NSIS_SUPPORT_REGISTRYFUNCTIONS
case EW_DELREG:
{
int rootkey=parms[0];
int rootkey=parm0;
exec_errorflag++;
process_string_fromtab(buf4,parms[1]);
if (parms[2] != -1)
process_string_fromtab(buf4,parm1);
if (parm2 != -1)
{
HKEY hKey;
if (RegOpenKeyEx((HKEY)rootkey,buf4,0,KEY_ALL_ACCESS,&hKey) == ERROR_SUCCESS)
{
process_string_fromtab(buf,parms[2]);
process_string_fromtab(buf,parm2);
log_printf4("DeleteRegValue: %d\\%s\\%s",rootkey,buf4,buf);
if (RegDeleteValue(hKey,buf) == ERROR_SUCCESS) exec_errorflag--;
RegCloseKey(hKey);
@ -1001,36 +1008,36 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
else
{
log_printf3("DeleteRegKey: %d\\%s",rootkey,buf4);
if (myRegDeleteKeyEx((HKEY)rootkey,buf4,parms[3]) == ERROR_SUCCESS) exec_errorflag--;
if (myRegDeleteKeyEx((HKEY)rootkey,buf4,parm3) == ERROR_SUCCESS) exec_errorflag--;
}
}
return 0;
case EW_WRITEREG: // write registry value
{
HKEY hKey;
int rootkey=parms[0];
int type=parms[4];
int rootkey=parm0;
int type=parm4;
exec_errorflag++;
process_string_fromtab(buf2,parms[2]);
process_string_fromtab(buf4,parms[1]);
process_string_fromtab(buf2,parm2);
process_string_fromtab(buf4,parm1);
if (RegCreateKey((HKEY)rootkey,buf4,&hKey) == ERROR_SUCCESS)
{
if (type <= 1)
{
process_string_fromtab(buf3,parms[3]);
process_string_fromtab(buf3,parm3);
if (RegSetValueEx(hKey,buf2,0,type==1?REG_SZ:REG_EXPAND_SZ,buf3,mystrlen(buf3)+1) == ERROR_SUCCESS) exec_errorflag--;
log_printf5("WriteRegStr: set %d\\%s\\%s to %s",rootkey,buf4,buf2,buf3);
}
else if (type == 2)
{
DWORD l;
l=process_string_fromtab_toint(parms[3]);
l=process_string_fromtab_toint(parm3);
if (RegSetValueEx(hKey,buf2,0,REG_DWORD,(unsigned char*)&l,4) == ERROR_SUCCESS) exec_errorflag--;
log_printf5("WriteRegDWORD: set %d\\%s\\%s to %d",rootkey,buf4,buf2,l);
}
else if (type == 3)
{
int len=GetCompressedDataFromDataBlockToMemory(parms[3], buf3, NSIS_MAX_STRLEN);
int len=GetCompressedDataFromDataBlockToMemory(parm3, buf3, NSIS_MAX_STRLEN);
if (len >= 0)
{
if (RegSetValueEx(hKey,buf2,0,REG_BINARY,buf3,len) == ERROR_SUCCESS) exec_errorflag--;
@ -1046,10 +1053,10 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
case EW_READREGSTR: // read registry string
{
HKEY hKey;
char *p=g_usrvars[parms[0]];
int rootkey=parms[1];
process_string_fromtab(buf,parms[2]); // buf == subkey
process_string_fromtab(buf2,parms[3]); // buf == key name
char *p=g_usrvars[parm0];
int rootkey=parm1;
process_string_fromtab(buf,parm2); // buf == subkey
process_string_fromtab(buf2,parm3); // buf == key name
p[0]=0;
if (RegOpenKeyEx((HKEY)rootkey,buf,0,KEY_READ,&hKey) == ERROR_SUCCESS)
{
@ -1066,10 +1073,10 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
{
if (t==REG_DWORD)
{
if (!parms[4]) exec_errorflag++;
if (!parm4) exec_errorflag++;
myitoa(p,*((DWORD*)p));
}
else if (parms[4]) exec_errorflag++;
else if (parm4) exec_errorflag++;
}
RegCloseKey(hKey);
}
@ -1079,14 +1086,14 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
case EW_REGENUM:
{
HKEY key;
char *p=g_usrvars[parms[0]];
int b=process_string_fromtab_toint(parms[3]);
process_string_fromtab(buf2,parms[2]);
char *p=g_usrvars[parm0];
int b=process_string_fromtab_toint(parm3);
process_string_fromtab(buf2,parm2);
p[0]=0;
if (RegOpenKeyEx((HKEY)parms[1],buf2,0,KEY_ALL_ACCESS,&key) == ERROR_SUCCESS)
if (RegOpenKeyEx((HKEY)parm1,buf2,0,KEY_ALL_ACCESS,&key) == ERROR_SUCCESS)
{
DWORD d=NSIS_MAX_STRLEN-1;
if (parms[4]) RegEnumKey(key,b,p,d);
if (parm4) RegEnumKey(key,b,p,d);
else RegEnumValue(key,b,p,&d,NULL,NULL,NULL,NULL);
p[NSIS_MAX_STRLEN-1]=0;
RegCloseKey(key);
@ -1099,16 +1106,16 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
#ifdef NSIS_SUPPORT_FILEFUNCTIONS
case EW_FCLOSE:
{
char *t=g_usrvars[parms[0]];
char *t=g_usrvars[parm0];
if (*t) CloseHandle((HANDLE)myatoi(t));
}
return 0;
case EW_FOPEN:
{
HANDLE h;
char *handleout=g_usrvars[parms[3]];
process_string_fromtab(buf,parms[0]);
h=myOpenFile(buf,parms[1],parms[2]);
char *handleout=g_usrvars[parm3];
process_string_fromtab(buf,parm0);
h=myOpenFile(buf,parm1,parm2);
if (h == INVALID_HANDLE_VALUE)
{
*handleout=0;
@ -1124,15 +1131,15 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
{
DWORD dw;
int l;
char *t=g_usrvars[parms[0]];
if (parms[2])
char *t=g_usrvars[parm0];
if (parm2)
{
((unsigned char *)buf2)[0]=process_string_fromtab_toint(parms[1])&0xff;
((unsigned char *)buf2)[0]=process_string_fromtab_toint(parm1)&0xff;
l=1;
}
else
{
process_string_fromtab(buf2,parms[1]);
process_string_fromtab(buf2,parm1);
l=mystrlen(buf2);
}
if (!*t || !WriteFile((HANDLE)myatoi(t),buf2,l,&dw,NULL))
@ -1143,11 +1150,11 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
return 0;
case EW_FGETS:
{
char *textout=g_usrvars[parms[1]];
char *textout=g_usrvars[parm1];
DWORD dw;
int rpos=0;
char *hptr=g_usrvars[parms[0]];
int maxlen=process_string_fromtab_toint(parms[2]);
char *hptr=g_usrvars[parm0];
int maxlen=process_string_fromtab_toint(parm2);
if (maxlen<1) return 0;
if (maxlen > NSIS_MAX_STRLEN-1) maxlen=NSIS_MAX_STRLEN-1;
if (*hptr)
@ -1159,7 +1166,7 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
{
char c;
if (!ReadFile(h,&c,1,&dw,NULL) || dw != 1) break;
if (parms[3])
if (parm3)
{
myitoa(textout,(unsigned int)(unsigned char)c);
return 0;
@ -1181,14 +1188,14 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
return 0;
case EW_FSEEK:
{
char *t=g_usrvars[parms[0]];
char *t=g_usrvars[parm0];
if (*t)
{
DWORD v=SetFilePointer((HANDLE)myatoi(t),process_string_fromtab_toint(parms[1]),NULL,parms[2]);
DWORD v=SetFilePointer((HANDLE)myatoi(t),process_string_fromtab_toint(parm1),NULL,parm2);
if (parms[3]>=0)
if (parm3>=0)
{
myitoa(g_usrvars[parms[3]],v);
myitoa(g_usrvars[parm3],v);
}
}
}
@ -1197,14 +1204,14 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
#ifdef NSIS_SUPPORT_FINDFIRST
case EW_FINDCLOSE:
{
char *t=g_usrvars[parms[0]];
char *t=g_usrvars[parm0];
if (*t) FindClose((HANDLE)myatoi(t));
}
return 0;
case EW_FINDNEXT:
{
char *textout=g_usrvars[parms[0]];
char *t=g_usrvars[parms[1]];
char *textout=g_usrvars[parm0];
char *t=g_usrvars[parm1];
WIN32_FIND_DATA fd;
if (*t && FindNextFile((HANDLE)myatoi(t),&fd))
{
@ -1220,11 +1227,11 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
return 0;
case EW_FINDFIRST:
{
char *textout=g_usrvars[parms[1]];
char *handleout=g_usrvars[parms[2]];
char *textout=g_usrvars[parm1];
char *handleout=g_usrvars[parm2];
HANDLE h;
WIN32_FIND_DATA fd;
process_string_fromtab(buf,parms[0]);
process_string_fromtab(buf,parm0);
h=FindFirstFile(buf,&fd);
if (h == INVALID_HANDLE_VALUE)
{
@ -1245,7 +1252,7 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
{
int ret=-666;
HANDLE hFile;
process_string_fromtab(buf,parms[0]);
process_string_fromtab(buf,parm0);
if (validpathspec(buf))
{
@ -1309,16 +1316,16 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
#endif//NSIS_CONFIG_UNINSTALL_SUPPORT
#ifdef NSIS_CONFIG_LOG
case EW_LOG:
if (parms[0])
if (parm0)
{
log_printf2("settings logging to %d",parms[1]);
log_dolog=parms[1];
log_printf2("logging set to %d",parms[1]);
log_printf2("settings logging to %d",parm1);
log_dolog=parm1;
log_printf2("logging set to %d",parm1);
if (!g_log_file && log_dolog) build_g_logfile();
}
else
{
process_string_fromtab(buf,parms[1]);
process_string_fromtab(buf,parm1);
log_printf2("%s",buf);
}
return 0;
@ -1326,7 +1333,7 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
#ifdef NSIS_CONFIG_COMPONENTPAGE
case EW_SECTIONSET:
{
int x=process_string_fromtab_toint(parms[0]);
int x=process_string_fromtab_toint(parm0);
if (g_inst_section && x >= 0 && x < g_inst_header->num_sections)
{
int z=0;
@ -1336,21 +1343,21 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
for (a = 0; a < x; a ++) if (g_inst_section[a].name_ptr>=0) z++;
}
if (parms[1]==0) //set text
if (parm1==0) //set text
{
if (g_SectionHack)
{
SendMessage(g_SectionHack,WM_USER+0x17,x,parms[2]);
SendMessage(g_SectionHack,WM_USER+0x17,x,parm2);
}
g_inst_section[x].name_ptr=parms[2];
g_inst_section[x].name_ptr=parm2;
}
else if (parms[1]==1) // get text
else if (parm1==1) // get text
{
process_string_fromtab(g_usrvars[parms[2]],g_inst_section[x].name_ptr);
process_string_fromtab(g_usrvars[parm2],g_inst_section[x].name_ptr);
}
else if (parms[1]==2) // set flags
else if (parm1==2) // set flags
{
g_inst_section[x].default_state=process_string_fromtab_toint(parms[2]);
g_inst_section[x].default_state=process_string_fromtab_toint(parm2);
if (g_SectionHack)
{
SendMessage(g_SectionHack,WM_USER+0x18,x,(LPARAM)!!(g_inst_section[x].default_state&DFS_SET));
@ -1358,7 +1365,7 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
}
else // get flags
{
myitoa(g_usrvars[parms[2]],g_inst_section[x].default_state);
myitoa(g_usrvars[parm2],g_inst_section[x].default_state);
}
}
else exec_errorflag++;
@ -1370,16 +1377,16 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
case EW_SETBRANDINGIMAGE:
{
RECT r;
HWND hwImage = GetDlgItem(g_hwnd, parms[1]);
HWND hwImage = GetDlgItem(g_hwnd, parm1);
GetWindowRect(hwImage, &r);
process_string_fromtab(buf, parms[0]);
process_string_fromtab(buf, parm0);
if (g_hBrandingBitmap) DeleteObject(g_hBrandingBitmap);
g_hBrandingBitmap=LoadImage(
0,
buf,
IMAGE_BITMAP,
parms[2]?r.right-r.left:0,
parms[2]?r.bottom-r.top:0,
parm2?r.right-r.left:0,
parm2?r.bottom-r.top:0,
LR_LOADFROMFILE
);
SendMessage(
@ -1400,27 +1407,27 @@ static int NSISCALL ExecuteEntry(entry *entries, int pos)
#endif // NSIS_CONFIG_PLUGIN_SUPPORT
case EW_CREATEFONT:
myitoa(
g_usrvars[parms[0]],
g_usrvars[parm0],
(int)CreateFont(
process_string_fromtab_toint(parms[2]),
process_string_fromtab_toint(parm2),
0,
0,
0,
process_string_fromtab_toint(parms[3]),
parms[4]&1,
parms[4]&2,
parms[4]&4,
process_string_fromtab_toint(parm3),
parm4&1,
parm4&2,
parm4&4,
0,
0,
0,
0,
0,
GetStringFromStringTab(parms[1])
GetStringFromStringTab(parm1)
)
);
return 0;
case EW_SETLANG:
set_language(process_string_fromtab_toint(parms[0]));
set_language(process_string_fromtab_toint(parm0));
return 0;
}
my_MessageBox(STR(LANG_INSTCORRUPTED),MB_OK|MB_ICONSTOP);

View file

@ -1,8 +1,14 @@
extern char g_usrvars[24][NSIS_MAX_STRLEN];
#define state_command_line (g_usrvars[20])
/*#define state_command_line (g_usrvars[20])
#define state_install_directory (g_usrvars[21])
#define state_output_directory (g_usrvars[22])
#define state_exe_directory (g_usrvars[23])
#define state_exe_directory (g_usrvars[23])*/
// changed by Amir Szekely 28th August 2002
// smaller exehead
extern char *state_command_line;
extern char *state_install_directory;
extern char *state_output_directory;
extern char *state_exe_directory;
extern char g_caption[NSIS_MAX_STRLEN*2];
extern HWND g_hwnd;

View file

@ -17,6 +17,10 @@ extern char plugins_temp_dir[NSIS_MAX_STRLEN];
#endif
char g_usrvars[24][NSIS_MAX_STRLEN];
char *state_command_line=g_usrvars[20];
char *state_install_directory=g_usrvars[21];
char *state_output_directory=g_usrvars[22];
char *state_exe_directory=g_usrvars[23];
HANDLE g_hInstance;