With reference to 'Bulk Attachments' by me

 Found the problem Patrick, and your output confirmed this. My poor use of
'SnoopDos', I've now taken full control of the programme. I hope :-) Please
let me know how you get on.

 Right lets see if I can attach a plain text and send it to this mailing
list, as requested by Mike.
--
All the best.
  Jules
--
I will not complain about the solution when I hear it
-- Bart Simpson


-- Attached file included as plaintext by Listar --
-- File: UudecodeAttach.rx

/*
 $VER: 0.16 UudecodeAttach.rx (06-02-2001)
 $AUTHOR: by Jules <[EMAIL PROTECTED]> �2000
 $DESCRIPTION: The bulk saving of attachments.

This script requires the following.
Libraries: ixemul.library (v48) - reqtools.library (v37,1413)
           rexxreqtools.library (v38) - rexxsupport.library(34.9)
Command:   Uudecode (on Aminet, search for 'slrn' in News/Comm)
           (it has no version string but the size can be 80352 or 20052)
Programme: Snoopdos 3.0 (by Eddy Carroll)

Note:
 This script cannot handle attachments which have been split across
 more than one message. Nor will it; as yet, save 'text/plain' attachments.

Instructions:
  1) If 'Snoopdos' is not in your system path, enter the new path in this script.
  2) Select but do not open the first Email or news message, as the script will do
     that. (the first file will be opened with the 'READSELECTEDMSGS' command and
     the subsequent ones' will use the 'GotoMsg Next' command.)
  3) If this scritp is run without arguments it will show a requester for you to
     enter the number of files to be read. Output is by default to 'RAM:'.
     (if run from shell - rx rexx:UudecodeAttach.rx [number of files])
  4) When it has finished, it will either print to a window or show a requester.
*/
OPTIONS RESULTS
PARSE ARG PICOUNT

/* Default path for Snoopdos */
SNOOP='SNOOPDOS'

/* Libraries */
LIBR.1='rexxreqtools.library' ; LIBR.2='ixemul.library'
LIBR.3='reqtools.library'     ; LIBR.4='rexxsupport.library'
CMAD.1='uudecode'

USINGREQTOOLS=0

DO I=1 TO 4
 IF ~EXISTS('Libs:'||LIBR.I) THEN DO
  ERRT='Could not find '||LIBR.I ; CALL WEHAVEAPROBLEM
 END
END
 IF ~SHOW('L',LIBR.1) THEN ADDLIB('Libs:'||LIBR.1, 5, -30, 0)
DO I=2 TO 4
 IF ~SHOW('L',LIBR.I) THEN ADDLIB('Libs:'||LIBR.I, 0, -30, 0)
END
DROP I

/* Default Paths */
WHERETOPUTTHEM='RAM:'
SNOOPPATH="RUN >NIL: "||SNOOP||" HIDEMETHOD=TOOLSMENU HIDE"

IF PICOUNT <1 THEN USINGREQTOOLS=1

IF ~EXISTS('C:'||CMAD.1) THEN DO
 ERRT='Could not find '||CMAD.1 ; CALL WEHAVEAPROBLEM
 END

/* Is Microdot running */
IF ~SHOW('P','MD.1') THEN DO
 ERRT="Microdot is not running" ; CALL WEHAVEAPROBLEM
 END

IF USINGREQTOOLS=1 THEN DO
 CALL WHEREAREWE ; CALL HOWMANY
 END

/* The counters */
AA=0 ; MAINLOOP=1 ; PICOUNT=STRIP(PICOUNT) ; IF PICOUNT < 1 THEN PICOUNT=1

CALL PRAGMA 'DIRECTORY',WHERETOPUTTHEM
IF EXISTS('T:SnoopMD') THEN ADDRESS COMMAND "C:DELETE T:SnoopMD QUIET >NIL:"

/* Is SnoopDos running; if not, start it */
IF ~SHOW('P','SNOOPDOS') THEN DO
 ADDRESS COMMAND SNOOPPATH ; ADDRESS COMMAND "WAITFORPORT SNOOPDOS"
