Start development on 386BSD 0.0
[unix-history] / .ref-BSD-4_3_Net_2 / usr / src / contrib / isode / pepsy / t3.py
CommitLineData
459ebbd7
C
1
2T3 DEFINITIONS ::=
3
4%{
5/*
6 * this stuff is to test the verbatim actions at the start of the
7 * type definitions
8 */
9%}
10
11BEGIN
12
13
14
15Pepy-refs [[ P struct pepy_refs * ]] ::= SEQUENCE {
16 [1] IMPLICIT INTEGER [[ i parm->t_int ]],
17 [2] IMPLICIT ENUMERATED [[ i parm->t_enum ]] {
18 orange(1), apple(2), pear(3), bannana(4) },
19
20 [3] IMPLICIT OCTET STRING [[ q parm->t_qbuf ]],
21 [4] IMPLICIT OCTET STRING [[ s parm->t_string ]],
22 [5] IMPLICIT OCTET STRING [[ o parm->t_ostring $ parm->t_olen ]],
23 [6] IMPLICIT BIT STRING [[ t parm->t_pe ]],
24 [7] IMPLICIT BIT STRING [[ x parm->t_bstring $ t_blen ]],
25 [8] IMPLICIT BOOLEAN [[ b parm->t_bool ]],
26 [9] IMPLICIT OBJECT IDENTIFIER [[ O parm->t_oid ]],
27 [10] IMPLICIT REAL [[ r parm->t_real ]],
28 [11] ANY [[ a parm->t_any ]],
29 [12] Def-types [[ p parm->t_def ]],
30 [13] Opt-types [[ p parm->t_opt ]] OPTIONAL
31
32 }
33
34-- Optional and Default test cases
35
36Def-types [[ P struct pepy_refs1 * ]] ::= SEQUENCE {
37 [1] INTEGER [[ i parm->t_int ]] DEFAULT 2,
38 [2] IMPLICIT INTEGER [[ i parm->t_int1 ]] DEFAULT 2,
39 [3] IMPLICIT ENUMERATED [[ i parm->t_enum ]]
40 { orange(1), apple(2), pear(3), bannana(4) } DEFAULT pear,
41
42 [4] ENUMERATED [[ i parm->t_enum1 ]] {
43 orange(1), apple(2), pear(3), bannana(4) } DEFAULT pear,
44 [5] IMPLICIT OCTET STRING [[ q parm->t_qbuf ]]
45 DEFAULT '536f6d65206973206f757420746865726521'H,
46 [6] OCTET STRING [[ q parm->t_qbuf1 ]]
47 DEFAULT '536f6d65206973206f757420746865726521'H,
48 [7] IMPLICIT OCTET STRING [[ s parm->t_string ]] DEFAULT '003132'h,
49 [8] OCTET STRING [[ s parm->t_string1 ]] DEFAULT '003132'h,
50 [9] IMPLICIT OCTET STRING [[ o parm->t_ostring $ parm->t_olen ]]
51 DEFAULT 'ff01ab20'h,
52 [10] OCTET STRING [[ o parm->t_ostring1 $ parm->t_olen1 ]]
53 DEFAULT 'ff01ab20'h,
54 [11] IMPLICIT BIT STRING [[ t parm->t_pe ]]
55 DEFAULT '00010010001100010001101000110111001010101'B,
56 [12] BIT STRING [[ t parm->t_pe1 ]]
57 DEFAULT '00010010001100010001101000110111001010101'B,
58 [13] IMPLICIT BIT STRING [[ x parm->t_bstring $ t_blen ]]
59 DEFAULT '00000000001100010011001000110011'B,
60 [14] BIT STRING [[ x parm->t_bstring1 $ t_blen1 ]]
61 DEFAULT '00000000001100010011001000110011'B,
62 [15] IMPLICIT BOOLEAN [[ b parm->t_bool ]] DEFAULT TRUE,
63 [16] BOOLEAN [[ b parm->t_bool ]] DEFAULT TRUE,
64 [17] IMPLICIT OBJECT IDENTIFIER [[ O parm->t_oid ]], -- one day DEFAULT 1.17.42,
65 [18] OBJECT IDENTIFIER [[ O parm->t_oid1 ]] OPTIONAL, -- one day DEFAULT 1.17.42,
66 [19] IMPLICIT REAL [[ r parm->t_real ]] DEFAULT { 306998, 10, -5 },
67 [20] REAL [[ r parm->t_real1 ]] DEFAULT { 306998, 10, -5 },
68 [21] ANY [[ a parm->t_any ]] OPTIONAL
69
70 }
71
72Opt-types [[ P struct pepy_refs1 * ]] ::= SEQUENCE {
73 [1] IMPLICIT INTEGER [[ i parm->t_int ]] OPTIONAL << opt_set $ OPT_INT1 >>,
74 [2] INTEGER [[ i parm->t_int1 ]] OPTIONAL << opt_set $ OPT_INT2 >>,
75 [3] IMPLICIT ENUMERATED [[ i parm->t_enum ]] {
76 orange(1), apple(2), pear(3), bannana(4) } OPTIONAL << opt_set $ OPT_ENUM1 >>,
77 [4] ENUMERATED [[ i parm->t_enum1 ]] {
78 orange(1), apple(2), pear(3), bannana(4) } OPTIONAL << opt_set $ OPT_ENUM2 >>,
79
80 [5] IMPLICIT OCTET STRING [[ q parm->t_qbuf ]] OPTIONAL,
81 [6] OCTET STRING [[ q parm->t_qbuf1 ]] OPTIONAL,
82 [7] IMPLICIT OCTET STRING [[ s parm->t_string ]] OPTIONAL,
83 [8] OCTET STRING [[ s parm->t_string1 ]] OPTIONAL,
84 [9] IMPLICIT OCTET STRING [[ o parm->t_ostring $ parm->t_olen ]]
85 OPTIONAL,
86 [10] OCTET STRING [[ o parm->t_ostring1 $ parm->t_olen1 ]]
87 OPTIONAL,
88 [11] IMPLICIT BIT STRING [[ t parm->t_pe ]] OPTIONAL,
89 [12] BIT STRING [[ t parm->t_pe1 ]] OPTIONAL,
90 [13] IMPLICIT BIT STRING [[ x parm->t_bstring $ t_blen ]] OPTIONAL,
91 [14] BIT STRING [[ x parm->t_bstring1 $ t_blen1 ]] OPTIONAL,
92 [15] IMPLICIT BOOLEAN [[ b parm->t_bool ]] OPTIONAL << opt_set $ OPT_BOOL1>>,
93 [16] BOOLEAN [[ b parm->t_bool1 ]] OPTIONAL << opt_set $ OPT_BOOL2>>,
94 [17] IMPLICIT OBJECT IDENTIFIER [[ O parm->t_oid ]], -- one day OPTIONAL,
95 [18] IMPLICIT REAL [[ r parm->t_real ]] OPTIONAL << opt_set $ OPT_REAL1 >>,
96 [19] REAL [[ r parm->t_real1 ]] OPTIONAL << opt_set $ OPT_REAL2 >>,
97 [20] ANY [[ a parm->t_any ]]
98
99 }
100
101 Single-type [[ P struct pepy_refs1 * ]] ::= SEQUENCE {
102 a SEQUENCE [[ T struct pepy_refs1 * $ * ]] {
103 [1] IMPLICIT INTEGER [[ i parm->t_int ]] OPTIONAL << opt_set $ OPT_INT1 >>
104 },
105 b SEQUENCE [[ T struct pepy_refs1 * $ * ]] {
106 [2] INTEGER [[ i parm->t_int1 ]] OPTIONAL << opt_set $ OPT_INT2 >>
107 },
108
109 c SET [[ T struct pepy_refs1 * $ *parm ]] {
110 [3] IMPLICIT ENUMERATED [[ i parm->t_enum ]] {
111orange(1), apple(2), pear(3), bannana(4) } OPTIONAL << opt_set $ OPT_ENUM1 >>
112 },
113 d SET [[ T struct pepy_refs1 * $ *parm ]] {
114 [4] ENUMERATED [[ i parm->t_enum1 ]] {
115orange(1), apple(2), pear(3), bannana(4) } OPTIONAL << opt_set $ OPT_ENUM2 >>
116 }
117 }
118
119 Repeated [[ P struct repeats * ]]::= SEQUENCE {
120 a SEQUENCE OF [[ T struct rep_int * $ rp_sq1 ]]
121 <<r>> [1] INTEGER [[ i i ]],
122
123 b SEQUENCE OF [[ T struct rep_elem * $ rp_sq2 ]] <<r_next>>
124 Rep-elem [[ p * ]],
125
126 c SET OF [[ T struct rep_int * $ rp_st1 ]] <<r>> INTEGER [[ i i ]],
127
128 d SET OF [[ T struct rep_elem * $ rp_st2 ]] <<r_next>>
129 [3] IMPLICIT Rep-elem [[ p * ]],
130
131 e CHOICE [[ T struct repeats * $ * ]] <<rp_choice>> {
132 [1] INTEGER [[ i rp_int ]],
133 [2] BOOLEAN [[ b rp_bool ]],
134 [3] OCTET STRING [[ o rp_ostring $ rp_int ]]
135 }
136 }
137
138 Rep-elem [[ P struct rep_elem * ]]
139 ::= SEQUENCE {
140 a INTEGER [[ i r_int ]],
141 b OCTET STRING [[ s r_ostring ]],
142 c BIT STRING [[ x r_bstring $ r_int ]]
143 }
144
145 Defined [[ P struct pepy_refs * ]] ::=
146 SEQUENCE {
147 a PrintableString [[ s t_string ]],
148 b [ APPLICATION 3 ] AString [[ q t_qbuf ]],
149 c [ APPLICATION 3 ] IMPLICIT AnOctetString [[ o t_ostring $ t_olen ]],
150 d BitsAndPieces [[ x t_bstring $ t_blen ]],
151 e AnAny [[ a t_any ]],
152 ABitString [[ t t_pe ]],
153 AnotherType [[ i t_int ]],
154 [12] AReal [[ r t_real ]],
155 [99] IMPLICIT AnOID [[ O t_oid ]],
156 [13] IMPLICIT Boodles [[ b t_bool ]],
157 AnEnumerated [[ i t_enum ]]
158 }
159
160 AString ::= GraphicString
161
162 AnOctetString ::= OCTET STRING
163
164 BitsAndPieces ::= [31] SomeBits
165
166 SomeBits ::= [APPLICATION 10] IMPLICIT ABitString
167
168 ABitString ::= BIT STRING
169
170 AnAny ::= ANY
171
172 AnotherType ::= [21] AnInteger
173
174 AnInteger ::= INTEGER
175
176 AReal ::= REAL
177
178 AnOID ::= OBJECT IDENTIFIER
179
180 Boodles ::= [PRIVATE 9] ABoolean
181
182 ABoolean ::= [APPLICATION 12] BOOLEAN
183
184 AnEnumerated ::= [4] ENUMERATED { orange(1), apple(2), pear(3), bannana(4) }
185 -- Coding functions tests
186
187 CodeTest [[ P struct codedata * ]] ::= SEQUENCE {
188 a BasicANY [[ p cd_a ]],
189 b [42] E-ANY [[ p cd_b ]],
190 c [36] D-ANY [[ p cd_c ]],
191 d DE-ANY [[ p cd_d ]],
192 e [APPLICATION 44] IMPLICIT INTEGER [[ i cd_int ]]
193 [[ E get_int ]] [[ D put_int ]] DEFAULT 1,
194 f [17] GraphicString [[ s cd_string ]]
195 [[ E get_string ]][[ D put_string ]] [[ F fr_string ]] OPTIONAL,
196 left CodeOpt [[ p cd_left ]] OPTIONAL,
197 right CodeDflt [[ p cd_right ]] OPTIONAL
198 }
199
200 BasicANY ::= ANY [[ a * ]]
201
202 E-ANY ::= ANY [[ a * ]] [[ E get_pe ]]
203
204 D-ANY ::= ANY [[ a * ]] [[ D put_pe ]] [[ F fr_pe ]]
205
206 DE-ANY ::= ANY [[ a * ]] [[ D put_pe ]] [[ E get_pe ]]
207
208 CodeOpt [[ P struct codedata * ]] ::= SEQUENCE {
209 a [PRIVATE 5] BasicANY [[ p cd_a ]] OPTIONAL,
210 b [35] E-ANY [[ p cd_b ]] OPTIONAL,
211 c [45] EXPLICIT D-ANY [[ p cd_c ]] OPTIONAL <<cd_opt_set $ CD_C>>,
212 d [1] DE-ANY [[ p cd_d ]] OPTIONAL <<cd_opt_set $ CD_D>>,
213 e [15] IMPLICIT INTEGER [[ i cd_int ]] [[ E get_int ]] [[ D put_int ]]
214 OPTIONAL << cd_opt_set $ CD_INT >>,
215 f GraphicString [[ s cd_string ]] [[ E get_string ]][[ D put_string ]]
216 OPTIONAL
217 }
218
219 -- It would be nice to do DEFAULTs for ANY but how do we specify
220 -- DEFAULT ANY in the ASN.1 ?? Let alone parse it
221
222 CodeDflt [[ P struct codedata * ]] ::= SEQUENCE {
223 a [1] BasicANY [[ p cd_a ]] OPTIONAL,
224 b [2] E-ANY [[ p cd_b ]] OPTIONAL,
225 c [3] D-ANY [[ p cd_c ]] OPTIONAL <<cd_opt_set $ CD_C>>,
226 d [4] DE-ANY [[ p cd_d ]] OPTIONAL <<cd_opt_set $ CD_D>>,
227 e [APPLICATION 4] INTEGER [[ i cd_int ]] [[ E get_int ]] [[ D put_int ]]
228 DEFAULT 3,
229 f [90] IMPLICIT GraphicString [[ s cd_string ]] [[ E get_string2 ]]
230 [[ D put_string2 ]] DEFAULT '536f6d65206973206f7574'H
231 }
232
233 Simple1 [[ P struct codedata * ]] ::= CodeDflt [[ p cd_right ]]
234
235 Simple2 [[ P struct codedata * ]] ::= INTEGER [[ i cd_int ]]
236
237 Simple3 [[ P struct codedata * ]] ::= [1] INTEGER [[ i cd_int1 ]]
238
239 Simple4 [[ P struct codedata * ]] ::= [1] IMPLICIT INTEGER [[ i cd_int2 ]]
240
241 Simple5 [[ P struct codedata * ]] ::= OCTET STRING [[ s cd_string ]]
242
243 Simple6 [[ P struct codedata * ]] ::= [1] OCTET STRING [[ s cd_string1 ]]
244
245 Simple7 [[ P struct codedata * ]] ::= [1] IMPLICIT OCTET STRING
246 [[ s cd_string2 ]]
247
248 Simple8 [[ P struct codedata * ]] ::= OBJECT IDENTIFIER [[ O cd_oid ]]
249
250 Simple9 [[ P struct codedata * ]] ::= [1] OBJECT IDENTIFIER [[ O cd_oid1 ]]
251
252 Simple10 [[ P struct codedata * ]] ::= [1] IMPLICIT OBJECT IDENTIFIER
253 [[ O cd_oid2 ]]
254
255 Simple11 [[ P struct codedata * ]] ::= ANY [[ a cd_a ]]
256
257 Simple12 [[ P struct codedata * ]] ::= BIT STRING [[ t cd_bit ]]
258
259 Simple13 [[ P struct codedata * ]] ::= REAL [[ r cd_real ]]
260
261 Simple14 [[ P struct codedata * ]] ::= BOOLEAN [[ b cd_bool ]]
262
263 AllSimples [[ P struct codedata * ]] ::= SEQUENCE {
264
265 a Simple1 [[ p * ]],
266 b Simple2 [[ p * ]],
267 c Simple3 [[ p * ]],
268 d Simple4 [[ p * ]],
269 e Simple5 [[ p * ]],
270 f Simple6 [[ p * ]],
271 g Simple7 [[ p * ]],
272 h Simple8 [[ p * ]],
273 i Simple9 [[ p * ]],
274 j Simple10 [[ p * ]],
275 k Simple11 [[ p * ]],
276 l Simple12 [[ p * ]],
277 m Simple13 [[ p * ]],
278 n Simple14 [[ p * ]]
279
280 }
281
282 UAction [[ P struct repeats * ]]::= SEQUENCE {
283 a SEQUENCE OF [[ T struct rep_int * $ rp_sq1 ]]
284 <<r>> [1] INTEGER [[ i i ]],
285
286 b SEQUENCE OF [[ T struct rep_elem * $ rp_sq2 ]] <<r_next>>
287 Rep-action [[ p * ]],
288
289 c SET OF [[ T struct rep_int * $ rp_st1 ]] <<r>> INTEGER [[ i i ]],
290
291 d SET OF [[ T struct rep_elem * $ rp_st2 ]] <<r_next>>
292 %E{ (void) printf("encoding SET OF Rep-action\n");%}
293 [3] IMPLICIT Rep-action [[ p * ]],
294
295 e CHOICE [[ T struct repeats * $ * ]] <<rp_choice>> {
296 %D{ (void) printf("Before Encoding CHOICE\n"); %}
297 [1] INTEGER [[ i rp_int ]],
298 [2]
299 %E{ (void) printf("encoding Boolean %d\n", parm->rp_bool);%}
300 BOOLEAN [[ b rp_bool ]]
301 %D{ (void) printf("Decoding Boolean\n"); %},
302 [3] OCTET STRING [[ o rp_ostring $ rp_int ]]
303 }
304 %D{ (void) printf("After Decoding CHOICE: chosen %d\n", (*parm)->rp_choice); %}
305 } %D{ (void) printf("After Decoding UAction\n"); %}
306
307 Rep-action [[ P struct rep_elem * ]]
308 ::=
309 %D{ (void) printf("Before Decoding Rep-action\n"); %}
310 SEQUENCE {
311 %E{ (void) printf("before encoding INTEGER %d\n", parm->r_int);%}
312 a INTEGER [[ i r_int ]],
313 %E{ (void) printf("before encoding OCTET STRING \"%s\"\n",
314 parm->r_ostring);
315 %}
316 b OCTET STRING [[ s r_ostring ]],
317 %E{
318 int i;
319
320 (void) printf("before encoding BIT STRING: ");
321 for (i = 0; i < parm->r_int; i++) {
322 if (BITTEST(parm->r_bstring, i))
323 (void) putchar('1');
324 else
325 (void) putchar('0');
326 }
327 (void) putchar('\n');
328
329 %}
330 c BIT STRING [[ x r_bstring $ r_int ]]
331 %E{
332 (void) printf("After Bitstring encoding:");
333 vunknown(*ppe);
334 %}
335 }
336 %E{
337 (void) printf("After Sequence encoding:\n");
338 vunknown(*ppe);
339 %}
340 %D{
341 int i;
342
343 (void) printf("After Decoding Rep-action:\n");
344 (void) printf("rp_int %d\n", (*parm)->r_int);
345 (void) printf("r_ostring \"%s\"\n", (*parm)->r_ostring);
346 (void) printf("r_bstring: ");
347
348 for (i = 0; i < (*parm)->r_int; i++) {
349 if (BITTEST((*parm)->r_bstring, i))
350 (void) putchar('1');
351 else
352 (void) putchar('0');
353 }
354 (void) putchar('\n');
355
356 %}
357
358END
359%{
360
361/*
362 * Encoding function for test examples of the Coding functions in t3.py
363 */
364
365get_pe(parm, ppe)
366PE parm;
367PE *ppe;
368{
369 if (ppe == (PE *)0) {
370 if (parm == NULLPE) /* Optional */
371 return (OK + 1);
372 return (OK);
373 }
374
375 *ppe = pe_cpy(parm);
376 return (OK);
377}
378
379put_pe(parm, pe)
380PE *parm;
381PE pe;
382{
383 *parm = pe_cpy(pe);
384 return (OK);
385}
386
387get_int(parm, ppe)
388struct codedata *parm;
389PE *ppe;
390{
391 if (ppe == (PE *)0) {
392 if (parm->cd_int == 1) /* Default case */
393 return (OK + 1);
394 return (OK);
395 }
396
397 *ppe = int2prim(parm->cd_int);
398 return (OK);
399}
400
401put_int(parm, pe)
402struct codedata **parm;
403PE pe;
404{
405 if (pe)
406 (*parm)->cd_int = prim2num(pe);
407 else
408 (*parm)->cd_int = 1; /* Default */
409 return (OK);
410}
411
412get_string(parm, ppe)
413struct codedata *parm;
414PE *ppe;
415{
416 if (ppe == (PE *)0) {
417 if (parm->cd_string == NULLCP) /* Not present */
418 return (OK + 1);
419 return (OK);
420 }
421
422 *ppe = str2prim(parm->cd_string, strlen(parm->cd_string), 0, 0);
423 return (OK);
424}
425
426put_string(parm, pe)
427struct codedata **parm;
428PE pe;
429{
430 int len;
431
432 if (pe)
433 (*parm)->cd_string = prim2str(pe, &len);
434 else
435 (*parm)->cd_string = NULLCP; /* Default */
436
437 return (OK);
438}
439get_string2(parm, ppe)
440struct codedata *parm;
441PE *ppe;
442{
443 if (ppe == (PE *)0) {
444 if (parm->cd_string == NULLCP
445 || strcmp(parm->cd_string, "Some is out") == 0)/* Not present */
446 return (OK + 1);
447 return (OK);
448 }
449
450 *ppe = str2prim(parm->cd_string, strlen(parm->cd_string), 0, 0);
451 return (OK);
452}
453
454put_string2(parm, pe)
455struct codedata **parm;
456PE pe;
457{
458 int len;
459
460 if (pe)
461 (*parm)->cd_string = prim2str(pe, &len);
462 else
463 (*parm)->cd_string = strdup("Some is out"); /* Default */
464
465 return (OK);
466}
467
468fr_string(parm)
469struct codedata *parm;
470{
471 if (parm->cd_string)
472 free(parm->cd_string);
473
474 return (OK);
475}
476
477fr_pe(parm)
478PE parm;
479{
480 if (parm)
481 pe_free(parm);
482
483 return (OK);
484}
485
486%}
487