/*
    $VER: BoardListEditor.zprx 1.2 (15.6.95) Copyright (c) Nils Görs

    Dies  ist  ein  ARexx-Skript  für Zodiac's Point, mit dem man aus
    Zodiac's  Point  heraus  die  einzelnen  Einträge  der Brettliste
    verändern kann.


    Sie dürfen dieses Skript beliebig kopieren, solange  es  zusammen
    mit  Zodiac's Point  eingesetzt wird, aber verändern Sie es bitte
    nicht ohne Erlaubnis des Autors.


   Wichtig:

    Ich  habe  dieses  Skript  ausgiebig  bei mir getestet und es gab
    keinen   Verlust   an   Daten.    Trotzdem  übernehme  ich  keine
    Verantwortung  für  evtl.  Verluste an Daten, die in Zusammenhang
    mit diesem Skript gebracht werden können.


   Hinweise zur Installation:

    Kopieren sie dieses Skript in  das  Rexx-Verzeichnis  von  ZP  und
    fügen  sie  danach  der  Datei  'fkeys.zp'  auf Wunsch den Eintrag
    "F1:SYS:Rexxc/RX ZPOINT:Rexx/BoardListEditor.zprx %s" hinzu.

    Alternativ können auch folgende Zeilen in die Datei usermenus.zp
    eingefügt werden:

    *Brettliste edieren
    Sys:Rexxc/RX ZPoint:Rexx/BoardListEditor.zprx %s


    Sie erreichen den Autor wie folgt:

       Nils Görs              Tel. : +49 (0)202 784258
       Kaiserstr. 97a         EMail: N.Goers@Art-Line.de
       42329 Wuppertal          oder über das ZP-Support-Brett.

    Verwenden Sie bitte nach Möglichkeit elektronische Post!


   History:

    V1.0 > V1.1
    - es wird nun nach dem Inhalt und nicht mehr nach der Filelänge
      entschieden, ob der Bretteintrag verändert wurde.
    - Das Skript kann nun auch aus der Brettliste heraus gestartet
      werden. Ich hatte vergessen, die Abfrage auf "MAINMENU "zu
      ändern, sorry.
    - kleine interne Veränderungen.
    V1.1 > V1.2
    - man kann, wenn ein Bretteintrag verändert wurde, veranlassen
      das die Brettliste neu eingelesen wird.

*/
Filename     = "ZODIAC:Bretter/boardlist.zp"
Filename.bak = "ZODIAC:Bretter/boardlist.zp.bak"
/* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 *      Bitte geben Sie hier ihre Präferenzen ein !                *
 *******************************************************************/
 
/*******************************************************************
 *      Bitte unterhalb dieser Zeile nichts mehr verändern!        *
 *******************************************************************/
NL = '0a'x

OPTIONS RESULTS

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

WHICHLEVEL
IF Result == "MAINMENU" then DO
 requestnotify "Bitte begeben Sie sich in die"NL,
               "Brettliste oder in ein Brett!"
 EXIT(0)
 END
 BOARDINFO LABEL
 BOARDLABEL=Result

IF BOARDLABEL == "Zu versendende Nachrichten (Spool-Brett)" THEN
  DO; requestnotify "Dieses Brett kann nicht ediert werden!"; EXIT; END
IF BOARDLABEL == "Nachrichtenarchiv" THEN
  DO; requestnotify "Dieses Brett kann nicht ediert werden!"; EXIT; END

IF ~OPEN(Boardlist.dat,Filename,Read) THEN
 DO
  requestnotify "Konnte Brettliste nicht öffnen!"
  EXIT(0)
 END
ELSE

IF ~OPEN(Tmp,"t:Boardlist.bak",Write) THEN
 DO
  requestnotify "Konnte temporäre Datei nicht öffnen!"
  EXIT(0)
 END
ELSE

IF ~OPEN(Tmp2,"t:tmp",Write) THEN
 DO
  requestnotify "Konnte temporäre Datei nicht öffnen!"
  EXIT(0)
 END
