;╔══════════════════════════════════════════════════════════════════════════════╗
;║ An generic macro that replaces characters in a string(depreciated) MACRO ║
;╟──────────────────────────────────────────────────────────────────────────────╢
;║ SET VARS: ║
;║ RETURN_STRING ║
;║ ║
;║ USED VARS: ║
;║ none ║
;║ ║
;║ DEPENDS: ║
;║ none ║
;║ ║
;║ PARAMS: ║
;║ ARG1 - String to operate on ║
;║ ARG2 - Argument to find ║
;║ ARG3 - Argument to replace ║
;╚══════════════════════════════════════════════════════════════════════════════╝
[macro-findReplace]
;────────────────────────────────────────────────────────────────────────────────────────────────────
;Set up the initial values
;────────────────────────────────────────────────────────────────────────────────────────────────────
exten => s,1,Set(i=1)
;────────────────────────────────────────────────────────────────────────────────────────────────────
;Cut string by find argument, occurance {i}
;────────────────────────────────────────────────────────────────────────────────────────────────────
exten => s,n(REPEAT),Set(RESULT=${CUT(ARG1|${ARG2}|${i})})
exten => s,n,GotoIf($["${RESULT}" = ""]?DONE)
;────────────────────────────────────────────────────────────────────────────────────────────────────
;If cut returned a result combine both halfs with replace argument in middle
;────────────────────────────────────────────────────────────────────────────────────────────────────
exten => s,n,Set(__FR_STRING=${FR_STRING}${ARG3}${RESULT})
;────────────────────────────────────────────────────────────────────────────────────────────────────
;Increment {i} and test again
;────────────────────────────────────────────────────────────────────────────────────────────────────
exten => s,n,Set(i=$[${i} + 1])
exten => s,n,Goto(REPEAT)
;────────────────────────────────────────────────────────────────────────────────────────────────────
;If there where no more occurances of find argument, remove leading character (erronous replace)
;and set result to RETURN_STRING
;────────────────────────────────────────────────────────────────────────────────────────────────────
exten => s,n(DONE),Set(__RETURN_STRING=${FR_STRING:1})
exten => s,n,Set(MACRO_RESULT=)