#include <GUIConstants.au3>
#include <Array.au3>
#include <File.au3>

Dim $quellvz, $check, $zielvz, $dateipfad, $mainwindow, $secondwindow, $write, $Ascii, $Ascii_Tabelle, $write, $len, $read
	
 $Ascii = ("0,1,2,3,0,9,0,127,0,0,0,11,12,13,14,15," _
    &"16,17,18,19,0,10,8,0,24,25,0,0,28,29,30,31," _
    &"0,0,0,0,0,0,23,27,0,0,0,0,0,5,6,7," _
    &"0,0,22,0,0,0,0,4,0,0,0,0,20,21,0,26," _
    &"32,0,0,228,224,0,0,229,231,241,91,46,60,40,43,33," _
    &"38,233,0,0,232,0,0,0,236,223,93,36,42,41,59,94," _
    &"45,47,0,196,0,0,0,197,0,209,166,44,37,95,62,63," _
    &"248,201,0,0,0,0,0,0,0,96,58,35,64,39,61,34," _
    &"216,97,98,99,100,101,102,103,104,105,0,0,240,0,254,0," _
    &"176,106,107,108,109,110,111,112,113,114,0,0,230,0,198,164," _
    &"181,126,115,116,117,118,119,120,121,122,0,0,208,221,222,0," _
    &"162,163,0,0,0,167,0,0,0,0,172,124,175,168,180,0," _
    &"123,65,66,67,68,69,70,71,72,73,0,0,246,242,0,0," _
    &"125,74,75,76,77,78,79,80,81,82,0,0,252,249,0,0," _
    &"92,0,83,84,85,86,87,88,89,90,0,0,214,0,0,0," _
    &"48,49,50,51,52,53,54,55,56,57,0,0,220,0,0,0")
	$Ascii_Tabelle = StringSplit($Ascii,",")
	
If $CmdLine[0] = 2 And $CmdLine[1] = "-f" And Not $CmdLine[2] = "" Then
		
		$dateipfad = $CmdLine[2]
		konvertierenbutton()
		Exit
	
ElseIf $CmdLine[0] = 2 And $CmdLine[1] = "-d" And Not $CmdLine[2] = "" Then
	 
		$quellvz = $CmdLine[2]
		konvertierenbutton()
		Exit
		
		
ElseIf $CmdLine[0] = 4 And $CmdLine[1] = "-d" And Not $CmdLine[2] ="" And $CmdLine[3] = "-z" And Not $CmdLine[4] ="" Then
		
		$quellvz = $CmdLine[2]
		$zielvz = $CmdLine[4]
		konvertierenbutton()
		Exit	
		
EndIf


Opt("GUIOnEventMode", 1) ;Wechsle in den OnEvent Modus

$mainwindow = GUICreate("EBCDIC to ASCII Converter",400,200)
GUICtrlCreateLabel('Klicken Sie auf "Öffnen",'& @CRLF & 'um eine einzelne Datei zu konvertieren.', 22,15)
$oeffnenbutton = GUICtrlCreateButton("Öffnen",22,45,120,30)
GUICtrlCreateLabel('Klicken Sie auf "Verzeichnis öffnen",'& @CRLF & 'um ein Verzeichnis mit Dateien zu konvertieren.', 22, 85)
$vz_oeffnenbutton = GUICtrlCreateButton("Verzeichnis öffnen", 22, 120, 120, 30)
$konvertieren = GUICtrlCreateButton("Konvertieren",260, 45, 120,30)
$endbutton = GUICtrlCreateButton("Beenden",260, 120, 120,30)
GUICtrlSetOnEvent($oeffnenbutton, "oeffnenbutton")
GUICtrlSetOnEvent($vz_oeffnenbutton, "vz_oeffnenbutton")
GUICtrlSetOnEvent($endbutton, "endbutton")
GUISetOnEvent($GUI_EVENT_CLOSE, "close")

$secondwindow = GUICreate("Verzeichniswahl",400,200)	
GUICtrlCreateLabel("Wählen Sie das Quellverzeichnis aus.",22,15)
$quellbutton = GUICtrlCreateButton("Quellverzeichnis auswählen", 22,30,150,30)
GUICtrlCreateLabel("Setzen Sie ein Häkchen um bak Dateien zu erstellen," & @CRLF & "andernfalls müssen Sie ein Zielverzeichnis auswählen.",22,65) 
$check = GUICtrlCreateCheckbox ("bak Dateien", 22, 95, 140, 30)
GUICtrlCreateLabel("Wählen Sie das Zielverzeichnis aus.",22, 130)
$zielbutton = GUICtrlCreateButton("Zielverzeichnis auswählen", 22, 150,150,30)
$fertigbutton = GUICtrlCreateButton("Fertig",260, 150, 120,30)
GUICtrlSetOnEvent($quellbutton, "quellbutton")
GUICtrlSetOnEvent($zielbutton, "zielbutton")
GUICtrlSetOnEvent($check, "checked")
GUICtrlSetOnEvent($fertigbutton, "fertigbutton")
GUISetOnEvent($GUI_EVENT_CLOSE, "close")
GUICtrlSetOnEvent($konvertieren, "konvertierenbutton")
GUISetState(@SW_SHOW, $mainwindow)

While 1
	
  Sleep(1000)  ; Häng rum

WEnd

;Subfunctions

