/*++

Copyright (c) 1997 FORE Systems, Inc.
Copyright (c) 1997 Microsoft Corporation

Module Name:

	atmlane.c

Abstract:

	ATM ARP Admin Utility.

	Usage:

		atmarp 

Revision History:

	Who			When		What
	--------	--------	---------------------------------------------
	josephj 	06-10-1998	Created (adapted from atmlane admin utility).

Notes:

	Modelled after atmlane utility.

--*/

#include "common.h"
#include "atmmsg.h"

BOOL
ParseCmdLine(
	int argc, 
	char * argv[]
	);

OPTIONS g;

void 
Usage(void);
	
VOID __cdecl
main(
	INT			argc,
	CHAR		*argv[]
)
{

	//
	// Parse args, determine if this is concerns the arp client or server.
	//
	if(!ParseCmdLine(argc, argv)){
		Usage();
		return;
	}

	DoAAS(&g);

	//
	// Following tries to open atmarpc.sys...
	//
	// DoAAC(&g);

}

void 
Usage(void)
{
	printf( "\n  Windows NT IP/ATM Information\n\n");
	printf(
		"USAGE:     atmarp [/s] [/c] [/reset]\n");

	printf(
		"  Options\n"
		"      /?       Display this help message.\n"
		"      /s       Display statistics for the ARP and MARS server.\n"
		"      /c       Display the ARP and MARS caches.\n"
		"      /reset   Reset the ARP and MARS statistics.\n\n"
		);
	
	printf(
		"The default is to display only the ARP and MARS statistics.\n\n"
		);
}

UINT FindOption(
	char *lptOpt, 
	char **ppVal
	);

enum
{
DISP_HELP,
DISP_STATS,
DISP_CACHES,
DO_RESET,
UNKNOWN_OPTION
};

struct _CmdOptions {
    char *  lptOption;
    UINT    uOpt;
} CmdOptions[]    = {
                      {"/?"		, DISP_HELP		    },
                      {"-?"		, DISP_HELP		    },
                      {"/s"		, DISP_STATS		},
                      {"-s"		, DISP_STATS		},
                      {"/c"		, DISP_CACHES		},
                      {"-c"		, DISP_CACHES		},
                      {"/reset"	, DO_RESET			},
                      {"-reset"	, DO_RESET			}
                    };
INT iCmdOptionsCounts = sizeof(CmdOptions)/sizeof(struct _CmdOptions);


BOOL
ParseCmdLine(
	int argc, 
	char * argv[]
	)
{
	BOOL	bRetVal = TRUE;
	int		iIndx;
	UINT	uOpt;
	char	*pVal;

	for(iIndx = 1; iIndx < argc; iIndx++)
	{
		
		uOpt = FindOption(argv[iIndx], &pVal);

		switch(uOpt){

		case DISP_STATS:
			g.DispStats = TRUE;
			break;

		case DISP_CACHES:
			g.DispCache = TRUE;
			break;

		case DO_RESET:
			g.DoResetStats = TRUE;
			break;
		
		default:
			printf("Unknown option - %s\n", argv[iIndx]); // fall through
		case DISP_HELP:
			bRetVal = FALSE;
		}
	}

	if (argc<=1)
	{
		//
		// Set default
		//
		g.DispStats = TRUE;
	}

	return bRetVal;
}


UINT FindOption(
	char *lptOpt, 
	char **ppVal
	)
{
int		i;
UINT    iLen;

    for(i = 0; i < iCmdOptionsCounts; i++){
		if(strlen(lptOpt) >= (iLen = strlen(CmdOptions[i].lptOption)))
			if(0 == _strnicmp(lptOpt, CmdOptions[i].lptOption, iLen)){
				*ppVal = lptOpt + iLen;
				return CmdOptions[i].uOpt;
			}
	}

    return UNKNOWN_OPTION;
}