Get Parameter Value: Difference between revisions
From NSIS Wiki
Jump to navigationJump to search
m (Updated author and download links, and changed format of some pages.) |
|||
(7 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
{{PageAuthor|zimsms}} | |||
== 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 8: | Line 10: | ||
!insertmacro GetParameterValue "/L=" "1033" | !insertmacro GetParameterValue "/L=" "1033" | ||
pop $R0 | pop $R0 | ||
</highlight-nsis> | |||
Or: | |||
<highlight-nsis> | |||
!insertmacro GetParameterValue "/L=" "1033" | |||
pop $MYPARAMETERVAR | |||
</highlight-nsis> | </highlight-nsis> | ||
Line 111: | Line 120: | ||
</highlight-nsis> | </highlight-nsis> | ||
[[Category:Command Line Functions]] |
Latest revision as of 18:40, 21 January 2006
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
Or:
!insertmacro GetParameterValue "/L=" "1033" pop $MYPARAMETERVAR
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