add ENUMERATED and OBJECT IDENTIFIER

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@10741 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Assar Westerlund
2001-09-25 13:39:27 +00:00
parent 680399419e
commit 2bcae56ac3
18 changed files with 323 additions and 26 deletions

View File

@@ -90,6 +90,11 @@ init_generate (const char *filename, const char *base)
"typedef char *general_string;\n\n"
#endif
);
fprintf (headerfile,
"typedef struct oid {\n"
" size_t length;\n"
" unsigned *components;\n"
"} oid;\n\n");
fprintf (headerfile, "#endif\n\n");
logfile = fopen(STEM "_files", "w");
if (logfile == NULL)
@@ -140,6 +145,10 @@ define_asn1 (int level, Type *t)
space(level);
fprintf (headerfile, "OCTET STRING");
break;
case TOID :
space(level);
fprintf(headerfile, "OBJECT IDENTIFIER");
break;
case TBitString: {
Member *m;
int tag = -1;
@@ -158,6 +167,24 @@ define_asn1 (int level, Type *t)
fprintf (headerfile, "}");
break;
}
case TEnumerated : {
Member *m;
int tag = -1;
space(level);
fprintf (headerfile, "ENUMERATED {\n");
for (m = t->members; m && m->val != tag; m = m->next) {
if (tag == -1)
tag = m->val;
space(level + 1);
fprintf (headerfile, "%s(%d)%s\n", m->name, m->val,
m->next->val == tag?"":",");
}
space(level);
fprintf (headerfile, "}");
break;
}
case TSequence: {
Member *m;
int tag;
@@ -249,6 +276,10 @@ define_type (int level, char *name, Type *t, int typedefp)
space(level);
fprintf (headerfile, "octet_string %s;\n", name);
break;
case TOID :
space(level);
fprintf (headerfile, "oid %s;\n", name);
break;
case TBitString: {
Member *m;
Type i;
@@ -270,6 +301,23 @@ define_type (int level, char *name, Type *t, int typedefp)
fprintf (headerfile, "} %s;\n\n", name);
break;
}
case TEnumerated: {
Member *m;
int tag = -1;
space(level);
fprintf (headerfile, "enum %s {\n", typedefp ? name : "");
for (m = t->members; m && m->val != tag; m = m->next) {
if (tag == -1)
tag = m->val;
space(level + 1);
fprintf (headerfile, "%s = %d%s\n", m->gen_name, m->val,
m->next->val == tag ? "" : ",");
}
space(level);
fprintf (headerfile, "} %s;\n\n", name);
break;
}
case TSequence: {
Member *m;
int tag = -1;