/*++

  COMPARE.C

  Checks to see if a command line option matches a given expectation.

  Created, DavidCHR 6/9/1997

  --*/

#include "private.h"

/* ParseCompare:

   returns TRUE if the argument matches the expectation of pEntry */

BOOL
ParseCompare( optionStruct *pEntry,
	      ULONG         flags,
	      PCHAR         arg ) {

    CHAR  buffer[ 255 ];

    switch( pEntry->flags & OPT_MUTEX_MASK ) {

     case OPT_CONTINUE:
     case OPT_PAUSE:
     case OPT_DUMMY:
	 
       if ( pEntry->cmd ) {
	 OPTIONS_DEBUG( "ParseCompare: skipping useless option ( %s, 0x%x)\n",
			pEntry->cmd,
			pEntry->flags & OPT_MUTEX_MASK );
       }

       return FALSE;

     case OPT_STRING:
     case OPT_INT:
     case OPT_STOP_PARSING:
     case OPT_LONG:
     case OPT_BOOL:
     case OPT_HELP:
     case OPT_FLOAT:
     case OPT_FUNC:
     case OPT_ENUMERATED:
     case OPT_FUNC2:

#ifdef WINNT
     case OPT_USTRING:
     case OPT_WSTRING:
#endif	 

       if ( pEntry->cmd ) {
	 OPTIONS_DEBUG( "ParseCompare: option ( %s, 0x%x) is \"normal\".\n",
			pEntry->cmd,
			pEntry->flags & OPT_MUTEX_MASK );
       } else {

	 ASSERT_NOTREACHED( "Nobody should EVER specify a NULL command field"
			    " in an option structure.  "
			    "It's just plain dumb." );
	 return FALSE;
       }

       break;

     case OPT_SUBOPTION:

	 /* copy everything before the colon into a buffer, then 
	    string-compare the buffer-- suboptions have the form:

	    [+|-|/]option:suboption:suboption */

	 OPTIONS_DEBUG( "ParseCompare: Suboption... " );

     {
       ULONG i;

       for ( i = 0 ; arg[i] != ':' ; i++ ) {
	 if ( arg[i] == '\0' ) {
	   OPTIONS_DEBUG(" no colon.  This cannot be a suboption.\n" );
	   return FALSE;
	 }
	 OPTIONS_DEBUG("%c", arg[i] );
	 buffer[i] = arg[i];
       }

       buffer[i] = '\0';

       arg = buffer;
       break;
     }


     default:

#if (HIGHEST_OPTION_SUPPORTED != OPT_STOP_PARSING )
#error "new options? update this switch statement or bad things will happen."
#endif

	 ASSERT_NOTREACHED( "unknown option type-- your COMPAT library is "
			    "probably out of date.  ssync security\\compat "
			    "and rebuild, then relink your project." );
	 return FALSE;

    }

    OPTIONS_DEBUG( "Comparing \"%s\" against \"%s\"...",
		   arg, pEntry->cmd );


    if ( STRCASECMP( arg, pEntry->cmd ) == 0 ) {

      OPTIONS_DEBUG( "equal!\n" );
      return TRUE;

    } else {
      
      OPTIONS_DEBUG( "not equal\n" );
      return FALSE;

    }
    
    ASSERT_NOTREACHED( "Should never get here" );

}