#include <FileConstants.au3>

Global $sOldAutoItScript = FileOpenDialog('Bitte das alte Script auswählen!', @ScriptDir, 'AutoIt-Script (*.au3)', $FD_FILEMUSTEXIST + $FD_PATHMUSTEXIST)
If @error Then Exit
Global $sOldScript = FileRead($sOldAutoItScript)
_ReplaceGDIPVar($sOldScript)
_ReplaceIIF($sOldScript)
_ReplaceAdlib($sOldScript)
_ReplaceStringReverse($sOldScript)
_ReplaceOnAutoItExit($sOldScript)
_ReplaceOnAutoItStart($sOldScript)
Global $sPath = StringRegExpReplace($sOldAutoItScript, '(.+\\).+', '$1')
Global $sNewFile = StringRegExpReplace($sOldAutoItScript, '.+\\(.+)\.au3', '$1_new.au3')
Global $hFile = FileOpen($sPath & $sNewFile, 2)
FileWrite($hFile, $sOldScript)
FileClose($hFile)
ShellExecute($sPath & $sNewFile)

; Die globale Variable bei GDI+ wurde geaendert.
; Das laesst sich durch einfaches Replace beheben
Func _ReplaceGDIPVar(ByRef $sScript)
    $sScript = StringReplace($sScript, '$ghGDIPDll', '$__g_hGDIPDll')
EndFunc   ;==>_ReplaceGDIPVar

; Die Funktion "_IIF()" wurde geloescht zugunsten des ternaeren Operators.
; Das laesst sich auch austauschen
Func _ReplaceIIF(ByRef $sScript)
    $sScript = StringRegExpReplace($sScript, '(?s)(.*)_IIF\((.+?),(.+?),(.+?)\)(.*)', '$1($2 ?$3 :$4)$5')
EndFunc   ;==>_ReplaceIIF

; AdlibEnable wurde gegen AdlibRegister ausgetauscht
; und AdlibDisable gegen AdlibUnRegister.
; Das laesst sich durch einfaches Replace beheben
Func _ReplaceAdlib(ByRef $sScript)
    $sScript = StringReplace($sScript, 'AdlibEnable', 'AdlibRegister')
    $sScript = StringReplace($sScript, 'AdlibDisable', 'AdlibUnRegister')
EndFunc   ;==>_ReplaceAdlib

; Die Funktion "_StringReverse" wurde durch eine interne Funktion "StringReverse" ersetzt.
; Das laesst sich durch einfaches Replace beheben
Func _ReplaceStringReverse(ByRef $sScript)
    $sScript = StringReplace($sScript, '_StringReverse', 'StringReverse')
EndFunc   ;==>_ReplaceStringReverse

; Die Funktion "OnAutoItExit()" und die Option "Opt('OnExitFunc', 'Funktion')" wurden
; durch "OnAutoItExitRegister()" ersetzt.
; Damit die Funktionalitaet des alten Scripts erhalten bleibt, muss die Funktion dort registriert werden.
Func _ReplaceOnAutoItExit(ByRef $sScript)
    If StringInStr($sScript, 'Func OnAutoItExit') Then
        $sScript = StringFormat('OnAutoItExitRegister("OnAutoItExit")\r\n%s', $sScript)
    EndIf
    If StringRegExp($sScript, '(?s).*(?:AutoItSetOption|Opt)\(.OnExitFunc.+') Then
        Local $sFunc = StringRegExpReplace($sScript, '(?s).*(?:AutoItSetOption|Opt)\(.OnExitFunc.,.*?(\w+).+?\).*', '$1')
        $sScript = StringFormat('OnAutoItExitRegister("%s")\r\n%s', $sFunc, $sScript)
        $sScript = StringRegExpReplace($sScript, '(?s)(.*)(?:AutoItSetOption|Opt)\(.OnExitFunc.,.+?\)(.*)', '$1$2')
    EndIf
EndFunc   ;==>_ReplaceOnAutoItExit

; Die Funktion "OnAutoItStart()" wurde durch eine Preprozessor-Anweisung "#OnAutoItStartRegister" ersetzt.
; Damit die Funktionalitaet des alten Scripts erhalten bleibt, muss die Funktion dort eingetragen werden.
Func _ReplaceOnAutoItStart(ByRef $sScript)
    If StringInStr($sScript, 'Func OnAutoItStart') Then
        $sScript = StringFormat('#OnAutoItStartRegister "OnAutoItStart"\r\n%s', $sScript)
    EndIf
EndFunc   ;==>_ReplaceOnAutoItStart

