/*
   $VER: RequestAm.zprx 1.0 (18.6.95) Copyright (c) Frank Dietrich.
   Ein ARexx-Skript für "Zodiac's Point" (basierend auf dem Skripten
   'RequestFC.zprx 1.0' von Ralph Seichter, AminetReq.zprx von Jan
   Ritzerfeld und von RequestAm.mdmrexx von Erik Kraemer).

   Das Skript benötigt Jürgen Kohrmeyer's "rexxtricks.library" (V38.1
   oder besser) und Ralph Seichter's "Zodiac's Point" (V37.158 oder
   besser; ältere ZP-Versionen sind dafür leider nicht geeignet).


   FUNKTIONSBESCHREIBUNG:

   Dieses Script durchsucht ein 'Aminet-Readme' Verzeichnis oder 'INHALT'
   Nachricht von 'MAPS' der Boxsoftware 'Ambos' nach requestbaren Dateien.
   Alle gefundenen Dateien werden alphabetisch sortiert in einem Fenster auf
   dem Screen von 'ZPoint' dargestellt. Hier können Sie die gewünschten
   Dateien auswählen und requesten, Multiselect ist dabei möglich. Die
   Dateien werden per 'REQUEST' von 'MAPS' angefordert.


   INSTALLATION:

   Kopieren sie dieses Skript ins Rexx-Verzeichnis von ZP. Sie können
   es dann an das Gadget [Bestellen] binden, indem Sie in der Datei
   "maps/request.zp" den Text

      .key FILE/A,SCREEN/A
      .bra {
      .ket }
      Delete >NIL: {FILE} QUIET
      Run >NIL: SYS:Rexxc/RX ZPoint:Rexx/RequestAm.zprx {SCREEN}

   eintragen (bitte passen Sie ggf. den Pfad für 'RX' an).


   AUTOR DIESES SKRIPTS:

      Frank Dietrich
      Bliesstr. 35         EMail: f.dietrich@groenld.sb.sub.de
      66538 Neunkirchen


   ANPASSEN DES SKRIPTS:

   Am Anfang des Skripts können einige Parmeter eingestellt werden:

   mapsadr         - Adresse des MAPS-Dienstes

   filelaenge      - Stellt ein, ob die Filelängen im Fenster angezeigt
                     werden sollen. 0 = aus, 1 = ein

   brettname       - Stellt ein, ob die Brettnamen im Fenster angezeigt
                     werden sollen. 0 = aus, 1 = ein

   fensterbreite   = Stellt die Breite des Listview-Fensters ein

   Pfad            = wo das Verzeichnis Aminet/Readmes liegt
*/


mapsadr         = 'MAPS'   /* oder 'maps@<server>.<domain>' */
filelaenge      = 1
brettname       = 1
fensterbreite   = 704
Pfad            = '/<BINAER-AMIGA>'  /* kein Unterverzeichnis '' */


/********************************************************************/
/*** !!! BITTE AENDERN SIE UNTERHALB DIESER ZEILE NICHTS MEHR !!! ***/
/********************************************************************/


PARSE ARG zp
zp = COMPRESS(zp)
IF (zp = '') THEN
   zp = 'ZPoint'

OPTIONS RESULTS
ADDRESS VALUE zp

IF (~SHOW('LIBRARIES', 'rexxtricks.library')) THEN
   IF (~ADDLIB('rexxtricks.library', 0, -30, 38)) THEN DO
      requestnotify 'Kann rexxtricks.library nicht öffnen!'
      EXIT
   END

IF (~SHOW('LIBRARIES','rexxsupport.library')) THEN
   IF (~ADDLIB('rexxsupport.library', 0, -30, 0)) THEN DO
      requestnotify 'Kann rexxsupport.library nicht öffnen!'
      EXIT
   END


/* Absender und Betreff auslesen */

messageinfo author
absender = RESULT
messageinfo fullsubject
betreff = RESULT


/* Prüfen, ob es eine 'INHALT' Nachricht von MAPS ist oder */
/* ein Aminet-Readme Datei ist */


if (~MATCHPATTERN(absender,'MAPS@#?') & ~MATCHPATTERN(betreff,'INHALT')) THEN DO
   if (~MATCHPATTERN(absender,'aminet@#?')) THEN DO
      requestnotify 'Keine MAPS oder Aminet Nachricht!'
      EXIT
   END
