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

use Loader qw(select_descr);
use Dbase::Globals qw(bignum flag_names get_descr get_bitmap);

sub select_flags($;$$$) {
	my($flags,$domain,$kn,$subset) = @_; 
	$domain = "pwdomain" if $domain eq "";

	my $bitmap;
	$bitmap = get_bitmap($domain,$subset) if defined $subset;

	while(1) {
		my $flag = select_descr($domain,1+4+8+16+1024,<<END,$kn,$subset);
??    zeigt die gesetzten Flags an
l     (ausführliche) Liste aller möglichen Flags
*     löscht alle Flags
-     zurück ohne Änderung

END
		return $flags unless defined $flag;
		return undef if $flag eq "-";
		if($flag eq "??") {
			my $names = flag_names($flags,$domain);
			if($names ne "-") {
				print "$names\n";
			} else {
				print "...keine Flags gesetzt.\n";
			}
		} elsif($flag eq "*") {
			$flags = 0;
		} elsif($flag > 62) {
			print "... geht leider nicht, Wert ist >62.\n";
		} else {
			my $fflag = bignum(1)<<$flag;
			my $flag_name = get_descr($domain,$flag);
			if($flags & $fflag) {
				print "'$flag_name' zum Löschen vorgemerkt.\n";
				$flags &= ~$fflag;
			}
			elsif ( !defined $subset || $fflag & $bitmap ) {
				print "'$flag_name' zum Setzen vorgemerkt.\n";
				$flags |= $fflag;
			}
			else {
				print "Dieses Flag darf nicht (mehr) gesetzt werden.\n";
			}
		}
	}
}

1;
