Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

206 lines
5.9 KiB

/*++
Copyright (c) 1992-1996 Microsoft Corporation
Module Name:
mibcc.c
Abstract:
MibCC.c contains driver that calls the main program for the MIB compiler.
Environment:
User Mode - Win32
Revision History:
10-May-1996 DonRyan
Removed banner from Technology Dynamics, Inc.
--*/
//--------------------------- WINDOWS DEPENDENCIES --------------------------
//--------------------------- STANDARD DEPENDENCIES -- #include<xxxxx.h> ----
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//--------------------------- MODULE DEPENDENCIES -- #include"xxxxx.h" ------
#include "oidconv.h"
//--------------------------- SELF-DEPENDENCY -- ONE #include"module.h" -----
#include"mibcc.h"
#include"mibtree.h"
//--------------------------- PUBLIC VARIABLES --(same as in module.h file)--
lpTreeNode lpMIBRoot;
int lineno;
/* command line switches */
BOOL fNoLogo=FALSE; /* assume always print logo */
BOOL fTreePrint=FALSE; /* -p : Print the tree when it is all parsed */
BOOL fNodePrint=FALSE; /* -n : Print each node as it is added */
unsigned int nWarningLevel=2; /* warning level used by parser/lexer */
unsigned int nStopAfterErrors=10;
LPSTR lpOutputFileName=NULL;
unsigned int uTotalFilesProcessed=0;
//--------------------------- PRIVATE CONSTANTS -----------------------------
//--------------------------- PRIVATE STRUCTS -------------------------------
//--------------------------- PRIVATE VARIABLES -----------------------------
//--------------------------- PRIVATE PROTOTYPES ----------------------------
//--------------------------- PRIVATE PROCEDURES ----------------------------
//--------------------------- PUBLIC PROCEDURES -----------------------------
int SnmpMgrMibCC(argc, argv)
int argc;
char * argv[];
{
BOOL fSuccess = TRUE; /* assume success */
UINT uFileNameLen;
/* process command line options */
--argc;
++argv;
while ((argc > 0) && ((argv[0][0] == '-') || (argv[0][0] == '/'))) {
switch (argv[0][1]) {
case '?':
case 'h':
case 'H':
printf ("usage: mibcc [-?] [-e] [-l] [-n] [-o] [-t] -[w] [files...]\n");
printf (" MibCC compiles the specified SNMP MIB files.\n");
printf (" -? usage.\n");
printf (" -eX stop after X Errors. (default = 10)\n");
printf (" -l do not print Logo.\n");
printf (" -n print each Node as it is added.\n");
printf (" -ofile output file name. (default = mib.bin)\n");
printf (" -t print the mib Tree when finished.\n");
printf (" -wX set Warning level. (1=errors, 2=warnings)\n");
exit (0);
break;
case 'e':
case 'E':
nStopAfterErrors = atoi (&argv[0][2]);
break;
case 'l':
case 'L':
fNoLogo = TRUE;
break;
case 'n':
case 'N':
fNodePrint = TRUE;
break;
case 'o':
case 'O':
// alloc space for the output file name and copy it.
if (NULL != lpOutputFileName) {
free (lpOutputFileName);
}
uFileNameLen = strlen (&argv[0][2]);
if (0 == uFileNameLen) {
printf ("mibcc: output file name not found\n");
printf ("mibcc -? for usage\n");
exit (1);
} else {
lpOutputFileName = malloc (uFileNameLen);
strcpy (lpOutputFileName, &argv[0][2]);
}
break;
case 't':
case 'T':
fTreePrint = TRUE;
break;
case 'w':
case 'W':
nWarningLevel = atoi (&argv[0][2]);
break;
default:
printf ("mibcc: unrecognized option '%s'\n", argv[0]);
printf ("mibcc -? for usage\n");
exit (1);
break;
}
--argc;
++argv;
}
// Set default file name if not specified on command line
if (NULL == lpOutputFileName) {
lpOutputFileName = malloc (64);
strcpy (lpOutputFileName, "mib.bin");
}
TreeInit (&lpMIBRoot);
lpMIBRoot = NewChildNode ("iso", 1);
if (!fNoLogo) {
printf ("Microsoft (R) SNMP MIB Compiler Version 1.00\n");
printf ("Copyright (c) Microsoft Corporation 1992-1996. All rights reserved.\n");
}
// OPENISSUE -- here we need to iterate over the files specified on
// OPENISSUE -- the command line and set stdin to point to them
// OPENISSUE -- calling yyparse for each one.
while (argc > 0) {
if ((argv[0][0] == '-') || (argv[0][0] == '/')) {
printf ("mibcc: switch specified after input file name.\n");
printf ("mibcc -? for usage\n");
exit (1);
} else {
uTotalFilesProcessed++;
lineno = 1; // start the lexical analysis off at the first line
mark_flex_to_init();
yyin = fopen (&argv[0][0], "r");
if (NULL == yyin) {
printf ("Unable to open '%s'.\n", &argv[0][0]);
break;
}
if (0 == yyparse ()) {
printf ("Parse of '%s' was successful. %i lines were parsed.\n", &argv[0][0], lineno);
} else {
printf ("Parse of '%s' was not successful.\n", &argv[0][0]);
fSuccess = FALSE;
break;
}
yyin = stdin;
}
--argc;
++argv;
}
printf ("mibcc: total files processed: %i.\n", uTotalFilesProcessed);
if (fSuccess) {
printf ("mibcc: writing compiled SNMP MIB.\n");
// Save MIB to disk
SnmpMgrMIB2Disk( lpMIBRoot, lpOutputFileName );
}
if (fTreePrint)
PrintTree(lpMIBRoot, 0);
TreeDeInit (&lpMIBRoot);
if (NULL != lpOutputFileName) {
free (lpOutputFileName);
}
if (fSuccess)
return (0); /* success */
else
return (1); /* failure */
}
//-------------------------------- END --------------------------------------