GetOptions: Difference between revisions
From NSIS Wiki
Jump to navigationJump to search
Instructor (talk | contribs) No edit summary |
Instructor (talk | contribs) |
||
Line 85: | Line 85: | ||
Push $4 | Push $4 | ||
Push $5 | Push $5 | ||
Push $6 | |||
Push $7 | |||
StrCpy $2 $1 '' 1 | StrCpy $2 $1 '' 1 | ||
StrCpy $1 $1 1 | StrCpy $1 $1 1 | ||
StrLen $3 | StrLen $3 $2 | ||
StrCpy $7 0 | |||
begin: | |||
StrCpy $4 -1 | StrCpy $4 -1 | ||
StrCpy $6 '' | |||
quote: | |||
IntOp $4 $4 + 1 | |||
StrCpy $5 $0 1 $4 | |||
StrCmp $5$7 '0' notfound | |||
StrCmp $5 '' trimright | |||
StrCmp $5 '"' 0 +7 | |||
StrCmp $6 '' 0 +3 | |||
StrCpy $6 '"' | |||
goto quote | |||
StrCmp $6 '"' 0 +3 | |||
StrCpy $6 '' | |||
goto quote | |||
StrCmp $5 `'` 0 +7 | |||
StrCmp $6 `` 0 +3 | |||
StrCpy $6 `'` | |||
goto quote | |||
StrCmp $6 `'` 0 +3 | |||
StrCpy $6 `` | |||
goto quote | |||
StrCmp $5 '`' 0 +7 | |||
StrCmp $6 '' 0 +3 | |||
StrCpy $6 '`' | |||
goto quote | |||
StrCmp $6 '`' 0 +3 | |||
StrCpy $6 '' | |||
goto quote | |||
StrCmp $6 '"' quote | |||
StrCmp $6 `'` quote | |||
StrCmp $6 '`' quote | |||
StrCmp $5 $1 0 quote | |||
StrCmp $7 0 trimleft trimright | |||
trimleft: | trimleft: | ||
Line 95: | Line 133: | ||
StrCpy $5 $0 $3 $4 | StrCpy $5 $0 $3 $4 | ||
StrCmp $5 '' notfound | StrCmp $5 '' notfound | ||
StrCmp $5 | StrCmp $5 $2 0 quote | ||
IntOp $4 $4 + $3 | IntOp $4 $4 + $3 | ||
StrCpy $0 $0 '' $4 | StrCpy $0 $0 '' $4 | ||
Line 102: | Line 140: | ||
StrCpy $0 $0 '' 1 | StrCpy $0 $0 '' 1 | ||
goto -3 | goto -3 | ||
StrCpy $7 1 | |||
StrCpy $ | goto begin | ||
trimright: | trimright: | ||
StrCpy $0 $0 $4 | StrCpy $0 $0 $4 | ||
StrCpy $4 $0 1 -1 | StrCpy $4 $0 1 -1 | ||
Line 155: | Line 162: | ||
end: | end: | ||
Pop $7 | |||
Pop $6 | |||
Pop $5 | Pop $5 | ||
Pop $4 | Pop $4 |
Revision as of 07:48, 13 July 2005
Author: Instructor (talk, contrib) |
Links
- Latest version of headers "nsh.zip"
- http://forums.winamp.com/showthread.php?s=&threadid=203228&goto=lastpost
If a function is used without header, put the function code in your script before calling it.
The Function Description
____________________________________________________________________________ GetOptions ____________________________________________________________________________ Get options from command line parameters. Syntax: ${GetOptions} "[Parameters]" "[Option]" $var "[Parameters]" ; command line parameters ; "[Option]" ; option name ; $var ; Result: option string Note: -First option symbol it is delimiter
Example1:
Section ${GetOptions} "/INSTDIR=Temp /SILENT=yes /ADMIN=qwerty" "/ADMIN=" $R0 ;$R0=qwerty SectionEnd
Example2:
Section ${GetOptions} "-INSTDIR=C:\Program Files\Common Files -SILENT=yes" "-INSTDIR=" $R0 ;$R0=C:\Program Files\Common Files SectionEnd
Example3:
Section ${GetOptions} '/SILENT=yes /INSTDIR="C:/Program Files/Common Files" /ADMIN=password' "/INSTDIR=" $R0 ;$R0=C:/Program Files/Common Files SectionEnd
Example4:
Section ${GetOptions} `-SILENT=yes -INSTDIR='"C:/Program Files/Common Files"' -ADMIN=password` "-INSTDIR=" $R0 ;$R0="C:/Program Files/Common Files" SectionEnd
The Function Code
Function GetOptions !define GetOptions `!insertmacro GetOptionsCall` !macro GetOptionsCall _PARAMETERS _OPTION _RESULT Push `${_PARAMETERS}` Push `${_OPTION}` Call GetOptions Pop ${_RESULT} !macroend Exch $1 Exch Exch $0 Exch Push $2 Push $3 Push $4 Push $5 Push $6 Push $7 StrCpy $2 $1 '' 1 StrCpy $1 $1 1 StrLen $3 $2 StrCpy $7 0 begin: StrCpy $4 -1 StrCpy $6 '' quote: IntOp $4 $4 + 1 StrCpy $5 $0 1 $4 StrCmp $5$7 '0' notfound StrCmp $5 '' trimright StrCmp $5 '"' 0 +7 StrCmp $6 '' 0 +3 StrCpy $6 '"' goto quote StrCmp $6 '"' 0 +3 StrCpy $6 '' goto quote StrCmp $5 `'` 0 +7 StrCmp $6 `` 0 +3 StrCpy $6 `'` goto quote StrCmp $6 `'` 0 +3 StrCpy $6 `` goto quote StrCmp $5 '`' 0 +7 StrCmp $6 '' 0 +3 StrCpy $6 '`' goto quote StrCmp $6 '`' 0 +3 StrCpy $6 '' goto quote StrCmp $6 '"' quote StrCmp $6 `'` quote StrCmp $6 '`' quote StrCmp $5 $1 0 quote StrCmp $7 0 trimleft trimright trimleft: IntOp $4 $4 + 1 StrCpy $5 $0 $3 $4 StrCmp $5 '' notfound StrCmp $5 $2 0 quote IntOp $4 $4 + $3 StrCpy $0 $0 '' $4 StrCpy $4 $0 1 StrCmp $4 ' ' 0 +3 StrCpy $0 $0 '' 1 goto -3 StrCpy $7 1 goto begin trimright: StrCpy $0 $0 $4 StrCpy $4 $0 1 -1 StrCmp $4 ' ' 0 +3 StrCpy $0 $0 -1 goto -3 StrCpy $3 $0 1 StrCpy $4 $0 1 -1 StrCmp $3 $4 0 end StrCmp $3 '"' +3 StrCmp $3 `'` +2 StrCmp $3 '`' 0 end StrCpy $0 $0 -1 1 goto end notfound: StrCpy $0 '' end: Pop $7 Pop $6 Pop $5 Pop $4 Pop $3 Pop $2 Pop $1 Exch $0 FunctionEnd