END
ADDRESS SNOOPDOS
FUNCTIONS NONE   ; FUNCTIONS NOSYSTEM ; CHANGEDIR
NOSHOWFULLPATH   ; NOONLYSHOWFAILS    ; NOSHOWCLI
NOMONITORPACKETS ; NOPACKETDEBUGGER   ; NOMONITORROMCALLS
IGNORESHELL      ; NOUSEDEVICENAMES   ; OPEN

/* Headers to look for */
CONTA='644' ; CONTB='image/' ; CONTC='text/html' ; CONTD='application/rtf'
CONTE='base64' ; CONTF='666' ; CONTG='755' ; CONTH='BASE64'
LNSTA='Content-Transfer-Encoding:' ; LNSTB='Content-Type:' ; LNSTC='begin'

/* Start of Main loop */
DO MAINLOOP=1 TO PICOUNT
/* Set up Snoopdos */
ADDRESS SNOOPDOS ; ENABLE ; CLEARBUFFER ; FORMAT "%255n"

/* Read the message in MD-II */
ADDRESS MD.1
IF MAINLOOP<2 THEN READSELECTEDMSGS
              ELSE GOTOMSG NEXT

ADDRESS COMMAND 'WAIT' ; ADDRESS SNOOPDOS ; SAVEBUFFER "T:SnoopMD"
ADDRESS COMMAND 'WAIT' ; DISABLE

CALL OPEN('MD','T:SnoopMD','R')
 AA=READCH('MD',125) ; AA=STRIP(AA,'B')
CALL CLOSE('MD')
IF LENGTH(AA)<120 THEN DO
 ERRT="Could not find SnoopDos output."
 CALL GETOUTOFHERE ; CALL WEHAVEAPROBLEM
END

/* Find the correct line. */
DETEC=0 ; PDRAW="" ; DFILE=""
CALL OPEN('MD','T:SnoopMD','R')
DO UNTIL DETEC>1
 PDRAW=READLN('MD') ; DETEC=POS('DBX_',PDRAW)
 IF EOF('MD')=1 THEN DO
  ERRT="Could not find the file path."
  CALL GETOUTOFHERE ; CALL WEHAVEAPROBLEM
 END
END
DFILE=READLN('MD')
CALL CLOSE('MD')
/* Give it a hair cut */
TARGETFILE=STRIP(PDRAW)||"/"||STRIP(DFILE)
/*
 OPF = OUTPUT FILE
 SUBCOUNT =  Counter for the number of attachments
 BOUNDARY = Mailer boundary
 BOUNDARYCOUNTER = Only look for one boundary
 */
BOUNDARY="" ; BOUNDARYCOUNTER=0 ; SUBJECTCOUNTER=0 ; SUBCOUNT=0
CALL OPEN('TF',TARGETFILE,'R')
TFLENGTH=SUBWORD(STATEF(TARGETFILE),2,1)

/* Start of inner loop */
DO UNTIL EOF('TF')=1
SUBCOUNT=SUBCOUNT+1 ; DETEC=0 ; PDRAW="" ; DFILE="" ; REFERRED=0
DO UNTIL DETEC=1
 PDRAW=READLN('TF')
 SELECT
  WHEN EOF('TF')=1 THEN LEAVE
  WHEN SUBJECTCOUNTER<1 & POS('Subject:',PDRAW)>0 THEN CALL FINDTHESUBJECT
  WHEN BOUNDARYCOUNTER<1 & POS('Content-Type: multipart',PDRAW)>0 THEN CALL 
