GetONEParameter: to get one of the command line parameters

From NSIS Wiki
Jump to navigationJump to search
Author: alexis (talk, contrib)


The Script

; -- written by Alexis de Valence --
; GetONEParameter
 
; Usage:
;   Push 3                 ; to get the 3rd parameter of the command line
;   Call GetONEParameter
;   Pop $R0                ; saves the result in $R0
; returns an empty string if not found
 
Function GetONEParameter
   Exch $R0
   Push $R1
   Push $R2
   Push $R3
   Push $R4
   Push $R5
   Push $R6
 
; init variables
   IntOp $R5 $R0 + 1
   StrCpy $R2 0
   StrCpy $R4 1
   StrCpy $R6 0
 
   loop3: ; looking for a char that's not a space
     IntOp $R2 $R2 + 1
     StrCpy $R0 $CMDLINE 1 $R2
     StrCmp $R0 " " loop3
     StrCpy $R3 $R2   ; found the beginning of the current parameter
 
 
   loop:          ; scanning for the end of the current parameter
 
     StrCpy $R0 $CMDLINE 1 $R2
     StrCmp $R0 " " loop2
     StrCmp $R0 "" last
     IntOp $R2 $R2 + 1
     Goto loop
 
   last: ; there will be no other parameter to extract
   StrCpy $R6 1
 
   loop2: ; found the end of the current parameter
 
   IntCmp $R4 $R5 0 NextParam end
   StrCpy $R6 1 ; to quit after this process
 
   IntOp $R1 $R2 - $R3 ;number of letter of current parameter
   StrCpy $R0 $CMDLINE $R1 $R3        ; stores the result in R0
 
   NextParam:
   IntCmp $R6 1 end ; leave if found or if not enough parameters
 
   ; process the next parameter
   IntOp $R4 $R4 + 1
 
   Goto loop3
 
   end:
 
   Pop $R6  ; restore R0 - R6 to their initial value
   Pop $R5
   Pop $R4
   Pop $R3
   Pop $R2
   Pop $R1
 
   Exch $R0    ;Puts the result on the stack
 
 FunctionEnd