This is teumax.pl in view mode; [Download] [Up]
#!/usr/local/bin/perl
#---------------------------------------------------------------------------
#
# teumax.pl 1.0.0 - (c) 1998 by NiFiX, Stephan Gelhaus
#
# =====================================================
#
# revisions
# 1.0.0 11.01.1998 erste version
#
$SCRIPT = $ENV{'SCRIPT_NAME'};
$cgi = 1;
$millisek = time();
$datuhr = localtime($millisek);
$datuhr =~ s/ / /g;
@datuhr = split(/ /,$datuhr);
$htag = $datuhr[2];
$hmonat = &mnam2num($datuhr[1]);
$hjahr = $datuhr[4];
$btag = 1;
$bmonat = $hmonat;
$bjahr = $hjahr;
$etag = $htag;
$emonat = $hmonat;
$ejahr = $hjahr;
#$workdir = "/usr/local/lib/isdn/";
#$logdir = "/usr/adm/";
$log = "eumax.log";
$names = "aliases";
$vorwde = "vorwahl-de";
#### Do standard HTTP stuff ####
&cgi_receive;
&cgi_decode;
&cgi_header;
$opt_i = $workdir . $log;
$bemodus = $FORM{'bemodus'};
if (!$bemodus)
{
$bemodus = "h";
$first = 1;
}
if ($bemodus eq "h")
{
$opt_b = $htag . "." . $hmonat . "." . $hjahr;
}
if ($bemodus eq "be")
{
$btag = $FORM{'btag'};
$bmonat = $FORM{'bmonat'};
$bjahr = $FORM{'bjahr'};
$etag = $FORM{'etag'};
$emonat = $FORM{'emonat'};
$ejahr = $FORM{'ejahr'};
$opt_b = $btag . "." . $bmonat . "." . $bjahr;
$opt_e = $etag . "." . $emonat . "." . $ejahr;
}
$opt_a = $FORM{'apparat'};
$gespraeche = $FORM{'gespraeche'};
if (!$gespraeche)
{
$gespraeche = "a";
}
if ($gespraeche eq "k")
{
$opt_k = 1;
}
if ($gespraeche eq "g")
{
$opt_r = 1;
}
if ($gespraeche eq "a")
{
$opt_k = 1;
$opt_r = 1;
}
if ($FORM{'summe'} eq "s")
{
$opt_s = 1;
}
if ($FORM{'topc'})
{
$opt_c = $FORM{'topc'};
}
if ($FORM{'topg'})
{
$opt_g = $FORM{'topg'};
}
if ($FORM{'topt'})
{
$opt_t = $FORM{'topt'};
}
&read_aliases;
&html_header;
&setup_form;
if ($first)
{
&html_footer;
exit;
}
#### Prevent HTML output
foreach $key (keys %FORM)
{
$FORM{$key} =~ s/</\</g;
$FORM{$key} =~ s/>/\>/g;
}
#####################################################################
#### SUBROUTINES ####################################################
#####################################################################
sub cgi_header {
print "Content-type: text/html\n\n";
#print "\n" unless ($FORM{'next-url'});
}
sub cgi_receive {
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $incoming, $ENV{'CONTENT_LENGTH'});
}
else
{
$incoming = $ENV{'QUERY_STRING'};
}
}
sub cgi_decode {
@pairs = split(/&/, $incoming);
foreach (@pairs) {
($name, $value) = split(/=/, $_);
$name =~ tr/+/ /;
$value =~ tr/+/ /;
$name =~ s/%([A-F0-9][A-F0-9])/pack("C", hex($1))/gie;
$value =~ s/%([A-F0-9][A-F0-9])/pack("C", hex($1))/gie;
#### Strip out semicolons unless for special character
$value =~ s/;/$$/g;
$value =~ s/&(\S{1,6})$$/&\1;/g;
$value =~ s/$$/ /g;
$value =~ s/\|/ /g;
$value =~ s/^!/ /g; ## Allow exclamation points in sentences
#### Skip blank text entry fields
next if ($value eq "");
#### Check for "assign-dynamic" field names
#### Mainly for on-the-fly input names, especially checkboxes
if ($name =~ /^assign-dynamic/) {
$name = $value;
$value = "on";
}
#### Allow for multiple values of a single name
$FORM{$name} .= ", " if ($FORM{$name});
$FORM{$name} .= $value;
}
}
#####################################################################
sub dump_values {
local($env, $handle) = @_;
eval "\@keys = keys \%$env";
eval "\@values = values \%$env";
($handle eq "STDOUT") && (print $handle "<PRE>\n");
while ($#keys >= 0) {
$key = pop(@keys);
$value = pop(@values);
if ($value =~ /[\cM\n]/) {
print $handle "($key)\n";
print $handle "-" x 70, "\n", $value, "-" x 70, "\n";
}
else {
print $handle "($key) $value\n";
}
}
($handle eq "STDOUT") && (print $handle "</PRE>\n");
}
sub setup_form {
local(@tage) = (1..31);
local(@zmonate)= (1..12);
local(@dmonate)= ('','Januar','Februar','März','April','Mai','Juni',
'Juli','August','September','Oktober','November','Dezember');
local(@jahre) = (1990..$hjahr);
print qq|<h3>Verbindungsdaten</h3>\n|;
print qq|<FORM ACTION="http://lotus/cgi-bin/teumax.pl" method=post>\n|;
print qq|<table border=0>\n|;
print qq|<tr>\n|;
if ($bemodus eq "ai")
{
print qq|<td valign=top><input type=radio CHECKED name=bemodus value=ai>\n|;
}
else
{
print qq|<td valign=top><input type=radio name=bemodus value=ai>\n|;
}
print qq|<td valign=top><h4>im Abrechnungs-Intervall</h4><td></td>\n|;
print qq|<td colspan=4><SELECT NAME=accint>\n|;
print qq|<OPTION>kein Intervall verfügbar|;
print qq|</SELECT></TR>\n|;
print qq|<tr>\n|;
if ($bemodus eq "be")
{
print qq|<td rowspan=2 valign=top><input CHECKED type=radio name=bemodus value=be>\n|;
}
else
{
print qq|<td rowspan=2 valign=top><input type=radio name=bemodus value=be>\n|;
}
print qq|<td rowspan=2 valign=top><h4>im Zeitraum</h4>\n|;
print qq|<td>vom\n|;
print qq|<td><SELECT NAME=btag>\n|;
foreach $t (@tage)
{
if ($t == $btag)
{
print qq|<OPTION SELECTED>$t|;
}
else
{
print qq|<OPTION>$t|;
}
}
print qq|</SELECT>\n|;
print qq|<td><SELECT NAME=bmonat>\n|;
foreach $m (@zmonate)
{
if ($m == $bmonat)
{
print qq|<OPTION SELECTED VALUE=$m>@dmonate[$m]|;
}
else
{
print qq|<OPTION VALUE=$m>@dmonate[$m]|;
}
}
print qq|</SELECT>\n|;
print qq|<td><SELECT NAME=bjahr>|;
foreach $j (@jahre)
{
if ($j == $bjahr)
{
print qq|<OPTION SELECTED>$j|;
}
else
{
print qq|<OPTION>$j|;
}
}
print qq|</SELECT></TR>\n|;
print qq|<tr><td>bis\n|;
print qq|<td><SELECT NAME=etag>\n|;
foreach $t (@tage)
{
if ($t == $etag)
{
print qq|<OPTION SELECTED>$t|;
}
else
{
print qq|<OPTION>$t|;
}
}
print qq|</SELECT>\n|;
print qq|<td><SELECT NAME=emonat>\n|;
foreach $m (@zmonate)
{
if ($monate[$m] eq $emonat)
{
print qq|<OPTION SELECTED VALUE=$m>$dmonate[$m]|;
}
else
{
print qq|<OPTION VALUE=$m>$dmonate[$m]|;
}
}
print qq|</SELECT>\n|;
print qq|<td><SELECT NAME=ejahr>|;
foreach $j (@jahre)
{
if ($j == $ejahr)
{
print qq|<OPTION SELECTED>$j|;
}
else
{
print qq|<OPTION>$j|;
}
}
print qq|</SELECT></TR>\n|;
print qq|<tr>\n|;
if ($bemodus eq "h")
{
print qq|<td valign=top><input type=radio CHECKED name=bemodus value=h>\n|;
}
else
{
print qq|<td valign=top><input type=radio name=bemodus value=h>\n|;
}
print qq|<td valign=top><h4>von heute</h4></td>\n|;
print qq|<tr><td colspan=3><h4>von folgenden internen Teilnehmer(n)</h4>\n|;
print qq|<td colspan=2><SELECT NAME=apparat>\n|;
print qq|<OPTION value=0>alle|;
@sorted_int = sort {$intName4{$a} ge $intName4{$b}} keys(%intName4);
foreach (@sorted_int)
{
$int = &isostyle($intName4{$_});
if ($_ == $opt_a)
{
print qq|<OPTION SELECTED value=$_>$_ : $int|;
}
else
{
print qq|<OPTION value=$_>$_ : $int|;
}
}
print qq|</SELECT>\n|;
print qq|<td><h4>anzeigen.</h4></TR>\n|;
print qq|<tr><td colspan=6><h3>Anzeige-Optionen:</h3></TR>\n|;
if ($gespraeche eq "r")
{
print qq|<tr><td valign=top><input type=radio name=gespraeche checked value=r>\n|;
}
else
{
print qq|<tr><td valign=top><input type=radio name=gespraeche value=r>\n|;
}
print qq|<td colspan=5><h4>gehende Gespräche</h4></TR>\n|;
if ($gespraeche eq "k")
{
print qq|<tr><td valign=top><input type=radio name=gespraeche checked value=k>\n|;
}
else
{
print qq|<tr><td valign=top><input type=radio name=gespraeche value=k>\n|;
}
print qq|<td colspan=5><h4>kommende Gespräche</h4></TR>\n|;
print qq|</tr>\n|;
if ($gespraeche eq "a")
{
print qq|<tr><td valign=top><input type=radio name=gespraeche checked value=a>\n|;
}
else
{
print qq|<tr><td valign=top><input type=radio name=gespraeche value=a>\n|;
}
print qq|<td colspan=5><h4>alle Gespräche</h4></TR>\n|;
print qq|</tr>\n|;
print qq|<tr>\n|;
if ($opt_s)
{
print qq|<td valign=top><input type=checkbox name=summe checked value=s>\n|;
}
else
{
print qq|<td valign=top><input type=checkbox name=summe value=s>\n|;
}
print qq|<td colspan=5><h4>nur Summen</h4></TR>\n|;
print qq|<tr>\n|;
print qq|<td colspan=2><h4>Top-Listen anzeigen</h4>\n|;
print qq|<td colspan=2 valign=top><input name=topc size=2 maxlength=2|;
if ($opt_t)
{
print qq| value=$opt_t>\n|;
}
else
{
print qq|>\n|;
}
print qq| Einh. Gesamt|;
print qq|<td valign=top><input name=topg size=2 maxlength=2|;
if ($opt_c)
{
print qq| value=$opt_c>\n|;
}
else
{
print qq|>\n|;
}
print qq| Einh. City|;
print qq|<td valign=top><input name=topt size=2 maxlength=2|;
if ($opt_g)
{
print qq| value=$opt_g>\n|;
}
else
{
print qq|>\n|;
}
print qq| gehende Gespräche</TR>\n|;
print qq|</table>\n|;
print qq|<p><input type=submit value="Abfrage starten"><input type=reset value="Angaben löschen">\n|;
print qq|</FORM>\n|;
print qq|<hr>\n|;
}
#require "teumax";
##!/usr/local/bin/perl
#---------------------------------------------------------------------------
#
# teumax 1.6.0 - (c) 1996-1998 by NiFiX, Stephan Gelhaus
#
# mit Erweiterungen von Hellmuth Michaelis
#
# =====================================================
#
# revisions
# 1.0.0 23.01.96 erste version
# 1.1.0 28.02.96 erweiterung um: aufgelegt-erkennung, prozente
# 1.2.0 09.03.96 erweiterung um: intern-extern, dienst; vereinfachung
# 1.3.0 26.03.96 erweiterung um: nur Nummern-Ausgabe, Datums-Bereich,
# ISDN-Router-Abrechnung, Zeitraum-ausgabe
# 1.3.1 09.04.96 bug-fix: $heute-leerzeichen
# 1.4.0 28.02.97 erweiterung von Hellmuth Michaelis: siehe extra Kasten
# erweiterung um: nur Summen drucken
# 1.5.0 15.03.97 erweiterung um: Top-Liste Gesamt und im Citytarif-Bereich (Gebuehren)
# 1.5.1 16.03.97 bug-fix: TOP-Listen-Sortierung vereinfacht
# 1.5.2 23.07.97 erweiterung um: Durchwahl-Text frei definierbar
# 1.5.3 06.08.97 erweiterung um: Top-Liste Gesamt (Anzahl der gehenden Gespraeche)
# 1.6.0 30.12.97 erweiterung um: HTML-Ausgabe
#
#---------------------------------------------------------------------------
#
# modified by Hellmuth Michaelis, hm@kts.org
#
# last edit-date: [Sun Feb 2 10:15:54 1997]
#
# -hm reformatted (sorry!)
# -hm Quante/Ackermann Firmware 1.11b
# -hm fuehrende Nullen
# -hm NoPrint, Unterdrueckung von ISDN IP Verkehr
# -hm Wildcards fuer Durchwahlen
# -hm unbekannte Nummern nach File schreiben
# -hm -i option
#
#---------------------------------------------------------------------------
# Aufruf-Optionen:
#
# -b <Datum> Ausgabe ab Datum
# -d debug output der wildcard eintraege
# -e <Datum> Ausgabe bis Datum
# -i <Datei> Dateiname fuer input, sonst lesen von stdin
# -n Ausgabe der gerufenen Nummern,
# nicht der dazugehoerigen Namen.
# -N Ausgabe von "NoPrint" nicht (!) unterdruecken
# -u <Datei> Ausgabe der unbekannten Rufnummern nach Datei
# -s Ausgabe nur der Summen aller Gespraeche (hat Vorang
# vor den Optionen -n und -N)
# -t <Anzahl> Ausgabe der ersten <Anzahl> der Topliste (Gebuehren)
# -c <Anzahl> Ausgabe der ersten <Anzahl> der Topliste im
# City-Tarif Bereich (Gebuehren)
# -g <Anzahl> Ausgabe der ersten <Anzahl> der Topliste (gehende Gespraeche)
# -h Ausgabe im HTML-Format
#
#---------------------------------------------------------------------------
#$workdir = "/usr/local/lib/isdn/";
#$logdir = "/usr/adm/";
#$log = $logdir . "eumax.log";
#$log = "eumax.log";
#$names = $workdir . "aliases";
#$names = "aliases";
#$vorwde = $workdir . "vorwahl-de";
$maxNameLength = 30;
$maxRNameLength = 11;
$old_year = -1;
$acc1day = "";
$acc2day = "";
$heute = time();
$heute = localtime($heute);
$heute =~ s/ / /g;
@heute = split(/ /,$heute);
$jahr = $heute[4];
$min_date = 0;
$max_date = 99999999;
$all_te = 0;
$durchwahlText = " -";
#---------------------------------------------------------------------------
# suche nach name in der alias liste
# parm1 = telefonnummer
#---------------------------------------------------------------------------
sub searchwild
{
local($number) = $_[0];
local($name);
if($number ne "Rufnr.unbekannt")
{
# Alias assoziativ in normaler Liste suchen
$name = $name4{$number};
if($name =~ /^$/ ) # Alias gefunden ?
{
# EVN 000 testen
$number000 = $number;
$number000 =~ s/(.*)000$/$1/;
$name = $name4{$number000};
}
if($name =~ /^$/ ) # Alias gefunden ?
{
# nein, in der "Wildcard-Liste" normal suchen
for ($[ .. $#wnum)
{
if ($number =~ /^$wnum[$_]/) # gefunden ?
{
$number =~ s/$wnum[$_]//; # Durchwahl extrahieren
return $wnam[$_] . "$durchwahlText" . "$number";
}
}
# nicht gefunden
if ($opt_u ne "") # Nummern merken ?
{
print UNKNOWN "$number\n";
}
return $number; # Nummer selbst zurueckgeben
}
else # assoziativ gefunden, Alias zurueckgeben
{
return $name;
}
}
return $number;
}
#---------------------------------------------------------------------------
# suche nach vorwahl in der citytarif liste
# parm1 = telefonnummer
#---------------------------------------------------------------------------
sub searchcity
{
local($number) = $_[0];
for ($[ .. $#city)
{
if ($number =~ /^@city[$_]/) # gefunden ?
{
return "1";
}
}
return "0";
}
#---------------------------------------------------------------------------
# convert umlaute into html-style
#---------------------------------------------------------------------------
sub isostyle
{
local ($name) = $_[0];
$name =~ s/&/&/g;
$name =~ s/Ù/ä/g;
$name =~ s/ö/ö/g;
$name =~ s/ö/ü/g;
$name =~ s/…/Ä/g;
$name =~ s/–/Ö/g;
$name =~ s/š/Ü/g;
$name =~ s/û/ß/g;
$name =~ s/</</g;
$name =~ s/>/>/g;
return $name;
}
#---------------------------------------------------------------------------
# convert date to number
#---------------------------------------------------------------------------
sub date2num
{
local ($tag, $monat, $jahr, @rest) = @_;
if ($jahr < 1900)
{
$jahr += 1900;
}
# jahrtausendwechsel
if ($jahr < 1990)
{
$jahr += 100;
}
return ($tag + $monat * 100 + $jahr *10000);
}
#---------------------------------------------------------------------------
# convert 2 to 4 ziffer year
#---------------------------------------------------------------------------
sub year2to4
{
local(@aDate) = split(/\./,$_[0]);
if ($aDate[2] < 1900)
{
$aDate[2] += 1900;
}
if ($aDate[2] < 1990)
{
$aDate[2] += 100;
}
return join(".",@aDate);
}
#---------------------------------------------------------------------------
# convert month short name to number
#---------------------------------------------------------------------------
sub mnam2num
{
local($aMonth) = $_[0];
$aMonth =~ s/Jan/01/;
$aMonth =~ s/Feb/02/;
$aMonth =~ s/Mar/03/;
$aMonth =~ s/Apr/04/;
$aMonth =~ s/May/05/;
$aMonth =~ s/Jun/06/;
$aMonth =~ s/Jul/07/;
$aMonth =~ s/Aug/08/;
$aMonth =~ s/Sep/09/;
$aMonth =~ s/Oct/10/;
$aMonth =~ s/Nov/11/;
$aMonth =~ s/Dec/12/;
return $aMonth;
}
sub html_header {
print "<HTML><HEAD><TITLE>TEUMAX Verbindungen</TITLE></HEAD><BODY>\n";
}
sub html_footer {
print "</BODY></HTML>\n";
print "<center><address>©1998 by NiFiX dental develop, Stephan Gelhaus<br>\n";
print qq|Anregungen, Fragen und Kommentare an <a href="mailto:gelhaus\@nifix.com">gelhaus\@nifix.com</a></address></center>\n|;
print "</HTML>\n";
}
#---------------------------------------------------------------------------
# Start
#---------------------------------------------------------------------------
if (!$cgi)
{
&Getopts("b:c:dDe:g:hi:nNsu:t:");
}
if ((!$opt_r) && (!$opt_k))
{
$opt_r = 1;
$opt_k = 1;
}
if ($opt_u ne "")
{
local($filename) = $opt_u . ".new";
open(UNKNOWN, ">$filename") || die "cannot open $opt_u for writing";
}
#---------------------------------------------------------------------------
# ausgabe ab Datum ?
#---------------------------------------------------------------------------
if ($opt_b ne "")
{
@datum = split(/\./,$opt_b);
if ($datum[2]eq "")
{
$datum[2] = $jahr;
}
$b_date = &date2num($datum[0],$datum[1],$datum[2]);
}
else
{
$b_date = $min_date;
}
#---------------------------------------------------------------------------
# Ausgabe bis Datum ?
#---------------------------------------------------------------------------
if ($opt_e ne "")
{
@datum = split(/\./,$opt_e);
if ($datum[2]eq "")
{
$datum[2] = $jahr;
}
$e_date = &date2num($datum[0],$datum[1],$datum[2]);
}
else
{
$e_date = $max_date;
}
#---------------------------------------------------------------------------
# Files oeffnen
#---------------------------------------------------------------------------
#open(VORWDE,$vorwde) || die "cannot open $vorwde for reading";
#---------------------------------------------------------------------------
# Alias File handling
# <tel-nr>\t<name>\t<dienst>
#---------------------------------------------------------------------------
sub read_aliases
{
open(NAMES,$names) || die "cannot open $names for reading";
while (<NAMES>)
{
if (!/^#/) # kommentare ueberlesen
{
while (/\t\t/) # multiple TAB's weghauen
{
s/\t\t/\t/g;
}
$alias = $_;
chop($alias);
@n2name = split(/\t/,$alias);
# filtern von "+", "-", "(" & ")"
$n2name[0] =~ s/\+/00/;
$n2name[0] =~ s/-//g;
$n2name[0] =~ s/\(//g;
$n2name[0] =~ s/\)//g;
if((index($n2name[0], "*")) != -1)
{
# numbers containing a wildcard
$n2name[0] =~ s/\*//g;
push(@wnum, $n2name[0]);
push(@wnam, $n2name[1]);
push(@wrem, $n2name[2]);
}
elsif((index($n2name[0], "@")) != -1)
{
# nummer eine Vorwahl aus dem Citytarif-Bereich
$n2name[0] =~ s/\@//g;
push(@city, $n2name[0]);
}
else
{
# numbers without wildcards
$name4{$n2name[0]} = $n2name[1];
$dienst4{$n2name[0]} = $n2name[2];
# extra liste fuer interne Teilnehmer
if ((10 <= $n2name[0]) && ($n2name[0] <= 99))
{
$intName4{$n2name[0]} = $n2name[1];
}
}
}
}
close(NAMES);
}
#---------------------------------------------------------------------------
# nationales vorwahl handling
# vorwahl ort
#---------------------------------------------------------------------------
#while (<VORWDE>)
#{
# if (!/^#/) # kommentare ueberlesen
# {
# while (/ /) # multiple leerzeichen weghauen
# {
# s/ / /g;
# }
#
# while (/ /) # doppelte leerzeichen durch TAB ersetzen
# {
# s/ /\t/g;
# }
#
# $alias = $_;
# chop($alias);
#
# @vw2ort = split(/\t/,$alias);
# $ort4{@vw2ort[0]} = @vw2ort[1];
# }
#}
#close(VORWDE);
#---------------------------------------------------------------------------
# datensaetze von der MAXIMA
# Tln Datum Uhrzeit Amtsrufnummer Einheiten Betrag
# G 13 | 17.01.96, 18:26 | 65897 | 20 | 2,40 DM
# G 51 | 21.01.96, 11:37 | 03379353318 | 18 | 2,16 DM
# K AVA | 15.01.96, 16:22 | 7119494166
# V 12 | 19.01.96, 10:51 | 4047171
#
#01 2 3 4 5 6 7
# $field[n]
#
# Tln: G=gehend, K=kommend, V=verbunden, AVA=Anrufer vorher aufgelegt
#---------------------------------------------------------------------------
print "<TABLE BORDER=0>\n";
if (!$opt_s)
{
print "<TR><TH>Datum<TH>Uhrzeit<TH align=right>Einh.<TH align=right>Betrag<TH align=right>intern<TH>VA<TH align=left>externer Teilnehmer<TH>Dienst</TR>\n";
print "<TR><TD COLSPAN=8><HR></TR>\n";
}
open(STDIN, $log) || die "cannot open $log for reading";
while (<STDIN>)
{
if (/\|/)
{
s/\|//g;
s/, / /g;
# alle vielfachen leerzeichen loeschen
while (/ /) { s/ / /g; }
$line = $_;
# zeilenende loeschen
chop($line);
# zeile in tokens zerteilen
@field = split(/ /,$line);
# komma hinter datum loeschen
$field[2] =~ s/,.*//;
@logDate = split(/\./,$field[3]);
if ($logDate[2] < 90)
{
$logDate[2] += 2000;
}
else
{
$logDate[2] += 1900;
}
$logDate = &date2num($logDate[0],$logDate[1],$logDate[2]);
if ($b_date > $logDate || $logDate > $e_date)
{
next;
}
if ($acc1day eq "")
{
$acc1day = $field[3];
}
$acc2day = $field[3];
#---------------------------------------------------------------------------
# kommende & vermittelte Gespraeche
#---------------------------------------------------------------------------
if ($field[1] eq "K" || $field[1] eq "V")
{
# 0 vor ortnetz-kennzahl einfuegen, macht die Telekom nicht
$field[5] =~ s/(^[1-9].*)/0$1/;
}
#---------------------------------------------------------------------------
# Gehende Gespraeche
#---------------------------------------------------------------------------
if ($field[1] eq "G")
{
# wenn es ein ortsgespraech war, dann ortnetz-kennzahl vorsetzen
$field[5] =~ s/(^[1-9].*)/$name4{"Ortsnetz"}$1/;
}
#---------------------------------------------------------------------------
# alle anderen Gespraeche
#---------------------------------------------------------------------------
# gebuehrenfreies gespraech
$field[6] =~ s/.*frei.*//;
$field[7] =~ s/.*Gesp.*/frei/;
# komma in punkt umwandeln
$field[7] =~ s/(.*),(.*)/$1.$2/;
# name1 suchen
$theExtName = &searchwild( $field[5] );
# name2 suchen
$theIntName = &searchwild( $field[2] );
# check if printout nicht unterdrueckt werden soll
if(!$opt_s)
{
$detailedPrint = ($name4{$theIntName} ne "NoPrint") && ($name4{$theExtName} ne "NoPrint") && (!$opt_a || ($opt_a eq $field[2])) && (($opt_r && ($field[1] eq "G")) || ($opt_k && $field[1] ne "G"));
if($detailedPrint)
{
# ausgabe
printf "<TR><TD ALIGN=CENTER>%s<TD ALIGN=CENTER>%s<TD ALIGN=RIGHT>%s<TD ALIGN=RIGHT>%s<TD ALIGN=RIGHT>%s",
&year2to4($field[3]), $field[4], $field[6], $field[7], &isostyle($theIntName);
print "<TD ALIGN=CENTER>";
if ($field[1] eq "G")
{
print "->";
}
elsif ($field[1] eq "K")
{
print ":(";
}
elsif ($field[1] eq "V")
{
print "<-";
}
else
{
print "??";
}
# -n, ausgabe der gerufenen nummern, nicht der dazugehoerigen namen.
if ($opt_n)
{
print "<TD>$field[5]";
}
else
{
printf "<TD>%s", &isostyle($theExtName);
}
# Daten, Sprache, Fax
if ($field[5] eq "Rufnr.unbekannt")
# wenn "Rufnr.unbekannt", dann wird der Dienst des internen Teilnehmers genommen
{
$rem = $dienst4{$field[2]};
}
# andernfalls, der Dienst des externen Teilnehmers
else
{
$rem = $dienst4{$field[5]};
}
$voice = 1;
print "<TD ALIGN=CENTER>";
if (index($rem,"D") != -1)
{
print "D";
$voice = 0;
}
if (index($rem,"F") != -1)
{
print "F";
$voice = 0;
}
if ((index($rem,"S") != -1) || $voice)
{
print "S";
}
print "</TR>\n";
}
}
# einheiten und geldbetraege pro teilnehmer merken, sowie anzahl der gespraeche
if ($opt_r && ($field[1] eq "G") && (!$opt_a || ($opt_a eq $field[2])))
{
$sum_te{$field[2]} += $field[6];
$sum_dm{$field[2]} += $field[7];
$top_gg{$theExtName}++;
if ($field[6] != 0) { # kostenlose gespraeche interessieren nicht
$top_te{$theExtName} += $field[6];
$top_dm{$theExtName} += $field[7];
if (&searchcity( $field[5] ) ) {
$top_city_te{$theExtName} += $field[6];
$top_city_dm{$theExtName} += $field[7];
}
}
$all_te += $field[6];
$all_dm += $field[7];
}
}
}
if ($opt_D ne "") # soll die summe der Router Einheiten berechnet werden?
{
if ($opt_b ne "") # mit beginn datum
{
@sum_is = `trouter -b $opt_b -s < /usr/adm/isdn.log`;
}
else
{
@sum_is = `trouter -s < /usr/adm/isdn.log`;
}
$sum_te{"IP"} = $sum_is[0];
$sum_dm{"IP"} = $sum_is[1];
$top_te{"IP"} = $sum_is[0];
$top_dm{"IP"} = $sum_is[1];
if ($sum_is[0] != 0 && &searchcity( "IP" )) # ist IP traffic im citytarif-bereich
{
$top_city_te{"IP"} = $sum_is[0];
$top_city_dm{"IP"} = $sum_is[1];
}
$all_te += $sum_is[0];
$all_dm += $sum_is[1];
}
if(!$opt_s)
{
print "<TR><TD COLSPAN=8><HR></TR>\n";
print "<TR><TD colspan=4><TD ALIGN=RIGHT>Verbindungsart<TD ALIGN=CENTER>-><TD>gehend<TD align=center><B>D</B>aten</TR>\n";
print "<TR><TD colspan=4><TD ALIGN=RIGHT>(VA)<TD ALIGN=CENTER><-<TD>kommend<TD align=center><B>F</B>ax</TR>\n";
print "<TR><TD colspan=7><TD align=center><B>S</B>prache</TR>\n";
}
if ($all_te > 0 && $opt_r) # wurden kostenpflichtige Gespraeche gefuehrt ?
{
print "<TR><TD COLSPAN=8><HR></TR>\n";
if ($opt_a)
{
print "<TR><Td><Td><Td align=right><B>Einh.</B><Td align=right><B>Betrag</B><Td colspan=3 align=left><B>interner Teilnehmer</B></TR>\n";
printf "<TR><TD><B>Gesamt</B><TD COLSPAN=2 ALIGN=RIGHT>%d<TD ALIGN=RIGHT>%7.2f<TD colspan=3>%s</TR>\n",
$sum_te{$opt_a}, $sum_dm{$opt_a}, &isostyle($name4{$opt_a});
}
else
{
$te_sum = $all_te ? $all_te : 1;
print "<TR><Td><Td align=right><B>Anteil</B><Td align=right><B>Einh.</B><Td align=right><B>Betrag</B><Td colspan=3 align=left><B>interner Teilnehmer</B></TR>\n";
foreach $number (sort(keys %sum_te))
{
printf "<TR><TD COLSPAN=2 ALIGN=RIGHT>%5.1f %%<TD ALIGN=RIGHT>%d<TD ALIGN=RIGHT>%7.2f<TD colspan=3>%s</TR>\n",
$sum_te{$number} / $te_sum * 100, $sum_te{$number}, $sum_dm{$number}, &isostyle($name4{$number});
}
print "<tr><td><td colspan=3><hr>\n";
printf "<TR><TD><B>Gesamt</B><TD ALIGN=RIGHT>100.0 %%<TD ALIGN=RIGHT>%5d<TD ALIGN=RIGHT>%7.2f<TD>\n", $all_te, $all_dm;
}
}
if ($opt_t && $opt_r) # topliste ausgeben
{
print "<tr><td colspan=8><hr></TR>\n";
print "<tr><td colspan=2 align=left><B>TOP-Gesamt</B><td align=right><B>Einh.</B><td align=right><B>Betrag</B><td colspan=3 align=left><B>externer Teilnehmer</B></TR>\n";
@sorted_top = sort {$top_te{$a} < $top_te{$b}} keys(%top_te);
$top_printed = $opt_t;
foreach (@sorted_top)
{
printf "<tr><td colspan=2><td ALIGN=RIGHT>%d<td ALIGN=RIGHT>%7.2f<td colspan=3>%s</TR>\n",
$top_te{$_}, $top_dm{$_}, &isostyle($_);
$top_printed--;
if ($top_printed == 0)
{
last;
}
}
}
if ($opt_c && $opt_r) # topliste im citytarif bereich ausgeben
{
print "<tr><td colspan=8><hr></TR>\n";
print "<tr><td colspan=2 align=left><B>TOP-Citytarif</B><td align=right><B>Einh.</B><td align=right><B>Betrag</B><td colspan=3 align=left><B>externer Teilnehmer</B></TR>\n";
@sorted_city_top = sort {$top_city_te{$a} < $top_city_te{$b}} keys(%top_city_te);
$top_city_printed = $opt_c;
foreach (@sorted_city_top)
{
printf "<tr><td colspan=2><td ALIGN=RIGHT>%d<td ALIGN=RIGHT>%7.2f<td colspan=3>%s</TR>\n",
$top_city_te{$_}, $top_city_dm{$_}, &isostyle($_);
$top_city_printed--;
if ($top_city_printed == 0)
{
last;
}
}
}
if ($opt_g && $opt_r) # topliste gesamt
{
print "<tr><td colspan=8><hr></TR>\n";
print "<tr><td colspan=2 align=left><B>TOP-Gespräche</B><td align=right><B>Anzahl</B><td><td colspan=3 align=left><B>externer Teilnehmer</B></TR>\n";
@sorted_top_gg = sort {$top_gg{$a} < $top_gg{$b}} keys(%top_gg);
$top_gg_printed = $opt_c;
foreach (@sorted_top_gg)
{
printf "<tr><td colspan=2><td ALIGN=RIGHT>%d<td><td colspan=3>%s</TR>\n",
$top_gg{$_}, &isostyle($_);
$top_gg_printed--;
if ($top_gg_printed == 0)
{
last;
}
}
}
if ($opt_b ne "")
{
$acc1day = $opt_b;
}
if ($opt_e ne "")
{
$acc2day = $opt_e;
}
print "<tr><td colspan=8><hr></TR>\n";
printf "<TR><Td><B>Zeitraum</B><TD COLSPAN=4>vom <B>%s</B> bis <B>%s</B></TR>\n", $acc1day, $acc2day;
print "</TABLE><hr>\n";
if ($opt_u ne "") # Nummern merken ?
{
close(UNKNOWN);
$filename = $opt_u . ".new";
if ( -e $opt_u )
{
$filenamet = $opt_u . ".tmp";
system("cat $opt_u $filename | sort -u > $filenamet;mv $filenamet $opt_u;rm -f $filename $filenamet");
}
else
{
system("cat $filename | sort -u > $opt_u;rm -f $filename");
}
}
&html_footer;
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.