#include <stdio.h>
#include "asn-incl.h"
#include "asn1module.h"
#include "oid.h"
#include "mem.h"
#include "define.h"
#include "lib-types.h"
#include "str-util.h"
#include "snacc-util.h"
#include "rules.h"
#include "gen-vals.h"
static void PrintIDLValueDefsName PROTO ((FILE *f, IDLRules *r, ValueDef *v));
void
PrintIDLValueDef PARAMS ((idl, r, v),
FILE *idl _AND_
IDLRules *r _AND_
ValueDef *v)
{
if ((v->value->basicValue->choiceId != BASICVALUE_OID) &&
(v->value->basicValue->choiceId != BASICVALUE_INTEGER) &&
(v->value->basicValue->choiceId != BASICVALUE_BOOLEAN))
return;
fprintf (idl, " const ");
PrintIDLValuesClass (idl, r, v->value);
fprintf (idl, " ");
PrintIDLValueDefsName (idl, r, v);
fprintf (idl, " = ");
PrintIDLValueInstatiation (idl, r, v->value);
fprintf (idl, ";\n\n");
}
static void
PrintIDLValueDefsName PARAMS ((f, r, v),
FILE *f _AND_
IDLRules *r _AND_
ValueDef *v)
{
char *cName;
cName = Asn1ValueName2CValueName (v->definedName);
fprintf (f, "%s", cName);
Free (cName);
}
void
PrintIDLValuesClass PARAMS ((f, r, v),
FILE *f _AND_
IDLRules *r _AND_
Value *v)
{
switch (v->basicValue->choiceId)
{
case BASICVALUE_OID:
fprintf (f, "%s", r->typeConvTbl[BASICTYPE_OID].typeName);
break;
case BASICVALUE_INTEGER:
fprintf (f, "%s", r->typeConvTbl[BASICTYPE_INTEGER].typeName);
break;
case BASICVALUE_BOOLEAN:
fprintf (f, "%s", r->typeConvTbl[BASICTYPE_BOOLEAN].typeName);
break;
default:
break;
}
}
void
PrintIDLValueInstatiation PARAMS ((f, r, v),
FILE *f _AND_
IDLRules *r _AND_
Value *v)
{
switch (v->basicValue->choiceId)
{
case BASICVALUE_OID:
PrintIDLOidValue (f, r, v->basicValue->a.oid);
break;
case BASICVALUE_INTEGER:
PrintIDLIntValue (f, r, v->basicValue->a.integer);
break;
case BASICVALUE_BOOLEAN:
fprintf (f, v->basicValue->a.boolean ? "TRUE" : "FALSE");
break;
default:
break;
}
}
void
PrintIDLOidValue PARAMS ((f, r, v),
FILE *f _AND_
IDLRules *r _AND_
AsnOid *v)
{
unsigned short int firstArcNum;
unsigned long int arcNum;
int i;
fprintf (f, "(");
for (arcNum = 0, i=0; (i < v->octetLen) && (v->octs[i] & 0x80);i++)
arcNum = (arcNum << 7) + (v->octs[i] & 0x7f);
arcNum = (arcNum << 7) + (v->octs[i] & 0x7f);
i++;
firstArcNum = arcNum/40;
if (firstArcNum > 2)
firstArcNum = 2;
fprintf (f, "%u, %u", firstArcNum, arcNum - (firstArcNum * 40));
for (; i < v->octetLen; )
{
for (arcNum = 0; (i < v->octetLen) && (v->octs[i] & 0x80);i++)
arcNum = (arcNum << 7) + (v->octs[i] & 0x7f);
arcNum = (arcNum << 7) + (v->octs[i] & 0x7f);
i++;
fprintf (f, ", %u", arcNum);
}
fprintf (f, ")");
}
void
PrintIDLIntValue PARAMS ((f, r, v),
FILE *f _AND_
IDLRules *r _AND_
AsnInt v)
{
fprintf (f, "%d", v);
}