/*******************************************************************/
/*                 $VER: NLV-CC.spot 1.0 (06.11.93)                */
/*                                                                 */
/* This script will send multiple copies of a letter to two or     */
/* more users.                                                     */
/*                                                                 */
/* Will either prompt you for receivers or read them from a        */
/* NLV nodefile.                                                   */
/*                                                                 */
/* Modified by                                                     */
/*                       Matthias Wege (2:2454/550.2)              */
/*                                                                 */
/* Made user friendlyer by                                         */                        
/*                       Jürgen Schmitz (2:2454/550.3)             */
/*                                                                 */
/* You may now use current mail for your letter or an editor or    */
/* an already existing ascii file.                                 */
/*                                                                 */
/* You may also set KILL/SENT flag for multiple mails.             */
/*                                                                 */
/*      NLV is Shareware. Done by Jürgen Schmitz in 1993.          */
/*******************************************************************/

ADDRESS 'SPOT'
SIGNAL ON SYNTAX
OPTIONS RESULTS

ed = 'Ed'
CCfileDir = 'Ram:'                /* Where to look for *.CC*/
CCtextFile= 'Ram:'                /* Where to look for CC-Text */
tempfile1 = 'T:CC.temp'
tempfile2 = 'T:CC1.temp'
kludge = '01'x||'Via NlvCC V1.0'
cr = '0d'X                        /* Carriage return       */
receivers. = 0
addresses. = 0
ReceiverCounter = 0
noSig = 0

'lockgui'                         /* Lock Spot's GUI       */
'getareaname'
IF LEFT(result,4) ~= 'NET_' THEN  /* Only works from       */
 'gotomatrixarea'                 /* Netmail               */
'ismessages'
IF rc ~=0 THEN
 DO
  'messages'
 END

requestdata = 'TITLE "Bitte wählen..." PROMPT "Wollen Sie die Empfänger per Hand eingeben'cr'oder die Daten aus einer NLV-Datei lesen?" GADGETS "per _Hand|_Nodelistviewer"'
'requestresponse' requestdata

IF rc = 0 THEN          /* File */
 DO
  requestdata = 'TITLE "Wahl des NLV-Nodefiles..." PATH "'CCfileDir'"'
  'requestfile' requestdata
  IF rc = 0 THEN
   CALL ReadCC result
  ELSE
   SIGNAL exit
 END
ELSE            /* Manual */
 DO
  RequestData = 'TITLE "Empfänger eingeben" PROMPT "     (Format Username @ Adresse)'cr'Beispiel: Brian Jacobsen @ 2:230/311.17'cr'_OK oder <RETURN> für Ende drücken"'
  'requeststring' RequestData
  IF rc ~= 0 THEN SIGNAL exit
  DO WHILE result ~= ""
   pos = index(result,"@")
   IF pos > 1 THEN
    DO
    ReceiverCounter = ReceiverCounter + 1;
    receivers.ReceiverCounter = STRIP(LEFT(result,pos-1))
    addresses.ReceiverCounter = STRIP(SUBSTR(result,pos+1))
    END

   'requeststring' RequestData
   IF rc ~= 0 THEN SIGNAL exit
  END
  receivers.0 = ReceiverCounter
 END

IF receivers.0 = 0 THEN SIGNAL exit     /* No users selected */
IF receivers.0 = 1 THEN                 /* Only one selected */
 DO
  'requestnotify PROMPT "Wie? Nur ein Empfänger??'cr'Schreiben Sie die lieber selbst..."'
  SIGNAL exit
 END

requestdata = 'TITLE "Bitte wählen..." PROMPT "Wollen Sie den Mail-Text von Hand eingeben oder'cr'einen fertigen laden oder'cr'den der aktuellen Mail nehmen?" GADGETS "_eingeben|_laden|_aktuelle Mail"'
'requestresponse' requestdata

IF rc = 1 THEN                          /* File */
 DO
  ADDRESS COMMAND ed tempfile1          /* Enter message */
  'spot2front'
 END
ELSE
 DO
  if rc = 2 then
   DO
    requestdata = 'TITLE "Wahl des Textfiles..." PATH "'CCTextFile'"'
    'requestfile' requestdata
    IF rc = 0 THEN
     tempfile1=result
    ELSE
     SIGNAL exit
   END
  ELSE
   DO
    'saveascii TO 'tempfile1' OVERWRITE NOHEADER NOTEARLINE NOORIGIN NOKLUDGES'
    noSig=1
   END
  END

