/****************************************************************************/
/* Gebuehren-Auswertung fuer CALLING.LOG 17.05.95 */
/* Version 1.02 */
/* */
/* Passen Sie folgende Werte/Einstellungen an Ihr System an: */
/* - ZOC-Protokoll-Datei (default: CALLING.LOG) */
/* - den Preis einer Telefoneinheit (z.Z. 0.23 DM) */
/* - die Waehrung */
/* - die Zeitspannen in Sekunden fuer Nahzone, Regionalzone und Weitzone */
/* (Normal- und Billigtarife) */
/* - alle Vorwahlnummern Ihres Nahbereiches in 'vorwahl_nahbereich' */
/* eintragen */
/* - alle Vorwahlnummern Ihres Regionalbereiches in */
/* 'vorwahl_regionalbereich' eintragen */
/* */
/* */
/* Es werden folgende Feiertag beruecksichtigt: */
/* 01.01. 01.05. 03.10. 25.12. 26.12. */
/* Es wird ebenfalls zwischen Wochenenden (Sa./So.) und Werktagen */
/* unterschieden. */
/* */
/* Greetings/2 FIDO : Heiko Kamp@2:246/1210.10 */
/* Heiko Internet: kamp@warp.s.bawue.de */
/* TYPE FLAMES > NUL Voice : ++49 711-8701863 */
/* */
/****************************************************************************/
/* -------------- Haupt-Programm --------------- */
CALL RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
CALL SysLoadFuncs
CLS
/* Name der Protokoll-Datei - normalerweise "CALLING.LOG" */
datei = 'c:\zoc\calling.log' /* !!!!!!!!! ANPASSEN !!!!!!!!! */
/* Kosten einer Einheit in DM */
einheit = 0.23 /* !!!!!!!!! ANPASSEN !!!!!!!!! */
/* Waehrung angeben */
waehrung = 'DM' /* !!!!!!!!! ANPASSEN !!!!!!!!! */
/* Trennzeichen zwischen Vorwahl und Telefonnummer (xxxx-yyyyy) */
trenner = '-'
/* CONNECT-Zeit in Sekunden */
connect_time = 20 /* Dauer des Verbindungsaufbaus bis zur */
/* CONNECT-Meldung */
/* Tarifzonen - Dauer in Sekunden */
nahbereich.1 = 360 /* Normaltarif */ /* !!!! ANPASSEN !!!! */
nahbereich.2 = 720 /* Billigtarif */ /* !!!! ANPASSEN !!!! */
regional.1 = 60 /* Normaltarif */ /* !!!! ANPASSEN !!!! */
regional.2 = 120 /* Billigtarif */ /* !!!! ANPASSEN !!!! */
weit.1 = 21 /* Normaltarif */ /* !!!! ANPASSEN !!!! */
weit.2 = 42 /* Billigtarif */ /* !!!! ANPASSEN !!!! */
/* Tarifzonen */
/* Nahbereichs-Nummern */ /* !!!!!!!!! ANPASSEN !!!!!!!!! */
vorwahl_nahbereich = '07022 07024 07031 0711 07127 07141 07144 07145 07146 0715 07195'
n_max = WORDS(vorwahl_nahbereich)
/* Regionalbereichs-Nummern */ /* !!!!!!!!! ANPASSEN !!!!!!!!! */
vorwahl_regionalbereich = '07021 07023 07025 07026 07032 07033 07034 0704 0705 0706 0707 07081 07082 07084 07121 07122 07123 07125 07126 07128 07129 07130 07131 07132 07133 07134 07135 07138 07142 07143 07147 07148 0716 07171 07172 07176 0718 07191 07192 07193 07194 07203 0723'
/* 07250 07252 07258 07262 07266 07267 07269 07333 07334 07335 07381 07382 07385 07387 07452 07453 07456 07457 07458 07459 07471 07472 07473 07478 07903 07945 07946 07949 07972 07977' */
r_max = WORDS(vorwahl_regionalbereich)
/*************************** ENDE DER ANPASSUNGEN ***************************/
SAY ' Datum Uhrzeit Dauer Vorwahl Zone Einheiten Kosten'
SAY ' (CONNECT- (CONNECT- pro'
SAY ' Zeit Zeit Anruf'
SAY ' excl.) incl.)'
SAY '------------------------------------------------------------------------'
line = 1 /* Zeilennummern zuruecksetzen */
einheiten = 0 /* Einheiten zuruecksetzen */
line = line + 1 /* Zeilennummer inkrementieren */
zeile = LINEIN(datei,1,0) /* Anfangsposition */
zeile = 'empty' /* Startwert vorgeben */
DO WHILE (LINES(datei) <> 0)
zeile = LINEIN(datei) /* neue Zeile einlesen */
tarif = 1 /* Tarif mit Normaltarif */
/* initialisieren */
sekunden_einheit = 0 /* initialisieren */
IF WORD(zeile,3)='C#:' THEN /* Zeile mit Telefon-Nr. gefunden */
DO
tag = SUBSTR(zeile,1,2) /* Tagesdatum isolieren */
monat = SUBSTR(zeile,4,2) /* Monatszahl isolieren */
jahr = SUBSTR(zeile,7,4) /* Jahreszahl isolieren */
CALL wochentag tag, monat, jahr /* Wochentag bestimmen */
w_tag = RESULT /* Nr. des Wochentags in w_tag ablegen */
stunden = SUBSTR(zeile,12,2) /* Stunden (Uhrzeit) isolieren */
minuten = SUBSTR(zeile,15,2) /* Minuten (Uhrzeit) isolieren */
sekunden= SUBSTR(zeile,18,2) /* Sekunden (Uhrzeit) isolieren */
SELECT
WHEN (stunden>17) | (stunden<7) THEN tarif = 2 /*Billig-Tarif zw. 18 und 7 Uhr */
WHEN (w_tag = 0) | (w_tag = 6) THEN tarif = 2 /*Billig-Tarif an Wochenenden */
WHEN tag = 1 & monat = 1 THEN tarif = 2 /* Billig-Tarif an Feiertagen */
WHEN tag = 1 & monat = 5 THEN tarif = 2 /* Billig-Tarif an Feiertagen */
WHEN tag = 3 & monat =10 THEN tarif = 2 /* Billig-Tarif an Feiertagen */
WHEN tag =25 & monat =12 THEN tarif = 2 /* Billig-Tarif an Feiertagen */
WHEN tag =26 & monat =12 THEN tarif = 2 /* Billig-Tarif an Feiertagen */
OTHERWISE
tarif = 1
END /* SELECT */
vorwahlpos = LASTPOS(trenner,zeile) - 26 /* Vorwahlnummer lokalisieren */
IF vorwahlpos <=0 THEN vorwahlpos = 0 /* Keine Vorwahl eingeben */
vorwahl = SUBSTR(zeile,26,vorwahlpos) /* Vorwahlnummer isolieren */
speicher = vorwahl
IF vorwahlpos = 0 THEN
DO
sekunden_einheit = nahbereich.tarif
vorwahl = Nahbereich
END
DO i=1 TO n_max
IF vorwahlpos = 0 THEN LEAVE
vorwahl_x = WORD(vorwahl_nahbereich, i) /* jeweiles ein Element aus der Liste holen */
DO j=1 TO LENGTH(vorwahl_x)
IF SUBSTR(vorwahl_x,j,1) = '-' THEN /* Element auf Joker '-' pruefen */
DO
vorwahl_x = SUBSTR(vorwahl_x,1,LENGTH(vorwahl_x)-1) /* Wenn Joker letztes Zeichen (Joker) loeschen */
vorwahl = SUBSTR(vorwahl,1,LENGTH(vorwahl)-1)
END
IF (vorwahl = vorwahl_x) then
DO
sekunden_einheit = nahbereich.tarif
zone = 'Nah '
END
END j
vorwahl = speicher
END i
DO i=1 TO r_max
IF vorwahlpos = 0 THEN LEAVE
vorwahl_x = WORD(vorwahl_regionalbereich, i) /* jeweiles ein Element aus der Liste holen */
DO j=1 TO LENGTH(vorwahl_x)
IF SUBSTR(vorwahl_x,j,1) = '-' THEN /* Element auf Joker '-' pruefen */
DO
vorwahl_x = SUBSTR(vorwahl_x,1,LENGTH(vorwahl_x)-1) /* Letzes Zeiche (Joker) loeschen */
vorwahl = SUBSTR(vorwahl,1,LENGTH(vorwahl)-1)
END
IF (vorwahl = vorwahl_x) then
DO
sekunden_einheit = regional.tarif
zone = 'Reg.'
END
END j
vorwahl = speicher
END i
IF sekunden_einheit = 0 then
DO
sekunden_einheit = weit.tarif
zone = 'Weit'
END
DO WHILE WORD(zeile,3) <> 'C-:'
line = line + 1
zeile = LINEIN(datei)
END
dauer_stunden = SUBSTR(zeile,26,2)
dauer_minuten = SUBSTR(zeile,29,2)
dauer_sekunden = SUBSTR(zeile,32,2)
dauer_gesamt = (dauer_stunden * 3600) + (dauer_minuten * 60) + dauer_sekunden + connect_time
einheiten = einheiten + (dauer_gesamt % sekunden_einheit) + 1
anrufkosten = ((dauer_gesamt % sekunden_einheit) + 1) * einheit
SAY tag'.'monat'.'jahr' 'stunden':'minuten':'sekunden' 'dauer_stunden':'dauer_minuten':'dauer_sekunden' 'RIGHT(vorwahl,10) RIGHT((zone),5) RIGHT((dauer_gesamt % sekunden_einheit) + 1,7)' 'RIGHT(anrufkosten,9)
END /* DO WHILE */
END /* DO WHILE */
SAY '------------------------------------------------------------------------'
SAY ' GESAMT Einheiten : ' RIGHT(einheiten,4)
SAY ' Kosten : ' RIGHT((einheiten * einheit),15) waehrung
SAY
ENDE:
EXIT
wochentag:PROCEDURE EXPOSE tag monat jahr
/* wochentag */
/* a // b = a div b / x % y = x mod y */
t = tag /* Werte sichern */
m = monat
j = jahr
if monat > 2 THEN monat = monat - 2
else
do
monat = monat + 10
jahr = jahr - 1
end
jahrhundert = (jahr%10)
jahr = (jahr//100)
wo_tag = (jahr%4)+(jahrhundert%4)+((13*monat-1)%5)+tag+jahr-(2*jahrhundert)
wo_tag = (wo_tag//7)
IF wo_tag < 0 THEN wo_tag = wo_tag + 7
tag = t /* alte Werte wieder herstellen */
monat = m
jahr = j
RETURN wo_tag