<?php

function display_anzeigen_explora($zeile1, $zeile2)
{
	//display_loeschen_nettun();
		# error Handler definieren
	error_reporting(E_USER_WARNING);
	ini_set('display_errors', 'Off');
	set_error_handler("customError", E_USER_WARNING);

	if(defined('KUNDENANZEIGE_COM_PORT') && strlen(KUNDENANZEIGE_COM_PORT) > 0) $PORT = KUNDENANZEIGE_COM_PORT;
	else $PORT="COM6:";
	$ZEILENLAENGE=20;
	
	$zuz=mb_strlen($zeile1, 'UTF-8');
	
	// die zeilen mit Blanks auffuellen
	$zeile1=str_pad($zeile1, $ZEILENLAENGE, " ", STR_PAD_RIGHT);
	//$zeile1=iconv("UTF-8", "ISO-8859-1", $zeile1);
	$zeile2=str_pad($zeile2, $ZEILENLAENGE, " ", STR_PAD_RIGHT);
	//$zeile2=iconv("UTF-8", "ISO-8859-1", $zeile2);
	
	#$zeile1=substr($zeile1,0,$ZEILENLAENGE);
	#$zeile2=substr($zeile2,0,$ZEILENLAENGE);
	$zeile1=utf8_decode ( $zeile1 );
	$zeile2=utf8_decode ( $zeile2 );
	$handle = fopen($PORT, "w+");
	fwrite($handle, "\x0C"); // Display loeschen
	fwrite($handle, "\x1B\x52\x02"); // Deutsches Character Set wählen EPSON Mode
	fclose($handle);
	//$command1="echo $zeile1>$PORT";
	//$command2="echo $zeile2>$PORT";
	$command1="set /p x=$zeile1<nul >$PORT";
	$command2="set /p x=$zeile2<nul >$PORT";
	exec($command1, $output, $error_code);
	$handle = fopen($PORT, "w+");
	fwrite($handle, "\x1F\x24\x01\x02"); // auf zweite Zeile positionieren
	fclose($handle);
	exec($command2, $output, $error_code);
		# error triggern und inhalt 
	trigger_error(date('Ymd h:i')." ".basename( __FILE__)." Line:". __LINE__ ." - Error/Warning com Port access Error !", E_USER_WARNING);
		# # error Handler auf original (php.ini) zurücksetzen
	ini_set('display_errors','on');
	error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
	
}


function display_anzeigen_nettun($zeile1, $zeile2)
{
	# display_loeschen_nettun();
	
	

	$replPat=array('/ß/', '/&/', '/€/');
	$repl=array('ss', 'u.', 'EUR');
	$zeile1=preg_replace($replPat, $repl, $zeile1);
	$zeile2=preg_replace($replPat, $repl, $zeile2);
	$ZEILENLAENGE=20;
	
			#$zeile1=mb_convert_encoding($zeile1,'UTF-8',mb_detect_encoding($zeile1));

	// die zeilen mit Blanks auffuellen

	$zeile1=iconv("UTF-8", "UTF-8//IGNORE", $zeile1);
	$zeile1=iconv("UTF-8", "ISO-8859-1", $zeile1);
	$zeile2=iconv("UTF-8", "ISO-8859-1//IGNORE", $zeile2);

	if(strlen($zeile1) < $ZEILENLAENGE){
		$dif=$ZEILENLAENGE-strlen($zeile1);
		#$zeile1=str_pad($zeile1, ($dif/2)+strlen($zeile1), " ", STR_PAD_LEFT);
		#$zeile1=str_pad($zeile1, $ZEILENLAENGE, " ", STR_PAD_RIGHT);
		$zeile1=str_pad($zeile1, $ZEILENLAENGE, " ", STR_PAD_RIGHT);
	}
	else $zeile1=str_pad($zeile1, $ZEILENLAENGE, " ", STR_PAD_RIGHT);
	if(strlen($zeile2) != $ZEILENLAENGE){
		$dif=$ZEILENLAENGE-strlen($zeile2);
		$zeile2=str_pad($zeile2, ($dif/2)+strlen($zeile2), " ", STR_PAD_LEFT);
		$zeile2=str_pad($zeile2, $ZEILENLAENGE, " ", STR_PAD_RIGHT);
	}
	else $zeile2=str_pad($zeile2, $ZEILENLAENGE, " ", STR_PAD_RIGHT);
	
	$zeile1=substr($zeile1,0,$ZEILENLAENGE);
	$zeile2=substr($zeile2,0,$ZEILENLAENGE);
	
	$command1="start /B display\\write_display_nettun.exe ausgeben \"".$zeile1 ."\" \"". $zeile2 ."\"";
	
	$handle=popen($command1, "w");
		
	if ($handle==false)
	{
		echo("Fehler bei Kundendisplay anzeige: " . $command1);
	}
	else
	{
		pclose($handle);
	}
	
	//echo("Befehl wird ausgefuehrt: " . $command1 . "<br>");
	//exec($command1, $output, $error_code);
	//$error_code=exec($command1);
	//if ($error_code >0 )
	//{
	//	echo("Fehler bei Kundendisplay anzeige: " . $command1);
	//}
	//print_r($output);
}

