home *** CD-ROM | disk | FTP | other *** search
/ back2roots/padua / padua.7z / padua / uucp / bsmtp.lzh / bsmtp / batchthem.rexx < prev    next >
OS/2 REXX Batch file  |  1991-12-06  |  5KB  |  181 lines

  1. /* batch mails for certain host             */
  2. /* Version 1.02 Friday 06-Dec-91 16:11:25   */
  3. /* by Georg Sassen (georg@bluemoon.GUN.de   */
  4.  
  5. /* open rexxsupport.library */
  6.  
  7. if ~show('L','rexxsupport.library') then do
  8.     if ~addlib('rexxsupport.library',0,-30,0) then do
  9.         say 'Could not open rexxsupport.library'
  10.         exit 20
  11.     end
  12. end
  13.  
  14. /* create names for a temporary files */
  15.  
  16. tofile      = 't:rx1'||pragma('Id')
  17. tmptmp      = 't:rx2'||pragma('Id')
  18.  
  19. /* constants */
  20.  
  21. rcmax = 0
  22. TRUE  = 1
  23. FALSE = 0
  24.  
  25. hostname = FindConfig('NodeName')||FindConfig('DomainName')
  26. ccmd        = 'freeze'      /* or compress... */
  27. rcmd        = 'rfsmtp'      /* or rcsmtp for compress */
  28.  
  29.  
  30. if ~exists('uuspool:outbak') then
  31.     address command 'makedir uuspool:outbak' /* make directory for backup copies if
  32.                                                 it doesn't exist */
  33.  
  34. /* get hostnames from commandline */
  35.  
  36. parse arg systems
  37.  
  38. sys.0 = words(systems)
  39.  
  40. if sys.0 ~= 0 then do
  41.     do  i = 1 to sys.0
  42.         sys.i = trim(word(systems,i))
  43.     end
  44. end
  45.  
  46. /* get the command files for each host from uuspool: */
  47.  
  48. do i= 1 to sys.0
  49.     mydir = showdir('uuspool:')
  50.     dir.i.0 = words(mydir)
  51.     if dir.i.0 ~= 0 then do
  52.         ind = 0
  53.         do j = 1 to dir.i.0
  54.             temp=trim(word(mydir,j))
  55.             if index(temp,'C.' || strip(left(sys.i,7))) ~= 0 then do
  56.                 ind = ind + 1
  57.                 dir.i.ind = temp
  58.             end
  59.             dir.i.0 = ind
  60.         end
  61.     end
  62. end
  63.  
  64. /* Now we have a listing of the 'C.hostname#?' command files
  65.    in uuspool: in dir.i.j */
  66.  
  67. do i = 1 to sys.0
  68.     do j = 1 to dir.i.0
  69.         say dir.i.j
  70.     end
  71.     say 'Hooray...'
  72. end
  73.  
  74. /* Which of them are for mail (and not for news) ?
  75.  * We assume the following format for the C.* files:
  76.  * S D.egosoftB0d7i D.bluemooB0d7k georg - D.egosoftB0d7i 0666
  77.  *   ^ local        ^ remote filename of data file (e.g. news/mail)
  78.  * S D.egosoftX0d7i X.bluemooX0d7j georg - D.egosoftX0d7i 0666
  79.  *   ^ local        ^ remote filename of command file (i.e. the one with rmail
  80.  * ^ S=send, R=receive (ignored by now...)             foo!bar)
  81.  * Now we just look into the command files if there is an rmail line, which
  82.  * means we have to process it. */
  83.  
  84. do i = 1 to sys.0
  85.     ret = open('out',tofile,'W')
  86.     writeln('out','HELO '||hostname)
  87.     do j = 1 to dir.i.0
  88.         ret = open('myfile','uuspool:'||dir.i.j)
  89.         if ret ~= 1 then do
  90.             say 'Panic - where is my file' dir.i.j '?'
  91.             exit 20
  92.         end
  93.         temp = readln('myfile')
  94.         parse var temp rubbish datafile rubbish
  95.         temp = readln('myfile')
  96.         parse var temp rubbish commandfile rubbish
  97.         close('myfile')
  98.         /* open the command file: */
  99.         ret = open('myfile','uuspool:'||commandfile)
  100.         if ret ~= 1 then do
  101.             say 'Oerks - where is uuspool:'||commandfile '?'
  102.             exit 20
  103.         end
  104.         do while (~eof('myfile'))
  105.             temp = readln('myfile')
  106.             if left(temp,1) = 'C' then
  107.                 break
  108.         end
  109.         close('myfile')
  110.         parse var temp rubbish command address /* C rmail bluemooon!georg */
  111.         if command = 'rmail' then do
  112.             call doit datafile,address
  113.             address command 'rename "uuspool:('||commandfile||'|'datafile||'|'||dir.i.j||')" uuspool:outbak'
  114.         end
  115.     end
  116.     writeln('out','QUIT')
  117.     close('out')
  118.     address command ccmd' <'||tofile||' >'||tmptmp
  119.     if RC > rcmax then rcmax=RC
  120.     address command 'uux '||tmptmp||' '||sys.i||'!'||rcmd
  121.     if RC > rcmax then rcmax=RC
  122. end
  123.  
  124. address command 'delete '||tofile
  125. address command 'delete '||tmptmp
  126.  
  127. exit rcmax
  128.  
  129. doit: procedure
  130.     parse arg datafile,address
  131.     say 'Processing mail from file' datafile 'to' strip(address)
  132.     ret = open('myfile','uuspool:'||datafile)
  133.     if ret ~= 1 then do
  134.        say 'Where is uuspool:'||datafile '?'
  135.        exit 20
  136.     end
  137.     hdrline = readln('myfile')
  138.     parse var hdrline 'From 'user date' remote from ' fromhost
  139.     say "Fromuser:" user "Date:" date "Fromhost:" fromhost
  140.     from = fromhost||'!'||user
  141.     writeln('out','MAIL FROM:<'||from||'>')
  142.     do i = 1 to words(address)
  143.         writeln('out','RCPT TO:<'||trim(word(address,i))||'>')
  144.     end
  145.     writeln('out','DATA')
  146.     do while ~eof('myfile')
  147.         line = readln('myfile')
  148.         if line='.' then line='..'
  149.         writeln('out',line)
  150.     end
  151.     close('myfile')
  152.     writeln('out','.')
  153. return
  154.  
  155. /* Findconfig function similar to the C-thing in uucp.lib */
  156. /* Note: no TAB's in Configfile allowed... */
  157.  
  158. FindConfig:
  159.    arg configname
  160.    if exists('s:UUConfig') then
  161.       filename = 's:UUConfig'
  162.    else
  163.       filename = 'UULib:Config'
  164.  
  165.    ret=open('configfile',filename,'R')
  166.    if ret = FALSE then do
  167.       say 'Can''t open '||filename
  168.       exit 20
  169.    end
  170.  
  171.    do while ~eof('configfile')
  172.       string = readln('configfile')
  173.       if upper(word(string,1))=upper(configname) then do
  174.          close('configfile')
  175.          return delword(string,1,1)
  176.       end
  177.    end
  178.   close('configfile')
  179.   return 'NotFound'
  180.  
  181.