[prev in list] [next in list] [prev in thread] [next in thread]
List: nsis-commits
Subject: [NSIS-commits] SF.net SVN: nsis:[7152] NSIS/trunk
From: anders_k--- via NSIS-commits <nsis-commits () lists ! sourceforge ! net>
Date: 2020-03-10 1:44:23
Message-ID: 1583804663.750775.1704 () sfp-scm-7 ! v30 ! lw ! sourceforge ! com
[Download RAW message or body]
Revision: 7152
http://sourceforge.net/p/nsis/code/7152
Author: anders_k
Date: 2020-03-10 01:44:23 +0000 (Tue, 10 Mar 2020)
Log Message:
-----------
Added IfShellVarContextAll and refactored flag instructions generation
Modified Paths:
--------------
NSIS/trunk/Docs/src/flowcontrol.but
NSIS/trunk/Docs/src/history.but
NSIS/trunk/Include/LogicLib.nsh
NSIS/trunk/Source/build.h
NSIS/trunk/Source/script.cpp
NSIS/trunk/Source/tokens.cpp
NSIS/trunk/Source/tokens.h
Modified: NSIS/trunk/Docs/src/flowcontrol.but
===================================================================
--- NSIS/trunk/Docs/src/flowcontrol.but 2020-03-05 00:07:48 UTC (rev 7151)
+++ NSIS/trunk/Docs/src/flowcontrol.but 2020-03-10 01:44:23 UTC (rev 7152)
@@ -161,6 +161,12 @@
\c IfSilent +2
\c ExecWait '"$INSTDIR\nonsilentprogram.exe"'
+\S2{ifshellvarcontextall} IfShellVarContextAll
+
+\c jump_if_true [jump_if_false]
+
+Checks if \R{setshellvarcontext}{SetShellVarContext} is set to \e{all}.
+
\S2{intcmp} IntCmp
\c val1 val2 jump_if_equal [jump_if_val1_less] [jump_if_val1_more]
Modified: NSIS/trunk/Docs/src/history.but
===================================================================
--- NSIS/trunk/Docs/src/history.but 2020-03-05 00:07:48 UTC (rev 7151)
+++ NSIS/trunk/Docs/src/history.but 2020-03-10 01:44:23 UTC (rev 7152)
@@ -14,6 +14,10 @@
\S2{} Minor Changes
+\b Added \R{ifshellvarcontextall} IfShellVarContextAll}
+
+\# Undocumented: \b Added GetShellVarContext | Documenting this would require \
documenting the all/current to number mapping +
\H{v3.05} 3.05
Released on December 15th, 2019
Modified: NSIS/trunk/Include/LogicLib.nsh
===================================================================
--- NSIS/trunk/Include/LogicLib.nsh 2020-03-05 00:07:48 UTC (rev 7151)
+++ NSIS/trunk/Include/LogicLib.nsh 2020-03-10 01:44:23 UTC (rev 7152)
@@ -335,6 +335,11 @@
!macroend
!define Silent `"" Silent ""`
+ !macro _ShellVarContextAll _a _b _t _f
+ IfShellVarContextAll `${_t}` `${_f}`
+ !macroend
+ !define ShellVarContextAll `"" ShellVarContextAll ""`
+
; "Any instruction" test
!macro _Cmd _a _b _t _f
!define _t=${_t}
Modified: NSIS/trunk/Source/build.h
===================================================================
--- NSIS/trunk/Source/build.h 2020-03-05 00:07:48 UTC (rev 7151)
+++ NSIS/trunk/Source/build.h 2020-03-10 01:44:23 UTC (rev 7152)
@@ -327,6 +327,7 @@
int doParse(const TCHAR *str);
int doCommand(int which_token, LineParser &line);
TCHAR m_templinebuf[MAX_LINELENGTH]; // Buffer used by parseScript() & \
doCommand(), not recursion safe! + int add_flag_instruction_entry(int which_token, \
int opcode, LineParser &line, int offset, int data = 0);
int do_add_file(const TCHAR *lgss, int attrib, int recurse, int *total_files, \
const TCHAR
*name_override=0, int generatecode=1, int *data_handle=0,
Modified: NSIS/trunk/Source/script.cpp
===================================================================
--- NSIS/trunk/Source/script.cpp 2020-03-05 00:07:48 UTC (rev 7151)
+++ NSIS/trunk/Source/script.cpp 2020-03-10 01:44:23 UTC (rev 7152)
@@ -912,6 +912,31 @@
return k == -1 ? INVALIDREGROOT : rootkey_tab[k];
}
+int CEXEBuild::add_flag_instruction_entry(int which_token, int opcode, LineParser \
&line, int offset, int data) +{
+ entry ent = { opcode, };
+ switch(opcode)
+ {
+ case EW_SETFLAG:
+ ent.offsets[0] = offset;
+ ent.offsets[1] = data;
+ SCRIPT_MSG(_T("%") NPRIs _T(": %") NPRIs _T("\n"), \
get_commandtoken_name(which_token), line.gettoken_str(1)); + return \
add_entry(&ent); + case EW_IFFLAG:
+ if (process_jump(line, 1, &ent.offsets[0]) || process_jump(line, 2, \
&ent.offsets[1])) PRINTHELP() + ent.offsets[2]=offset;
+ ent.offsets[3]=data;
+ SCRIPT_MSG(_T("%") NPRIs _T(" ?%") NPRIs _T(":%") NPRIs _T("\n"), \
get_commandtoken_name(which_token), line.gettoken_str(1), line.gettoken_str(2)); + \
return add_entry(&ent); + case EW_GETFLAG:
+ if ((ent.offsets[0] = GetUserVarIndex(line, 1)) < 0) PRINTHELP();
+ ent.offsets[1] = offset;
+ SCRIPT_MSG(_T("%") NPRIs _T(": %") NPRIs _T("\n"), \
get_commandtoken_name(which_token), line.gettoken_str(1)); + return \
add_entry(&ent); + }
+ return PS_ERROR;
+}
+
int CEXEBuild::doCommand(int which_token, LineParser &line)
{
#ifdef NSIS_CONFIG_PLUGIN_SUPPORT
@@ -1408,10 +1433,7 @@
}
return PS_OK;
case TOK_GETINSTDIRERROR:
- ent.which = EW_GETFLAG;
- ent.offsets[0] = GetUserVarIndex(line, 1);
- ent.offsets[1] = FLAG_OFFSET(instdir_error);
- return add_entry(&ent);
+ return add_flag_instruction_entry(which_token, EW_GETFLAG, line, \
FLAG_OFFSET(instdir_error)); #ifdef NSIS_CONFIG_COMPONENTPAGE
case TOK_COMPTEXT:
{
@@ -1682,23 +1704,11 @@
return PS_ERROR;
#endif
case TOK_IFSILENT:
- ent.which=EW_IFFLAG;
- if (process_jump(line,1,&ent.offsets[0]) ||
- process_jump(line,2,&ent.offsets[1])) PRINTHELP()
- ent.offsets[2]=FLAG_OFFSET(silent);
- ent.offsets[3]=~0;//new value mask - keep flag
- SCRIPT_MSG(_T("IfSilent ?%") NPRIs _T(":%") NPRIs \
_T("\n"),line.gettoken_str(1),line.gettoken_str(2));
- return add_entry(&ent);
+ return add_flag_instruction_entry(which_token, EW_IFFLAG, line, \
FLAG_OFFSET(silent), ~0); //new value mask - keep flag case TOK_SETSILENT:
- {
- ent.which=EW_SETFLAG;
- ent.offsets[0]=FLAG_OFFSET(silent);
- int k=line.gettoken_enum(1,_T("normal\0silent\0"));
- if (k<0) PRINTHELP()
- ent.offsets[1]=add_intstring(k);
- SCRIPT_MSG(_T("SetSilent: %") NPRIs _T("\n"),line.gettoken_str(1));
- }
- return add_entry(&ent);
+ ent.offsets[1] = line.gettoken_enum(1,_T("normal\0silent\0"));
+ if (ent.offsets[1] < 0 ) PRINTHELP()
+ return add_flag_instruction_entry(which_token, EW_SETFLAG, line, \
FLAG_OFFSET(silent), add_intstring(ent.offsets[1])); #else
case TOK_SILENTINST:
case TOK_SILENTUNINST:
@@ -3015,16 +3025,14 @@
SCRIPT_MSG(_T("SetRegView: %") NPRIs _T("\n"),line.gettoken_str(1));
}
return add_entry(&ent);
- case TOK_SETSHELLVARCONTEXT:
- {
- ent.which=EW_SETFLAG;
- ent.offsets[0]=FLAG_OFFSET(all_user_var);
- int k=line.gettoken_enum(1,_T("current\0all\0"));
- if (k<0) PRINTHELP()
- ent.offsets[1]=add_intstring(k);
- SCRIPT_MSG(_T("SetShellVarContext: %") NPRIs _T("\n"),line.gettoken_str(1));
- }
- return add_entry(&ent);
+ case TOK_GETSHELLVARCONTEXT:
+ return add_flag_instruction_entry(which_token, EW_GETFLAG, line, \
FLAG_OFFSET(all_user_var)); + case TOK_SETSHELLVARCONTEXT:
+ ent.offsets[1] = line.gettoken_enum(1,_T("current\0all\0"));
+ if (ent.offsets[1] < 0 ) PRINTHELP()
+ return add_flag_instruction_entry(which_token, EW_SETFLAG, line, \
FLAG_OFFSET(all_user_var), add_intstring(ent.offsets[1])); + case \
TOK_IFSHELLVARCONTEXTALL: + return add_flag_instruction_entry(which_token, \
EW_IFFLAG, line, FLAG_OFFSET(all_user_var), ~0); //new value mask - keep flag case \
TOK_RET: SCRIPT_MSG(_T("Return\n"));
ent.which=EW_RET;
@@ -3939,46 +3947,17 @@
}
return add_entry(&ent);
case TOK_IFERRORS:
- ent.which=EW_IFFLAG;
- if (process_jump(line,1,&ent.offsets[0]) ||
- process_jump(line,2,&ent.offsets[1])) PRINTHELP()
- ent.offsets[2]=FLAG_OFFSET(exec_error);
- ent.offsets[3]=0;//new value mask - clean error
- SCRIPT_MSG(_T("IfErrors ?%") NPRIs _T(":%") NPRIs \
_T("\n"),line.gettoken_str(1),line.gettoken_str(2));
- return add_entry(&ent);
+ return add_flag_instruction_entry(which_token, EW_IFFLAG, line, \
FLAG_OFFSET(exec_error), 0); //new value mask - clean error case TOK_IFABORT:
- ent.which=EW_IFFLAG;
- if (process_jump(line,1,&ent.offsets[0]) ||
- process_jump(line,2,&ent.offsets[1])) PRINTHELP()
- ent.offsets[2]=FLAG_OFFSET(abort);
- ent.offsets[3]=~0;//new value mask - keep flag
- SCRIPT_MSG(_T("IfAbort ?%") NPRIs _T(":%") NPRIs \
_T("\n"),line.gettoken_str(1),line.gettoken_str(2));
- return add_entry(&ent);
+ return add_flag_instruction_entry(which_token, EW_IFFLAG, line, \
FLAG_OFFSET(abort), ~0); //new value mask - keep flag case TOK_CLEARERRORS:
- ent.which=EW_SETFLAG;
- ent.offsets[0]=FLAG_OFFSET(exec_error);
- ent.offsets[1]=add_intstring(0);
- SCRIPT_MSG(_T("ClearErrors\n"));
- return add_entry(&ent);
+ return add_flag_instruction_entry(which_token, EW_SETFLAG, line, \
FLAG_OFFSET(exec_error), add_intstring(0)); case TOK_SETERRORS:
- ent.which=EW_SETFLAG;
- ent.offsets[0]=FLAG_OFFSET(exec_error);
- ent.offsets[1]=add_intstring(1);
- SCRIPT_MSG(_T("SetErrors\n"));
- return add_entry(&ent);
+ return add_flag_instruction_entry(which_token, EW_SETFLAG, line, \
FLAG_OFFSET(exec_error), add_intstring(1)); case TOK_SETERRORLEVEL:
- ent.which=EW_SETFLAG;
- ent.offsets[0]=FLAG_OFFSET(errlvl);
- ent.offsets[1]=add_string(line.gettoken_str(1));
- SCRIPT_MSG(_T("SetErrorLevel: %") NPRIs _T("\n"),line.gettoken_str(1));
- return add_entry(&ent);
+ return add_flag_instruction_entry(which_token, EW_SETFLAG, line, \
FLAG_OFFSET(errlvl), add_string(line.gettoken_str(1))); case TOK_GETERRORLEVEL:
- ent.which=EW_GETFLAG;
- ent.offsets[0]=GetUserVarIndex(line, 1);
- ent.offsets[1]=FLAG_OFFSET(errlvl);
- if (line.gettoken_str(1)[0] && ent.offsets[0]<0) PRINTHELP()
- SCRIPT_MSG(_T("GetErrorLevel: %") NPRIs _T("\n"),line.gettoken_str(1));
- return add_entry(&ent);
+ return add_flag_instruction_entry(which_token, EW_GETFLAG, line, \
FLAG_OFFSET(errlvl)); #ifdef NSIS_SUPPORT_STROPTS
case TOK_STRLEN:
ent.which=EW_STRLEN;
@@ -4733,28 +4712,17 @@
ret = add_entry_direct(EW_QUIT);
if (ret != PS_OK) return ret;
- SCRIPT_MSG(_T("Reboot! (WOW)\n"));
+ SCRIPT_MSG(_T("Reboot!\n"));
DefineInnerLangString(NLF_INST_CORRUPTED);
}
return PS_OK;
case TOK_IFREBOOTFLAG:
- ent.which=EW_IFFLAG;
- if (process_jump(line,1,&ent.offsets[0]) ||
- process_jump(line,2,&ent.offsets[1])) PRINTHELP()
- ent.offsets[2]=FLAG_OFFSET(exec_reboot);
- ent.offsets[3]=~0;//new value mask - keep flag
- SCRIPT_MSG(_T("IfRebootFlag ?%") NPRIs _T(":%") NPRIs \
_T("\n"),line.gettoken_str(1),line.gettoken_str(2));
- return add_entry(&ent);
+ return add_flag_instruction_entry(which_token, EW_IFFLAG, line, \
FLAG_OFFSET(exec_reboot), ~0); //new value mask - keep flag case TOK_SETREBOOTFLAG:
- {
- ent.which=EW_SETFLAG;
- ent.offsets[0]=FLAG_OFFSET(exec_reboot);
- int k=line.gettoken_enum(1,_T("false\0true\0"));
- if (k < 0) PRINTHELP()
- ent.offsets[1]=add_intstring(k);
- }
- return add_entry(&ent);
+ ent.offsets[1] = line.gettoken_enum(1,_T("false\0true\0"));
+ if (ent.offsets[1] < 0) PRINTHELP()
+ return add_flag_instruction_entry(which_token, EW_SETFLAG, line, \
FLAG_OFFSET(exec_reboot), add_intstring(ent.offsets[1])); #else
case TOK_REBOOT:
case TOK_IFREBOOTFLAG:
Modified: NSIS/trunk/Source/tokens.cpp
===================================================================
--- NSIS/trunk/Source/tokens.cpp 2020-03-05 00:07:48 UTC (rev 7151)
+++ NSIS/trunk/Source/tokens.cpp 2020-03-10 01:44:23 UTC (rev 7152)
@@ -212,7 +212,9 @@
{TOK_SETPLUGINUNLOAD,_T("SetPluginUnload"),1,0,_T("deprecated - plug-ins should \
handle this on their own"),TP_ALL}, \
{TOK_SETREBOOTFLAG,_T("SetRebootFlag"),1,0,_T("true|false"),TP_CODE}, \
{TOK_SETREGVIEW,_T("SetRegView"),1,0,_T("32|64|default|lastused"),TP_CODE}, \
+{TOK_GETSHELLVARCONTEXT,_T("GetShellVarContext"),1,0,_T("$(user_var: \
output)"),TP_CODE}, \
{TOK_SETSHELLVARCONTEXT,_T("SetShellVarContext"),1,0,_T("all|current"),TP_CODE}, \
+{TOK_IFSHELLVARCONTEXTALL,_T("IfShellVarContextAll"),1,1,_T("goto_true \
[goto_false]"),TP_CODE}, \
{TOK_SETSILENT,_T("SetSilent"),1,0,_T("silent|normal"),TP_CODE}, \
{TOK_SHOWDETAILS,_T("ShowInstDetails"),1,0,_T("(hide|show|nevershow)"),TP_GLOBAL}, \
{TOK_SHOWDETAILSUNINST,_T("ShowUninstDetails"),1,0,_T("(hide|show|nevershow)"),TP_GLOBAL},
Modified: NSIS/trunk/Source/tokens.h
===================================================================
--- NSIS/trunk/Source/tokens.h 2020-03-05 00:07:48 UTC (rev 7151)
+++ NSIS/trunk/Source/tokens.h 2020-03-10 01:44:23 UTC (rev 7152)
@@ -301,7 +301,9 @@
TOK_GETCURINSTTYPE,
TOK_SETCURINSTTYPE,
TOK_SETREGVIEW,
+ TOK_GETSHELLVARCONTEXT,
TOK_SETSHELLVARCONTEXT,
+ TOK_IFSHELLVARCONTEXTALL,
TOK_PLUGINDIR,
TOK_INITPLUGINSDIR,
TOK_CREATEFONT,
This was sent by the SourceForge.net collaborative development platform, the world's \
largest Open Source development site.
_______________________________________________
NSIS-commits mailing list
NSIS-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nsis-commits
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic