/****************************************************************************/
/*              Gebuehren-Auswertung fuer CALLING.LOG            09.09.94   */
/*                                                                          */
/* 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 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:245/6803.1*/
/*         Heiko                           Internet: kamp@warp.saar.de      */
/* TYPE FLAMES > NUL                       Voice   : ++49 6831-42294        */
/*                                                                          */
/****************************************************************************/

/* --------------  Haupt-Programm  ---------------  */

CALL RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
CALL SysLoadFuncs

CLS
/* Name der Protokoll-Datei   -  normalerweise "CALLING.LOG" */
datei = 'f:\dfue\zocbeta\calling.log'    /* !!!!!!!!! ANPASSEN !!!!!!!!! */

/* Kosten einer Einheit in DM */
einheit = 0.23                  /* !!!!!!!!! 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      = '06835 06832 06834 06827 06809 06806 06825 06881 06888 06872 06861 06869 06864 06833 0681 06838 06887 06897 06836 06898 06802 06874 06837 06831'
n_max = WORDS(vorwahl_nahbereich)

/* Regionalbereichs-Nummern */  /* !!!!!!!!! ANPASSEN !!!!!!!!! */
vorwahl_regionalbereich = '06332 06337 06338 06373 06384 06386 06500 06501 06503 0651 06581 06582 06583 06584 06586 06587 06588 06589 06782 06789 06803 06804 06805 06821 06824 06826 0684- 0685- 06865 06866 06867 06868 06871 06873 06875 06876 06893 06894
'
r_max = WORDS(vorwahl_regionalbereich)

/*************************** ENDE DER ANPASSUNGEN ***************************/
SAY '  Datum     Uhrzeit    Dauer         Vorwahl  Zone     Einheiten'
SAY '                  (ohne CONNECT-Zeit)                  (CONNECT-Zeit incl.)'
SAY '---------------------------------------------------------------------------'

line = 1                        /* Zeilennummern zuruecksetzen */
einheiten = 0                   /* Einheiten zuruecksetzen */
line = line + 1                 /* Zeilennummer inkrementieren */
zeiel = LINEIN(datei,1,0)       /* Anfangsposition */
zeile = 'empty'

DO WHILE (LENGTH(zeile) <> 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)    /* Letztes 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

   SAY tag'.'monat'.'jahr'  'stunden':'minuten':'sekunden' 'dauer_stunden':'dauer_minuten':'dauer_sekunden'  'RIGHT(vorwahl,12)'  'zone' 'RIGHT((dauer_gesamt % sekunden_einheit) + 1,10)
   END                                          /* DO WHILE */
END                                             /* DO WHILE */

SAY '---------------------------------------------------------------------------'
SAY '                                        Einheiten :' RIGHT(einheiten,10)
SAY 'Gesamte Kosten : 'einheiten * einheit 'DM'
SAY

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

