/************************************************************************/
/*									*/
/* RCPP - Resource Compiler Pre-Processor for NT system			*/
/*									*/
/* P0KEYS.C - Keycode stuff						*/
/*									*/
/* 06-Dec-90 w-BrianM  Update for NT from PM SDK RCPP			*/
/*									*/
/************************************************************************/

#include <stdio.h>
#include <string.h>
#include "rcpptype.h"
#include "rcppdecl.h"
#include "rcppext.h"
#include "p0defs.h"

/************************************************************************/
/*  table for preprocessor id's						*/
/************************************************************************/
char	* Pkeyw_Table[] = {
#include "pkeyw.key"
};
char	Pkeyw_Index[] = {
#include        "pkeyw.ind"
};
struct	s_pkinfo	{
    token_t   	s_info;
} Pkeyw_Info[] = {
#include        "pkeyw.inf"
};


/************************************************************************/
/*  is_pkeyword : finds the token for the id if it's a preprocessor keyword.*/
/*  P0_NOTOKEN if not found.						*/
/************************************************************************/
token_t is_pkeyword(char *id)
{
    REG	char	**start;
    REG	char	**stop;
    char	*pi;

    if( (*id) < '_') {
	return(P0_NOTOKEN);
    }
    /*
	**  the indx table tells us the start of
	**  the words which begin with the first char if the id.
	**  the 'stop' is the index of the word which does not have the
	**  give char as it's first.
	**  we can start checking after the first char since, we *know* that
	**  they match (hence the additions 'id++' and (*start) + 1
	*/
    pi = &Pkeyw_Index[((*id) - '_')];
    for(start = &Pkeyw_Table[*pi++], stop = &Pkeyw_Table[*pi], id++;
        start != stop;
        start++
        ) {
	if(strcmp(*start, id) == 0) {
	    return(Pkeyw_Info[(start - &Pkeyw_Table[0])].s_info);
	}
    }
    return(P0_NOTOKEN);
}