/*******************************************************************/
/*  $VER: SaveUUE v2.4  (06-10-94)                                 */
/*******************************************************************/
/* Another script by Jan-willem van Eys (FIDO: 2:283/2.11)         */
/*                                                                 */
/* Major thanks go to Remco van Hooff & Robert van den Breemen!    */
/*                                                                 */
/*******************************************************************/
/* Saves all unread uuencoded messages out to disk and marks them  */
/* read. (I use DiskMaster to decode them later)                   */
/*                                                                 */
/* Change 'Path' to your setup... (Or use 'REQ' as an option to    */
/* get a nice requester...)                                        */
/*******************************************************************/

OPTIONS RESULTS

ARG argument

version='SaveUUE 2.4'
NL='0d'x
teller=0
TEXT='Selected areas:'NL'~~~~~~~~~~~~~~~'
Path='Download:'
FILE='MAIL:SaveUUE.Prefs'
filefout=0

ADDRESS SPOT

'getareaname'
rootarea=RESULT

/***********************/
/* Argument testing... */
/***********************/

IF argument='REQ' THEN DO
	'requestpath TITLE "Select destination path" PATH "'Path'"'
	Path=RESULT
END
IF ~((argument='REQ') | (argument='')) THEN DO
	'requestnotify PROMPT "Wrong argument: 'argument'"'
	EXIT
END

/***********************/
/* Ask for choice...   */
/***********************/

'requestresponse TITLE "'version'" PROMPT "Which areas do you want to scan?" GADGETS "_Use Prefs|_Current area|_All areas|_Quit"'
select=RC

IF select=0 THEN DO
	EXIT
END
IF select=1 THEN DO
	CALL Prefsfile
	IF filefout=1 THEN DO
		CALL create
		CALL Prefsfile
	END
END

/***********************/
/* Fill arrays with    */
/* area names...       */
/***********************/

IF (select=3 | select=1) THEN DO
	einde=0
	counter=0
	'firstarea'
	'unreadarea'
	IF RC=2 THEN DO
		'requestnotify PROMPT "No unread mail found"'
		EXIT
	END
	area.1=''
	DO UNTIL einde
		'unreadarea'
		'getareaname'
		einde=(area.1=RESULT)
		IF ~einde THEN DO
			counter=counter+1
			area.counter=RESULT
		END
	END
	areatop=counter
	IF select=1 THEN DO
		einde=0
		teller=0
		count=0
		DO UNTIL einde
			teller=teller+1
			eind=0
			counter=0
			DO UNTIL eind
				counter=counter+1
				IF area.counter=read.teller THEN DO
					count=count+1
					temp.count=read.teller
				END
				eind=(counter=areatop)
			END
			einde=(teller=readtop)
		END
		tijdtop=count
		IF tijdtop=0 THEN DO
			'gotoarea 'rootarea''
			'requestnotify PROMPT "No areas in prefsfile that have unread mail!"'
			EXIT
		END
		einde=0
		counter=0
		DO UNTIL einde
			counter=counter+1
			area.counter=temp.counter
			einde=(counter=tijdtop)
		END
		areatop=tijdtop
	END
	'firstarea'
END
IF select=2 THEN DO
	'getareaname'
	area.1=RESULT
	areatop=1
END

/************************/
/* The part that        */
/* actually does the    */
/* selecting & saving   */
/* of the messages      */
/************************/

einde=0
teller=0
counter=1
'arealist'
DO UNTIL einde
	'gotoarea 'area.counter''
	'messagelist'
	'getmessagenum'
	origin=RESULT
	'firstmessage UNREAD'
	IF RC=5 THEN DO
		IF select=2 THEN DO
			'requestnotify PROMPT "No unread mail found"'
			'gotomessage "'origin'"'
			EXIT
		END
		'gotomessage "'origin'"'
	END
	ELSE DO
		'include STRING "#?'NL'Begin ??? #?'NL'M#?" TEXT UNREAD NOREQ NOGUI'
		'getnumselected'
		selected=RESULT
		'firstmessage'
		a=1
		DO WHILE ~(a=selected+1)
			'nextmarked'
			'getmessagenum'
			getal.a=RESULT
			a=a+1
		END
		'clearflags UNREAD'
		'excludeflag ALL'
		a=1
		DO WHILE ~(a=selected+1)
			'gotomessage "'getal.a'"'
			'markmessage'
			'getsubject'
			over=RESULT
			IF UPPER(LEFT(over,3))='RE:' THEN DO
				lengte=LENGTH(over)
				lengte=lengte - 4
				over=RIGHT(over,lengte)
			END
			over=SPACE(over,1,'_')
			IF LENGTH(over) > 26 THEN DO
				over=LEFT(over,26)
			END
			'saveascii TO "'path''over'.uue" NOTEARLINE NOORIGIN NOKLUDGES'
			teller=teller+1
			'markmessage CLEAR'
			a=a+1
		END
	END
	einde=(counter=areatop)
	counter=counter+1
	'gotomessage "'origin'"'
END
'arealist'
'gotoarea 'rootarea''
'requestnotify PROMPT "Saved 'teller' messages to 'path'"'
EXIT

/***********************/
/* Read prefsfile      */
/***********************/

