48 lines
1006 B
Plaintext
48 lines
1006 B
Plaintext
; Adapted from: https://nsis.sourceforge.io/Another_String_Replace_(and_Slash/BackSlash_Converter) (2019-08-31)
|
|
|
|
!macro _StrSlashConstructor out in
|
|
Push "${in}"
|
|
Push "\"
|
|
Call StrSlash
|
|
Pop ${out}
|
|
!macroend
|
|
|
|
!define StrSlash '!insertmacro "_StrSlashConstructor"'
|
|
|
|
; Push $filenamestring (e.g. 'c:\this\and\that\filename.htm')
|
|
; Push "\"
|
|
; Call StrSlash
|
|
; Pop $R0
|
|
; ;Now $R0 contains 'c:/this/and/that/filename.htm'
|
|
Function StrSlash
|
|
Exch $R3 ; $R3 = needle ("\" or "/")
|
|
Exch
|
|
Exch $R1 ; $R1 = String to replacement in (haystack)
|
|
Push $R2 ; Replaced haystack
|
|
Push $R4 ; $R4 = not $R3 ("/" or "\")
|
|
Push $R6
|
|
Push $R7 ; Scratch reg
|
|
StrCpy $R2 ""
|
|
StrLen $R6 $R1
|
|
StrCpy $R4 "\"
|
|
StrCmp $R3 "/" loop
|
|
StrCpy $R4 "/"
|
|
loop:
|
|
StrCpy $R7 $R1 1
|
|
StrCpy $R1 $R1 $R6 1
|
|
StrCmp $R7 $R3 found
|
|
StrCpy $R2 "$R2$R7"
|
|
StrCmp $R1 "" done loop
|
|
found:
|
|
StrCpy $R2 "$R2$R4"
|
|
StrCmp $R1 "" done loop
|
|
done:
|
|
StrCpy $R3 $R2
|
|
Pop $R7
|
|
Pop $R6
|
|
Pop $R4
|
|
Pop $R2
|
|
Pop $R1
|
|
Exch $R3
|
|
FunctionEnd
|