Hello All
Hopefully over this weekend this will improve a little more, but this
version will be less likely to get stuck or lost.
--- 8< -- Cut Here -- 8< ---
/*
$VER: 0.10 UudecodeAttach.rx (15-12-2000)
$AUTHOR: by Jules (JA888)� 2000
$DESCRIPTION: Near automatic Uudecode of attachments.
Need at least version 48 of ixemul.library.
And the Command Uudecode (on Aminet, search slrn in News/Comm)
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
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) This script should be run with a numerical argument for the number
of files to be read. Output is by default to 'RAM:'.
(rx rexx:UudecodeAttach.rx 3)
*/
OPTIONS RESULTS
PARSE ARG PICOUNT
CALL PRAGMA 'DIRECTORY','RAM:'
/*
And the path of Snoopdos. Example SNOOP="SYS:Tools/Snoopdos"
*/
SNOOP="SNOOPDOS"
/*
Check that Microdot is running
*/
IF ~SHOW('P','MD.1') THEN EXIT
/*
The counters
*/
PICOUNT=STRIP(PICOUNT)
IF PICOUNT < 1 THEN PICOUNT=1
AA=0 ; MAINLOOP=1
/*
Check if SnoopDos is running; if not, then start it
*/
SNOOPPATH="RUN >NIL: "||SNOOP||" HIDEMETHOD=TOOLSMENU HIDE"
IF ~SHOW('P','SNOOPDOS') THEN DO
ADDRESS COMMAND SNOOPPATH ; ADDRESS COMMAND "WAITFORPORT SNOOPDOS"
END
/*
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
CALL GETOUTOFHERE ; EXIT
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
CALL GETOUTOFHERE ; EXIT
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
CONTA='begin 644'
CONTB='Content-Type: image/'
CONTC='Content-Type: text/html'
CONTD='Content-Type: application/rtf'
CONTE='Content-Transfer-Encoding: base64'
/*
Start of inner loop
*/
DO UNTIL EOF('TF')=1
SUBCOUNT=SUBCOUNT+1 ; DETEC=0 ; PDRAW="" ; DFILE=""
DO UNTIL DETEC=1
PDRAW=READLN('TF')
IF SUBJECTCOUNTER<1 & POS('Subject',PDRAW)>0 THEN CALL FINDSUBJECT
IF BOUNDARYCOUNTER<1 & POS('Content-Type: multipart',PDRAW)>0 THEN CALL FINDBOUNDARY
IF SUBSTR(PDRAW,1,9) =CONTA THEN DETEC=1
IF SUBSTR(PDRAW,1,20)=CONTB THEN DETEC=1
IF SUBSTR(PDRAW,1,23)=CONTC THEN CALL OHNOITSHTML
IF SUBSTR(PDRAW,1,29)=CONTD THEN CALL OHNOITSRTF
IF SUBSTR(PDRAW,1,33)=CONTE THEN DETEC=1
IF EOF('TF')=1 THEN LEAVE
END
DETEC=0 ; OPF='T:TF'||PICOUNT||SUBCOUNT
CALL OPEN('IMAGE',OPF,'W')
CALL WRITELN('IMAGE',PDRAW)
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 of inner loop
*/
CALL CLOSE('IMAGE') ; CALL CLOSE('TF')
ADDRESS COMMAND 'C:uudecode T:TF* >NIL:'
SAY MAINLOOP' of 'PICOUNT' saved.'
END
/*
End of Main loop
*/
SAY 'Cleaning up.'
CALL PRAGMA 'DIRECTORY','sys:'
CALL GETOUTOFHERE
ADDRESS COMMAND "C:WAIT"
SAY 'Complete.'
EXIT
GETOUTOFHERE:
ADDRESS COMMAND "C:DELETE T:SnoopMD QUIET >NIL:"
ADDRESS COMMAND "C:DELETE T:TF#? QUIET >NIL:"
ADDRESS SNOOPDOS ; QUIT
RETURN
OHNOITSRTF:
CALL FINDFILENAME
DO UNTIL SUBSTR(PDRAW,1,5)='{\rtf' ; PDRAW=READLN('TF') ; END
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
OHNOITSHTML:
DD=0
DO UNTIL POS('<HTML>',PDRAW)>0
IF POS('filename',PDRAW)>0 THEN DO
EE=PDRAW ; EE=SUBSTR(EE,POS('filename',EE)+10)
HTMLSTEM.0='RAM:'||SUBSTR(EE,1,LENGTH(EE)-1) ; DD=1
END
PDRAW=READLN('TF')
END
DDD=1
DO UNTIL EOF('TF')
HTMLSTEM.DDD = PDRAW
IF DD=0 & POS('<TITLE>',PDRAW)>0 THEN DO
CALL HTMLTITLE ; HTMLSTEM.0=EE ; DD=1
END
IF 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
HTMLTITLE:
EE="" ; EE=STRIP(PDRAW)
EE=SUBSTR(EE,POS('<TITLE>',EE)+7) ; EE=REVERSE(EE)
EE=SUBSTR(EE,POS('</TITLE>',EE)+9) ; EE=REVERSE(EE)
EE='RAM:'||EE||'.html'
RETURN
FINDFILENAME:
DO UNTIL DD>0
IF POS('filename',PDRAW)>1 THEN DO
EE=PDRAW ; EE=SUBSTR(EE,POS('filename',PDRAW)+10)
EE='RAM:'||SUBSTR(EE,1,LENGTH(EE)-1) ; DD=1
END
PDRAW=READLN('TF')
END
DD=0
RETURN
NEEDADUMMY:
CALL OPEN('DUM','T:TFA','W') ; CALL WRITELN('DUM','A') ; CALL CLOSE('DUM')
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
OHNOITSPLAINTEXT:
RETURN
FINDSUBJECT:
SUBJECTID=SPACE(STRIP(SUBSTR(PDRAW,9),'B'),0)
DO UNTIL POS(':',SUBJECTID)=0
SUBJECTID=SUBSTR(SUBJECTID,POS(':',SUBJECTID)+1)
END
SUBJECTCOUNTER=1
RETURN
--- 8< -- And Here -- 8< ---
--
Regards
Jules
__________________________________________________________________
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