/*******************************************************************/ /* $VER: MM_CC.rexx 1.0 (28.3.95) */ /* */ /* Inspired by BryCC.spot by Brian Jacobsen */ /* */ /* 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 file */ /* */ /* Both takes the format: Username @ Address@domain */ /* */ /* Author: Alessandro Zummo FidoNet: 2:335/525.10 */ /*******************************************************************/ DROP MM. PARSE UPPER ARG MM.AreaTag MM.PrgName = 'MM_CC v1.0 ' MM.Copyright = '(C) 1995 by Alessandro Zummo' MM.CCDir = 'MAIL:' /* Where to look for *.CC */ MM.TempFile1 = 'T:CC1.trans' MM.TempFile2 = 'T:CC2.trans' MM.EditorStack = 10000 ADDRESS 'MAILMANAGER' SIGNAL ON SYNTAX OPTIONS RESULTS cr = '0a'X /* Carriage return */ receivers. = 0 addresses. = 0 ReceiverCounter = 0 MM_GetCfgPaths MM.Path MM.Editor = Trasforma(MM.Path.Editor) GetAreaInfo MM.AreaTag Info IF UPPER(Info.Type) = 'MAIL' THEN DO Requester('Warning','Only works in a NetMail area','Ok') exit END title = 'Please choose...' text = 'Do you want enter receivers manually or'cr' read them from a file?' gadgets = '_Manual|_Cancel|*_File' a = Requester(title,text,gadgets) IF a = 2 THEN exit IF a = 0 THEN /* File */ DO MM_FileReq 'MM.CCDir' IF rc = 0 THEN CALL ReadCC MM.CCDir ELSE SIGNAL exit END ELSE /* Manual */ DO title = 'Please enter receivers (name @ address@domain)' MM_StringReq '"'title'"' var IF rc ~= 0 THEN SIGNAL exit DO WHILE var ~= "" pos = index(var,"|") IF pos > 1 THEN DO ReceiverCounter = ReceiverCounter + 1; receivers.ReceiverCounter = STRIP(LEFT(var,pos-1)) addresses.ReceiverCounter = STRIP(SUBSTR(var,pos+1)) END var = '' MM_StringReq '"'title'"' var 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 title = '??????' text = 'Oh boy, you only selected one receiver.'cr'Please use write instead...' gadgets 'OK' Requester(title,text,gadgets) SIGNAL exit END CALL PRAGMA('S',MM.editorStack) ADDRESS COMMAND MM.Editor /* Enter message */ title = 'Please enter subject...' MM_StringReq '"'title'"' subject IF a ~= 0 THEN SIGNAL exit IF OPEN(temphandle1,MM.TempFile1,'Read') ~= 1 THEN DO title = 'Error!' text = 'Could not open' MM.tempfile1 'for reading..' gadgets = 'Ok' Requester(title,text,gadgets) SIGNAL exit END BodyText = READCH(temphandle1,60000) CALL CLOSE temphandle1 DO i = 1 TO Receivers.0 IF OPEN(temphandle2,MM.tempfile2,'Write') ~= 1 THEN DO title = 'Error!' text = 'Could not open' MM.tempfile2 'for writing..' gadgets = '"*_Ok' Requester(title,text,gadgets) SIGNAL exit END CALL WRITECH(temphandle2,'Written with '||MM.PrgName||MM.Copyright||'0a'x) 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 DROP MM.Msg. Msg.FromAddr= '' Msg.To = receivers.i Msg.ToAddr = addresses.i Msg.Subj = subject Msg.File = MM.TempFile2 Msg.Tear = MM.PrgName MM_WriteMsg MM.AreaTag Msg END SIGNAL exit /* --------------------------------------------------------------------- */ ReadCC: PROCEDURE EXPOSE receivers. addresses. MM. PARSE ARG CfgFileName ReceiverCounter = 0 DROP MM.File. MM_ReadStem CfgFileName MM.File IF rc ~= 0 THEN DO title = 'Error!' text = 'Could not open' CfgFileName 'for reading..' gadgets = 'Ok' Requester(title,text,gadgets) SIGNAL exit END DO j = 0 FOR MM.File.Count PARSE VAR MM.File.j receiver '@' fidoaddress receiver = STRIP(receiver,'B') fidoaddress = STRIP(fidoaddress,'B') IF receiver ~= "" THEN DO IF fidoaddress ~= "" THEN DO ReceiverCounter = ReceiverCounter + 1 receivers.ReceiverCounter = receiver addresses.ReceiverCounter = fidoaddress END ELSE DO titolo = 'Error!' text ='There seems to be missing a @ in' CfgFileName'.' gadgets = 'Ok' Requester(titolo,text,gadgets) SIGNAL exit END END END receivers.0 = ReceiverCounter RETURN syntax: SAY rc ERRORTEXT(rc) 'in line' SIGL failure: exit: ADDRESS MAILMANAGER MM_DeleteFile MM.tempfile1 ADDRESS MAILMANAGER MM_DeleteFile MM.tempfile2 EXIT /* --------------------------------------------------------------------- */ Requester: PROCEDURE EXPOSE MM. PARSE ARG Titolo, Testo, GadGets MM_Requester '"'Titolo'"' 'Testo' 'GadGets' RETURN rc /* --------------------------------------------------------------------- */ Trasforma: PROCEDURE EXPOSE MM. PARSE ARG String IF INDEX(String,'%')=0 THEN RETURN String String = Replace(String,MM.TempFile1, '%s') RETURN String /* ---------------------------------------------------------------------- */ Replace: PROCEDURE PARSE ARG String, New, Old DO WHILE INDEX(String, Old) ~= 0 ; INTERPRET "PARSE VAR String l '"Old"' r" ; String = l || New || r ; END RETURN String /* --------------------------------------------------------------------- */