#!/usr/local/bin/perl

die("Usage: $0 dbm-file [selectionfile ...]\n") if($#ARGV < 0);

#dbmopen(%anmeld,"/idefix/var/users2/sysanm/WS93/sysp_anm",000);
dbmopen(%anmeld,"$ARGV[0]",000);
shift @ARGV;
($N,$K,$L,$M) = unpack("I4",$anmeld{pack(i,0)});
#print "N=$N K=$K L=$L M=$M\n";
# In the current version these numbers are not changeable.
die "Es muessen 3 Wunschtermine, 12 Nicht gewuenschte Termine und\n",
    "max. 5 Studenten pro Gruppe sein, es sind aber $K Wunschtermine,\n",
    "$L nichtgewuenschte Termine und $M Studenten pro Gruppe.\n"
    if($K != 3 || $L != 12 || $M != 5);
# Building the structure of a dbm entry
$format="I${K}I$L";
for($m=0; $m<$M; $m++)
{
    $format .= "a21a23II";
}
if($#ARGV >= 0)
{
    while($n = <>)
    {
	if($n > $N)
	{
	    die ("Number $n is too large, only $N data sets\n");
	}
	do output_dbm($n);
    }
}
else
{
    for($n=1; $n <= $N; $n++)
    {
	do output_dbm($n);
    }
}

sub output_dbm
{
    local($n) = @_;
    local($k,$l,$m,$vname,$nname,$mnr,$knr) = (0,0,0,"","",0,0);
    local(@Data) = ();
    print "ZETTEL ";
    # Unpack that entry
    @Data = unpack($format,$anmeld{pack(i,$n)});
    # Wunschtermine
    for($k=0; $k < $K; $k++)
    {
	print shift(@Data),"  ";
    }
    # Nicht gewuenschte Termine
    for($l=0; $l < $L; $l++)
    {
	print shift(@Data),"  ";
    }
    print "\n";
    # Studenten
    for($m=0; $m<$M; $m++)
    {
	($nname=shift(@Data)) =~ s/\0.*$//;
	($vname=shift(@Data)) =~ s/\0.*$//;
	# Remove spaces in names because the scheduling program can't handle it
	$nname =~ s/ /_/g;
	$vname =~ s/ /_/g;
	$knr = shift(@Data);
	$mnr=shift(@Data);
	print "STUDENT $nname $vname $mnr $knr\n" if $mnr;
    }
    print "\n";
}
