Metropoli BBS
VIEWER: kamprexx.cmd MODE: TEXT (ASCII)
/****************************************************************************/
/*              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

[ RETURN TO DIRECTORY ]