/*******************************************************************/
/*                 $VER: BryCC.spot 1.0 (19.9.93)                  */
/*                                                                 */
/*         Inspired by CarbonCopy.spot by Peter Hanrahan           */
/*                                                                 */
/* This script will send multiple copies of a letter to two or     */
/* more users.                                                     */
/*                                                                 */
/* Will either prompt you for receivers or read them from a file   */
/*                                                                 */
/* Both takes the format: Username @ Address                       */
/*                                                                 */
/*       Author: Brian Jacobsen   FidoNet: 2:230/311.17            */
/*******************************************************************/

ADDRESS 'SPOT'
SIGNAL ON SYNTAX
OPTIONS RESULTS

ed = 'Ed -S'
CCfileDir = 'MAIL:'									/* Where to look for *.CC*/
tempfile1 = 'T:CC.temp'
tempfile2 = 'T:CC1.temp'
kludge = '01'x||'Via BryCC V1.0'
cr = '0d'X											/* Carriage return       */
receivers. = 0
addresses. = 0
ReceiverCounter = 0

'lockgui'											/* Lock Spot's GUI       */
'getareaname'
IF LEFT(result,4) ~= 'NET_' THEN					/* Only works from       */
	'gotomatrixarea'								/* Netmail               */
'ismessages'
IF rc ~=0 THEN 'messages'

requestdata = 'TITLE "Please choose..." PROMPT "Do you want enter receivers manually or'cr'    read them from a file?" GADGETS "Manual|File"'
'requestresponse' requestdata

IF rc = 0 THEN										/* File */
	DO
		requestdata = 'TITLE "Please choose a file..." PATH "'CCfileDir'" PATTERN "#?.cc"'
		'requestfile' requestdata
		IF rc = 0 THEN
			CALL ReadCC result
		ELSE
			SIGNAL exit
	END
ELSE												/* Manual */
	DO
		RequestData = 'TITLE "Please enter receivers" PROMPT "     (Format username @ address)'cr' Example: Brian Jacobsen @ 2:230/311.17'cr'When finished click _Ok or hit <return>"'
		'requeststring' RequestData
		IF rc ~= 0 THEN SIGNAL exit
		DO WHILE result ~= ""
			pos = index(result,"@")
			IF pos > 1 THEN
				DO
				ReceiverCounter = ReceiverCounter + 1;
				receivers.ReceiverCounter = STRIP(LEFT(result,pos-1))
				addresses.ReceiverCounter = STRIP(SUBSTR(result,pos+1))
				END

			'requeststring' RequestData
			IF rc ~= 0 THEN SIGNAL exit
		END
		receivers.0 = ReceiverCounter 
	END

IF receivers.0 = 0 THEN SIGNAL exit					/* No users selected */
IF receivers.0 = 1 THEN								/* Only one selected */
	DO
		'requestnotify PROMPT "Oh boy, you only selected one receiver.'cr'Please use write instead..."'
		SIGNAL exit
	END

ADDRESS COMMAND ed tempfile1						/* Enter message */
'spot2front'

RequestData = 'TITLE "Please enter subject..." PROMPT "Now please enter the subject for this message'cr'Selecting Cancel will abort the message..."'
'requeststring' RequestData
IF rc ~= 0 THEN SIGNAL exit
subject = result

IF OPEN(temphandle1,tempfile1,'Read') ~= 1 THEN
	DO
		requestdata = 'PROMPT "Could not open' tempfile1 'for reading.."'
		'requestnotify' requestdata
		SIGNAL exit
	END

BodyText = READCH(temphandle1,60000)
CALL CLOSE temphandle1

DO i = 1 TO Receivers.0
	IF OPEN(temphandle2,tempfile2,'Write') ~= 1 THEN
		DO
			requestdata = 'PROMPT "Could not open' tempfile2 'for writing.."'
			'requestnotify' requestdata
			SIGNAL exit
		END

	CALL WRITELN(temphandle2,kludge)
	IF Receivers.0 > 2 THEN
		CALL WRITECH(temphandle2,'0a'x||'[Copies sent to: ')
	ELSE
		CALL WRITECH(temphandle2,'0a'x||'[Copy sent to: ')
	FirstReceiver = 1
	DO x = 1 TO Receivers.0
		IF x ~= i THEN
			DO
				IF FirstReceiver = 0 THEN
					CALL WRITECH(temphandle2,', ')
				ELSE
					FirstReceiver = 0

				CALL WRITECH(temphandle2,Receivers.x)
			END
	END
	CALL WRITECH(temphandle2,']'||'0a0a'x)
	CALL WRITECH(temphandle2,BodyText)
	CALL CLOSE temphandle2
	requestdata = 'TO "'receivers.i'" TOADDR "'addresses.i'" SUBJECT "'subject'" FILE "'tempfile2'" NOEDIT NOGUI'
	'write' requestdata
END

SIGNAL exit											/* End of main program */

ReadCC: PROCEDURE EXPOSE receivers. addresses.
ARG CfgFileName
ReceiverCounter = 0

IF OPEN('cfghandle',CfgFileName,'Read') ~= 1 THEN
	DO
		requestdata = 'PROMPT "Could not open' CfgFileName 'for reading.."'
		'requestnotify' requestdata
		SIGNAL exit
	END

inline = READLN('cfghandle')

DO WHILE ~EOF('cfghandle')
	PARSE VAR inline receiver '@' fidoaddress
	
	receiver = STRIP(receiver,'B')
	fidoaddress = STRIP(fidoaddress,'B')

	IF receiver ~= "" THEN
		DO
			IF fidoaddress ~= "" THEN
				DO
					ReceiverCounter = ReceiverCounter + 1
					receivers.ReceiverCounter = receiver
					addresses.ReceiverCounter = fidoaddress
				END
			ELSE
				DO
					requestdata = 'PROMPT "There seems to be missing a @ in' CfgFileName'"'
					'requestnotify' requestdata
					SIGNAL exit
				END
		END

	inline = READLN('cfghandle')
END
CALL CLOSE('cfghandle')
receivers.0 = ReceiverCounter
RETURN

syntax:
SAY rc ERRORTEXT(rc) 'in line' SIGL
failure:
exit:
ADDRESS COMMAND 'Delete >NIL:' tempfile1
ADDRESS COMMAND 'Delete >NIL:' tempfile2
'unlockgui'
EXIT
