
/*
    $VER: Start_Verteiler.zprx V0.8 (15-May-95) Copyright (c) Nils Görs
              Verteiler Copyright (c) 1995 by Thomas Eicher

[Diese Version hat nur eingeschraenkte Funktionalitaet, aber arbeitet
auch mit ZPoint Version kleiner als beta 37.191
 This Version does not have full functionality, but at least it works
with ZPoint versions before beta 37.191  --Tom]


   FUNKTIONSBESCHREIBUNG:

    Dieses Skript wurde speziell für das Programm VerteilerVerwaltung,
    kurz  VV,  zwecks  Anbindung an Zodiac's Point entwickelt.  Dieses
    Skript   dient   lediglich  der  Auswertung-  und  Versendung  von
    Nachrichten an  mehrere  Empfänger, die  mittels  `VV'  ausgewählt
    wurden.


   BENUTZUNG:

    Schreiben  und  versenden Sie Ihre Nachrichten wie bisher.  Tragen
    Sie  aber  anstelle  aller  Empfänger,  an die Sie diese Nachricht
    senden möchten, lediglich einen ein.  Begeben Sie sich dann in das
    Spool-Brett,  wählen  dort  die  entsprechende  Nachricht  aus und
    starten Sie dieses ARexx-Skript.
    Es  wird  das  Programm  `VV'  gestartet,  wo Sie ganz bequem Ihre
    Verteilerlisten,  erstellen,  editieren, löschen und zum versenden
    von Nachrichten bereitstellen können.
    Start_Verteiler.zprx  wertet  dann  zum einen die Orignalnachricht
    aus,  zum anderen generiert das Skript eine neue Nachricht.  Diese
    neue  Nachricht  weist  natürlich die selben Attribute vor wie die
    Originalnachricht.   Zusätzlich  werden dann zu der Nachricht, die
    verschiedenen Empfänger beigefügt.


   INSTALLATION:

    Kopieren    Sie    bitte    das   Hauptprogramm,   'VV'   in   das
    Tools-Verzeichnis  von Zodiac's Point.  Dieses ARexx-Skript gehört
    in das Rexx-Verzeichnis von Zodiac's Point.

    Um  das  Programm  nun  über eine Funktionstaste starten zu können
    müssen Sie folgenden Eintrag in die `fkeys.zp' hinzufügen.
    F1:SYS:Rexxc/RX ZPOINT:Rexx/Start_Verteiler.zprx %s

    Alternativ hierzu haben Sie aber auch die Möglichkeit das Programm
    aus dem Pulldown-Menu aufzurufen.  Dazu müssen Sie lediglich einen
    neuen Eintrag in der Datei `usermenus.zp' machen:
    *Nachrichtenverteiler
    Sys:Rexxc/RX ZPoint:Rexx/Start_Verteiler.zprx %s


    Sie erreichen die Autoren wie folgt:

       t.eicher@hsp.zer.de
       N.Goers@Art-Line.Art-Line.de


   Das Programm Verteiler, welches mit diesem Skript gestartet wird,
   benötigt die "triton.library" >=V1.2
   Triton is (C) by Stefan Zeiger <s.zeiger@laren.rhein-main.de>  */

/*----------------------------------------------------------------
  -Ab hier können Sie das Skript nach Ihren Bedürfnissen anpassen-
  ----------------------------------------------------------------*/
/* wo befindet sich das Hauptprogramm ?? */
Verteiler.main = "zpoint:tools/verteiler"

/*----------------------------------------------------------------*/
/* wo befindet sich die Database (default s:verteiler.database)   */
DataBase       = "progdir:Verteiler.database"

/*----------------------------------------------------------------*/
/* wo ist die Datei mit den Empfängern (Verteilerliste)?          */
RCVFILE.main   = "t:RCVFILE"

/*----------------------------------------------------------------*/
/* zum Auslagern evtl. Daten (Binär- und oder Textnachrichten)    */
Datei.Tmp      = "t:Out.tmp"

/*----------------------------------------------------------------*/
/* Erlaubte Optionen:
PERSONAL unterbindet, daß im Kopf der Nachricht vermerkt wird, wer
         alles Kopien dieser Nachricht erhalten hat.
ARCHIVE  Nachricht versenden und im Nachrichtenarchiv speichern.
COOKIE   Cookie anhängen (nur bei Textnachrichten).
Beispiele:
wopts         = 'PERSONAL '
                         ~Bitte beachten Sie dieses Freizeichen!
wopts         = 'COOKIE ARCHIVE '
*/
wopts          = ''

