|
Packit |
022b05 |
/*
|
|
Packit |
022b05 |
* dump-fig.c --
|
|
Packit |
022b05 |
*
|
|
Packit |
022b05 |
* Operations to dump graphic representation of MIBs in fig format.
|
|
Packit |
022b05 |
*
|
|
Packit |
022b05 |
* Copyright (c) 1999 J. Schoenwaelder, Technical University of Braunschweig.
|
|
Packit |
022b05 |
*
|
|
Packit |
022b05 |
* See the file "COPYING" for information on usage and redistribution
|
|
Packit |
022b05 |
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
|
Packit |
022b05 |
*
|
|
Packit |
022b05 |
* @(#) $Id: dump-fig.c 1050 2000-11-29 16:34:45Z strauss $
|
|
Packit |
022b05 |
*/
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#include <config.h>
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#include <stdlib.h>
|
|
Packit |
022b05 |
#include <stdio.h>
|
|
Packit |
022b05 |
#include <string.h>
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#include "smi.h"
|
|
Packit |
022b05 |
#include "smidump.h"
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#define X_OFFSET 225
|
|
Packit |
022b05 |
#define Y_OFFSET 225
|
|
Packit |
022b05 |
#define X_INDENT 225
|
|
Packit |
022b05 |
#define Y_INDENT 225
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
static void setupPage()
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
printf("#FIG 3.2\n"
|
|
Packit |
022b05 |
"#\n"
|
|
Packit |
022b05 |
"# This FIG file has been generated by smidump " SMI_VERSION_STRING
|
|
Packit |
022b05 |
". Do not edit.\n#\n"
|
|
Packit |
022b05 |
"Landscape\n"
|
|
Packit |
022b05 |
"Center\n"
|
|
Packit |
022b05 |
"Metric\n"
|
|
Packit |
022b05 |
"A4\n"
|
|
Packit |
022b05 |
"50.00\n"
|
|
Packit |
022b05 |
"Single\n"
|
|
Packit |
022b05 |
"-1\n"
|
|
Packit |
022b05 |
"1200 2\n");
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
static void printString(int x, int y, int angle, char *string)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
int height = 180, length = 22;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
printf("4 0 0 0 0 18 12 0.0 4 %d %d %d %d %s\\001\n",
|
|
Packit |
022b05 |
height, length, x, y, string);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
static int isGroup(SmiNode *smiNode)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
SmiNode *childNode;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
for(childNode = smiGetFirstChildNode(smiNode);
|
|
Packit |
022b05 |
childNode;
|
|
Packit |
022b05 |
childNode = smiGetNextChildNode(childNode)) {
|
|
Packit |
022b05 |
if ((childNode->nodekind == SMI_NODEKIND_SCALAR
|
|
Packit |
022b05 |
|| childNode->nodekind == SMI_NODEKIND_TABLE)
|
|
Packit |
022b05 |
&& childNode->status == SMI_STATUS_CURRENT) {
|
|
Packit |
022b05 |
return 1;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
return 0;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
static void printGroup(int *x, int *y, SmiNode *smiNode)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
SmiNode *childNode;
|
|
Packit |
022b05 |
char string[4096];
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
*y += Y_OFFSET;
|
|
Packit |
022b05 |
printString(*x, *y, 0, smiNode->name);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
for(childNode = smiGetFirstChildNode(smiNode);
|
|
Packit |
022b05 |
childNode;
|
|
Packit |
022b05 |
childNode = smiGetNextChildNode(childNode)) {
|
|
Packit |
022b05 |
if (childNode->nodekind == SMI_NODEKIND_SCALAR
|
|
Packit |
022b05 |
|| childNode->nodekind == SMI_NODEKIND_COLUMN) {
|
|
Packit |
022b05 |
if (childNode->status != SMI_STATUS_OBSOLETE) {
|
|
Packit |
022b05 |
*y += Y_OFFSET;
|
|
Packit |
022b05 |
sprintf(string, "%s(%d)", childNode->name,
|
|
Packit |
022b05 |
childNode->oid[childNode->oidlen-1]);
|
|
Packit |
022b05 |
printString(*x + X_INDENT, *y, 0, string);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
*y += Y_OFFSET;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
static void printGroups(int *x, int *y, SmiModule *smiModule)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
SmiNode *smiNode;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
for(smiNode = smiGetFirstNode(smiModule, SMI_NODEKIND_ANY);
|
|
Packit |
022b05 |
smiNode;
|
|
Packit |
022b05 |
smiNode = smiGetNextNode(smiNode, SMI_NODEKIND_ANY)) {
|
|
Packit |
022b05 |
if (isGroup(smiNode)) {
|
|
Packit |
022b05 |
printGroup(x, y, smiNode);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
if (smiNode->nodekind == SMI_NODEKIND_ROW) {
|
|
Packit |
022b05 |
printGroup(x, y, smiNode);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
void dumpFigTree(Module *module)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
SmiModule *smiModule;
|
|
Packit |
022b05 |
int x, y;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
smiModule = module->smiModule;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
setupPage();
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
x = X_OFFSET, y = Y_OFFSET;
|
|
Packit |
022b05 |
printGroups(&x, &y, smiModule);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
static void printClass(int *x, int *y, SmiNode *smiNode)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
SmiNode *childNode;
|
|
Packit |
022b05 |
SmiType *smiType;
|
|
Packit |
022b05 |
char string[4096];
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
*y += Y_OFFSET;
|
|
Packit |
022b05 |
printString(*x, *y, 0, smiNode->name);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
for(childNode = smiGetFirstChildNode(smiNode);
|
|
Packit |
022b05 |
childNode;
|
|
Packit |
022b05 |
childNode = smiGetNextChildNode(childNode)) {
|
|
Packit |
022b05 |
if (childNode->nodekind == SMI_NODEKIND_SCALAR
|
|
Packit |
022b05 |
|| childNode->nodekind == SMI_NODEKIND_COLUMN) {
|
|
Packit |
022b05 |
if (childNode->status != SMI_STATUS_OBSOLETE) {
|
|
Packit |
022b05 |
smiType = smiGetNodeType(childNode);
|
|
Packit |
022b05 |
*y += Y_OFFSET;
|
|
Packit |
022b05 |
sprintf(string, "%s : %s", childNode->name, smiType->name);
|
|
Packit |
022b05 |
printString(*x + X_INDENT, *y, 0, string);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
*y += Y_OFFSET;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
static void printClasses(int *x, int *y, SmiModule *smiModule)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
SmiNode *smiNode;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
for(smiNode = smiGetFirstNode(smiModule, SMI_NODEKIND_ANY);
|
|
Packit |
022b05 |
smiNode;
|
|
Packit |
022b05 |
smiNode = smiGetNextNode(smiNode, SMI_NODEKIND_ANY)) {
|
|
Packit |
022b05 |
if (isGroup(smiNode)) {
|
|
Packit |
022b05 |
printClass(x, y, smiNode);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
if (smiNode->nodekind == SMI_NODEKIND_ROW) {
|
|
Packit |
022b05 |
printClass(x, y, smiNode);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
void dumpFigUml(Module *module)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
SmiModule *smiModule;
|
|
Packit |
022b05 |
int x, y;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
smiModule = module->smiModule;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
setupPage();
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
x = X_OFFSET, y = Y_OFFSET;
|
|
Packit |
022b05 |
printClasses(&x, &y, smiModule);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
void init_fig()
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
static SmidumpDriver driverTree = {
|
|
Packit |
022b05 |
"fig-tree",
|
|
Packit |
022b05 |
dumpFigTree,
|
|
Packit |
022b05 |
SMI_FLAG_NODESCR,
|
|
Packit |
022b05 |
SMIDUMP_DRIVER_CANT_UNITE | SMIDUMP_DRIVER_CANT_OUTPUT,
|
|
Packit |
022b05 |
"tree graphics in xfig fig format",
|
|
Packit |
022b05 |
NULL,
|
|
Packit |
022b05 |
NULL
|
|
Packit |
022b05 |
};
|
|
Packit |
022b05 |
static SmidumpDriver driverUml = {
|
|
Packit |
022b05 |
"fig-uml",
|
|
Packit |
022b05 |
dumpFigUml,
|
|
Packit |
022b05 |
SMI_FLAG_NODESCR,
|
|
Packit |
022b05 |
SMIDUMP_DRIVER_CANT_UNITE | SMIDUMP_DRIVER_CANT_OUTPUT,
|
|
Packit |
022b05 |
"UML graphics in xfig fig format",
|
|
Packit |
022b05 |
NULL,
|
|
Packit |
022b05 |
NULL
|
|
Packit |
022b05 |
};
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
smidumpRegisterDriver(&driverTree);
|
|
Packit |
022b05 |
smidumpRegisterDriver(&driverUml);
|
|
Packit |
022b05 |
}
|