function display_loeschen_nettun()
{
	$command1="display\\write_display_nettun.exe loeschen ";
	//echo("Befehl wird ausgefuehrt: " . $command1 . "<br>");
	exec($command1, $output, $error_code);
	if ($error_code >0 )
	{
		echo("Fehler beim loeschen des Kunden Display " . $command1);
	}
	//print_r($output);
}

function display_loeschen_explora()
{
			# error Handler definieren
	error_reporting(E_USER_WARNING);
	ini_set('display_errors', 'Off');
	set_error_handler("customError", E_USER_WARNING);

	if(defined('KUNDENANZEIGE_COM_PORT') && strlen(KUNDENANZEIGE_COM_PORT) > 0) $PORT = KUNDENANZEIGE_COM_PORT;
	else $PORT="COM6:";
	$handle = fopen($PORT, "w+");
	fwrite($handle, "\x0C"); // Display loeschen
	fclose($handle);
	
			# error triggern und inhalt 
	trigger_error(date('Ymd h:i')." ".basename( __FILE__)." Line:". __LINE__ ." - Error/Warning com Port access Error !", E_USER_WARNING);
		#   error Handler auf original (php.ini) zurücksetzen
	ini_set('display_errors','on');
	error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
	
}

function kundenanzeige_ausgeben($produkt_kd, $stk_kd, $summe_kd, $gesamtsumme_kd)
{

		#	Stück hat 3 Zeichen (über 100 Stück haben wir Pech)
		#	Stück hat schon deutsches Format, wieder zurückwandeln

	$stk_kd=str_replace('.', '', $stk_kd);
	$stk_kd=str_replace(',', '.', $stk_kd);
	
	$tmpStkKd=explode('.', $stk_kd);
	$tmpKomma=false;
	
	if(preg_match('/.00$/', $stk_kd)){
				#	komma 0 -> wird auf Int, darstellung ohne Komma formatiert
		$stk_kd=number_format($stk_kd, 0, "", "");
		$stk_kd=str_pad($stk_kd."x", 3, " ", STR_PAD_RIGHT);
	}
	else if(is_numeric($tmpStkKd[1]) && $tmpStkKd[1] >0){
		$stk_kd=number_format($stk_kd, 2, ",", "");		
		$stk_kd=str_pad($stk_kd, 5, " ", STR_PAD_RIGHT);
		$tmpKomma=true;		
	}
	
		#	Gesamtpreis je Produkt hat maximal 8 Zeichen - ab 10.000,00 Euro wie gehabt Pech
	$laenge_summe=strlen($summe_kd);   // Wie lange ist der Preis tatsächlich?
	
		#	Produktname ist 20 minus die Länge der Summe minus 4 bzw 6, 3 zeichen für Stück (ganze Zahl), 5 zeichen für Kommastück (Waage) und 1 Leerzeichen
	if($tmpKomma===false){	$produkt_laenge=20-$laenge_summe-4;		}
	else if($tmpKomma===true){$produkt_laenge=20-$laenge_summe-6;						}

		$replPat=array('/ß/', '/&/', '/€/');
		$repl=array('ss', 'u.', 'EUR');
		$produkt_kd=preg_replace($replPat, $repl, $produkt_kd);

	$diff=strlen($produkt_kd)-mb_strlen($produkt_kd, 'UTF-8');
	$produkt_kd=substr($produkt_kd,0,$produkt_laenge);
	
	
	$produkt_laenge+=$diff;
	$produkt_kd=str_pad($produkt_kd, $produkt_laenge, " ", STR_PAD_RIGHT);
	$produkt_kd=$produkt_kd . " ";
	
	#$xT=iconv_strlen($produkt_kd,'UTF-8');
		
	$zeile1_kd=$stk_kd . $produkt_kd . $summe_kd;	
		
	$gesamtsumme_kd=str_pad($gesamtsumme_kd, 12, " ", STR_PAD_LEFT);
	$zeile2_kd="Gesamt: " . $gesamtsumme_kd;
	

	if ( strtolower(KUNDENANZEIGE_TYP) != 'aus')
	{
		if ( strtoupper(KUNDENANZEIGE_TYP) == 'NETTUN' )
		{
			display_anzeigen_nettun($zeile1_kd, $zeile2_kd);
			#writeLog(basename( __FILE__)." ". __LINE__ , "Kundenanzeige Nettun \n".$zeile1_kd."\n".$zeile2_kd."\n");
		}
		if ( strtoupper(KUNDENANZEIGE_TYP) == 'EXPLORA' )
		{
			
			display_anzeigen_explora($zeile1_kd, $zeile2_kd);
			#writeLog(basename( __FILE__)." ". __LINE__ , "Kundenanzeige EXPLORA \n".$zeile1_kd."\n".$zeile2_kd."\n");
		}
	}
}


