Obtaining select command line parameters: Difference between revisions
From NSIS Wiki
Jump to navigationJump to search
m (Wikipedia python library) |
|||
Line 7: | Line 7: | ||
[USAGE] | [USAGE] | ||
${CMDPAR} [TAG] [Variable for result] | ${CMDPAR} [TAG] [Variable for result] | ||
[Tag] is | [Tag] is a unique string to identify the parameter (ie "/B=", etc.) | ||
[Variable for result] is the variable in which to hold the result | [Variable for result] is the variable in which to hold the result | ||
[RULES] | [RULES] | ||
- Each parameter value must start with the character indicated by PARAM_CHAR. | - Each parameter value must start with the character indicated by PARAM_CHAR. | ||
- This function will not verify any parameter--this will be up to the script | |||
developer! | |||
- This function will not verify any parameter | |||
- Parameters CANNOT be "nested" (a parameter within a parameter) | - Parameters CANNOT be "nested" (a parameter within a parameter) | ||
- The function takes advantage of the StrCmp function, which is | - The function takes advantage of the StrCmp function, which is | ||
NOT case-sensative. (In other works "/l" and "/L" will be the same) | |||
- This function assumes that $CMDLINE will always have quotes around the actual | - This function assumes that $CMDLINE will always have quotes around the actual | ||
SETUP.EXE file | SETUP.EXE file (example: "C:\my path\setup.exe" /b=parameter) | ||
- The return value will be trimmed automatically (no spaces at either end) | - The return value will be trimmed automatically (no spaces at either end) | ||
[VARIABLES] | [VARIABLES] | ||
Line 24: | Line 23: | ||
$1 (int): Pointer value indicating the current position in the search string | $1 (int): Pointer value indicating the current position in the search string | ||
$2 (str): string value of the parameter portion of the command line | $2 (str): string value of the parameter portion of the command line | ||
$3 (str): value of the parameter (When $3=$0, | $3 (str): Final value of the parameter (When $3=$0, stop copying the | ||
$4 (bln): | parameter to $R1) | ||
$4 (bln): A 1 or 0 value indicating when to start/stop adding characters | |||
$5 (int): | to the parameter result (1 means start, 0 means stop) | ||
$5 (int): Total Length of the $CMDLINE variable, including the parameter part | |||
$6 (int): Single-character string of each character in the parameter field | $6 (int): Single-character string of each character in the parameter field | ||
$R1 (str): Value of the requested parameter value | $R1 (str): Value of the requested parameter value |
Revision as of 04:20, 13 April 2005
The Script
/* This function will search for the requested command-line option and return the value. If the value is not found, the function returns an empty string. [USAGE] ${CMDPAR} [TAG] [Variable for result] [Tag] is a unique string to identify the parameter (ie "/B=", etc.) [Variable for result] is the variable in which to hold the result [RULES] - Each parameter value must start with the character indicated by PARAM_CHAR. - This function will not verify any parameter--this will be up to the script developer! - Parameters CANNOT be "nested" (a parameter within a parameter) - The function takes advantage of the StrCmp function, which is NOT case-sensative. (In other works "/l" and "/L" will be the same) - This function assumes that $CMDLINE will always have quotes around the actual SETUP.EXE file (example: "C:\my path\setup.exe" /b=parameter) - The return value will be trimmed automatically (no spaces at either end) [VARIABLES] $0 (str): string indicating the what the format of the command should be (example: "/B") $1 (int): Pointer value indicating the current position in the search string $2 (str): string value of the parameter portion of the command line $3 (str): Final value of the parameter (When $3=$0, stop copying the parameter to $R1) $4 (bln): A 1 or 0 value indicating when to start/stop adding characters to the parameter result (1 means start, 0 means stop) $5 (int): Total Length of the $CMDLINE variable, including the parameter part $6 (int): Single-character string of each character in the parameter field $R1 (str): Value of the requested parameter value $7 (int): Temporary variable for holding numbers */ !macro CMDPAR Tag OutVar Push ${TAG} Call GetParameters Pop ${OutVar} !macroend !define CMDPAR "!insertmacro CMDPAR" Function GetParameters ; all parameters must start with PARAM_CHAR. (Change value as needed.) !define PARAM_CHAR "/" Exch $0 ; $0 now contains the TAG string Push $R1 Push $1 Push $2 Push $3 Push $4 Push $5 Push $6 Push $7 StrCpy $1 0 ; Initialize the pointer variable StrLen $5 $CMDLINE FindParam: ; Start loop to find the parameter portion of the $CMDLINE IntOp $1 $1 + 1 StrCpy $6 $CMDLINE 1 $1 StrCmp $6 '"' ExitFindParam 0 ; Exit the loop when the last quotes are found Goto FindParam ExitFindParam: IntOp $1 $1 + 2 ; Increment pointer one space to move it one character past the quotes IntOp $7 $5 - $1 ; Difference between total string length and the length of the parameter portion IntCmp $7 0 ParamDone ParamDone 0 ;If this value is zero, then no parameters have been defined (exit) ;MessageBox MB_YESNO|MB_ICONQUESTION "Difference between total string length and the length of the parameter portion: $7$\n$\r$\n$\rContinue?" IDNO ParamDone StrCpy $2 $CMDLINE $7 $1 ;MessageBox MB_OK "Parameter portion: [$2]" StrCpy $2 "X$2" ; Add one character to the start of the parameter string StrCpy $1 0 ; Reset the pointer StrCpy $4 0 ; keep characters from being copied to $R1 until we've found a match to the parameter tag FindParamValue: ;Start loop to find the requested parameter value IntOp $1 $1 + 1 strCpy $6 $2 1 $1 ;MessageBox MB_YESNO|MB_ICONQUESTION "Character value: [$6]$\r$\n$$PARAM_CHAR: [${PARAM_CHAR}]$\r$\nContinue?" IDNO PARAMDONE StrCmp $6 "" ParamDone 0 ;Exit if this is the end of the parameter string StrCmp $6 ${PARAM_CHAR} Reset4 NoReset4 ; Reset $4 if this is a new parameter Reset4: ;StrCpy $R1 "" StrCpy $4 0 StrCpy $3 "" NoReset4: StrCpy $3 "$3$6" IntCmp $4 0 NoBuildR1 BuildR1 BuildR1: StrCpy $R1 "$R1$6" NoBuildR1: ;MessageBox MB_YESNO|MB_ICONQUESTION "$$3: [$3]$\r$\n$$0: [$0]$\r$\n$\r$\nContinue?" IDNO PARAMDONE StrCmp $3 $0 0 FindParamValue StrCpy $4 1 Goto FindParamValue ParamDone: ; This last part of the script will trim the spaces off either end of $R1: StrCpy $2 "X$R1" strCpy $R1 "" StrCpy $1 0 KeepTrimming: IntOp $1 $1 + 1 strCpy $6 $2 1 $1 StrCmp $6 "" DoneTrimming 0 strCmp $6 " " NoCopyCharR1 CopyCharR1 copyCharR1: StrCpy $R1 "$R1$6" Goto KeepTrimming NoCopyCharR1: Goto KeepTrimming DoneTrimming: Pop $7 Pop $6 Pop $5 Pop $4 Pop $3 Pop $2 Pop $1 Pop $0 Push $R1 !undef PARAM_CHAR FunctionEnd
Page author: comperio