Blame tools/dump-fig.c

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