/*----------------------------------------------------------------*/
/* Originalnachricht wird gelöschen ??
   1 = mit Sicherheitsabfrage
   0 = ohne Sicherheitsabfrage                                    */
DelImmer       = 0

/*----------------------------------------------------------------*/
/* In welcher Sprache möchten Sie arbeiten ??
   Möglichkeiten: deutsch
                  english                                         */
Sprache        = "deutsch"
/* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 *      Bitte geben Sie hier ihre Präferenzen ein !                *
 *******************************************************************/

/*******************************************************************
 *      Bitte unterhalb dieser Zeile nichts mehr verändern!        *
 *******************************************************************/

NL             = '0a'x
Diskussion     = "Diskussion-in:"
Empfangsbest   = "EB:"
PGPSignatur    = "PGP-SIG:"
HeaderEnd      = "LEN:"
Anf            = '"'
Space          = ' '

/* Hier sind die Texte in den unterschiedlichen Sprachen.  Falls
   Sie diese Texte in eine andere Sprache übersetzen sollten, dann
   senden Sie mir die übersetzten Texte doch bitte zu. */
deutsch.text0  = '"Verteiler läuft!"'
english.text0  = '"Verteiler is running!"'
deutsch.text1  = "Bitte begeben Sie sich"NL,
                 "in das Spool-Brett!"
english.text1  = "Please go into the Spool-Area"
deutsch.text2  = "Empfangsbestätigungen und Kontrollnachrichten"NL,
                 "können nicht bearbeitet werden!"
english.text2  = "receive receptions and controlmessages"NL,
                 "can not be handled!"
deutsch.text3  = "Fehler beim Start von Verteiler!"
english.text3  = "error while opening 'Verteiler!'"
deutsch.text4  = "Sie haben abgebrochen. Die Nachricht wird"NL,
                 "weiterhin nur an den Originalempfänger gesendet."
english.text4  = "You have canceled. The message will"NL,
                 "be send to the main receiver, only."
deutsch.text5  = "Fehler beim Speichern!"
english.text5  = "error while saving!"
deutsch.text6  = "Kann Nachricht nicht verschicken!"
english.text6  = "Couln't send message!"
deutsch.text7  = "Nachricht wurde verschickt."
english.text7  = "Message is on the way, now."
deutsch.text8  = "Soll die Ursprungsnachricht gelöscht werden?"
english.text8  = "Shall I delete the original message?"

OPTIONS RESULTS

/* ------ von welchem ZP Port wurde das Script aufgerufen ? ------ */
PARSE ARG zpPort
IF zpPort == "" THEN
   zpPort = "ZPoint"
ADDRESS VALUE zpPort

/* Dieses Skript darf nur im Spool-Brett ausgeführt werden */
WHICHLEVEL
 IF Result ~= "BOARD" then
 DO
  Text1 = VALUE(sprache||.text1); REQUESTNOTIFY Text1; EXIT
 END

  BOARDINFO LABEL; BOARDLABEL=Result

IF INDEX(Boardlabel,'(Spool') == 0 THEN
DO
  Text1 = VALUE(sprache||.text1); REQUESTNOTIFY Text1; EXIT
END


/******************************
 * hier ist das Hauptprogramm *
 ******************************/
_Main:

MESSAGEINFO STATUS
IF RESULT == "CTL,EB" THEN DO /* Kontrollnachricht! */
    Text1 = VALUE(sprache||.text2); REQUESTNOTIFY Text1; EXIT
END

text1 = VALUE(sprache||.text0)
"guilock text="text1

IF ~EXISTS(RCVFile.main||zpPort) THEN ADDRESS COMMAND 'delete' Datei.tmp||zpPort '>NIL:'

ADDRESS COMMAND Verteiler.main 'DB='Database,
                               'INTO='RCVFILE.main||zpPort,
                               'PB='zpPort

IF (RC) ~= 0 THEN DO           /* Fehler beim öffnen von Verteiler */
  Text1 = VALUE(sprache||.text3); REQUESTNOTIFY Text1; EXIT
END; ELSE

IF ~EXISTS(RCVFile.main||zpPort) THEN DO
    Text1 = VALUE(sprache||.text4); REQUESTNOTIFY Text1
EXIT; END

