use utf8;
use strict;
use warnings; no warnings "redefine";

BEGIN {
	$Db::OutHandle = \*STDOUT;
}

##
## Funktion:
## line_set() stellt ein, welche Ausgabe verwendet werden soll.
## line_printer() startet diese Ausgabe.
## line_printer_end() stoppt sie wieder.
##
## Variablen: $Db::
## pr_fh     Ausgabe-Handle
## pr_fd     "permanente" Version des Ausgabe-Handles
## pr_modus  intendierte Ausgabe laut line_set()

# Flags:
# 1: keine direkte Ausgabe aufs Terminal
# 2: Ausgabe muss in 8859-15 sein

use Umlaut qw(latinmodus textmodus);
use Loader qw(lister);

sub line_printer(;$) {
	my($flags) = @_;
	$flags = 0 unless defined $flags;

	{

		# Ist sonst bei einem "leeren" IO::Scalar schlecht abzufangen:
		no warnings 'uninitialized';

		# Ja, die Anführungszeichen sind [rw]ichtig, vgl. RT#231987-5:
		return if $Db::pr_fh && "$Db::pr_fh" ne "$Db::OutHandle";
	}

	if(ref $Db::test_output) {
		$Db::pr_fh = $Db::test_output;
		return;
	}

	my $modus = 1;
	if($Db::pr_modus or (($flags&1) and not ref $Db::pr_fd) or $Db::pr_redo) {
		$Db::pr_modus=$Db::pr_redo if $Db::pr_redo;

		$modus = $Db::pr_modus;
		$modus = 1 if not $modus;
		$modus = -$modus if $modus < 0;
		$modus = 2 if $modus < 2 and ($flags&1);

		lister($modus);

		unless ($Db::pr_fh and $Db::pr_fh ne $Db::OutHandle) {
			$Db::pr_fh = $Db::OutHandle;
			$Db::pr_modus = 0;
			return;
		}
		if($Db::pr_modus and $Db::pr_modus < 0) { # warning on undef
			$Db::pr_fd->close() if ref $Db::pr_fd;
			$Db::pr_fd = $Db::pr_fh;
		}
		$Db::pr_modus = 0;
	} elsif(ref $Db::pr_fd) {
		$Db::pr_fh = $Db::pr_fd;
	} elsif (!$Db::pr_fh) {
		$Db::pr_fh = $Db::OutHandle;
	}
	if($flags & 2) {
		latinmodus($Db::pr_fh);
	} else {
		textmodus($Db::pr_fh);
	}
	$modus;
}
1;
