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.