END


/* Nachrichtenrumpf auslagern und Datei zum Lesen öffnen */

inname  = 'T:1-RequestAm.tmp'
outname = 'T:2-RequestAm.tmp'
savemessagebody inname
IF (~RC) THEN DO
   requestnotify 'Kann Nachricht nicht speichern!'
   EXIT
END

IF (~READFILE(inname,'zeile')) THEN DO
   requestnotify 'Kann ' || inname || ' nicht lesen!'
   EXIT
END


/* Je nach Nachricht das richtige Unterprogramm aufrufen */

if (MATCHPATTERN(betreff,'INHALT')) THEN
   CALL inhalt
ELSE
   CALL aminet


/* Auslagerungsdatei schließen und löschen */ 

dummy = DELETE(inname)


/* ListView-Fenster Definition */

windef.pubscreen = zp
windef.title     = 'Zu requestende Dateien auswählen'
windef.gadgettext = '_Requesten|_Abbrechen'
windef.sort      = 'TRUE'
windef.font      = 'DEFAULT'
windef.width     = fensterbreite


/* ListView-Fenster öffnen */

IF (VIEWLIST('string', 'windef', 'destvar')) THEN DO
   IF (~OPEN('temp2', outname, 'WRITE')) THEN DO
      BEEP()
      EXIT
   END
   sendmail = 0
   DO i = 1 TO destvar.0
      x = LSEARCH(destvar.i, 'string')
      IF (x ~= (-1)) THEN DO
         dummy = WRITELN('temp2', request.x)
         sendmail = 1
      END
   END
   dummy = CLOSE('temp2')
   IF (sendmail) THEN DO
      writemessage 'FILE ' || outname || ' RECEIVER ' || mapsadr || ' SUBJECT REQUEST'
      IF (RESULT = '') THEN DO
         requestnotify 'Kann Bestellung nicht verschicken!'
         EXIT
      END
      ELSE
         requestnotify 'Bestellung verschickt.'
   END
   ELSE
      dummy = DELETE(outname)
END


/* Skript beenden */

EXIT(0)


/* 'INHALT' von 'MAPS' nach requestbaren Files durchsuchen */

inhalt:

nummer = 1


  DO i = 1 TO zeile.0

    IF LEFT(zeile.i,11) = '** INHALT :' THEN DO
      aktuellbrett = SUBSTR(zeile.i,13)
    END

    IF DATATYPE(WORD(zeile.i,1)) = 'NUM' THEN DO
      string.nummer  = SUBSTR(zeile.i,5,20)
      request.nummer = aktuellbrett string.nummer


/* Filelaenge kommt dazu */

      string.nummer = string.nummer RIGHT(WORD(zeile.i,5),4)


/* Datum kommt dazu */

      string.nummer = string.nummer RIGHT(WORD(zeile.i,3),5)


/* Beschreibung kommt dazu */

      string.nummer = string.nummer SUBWORD(zeile.i,6)

      nummer = nummer+1
    END
  END
  string.0 = nummer-1


RETURN

aminet:

JUMPTOMESSAGE 1

COUNT ALL

zeilen = RESULT

DO i=1 to zeilen

  MESSAGEINFO RECEIVER
  empfaenger = result

  MESSAGEINFO SUBJECT
  betreff = result

  CALL auslagern

  string.i = delstr(betreff,length(betreff)-6)

  request.i = Pfad||empfaenger string.i'.lha'

  string.i = LEFT(string.i,20)

/* Beschreibung kommt dazu */

  beschreibung = STRIP(SUBSTR(zeile.1,8),'L')
  string.i = string.i LEFT(beschreibung,50)

  DOWN 1

END

string.0 = zeilen

RETURN



/* Nachricht auslagern, einlesen und wieder loeschen */

auslagern:

/* Auslagern */

savemessagebody 'T:Request-Rexx.temp'

IF (~RC) THEN DO
   requestnotify 'Kann Nachricht nicht speichern!'
   EXIT
END

/* Einlesen */

IF ~READFILE('T:Request-Rexx.temp','zeile') THEN
  EXIT(10)


/* Loeschen */

dummy = DELETE('T:Request-Rexx.temp')

RETURN

/* EOF */
