/
Sapphire/bin/
Sapphire/db/
Sapphire/db/OLC_rooms/
Sapphire/db/abi/
Sapphire/db/em_src/
Sapphire/db/helps/
Sapphire/db/helps/emman/ifunc/
Sapphire/db/npcs/Tatt/
Sapphire/db/objects/Tatt/
Sapphire/db/q_data/
Sapphire/db/rooms/Tatt/
Sapphire/doc/
Sapphire/doc/em/
Sapphire/etc/
Sapphire/src/abic/
Sapphire/src/areacon/
Sapphire/src/client/
Sapphire/src/embc/
Sapphire/src/emi/
Sapphire/src/emi/test/
Sapphire/src/include/
Sapphire/src/sapphire/em/
Sapphire/src/tcon/
/*
 * Copyright (C) 1995-1997 Christopher D. Granz
 *
 * This header may not be removed.
 *
 * Refer to the file "License" included in this package for further
 * information and before using any of the following.
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#include "sapphire.h"


/*
 * Functions
 */

/*
 * Return TRUE if argument is completely numeric.
 */
bool is_number( char *pArg )
{
    if ( *pArg == '\0' )
        return ( FALSE );

    if ( *pArg == '+' || *pArg == '-' )
        pArg++;

    for ( ; *pArg != '\0'; pArg++ )
    {
        if ( isdigit( *pArg ) == 0 )
            return ( FALSE );
    }

    return ( TRUE );
}


/*
 * Compare strings, case-insensitive.  Returns FALSE if strings
 * are different.
 */
bool str_compare( char *pStrA, char *pStrB )
{
    for ( ; *pStrA || *pStrB; pStrA++, pStrB++ )
    {
        if ( LOWER( *pStrA ) != LOWER( *pStrB ) )
            return ( FALSE );
    }

    return ( TRUE );
}


/*
 * Compares pStrA to list of words (pStrB) seperated by spaces.
 */
bool multi_compare( char *pStrA, char *pStrB )
{
    char cBuf[MAX_INPUT];

    while ( *pStrB != '\0' )
    {
        pStrB = one_arg( pStrB, cBuf );

        if ( str_compare( pStrA, cBuf ) == TRUE )
            return ( TRUE );
    }

    return ( FALSE );
}


/*
 * Compares pStrA to an array of strings (pStrs).
 */
bool multi_compare_2( char *pStrA, string *pStrs )
{
    int i;

    for ( i = 0; pStrs[i] != NULL; i++ )
    {
        if ( str_compare( pStrA, pStrs[i] ) == TRUE )
            return ( TRUE );
    }

    return ( FALSE );
}


/*
 * Compare strings, case insensitive, for prefix matching.
 * Returns FALSE if pStrA is not a prefix of pStrB.
 */
bool str_prefix( char *pStrA, char *pStrB )
{
    for ( ; *pStrA; pStrA++, pStrB++ )
    {
        if ( LOWER( *pStrA ) != LOWER( *pStrB ) )
            return ( FALSE );
    }

    return ( TRUE );
}


/*
 * Compare strings, case insensitive, for match anywhere.
 * Returns FALSE if pStrA is not a part of pStrB.
 */
bool str_infix( char *pStrA, char *pStrB )
{
    int iSStr1;
    int iSStr2;
    int iChar;
    char c;

    if ( ( c = LOWER( pStrA[0] ) ) == '\0' )
        return ( TRUE );

    iSStr1 = strlen( pStrA );
    iSStr2 = strlen( pStrB );

    for ( iChar = 0; iChar <= iSStr2 - iSStr1; iChar++ )
    {
        if ( c == LOWER( pStrB[iChar] )
        && str_prefix( pStrA, pStrB + iChar ) == TRUE )
            return ( TRUE );
    }

    return ( FALSE );
}


/*
 * Compare strings, case insensitive, for suffix matching.
 * Returns FALSE if pStrA not a suffix of pStrB.
 */
bool str_suffix( char *pStrA, char *pStrB )
{
    int iSStr1;
    int iSStr2;

    iSStr1 = strlen( pStrA );
    iSStr2 = strlen( pStrB );

    if ( iSStr1 <= iSStr2
    && str_compare( pStrA, pStrB + iSStr2 - iSStr1 ) == TRUE )
        return ( TRUE );
    else
        return ( FALSE );
}


/*
 * End of compare.c
 */