WordInsert: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
m (Adding new author and category links.)
No edit summary
Line 2: Line 2:


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


If function used without header then put function in script before call it.
If a function is used without header, put the function code in your script before calling it.
 
== The 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 44:
                     ;
                     ;
$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 80:


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


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


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

Revision as of 14:11, 4 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

____________________________________________________________________________
 
                         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

The 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