#!/usr/local/bin/perl 

# Epson stuff
$init      = "\033R\000\033l\012";
$italicOn  = "\033G";
$italicOff = "\033H";
$boldOn    = "\0334";
$boldOff   = "\0335";
$bullet    = "\033Ro";
$reset     = "";
$halfline  = "";

#HP stuff
$init      = "\033E\033(0U\033&k4S\033&a10L";
$reset     = "\033E";
$italicOn  = "\033(s1S";
$italicOff = "\033(s0S";
$boldOn    = "\033(s3B";
$boldOff   = "\033(s0B";
$bullet    = "\033(10U\b\033(0U";
$halfline  = "\033=";

foreach  $file (@ARGV) {
#
# Erste Seite durch nroff formatieren lassen,
# Kopf- und Fu_zeile finden
#
  open(FILE," nroff -o1 -man $file  |") || warn "Can't open file: $!\n";
  while (<FILE>) {
#
#   Leere Zeilen |berspringen
#
    if (/^$/) {
      next;
    }
    chop;
    if (! $head && /^(\w+).*\1/) {
      $head = $_;
#
#     Meta-Zeichen in der Kopfzeile ersetzen
#
      $head=~ s/[().*]/\\$&/g;
    } elsif ( /1$/ ) {
      $foot = $_;
    } 
  }
  close(FILE); 
  $foot =~ s/(\w+).*/\1/;
#
# Muster f|r gerade/ungerade Seiten erzeugen
#
  $pateven = "^[1-9].*" . $foot . "$";
  $patodd = "^" . $foot . ".*[0-9]$";

  open(FILE,"nroff -man $file  |")|| warn "Can't open $file: $!\n";

  $inside = 0;
  printf $init;
  while (<FILE>) {
    if (! $inside && (/$patodd/o || /$pateven/o)) {
      $inside = 1;
      print $_;
      next;
    } elsif ($inside && /$head/o) {
      $inside = 0;
      print '';
      print $_;
      next;
    }
    if (/^$/) {
      print $_ if (! $inside);
      next;
    }
    s/\0339/$halfline/g;
    s/_\010(.)/$boldOn$1$boldOff/g;
    s/(.)\010\1/$italicOn$1$italicOff/g;
    if (length($bullet) > 0) {
	s/o\010\+/$bullet/g;
    }
    print $_;
  }  # while
  close(FILE);
  print $reset;
} # foreach $file
