[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