|
|
1.1 root 1: /* main.c */
2:
3: #ifndef lint
4: static char *rcsid = "$Header: /f/osi/pepsy/RCS/main.c,v 7.0 90/07/01 19:54:21 mrose Exp $";
5: #endif
6:
7: /*
8: * $Header: /f/osi/pepsy/RCS/main.c,v 7.0 90/07/01 19:54:21 mrose Exp $
9: *
10: *
11: * $Log: main.c,v $
12: * Revision 7.0 90/07/01 19:54:21 mrose
13: * *** empty log message ***
14: *
15: */
16:
17: /*
18: * NOTICE
19: *
20: * Acquisition, use, and distribution of this module and related
21: * materials are subject to the restrictions of a license agreement.
22: * Consult the Preface in the User's Manual for the full terms of
23: * this agreement.
24: *
25: */
26:
27:
28: #include <stdio.h>
29: #include <ctype.h>
30: #include "config.h"
31: #ifdef PEPSY_REALS
32: #include <math.h>
33: #define F_SMALL (1.0e-10) /* How accurate should reals agree */
34: #endif
35: #include "psap.h"
36: #include "T1-types.h"
37: #include "T2-types.h"
38:
39:
40:
41: #include "test_table.h"
42: /* compactly generate the new item of data */
43: #define new(x) ((x *)calloc(1, sizeof (x)))
44:
45: #define NULLQB (struct qbuf *)0
46: char *fill();
47: static char *idname();
48: static char *clname();
49: static int prntbits();
50: static int pclen();
51: static int prntos();
52: static int prntstr();
53:
54: extern int print_pe();
55: extern modtyp _ZBIT_1;
56: extern char *bitstr2strb();
57: extern PE mkpelist(), mkpe();
58: extern OID mkoid();
59: extern struct type_UNIV_EXTERNAL *mkext();
60:
61: static int t_test = 1; /* Iteration of the test */
62:
63: #define NullParm ((char *) 0)
64: /*ARGSUSED*/
65: main(argc, argv)
66: int argc;
67: char **argv;
68: {
69: int i;
70: int succ, fail;
71:
72: succ = fail = 0;
73: for (i = MAXTCASE - 1; i >= 0; i--) {
74: if (t_case[i].tst_entry < 0)
75: continue;
76: for (t_test = t_case[i].tst_tests; t_test > 0; t_test--) {
77: if (ed_tst(i) < 0) {
78: (void) printf("Failed\n");
79: fail++;
80: } else
81: succ++;
82: }
83: }
84: if (fail > 0)
85: (void) printf("Failed\n");
86: (void) printf("Total %d = %d successes %d failures\n", fail + succ, succ, fail);
87:
88: }
89:
90: /*
91: * Perform a test of encoding/decoding on type number tynum
92: */
93: ed_tst(tynum)
94: int tynum;
95: {
96: PE pe;
97: char *parm1, *parm2;
98:
99: if (tynum < 0 || tynum >= MAXTCASE)
100: ferrd(1, "ed_tst illegal type %d\n", tynum);
101:
102:
103: if ((parm1 = fill(tynum)) == NULL) {
104: ferr(1, "calloc did not work\n");
105: }
106:
107: #define encode(tynum, x, parm) \
108: enc_f(t_case[tynum].tst_entry, &_ZT1_mod, (x), 1, 0, NULLCP, (parm))
109:
110: if (encode(tynum, &pe, parm1) == NOTOK) {
111: (void) printf("encode:failed on %s: %s\n", t_case[tynum].tst_name,
112: PY_pepy);
113: return(-1);
114: }
115:
116:
117: #define decode(tynum, x, parm) \
118: dec_f(t_case[tynum].tst_entry, &_ZT1_mod, (x), 1, (int *) 0, (char **)NULL, (parm))
119:
120: if (decode(tynum, pe, &parm2) == NOTOK) {
121: (void) printf("decode:failed on %s: %s\n", t_case[tynum].tst_name,
122: PY_pepy);
123: return (-2);
124: }
125:
126: if (tcmp(tynum, parm1, parm2)) {
127: (void) printf("%s: not transfered properly\n", t_case[tynum].tst_name);
128: return (-1);
129: }
130:
131: #if PRNT
132: #define print(tynum, x) \
133: prnt_f(t_case[tynum].tst_entry, &_ZT1_mod, (x), 1, (int *) 0, (char **)0)
134:
135: if (print(tynum, pe) == NOTOK) {
136: (void) printf("Print:failed on %s: %s\n", t_case[tynum].tst_name,
137: PY_pepy);
138: exit(2);
139: }
140: #endif
141:
142:
143:
144: #define fre_space(tynum, parm) \
145: fre_obj(parm, _ZT1_mod.md_dtab[t_case[tynum].tst_entry], &_ZT1_mod)
146:
147: fre_space(tynum, parm1);
148: fre_space(tynum, parm2);
149:
150: pe_free(pe);
151:
152: return (0);
153: }
154:
155: /*SUPPRESS 218*/
156: /*
157: * fill in some test data for the given type
158: */
159: char *
160: fill(tynum)
161: int tynum;
162: {
163: char *parm;
164: static int count;
165: int i;
166:
167: if ((parm = calloc(1, t_case[tynum].tst_size)) == NULL) {
168: ferr(1, "calloc did not work\n");
169: }
170:
171: switch (tynum) {
172: case TY_MPDU:
173: #define Xparm ((struct type_T1_MPDU *)parm)
174: if ((Xparm->a__seq = new(struct element_T1_1)) == NULL) {
175: (void) printf("calloc did not work\n");
176: return NULL;
177: }
178: Xparm->a__seq->fred = 10;
179: Xparm->a__seq->george = 1;
180: break;
181: #undef Xparm
182:
183: case TY_EMBEDDED:
184: #define Xparm ((struct type_T1_Embedded *)parm)
185: Xparm->anMPDU = (struct type_T1_MPDU *)fill(TY_MPDU);
186: Xparm->ei = 6966;
187: break;
188: #undef Xparm
189:
190: case TY_STRINGS:
191: #define Xparm ((struct type_T1_Strings *)parm)
192: Xparm->ostring = str2qb("12\376\0\377a6", 7, 1);
193: Xparm->bstring = strb2bitstr("\270\017\010\020\040\100", 50, 0, 0);
194: Xparm->nstring = str2qb("123456", 6, 1);
195: Xparm->pstring = str2qb("hello, world", 12, 1);
196: Xparm->tstring = str2qb("teletex", 7, 1);
197: Xparm->t61string = str2qb("T.61", 4, 1);
198: Xparm->vstring = str2qb("visible", 7, 1);
199: Xparm->vis__string = str2qb("visible again", 13, 1);
200: Xparm->i646string = str2qb("who knows what this is", 22, 1);
201: Xparm->ia5string = str2qb("This is ASCII\n\r", 15, 1);
202: Xparm->graphstring = str2qb("This is a graphic string", 24, 1);
203: Xparm->genstring = str2qb("This is a general string", 24, 1);
204: break;
205: #undef Xparm
206:
207: case TY_EMB_STRINGS:
208: #define Xparm ((struct type_T1_Emb__Strings *)parm)
209: Xparm->atest = 2001;
210: Xparm->ctest = strb2bitstr("\03\010\252\125", 24, 0, 0);
211: Xparm->btest = str2qb("Good bye", 8, 1);
212: Xparm->big__test = (struct type_T1_Strings *)fill(TY_STRINGS);
213: if ((Xparm->emb__test = new(struct element_T1_0)) == NULL) {
214: (void) printf("calloc did not work\n");
215: return NULL;
216: }
217: Xparm->emb__test->em__int = -101;
218: Xparm->emb__test->em__oct = str2qb("Embedded octet string", 21, 1);
219: Xparm->emb__test->em__bit = strb2bitstr("\377\252\125\370\01", 40, 0,0);
220: break;
221: #undef Xparm
222:
223: case TY_IMPLICIT:
224: #define Xparm ((struct type_T1_Impl__Tags *)parm)
225: Xparm->i__impl = -1;
226: Xparm->o__impl = str2qb("I'm an implicit tagged octet string", 36, 1);
227: Xparm->b__impl = strb2bitstr("\0\0\01\230\01", 40, 0, 0);
228: Xparm->f__impl = 0xff; /* True */
229: Xparm->obj__impl = (struct type_T1_Emb__Strings *)fill(TY_EMB_STRINGS);
230: if ((Xparm->i__emb__test = new(struct element_T1_2)) == NULL) {
231: (void) printf("calloc did not work\n");
232: return NULL;
233: }
234: Xparm->i__emb__test->i__em__int = -101;
235: Xparm->i__emb__test->i__em__oct = str2qb("Implicit Embedded", 18, 1);
236: Xparm->i__emb__test->i__em__bit = strb2bitstr("\200\200\200\200", 32, 0, 0);
237: #undef Xparm
238: break;
239:
240: case TY_EXPLICIT:
241: #define Xparm ((struct type_T1_Expl__Tags *)parm)
242: Xparm->i__expl = 35051;
243: Xparm->o__expl = str2qb("explicit tagged octet string", 28, 1);
244: Xparm->b__expl = strb2bitstr("\070\070\070\077", 32, 0, 0);
245: Xparm->f__expl = 0xf0; /* True */
246: Xparm->obj__expl = (struct type_T1_Emb__Strings *)fill(TY_EMB_STRINGS);
247: if ((Xparm->i__exp__test = new(struct element_T1_3)) == NULL) {
248: (void) printf("calloc did not work\n");
249: return NULL;
250: }
251: Xparm->i__exp__test->i__ex__int = -9;
252: Xparm->i__exp__test->i__ex__oct = str2qb("Explicit Embedded", 18, 1);
253: Xparm->i__exp__test->i__ex__bit = strb2bitstr("\03\03\03\03\277", 40, 0, 0);
254: #undef Xparm
255: break;
256:
257: case TY_SEQOF:
258: #define Xparm ((struct type_T1_Seqof__Test *)parm)
259: count = 2;
260: Xparm->sqof__test1 = (struct element_T1_4 *) fill(TY_ELEMENT4);
261: count = 2;
262: Xparm->stof__test1 = (struct member_T1_2 *) fill(TY_MEMBER2);
263: Xparm->i__test1 = 33;
264: count = 2;
265: Xparm->sqof__test2 = (struct element_T1_6 *) fill(TY_ELEMENT6);
266: count = 2;
267: Xparm->stof__test2 = (struct member_T1_4 *) fill(TY_MEMBER4);
268: Xparm->i__test2 = 99;
269: break;
270: #undef Xparm
271:
272: case TY_ELEMENT4:
273: #define Xparm ((struct element_T1_4 *)parm)
274: Xparm->element_T1_5 = (struct type_T1_Expl__Tags *)fill(TY_EXPLICIT);
275: if (count-- > 0)
276: Xparm->next = (struct element_T1_4 *) fill(TY_ELEMENT4);
277: else
278: Xparm->next = NULL;
279: break;
280: #undef Xparm
281:
282: case TY_MEMBER2:
283: #define Xparm ((struct member_T1_2 *)parm)
284: Xparm->member_T1_3 = (struct type_T1_Expl__Tags *)fill(TY_EXPLICIT);
285: if (count-- > 0)
286: Xparm->next = (struct member_T1_2 *) fill(TY_MEMBER2);
287: else
288: Xparm->next = NULL;
289: break;
290: #undef Xparm
291:
292: case TY_ELEMENT6:
293: #define Xparm ((struct element_T1_6 *)parm)
294: Xparm->element_T1_7 = (struct element_T1_8 *)fill(TY_ELEMENT8);
295: if (count-- > 0)
296: Xparm->next = (struct element_T1_6 *) fill(TY_ELEMENT6);
297: else
298: Xparm->next = NULL;
299: break;
300: #undef Xparm
301:
302: case TY_ELEMENT8:
303: #define Xparm ((struct element_T1_8 *)parm)
304: Xparm->sqof__in = (struct type_T1_Expl__Tags *)fill(TY_EXPLICIT);
305: Xparm->sqof__i = 212121;
306: Xparm->sqof__o = str2qb("Element8 Embedded", 18, 1);
307: break;
308: #undef Xparm
309:
310: case TY_MEMBER4:
311: #define Xparm ((struct member_T1_4 *)parm)
312: Xparm->member_T1_5 = (struct element_T1_9 *)fill(TY_ELEMENT9);
313: if (count-- > 0)
314: Xparm->next = (struct member_T1_4 *) fill(TY_MEMBER4);
315: else
316: Xparm->next = NULL;
317: break;
318: #undef Xparm
319:
320: case TY_ELEMENT9:
321: #define Xparm ((struct element_T1_9 *)parm)
322: Xparm->stof__in = (struct type_T1_Expl__Tags *)fill(TY_EXPLICIT);
323: Xparm->stof__i = -12345;
324: Xparm->stof__o = str2qb("XYZabcde Embedded", 18, 1);
325: break;
326: #undef Xparm
327:
328: case TY_CHOICE:
329: #define Xparm ((struct type_T1_Choice__Test *)parm)
330: Xparm->c1 = (struct choice_T1_0 *) fill(TY_CHOICE0);
331: Xparm->c2 = (struct choice_T1_1 *) fill(TY_CHOICE1);
332: Xparm->c3 = (struct choice_T1_2 *) fill(TY_CHOICE2);
333: Xparm->c4 = (struct element_T1_11 *) fill(TY_ELEMENT11);
334: break;
335: #undef Xparm
336:
337: case TY_CHOICE0:
338: #define Xparm ((struct choice_T1_0 *)parm)
339:
340: switch (Xparm->offset = (t_test + 10)%choice_T1_0_obj__c1 + 1) {
341: case choice_T1_0_i__c1:
342: Xparm->un.i__c1 = 10101;
343: break;
344:
345: case choice_T1_0_o__c1:
346: Xparm->un.o__c1 = str2qb("Andrew Worsley!!!", 18, 1);
347: break;
348:
349: case choice_T1_0_b__c1:
350: Xparm->un.b__c1 = strb2bitstr("\02\02\02\07\077", 40, 0, 0);
351: break;
352:
353: case choice_T1_0_f__c1:
354: Xparm->un.f__c1 = 0x11;
355: break;
356:
357: case choice_T1_0_obj__c1:
358: Xparm->un.obj__c1 = (struct type_T1_Emb__Strings *) fill(TY_EMB_STRINGS);
359: break;
360:
361: default:
362: ferrd(1, "TY_CHOICE0:illegal offset %d\n", Xparm->offset);
363: }
364: break;
365: #undef Xparm
366:
367: case TY_CHOICE1:
368: #define Xparm ((struct choice_T1_1 *)parm)
369:
370: switch (Xparm->offset = (t_test + 11)%choice_T1_1_obj__c2 + 1) {
371: case choice_T1_1_i__c2:
372: Xparm->un.i__c2 = 1212;
373: break;
374:
375: case choice_T1_1_o__c2:
376: Xparm->un.o__c2 = str2qb("Richard Worsley!!", 18, 1);
377: break;
378:
379: case choice_T1_1_b__c2:
380: Xparm->un.b__c2 = strb2bitstr("\02\01\01\07\077", 40, 0, 0);
381: break;
382:
383: case choice_T1_1_f__c2:
384: Xparm->un.f__c2 = 0x12;
385: break;
386:
387: case choice_T1_1_obj__c2:
388: Xparm->un.obj__c2 = (struct type_T1_Emb__Strings *) fill(TY_EMB_STRINGS);
389: break;
390:
391: default:
392: ferrd(1, "TY_CHOICE1:illegal offset %d\n", Xparm->offset);
393: }
394: break;
395: #undef Xparm
396:
397: case TY_CHOICE2:
398: #define Xparm ((struct choice_T1_2 *)parm)
399:
400: switch (Xparm->offset = (t_test + 12)%choice_T1_2_i__c3 + 1) {
401: case choice_T1_2_i__c3:
402: Xparm->un.i__c3 = 689364;
403: break;
404:
405: case choice_T1_2_seq__c3:
406: Xparm->un.seq__c3 = (struct element_T1_10 *) fill(TY_ELEMENT10);
407: break;
408:
409: case choice_T1_2_set__c3:
410: Xparm->un.set__c3 = (struct member_T1_6 *) fill(TY_MEMBER6);
411: break;
412:
413: default:
414: ferrd(1, "TY_CHOICE2:illegal offset %d\n", Xparm->offset);
415: }
416: break;
417: #undef Xparm
418:
419: case TY_CHOICE3:
420: #define Xparm ((struct choice_T1_3 *)parm)
421:
422: switch (Xparm->offset = (t_test + 13)%choice_T1_3_sc__b__i + 1) {
423: case choice_T1_3_sc__a__i:
424: Xparm->un.sc__a__i = 16891;
425: break;
426:
427: case choice_T1_3_sc__b__i:
428: Xparm->un.sc__b__i = 13151;
429: break;
430:
431: case choice_T1_3_c4__i:
432: Xparm->un.c4__i = 10938;
433: break;
434:
435: case choice_T1_3_c4__obj:
436: Xparm->un.c4__obj = (struct type_T1_Expl__Tags *) fill(TY_EXPLICIT);
437: break;
438:
439: default:
440: ferrd(1, "TY_CHOICE3:illegal offset %d\n", Xparm->offset);
441: }
442: break;
443: #undef Xparm
444:
445: case TY_ELEMENT10:
446: #define Xparm ((struct element_T1_10 *)parm)
447: Xparm->seq__c3__in = (struct type_T1_Expl__Tags *) fill(TY_EXPLICIT);
448: Xparm->seq__c3__i = 40938;
449: Xparm->seq__c3__o = str2qb("James Worsley!!!!", 18, 1);
450: break;
451: #undef Xparm
452:
453: case TY_MEMBER6:
454: #define Xparm ((struct member_T1_6 *)parm)
455: Xparm->set__c3__in = (struct type_T1_Expl__Tags *) fill(TY_EXPLICIT);
456: Xparm->set__c3__i = 0x40938;
457: Xparm->set__c3__o = str2qb("Patrick Worsley!!", 18, 1);
458: break;
459: #undef Xparm
460:
461: case TY_ELEMENT11:
462: #define Xparm ((struct element_T1_11 *)parm)
463: Xparm->c4__choice = (struct choice_T1_3 *) fill(TY_CHOICE3);
464: break;
465: #undef Xparm
466:
467: case TY_OPTIONAL:
468: #define Xparm ((struct type_T1_Opt__Strings *)parm)
469: if (t_test & opt_T1_Opt__Strings_a__opt) {
470: Xparm->optionals |= opt_T1_Opt__Strings_a__opt;
471: Xparm->a__opt = 192837;
472: }
473: if (t_test & opt_T1_Opt__Strings_d__opt) {
474: Xparm->optionals |= opt_T1_Opt__Strings_d__opt;
475: Xparm->d__opt = 1;
476: }
477: Xparm->b__opt = str2qb("Susan Hannah Sibel", 19, 1);
478: if (t_test*(t_test + 1) & opt_T1_Opt__Strings_d__opt) {
479: Xparm->c__opt = strb2bitstr("\012\017\02\07\077", 40, 0, 0);
480: }
481: if (t_test & opt_T1_Opt__Strings_e__opt) {
482: Xparm->optionals |= opt_T1_Opt__Strings_e__opt;
483: Xparm->e__opt = 0;
484: }
485: if ((t_test + 12)*t_test & opt_T1_Opt__Strings_a__opt) {
486: Xparm->big__opt = (struct type_T1_Strings *) fill(TY_STRINGS);
487: }
488: if ((t_test + 2)*t_test & opt_T1_Opt__Strings_a__opt) {
489: Xparm->emb__opt = (struct element_T1_12 *) fill(TY_ELEMENT12);
490: }
491: if ((t_test + 4)*t_test & opt_T1_Opt__Strings_a__opt) {
492: Xparm->st__opt = (struct member_T1_7 *) fill(TY_MEMBER7);
493: }
494: if ((t_test + 8)*t_test & opt_T1_Opt__Strings_a__opt) {
495: Xparm->obj__opt = (struct type_T1_MPDU *) fill(TY_MPDU);
496: }
497: if (t_test & opt_T1_Opt__Strings_etag__opt) {
498: Xparm->optionals |= opt_T1_Opt__Strings_etag__opt;
499: Xparm->etag__opt = 2983461;
500: }
501: if ((t_test + 6)*t_test & opt_T1_Opt__Strings_a__opt) {
502: Xparm->ch__opt = (struct choice_T1_4 *) fill(TY_CHOICE4);
503: }
504: break;
505: #undef Xparm
506:
507: case TY_ELEMENT12:
508: #define Xparm ((struct element_T1_12 *)parm)
509: if ((t_test + 10)*t_test & opt_T1_element_T1_12_oem__int) {
510: Xparm->optionals |= opt_T1_element_T1_12_oem__int;
511: Xparm->oem__int = 197336;
512: }
513: if (t_test*(t_test + 22) & opt_T1_Opt__Strings_a__opt) {
514: Xparm->oem__oct = str2qb("Ling Worsley", 13, 1);
515: }
516: if (t_test*(t_test + 16) & opt_T1_Opt__Strings_d__opt) {
517: Xparm->oem__bit = strb2bitstr("\0142\0117\02\017\07", 40, 0, 0);
518: }
519: break;
520: #undef Xparm
521:
522: case TY_MEMBER7:
523: #define Xparm ((struct member_T1_7 *)parm)
524: if ((t_test + 12)*t_test & opt_T1_member_T1_7_st__int0) {
525: Xparm->optionals |= opt_T1_member_T1_7_st__int0;
526: Xparm->st__int0 = 85659;
527: }
528: if ((t_test + 12)*t_test & opt_T1_member_T1_7_st__int1) {
529: Xparm->optionals |= opt_T1_member_T1_7_st__int1;
530: Xparm->st__int1 = 664388;
531: }
532: if ((t_test + 12)*t_test & opt_T1_member_T1_7_st__int2) {
533: Xparm->optionals |= opt_T1_member_T1_7_st__int2;
534: Xparm->st__int2 = 967768;
535: }
536: break;
537: #undef Xparm
538:
539: case TY_CHOICE4:
540: #define Xparm ((struct choice_T1_4 *)parm)
541:
542: switch (Xparm->offset = (t_test + 14)%choice_T1_4_ch__2 + 1) {
543: case choice_T1_4_ch__1:
544: Xparm->un.ch__1 = 74576;
545: break;
546:
547: case choice_T1_4_ch__2:
548: Xparm->un.ch__2 = 28828;
549: break;
550:
551: default:
552: ferrd(1, "TY_CHOICE4:illegal offset %d\n", Xparm->offset);
553: }
554: break;
555: #undef Xparm
556:
557: case TY_EXTREF:
558: #define Xparm ((struct type_T1_E__ref *)parm)
559: Xparm->a__ref = (struct type_T2_Info *) fill(TY_T2_INFO);
560: Xparm->b__ref = (struct type_T2_Info *) fill(TY_T2_INFO);
561: Xparm->c__ref = (struct type_T1_Choice__Test *) fill(TY_CHOICE);
562: if ((t_test + 20)*t_test & 0x2) {
563: Xparm->d__ref = (struct type_T2_Info *) fill(TY_T2_INFO);
564: }
565: if ((t_test + 20)*t_test & 0x1) {
566: Xparm->e__ref = (struct type_T2_Info *) fill(TY_T2_INFO);
567: }
568: break;
569: #undef Xparm
570:
571: case TY_T2_INFO:
572: #define Xparm ((struct type_T2_Info *)parm)
573: Xparm->a1 = 101910;
574: Xparm->a2 = -304985;
575: Xparm->a3 = 13;
576: Xparm->a4 = (struct type_T2_MPDU *) fill(TY_T2_MPDU);
577: break;
578: #undef Xparm
579:
580: case TY_T2_MPDU:
581: #define Xparm ((struct type_T2_MPDU *)parm)
582: Xparm->a__seq = (struct element_T2_0 *) fill(TY_T2_ELEM0);
583: break;
584: #undef Xparm
585:
586: case TY_T2_ELEM0:
587: #define Xparm ((struct element_T2_0 *)parm)
588: Xparm->fred = 998877;
589: break;
590: #undef Xparm
591:
592: case TY_OPTIMISED:
593: #define Xparm ((struct type_T1_Optimised *)parm)
594: Xparm->o1 = strb2bitstr("\0241\0227\032\011\0237", 40, 0, 0);
595: Xparm->o2 = str2qb("Peckling Worsley!!!!", 20, 1);
596: Xparm->o3 = (struct type_T1_MPDU *) fill(TY_MPDU);
597: Xparm->o4 = (PE ) mkpelist(t_test);
598: Xparm->element_T1_14 = (struct member_T1_9 *) fill(TY_MEMBER9);
599: break;
600: #undef Xparm
601:
602: case TY_MEMBER9:
603: #define Xparm ((struct member_T1_9 *)parm)
604: Xparm->o5 = mkpelist(t_test);
605: Xparm->o6 = mkpelist(t_test);
606: Xparm->o7 = mkoid(t_test);
607: break;
608: #undef Xparm
609:
610: case TY_EXTERNAL:
611: #define Xparm ((struct type_T1_Ext__typ *)parm)
612: Xparm->ext = mkext(t_test*8 + 1);
613: Xparm->a__ny = mkpe(t_test*8 + 1);
614: Xparm->ext__impl = mkext(t_test*6 + 1);
615: Xparm->any__impl = mkpe(t_test*8 + 3);
616: Xparm->ext__expl = mkext(t_test*4 + 1);
617: Xparm->any__expl = mkpe(t_test*8 + 5);
618: break;
619: #undef Xparm
620:
621: case TY_SEXTERNAL:
622: #define Xparm ((struct type_T1_SExt *)parm)
623: free(parm); /* don't need it */
624: Xparm = mkext(21);
625: break;
626: #undef Xparm
627:
628: case TY_ETAGOBJ:
629: #define Xparm ((struct type_T1_Etags *)parm)
630: switch (Xparm->offset = (t_test + 4)%type_T1_Etags_bE + 1) {
631: case type_T1_Etags_aE:
632: Xparm->un.aE = 10283;
633: break;
634:
635: case type_T1_Etags_bE:
636: Xparm->un.bE = 40986;
637: break;
638:
639: default:
640: ferrd(1, "TY_ETAGOBJ:illegal offset %d\n", Xparm->offset);
641: }
642: break;
643: #undef Xparm
644:
645: /* This has to be changed when posy is upgraded to handle DEFAULTS properly */
646: case TY_DEFAULT:
647: #define Xparm ((struct type_T1_Def__Strings *)parm)
648: if (t_test*t_test & 2)
649: Xparm->a__def = int_T1_a__def_a__def__0;
650: else
651: Xparm->a__def = int_T1_a__def_a__def__1;
652: if (t_test*t_test & 4)
653: Xparm->b__def = str2qb("Susan Sibel !!!!", 17, 1);
654: else if (t_test*t_test & 8)
655: Xparm->b__def = str2qb("hello, world", 12, 1);
656: else
657: Xparm->b__def = NULLQB;
658: if (t_test*t_test & 8)
659: Xparm->c__def = strb2bitstr(int2strb(bit_T1_c__def_c__def__two, 9),
660: 9, 0, 0);
661: else
662: Xparm->c__def = NULLPE;
663: if (t_test*t_test & 0x10)
664: Xparm->okay = 0;
665: else
666: Xparm->okay = 1;
667: if (t_test*t_test & 0x20)
668: Xparm->e__def = 0;
669: else
670: Xparm->e__def = 1;
671: Xparm->big__def = (struct type_T1_Strings *) fill(TY_STRINGS);
672: if (t_test*t_test*t_test & 0x10)
673: Xparm->emb__def = NULL;
674: else
675: Xparm->emb__def = (struct element_T1_13 *) fill(TY_ELEMENT13);
676: if (t_test*t_test*t_test & 0x20)
677: Xparm->st__def = NULL;
678: else
679: Xparm->st__def = (struct member_T1_8 *) fill(TY_MEMBER8);
680: break;
681: #undef Xparm
682:
683: case TY_ELEMENT13:
684: #define Xparm ((struct element_T1_13 *)parm)
685: if (t_test*t_test*t_test & 1)
686: Xparm->colour = int_T1_colour_green;
687: else
688: Xparm->colour = int_T1_colour_red;
689: if (t_test*t_test & 040)
690: Xparm->oem__oct = str2qb("Julia Dzuikas !!!!", 19, 1);
691: else
692: Xparm->oem__oct = NULLQB;
693: if (t_test*t_test*t_test & 2)
694: Xparm->version = strb2bitstr(int2strb((1 << bit_T1_version_basic)
695: |(1 << bit_T1_version_patch1), 3),
696: 3, 0, 0);
697: else
698: Xparm->version = strb2bitstr(int2strb((1 << bit_T1_version_basic),
699: 3), 3, 0, 0);
700: break;
701: #undef Xparm
702:
703: case TY_MEMBER8:
704: #define Xparm ((struct member_T1_8 *)parm)
705: if (t_test*t_test*t_test & 4)
706: Xparm->wine = int_T1_wine_burgundy;
707: else
708: Xparm->wine = int_T1_wine_claret;
709: if (t_test*t_test*t_test & 010)
710: Xparm->beer = int_T1_beer_vb;
711: else
712: Xparm->beer = int_T1_beer_hieneken;
713: if (t_test*t_test*t_test & 020)
714: Xparm->spirit = int_T1_spirit_vodka;
715: else
716: Xparm->spirit = int_T1_spirit_brandy;
717: break;
718: #undef Xparm
719:
720: case TY_STEST:
721: #define Xparm ((struct type_T1_Stest *)parm)
722: if (t_test*(t_test + 2)*t_test & 4)
723: Xparm->st1 = (struct type_T1_Sint *)fill(TY_SINT);
724: else
725: Xparm->st1 = (struct type_T1_Sint *)NULL;
726: if (t_test*(t_test + 2)*t_test & 010)
727: Xparm->st2 = str2qb("goodbye, world", 14, 1);
728: else
729: Xparm->st2 = str2qb("xxxxxxx, world", 14, 1);
730: break;
731: #undef Xparm
732:
733: case TY_SINT:
734: #define Xparm ((struct type_T1_Sint *)parm)
735: if (t_test*(t_test + 4)*t_test & 4)
736: Xparm->parm = 33;
737: else
738: Xparm->parm = 44;
739: break;
740: #undef Xparm
741:
742: case TY_ETYPE:
743: #define Xparm ((struct type_T1_Enum__type *)parm)
744: switch (t_test & 3) {
745: case 0:
746: Xparm->parm = int_T1_Enum__type_pork;
747: break;
748:
749: case 1:
750: Xparm->parm = int_T1_Enum__type_beef;
751: break;
752:
753:
754: case 2:
755: Xparm->parm = int_T1_Enum__type_chicken;
756: break;
757:
758:
759: case 3:
760: Xparm->parm = int_T1_Enum__type_lamb;
761: break;
762:
763: default:
764: ferrd(1, "fill:ETYPE: Self consistency failure\n", t_test);
765: }
766: break;
767: #undef Xparm
768:
769: case TY_ENUM_TEST:
770: #define Xparm ((struct type_T1_T__enum *)parm)
771: i = t_test;
772: Xparm->ae1 = (struct type_T1_Enum__type *)fill(TY_ETYPE);
773: t_test++;
774: Xparm->ae2 = (struct type_T1_Enum__type *)fill(TY_ETYPE);
775: t_test++;
776: Xparm->ae3 = (struct type_T1_Enum__type *)fill(TY_ETYPE);
777: t_test++;
778: if (t_test & 1)
779: Xparm->ae5 = (struct type_T1_Enum__type *)fill(TY_ETYPE);
780: Xparm->ae4 = (struct type_T1_Enum__type *)fill(TY_ETYPE);
781: t_test++;
782: if (t_test & 2)
783: Xparm->ae4->parm = int_T1_Enum__type_chicken; /* Default */
784: t_test = i;
785: break;
786: #undef Xparm
787:
788: #ifdef PEPSY_REALS
789: case TY_REAL:
790: #define Xparm ((struct type_T1_Real *)parm)
791: switch (t_test % 3) {
792: case 0:
793: Xparm->parm = -2.28789;
794: break;
795:
796: case 1:
797: Xparm->parm = 927639.98009;
798: break;
799:
800: case 2:
801: Xparm->parm = 0.0;
802: break;
803:
804: default:
805: ferrd(1, "fill:TY_REAL:Internal error %d\n", t_test);
806: }
807: break;
808: #undef Xparm
809:
810: case TY_REAL_TEST:
811: #define Xparm ((struct type_T1_T__real *)parm)
812: i = t_test;
813: Xparm->r1 = (struct type_T1_Real *) fill(TY_REAL);
814: t_test++;
815: Xparm->r2 = (struct type_T1_Real *) fill(TY_REAL);
816: t_test++;
817: Xparm->r3 = (struct type_T1_Real *) fill(TY_REAL);
818: t_test++;
819:
820: Xparm->r4 = (struct type_T1_Real *) fill(TY_REAL);
821: t_test++;
822: if (i & 1) /* Default */
823: Xparm->r4->parm = 3.1415962;
824:
825: if (i & 2) { /* Optional */
826: Xparm->r4 = (struct type_T1_Real *) fill(TY_REAL);
827: }
828: t_test = i;
829: break;
830: #undef Xparm
831:
832: #endif
833:
834: default:
835: ferrd(1, "fill:unknown type %d\n", tynum);
836: }
837:
838: return (parm);
839: }
840:
841: #if 0
842: /*
843: * encode each given type
844: */
845: encode(tynum, ppe, parm)
846: int tynum;
847: PE *ppe;
848: char *parm;
849: {
850: int d;
851:
852: switch (tynum) {
853: case TY_MPDU:
854: d = encode_T1_MPDU(ppe, 1, NULLVP, NULLCP, parm);
855: break;
856:
857: case TY_EMBEDDED:
858: d = encode_T1_Embedded(ppe, 1, NULLVP, NULLCP, parm);
859: break;
860:
861: case TY_STRINGS:
862: d = encode_T1_Strings(ppe, 1, NULLVP, NULLCP, parm);
863: break;
864:
865: case TY_EMB_STRINGS:
866: d = encode_T1_Emb__Strings(ppe, 1, NULLVP, NULLCP, parm);
867: break;
868:
869: case TY_IMPLICIT:
870: d = encode_T1_Impl__Tags(ppe, 1, NULLVP, NULLCP, parm);
871: break;
872:
873: case TY_EXPLICIT:
874: d = encode_T1_Expl__Tags(ppe, 1, NULLVP, NULLCP, parm);
875: break;
876:
877: case TY_EXTERNAL:
878: d = encode_T1_E__ref(ppe, 1, NULLVP, NULLCP, parm);
879: break;
880:
881: default:
882: ferrd(1, "encode:unknown type\n", tynum);
883: }
884: if (d == NOTOK) {
885: (void) printf("encode:failed on %s\n", t_case[tynum].tst_name);
886: exit(1);
887: }
888: }
889:
890: /*
891: * decode each given type
892: */
893: decode(tynum, pe, parm)
894: int tynum;
895: PE pe;
896: char **parm;
897: {
898: int d;
899:
900: switch (tynum) {
901: case TY_MPDU:
902: d = decode_T1_MPDU(pe, 1, NULLVP, NULLCP, parm);
903: break;
904:
905: case TY_EMBEDDED:
906: d = decode_T1_Embedded(pe, 1, NULLVP, NULLCP, parm);
907: break;
908:
909: case TY_STRINGS:
910: d = decode_T1_Strings(pe, 1, NULLVP, NULLCP, parm);
911: break;
912:
913: case TY_EMB_STRINGS:
914: d = decode_T1_Emb__Strings(pe, 1, NULLVP, NULLCP, parm);
915: break;
916:
917: case TY_IMPLICIT:
918: d = decode_T1_Impl__Tags(pe, 1, NULLVP, NULLCP, parm);
919: break;
920:
921: case TY_EXPLICIT:
922: d = decode_T1_Expl__Tags(pe, 1, NULLVP, NULLCP, parm);
923: break;
924:
925: case TY_EXTERNAL:
926: d = decode_T1_E__ref(pe, 1, NULLVP, NULLCP, parm);
927: break;
928: default:
929: ferrd(1, "decode:unknown type\n", tynum);
930: }
931: if (d == NOTOK) {
932: (void) printf("decode:failed on %s\n", t_case[tynum].tst_name);
933: exit(2);
934: }
935: }
936: #endif
937:
938: /*
939: * compare two structures for differences of fields indicating an
940: * error
941: */
942: tcmp(tynum, parm1, parm2)
943: int tynum;
944: char *parm1, *parm2;
945: {
946: int d;
947: d = 0;
948:
949: switch (tynum) {
950: case TY_MPDU:
951: #define Xparm1 ((struct type_T1_MPDU *)parm1)
952: #define Xparm2 ((struct type_T1_MPDU *)parm2)
953: if (Xparm1->a__seq && !Xparm2->a__seq
954: || !Xparm1->a__seq && Xparm2->a__seq) {
955: (void) printf("a__seq missing/present\n");
956: d++;
957: }
958: if (Xparm1->a__seq && Xparm2->a__seq) {
959: if (Xparm1->a__seq->fred != Xparm2->a__seq->fred) {
960: (void) printf("%s->a__seq->fred %d != %d\n",
961: Xparm1->a__seq->fred, Xparm2->a__seq->fred);
962: d++;
963: }
964: if (Xparm1->a__seq->george != Xparm2->a__seq->george) {
965: (void) printf("%s a__seq->george %d != %d\n", t_case[tynum].tst_name,
966: Xparm1->a__seq->george, Xparm2->a__seq->george);
967: d++;
968: }
969: }
970: break;
971: #undef Xparm1
972: #undef Xparm2
973:
974: case TY_EMBEDDED:
975: #define Xparm1 ((struct type_T1_Embedded *)parm1)
976: #define Xparm2 ((struct type_T1_Embedded *)parm2)
977: if (Xparm1->anMPDU && !Xparm2->anMPDU ||!Xparm1->anMPDU && Xparm2->anMPDU) {
978: (void) printf("anMPDU missing/present\n");
979: d++;
980: }
981: if (Xparm1->anMPDU && Xparm2->anMPDU) {
982: d += tcmp(TY_MPDU, (char *)Xparm1->anMPDU, (char *)Xparm2->anMPDU);
983: }
984: if (Xparm1->ei != Xparm2->ei) {
985: (void) printf("%s ei %d != %d\n",
986: t_case[tynum].tst_name, Xparm1->ei, Xparm2->ei);
987: d++;
988: }
989: break;
990: #undef Xparm1
991: #undef Xparm2
992:
993: case TY_STRINGS:
994: #define Xparm1 ((struct type_T1_Strings *)parm1)
995: #define Xparm2 ((struct type_T1_Strings *)parm2)
996: if (qb_cmp(Xparm1->ostring, Xparm2->ostring)) {
997: (void) printf("ostring octet string different\n");
998: d++;
999: }
1000: if (bit_cmp(Xparm1->bstring, Xparm2->bstring)) {
1001: (void) printf("bstring bitstring different\n");
1002: d++;
1003: }
1004: if (qb_cmp(Xparm1->nstring, Xparm2->nstring)) {
1005: (void) printf("nstring octet string different\n");
1006: d++;
1007: }
1008: if (qb_cmp(Xparm1->pstring, Xparm2->pstring)) {
1009: (void) printf("pstring octet string different\n");
1010: d++;
1011: }
1012: if (qb_cmp(Xparm1->tstring, Xparm2->tstring)) {
1013: (void) printf("tstring octet string different\n");
1014: d++;
1015: }
1016: if (qb_cmp(Xparm1->t61string, Xparm2->t61string)) {
1017: (void) printf("t61string octet string different\n");
1018: d++;
1019: }
1020: if (qb_cmp(Xparm1->vstring, Xparm2->vstring)) {
1021: (void) printf("vstring octet string different\n");
1022: d++;
1023: }
1024: if (qb_cmp(Xparm1->vis__string, Xparm2->vis__string)) {
1025: (void) printf("vis__string octet string different\n");
1026: d++;
1027: }
1028: if (qb_cmp(Xparm1->i646string, Xparm2->i646string)) {
1029: (void) printf("i646string octet string different\n");
1030: d++;
1031: }
1032: if (qb_cmp(Xparm1->ia5string, Xparm2->ia5string)) {
1033: (void) printf("ia5string octet string different\n");
1034: d++;
1035: }
1036: if (qb_cmp(Xparm1->graphstring, Xparm2->graphstring)) {
1037: (void) printf("graphstring octet string different\n");
1038: d++;
1039: }
1040: if (qb_cmp(Xparm1->genstring, Xparm2->genstring)) {
1041: (void) printf("genstring octet string different\n");
1042: d++;
1043: }
1044: break;
1045: #undef Xparm1
1046: #undef Xparm2
1047:
1048: case TY_EMB_STRINGS:
1049: #define Xparm1 ((struct type_T1_Emb__Strings *)parm1)
1050: #define Xparm2 ((struct type_T1_Emb__Strings *)parm2)
1051: if (qb_cmp(Xparm1->btest, Xparm2->btest)) {
1052: (void) printf("btest octet string different\n");
1053: d++;
1054: }
1055: if (bit_cmp(Xparm1->ctest, Xparm2->ctest)) {
1056: (void) printf("ctest bitstring different\n");
1057: d++;
1058: }
1059: if (Xparm1->atest != Xparm2->atest) {
1060: (void) printf("atest integers different\n");
1061: d++;
1062: }
1063: if (Xparm1->big__test && Xparm2->big__test) {
1064: d += tcmp(TY_STRINGS, (char *)Xparm1->big__test, (char *)Xparm2->big__test);
1065: } else if (Xparm1->big__test || Xparm2->big__test) {
1066: (void) printf("big__test one Strings missing!\n");
1067: d++;
1068: }
1069: if (qb_cmp(Xparm1->emb__test->em__oct, Xparm2->emb__test->em__oct)) {
1070: (void) printf("emb__test->em__oct octet string different\n");
1071: d++;
1072: }
1073: if (bit_cmp(Xparm1->emb__test->em__bit, Xparm2->emb__test->em__bit)) {
1074: (void) printf("emb__test->em__bit bitstring different\n");
1075: d++;
1076: }
1077: if (Xparm1->emb__test->em__int != Xparm2->emb__test->em__int) {
1078: (void) printf("emb__test->em__int integers different\n");
1079: d++;
1080: }
1081: break;
1082: #undef Xparm1
1083: #undef Xparm2
1084:
1085: case TY_IMPLICIT:
1086: #define Xparm1 ((struct type_T1_Impl__Tags *)parm1)
1087: #define Xparm2 ((struct type_T1_Impl__Tags *)parm2)
1088: if (qb_cmp(Xparm1->o__impl, Xparm2->o__impl)) {
1089: (void) printf("o__impl octet string different\n");
1090: d++;
1091: }
1092: if (bit_cmp(Xparm1->b__impl, Xparm2->b__impl)) {
1093: (void) printf("b__impl bitstring different\n");
1094: d++;
1095: }
1096: if (Xparm1->i__impl != Xparm2->i__impl) {
1097: (void) printf("i__impl integers different\n");
1098: d++;
1099: }
1100: if (Xparm1->obj__impl && Xparm2->obj__impl) {
1101: d += tcmp(TY_EMB_STRINGS, (char *)Xparm1->obj__impl, (char *)Xparm2->obj__impl);
1102: } else if (Xparm1->obj__impl || Xparm2->obj__impl) {
1103: (void) printf("obj__impl one Embedded Strings missing!\n");
1104: d++;
1105: }
1106: if (qb_cmp(Xparm1->i__emb__test->i__em__oct, Xparm2->i__emb__test->i__em__oct)) {
1107: (void) printf("i__emb__test->i__em__oct octet string different\n");
1108: d++;
1109: }
1110: if (bit_cmp(Xparm1->i__emb__test->i__em__bit, Xparm2->i__emb__test->i__em__bit)) {
1111: (void) printf("i__emb__test->i__em__bit bitstring different\n");
1112: d++;
1113: }
1114: if (Xparm1->i__emb__test->i__em__int != Xparm2->i__emb__test->i__em__int) {
1115: (void) printf("i__emb__test->i__em__int integers different\n");
1116: d++;
1117: }
1118: #undef Xparm1
1119: #undef Xparm2
1120: break;
1121:
1122: case TY_EXPLICIT:
1123: #define Xparm1 ((struct type_T1_Expl__Tags *)parm1)
1124: #define Xparm2 ((struct type_T1_Expl__Tags *)parm2)
1125: if (qb_cmp(Xparm1->o__expl, Xparm2->o__expl)) {
1126: (void) printf("o__expl octet string different\n");
1127: d++;
1128: }
1129: if (bit_cmp(Xparm1->b__expl, Xparm2->b__expl)) {
1130: (void) printf("b__expl bitstring different\n");
1131: d++;
1132: }
1133: if (Xparm1->i__expl != Xparm2->i__expl) {
1134: (void) printf("i__expl integers different\n");
1135: d++;
1136: }
1137: if (Xparm1->obj__expl && Xparm2->obj__expl) {
1138: d += tcmp(TY_EMB_STRINGS, (char *)Xparm1->obj__expl, (char *)Xparm2->obj__expl);
1139: } else if (Xparm1->obj__expl || Xparm2->obj__expl) {
1140: (void) printf("obj__expl one Embedded Strings missing!\n");
1141: d++;
1142: }
1143: if (qb_cmp(Xparm1->i__exp__test->i__ex__oct, Xparm2->i__exp__test->i__ex__oct)) {
1144: (void) printf("i__exp__test->i__ex__oct octet string different\n");
1145: d++;
1146: }
1147: if (bit_cmp(Xparm1->i__exp__test->i__ex__bit, Xparm2->i__exp__test->i__ex__bit)) {
1148: (void) printf("i__exp__test->i__ex__bit bitstring different\n");
1149: d++;
1150: }
1151: if (Xparm1->i__exp__test->i__ex__int != Xparm2->i__exp__test->i__ex__int) {
1152: (void) printf("i__exp__test->i__ex__int integers different\n");
1153: d++;
1154: }
1155: #undef Xparm1
1156: #undef Xparm2
1157: break;
1158:
1159:
1160: case TY_SEQOF:
1161: #define Xparm1 ((struct type_T1_Seqof__Test *)parm1)
1162: #define Xparm2 ((struct type_T1_Seqof__Test *)parm2)
1163: if (Xparm1->sqof__test1 && Xparm2->sqof__test1) {
1164: d += tcmp(TY_ELEMENT4, (char *)Xparm1->sqof__test1, (char *)Xparm2->sqof__test1);
1165: } else if (Xparm1->sqof__test1 || Xparm2->sqof__test1) {
1166: (void) printf("sqof__test1 one missing");
1167: d++;
1168: }
1169: if (Xparm1->stof__test1 && Xparm2->stof__test1) {
1170: d += tcmp(TY_MEMBER2, (char *)Xparm1->stof__test1, (char *)Xparm2->stof__test1);
1171: } else if (Xparm1->stof__test1 || Xparm2->stof__test1) {
1172: (void) printf("stof__test1 one missing");
1173: d++;
1174: }
1175: if (Xparm1->i__test1 != Xparm2->i__test1) {
1176: (void) printf("i__test1 integers different\n");
1177: d++;
1178: }
1179: if (Xparm1->sqof__test2 && Xparm2->sqof__test2) {
1180: d += tcmp(TY_ELEMENT6, (char *)Xparm1->sqof__test2, (char *)Xparm2->sqof__test2);
1181: } else if (Xparm1->sqof__test2 || Xparm2->sqof__test2) {
1182: (void) printf("sqof__test2 one missing");
1183: d++;
1184: }
1185: if (Xparm1->stof__test2 && Xparm2->stof__test2) {
1186: d += tcmp(TY_MEMBER4, (char *)Xparm1->stof__test2, (char *)Xparm2->stof__test2);
1187: } else if (Xparm1->stof__test2 || Xparm2->stof__test2) {
1188: (void) printf("stof__test2 one missing");
1189: d++;
1190: }
1191: if (Xparm1->i__test2 != Xparm2->i__test2) {
1192: (void) printf("i__test2 integers different\n");
1193: d++;
1194: }
1195: break;
1196: #undef Xparm1
1197: #undef Xparm2
1198:
1199: case TY_ELEMENT4:
1200: #define Xparm1 ((struct element_T1_4 *)parm1)
1201: #define Xparm2 ((struct element_T1_4 *)parm2)
1202: if (Xparm1->element_T1_5 && Xparm2->element_T1_5) {
1203: d += tcmp(TY_EXPLICIT, (char *)Xparm1->element_T1_5, (char *)Xparm2->element_T1_5);
1204: } else if (Xparm1->element_T1_5 || Xparm2->element_T1_5) {
1205: (void) printf("element_T1_5 one missing");
1206: d++;
1207: }
1208: if (Xparm1->next && Xparm2->next) {
1209: d += tcmp(TY_ELEMENT4, (char *)Xparm1->next, (char *)Xparm2->next);
1210: } else if (Xparm1->next || Xparm2->next) {
1211: (void) printf("%s: next one missing", t_case[tynum].tst_name);
1212: d++;
1213: }
1214: break;
1215: #undef Xparm1
1216: #undef Xparm2
1217:
1218: case TY_MEMBER2:
1219: #define Xparm1 ((struct member_T1_2 *)parm1)
1220: #define Xparm2 ((struct member_T1_2 *)parm2)
1221: if (Xparm1->member_T1_3 && Xparm2->member_T1_3) {
1222: d += tcmp(TY_EXPLICIT, (char *)Xparm1->member_T1_3, (char *)Xparm2->member_T1_3);
1223: } else if (Xparm1->member_T1_3 || Xparm2->member_T1_3) {
1224: (void) printf("%s: member_T1_3 one missing", t_case[tynum].tst_name);
1225: d++;
1226: }
1227: if (Xparm1->next && Xparm2->next) {
1228: d += tcmp(TY_MEMBER2, (char *)Xparm1->next, (char *)Xparm2->next);
1229: } else if (Xparm1->next || Xparm2->next) {
1230: (void) printf("%s: next one missing", t_case[tynum].tst_name);
1231: d++;
1232: }
1233: break;
1234: #undef Xparm1
1235: #undef Xparm2
1236:
1237: case TY_ELEMENT6:
1238: #define Xparm1 ((struct element_T1_6 *)parm1)
1239: #define Xparm2 ((struct element_T1_6 *)parm2)
1240: if (Xparm1->element_T1_7 && Xparm2->element_T1_7) {
1241: d += tcmp(TY_ELEMENT8, (char *)Xparm1->element_T1_7, (char *)Xparm2->element_T1_7);
1242: } else if (Xparm1->element_T1_7 || Xparm2->element_T1_7) {
1243: (void) printf("%s: element_T1_7 one missing", t_case[tynum].tst_name);
1244: d++;
1245: }
1246: if (Xparm1->next && Xparm2->next) {
1247: d += tcmp(TY_ELEMENT6, (char *)Xparm1->next, (char *)Xparm2->next);
1248: } else if (Xparm1->next || Xparm2->next) {
1249: (void) printf("%s: next one missing", t_case[tynum].tst_name);
1250: d++;
1251: }
1252: break;
1253: #undef Xparm1
1254: #undef Xparm2
1255:
1256: case TY_ELEMENT8:
1257: #define Xparm1 ((struct element_T1_8 *)parm1)
1258: #define Xparm2 ((struct element_T1_8 *)parm2)
1259: if (Xparm1->sqof__in && Xparm2->sqof__in) {
1260: d += tcmp(TY_EXPLICIT, (char *)Xparm1->sqof__in, (char *)Xparm2->sqof__in);
1261: } else if (Xparm1->sqof__in || Xparm2->sqof__in) {
1262: (void) printf("%s: sqof__in one missing", t_case[tynum].tst_name);
1263: d++;
1264: }
1265: if (Xparm1->sqof__i != Xparm2->sqof__i) {
1266: (void) printf("sqof__i integers different\n");
1267: d++;
1268: }
1269: if (qb_cmp(Xparm1->sqof__o, Xparm2->sqof__o)) {
1270: (void) printf("sqof__o octet string different\n");
1271: d++;
1272: }
1273: break;
1274: #undef Xparm1
1275: #undef Xparm2
1276:
1277: case TY_MEMBER4:
1278: #define Xparm1 ((struct member_T1_4 *)parm1)
1279: #define Xparm2 ((struct member_T1_4 *)parm2)
1280: if (Xparm1->member_T1_5 && Xparm2->member_T1_5) {
1281: d += tcmp(TY_ELEMENT9, (char *)Xparm1->member_T1_5, (char *)Xparm2->member_T1_5);
1282: } else if (Xparm1->member_T1_5 || Xparm2->member_T1_5) {
1283: (void) printf("%s: member_T1_5 one missing", t_case[tynum].tst_name);
1284: d++;
1285: }
1286: if (Xparm1->next && Xparm2->next) {
1287: d += tcmp(TY_MEMBER4, (char *)Xparm1->next, (char *)Xparm2->next);
1288: } else if (Xparm1->next || Xparm2->next) {
1289: (void) printf("%s: next one missing", t_case[tynum].tst_name);
1290: d++;
1291: }
1292: break;
1293: #undef Xparm1
1294: #undef Xparm2
1295:
1296: case TY_ELEMENT9:
1297: #define Xparm1 ((struct element_T1_9 *)parm1)
1298: #define Xparm2 ((struct element_T1_9 *)parm2)
1299: if (Xparm1->stof__in && Xparm2->stof__in) {
1300: d += tcmp(TY_EXPLICIT, (char *)Xparm1->stof__in, (char *)Xparm2->stof__in);
1301: } else if (Xparm1->stof__in || Xparm2->stof__in) {
1302: (void) printf("%s: stof__in one missing", t_case[tynum].tst_name);
1303: d++;
1304: }
1305: if (Xparm1->stof__i != Xparm2->stof__i) {
1306: (void) printf("stof__i integers different\n");
1307: d++;
1308: }
1309: if (qb_cmp(Xparm1->stof__o, Xparm2->stof__o)) {
1310: (void) printf("stof__o octet string different\n");
1311: d++;
1312: }
1313: break;
1314: #undef Xparm1
1315: #undef Xparm2
1316:
1317: case TY_CHOICE:
1318: #define Xparm1 ((struct type_T1_Choice__Test *)parm1)
1319: #define Xparm2 ((struct type_T1_Choice__Test *)parm2)
1320: if (Xparm1->c1 && Xparm2->c1) {
1321: d += tcmp(TY_CHOICE0, (char *)Xparm1->c1, (char *)Xparm2->c1);
1322: } else if (Xparm1->c1 || Xparm2->c1) {
1323: (void) printf("%s: c1 one missing", t_case[tynum].tst_name);
1324: d++;
1325: }
1326: if (Xparm1->c2 && Xparm2->c2) {
1327: d += tcmp(TY_CHOICE1, (char *)Xparm1->c2, (char *)Xparm2->c2);
1328: } else if (Xparm1->c2 || Xparm2->c2) {
1329: (void) printf("%s: c2 one missing", t_case[tynum].tst_name);
1330: d++;
1331: }
1332: if (Xparm1->c3 && Xparm2->c3) {
1333: d += tcmp(TY_CHOICE2, (char *)Xparm1->c3, (char *)Xparm2->c3);
1334: } else if (Xparm1->c3 || Xparm2->c3) {
1335: (void) printf("%s: c3 one missing", t_case[tynum].tst_name);
1336: d++;
1337: }
1338: if (Xparm1->c4 && Xparm2->c4) {
1339: d += tcmp(TY_ELEMENT11, (char *)Xparm1->c4, (char *)Xparm2->c4);
1340: } else if (Xparm1->c4 || Xparm2->c4) {
1341: (void) printf("%s: c4 one missing", t_case[tynum].tst_name);
1342: d++;
1343: }
1344: break;
1345: #undef Xparm1
1346: #undef Xparm2
1347:
1348: case TY_CHOICE0:
1349: #define Xparm1 ((struct choice_T1_0 *)parm1)
1350: #define Xparm2 ((struct choice_T1_0 *)parm2)
1351: if (Xparm1->offset != Xparm2->offset) {
1352: d++;
1353: (void) printf("%s: offset mismatch %d != %d\n", t_case[tynum].tst_name,
1354: Xparm1->offset, Xparm2->offset);
1355: break;
1356: }
1357: switch (Xparm1->offset) {
1358: case choice_T1_0_i__c1:
1359: if (Xparm1->un.i__c1 != Xparm2->un.i__c1) {
1360: d++;
1361: (void) printf("%s: i__c1 mismatch %d != %d", t_case[tynum].tst_name,
1362: Xparm1->un.i__c1, Xparm2->un.i__c1);
1363: }
1364: break;
1365:
1366: case choice_T1_0_o__c1:
1367: if (qb_cmp(Xparm1->un.o__c1, Xparm2->un.o__c1)) {
1368: (void) printf("o__c1 octet string different\n");
1369: d++;
1370: }
1371: break;
1372:
1373: case choice_T1_0_b__c1:
1374: if (bit_cmp(Xparm1->un.b__c1, Xparm2->un.b__c1)) {
1375: (void) printf("un.b__c1 bitstring different\n");
1376: d++;
1377: }
1378: break;
1379:
1380: case choice_T1_0_f__c1:
1381: if (Xparm1->un.f__c1 && !Xparm2->un.f__c1
1382: || !Xparm1->un.f__c1 && Xparm2->un.f__c1) {
1383: (void) printf("f__c1 Boolean different\n");
1384: d++;
1385: }
1386: break;
1387:
1388: case choice_T1_0_obj__c1:
1389: if (Xparm1->un.obj__c1 && Xparm2->un.obj__c1) {
1390: d += tcmp(TY_EMB_STRINGS, (char *)Xparm1->un.obj__c1,
1391: (char *)Xparm2->un.obj__c1);
1392: } else if (Xparm1->un.obj__c1 || Xparm2->un.obj__c1) {
1393: (void) printf("%s: un.obj__c1 one missing", t_case[tynum].tst_name);
1394: d++;
1395: }
1396: break;
1397:
1398: default:
1399: ferrd(1, "TY_CHOICE0:illegal offset %d\n", Xparm1->offset);
1400: }
1401: break;
1402: #undef Xparm1
1403: #undef Xparm2
1404:
1405: case TY_CHOICE1:
1406: #define Xparm1 ((struct choice_T1_1 *)parm1)
1407: #define Xparm2 ((struct choice_T1_1 *)parm2)
1408:
1409: if (Xparm1->offset != Xparm2->offset) {
1410: d++;
1411: (void) printf("%s: offset mismatch %d != %d\n", t_case[tynum].tst_name,
1412: Xparm1->offset, Xparm2->offset);
1413: break;
1414: }
1415: switch (Xparm1->offset) {
1416: case choice_T1_1_i__c2:
1417: if (Xparm1->un.i__c2 != Xparm2->un.i__c2) {
1418: d++;
1419: (void) printf("%s: i__c2 mismatch %d != %d", t_case[tynum].tst_name,
1420: Xparm1->un.i__c2, Xparm2->un.i__c2);
1421: }
1422: break;
1423:
1424: case choice_T1_1_o__c2:
1425: if (qb_cmp(Xparm1->un.o__c2, Xparm2->un.o__c2)) {
1426: (void) printf("o__c2 octet string different\n");
1427: d++;
1428: }
1429: break;
1430:
1431: case choice_T1_1_b__c2:
1432: if (bit_cmp(Xparm1->un.b__c2, Xparm2->un.b__c2)) {
1433: (void) printf("un.b__c2 bitstring different\n");
1434: d++;
1435: }
1436: break;
1437:
1438: case choice_T1_1_f__c2:
1439: if (Xparm1->un.f__c2 && !Xparm2->un.f__c2
1440: || !Xparm1->un.f__c2 && Xparm2->un.f__c2) {
1441: d++;
1442: (void) printf("%s: f__c2 mismatch %d != %d", t_case[tynum].tst_name,
1443: Xparm1->un.f__c2, Xparm2->un.f__c2);
1444: }
1445: break;
1446:
1447: case choice_T1_1_obj__c2:
1448: if (Xparm1->un.obj__c2 && Xparm2->un.obj__c2) {
1449: d += tcmp(TY_EMB_STRINGS, (char *)Xparm1->un.obj__c2,
1450: (char *)Xparm2->un.obj__c2);
1451: } else if (Xparm1->un.obj__c2 || Xparm2->un.obj__c2) {
1452: (void) printf("%s: un.obj__c2 one missing", t_case[tynum].tst_name);
1453: d++;
1454: }
1455: break;
1456:
1457: default:
1458: ferrd(1, "TY_CHOICE1:illegal offset %d\n", Xparm1->offset);
1459: }
1460: break;
1461: #undef Xparm1
1462: #undef Xparm2
1463:
1464: case TY_CHOICE2:
1465: #define Xparm1 ((struct choice_T1_2 *)parm1)
1466: #define Xparm2 ((struct choice_T1_2 *)parm2)
1467:
1468: switch (Xparm1->offset) {
1469: case choice_T1_2_i__c3:
1470: if (Xparm1->un.i__c3 != Xparm2->un.i__c3) {
1471: d++;
1472: (void) printf("%s: i__c3 mismatch %d != %d", t_case[tynum].tst_name,
1473: Xparm1->un.i__c3, Xparm2->un.i__c3);
1474: }
1475: break;
1476:
1477: case choice_T1_2_seq__c3:
1478: if (Xparm1->un.seq__c3 && Xparm2->un.seq__c3) {
1479: d += tcmp(TY_ELEMENT10, (char *)Xparm1->un.seq__c3, (char *)Xparm2->un.seq__c3);
1480: } else if (Xparm1->un.seq__c3 || Xparm2->un.seq__c3) {
1481: (void) printf("%s: un.seq__c3 one missing", t_case[tynum].tst_name);
1482: d++;
1483: }
1484: break;
1485:
1486: case choice_T1_2_set__c3:
1487: if (Xparm1->un.set__c3 && Xparm2->un.set__c3) {
1488: d += tcmp(TY_MEMBER6, (char *)Xparm1->un.set__c3, (char *)Xparm2->un.set__c3);
1489: } else if (Xparm1->un.set__c3 || Xparm2->un.set__c3) {
1490: (void) printf("%s: un.set__c3 one missing", t_case[tynum].tst_name);
1491: d++;
1492: }
1493: break;
1494:
1495: default:
1496: ferrd(1, "TY_CHOICE2:illegal offset %d\n", Xparm1->offset);
1497: }
1498: break;
1499: #undef Xparm1
1500: #undef Xparm2
1501:
1502: case TY_CHOICE3:
1503: #define Xparm1 ((struct choice_T1_3 *)parm1)
1504: #define Xparm2 ((struct choice_T1_3 *)parm2)
1505:
1506: switch (Xparm1->offset) {
1507: case choice_T1_3_sc__a__i:
1508: if (Xparm1->un.sc__a__i != Xparm2->un.sc__a__i) {
1509: d++;
1510: (void) printf("%s: sc__a__i mismatch %d != %d", t_case[tynum].tst_name,
1511: Xparm1->un.sc__a__i, Xparm2->un.sc__a__i);
1512: }
1513: break;
1514:
1515: case choice_T1_3_sc__b__i:
1516: if (Xparm1->un.sc__b__i != Xparm2->un.sc__b__i) {
1517: d++;
1518: (void) printf("%s: sc__b__i mismatch %d != %d", t_case[tynum].tst_name,
1519: Xparm1->un.sc__b__i, Xparm2->un.sc__b__i);
1520: }
1521: break;
1522:
1523: case choice_T1_3_c4__i:
1524: if (Xparm1->un.c4__i != Xparm2->un.c4__i) {
1525: d++;
1526: (void) printf("%s: c4__i mismatch %d != %d", t_case[tynum].tst_name,
1527: Xparm1->un.c4__i, Xparm2->un.c4__i);
1528: }
1529: break;
1530:
1531: case choice_T1_3_c4__obj:
1532: if (Xparm1->un.c4__obj && Xparm2->un.c4__obj) {
1533: d += tcmp(TY_EXPLICIT, (char *)Xparm1->un.c4__obj, (char *)Xparm2->un.c4__obj);
1534: } else if (Xparm1->un.c4__obj || Xparm2->un.c4__obj) {
1535: (void) printf("%s: un.c4__obj one missing", t_case[tynum].tst_name);
1536: d++;
1537: }
1538: break;
1539:
1540: default:
1541: ferrd(1, "TY_CHOICE3:illegal offset %d\n", Xparm1->offset);
1542: }
1543: break;
1544: #undef Xparm1
1545: #undef Xparm2
1546:
1547: case TY_ELEMENT10:
1548: #define Xparm1 ((struct element_T1_10 *)parm1)
1549: #define Xparm2 ((struct element_T1_10 *)parm2)
1550: if (Xparm1->seq__c3__in && Xparm2->seq__c3__in) {
1551: d += tcmp(TY_EXPLICIT, (char *)Xparm1->seq__c3__in, (char *)Xparm2->seq__c3__in);
1552: } else if (Xparm1->seq__c3__in || Xparm2->seq__c3__in) {
1553: (void) printf("%s: seq__c3__in one missing", t_case[tynum].tst_name);
1554: d++;
1555: }
1556: if (Xparm1->seq__c3__i != Xparm2->seq__c3__i) {
1557: d++;
1558: (void) printf("%s: seq__c3__i mismatch %d != %d", t_case[tynum].tst_name,
1559: Xparm1->seq__c3__i, Xparm2->seq__c3__i);
1560: }
1561: if (qb_cmp(Xparm1->seq__c3__o, Xparm2->seq__c3__o)) {
1562: (void) printf("seq__c3__o octet string different\n");
1563: d++;
1564: }
1565: break;
1566: #undef Xparm1
1567: #undef Xparm2
1568:
1569: case TY_MEMBER6:
1570: #define Xparm1 ((struct member_T1_6 *)parm1)
1571: #define Xparm2 ((struct member_T1_6 *)parm2)
1572: if (Xparm1->set__c3__in && Xparm2->set__c3__in) {
1573: d += tcmp(TY_EXPLICIT, (char *)Xparm1->set__c3__in, (char *)Xparm2->set__c3__in);
1574: } else if (Xparm1->set__c3__in || Xparm2->set__c3__in) {
1575: (void) printf("%s: set__c3__in one missing", t_case[tynum].tst_name);
1576: d++;
1577: }
1578: if (Xparm1->set__c3__i != Xparm2->set__c3__i) {
1579: d++;
1580: (void) printf("%s: set__c3__i mismatch %d != %d", t_case[tynum].tst_name,
1581: Xparm1->set__c3__i, Xparm2->set__c3__i);
1582: }
1583: if (qb_cmp(Xparm1->set__c3__o, Xparm2->set__c3__o)) {
1584: (void) printf("set__c3__o octet string different\n");
1585: d++;
1586: }
1587: break;
1588: #undef Xparm1
1589: #undef Xparm2
1590:
1591: case TY_ELEMENT11:
1592: #define Xparm1 ((struct element_T1_11 *)parm1)
1593: #define Xparm2 ((struct element_T1_11 *)parm2)
1594: if (Xparm1->c4__choice && Xparm2->c4__choice) {
1595: d += tcmp(TY_CHOICE3, (char *)Xparm1->c4__choice, (char *)Xparm2->c4__choice);
1596: } else if (Xparm1->c4__choice || Xparm2->c4__choice) {
1597: (void) printf("%s: c4__choice one missing", t_case[tynum].tst_name);
1598: d++;
1599: }
1600: break;
1601: #undef Xparm1
1602: #undef Xparm2
1603:
1604: case TY_OPTIONAL:
1605: #define Xparm1 ((struct type_T1_Opt__Strings *)parm1)
1606: #define Xparm2 ((struct type_T1_Opt__Strings *)parm2)
1607: if (Xparm1->optionals & opt_T1_Opt__Strings_a__opt) {
1608: if (Xparm1->a__opt != Xparm2->a__opt) {
1609: d++;
1610: (void) printf("%s: a__opt mismatch %d != %d", t_case[tynum].tst_name,
1611: Xparm1->a__opt, Xparm2->a__opt);
1612: }
1613: }
1614: if (Xparm1->optionals & opt_T1_Opt__Strings_d__opt) {
1615: if (Xparm1->d__opt && !Xparm2->d__opt
1616: || !Xparm1->d__opt && Xparm2->d__opt) {
1617: d++;
1618: (void) printf("%s: d__opt mismatch %d != %d", t_case[tynum].tst_name,
1619: Xparm1->d__opt, Xparm2->d__opt);
1620: }
1621: }
1622: if (Xparm1->b__opt != NULLQB && Xparm2->b__opt != NULLQB) {
1623: if (qb_cmp(Xparm1->b__opt, Xparm2->b__opt)) {
1624: (void) printf("b__opt octet string different\n");
1625: d++;
1626: }
1627: }
1628: if (Xparm1->b__opt != NULLQB && Xparm2->b__opt == NULLQB
1629: || Xparm1->b__opt == NULLQB && Xparm2->b__opt != NULLQB) {
1630: (void) printf("%s: b__opt one missing\n", t_case[tynum].tst_name);
1631: d++;
1632: }
1633: if (Xparm1->c__opt != NULLPE && Xparm2->c__opt != NULLPE) {
1634: if (bit_cmp(Xparm1->c__opt, Xparm2->c__opt)) {
1635: (void) printf("%s:c__opt bitstring different\n",
1636: t_case[tynum].tst_name);
1637: d++;
1638: }
1639: }
1640: if (Xparm1->optionals & opt_T1_Opt__Strings_e__opt) {
1641: if (Xparm1->e__opt && !Xparm2->e__opt
1642: || !Xparm1->e__opt && Xparm2->e__opt) {
1643: d++;
1644: (void) printf("%s: e__opt mismatch %d != %d", t_case[tynum].tst_name,
1645: Xparm1->e__opt, Xparm2->e__opt);
1646: }
1647: }
1648: if (Xparm1->big__opt && Xparm2->big__opt) {
1649: d += tcmp(TY_STRINGS, (char *)Xparm1->big__opt,
1650: (char *)Xparm2->big__opt);
1651: } else if (Xparm1->big__opt && !Xparm2->big__opt
1652: || !Xparm1->big__opt && Xparm2->big__opt) {
1653: (void) printf("%s: big__opt one missing", t_case[tynum].tst_name);
1654: d++;
1655: }
1656: if (Xparm1->emb__opt && Xparm2->emb__opt) {
1657: d += tcmp(TY_ELEMENT12, (char *)Xparm1->emb__opt,
1658: (char *)Xparm2->emb__opt);
1659: } else if (Xparm1->emb__opt && !Xparm2->emb__opt
1660: || !Xparm1->emb__opt && Xparm2->emb__opt) {
1661: (void) printf("%s: emb__opt one missing", t_case[tynum].tst_name);
1662: d++;
1663: }
1664: if (Xparm1->st__opt && Xparm2->st__opt) {
1665: d += tcmp(TY_MEMBER7, (char *)Xparm1->st__opt,
1666: (char *)Xparm2->st__opt);
1667: } else if (Xparm1->st__opt && !Xparm2->st__opt
1668: || !Xparm1->st__opt && Xparm2->st__opt) {
1669: (void) printf("%s: st__opt one missing", t_case[tynum].tst_name);
1670: d++;
1671: }
1672: if (Xparm1->obj__opt && Xparm2->obj__opt) {
1673: d += tcmp(TY_MPDU, (char *)Xparm1->obj__opt,
1674: (char *)Xparm2->obj__opt);
1675: } else if (Xparm1->obj__opt && !Xparm2->obj__opt
1676: || !Xparm1->obj__opt && Xparm2->obj__opt) {
1677: (void) printf("%s: obj__opt one missing", t_case[tynum].tst_name);
1678: d++;
1679: }
1680: if (Xparm1->optionals & opt_T1_Opt__Strings_etag__opt) {
1681: if (Xparm1->etag__opt != Xparm2->etag__opt) {
1682: d++;
1683: (void) printf("%s: etag__opt mismatch %d != %d", t_case[tynum].tst_name,
1684: Xparm1->etag__opt, Xparm2->etag__opt);
1685: }
1686: }
1687: if (Xparm1->ch__opt && Xparm2->ch__opt) {
1688: d += tcmp(TY_CHOICE4, (char *)Xparm1->ch__opt,
1689: (char *)Xparm2->ch__opt);
1690: } else if (Xparm1->ch__opt && !Xparm2->ch__opt
1691: || !Xparm1->ch__opt && Xparm2->ch__opt) {
1692: (void) printf("%s: ch__opt one missing", t_case[tynum].tst_name);
1693: d++;
1694: }
1695: break;
1696: #undef Xparm1
1697: #undef Xparm2
1698:
1699: case TY_ELEMENT12:
1700: #define Xparm1 ((struct element_T1_12 *)parm1)
1701: #define Xparm2 ((struct element_T1_12 *)parm2)
1702: if (Xparm1->optionals & opt_T1_element_T1_12_oem__int) {
1703: if (Xparm1->oem__int != Xparm2->oem__int) {
1704: d++;
1705: (void) printf("%s: oem__int mismatch %d != %d", t_case[tynum].tst_name,
1706: Xparm1->oem__int, Xparm2->oem__int);
1707: }
1708: }
1709: if (Xparm1->oem__oct != NULLQB && Xparm2->oem__oct != NULLQB) {
1710: if (qb_cmp(Xparm1->oem__oct, Xparm2->oem__oct)) {
1711: (void) printf("oem__oct octet string different\n");
1712: d++;
1713: }
1714: }
1715: if (Xparm1->oem__oct != NULLQB && Xparm2->oem__oct == NULLQB
1716: || Xparm1->oem__oct == NULLQB && Xparm2->oem__oct != NULLQB) {
1717: (void) printf("%s: oem__oct one missing\n", t_case[tynum].tst_name);
1718: d++;
1719: }
1720: if (Xparm1->oem__bit != NULLPE && Xparm2->oem__bit != NULLPE) {
1721: if (bit_cmp(Xparm1->oem__bit, Xparm2->oem__bit)) {
1722: (void) printf("%s:oem__bit bitstring different\n",
1723: t_case[tynum].tst_name);
1724: d++;
1725: }
1726: }
1727: break;
1728: #undef Xparm1
1729: #undef Xparm2
1730:
1731: case TY_MEMBER7:
1732: #define Xparm1 ((struct member_T1_7 *)parm1)
1733: #define Xparm2 ((struct member_T1_7 *)parm2)
1734: if (Xparm1->optionals & opt_T1_member_T1_7_st__int0) {
1735: if (Xparm1->st__int0 != Xparm2->st__int0) {
1736: d++;
1737: (void) printf("%s: st__int0 mismatch %d != %d", t_case[tynum].tst_name,
1738: Xparm1->st__int0, Xparm2->st__int0);
1739: }
1740: }
1741: if (Xparm1->optionals & opt_T1_member_T1_7_st__int1) {
1742: if (Xparm1->st__int1 != Xparm2->st__int1) {
1743: d++;
1744: (void) printf("%s: st__int1 mismatch %d != %d", t_case[tynum].tst_name,
1745: Xparm1->st__int1, Xparm2->st__int1);
1746: }
1747: }
1748: if (Xparm1->optionals & opt_T1_member_T1_7_st__int2) {
1749: if (Xparm1->st__int2 != Xparm2->st__int2) {
1750: d++;
1751: (void) printf("%s: st__int2 mismatch %d != %d", t_case[tynum].tst_name,
1752: Xparm1->st__int2, Xparm2->st__int2);
1753: }
1754: }
1755: break;
1756: #undef Xparm1
1757: #undef Xparm2
1758:
1759: case TY_CHOICE4:
1760: #define Xparm1 ((struct choice_T1_4 *)parm1)
1761: #define Xparm2 ((struct choice_T1_4 *)parm2)
1762: if (Xparm1->offset != Xparm2->offset) {
1763: d++;
1764: (void) printf("%s: offset mismatch %d != %d", t_case[tynum].tst_name,
1765: Xparm1->offset, Xparm2->offset);
1766: break;
1767: }
1768: switch (Xparm1->offset) {
1769: case choice_T1_4_ch__1:
1770: if (Xparm1->un.ch__1 != Xparm2->un.ch__1) {
1771: d++;
1772: (void) printf("%s: ch__1 mismatch %d != %d", t_case[tynum].tst_name,
1773: Xparm1->un.ch__1, Xparm2->un.ch__1);
1774: }
1775: break;
1776:
1777: case choice_T1_4_ch__2:
1778: if (Xparm1->un.ch__2 != Xparm2->un.ch__2) {
1779: d++;
1780: (void) printf("%s: ch__2 mismatch %d != %d", t_case[tynum].tst_name,
1781: Xparm1->un.ch__2, Xparm2->un.ch__2);
1782: }
1783: break;
1784:
1785: default:
1786: ferrd(1, "tcmp:TY_CHOICE4:illegal offset %d\n", Xparm1->offset);
1787: }
1788: break;
1789: #undef Xparm1
1790: #undef Xparm2
1791:
1792: case TY_EXTREF:
1793: #define Xparm1 ((struct type_T1_E__ref *)parm1)
1794: #define Xparm2 ((struct type_T1_E__ref *)parm2)
1795: if (Xparm1->a__ref && Xparm2->a__ref) {
1796: d += tcmp(TY_T2_INFO, (char *)Xparm1->a__ref,
1797: (char *)Xparm2->a__ref);
1798: } else if (Xparm1->a__ref == NULL || Xparm2->a__ref == NULL) {
1799: (void) printf("%s: a__ref one missing", t_case[tynum].tst_name);
1800: d++;
1801: }
1802: if (Xparm1->b__ref && Xparm2->b__ref) {
1803: d += tcmp(TY_T2_INFO, (char *)Xparm1->b__ref,
1804: (char *)Xparm2->b__ref);
1805: } else if (Xparm1->b__ref == NULL || Xparm2->b__ref == NULL) {
1806: (void) printf("%s: b__ref one missing", t_case[tynum].tst_name);
1807: d++;
1808: }
1809: if (Xparm1->c__ref && Xparm2->c__ref) {
1810: d += tcmp(TY_CHOICE, (char *)Xparm1->c__ref,
1811: (char *)Xparm2->c__ref);
1812: } else if (Xparm1->c__ref == NULL || Xparm2->c__ref == NULL) {
1813: (void) printf("%s: c__ref one missing", t_case[tynum].tst_name);
1814: d++;
1815: }
1816: if (Xparm1->d__ref && Xparm2->d__ref) {
1817: d += tcmp(TY_T2_INFO, (char *)Xparm1->d__ref,
1818: (char *)Xparm2->d__ref);
1819: } else if (Xparm1->d__ref && !Xparm2->d__ref
1820: || !Xparm1->d__ref && Xparm2->d__ref) {
1821: (void) printf("%s: d__ref one missing", t_case[tynum].tst_name);
1822: d++;
1823: }
1824: if (Xparm1->e__ref && Xparm2->e__ref) {
1825: d += tcmp(TY_T2_INFO, (char *)Xparm1->e__ref,
1826: (char *)Xparm2->e__ref);
1827: } else if (Xparm1->e__ref && !Xparm2->e__ref
1828: || !Xparm1->e__ref && Xparm2->e__ref) {
1829: (void) printf("%s: e__ref one missing", t_case[tynum].tst_name);
1830: d++;
1831: }
1832: break;
1833: #undef Xparm1
1834: #undef Xparm2
1835:
1836: case TY_T2_INFO:
1837: #define Xparm1 ((struct type_T2_Info *)parm1)
1838: #define Xparm2 ((struct type_T2_Info *)parm2)
1839: if (Xparm1->a1 != Xparm2->a1) {
1840: d++;
1841: (void) printf("%s: a1 mismatch %d != %d", t_case[tynum].tst_name,
1842: Xparm1->a1, Xparm2->a1);
1843: }
1844: if (Xparm1->a2 != Xparm2->a2) {
1845: d++;
1846: (void) printf("%s: a2 mismatch %d != %d", t_case[tynum].tst_name,
1847: Xparm1->a2, Xparm2->a2);
1848: }
1849: if (Xparm1->a3 != Xparm2->a3) {
1850: d++;
1851: (void) printf("%s: a3 mismatch %d != %d", t_case[tynum].tst_name,
1852: Xparm1->a3, Xparm2->a3);
1853: }
1854: if (Xparm1->a4 && Xparm2->a4) {
1855: d += tcmp(TY_T2_MPDU, (char *)Xparm1->a4, (char *)Xparm2->a4);
1856: } else if (Xparm1->a4 == NULL || Xparm2->a4 == NULL) {
1857: (void) printf("%s: a4 one missing", t_case[tynum].tst_name);
1858: d++;
1859: }
1860: break;
1861: #undef Xparm1
1862: #undef Xparm2
1863:
1864: case TY_T2_MPDU:
1865: #define Xparm1 ((struct type_T2_MPDU *)parm1)
1866: #define Xparm2 ((struct type_T2_MPDU *)parm2)
1867: if (Xparm1->a__seq && Xparm2->a__seq) {
1868: d += tcmp(TY_T2_ELEM0, (char *)Xparm1->a__seq,
1869: (char *)Xparm2->a__seq);
1870: } else if (Xparm1->a__seq == NULL || Xparm2->a__seq == NULL) {
1871: (void) printf("%s: a__seq one missing", t_case[tynum].tst_name);
1872: d++;
1873: }
1874: break;
1875: #undef Xparm1
1876: #undef Xparm2
1877:
1878: case TY_T2_ELEM0:
1879: #define Xparm1 ((struct element_T2_0 *)parm1)
1880: #define Xparm2 ((struct element_T2_0 *)parm2)
1881: if (Xparm1->fred != Xparm2->fred) {
1882: d++;
1883: (void) printf("%s: fred mismatch %d != %d", t_case[tynum].tst_name,
1884: Xparm1->fred, Xparm2->fred);
1885: }
1886: break;
1887: #undef Xparm1
1888: #undef Xparm2
1889:
1890: case TY_OPTIMISED:
1891: #define Xparm1 ((struct type_T1_Optimised *)parm1)
1892: #define Xparm2 ((struct type_T1_Optimised *)parm2)
1893: if (Xparm1->o1 == NULLPE || Xparm2->o1 == NULLPE) {
1894: (void) printf("%s: o1 one missing\n", t_case[tynum].tst_name);
1895: d++;
1896: } else if (bit_cmp(Xparm1->o1, Xparm2->o1)) {
1897: (void) printf("%s:o1 bitstring different\n",
1898: t_case[tynum].tst_name);
1899: d++;
1900: }
1901: if (Xparm1->o2 != NULLQB && Xparm2->o2 != NULLQB) {
1902: if (qb_cmp(Xparm1->o2, Xparm2->o2)) {
1903: (void) printf("o2 octet string different\n");
1904: d++;
1905: }
1906: } else {
1907: (void) printf("%s: o2 one missing\n", t_case[tynum].tst_name);
1908: d++;
1909: }
1910: if (Xparm1->o3 && Xparm2->o3) {
1911: d += tcmp(TY_MPDU, (char *)Xparm1->o3, (char *)Xparm2->o3);
1912: } else if (Xparm1->o3 == NULL || Xparm2->o3 == NULL) {
1913: (void) printf("%s: o3 one missing", t_case[tynum].tst_name);
1914: d++;
1915: }
1916: if (Xparm1->o4 != NULLPE && Xparm2->o4 == NULLPE
1917: || Xparm1->o4 == NULLPE && Xparm2->o4 != NULLPE) {
1918: (void) printf("%s: o4 one missing\n", t_case[tynum].tst_name);
1919: d++;
1920: }
1921: if (Xparm1->o4 != NULLPE && Xparm2->o4 != NULLPE) {
1922: if (pe_cmp(Xparm1->o4, Xparm2->o4)) {
1923: (void) printf("%s:o4 SET of ANY different\n",
1924: t_case[tynum].tst_name);
1925: d++;
1926: }
1927: }
1928: if (Xparm1->element_T1_14 && Xparm2->element_T1_14) {
1929: d += tcmp(TY_MEMBER9, (char *)Xparm1->element_T1_14,
1930: (char *)Xparm2->element_T1_14);
1931: } else if (Xparm1->element_T1_14 == NULL
1932: || Xparm2->element_T1_14 == NULL) {
1933: (void) printf("%s: element_T1_14 one missing", t_case[tynum].tst_name);
1934: d++;
1935: }
1936: break;
1937: #undef Xparm1
1938: #undef Xparm2
1939:
1940: case TY_MEMBER9:
1941: #define Xparm1 ((struct member_T1_9 *)parm1)
1942: #define Xparm2 ((struct member_T1_9 *)parm2)
1943: if (Xparm1->o5 != NULLPE && Xparm2->o5 != NULLPE) {
1944: if (pe_cmp(Xparm1->o5, Xparm2->o5)) {
1945: (void) printf("%s:o5 SET of ANY different\n",
1946: t_case[tynum].tst_name);
1947: d++;
1948: }
1949: } else {
1950: (void) printf("%s: o5 one missing\n", t_case[tynum].tst_name);
1951: d++;
1952: }
1953: if (Xparm1->o6 != NULLPE && Xparm2->o6 != NULLPE) {
1954: if (pe_cmp(Xparm1->o6, Xparm2->o6)) {
1955: (void) printf("%s:o6 SET of ANY different\n",
1956: t_case[tynum].tst_name);
1957: d++;
1958: }
1959: } else {
1960: (void) printf("%s: o6 one missing\n", t_case[tynum].tst_name);
1961: d++;
1962: }
1963: if (Xparm1->o7 != NULLOID && Xparm2->o7 != NULLOID) {
1964: if (oid_cmp(Xparm1->o7, Xparm2->o7)) {
1965: (void) printf("%s:o7 OID different\n",
1966: t_case[tynum].tst_name);
1967: d++;
1968: }
1969: } else {
1970: (void) printf("%s: o7 one missing\n", t_case[tynum].tst_name);
1971: d++;
1972: }
1973: break;
1974: #undef Xparm1
1975: #undef Xparm2
1976:
1977: case TY_EXTERNAL:
1978: #define Xparm1 ((struct type_T1_Ext__typ *)parm1)
1979: #define Xparm2 ((struct type_T1_Ext__typ *)parm2)
1980: if (Xparm1->ext != NULL && Xparm2->ext != NULL) {
1981: if (ext_cmp(Xparm1->ext, Xparm2->ext)) {
1982: (void) printf("%s:ext EXTERNAL different\n",
1983: t_case[tynum].tst_name);
1984: d++;
1985: }
1986: } else {
1987: (void) printf("%s: ext one missing\n", t_case[tynum].tst_name);
1988: d++;
1989: }
1990: if (Xparm1->a__ny != NULLPE && Xparm2->a__ny != NULLPE) {
1991: if (pe_cmp(Xparm1->a__ny, Xparm2->a__ny)) {
1992: (void) printf("%s:a__ny ANY different\n",
1993: t_case[tynum].tst_name);
1994: d++;
1995: }
1996: } else {
1997: (void) printf("%s: a__ny one missing\n", t_case[tynum].tst_name);
1998: d++;
1999: }
2000: if (Xparm1->ext__impl != NULL && Xparm2->ext__impl != NULL) {
2001: if (ext_cmp(Xparm1->ext__impl, Xparm2->ext__impl)) {
2002: (void) printf("%s:ext__impl EXTERNAL different\n",
2003: t_case[tynum].tst_name);
2004: d++;
2005: }
2006: } else {
2007: (void) printf("%s: ext__impl one missing\n", t_case[tynum].tst_name);
2008: d++;
2009: }
2010: if (Xparm1->any__impl != NULLPE && Xparm2->any__impl != NULLPE) {
2011: if (pe_cmp(Xparm1->any__impl, Xparm2->any__impl)) {
2012: (void) printf("%s:any__impl ANY different\n",
2013: t_case[tynum].tst_name);
2014: d++;
2015: }
2016: } else {
2017: (void) printf("%s: any__impl one missing\n", t_case[tynum].tst_name);
2018: d++;
2019: }
2020: if (Xparm1->ext__expl != NULL && Xparm2->ext__expl != NULL) {
2021: if (ext_cmp(Xparm1->ext__expl, Xparm2->ext__expl)) {
2022: (void) printf("%s:ext__expl EXTERNAL different\n",
2023: t_case[tynum].tst_name);
2024: d++;
2025: }
2026: } else {
2027: (void) printf("%s: ext__expl one missing\n", t_case[tynum].tst_name);
2028: d++;
2029: }
2030: if (Xparm1->any__expl != NULLPE && Xparm2->any__expl != NULLPE) {
2031: if (pe_cmp(Xparm1->any__expl, Xparm2->any__expl)) {
2032: (void) printf("%s:any__expl ANY different\n",
2033: t_case[tynum].tst_name);
2034: d++;
2035: }
2036: } else {
2037: (void) printf("%s: any__expl one missing\n", t_case[tynum].tst_name);
2038: d++;
2039: }
2040: break;
2041: #undef Xparm1
2042: #undef Xparm2
2043:
2044: case TY_SEXTERNAL:
2045: #define Xparm1 ((struct type_T1_SExt *)parm1)
2046: #define Xparm2 ((struct type_T1_SExt *)parm2)
2047: if (Xparm1 != NULL && Xparm2 != NULL) {
2048: if (ext_cmp(Xparm1, Xparm2)) {
2049: (void) printf("%s:ext EXTERNAL different\n",
2050: t_case[tynum].tst_name);
2051: d++;
2052: }
2053: } else {
2054: (void) printf("%s: ext one missing\n", t_case[tynum].tst_name);
2055: d++;
2056: }
2057: break;
2058: #undef Xparm1
2059: #undef Xparm2
2060:
2061:
2062: case TY_ETAGOBJ:
2063: #define Xparm1 ((struct type_T1_Etags *)parm1)
2064: #define Xparm2 ((struct type_T1_Etags *)parm2)
2065: if (Xparm1->offset != Xparm2->offset) {
2066: d++;
2067: (void) printf("%s: offset mismatch %d != %d", t_case[tynum].tst_name,
2068: Xparm1->offset, Xparm2->offset);
2069: break;
2070: }
2071: switch (Xparm1->offset) {
2072: case type_T1_Etags_aE:
2073: if (Xparm1->un.aE != Xparm2->un.aE) {
2074: d++;
2075: (void) printf("%s: un.aE mismatch %d != %d", t_case[tynum].tst_name,
2076: Xparm1->un.aE, Xparm2->un.aE);
2077: }
2078: break;
2079:
2080: case type_T1_Etags_bE:
2081: if (Xparm1->un.bE != Xparm2->un.bE) {
2082: d++;
2083: (void) printf("%s: un.bE mismatch %d != %d", t_case[tynum].tst_name,
2084: Xparm1->un.bE, Xparm2->un.bE);
2085: }
2086: break;
2087:
2088: default:
2089: ferrd(1, "TY_ETAGOBJ:illegal offset %d\n", Xparm1->offset);
2090: }
2091: break;
2092: #undef Xparm1
2093: #undef Xparm2
2094:
2095: /* This has to be changed when posy is upgraded to handle DEFAULTS properly */
2096: case TY_DEFAULT:
2097: #define Xparm1 ((struct type_T1_Def__Strings *)parm1)
2098: #define Xparm2 ((struct type_T1_Def__Strings *)parm2)
2099: if (Xparm1->a__def != Xparm2->a__def) {
2100: d++;
2101: (void) printf("%s: a__def mismatch %d != %d", t_case[tynum].tst_name,
2102: Xparm1->a__def, Xparm2->a__def);
2103: }
2104: if (Xparm1->b__def != NULLQB && Xparm2->b__def != NULLQB) {
2105: if (qb_cmp(Xparm1->b__def, Xparm2->b__def)) {
2106: (void) printf("b__def octet string different\n");
2107: d++;
2108: }
2109: } else if (Xparm2->b__def == NULLQB) {
2110: (void) printf("%s: b__def one missing\n", t_case[tynum].tst_name);
2111: d++;
2112: }
2113: if (Xparm1->c__def != NULLPE && Xparm2->c__def != NULLPE) {
2114: if (bit_cmp(Xparm1->c__def, Xparm2->c__def)) {
2115: (void) printf("%s:c__def bitstring different\n",
2116: t_case[tynum].tst_name);
2117: d++;
2118: }
2119: } else if (Xparm2->c__def == NULLPE) {
2120: (void) printf("%s: c__def restored version missing\n", t_case[tynum].tst_name);
2121: d++;
2122: }
2123: if (Xparm1->okay != Xparm2->okay) {
2124: d++;
2125: (void) printf("%s: okay mismatch %d != %d", t_case[tynum].tst_name,
2126: Xparm1->okay, Xparm2->okay);
2127: }
2128: /* Can't test NULL ....
2129: if (Xparm1->e__opt != Xparm2->e__opt) {
2130: d++;
2131: (void) printf("%s: e__opt mismatch %d != %d", t_case[tynum].tst_name,
2132: Xparm1->e__opt, Xparm2->e__opt);
2133: }
2134: */
2135: if (Xparm1->big__def && Xparm2->big__def) {
2136: d += tcmp(TY_STRINGS, (char *)Xparm1->big__def,
2137: (char *)Xparm2->big__def);
2138: } else {
2139: (void) printf("%s: big__def one missing", t_case[tynum].tst_name);
2140: d++;
2141: }
2142: if (Xparm1->emb__def && Xparm2->emb__def) {
2143: d += tcmp(TY_ELEMENT13, (char *)Xparm1->emb__def,
2144: (char *)Xparm2->emb__def);
2145: } else if (Xparm1->emb__def != NULL || Xparm2->emb__def != NULL) {
2146: (void) printf("%s: emb__def one missing", t_case[tynum].tst_name);
2147: d++;
2148: }
2149: if (Xparm1->st__def && Xparm2->st__def) {
2150: d += tcmp(TY_MEMBER8, (char *)Xparm1->st__def,
2151: (char *)Xparm2->st__def);
2152: } else if (Xparm1->st__def != NULL || Xparm2->st__def != NULL) {
2153: (void) printf("%s: st__def one missing", t_case[tynum].tst_name);
2154: d++;
2155: }
2156: break;
2157: #undef Xparm1
2158: #undef Xparm2
2159:
2160: case TY_ELEMENT13:
2161: #define Xparm1 ((struct element_T1_13 *)parm1)
2162: #define Xparm2 ((struct element_T1_13 *)parm2)
2163: if (Xparm1->colour != Xparm2->colour) {
2164: d++;
2165: (void) printf("%s: colour mismatch %d != %d", t_case[tynum].tst_name,
2166: Xparm1->colour, Xparm2->colour);
2167: }
2168: if (Xparm1->oem__oct != NULLQB && Xparm2->oem__oct != NULLQB) {
2169: if (qb_cmp(Xparm1->oem__oct, Xparm2->oem__oct)) {
2170: (void) printf("oem__oct octet string different\n");
2171: d++;
2172: }
2173: } else if (Xparm1->oem__oct != NULLQB || Xparm2->oem__oct != NULLQB) {
2174: (void) printf("oem__oct: one missing 0x%x, 0x%x\n", Xparm1->oem__oct,
2175: Xparm1->oem__oct);
2176: d++;
2177: }
2178: if (Xparm1->version != NULLPE && Xparm2->version != NULLPE) {
2179: if (bit_cmp(Xparm1->version, Xparm2->version)) {
2180: (void) printf("%s:version bitstring different\n",
2181: t_case[tynum].tst_name);
2182: d++;
2183: }
2184: } else if (Xparm2->version == NULLPE) {
2185: (void) printf("%s: version decoded version missing\n",
2186: t_case[tynum].tst_name);
2187: d++;
2188: }
2189: break;
2190: #undef Xparm1
2191: #undef Xparm2
2192:
2193: case TY_MEMBER8:
2194: #define Xparm1 ((struct member_T1_8 *)parm1)
2195: #define Xparm2 ((struct member_T1_8 *)parm2)
2196: if (Xparm1->wine != Xparm2->wine) {
2197: d++;
2198: (void) printf("%s: wine mismatch %d != %d", t_case[tynum].tst_name,
2199: Xparm1->wine, Xparm2->wine);
2200: }
2201: if (Xparm1->beer != Xparm2->beer) {
2202: d++;
2203: (void) printf("%s: beer mismatch %d != %d", t_case[tynum].tst_name,
2204: Xparm1->beer, Xparm2->beer);
2205: }
2206: if (Xparm1->spirit != Xparm2->spirit) {
2207: d++;
2208: (void) printf("%s: spirit mismatch %d != %d", t_case[tynum].tst_name,
2209: Xparm1->spirit, Xparm2->spirit);
2210: }
2211: break;
2212: #undef Xparm1
2213: #undef Xparm2
2214:
2215: case TY_STEST:
2216: #define Xparm1 ((struct type_T1_Stest *)parm1)
2217: #define Xparm2 ((struct type_T1_Stest *)parm2)
2218: if (Xparm1->st1 != NULL && Xparm2->st1 != NULL) {
2219: d += tcmp(TY_SINT, (char *)Xparm1->st1, (char *)Xparm2->st1);
2220: } else if (Xparm2->st1 == NULL) {
2221: d++;
2222: (void) printf("%s: missing", t_case[tynum].tst_name);
2223: }
2224: if (Xparm1->st2 != NULL && Xparm2->st2 != NULL) {
2225: if (qb_cmp(Xparm1->st2, Xparm2->st2)) {
2226: (void) printf("%s:st2 octet string different\n",
2227: t_case[tynum].tst_name);
2228: d++;
2229: }
2230: } else if (Xparm2->st2 == NULL) {
2231: d++;
2232: (void) printf("%s: missing", t_case[tynum].tst_name);
2233: }
2234: break;
2235: #undef Xparm1
2236: #undef Xparm2
2237:
2238: case TY_SINT:
2239: #define Xparm1 ((struct type_T1_Sint *)parm1)
2240: #define Xparm2 ((struct type_T1_Sint *)parm2)
2241: if (Xparm1->parm != Xparm2->parm) {
2242: (void) printf("%s:parm %d != %d\n", t_case[tynum].tst_name, Xparm1->parm,
2243: Xparm2->parm);
2244: d++;
2245: }
2246: break;
2247: #undef Xparm1
2248: #undef Xparm2
2249:
2250: case TY_ETYPE:
2251: #define Xparm1 ((struct type_T1_Enum__type *)parm1)
2252: #define Xparm2 ((struct type_T1_Enum__type *)parm2)
2253: if (Xparm1->parm != Xparm2->parm) {
2254: (void) printf("%s:parm %d != %d\n", t_case[tynum].tst_name, Xparm1->parm,
2255: Xparm2->parm);
2256: d++;
2257: }
2258: break;
2259: #undef Xparm1
2260: #undef Xparm2
2261:
2262: case TY_ENUM_TEST:
2263: #define Xparm1 ((struct type_T1_T__enum *)parm1)
2264: #define Xparm2 ((struct type_T1_T__enum *)parm2)
2265: if (Xparm1->ae1 && Xparm2->ae1 ) {
2266: d += tcmp(TY_ETYPE, (char *)Xparm1->ae1, (char *)Xparm2->ae1);
2267: } else {
2268: d++;
2269: (void) printf("%s:ae1 missing\n", t_case[tynum].tst_name);
2270: }
2271: if (Xparm1->ae2 && Xparm2->ae2 ) {
2272: d += tcmp(TY_ETYPE, (char *)Xparm1->ae2, (char *)Xparm2->ae2);
2273: } else {
2274: d++;
2275: (void) printf("%s:ae2 missing\n", t_case[tynum].tst_name);
2276: }
2277: if (Xparm1->ae3 && Xparm2->ae3 ) {
2278: d += tcmp(TY_ETYPE, (char *)Xparm1->ae3, (char *)Xparm2->ae3);
2279: } else {
2280: d++;
2281: (void) printf("%s:ae3 missing\n", t_case[tynum].tst_name);
2282: }
2283: /* Default */
2284: if (Xparm1->ae4 && Xparm2->ae4 ) {
2285: d += tcmp(TY_ETYPE, (char *)Xparm1->ae4, (char *)Xparm2->ae4);
2286: } else {
2287: d++;
2288: (void) printf("%s:ae4 missing\n", t_case[tynum].tst_name);
2289: }
2290: /* Optional */
2291: if (Xparm1->ae5 && Xparm2->ae5 ) {
2292: d += tcmp(TY_ETYPE, (char *)Xparm1->ae5, (char *)Xparm2->ae5);
2293: } else if (Xparm1->ae5 || Xparm2->ae5) {
2294: d++;
2295: (void) printf("%s:ae5 missing\n", t_case[tynum].tst_name);
2296: }
2297: break;
2298: #undef Xparm1
2299: #undef Xparm2
2300:
2301: #ifdef PEPSY_REALS
2302: case TY_REAL:
2303: #define Xparm1 ((struct type_T1_Real *)parm1)
2304: #define Xparm2 ((struct type_T1_Real *)parm2)
2305: /* Horrible floating point test for roughly equal */
2306: if (fabs(Xparm1->parm) < F_SMALL/2) {
2307: if (fabs(Xparm1->parm - Xparm2->parm) > F_SMALL) {
2308: (void) printf("%s:parm %f != %f\n", t_case[tynum].tst_name,
2309: Xparm1->parm, Xparm2->parm);
2310: d++;
2311: }
2312: } else if (fabs((Xparm1->parm - Xparm2->parm)/Xparm1->parm) > F_SMALL) {
2313: (void) printf("%s:parm %f != %f\n", t_case[tynum].tst_name, Xparm1->parm,
2314: Xparm2->parm);
2315: d++;
2316: }
2317: break;
2318: #undef Xparm1
2319: #undef Xparm2
2320:
2321: case TY_REAL_TEST:
2322: #define Xparm1 ((struct type_T1_T__real *)parm1)
2323: #define Xparm2 ((struct type_T1_T__real *)parm2)
2324: if (Xparm1->r1 && Xparm2->r1 ) {
2325: d += tcmp(TY_REAL, (char *)Xparm1->r1, (char *)Xparm2->r1);
2326: } else {
2327: d++;
2328: (void) printf("%s:r1 missing\n", t_case[tynum].tst_name);
2329: }
2330: if (Xparm1->r2 && Xparm2->r2 ) {
2331: d += tcmp(TY_REAL, (char *)Xparm1->r2, (char *)Xparm2->r2);
2332: } else {
2333: d++;
2334: (void) printf("%s:r2 missing\n", t_case[tynum].tst_name);
2335: }
2336: if (Xparm1->r3 && Xparm2->r3 ) {
2337: d += tcmp(TY_REAL, (char *)Xparm1->r3, (char *)Xparm2->r3);
2338: } else {
2339: d++;
2340: (void) printf("%s:r3 missing\n", t_case[tynum].tst_name);
2341: }
2342: /* Default */
2343: if (Xparm1->r4 && Xparm2->r4 ) {
2344: d += tcmp(TY_REAL, (char *)Xparm1->r4, (char *)Xparm2->r4);
2345: } else {
2346: d++;
2347: (void) printf("%s:r4 missing\n", t_case[tynum].tst_name);
2348: }
2349: /* Optional */
2350: if (Xparm1->r5 && Xparm2->r5 ) {
2351: d += tcmp(TY_REAL, (char *)Xparm1->r5, (char *)Xparm2->r5);
2352: } else if (Xparm1->r5 || Xparm2->r5) {
2353: d++;
2354: (void) printf("%s:r5 missing\n", t_case[tynum].tst_name);
2355: }
2356: break;
2357: #undef Xparm1
2358: #undef Xparm2
2359: #endif
2360:
2361: default:
2362: ferrd(1, "tcmp:unknown type %d\n", tynum);
2363: }
2364: if (d) {
2365: (void) printf("tcmp:failed on %s\n", t_case[tynum].tst_name);
2366: }
2367: return (d);
2368: }
2369:
2370: /*
2371: * Compare two possible null qbuf lists and return non zero if they are
2372: * different
2373: * Pretty complex to allow for all sorts of weird cases
2374: * Doesn't work for a qbuf which doesn't have a head ! Don't really know what
2375: * is the proper form of a queue buf. MArshall's doco doesn't say
2376: */
2377: qb_cmp(qb1, qb2)
2378: struct qbuf *qb1, *qb2;
2379: {
2380: struct qbuf *qp1, *qp2;
2381: char *po1, *po2;
2382: int len1, len2;
2383:
2384: if (qb1 == NULL && qb2 == NULL)
2385: return (0);
2386:
2387: if (qb1 == NULL || qb2 == NULL)
2388: return (1);
2389:
2390: qp1 = qb1->qb_forw;
2391: qp2 = qb2->qb_forw;
2392: po1 = qp1->qb_data;
2393: po2 = qp2->qb_data;
2394: len1 = qp1->qb_len;
2395: len2 = qp2->qb_len;
2396:
2397: while (qp1 != qb1 && qp2 != qb2) {
2398: if (len1 < len2) {
2399: if (bcmp(po1, po2, len1))
2400: return (1);
2401: len2 -= len1;
2402: po2 += len1;
2403: qp1 = qp1->qb_forw;
2404: po1 = qp1->qb_data;
2405: len1 = qp1->qb_len;
2406: } else {
2407: if (bcmp(po1, po2, len1))
2408: return (1);
2409: len1 -= len2;
2410: po1 += len2;
2411: qp2 = qp2->qb_forw;
2412: po2 = qp2->qb_data;
2413: len2 = qp2->qb_len;
2414: }
2415: }
2416:
2417: if (len1 == 0)
2418: qp1 = qp1->qb_forw;
2419: if (len2 == 0)
2420: qp2 = qp2->qb_forw;
2421: while (qp1 != qb1 && qp1->qb_len == 0)
2422: qp1 = qp1->qb_forw;
2423: while (qp2 != qb2 && qp2->qb_len == 0)
2424: qp2 = qp2->qb_forw;
2425: if (qp1 == qb1 && qp2 == qb2)
2426: return (0); /* perfect match */
2427:
2428: return (1);
2429: }
2430:
2431: /*
2432: * compare two bitstrings. Including the little bits left at the end but
2433: * not the bits not in the strings
2434: */
2435: bit_cmp(b1, b2)
2436: PE b1, b2;
2437: {
2438: int len1, len2;
2439: register char *cp1, *cp2;
2440:
2441: if (b1 == NULLPE && b2 == NULLPE)
2442: return (0);
2443: if (b1 == NULLPE || b2 == NULLPE)
2444: goto fail;
2445:
2446: if ((cp1 = bitstr2strb(b1, &len1)) == NULL)
2447: goto fail;
2448: if ((cp2 = bitstr2strb(b2, &len2)) == NULL) {
2449: free(cp1);
2450: goto fail;
2451: }
2452:
2453: if (len1 != len2 || bcmp(cp1, cp2, len1/8)) {
2454: free(cp1);
2455: free(cp2);
2456: goto fail;
2457: }
2458:
2459: if (len1 % 8) {
2460: int i;
2461: int mask;
2462:
2463: /* Check those last few bits */
2464: i = len1/8;
2465: mask = (0xff00 >> len1 % 8) & 0xff;
2466: if ((cp1[i] & mask) != (cp2[i] & mask)) {
2467: free(cp1);
2468: free(cp2);
2469: goto fail;
2470: }
2471: }
2472:
2473: free(cp1);
2474: free(cp2);
2475: return (0);
2476:
2477: fail:
2478: return (1);
2479: }
2480:
2481: #define MKMASK 0x7
2482: #define MKSHIFT 6
2483: /*
2484: * Generate a randomish list of PElement s for use as ANY or SET OF ANY ....
2485: */
2486: PE
2487: mkpelist(i)
2488: {
2489: PE pe, fpe = NULL;
2490:
2491: fpe = pe_alloc(PE_CLASS_PRIV, PE_FORM_CONS, (PElementID ) i);
2492: while (i > 0) {
2493: pe = mkpe(i);
2494: pe->pe_next = fpe->pe_cons;
2495: fpe->pe_cons = pe;
2496: i--;
2497: }
2498: return (fpe);
2499: }
2500:
2501: /*
2502: * generate a randomish PElement
2503: */
2504: PE
2505: mkpe(i)
2506: {
2507: int id, class;
2508: PE pe;
2509:
2510: id = i * i + 1;
2511: class = PE_CLASS_PRIV;
2512: switch ((i*i >> MKSHIFT) & MKMASK) {
2513: case 5:
2514: case 0:
2515: pe = flag2prim(i & 0x1, (PElementClass ) class, (PElementID ) id);
2516: break;
2517:
2518: case 6:
2519: case 1:
2520: pe = num2prim(i, (PElementClass ) class, (PElementID ) id);
2521: break;
2522:
2523: case 7:
2524: case 2:
2525: pe = str2prim("mkpelist:testdata", 17, (PElementClass ) class,
2526: (PElementID ) id);
2527: break;
2528:
2529: case 3:
2530: pe = strb2bitstr("\021\0245\375\0124", 4,
2531: (PElementClass ) class, (PElementID ) id);
2532: break;
2533:
2534: case 4:
2535: pe = mkpelist(i - 1);
2536: break;
2537:
2538: default:
2539: ferrd(1, "mkpelist:internal error %d case not handled\n",
2540: (i*i >> MKSHIFT) & MKMASK);
2541: }
2542:
2543: return (pe);
2544: }
2545:
2546: #define OID_SIZE 6
2547: /*
2548: * make an OID for testing
2549: */
2550: OID
2551: mkoid(i)
2552: int i;
2553: {
2554: OID oid;
2555: int oid_cnt = i % OID_SIZE;
2556:
2557: if ((oid = new(struct OIDentifier)) == NULL) {
2558: (void) printf("mkoid:calloc did not work\n");
2559: return NULL;
2560: }
2561: if (oid_cnt < 2)
2562: oid_cnt = 2; /* At least two integers long */
2563: oid->oid_nelem = oid_cnt;
2564: if ((oid->oid_elements =
2565: (unsigned int *)calloc((unsigned ) oid_cnt, sizeof (int))) == NULL) {
2566: (void) printf("mkoid:calloc 2 did not work\n");
2567: return NULL;
2568: }
2569: while (oid_cnt > 2) {
2570: oid->oid_elements[oid_cnt - 1] = oid_cnt*i + 33;
2571: oid_cnt--;
2572: }
2573:
2574: oid->oid_elements[0] = 1;
2575: oid->oid_elements[1] = 17;
2576:
2577:
2578: return (oid);
2579: }
2580:
2581: /*
2582: * Produce an External structure initialised to test values
2583: * for testing EXTERNAL encoding routines
2584: */
2585: struct type_UNIV_EXTERNAL *
2586: mkext(i)
2587: int i;
2588: {
2589: int k;
2590: struct type_UNIV_EXTERNAL *p;
2591:
2592: k = i + 2;
2593: k *= k; /* generate a more random looking number */
2594: k %= 51; /* Keep it in a reasonable bounds to avoid overflow */
2595: if ((p = new(struct type_UNIV_EXTERNAL)) == NULL
2596: || (p->encoding = new(struct choice_UNIV_0)) == NULL)
2597: ferr(1, "mkext:malloc:out of memory\n");
2598:
2599: if (i & 0x1)
2600: p->direct__reference = mkoid(i*3);
2601:
2602: p->indirect__reference = k & 0x7c;
2603:
2604: p->data__value__descriptor = str2qb("A very wild type of data", 25, 1);
2605:
2606: switch (p->encoding->offset = (k % choice_UNIV_0_arbitrary) + 1) {
2607:
2608: case choice_UNIV_0_arbitrary:
2609: p->encoding->un.single__ASN1__type = mkpe(k % 7);
2610: break;
2611:
2612: case choice_UNIV_0_single__ASN1__type:
2613: p->encoding->un.single__ASN1__type = mkpe(k % 5);
2614: break;
2615:
2616: case choice_UNIV_0_octet__aligned:
2617: p->encoding->un.octet__aligned = str2qb("Some test data", 15, 1);
2618: break;
2619:
2620: default:
2621: ferrd(1, "mkext:internal error: bad offset %d\n", p->encoding->offset);
2622:
2623: }
2624:
2625: return (p);
2626: }
2627:
2628: /*
2629: * compare two external types to see if they are identical - return zero if
2630: * they are and non zero if they are different
2631: */
2632: ext_cmp(e1, e2)
2633: register struct type_UNIV_EXTERNAL *e1, *e2;
2634: {
2635: if (e1->direct__reference != NULLOID && e2->direct__reference != NULLOID) {
2636: if (oid_cmp(e1->direct__reference, e2->direct__reference))
2637: return (1);
2638: } else {
2639: if (e1->direct__reference != NULLOID || e2->direct__reference != NULLOID)
2640: return (1);
2641: if (e1->indirect__reference != e2->indirect__reference)
2642: return (1);
2643: }
2644: if (e1->data__value__descriptor != NULLQB
2645: && e2->data__value__descriptor != NULLQB) {
2646: if (qb_cmp(e1->data__value__descriptor, e2->data__value__descriptor))
2647: return (1);
2648: } else if (e1->data__value__descriptor != NULLQB
2649: || e2->data__value__descriptor != NULLQB)
2650: return (1);
2651: if (e1->encoding == NULL || e2->encoding == NULL)
2652: return (1);
2653: if (e1->encoding->offset != e2->encoding->offset)
2654: return (1);
2655: switch (e1->encoding->offset) {
2656: case choice_UNIV_0_single__ASN1__type:
2657: if (e1->encoding->un.single__ASN1__type == NULLPE
2658: || e2->encoding->un.single__ASN1__type == NULLPE)
2659: return (1);
2660: if (pe_cmp(e1->encoding->un.single__ASN1__type,
2661: e2->encoding->un.single__ASN1__type))
2662: return (1);
2663: break;
2664:
2665: case choice_UNIV_0_octet__aligned:
2666: if (e1->encoding->un.octet__aligned == NULLQB
2667: || e2->encoding->un.octet__aligned == NULLQB)
2668: return (1);
2669: if (qb_cmp(e1->encoding->un.octet__aligned,
2670: e2->encoding->un.octet__aligned))
2671: return (1);
2672: break;
2673:
2674: case choice_UNIV_0_arbitrary:
2675: if (e1->encoding->un.arbitrary == NULLPE
2676: || e2->encoding->un.arbitrary == NULLPE)
2677: return (1);
2678: if (pe_cmp(e1->encoding->un.arbitrary,
2679: e2->encoding->un.arbitrary))
2680: return (1);
2681: break;
2682:
2683: default:
2684: ferrd(1, "ext_cmp:illegal offset value %d\n", e1->encoding->offset);
2685: }
2686:
2687: return (0);
2688: }
2689: /*
2690: * print the PE structure pointed to by pe
2691: */
2692: print_pe(pe, n)
2693: PE pe;
2694: int n;
2695: {
2696:
2697: if (pe == NULL)
2698: return;
2699: (void) printf("%*s", 4 * n, "");
2700: #if 0
2701: (void) printf("error = %d, context = %x, class = %x, form = %x, id = %x\n",
2702: pe->pe_errno, pe->pe_context, pe->pe_class, pe->pe_form, pe->pe_id);
2703: #endif
2704: if (pe->pe_errno)
2705: (void) printf(" errno = %d", pe->pe_errno);
2706: if (pe->pe_class == PE_CLASS_UNIV)
2707: (void) printf(" %s", idname( (int )pe->pe_id));
2708: else if (pe->pe_class == PE_CLASS_CONT)
2709: (void) printf("[%d]", pe->pe_id);
2710: else
2711: (void) printf("[%s %d]", clname( (int )pe->pe_class), pe->pe_id);
2712:
2713: (void) printf("\n");
2714:
2715: #if 0
2716: (void) printf("%*s", 4 * n, "");
2717: (void) printf("cardinality = %d offset = %d\n", pe->pe_cardinal, pe->pe_offset);
2718: #endif
2719: if (pe->pe_form != 0x0) {
2720: if (pe->pe_cons != NULLPE)
2721: print_pe(pe->pe_cons, n + 1);
2722: } else {
2723: (void) printf("%*s", 4 * n, "");
2724: switch (pe->pe_id) {
2725: case PE_PRIM_BOOL:
2726: (void) printf("%d", prim2flag(pe));
2727: break;
2728:
2729: case PE_PRIM_INT:
2730: (void) printf(" %d", prim2num(pe));
2731: break;
2732: case PE_PRIM_BITS:
2733: prntbits(pe);
2734: break;
2735:
2736: case PE_PRIM_OCTS:
2737: (void) prntos(pe);
2738: break;
2739:
2740: case PE_PRIM_NULL:
2741: break;
2742:
2743:
2744: case PE_DEFN_NUMS:
2745: case PE_DEFN_PRTS:
2746: case PE_DEFN_T61S:
2747: case PE_DEFN_VTXS:
2748: case PE_DEFN_IA5S:
2749: case PE_DEFN_GFXS:
2750: case PE_DEFN_VISS:
2751: case PE_DEFN_GENS:
2752: case PE_DEFN_CHRS:
2753: (void) prntstr(pe);
2754: break;
2755:
2756:
2757: case PE_PRIM_OID:
2758: case PE_CONS_EXTN:
2759: case PE_PRIM_REAL:
2760: case PE_PRIM_ENUM:
2761: case PE_PRIM_ENCR:
2762:
2763: case PE_CONS_SEQ:
2764: case PE_CONS_SET:
2765:
2766: case PE_DEFN_UTCT:
2767: case PE_DEFN_GENT:
2768: default:
2769: (void) printf("Unimplemented %d ", pe->pe_id);
2770: break;
2771: }
2772: (void) printf("\n");
2773: }
2774: if (pe->pe_next != NULLPE) {
2775: (void) printf("%*s", 4 * n, "pe_next:\n");
2776: print_pe(pe->pe_next, n);
2777: }
2778: }
2779:
2780: /*
2781: * return the string describing that class
2782: */
2783: static char *
2784: clname(cl)
2785: int cl;
2786: {
2787: char *p;
2788: static char buf[30];
2789:
2790: switch (cl) {
2791: case PE_CLASS_UNIV:
2792: p = "Universal";
2793: break;
2794:
2795: case PE_CLASS_APPL:
2796: p = "Application";
2797: break;
2798:
2799: case PE_CLASS_CONT:
2800: p = "Context";
2801: break;
2802:
2803: case PE_CLASS_PRIV:
2804: p = "Private";
2805: break;
2806:
2807: default:
2808: (void) sprintf(buf, "Unknown Class %d", cl);
2809: p = buf;
2810: break;
2811: }
2812: return (p);
2813: }
2814:
2815:
2816: /*
2817: * return the string describing that identity or the number itself
2818: * Assuming a Universal class
2819: */
2820: static char *
2821: idname(id)
2822: int id;
2823: {
2824: char *p;
2825: static char buf[40];
2826:
2827: switch (id) {
2828: case PE_PRIM_BOOL:
2829: p = "Boolean";
2830: break;
2831:
2832: case PE_PRIM_INT:
2833: p = "Integer";
2834: break;
2835:
2836: case PE_PRIM_BITS:
2837: p = "Bit String";
2838: break;
2839:
2840: case PE_PRIM_OCTS:
2841: p = "Octet String";
2842: break;
2843:
2844: case PE_PRIM_NULL:
2845: p = "Null";
2846: break;
2847:
2848: case PE_PRIM_OID:
2849: p = "Object Descriptor";
2850: break;
2851:
2852: case PE_CONS_EXTN:
2853: p = "External";
2854: break;
2855:
2856: case PE_PRIM_REAL:
2857: p = "Real";
2858: break;
2859:
2860: case PE_PRIM_ENUM:
2861: p = "Enumerated Type";
2862: break;
2863:
2864: case PE_PRIM_ENCR:
2865: p = "Encrypted Type";
2866: break;
2867:
2868: case PE_CONS_SEQ:
2869: p = "Sequence";
2870: break;
2871:
2872: case PE_CONS_SET:
2873: p = "Set";
2874: break;
2875:
2876: case PE_DEFN_NUMS:
2877: p = "Numeric String";
2878: break;
2879:
2880: case PE_DEFN_PRTS:
2881: p = "Printable String";
2882: break;
2883:
2884: case PE_DEFN_T61S:
2885: p = "T.61 String";
2886: break;
2887:
2888: case PE_DEFN_VTXS:
2889: p = "Videotex String";
2890: break;
2891:
2892: case PE_DEFN_IA5S:
2893: p = "IA5 String";
2894: break;
2895:
2896: case PE_DEFN_UTCT:
2897: p = "UTC Time";
2898: break;
2899:
2900: case PE_DEFN_GENT:
2901: p = "Generalised Time";
2902: break;
2903:
2904: case PE_DEFN_GFXS:
2905: p = "Graphics String";
2906: break;
2907:
2908: case PE_DEFN_VISS:
2909: p = "Visable String";
2910: break;
2911:
2912: case PE_DEFN_GENS:
2913: p = "General String";
2914: break;
2915:
2916: case PE_DEFN_CHRS:
2917: p = "Character String";
2918: break;
2919:
2920: default:
2921: (void) sprintf(buf, "Unknown Universal %d", id);
2922: p = buf;
2923: break;
2924: }
2925: return (p);
2926: }
2927: /*
2928: * Print out the value of a bits string
2929: */
2930: static prntbits(pe)
2931: PE pe;
2932: {
2933: int len, i;
2934:
2935: if ((len = pe->pe_nbits) < 0) {
2936: (void) printf("prntbits:Bad bistring\n");
2937: return;
2938: }
2939: (void) printf("Bits:");
2940: for (i = 0; i < len; i++)
2941: if (bit_test(pe, i))
2942: (void) printf(" %d", i);
2943:
2944: (void) putchar('\n');
2945: }
2946:
2947: /*
2948: * Dump a bunch of hex digits printing out those that are printable
2949: * Print out a given length of octets as hex (with the ASCII
2950: * characters given if they have any
2951: */
2952: static pclen(s, len)
2953: register char *s;
2954: register int len;
2955: {
2956: register int cnt = 0;
2957:
2958: while (len-- > 0) {
2959: if (cnt % 8 == 0)
2960: (void) printf("\n%d:", cnt / 8 + 1);
2961: if (isprint(*s & 0x7f))
2962: (void) printf("\t%02x(%c)", *s & 0xff, *s & 0x7f);
2963: else
2964: (void) printf("\t%02x", *s & 0xff);
2965: s++;
2966: cnt++;
2967: }
2968: (void) putchar('\n');
2969: }
2970:
2971: /*
2972: * print out an octet string
2973: */
2974: static prntos(pe)
2975: PE pe;
2976: {
2977: struct qbuf *qb;
2978:
2979: if ((qb = prim2qb(pe)) == NULL) {
2980: bad:
2981: (void) printf("prntos:bad octet string\n");
2982: return (NOTOK);
2983: }
2984: if (qb_pullup(qb) == NOTOK)
2985: goto bad;
2986:
2987: if (qb->qb_forw->qb_data == NULL || qb->qb_forw->qb_len < 0)
2988: goto bad;
2989:
2990: pclen(qb->qb_forw->qb_data, qb->qb_forw->qb_len);
2991: return (OK);
2992: }
2993:
2994: /*
2995: * print out a string which should be printable
2996: */
2997: static prntstr(pe)
2998: PE pe;
2999: {
3000: struct qbuf *qb;
3001:
3002: if ((qb = prim2qb(pe)) == NULL) {
3003: bad:
3004: (void) printf("prntstr:bad string\n");
3005: return (NOTOK);
3006: }
3007: if (qb_pullup(qb) == NOTOK)
3008: goto bad;
3009:
3010: if (qb->qb_forw->qb_data == NULL || qb->qb_forw->qb_len < 0)
3011: goto bad;
3012:
3013: (void) printf("\"%s\"", qb->qb_forw->qb_data);
3014: return (OK);
3015: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.