WordInsert: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
m (Adding new author and category links.)
No edit summary
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
{{PageAuthor|Instructor}}
{{PageAuthor|Instructor}}


== Links ==
{{User:Instructor/Headers/Template}}
; Latest version of headers "nsh.zip":
: http://forums.winamp.com/showthread.php?s=&threadid=203228&goto=lastpost


If function used without header then put function in script before call it.
== Function Description ==


== The Function ==
<highlight-nsis>
<highlight-nsis>/*
____________________________________________________________________________
______________________________________________________________________________


                         WordInsert v1.3
                         WordInsert v1.3
______________________________________________________________________________
____________________________________________________________________________


WordFind required


Insert word in string.
Insert word in string.
Line 43: Line 39:
                     ;
                     ;
$var                ;output (result)
$var                ;output (result)
</highlight-nsis>




Example (1):
<b>Example (1):</b>
Section
<highlight-nsis>Section
${WordInsert} "C:\io.sys C:\WINDOWS" " " "C:\logo.sys" "-2" $R0
${WordInsert} "C:\io.sys C:\WINDOWS" " " "C:\logo.sys" "-2" $R0
; $R0="C:\io.sys C:\logo.sys C:\WINDOWS"
; $R0="C:\io.sys C:\logo.sys C:\WINDOWS"
SectionEnd
SectionEnd
</highlight-nsis>


Example (2):
<b>Example (2):</b>
Section
<highlight-nsis>Section
${WordInsert} "C:\io.sys" " " "C:\WINDOWS" "+2" $R0
${WordInsert} "C:\io.sys" " " "C:\WINDOWS" "+2" $R0
; $R0="C:\io.sys C:\WINDOWS"
; $R0="C:\io.sys C:\WINDOWS"
SectionEnd
SectionEnd
</highlight-nsis>


Example (3):
<b>Example (3):</b>
Section
<highlight-nsis>Section
${WordInsert} "" " " "C:\WINDOWS" "+1" $R0
${WordInsert} "" " " "C:\WINDOWS" "+1" $R0
; $R0="C:\WINDOWS "
; $R0="C:\WINDOWS "
SectionEnd
SectionEnd
</highlight-nsis>


Example (With errorlevel output):
<b>Example (With errorlevel output):</b>
Section
<highlight-nsis>Section
${WordInsert} "C:\io.sys C:\logo.sys" " " "C:\logo.sys" "E+4" $R0
${WordInsert} "C:\io.sys C:\logo.sys" " " "C:\logo.sys" "E+4" $R0
; $R0="2" (wrong word number "+4")
; $R0="2" (wrong word number "+4")
Line 75: Line 75:


end:
end:
SectionEnd*/
SectionEnd
 
</highlight-nsis>


;---------------------------------------------------------------------------
== Function Code ==


<highlight-nsis>
Function WordInsert
Function WordInsert
!define WordInsert `!insertmacro WordInsertCall`
!define WordInsert `!insertmacro WordInsertCall`

Latest revision as of 11:25, 30 November 2005

Author: Instructor (talk, contrib)


Page for NSIS 2.07 and below users

You can use the latest version of headers (recommended) or the following function code (put the function code in your script before calling it)

Function Description

____________________________________________________________________________
 
                         WordInsert v1.3
____________________________________________________________________________
 
 
Insert word in string.
 
 
Syntax:
${WordInsert} "[string]" "[delimiter]" "[word]" "[E][options]" $var
 
"[string]"          ;[string]
                    ;  input string
"[delimiter]"       ;[delimiter]
                    ;  one or several symbols
"[word]"            ;[word]
                    ;  word to insert
"[E][options]"      ;[options]
                    ;  +number  : word number from start
                    ;  -number  : word number from end
                    ;
                    ;[E]
                    ;  with errorlevel output
                    ;  IfErrors:
                    ;     $var=1  delimiter is empty
                    ;     $var=2  wrong word number
                    ;     $var=3  syntax error (Use: +1,-1)
                    ;[]
                    ;  no errorlevel output (default)
                    ;  If some errors found then (result=input string)
                    ;
$var                ;output (result)


Example (1):

