StrRev: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
(Reverse a string)
(No difference)

Revision as of 19:39, 21 October 2011

Author: Lloigor (talk, contrib)


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Reverse a string
;; P1 :o: Reversed string
;; P2 :i: Original string
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
!define StrRev "!insertmacro _StrRev"
!macro _StrRev _REV_ _STR_
   Push "${_STR_}"
   Call StrRev
   Pop ${_REV_}
!macroend
 
Function StrRev
   Exch $1  ;; Orig string
   Push $0  ;; Reversed string
   Exch
   Push $2  ;; String Len / Counter
   Push $3  ;; Current character
 
   StrCpy $0 ""
   StrLen $2 "$1"
 
   IntCmp $2 0 +5
      IntOp $2 $2 - 1
      StrCpy $3 "$1" 1 $2
      StrCpy $0 "$0$3"
      Goto -4
 
   Pop $3
   Pop $2
   Pop $1
   Exch $0
FunctionEnd

Example:

StrCpy $1 "1234567" 
${StrRev} $1 $1
MessageBox MB_OK "$1"  ;; "7654321"