FINDBOUNDARY
  WHEN SUBSTR(PDRAW,1,5) = LNSTC & SUBSTR(PDRAW,7,3)  = CONTA ,
                                 | SUBSTR(PDRAW,7,3)  = CONTF ,
                                 | SUBSTR(PDRAW,7,3)  = CONTG THEN DETEC=2
  WHEN SUBSTR(PDRAW,15,6) = CONTB & SUBSTR(PDRAW,1,13)= LNSTB THEN DETEC=1
  WHEN SUBSTR(PDRAW,15,9) = CONTC & SUBSTR(PDRAW,1,13)= LNSTB THEN CALL HTMLATTACHMENT
  WHEN SUBSTR(PDRAW,15,15)= CONTD & SUBSTR(PDRAW,1,13)= LNSTB THEN CALL RTFATTACHMENT
  WHEN SUBSTR(PDRAW,1,26)= LNSTA & SUBSTR(PDRAW,28,6) = CONTE ,
                                 | SUBSTR(PDRAW,28,6) = CONTH THEN DETEC=1
  OTHERWISE NOP
 END
  IF DETEC=2 THEN DO
   DETEC=1 ; REFERRED=644
  END
END
DETEC=0 ; OPF='T:TF'||PICOUNT||SUBCOUNT
CALL OPEN('IMAGE',OPF,'W')
CALL WRITELN('IMAGE',PDRAW)
 IF REFERRED=644 THEN DO
  DO UNTIL DETEC=1
   PDRAW=READCH('TF',TFLENGTH+1) ; CALL WRITECH('IMAGE',PDRAW)
   IF EOF('TF')=1 THEN DETEC=1
  END
 END ; ELSE DO
  DO UNTIL DETEC=1
   PDRAW=READLN('TF') ; CALL WRITELN('IMAGE',PDRAW)
   IF SUBSTR(PDRAW,1,3)='end' THEN DETEC=1
   IF BOUNDARYCOUNTER=1 & PDRAW=BOUNDARY THEN DETEC=1
   IF EOF('TF')=1 THEN DETEC=1
  END
 END
END
/* End of inner loop */
CALL CLOSE('IMAGE') ; CALL CLOSE('TF')
ADDRESS COMMAND "C:uudecode T:TF* >NIL:"
IF  USINGREQTOOLS~=1 THEN SAY MAINLOOP' of 'PICOUNT' saved.'
END
/* End of Main loop */

IF USINGREQTOOLS~=1 THEN SAY 'Cleaning up.'
CALL PRAGMA 'DIRECTORY','sys:'
CALL GETOUTOFHERE
IF USINGREQTOOLS=1 THEN CALL rtezrequest('All done.',"Thank you")
                   ELSE SAY 'Complete.'
EXIT

GETOUTOFHERE:
 ADDRESS COMMAND "C:DELETE T:SnoopMD T:TF#? QUIET >NIL:"
 ADDRESS SNOOPDOS ; QUIT
RETURN

RTFATTACHMENT:
DD=0
DO UNTIL POS('{\rtf',PDRAW)>0 ; CALL FINDFILENAME ; PDRAW=READLN('TF') ; END
IF DD<1 THEN EE='DUMMYNAME.RTF'
CALL OPEN('IMAGE',EE,'W')
DO UNTIL EOF('TF')
 CALL WRITELN('IMAGE',PDRAW) ; PDRAW=READLN('TF')
 IF PDRAW=BOUNDARY THEN DO
  CALL CLOSE('IMAGE') ; LEAVE
 END
END
CALL NEEDADUMMY
SUBCOUNT=SUBCOUNT+1
RETURN

HTMLATTACHMENT:
DD=0
DO UNTIL POS('<html>',PDRAW)>0 | POS('<HTML>',PDRAW)>0
 CALL FINDFILENAME ; PDRAW=READLN('TF') ; END
IF DD=1 THEN HTMLSTEM.0=EE
        ELSE HTMLSTEM.0=SUBJECTID||'-'||SUBCOUNT||'.html'
DDD=1
DO UNTIL EOF('TF')
 HTMLSTEM.DDD = PDRAW
 IF DD=0 & POS('<title>',PDRAW)>0 | POS('<TITLE>',PDRAW)>0 THEN DO
   CALL HTMLTITLE ; HTMLSTEM.0=EE ; DD=1
 END
 IF POS('</html>',HTMLSTEM.DDD)>0 | POS('</HTML>',HTMLSTEM.DDD)>0 THEN LEAVE
 PDRAW=READLN('TF')
 DDD=DDD+1