Prefsfile:
IF OPEN('Prefs',FILE,'read') THEN DO
	aantal=0
	check=STRIP(READLN('Prefs'),'L')
	naam=LEFT(check,(LENGTH(check)-4))
   versie=RIGHT(check,3)
	rev=RIGHT(versie,1)
	IF ~(naam='SaveUUE' & LEFT(versie,2)='2.' & rev>0) THEN DO
		'requestresponse TITLE "'version'" PROMPT "Incompatible Prefs file!'NL'~~~~~~~~~~~~~~~~~~~~~~~~'NL'Create new Prefs?" GADGETS "_Yes|_Abort" CENTER'
		IF RC=0 THEN DO
			EXIT
		END
		CALL CLOSE('Prefs')
		filefout=1
		RETURN
	END
	DO UNTIL EOF('Prefs')
		temp=STRIP(UPPER(READLN('Prefs')),'L')
		IF ~(temp='') THEN DO
			double=aantal
			DO WHILE (double>0) & ~(read.double=temp)
				double=double-1
			END
			IF double=0 THEN DO
				aantal=aantal+1
				read.aantal=temp
			END
		END
	END
	readtop=aantal
	CALL CLOSE('Prefs')
END

/***********************/
/* Couldn't open the   */
/* prefs file...       */
/* Now what?           */
/***********************/

ELSE DO
	'requestresponse TITLE "'version'" PROMPT "Couldn''t open prefsfile'NL''FILE''NL''NL' What now?" GADGETS "_Create prefs|_Abort" CENTER'
	IF rc=0 THEN DO
		EXIT
	END
	IF rc=1 THEN DO
		filefout=1
		RETURN
	END
END
DO counter=1 TO readtop
	TEXT=TEXT || NL || read.counter
END
'requestresponse TITLE "'version'" PROMPT "'TEXT'" GADGETS "_Continue|_Edit|_Abort" CENTER'
SELECT
	WHEN RC=0 THEN
		EXIT
	WHEN RC=1 THEN
		RETURN
	WHEN RC=2 THEN
		CALL editlist
	OTHERWISE
		SAY "What did you do to get here?"
		EXIT
END

SAY "Wrong exit!!!"
EXIT

/***********************/
/* Create prefsfile    */
/* if it doesn't exist */
/***********************/

create:
filefout=0
einde=0
CALL OPEN('Prefs',FILE,'w')
CALL WRITELN('Prefs',version)
CALL WRITELN('Prefs','')
DO UNTIL einde=1
	'requestarea TITLE "Select areas to scan" ALL'
	IF RC=5 THEN DO
		einde=1
		CALL CLOSE('Prefs')
		LEAVE
	END
	CALL WRITELN('Prefs',RESULT)
END
CALL CLOSE('Prefs')
RETURN

/***********************/
/* Edit prefsfile      */
/***********************/

editlist:
einde=0
klaar=0
teller=0
teller2=1

/***********************/
/* Ask for each area   */
/* if we want to keep  */
/* it                  */
/***********************/

DO UNTIL einde
	teller=teller+1
	'requestresponse TITLE "'version'" PROMPT "'read.teller'" GADGETS "_Keep|_Delete"'
	IF RC=1 THEN DO
		edit.teller2=read.teller
		teller2=teller2+1
	END

/***********************/
/* Ask if we want to   */
/* add any areas       */
/***********************/

	IF teller=readtop THEN DO
		teller=teller2-1
		'requestresponse TITLE "'version'" PROMPT "Add more areas?" GADGETS "_Yes|_No"'
		IF RC=0 THEN DO
			teller=teller+1
			einde=1
			LEAVE
		END
		IF RC=1 THEN DO
			DO UNTIL klaar
				teller=teller+1
				'requestarea TITLE "Select areas to scan" ALL'
				IF RC=5 THEN DO
					klaar=1
					einde=1
					LEAVE
				END
				edit.teller=RESULT
			END
		END
	END
END
edittop=teller-1
teller=0
DO UNTIL (teller=edittop)
	teller=teller+1
	read.teller=edit.teller
END
readtop=edittop
TEXT='Selected areas:'NL'~~~~~~~~~~~~~~~'
DO counter=1 TO readtop
	TEXT=TEXT || NL || read.counter
END
'requestresponse TITLE "'version'" PROMPT "'TEXT'" GADGETS "_Save & continue|_Edit|_Abort" CENTER'
SELECT
	WHEN RC=0 THEN
		EXIT
	WHEN RC=1 THEN
		CALL savelist
	WHEN RC=2 THEN
		CALL editlist
		RETURN
	OTHERWISE
		SAY "What did you do to get here?"
		EXIT
END

SAY "Wrong Exit!!!"
EXIT

/***********************/
/* Save the edited     */
/* arealist back to    */
/* disk                */
/***********************/

savelist:
einde=0
teller=0
CALL OPEN('Prefs',FILE,'w')
CALL WRITELN('Prefs',version)
CALL WRITELN('Prefs','')
DO UNTIL einde=1
	teller=teller+1
	CALL WRITELN('Prefs',read.teller)
	einde=(teller=readtop)
END
CALL CLOSE('Prefs')
RETURN