function kundenanzeige_ausgeben_text($zeile1, $zeile2)
{
	$zeile1=str_pad($zeile1, 20, " ", STR_PAD_BOTH);
	$zeile2=str_pad($zeile2, 20, " ", STR_PAD_BOTH);
	//$zeile1=iconv("UTF-8", "ISO-8859-1", $zeile1);
	//$zeile2=iconv("UTF-8", "ISO-8859-1", $zeile2);
	
	if ( strtolower(KUNDENANZEIGE_TYP) != 'aus')
	{
		if ( strtoupper(KUNDENANZEIGE_TYP) == 'NETTUN' )
		{
			display_anzeigen_nettun($zeile1, $zeile2);
		}
		if ( strtoupper(KUNDENANZEIGE_TYP) == 'EXPLORA' )
		{
			display_anzeigen_explora($zeile1, $zeile2);
		}
	}
	
}

	function kundenanzeige_loeschen()
	{
		if ( strtolower(KUNDENANZEIGE_TYP) != 'aus')
		{
			if ( strtoupper(KUNDENANZEIGE_TYP) == 'NETTUN' )
			{
				display_loeschen_nettun();
			}
			if ( strtoupper(KUNDENANZEIGE_TYP) == 'EXPLORA' )
			{
				display_loeschen_explora();
			}
		}
	}
			# Verarbeiten von error Msg -> gibt speziell für com Port Error log file -> wird nach 10000 zeilen auf 5000 reduziert.
			#     schreibt bei jeder Zeile, 
	function customError($errno, $errstr) {		
		$logFilePath='log/comPortLog.txt';
		file_put_contents($logFilePath, $errstr. " - Error No:".$errno." - \n", FILE_APPEND);
			# count lines of logFile
		$lineCount = 0;
		$handle = fopen($logFilePath, "r");
			while(!feof($handle)){
			  $line = fgets($handle);
			  $lineCount++;
			}				
		fclose($handle);	
		
		$lineLimit = 10000;
		if($lineCount > $lineLimit){							
				# Read the whole file into an array
			$fileOut = file($logFilePath); 
				# first line we let in, 2-5000 will be deleted
			array_splice($fileOut, 1, 5000);
				# Array (reduced ) back into logFile
			file_put_contents($logFilePath, implode($fileOut)				);			
		}
	}



//display_anzeigen_explora("ab####ööööüüü€c", "aaßßadef");

?>