Files
2022-10-26 12:25:11 +08:00

176 lines
3.2 KiB
C

/*
*
* cppkw.c
*
* generate the cppkeywords.in file
* this will include all reserved macros in
* addition to all reserved keywords
*
*/
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
#include <string.h>
#include <stdio.h>
#include <malloc.h>
// usage : cppkw <location of keywdat.h> <location of p0io.c> <outputfile>
int main(int argc, char *argv[])
{
char *szRoot;
char *szData;
char *szTemp;
char *szEnd;
FILE *fpIn;
FILE *fpOut;
int nRet;
long nFileLength = 0;
nRet = 0;
szRoot = NULL;
szData = NULL;
szTemp = NULL;
szEnd = NULL;
fpIn = NULL;
fpOut = NULL;
if (argc < 4)
{
printf("usage : cppkw <location of keywdat.h> <location of p0io.c> <outputfile>\n");
return 1;
}
fpIn = fopen(argv[1], "r");
if (!fpIn)
{
printf("error : could not open keywdat file \"%s\"\n", argv[1]);
return 1;
}
fpOut = fopen(argv[3], "w");
if (!fpOut)
{
printf("error : could not open output file \"%s\" for writing\n", argv[3]);
goto error;
}
fprintf(fpOut,
"%%class=CCppKeywordLookup\r\n"
"%%preamble\r\n"
"//\r\n"
"// generated with VC7Libs\\Nonship\\Src\\Sproxy2\\static_hash\\static_hash /i cppkeywords.in /o CppKeywordTable.h /w\r\n"
"//\r\n"
"\r\n"
"%%type=char\r\n"
"%%data\r\n");
nFileLength = _filelength(_fileno(fpIn));
szData = (char *)malloc(nFileLength+1);
if (!szData)
{
printf("out of memory\n");
goto error;
}
fread(szData, nFileLength, 1, fpIn);
szData[nFileLength] = '\0';
szTemp = szRoot = szData;
szEnd = szData+nFileLength;
szTemp = strstr(szTemp, "\nDAT(\"");
while (szTemp != NULL)
{
char *szTemp2 = NULL;
szData = szTemp;
szData+= sizeof("\nDAT(\"")-1;
if (szData >= szEnd)
{
printf("error in (expected) format of keywdat file.\n");
goto error;
}
szTemp2 = strchr(szData, '"');
if (!szTemp2)
{
printf("error in (expected) format of keywdat file.\n");
goto error;
}
fprintf(fpOut, "%.*s,0\r\n", szTemp2-szData, szData);
szTemp = strstr(szTemp+1, "\nDAT(\"");
}
fclose(fpIn);
fpIn = fopen(argv[2], "r");
if (!fpIn)
{
printf("error : could not open p0io file \"%s\" for reading.\n", argv[2]);
goto error;
}
nFileLength = _filelength(_fileno(fpIn));
if ((szEnd-szRoot) < nFileLength)
{
free(szRoot);
szRoot = (char *)malloc(nFileLength+1);
if (!szRoot)
{
printf("out of memory.\n");
goto error;
}
}
fread(szRoot, nFileLength, 1, fpIn);
szRoot[nFileLength] = '\0';
szTemp = szData = szRoot;
szEnd = szData+nFileLength;
szTemp = strstr(szTemp, "GetIdForString((pIdString_t) \"");
while (szTemp != NULL)
{
char *szTemp2 = NULL;
szData = szTemp;
szData += sizeof("GetIdForString((pIdString_t) \"")-1;
if (szData >= szEnd)
{
printf("error in (expected) format of p0io file.\n");
goto error;
}
szTemp2 = strchr(szData, '"');
if (!szTemp2)
{
printf("error in (expected) format of p0io file.\n");
goto error;
}
fprintf(fpOut, "%.*s,0\r\n", szTemp2-szData, szData);
szTemp = strstr(szTemp+1, "GetIdForString((pIdString_t) \"");
}
goto end;
error:
nRet = 1;
end:
if (fpIn != NULL)
{
fclose(fpIn);
}
if (fpOut != NULL)
{
fclose(fpOut);
}
if (szRoot != NULL)
{
free(szRoot);
}
return nRet;
}