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

140 lines
3.2 KiB
C

/*++
Copyright (c) 1989 Microsoft Corporation
Module Name:
zwapi.c
Abstract:
This is the main module for the NT nt header file to zw
header file converter.
Author:
Mark Lucovsky (markl) 28-Jan-1991
Revision History:
--*/
#include "zwapi.h"
char *ReturnType = "NTSTATUS";
char *Decoration = "NTSYSAPI";
char *CallType = "NTAPI";
char *ProcedureNamePrefix = "Nt";
char *EndPrototype = ");";
int
__cdecl main( argc, argv )
int argc;
char *argv[];
{
fUsage = 0;
if (!ProcessParameters( argc, argv )) {
fUsage = 1;
}
if (fUsage) {
fprintf( stderr, "usage: ZWAPI [-?] display this message\n" );
fprintf( stderr, " [-o filename ]\n" );
return 1;
}
OutputFile = fopen(OutputFileName,"a");
if (!OutputFile) {
fprintf(stderr,"ZWAPI: Unable to open output file %s for write access\n",OutputFileName);
return 1;
}
while ( SourceFileCount-- ) {
SourceFileName = *SourceFileList++;
SourceFile = fopen(SourceFileName,"r");
if (!SourceFile) {
fprintf(stderr,"ZWAPI: Unable to open source file %s for read access\n",SourceFileName);
return 1;
}
ProcessSourceFile();
}
return( 0 );
}
int
ProcessParameters(
int argc,
char *argv[]
)
{
char c, *p;
while (--argc) {
p = *++argv;
if (*p == '/' || *p == '-') {
while (c = *++p)
switch (toupper( c )) {
case '?':
fUsage = 1;
return 0;
break;
case 'O': {
argc--, argv++;
OutputFileName = *argv;
SourceFileList = &argv[1];
SourceFileCount = argc-1;
return 1;
break;
}
}
}
}
return 0;
}
void
ProcessSourceFile( void )
{
char *s;
int CallTypeFound;
while( s = fgets(StringBuffer,STRING_BUFFER_SIZE,SourceFile) ) {
if (strstr(s,ReturnType) == s) {
s = fgets(StringBuffer,STRING_BUFFER_SIZE,SourceFile);
if ( s && (strstr(s,CallType) == s) ) {
s = fgets(StringBuffer,STRING_BUFFER_SIZE,SourceFile);
CallTypeFound = TRUE;
}
else {
CallTypeFound = FALSE;
}
if ( s && (strstr(s,ProcedureNamePrefix) == s) ) {
if (!CallTypeFound) {
fprintf(stderr, "ZWAPI: '%s' call type missing for %s\n", CallType, s );
}
fprintf(OutputFile,"%s\n%s\n%s\nZw%s",
Decoration,
ReturnType,
CallType,
s + strlen(ProcedureNamePrefix)
);
while( s = fgets(StringBuffer,STRING_BUFFER_SIZE,SourceFile) ) {
fputs(s,OutputFile);
if (strstr(s,EndPrototype)) {
break;
}
}
}
}
}
}