StrFunc 1.09 by deguix:
- Fixed stack problems involving: StrCase, StrRep, StrSort, StrTok. - Fixed StrClb: When "Action" = "<>", handle was wrongly outputed as text. - Fixed StrSort, StrStrAdv documentation examples. - Fixed StrIOToNSIS, StrLoc, StrNSISToIO, StrRep, StrStr: sometimes didn't find "StrToSearch" at all. git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@3746 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
42af15470f
commit
eb00ff12cc
3 changed files with 288 additions and 153 deletions
|
@ -31,12 +31,60 @@ ${UnStrTok}
|
|||
${UnStrTrimNewLines}
|
||||
${UnStrSort}
|
||||
|
||||
!macro StackVerificationStart
|
||||
StrCpy $0 S0
|
||||
StrCpy $1 S1
|
||||
StrCpy $2 S2
|
||||
StrCpy $3 S3
|
||||
StrCpy $4 S4
|
||||
StrCpy $5 S5
|
||||
StrCpy $6 S6
|
||||
StrCpy $7 S7
|
||||
StrCpy $8 S8
|
||||
StrCpy $9 S9
|
||||
StrCpy $R0 SR0
|
||||
StrCpy $R1 SR1
|
||||
StrCpy $R2 SR2
|
||||
StrCpy $R3 SR3
|
||||
StrCpy $R4 SR4
|
||||
StrCpy $R5 SR5
|
||||
StrCpy $R6 SR6
|
||||
StrCpy $R7 SR7
|
||||
StrCpy $R8 SR8
|
||||
StrCpy $R9 SR9
|
||||
!macroend
|
||||
|
||||
!macro StackVerificationEnd
|
||||
ClearErrors
|
||||
${If} $1 != "S1"
|
||||
${OrIf} $2 != "S2"
|
||||
${OrIf} $3 != "S3"
|
||||
${OrIf} $4 != "S4"
|
||||
${OrIf} $5 != "S5"
|
||||
${OrIf} $6 != "S6"
|
||||
${OrIf} $7 != "S7"
|
||||
${OrIf} $8 != "S8"
|
||||
${OrIf} $9 != "S9"
|
||||
${OrIf} $R0 != "SR0"
|
||||
${OrIf} $R1 != "SR1"
|
||||
${OrIf} $R2 != "SR2"
|
||||
${OrIf} $R3 != "SR3"
|
||||
${OrIf} $R4 != "SR4"
|
||||
${OrIf} $R5 != "SR5"
|
||||
${OrIf} $R6 != "SR6"
|
||||
${OrIf} $R7 != "SR7"
|
||||
${OrIf} $R8 != "SR8"
|
||||
${OrIf} $R9 != "SR9"
|
||||
SetErrors
|
||||
${EndIf}
|
||||
!macroend
|
||||
|
||||
Section
|
||||
|
||||
# Test case conversion
|
||||
!insertmacro StackVerificationStart
|
||||
${StrCase} $0 "This is just an example. A very simple one." ""
|
||||
StrCmp $0 "This is just an example. A very simple one." 0 strcaseerror
|
||||
|
||||
${StrCase} $0 "THIS IS JUST AN EXAMPLE. A VERY SIMPLE ONE." "S"
|
||||
StrCmp $0 "This is just an example. A very simple one." 0 strcaseerror
|
||||
${StrCase} $0 "This is just an example. A very simple one." "L"
|
||||
|
@ -47,15 +95,14 @@ Section
|
|||
StrCmp $0 "This Is Just An Example. A Very Simple One." 0 strcaseerror
|
||||
${StrCase} $0 "This is just an example. A very simple one." "<>"
|
||||
StrCmp $0 "tHIS IS JUST AN EXAMPLE. a VERY SIMPLE ONE." 0 strcaseerror
|
||||
|
||||
${StrCase} $0 "123456789!@#%^&*()-_=+[]{};:,./<>?" "S"
|
||||
StrCmp $0 "123456789!@#%^&*()-_=+[]{};:,./<>?" 0 strcaseerror
|
||||
|
||||
${StrCase} $0 "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#%^&*()abcdefghijklmnopqrstuvwxyz-_=+[]{};:,./<>?" "<>"
|
||||
StrCmp $0 "123456789abcdefghijklmnopqrstuvwxyz!@#%^&*()ABCDEFGHIJKLMNOPQRSTUVWXYZ-_=+[]{};:,./<>?" 0 strcaseerror
|
||||
|
||||
${StrCase} $0 "what about taking a shower tomorrow? it's late to do so now! try to sleep now. Good Night!" "S"
|
||||
StrCmp $0 "What about taking a shower tomorrow? It's late to do so now! Try to sleep now. Good night!" 0 strcaseerror
|
||||
!insertmacro StackVerificationEnd
|
||||
IfErrors strcaseerror
|
||||
|
||||
DetailPrint "PASSED StrCase test"
|
||||
Goto +2
|
||||
|
@ -63,16 +110,25 @@ strcaseerror:
|
|||
DetailPrint "FAILED StrCase test"
|
||||
|
||||
# Test clipboard function
|
||||
!insertmacro StackVerificationStart
|
||||
${StrClb} $0 "StrFunc clipboard test" ">"
|
||||
${StrClb} $0 "" "<"
|
||||
StrCmp $0 "" 0 strclberror
|
||||
${StrClb} $0 "StrFunc clipboard test #2" "<>"
|
||||
StrCmp $0 "StrFunc clipboard test" 0 strclberror
|
||||
|
||||
${StrClb} $0 "" "<"
|
||||
StrCmp $0 "StrFunc clipboard test #2" 0 strclberror
|
||||
${StrClb} $0 "" ""
|
||||
StrCmp $0 "" 0 strclberror
|
||||
!insertmacro StackVerificationEnd
|
||||
IfErrors strclberror
|
||||
|
||||
DetailPrint "PASSED StrClb test"
|
||||
Goto +2
|
||||
strclberror:
|
||||
DetailPrint "FAILED StrClb test"
|
||||
|
||||
# Test IO functions
|
||||
!insertmacro StackVerificationStart
|
||||
!macro testio str
|
||||
${StrNSISToIO} $0 "${str}"
|
||||
${StrIOToNSIS} $0 $0
|
||||
|
@ -86,12 +142,16 @@ strclberror:
|
|||
!insertmacro testio "$\r \ $\t $\n $$"
|
||||
!insertmacro testio ""
|
||||
!insertmacro testio " "
|
||||
!insertmacro StackVerificationEnd
|
||||
IfErrors ioerror
|
||||
|
||||
DetailPrint "PASSED StrNSISToIO/StrIOToNSIS test"
|
||||
Goto +2
|
||||
ioerror:
|
||||
DetailPrint "FAILED StrNSISToIO/StrIOToNSIS test"
|
||||
|
||||
# Test string search functions
|
||||
!insertmacro StackVerificationStart
|
||||
${StrLoc} $0 "This is just an example" "just" "<"
|
||||
StrCmp $0 "11" 0 strlocerror
|
||||
${StrLoc} $0 a abc <
|
||||
|
@ -112,12 +172,16 @@ ioerror:
|
|||
StrCmp $0 "0" 0 strlocerror
|
||||
${StrLoc} $0 abc d <
|
||||
StrCmp $0 "" 0 strlocerror
|
||||
!insertmacro StackVerificationEnd
|
||||
IfErrors strlocerror
|
||||
|
||||
DetailPrint "PASSED StrLoc test"
|
||||
Goto +2
|
||||
strlocerror:
|
||||
DetailPrint "FAILED StrLoc test"
|
||||
|
||||
# Test string replacement
|
||||
!insertmacro StackVerificationStart
|
||||
${StrRep} $0 "This is just an example" "an" "one"
|
||||
StrCmp $0 "This is just one example" 0 strreperror
|
||||
${StrRep} $0 "test... test... 1 2 3..." "test" "testing"
|
||||
|
@ -132,12 +196,16 @@ strlocerror:
|
|||
StrCmp $0 "test" 0 strreperror
|
||||
${StrRep} $0 "test" "" ""
|
||||
StrCmp $0 "test" 0 strreperror
|
||||
!insertmacro StackVerificationEnd
|
||||
IfErrors strreperror
|
||||
|
||||
DetailPrint "PASSED StrRep test"
|
||||
Goto +2
|
||||
strreperror:
|
||||
DetailPrint "FAILED StrRep test"
|
||||
|
||||
# Test sorting
|
||||
!insertmacro StackVerificationStart
|
||||
${StrSort} $0 "This is just an example" "" " just" "ple" "0" "0" "0"
|
||||
StrCmp $0 "This is an exam" 0 strsorterror
|
||||
${StrSort} $0 "This is just an example" " " "j" " " "0" "" "0"
|
||||
|
@ -176,11 +244,15 @@ strreperror:
|
|||
StrCmp $0 " rror " 0 strsorterror
|
||||
${StrSort} $0 "" " " "something" " " "1" "0" "1"
|
||||
StrCmp $0 "" 0 strsorterror
|
||||
!insertmacro StackVerificationEnd
|
||||
IfErrors strsorterror
|
||||
|
||||
DetailPrint "PASSED StrSort test"
|
||||
Goto +2
|
||||
strsorterror:
|
||||
DetailPrint "FAILED StrSort test"
|
||||
|
||||
!insertmacro StackVerificationStart
|
||||
${StrStr} $0 "abcefghijklmnopqrstuvwxyz" "g"
|
||||
StrCmp $0 "ghijklmnopqrstuvwxyz" 0 strstrerror
|
||||
${StrStr} $0 "abcefghijklmnopqrstuvwxyz" "ga"
|
||||
|
@ -189,11 +261,15 @@ strsorterror:
|
|||
StrCmp $0 "abcefghijklmnopqrstuvwxyz" 0 strstrerror
|
||||
${StrStr} $0 "a" "abcefghijklmnopqrstuvwxyz"
|
||||
StrCmp $0 "" 0 strstrerror
|
||||
!insertmacro StackVerificationEnd
|
||||
IfErrors strstrerror
|
||||
|
||||
DetailPrint "PASSED StrStr test"
|
||||
Goto +2
|
||||
strstrerror:
|
||||
DetailPrint "FAILED StrStr test"
|
||||
|
||||
!insertmacro StackVerificationStart
|
||||
${StrStrAdv} $0 "abcabcabc" "a" ">" ">" "1" "0" "0"
|
||||
StrCmp $0 "abcabcabc" 0 strstradverror
|
||||
${StrStrAdv} $0 "abcabcabc" "a" ">" ">" "1" "1" "0"
|
||||
|
@ -214,7 +290,6 @@ strstrerror:
|
|||
StrCmp $0 "" 0 strstradverror
|
||||
${StrStrAdv} $0 "abcabcabc" "abc" "<" ">" "0" "1" "0"
|
||||
StrCmp $0 "abc" 0 strstradverror
|
||||
|
||||
${StrStrAdv} $0 "ABCabcabc" "a" ">" ">" "1" "0" "1"
|
||||
StrCmp $0 "abcabc" 0 strstradverror
|
||||
${StrStrAdv} $0 "ABCabcabc" "a" ">" ">" "1" "1" "1"
|
||||
|
@ -235,12 +310,16 @@ strstrerror:
|
|||
StrCmp $0 "" 0 strstradverror
|
||||
${StrStrAdv} $0 "ABCabcabc" "abc" "<" ">" "0" "1" "1"
|
||||
StrCmp $0 "abc" 0 strstradverror
|
||||
!insertmacro StackVerificationEnd
|
||||
IfErrors strstradverror
|
||||
|
||||
DetailPrint "PASSED StrStrAdv test"
|
||||
Goto +2
|
||||
strstradverror:
|
||||
DetailPrint "FAILED StrStrAdv test"
|
||||
|
||||
# Test tokenizer
|
||||
!insertmacro StackVerificationStart
|
||||
${StrTok} $0 "This is, or is not, just an example" " ," "4" "1"
|
||||
StrCmp $0 "not" 0 strtokerror
|
||||
${StrTok} $0 "This is, or is not, just an example" " ," "4" "0"
|
||||
|
@ -253,17 +332,25 @@ strstradverror:
|
|||
StrCmp $0 "example" 0 strtokerror
|
||||
${StrTok} $0 "This is, or is not, just an example" " ," "0" "0"
|
||||
StrCmp $0 "This" 0 strtokerror
|
||||
!insertmacro StackVerificationEnd
|
||||
IfErrors strtokerror
|
||||
|
||||
DetailPrint "PASSED StrTok test"
|
||||
Goto +2
|
||||
strtokerror:
|
||||
DetailPrint "FAILED StrTok test"
|
||||
|
||||
# Test trim new lines
|
||||
!insertmacro StackVerificationStart
|
||||
${StrTrimNewLines} $0 "$\r$\ntest$\r$\ntest$\r$\n"
|
||||
StrCmp $0 "$\r$\ntest$\r$\ntest" +3
|
||||
DetailPrint "FAILED StrTrimNewLines test"
|
||||
Goto +2
|
||||
DetailPrint "PASSED StrTrimNewLines test"
|
||||
StrCmp $0 "$\r$\ntest$\r$\ntest" 0 strtrimnewlineserror
|
||||
!insertmacro StackVerificationEnd
|
||||
IfErrors strtrimnewlineserror
|
||||
|
||||
DetailPrint "PASSED StrTrimNewLines test"
|
||||
Goto +2
|
||||
strtrimnewlineserror:
|
||||
DetailPrint "FAILED StrTrimNewLines test"
|
||||
|
||||
WriteUninstaller $EXEDIR\UnStrFunc.exe
|
||||
|
||||
|
@ -274,9 +361,9 @@ SectionEnd
|
|||
Section Uninstall
|
||||
|
||||
# Test case conversion
|
||||
!insertmacro StackVerificationStart
|
||||
${UnStrCase} $0 "This is just an example. A very simple one." ""
|
||||
StrCmp $0 "This is just an example. A very simple one." 0 strcaseerror
|
||||
|
||||
${UnStrCase} $0 "THIS IS JUST AN EXAMPLE. A VERY SIMPLE ONE." "S"
|
||||
StrCmp $0 "This is just an example. A very simple one." 0 strcaseerror
|
||||
${UnStrCase} $0 "This is just an example. A very simple one." "L"
|
||||
|
@ -287,15 +374,14 @@ Section Uninstall
|
|||
StrCmp $0 "This Is Just An Example. A Very Simple One." 0 strcaseerror
|
||||
${UnStrCase} $0 "This is just an example. A very simple one." "<>"
|
||||
StrCmp $0 "tHIS IS JUST AN EXAMPLE. a VERY SIMPLE ONE." 0 strcaseerror
|
||||
|
||||
${UnStrCase} $0 "123456789!@#%^&*()-_=+[]{};:,./<>?" "S"
|
||||
StrCmp $0 "123456789!@#%^&*()-_=+[]{};:,./<>?" 0 strcaseerror
|
||||
|
||||
${UnStrCase} $0 "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#%^&*()abcdefghijklmnopqrstuvwxyz-_=+[]{};:,./<>?" "<>"
|
||||
StrCmp $0 "123456789abcdefghijklmnopqrstuvwxyz!@#%^&*()ABCDEFGHIJKLMNOPQRSTUVWXYZ-_=+[]{};:,./<>?" 0 strcaseerror
|
||||
|
||||
${UnStrCase} $0 "what about taking a shower tomorrow? it's late to do so now! try to sleep now. Good Night!" "S"
|
||||
StrCmp $0 "What about taking a shower tomorrow? It's late to do so now! Try to sleep now. Good night!" 0 strcaseerror
|
||||
!insertmacro StackVerificationEnd
|
||||
IfErrors strcaseerror
|
||||
|
||||
DetailPrint "PASSED StrCase test"
|
||||
Goto +2
|
||||
|
@ -303,9 +389,17 @@ strcaseerror:
|
|||
DetailPrint "FAILED StrCase test"
|
||||
|
||||
# Test clipboard function
|
||||
!insertmacro StackVerificationStart
|
||||
${UnStrClb} $0 "StrFunc clipboard test" ">"
|
||||
${UnStrClb} $0 "" "<"
|
||||
StrCmp $0 "" 0 strclberror
|
||||
${UnStrClb} $0 "StrFunc clipboard test #2" "<>"
|
||||
StrCmp $0 "StrFunc clipboard test" 0 strclberror
|
||||
${UnStrClb} $0 "" "<"
|
||||
StrCmp $0 "StrFunc clipboard test #2" 0 strclberror
|
||||
${UnStrClb} $0 "" ""
|
||||
StrCmp $0 "" 0 strclberror
|
||||
!insertmacro StackVerificationEnd
|
||||
IfErrors strclberror
|
||||
|
||||
DetailPrint "PASSED StrClb test"
|
||||
Goto +2
|
||||
|
@ -313,6 +407,7 @@ strclberror:
|
|||
DetailPrint "FAILED StrClb test"
|
||||
|
||||
# Test IO functions
|
||||
!insertmacro StackVerificationStart
|
||||
!macro untestio str
|
||||
${UnStrNSISToIO} $0 "${str}"
|
||||
${UnStrIOToNSIS} $0 $0
|
||||
|
@ -326,12 +421,16 @@ strclberror:
|
|||
!insertmacro untestio "$\r \ $\t $\n $$"
|
||||
!insertmacro untestio ""
|
||||
!insertmacro untestio " "
|
||||
!insertmacro StackVerificationEnd
|
||||
IfErrors ioerror
|
||||
|
||||
DetailPrint "PASSED StrNSISToIO/StrIOToNSIS test"
|
||||
Goto +2
|
||||
ioerror:
|
||||
DetailPrint "FAILED StrNSISToIO/StrIOToNSIS test"
|
||||
|
||||
# Test string search functions
|
||||
!insertmacro StackVerificationStart
|
||||
${UnStrLoc} $0 "This is just an example" "just" "<"
|
||||
StrCmp $0 "11" 0 strlocerror
|
||||
${UnStrLoc} $0 a abc <
|
||||
|
@ -352,12 +451,16 @@ ioerror:
|
|||
StrCmp $0 "0" 0 strlocerror
|
||||
${UnStrLoc} $0 abc d <
|
||||
StrCmp $0 "" 0 strlocerror
|
||||
!insertmacro StackVerificationEnd
|
||||
IfErrors strlocerror
|
||||
|
||||
DetailPrint "PASSED StrLoc test"
|
||||
Goto +2
|
||||
strlocerror:
|
||||
DetailPrint "FAILED StrLoc test"
|
||||
|
||||
# Test string replacement
|
||||
!insertmacro StackVerificationStart
|
||||
${UnStrRep} $0 "This is just an example" "an" "one"
|
||||
StrCmp $0 "This is just one example" 0 strreperror
|
||||
${UnStrRep} $0 "test... test... 1 2 3..." "test" "testing"
|
||||
|
@ -372,12 +475,16 @@ strlocerror:
|
|||
StrCmp $0 "test" 0 strreperror
|
||||
${UnStrRep} $0 "test" "" ""
|
||||
StrCmp $0 "test" 0 strreperror
|
||||
!insertmacro StackVerificationEnd
|
||||
IfErrors strreperror
|
||||
|
||||
DetailPrint "PASSED StrRep test"
|
||||
Goto +2
|
||||
strreperror:
|
||||
DetailPrint "FAILED StrRep test"
|
||||
|
||||
# Test sorting
|
||||
!insertmacro StackVerificationStart
|
||||
${UnStrSort} $0 "This is just an example" "" " just" "ple" "0" "0" "0"
|
||||
StrCmp $0 "This is an exam" 0 strsorterror
|
||||
${UnStrSort} $0 "This is just an example" " " "j" " " "0" "" "0"
|
||||
|
@ -416,11 +523,15 @@ strreperror:
|
|||
StrCmp $0 " rror " 0 strsorterror
|
||||
${UnStrSort} $0 "" " " "something" " " "1" "0" "1"
|
||||
StrCmp $0 "" 0 strsorterror
|
||||
!insertmacro StackVerificationEnd
|
||||
IfErrors strsorterror
|
||||
|
||||
DetailPrint "PASSED StrSort test"
|
||||
Goto +2
|
||||
strsorterror:
|
||||
DetailPrint "FAILED StrSort test"
|
||||
|
||||
!insertmacro StackVerificationStart
|
||||
${UnStrStr} $0 "abcefghijklmnopqrstuvwxyz" "g"
|
||||
StrCmp $0 "ghijklmnopqrstuvwxyz" 0 strstrerror
|
||||
${UnStrStr} $0 "abcefghijklmnopqrstuvwxyz" "ga"
|
||||
|
@ -429,11 +540,15 @@ strsorterror:
|
|||
StrCmp $0 "abcefghijklmnopqrstuvwxyz" 0 strstrerror
|
||||
${UnStrStr} $0 "a" "abcefghijklmnopqrstuvwxyz"
|
||||
StrCmp $0 "" 0 strstrerror
|
||||
!insertmacro StackVerificationEnd
|
||||
IfErrors strstrerror
|
||||
|
||||
DetailPrint "PASSED StrStr test"
|
||||
Goto +2
|
||||
strstrerror:
|
||||
DetailPrint "FAILED StrStr test"
|
||||
|
||||
!insertmacro StackVerificationStart
|
||||
${UnStrStrAdv} $0 "abcabcabc" "a" ">" ">" "1" "0" "0"
|
||||
StrCmp $0 "abcabcabc" 0 strstradverror
|
||||
${UnStrStrAdv} $0 "abcabcabc" "a" ">" ">" "1" "1" "0"
|
||||
|
@ -454,7 +569,6 @@ strstrerror:
|
|||
StrCmp $0 "" 0 strstradverror
|
||||
${UnStrStrAdv} $0 "abcabcabc" "abc" "<" ">" "0" "1" "0"
|
||||
StrCmp $0 "abc" 0 strstradverror
|
||||
|
||||
${UnStrStrAdv} $0 "ABCabcabc" "a" ">" ">" "1" "0" "1"
|
||||
StrCmp $0 "abcabc" 0 strstradverror
|
||||
${UnStrStrAdv} $0 "ABCabcabc" "a" ">" ">" "1" "1" "1"
|
||||
|
@ -475,12 +589,16 @@ strstrerror:
|
|||
StrCmp $0 "" 0 strstradverror
|
||||
${UnStrStrAdv} $0 "ABCabcabc" "abc" "<" ">" "0" "1" "1"
|
||||
StrCmp $0 "abc" 0 strstradverror
|
||||
!insertmacro StackVerificationEnd
|
||||
IfErrors strstradverror
|
||||
|
||||
DetailPrint "PASSED StrStrAdv test"
|
||||
Goto +2
|
||||
strstradverror:
|
||||
DetailPrint "FAILED StrStrAdv test"
|
||||
|
||||
# Test tokenizer
|
||||
!insertmacro StackVerificationStart
|
||||
${UnStrTok} $0 "This is, or is not, just an example" " ," "4" "1"
|
||||
StrCmp $0 "not" 0 strtokerror
|
||||
${UnStrTok} $0 "This is, or is not, just an example" " ," "4" "0"
|
||||
|
@ -493,16 +611,24 @@ strstradverror:
|
|||
StrCmp $0 "example" 0 strtokerror
|
||||
${UnStrTok} $0 "This is, or is not, just an example" " ," "0" "0"
|
||||
StrCmp $0 "This" 0 strtokerror
|
||||
!insertmacro StackVerificationEnd
|
||||
IfErrors strtokerror
|
||||
|
||||
DetailPrint "PASSED StrTok test"
|
||||
Goto +2
|
||||
strtokerror:
|
||||
DetailPrint "FAILED StrTok test"
|
||||
|
||||
# Test trim new lines
|
||||
!insertmacro StackVerificationStart
|
||||
${UnStrTrimNewLines} $0 "$\r$\ntest$\r$\ntest$\r$\n"
|
||||
StrCmp $0 "$\r$\ntest$\r$\ntest" +3
|
||||
DetailPrint "FAILED StrTrimNewLines test"
|
||||
Goto +2
|
||||
DetailPrint "PASSED StrTrimNewLines test"
|
||||
StrCmp $0 "$\r$\ntest$\r$\ntest" 0 strtrimnewlineserror
|
||||
!insertmacro StackVerificationEnd
|
||||
IfErrors strtrimnewlineserror
|
||||
|
||||
DetailPrint "PASSED StrTrimNewLines test"
|
||||
Goto +2
|
||||
strtrimnewlineserror:
|
||||
DetailPrint "FAILED StrTrimNewLines test"
|
||||
|
||||
SectionEnd
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
o-----------------------------------------------------------------------------o
|
||||
|String Functions Header File 1.08 |
|
||||
|String Functions Header File 1.09 |
|
||||
(-----------------------------------------------------------------------------)
|
||||
| By deguix / A Header file for NSIS 2.01 |
|
||||
| <cevo_deguix@yahoo.com.br> -------------------------------|
|
||||
|
@ -34,7 +34,7 @@ o-----------------------------------------------------------------------------o
|
|||
;Header File Version
|
||||
|
||||
!define STRFUNC_VERMAJ 1
|
||||
!define STRFUNC_VERMED 08
|
||||
!define STRFUNC_VERMED 09
|
||||
;!define STRFUNC_VERMIN 0
|
||||
;!define STRFUNC_VERBLD 0
|
||||
|
||||
|
@ -191,7 +191,7 @@ o-----------------------------------------------------------------------------o
|
|||
################
|
||||
|
||||
!macro FUNCTION_STRING_StrCase
|
||||
!insertmacro STRFUNC_FUNC `StrCase` `2004 Diego Pedroso`
|
||||
!insertmacro STRFUNC_FUNC `StrCase` `2004 Diego Pedroso - Based on functions by Dave Laundon`
|
||||
|
||||
/*After this point:
|
||||
------------------------------------------
|
||||
|
@ -209,6 +209,7 @@ o-----------------------------------------------------------------------------o
|
|||
Exch $1
|
||||
Exch
|
||||
Exch $0
|
||||
Exch
|
||||
Push $2
|
||||
Push $3
|
||||
Push $4
|
||||
|
@ -367,12 +368,12 @@ o-----------------------------------------------------------------------------o
|
|||
!macroend
|
||||
|
||||
!macro FUNCTION_STRING_StrClb
|
||||
!insertmacro STRFUNC_FUNC `StrClb` `2004 Diego Pedroso - Based on CopyToClipboard and CopyFromClipboard by Nik Medved`
|
||||
!insertmacro STRFUNC_FUNC `StrClb` `2004 Diego Pedroso - Based on functions by Nik Medved`
|
||||
|
||||
/*After this point:
|
||||
------------------------------------------
|
||||
$0 = Action (input)
|
||||
$1 = String (input)
|
||||
$0 = String (input)
|
||||
$1 = Action (input)
|
||||
$2 = Lock/Unlock (temp)
|
||||
$3 = Temp (temp)
|
||||
$4 = Temp2 (temp)*/
|
||||
|
@ -386,6 +387,10 @@ o-----------------------------------------------------------------------------o
|
|||
Push $2
|
||||
Push $3
|
||||
Push $4
|
||||
|
||||
StrCpy $2 ""
|
||||
StrCpy $3 ""
|
||||
StrCpy $4 ""
|
||||
|
||||
;Open the clipboard to do the operations the user chose (kichik's fix)
|
||||
System::Call 'user32::OpenClipboard(i $HWNDPARENT)'
|
||||
|
@ -428,7 +433,7 @@ o-----------------------------------------------------------------------------o
|
|||
${ElseIf} $1 == "<>" ;Swap
|
||||
|
||||
;Step 1: Get clipboard data
|
||||
System::Call 'user32::GetClipboardData(i 1) t .r2'
|
||||
System::Call 'user32::GetClipboardData(i 1) i .r2'
|
||||
|
||||
;Step 2: Lock and copy data (kichik's fix)
|
||||
System::Call 'kernel32::GlobalLock(i r2) t .r4'
|
||||
|
@ -455,7 +460,7 @@ o-----------------------------------------------------------------------------o
|
|||
|
||||
;Step 9: Set the information to the clipboard
|
||||
System::Call 'user32::SetClipboardData(i 1, i r2)'
|
||||
|
||||
|
||||
StrCpy $0 $4
|
||||
${Else} ;Clear
|
||||
|
||||
|
@ -486,78 +491,68 @@ o-----------------------------------------------------------------------------o
|
|||
####################
|
||||
|
||||
!macro FUNCTION_STRING_StrIOToNSIS
|
||||
!insertmacro STRFUNC_FUNC `StrIOToNSIS` `2003-2004 Amir Szekely, Joost Verburg and Dave Laundon`
|
||||
!insertmacro STRFUNC_FUNC `StrIOToNSIS` `2004 "bluenet" - Based on functions by Amir Szekely, Joost Verburg, Dave Laundon and Diego Pedroso`
|
||||
|
||||
/*After this point:
|
||||
------------------------------------------
|
||||
$0 = String (input)
|
||||
$1 = OutVar (output)
|
||||
$2 = Temp (temp)*/
|
||||
$R0 = String (input/output)
|
||||
$R1 = StartCharPos (temp)
|
||||
$R2 = StrLen (temp)
|
||||
$R3 = TempStr (temp)
|
||||
$R4 = TempRepStr (temp)*/
|
||||
|
||||
;Get input from user
|
||||
Exch $0
|
||||
Push $1
|
||||
Push $2
|
||||
|
||||
;Initialize output
|
||||
StrCpy $1 ``
|
||||
|
||||
;Loop until an escape character is found or "String" reaches its end
|
||||
${Do}
|
||||
;Get the next "String" character
|
||||
StrCpy $2 $0 1
|
||||
|
||||
;Abort when none left
|
||||
${If} $2 == ``
|
||||
${ExitDo}
|
||||
${Else}
|
||||
;Remove current character from "String"
|
||||
StrCpy $0 $0 `` 1
|
||||
|
||||
;Detect if current character is an escape character
|
||||
${If} $2 != `\`
|
||||
;If not just output
|
||||
StrCpy $1 `$1$2`
|
||||
${Else}
|
||||
;Get the next "String" character
|
||||
StrCpy $2 $0 1
|
||||
;Remove current character from "String"
|
||||
StrCpy $0 $0 `` 1
|
||||
|
||||
;Detect if current character is:
|
||||
${If} $2 == `\` ;Back-slash
|
||||
StrCpy $1 `$1\`
|
||||
${ElseIf} $2 == `r` ;Carriage return
|
||||
StrCpy $1 `$1$\r`
|
||||
${ElseIf} $2 == `n` ;Line feed
|
||||
StrCpy $1 `$1$\n`
|
||||
${ElseIf} $2 == `t` ;Tab
|
||||
StrCpy $1 `$1$\t`
|
||||
${Else} ;Anything else
|
||||
StrCpy $1 "$1$2"
|
||||
${EndIf}
|
||||
${EndIf}
|
||||
${EndIf}
|
||||
${Loop}
|
||||
Exch $R0
|
||||
Push $R1
|
||||
Push $R2
|
||||
Push $R3
|
||||
Push $R4
|
||||
|
||||
/*After this point:
|
||||
------------------------------------------
|
||||
$0 = OutVar (output)*/
|
||||
;Get "String" length
|
||||
StrLen $R2 $R0
|
||||
|
||||
;Return output to user
|
||||
StrCpy $0 $1
|
||||
Pop $2
|
||||
Pop $1
|
||||
Exch $0
|
||||
;Loop until "String" end is reached
|
||||
${For} $R1 0 $R2
|
||||
;Get the next "String" characters
|
||||
StrCpy $R3 $R0 2 $R1
|
||||
|
||||
;Detect if current character is:
|
||||
${If} $R3 == "\\" ;Back-slash
|
||||
StrCpy $R4 "\"
|
||||
${ElseIf} $R3 == "\r" ;Carriage return
|
||||
StrCpy $R4 "$\r"
|
||||
${ElseIf} $R3 == "\n" ;Line feed
|
||||
StrCpy $R4 "$\n"
|
||||
${ElseIf} $R3 == "\t" ;Tab
|
||||
StrCpy $R4 "$\t"
|
||||
${Else} ;Anything else
|
||||
StrCpy $R4 ""
|
||||
${EndIf}
|
||||
|
||||
;Detect if "TempRepStr" is not empty
|
||||
${If} $R4 != ""
|
||||
;Replace the old characters with the new one
|
||||
StrCpy $R3 $R0 $R1
|
||||
IntOp $R1 $R1 + 2
|
||||
StrCpy $R0 $R0 "" $R1
|
||||
StrCpy $R0 "$R3$R4$R0"
|
||||
IntOp $R2 $R2 - 1 ;Decrease "StrLen"
|
||||
IntOp $R1 $R1 - 2 ;Go back to the next character
|
||||
${EndIf}
|
||||
${Next}
|
||||
Pop $R4
|
||||
Pop $R3
|
||||
Pop $R2
|
||||
Pop $R1
|
||||
Exch $R0
|
||||
FunctionEnd
|
||||
|
||||
!macroend
|
||||
|
||||
# Function StrLoc
|
||||
###############
|
||||
|
||||
!macro FUNCTION_STRING_StrLoc
|
||||
!insertmacro STRFUNC_FUNC `StrLoc` `2004 Diego Pedroso`
|
||||
!insertmacro STRFUNC_FUNC `StrLoc` `2004 Diego Pedroso - Based on functions by Ximon Eighteen`
|
||||
|
||||
/*After this point:
|
||||
------------------------------------------
|
||||
|
@ -627,67 +622,69 @@ o-----------------------------------------------------------------------------o
|
|||
####################
|
||||
|
||||
!macro FUNCTION_STRING_StrNSISToIO
|
||||
!insertmacro STRFUNC_FUNC `StrNSISToIO` `2003-2004 Amir Szekely, Joost Verburg and Dave Laundon`
|
||||
!insertmacro STRFUNC_FUNC `StrNSISToIO` `2004 "bluenet" - Based on functions by Amir Szekely, Joost Verburg, Dave Laundon and Diego Pedroso`
|
||||
|
||||
/*After this point:
|
||||
------------------------------------------
|
||||
$0 = String (input)
|
||||
$1 = OutVar (output)
|
||||
$2 = Temp (temp)*/
|
||||
$R0 = String (input/output)
|
||||
$R1 = StartCharPos (temp)
|
||||
$R2 = StrLen (temp)
|
||||
$R3 = TempStr (temp)
|
||||
$R4 = TempRepStr (temp)*/
|
||||
|
||||
;Get input from user
|
||||
Exch $0 ;String (input)
|
||||
Push $1 ;OutVar (output)
|
||||
Push $2 ;Temp (temp)
|
||||
|
||||
;Initialize output
|
||||
StrCpy $1 ``
|
||||
|
||||
;Loop until an escape character is found or "String" reaches its end
|
||||
${Do}
|
||||
;Get the next "String" character
|
||||
StrCpy $2 $0 1
|
||||
|
||||
;Abort when none left
|
||||
${If} $2 == ``
|
||||
${ExitDo}
|
||||
${Else}
|
||||
;Remove current character from "String"
|
||||
StrCpy $0 $0 `` 1
|
||||
|
||||
;Detect if current character is:
|
||||
${If} $2 == `\` ;Back-slash
|
||||
StrCpy $1 `$1\\`
|
||||
${ElseIf} $2 == `$\r` ;Carriage return
|
||||
StrCpy $1 `$1\r`
|
||||
${ElseIf} $2 == `$\n` ;Line feed
|
||||
StrCpy $1 `$1\n`
|
||||
${ElseIf} $2 == `$\t` ;Tab
|
||||
StrCpy $1 `$1\t`
|
||||
${Else} ;Anything else
|
||||
StrCpy $1 "$1$2"
|
||||
${EndIf}
|
||||
${EndIf}
|
||||
${Loop}
|
||||
Exch $R0
|
||||
Push $R1
|
||||
Push $R2
|
||||
Push $R3
|
||||
Push $R4
|
||||
|
||||
/*After this point:
|
||||
------------------------------------------
|
||||
$0 = OutVar (output)*/
|
||||
;Get "String" length
|
||||
StrLen $R2 $R0
|
||||
|
||||
;Loop until "String" end is reached
|
||||
${For} $R1 0 $R2
|
||||
;Get the next "String" character
|
||||
StrCpy $R3 $R0 1 $R1
|
||||
|
||||
;Detect if current character is:
|
||||
${If} $R3 == "$\r" ;Back-slash
|
||||
StrCpy $R4 "\r"
|
||||
${ElseIf} $R3 == "$\n" ;Carriage return
|
||||
StrCpy $R4 "\n"
|
||||
${ElseIf} $R3 == "$\t" ;Line feed
|
||||
StrCpy $R4 "\t"
|
||||
${ElseIf} $R3 == "\" ;Tab
|
||||
StrCpy $R4 "\\"
|
||||
${Else} ;Anything else
|
||||
StrCpy $R4 ""
|
||||
${EndIf}
|
||||
|
||||
;Detect if "TempRepStr" is not empty
|
||||
${If} $R4 != ""
|
||||
;Replace the old character with the new ones
|
||||
StrCpy $R3 $R0 $R1
|
||||
IntOp $R1 $R1 + 1
|
||||
StrCpy $R0 $R0 "" $R1
|
||||
StrCpy $R0 "$R3$R4$R0"
|
||||
IntOp $R2 $R2 + 1 ;Increase "StrLen"
|
||||
${EndIf}
|
||||
${Next}
|
||||
|
||||
;Return output to user
|
||||
StrCpy $0 $1
|
||||
Pop $2
|
||||
Pop $1
|
||||
Exch $0
|
||||
Pop $R4
|
||||
Pop $R3
|
||||
Pop $R2
|
||||
Pop $R1
|
||||
Exch $R0
|
||||
FunctionEnd
|
||||
|
||||
!macroend
|
||||
|
||||
# Function StrRep
|
||||
###############
|
||||
|
||||
!macro FUNCTION_STRING_StrRep
|
||||
!insertmacro STRFUNC_FUNC `StrRep` `2002-2004 Hendri Adriaens`
|
||||
!insertmacro STRFUNC_FUNC `StrRep` `2004 Diego Pedroso - Based on functions by Hendri Adriaens`
|
||||
|
||||
/*After this point:
|
||||
------------------------------------------
|
||||
|
@ -767,6 +764,7 @@ o-----------------------------------------------------------------------------o
|
|||
Pop $R6
|
||||
Pop $R5
|
||||
Pop $R4
|
||||
Pop $R3
|
||||
Pop $R2
|
||||
Pop $R1
|
||||
Exch $R0
|
||||
|
@ -778,7 +776,7 @@ o-----------------------------------------------------------------------------o
|
|||
################
|
||||
|
||||
!macro FUNCTION_STRING_StrSort
|
||||
!insertmacro STRFUNC_FUNC `StrSort` `2004 Diego Pedroso - based on SortString by "Afrow UK"`
|
||||
!insertmacro STRFUNC_FUNC `StrSort` `2004 Diego Pedroso - Based on functions by Stuart Welch`
|
||||
|
||||
/*After this point:
|
||||
------------------------------------------
|
||||
|
@ -985,7 +983,7 @@ o-----------------------------------------------------------------------------o
|
|||
###############
|
||||
|
||||
!macro FUNCTION_STRING_StrStr
|
||||
!insertmacro STRFUNC_FUNC `StrStr` `2002-2004 Ximon Eighteen`
|
||||
!insertmacro STRFUNC_FUNC `StrStr` `2004 Diego Pedroso - Based on functions by Ximon Eighteen`
|
||||
|
||||
/*After this point:
|
||||
------------------------------------------
|
||||
|
@ -1309,7 +1307,7 @@ o-----------------------------------------------------------------------------o
|
|||
###############
|
||||
|
||||
!macro FUNCTION_STRING_StrTok
|
||||
!insertmacro STRFUNC_FUNC `StrTok` `2004 Diego Pedroso - based on StrTok by "bigmac666"`
|
||||
!insertmacro STRFUNC_FUNC `StrTok` `2004 Diego Pedroso - Based on functions by "bigmac666"`
|
||||
/*After this point:
|
||||
------------------------------------------
|
||||
$0 = SkipEmptyParts (input)
|
||||
|
@ -1341,6 +1339,8 @@ o-----------------------------------------------------------------------------o
|
|||
Push $6
|
||||
Push $7
|
||||
Push $8
|
||||
Push $9
|
||||
Push $R0
|
||||
|
||||
;Parameter defaults
|
||||
${IfThen} $2 == `` ${|} StrCpy $2 `|` ${|}
|
||||
|
@ -1434,6 +1434,8 @@ o-----------------------------------------------------------------------------o
|
|||
|
||||
;Return output to user
|
||||
|
||||
Pop $R0
|
||||
Pop $9
|
||||
Pop $8
|
||||
Pop $7
|
||||
Pop $6
|
||||
|
@ -1451,7 +1453,7 @@ o-----------------------------------------------------------------------------o
|
|||
########################
|
||||
|
||||
!macro FUNCTION_STRING_StrTrimNewLines
|
||||
!insertmacro STRFUNC_FUNC `StrTrimNewLines` `2003-2004 Ximon Eighteen`
|
||||
!insertmacro STRFUNC_FUNC `StrTrimNewLines` `2004 Diego Pedroso - Based on functions by Ximon Eighteen`
|
||||
|
||||
/*After this point:
|
||||
------------------------------------------
|
||||
|
|
|
@ -378,7 +378,7 @@ How to use
|
|||
|
||||
Example:
|
||||
|
||||
${StrSort} $0 "This is just an example" " just" "" "ple" "0" "0"
|
||||
${StrSort} $0 "This is just an example" " just" "" "ple" "0" "0" "0"
|
||||
[_______(___)_______]( )
|
||||
C R
|
||||
|
||||
|
@ -474,7 +474,7 @@ How to use
|
|||
|
||||
Example:
|
||||
|
||||
${StrStrAdv} $0 "This IS really just an example" "IS " ">" ">" "1" "0" "1"
|
||||
${StrStrAdv} $0 "This IS really just an example" "IS " ">" ">" "0" "0" "1"
|
||||
>>>>>( )[____________________]
|
||||
|
||||
|
||||
|
@ -584,11 +584,22 @@ Functions included and not included
|
|||
Version History
|
||||
---------------
|
||||
|
||||
1.09 - 10/22/2004
|
||||
|
||||
- Fixed stack problems involving: StrCase, StrRep, StrSort, StrTok.
|
||||
- Fixed StrClb: When "Action" = "<>", handle was wrongly outputed as
|
||||
text.
|
||||
- Fixed StrSort, StrStrAdv documentation examples.
|
||||
- Fixed StrIOToNSIS, StrLoc, StrNSISToIO, StrRep, StrStr: sometimes
|
||||
didn't find "StrToSearch" at all.
|
||||
|
||||
1.08 - 10/12/2004
|
||||
|
||||
- Converted all the functions to LogicLib.
|
||||
- StrSort: Totally remade and it can break old scripts. See
|
||||
documentation for details.
|
||||
- StrTok: "ResultPart" has to start from 0 and it can break old scripts.
|
||||
See documentation for details.
|
||||
- Added defines: StrFunc_List, *_List and *_TypeList.
|
||||
- Fixed StrStrAdv: Variables $R0-$R3 couldn't be used on scripts before
|
||||
calling.
|
||||
|
@ -598,8 +609,8 @@ Version History
|
|||
1.07 - 09/21/2004
|
||||
|
||||
- Removed ${UnStrFunc} command. Now you can just include uninstall
|
||||
functions commands like ${UnStrStr} to be supported by uninstall functions
|
||||
and sections.
|
||||
functions commands like ${UnStrStr} to be supported by uninstall functions
|
||||
and sections.
|
||||
- Added case-sensitive comparation option for StrStrAdv.
|
||||
- StrCase now uses System.dll which makes case convertions effective with
|
||||
all latin letters (i.e. ê).
|
||||
|
@ -607,8 +618,6 @@ all latin letters (i.e.
|
|||
- StrClbSet and StrClbGet removed, added StrClb.
|
||||
- Made compact the most usual operations inside the header file. File size
|
||||
reduced.
|
||||
- Added "!verbose" to header file -> faster compilation and header file
|
||||
output organized (code borrowed from LogicLib.nsh).
|
||||
|
||||
1.06 - 03/26/2004
|
||||
|
||||
|
@ -658,27 +667,25 @@ output organized (code borrowed from LogicLib.nsh).
|
|||
|
||||
0.02 - 01/24/2004
|
||||
|
||||
- Completed StrFunc.nsh file. Need some tests and the readme.
|
||||
- Completed StrFunc.nsh file. Need some tests and the readme.
|
||||
|
||||
0.01 - 01/22/2004
|
||||
|
||||
- First version to test ideas...
|
||||
- First version to test ideas...
|
||||
|
||||
Credits
|
||||
-------
|
||||
|
||||
Made by Diego Pedroso (aka deguix).
|
||||
Made by Diego Pedroso (aka deguix).
|
||||
|
||||
Functions Credits
|
||||
-----------------
|
||||
|
||||
- StrCase, StrClb, StrLoc, StrSort, StrStrAdv and StrTok made
|
||||
by Diego Pedroso, some based on functions made by Dave Laundon,
|
||||
"Afrow UK" and "bigmac666".
|
||||
- StrRep made by Hendri Adriaens.
|
||||
- StrStr, StrTrimNewLines made by Ximon Eighteen.
|
||||
- StrNSISToIO and StrIOToNSIS made by Amir Szekely, Joost Verburg and
|
||||
Dave Laundon.
|
||||
- All functions are made by Diego Pedroso on LogicLib format. They
|
||||
are based on functions by Amir Szekely, Dave Laundon, Hendri
|
||||
Adriaens, Nik Medved, Joost Verburg, Stuart Welch, Ximon Eighteen,
|
||||
"bigmac666" and "bluenet". "bluenet"'s version of StrIOToNSIS and
|
||||
StrNSISToIO on LogicLib format were included.
|
||||
|
||||
License
|
||||
-------
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue