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