Hello All I have added requesters to the script, so that it can be started from a 'message list' button, what you need is listed near the top of the script. Can now handle 'begin 666' types. All the best for the festive season. --- 8< -- Cut Here -- 8< --- /* $VER: 0.11 UudecodeAttach.rx (18-12-2000) $AUTHOR: by Jules (JA888)© 2000 $DESCRIPTION: Near automatic Uudecode of attachments. This script requires the following. Libraries: ixemul.library (v48) reqtools.library (v38.1413) rexxreqtools.library (v37.95) Command: Uudecode (on Aminet, search 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 'Message List' button. 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 CALL PRAGMA 'DIRECTORY','RAM:' IF PICOUNT <1 THEN DO USINGREQTOOLS=0 NL = '0a'x CALL ADDLIB("libs:rexxreqtools.library", 0, -30, 0) 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=99') IF RTRESULT~=1 THEN DO ; EXIT ; END PICOUNT=RESULT USINGREQTOOLS=1 END /* And the path of Snoopdos. Example SNOOP="SYS:Tools/Snoopdos" */ SNOOP="SNOOPDOS" /* The counters */ PICOUNT=STRIP(PICOUNT) IF PICOUNT < 1 THEN PICOUNT=1 AA=0 ; MAINLOOP=1 /* Check that Microdot is running */ IF ~SHOW('P','MD.1') THEN EXIT /* 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' ; CONTF='begin 666' /* 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,9) =CONTF 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.' IF USINGREQTOOLS=1 THEN CALL rtezrequest('All done.',"Thank you") 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 -- I will not complain about the solution when I hear it -- 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