From roland@p13.flokiste.fido.deWed Dec 14 09:39:16 1994
Date: Thu, 08 Dec 1994 15:05:46 +0100
From: Roland Rosenfeld <roland@p13.flokiste.fido.de>
To: fgate-users@gondor.gun.de
Subject: FidoGate 3.8.6 und die "*"-Zeilen
Resent-Date: Thu, 08 Dec 1994 15:05:46 +0100
Resent-From: fgate-users@gondor.gun.de


 * To: fgate-users@gondor.gun.de (FidoGate Mailinglist)

Moin Moin!

Vielleicht hat es Euch ja auch schonmal gestoert, wenn Ihr Messages
mit FidoGate doppel-gated (d.h. mit rfc2ftn erstellte Messages wieder
mit ftn2rfc zurueckkonvert). Man hat all die informativen
Header-Zeilen (From:, Reply-To:, To:, Cc:, Newsgroups:) im Body der
Message stehen (mit vorangestelltem " * ") und im Header stehen nur
unvollstaendige Broesel....

Fuer Mail habe ich daher jetzt gerade ein Perl-Skript geschrieben,
welches man anstelle von rmail in fidorun eintraegt. Damit werden dann
alle "*"-Header in den echten Header verschoben und die Anzahl der
Zeilen angepasst. Ein entsprechendes Skript fuer News wird noch ein
paar Tage dauern....

-------------------------- ftnrmail ---------------------------------
#!/usr/bin/perl
#
# $Id: ftnrmail.pl,v 1.3 1994/12/08 13:18:28 roland Exp $
#

$line=0;
$fromline=0;
$toline=0;
$linesline=0;
$sendto="";

undef @text;

while ( ($_=<STDIN>) && (!/^$/) ) {
    if ( /^From:/ ) {
	$fromline=$line;
    } elsif ( /^To:/ ) {
	$toline=$line;
	$sendto = $_;
	$sendto =~ s/^To: (.*)$/$1/;
    } elsif ( /^Lines:/ ) {
	$linesline=$line;
    } 
    push (@text,$_);
    $line++;
}

open (OUT, "| rmail $sendto");
#open (OUT, ">-");

undef @from;			# From: and Reply-To:
undef @to;			# To: and Cc:
undef $newsgroups;		# Newsgroups:
$lastfrom=0;			# last line was: 1 = From: or Reply-To:
				# 0 = other      2 = To: or Cc: 
$wasasterix=0;			# 1 = at least one "*" - Line.
$declines=0;
while ( ($next=<STDIN>)
       && (   ($next =~ /^ \* From:/)
	   || ($next =~ /^ \* Reply-To:/)
	   || ($next =~ /^ \*    /)
	   || ($next =~ /^ \* To:/)
	   || ($next =~ /^ \* Cc:/)
	   || ($next =~ /^ \* Newsgroups:/) ) ) {
    if ( $next =~ /^ \* From: / ) {
	$next =~ s/^ \* (.*)$/$1/;
	push (@from, $next);
	$lastfrom=1;
	$wasasterix=1;
	$declines++;
    } elsif (   $lastfrom==1 
	     && (   ($next =~ /^ \*    /) 
		 || ($next =~ /^ \* Reply-To:/) ) ) {
	$next =~ s/^ \* (.*)$/$1/;
	push (@from, $next);
    } elsif ( $next =~ /^ \* To: / ) {
	$next =~ s/^ \* (.*)$/$1/;
	push (@to, $next);
	$lastfrom=2;
	$wasasterix=1;
	$declines++;
    } elsif (   $lastfrom==2
	     && (   ($next =~ /^ \*    /) 
		 || ($next =~ /^ \* Cc:/) ) ) {
	$next =~ s/^ \* (.*)$/$1/;
	push (@to, $next);
    } elsif ( $next =~ /^ \* Newsgroups:/ ) {
	$lastfrom = 0;
	$next =~ s/^ \* (.*)$/$1/;
	$newsgroups=$next;
	$wasasterix=1;
    } else {
	print STDERR "This statement should never be reached!\n"
    }
} # end while $next

if ($wasasterix) {
    $declines++;
}

if ($declines != 0) {
    @text[$linesline] =~ /^Lines: (\d+)/;
    $l = $1-$declines;
    @text[$linesline] =~ s/^Lines: (\d+)/Lines: $l/;
}
if (defined $newsgroups) {
    splice (@text, $toline+1, 0, $newsgroups);
}
if (defined @to) {
    splice (@text, $toline, 1, @to);
}
if (defined @from) {
    splice (@text, $fromline, 1, @from);
}
print OUT @text;
unless ($wasasterix) {
    print OUT $_;
}
print OUT @other;
print OUT $next;

while ( $_=<STDIN> ) {
    print OUT $_;
}

close OUT;
-------------------------- ftnrmail ---------------------------------

Dieses Skript speichert Ihr einfach in /usr/local/lib/fidogate (oder
wo auch immer Euer FidoGate installiert ist) und aendert dann in
fidorun folgende Zeile:

	rmail `$LIB/toaddr $f` <$f

in 

	${LIB}/ftnrmail <$f

um. Die Verwendung von toaddr ist nicht mehr notwendig, da der
Adressat intern in dem Skript ermittelt wird (das ist notwendig, da
die Orginal-Mail im To:-Feld ja den Adressaten enthaelt, an den die
Mail noch geliefert werden muss, waehrend die von mir veraenderte Mail
wieder alle Adressaten enthaelt. Wuerde man rmail nun fuer alle diese
Adressaten aufrufen, gaebe es Massen von Dupes.).

Tschoeee

	Roland

-- 
  * Internet: roland@p13.flokiste.fido.de * Fido: 2:2450/111.13 *