MESSAGEINFO POSITION /* an der wievielten Position befindet sich die
MailPosition=RESULT     Originalnachricht ? */

/* handelt es sich bei der Nachricht um eine Binär- oder Textdatei ? */
MESSAGEINFO TYPE
NachrichtenTyp=RESULT
  IF NachrichtenTyp = 'BINARY' THEN DO
   CALL _SaveMessageBody
   ADDRESS COMMAND 'delete' Datei.tmp||zpPort '>NIL:'
  EXIT
END

SAVEMESSAGEASIS Datei.tmp||zpPort
  IF (RC) == 0 THEN DO             /* Konnte Nachricht gespeichert werden ? */
    Text1 = VALUE(sprache||.text5); REQUESTNOTIFY Text1;EXIT
  END
CALL OPEN(Datei,Datei.tmp||zpPort,Read)

/******************************************
 * hier wird eine Textdatei durchgescannt *
 ******************************************/

/*  Es  wird  nach Empfänger, Betreff, Diskussion in, PGP-Signatur und
    Empfangsbestätigung gesucht. Es wird lediglich bis zum Textkörper
    durchsucht */

MESSAGEINFO RECEIVER
ReceiverName=RESULT
MESSAGEINFO FULLSUBJECT
SubjectName=RESULT

DO WHILE ~ABBREV(InString,HeaderEnd)
  InString = READLN(Datei)

  IF ABBREV(InString,Diskussion) ~= 0 THEN DO
   FollowupName=DELSTR(InString,1,14)           /* "Diskussion in: " entfernen! */
   Laenge=WORDLENGTH(FollowupName,1)
   FollowUpname=DELSTR(FollowupName,Laenge,1)
   wopts = wopts||Space||'FOLLOWUP '||Anf||FollowUpName||Anf
  END

  IF ABBREV(InString,Empfangsbest) ~= 0 THEN DO /* Empfangsbestätigung? */
  wopts = wopts||Space||'CONFIRM'
  END

  IF ABBREV(InString,PGPSIGNATUR) ~= 0 THEN DO  /* PGP Signatur ? */
  wopts = wopts||Space||'PGPSIG'
  END
END
CALL CLOSE(Datei); ADDRESS COMMAND 'delete' Datei.tmp||zpPort '>NIL:'

_SaveMessageBody:
SAVEMESSAGEBODY Datei.tmp||zpPort
IF (RC) == 0 THEN DO
 Text1 = VALUE(sprache||.text5); REQUESTNOTIFY Text1
 EXIT; END

guilock off

/* Binärnachricht wird hier versendet */
IF NachrichtenTyp == 'BINARY' THEN DO
MESSAGEINFO RECEIVER
ReceiverName=RESULT
MESSAGEINFO FULLSUBJECT
SubjectName=RESULT
WRITEMESSAGE Datei.tmp||zpPort,
                       'RECEIVER' ReceiverName,
                       'SUBJECT'  Anf||SubjectName||Anf,
                       'RCVFILE'  RCVFILE.main||zpPort,
                       'BINARY',
                       wopts
END
ELSE
/* Textnachricht wird hier versendet */
WRITEMESSAGE Datei.tmp||zpPort,
                       'RECEIVER' ReceiverName,
                       'SUBJECT'  Anf||SubjectName||Anf,
                       'RCVFILE'  RCVFILE.main||zpPort,
                        wopts
id = RESULT

IF (id = '') THEN DO               /* Hups! Fehler! */
    Text1 = VALUE(sprache||.text6); REQUESTNOTIFY Text1
    CALL _DeleteTemps
END
ELSE                               /* Alles klar! */
    Text1 = VALUE(sprache||.text7); REQUESTNOTIFY Text1

IF DelImmer ~= 0 THEN
   DO       /* Soll die Nachricht gelöscht werden ? */
    Text1 = VALUE(sprache||.text8); REQUESTRESPONSE Text1
   END
    IF RC = 1 THEN
  DO
     JUMPTOMESSAGE MailPosition; DELETE ONE; DOWN

_DeleteTemps:
     ADDRESS COMMAND 'delete' RCVFILE.main||zpPort '>NIL:'
     ADDRESS COMMAND 'delete' Datei.tmp||zpPort '>NIL:'
    EXIT
  END
/* Urmail soll behalten werden. Trotzdem müssen wir die Files löschen */
CALL _DeleteTemps
/* EOS */