ELSE

'GUILOCK TEXT="BoardListEditor läuft!"'

Boardlabel="B:"||BOARDLABEL

DO WHILE ~EOF(Boardlist.dat)
 InString=READLN(Boardlist.dat)
 IF COMPARE(BOARDLABEL,InString) == 0 THEN CALL ChangeBoardEntry
 CALL WRITELN(Tmp,InString)
END
Zahl=SEEK(tmp,0,"End"); Zahl=Zahl-1
CALL CLOSE(TMP); CALL OPEN(tmp,"T:Boardlist.bak",Read)
String=READCH(TMP,Zahl); CALL CLOSE(TMP)
CALL OPEN(tmp,"T:Boardlist.bak",Write); CALL WRITECH(tmp,String)

CALL CLOSE(tmp); CALL CLOSE(tmp2); CALL CLOSE(Boardlist.bat)


/* Zum Abschluß muß die Brettliste noch gesichert werden ! */

 ADDRESS COMMAND "Delete t:tmp QUIET"
 ADDRESS COMMAND "Delete" Filename.bak "QUIET"
 ADDRESS COMMAND "Rename" Filename "TO" Filename.bak
 ADDRESS COMMAND "Copy t:Boardlist.bak TO" Filename "QUIET"
 ADDRESS COMMAND "Delete t:Boardlist.bak QUIET"

requestresponse "Es wurden veränderungen an der Brettliste   "NL,
                "vorgenommen. Um diese neuen Parameter nutzen"NL,
                "zu können, muß Zodiac's Point die Brettliste"NL,
                "neu einlesen. Soll dies geschehen?          "

   IF (rc) == 1 THEN DO
    WHICHLEVEL
     IF RESULT == "BOARDMENU" THEN MAINMENU

     IF RESULT == "BOARD" THEN DO
       BOARDMENU
       MAINMENU
     END
     BOARDMENU
   END

GUILOCK OFF
EXIT(0)


/* hier wird nun der richtige Bretteintrag isoliert
   und abgespeichert. Mittels dem Editor kann dann die
   Änderung vorgenommen werden. */

ChangeBoardEntry:
DO WHILE COMPARE(InString,"-")
CALL WRITELN(Tmp2,InString)
 InString=READLN(Boardlist.dat)
END
Lenght=SEEK(tmp2,0,End); CALL CLOSE(tmp); CALL CLOSE(tmp2); CALL OPEN(TMP2,"T:tmp",Read)
OldBuffer=READCH(tmp2,Lenght); CALL CLOSE(tmp2)
EDITOR "t:tmp"
CALL OPEN(Tmp,"T:Boardlist.bak",Read); ZahlA=SEEK(tmp,0,End); CALL CLOSE(tmp); CALL OPEN(TMP,"T:Boardlist.bak",Read)
CALL OPEN(Tmp2,"t:tmp",Read); ZahlB=SEEK(tmp2,0,End); CALL CLOSE(tmp2); CALL OPEN(TMP2,"T:tmp",Read)
String1=READCH(tmp,ZahlA); CALL CLOSE(tmp)
String2=READCH(tmp2,ZahlB); CALL CLOSE(tmp2)

IF COMPARE(OldBuffer,String2) == 0 THEN CALL NOCHANGE

String1=String1||String2
CALL OPEN(tmp,"T:Boardlist.bak",Write); CALL WRITECH(tmp,String1); CALL CLOSE(tmp)
CALL OPEN(Tmp,"t:Boardlist.bak",Append)
RETURN

/* An der Brettliste wurde nichts verändert
   und deshalb wird sie auch nicht gespeichert */
NOCHANGE:
ADDRESS COMMAND "delete t:tmp t:boardlist.bak QUIET"
requestnotify "Es wurden keine veränderungen"NL,
              "an der Brettliste vorgenommen!"
GUILOCK OFF
EXIT
