Get Parameter Value: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
m (Added category links.)
m (Adding new author and category links.)
Line 1: Line 1:
{|align=right
{{PageAuthor|zimsms}}
|<small>Author: [[{{ns:2}}:zimsms|zimsms]] ([[{{ns:3}}:zimsms|talk]], [[{{ns:-1}}:Contributions/zimsms|contrib]])</small>
 
|}
<br style="clear:both;">
== Description ==
== Description ==
I created this function so I could define parameters on the command line to use in silent installs, the main push behind it was to define the default language that the installer should use. However, this should prove useful in any purpose where you need to retrieve a command line parameter.
I created this function so I could define parameters on the command line to use in silent installs, the main push behind it was to define the default language that the installer should use. However, this should prove useful in any purpose where you need to retrieve a command line parameter.
Line 115: Line 113:
</highlight-nsis>
</highlight-nsis>


[[{{ns:14}}:Command Line Functions]]
[[Category:Command Line Functions]]

Revision as of 12:20, 24 June 2005

Author: zimsms (talk, contrib)


Description

I created this function so I could define parameters on the command line to use in silent installs, the main push behind it was to define the default language that the installer should use. However, this should prove useful in any purpose where you need to retrieve a command line parameter.

See the syntax examples below; The stack will contain either the hard coded specified default value or the value supplied at the command line.

The Calling Procedure

  !insertmacro GetParameterValue "/L=" "1033"
  pop $R0

The Macros

 ; load language from command line /L=1033
 ; foo.exe /S /L=1033 /D=C:\Program Files\Foo
 ; or:
 ; foo.exe /S "/L=1033" /D="C:\Program Files\Foo"
 ; gpv "/L=" "1033"
 !macro GETPARAMETERVALUE SWITCH DEFAULT
   Push $0
   Push $1
   Push $2
   Push $3
   Push $4
 
 ;$CMDLINE='"My Setup\Setup.exe" /L=1033 /S'
   Push "$CMDLINE"
   Push '${SWITCH}"'
   !insertmacro StrStr
   Pop $0
   StrCmp "$0" "" gpv_notquoted
 ;$0='/L="1033" /S'
   StrLen $2 "$0"
   Strlen $1 "${SWITCH}"
   IntOp $1 $1 + 1
   StrCpy $0 "$0" $2 $1
 ;$0='1033" /S'
   Push "$0"
   Push '"'
   !insertmacro StrStr
   Pop $1
   StrLen $2 "$0"
   StrLen $3 "$1"
   IntOp $4 $2 - $3
   StrCpy $0 $0 $4 0
   Goto gpv_done
 
   gpv_notquoted:
   Push "$CMDLINE"
   Push "${SWITCH}"
   !insertmacro StrStr
   Pop $0
   StrCmp "$0" "" gpv_done
 ;$0='/L="1033" /S'
   StrLen $2 "$0"
   Strlen $1 "${SWITCH}"
   StrCpy $0 "$0" $2 $1
 ;$0=1033 /S'
   Push "$0"
   Push ' '
   !insertmacro StrStr
   Pop $1
   StrLen $2 "$0"
   StrLen $3 "$1"
   IntOp $4 $2 - $3
   StrCpy $0 $0 $4 0
   Goto gpv_done
 
   gpv_done:
   StrCmp "$0" "" 0 +2
   StrCpy $0 "${DEFAULT}"
 
   Pop $4
   Pop $3
   Pop $2
   Pop $1
   Exch $0
 !macroend
 
; And I had to modify StrStr a tiny bit.
; Possible upgrade switch the goto's to use ${__LINE__}
 
!macro STRSTR
  Exch $R1 ; st=haystack,old$R1, $R1=needle
  Exch    ; st=old$R1,haystack
  Exch $R2 ; st=old$R1,old$R2, $R2=haystack
  Push $R3
  Push $R4
  Push $R5
  StrLen $R3 $R1
  StrCpy $R4 0
  ; $R1=needle
  ; $R2=haystack
  ; $R3=len(needle)
  ; $R4=cnt
  ; $R5=tmp
 ;  loop;
    StrCpy $R5 $R2 $R3 $R4
    StrCmp $R5 $R1 +4
    StrCmp $R5 "" +3
    IntOp $R4 $R4 + 1
    Goto -4
 ;  done;
  StrCpy $R1 $R2 "" $R4
  Pop $R5
  Pop $R4
  Pop $R3
  Pop $R2
  Exch $R1
!macroend