home *** CD-ROM | disk | FTP | other *** search
/ Meeting Pearls 3 / Meeting_Pearls_III.iso / Pearls / comm / Fido / MailManager / Contrib / Alessandro_Zummo / MM_CC.rexx < prev    next >
OS/2 REXX Batch file  |  1995-04-12  |  6KB  |  251 lines

  1. /*******************************************************************/
  2. /*                 $VER: MM_CC.rexx 1.0 (28.3.95)                  */
  3. /*                                                                 */
  4. /*         Inspired by BryCC.spot by Brian Jacobsen                */
  5. /*                                                                 */
  6. /* This script will send multiple copies of a letter to two or     */
  7. /* more users.                                                     */
  8. /*                                                                 */
  9. /* Will either prompt you for receivers or read them from a file   */
  10. /*                                                                 */
  11. /* Both takes the format: Username @ Address@domain                */
  12. /*                                                                 */
  13. /*       Author: Alessandro Zummo   FidoNet: 2:335/525.10          */
  14. /*******************************************************************/
  15.  
  16.  
  17. DROP MM.
  18.  
  19. PARSE UPPER ARG MM.AreaTag
  20.  
  21. MM.PrgName        = 'MM_CC v1.0 '
  22. MM.Copyright   = '(C) 1995 by Alessandro Zummo'
  23. MM.CCDir       = 'MAIL:'         /* Where to look for *.CC  */
  24. MM.TempFile1   = 'T:CC1.trans'
  25. MM.TempFile2   = 'T:CC2.trans'
  26. MM.EditorStack = 10000
  27.  
  28. ADDRESS 'MAILMANAGER'
  29. SIGNAL ON SYNTAX
  30. OPTIONS RESULTS
  31.  
  32. cr = '0a'X                                            /* Carriage return       */
  33. receivers. = 0
  34. addresses. = 0
  35. ReceiverCounter = 0
  36.  
  37.  
  38. MM_GetCfgPaths MM.Path
  39. MM.Editor = Trasforma(MM.Path.Editor)
  40.  
  41. GetAreaInfo MM.AreaTag Info
  42.  
  43. IF UPPER(Info.Type) = 'MAIL' THEN DO
  44.     Requester('Warning','Only works in a NetMail area','Ok')
  45.     exit
  46. END
  47.  
  48. title = 'Please choose...'
  49. text = 'Do you want enter receivers manually or'cr'    read them from a file?'
  50. gadgets = '_Manual|_Cancel|*_File'
  51.  
  52. a = Requester(title,text,gadgets)
  53.  
  54. IF a = 2 THEN exit
  55.  
  56. IF a = 0 THEN                                        /* File */
  57.     DO
  58.         MM_FileReq 'MM.CCDir'
  59.         IF rc = 0 THEN
  60.             CALL ReadCC MM.CCDir
  61.         ELSE
  62.             SIGNAL exit
  63.     END
  64. ELSE                                                /* Manual */
  65.     DO
  66.         title = 'Please enter receivers (name @ address@domain)'
  67.         MM_StringReq '"'title'"' var
  68.         IF rc ~= 0 THEN SIGNAL exit
  69.         DO WHILE var ~= ""
  70.             pos = index(var,"|")
  71.             IF pos > 1 THEN
  72.                 DO
  73.                 ReceiverCounter = ReceiverCounter + 1;
  74.                 receivers.ReceiverCounter = STRIP(LEFT(var,pos-1))
  75.                 addresses.ReceiverCounter = STRIP(SUBSTR(var,pos+1))
  76.                 END
  77.  
  78.             var = ''
  79.             MM_StringReq '"'title'"' var
  80.             IF rc ~= 0 THEN SIGNAL exit
  81.         END
  82.         receivers.0 = ReceiverCounter 
  83.     END
  84.  
  85. IF receivers.0 = 0 THEN SIGNAL exit                    /* No users selected */
  86. IF receivers.0 = 1 THEN                                /* Only one selected */
  87.     DO
  88.         title = '??????'
  89.         text = 'Oh boy, you only selected one receiver.'cr'Please use write instead...'
  90.         gadgets 'OK'
  91.         Requester(title,text,gadgets)
  92.         SIGNAL exit
  93.     END
  94.  
  95. CALL PRAGMA('S',MM.editorStack)
  96.  
  97. ADDRESS COMMAND MM.Editor                        /* Enter message */
  98.  
  99. title = 'Please enter subject...'
  100.  
  101. MM_StringReq '"'title'"' subject
  102.  
  103. IF a ~= 0 THEN SIGNAL exit
  104.  
  105. IF OPEN(temphandle1,MM.TempFile1,'Read') ~= 1 THEN
  106.     DO
  107.         title = 'Error!'
  108.         text = 'Could not open' MM.tempfile1 'for reading..'
  109.         gadgets = 'Ok'
  110.         Requester(title,text,gadgets)
  111.         SIGNAL exit
  112.     END
  113.  
  114. BodyText = READCH(temphandle1,60000)
  115. CALL CLOSE temphandle1
  116.  
  117. DO i = 1 TO Receivers.0
  118.     IF OPEN(temphandle2,MM.tempfile2,'Write') ~= 1 THEN
  119.         DO
  120.             title = 'Error!'
  121.             text = 'Could not open' MM.tempfile2 'for writing..'
  122.             gadgets = '"*_Ok'
  123.             Requester(title,text,gadgets)
  124.             SIGNAL exit
  125.         END
  126.  
  127.     CALL WRITECH(temphandle2,'Written with '||MM.PrgName||MM.Copyright||'0a'x)
  128.  
  129.     IF Receivers.0 > 2 THEN
  130.         CALL WRITECH(temphandle2,'0a'x||'[Copies sent to: ')
  131.     ELSE
  132.         CALL WRITECH(temphandle2,'0a'x||'[Copy sent to: ')
  133.     FirstReceiver = 1
  134.     DO x = 1 TO Receivers.0
  135.         IF x ~= i THEN
  136.             DO
  137.                 IF FirstReceiver = 0 THEN
  138.                     CALL WRITECH(temphandle2,', ')
  139.                 ELSE
  140.                     FirstReceiver = 0
  141.  
  142.                 CALL WRITECH(temphandle2,Receivers.x)
  143.             END
  144.     END
  145.  
  146.     CALL WRITECH(temphandle2,']'||'0a0a'x)
  147.     CALL WRITECH(temphandle2,BodyText)
  148.     CALL CLOSE temphandle2
  149.  
  150.     DROP MM.Msg.
  151.  
  152.     Msg.FromAddr= ''
  153.     Msg.To     = receivers.i
  154.     Msg.ToAddr = addresses.i
  155.     Msg.Subj   = subject
  156.     Msg.File   = MM.TempFile2
  157.     Msg.Tear   = MM.PrgName
  158.  
  159.     MM_WriteMsg MM.AreaTag Msg
  160.  
  161. END
  162.  
  163. SIGNAL exit                    
  164.  
  165. /* --------------------------------------------------------------------- */
  166.  
  167. ReadCC: PROCEDURE EXPOSE receivers. addresses. MM.
  168. PARSE ARG CfgFileName
  169.  
  170. ReceiverCounter = 0
  171.  
  172. DROP MM.File.
  173.  
  174. MM_ReadStem CfgFileName MM.File
  175. IF rc ~= 0 THEN
  176. DO
  177.     title = 'Error!'
  178.     text = 'Could not open' CfgFileName 'for reading..'
  179.     gadgets = 'Ok'
  180.     Requester(title,text,gadgets)
  181.     SIGNAL exit
  182. END
  183.  
  184. DO j = 0 FOR MM.File.Count
  185.     PARSE VAR MM.File.j receiver '@' fidoaddress
  186.     
  187.     receiver = STRIP(receiver,'B')
  188.     fidoaddress = STRIP(fidoaddress,'B')
  189.  
  190.     IF receiver ~= "" THEN
  191.         DO
  192.             IF fidoaddress ~= "" THEN
  193.                 DO
  194.                     ReceiverCounter = ReceiverCounter + 1
  195.                     receivers.ReceiverCounter = receiver
  196.                     addresses.ReceiverCounter = fidoaddress
  197.                 END
  198.             ELSE
  199.                 DO
  200.                     titolo = 'Error!'
  201.                     text ='There seems to be missing a @ in' CfgFileName'.'
  202.                     gadgets = 'Ok'
  203.                     Requester(titolo,text,gadgets)
  204.                     SIGNAL exit
  205.                 END
  206.         END
  207.  
  208. END
  209. receivers.0 = ReceiverCounter
  210. RETURN
  211.  
  212. syntax:
  213. SAY rc ERRORTEXT(rc) 'in line' SIGL
  214. failure:
  215. exit:
  216. ADDRESS MAILMANAGER MM_DeleteFile MM.tempfile1
  217. ADDRESS MAILMANAGER MM_DeleteFile MM.tempfile2
  218. EXIT
  219.  
  220. /* --------------------------------------------------------------------- */
  221.  
  222. Requester: PROCEDURE EXPOSE MM.
  223.  
  224. PARSE ARG Titolo, Testo, GadGets
  225. MM_Requester '"'Titolo'"' 'Testo' 'GadGets'
  226.  
  227. RETURN rc
  228.  
  229. /* --------------------------------------------------------------------- */
  230.  
  231. Trasforma: PROCEDURE EXPOSE MM.
  232.  
  233. PARSE ARG String
  234.  
  235. IF INDEX(String,'%')=0 THEN RETURN String
  236.  
  237. String = Replace(String,MM.TempFile1, '%s')
  238.  
  239. RETURN String
  240.  
  241. /* ---------------------------------------------------------------------- */
  242.  
  243. Replace: PROCEDURE
  244.  
  245. PARSE ARG String, New, Old
  246. DO WHILE INDEX(String, Old) ~= 0 ; INTERPRET "PARSE VAR String l '"Old"' r" ; String = l || New || r ; END
  247.  
  248. RETURN String
  249.  
  250. /* --------------------------------------------------------------------- */
  251.