Ejemplo n.º 1
0
static void dumpImports(int modc, SmiModule **modv, int flags, char *output)
{
    int  i;
    FILE *f = stdout;
    
    if (output) {
	f = fopen(output, "w");
	if (!f) {
	    fprintf(stderr, "smidump: cannot open %s for writing: ", output);
	    perror(NULL);
	    exit(1);
	}
    }

    for (i = 0; i < modc; i++) {
	if (! (flags & SMIDUMP_FLAG_SILENT)) {
	    fprintf(f, "# %s imports tree (generated by smidump "
		    SMI_VERSION_STRING ")\n\n", modv[i]->name);
	}

	fprintf(f, "%s\n", modv[i]->name);
	fprintImports(f, modv[i], "", NULL);
    }

    if (fflush(f) || ferror(f)) {
	perror("smidump: write error");
	exit(1);
    }

    if (output) {
	fclose(f);
    }
}
Ejemplo n.º 2
0
static int fprintImports(FILE *f, SmiModule *smiModule, char *prefix,
			 Imports *backtrace)
{
    SmiModule *smiModule2;
    Imports *imports, *imp;
    int     i, n, recurse = 0, done = 0;

    for (imp = backtrace; imp; imp = imp->nextPtr) {
	if (strcmp(imp->module, smiModule->name) == 0) {
	    fprintf(stderr, "%s  (recursion - aborted)\n", prefix);
	    return 0;
	}
    }

    imp = (Imports *) xmalloc(sizeof(Imports));
    imp->module = smiModule->name;
    imp->nextPtr = backtrace;
    backtrace = imp;

    imports = getImports(smiModule, &n);

    for (i = 0; i < n; i++) {
	char *newprefix;

	smiModule2 = smiGetModule(imports[i].module);
	recurse = (NULL == smiGetFirstImport(smiModule2));
	if (recurse) {
	    fprintf(f, "%s  |\n", prefix);
	}
	fprintf(f, "%s  +--%s [%d identifier%s]\n", prefix, imports[i].module, 
		imports[i].count, imports[i].count > 1 ? "s" : "");
	newprefix = xmalloc(strlen(prefix)+10);
	strcpy(newprefix, prefix);
	if (i == n-1) {
	    strcat(newprefix, "   ");
	} else {
	    strcat(newprefix, "  |");
	}
	done = fprintImports(f, smiModule2, newprefix, backtrace);
	if (! recurse && done) {
	    if (i == n-1) {
		fprintf(f, "%s   \n", prefix);
	    } else {
		fprintf(f, "%s  |\n", prefix);
	    }
	}
	xfree(newprefix);
    }

    freeImports(imports, n);
    xfree(backtrace);

    return recurse;
}
Ejemplo n.º 3
0
static void dumpXml(int modc, SmiModule **modv, int flags, char *output)
{
    int  i;
    FILE *f = stdout;

    if (output) {
	f = fopen(output, "w");
	if (!f) {
	    fprintf(stderr, "smidump: cannot open %s for writing: ", output);
	    perror(NULL);
	    exit(1);
	}
    }

    for (i = 0; i < modc; i++) {
	
	fprint(f, "<?xml version=\"1.0\"?>\n");
	if (!disabledoctype) {
	    fprint(f, "<!DOCTYPE smi SYSTEM \"http://www.ibr.cs.tu-bs.de/projects/nmrg/smi.dtd\">\n");
	}
	fprint(f, "\n");
	fprint(f, "<!-- This module has been generated by smidump "
	       SMI_VERSION_STRING ". Do not edit. -->\n");
	fprint(f, "\n");

	if (!disableschema) {
	    fprint(f, "<smi xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n");
	    fprint(f, "     xsi:noNamespaceSchemaLocation=\"http://www.ibr.cs.tu-bs.de/projects/nmrg/smi.xsd\">\n");
	} else {
	    fprint(f, "<smi>\n");
	}
	
	fprintModule(f, modv[i]);
	fprintImports(f, modv[i]);
	fprintTypedefs(f, modv[i]);
	fprintNodes(f, modv[i]);
	fprintNotifications(f, modv[i]);
	fprintGroups(f, modv[i]);
	fprintCompliances(f, modv[i]);
	
	fprint(f, "</smi>\n");
    }
    
    if (fflush(f) || ferror(f)) {
	perror("smidump: write error");
	exit(1);
    }

    if (output) {
	fclose(f);
    }
}
Ejemplo n.º 4
0
static void dumpSming(int modc, SmiModule **modv, int flags, char *output)
{
    SmiModule   *smiModule;
    SmiNode	*smiNode;
    int		i;
    FILE	*f = stdout;

    silent = (flags & SMIDUMP_FLAG_SILENT);

    if (output) {
	f = fopen(output, "w");
	if (!f) {
	    fprintf(stderr, "smidump: cannot open %s for writing: ", output);
	    perror(NULL);
	    exit(1);
	}
    }

    for (i = 0; i < modc; i++) {

	smiModule = modv[i];
    
	fprint(f, "//\n");
	fprint(f, "// This module has been generated by smidump "
	       SMI_VERSION_STRING ". Do not edit.\n");
	fprint(f, "//\n");
	fprint(f, "module %s ", smiModule->name);
	fprint(f, "{\n");
	fprint(f, "\n");
	
	fprintImports(f, smiModule);
	
	if (! silent) {
	    fprint(f, "//\n// MODULE META INFORMATION\n//\n\n");
	}
	fprintSegment(f, INDENT, "organization", INDENTVALUE);
	fprint(f, "\n");
	fprintMultilineString(f, INDENT, smiModule->organization);
	fprint(f, ";\n\n");
	fprintSegment(f, INDENT, "contact", INDENTVALUE);
	fprint(f, "\n");
	fprintMultilineString(f, INDENT, smiModule->contactinfo);
	fprint(f, ";\n\n");
	fprintSegment(f, INDENT, "description", INDENTVALUE);
	fprint(f, "\n");
	fprintMultilineString(f, INDENT, smiModule->description);
	fprint(f, ";\n\n");
	if (smiModule->reference) {
	    fprintSegment(f, INDENT, "reference", INDENTVALUE);
	    fprint(f, "\n");
	    fprintMultilineString(f, INDENT, smiModule->reference);
	    fprint(f, ";\n\n");
	}
	
	fprintRevisions(f, smiModule);
	
	smiNode = smiGetModuleIdentityNode(smiModule);
	if (smiNode) {
	    fprintSegment(f, INDENT, "identity", INDENTVALUE);
	    fprint(f, "%s;\n\n", smiNode->name);
	}
	
	fprintTypedefs(f, smiModule);
	fprintObjects(f, smiModule);
	fprintNotifications(f, smiModule);
	fprintGroups(f, smiModule);
	fprintCompliances(f, smiModule);
	
	fprint(f, "}; // end of module %s.\n", smiModule->name);
    }
    
    if (fflush(f) || ferror(f)) {
	perror("smidump: write error");
	exit(1);
    }

    if (output) {
	fclose(f);
    }
}