
/*
 *	Function	ProgArgsCLI
 *	Programmer	N.d'Alterio
 *	Date		11/09/95
 *
 *  Synopsis:	Reads command line arguments for SpoolWatch and
 *		returns them. Use FreeProgArgs to return memory
 *		allocated to them.
 *
 *  Arguments:	None.
 *
 *  Returns:	struct SWArgs *		Structure containing all the
 *					programs options.
 *		
 *		NULL			If error.
 *
 *  Variables:	args[]			Set by ReadArgs to point to each
 *					command line arg.
 *
 *		rda			Pointer to read args structure.
 *
 *		swa			Pointer to structure to be filed
 *					in with processed arguments.
 *
 *  Functions:	AllocMem		Allocated memory (DOS)
 *		FreeMem			Free memory (DOS)
 *		AllocDosObject		Creates a dos structure (DOS)
 *		FreeDosObject		Frees a dos structure (DOS)
 *		ReadArgs		Parses command line (DOS)
 *		FreeArgs		Frees mem allocated by ReadArgs (DOS)
 *		strcpy			Copies one string to another (ANSI)
 *		strlen			Length of a string (ANSI)
 *		fprintf			Print to file stream (ANSI)		
 *
 *  $Id: ProgArgsCLI.c 1.7 1995/09/24 18:14:12 daltern Exp $
 *
 */

#include "SpoolWatch.h"

#define NUM_ARGS	7	
#define ARG_TEMPLATE	"MAILDIR/K,NEWSDIR/K,DELAY/N,NOGUI/S,LEFT/N,TOP/N,FULL/S"
#define OPT_MSD		0
#define OPT_NSD		1
#define OPT_DEL		2
#define OPT_GUI		3
#define	OPT_LEF		4
#define OPT_TOP		5
#define OPT_FULL	6
		
struct SWArgs *ProgArgsCLI( void )

{

  long int args[NUM_ARGS] = {0,0,0,0,0,0,0};

  struct RDArgs *rda;
  struct SWArgs *swa;

  if ( swa = (struct SWArgs *)AllocMem( sizeof( struct SWArgs ), MEMF_ANY | MEMF_CLEAR ) ) {

/*
 *   Set flag showing prog was started from the cli
 */

  	swa->start = CLI_START;

  	if ( rda = (struct RDArgs *)AllocDosObject( DOS_RDARGS, NULL ) ) {

		if ( ReadArgs( ARG_TEMPLATE, args, rda ) ) {

/*
 *   Process args found. If command line option given then use
 *   that. Otherwise use default value.
 */
 

			if ( args[OPT_MSD] ) {
				swa->mail_spooldir = (char *)AllocMem( (ULONG)(strlen( (char *)args[OPT_MSD] ) * sizeof( char )), MEMF_ANY );
				strcpy( swa->mail_spooldir, (char *)args[OPT_MSD] );
			} else {
				swa->mail_spooldir = (char *)AllocMem( (ULONG)(strlen( MAIL_SPOOLDIR ) * sizeof( char )), MEMF_ANY );
				strcpy( swa->mail_spooldir, MAIL_SPOOLDIR );
			}   /* end if mail_spooldir */

			if ( args[OPT_NSD] ) {
				swa->news_spooldir = (char *)AllocMem( (ULONG)(strlen( (char *)args[OPT_NSD] ) * sizeof( char )), MEMF_ANY );
				strcpy( swa->news_spooldir, (char *)args[OPT_NSD] );
			} else {
				swa->news_spooldir = (char *)AllocMem( (ULONG)(strlen( NEWS_SPOOLDIR ) * sizeof( char )), MEMF_ANY );
				strcpy( swa->news_spooldir, NEWS_SPOOLDIR );
			}   /* end if news_spooldir */

			swa->delay    = args[OPT_DEL] ? *((LONG *)args[OPT_DEL]) : UPD_DELAY;

			swa->nogui    = args[OPT_GUI] ? TRUE : FALSE;

			swa->win_left = args[OPT_LEF] ? *((LONG *)args[OPT_LEF]) : WIN_LEFT;

			swa->win_top  = args[OPT_TOP] ? *((LONG * )args[OPT_TOP]) : WIN_TOP;

			swa->full      = args[OPT_FULL] ? TRUE : FALSE;
			
			FreeArgs( rda );
	
		} else {

			SWError( swa, NULL, "Incorrect arguments use option '?' for a template" );
			FreeMem( swa, sizeof( struct SWArgs ) );
			swa = NULL;

		}   /* end if ReadArgs */
		
		FreeDosObject( DOS_RDARGS, rda );

  	} else {

		FreeMem( swa, sizeof( struct SWArgs ) );
		swa = NULL;

	}  /* end if AllocDosObject */

  }  /* end if swa, swa = NULL if AllocMem has failed */

  return swa;

}   /* end function ProgArgsCLI */

/*========================================================================*
                     END FUNCTION ProgArgsCLI
 *========================================================================*/