Func oeffnenbutton()
     
	$dateipfad = FileOpenDialog("Wählen Sie die zu konvertierende Datei aus!","C:\", "Alle(*.*)", 1+2)
	 
EndFunc
  
Func vz_oeffnenbutton()

	GUISetState(@SW_SHOW, $secondwindow)

EndFunc


Func endbutton()
	
	
		
      Exit
	  
	
  
EndFunc
	
Func quellbutton()
		
	$quellvz = FileSelectFolder("Wählen Sie den Quellordner aus!", "C:/")
		
EndFunc
	
Func zielbutton()
		
	$zielvz = FileSelectFolder("Wählen Sie den Zielordner aus!", "C:/",1)
		
EndFunc

Func checked()
		
	If BitAnd(GUICtrlRead($check),$GUI_CHECKED) = $GUI_CHECKED Then
		
		GUICtrlSetState(13,$GUI_DISABLE)
		GUICtrlSetState(14,$GUI_DISABLE)
		
	Else
		
		GUICtrlSetState(13,$GUI_ENABLE)
		GUICtrlSetState(14,$GUI_ENABLE)
		
	EndIf
	
EndFunc
	
Func fertigbutton()
	 
	GUISetState(@SW_HIDE, $secondwindow)
	 
EndFunc
	
Func close() 
	
	If @GUI_WINHANDLE = $mainwindow Then
		
	GUIDelete($secondwindow)	
	GUIDelete($mainwindow)
    Exit
	  
	ElseIf @GUI_WINHANDLE = $secondwindow Then
	 
	GUISetState(@SW_HIDE, $secondwindow)
		
	
	EndIf
	 
 EndFunc
 
 Func konvertierenbutton()
	 
	 	
		If Not $dateipfad = "" Then
	 
			$splitdateipfad = StringSplit($dateipfad,"\") ;Dateipfad jeweils bei "\" teilen und in Array speichern
			_ArrayReverse($splitdateipfad)	;Array umsortieren damit Dateiname am Anfang steht
			$len = StringLen($splitdateipfad[0]) ;Länge des Dateinamens ermitteln
			$dateipfadcut = StringTrimRight($dateipfad, $len) ;um $len von Rechts an abzuschneiden
			$splitdateiname = Stringsplit($splitdateipfad[0],".") ;Dateiname beim "." teilen
			$bak = $splitdateiname[1] & "_" & $splitdateiname[2] & ".bak" ;für die bak Datei
			FileCopy($dateipfad,$dateipfadcut&$bak,1) ;bak Datei erstellen
			$read = ""
			$read = FileRead($dateipfad)
			$len = StringLen($read)
			For $i = 1 to $len
		
				$Ch = StringMid($read, $i, 1)
				$write = $write & Chr($Ascii_Tabelle[Asc($Ch)+1])
		 
			Next
			$file = FileOpen($dateipfad,2)
			FileWriteLine($file, $write)
			FileClose($file)
			$write =""
	 
		EndIf
     
		If Not $quellvz = "" And BitAnd(GUICtrlRead($check),$GUI_CHECKED) = $GUI_CHECKED Or ($CmdLine[0] = 2 And $CmdLine[1] = "-d") Then
	 
			$f = 1
			$dateien = _FileListToArray($quellvz,"*",1) ; die Anzahl der Dateien aus dem Ordner und die einzelnen Namen der Dateien in dem Ordner in ein Array schreiben
			
			For $i = 1 To $dateien[0]
		
				$splitdateiname = Stringsplit($dateien[$f],".") ;Dateiname beim "." teilen
				$bak = $splitdateiname[1] & "_" & $splitdateiname[2] & ".bak" ;für die bak Datei
				FileCopy($quellvz&"\"&$dateien[$f],$quellvz&"\"&$bak,1)
				$read = ""
				$read = FileRead($quellvz&"\"&$dateien[$f])
				$len = StringLen($read)
				konvertieren()
				$file = FileOpen($quellvz&"\"&$dateien[$f],2)
				FileWriteLine($file, $write)
				FileClose($file)
				$write = ""
				$f += 1
		
			Next
     
		EndIf
 		
		If Not $quellvz = "" And Not BitAnd(GUICtrlRead($check),$GUI_CHECKED) = $GUI_CHECKED Or ($CmdLine[0] = 4 And $CmdLine[1] = "-d" And $CmdLine[3] = "-z") And Not $zielvz ="" Then
	
			$f = 1
			$dateien = _FileListToArray($quellvz,"*",1) ; die Anzahl der Dateien aus dem Ordner und die einzelnen Namen der Dateien in dem Ordner in ein Array schreiben
			For $i = 1 To $dateien[0]
		
				FileCopy($quellvz&"\"&$dateien[$f],$zielvz&"\"&$dateien[$f],9)
				$read = ""
				$read = FileRead($zielvz&"\"&$dateien[$f])
				$len = StringLen($read)
				konvertieren()
				$file = FileOpen($zielvz&"\"&$dateien[$f],2)
				FileWriteLine($file, $write)
				FileClose($file)
				$write = ""
				$f += 1
		
			Next
	
		EndIf

		If ($dateipfad = "" And $quellvz ="" And BitAnd(GUICtrlRead($check),$GUI_CHECKED) = $GUI_CHECKED) Or ($dateipfad = "" And $quellvz = "" And Not BitAnd(GUICtrlRead($check),$GUI_CHECKED) = $GUI_CHECKED And $zielvz = "") Then
			
			MsgBox (48, "Fehler", "Keine Datei oder keine Dateien ausgewählt!")
			
		Else
			
			MsgBox(64, "Konvertieren", "Dateien erfolgreich konvertiert!")
			
		EndIf
		
EndFunc

Func konvertieren()
	
		For $i = 1 to $len
		
			$Ch = StringMid($read, $i, 1)
			$write = $write & Chr($Ascii_Tabelle[Asc($Ch)+1])
		
		Next
	
EndFunc