#!/afs/athena/contrib/perl/p -d

$user_t =     "L L a9 a64 a64 a64 a64 a64 a64 x3 L10 L L L L L L";
$user_len = length(pack($user_t,0,0,''));

$new_user_t =  "L L a9 a64 a64 a64 a64 a64 a64 x3 L10 L L L L L L";
$new_user_len = length(pack($user_t,0,0,''));

$knuck_t =     "L7 a9 x3 L a71 x L";
$knuck_len = length(pack($knuck_t,0));

$new_knuck_t =     "L7 a9 x3 L a71 x L";
$new_knuck_len = length(pack($knuck_t,0));

$ques_t =     "L a64 a64 L81 L a24 L a64 a64 a512";
$ques_len = length(pack($ques_t,0,''));

$new_ques_t = "L a64 a64 L81 L a24 L a64 a64 a512 L L L L L";
$new_ques_len = length(pack($new_ques_t,0,''));

open(FD,$ARGV[0]) || die "Cannot open $ARGV[0]: $!\n";
open(OUTFD,">$ARGV[1]") || die "Cannout open $ARGV[1] for writing: $!\n";

while (1) {
    &read_pad;
    study $pad;
    if ($pad =~ /new user/) {
	&read_user;
	next;
    }
    if ($pad =~ /new knuckle/) {
	&read_knuck;
	next;
    }
    if ($pad =~ /new train/) {
	&read_ques;
	next;
    }
    if ($pad =~ /a blank/) {
	next;
    }
    if ($pad =~ /new data/) {
	print "done\n";
	last;
    }
    print "Unknown pad: |$pad|\n";
}


sub read_pad {
    read(FD,$pad,16);
    syswrite(OUTFD,$pad,16);
}

sub read_user {
    read(FD,$stuff,$user_len);

    $#spec = 10;

    ($junk, $uid, $username, $realname, $nickname, $title1, $title2, $machine,
     $realm, @spec[0..9], $no_spec, $perm, $status, $no_knuck, $max_ask,
     $max_ans) =
	 unpack($user_t,$stuff);

    $new_user = pack($new_user_t,$junk, $uid, $username, $realname, $nickname,
		     $title1, $title2, $machine, $realm, @spec[0..9],
		     $no_spec, $perm, $status, $no_knuck, $max_ask,
		     $max_ans);
    syswrite(OUTFD,$new_user,$new_user_len);
    print "User: $username\n";
}

sub read_knuck {
    read(FD,$stuff,$knuck_len);

    ($j1,$j2,$j3,$j4, $inst, $tstamp, $status, $cusername, $cinst, $nm, $nme) =
	unpack($knuck_t,$stuff);

    $new_knuck = pack($new_knuck_t, $j1,$j2,$j3,$j4, $inst, $tstamp, $status,
		      $cusername, $cinst, $nm, $nme);

    syswrite(OUTFD,$new_knuck,$new_knuck_len);
    print "  k $inst\n";
}

sub read_ques {
    read(FD,$stuff,$ques_len);

    $#seen = 81;

    ($j1,$log,$info,@seen[0..80],$nseen,$topic,$tc, $title, $note, $comment) =
	unpack($ques_t,$stuff);
    $new_ques = pack($new_ques_t, $j1,$log,$info,@seen[0..80],$nseen,$topic,
		     $tc, $title, $note, $comment,0,0,0,0,-1);
    $new_topic = &fixit($topic);
    syswrite(OUTFD,$new_ques,$new_ques_len);
    print "  ques $new_topic\n";
}
    
sub fixit {
    substr(@_[0],0,index(@_[0],"\0"));
}

#
# Local Variables:
# mode: perl
# End:
#