Section
	${WordInsert} "C:\io.sys C:\WINDOWS" " " "C:\logo.sys" "-2" $R0
	; $R0="C:\io.sys C:\logo.sys C:\WINDOWS"
SectionEnd

Example (2):

Section
	${WordInsert} "C:\io.sys" " " "C:\WINDOWS" "+2" $R0
	; $R0="C:\io.sys C:\WINDOWS"
SectionEnd

Example (3):

Section
	${WordInsert} "" " " "C:\WINDOWS" "+1" $R0
	; $R0="C:\WINDOWS "
SectionEnd

Example (With errorlevel output):

Section
	${WordInsert} "C:\io.sys C:\logo.sys" " " "C:\logo.sys" "E+4" $R0
	; $R0="2" (wrong word number "+4")
 
	IfErrors 0 noerrors
	MessageBox MB_OK 'Errorlevel=$R0' IDOK end
 
	noerrors:
	MessageBox MB_OK 'No errors'
 
	end:
SectionEnd

Function Code

Function WordInsert
	!define WordInsert `!insertmacro WordInsertCall`
 
	!macro WordInsertCall _STRING _DELIMITER _WORD _NUMBER _RESULT
		Push `${_STRING}`
		Push `${_DELIMITER}`
		Push `${_WORD}`
		Push `${_NUMBER}`
		Call WordInsert
		Pop ${_RESULT}
	!macroend
 
	Exch $2
	Exch
	Exch $1
	Exch
	Exch 2
	Exch $0
	Exch 2
	Exch 3
	Exch $R0
	Exch 3
	Push $3
	Push $4
	Push $5
	Push $6
	Push $7
	Push $8
	Push $9
	Push $R1
	ClearErrors
 
	StrCpy $5 ''
	StrCpy $6 $0
	StrCpy $7 }
 
	StrCpy $9 ''
	StrCpy $R1 $R0
	StrCpy $3 $2 1
	StrCpy $2 $2 '' 1
	StrCmp $3 'E' 0 +3
	StrCpy $9 'E'
	goto -4
 
	StrCmp $3 '+' +2
	StrCmp $3 '-' 0 error3
	IntOp $2 $2 + 0
	StrCmp $2 0 error2
	StrCmp $0 '' error1
 
	StrCmp $2 1 0 two
	GetLabelAddress $8 oneback
	StrCmp $3 '+' call
	StrCpy $7 {
	goto call
	oneback:
	IfErrors 0 +2
	StrCpy $4 $R0
	StrCmp $3 '+' 0 +3
	StrCpy $R0 '$1$0$4'
	goto end
	StrCpy $R0 '$4$0$1'
	goto end
 
	two:
	IntOp $2 $2 - 1
	GetLabelAddress $8 twoback
	StrCmp $3 '+' 0 call
	StrCpy $7 {
	goto call
	twoback:
	IfErrors 0 tree
	StrCmp $2$4 11 0 error2
	StrCmp $3 '+' 0 +3
	StrCpy $R0 '$R0$0$1'
	goto end
	StrCpy $R0 '$1$0$R0'
	goto end
 
	tree:
	StrCpy $7 }
	StrCpy $5 $4
	IntOp $2 $2 + 1
	GetLabelAddress $8 treeback
	StrCmp $3 '+' call
	StrCpy $7 {
	goto call
	treeback:
	IfErrors 0 +3
	StrCpy $4 ''
	StrCpy $6 ''
	StrCmp $3 '+' 0 +3
	StrCpy $R0 '$5$0$1$6$4'
	goto end
	StrCpy $R0 '$4$6$1$0$5'
	goto end
 
	call:	
	Push '$R0'
	Push '$0'
	Push 'E$3$2*$7'
	Call WordFind
	Pop $4
	goto $8
 
	error3:
	StrCpy $R0 3
	goto error
	error2:
	StrCpy $R0 2
	goto error
	error1:
	StrCpy $R0 1
	error:
	StrCmp $9 'E' +3
	StrCpy $R0 $R1
	goto +2
	SetErrors
 
	end:
	Pop $R1
	Pop $9
	Pop $8
	Pop $7
	Pop $6
	Pop $5
	Pop $4
	Pop $3
	Pop $2
	Pop $1
	Pop $0
	Exch $R0
FunctionEnd