Hello All
I've updated the bulk attachments script.
The '644', '666' and '755' types are processed up to 50% faster.
-- 8< -- Cut Here -- 8< --
/*
$VER: 0.15 UudecodeAttach.rx (29-01-2001)
$AUTHOR: by Jules <[EMAIL PROTECTED]> ©2000
$DESCRIPTION: Near automatic Uudecode of attachments.
This script requires the following.
Libraries:
ixemul.library (v48)
reqtools.library (v37,1413)
rexxreqtools.library (v38)
Command:
Uudecode (on Aminet, search for 'slrn' in News/Comm)
Programme:
Snoopdos (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.
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
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 [3])
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"
CALL ADDLIB("libs:rexxreqtools.library", 0, -30, 0)
/* Is Microdot running */
IF ~SHOW('P','MD.1') THEN DO
ERRT="Microdot is not running" ; CALL WEHAVEAPROBLEM
END
/* Default destination */
WHERETOPUTTHEM='RAM:'
IF PICOUNT <1 THEN DO
CALL WHEREAREWE ; USINGREQTOOLS=0
CALL HOWMANY ; USINGREQTOOLS=1
END
/* The counters */
PICOUNT=STRIP(PICOUNT)
IF PICOUNT < 1 THEN PICOUNT=1
AA=0 ; MAINLOOP=1
CALL PRAGMA 'DIRECTORY',WHERETOPUTTHEM
ADDRESS COMMAND "C:DELETE T:SnoopMD QUIET >NIL:"
/* Is SnoopDos running; if not, start it */
SNOOPPATH="RUN >NIL: "||SNOOP||" HIDEMETHOD=TOOLSMENU HIDE"
IF ~SHOW('P','SNOOPDOS') THEN DO
ADDRESS COMMAND SNOOPPATH ; ADDRESS COMMAND "WAITFORPORT SNOOPDOS"
END
/* Headers to look for */
CONTA='begin 644' ; CONTB='Content-Type: image/'
CONTC='Content-Type: text/html' ;CONTD='Content-Type: application/rtf'
CONTE='Content-Transfer-Encoding: base64' ; CONTF='begin 666'
CONTG='begin 755'
/* Start of Main loop */
DO MAINLOOP=1 TO PICOUNT
/* Set up Snoopdos */
ADDRESS SNOOPDOS ; ENABLE ; CLEARBUFFER ; FORMAT "%50n"
/* 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
CALL OPEN('TF',TARGETFILE,'R')
SUBCOUNT=0
/* 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 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,9) =CONTA | SUBSTR(PDRAW,1,9) =CONTF | SUBSTR(PDRAW,1,9) = CONTG
THEN DETEC=2
WHEN SUBSTR(PDRAW,1,20)=CONTB | SUBSTR(PDRAW,1,33)=CONTE THEN DETEC=1
WHEN SUBSTR(PDRAW,1,23)=CONTC THEN CALL HTMLATTACHMENT
WHEN SUBSTR(PDRAW,1,29)=CONTD THEN CALL RTFATTACHMENT
WHEN EOF('TF')=1 THEN LEAVE
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',65280) ; 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='NoTitleFound-'||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="" ; EE=UPPER(STRIP(PDRAW))
EE=SUBSTR(EE,POS('<TITLE>',EE)+7) ; EE=REVERSE(EE)
EE=SUBSTR(EE,POS('<ELTIT/>',EE)+9) ; EE=REVERSE(EE)
EE=WHERETOPUTTHEM||EE||'.html'
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=SPACE(STRIP(SUBSTR(PDRAW,9),'B'),0)
DO UNTIL POS(':',SUBJECTID)=0
SUBJECTID=SUBSTR(SUBJECTID,POS(':',SUBJECTID)+1)
END
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:
call rtezrequest(ERRT, "Shame", "Error!")
EXIT
RETURN
-- 8< -- And Here -- 8< --
--
Regards
Jules
--
Cursive writing does not mean what I think it does
-- Bart Simpson
__________________________________________________________________
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