From c8e693e95bb057510cd6d36099e10154e9f82f40 Mon Sep 17 00:00:00 2001 From: kichik Date: Wed, 28 Aug 2002 10:08:38 +0000 Subject: [PATCH] 0.5KB saving git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@765 212acab6-be3b-0410-9dea-997c60f758d6 --- Source/exehead/exec.c | 425 +++++++++++++++++++++-------------------- Source/exehead/state.h | 10 +- Source/exehead/util.c | 4 + 3 files changed, 228 insertions(+), 211 deletions(-) diff --git a/Source/exehead/exec.c b/Source/exehead/exec.c index e7d93408..cbe756b2 100644 --- a/Source/exehead/exec.c +++ b/Source/exehead/exec.c @@ -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 (vv2) return parms[4]; + v=process_string_fromtab_toint(parm0); + v2=process_string_fromtab_toint(parm1); + if (vv2) 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 (vv2) return parms[4]; + v=(unsigned int)process_string_fromtab_toint(parm0); + v2=(unsigned int)process_string_fromtab_toint(parm1); + if (vv2) 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,""); 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); diff --git a/Source/exehead/state.h b/Source/exehead/state.h index b5de6e5b..612f4b08 100644 --- a/Source/exehead/state.h +++ b/Source/exehead/state.h @@ -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; diff --git a/Source/exehead/util.c b/Source/exehead/util.c index 35569c5e..057b2113 100644 --- a/Source/exehead/util.c +++ b/Source/exehead/util.c @@ -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;