RequestData = 'TITLE "Geben Sie das Subjekt an..." PROMPT "Geben Sie jetzt den Betreff für die Mails an'cr'Abbruch durch Cancel..."'
'requeststring' RequestData
IF rc ~= 0 THEN SIGNAL exit
subject = result

IF OPEN(temphandle1,tempfile1,'Read') ~= 1 THEN
 DO
  requestdata = 'PROMPT "'tempfile1 'konnte nicht zum Lesen geöffnet werden"'
  'requestnotify' requestdata
  SIGNAL exit
 END

BodyText = READCH(temphandle1,60000)
CALL CLOSE temphandle1

if noSig = 0 then
 DO
  requestdata = 'TITLE "Bitte wählen..." PROMPT "Soll die Standard-Unterschrift'cr'verwendet werden?" GADGETS "_Standard|_Keine"'
  'requestresponse' requestdata
  if rc = 0 then noSig = 1
 END

requestdata = 'TITLE "Bitte wählen..." PROMPT "Mail nach versenden löschen?" GADGETS "_JA|_NEIN"'
'requestresponse' requestdata
KILLSENT=rc

DO i = 1 TO Receivers.0
 IF OPEN(temphandle2,tempfile2,'Write') ~= 1 THEN
  DO
   requestdata = 'PROMPT "'tempfile2 'konnte nicht zum Schreiben geöffnet werden"'
   'requestnotify' requestdata
   SIGNAL exit
  END

 CALL WRITELN(temphandle2,kludge)
 IF Receivers.0 > 2 THEN
  CALL WRITECH(temphandle2,'0a'x||'[Copies sent to: ')
 ELSE
  CALL WRITECH(temphandle2,'0a'x||'[Copy sent to: ')
 FirstReceiver = 1
 DO x = 1 TO Receivers.0
  IF x ~= i THEN
   DO
    IF FirstReceiver = 0 THEN
     CALL WRITECH(temphandle2,', ')
    ELSE
     FirstReceiver = 0

    CALL WRITECH(temphandle2,Receivers.x)
   END
 END
 CALL WRITECH(temphandle2,']'||'0a0a'x)
 CALL WRITECH(temphandle2,BodyText)
 CALL CLOSE temphandle2
 if noSig = 0 then
  DO
   requestdata = 'TO "'receivers.i'" TOADDR "'addresses.i'" SUBJECT "'subject'" FILE "'tempfile2'" NOEDIT NOGUI'
  END
 ELSE
  DO
   requestdata = 'TO "'receivers.i'" TOADDR "'addresses.i'" SUBJECT "'subject'" FILE "'tempfile2'" NOEDIT NOGUI NOSIG'
 END
 'write' requestdata
 if KILLSENT = 1 then
  DO
   'lastmessage'
   'setflags KILLSENT'
  END
END

SIGNAL exit           /* End of main program */

ReadCC: PROCEDURE EXPOSE receivers. addresses.
ARG CfgFileName

if open(nodes,CfgFileName,'R') then
 do
  do i=1 to 4 while ~eof(nodes)
   inhalt=readln(nodes)
  end
  ReceiverCounter=0
  do while ~eof(nodes)
   ReceiverCounter=ReceiverCounter+1
   dummy=readln(nodes)
   Addresses.receiverCounter=word(dummy,2)
   dummy=readln(nodes)
   dummy=readln(nodes)
   Receivers.ReceiverCounter=translate(word(dummy,2),' ','_')
   dummy=readln(nodes)
   dummy=readln(nodes)
   dummy=readln(nodes)
  end
 end
call close(nodes)
receivers.0 = ReceiverCounter-1
return

syntax:
SAY rc ERRORTEXT(rc) 'in line' SIGL
failure:
exit:
ADDRESS COMMAND 'Delete >NIL:' tempfile1
ADDRESS COMMAND 'Delete >NIL:' tempfile2
'unlockgui'
EXIT

 
EXIT

 '
EXIT

 '
EXIT

 '
EXIT

 '
EXIT

