windows-nt/Source/XPSP1/NT/sdktools/hivepp/p0keys.c
2020-09-26 16:20:57 +08:00

66 lines
1.9 KiB
C

/************************************************************************/
/* */
/* 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);
}