END
CALL OPEN('IMAGE',HTMLSTEM.0,'W')
DO FF=1 TO DDD ; CALL WRITELN('IMAGE',HTMLSTEM.FF) ; END
CALL CLOSE('IMAGE')
CALL NEEDADUMMY
DROP DDD HTMLSTEM.
SUBCOUNT=SUBCOUNT+1
RETURN

NEEDADUMMY:
CALL OPEN('DUM','T:TFA','W') ; CALL WRITELN('DUM','A')
CALL CLOSE('DUM')
RETURN

HTMLTITLE:
EE="" ; GG=""
EE=UPPER(STRIP(PDRAW)) ; GG=STRIP(PDRAW)
GG=SUBSTR(GG,POS('<TITLE>',EE)+7)
EE=REVERSE(EE) ; GG=REVERSE(GG)
GG=SUBSTR(GG,POS('<ELTIT/>',EE)+9)
GG=REVERSE(GG) ; EE=WHERETOPUTTHEM||GG||'.html'
DROP GG
RETURN

FINDBOUNDARY:
DD=0
DO UNTIL EOF('TF')
 DD=POS('boundary=',PDRAW)
 IF DD>0 THEN DO
  PDRAW=STRIP(PDRAW) ; EE=SUBSTR(PDRAW,DD+10)
  BOUNDARY='--'||SUBSTR(EE,1,LENGTH(EE)-1)
  DD=0 ; LEAVE
 END
 PDRAW=READLN('TF')
END
BOUNDARYCOUNTER=1
RETURN

FINDFILENAME:
IF POS('filename',PDRAW)>1 THEN DO
 EE=STRIP(PDRAW,'B')
 DO FF=1 TO 2 ; EE=SUBSTR(EE,POS('"',EE)+1) ; EE=REVERSE(EE) ; END
 EE=WHERETOPUTTHEM||EE ; DD=1
END
RETURN

PLAINTEXT:
RETURN

FINDTHESUBJECT:
SUBJECTID=SUBSTR(PDRAW,9)
IF POS('Re:',SUBJECTID)>0 & POS('Re:',SUBJECTID)<5 THEN ,
  SUBJECTID=SUBSTR(SUBJECTID,POS('Re:',SUBJECTID)+4)
SUBJECTID=COMPRESS(SUBJECTID,' :_!$%&*+=|\?/<>')
SUBJECTCOUNTER=1
RETURN

WHEREAREWE:
WHERETOPUTTHEM = RTFILEREQUEST(,,"Where shall I put them?",
                                ,"Alright","rtfi_flags = freqf_nofiles")
IF RTRESULT==0 THEN EXIT
RETURN

HOWMANY:
NL = '0a'x
CALL RTGETLONG('1','How Many Messages'NL'do you wish to open',
                  ,'Get attachments by Jules',
                  ,"_Yes please|_No thank you",'RTGL_MIN=1 RTGL_MAX=250')
IF RTRESULT~=1 THEN EXIT
PICOUNT=RESULT
RETURN

WEHAVEAPROBLEM:
IF USINGREQTOOLS=1 THEN CALL RTEZREQUEST(ERRT, "Shame", "Error!")
                   ELSE SAY ERRT
EXIT
RETURN

/*
Version 0.07 - base64 only.
Version 0.08 - Some HTML and RTF added.
Version 0.10 - base64 HTML RTF
Version 0.11 - 'begin 666' added. Can now be started from shell or a 'Message List' 
button.
Version 0.12 - 'begin 755' added.
Version 0.13 - Added the destination requester. A bit more html work.
Version 0.14 - Destination fixed. Stray SnoopMD killed.
Version 0.15 - Faster 644 666 755 processing
Version 0.16 - Error checks improved. - BASE64 - 'SnoopDos' setup changed.
*/


__________________________________________________________________
MicroDot-II Mailing List - http://www.vapor.com/md2/
MicroDot-II FAQ: http://faq.vapor.com/md2/
Listserver Help: mailto:[EMAIL PROTECTED]?Subject=HELP
Unsubscribe....: mailto:[EMAIL PROTECTED]?Subject=UNSUBSCRIBE

Reply via email to