Blame tools/dump-corba.c

Packit Service 9ccfef
/*
Packit Service 9ccfef
 * dump-corba.c --
Packit Service 9ccfef
 *
Packit Service 9ccfef
 *      Operations to dump CORBA IDL and OID definitions. This is based
Packit Service 9ccfef
 *	on the JIDM Specification Translation developed by the JIDM task
Packit Service 9ccfef
 *	force, published as Open Group <URL:http://www.opengroup.org/>
Packit Service 9ccfef
 *	document C802 (ISBN 1-85912-256-6, January 2000).
Packit Service 9ccfef
 *
Packit Service 9ccfef
 * Copyright (c) 1999 Frank Strauss, Technical University of Braunschweig.
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-corba.c 8090 2008-04-18 12:56:29Z 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 <stdarg.h>
Packit Service 9ccfef
#include <string.h>
Packit Service 9ccfef
#include <ctype.h>
Packit Service 9ccfef
#include <time.h>
Packit Service 9ccfef
#ifdef HAVE_UNISTD_H
Packit Service 9ccfef
#include <unistd.h>
Packit Service 9ccfef
#endif
Packit Service 9ccfef
#ifdef HAVE_WIN_H
Packit Service 9ccfef
#include "win.h"
Packit Service 9ccfef
#endif
Packit Service 9ccfef
Packit Service 9ccfef
#include "smi.h"
Packit Service 9ccfef
#include "smidump.h"
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
#define  INDENT		4    /* indent factor */
Packit Service 9ccfef
#define  INDENTVALUE	20   /* column to start values, except multiline */
Packit Service 9ccfef
#define  INDENTTEXTS	13   /* column to start multiline texts */
Packit Service 9ccfef
#define  INDENTMAX	72   /* max column to fill, break lines otherwise */
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static int current_column = 0;
Packit Service 9ccfef
Packit Service 9ccfef
static int silent = 0;
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
/*
Packit Service 9ccfef
 * The following list of IDL keywords is taken from the CORBA
Packit Service 9ccfef
 * 2.3.1 IDL specification section 3.2.4 (October 1999).
Packit Service 9ccfef
 */
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static char *idlKeywords[] = {
Packit Service 9ccfef
    "abstract",
Packit Service 9ccfef
    "any",		"attribute",	"boolean",	"case",
Packit Service 9ccfef
    "char",		"const",	"context",	"custom",
Packit Service 9ccfef
    "default",		"double",	"enum",		"exception",
Packit Service 9ccfef
    "factory",		"FALSE",	"fixed",	"float",
Packit Service 9ccfef
    "in",		"inout",	"interface",	"long",
Packit Service 9ccfef
    "module",		"native",	"object",	"octet",
Packit Service 9ccfef
    "oneway",		"out",		"private",	"public",
Packit Service 9ccfef
    "raises",		"readonly",	"sequence",	"short",
Packit Service 9ccfef
    "string",		"struct",	"supports",	"switch",
Packit Service 9ccfef
    "TRUE",		"truncatable",	"typedef",	"unsigned",
Packit Service 9ccfef
    "union",		"valuebase",	"valuetype",	"void",
Packit Service 9ccfef
    "wchar",		"wstring",	NULL
Packit Service 9ccfef
};
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
/*
Packit Service 9ccfef
 * Structure used to build a list of imported types.
Packit Service 9ccfef
 */
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
typedef struct Import {
Packit Service 9ccfef
    char          *module;
Packit Service 9ccfef
    char          *name;
Packit Service 9ccfef
    struct Import *nextPtr;
Packit Service 9ccfef
} Import;
Packit Service 9ccfef
Packit Service 9ccfef
static Import *importList = NULL;
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
/*
Packit Service 9ccfef
 * Structure used to build dictionaries that translate names
Packit Service 9ccfef
 * into IDL names following the generic JIDM rules.
Packit Service 9ccfef
 */
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
typedef struct IdlEntry {
Packit Service 9ccfef
    char            *module;
Packit Service 9ccfef
    char            *name;
Packit Service 9ccfef
    char            *idlname;
Packit Service 9ccfef
    struct IdlEntry *nextPtr;
Packit Service 9ccfef
} IdlEntry;
Packit Service 9ccfef
Packit Service 9ccfef
static IdlEntry *idlModuleNameList = NULL;
Packit Service 9ccfef
static IdlEntry *idlNodeNameList = NULL;
Packit Service 9ccfef
static IdlEntry *idlTypeNameList = NULL;
Packit Service 9ccfef
static IdlEntry *idlVBTypeNameList = NULL;
Packit Service 9ccfef
Packit Service 9ccfef
static IdlEntry **idlNameLists[] = {
Packit Service 9ccfef
    &idlModuleNameList, &idlNodeNameList,
Packit Service 9ccfef
    &idlTypeNameList, &idlVBTypeNameList,
Packit Service 9ccfef
    NULL
Packit Service 9ccfef
};
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static FILE * createFile(char *name, char *suffix)
Packit Service 9ccfef
{
Packit Service 9ccfef
    char *fullname;
Packit Service 9ccfef
    FILE *f;
Packit Service 9ccfef
Packit Service 9ccfef
    fullname = xmalloc(strlen(name) + (suffix ? strlen(suffix) : 0) + 2);
Packit Service 9ccfef
    strcpy(fullname, name);
Packit Service 9ccfef
    if (suffix) {
Packit Service 9ccfef
        strcat(fullname, suffix);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    if (!access(fullname, R_OK)) {
Packit Service 9ccfef
        fprintf(stderr, "smidump: %s already exists\n", fullname);
Packit Service 9ccfef
        xfree(fullname);
Packit Service 9ccfef
        return NULL;
Packit Service 9ccfef
    }
Packit Service 9ccfef
    f = fopen(fullname, "w");
Packit Service 9ccfef
    if (!f) {
Packit Service 9ccfef
        fprintf(stderr, "smidump: cannot open %s for writing: ", fullname);
Packit Service 9ccfef
        perror(NULL);
Packit Service 9ccfef
        xfree(fullname);
Packit Service 9ccfef
        exit(1);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    xfree(fullname);
Packit Service 9ccfef
    return f;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static char* dictFindName(IdlEntry *list, char *module, char* name)
Packit Service 9ccfef
{
Packit Service 9ccfef
    IdlEntry *p;
Packit Service 9ccfef
Packit Service 9ccfef
    for (p = list; p; p = p->nextPtr) {
Packit Service 9ccfef
	if (! strcasecmp(p->module, module)
Packit Service 9ccfef
	    && ((! p->name && ! name) || ! strcasecmp(p->name, name))) {
Packit Service 9ccfef
	    return p->idlname;
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    return NULL;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static char* dictAddName(IdlEntry **listPtr, char *module, char *name)
Packit Service 9ccfef
{
Packit Service 9ccfef
    IdlEntry *p;
Packit Service 9ccfef
    char *s, *idl;
Packit Service 9ccfef
    int i;
Packit Service 9ccfef
Packit Service 9ccfef
    /*
Packit Service 9ccfef
     * Create a new IDL identifier by translating hyphens
Packit Service 9ccfef
     * to underscores.
Packit Service 9ccfef
     */
Packit Service 9ccfef
Packit Service 9ccfef
    s = name ? name : module;
Packit Service 9ccfef
    idl = xmalloc(strlen(s) + 1);
Packit Service 9ccfef
    for (i = 0; s[i]; i++) {
Packit Service 9ccfef
	idl[i] = (s[i] == '-') ? '_' : s[i];
Packit Service 9ccfef
    }
Packit Service 9ccfef
    idl[i] = 0;
Packit Service 9ccfef
Packit Service 9ccfef
    /*
Packit Service 9ccfef
     * Check for any collisions with IDL keywords or previously
Packit Service 9ccfef
     * created IDL identifiers.
Packit Service 9ccfef
     */
Packit Service 9ccfef
Packit Service 9ccfef
    for (i = 0; idlKeywords[i]; i++) {
Packit Service 9ccfef
	if (! strcasecmp(idlKeywords[i], idl)) {
Packit Service 9ccfef
	    fprintf(stderr, "smidump: "
Packit Service 9ccfef
		    "`%s' (%s%s%s) collides with IDL keyword `%s'\n",
Packit Service 9ccfef
		    idl, module, name ? "::" : "", name ? name : "",
Packit Service 9ccfef
		    idlKeywords[i]);
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    for (i = 0; idlNameLists[i]; i++) {
Packit Service 9ccfef
	IdlEntry *list = *(idlNameLists[i]);
Packit Service 9ccfef
	for (p = list; p; p = p->nextPtr) {
Packit Service 9ccfef
	    if (! strcasecmp(p->idlname, idl)) {
Packit Service 9ccfef
		fprintf(stderr, "smidump: "
Packit Service 9ccfef
			"`%s' (%s%s%s) collides with `%s' (%s%s%s)\n",
Packit Service 9ccfef
			idl, module,
Packit Service 9ccfef
			name ? "::" : "", name ? name : "",
Packit Service 9ccfef
			p->idlname, p->module,
Packit Service 9ccfef
			p->name ? "::" : "", p->name ? p->name : "");
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
    
Packit Service 9ccfef
    /*
Packit Service 9ccfef
     * Safe the translated identifier in the dictionary.
Packit Service 9ccfef
     */
Packit Service 9ccfef
    
Packit Service 9ccfef
    p = xmalloc(sizeof(IdlEntry));
Packit Service 9ccfef
    p->module = xstrdup(module);
Packit Service 9ccfef
    p->name = name ? xstrdup(name) : NULL;
Packit Service 9ccfef
    p->idlname = idl;
Packit Service 9ccfef
    p->nextPtr = *listPtr;
Packit Service 9ccfef
    *listPtr = p;
Packit Service 9ccfef
Packit Service 9ccfef
    return idl;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void dictFree(IdlEntry **list)
Packit Service 9ccfef
{
Packit Service 9ccfef
    IdlEntry *p, *q;
Packit Service 9ccfef
Packit Service 9ccfef
    for (p = *list; p; ) {
Packit Service 9ccfef
	q = p;
Packit Service 9ccfef
	p = p->nextPtr;
Packit Service 9ccfef
	xfree(q->module);
Packit Service 9ccfef
	if (q->name) xfree(q->name);
Packit Service 9ccfef
	xfree(q->idlname);
Packit Service 9ccfef
	xfree(q);
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    *list = NULL;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static char* getIdlModuleName(char *module)
Packit Service 9ccfef
{
Packit Service 9ccfef
    char *s;
Packit Service 9ccfef
Packit Service 9ccfef
    s = dictFindName(idlModuleNameList, module, NULL);
Packit Service 9ccfef
    if (! s) {
Packit Service 9ccfef
	s = dictAddName(&idlModuleNameList, module, NULL);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    return s;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static char *getIdlNodeName(char *module, char *name)
Packit Service 9ccfef
{
Packit Service 9ccfef
    char *s;
Packit Service 9ccfef
    s = dictFindName(idlNodeNameList, module, name);
Packit Service 9ccfef
    if (! s) {
Packit Service 9ccfef
	s = dictAddName(&idlNodeNameList, module, name);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    return s;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static char* getIdlTypeName(char *module, char *name)
Packit Service 9ccfef
{
Packit Service 9ccfef
    char *s, *type_name;
Packit Service 9ccfef
Packit Service 9ccfef
    type_name = xmalloc(strlen(name) + 10);
Packit Service 9ccfef
    sprintf(type_name, "%sType", name);
Packit Service 9ccfef
    type_name[0] = toupper((int) type_name[0]);
Packit Service 9ccfef
Packit Service 9ccfef
    s = dictFindName(idlTypeNameList, module, type_name);
Packit Service 9ccfef
    if (! s) {
Packit Service 9ccfef
	s = dictAddName(&idlTypeNameList, module, type_name);
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    xfree(type_name);
Packit Service 9ccfef
    return s;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static char* getIdlVBTypeName(char *module, char *name, int *isnew)
Packit Service 9ccfef
{
Packit Service 9ccfef
    char *s, *vbTypeName;
Packit Service 9ccfef
Packit Service 9ccfef
    vbTypeName = xmalloc(strlen(name) + 10);
Packit Service 9ccfef
    sprintf(vbTypeName, "%sVBType", name);
Packit Service 9ccfef
    vbTypeName[0] = toupper((int) vbTypeName[0]);
Packit Service 9ccfef
Packit Service 9ccfef
    if (isnew) {
Packit Service 9ccfef
	*isnew = 0;
Packit Service 9ccfef
    }
Packit Service 9ccfef
    s = dictFindName(idlVBTypeNameList, module, vbTypeName);
Packit Service 9ccfef
    if (! s) {
Packit Service 9ccfef
	if (isnew) {
Packit Service 9ccfef
	    *isnew = 1;
Packit Service 9ccfef
	}
Packit Service 9ccfef
	s = dictAddName(&idlVBTypeNameList, module, vbTypeName);
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    xfree(vbTypeName);
Packit Service 9ccfef
    return s;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static int current(SmiStatus status)
Packit Service 9ccfef
{
Packit Service 9ccfef
    switch (status) {
Packit Service 9ccfef
    case SMI_STATUS_CURRENT:
Packit Service 9ccfef
    case SMI_STATUS_UNKNOWN:
Packit Service 9ccfef
    case SMI_STATUS_MANDATORY:
Packit Service 9ccfef
    case SMI_STATUS_OPTIONAL:
Packit Service 9ccfef
	return 1;
Packit Service 9ccfef
    default:
Packit Service 9ccfef
	return 0;
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static char *getTimeString(time_t t)
Packit Service 9ccfef
{
Packit Service 9ccfef
    static char   *s = NULL;
Packit Service 9ccfef
    struct tm	  *tm;
Packit Service 9ccfef
Packit Service 9ccfef
    if (s) xfree(s);
Packit Service 9ccfef
Packit Service 9ccfef
    tm = gmtime(&t);
Packit Service 9ccfef
    smiAsprintf(&s, "%04d%02d%02d%02d%02dZ",
Packit Service 9ccfef
		tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
Packit Service 9ccfef
		tm->tm_hour, tm->tm_min);
Packit Service 9ccfef
    return s;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static char *getAccessString(SmiAccess access, int create)
Packit Service 9ccfef
{
Packit Service 9ccfef
    if (create && (access == SMI_ACCESS_READ_WRITE)) {
Packit Service 9ccfef
	return "read-create";
Packit Service 9ccfef
    } else {
Packit Service 9ccfef
	return
Packit Service 9ccfef
	    (access == SMI_ACCESS_NOT_ACCESSIBLE) ? "not-accessible" :
Packit Service 9ccfef
	    (access == SMI_ACCESS_NOTIFY)         ? "accessible-for-notify" :
Packit Service 9ccfef
	    (access == SMI_ACCESS_READ_ONLY)      ? "read-only" :
Packit Service 9ccfef
	    (access == SMI_ACCESS_READ_WRITE)     ? "read-write" :
Packit Service 9ccfef
					            "<unknown>";
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static char *getBaseTypeString(SmiBasetype basetype)
Packit Service 9ccfef
{
Packit Service 9ccfef
    switch(basetype) {
Packit Service 9ccfef
    case SMI_BASETYPE_UNKNOWN:
Packit Service 9ccfef
	return "ASN1_Null";
Packit Service 9ccfef
    case SMI_BASETYPE_POINTER:
Packit Service 9ccfef
	return "ASN1_Null";
Packit Service 9ccfef
    case SMI_BASETYPE_INTEGER32:
Packit Service 9ccfef
    case SMI_BASETYPE_ENUM:
Packit Service 9ccfef
	return "ASN1_Integer";
Packit Service 9ccfef
    case SMI_BASETYPE_OCTETSTRING:
Packit Service 9ccfef
    case SMI_BASETYPE_BITS:
Packit Service 9ccfef
	return "ASN1_OctetString";
Packit Service 9ccfef
    case SMI_BASETYPE_OBJECTIDENTIFIER:
Packit Service 9ccfef
	return "ASN1_ObjectIdentifier";
Packit Service 9ccfef
    case SMI_BASETYPE_UNSIGNED32:
Packit Service 9ccfef
	return "ASN1_Unsigned";
Packit Service 9ccfef
    case SMI_BASETYPE_INTEGER64:
Packit Service 9ccfef
	return "ASN1_Integer64";
Packit Service 9ccfef
    case SMI_BASETYPE_UNSIGNED64:
Packit Service 9ccfef
	return "ASN1_Unsigned64";
Packit Service 9ccfef
    case SMI_BASETYPE_FLOAT32:
Packit Service 9ccfef
    case SMI_BASETYPE_FLOAT64:
Packit Service 9ccfef
    case SMI_BASETYPE_FLOAT128:
Packit Service 9ccfef
	return "ASN1_Real";
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    return NULL;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static char *getIdlAnyTypeName(SmiNode *smiNode, SmiType *smiType)
Packit Service 9ccfef
{
Packit Service 9ccfef
    SmiModule *smiModule;
Packit Service 9ccfef
    char *typeName;
Packit Service 9ccfef
Packit Service 9ccfef
    if (! smiType->name) {
Packit Service 9ccfef
	smiModule = smiGetNodeModule(smiNode);
Packit Service 9ccfef
	if (smiModule && strlen(smiModule->name)) {
Packit Service 9ccfef
	    typeName = getIdlTypeName(smiModule->name, smiNode->name);
Packit Service 9ccfef
	} else {
Packit Service 9ccfef
	    typeName = getBaseTypeString(smiType->basetype);
Packit Service 9ccfef
	}
Packit Service 9ccfef
    } else {
Packit Service 9ccfef
	smiModule = smiGetTypeModule(smiType);
Packit Service 9ccfef
	if (smiModule && strlen(smiModule->name)) {
Packit Service 9ccfef
	    typeName = getIdlTypeName(smiModule->name, smiType->name);
Packit Service 9ccfef
	} else {
Packit Service 9ccfef
	    typeName = getBaseTypeString(smiType->basetype);
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    return typeName;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static char *getValueString(SmiValue *valuePtr, SmiType *typePtr)
Packit Service 9ccfef
{
Packit Service 9ccfef
    static char    s[1024];
Packit Service 9ccfef
    char           ss[9];
Packit Service 9ccfef
    int		   n;
Packit Service 9ccfef
    unsigned int   i;
Packit Service 9ccfef
    SmiNamedNumber *nn;
Packit Service 9ccfef
    SmiNode        *nodePtr;
Packit Service 9ccfef
    
Packit Service 9ccfef
    s[0] = 0;
Packit Service 9ccfef
    
Packit Service 9ccfef
    switch (valuePtr->basetype) {
Packit Service 9ccfef
    case SMI_BASETYPE_UNSIGNED32:
Packit Service 9ccfef
	sprintf(s, "%lu", valuePtr->value.unsigned32);
Packit Service 9ccfef
	break;
Packit Service 9ccfef
    case SMI_BASETYPE_INTEGER32:
Packit Service 9ccfef
	sprintf(s, "%ld", valuePtr->value.integer32);
Packit Service 9ccfef
	break;
Packit Service 9ccfef
    case SMI_BASETYPE_UNSIGNED64:
Packit Service 9ccfef
	sprintf(s, UINT64_FORMAT, valuePtr->value.unsigned64);
Packit Service 9ccfef
	break;
Packit Service 9ccfef
    case SMI_BASETYPE_INTEGER64:
Packit Service 9ccfef
	sprintf(s, INT64_FORMAT, valuePtr->value.integer64);
Packit Service 9ccfef
	break;
Packit Service 9ccfef
    case SMI_BASETYPE_FLOAT32:
Packit Service 9ccfef
    case SMI_BASETYPE_FLOAT64:
Packit Service 9ccfef
    case SMI_BASETYPE_FLOAT128:
Packit Service 9ccfef
	break;
Packit Service 9ccfef
    case SMI_BASETYPE_ENUM:
Packit Service 9ccfef
	for (nn = smiGetFirstNamedNumber(typePtr); nn;
Packit Service 9ccfef
	     nn = smiGetNextNamedNumber(nn)) {
Packit Service 9ccfef
	    if (nn->value.value.unsigned32 == valuePtr->value.unsigned32)
Packit Service 9ccfef
		break;
Packit Service 9ccfef
	}
Packit Service 9ccfef
	if (nn) {
Packit Service 9ccfef
	    sprintf(s, "%s", nn->name);
Packit Service 9ccfef
	} else {
Packit Service 9ccfef
	    sprintf(s, "%ld", valuePtr->value.integer32);
Packit Service 9ccfef
	}
Packit Service 9ccfef
	break;
Packit Service 9ccfef
    case SMI_BASETYPE_OCTETSTRING:
Packit Service 9ccfef
	for (i = 0; i < valuePtr->len; i++) {
Packit Service 9ccfef
	    if (!isprint((int)valuePtr->value.ptr[i])) break;
Packit Service 9ccfef
	}
Packit Service 9ccfef
	if (i == valuePtr->len) {
Packit Service 9ccfef
	    sprintf(s, "\"%s\"", valuePtr->value.ptr);
Packit Service 9ccfef
	} else {
Packit Service 9ccfef
            sprintf(s, "'%*s'H", 2 * valuePtr->len, "");
Packit Service 9ccfef
            for (i=0; i < valuePtr->len; i++) {
Packit Service 9ccfef
                sprintf(ss, "%02x", valuePtr->value.ptr[i]);
Packit Service 9ccfef
                strncpy(&s[1+2*i], ss, 2);
Packit Service 9ccfef
            }
Packit Service 9ccfef
	}
Packit Service 9ccfef
	break;
Packit Service 9ccfef
    case SMI_BASETYPE_BITS:
Packit Service 9ccfef
	sprintf(s, "{");
Packit Service 9ccfef
	for (i = 0, n = 0; i < valuePtr->len * 8; i++) {
Packit Service 9ccfef
	    if (valuePtr->value.ptr[i/8] & (1 << (7-(i%8)))) {
Packit Service 9ccfef
		for (nn = smiGetFirstNamedNumber(typePtr); nn;
Packit Service 9ccfef
		     nn = smiGetNextNamedNumber(nn)) {
Packit Service 9ccfef
		    if (nn->value.value.unsigned32 == i)
Packit Service 9ccfef
			break;
Packit Service 9ccfef
		}
Packit Service 9ccfef
		if (nn) {
Packit Service 9ccfef
		    if (n)
Packit Service 9ccfef
			sprintf(&s[strlen(s)], ", ");
Packit Service 9ccfef
		    n++;
Packit Service 9ccfef
		    sprintf(&s[strlen(s)], "%s", nn->name);
Packit Service 9ccfef
		}
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	}
Packit Service 9ccfef
	sprintf(&s[strlen(s)], "}");
Packit Service 9ccfef
	break;
Packit Service 9ccfef
    case SMI_BASETYPE_UNKNOWN:
Packit Service 9ccfef
	break;
Packit Service 9ccfef
    case SMI_BASETYPE_POINTER:
Packit Service 9ccfef
	break;
Packit Service 9ccfef
    case SMI_BASETYPE_OBJECTIDENTIFIER:
Packit Service 9ccfef
	/* TODO */
Packit Service 9ccfef
	nodePtr = smiGetNodeByOID(valuePtr->len, valuePtr->value.oid);
Packit Service 9ccfef
	if (nodePtr) {
Packit Service 9ccfef
	    sprintf(s, "%s", nodePtr->name);
Packit Service 9ccfef
	} else {
Packit Service 9ccfef
	    strcpy(s, "{");
Packit Service 9ccfef
	    for (i=0; i < valuePtr->len; i++) {
Packit Service 9ccfef
		if (i) strcat(s, " ");
Packit Service 9ccfef
		sprintf(&s[strlen(s)], "%u", valuePtr->value.oid[i]);
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	    strcat(s, "}");
Packit Service 9ccfef
	}
Packit Service 9ccfef
	break;
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    return s;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static Import* addImport(char *module, char *name)
Packit Service 9ccfef
{
Packit Service 9ccfef
    Import **import, *newImport;
Packit Service 9ccfef
    
Packit Service 9ccfef
    for (import = &importList; *import; import = &(*import)->nextPtr) {
Packit Service 9ccfef
	int c = strcmp((*import)->module, module);
Packit Service 9ccfef
	if (c < 0) continue;
Packit Service 9ccfef
	if (c == 0) {
Packit Service 9ccfef
	    int d = strcmp((*import)->name, name);
Packit Service 9ccfef
	    if (d < 0) continue;
Packit Service 9ccfef
	    if (d == 0) return *import;
Packit Service 9ccfef
	    if (d > 0) break;
Packit Service 9ccfef
	}
Packit Service 9ccfef
	if (c > 0) break;
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    newImport = xmalloc(sizeof(Import));
Packit Service 9ccfef
    newImport->module = module;
Packit Service 9ccfef
    newImport->name = name;
Packit Service 9ccfef
    newImport->nextPtr = *import;
Packit Service 9ccfef
    *import = newImport;
Packit Service 9ccfef
	
Packit Service 9ccfef
    return *import;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void createImportList(SmiModule *smiModule)
Packit Service 9ccfef
{
Packit Service 9ccfef
    SmiNode     *smiNode;
Packit Service 9ccfef
    SmiType     *smiType;
Packit Service 9ccfef
    SmiModule   *smiTypeModule;
Packit Service 9ccfef
    SmiElement  *smiElement;
Packit Service 9ccfef
    SmiNode     *smiNodeIndex;
Packit Service 9ccfef
    SmiNodekind kind = SMI_NODEKIND_SCALAR
Packit Service 9ccfef
	 | SMI_NODEKIND_COLUMN | SMI_NODEKIND_ROW;
Packit Service 9ccfef
    
Packit Service 9ccfef
    for (smiNode = smiGetFirstNode(smiModule, kind);
Packit Service 9ccfef
	 smiNode;
Packit Service 9ccfef
	 smiNode = smiGetNextNode(smiNode, kind)) {
Packit Service 9ccfef
Packit Service 9ccfef
	 switch (smiNode->nodekind) {
Packit Service 9ccfef
	 case SMI_NODEKIND_ROW:
Packit Service 9ccfef
	      for (smiElement = smiGetFirstElement(smiNode); smiElement;
Packit Service 9ccfef
		   smiElement = smiGetNextElement(smiElement)) {
Packit Service 9ccfef
		   smiNodeIndex = smiGetElementNode(smiElement);
Packit Service 9ccfef
		  smiType = smiGetNodeType(smiNodeIndex);
Packit Service 9ccfef
		  if (smiType) {
Packit Service 9ccfef
		      smiTypeModule = smiGetTypeModule(smiType);
Packit Service 9ccfef
		      if (smiTypeModule &&
Packit Service 9ccfef
			  strcmp(smiTypeModule->name, smiModule->name)) {
Packit Service 9ccfef
			  if (strlen(smiTypeModule->name)) {
Packit Service 9ccfef
			      addImport(smiTypeModule->name, smiType->name);
Packit Service 9ccfef
			  }
Packit Service 9ccfef
		      }
Packit Service 9ccfef
		      if (smiType->basetype == SMI_BASETYPE_INTEGER32) {
Packit Service 9ccfef
			   addImport("SNMPv2-SMI", "Integer32");
Packit Service 9ccfef
		      }
Packit Service 9ccfef
		  }
Packit Service 9ccfef
	      }
Packit Service 9ccfef
	      break;
Packit Service 9ccfef
	 case SMI_NODEKIND_SCALAR:
Packit Service 9ccfef
	 case SMI_NODEKIND_COLUMN:
Packit Service 9ccfef
	      smiType = smiGetNodeType(smiNode);
Packit Service 9ccfef
	      if (smiType) {
Packit Service 9ccfef
		   smiTypeModule = smiGetTypeModule(smiType);
Packit Service 9ccfef
		   if (smiTypeModule &&
Packit Service 9ccfef
		       strcmp(smiTypeModule->name, smiModule->name)) {
Packit Service 9ccfef
			if (strlen(smiTypeModule->name)) {
Packit Service 9ccfef
			     addImport(smiTypeModule->name, smiType->name);
Packit Service 9ccfef
			}
Packit Service 9ccfef
		   }
Packit Service 9ccfef
		   if (smiType->basetype == SMI_BASETYPE_INTEGER32) {
Packit Service 9ccfef
			addImport("SNMPv2-SMI", "Integer32");
Packit Service 9ccfef
		   }
Packit Service 9ccfef
	      }
Packit Service 9ccfef
	      break;
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void freeImportList(void)
Packit Service 9ccfef
{
Packit Service 9ccfef
    Import *import, *freeme;
Packit Service 9ccfef
Packit Service 9ccfef
    for (import = importList; import; ) {
Packit Service 9ccfef
	freeme = import;
Packit Service 9ccfef
	import = import->nextPtr;
Packit Service 9ccfef
	xfree(freeme);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    importList = NULL;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void fprint(FILE *f, char *fmt, ...)
Packit Service 9ccfef
{
Packit Service 9ccfef
    va_list ap;
Packit Service 9ccfef
    char    *s;
Packit Service 9ccfef
    char    *p;
Packit Service 9ccfef
    
Packit Service 9ccfef
    va_start(ap, fmt);
Packit Service 9ccfef
    current_column += smiVasprintf(&s, fmt, ap);
Packit Service 9ccfef
    va_end(ap);
Packit Service 9ccfef
    fputs(s, f);
Packit Service 9ccfef
    if ((p = strrchr(s, '\n'))) {
Packit Service 9ccfef
        current_column = strlen(p) - 1;
Packit Service 9ccfef
    }
Packit Service 9ccfef
    free(s);
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void fprintSegment(FILE *f, int column, char *string, int length)
Packit Service 9ccfef
{
Packit Service 9ccfef
    fprint(f, "%*c%s", column, ' ', string);
Packit Service 9ccfef
    if (length) {
Packit Service 9ccfef
	fprint(f, "%*c", length - strlen(string) - column, ' ');
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void fprintMultilineString(FILE *f, const char *s)
Packit Service 9ccfef
{
Packit Service 9ccfef
    int i, len;
Packit Service 9ccfef
    
Packit Service 9ccfef
    fprintSegment(f, INDENTTEXTS - 1, "\"", 0);
Packit Service 9ccfef
    if (s) {
Packit Service 9ccfef
	len = strlen(s);
Packit Service 9ccfef
	for (i=0; i < len; i++) {
Packit Service 9ccfef
	    putc(s[i], f);
Packit Service 9ccfef
	    current_column++;
Packit Service 9ccfef
	    if (s[i] == '\n') {
Packit Service 9ccfef
		current_column = 0;
Packit Service 9ccfef
		fprintSegment(f, INDENTTEXTS, "", 0);
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
    putc('\"', f);
Packit Service 9ccfef
    current_column++;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void fprintMultiline(FILE *f, const char *s)
Packit Service 9ccfef
{
Packit Service 9ccfef
    int i, len;
Packit Service 9ccfef
    
Packit Service 9ccfef
    fprintSegment(f, INDENTTEXTS, "", 0);
Packit Service 9ccfef
    if (s) {
Packit Service 9ccfef
	len = strlen(s);
Packit Service 9ccfef
	for (i=0; i < len; i++) {
Packit Service 9ccfef
	    putc(s[i], f);
Packit Service 9ccfef
	    current_column++;
Packit Service 9ccfef
	    if (s[i] == '\n') {
Packit Service 9ccfef
		current_column = 0;
Packit Service 9ccfef
		fprintSegment(f, INDENTTEXTS, "", 0);
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
    putc('\n', f);
Packit Service 9ccfef
    current_column++;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static char *
Packit Service 9ccfef
getStringTime(time_t t)
Packit Service 9ccfef
{
Packit Service 9ccfef
    static char   s[27];
Packit Service 9ccfef
    struct tm	  *tm;
Packit Service 9ccfef
Packit Service 9ccfef
    tm = gmtime(&t);
Packit Service 9ccfef
    sprintf(s, "%04d-%02d-%02d %02d:%02d",
Packit Service 9ccfef
	    tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
Packit Service 9ccfef
	    tm->tm_hour, tm->tm_min);
Packit Service 9ccfef
    return s;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void
Packit Service 9ccfef
fprintCommentString(FILE *f, char *s)
Packit Service 9ccfef
{
Packit Service 9ccfef
    int i, len;
Packit Service 9ccfef
Packit Service 9ccfef
    if (s) {
Packit Service 9ccfef
	fprintf(f, " *   ");
Packit Service 9ccfef
	len = strlen(s);
Packit Service 9ccfef
	for (i = 0; i < len; i++) {
Packit Service 9ccfef
	    fputc(s[i], f);
Packit Service 9ccfef
	    if (s[i] == '\n') {
Packit Service 9ccfef
		fprintf(f, " *   ");
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	}
Packit Service 9ccfef
	fputc('\n', f);
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static char* translate(char *s)
Packit Service 9ccfef
{
Packit Service 9ccfef
    int i;
Packit Service 9ccfef
    
Packit Service 9ccfef
    s = xstrdup(s);
Packit Service 9ccfef
    for (i = 0; s[i]; i++) {
Packit Service 9ccfef
	if (s[i] == '-') s[i] = '_';
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    return s;
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
	    && current(childNode->status)) {
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 int isCreatable(SmiNode *smiNode)
Packit Service 9ccfef
{
Packit Service 9ccfef
    SmiNode *childNode;
Packit Service 9ccfef
    
Packit Service 9ccfef
    if ((isGroup(smiNode) || smiNode->nodekind == SMI_NODEKIND_ROW)
Packit Service 9ccfef
	&& current(smiNode->status)) {
Packit Service 9ccfef
Packit Service 9ccfef
	for (childNode = smiGetFirstChildNode(smiNode);
Packit Service 9ccfef
	     childNode;
Packit Service 9ccfef
	     childNode = smiGetNextChildNode(childNode)) {
Packit Service 9ccfef
	    
Packit Service 9ccfef
	    if ((childNode->nodekind == SMI_NODEKIND_SCALAR
Packit Service 9ccfef
		 || childNode->nodekind == SMI_NODEKIND_COLUMN)
Packit Service 9ccfef
		&& current(childNode->status)
Packit Service 9ccfef
		&& childNode->access == SMI_ACCESS_READ_WRITE) {
Packit Service 9ccfef
		return 1;
Packit Service 9ccfef
	    }
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 fprintDescription(FILE *f, SmiNode *smiNode, int indent)
Packit Service 9ccfef
{
Packit Service 9ccfef
    fprint(f, "\n");
Packit Service 9ccfef
    fprintSegment(f, indent, "/*\n", 0);
Packit Service 9ccfef
    if (smiNode->description) {
Packit Service 9ccfef
	fprintMultiline(f, smiNode->description);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    if (smiNode->reference) {
Packit Service 9ccfef
	fprintSegment(f, indent, "REFERENCE:", 0);
Packit Service 9ccfef
	fprint(f, "\n");
Packit Service 9ccfef
	fprintMultilineString(f, smiNode->reference);
Packit Service 9ccfef
	fprint(f, "\n\n");
Packit Service 9ccfef
    }
Packit Service 9ccfef
    if (smiNode->units) {
Packit Service 9ccfef
	fprintSegment(f, indent, "UNITS:", 0);
Packit Service 9ccfef
	fprint(f, "\n");
Packit Service 9ccfef
	fprintMultilineString(f, smiNode->units);
Packit Service 9ccfef
	fprint(f, "\n\n");
Packit Service 9ccfef
    }
Packit Service 9ccfef
    fprintSegment(f, indent, "*/\n", 0);
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void fprintIndex(FILE *f, SmiNode *indexNode)
Packit Service 9ccfef
{
Packit Service 9ccfef
    SmiElement *smiElement;
Packit Service 9ccfef
    int        j;
Packit Service 9ccfef
Packit Service 9ccfef
    for (j = 0, smiElement = smiGetFirstElement(indexNode);
Packit Service 9ccfef
	 smiElement;
Packit Service 9ccfef
	 j++, smiElement = smiGetNextElement(smiElement)) {
Packit Service 9ccfef
	if (j) {
Packit Service 9ccfef
	    fprint(f, " ");
Packit Service 9ccfef
	}
Packit Service 9ccfef
	fprint(f, smiGetElementNode(smiElement)->name);
Packit Service 9ccfef
	/* TODO: non-local name if non-local */
Packit Service 9ccfef
    } /* TODO: empty? -> print error */
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void fprintIncludes(FILE *f, SmiModule *smiModule)
Packit Service 9ccfef
{
Packit Service 9ccfef
    Import    *import;
Packit Service 9ccfef
    char      *lastModulename = NULL;
Packit Service 9ccfef
    
Packit Service 9ccfef
    fprint(f, "#include <ASN1Types.idl>\n");
Packit Service 9ccfef
    fprint(f, "#include <SNMPMgmt.idl>\n");
Packit Service 9ccfef
Packit Service 9ccfef
    for (import = importList; import; import = import->nextPtr) {
Packit Service 9ccfef
	if (!lastModulename
Packit Service 9ccfef
	    || strcmp(lastModulename, import->module)) {
Packit Service 9ccfef
	    fprint(f, "#include <%s.idl>\n",
Packit Service 9ccfef
		  getIdlModuleName(import->module));
Packit Service 9ccfef
	    lastModulename = import->module;
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    fprint(f, "\n");
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void fprintImportedTypedefs(FILE *f, SmiModule *smiModule)
Packit Service 9ccfef
{
Packit Service 9ccfef
    Import    *import;
Packit Service 9ccfef
    int	      cnt = 0;
Packit Service 9ccfef
    char      *idlTypeName;
Packit Service 9ccfef
Packit Service 9ccfef
    for (import = importList; import; import = import->nextPtr) {
Packit Service 9ccfef
	cnt++;
Packit Service 9ccfef
	idlTypeName = getIdlTypeName(import->module, import->name);
Packit Service 9ccfef
	fprintSegment(f, INDENT, "typedef ", 0);
Packit Service 9ccfef
	fprint(f, "%s::%s %s;\n",
Packit Service 9ccfef
	      getIdlModuleName(import->module), idlTypeName, idlTypeName);
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    if (cnt) {
Packit Service 9ccfef
	fprint(f, "\n");
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void fprintModule(FILE *f, SmiModule *smiModule)
Packit Service 9ccfef
{
Packit Service 9ccfef
    SmiRevision  *smiRevision;
Packit Service 9ccfef
    SmiNode      *smiNode;
Packit Service 9ccfef
    char         *idlModuleName;
Packit Service 9ccfef
Packit Service 9ccfef
    smiNode = smiGetModuleIdentityNode(smiModule);
Packit Service 9ccfef
Packit Service 9ccfef
    if (smiNode) {
Packit Service 9ccfef
Packit Service 9ccfef
	idlModuleName = getIdlModuleName(smiModule->name);
Packit Service 9ccfef
	fprintSegment(f, INDENT, "const ", 0);
Packit Service 9ccfef
	fprint(f, "string moduleIdentity = \"%s\";\n", smiNode->name);
Packit Service 9ccfef
	fprintSegment(f, INDENT, "const ", 0);
Packit Service 9ccfef
	fprint(f, "ASN1_ObjectIdentifier %s = \"::%s::%s\";\n\n",
Packit Service 9ccfef
	      getIdlModuleName(smiNode->name),
Packit Service 9ccfef
	      idlModuleName, smiNode->name);
Packit Service 9ccfef
	if (! silent) {
Packit Service 9ccfef
	    fprintSegment(f, INDENT, "/*\n", 0);
Packit Service 9ccfef
	    if (smiModule->description) {
Packit Service 9ccfef
		fprintMultiline(f, smiModule->description);
Packit Service 9ccfef
		fprint(f, "\n");
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	    smiRevision = smiGetFirstRevision(smiModule);
Packit Service 9ccfef
	    fprintSegment(f, INDENT, "LAST-UPDATED:", INDENTVALUE);
Packit Service 9ccfef
	    fprint(f, smiRevision
Packit Service 9ccfef
		  ? getTimeString(smiRevision->date) : "197001010000Z");
Packit Service 9ccfef
	    fprint(f, "\n\n");
Packit Service 9ccfef
	    fprintSegment(f, INDENT, "ORGANIZATION:", 0);
Packit Service 9ccfef
	    fprint(f, "\n");
Packit Service 9ccfef
	    fprintMultilineString(f, smiModule->organization);
Packit Service 9ccfef
	    fprint(f, "\n\n");
Packit Service 9ccfef
	    fprintSegment(f, INDENT, "CONTACT-INFO:", 0);
Packit Service 9ccfef
	    fprint(f, "\n");
Packit Service 9ccfef
	    fprintMultilineString(f, smiModule->contactinfo);
Packit Service 9ccfef
	    fprint(f, "\n\n");
Packit Service 9ccfef
	    for (; smiRevision;
Packit Service 9ccfef
		 smiRevision = smiGetNextRevision(smiRevision)) {
Packit Service 9ccfef
		if (! smiRevision->description ||
Packit Service 9ccfef
		    strcmp(smiRevision->description,
Packit Service 9ccfef
			   "[Revision added by libsmi due to a LAST-UPDATED clause.]")) {
Packit Service 9ccfef
		    fprintSegment(f, INDENT, "REVISION:", INDENTVALUE);
Packit Service 9ccfef
		    fprint(f, "\"%s\"\n", getTimeString(smiRevision->date));
Packit Service 9ccfef
		    fprintSegment(f, INDENT, "REVISION-DESCRIPTION:", 0);
Packit Service 9ccfef
		    fprint(f, "\n");
Packit Service 9ccfef
		    if (smiRevision->description) {
Packit Service 9ccfef
			fprintMultilineString(f, smiRevision->description);
Packit Service 9ccfef
		    } else {
Packit Service 9ccfef
			fprintMultilineString(f, "...");
Packit Service 9ccfef
		    }
Packit Service 9ccfef
		    fprint(f, "\n\n");
Packit Service 9ccfef
		}
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	    fprintSegment(f, INDENT, "*/", 0);
Packit Service 9ccfef
	    fprint(f, "\n\n");
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void fprintType(FILE *f, SmiNode *smiNode, SmiType *smiType)
Packit Service 9ccfef
{
Packit Service 9ccfef
    SmiNamedNumber *nn;
Packit Service 9ccfef
    char           *idlTypeName;
Packit Service 9ccfef
    char           *nnName;
Packit Service 9ccfef
    int            i;
Packit Service 9ccfef
Packit Service 9ccfef
    if (! silent) {
Packit Service 9ccfef
	if (smiType->name) {
Packit Service 9ccfef
	    fprintSegment(f, INDENT, "/*\n", 0);
Packit Service 9ccfef
	    if (smiType->description) {
Packit Service 9ccfef
		fprintMultiline(f, smiType->description);
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	    if (smiType->reference) {
Packit Service 9ccfef
		fprintSegment(f, INDENT, "REFERENCE:", 0);
Packit Service 9ccfef
		fprint(f, "\n");
Packit Service 9ccfef
		fprintMultilineString(f, smiType->reference);
Packit Service 9ccfef
		fprint(f, "\n\n");
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	    if (smiType->format) {
Packit Service 9ccfef
		fprintSegment(f, INDENT, "DISPLAY-HINT:", 0);
Packit Service 9ccfef
		fprint(f, " %s\n", smiType->format);
Packit Service 9ccfef
		fprint(f, "\n\n");
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	    fprintSegment(f, INDENT, "*/\n", 0);
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
    if (! smiType->name) {
Packit Service 9ccfef
	idlTypeName = getIdlTypeName(smiGetNodeModule(smiNode)->name,
Packit Service 9ccfef
				     smiNode->name);
Packit Service 9ccfef
    } else {
Packit Service 9ccfef
	idlTypeName = getIdlTypeName(smiGetTypeModule(smiType)->name,
Packit Service 9ccfef
				     smiType->name);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    fprintSegment(f, INDENT, "typedef ", 0);
Packit Service 9ccfef
    fprint(f, "%s %s; \n",
Packit Service 9ccfef
	  getBaseTypeString(smiType->basetype), idlTypeName);
Packit Service 9ccfef
    
Packit Service 9ccfef
    if (smiType->basetype == SMI_BASETYPE_ENUM) {
Packit Service 9ccfef
	for (nn = smiGetFirstNamedNumber(smiType);
Packit Service 9ccfef
	     nn;
Packit Service 9ccfef
	     nn = smiGetNextNamedNumber(nn)) {
Packit Service 9ccfef
	    fprintSegment(f, INDENT, "const ", 0);
Packit Service 9ccfef
	    nnName = translate(nn->name);
Packit Service 9ccfef
	    fprint(f, "%s %s_%s = %s;\n", idlTypeName, idlTypeName, nnName,
Packit Service 9ccfef
		  getValueString(&nn->value, smiType));
Packit Service 9ccfef
	    xfree(nnName);
Packit Service 9ccfef
	}
Packit Service 9ccfef
	fprintSegment(f, INDENT, "const string ", 0);
Packit Service 9ccfef
	fprint(f, "%s_NameNumberList = \"", idlTypeName);
Packit Service 9ccfef
	for (i = 0, nn = smiGetFirstNamedNumber(smiType);
Packit Service 9ccfef
	     nn;
Packit Service 9ccfef
	     i++, nn = smiGetNextNamedNumber(nn)) {
Packit Service 9ccfef
	    nnName = translate(nn->name);
Packit Service 9ccfef
	    if (i) {
Packit Service 9ccfef
		fprint(f, " , ");
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	    fprint(f, "%s (%s)", nnName, getValueString(&nn->value, smiType));
Packit Service 9ccfef
	    xfree(nnName);
Packit Service 9ccfef
	}
Packit Service 9ccfef
	fprint(f, "\";\n");
Packit Service 9ccfef
    }
Packit Service 9ccfef
    fprint(f, "\n");
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void fprintTypedefs(FILE *f, SmiModule *smiModule)
Packit Service 9ccfef
{
Packit Service 9ccfef
    SmiNode        *smiNode;
Packit Service 9ccfef
    SmiType        *smiType;
Packit Service 9ccfef
    SmiNodekind    kind = SMI_NODEKIND_SCALAR | SMI_NODEKIND_COLUMN;
Packit Service 9ccfef
    
Packit Service 9ccfef
    for (smiType = smiGetFirstType(smiModule);
Packit Service 9ccfef
	 smiType;
Packit Service 9ccfef
	 smiType = smiGetNextType(smiType)) {
Packit Service 9ccfef
	if (current(smiType->status)) {
Packit Service 9ccfef
	    fprintType(f, NULL, smiType);
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    for (smiNode = smiGetFirstNode(smiModule, kind);
Packit Service 9ccfef
	 smiNode;
Packit Service 9ccfef
	 smiNode = smiGetNextNode(smiNode, kind)) {
Packit Service 9ccfef
	if (current(smiNode->status)) {
Packit Service 9ccfef
	    smiType = smiGetNodeType(smiNode);
Packit Service 9ccfef
	    if (smiType && ! smiType->name) {
Packit Service 9ccfef
		fprintType(f, smiNode, smiType);
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void fprintAttribute(FILE *f, SmiNode *smiNode)
Packit Service 9ccfef
{
Packit Service 9ccfef
    char *idlTypeName = NULL, *idlNodeName;
Packit Service 9ccfef
    SmiType *smiType;
Packit Service 9ccfef
    SmiModule *smiModule;
Packit Service 9ccfef
    
Packit Service 9ccfef
    if (smiNode->access < SMI_ACCESS_READ_ONLY) {
Packit Service 9ccfef
	return;
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    smiType = smiGetNodeType(smiNode);
Packit Service 9ccfef
    smiModule = smiGetNodeModule(smiNode);
Packit Service 9ccfef
Packit Service 9ccfef
    if (! smiType) {
Packit Service 9ccfef
	return;
Packit Service 9ccfef
    }
Packit Service 9ccfef
    
Packit Service 9ccfef
    idlNodeName = getIdlNodeName(smiModule->name, smiNode->name);
Packit Service 9ccfef
    idlTypeName = getIdlAnyTypeName(smiNode, smiType);
Packit Service 9ccfef
    if (! silent) {
Packit Service 9ccfef
	fprintDescription(f, smiNode, 2*INDENT);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    fprintSegment(f, 2*INDENT,
Packit Service 9ccfef
		 smiNode->access == SMI_ACCESS_READ_ONLY
Packit Service 9ccfef
		 ? "readonly attribute" : "attribute", 0);
Packit Service 9ccfef
Packit Service 9ccfef
    fprint(f, " %s %s;\n", idlTypeName, idlNodeName);
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void fprintGroupInterface(FILE *f, SmiNode *smiNode)
Packit Service 9ccfef
{
Packit Service 9ccfef
    SmiNode *childNode;
Packit Service 9ccfef
    char *idlNodeName;
Packit Service 9ccfef
    SmiModule *smiModule, *childModule;
Packit Service 9ccfef
Packit Service 9ccfef
    smiModule = smiGetNodeModule(smiNode);
Packit Service 9ccfef
    idlNodeName = getIdlNodeName(smiModule->name, smiNode->name);
Packit Service 9ccfef
    fprintSegment(f, INDENT, "interface", 0);
Packit Service 9ccfef
    fprint(f, " %s : SNMPMgmt::SmiEntry {\n", idlNodeName);
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_TABLE
Packit Service 9ccfef
	    && current(childNode->status)) {
Packit Service 9ccfef
	    if (! silent) {
Packit Service 9ccfef
		fprintDescription(f, childNode, 2*INDENT);
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	    fprintSegment(f, 2*INDENT, "SNMPMgmt::SmiTableIterator", 0);
Packit Service 9ccfef
	    childModule = smiGetNodeModule(childNode);
Packit Service 9ccfef
	    fprint(f, " get_%s();\n", getIdlNodeName(childModule->name,
Packit Service 9ccfef
						 childNode->name));
Packit Service 9ccfef
	}
Packit Service 9ccfef
	if (childNode->nodekind == SMI_NODEKIND_SCALAR
Packit Service 9ccfef
	    && current(childNode->status)) {
Packit Service 9ccfef
	    fprintAttribute(f, childNode);
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    fprintSegment(f, INDENT, "};\n\n", 0);
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void fprintRowInterface(FILE *f, SmiNode *smiNode)
Packit Service 9ccfef
{
Packit Service 9ccfef
    SmiNode *childNode, *relatedNode;
Packit Service 9ccfef
    char *idlModuleName, *idlNodeName;
Packit Service 9ccfef
Packit Service 9ccfef
    idlNodeName = getIdlNodeName(smiGetNodeModule(smiNode)->name,
Packit Service 9ccfef
				 smiNode->name);
Packit Service 9ccfef
    if (! silent) {
Packit Service 9ccfef
	fprintDescription(f, smiNode, INDENT);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    fprintSegment(f, INDENT, "interface", 0);
Packit Service 9ccfef
    if (smiNode->indexkind == SMI_INDEX_AUGMENT
Packit Service 9ccfef
	|| smiNode->indexkind == SMI_INDEX_SPARSE) {
Packit Service 9ccfef
	relatedNode = smiGetRelatedNode(smiNode);
Packit Service 9ccfef
	idlModuleName = getIdlModuleName(smiGetNodeModule(relatedNode)->name);
Packit Service 9ccfef
	fprint(f, " %s : %s::%s {\n", idlNodeName,
Packit Service 9ccfef
	      idlModuleName, relatedNode->name);
Packit Service 9ccfef
    } else {
Packit Service 9ccfef
	fprint(f, " %s : SNMPMgmt::SmiEntry {\n", idlNodeName);	
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    if (smiNode->indexkind == SMI_INDEX_INDEX
Packit Service 9ccfef
	|| smiNode->indexkind == SMI_INDEX_REORDER) {
Packit Service 9ccfef
	fprint(f, "\n");
Packit Service 9ccfef
	fprintSegment(f, 2*INDENT, "const ", 0);
Packit Service 9ccfef
	fprint(f, "string IndexVarList = \"");
Packit Service 9ccfef
	fprintIndex(f, smiNode);
Packit Service 9ccfef
	fprint(f, "\";\n");
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    /* SMI_INDEX_EXPAND ? */
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_COLUMN
Packit Service 9ccfef
	    && current(childNode->status)) {
Packit Service 9ccfef
	    fprintAttribute(f, childNode);
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
    
Packit Service 9ccfef
    fprintSegment(f, INDENT, "};\n\n", 0);
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void fprintInterfaces(FILE *f, 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
	    fprintGroupInterface(f, smiNode);
Packit Service 9ccfef
	}
Packit Service 9ccfef
	if (smiNode->nodekind == SMI_NODEKIND_ROW
Packit Service 9ccfef
	    && current(smiNode->status)) {
Packit Service 9ccfef
	    fprintRowInterface(f, smiNode);
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void fprintConstructor(FILE *f, SmiNode *smiNode)
Packit Service 9ccfef
{
Packit Service 9ccfef
    SmiNode *childNode;
Packit Service 9ccfef
    SmiNode *indexNode;
Packit Service 9ccfef
    SmiType *smiType;
Packit Service 9ccfef
    SmiModule *smiModule;
Packit Service 9ccfef
    SmiElement *smiElement = NULL;
Packit Service 9ccfef
    char    *idlNodeName;
Packit Service 9ccfef
    char    *idlChildNodeName, *idlChildTypeName;
Packit Service 9ccfef
    int	    cnt = 0;
Packit Service 9ccfef
Packit Service 9ccfef
    smiModule = smiGetNodeModule(smiNode);
Packit Service 9ccfef
    idlNodeName = getIdlNodeName(smiModule->name, smiNode->name);
Packit Service 9ccfef
Packit Service 9ccfef
    fprint(f, "\n");
Packit Service 9ccfef
    fprintSegment(f, 2*INDENT, "", 0);
Packit Service 9ccfef
    fprint(f, "%s create_%s (\n", idlNodeName, idlNodeName);
Packit Service 9ccfef
Packit Service 9ccfef
    /* First include the INDEXes as parameters to allow row creation
Packit Service 9ccfef
       for rows with not-accesible index objects. */
Packit Service 9ccfef
Packit Service 9ccfef
    if (smiNode->indexkind == SMI_INDEX_INDEX
Packit Service 9ccfef
	|| smiNode->indexkind == SMI_INDEX_REORDER) {
Packit Service 9ccfef
	 for (smiElement = smiGetFirstElement(smiNode);
Packit Service 9ccfef
	      smiElement; smiElement = smiGetNextElement(smiElement)) {
Packit Service 9ccfef
	      cnt++;
Packit Service 9ccfef
	      indexNode = smiGetElementNode(smiElement);
Packit Service 9ccfef
	      idlChildNodeName =
Packit Service 9ccfef
		   getIdlNodeName(smiGetNodeModule(indexNode)->name,
Packit Service 9ccfef
				  indexNode->name);
Packit Service 9ccfef
	      smiType = smiGetNodeType(indexNode);
Packit Service 9ccfef
	      idlChildTypeName = getIdlAnyTypeName(indexNode, smiType);
Packit Service 9ccfef
	      if (cnt > 1) {
Packit Service 9ccfef
		   fprint(f, ",\n");
Packit Service 9ccfef
	      }
Packit Service 9ccfef
	      fprintSegment(f, 3*INDENT, "in ", 0);
Packit Service 9ccfef
	      fprint(f, "%s %s", idlChildTypeName, idlChildNodeName);
Packit Service 9ccfef
	 }
Packit Service 9ccfef
    }
Packit Service 9ccfef
    
Packit Service 9ccfef
    for (childNode = smiGetFirstChildNode(smiNode);
Packit Service 9ccfef
	 childNode;
Packit Service 9ccfef
	 childNode = smiGetNextChildNode(childNode)) {
Packit Service 9ccfef
	
Packit Service 9ccfef
	if ((childNode->nodekind == SMI_NODEKIND_SCALAR
Packit Service 9ccfef
	     || childNode->nodekind == SMI_NODEKIND_COLUMN)
Packit Service 9ccfef
	    && current(childNode->status)
Packit Service 9ccfef
	    && childNode->access == SMI_ACCESS_READ_WRITE) {
Packit Service 9ccfef
Packit Service 9ccfef
	    /* Test if this column is already used as parameter
Packit Service 9ccfef
	       because it is an INDEX of the row. */
Packit Service 9ccfef
Packit Service 9ccfef
	    if (childNode->nodekind == SMI_NODEKIND_SCALAR
Packit Service 9ccfef
		|| childNode->nodekind == SMI_NODEKIND_COLUMN) {
Packit Service 9ccfef
		for (smiElement = smiGetFirstElement(smiNode);
Packit Service 9ccfef
		    smiElement; smiElement = smiGetNextElement(smiElement)) {
Packit Service 9ccfef
		    indexNode = smiGetElementNode(smiElement);
Packit Service 9ccfef
		    if (indexNode == childNode) {
Packit Service 9ccfef
			break;
Packit Service 9ccfef
		    }
Packit Service 9ccfef
		}
Packit Service 9ccfef
	    }
Packit Service 9ccfef
Packit Service 9ccfef
	    if (! smiElement) {
Packit Service 9ccfef
		cnt++;
Packit Service 9ccfef
		idlChildNodeName =
Packit Service 9ccfef
		    getIdlNodeName(smiGetNodeModule(childNode)->name,
Packit Service 9ccfef
				   childNode->name);
Packit Service 9ccfef
		smiType = smiGetNodeType(childNode);
Packit Service 9ccfef
		idlChildTypeName = getIdlAnyTypeName(childNode, smiType);
Packit Service 9ccfef
		if (cnt > 1) {
Packit Service 9ccfef
		    fprint(f, ",\n");
Packit Service 9ccfef
		}
Packit Service 9ccfef
		fprintSegment(f, 3*INDENT, "in ", 0);
Packit Service 9ccfef
		fprint(f, "%s %s", idlChildTypeName, idlChildNodeName);
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
    fprint(f, "\n");
Packit Service 9ccfef
    
Packit Service 9ccfef
    fprintSegment(f, 2*INDENT, ") raises (\n", 0);
Packit Service 9ccfef
    fprintSegment(f, 3*INDENT, "SNMPMgmt::AlreadyExists,\n", 0);
Packit Service 9ccfef
    fprintSegment(f, 3*INDENT, "CosLifeCycle::InvalidCriteria,\n", 0);
Packit Service 9ccfef
    fprintSegment(f, 3*INDENT, "CosLifeCycle::CannotMeetCriteria\n", 0);
Packit Service 9ccfef
    fprintSegment(f, 2*INDENT, ");\n", 0);
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void fprintFactory(FILE *f, SmiModule *smiModule)
Packit Service 9ccfef
{
Packit Service 9ccfef
    SmiNode *smiNode;
Packit Service 9ccfef
    int	    cnt = 0;
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
	
Packit Service 9ccfef
	if (isCreatable(smiNode)) {
Packit Service 9ccfef
	    cnt++;
Packit Service 9ccfef
	    if (cnt == 1) {
Packit Service 9ccfef
		fprintSegment(f, INDENT, "interface SmiEntryFactory : "
Packit Service 9ccfef
			     "SNMPMgmt::GenericFactory {\n", 0);
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	    fprintConstructor(f, smiNode);
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    if (cnt) {
Packit Service 9ccfef
	fprintSegment(f, INDENT, "};\n\n", 0);
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void fprintNotificationVBTypes(FILE *f, SmiModule *smiModule)
Packit Service 9ccfef
{
Packit Service 9ccfef
    SmiNode     *smiNode, *listSmiNode;
Packit Service 9ccfef
    SmiElement  *smiElement;
Packit Service 9ccfef
    SmiType	*smiType;
Packit Service 9ccfef
    char	*idlTypeName;
Packit Service 9ccfef
    char	*idlVBTypeName;
Packit Service 9ccfef
    int		isnew;
Packit Service 9ccfef
    
Packit Service 9ccfef
    for (smiNode = smiGetFirstNode(smiModule, SMI_NODEKIND_NOTIFICATION);
Packit Service 9ccfef
	 smiNode;
Packit Service 9ccfef
	 smiNode = smiGetNextNode(smiNode, SMI_NODEKIND_NOTIFICATION)) {
Packit Service 9ccfef
Packit Service 9ccfef
	for (smiElement = smiGetFirstElement(smiNode);
Packit Service 9ccfef
	     smiElement; smiElement = smiGetNextElement(smiElement)) {
Packit Service 9ccfef
	    listSmiNode = smiGetElementNode(smiElement);
Packit Service 9ccfef
	    idlVBTypeName = getIdlVBTypeName(
Packit Service 9ccfef
		                           smiGetNodeModule(listSmiNode)->name,
Packit Service 9ccfef
					   listSmiNode->name, &isnew);
Packit Service 9ccfef
	    if (isnew && listSmiNode) {
Packit Service 9ccfef
		smiType = smiGetNodeType(listSmiNode);
Packit Service 9ccfef
		if (smiType) {
Packit Service 9ccfef
		    idlTypeName = getIdlAnyTypeName(listSmiNode, smiType);
Packit Service 9ccfef
		    fprintSegment(f, INDENT, "struct ", 0);
Packit Service 9ccfef
		    fprint(f, "%s {\n", idlVBTypeName);
Packit Service 9ccfef
		    fprintSegment(f, 2*INDENT, "string var_name;\n", 0);
Packit Service 9ccfef
		    fprintSegment(f, 2*INDENT, "string var_index;\n", 0);
Packit Service 9ccfef
		    fprintSegment(f, 2*INDENT, "", 0);
Packit Service 9ccfef
		    fprint(f, "%s %s;\n", idlTypeName,
Packit Service 9ccfef
			   smiGetElementNode(smiElement)->name);
Packit Service 9ccfef
		    fprintSegment(f, INDENT, "};\n\n", 0);
Packit Service 9ccfef
		}
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void fprintNotificationTypes(FILE *f, SmiModule *smiModule)
Packit Service 9ccfef
{
Packit Service 9ccfef
    SmiNode     *smiNode;
Packit Service 9ccfef
    SmiElement  *smiElement;
Packit Service 9ccfef
    char	*idlTypeName;
Packit Service 9ccfef
    char	*idlVBTypeName;
Packit Service 9ccfef
    
Packit Service 9ccfef
    for (smiNode = smiGetFirstNode(smiModule, SMI_NODEKIND_NOTIFICATION);
Packit Service 9ccfef
	 smiNode;
Packit Service 9ccfef
	 smiNode = smiGetNextNode(smiNode, SMI_NODEKIND_NOTIFICATION)) {
Packit Service 9ccfef
Packit Service 9ccfef
	if ((smiElement = smiGetFirstElement(smiNode))) {
Packit Service 9ccfef
	    idlTypeName = getIdlTypeName(smiGetNodeModule(smiNode)->name,
Packit Service 9ccfef
					 smiNode->name);
Packit Service 9ccfef
	    fprintSegment(f, INDENT, "struct ", 0);
Packit Service 9ccfef
	    fprint(f, "%s {\n", idlTypeName);
Packit Service 9ccfef
	    for (; smiElement; smiElement = smiGetNextElement(smiElement)) {
Packit Service 9ccfef
		idlVBTypeName = getIdlVBTypeName(smiGetNodeModule(
Packit Service 9ccfef
		                          smiGetElementNode(smiElement))->name,
Packit Service 9ccfef
				    smiGetElementNode(smiElement)->name, NULL);
Packit Service 9ccfef
		fprintSegment(f, 2*INDENT, "", 0);
Packit Service 9ccfef
		fprint(f, "%s %s;\n", idlVBTypeName,
Packit Service 9ccfef
		      smiGetElementNode(smiElement)->name);
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	    fprintSegment(f, INDENT, "};\n\n", 0);
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void fprintPushNotifications(FILE *f, SmiModule *smiModule)
Packit Service 9ccfef
{
Packit Service 9ccfef
    SmiNode     *smiNode;
Packit Service 9ccfef
    SmiElement  *smiElement;
Packit Service 9ccfef
    char        *idlNodeName;
Packit Service 9ccfef
    char	*idlTypeName;
Packit Service 9ccfef
    int         cnt = 0;
Packit Service 9ccfef
Packit Service 9ccfef
    for (smiNode = smiGetFirstNode(smiModule, SMI_NODEKIND_NOTIFICATION);
Packit Service 9ccfef
	 smiNode;
Packit Service 9ccfef
	 smiNode = smiGetNextNode(smiNode, SMI_NODEKIND_NOTIFICATION)) {
Packit Service 9ccfef
Packit Service 9ccfef
	cnt++;
Packit Service 9ccfef
	if (cnt == 1) {
Packit Service 9ccfef
	    if (! silent) {
Packit Service 9ccfef
		fprintSegment(f, INDENT,
Packit Service 9ccfef
			     "/* typed push event communication */\n", 0);
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	    fprintSegment(f, INDENT, "interface Notifications : ", 0);
Packit Service 9ccfef
	    fprint(f, "SNMPMgmt::Notifications {\n");
Packit Service 9ccfef
	}
Packit Service 9ccfef
	idlNodeName = getIdlNodeName(smiModule->name,
Packit Service 9ccfef
				     smiNode->name);
Packit Service 9ccfef
	if (! silent) {
Packit Service 9ccfef
	    fprintDescription(f, smiNode, 2*INDENT);
Packit Service 9ccfef
	}
Packit Service 9ccfef
	fprintSegment(f, 2*INDENT, "void ", 0);
Packit Service 9ccfef
	fprint(f, "%s (\n", idlNodeName);
Packit Service 9ccfef
	fprintSegment(f, 3*INDENT, "in CosNaming::Name src_entry_name,\n", 0);
Packit Service 9ccfef
	fprintSegment(f, 3*INDENT, "in CORBA::ScopedName event_type,\n", 0);
Packit Service 9ccfef
	fprintSegment(f, 3*INDENT, "in ASN1_GeneralizedTime event_time", 0);
Packit Service 9ccfef
	if ((smiElement = smiGetFirstElement(smiNode))) {
Packit Service 9ccfef
	    idlTypeName = getIdlTypeName(smiModule->name, smiNode->name);
Packit Service 9ccfef
	    fprint(f, ",\n");
Packit Service 9ccfef
	    fprintSegment(f, 3*INDENT, "in ", 0);
Packit Service 9ccfef
	    fprint(f, "%s notification_info", idlTypeName);
Packit Service 9ccfef
	}
Packit Service 9ccfef
	fprint(f, "\n");
Packit Service 9ccfef
	fprintSegment(f, 2*INDENT, ");\n", 0);
Packit Service 9ccfef
    }    
Packit Service 9ccfef
Packit Service 9ccfef
    if (cnt) {
Packit Service 9ccfef
	fprintSegment(f, INDENT, "};\n\n", 0);
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void fprintPullNotifications(FILE *f, SmiModule *smiModule)
Packit Service 9ccfef
{
Packit Service 9ccfef
    SmiNode     *smiNode;
Packit Service 9ccfef
    SmiElement  *smiElement;
Packit Service 9ccfef
    int         cnt = 0;
Packit Service 9ccfef
    char        *idlNodeName;
Packit Service 9ccfef
    char	*idlTypeName;
Packit Service 9ccfef
Packit Service 9ccfef
    for (smiNode = smiGetFirstNode(smiModule, SMI_NODEKIND_NOTIFICATION);
Packit Service 9ccfef
	 smiNode;
Packit Service 9ccfef
	 smiNode = smiGetNextNode(smiNode, SMI_NODEKIND_NOTIFICATION)) {
Packit Service 9ccfef
Packit Service 9ccfef
	cnt++;
Packit Service 9ccfef
	if (cnt == 1) {
Packit Service 9ccfef
	    if (! silent) {
Packit Service 9ccfef
		fprintSegment(f, INDENT,
Packit Service 9ccfef
			     "/* typed pull event communication */\n", 0);
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	    fprintSegment(f, INDENT, "interface PullNotifications : ", 0);
Packit Service 9ccfef
	    fprint(f, "SNMPMgmt::PullNotifications {\n");
Packit Service 9ccfef
	}
Packit Service 9ccfef
	idlNodeName = getIdlNodeName(smiModule->name, smiNode->name);
Packit Service 9ccfef
	
Packit Service 9ccfef
	if (! silent) {
Packit Service 9ccfef
	    fprintDescription(f, smiNode, 2*INDENT);
Packit Service 9ccfef
	}
Packit Service 9ccfef
	fprintSegment(f, 2*INDENT, "void ", 0);
Packit Service 9ccfef
	fprint(f, "pull_%s (\n", idlNodeName);
Packit Service 9ccfef
	fprintSegment(f, 3*INDENT, "out CosNaming::Name src_entry_name,\n", 0);
Packit Service 9ccfef
	fprintSegment(f, 3*INDENT, "out CORBA::ScopedName event_type,\n", 0);
Packit Service 9ccfef
	fprintSegment(f, 3*INDENT, "out ASN1_GeneralizedTime event_time", 0);
Packit Service 9ccfef
	if ((smiElement = smiGetFirstElement(smiNode))) {
Packit Service 9ccfef
	    idlTypeName = getIdlTypeName(smiModule->name, smiNode->name);
Packit Service 9ccfef
	    fprint(f, ",\n");
Packit Service 9ccfef
	    fprintSegment(f, 3*INDENT, "out ", 0);
Packit Service 9ccfef
	    fprint(f, "%s notification_info", idlTypeName);
Packit Service 9ccfef
	}
Packit Service 9ccfef
	fprint(f, "\n");
Packit Service 9ccfef
	fprintSegment(f, 2*INDENT, ");\n", 0);
Packit Service 9ccfef
	fprintSegment(f, 2*INDENT, "boolean ", 0);
Packit Service 9ccfef
	fprint(f, "try_%s (\n", idlNodeName);
Packit Service 9ccfef
	fprintSegment(f, 3*INDENT, "out CosNaming::Name src_entry_name,\n", 0);
Packit Service 9ccfef
	fprintSegment(f, 3*INDENT, "out CORBA::ScopedName event_type,\n", 0);
Packit Service 9ccfef
	fprintSegment(f, 3*INDENT, "out ASN1_GeneralizedTime event_time", 0);
Packit Service 9ccfef
	if ((smiElement = smiGetFirstElement(smiNode))) {
Packit Service 9ccfef
	    char *idlTypeName;
Packit Service 9ccfef
	    idlTypeName = getIdlTypeName(smiModule->name, smiNode->name);
Packit Service 9ccfef
	    fprint(f, ",\n");
Packit Service 9ccfef
	    fprintSegment(f, 3*INDENT, "out ", 0);
Packit Service 9ccfef
	    fprint(f, "%s notification_info", idlTypeName);
Packit Service 9ccfef
	}
Packit Service 9ccfef
	fprint(f, "\n");
Packit Service 9ccfef
	fprintSegment(f, 2*INDENT, ");\n", 0);
Packit Service 9ccfef
    }    
Packit Service 9ccfef
Packit Service 9ccfef
    if (cnt) {
Packit Service 9ccfef
	fprintSegment(f, INDENT, "};\n\n", 0);
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void fprintDefVals(FILE *f, SmiModule *smiModule)
Packit Service 9ccfef
{
Packit Service 9ccfef
    SmiNode *smiNode;
Packit Service 9ccfef
    SmiType *smiType;
Packit Service 9ccfef
    int     cnt = 0;
Packit Service 9ccfef
    char    *idlTypeName;
Packit Service 9ccfef
    
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
	
Packit Service 9ccfef
	if (smiNode->value.basetype != SMI_BASETYPE_UNKNOWN) {
Packit Service 9ccfef
	    smiType = smiGetNodeType(smiNode);
Packit Service 9ccfef
	    if (smiType) {
Packit Service 9ccfef
		cnt++;
Packit Service 9ccfef
		if (cnt == 1) {
Packit Service 9ccfef
		    fprintSegment(f, INDENT, "/* pseudo */\n", 0);
Packit Service 9ccfef
		    fprintSegment(f, INDENT, "interface DefaultValues {\n", 0);
Packit Service 9ccfef
		}
Packit Service 9ccfef
		if (! silent) {
Packit Service 9ccfef
		    fprintSegment(f, 2*INDENT, "/* DEFVAL: ", 0);
Packit Service 9ccfef
		    fprint(f, " %s */\n",
Packit Service 9ccfef
			   getValueString(&smiNode->value, smiType));
Packit Service 9ccfef
		}
Packit Service 9ccfef
		fprintSegment(f, 2*INDENT, "", 0);
Packit Service 9ccfef
		idlTypeName = getIdlAnyTypeName(smiNode, smiType);
Packit Service 9ccfef
		fprint(f, "%s %s();\n\n", idlTypeName, smiNode->name);
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    if (cnt) {
Packit Service 9ccfef
	fprintSegment(f, INDENT, "};\n\n", 0);
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void fprintDisplayHints(FILE *f, SmiModule *smiModule)
Packit Service 9ccfef
{
Packit Service 9ccfef
    SmiType *smiType;
Packit Service 9ccfef
    int     cnt = 0;
Packit Service 9ccfef
Packit Service 9ccfef
    for (smiType = smiGetFirstType(smiModule);
Packit Service 9ccfef
	 smiType;
Packit Service 9ccfef
	 smiType = smiGetNextType(smiType)) {
Packit Service 9ccfef
	if (current(smiType->status) && smiType->format) {
Packit Service 9ccfef
	    cnt++;
Packit Service 9ccfef
	    if (cnt == 1) {
Packit Service 9ccfef
		fprintSegment(f, INDENT, "/* pseudo */\n", 0);
Packit Service 9ccfef
		fprintSegment(f, INDENT, "interface TextualConventions {\n", 0);
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	    fprint(f, "\n");
Packit Service 9ccfef
	    if (! silent) {
Packit Service 9ccfef
		fprintSegment(f, 2*INDENT, "/*\n", 0);
Packit Service 9ccfef
		if (smiType->description) {
Packit Service 9ccfef
		    fprintMultiline(f, smiType->description);
Packit Service 9ccfef
		}
Packit Service 9ccfef
		if (smiType->reference) {
Packit Service 9ccfef
		    fprintSegment(f, 2*INDENT, "REFERENCE:", 0);
Packit Service 9ccfef
		    fprint(f, "\n");
Packit Service 9ccfef
		    fprintMultilineString(f, smiType->reference);
Packit Service 9ccfef
		}
Packit Service 9ccfef
		if (smiType->format) {
Packit Service 9ccfef
		    fprintSegment(f, 2*INDENT, "DISPLAY-HINT:", 0);
Packit Service 9ccfef
		    fprint(f, " %s\n", smiType->format);
Packit Service 9ccfef
		}
Packit Service 9ccfef
		fprintSegment(f, 2*INDENT, "*/\n", 0);
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	    fprintSegment(f, 2*INDENT, "", 0);
Packit Service 9ccfef
	    fprint(f, "string %sToString (in %s Value);\n", smiType->name,
Packit Service 9ccfef
		  getIdlTypeName(smiGetTypeModule(smiType)->name,
Packit Service 9ccfef
				 smiType->name));
Packit Service 9ccfef
	    fprintSegment(f, 2*INDENT, "", 0);
Packit Service 9ccfef
	    fprint(f, "%s %sFromString (in string str);\n",
Packit Service 9ccfef
		  getIdlTypeName(smiGetTypeModule(smiType)->name,
Packit Service 9ccfef
				 smiType->name),
Packit Service 9ccfef
		  smiType->name);
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    if (cnt) {
Packit Service 9ccfef
	fprintSegment(f, INDENT, "};\n\n", 0);
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void dumpIdl(SmiModule *smiModule)
Packit Service 9ccfef
{
Packit Service 9ccfef
    char        *idlModuleName;
Packit Service 9ccfef
    FILE        *f;
Packit Service 9ccfef
    SmiRevision *smiRevision;
Packit Service 9ccfef
    char        *date;
Packit Service 9ccfef
Packit Service 9ccfef
    f = createFile(getIdlModuleName(smiModule->name), ".idl");
Packit Service 9ccfef
    if (! f) {
Packit Service 9ccfef
        return;
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    fprintf(f,
Packit Service 9ccfef
	    "/*	\t\t\t\t\t\t-- DO NOT EDIT --\n"
Packit Service 9ccfef
	    " * Generated by smidump version " SMI_VERSION_STRING ":\n");
Packit Service 9ccfef
Packit Service 9ccfef
    fprintf(f, " *   smidump -f corba %s\n *\n", smiModule->name);
Packit Service 9ccfef
Packit Service 9ccfef
    fprintf(f,
Packit Service 9ccfef
	    " * Derived from %s:\n", smiModule->name);
Packit Service 9ccfef
    fprintCommentString(f, smiModule->description);
Packit Service 9ccfef
Packit Service 9ccfef
    for (smiRevision = smiGetFirstRevision(smiModule);
Packit Service 9ccfef
	 smiRevision;
Packit Service 9ccfef
	 smiRevision = smiGetNextRevision(smiRevision)) {
Packit Service 9ccfef
	date = getStringTime(smiRevision->date);
Packit Service 9ccfef
	fprintf(f,
Packit Service 9ccfef
		" *\n"
Packit Service 9ccfef
		" * Revision %s:\n", date);
Packit Service 9ccfef
	fprintCommentString(f, smiRevision->description);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    
Packit Service 9ccfef
    fprintf(f,
Packit Service 9ccfef
	    " *\n * $I" "d$\n"
Packit Service 9ccfef
	    " */\n"
Packit Service 9ccfef
	    "\n");
Packit Service 9ccfef
Packit Service 9ccfef
    idlModuleName = getIdlModuleName(smiModule->name);
Packit Service 9ccfef
    createImportList(smiModule);
Packit Service 9ccfef
Packit Service 9ccfef
    fprint(f, "#ifndef _%s_IDL_\n", idlModuleName);
Packit Service 9ccfef
    fprint(f, "#define _%s_IDL_\n\n", idlModuleName);
Packit Service 9ccfef
Packit Service 9ccfef
    fprintIncludes(f, smiModule);
Packit Service 9ccfef
Packit Service 9ccfef
    fprint(f, "module %s {\n\n", idlModuleName);
Packit Service 9ccfef
Packit Service 9ccfef
    fprintImportedTypedefs(f, smiModule);
Packit Service 9ccfef
    fprintModule(f, smiModule);
Packit Service 9ccfef
    fprintTypedefs(f, smiModule);
Packit Service 9ccfef
    fprintInterfaces(f, smiModule);
Packit Service 9ccfef
    fprintNotificationVBTypes(f, smiModule);
Packit Service 9ccfef
    fprintNotificationTypes(f, smiModule);
Packit Service 9ccfef
    fprintPushNotifications(f, smiModule);
Packit Service 9ccfef
    fprintPullNotifications(f, smiModule);
Packit Service 9ccfef
    fprintFactory(f, smiModule);
Packit Service 9ccfef
    fprintDefVals(f, smiModule);
Packit Service 9ccfef
    fprintDisplayHints(f, smiModule);
Packit Service 9ccfef
    
Packit Service 9ccfef
    fprint(f, "};\n\n");
Packit Service 9ccfef
    fprint(f, "#endif /* !_%s_IDL_ */\n", idlModuleName);
Packit Service 9ccfef
Packit Service 9ccfef
    freeImportList();
Packit Service 9ccfef
    dictFree(&idlModuleNameList);
Packit Service 9ccfef
    dictFree(&idlNodeNameList);
Packit Service 9ccfef
    dictFree(&idlTypeNameList);
Packit Service 9ccfef
    dictFree(&idlVBTypeNameList);
Packit Service 9ccfef
Packit Service 9ccfef
    if (fflush(f) || ferror(f)) {
Packit Service 9ccfef
	perror("smidump: write error");
Packit Service 9ccfef
	exit(1);
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    fclose(f);
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void fprintNameAndOid(FILE *f, SmiNode *smiNode, SmiNode *smiParentNode)
Packit Service 9ccfef
{
Packit Service 9ccfef
    unsigned int i;
Packit Service 9ccfef
    char         *idlModuleName;
Packit Service 9ccfef
Packit Service 9ccfef
    idlModuleName = getIdlModuleName(smiGetNodeModule(smiNode)->name);
Packit Service 9ccfef
Packit Service 9ccfef
    if (smiParentNode) {
Packit Service 9ccfef
	fprint(f, "::%s::%s::%s ",
Packit Service 9ccfef
	       idlModuleName, smiParentNode->name, smiNode->name);
Packit Service 9ccfef
    } else {
Packit Service 9ccfef
	fprint(f, "::%s::%s ", idlModuleName, smiNode->name);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    for (i = 0; i < smiNode->oidlen; i++) {
Packit Service 9ccfef
	fprint(f, "%s%u", i ? "." : "", smiNode->oid[i]);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    fprint(f, " ");
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void dumpOid(SmiModule *smiModule)
Packit Service 9ccfef
{
Packit Service 9ccfef
    SmiNode   *smiNode;
Packit Service 9ccfef
    SmiType   *smiType;
Packit Service 9ccfef
    FILE      *f;
Packit Service 9ccfef
Packit Service 9ccfef
    f = createFile(getIdlModuleName(smiModule->name), ".oid");
Packit Service 9ccfef
    if (! f) {
Packit Service 9ccfef
        return;
Packit Service 9ccfef
    }
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
Packit Service 9ccfef
	if (isGroup(smiNode)) {
Packit Service 9ccfef
            fprintNameAndOid(f, smiNode, NULL);
Packit Service 9ccfef
	    fprint(f, "Group not-accessible\n");
Packit Service 9ccfef
	    /* XXX what if the node is also of SMI_NODEKIND_MODULE ?? */
Packit Service 9ccfef
	    continue;
Packit Service 9ccfef
	}
Packit Service 9ccfef
Packit Service 9ccfef
	smiType = smiGetNodeType(smiNode);
Packit Service 9ccfef
	
Packit Service 9ccfef
	switch (smiNode->nodekind) {
Packit Service 9ccfef
	case SMI_NODEKIND_NODE:
Packit Service 9ccfef
	    if (current(smiNode->status)) {
Packit Service 9ccfef
		fprintNameAndOid(f, smiNode, NULL);
Packit Service 9ccfef
		fprint(f, "ASN1_ObjectIdentifier not-accessible\n");
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	    break;
Packit Service 9ccfef
	case SMI_NODEKIND_SCALAR:
Packit Service 9ccfef
	    if (smiType && current(smiNode->status)) {
Packit Service 9ccfef
		SmiNode *smiParentNode = smiGetParentNode(smiNode);
Packit Service 9ccfef
		fprintNameAndOid(f, smiNode, smiParentNode);
Packit Service 9ccfef
		fprint(f, "%s %s\n",
Packit Service 9ccfef
		       getBaseTypeString(smiType->basetype),
Packit Service 9ccfef
		       getAccessString(smiNode->access, 0));
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	    break;
Packit Service 9ccfef
	case SMI_NODEKIND_TABLE:
Packit Service 9ccfef
	    if (current(smiNode->status)) {
Packit Service 9ccfef
		fprintNameAndOid(f, smiNode, NULL);
Packit Service 9ccfef
		fprint(f, "Table not-accessible\n");
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	    break;
Packit Service 9ccfef
	case SMI_NODEKIND_ROW:
Packit Service 9ccfef
	    if (current(smiNode->status)) {
Packit Service 9ccfef
		fprintNameAndOid(f, smiNode, NULL);
Packit Service 9ccfef
		fprint(f, "TableEntry not-accessible\n");
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	    break;
Packit Service 9ccfef
	case SMI_NODEKIND_COLUMN:
Packit Service 9ccfef
	    if (smiType && current(smiNode->status)) {
Packit Service 9ccfef
		SmiNode *smiParentNode = smiGetParentNode(smiNode);
Packit Service 9ccfef
		int create = smiParentNode ? smiParentNode->create : 0;
Packit Service 9ccfef
		fprintNameAndOid(f, smiNode, smiParentNode);
Packit Service 9ccfef
		fprint(f, "%s %s\n",
Packit Service 9ccfef
		       getBaseTypeString(smiType->basetype),
Packit Service 9ccfef
		       getAccessString(smiNode->access, create));
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	    break;
Packit Service 9ccfef
	case SMI_NODEKIND_NOTIFICATION:
Packit Service 9ccfef
	    if (current(smiNode->status)) {
Packit Service 9ccfef
		SmiNode *smiParentNode = smiGetParentNode(smiNode);
Packit Service 9ccfef
		fprintNameAndOid(f, smiNode, smiParentNode);
Packit Service 9ccfef
		fprint(f, "Notification not-accessible\n");
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	    break;
Packit Service 9ccfef
	case SMI_NODEKIND_GROUP:
Packit Service 9ccfef
	    break;
Packit Service 9ccfef
	case SMI_NODEKIND_COMPLIANCE:
Packit Service 9ccfef
	    break;
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    dictFree(&idlModuleNameList);
Packit Service 9ccfef
Packit Service 9ccfef
    if (fflush(f) || ferror(f)) {
Packit Service 9ccfef
	perror("smidump: write error");
Packit Service 9ccfef
	exit(1);
Packit Service 9ccfef
    }
Packit Service 9ccfef
Packit Service 9ccfef
    fclose(f);
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static void dumpCorba(int modc, SmiModule **modv, int flags, char *output)
Packit Service 9ccfef
{
Packit Service 9ccfef
    int       i;
Packit Service 9ccfef
Packit Service 9ccfef
    silent = (flags & SMIDUMP_FLAG_SILENT);
Packit Service 9ccfef
Packit Service 9ccfef
    for (i = 0; i < modc; i++) {
Packit Service 9ccfef
	dumpIdl(modv[i]);
Packit Service 9ccfef
	dumpOid(modv[i]);
Packit Service 9ccfef
    }
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
void initCorba()
Packit Service 9ccfef
{
Packit Service 9ccfef
    
Packit Service 9ccfef
    static SmidumpDriver driver = {
Packit Service 9ccfef
	"corba",
Packit Service 9ccfef
	dumpCorba,
Packit Service 9ccfef
	0,
Packit Service 9ccfef
	SMIDUMP_DRIVER_CANT_UNITE | SMIDUMP_DRIVER_CANT_OUTPUT,
Packit Service 9ccfef
	"corba IDL interface and OID definitions (JIDM)",
Packit Service 9ccfef
	NULL,
Packit Service 9ccfef
	NULL
Packit Service 9ccfef
    };
Packit Service 9ccfef
    
Packit Service 9ccfef
    smidumpRegisterDriver(&driver);
Packit Service 9ccfef
}